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  cf094976f1ad3dc836579416afbdb472913f2705 (commit)
      from  e24d8a99b898698706f91bb9db34d3c2bbc3183b (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=cf094976f1ad3dc836579416afbdb472913f2705

commit cf094976f1ad3dc836579416afbdb472913f2705
Author: Stéphane-Eymeric Bredthauer <[email protected]>
Date:   Mon Jan 16 21:51:43 2017 +0100

    Tracker: Update artifact on a effort unit set copy

diff --git a/src/common/tracker/EffortUnit.class.php 
b/src/common/tracker/EffortUnit.class.php
index 4b25d0c..4b64164 100644
--- a/src/common/tracker/EffortUnit.class.php
+++ b/src/common/tracker/EffortUnit.class.php
@@ -113,7 +113,7 @@ class EffortUnit extends FFError {
                        $this->setError(_('An Unit name is required'));
                        return false;
                }
-               $res = db_query_params('SELECT 1 FROM effort_unit WHERE 
unit_name = $1 AND unit_set_id = $2', array(htmlspecialchars($name), 
$this->EffortUnitSet->GetID()));
+               $res = db_query_params('SELECT 1 FROM effort_unit WHERE 
is_deleted <> 1 AND unit_name = $1 AND unit_set_id = $2', 
array(htmlspecialchars($name), $this->EffortUnitSet->GetID()));
                if (db_numrows($res) > 0) {
                        $this->setError(sprintf(_('Unit name %s already 
exist'),$name));
                        return false;
@@ -140,7 +140,7 @@ class EffortUnit extends FFError {
                        if (db_numrows($res) > 0) {
                                $unit_position =  db_result($res, 0, 
'max_position') + 1;
                        } else {
-                               return 0;
+                               $unit_position = 0;
                        }
                }
                $res = db_query_params('INSERT INTO effort_unit(unit_set_id, 
unit_name, conversion_factor, to_unit, unit_position, is_base_unit, 
created_date, created_by, modified_date, modified_by) VALUES($1, $2, $3, $4, 
$5, $6, $7, $8, $9, $10)',
@@ -290,8 +290,8 @@ class EffortUnit extends FFError {
                                                                                
unit_set_id = $3
                                                                        )
                                                                UPDATE 
artifact_extra_field_data AS d
-                                                               SET field_data 
= $4*CAST(SUBSTRING(field_data FROM \'#"%#"U%\' FOR \'#\') AS INTEGER) || \'U\' 
|| $5 
-                                                               FROM t  
+                                                               SET field_data 
= $4*CAST(SUBSTRING(field_data FROM \'#"%#"U%\' FOR \'#\') AS INTEGER) || \'U\' 
|| $5
+                                                               FROM t
                                                                WHERE d.data_id 
= t.data_id',
                                                                
array(ARTIFACT_EXTRAFIELDTYPE_EFFORT,'%U'.$this->getID(), 
$this->getEffortUnitSet()->getID(), 
$this->getConversionFactor(),$this->getToUnit()));
                if (!$res) {
@@ -314,7 +314,7 @@ class EffortUnit extends FFError {
                        $this->setError(_('An Unit name is required'));
                        return false;
                }
-               $res = db_query_params('SELECT 1 FROM effort_unit WHERE 
unit_name = $1 AND unit_set_id = $2', array(htmlspecialchars($name), 
$this->EffortUnitSet->GetID()));
+               $res = db_query_params('SELECT 1 FROM effort_unit WHERE 
is_deleted <> 1 AND unit_name = $1 AND unit_id <> $2 AND unit_set_id = $3', 
array(htmlspecialchars($name), $this->getID(), $this->EffortUnitSet->GetID()));
                if (db_numrows($res) > 0) {
                        $this->setError(sprintf(_('Unit name %s already 
exist'),$name));
                        return false;
@@ -404,7 +404,7 @@ class EffortUnit extends FFError {
                } else {
                        $to_unit_id = 1;
                }
-               if (!$this->create($name, $conversion_factor, $to_unit_id, 
$position, $is_base_unit)) {
-               }
+               $id = $this->create($name, $conversion_factor, $to_unit_id, 
$position, $is_base_unit);
+               return $id;
        }
 }
diff --git a/src/common/tracker/EffortUnitSet.class.php 
b/src/common/tracker/EffortUnitSet.class.php
index 00d23ac..cf60fb3 100644
--- a/src/common/tracker/EffortUnitSet.class.php
+++ b/src/common/tracker/EffortUnitSet.class.php
@@ -126,7 +126,7 @@ class EffortUnitSet extends FFError {
                                        return false;
                                }
                                if (db_numrows($res)>0) {
-                                       $this->setError(sprintf(_('Effort Unit 
Set already exist for tracker $s'),$this->ArtifactType->getName()));
+                                       $this->setError(sprintf(_('Effort Unit 
Set already exist for tracker %s'),$this->ArtifactType->getName()));
                                        db_rollback();
                                        return false;
                                }
@@ -142,7 +142,7 @@ class EffortUnitSet extends FFError {
                                        return false;
                                }
                                if (db_numrows($res)>0) {
-                                       $this->setError(sprintf(_('Effort Unit 
Set already exist for project $s'),$this->Group->getPublicName()));
+                                       $this->setError(sprintf(_('Effort Unit 
Set already exist for project %s'),$this->Group->getPublicName()));
                                        db_rollback();
                                        return false;
                                }
@@ -173,11 +173,13 @@ class EffortUnitSet extends FFError {
        }
 
        function copy($from_unit_set){
+               db_begin();
                $unit_set_id = $this->create();
                $from_unit_factory = new EffortUnitFactory($from_unit_set);
                $from_baseUnit = $from_unit_factory->getBaseUnit();
-               //$from_baseUnit_id = $from_baseUnit->getID();
+
                if (!$this->_recursive_copy($from_baseUnit)) {
+                       db_rollback();
                        return false;
                }
                switch ($this->objectLevel) {
@@ -188,20 +190,57 @@ class EffortUnitSet extends FFError {
                                
$this->ArtifactType->setEffortUnitSet($this->getID());
                                break;
                }
+               db_commit();
                return true;
        }
 
        function _recursive_copy($from_unit) {
+               db_begin();
                $new_unit = new EffortUnit($this);
+               if (!$new_unit) {
+                       $this->setError(_('Error coping Effort Unit').' 
'.$from_unit->getName());
+                       db_rollback();
+                       return false;
+               }
                $new_unit_id = $new_unit->copy($from_unit);
+               if (!$new_unit_id || $new_unit->isError()) {
+                       $this->setError(_('Error coping Effort Unit').' 
'.$from_unit->getName()._(':').' '.$new_unit->getErrorMessage());
+                       db_rollback();
+                       return false;
+               }
+               // Update artifacts data
+               $res = db_query_params('WITH t AS (
+                                                                       SELECT 
data_id
+                                                                               
FROM artifact_extra_field_data
+                                                                               
INNER JOIN artifact_extra_field_list USING (extra_field_id)
+                                                                               
INNER JOIN artifact_group_list USING (group_artifact_id)
+                                                                       WHERE
+                                                                               
field_type = $1 AND
+                                                                               
field_data like $2 AND
+                                                                               
unit_set_id = $3
+                                                                       )
+                                                               UPDATE 
artifact_extra_field_data AS d
+                                                               SET field_data 
= CAST(SUBSTRING(field_data FROM \'#"%#"U%\' FOR \'#\') AS INTEGER) || \'U\' || 
$4
+                                                               FROM t
+                                                               WHERE d.data_id 
= t.data_id',
+                               
array(ARTIFACT_EXTRAFIELDTYPE_EFFORT,'%U'.$from_unit->getID(), 
$from_unit->getEffortUnitSet()->getID(), $new_unit_id));
+               if (!$res) {
+                       $this->setError(_('Error coping Effort Unit')._(': 
').db_error());
+                       db_rollback();
+                       return false;
+               }
                $from_unit_set = $from_unit->getEffortUnitSet();
                $from_unit_factory = new EffortUnitFactory($from_unit_set);
                $units = $from_unit_factory->getUnits();
                foreach ($units as $unit) {
                        if ($unit->getToUnit()==$from_unit->getID() && 
$unit->getID()!=$from_unit->getID()) {
-                               $this->_recursive_copy($unit);
+                               if (!$this->_recursive_copy($unit)) {
+                                       db_rollback();
+                                       return false;
+                               }
                        }
                }
+               db_commit();
                return true;
        }
 
diff --git a/src/common/tracker/actions/effort_units.php 
b/src/common/tracker/actions/effort_units.php
index 282cf2f..d4c8085 100644
--- a/src/common/tracker/actions/effort_units.php
+++ b/src/common/tracker/actions/effort_units.php
@@ -504,7 +504,7 @@ function postcopy_set(&$effortUnitSet) {
        $object = $effortUnitSet->getObject();
        $newEffortUnitSet = new EffortUnitSet($object);
        if (!$newEffortUnitSet->copy($effortUnitSet)) {
-               echo $HTML->error_msg('Error coping Effort Unit Set');
+               echo $HTML->error_msg(_('Error coping Effort Unit 
Set')._(':').' '.$newEffortUnitSet->getErrorMessage());
                return false;
        }
        if ($newEffortUnitSet->isError()) {

-----------------------------------------------------------------------

Summary of changes:
 src/common/tracker/EffortUnit.class.php     | 14 ++++-----
 src/common/tracker/EffortUnitSet.class.php  | 47 ++++++++++++++++++++++++++---
 src/common/tracker/actions/effort_units.php |  2 +-
 3 files changed, 51 insertions(+), 12 deletions(-)


hooks/post-receive
-- 
FusionForge

_______________________________________________
Fusionforge-commits mailing list
[email protected]
http://lists.fusionforge.org/cgi-bin/mailman/listinfo/fusionforge-commits

Reply via email to