Marius Burkard
2016-04-20 67d99a763eb9f44d3ef4fd334d1293ae8ccd847e
server/lib/classes/tpl.inc.php
@@ -839,28 +839,32 @@
       * @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
            $data = fread($fp = fopen($this->_cachefile, 'r'), filesize($this->_cachefile));
            fclose($fp);
         if($this->_cache && $this->_checkCache($tmplfile, $tmpl_from_string)) { //* cache exists so lets use it
            $data = file_get_contents($this->_cachefile);
         } 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 = file_get_contents($tmplfile);
            }
            $regex = '/(<|<\/|{|{\/|<!--|<!--\/){1}\s*';
            $regex.= 'tmpl_([\w]+)\s*';
@@ -884,7 +888,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 +1065,29 @@
         }
      }
      /**
       * returns a string containing hook data
       * @param string $type
       * @param string $name
       * @return string hook data
       */
      private function _parseHook ($name)
      {
         global $app;
         $namespace = '';
         if(strpos($name, ':') !== false) list($namespace, $name) = explode(':', $name, 2);
         $result = $app->plugins->raiseAction('on_template_content_hook', array(
            'name' => $name,
            'namespace' => $namespace,
            'vars' => $this->_vars
         ), true);
         if(!$result) $result = '';
         else $result = $this->_getData($result, false, true);
         return $result;
      }
      /**
       * returns a string used for parsing in tmpl_loop statements.
@@ -1254,7 +1281,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); ?>';