Esempio n. 1
0
function Transform($n)
{
    $xml = new DOMDocument();
    $xml->loadXML("<dummy/>");
    $xpath = new DOMXPath($n->ownerDocument);
    $xpath->registerNameSpace("txs", "http://www.agencexml.com/txs");
    $xpath->registerNameSpace("xsl", "http://www.w3.org/1999/XSL/Transform");
    if ($xpath->query("txs:input", $n)->length == 0) {
        $xml->documentElement->parentNode->replaceChild($xml->importNode($n->firstChild, true), $xml->documentElement);
    } else {
        $root = $xml->importNode($xpath->query("txs:input/*", $n)->item(0), true);
        $xml->documentElement->parentNode->replaceChild($root, $xml->documentElement);
        $rootNodes = $xpath->query("txs:input/node()", $n);
        for ($i = 0; $i < $rootNodes->length; $i++) {
            $cur = $rootNodes->item($i);
            if ($cur->nodeType == XML_PI_NODE) {
                $root->parentNode->insertBefore($root->ownerDocument->importNode($cur, true), $root);
            }
        }
    }
    $xsl = new DOMDocument();
    $stsh = $n->getAttribute("stylesheet");
    if ($stsh != "") {
        if (substr($stsh, 0, 1) == "#") {
            $stns = $xpath->query("//xsl:stylesheet[@txs:name='" . substr($stsh, 1) . "']");
            $xsl->loadXML("<dummy/>");
            $xsl->documentElement->parentNode->replaceChild($xsl->importNode($stns->item(0), true), $xsl->documentElement);
        } else {
            $xsl->load($stsh);
        }
    } else {
        $xsl->loadXML("<dummy/>");
        $xsl->documentElement->parentNode->replaceChild($xsl->importNode($xpath->query("txs:stylesheet/*", $n)->item(0), true), $xsl->documentElement);
    }
    $xslp = new xsltProcessor();
    $xslp->importStyleSheet($xsl);
    $prms = $xpath->query("txs:with-param", $n);
    foreach ($prms as $prm) {
        $xslp->setParameter("", $prm->getAttribute("name"), $prm->getAttribute("value"));
    }
    $result = $xslp->transformToXml($xml);
    if (substr($result, 0, 1) == "<") {
        $xRes = new DOMDocument();
        $xRes->loadXML($result);
        $n->parentNode->replaceChild($n->ownerDocument->importNode($xRes->documentElement, true), $n);
    } else {
        $n->parentNode->replaceChild($n->ownerDocument->createCDATASection($result), $n);
    }
}
Esempio n. 2
0
 protected function transform_xsl($url, $xsl_filename, $isstring = 0)
 {
     if (strrchr($url, 'http://') || $this->text != '') {
         if (strrchr($url, '#')) {
             $fragment = array_pop(explode('#', $url));
         }
         if ($this->text != '') {
             $this->use_store = 0;
             $title = 'Using direct Input';
             $url = $this->path . 'direct/';
             $html = method_exists('tidy', 'cleanRepair') ? $this->tidy_html(urldecode($this->text), '', 'php') : urldecode($this->text);
         } else {
             $html = $this->get_file_contents($url);
         }
         if (strlen(trim($html)) === 0) {
             return $this->error('noURL');
         }
         $dom = new DOMDocument('1.0');
         $dom->preserveWhiteSpace = false;
         if ($this->text != '') {
             @$dom->loadXML($html);
         } else {
             @$dom->loadXML($this->tidy_html($html, $url, $this->tidy_option));
         }
         $dom->formatOutput = true;
         $dom->normalizeDocument();
         $title = !isset($title) ? $dom->getElementsByTagName('title')->item(0)->nodeValue : $title;
         if ($this->type == 'rdfa' && !$dom->getElementsByTagName('html')->item(0)->getAttribute('xmlns')) {
             $dom->getElementsByTagName('html')->item(0)->setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');
         }
         if (isset($fragment)) {
             $dom->relaxNGValidateSource($this->valid_schema());
             $element = $dom->getElementById($fragment);
             $content = $dom->saveXML($element);
             $dom = $this->return_html_frag($content, $title);
         }
         if (!method_exists('xsltProcessor', 'transformToXML')) {
             die("Sorry PHP xslt functions unavailable");
         }
         $xslt = new xsltProcessor();
         $xslt->setParameter('', 'transformr', $this->path);
         $xslt->setParameter('', 'url', $url);
         $xslt->setParameter('', 'request-uri', $_SERVER['REQUEST_URI']);
         $xslt->setParameter('', 'base-uri', $url);
         $xslt->setParameter('', 'doc-title', $title);
         $xslt->setParameter('', 'version', $this->version);
         if ($this->use_store == 1) {
             $xslt->setParameter('', 'endpoint-link', $this->path . 'sparql/endpoint?');
         }
         $xslt->importStyleSheet(DomDocument::load($xsl_filename));
         if (!@DomDocument::loadXML($dom->saveXML())) {
             $dom = @DomDocument::loadXML($this->tidy_html($html, $url, $this->tidy_option, 'output-xml'));
             // reload as plain vanilla xml
             if (!$dom) {
                 return $this->error('invalidDoc');
             }
         }
         return $xslt->transformToXML(@DomDocument::loadXML($dom->saveXML()));
     } elseif ($url == 'referer' && getenv("HTTP_REFERER") != '') {
         $referer = getenv("HTTP_REFERER");
         return $this->transform_xsl($referer, $xsl_filename);
     } elseif (getenv("HTTP_REFERER") != '' && $url != '') {
         $referer = getenv("HTTP_REFERER");
         return $this->transform_xsl($referer . '#' . $url, $xsl_filename);
     } else {
         return $this->error('noURL');
     }
 }
 protected function addRequestParams(xsltProcessor $v801f7201346b43f8ee8390a1ef20ddcd, $vf1f713c9e000f5d3f280adbd124df4f5, $v851f5ac9941d720844d143ed9cfcf60a = "")
 {
     foreach ($vf1f713c9e000f5d3f280adbd124df4f5 as $v3c6e0b8a9c15224a8228b9a98ca1531d => $v3a6d0284e743dc4a9b86f97d6dd1a3bf) {
         $v3c6e0b8a9c15224a8228b9a98ca1531d = strtolower($v3c6e0b8a9c15224a8228b9a98ca1531d);
         if (!is_array($v3a6d0284e743dc4a9b86f97d6dd1a3bf)) {
             if (strpos($v3a6d0284e743dc4a9b86f97d6dd1a3bf, "'") !== false && strpos($v3a6d0284e743dc4a9b86f97d6dd1a3bf, "\"") !== false) {
                 $v3a6d0284e743dc4a9b86f97d6dd1a3bf = str_replace("'", "\\\"", $v3a6d0284e743dc4a9b86f97d6dd1a3bf);
             }
             $v3c6e0b8a9c15224a8228b9a98ca1531d = str_replace(array(':'), array(''), $v3c6e0b8a9c15224a8228b9a98ca1531d);
             $v801f7201346b43f8ee8390a1ef20ddcd->setParameter("", $v851f5ac9941d720844d143ed9cfcf60a . $v3c6e0b8a9c15224a8228b9a98ca1531d, $v3a6d0284e743dc4a9b86f97d6dd1a3bf);
         } else {
             $this->addRequestParams($v801f7201346b43f8ee8390a1ef20ddcd, $v3a6d0284e743dc4a9b86f97d6dd1a3bf, $v851f5ac9941d720844d143ed9cfcf60a . $v3c6e0b8a9c15224a8228b9a98ca1531d . ".");
         }
     }
 }
