/** * Generates the export * * @param integer $categoryId Category Id * @param boolean $downwards If true, downwards, otherwise upward ordering * @param string $language Language * * @return string */ public function generate($categoryId = 0, $downwards = true, $language = '') { global $PMF_LANG; // Initialize categories $this->category->transform($categoryId); $faqdata = $this->faq->get(FAQ_QUERY_TYPE_EXPORT_XHTML, $categoryId, $downwards, $language); $version = $this->_config->get('main.currentVersion'); $comment = sprintf('XHTML output by phpMyFAQ %s | Date: %s', $version, PMF_Date::createIsoDate(date("YmdHis"))); $this->xml->startDocument('1.0', 'utf-8'); $this->xml->writeDtd('html', '-//W3C//DTD XHTML 1.0 Transitional//EN', 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'); $this->xml->startElement('html'); $this->xml->writeAttribute('xmlns', 'http://www.w3.org/1999/xhtml'); $this->xml->writeAttribute('xml:lang', $language); $this->xml->writeComment($comment); $this->xml->startElement('head'); $this->xml->writeElement('title', $this->_config->get('main.titleFAQ')); $this->xml->startElement('meta'); $this->xml->writeAttribute('http-equiv', 'Content-Type'); $this->xml->writeAttribute('content', 'application/xhtml+xml; charset=utf-8'); $this->xml->endElement(); $this->xml->endElement(); // </head> $this->xml->startElement('body'); $this->xml->writeAttribute('dir', $PMF_LANG['dir']); if (count($faqdata)) { $lastCategory = 0; foreach ($faqdata as $data) { if ($data['category_id'] != $lastCategory) { $this->xml->writeElement('h1', $this->category->getPath($data['category_id'], ' >> ')); } $this->xml->writeElement('h2', strip_tags($data['topic'])); $this->xml->startElement('p'); $this->xml->writeCdata(html_entity_decode($data['content'], ENT_QUOTES, 'UTF-8')); $this->xml->endElement(); $this->xml->writeElement('p', $PMF_LANG['msgAuthor'] . ': ' . $data['author_email']); $this->xml->writeElement('p', $PMF_LANG['msgLastUpdateArticle'] . PMF_Date::createIsoDate($data['lastmodified'])); $lastCategory = $data['category_id']; } } $this->xml->endElement(); // </body> $this->xml->endElement(); // </html> header('Content-type: text/html'); return $this->xml->outputMemory(); }
/** * Create a new XML document based on the $content variable. * * @param string $content * @throws \ErrorException * @return Boolean|string */ private function createXmlDocument(&$content) { libxml_use_internal_errors(true); $xmlContent = simplexml_load_string($content); $document = new \XMLWriter(); if (!$xmlContent) { throw new \ErrorException('The supplied content is not an XML document'); } if (!isset($xmlContent->children()->name)) { return false; } $document->openMemory(); $document->startDocument('1.0', 'UTF-8'); $document->setIndent(true); $document->setIndentString(' '); $document->writeDtd(sprintf('extension PUBLIC "-//Joomla! %s//DTD template 1.0//EN" "https://intowebdevelopment.nl/dtd/joomla/%s/template-install.dtd"', DTD_JOOMLA_VERSION, DTD_JOOMLA_VERSION)); $document->startElement('extension'); $document->writeAttribute('version', TARGET_JOOMLA_VERSION); $document->writeAttribute('type', 'template'); $document->writeAttribute('client', TARGET_JOOMLA_TEMPLATE); $document->writeAttribute('method', 'upgrade'); $document->writeElement('name', (string) $xmlContent->children()->name); $document->writeElement('creationDate', (string) $xmlContent->children()->creationDate ?: date('Y-m-d')); $document->writeElement('author', (string) $xmlContent->children()->author); $document->writeElement('authorEmail', (string) $xmlContent->children()->authorEmail); $document->writeElement('authorUrl', (string) $xmlContent->children()->authorUrl); $document->writeElement('version', (string) $xmlContent->children()->version); $document->writeElement('license', (string) $xmlContent->children()->license); $document->startElement('description'); $document->writeCdata((string) $xmlContent->children()->description); $document->endElement(); $document->startElement('files'); $contains_templateDetails = false; foreach ($xmlContent->children()->files->children() as $file) { if (!is_file($this->directory . DIRECTORY_SEPARATOR . (string) $file)) { throw new FileNotFoundException((string) $file); } $contains_templateDetails = false !== strpos((string) $file, 'templateDetails.xml'); $document->writeElement($file->getName(), (string) $file); } if (!$contains_templateDetails) { $document->writeElement('filename', 'templateDetails.xml'); } $document->endElement(); $document->startElement('positions'); foreach ($xmlContent->children()->positions->children() as $position) { $document->writeElement('position', (string) $position); } $document->endElement(); if (isset($xmlContent->children()->languages)) { $document->startElement('languages'); foreach ($xmlContent->children()->languages->children() as $language) { $document->startElement('language'); $document->writeAttribute('tag', (string) $language->attributes()->tag); $document->text((string) $language); $document->endElement(); } $document->endElement(); } if (isset($xmlContent->children()->params)) { $document->startElement('config'); $document->startElement('fields'); $document->writeAttribute('name', 'params'); if (($addPath = $xmlContent->children()->params->attributes()->addpath) && isset($addPath)) { $document->writeAttribute('addfieldpath', (string) $addPath); } $document->startElement('fieldset'); $document->writeAttribute('name', 'advanced'); foreach ($xmlContent->children()->params->children() as $param) { $document->startElement('field'); $document->writeAttribute('name', (string) $param->attributes()->name); $document->writeAttribute('type', (string) $param->attributes()->type); $document->writeAttribute('default', (string) $param->attributes()->default); $document->writeAttribute('label', (string) $param->attributes()->label); $document->writeAttribute('description', (string) $param->attributes()->description); if (0 < $param->count()) { foreach ($param->children() as $option) { $document->startElement('option'); $document->writeAttribute('value', (string) $option->attributes()->value); $document->text((string) $option); $document->endElement(); } } $document->endElement(); } $document->endElement(); $document->endElement(); $document->endElement(); } $document->endElement(); return $content = $document->outputMemory(true); }