/** * Constructor * Implement configurable object pattern * @param Array|Zend_Config $config */ public function __construct($config = null) { if ($config === null) { $config = array(); } parent::__construct((array) $config); $this->_processor = new XsltProcessor(); $this->_processor->registerPHPFunctions('System_View_Xslt_PartialRenderer::process'); if (isset($config['params'])) { $this->setParameters($config['params']); } if (isset($config['debugMode'])) { $this->setDebugMode($config['debugMode']); } }
function handle($match, $state, $pos, Doku_Handler $handler) { switch ($state) { case DOKU_LEXER_SPECIAL: $matches = preg_split('/(&&XML&&\\n*|\\n*&&XSLT&&\\n*|\\n*&&END&&)/', $match, 5); $data = "XML: " . $matches[1] . "\nXSLT: " . $matches[2] . "(" . $match . ")"; $xsltproc = new XsltProcessor(); $xml = new DomDocument(); $xsl = new DomDocument(); $xml->loadXML($matches[1]); $xsl->loadXML($matches[2]); $xsltproc->registerPHPFunctions(); $xsltproc->importStyleSheet($xsl); $data = $xsltproc->transformToXML($xml); if (!$data) { $errors = libxml_get_errors(); foreach ($errors as $error) { $data = display_xml_error($error, $xml); } libxml_clear_errors(); } unset($xsltproc); return array($state, $data); case DOKU_LEXER_UNMATCHED: return array($state, $match); case DOKU_LEXER_EXIT: return array($state, ''); } return array(); }
/** * @param $path * @param array $data * @return string */ protected function evaluatePath($path, array $data = []) { $preferences = $this->XSLTSimple->addChild('Preferences'); $url = $preferences->addChild('url'); $url->addAttribute('isHttps', Request::secure()); $url->addAttribute('currentUrl', Request::url()); $url->addAttribute('baseUrl', URL::to('')); $url->addAttribute('previousUrl', URL::previous()); $server = $preferences->addChild('server'); $server->addAttribute('curretnYear', date('Y')); $server->addAttribute('curretnMonth', date('m')); $server->addAttribute('curretnDay', date('d')); $server->addAttribute('currentDateTime', date('Y-m-d H:i:s')); $language = $preferences->addChild('language'); $language->addAttribute('current', App::getLocale()); $default_language = \Config::get('app.default_language'); if (isset($default_language)) { $language->addAttribute('default', $default_language); } $languages = \Config::get('app.available_languages'); if (is_array($languages)) { foreach ($languages as $lang) { $language->addChild('item', $lang); } } // from form generator if (isset($data['form'])) { $this->XSLTSimple->addChild('Form', form($data['form'])); } // adding form errors to xml if (isset($data['errors'])) { $this->XSLTSimple->addData($data['errors']->all(), 'FormErrors', false); } // "barryvdh/laravel-debugbar": // adding XML tab if (true === class_exists('Debugbar')) { $dom = dom_import_simplexml($this->XSLTSimple)->ownerDocument; $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $prettyXml = $dom->saveXML(); // add new tab and append xml to it if (false === \Debugbar::hasCollector('XML')) { \Debugbar::addCollector(new \DebugBar\DataCollector\MessagesCollector('XML')); } \Debugbar::getCollector('XML')->addMessage($prettyXml, 'info', false); } $xsl_processor = new \XsltProcessor(); $xsl_processor->registerPHPFunctions(); $xsl_processor->importStylesheet(simplexml_load_file($path)); return $xsl_processor->transformToXML($this->XSLTSimple); }
function getInterpretedXslt($xslPath, $xmlPath, $xsltProcessor = null) { if ($xsltProcessor == null) { $xsltProcessor = new XsltProcessor(); $xsltProcessor->registerPHPFunctions(); } $xsl = new DOMDocument(); $xsl->load($xslPath); $xsltProcessor->importStylesheet($xsl); $xml = new DOMDocument(); $xml->load($xmlPath); $output = $xsltProcessor->transformToXML($xml) or die('Transformation error!'); return $output; }
/** * Register the service provider. * * @return void */ public function register() { $this->app->singleton('view', function ($app) { $xsltProcessor = new XsltProcessor(); $xsltProcessor->registerPHPFunctions(); $extendedSimpleXMLElement = new ExtendedSimpleXMLElement('<App/>'); $factory = new XSLTFactory($app['view.engine.resolver'], $app['view.finder'], $app['events'], $extendedSimpleXMLElement); $factory->setContainer($app); $factory->addExtension('xsl', 'xslt', function () use($xsltProcessor, $extendedSimpleXMLElement, $app) { return new XSLTEngine($xsltProcessor, $extendedSimpleXMLElement, $app['events']); }); return $factory; }); }
public function xhtmlAction() { $this->_helper->viewRenderer->setNoRender(); $xml = DOCS_PATH . $this->view->docid . '.xml'; $xsl = APPLICATION_PATH . 'modules/site/controllers/xml2html.xsl'; $doc = new DOMDocument(); $doc->substituteEntities = TRUE; $doc->load($xsl); $proc = new XsltProcessor(); $proc->importStylesheet($doc); @$doc->load($xml); $proc->setParameter('', 'contextPath', '/'); $proc->setParameter('', 'nodeResPath', '/res/' . $this->view->docid . '/'); $proc->registerPHPFunctions('TypecontentController::widget'); echo $proc->transformToXml($doc); }
/** * This function will take a given XML file, a stylesheet and apply * the transformation. Any errors will call the error function to log * them into the `$_errors` array * * @see toolkit.XSLTProcess#__error() * @see toolkit.XSLTProcess#__process() * @param string $xml * The XML for the transformation to be applied to * @param string $xsl * The XSL for the transformation * @param array $parameters * An array of available parameters the XSL will have access to * @param array $register_functions * An array of available PHP functions that the XSL can use * @return string|boolean * The string of the resulting transform, or false if there was an error */ public function process($xml = null, $xsl = null, array $parameters = array(), array $register_functions = array()) { if ($xml) { $this->_xml = $xml; } if ($xsl) { $this->_xsl = $xsl; } // dont let process continue if no xsl functionality exists if (!XsltProcess::isXSLTProcessorAvailable()) { return false; } $XSLProc = new XsltProcessor(); if (!empty($register_functions)) { $XSLProc->registerPHPFunctions($register_functions); } $result = @$this->__process($XSLProc, $this->_xml, $this->_xsl, $parameters); unset($XSLProc); return $result; }
/** * translate xml * * @param string $xml_dom * @param string $xsl_dom * @param string $params * @param string $php_functions * @return void * @author Andy Bennett */ private static function translate($xml_dom, $xsl_dom, $params = array(), $php_functions = array()) { /* create the processor and import the stylesheet */ $proc = new XsltProcessor(); $proc->importStyleSheet($xsl_dom); foreach ($params as $name => $param) { $proc->setParameter('', $name, $param); } if (is_array($php_functions)) { $proc->registerPHPFunctions($php_functions); } /* transform and output the xml document */ $newdom = $proc->transformToDoc($xml_dom); return $newdom->saveXML(); }
/** * undocumented function * * @param integer $n * @param integer $level * @return string * @author Andy Bennett */ public function navigation($n = 2, $level = 0, $xsl = "navigation") { $xsl_path = Kohana::find_file('xsl', $xsl, TRUE, 'xsl'); // load the xml file and stylesheet as domdocuments $xsl = new DomDocument(); $xsl->load($xsl_path); $inputdom = new DomDocument(); $inputdom->loadXML($this->sitemap_string); // create the processor and import the stylesheet $proc = new XsltProcessor(); $proc->importStyleSheet($xsl); $proc->setParameter("", 'base', substr(url::base(), 0, -1)); $proc->setParameter("", 'currentpage', '/' . $this->current_page($n)); $proc->setParameter("", 'pagename', $this->get_page_name()); $proc->setParameter("", 'level', $level); $proc->registerPHPFunctions(array('sitemap_helper::check_acl', 'sitemap_helper::get_url', 'sitemap_helper::check_external')); // transform and output the xml document $newdom = $proc->transformToDoc($inputdom); $r = $newdom->saveXML($newdom->documentElement, LIBXML_NOEMPTYTAG); /* $r = str_replace('<?xml version="1.0"?>', '', $r); $r = str_replace('<ul/>', '', $r); */ return $r; }
function getUserBySearchvaluesXml($emailSuche, $nameSuche, $ortSuche) { $xsltProcessor = new XsltProcessor(); $xsltProcessor->registerPHPFunctions(); $UserImagePath = "http://" . $_SERVER['HTTP_HOST'] . substr(dirname($_SERVER['SCRIPT_NAME']), 1) . "/includes/pictures/generateBBThumb.inc.php?picname=" . "/pics/user/"; $searchSql = "SELECT u.id,\r\n u.Vorname,\r\n u.Nachname,\r\n u.Name,\r\n u.Geburtstag,\r\n u.Strasse,\r\n u.Plz,\r\n u.Ort,\r\n u.Email,\r\n u.User,\r\n u.Nation,\r\n u.Status,\r\n u.Signatur,\r\n u.Lastlogin,\r\n concat( '" . $UserImagePath . "', u.pic ) as pic,\r\n u.aktiv,\r\n (SELECT (now() - g.timeonupdate) as diffTme FROM gpsPositions g WHERE g.user_id = u.id) as diffTime, \r\n if (exists (SELECT * FROM freundesliste f WHERE f.friend_id = u.id AND f.user_id = " . $_SESSION['config']->CURRENTUSER->USERID . "), 'J', 'N' ) as onFriendList\r\n FROM user u\r\n WHERE u.id != " . $_SESSION['config']->CURRENTUSER->USERID . "\r\n "; if ($emailSuche != null && strlen($emailSuche) > 1) { $searchSql .= " AND LOWER(u.email) = '" . strtolower($emailSuche) . "' "; } if ($nameSuche != null && strlen($nameSuche) > 1) { $searchSql .= " AND LOWER(u.name) = '" . strtolower($nameSuche) . "' "; } if ($ortSuche != null && strlen($ortSuche) > 1) { $searchSql .= " AND LOWER(u.ort) = '" . strtolower($ortSuche) . "' "; } //echo $searchSql; return getSqlResultAsXml($_SESSION['config']->DBCONNECT, $searchSql); }
/** * apply an xslt to lucene gsearch search results * * @param <type> $resultData * @param <type> $startPage * @param <type> $xslt_file * @param <type> $query the query that was executed. May want to pass this on. */ function applyLuceneXSLT($resultData, $startPage = 1, $xslt_file = '/xsl/results.xsl', $query = null) { $path = drupal_get_path('module', 'Fedora_Repository'); $proc = null; if (!$resultData) { //drupal_set_message(t('No Results!')); return ' '; //no results } try { $proc = new XsltProcessor(); } catch (Exception $e) { drupal_set_message(t('Error loading results xslt! ') . $e->getMessage()); return ' '; } if (isset($query)) { $proc->setParameter('', 'fullQuery', $query); } //inject into xsl stylesheet global $user; $proc->setParameter('', 'userID', $user->uid); $proc->setParameter('', 'searchToken', drupal_get_token('fedora_repository_advanced_search')); //token generated by Drupal, keeps tack of what tab etc we are on $proc->setParameter('', 'searchUrl', url('search') . '/fedora_repository'); //needed in our xsl $proc->setParameter('', 'objectsPage', base_path()); $proc->setParameter('', 'allowedPidNameSpaces', variable_get('fedora_pids_allowed', 'demo: changeme:')); $proc->setParameter('', 'hitPageStart', $startPage); $proc->registerPHPFunctions(); $xsl = new DomDocument(); $test = $xsl->load($path . $xslt_file); if (!isset($test)) { drupal_set_message(t('Error loading search results xslt!')); return t('Error loading search results xslt! '); } $input = new DomDocument(); $didLoadOk = $input->loadXML($resultData); if (!isset($didLoadOk)) { drupal_set_message(t('Error loading search results!')); return t('Error loading search results! '); } else { $proc->importStylesheet($xsl); $newdom = $proc->transformToDoc($input); return $newdom->saveXML(); } }
/** * create navigation from the sitemap * * @param integer $n * @param integer $level * @return string * @author Andy Bennett */ public function navigation($n = 2, $level = 0) { $xsl_path = Kohana::find_file('xsl', 'navigation', TRUE, 'xsl'); /* load the xml file and stylesheet as domdocuments */ $xsl = new DomDocument(); $xsl->load($xsl_path); $inputdom = new DomDocument(); $inputdom->loadXML($this->sitemap_string); /* create the processor and import the stylesheet */ $proc = new XsltProcessor(); $proc->importStyleSheet($xsl); $proc->setParameter("", 'base', substr(url::base(), 0, -1)); $proc->setParameter("", 'currentpage', '/' . $this->current_page($n)); $proc->setParameter("", 'level', $level); $proc->registerPHPFunctions(array('sitemap_helper::check_acl')); /* transform and output the xml document */ $newdom = $proc->transformToDoc($inputdom); $r = $newdom->saveXML(); $r = str_replace('<?xml version="1.0"?>', '', $r); $r = str_replace('<ul/>', '', $r); return $r; }
public function process($xml = null, $xsl = null, array $parameters = array(), array $register_functions = array()) { global $processErrors; $processErrors = array(); if ($xml) { $this->_xml = $xml; } if ($xsl) { $this->_xsl = $xsl; } $xml = trim($xml); $xsl = trim($xsl); if (!self::isXSLTProcessorAvailable()) { return false; } //dont let process continue if no xsl functionality exists $arguments = array('/_xml' => $this->_xml, '/_xsl' => $this->_xsl); $XSLProc = new XsltProcessor(); if (!empty($register_functions)) { $XSLProc->registerPHPFunctions($register_functions); } $result = @$this->__process($XSLProc, 'arg:/_xml', 'arg:/_xsl', null, $arguments, $parameters); while ($error = @array_shift($processErrors)) { $this->__error($error['number'], $error['message'], $error['type'], $error['line']); } unset($XSLProc); return $result; }
/** * internal function * uses an xsl to parse the sparql xml returned from the ITQL query * * * @param $content String */ function parseContent($content, $pid, $dsId, $collection, $pageNumber = null) { $path = drupal_get_path('module', 'Fedora_Repository'); global $base_url; $collection_pid = $pid; //we will be changing the pid later maybe //module_load_include('php', ''Fedora_Repository'', 'ObjectHelper'); $objectHelper = $this; $parsedContent = NULL; $contentModels = $objectHelper->get_content_models_list($pid); $isCollection = false; //if this is a collection object store the $pid in the session as it will come in handy //after a purge or ingest to return to the correct collection. if (!empty($contentModels)) { foreach ($contentModels as $contentModel) { if ($contentModel == 'epistemetec:albumCModel' || $contentModel == 'epistemetec:compilationCModel' || $contentModel == 'epistemetec:videotecaCModel' || $contentModel == 'epistemetec:collectionCModel') { $_SESSION['fedora_collection'] = $pid; $isCollection = true; } } } //get a list of datastream for this object $datastreams = $this->get_formatted_datastream_list($pid, $contentModels); //$label=$content; $collectionName = $collection; if (!$pageNumber) { $pageNumber = 1; } if (!isset($collectionName)) { $collectionName = variable_get('fedora_repository_name', 'Collection'); } $xslContent = $this->getXslContent($pid, $path); //get collection list and display using xslt------------------------------------------- if (isset($content) && $content != false) { $input = new DomDocument(); $input->loadXML(trim($content)); $results = $input->getElementsByTagName('result'); if ($results->length > 0) { try { $proc = new XsltProcessor(); $proc->setParameter('', 'collectionPid', $collection_pid); $proc->setParameter('', 'collectionTitle', $collectionName); $proc->setParameter('', 'baseUrl', $base_url); $proc->setParameter('', 'path', $base_url . '/' . $path); $proc->setParameter('', 'hitPage', $pageNumber); $proc->registerPHPFunctions(); $xsl = new DomDocument(); $xsl->loadXML($xslContent); //php xsl does not seem to work with namespaces so removing it below //I may have just been being stupid here // $content = str_ireplace('xmlns="http://www.w3.org/2001/sw/DataAccess/rf1/result"', '', $content); $xsl = $proc->importStylesheet($xsl); $newdom = $proc->transformToDoc($input); $objectList = $newdom->saveXML(); //is the xml transformed to html as defined in the xslt associated with the collection object if (!$objectList) { throw new Exception("Invalid XML."); } } catch (Exception $e) { drupal_set_message(t($e->getMessage()), 'error'); return ''; } } } else { drupal_set_message(t("No Objects in this Collection or bad query.")); } //-------------------------------------------------------------------------------- //show the collections datastreams if ($results->length > 0 || $isCollection == true) { // if(strlen($objectList)>22||$contentModel=='Collection'||$contentModel=='Community'){//length of empty dom still equals 22 because of <table/> etc $collectionPolicyExists = $objectHelper->getMimeType($pid, 'COLLECTION_POLICY'); //drupal_set_message($collectionPolicyExists, 'error'); if (user_access(ObjectHelper::$INGEST_FEDORA_OBJECTS) && $collectionPolicyExists) { if (!empty($collectionPolicyExists) && strcasecmp($collectionPolicyExists, 'application/zip')) { $ingestObject = '<a title="' . t('Ingest a New object into ') . $collectionName . ' ' . $collection_pid . '" href="' . base_path() . 'fedora/ingestObject/' . $collection_pid . '/' . $collectionName . '"><img hspace = "8" src="' . $base_url . '/' . $path . '/images/ingest.png" alt="' . t('Ingest Object') . '"></a>'; } } else { $ingestObject = ' '; } $datastreams .= $ingestObject; $collection_fieldset = array('#title' => t('Collection Description'), '#collapsible' => TRUE, '#collapsed' => TRUE, '#value' => $datastreams); $collectionListOut = theme('fieldset', $collection_fieldset); $object_list_fieldset = array('#title' => t('Items in this Collection'), '#collapsible' => TRUE, '#collapsed' => FALSE, '#value' => isset($objectList) ? $objectList : ''); $objectListOut = theme('fieldset', $object_list_fieldset); } else { //$collectionName=''; $collection_fieldset = array('#title' => "", '#collapsible' => TRUE, '#collapsed' => FALSE, '#value' => $datastreams); $collectionListOut = theme('fieldset', $collection_fieldset); $objectListOut = ''; //no collection objects to show so don't show field set } return "<STRONG>" . $collectionName . "</STRONG>" . ' <br />' . $collectionListOut . '<br />' . $objectListOut; }