This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "FusionForge".
The branch, master has been updated
via 5f09ddc1cba8f62d49a68cf3ceac2cf0e061d982 (commit)
from f0db7459ba24259411a4915f5c9d208342ba114b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://scm.fusionforge.org/anonscm/gitweb/?p=fusionforge/fusionforge.git;a=commitdiff;h=5f09ddc1cba8f62d49a68cf3ceac2cf0e061d982
commit 5f09ddc1cba8f62d49a68cf3ceac2cf0e061d982
Author: Stéphane-Eymeric Bredthauer <[email protected]>
Date: Mon May 29 20:11:59 2017 +0200
Tracker: Artifacts dependencies, part 3
diff --git a/src/common/tracker/Artifact.class.php
b/src/common/tracker/Artifact.class.php
index 4c7af0c..25097a5 100644
--- a/src/common/tracker/Artifact.class.php
+++ b/src/common/tracker/Artifact.class.php
@@ -54,6 +54,7 @@ require_once $gfcommon.'tracker/ArtifactExtraField.class.php';
require_once $gfcommon.'tracker/ArtifactWorkflow.class.php';
require_once $gfcommon.'tracker/ArtifactStorage.class.php';
require_once $gfcommon.'include/MonitorElement.class.php';
+require_once $gfcommon.'tracker/Effort.class.php';
// This string is used when sending the notification mail for identifying the
// user response
@@ -1766,6 +1767,14 @@ class Artifact extends FFObject {
case
ARTIFACT_EXTRAFIELDTYPE_INTEGER:
$sum = 0;
break;
+ case
ARTIFACT_EXTRAFIELDTYPE_EFFORT:
+ $effortUnitSet
= new EffortUnitSet($at, $at->getEffortUnitSet());
+
$effortUnitFactory = new EffortUnitFactory($effortUnitSet);
+
+ $baseUnit =
$effortUnitFactory->getBaseUnit();
+ $sum = 0;
+ $effortSum= new
Effort(0, $baseUnit);
+ break;
}
foreach ($children as $child) {
$childArtifact =
artifact_get_object($child['artifact_id']);
@@ -1787,6 +1796,10 @@ class Artifact extends FFObject {
case
ARTIFACT_EXTRAFIELDTYPE_INTEGER:
$sum = $sum+$childExtra_fields[$childEf_id];
break;
+ case
ARTIFACT_EXTRAFIELDTYPE_EFFORT:
+
$effort = encodedEffortToEffort($childExtra_fields[$childEf_id]);
+
$effortSum= $effortSum->add($effort);
+
$sum = $effortSum->toEncoded();
}
}
}
diff --git a/src/common/tracker/ArtifactExtraField.class.php
b/src/common/tracker/ArtifactExtraField.class.php
index c3a0f7a..47615f9 100644
--- a/src/common/tracker/ArtifactExtraField.class.php
+++ b/src/common/tracker/ArtifactExtraField.class.php
@@ -1282,9 +1282,9 @@ class ArtifactExtraField extends FFError {
$return=
array(ARTIFACT_EXTRAFIELD_AGGREGATION_RULE_NO_AGGREGATION => _('Parent value is
not depending on children\'s values'));
$type = $this->getType();
-// if ($type == ARTIFACT_EXTRAFIELDTYPE_EFFORT) {
-// $return = array_merge($return,
array(ARTIFACT_EXTRAFIELD_AGGREGATION_RULE_SUM => _('Parent value is the sum of
children\'s values')));
-// }
+ if ($type == ARTIFACT_EXTRAFIELDTYPE_EFFORT) {
+ $return = array_merge($return,
array(ARTIFACT_EXTRAFIELD_AGGREGATION_RULE_SUM => _('Parent value is the sum of
children\'s values')));
+ }
if ($type == ARTIFACT_EXTRAFIELDTYPE_INTEGER) {
$return = array_merge($return,
array(ARTIFACT_EXTRAFIELD_AGGREGATION_RULE_SUM => _('Parent value is the sum of
children\'s values')));
diff --git a/src/common/tracker/Effort.class.php
b/src/common/tracker/Effort.class.php
new file mode 100644
index 0000000..1f6624d
--- /dev/null
+++ b/src/common/tracker/Effort.class.php
@@ -0,0 +1,124 @@
+<?php
+/**
+ * FusionForge Effort
+ *
+ * Copyright 2017, Stéphane-Eymeric Bredthauer - TrivialDev
+ *
+ * This file is part of FusionForge. FusionForge is free software;
+ * you can redistribute it and/or modify it under the terms of the
+ * GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the Licence, or (at your option)
+ * any later version.
+ *
+ * FusionForge is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with FusionForge; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+require_once $gfcommon.'include/FFError.class.php';
+require_once $gfcommon.'tracker/EffortUnitFactory.class.php';
+
+class Effort extends FFError {
+
+ /**
+ * @var integer value
+ */
+ private $value;
+
+ /**
+ * @var EffortUnit Effort Unit
+ */
+ private $effortUnit;
+
+ /**
+ * Effort - Effort object constructor
+ *
+ * @param integer
+ * @param EffortUnit
+ */
+ function __construct($value,$effortUnit) {
+ parent::__construct();
+
+ $this->value = $value;
+ $this->effortUnit = $effortUnit;
+
+ return;
+ }
+
+ function getEffortUnit(){
+ return $this->effortUnit;
+ }
+
+ function getValue(){
+ return $this->value;
+ }
+
+ function add(Effort $effort) {
+ $thisFactor =
$this->getEffortUnit()->getConversionFactorForBaseUnit();
+ $effortFactor =
$effort->getEffortUnit()->getConversionFactorForBaseUnit();
+ $add = $this->value*$thisFactor+
$effort->getValue()*$effortFactor;
+ if ($thisFactor >= $effortFactor) {
+ $unit = $this->getEffortUnit();
+ } else {
+ $unit = $effort->getEffortUnit();
+ }
+ if ($add % $unit->getConversionFactorForBaseUnit() != 0) {
+ $effortUnitSet =
$effort->getEffortUnit()->getEffortUnitSet();
+ $effortUnitFactory = new
EffortUnitFactory($effortUnitSet);
+ $unitsObj = $effortUnitFactory->getUnits();
+ $maxFactor = 0;
+ foreach ($unitsObj as $unitObj) {
+ $unitFactor =
$unitObj->getConversionFactorForBaseUnit();
+ if ($unitFactor> $maxFactor && $add %
$unitFactor== 0) {
+ $maxFactor = $thisFactor;
+ $unit = $unitObj;
+ }
+ }
+ }
+ return new Effort($add/$unit->getConversionFactorForBaseUnit(),
$unit);
+ }
+
+ function sub(Effort $effort) {
+ $thisFactor =
$this->getEffortUnit()->getConversionFactorForBaseUnit();
+ $effortFactor =
$effort->getEffortUnit()->getConversionFactorForBaseUnit();
+ $sub = $this->value*$thisFactor -
$effort->getValue()*$effortFactor;
+ if ($thisFactor >= $effortFactor) {
+ $unit = $this->getEffortUnit();
+ } else {
+ $unit = $effort->getEffortUnit();
+ }
+ if ($sub% $unit->getConversionFactorForBaseUnit() != 0) {
+ $effortUnitSet =
$effort->getEffortUnit()->getEffortUnitSet();
+ $effortUnitFactory = new
EffortUnitFactory($effortUnitSet);
+ $unitsObj = $effortUnitFactory->getUnits();
+ $maxFactor = 0;
+ foreach ($unitsObj as $unitObj) {
+ $unitFactor =
$unitObj->getConversionFactorForBaseUnit();
+ if ($unitFactor> $maxFactor && $sub %
$unitFactor== 0) {
+ $maxFactor = $thisFactor;
+ $unit = $unitObj;
+ }
+ }
+ }
+ return new Effort($sub/$unit->getConversionFactorForBaseUnit(),
$unit);
+ }
+ function toEncoded() {
+ return
$this->value*$this->effortUnit->getConversionFactorForBaseUnit().'U'.$this->effortUnit->getID();
+ }
+}
+
+function encodedEffortToEffort($encoded) {
+ if (preg_match('/^(\d+)U(\d+)$/',$encoded,$matches)) {
+ $unit = getEffortUnitById($matches[2]);
+ $value =
intval(intval($matches[1])/$unit->getConversionFactorForBaseUnit());
+ $effort = new Effort($value, $unit);
+ } else {
+ $effort = false;
+ }
+ return $effort;
+}
diff --git a/src/common/tracker/EffortUnit.class.php
b/src/common/tracker/EffortUnit.class.php
index 2e789f6..6c6facb 100644
--- a/src/common/tracker/EffortUnit.class.php
+++ b/src/common/tracker/EffortUnit.class.php
@@ -608,3 +608,28 @@ class EffortUnit extends FFError {
return true;
}
}
+function getEffortUnitById($unit_id){
+ $res = db_query_params ('SELECT * FROM effort_unit INNER JOIN
effort_unit_set USING (unit_set_id) WHERE unit_id=$1',
+ array($unit_id));
+ if (!$res || db_numrows($res) < 1) {
+ return false;
+ }
+ $data_array = db_fetch_array($res);
+ switch ($data_array['level']) {
+ case EFFORTUNITSET_FORGE_LEVEL:
+ $object = null;
+ break;
+ case EFFORTUNITSET_PROJECT_LEVEL:
+ $object= new Group($data_array['group_id']);
+ break;
+ case EFFORTUNITSET_TRACKER_LEVEL:
+ $Group = new Group($data_array['group_id']);
+ $object= new ArtifactType($Group,
$data_array['group_artifact_id']);
+ break;
+ default:
+ $object = null;
+ }
+ $effortUnitSet = new EffortUnitSet($object, $data_array['unit_set_id']);
+ $effortUnit = new EffortUnit($effortUnitSet, $unit_id);
+ return $effortUnit;
+}
diff --git a/src/common/tracker/EffortUnitSet.class.php
b/src/common/tracker/EffortUnitSet.class.php
index bc4f2b5..3e335e6 100644
--- a/src/common/tracker/EffortUnitSet.class.php
+++ b/src/common/tracker/EffortUnitSet.class.php
@@ -21,7 +21,6 @@
*/
require_once $gfcommon.'include/FFError.class.php';
-require_once $gfcommon.'include/Group.class.php';
define('EFFORTUNITSET_FORGE_LEVEL', 1);
define('EFFORTUNITSET_PROJECT_LEVEL', 2);
-----------------------------------------------------------------------
Summary of changes:
src/common/tracker/Artifact.class.php | 13 +++
src/common/tracker/ArtifactExtraField.class.php | 6 +-
src/common/tracker/Effort.class.php | 124 ++++++++++++++++++++++++
src/common/tracker/EffortUnit.class.php | 25 +++++
src/common/tracker/EffortUnitSet.class.php | 1 -
5 files changed, 165 insertions(+), 4 deletions(-)
create mode 100644 src/common/tracker/Effort.class.php
hooks/post-receive
--
FusionForge
_______________________________________________
Fusionforge-commits mailing list
[email protected]
http://lists.fusionforge.org/cgi-bin/mailman/listinfo/fusionforge-commits