[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