Mercurial > SimpleWebPresenter
changeset 63:92c3e52c12d4
Moved inputParser to InputParser
| author | Tom Fredrik "BFG" Klaussen <bfg@blenning.no> |
|---|---|
| date | Thu, 11 Oct 2012 20:26:27 +0200 |
| parents | b7efe2ecbc11 |
| children | 164268b4e0d9 |
| files | InputParser.inc index.php inputParser.inc |
| diffstat | 3 files changed, 279 insertions(+), 279 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/InputParser.inc Thu Oct 11 20:26:27 2012 +0200 @@ -0,0 +1,278 @@ +<?php +/** + * @file + * Functionality for translating an XML document into a webpage + */ +class InputParser { + private $options; + private $master; + + function __construct($name, $masterCache) { + $this->master = new DOMDocument(); + $cache = $masterCache; + $cache->cache_time($name); + $this->master->load($name); + + $this->options = new Options($this->master); + $this->options->setCache($cache); + $this->options->setBasePath(basePath()); + $this->options->setCacheable(true); + + $this->options->setUrlParams(array('name', 'lang')); + + if(array_key_exists('lang', $_GET) && $_GET['lang']) { + $this->options->setLang($_GET['lang']); + } + else { + $this->options->setLang($this->options->getDefaultLang()); + } + + if(array_key_exists('name', $_GET) && $_GET['name']) { + $this->options->setName($_GET['name']); + } + + $params = $this->master->getElementsByTagName("param"); + + foreach ($params as $param) { + if ($param->getAttribute("type") == "input") { + $doc = self::getInput($this->master, $param, $this->options); + + $parent = $param->parentNode; + foreach ($doc->firstChild->childNodes as $child) { + $clonedChild = $this->master->importNode($child, true); + $parent->insertBefore($clonedChild, $param); + } + $parent->removeChild($param); + } + } + $this->master = self::getFiles($this->master, $this->options); + + } + + function genPage() + { + if (CACHING && $this->options->getCacheable()) + $this->options->getCache()->CheckHttpModified(); + + print $this->master->saveXml($this->master); + //print_r($cache->cacheSet(1)); + } + + + 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, self::getParam($param)); + } + } + } + return $param_value; + } + + function getFiles($doc, $options) { + $lang = $options->getLang(); + $conf = $options->getName(); + + $toRemove = array(); + + $topLevelTags = $doc->getElementsByTagName("toplevel"); + foreach ($topLevelTags as $topLevel) { + $topLevel->parentNode->removeChild($topLevel); + } + + $valueDict = array(); + $fragments = array(); + $setters = $doc->getElementsByTagName("set"); + foreach ($setters as $setTag) { + $key = $setTag->getAttribute("id"); + $type = $setTag->getAttribute("type"); + if ($type == "fragment") { + $fragments[$key] = $setTag; + } + else { + $value = $setTag->getAttribute("value"); + if ($key && $value) { + $valueDict[$key] = $value; + } + } + //We need to iterate in the opposite direction when removing, + //so best shifting. + array_unshift($toRemove, $setTag); + } + + $params = $doc->getElementsByTagName("param"); + foreach ($params as $param) { + if ($param->getAttribute("type")=="input_config") { + $id = $param->getAttribute("id"); + if (array_key_exists($id, $valueDict)) { + $value = $valueDict[$id]; + $tmp = new DOMDocument(); + + $tmp->loadXml("<xml>${value}</xml>"); + $parent = $param->parentNode; + $parent->insertBefore(new DOMText($tmp->textContent), $param); + //We need to iterate in the opposite direction when removing, + //so best shifting. + array_unshift($toRemove, $param); + } + elseif (array_key_exists($id, $fragments)) { + $fragment = $fragments[$id]; + + $cloneFragment = $fragment->cloneNode(true); + $insNode = $param; + for ($i = $cloneFragment->childNodes->length - 1; $i >= 0; $i--) { + $child = $cloneFragment->childNodes->item($i); + $child = $child->parentNode->removeChild($child); + $insNode = $insNode->parentNode->insertBefore($child, $insNode); + } + + //We need to iterate in the opposite direction when removing, + //so best shifting. + array_unshift($toRemove, $param); + } + } + } + + foreach($toRemove as $param) { + $parent = $param->parentNode; + $parent->removeChild($param); + } + + $body = getElementByTagName($doc,"body"); + $files = $body->getElementsByTagName("file"); + + $toRemove = array(); + + foreach ($files as $file) { + $script = $file->getAttribute("script"); + if ($script) { + $options->setCacheable(false); + $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 = $options->getBasePath() . "/${lang}/${src}"; + $file_content = $options->getCache()->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, \$options"; + $param_values = array(); + $i = 0; + foreach ($filter->childNodes as $param) { + if ($param->nodeType == XML_ELEMENT_NODE) + { + $param_value[$i] = self::getParam($param); + $callString .= ",\$param_value[$i]"; + $i++; + } + } + $callString .= ");"; + eval($callString); + } + $ndoc = new DOMDocument(); + + $ndoc->loadXml("<xml>${file_content}</xml>"); + + $parent = $file->parentNode; + foreach ($ndoc->firstChild->childNodes as $child) { + $clonedChild = $doc->importNode($child, true); + $parent->insertBefore($clonedChild, $file); + } + //We need to iterate in the opposite direction when removing, + //so best shifting. + array_unshift($toRemove, $file); + } + foreach($toRemove as $param) { + $parent = $param->parentNode; + $parent->removeChild($param); + } + + return $doc; + } + + function getInput($master, $param, $options) + { + $lang = $options->getLang(); + $name = $param->getAttribute("id"); + $conf = $options->getName(); + if (!$conf) + $conf = $param->getAttribute("default"); + + $confFile = $options->getBasePath() . "/${lang}/${conf}.xml"; + $options->getCache()->cache_time($confFile); + $doc = new DOMDocument(); + $doc->load($confFile); + + $toplevel = $doc->getElementsByTagName("toplevel"); + + if(! $toplevel->length) { + errorPage("Resource '${conf}' is not available", 500); + } + + $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(); + $subfile = $options->getBasePath() . "/${lang}/${src}"; + $subdoc->load("$subfile"); + $options->getCache()->cache_time($subfile); + $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"); + } + + return $doc; + } +} +?> \ No newline at end of file
--- a/index.php Thu Oct 11 18:21:59 2012 +0200 +++ b/index.php Thu Oct 11 20:26:27 2012 +0200 @@ -16,7 +16,7 @@ $cache->includeOnce('Options.inc', $baseDir); $cache->includeOnce('common-functions.inc', $baseDir); $cache->includeOnce('filters.inc', $baseDir); -$cache->includeOnce('inputParser.inc', $baseDir); +$cache->includeOnce('InputParser.inc', $baseDir); $cache->includeOnce('logger.inc', $baseDir); if (DEBUG_LEVEL >= VERBOSITY_DEBUG) {
--- a/inputParser.inc Thu Oct 11 18:21:59 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,278 +0,0 @@ -<?php -/** - * @file - * Functionality for translating an XML document into a webpage - */ -class InputParser { - private $options; - private $master; - - function __construct($name, $masterCache) { - $this->master = new DOMDocument(); - $cache = $masterCache; - $cache->cache_time($name); - $this->master->load($name); - - $this->options = new Options($this->master); - $this->options->setCache($cache); - $this->options->setBasePath(basePath()); - $this->options->setCacheable(true); - - $this->options->setUrlParams(array('name', 'lang')); - - if(array_key_exists('lang', $_GET) && $_GET['lang']) { - $this->options->setLang($_GET['lang']); - } - else { - $this->options->setLang($this->options->getDefaultLang()); - } - - if(array_key_exists('name', $_GET) && $_GET['name']) { - $this->options->setName($_GET['name']); - } - - $params = $this->master->getElementsByTagName("param"); - - foreach ($params as $param) { - if ($param->getAttribute("type") == "input") { - $doc = self::getInput($this->master, $param, $this->options); - - $parent = $param->parentNode; - foreach ($doc->firstChild->childNodes as $child) { - $clonedChild = $this->master->importNode($child, true); - $parent->insertBefore($clonedChild, $param); - } - $parent->removeChild($param); - } - } - $this->master = self::getFiles($this->master, $this->options); - - } - - function genPage() - { - if (CACHING && $this->options->getCacheable()) - $this->options->getCache()->CheckHttpModified(); - - print $this->master->saveXml($this->master); - //print_r($cache->cacheSet(1)); - } - - - 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, self::getParam($param)); - } - } - } - return $param_value; - } - - function getFiles($doc, $options) { - $lang = $options->getLang(); - $conf = $options->getName(); - - $toRemove = array(); - - $topLevelTags = $doc->getElementsByTagName("toplevel"); - foreach ($topLevelTags as $topLevel) { - $topLevel->parentNode->removeChild($topLevel); - } - - $valueDict = array(); - $fragments = array(); - $setters = $doc->getElementsByTagName("set"); - foreach ($setters as $setTag) { - $key = $setTag->getAttribute("id"); - $type = $setTag->getAttribute("type"); - if ($type == "fragment") { - $fragments[$key] = $setTag; - } - else { - $value = $setTag->getAttribute("value"); - if ($key && $value) { - $valueDict[$key] = $value; - } - } - //We need to iterate in the opposite direction when removing, - //so best shifting. - array_unshift($toRemove, $setTag); - } - - $params = $doc->getElementsByTagName("param"); - foreach ($params as $param) { - if ($param->getAttribute("type")=="input_config") { - $id = $param->getAttribute("id"); - if (array_key_exists($id, $valueDict)) { - $value = $valueDict[$id]; - $tmp = new DOMDocument(); - - $tmp->loadXml("<xml>${value}</xml>"); - $parent = $param->parentNode; - $parent->insertBefore(new DOMText($tmp->textContent), $param); - //We need to iterate in the opposite direction when removing, - //so best shifting. - array_unshift($toRemove, $param); - } - elseif (array_key_exists($id, $fragments)) { - $fragment = $fragments[$id]; - - $cloneFragment = $fragment->cloneNode(true); - $insNode = $param; - for ($i = $cloneFragment->childNodes->length - 1; $i >= 0; $i--) { - $child = $cloneFragment->childNodes->item($i); - $child = $child->parentNode->removeChild($child); - $insNode = $insNode->parentNode->insertBefore($child, $insNode); - } - - //We need to iterate in the opposite direction when removing, - //so best shifting. - array_unshift($toRemove, $param); - } - } - } - - foreach($toRemove as $param) { - $parent = $param->parentNode; - $parent->removeChild($param); - } - - $body = getElementByTagName($doc,"body"); - $files = $body->getElementsByTagName("file"); - - $toRemove = array(); - - foreach ($files as $file) { - $script = $file->getAttribute("script"); - if ($script) { - $options->setCacheable(false); - $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 = $options->getBasePath() . "/${lang}/${src}"; - $file_content = $options->getCache()->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, \$options"; - $param_values = array(); - $i = 0; - foreach ($filter->childNodes as $param) { - if ($param->nodeType == XML_ELEMENT_NODE) - { - $param_value[$i] = self::getParam($param); - $callString .= ",\$param_value[$i]"; - $i++; - } - } - $callString .= ");"; - eval($callString); - } - $ndoc = new DOMDocument(); - - $ndoc->loadXml("<xml>${file_content}</xml>"); - - $parent = $file->parentNode; - foreach ($ndoc->firstChild->childNodes as $child) { - $clonedChild = $doc->importNode($child, true); - $parent->insertBefore($clonedChild, $file); - } - //We need to iterate in the opposite direction when removing, - //so best shifting. - array_unshift($toRemove, $file); - } - foreach($toRemove as $param) { - $parent = $param->parentNode; - $parent->removeChild($param); - } - - return $doc; - } - - function getInput($master, $param, $options) - { - $lang = $options->getLang(); - $name = $param->getAttribute("id"); - $conf = $options->getName(); - if (!$conf) - $conf = $param->getAttribute("default"); - - $confFile = $options->getBasePath() . "/${lang}/${conf}.xml"; - $options->getCache()->cache_time($confFile); - $doc = new DOMDocument(); - $doc->load($confFile); - - $toplevel = $doc->getElementsByTagName("toplevel"); - - if(! $toplevel->length) { - errorPage("Resource '${conf}' is not available", 500); - } - - $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(); - $subfile = $options->getBasePath() . "/${lang}/${src}"; - $subdoc->load("$subfile"); - $options->getCache()->cache_time($subfile); - $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"); - } - - return $doc; - } -} -?> \ No newline at end of file
