[evolvis-commits] r7979: adding circular dependency checks↵
mirabilos at evolvis.org
mirabilos at evolvis.org
Thu Feb 24 15:54:31 CET 2011
Author: mirabilos
Date: 2011-02-24 15:54:31 +0100 (Thu, 24 Feb 2011)
New Revision: 7979
Modified:
trunk/gforge_base/evolvisforge-5.1/gforge/common/pm/ProjectTask.class
Log:
adding circular dependency checks
Modified: trunk/gforge_base/evolvisforge-5.1/gforge/common/pm/ProjectTask.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/pm/ProjectTask.class 2011-02-24 14:54:30 UTC (rev 7978)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/pm/ProjectTask.class 2011-02-24 14:54:31 UTC (rev 7979)
@@ -438,11 +438,27 @@
}
}
+ function checkCircular($depend_on_id, $original_id) {
+ if ($depend_on_id == $original_id) {
+ $this->setError('Circular Dependency Detected');
+ return false;
+ }
+ $res=db_query("SELECT is_dependent_on_task_id AS id
+ FROM project_dependencies
+ WHERE project_task_id='$depend_on_id'");
+ $rows=db_numrows($res);
+
+ for ($i=0; $i<$rows; $i++) {
+ if (!$this->checkCircular(db_result($res,$i,'id'), $original_id)) {
+ return false;
+ }
+ }
+ }
+
function setDependentOn(&$arr) {
//
// IMPORTANT - MUST VERIFY NO CIRCULAR DEPENDENCY!!
-// Simplest way is to ensure this start_date, is >= dependent_on end_date
//
//get existing dependencies to diff against
$arr2 =& $this->getDependentOn();
@@ -461,6 +477,12 @@
}
}
for ($i=0; $i<count($add_arr); $i++) {
+ //
+ // Check task for circular dependencies
+ //
+ if (!$this->checkCircular($add_arr[$i],$this->getID())) {
+ return false;
+ }
db_query("INSERT INTO project_dependencies (project_task_id,is_dependent_on_task_id)
VALUES ('".$this->getID()."','". $add_arr[$i] ."')");
if (db_error()) {
More information about the evolvis-commits
mailing list