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

Reply via email to