Bladeren bron

Keep track of which module altered which node in the XML.

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@3845 a333f486-631f-4898-b8df-5754b55c2be0
dflaven 9 jaren geleden
bovenliggende
commit
4f4c6564d7
1 gewijzigde bestanden met toevoegingen van 28 en 1 verwijderingen
  1. 28 1
      setup/modelfactory.class.inc.php

+ 28 - 1
setup/modelfactory.class.inc.php

@@ -479,6 +479,15 @@ class ModelFactory
 					}
 				}
 				
+				$oAlteredNodes = $oXPath->query('/itop_design//*[@_delta]');
+				if ($oAlteredNodes->length > 0)
+				{
+					foreach($oAlteredNodes as $oAlteredNode)
+					{
+						$oAlteredNode->SetAttribute('_altered_in', $sModuleName);
+					}
+				}
+				
 				$oFormat = new iTopDesignFormat($oDocument);
 				if (!$oFormat->Convert())
 				{
@@ -1592,7 +1601,24 @@ class MFElement extends DOMElement
 		return false;
 	}
 
-
+	/**
+	 * Check if the given node is (a child of a node) altered by one of the supplied modules 
+	 * @param array $aModules The list of module codes to consider
+	 * @return boolean
+	 */
+	public function IsAlteredByModule($aModules)
+	{
+		// Iterate through the parents: reset the flag if any of them has a flag set
+		for($oParent = $this ; $oParent instanceof MFElement ; $oParent = $oParent->parentNode)
+		{
+			if (in_array($oParent->getAttribute('_altered_in'), $aModules))
+			{
+				return true;
+			}
+		}
+		return false;
+	}
+	
 	static $aTraceAttributes = null;
 	/**
 	 * Enable/disable the trace on changed nodes
@@ -2012,6 +2038,7 @@ class MFDocument extends DOMDocument
 		}
 		return $oElement;
 	}
+
 	/**
 	 * For debugging purposes
 	 */