public function clearParentElementWithHash(IdmlElement $element, $parentHashValue) { $bCleared = false; $parentElement = $element->parentIdmlObject(); while (!$bCleared && is_object($parentElement)) { if (IdmlPxeHelper::getPxeHash($parentElement) == $parentHashValue) { IdmlPxeHelper::clearPxeData($parentElement); $bCleared = true; } $parentElement = $parentElement->parentIdmlObject(); } return $bCleared; }
/** * Walk the IDML tree back to the IdmlPage, getting all ancestral objects * @param IdmlElement $idmlObject * @param string $stopAt The classname of the highest Idml object that we are interested in, should be 'IdmlPage' or 'IdmlStory' * @return array[IdmlElement] */ public function getAncestors($idmlObject, $stopAt) { $stack = array(); // start by skipping the current element $obj = $idmlObject->parentIdmlObject(); // now collect all ancestors: parent, grandparent, ... back to (but not including) the IdmlPage/IdmlStory while (!is_null($obj) && get_class($obj) != $stopAt) { $stack[] = $obj; $obj = $obj->parentIdmlObject(); } return $stack; }
/** * Determines if an element has an XmlElement as a parent somewhere * @param IdmlElement $element * @return boolean */ public static function hasXmlElementParent(IdmlElement $element) { $hasParent = false; if ($element->parentIdmlObject()) { $parent = $element->parentIdmlObject(); while (is_object($parent) && !is_a($parent, "IdmlXmlElement")) { $parent = $parent->parentIdmlObject(); } if (is_object($parent) && is_a($parent, "IdmlXmlElement") && $parent->markupTag != "XMLTag/Story") { $hasParent = true; } } return $hasParent; }