浏览代码

Prototype of extensibility rules

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@2113 a333f486-631f-4898-b8df-5754b55c2be0
dflaven 13 年之前
父节点
当前提交
adbf3a3f7d
共有 1 个文件被更改,包括 57 次插入0 次删除
  1. 57 0
      setup/modelfactory.class.inc.php

+ 57 - 0
setup/modelfactory.class.inc.php

@@ -371,6 +371,26 @@ class ModelFactory
 	{
 		return $this->oDOMDocument->GetNodeById($sXPath, $sId, $oContextNode);
 	}
+
+	/**
+	 * Apply extensibility rules into the DOM
+	 * @param array aRestrictionRules Array of array ('selectors' => array of XPaths, 'rules' => array of rules)
+	 * @return void
+	 */
+	public function RestrictExtensibility($aRestrictionRules)
+	{
+		foreach ($aRestrictionRules as $aRestriction)
+		{
+			foreach ($aRestriction['selectors'] as $sSelector)
+			{
+				foreach($this->GetNodes($sSelector) as $oNode)
+				{
+					echo "Adding rules (".print_r($aRestriction['rules'], true)." to ".$oNode->getAttribute('id')."\n";
+					$oNode->RestrictExtensibility($aRestriction['rules']);
+				}
+			}
+		}
+	}
 	
 	/**
 	 * Check if the class specified by the given node already exists in the loaded DOM
@@ -1645,6 +1665,43 @@ class MFElement extends DOMElement
 		}
 		$this->setAttribute('id', $sId);
 	}
+
+	/**
+	 * Apply extensibility rules onto this node
+	 * @param array aRules Array of rules (strings)
+	 * @return void
+	 */
+	 public function RestrictExtensibility($aRules)
+	 {
+	 	$oRulesNode = $this->GetOptionalElement('rules');
+	 	if ($oRulesNode)
+	 	{
+	 		$aCurrentRules = $oRulesNode->GetNodeAsArrayOfItems();
+	 		$aCurrentRules = array_merge($aCurrentRules, $aRules);
+	 		$oRulesNode->SetNodeAsArrayOfItems($aCurrentRules);
+	 	}
+	 	else
+	 	{
+	 		$oNewNode = $this->ownerDocument->CreateElement('rules');
+	 		$this->appendChild($oNewNode);
+	 		$oNewNode->SetNodeAsArrayOfItems($aRules);
+	 	}
+	 }	 	
+
+	/**
+	 * Read extensibility rules for this node
+	 * @return Array of rules (strings)
+	 */
+	 public function GetExtensibilityRules()
+	 {
+		$aCurrentRules = array();
+		$oRulesNode = $this->GetOptionalElement('rules');
+		if ($oRulesNode)
+		{
+			$aCurrentRules = $oRulesNode->GetNodeAsArrayOfItems();
+		}
+		return $aCurrentRules;
+	 }	 	
 }
 
 /**