/** *@param XMLFilenameProcessor $xmlfilename *@param string $path *@param string $strfilename *@return void *@desc *PageXml Constructor. Empty page. and PageXml Constructor. Create from XML. *PageXml Constructor. Create from file name and path. Do not use with XmlnukeDB repository. */ public function __construct($xmlfilename = null, $path = null, $strfilename = null) { if ($xmlfilename == null && $path == null && $strfilename == null) { $auxStr = "<page>\r\n" . "<meta>\r\n" . "<title/>\r\n" . "<abstract/>\r\n" . "<created>" . date("D M j Y G:i:s") . "</created>\r\n" . "<modified>" . date("D M j Y G:i:s") . "</modified>\r\n" . "<keyword>XMLSite ByJG</keyword>\r\n" . "<groupkeyword/>\r\n" . "</meta>\r\n" . "<group>\r\n" . "<id>__DEFAULT__</id>\r\n" . "<title/>\r\n" . "<keyword>all</keyword>\r\n" . "</group>\r\n" . "</page>"; $this->_xmlDoc = XmlUtil::CreateXmlDocumentFromStr($auxStr); $xpath = new DOMXPath($this->_xmlDoc); $this->_nodePage = $this->_xmlDoc->getElementsByTagName("page")->item(0); $this->_nodeGroup = $xpath->query("/page/group")->item(0); } else { if ($xmlfilename != null && $path == null && $strfilename == null) { $this->_xmlDoc = $xmlfilename->getContext()->getXMLDataBase()->getDocument($xmlfilename->FullQualifiedName()); } else { if ($xmlfilename == null && $path != null && $strfilename != null) { $xmlDoc = XmlUtil::CreateXmlDocument(); $xmlDoc->Load(FileUtil::AdjustSlashes($path . FileUtil::Slash() . $strfilename)); } } } }
public function getDocument($document, $rootNode) { $documentName = self::getName($document); $xpath = self::getXPath($document); if (!self::existsDocument($documentName)) { throw new NotFoundException("Document " . $document . " doesn't exists in repository", 600); } $documentName = self::getFullFileName($documentName); if ($xpath == "") { $doc = XmlUtil::CreateXmlDocumentFromFile($documentName); } else { $doc = XmlUtil::CreateXmlDocumentFromStr("< {$rootNode} />", false); $source = XmlUtil::CreateXmlDocumentFromFile($documentName); $DocXpath = new DOMXPath($source); $nodes = $DocXpath->query($xpath); foreach ($nodes as $node) { $newNode = $doc->importNode($node); $doc->documentElement->appendChild($newNode); } } return $doc; }
public function saveDocumentStr($documentName, $xmlstr) { $xml = XmlUtil::CreateXmlDocumentFromStr($xmlstr); self::saveDocumentXML($documentName, $xml); }
/** * @covers ByJG\AnyDataset\Repository\SingleRow::getDomObject * @todo Implement testGetDomObject(). */ public function testGetDomObject() { $this->fill(); $dom = \ByJG\Util\XmlUtil::CreateXmlDocumentFromStr("<row>" . "<field name='field1'>10</field>" . "<field name='field1'>20</field>" . "<field name='field1'>30</field>" . "<field name='field2'>40</field>" . "</row>"); $this->assertEquals($dom, $this->object->getDomObject()); }
public function CreatePage() { parent::CreatePage(); // Doesnt necessary get PX, because PX is protected! $deleteMode = false; //Strings $action = strtolower($this->_action); $id = $this->_context->get("id"); $group = $this->_context->get("group"); $contents = ""; $titleIndex = $this->_context->get("titleIndex"); $summaryIndex = $this->_context->get("summaryIndex"); $groupKeyword = $this->_context->get("groupKeyword"); $myWords = $this->WordCollection(); $this->setHelp($myWords->Value("DESCRIPTION")); $this->setTitlePage($myWords->Value("TITLE")); //XmlNode $block = $this->_px->addBlockCenter($myWords->Value("WORKINGAREA")); $this->addMenuOption($myWords->Value("TXT_BACK"), "module:Xmlnuke.Admin.ListXML"); /* XmlNode paragraph; XmlNode form; XmlNode boxButton; XmlNode editNode; // (For Index) processor.XMLFilenameProcessor xmlFile; */ // Open Index File $indexFile = new XMLFilenameProcessor("index"); //XmlDocument $index = $this->_context->getXMLDataBase()->getDocument($indexFile->FullQualifiedName(), null); // -------------------------------------- // CHECK ACTION // -------------------------------------- if ($action == "edit" || $action == "new") { $contents = $this->_context->get("contents"); $contents = stripslashes($contents); $this->_context->setSession("texto", $contents); /*echo "<PRE>"; echo htmlentities($contents); echo "</PRE>";*/ try { $title = ""; $summary = ""; //XmlNode $node; // Get edited XML and update info about INDEX. //XmlDocument $xml = XmlUtil::CreateXmlDocumentFromStr($contents); //$node = XmlUtil::SelectSingleNode($xml->documentElement, "/page/meta/title"); $node = XmlUtil::SelectSingleNode($xml->documentElement, "meta/title"); if ($node != null) { $title = $node->nodeValue; } //$node = XmlUtil::SelectSingleNode($xml->documentElement,"/page/meta/abstract"); $node = XmlUtil::SelectSingleNode($xml->documentElement, "meta/abstract"); if ($node != null) { $summary = $node->nodeValue; } //$node = XmlUtil::SelectSingleNode($xml->documentElement,"/page/meta/modified"); $node = XmlUtil::SelectSingleNode($xml->documentElement, "meta/modified"); if ($node != null) { $node->nodeValue = date("D M j Y G:i:s"); } //$node = XmlUtil::SelectSingleNode($xml->documentElement,"/page/meta/groupkeyword"); $node = XmlUtil::SelectSingleNode($xml->documentElement, "meta/groupkeyword"); if ($node != null) { $node->nodeValue = $groupKeyword; } if ($id != "_all") { if ($action == "edit") { //$editNode = XmlUtil::SelectSingleNode($index->documentElement, "/xmlindex/group[id='" . $group . "']/page[id='" . $id . "']"); $editNode = XmlUtil::SelectSingleNode($index->documentElement, "group[id='" . $group . "']/page[id='" . $id . "']"); if ($titleIndex == "") { $titleIndex = $title; } XmlUtil::SelectSingleNode($editNode, "title")->nodeValue = $titleIndex; if ($summaryIndex == "") { $summaryIndex = $summary; } XmlUtil::SelectSingleNode($editNode, "summary")->nodeValue = $summaryIndex; } else { //$editNode = XmlUtil::SelectSingleNode($index->documentElement,"/xmlindex/group[id='" . $group . "']"); $editNode = XmlUtil::SelectSingleNode($index->documentElement, "group[id='" . $group . "']"); $newNode = XmlUtil::CreateChild($editNode, "page", ""); XmlUtil::CreateChild($newNode, "id", $id); XmlUtil::CreateChild($newNode, "title", $title); XmlUtil::CreateChild($newNode, "summary", $summary); $titleIndex = $title; $summaryIndex = $summary; } } $xmlFile = new XMLFilenameProcessor($id); $this->_context->getXMLDataBase()->saveDocumentXML($xmlFile->FullQualifiedName(), $xml); $this->_context->getXMLDataBase()->saveDocumentXML($indexFile->FullQualifiedName(), $index); $this->_context->getXMLDataBase()->saveIndex(); $paragraph = $this->_px->addParagraph($block); FileUtil::DeleteFilesFromPath($this->_cacheFile); FileUtil::DeleteFilesFromPath(new XSLCacheFilenameProcessor("")); $this->_px->addBold($paragraph, $myWords->Value("SAVED")); } catch (Exception $ex) { $paragraph = $this->_px->addParagraph($block); $this->_px->AddErrorMessage($paragraph, $contents, $ex); } } // Get the group from the Index and Update Edit Fields //$editNode = XmlUtil::SelectSingleNode( $index->documentElement,"/xmlindex/group[page[id='" . $id . "']]/id"); $editNode = XmlUtil::SelectSingleNode($index->documentElement, "group[page[id='" . $id . "']]/id"); if ($editNode != null) { $group = $editNode->nodeValue; //$editNode = XmlUtil::SelectSingleNode($index->documentElement,"/xmlindex/group[id='" . $group . "']/page[id='" . $id . "']"); $editNode = XmlUtil::SelectSingleNode($index->documentElement, "group[id='" . $group . "']/page[id='" . $id . "']"); $titleIndex = XmlUtil::SelectSingleNode($editNode, "title")->nodeValue; $summaryIndex = XmlUtil::SelectSingleNode($editNode, "summary")->nodeValue; } if ($action == "delete") { $paragraph = $this->_px->addParagraph($block); $this->_px->addHref($paragraph, "module:Xmlnuke.Admin.ManageXML?id=" . $this->_context->get("id") . "&action=confirmdelete", $myWords->Value("CONFIRMDELETE", $this->_context->get("id")), null); $deleteMode = true; } if ($action == "confirmdelete") { $paragraph = $this->_px->addParagraph($block); //$editNode = XmlUtil::SelectSingleNode($index->documentElement,"/xmlindex/group[id='" . $group . "']"); $editNode = XmlUtil::SelectSingleNode($index->documentElement, "group[id='" . $group . "']"); $delNode = XmlUtil::SelectSingleNode($editNode, "page[id='" . $id . "']"); if ($delNode != null) { $editNode->removeChild($delNode); } $this->_context->getXMLDataBase()->saveDocumentXML($indexFile->FullQualifiedName(), $index); //util.FileUtil.DeleteFile(new processor.XMLFilenameProcessor(_context.get("id"), this._context)); $this->_context->getXMLDataBase()->saveIndex(); $this->_px->addBold($paragraph, $myWords->Value("DELETED")); $deleteMode = true; } // -------------------------------------- // EDIT XML PAGE // -------------------------------------- // If doesnt have an ID, list all pages or add new! if ($id == "") { $action = "new"; } else { $this->addMenuOption($myWords->Value("PREVIEWMENU"), "engine:xmlnuke?xml=" . $id . "&xsl=[param:xsl]&lang=[param:lang]", "preview"); $this->addMenuOption($myWords->Value("NEWXMLMENU"), "module:Xmlnuke.Admin.ManageXML", null); $langAvail = $this->_context->LanguagesAvailable(); $processorFile = new XMLFilenameProcessor($id); foreach (array_keys($langAvail) as $key) { if ($key != strtolower($this->_context->Language()->getName())) { } $repositorio = new XmlnukeDB($this->_context->XmlHashedDir(), $this->_context->XmlPath(), $key); $fileToCheck = $processorFile->FullName($id, "", $key) . $processorFile->Extension(); if ($repositorio->existsDocument($fileToCheck)) { $this->addMenuOption($myWords->ValueArgs("EDITXMLMENU", array($langAvail[$key])), "module:Xmlnuke.Admin.ManageXML?id=" . $id . "&lang=" . $key, null); } else { $this->addMenuOption($myWords->ValueArgs("CREATEXMLMENU", array($langAvail[$key])), "module:Xmlnuke.Admin.ManageXML?id=" . $id . "&lang=" . $key, null); } } $action = "edit"; } // Show form to Edit/Insert if (!$deleteMode) { $paragraph = $this->_px->addParagraph($block); //XmlNodeS $table = $this->_px->addTable($paragraph); $row = $this->_px->addTableRow($table); $col = $this->_px->addTableColumn($row); $form = $this->_px->addForm($col, "module:Xmlnuke.Admin.ManageXML", "", "form", true); $xmlExist = true; if ($id != "") { $xmlTestExist = new XMLFilenameProcessor($id); $xmlExist = $this->_context->getXMLDataBase()->existsDocument($xmlTestExist->FullQualifiedName()); } $canUseNew = $action != "new" && !$xmlExist; //Trecho acrescentado para manter o conteudo do textarea mesmo no caso de erro. $contents = $this->_context->getSession("texto"); //echo $contents; if ($action == "new" || $canUseNew) { $action = "new"; // This is necessary, because user can Create a predefined ID... if (!$canUseNew || $id == "") { $this->_px->addTextBox($form, $myWords->Value("XMLBOX"), "id", "", 20, true, INPUTTYPE::TEXT); } else { $this->_px->addLabelField($form, $myWords->Value("XMLBOX"), $id); $this->_px->addHidden($form, "id", $id); } $this->_px->addLabelField($form, $myWords->Value("LANGUAGEBOX"), strtolower($this->_context->Language()->getName())); //if($contents!="") //{ $contents = "<page>\n" . " <meta>\n" . " <title>Put your title here</title>\n" . " <abstract>Put page abstract informations here</abstract>\n" . " <created>" . date("D M j Y G:i:s") . "</created>\n" . " <modified/>\n" . " <keyword>xmlnuke</keyword>\n" . " <groupkeyword>all</groupkeyword>\n" . " </meta>\n" . " <blockcenter>\n" . " <title>Block Title</title>\n" . " <body>\n" . " <p>This is the first paragraph</p>\n" . " </body>\n" . " </blockcenter>\n" . "</page>\n"; //} session_unregister("texto"); } else { $this->_px->addLabelField($form, $myWords->Value("LANGUAGEBOX"), strtolower($this->_context->Language()->getName())); $this->_px->addHidden($form, "id", $id); $xmlFile = new XMLFilenameProcessor($id); //XmlDocument $xml = $this->_context->getXMLDataBase()->getDocument($xmlFile->FullQualifiedName(), null); //if($contents!="") $contents = str_replace("&", "&", XmlUtil::GetFormattedDocument($xml)); $editNode = XmlUtil::SelectSingleNode($xml->documentElement, "meta/groupkeyword"); if ($editNode != null) { $groupKeyword = $editNode->nodeValue; } session_unregister("texto"); } if ($id != "_all") { $this->_px->addCaption($form, $myWords->Value("SITEMAPINFO")); $this->_px->addTextBox($form, $myWords->Value("INDEXBOX"), "titleIndex", $titleIndex, 60, true, INPUTTYPE::TEXT); $selectNode = $this->_px->addSelect($form, $myWords->Value("LISTEDBOX"), "group"); $this->_px->addTextBox($form, $myWords->Value("INDEXSUMMARYBOX"), "summaryIndex", $summaryIndex, 60, true, INPUTTYPE::TEXT); $this->_px->addCaption($form, $myWords->Value("PAGEINFO")); //XmlNode $selectPageNode = $this->_px->addSelect($form, $myWords->Value("SHOWMENUBOX"), "groupKeyword"); $this->_px->addOption($selectPageNode, $myWords->Value("NOTLISTEDOPTION"), "-", null); //XmlNodeList //$groupList = XmlUtil::SelectNodes($index->documentElement,"/xmlindex/group"); $groupList = XmlUtil::SelectNodes($index->documentElement, "/group"); foreach ($groupList as $node) { $value = XmlUtil::SelectSingleNode($node, "title")->nodeValue; $this->_px->addOption($selectNode, XmlUtil::SelectSingleNode($node, "title")->nodeValue . " (" . XmlUtil::SelectSingleNode($node, "/id")->nodeValue . ")", XmlUtil::SelectSingleNode($node, "/id")->nodeValue, XmlUtil::SelectSingleNode($node, "/id")->nodeValue == $group); $this->_px->addOption($selectPageNode, XmlUtil::SelectSingleNode($node, "title")->nodeValue . " (" . XmlUtil::SelectSingleNode($node, "/keyword")->nodeValue . ")", XmlUtil::SelectSingleNode($node, "/keyword")->nodeValue, XmlUtil::SelectSingleNode($node, "/keyword")->nodeValue == $groupKeyword); } } $this->_px->addHidden($form, "action", $action); $this->_px->addCaption($form, $myWords->Value("XMLEDITINFO")); $this->_px->addMemo($form, $myWords->Value("XMLCONTENTBOX"), "contents", $contents, 80, 30, "soft"); $boxButton = $this->_px->addBoxButtons($form); $this->_px->addSubmit($boxButton, "", $myWords->Value("TXT_SAVE")); } return $this->_px; }
public function CreatePage() { parent::CreatePage(); // Doesnt necessary get PX, because PX is protected! $deleteMode = false; $action = strtolower($this->_action); $id = $this->_context->get("id"); $contents = ""; $myWords = $this->WordCollection(); $this->setHelp($myWords->Value("DESCRIPTION")); $this->setTitlePage($myWords->Value("TITLE")); //XmlNodes $block = $this->_px->addBlockCenter($myWords->Value("WORKINGAREA")); /* XmlNode paragraph; XmlNode form; XmlNode boxButton; */ //processor.XSLFilenameProcessor xslFile; // -------------------------------------- // CHECK ACTION // -------------------------------------- if ($action == "edit" || $action == "new") { $contents = $this->_context->get("contents"); $contents = stripslashes($contents); try { // It is necessary only to load the document to check if it is OK. // If OK, use the original raw file $xsl = XmlUtil::CreateXmlDocumentFromStr($contents); $xslFile = new XSLFilenameProcessor($id); FileUtil::QuickFileWrite($xslFile->FullQualifiedNameAndPath(), str_replace("&#", "&#", $contents)); $paragraph = $this->_px->addParagraph($block); FileUtil::DeleteFilesFromPath($this->_cacheFile); FileUtil::DeleteFilesFromPath(new XSLCacheFilenameProcessor("")); $this->_px->addBold($paragraph, $myWords->Value("SAVED")); } catch (Exception $ex) { $paragraph = $this->_px->addParagraph($block); $this->_px->AddErrorMessage($paragraph, $contents, $ex); } } if ($action == "delete") { $paragraph = $this->_px->addParagraph($block); $this->_px->addHref($paragraph, "module:Xmlnuke.Admin.ManageXSL?id=" . $this->_context->get("id") . "&action=confirmdelete", $myWords->Value("CONFIRMDELETE", $this->_context->get("id")), null); $deleteMode = true; } if ($action == "confirmdelete") { $paragraph = $this->_px->addParagraph($block); FileUtil::DeleteFile(new XSLFilenameProcessor($this->_context->get("id"))); $this->_px->addBold($paragraph, $myWords->Value("DELETED")); $deleteMode = true; } // -------------------------------------- // EDIT XSL PAGE // -------------------------------------- // If doesnt have an ID, list all pages or add new! if ($id == "") { //XmlNode list; //XmlNode optlist; $xslFile = new XSLFilenameProcessor("page"); //array $templates = FileUtil::RetrieveFilesFromFolder($xslFile->PathSuggested(), "." . strtolower($this->_context->Language()->getName() . $xslFile->Extension())); $paragraph = $this->_px->addParagraph($block); $this->_px->addText($paragraph, $myWords->Value("SELECTPAGE")); $list = $this->_px->addUnorderedList($paragraph); foreach ($templates as $key) { $optlist = $this->_px->addOptionList($list); //$xslKey = substr($key, strlen($xslFile->PathSuggested())); $xslKey = basename($key); $xslKey = FilenameProcessor::StripLanguageInfo($xslKey); $this->_px->addHref($optlist, "module:Xmlnuke.Admin.ManageXSL?id=" . $xslKey, $xslKey, null); $this->_px->addText($optlist, " ["); $this->_px->addHref($optlist, "module:Xmlnuke.Admin.ManageXSL?id=" . $xslKey . "&action=delete", $myWords->Value("TXT_DELETE"), null); $this->_px->addText($optlist, "]"); } $action = "new"; } else { $this->addMenuOption($myWords->Value("NEWPAGE"), "module:Xmlnuke.Admin.ManageXSL", null); $this->addMenuOption($myWords->Value("PREVIEWPAGE"), "engine:xmlnuke?xml=home&xsl=" . $id . "&lang=" . $this->_context->Language()->getName(), null); //array $langAvail = $this->_context->LanguagesAvailable(); foreach ($langAvail as $key => $value) { if ($key != strtolower($this->_context->Language()->getName())) { } $this->addMenuOption($myWords->ValueArgs("EDITXSLMENU", array($value)), "module:Xmlnuke.Admin.ManageXSL?id=" . $id . "&lang=" . $key, null); } $action = "edit"; } if (!$deleteMode) { $paragraph = $this->_px->addParagraph($block); //XMLNodes $table = $this->_px->addTable($paragraph); $row = $this->_px->addTableRow($table); $col = $this->_px->addTableColumn($row); $form = $this->_px->addForm($col, "module:Xmlnuke.Admin.ManageXSL", "", "form", true); if ($action == "new") { $this->_px->addTextBox($form, $myWords->Value("XSLBOX"), "id", "", 20, true, INPUTTYPE::TEXT); } else { $this->_px->addLabelField($form, $myWords->Value("XSLBOX"), $id); $this->_px->addHidden($form, "id", $id); $xslFile = new XSLFilenameProcessor($id); if (FileUtil::Exists($xslFile->FullQualifiedNameAndPath())) { //XmlDocument $xsl = XmlUtil::CreateXmlDocumentFromFile($xslFile->FullQualifiedNameAndPath()); $contents = XmlUtil::GetFormattedDocument($xsl); } } $this->_px->addLabelField($form, $myWords->Value("LANGUAGEBOX"), strtolower($this->_context->Language()->getName())); $this->_px->addMemo($form, $myWords->Value("LABEL_CONTENT"), "contents", $contents, 80, 30, "soft"); $this->_px->addHidden($form, "action", $action); $boxButton = $this->_px->addBoxButtons($form); $this->_px->addSubmit($boxButton, "", $myWords->Value("TXT_SAVE")); } return $this->_px; }
/** *@desc Transform an XMLDocument object with an XSLFile *@param DOMDocument $xml *@param XSLFilenameProcessor $xslFile XSL File *@return string - The transformation string */ public function TransformDocument($xml, $xslFile) { // Add a custom XML based on attribute xmlobjet inside root // Example: // <page xmlobject="plugin.name(param1, param2)"> $pattern = "/(?P<plugin>.*?)\\s*\\((?P<param>([#']?.*?[#']?\\s*,?\\s*)+)?\\)/"; $xmlRoot = $xml->documentElement; $xmlRootAttributes = $xmlRoot->attributes; if ($xmlRootAttributes != null) { foreach ($xmlRootAttributes as $attr) { if ($attr->nodeName == "xmlobject") { $match = preg_match_all($pattern, $attr->value, $matches); for ($iCount = 0; $iCount < $match; $iCount++) { $param = explode(",", $matches["param"][$iCount]); for ($i = 0; $i <= 4; $i++) { if (count($param) < $i + 1) { $param[] = null; } elseif ($param[$i] == "#CONTEXT#") { $param[$i] = $this->_context; } else { $param[$i] = trim($param[$i]); } } $className = str_replace('.', '\\', $matches["plugin"][$iCount]); if ($className[0] != '\\') { $className = "\\{$className}"; } $plugin = new $className($param[0], $param[1], $param[2], $param[3], $param[4]); if ($plugin instanceof IXmlnukeDocumentObject) { $plugin->generateObject($xmlRoot); } else { $handler = new ObjectHandler($xmlRoot, $plugin); $handler->CreateObjectFromModel(); } } } else { if ($attr->nodeName == 'xsl') { $xslFile = new XSLFilenameProcessor($attr->value); } } } } // Check if there is no XSL template if ($this->_outputResult != OutputData::Xslt) { if ($this->_extractNodes == "") { $outDocument = $xml; } else { $nodes = XmlUtil::selectNodes($xml->documentElement, "/" . $this->_extractNodes); $retDocument = XmlUtil::CreateXmlDocumentFromStr("<" . $this->_extractNodesRoot . "/>", false); $nodeRoot = $retDocument->documentElement; XmlUtil::AddAttribute($nodeRoot, "xpath", $this->_extractNodes); foreach ($nodes as $node) { $nodeToAdd = XmlUtil::CreateChild($nodeRoot, $node->nodeName, ""); $attributes = $node->attributes; foreach ($attributes as $value) { XmlUtil::AddAttribute($nodeToAdd, $value->nodeName, $value->nodeValue); } XmlUtil::AddNodeFromNode($nodeToAdd, $node); } $outDocument = $retDocument; } if ($this->_outputResult == OutputData::Json) { return ObjectHandler::xml2json($outDocument, $this->_extraParams["json_function"]); } else { return $outDocument->saveXML(); } } $this->_context->setXsl($xslFile->ToString()); // Set up a transform object with the XSLT file //XslTransform xslTran = new XslTransform(); $xslTran = new XSLTProcessor(); $snippetProcessor = new SnippetProcessor($xslFile); //Uri try { $uri = $snippetProcessor->getUriFromXsl($xslFile, $this->_context); } catch (XMLNukeException $ex) { throw new EngineException("Cannot load XSL file. The following error occured: " . $ex->getMessage(), 751); } //Process smipets and put teh xsl StyleShet try { $xsl = $snippetProcessor->IncludeSnippet($uri); } catch (XMLNukeException $ex) { throw new EngineException("Cannot load XSL cache file. The following error occured: " . $ex->getMessage(), 752); } $xsl = FileUtil::fixUTF8($xsl); $xslDom = new DOMDocument(); $xslDom->loadXML($xsl); $xslTran->importStyleSheet($xslDom); // Create Argument List $xslTran->setParameter("", "xml", $this->_context->getXml()); $xslTran->setParameter("", "xsl", $this->_context->getXsl()); $xslTran->setParameter("", "site", '_all'); $xslTran->setParameter("", "lang", $this->_context->Language()->getName()); $xslTran->setParameter("", "module", $this->_context->getModule()); $xslTran->setParameter("", "transformdate", date("Y-m-d H:i:s")); $xslTran->setParameter("", "urlbase", $this->_context->get("xmlnuke.URLBASE")); $xslTran->setParameter("", "engine", "PHP"); $xslTran->setParameter("", "url", $this->_context->getServerName(false, true) . $this->_context->get('REQUEST_URI')); //Transform and output $xtw = $xslTran->transformToXML($xml); $xhtml = new DOMDocument(); $xhtml->loadXML($xtw); // Reload XHTML result to process PARAM and HREFs $paramProcessor = new ParamProcessor(); $paramProcessor->AdjustToFullLink($xhtml, "A", "HREF"); $paramProcessor->AdjustToFullLink($xhtml, "FORM", "ACTION"); $paramProcessor->AdjustToFullLink($xhtml, "AREA", "HREF"); $paramProcessor->AdjustToFullLink($xhtml, "LINK", "HREF"); if ($this->_context->get("xmlnuke.ENABLEPARAMPROCESSOR")) { $paramProcessor->ProcessParameters($xhtml); } // ATENCAO: O codigo gerado pelo saveXML faz com que elementos vazios sejam // comprimidos. Exemplo: <table /> // para o HTML isso eh ruim. Logo o metodo deve ser saveHTML que deixa o tag // assim: <table></table> $arrCt = $this->_context->getSuggestedContentType(); if ($arrCt["content-type"] == "text/html") { return FileUtil::fixUTF8(strtr($xhtml->saveHTML(), array("></br>" => "/>"))); } else { return FileUtil::fixUTF8($xhtml->saveXML()); } }
/** *@param DOMNode $node *@param int $depth *@return void *@desc */ private function ProcessChildren($node, $depth) { // "TEXTAREA" and "PRE" nodes doesnt process PARAM names! if ($node->parentNode->nodeName == "textarea" || $node->parentNode->nodeName == "pre") { return; } if ($node->nodeType == XML_ELEMENT_NODE) { $attribs = $node->attributes; if ($attribs != null) { $i = 0; while ($attribs->item($i) != null) { $result = $this->CheckParameters($attribs->item($i)->nodeValue); if ($result != $attribs->item($i)->nodeValue) { $attribs->item($i)->nodeValue = $result; // str_replace("&amp;", "&", str_replace("&", "&", $result)); } $i++; } } } elseif ($node->nodeType == XML_TEXT_NODE) { $result = $this->CheckParameters($node->nodeValue); if (true || $result != $node->nodeValue) { // If test below is True RESULT contains HTML TAGS. These tags need be processed // Otherwise, go ahead! if (strpos($result, "<") !== false) { try { if (strpos($result, "<![CDATA[") === false) { $result = "<![CDATA[" . $result . "]]>"; } //$result = str_replace("&","&",$result); $nodeToProc = XmlUtil::CreateXmlDocumentFromStr("<root>{$result}</root>", false)->documentElement; if ($node->nodeType == XML_TEXT_NODE) { $node->nodeValue = ""; XmlUtil::AddNodeFromNode($node->parentNode, $nodeToProc); } else { XmlUtil::AddNodeFromNode($node, $nodeToProc); } } catch (Exception $ex) { // Nothing to do. Text isn't a valid XML Node. // Alternativaly you can disable ParamProcessor feature. } } else { $result = str_replace("&", "&", $result); $node->nodeValue = $result; } } } if ($node->nodeType == XML_ELEMENT_NODE || $node->nodeType == XML_TEXT_NODE) { //\DOMNode nodeworking; if ($node->hasChildNodes()) { $nodeworking = $node->firstChild; while ($nodeworking != null) { $this->ProcessChildren($nodeworking, $depth + 1); $nodeworking = $nodeworking->nextSibling; } } } }