diff --git a/setup/modelfactory.class.inc.php b/setup/modelfactory.class.inc.php index 8df36c091..691c3dc54 100644 --- a/setup/modelfactory.class.inc.php +++ b/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; + } } /**