From dedf5feaa2cf3072e90ac2bf2ef3885facd2e1a6 Mon Sep 17 00:00:00 2001 From: Florian Schaal <florian@schaal-24.de> Date: Sun, 20 Dec 2015 04:39:34 -0500 Subject: [PATCH] Merge branch 'master' of http://git.ispconfig.org/ispconfig/ispconfig3 --- interface/lib/classes/tpl.inc.php | 65 ++++++++++++++++++++++++++++---- 1 files changed, 57 insertions(+), 8 deletions(-) diff --git a/interface/lib/classes/tpl.inc.php b/interface/lib/classes/tpl.inc.php index 34df2a9..928c215 100644 --- a/interface/lib/classes/tpl.inc.php +++ b/interface/lib/classes/tpl.inc.php @@ -839,28 +839,34 @@ * @access private * @return mixed data/string or boolean */ - private function _getData ($tmplfile, $do_eval=false) + private function _getData ($tmplfile, $do_eval=false, $tmpl_from_string = false) { //* check the current file depth if ($this->_includedepth > $this->OPTIONS['MAX_INCLUDES'] || $tmplfile == false) { return; } else { if ($this->_debug){ - array_push($this->_debugIncludedfiles, $tmplfile); + if($tmpl_from_string) array_push($this->_debugIncludedfiles, 'String: ' . substr($tmplfile, 0, 25) . '...'); + else array_push($this->_debugIncludedfiles, $tmplfile); } if ($do_eval) { - array_push($this->_currentincludedir, dirname($tmplfile)); + if($tmpl_from_string == true) array_push($this->_currentincludedir, end($this->_currentincludedir)); + else array_push($this->_currentincludedir, dirname($tmplfile)); $this->_includedepth++; } } - if($this->_cache && $this->_checkCache($tmplfile)) { //* cache exists so lets use it + if($this->_cache && $this->_checkCache($tmplfile, $tmpl_from_string)) { //* cache exists so lets use it $data = fread($fp = fopen($this->_cachefile, 'r'), filesize($this->_cachefile)); fclose($fp); } else { //* no cache lets parse the file - $data = fread($fp = fopen($tmplfile, 'r'), filesize($tmplfile)); - fclose($fp); + if($tmpl_from_string == true) { + $data = $tmplfile; + } else { + $data = fread($fp = fopen($tmplfile, 'r'), filesize($tmplfile)); + fclose($fp); + } $regex = '/(<|<\/|{|{\/|<!--|<!--\/){1}\s*'; $regex.= 'tmpl_([\w]+)\s*'; @@ -884,7 +890,7 @@ } //* now we must parse the $data and check for any <tmpl_include>'s - if ($this->_debug) $this->doDebugWarnings(file($tmplfile), $tmplfile); + if ($this->_debug && $tmpl_from_string == false) $this->doDebugWarnings(file($tmplfile), $tmplfile); if ($do_eval) { $success = @eval('?>'.$data.'<?php return 1;'); @@ -1061,6 +1067,46 @@ } } + /** + * returns a string containing hook data + * @param string $type + * @param string $name + * @return string hook data + */ + private function _parseHook ($name) + { + global $app; + + if(!$name) return false; + + $module = isset($_SESSION['s']['module']['name']) ? $_SESSION['s']['module']['name'] : ''; + $form = isset($app->tform->formDef['name']) ? $app->tform->formDef['name'] : ''; + + $events = array(); + if($module) { + $events[] = $module . ':' . ($form ? $form : '') . ':' . $name; + $events[] = $module . ':' . ($form ? $form : '') . ':on_template_content'; + } else { + $events[] = $name; + $events[] = 'on_template_content'; + } + + $events = array_unique($events); + + for($e = 0; $e < count($events); $e++) { + $tmpresult = $app->plugin->raiseEvent($events[$e], array( + 'name' => $name, + 'module' => $module, + 'form' => $form + ), true); + if(!$tmpresult) $tmpresult = ''; + else $tmpresult = $this->_getData($tmpresult, false, true); + + $result .= $tmpresult; + } + + return $result; + } /** * returns a string used for parsing in tmpl_loop statements. @@ -1254,7 +1300,10 @@ if ($this->OPTIONS['ENABLE_PHPINCLUDE']) { return '<?php include(\''.$file.'\'); ?>'; } - + + case 'hook': + return $this->_parseHook(@$var); + case 'include': return '<?php $this->_getData($this->_fileSearch(\''.$file.'\'), 1); ?>'; -- Gitblit v1.9.1