Mercurial > SimpleWebPresenter
view index.php @ 19:ee2c31392ea3
Merge
Regression, fast cache-checking has been removed.
| author | Tom Fredrik "BFG" Klaussen <bfg@blenning.no> |
|---|---|
| date | Wed, 19 Sep 2012 15:50:18 +0200 |
| parents | a64e8f968e7e a20bb1b51aad |
| children | ac24b41a12ad |
line wrap: on
line source
<?php define(DEBUG,0); define(MAX_RECURSE,50); define(CACHING,0); /* var_dump($_SERVER); exit; */ function include_with_mtime($file) { global $newest; $mtime = filemtime($file); if ($mtime > $newest) { $newest = $mtime; } include $file; } if (DEBUG) { error_reporting(E_ALL); ini_set("display_errors", 1); } $SCRIPT_FILENAME=$_SERVER['SCRIPT_FILENAME']; $newest = filemtime($SCRIPT_FILENAME); $cachable = true; <<<<<<< local include_with_mtime('php/cache_check.inc'); include_with_mtime('php/accept-language.inc'); include_with_mtime('php/filters.inc'); include_with_mtime('php/common-functions.inc'); ======= if(CACHING) { include 'php/cache_check.inc'; } include 'php/accept-language.inc'; include 'php/filters.inc'; include 'php/common-functions.inc'; >>>>>>> other $URL_PARAMS=array('name', 'lang'); #Globals $name = $_GET['name']; $lang = $_GET['lang']; if(!$name) { $name="home"; } if(!$lang) { $lang="no"; $langs=acceptedLanguages(); if ($langs) { foreach ($langs as $l => $val) { if (file_exists($l)) { $lang=$l; break; } } } } <<<<<<< local $title="Dummy title"; $config=loadFile("${lang}/${name}.xml"); $confFile="${lang}/${name}.xml"; if (!file_exists($confFile)) { errorPage("Resource not available"); } $doc = new DOMDocument(); $doc->load($confFile); $includes=$doc->getElementsByTagName("include"); $recurse=0; while($includes->length > 0) { if(++$recurse > MAX_RECURSE) { errorPage('Recursion limit exceeded', 500); } foreach ($includes as $include) { $src=$include->getAttribute("src"); $subdoc = new DOMDocument(); $fname = "${lang}/${src}"; $subdoc->load($fname); $mtime = filemtime($fname); if ($mtime > $newest) { $newest = $mtime; } $parent=$include->parentNode; $xml=getElementByTagName($subdoc,"xml"); foreach($xml->childNodes as $child) { $text=$subdoc->saveXml($child); $clonedChild=$doc->importNode($child,true); $parent->insertBefore($clonedChild,$include); } $parent->removeChild($include); } $includes=$doc->getElementsByTagName("include"); } $head=getElementByTagName($doc,"head"); $title=$head->getAttribute("title"); $css=getElementByTagName($head,"css"); $css=$doc->saveXML($css); $css=preg_replace('/\s*<\/?\s*css\s*>\s*/s', '', $css); $body=getElementByTagName($doc,"body"); $files=$body->getElementsByTagName("file"); $out= '<?xml version="1.0" encoding="UTF-8"?>'; $out.= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>'; $out.= "$title"; $out.= ' </title> '; $out.= "$css"; $out.= ' </head> <body> <div id="container"> '; ======= >>>>>>> other function getParam($param) { $param_type=$param->getAttribute("type"); $param_value; if (!$param_type) $param_type="scalar"; if($param_type == "scalar") { $param_subst=$param->getAttribute("subst"); $param_value=$param->getAttribute("value"); if ($param_subst) { /* $param_value=preg_replace("/name/", $name, $param_subst); $param_value=preg_replace('/lang/', $lang, $param_value); */ } } elseif($param_type == "array") { $params=$param->getElementsByTagName("param"); $param_value=array(); foreach ($param->childNodes as $param) { if ($param->nodeType == XML_ELEMENT_NODE) { array_push($param_value, getParam($param)); } } } return $param_value; } function getInput($master, $param) { $out=''; $lang=$GLOBALS['lang']; $name=$param->getAttribute("id"); $conf=$_GET[$name]; $GLOBALS[$name]=$conf; if (!$conf) $conf=$param->getAttribute("default"); $config=loadFile("${lang}/${conf}.xml"); $confFile="${lang}/${conf}.xml"; if (!file_exists($confFile)) { errorPage("Resource not available"); } $doc = new DOMDocument(); $doc->load($confFile); $includes=$doc->getElementsByTagName("include"); $recurse=0; while($includes->length>0) { if(++$recurse>MAX_RECURSE) { errorPage('Recursion limit exceeded', 500); } foreach ($includes as $include) { $src=$include->getAttribute("src"); $subdoc = new DOMDocument(); $subdoc->load("${lang}/${src}"); $parent=$include->parentNode; $xml=getElementByTagName($subdoc,"xml"); foreach($xml->childNodes as $child) { $text=$subdoc->saveXml($child); $clonedChild=$doc->importNode($child,true); $parent->insertBefore($clonedChild,$include); } $parent->removeChild($include); } $includes=$doc->getElementsByTagName("include"); } $head=getElementByTagName($doc,"head"); $title=$head->getAttribute("title"); if($title) { $values=$master->getElementsByTagName("param"); foreach ($values as $value) { if ($value->getAttribute("type")=="input_config") { if ($value->getAttribute("id")=="title") { $tmp = new DOMDocument(); $tmp->loadXml("<xml>${title}</xml>"); $parent=$value->parentNode; $parent->removeChild($value); $parent->appendChild(new DOMText($tmp->textContent)); } } } } $css=getElementByTagName($head,"css"); $css=$doc->saveXML($css); $css=preg_replace('/\s*<\/?\s*css\s*>\s*/s', '', $css); if($css) { $values=$master->getElementsByTagName("param"); foreach ($values as $value) { if ($value->getAttribute("type")=="input_config") { if ($value->getAttribute("id")=="css") { $tmp = new DOMDocument(); $tmp->loadXml("<xml>${css}</xml>"); $parent=$value->parentNode; foreach($tmp->firstChild->childNodes as $node) { $clonedChild=$master->importNode($node,true); $parent->insertBefore($clonedChild,$value); } $parent->removeChild($value); } } } } $body=getElementByTagName($doc,"body"); $files=$body->getElementsByTagName("file"); foreach ($files as $file) { if ($file->getAttribute("script")) { $cachable = false; break; } else { $src = $file->getAttribute("src"); $fname = "${lang}/${src}"; if (!file_exists($fname)) { errorPage("Resource not found '${fname}'"); } cache_time($fname); } } if ($cachable) cache_check($newest); foreach ($files as $file) { $script = $file->getAttribute("script"); if ($script) { $src = ""; $cwd = getcwd(); $matches=array(); preg_match('/(.*\/)/', $script, $matches); $dirname=$matches[0]; preg_match('/([^\/]*)$/', $script, $matches); $filename=$matches[0]; chdir("${lang}/${dirname}"); $pipe=popen("php ${filename}","r"); $file_content = stream_get_contents($pipe); chdir("${cwd}"); } else { $src = $file->getAttribute("src"); $fname = "${lang}/${src}"; $file_content = loadFile($fname); } if(floatval($file_content) < 0) { errorPage("Resource not found '${lang}/${src}'"); } $filters=$file->getElementsByTagName("filter"); foreach($filters as $filter) { $func=$filter->getAttribute("function"); $params=$filter->getElementsByTagName("param"); $callString="\$file_content=${func}(\$file_content"; $param_values=array(); $i=0; foreach ($filter->childNodes as $param) { if ($param->nodeType == XML_ELEMENT_NODE) { $param_value[$i]=getParam($param); $callString.=",\$param_value[$i]"; $i++; } } $callString.=");"; eval($callString); } $out.= $file_content; } <<<<<<< local $out.=' </div> </body> </html> '; ======= $doc = new DOMDocument(); $doc->loadXml("<xml>${out}</xml>"); >>>>>>> other return $doc; } $master = new DOMDocument(); $master->load("master.xml"); $params=$master->getElementsByTagName("param"); foreach ($params as $param) { if ($param->getAttribute("type") == "input") { $doc=getInput($master,$param); $parent=$param->parentNode; foreach ($doc->firstChild->childNodes as $child) { $clonedChild=$master->importNode($child,true); $parent->insertBefore($clonedChild,$param); } $parent->removeChild($param); } } print $master->saveXml($master); ?>