Esempio n. 4
0
function xslfilter($buffer)
{
    global $__xslfilter_debug;
    global $__xslfilter_phpfunc;
    global $__xslfilter_prehook;
    global $__xslfilter_posthook;
    global $__xslfilter_start_utime;
    global $__xslfilter_i18n;
    if (empty($buffer)) {
        return false;
    }
    if ($__xslfilter_debug) {
        return false;
    }
    libxml_use_internal_errors(true);
    if (!array_key_exists('WEB_LAYOUT', $_SERVER) && !array_key_exists('XSL_DIR', $_SERVER) && !array_key_exists('XSL_STYLESHEET', $_SERVER)) {
        return __xslfilter_do_error("Missing stylesheet information", "None of the environment variables <code>WEB_LAYOUT</code>, " . "<code>XSL_DIR</code> or <code>XSL_STYLESHEET</code> " . "have been defined");
    }
    libxml_clear_errors();
    // Load document
    $doc = new DOMDocument();
    if (!$doc->loadXML($buffer, LIBXML_NONET)) {
        return __xslfilter_do_error("Error in current document", __xslfilter_build_xmlerrors(libxml_get_errors()));
    }
    // Processing instruction
    if ($r = __xslfilter_process_pi($doc)) {
        return $r;
    }
    // XSLT Processor
    $xslt = new xsltProcessor();
    // Basic information
    $xslt->setParameter('', 'lastmod', gmstrftime("%Y%m%d%H%M%SZ", getlastmod()));
    $xslt->setParameter('', 'now', gmstrftime("%Y%m%d%H%M%SZ", time()));
    // Information about http request
    $xslt->setParameter('', 'http-referer', array_key_exists('HTTP_REFERER', $_SERVER) ? $_SERVER['HTTP_REFERER'] : null);
    $xslt->setParameter('', 'request-uri', array_key_exists('REQUEST_URI', $_SERVER) ? $_SERVER['REQUEST_URI'] : null);
    $xslt->setParameter('', 'base-uri', array_key_exists('SCRIPT_FILENAME', $_SERVER) ? dirname($_SERVER['SCRIPT_FILENAME']) : null);
    $xslt->setParameter('', 'server-name', array_key_exists('SERVER_NAME', $_SERVER) ? $_SERVER['SERVER_NAME'] : null);
    $xslt->setParameter('', 'secure', array_key_exists('HTTPS', $_SERVER) ? 'true' : null);
    $xslt->setParameter('', 'protocol', array_key_exists('HTTPS', $_SERVER) ? 'https' : 'http');
    if (($script_uri = parse_url($_SERVER['SCRIPT_URI'])) !== false) {
        $xslt->setParameter('', 'uri-scheme', @$script_uri['scheme']);
        $xslt->setParameter('', 'uri-host', @$script_uri['host']);
        $xslt->setParameter('', 'uri-port', @$script_uri['port']);
        $xslt->setParameter('', 'uri-path', @$script_uri['path']);
        $xslt->setParameter('', 'uri-query', @$script_uri['query']);
        $xslt->setParameter('', 'uri-fragment', @$script_uri['fragment']);
    } else {
        $xslt->setParameter('', 'uri-scheme', null);
        $xslt->setParameter('', 'uri-host', null);
        $xslt->setParameter('', 'uri-port', null);
        $xslt->setParameter('', 'uri-path', null);
        $xslt->setParameter('', 'uri-query', null);
        $xslt->setParameter('', 'uri-fragment', null);
    }
    // Parameters set from apache server
    $xslt->setParameter('', 'pagedesc-default-xml', array_key_exists('WEB_LAYOUT', $_SERVER) ? $_SERVER['WEB_LAYOUT'] . '/defaults.xml' : null);
    $xslt->setParameter('', 'expect-lang', array_key_exists('expect-lang', $_SERVER) ? $_SERVER['expect-lang'] : null);
    $xslt->setParameter('', 'handheld-client', array_key_exists('handheld-client', $_SERVER) ? $_SERVER['handheld-client'] : null);
    // Pre hook
    if (!is_null($__xslfilter_prehook) && ($r = $__xslfilter_prehook($doc, $xslt)) !== true) {
        return $r;
    }
    // PHP function enabling
    if ($__xslfilter_phpfunc) {
        $xslt->registerPHPFunctions(is_array($__xslfilter_phpfunc) ? $__xslfilter_phpfunc : null);
    }
    // Lang to import localization templates
    $lang = '';
    if ($__xslfilter_i18n === null || $__xslfilter_i18n) {
        $lang = $doc->documentElement->getAttribute('lang');
    }
    if (empty($lang) && !is_null($__xslfilter_i18n) && is_string($__xslfilter_i18n)) {
        $lang = $__xslfilter_i18n;
    }
    // Listing stylesheet
    $stylesheet = array();
    if (array_key_exists('WEB_LAYOUT', $_SERVER) || array_key_exists('XSL_DIR', $_SERVER)) {
        $xsl_dir = array_key_exists('XSL_DIR', $_SERVER) ? $_SERVER['XSL_DIR'] : $_SERVER['WEB_LAYOUT'];
        $style = __xslfilter_get_stylesheet($doc, 'text/xsl');
        foreach ($style as $s) {
            if (!($href = $s['href'])) {
                continue;
            }
            if ($href[0] == '/' || preg_match('|^\\w+://|', $href)) {
                return __xslfilter_do_error("Error in current document", "Only local and relative stylesheet are allowed");
            }
            $stylesheet[] = $xsl_dir . '/' . $href;
        }
        if (empty($stylesheet) && array_key_exists('XSL_STYLESHEET', $_SERVER)) {
            $href = $_SERVER['XSL_STYLESHEET'];
            if ($href[0] != '/') {
                array_push($stylesheet, $xsl_dir . '/' . $href);
            }
        }
        if (!empty($lang)) {
            $href = 'l10n/' . $lang . '.xsl';
            if (file_exists($file = $xsl_dir . '/' . $href)) {
                $stylesheet[] = $file;
            }
        }
    } else {
        if (array_key_exists('XSL_STYLESHEET', $_SERVER)) {
            array_push($stylesheet, $_SERVER['XSL_STYLESHEET']);
            if (!empty($lang)) {
                $file = dirname($_SERVER['XSL_STYLESHEET']) . '/' . 'l10n/' . $lang . '.xsl';
                if (file_exists($file)) {
                    $stylesheet[] = $file;
                }
            }
        } else {
            return __xslfilter_do_error("No usable stylesheet", "Missing stylesheet at server and document level");
        }
    }
    // Importing stylesheet
    if (count($stylesheet) <= 1) {
        // Correct code for importing stylesheet
        // Unfortunately PHP only take into account the last import
        foreach ($stylesheet as $file) {
            libxml_clear_errors();
            $xsl = new DomDocument();
            $xsl->substituteEntities = true;
            // LIBXML_NOENT
            if (!$xsl->load($file, LIBXML_NONET)) {
                return __xslfilter_do_error("Error in stylesheet: {$href}", __xslfilter_build_xmlerrors(libxml_get_errors()));
            }
            $xslt->importStyleSheet($xsl);
        }
    } else {
        // Fix code to import several stysheets
        // By faking a top level stylesheet with import statements
        libxml_clear_errors();
        $xsl = new DomDocument('1.0');
        $xsl->substituteEntities = true;
        // LIBXML_NOENT
        $root = $xsl->createElementNS('http://www.w3.org/1999/XSL/Transform', 'xsl:stylesheet');
        $v = $xsl->createAttribute('version');
        $v->value = "1.0";
        $root->appendChild($v);
        $xsl->appendChild($root);
        foreach ($stylesheet as $file) {
            $s = $xsl->createElementNS('http://www.w3.org/1999/XSL/Transform', 'xsl:import');
            $h = $xsl->createAttribute('href');
            $h->value = $file;
            $s->appendChild($h);
            $root->appendChild($s);
        }
        $xslt->importStyleSheet($xsl);
    }
    // Applying transformation
    $r = $xslt->transformToXML($doc);
    if ($errors = libxml_get_errors()) {
        return __xslfilter_do_error("Error while rendering document", __xslfilter_build_xmlerrors($errors));
    }
    // Something wrong, but we have no clue
    if ($r == false) {
        return __xslfilter_do_error("Error while rendering document", "Check document and associated stylesheets");
    }
    // Job's done
    return $r;
}
Esempio n. 5
0
 private function processTransformation()
 {
     $v3d788fa62d7c185a1bee4c9147ee1091 = new DOMXpath($this->dom);
     $vca15fd43dfaeb80eb8c125735e0479b0 = $v3d788fa62d7c185a1bee4c9147ee1091->query("/sitemap/match[@pattern = '{$this->pattern}']/transform");
     foreach ($vca15fd43dfaeb80eb8c125735e0479b0 as $v36c4536996ca5615dcf9911f068786dc) {
         $v25d902c24283ab8cfbac54dfa101ad31 = $this->replaceParams($v36c4536996ca5615dcf9911f068786dc->getAttribute("src"));
         if (file_exists($v25d902c24283ab8cfbac54dfa101ad31)) {
             $vc3aaa7dd2c4cf0305f95e82438b46e82 = new DOMDocument('1.0', 'utf-8');
             $vc3aaa7dd2c4cf0305f95e82438b46e82->load($v25d902c24283ab8cfbac54dfa101ad31);
             $v801f7201346b43f8ee8390a1ef20ddcd = new xsltProcessor();
             $v801f7201346b43f8ee8390a1ef20ddcd->registerPHPFunctions();
             $v801f7201346b43f8ee8390a1ef20ddcd->importStyleSheet($vc3aaa7dd2c4cf0305f95e82438b46e82);
             $v21ffce5b8a6cc8cc6a41448dd69623c9 = $this->extractParams($v36c4536996ca5615dcf9911f068786dc);
             foreach ($v21ffce5b8a6cc8cc6a41448dd69623c9 as $vb068931cc450442b63f5b3d276ea4297 => $v2063c1608d6e0baf80249c42e2be5804) {
                 $v2063c1608d6e0baf80249c42e2be5804 = $this->replaceParams($v2063c1608d6e0baf80249c42e2be5804);
                 $v801f7201346b43f8ee8390a1ef20ddcd->setParameter("", $vb068931cc450442b63f5b3d276ea4297, $v2063c1608d6e0baf80249c42e2be5804);
             }
             $this->buffer = $v801f7201346b43f8ee8390a1ef20ddcd->transformToXML($this->loadBufferDom());
         } else {
             throw new coreException("Transformation failed. File {$v25d902c24283ab8cfbac54dfa101ad31} doesn't exists.");
         }
     }
 }