public static function load($xmlfile) { if (is_file($xmlfile)) { $dom = new \DOMDocument(); libxml_use_internal_errors(true); $dom->load($xmlfile); if ($dom->schemaValidate(__DIR__ . "/../Resources/xsd/star.xsd")) { $root = $dom->documentElement; // Preliminary path modifications foreach ($root->getElementsByTagName("include") as $include) { $include->nodeValue = FileUtils::resolveRelativePath(FileUtils::getFileParent($xmlfile), $include->nodeValue); } // Reading attributes $actions = array(); foreach (XMLUtils::getChildrenByName($root, "action") as $child) { $actions[] = AbstractAction::parse($child); } $subsites = array(); foreach (XMLUtils::getChildrenByName($root, "subsite") as $child) { $subsites[] = Subsite::parse($child); } $targets = array(); foreach (XMLUtils::getChildrenByName($root, "target") as $child) { $targets[] = Target::parse($child); } return new Site($subsites, $targets, $actions); } else { //$errors = libxml_get_errors(); throw new \Exception("Document validation failed for '" . $xmlfile . "'"); } } else { throw new \Exception("Not a file '" . $xmlfile . "'"); } }
public static function parse(\DOMNode $node) { if ($node->nodeName == self::getNodeName()) { $mime = XMLUtils::getAttributeByName($node, "mime") != null ? XMLUtils::getAttributeByName($node, "mime")->value : null; $code = XMLUtils::getAttributeByName($node, "code") != null ? XMLUtils::getAttributeByName($node, "code")->value : null; switch ($type = XMLUtils::getAttributeByName($node, "type")->value) { case "file": if (is_file($file = FileUtils::getAbsolutePath($node->nodeValue, Star::instance()->getRootDirectory()))) { switch ($extension = FileUtils::getExtension($file)) { case "html": return new HTMLFileView($file, $mime, $code); case "php": return new PHPFileView($file, $mime, $code); /* case "twig": return new TwigFileView($file, $mime, $code); */ /* case "twig": return new TwigFileView($file, $mime, $code); */ default: throw new \Exception("Unhandled file type '" . $extension . "' for file '" . $file . "'"); } } throw new \Exception("No such file '" . $file . "'"); /* case "class": if(ClassLoader::getInstance()->classInstanceOf($node->nodeValue, "AbstractView")){ return ClassLoader::getInstance()->newInstance($node->nodeValue); } throw new Exception("Class '" . $node->nodeValue . "' must be a subclass of '" . ClassLoader::getInstance()->getClassByName('AbstractView') . "'"); */ /* case "class": if(ClassLoader::getInstance()->classInstanceOf($node->nodeValue, "AbstractView")){ return ClassLoader::getInstance()->newInstance($node->nodeValue); } throw new Exception("Class '" . $node->nodeValue . "' must be a subclass of '" . ClassLoader::getInstance()->getClassByName('AbstractView') . "'"); */ default: throw new \Exception("Unhandled type '" . $type . "', expecting type in 'file' or 'class'"); } } throw new \Exception("Unexpected node '" . $node->nodeName . "', expected '" . self::getNodeName() . "'"); }