/** * @param mixed $node DOMNode of XML containing XML source * @param mixed $fields. Defaults to false. If it is an array, it is the list of the fields we should populate. */ public function loadFromXML($node, $fields = false) { if (is_string($node)) { $doc = new DOMDocument(); if (!$doc->loadXML($node)) { return false; } $node = $doc->documentRoot; } else { if ($node instanceof DOMDocument) { $node = $node->documentElement; } } if (!$node instanceof DOMElement) { I2CE::raiseError("Not XML"); return false; } if (!parent::loadFromXML($node, $fields)) { return false; } if ($node->hasAttribute('parent_form') && $node->hasAttribute('parent_id')) { $this->setParent($node->getAttribute('parent_form') . '|' . $node->getAttribute('parent_id')); } if ($node->hasAttribute('created')) { $this->createdField->setFromDB($node->getAttribute('created')); } if ($node->hasAttribute('modified')) { $this->lastModifiedField->setFromDB($node->getAttribute('modified')); } if (($form_nodes = $node->getElementsByTagName('form')) instanceof DOMNodeList) { foreach ($form_nodes as $form_node) { if (!$form_node instanceof DOMElement || !$form_node->hasAttribute('name') || !$form_node->hasAttribute('id') || !($obj = $this->factory->createContainer($form_node->getAttribute('name') . '|0')) instanceof I2CE_Form) { continue; } $obj->loadFromXML($form_node); $this->addChildForm($obj); } } return true; }