= 5) { function xslt_create() { return new XsltProcessor(); } function xslt_free($xsltproc) { unset($xsltproc); } function xslt_process($xsltproc, $xml_arg, $xsl_arg, $xslcontainer = null, $args = null, $params = null) { // Start with preparing the arguments $xml_arg = str_replace('arg:', '', $xml_arg); $xsl_arg = str_replace('arg:', '', $xsl_arg); // Load the xml document and the xsl template // creating instances of the DomDocument class $xml = DOMDocument::loadXML($args[$xml_arg]); $xsl = DOMDocument::loadXML($args[$xsl_arg]); // Load the xsl template $xsltproc->importStyleSheet($xsl); // Set parameters when defined if($params) foreach($params as $param => $value) $xsltproc->setParameter("", $param, $value); // Start the transformation $processed = $xsltproc->transformToXML($xml); // Put the result in a file when specified if($xslcontainer) return @file_put_contents($xslcontainer, $processed); else return $processed; } } if(!function_exists('file_get_contents')) { function file_get_contents($file) { $v = file($file); return ($v) ? implode('', $v) : false; } } if(!function_exists('file_put_contents')) { function file_put_contents($filename, $data, $file_append = false) { $fp = fopen($filename, (!$file_append ? 'w+' : 'a+')); if(!$fp) trigger_error('file_put_contents cannot write in file.', E_USER_ERROR); else { fputs($fp, $data); fclose($fp); } } } Markup ('xml4pmwiki', 'directives', '/\\(:xml4pmwiki (.*):\\)/e', "xml4pmwiki(\$pagename,ParseArgs(PSS('$1')))"); function xml4pmwiki($pagename,$args) { global $UploadFileFmt; foreach (array('xml', 'xsl') as $v) { if(preg_match('/^Attach:(.*)/', $args[$v], $m)) { if(preg_match('!^(.*)/([^/]+)$!', $m[1], $match)) { $pagename = MakePageName($pagename, $match[1]); $path = $match[2]; } else $path = $m[1]; $upname = MakeUploadName($pagename, $path); $filepath = FmtPageName("$UploadFileFmt/$upname", $pagename); $xslt_args["/_$v"] = @file_get_contents($filepath); } elseif(preg_match('/^((?:https?|ftps?):\/\/.+)/', $args[$v], $m)) $xslt_args["/_$v"] = @file_get_contents($m[1]); else $xslt_args["/_$v"] = preg_replace('/(?:\s*\[@\s*|\s*@\]\s*)/', '', RetrieveAuthSection($pagename,$args[$v])); if(!$xslt_args["/_$v"]) return Keep("
$v data not found
"); } $debug = @in_array('debug', $args['+']); $redoMarkup = ! @in_array('markup', $args['-']); $xslisutf8 = @in_array('xslisutf8', $args['']); if (!$xslisutf8) $xslt_args['/_xsl'] = utf8_encode($xslt_args['/_xsl']); unset($args['#'], $args['xml'], $args['xsl'], $args['+'], $args['-'], $args['']); $l = setlocale(LC_ALL,0); $xh = xslt_create(); $result = utf8_decode(xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $xslt_args, $args)); xslt_free($xh); setlocale(LC_ALL,$l); if($debug) return Keep("
".htmlentities($result)."
"); if($redoMarkup) return PRR(str_replace('<', '<', $result)); return Keep($result); }