pedro_morgan
2007-08-18 d9bb625523f2037efcb4ae6e51c961fee6eb1583
* Made the tpl class php 5
* Minor tweaks


2 files modified
528 ■■■■ changed files
interface/lib/classes/tpl.inc.php 520 ●●●● patch | view | raw | blame | history
interface/lib/classes/tpl_ini.inc.php 8 ●●●●● patch | view | raw | blame | history
interface/lib/classes/tpl.inc.php
@@ -1,12 +1,15 @@
<?php
/**
 * Template Class
 *
 * @author Kelvin Jones <kelvin@kelvinjones.co.uk>
 * @copyright  2002 Active Fish Group
 * @version 1.1
 * @package ISPConfig
 */
* vlibTemplate is a class used to seperate PHP and HTML.
* For instructions on how to use vlibTemplate, see the
* vlibTemplate.html file, located in the 'docs' directory.
*
* @since 07/03/2002
* @author Kelvin Jones <kelvin@kelvinjones.co.uk>
* @package vLIB
* @access public
* @see vlibTemplate.html
*/
/* vim: set expandtab tabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
@@ -19,160 +22,130 @@
//
// $Id: class.tpl.inc.php,v 1.1 2003/07/08 12:31:10 platinum Exp $
// check to avoid multiple including of class
//** check to avoid multiple including of class
if (!defined('vlibTemplateClassLoaded')) {
    define('vlibTemplateClassLoaded', 1);
    global $conf;
       include_once ($conf['classpath'].'/tpl_error.inc.php');
       include_once ($conf['classpath'].'/tpl_ini.inc.php');
    /**
     * vlibTemplate is a class used to seperate PHP and HTML.
     * For instructions on how to use vlibTemplate, see the
     * vlibTemplate.html file, located in the 'docs' directory.
     *
     * @since 07/03/2002
     * @author Kelvin Jones <kelvin@kelvinjones.co.uk>
     * @package vLIB
     * @access public
     * @see vlibTemplate.html
     */
    class tpl {
    /*-----------------------------------------------------------------------------\
    |                                 ATTENTION                                    |
    |  Do not touch the following variables. vlibTemplate will not work otherwise. |
    \-----------------------------------------------------------------------------*/
        var $OPTIONS = array(
                        'MAX_INCLUDES'          =>   10,
                        'TEMPLATE_DIR'          => null,
                        'GLOBAL_VARS'           => null,
                        'GLOBAL_CONTEXT_VARS'   => null,
                        'LOOP_CONTEXT_VARS'     => null,
                        'SET_LOOP_VAR'          => null,
                        'DEFAULT_ESCAPE'        => null,
                        'STRICT'                => null,
                        'CASELESS'              => null,
                        'UNKNOWNS'              => null,
                        'TIME_PARSE'            => null,
                        'ENABLE_PHPINCLUDE'     => null,
                        'INCLUDE_PATHS'         => array(),
                        'CACHE_DIRECTORY'       => null,
                        'CACHE_LIFETIME'        => null,
                        'CACHE_EXTENSION'       => null
                             );
    class tpl{
        /*-----------------------------------------------------------------------------\
        |                                 ATTENTION                                    |
        |  Do not touch the following variables. vlibTemplate will not work otherwise. |
        \-----------------------------------------------------------------------------*/
        private $OPTIONS = array(
                'MAX_INCLUDES'          =>   10,
                'TEMPLATE_DIR'          => null,
                'GLOBAL_VARS'           => null,
                'GLOBAL_CONTEXT_VARS'   => null,
                'LOOP_CONTEXT_VARS'     => null,
                'SET_LOOP_VAR'          => null,
                'DEFAULT_ESCAPE'        => null,
                'STRICT'                => null,
                'CASELESS'              => null,
                'UNKNOWNS'              => null,
                'TIME_PARSE'            => null,
                'ENABLE_PHPINCLUDE'     => null,
                'INCLUDE_PATHS'         => array(),
                'CACHE_DIRECTORY'       => null,
                'CACHE_LIFETIME'        => null,
                'CACHE_EXTENSION'       => null
                );
        /** open and close tags used for escaping */
        var $ESCAPE_TAGS = array(
                            'html' => array('open' => 'htmlspecialchars('
                                            ,'close'=> ', ENT_QUOTES)'),
                            'url' => array('open' => 'urlencode('
                                            ,'close'=> ')'),
                            'rawurl'=>array('open' => 'rawurlencode('
                                            ,'close'=> ')'),
                            'sq' => array('open' => 'addcslashes('
                                            ,'close'=> ", \"'\")"),
                            'dq' => array('open' => 'addcslashes('
                                            ,'close'=> ", '\"')"),
                            '1' => array('open' => 'htmlspecialchars('
                                            ,'close'=> ', ENT_QUOTES)'),
                            '0' => array('open' => ''
                                            ,'close'=> ''),
                            'none' => array('open' => ''
                                            ,'close'=> ''),
                            'hex'        => array('open' => '$this->_escape_hex(',
                                            'close'=> ', false)'),
                            'hexentity'  => array('open' => '$this->_escape_hex(',
                                            'close'=> ', true)')
                                );
        private $ESCAPE_TAGS = array(
                'html'      => array('open' => 'htmlspecialchars('    ,'close'=> ', ENT_QUOTES)'),
                'url'       => array('open' => 'urlencode('           ,'close'=> ')'),
                'rawurl'    => array('open' => 'rawurlencode('        ,'close'=> ')'),
                'sq'        => array('open' => 'addcslashes('         ,'close'=> ", \"'\")"),
                'dq'        => array('open' => 'addcslashes('         ,'close'=> ", '\"')"),
                '1'         => array('open' => 'htmlspecialchars('    ,'close'=> ', ENT_QUOTES)'),
                '0'         => array('open' => ''                     ,'close'=> ''),
                'none'      => array('open' => ''                     ,'close'=> ''),
                'hex'       => array('open' => '$this->_escape_hex('  ,'close'=> ', false)'),
                'hexentity' => array('open' => '$this->_escape_hex('  ,'close'=> ', true)')
                );
        /** open and close tags used for formatting */
        var $FORMAT_TAGS = array(
                            'strtoupper' => array('open' => 'strtoupper(',
                                            'close'=> ')'),
                            'uc'         => array('open' => 'strtoupper(',
                                            'close'=> ')'),
                            'strtolower' => array('open' => 'strtolower(',
                                            'close'=> ')'),
                            'lc'         => array('open' => 'strtolower(',
                                            'close'=> ')'),
                            'ucfirst'    => array('open' => 'ucfirst(',
                                            'close'=> ')'),
                            'lcucfirst'  => array('open' => 'ucfirst(strtolower(',
                                            'close'=> '))'),
                            'ucwords'    => array('open' => 'ucwords(',
                                            'close'=> ')'),
                            'lcucwords'  => array('open' => 'ucwords(strtolower(',
                                            'close'=> '))')
                                );
        private $FORMAT_TAGS = array(
                'strtoupper' => array('open' => 'strtoupper(',          'close'=> ')'),
                'uc'         => array('open' => 'strtoupper(',          'close'=> ')'),
                'strtolower' => array('open' => 'strtolower(',          'close'=> ')'),
                'lc'         => array('open' => 'strtolower(',          'close'=> ')'),
                'ucfirst'    => array('open' => 'ucfirst(',             'close'=> ')'),
                'lcucfirst'  => array('open' => 'ucfirst(strtolower(',  'close'=> '))'),
                'ucwords'    => array('open' => 'ucwords(',             'close'=> ')'),
                'lcucwords'  => array('open' => 'ucwords(strtolower(',  'close'=> '))')
                );
        /** operators allowed when using extended TMPL_IF syntax */
        var $allowed_if_ops = array('==','!=','<>','<','>','<=','>=');
        private $allowed_if_ops = array('==','!=','<>','<','>','<=','>=');
        /** dbs allowed by vlibTemplate::setDbLoop(). */
        var $allowed_loop_dbs = array('MYSQL','POSTGRESQL','INFORMIX','INTERBASE','INGRES',
                                      'MSSQL','MSQL','OCI8','ORACLE','OVRIMOS','SYBASE');
        private $allowed_loop_dbs = array('MYSQL','POSTGRESQL','INFORMIX','INTERBASE','INGRES',
                                        'MSSQL','MSQL','OCI8','ORACLE','OVRIMOS','SYBASE');
        /** root directory of vlibTemplate automagically filled in */
        var $VLIBTEMPLATE_ROOT = null;
        private $VLIBTEMPLATE_ROOT = null;
        /** contains current directory used when doing recursive include */
        var $_currentincludedir = array();
        private $_currentincludedir = array();
        /** current depth of includes */
        var $_includedepth = 0;
        private $_includedepth = 0;
        /** full path to tmpl file */
        var $_tmplfilename = null;
        private $_tmplfilename = null;
        /** file data before it's parsed */
        var $_tmplfile = null;
        private $_tmplfile = null;
        /** parsed version of file, ready for eval()ing */
        var $_tmplfilep = null;
        private $_tmplfilep = null;
        /** eval()ed version ready for printing or whatever */
        var $_tmploutput = null;
        private $_tmploutput = null;
        /** array for variables to be kept */
        var $_vars = array();
        private $_vars = array();
        /** array where loop variables are kept */
        var $_arrvars = array();
        private $_arrvars = array();
        /** array which holds the current namespace during parse */
        var $_namespace = array();
        private $_namespace = array();
        /** variable is set to true once the template is parsed, to save re-parsing everything */
        var $_parsed = false;
        private $_parsed = false;
        /** array holds all unknowns vars */
        var $_unknowns = array();
        private $_unknowns = array();
        /** microtime when template parsing began */
        var $_firstparsetime = null;
        private $_firstparsetime = null;
        /** total time taken to parse template */
        var $_totalparsetime = null;
        private $_totalparsetime = null;
        /** name of current loop being passed in */
        var $_currloopname = null;
        private $_currloopname = null;
        /** rows with the above loop */
        var $_currloop = array();
        private $_currloop = array();
        /** define vars to avoid warnings */
        var $_debug = null;
        var $_cache = null;
        private $_debug = null;
        private $_cache = null;
        
        /** array which holds the dynamic Includes */
        var $_dyninclude = array();
    /*-----------------------------------------------------------------------------\
    |                           public functions                                   |
    \-----------------------------------------------------------------------------*/
        private $_dyninclude = array();
        /*-----------------------------------------------------------------------------\
        |                           public functions                                   |
        \-----------------------------------------------------------------------------*/
        
        /**
         * FUNCTION: newTemplate
@@ -185,10 +158,11 @@
         * @return boolean true
         * @access public
         */
        function newTemplate ($tmplfile) {
        public function newTemplate($tmplfile)
        {
            if (!$tfile = $this->_fileSearch($tmplfile)) vlibTemplateError::raiseError('VT_ERROR_NOFILE',KILL,$tmplfile);
            // make sure that any parsing vars are cleared for the new template
            //* make sure that any parsing vars are cleared for the new template
            $this->_tmplfile = null;
            $this->_tmplfilep = null;
            $this->_tmploutput = null;
@@ -197,7 +171,7 @@
            $this->_firstparsetime = null;
            $this->_totalparsetime = null;
            // reset debug module
            //* reset debug module
            if ($this->_debug) $this->_debugReset();
            $this->_tmplfilename = $tfile;
@@ -216,7 +190,8 @@
         * @return boolean true/false
         * @access public
         */
        function setVar ($k,$v=null) {
        public function setVar($k, $v = null)
        {
            if (is_array($k)) {
                foreach($k as $key => $value){
                    $key = ($this->OPTIONS['CASELESS']) ? strtolower(trim($key)) : trim($key);
@@ -224,13 +199,11 @@
                        $this->_vars[$key] = $value;
                    }
                }
            }
            else {
            } else {
                if (preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $k) && $v !== null) {
                    if ($this->OPTIONS['CASELESS']) $k = strtolower($k);
                    $this->_vars[trim($k)] = $v;
                }
                else {
                } else {
                    return false;
                }
            }
@@ -249,8 +222,8 @@
         * @return boolean true/false
         * @access public
         */
        function setInclude($k, $v = null) {
        public function setInclude($k, $v = null)
        {
            if(is_array($k)) {
                foreach($k as $key => $val) {
                    $this->_dyninclude[$key] = $val;
@@ -258,7 +231,6 @@
            } else {
                $this->_dyninclude[$k] = $v;
            }
            return true;
        }
@@ -272,7 +244,8 @@
         * @return boolean true/false returns true unless called with 0 params
         * @access public
         */
        function unsetVar () {
        public function unsetVar()
        {
            $num_args = func_num_args();
            if ($num_args < 1)  return false;
@@ -293,7 +266,8 @@
         * @return array
         * @access public
         */
        function getVars () {
        public function getVars()
        {
            if (empty($this->_vars)) return false;
            return $this->_vars;
        }
@@ -306,7 +280,8 @@
         * @return var
         * @access public
         */
        function getVar ($var) {
        public function getVar($var)
        {
            if ($this->OPTIONS['CASELESS']) $var = strtolower($var);
            if (empty($var) || !isset($this->_vars[$var])) return false;
            return $this->_vars[$var];
@@ -320,13 +295,14 @@
         * @return true
         * @access public
         */
        function setContextVars () {
        public function setContextVars()
        {
            $_phpself = @$GLOBALS['HTTP_SERVER_VARS']['PHP_SELF'];
            $_pathinfo = @$GLOBALS['HTTP_SERVER_VARS']['PATH_INFO'];
            $_request_uri = @$GLOBALS['HTTP_SERVER_VARS']['REQUEST_URI'];
            $_qs   = @$GLOBALS['HTTP_SERVER_VARS']['QUERY_STRING'];
            // the following fixes bug of $PHP_SELF on Win32 CGI and IIS.
            //* the following fixes bug of $PHP_SELF on Win32 CGI and IIS.
            $_self = (!empty($_pathinfo)) ? $_pathinfo : $_phpself;
            $_uri  = (!empty($_request_uri)) ? $_request_uri : $_self.'?'.$_qs;
@@ -345,7 +321,8 @@
         * @return boolean true/false
         * @access public
         */
        function setLoop ($k,$v) {
        public function setLoop($k, $v)
        {
            if (is_array($v) && preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $k)) {
                $k = ($this->OPTIONS['CASELESS']) ? strtolower(trim($k)) : trim($k);
                $this->_arrvars[$k] = array();
@@ -368,7 +345,8 @@
         * @return boolean true/false
         * @access public
         */
        function setDbLoop ($loopname, $result, $db_type='MYSQL') {
        public function setDbLoop($loopname, $result, $db_type = 'MYSQL')
        {
            $db_type = strtoupper($db_type);
            if (!in_array($db_type, $this->allowed_loop_dbs)) {
                vlibTemplateError::raiseError('VT_WARNING_INVALID_LOOP_DB',WARNING, $db_type);
@@ -386,7 +364,7 @@
                    while($r = mysql_fetch_assoc($result)) {
                        $loop_arr[] = $r;
                    }
                break;
                    break;
                case 'POSTGRESQL':
                    if (get_resource_type($result) != 'pgsql result') {
@@ -399,7 +377,7 @@
                    for ($i=0; $i < $nr; $i++) {
                        $loop_arr[] = pg_fetch_array($result, $i, PGSQL_ASSOC);
                    }
                break;
                    break;
                case 'INFORMIX':
                    if (!$result) {
@@ -409,7 +387,7 @@
                    while($r = ifx_fetch_row($result, 'NEXT')) {
                        $loop_arr[] = $r;
                    }
                break;
                    break;
                case 'INTERBASE':
                    if (get_resource_type($result) != 'interbase result') {
@@ -419,7 +397,7 @@
                    while($r = ibase_fetch_row($result)) {
                        $loop_arr[] = $r;
                    }
                break;
                    break;
                case 'INGRES':
                    if (!$result) {
@@ -429,7 +407,7 @@
                    while($r = ingres_fetch_array(INGRES_ASSOC, $result)) {
                        $loop_arr[] = $r;
                    }
                break;
                    break;
                case 'MSSQL':
                    if (get_resource_type($result) != 'mssql result') {
@@ -439,7 +417,7 @@
                    while($r = mssql_fetch_array($result)) {
                        $loop_arr[] = $r;
                    }
                break;
                    break;
                case 'MSQL':
                    if (get_resource_type($result) != 'msql result') {
@@ -449,7 +427,7 @@
                    while($r = msql_fetch_array($result, MSQL_ASSOC)) {
                        $loop_arr[] = $r;
                    }
                break;
                    break;
                case 'OCI8':
                    if (get_resource_type($result) != 'oci8 statement') {
@@ -459,7 +437,7 @@
                    while(OCIFetchInto($result, &$r, OCI_ASSOC+OCI_RETURN_LOBS)) {
                        $loop_arr[] = $r;
                    }
                break;
                    break;
                case 'ORACLE':
                    if (get_resource_type($result) != 'oracle Cursor') {
@@ -469,7 +447,7 @@
                    while(ora_fetch_into($result, &$r, ORA_FETCHINTO_ASSOC)) {
                        $loop_arr[] = $r;
                    }
                break;
                    break;
                case 'OVRIMOS':
                    if (!$result) {
@@ -479,7 +457,7 @@
                    while(ovrimos_fetch_into($result, &$r, 'NEXT')) {
                        $loop_arr[] = $r;
                    }
                break;
                    break;
                case 'SYBASE':
                    if (get_resource_type($result) != 'sybase-db result') {
@@ -490,7 +468,7 @@
                    while($r = sybase_fetch_array($result)) {
                        $loop_arr[] = $r;
                    }
                break;
                    break;
            }
            $this->setLoop($loopname, $loop_arr);
            return true;
@@ -505,13 +483,13 @@
         * @return boolean true/false
         * @access public
         */
        function newLoop ($loopname) {
        public function newLoop($loopname)
        {
            if (preg_match('/^[a-z_]+[a-z0-9_]*$/i', $loopname)) {
                $this->_currloopname[$loopname] = $loopname;
                $this->_currloop[$loopname] = array();
                return true;
            }
            else {
            } else {
                return false;
            }
        }
@@ -526,7 +504,8 @@
         * @return boolean true/false
         * @access public
         */
        function addRow ($row, $loopname=null) {
        public function addRow($row, $loopname = null)
        {
            if (!$loopname) $loopname = $this->_currloopname[(count($this->_currloopname)-1)];
            if (!isset($this->_currloop[$loopname]) || empty($this->_currloopname)) {
@@ -536,8 +515,7 @@
            if (is_array($row)) {
                $this->_currloop[$loopname][] = $row;
                return true;
            }
            else {
            } else {
                return false;
            }
        }
@@ -552,7 +530,8 @@
         * @return boolean true/false
         * @access public
         */
        function addLoop ($loopname=null) {
        public function addLoop($loopname = null)
        {
            if ($loopname == null) { // add last loop used
                if (!empty($this->_currloop)) {
                    foreach ($this->_currloop as $k => $v) {
@@ -561,16 +540,13 @@
                    }
                    $this->_currloopname = array();
                    return true;
                }
                else {
                } else {
                    return false;
                }
            }
            elseif (!isset($this->_currloop[$loopname]) || empty($this->_currloopname)) { // newLoop not yet envoked
                    vlibTemplateError::raiseError('VT_WARNING_LOOP_NOT_SET',WARNING);
            } elseif (!isset($this->_currloop[$loopname]) || empty($this->_currloopname)) { // newLoop not yet envoked
                    vlibTemplateError::raiseError('VT_WARNING_LOOP_NOT_SET', WARNING);
                    return false;
            }
            else { // add a specific loop
            } else { // add a specific loop
                $this->setLoop($loopname, $this->_currloop[$loopname]);
                unset($this->_currloopname[$loopname], $this->_currloop[$loopname]);
            }
@@ -587,7 +563,8 @@
         * @return boolean true/false returns true unless called with 0 params
         * @access public
         */
        function unsetLoop () {
        public function unsetLoop()
        {
            $num_args = func_num_args();
            if ($num_args < 1) return false;
@@ -600,7 +577,6 @@
            return true;
        }
        /**
         * FUNCTION: reset
         *
@@ -610,7 +586,8 @@
         * @return boolean true
         * @access public
         */
        function reset () {
        public function reset()
        {
            $this->clearVars();
            $this->clearLoops();
            $this->_tmplfilename = null;
@@ -634,7 +611,8 @@
         * @return boolean true
         * @access public
         */
        function clearVars () {
        public function clearVars()
        {
            $this->_vars = array();
            return true;
        }
@@ -647,7 +625,8 @@
         * @return boolean true
         * @access public
         */
        function clearLoops () {
        public function clearLoops()
        {
            $this->_arrvars = array();
            $this->_currloopname = null;
            $this->_currloop = array();
@@ -662,7 +641,8 @@
         * @return boolean true
         * @access public
         */
        function clearAll () {
        public function clearAll()
        {
            $this->clearVars();
            $this->clearLoops();
            return true;
@@ -677,7 +657,8 @@
         * @return boolean true/false
         * @access public
         */
        function unknownsExist () {
        public function unknownsExist()
        {
            return (!empty($this->_unknowns));
        }
@@ -688,7 +669,8 @@
         *
         * @access public
         */
        function unknowns () {
        public function unknowns()
        {
            return $this->unknownsExist();
        }
@@ -701,7 +683,8 @@
         * @return array
         * @access public
         */
        function getUnknowns () {
        public function getUnknowns()
        {
            return $this->_unknowns;
        }
@@ -715,7 +698,8 @@
         * @return boolean
         * @access public
         */
        function setUnknowns ($arg) {
        public function setUnknowns($arg)
        {
            $arg = strtolower(trim($arg));
            if (preg_match('/^ignore|remove|print|leave|comment$/', $arg)) {
                $this->OPTIONS['UNKNOWNS'] = $arg;
@@ -737,7 +721,8 @@
         * @return bool success
         * @access public
         */
        function setPath () {
        public function setPath()
        {
            $num_args = func_num_args();
            if ($num_args < 1) {
                $this->OPTIONS['INCLUDE_PATHS'] = array();
@@ -760,7 +745,8 @@
         * @return float time taken to parse template
         * @access public
         */
        function getParseTime () {
        public function getParseTime()
        {
            if ($this->OPTIONS['TIME_PARSE'] && $this->_parsed) {
                return $this->_totalparsetime;
            }
@@ -778,7 +764,8 @@
         * @access public
         * @return boolean true/false
         */
        function fastPrint () {
        public function fastPrint()
        {
            $ret = $this->_parse('ob_gzhandler');
            print($this->_tmploutput);
            return $ret;
@@ -793,7 +780,8 @@
         * @access public
         * @return boolean true/false
         */
        function pparse () {
        public function pparse()
        {
            if (!$this->_parsed) $this->_parse();
            print($this->_tmploutput);
            return true;
@@ -806,7 +794,8 @@
         *
         * @access public
         */
        function pprint () {
        public function pprint()
        {
            return $this->pparse();
        }
@@ -820,14 +809,15 @@
         * @access public
         * @return boolean true/false
         */
        function grab () {
        public function grab()
        {
            if (!$this->_parsed) $this->_parse();
            return $this->_tmploutput;
        }
    /*-----------------------------------------------------------------------------\
    |                           private functions                                  |
    \-----------------------------------------------------------------------------*/
        /*-----------------------------------------------------------------------------\
        |                           private functions                                  |
        \-----------------------------------------------------------------------------*/
        /**
         * FUNCTION: vlibTemplate
@@ -840,7 +830,8 @@
         * @return boolean true/false
         * @access private
         */
        function tpl ($tmplfile=null, $options=null) {
        public function __construct($tmplfile = null, $options = null)
        {
            if (is_array($tmplfile) && $options == null) {
                $options = $tmplfile;
                unset($tmplfile);
@@ -859,8 +850,7 @@
                    $key = strtoupper($key);
                    if ($key == 'PATH') {
                        $this->setPath($val);
                    }
                    else {
                    } else {
                        $this->_setOption($key, strtolower($val));
                    }
                }
@@ -879,12 +869,12 @@
         * @access private
         * @return mixed data/string or boolean
         */
        function _getData ($tmplfile, $do_eval=false) {
            //check the current file depth
        private function _getData ($tmplfile, $do_eval=false)
        {
            //* check the current file depth
            if ($this->_includedepth > $this->OPTIONS['MAX_INCLUDES'] || $tmplfile == false) {
                return;
            }
            else {
            } else {
                if ($this->_debug) array_push ($this->_debugIncludedfiles, $tmplfile);
                if ($do_eval) {
                    array_push($this->_currentincludedir, dirname($tmplfile));
@@ -893,11 +883,10 @@
            }
            if($this->_cache && $this->_checkCache($tmplfile)) { // cache exists so lets use it
            if($this->_cache && $this->_checkCache($tmplfile)) { //* 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
            } else { //* no cache lets parse the file
                $data = fread($fp = fopen($tmplfile, 'r'), filesize($tmplfile));
                fclose($fp);
@@ -942,7 +931,7 @@
                }
            }
            // now we must parse the $data and check for any <tmpl_include>'s
            //* now we must parse the $data and check for any <tmpl_include>'s
            if ($this->_debug) $this->doDebugWarnings(file($tmplfile), $tmplfile);
            if ($do_eval) {
@@ -950,11 +939,9 @@
                $this->_includedepth--;
                array_pop($this->_currentincludedir);
                return $success;
            }
            else {
            } else {
                return $data;
            }
        }
        /**
@@ -966,15 +953,16 @@
         * @access private
         * @return mixed fullpath to file or boolean false
         */
        function _fileSearch ($file) {
        private function _fileSearch($file)
        {
            $filename = basename($file);
            $filepath = dirname($file);
            // check fullpath first..
            //* check fullpath first..
            $fullpath = $filepath.'/'.$filename;
            if (is_file($fullpath)) return $fullpath;
            // ..then check for relative path for current directory..
            //* ..then check for relative path for current directory..
            if (!empty($this->_currentincludedir)) {
                $currdir = $this->_currentincludedir[(count($this->_currentincludedir) -1)];
                $relativepath = realpath($currdir.'/'.$filepath.'/'.$filename);
@@ -984,7 +972,7 @@
                }
            }
            // ..then check for relative path for all additional given paths..
            //* ..then check for relative path for all additional given paths..
            if (!empty($this->OPTIONS['INCLUDE_PATHS'])) {
                foreach ($this->OPTIONS['INCLUDE_PATHS'] as $currdir) {
                    $relativepath = realpath($currdir.'/'.$filepath.'/'.$filename);
@@ -994,17 +982,17 @@
                }
            }
            // ..then check path from TEMPLATE_DIR..
            //* ..then check path from TEMPLATE_DIR..
            if (!empty($this->OPTIONS['TEMPLATE_DIR'])) {
                $fullpath = realpath($this->OPTIONS['TEMPLATE_DIR'].'/'.$filepath.'/'.$filename);
                if (is_file($fullpath)) return $fullpath;
            }
            // ..then check relative path from executing php script..
            //* ..then check relative path from executing php script..
            $fullpath = realpath($filepath.'/'.$filename);
            if (is_file($fullpath)) return $fullpath;
            // ..then check path from template file.
            //* ..then check path from template file.
            if (!empty($this->VLIBTEMPLATE_ROOT)) {
                $fullpath = realpath($this->VLIBTEMPLATE_ROOT.'/'.$filepath.'/'.$filename);
                if (is_file($fullpath)) return $fullpath;
@@ -1024,7 +1012,8 @@
         * @return array new look array
         * @access private
         */
        function _arrayBuild ($arr) {
        private function _arrayBuild($arr)
        {
            if (is_array($arr) && !empty($arr)) {
                $arr = array_values($arr); // to prevent problems w/ non sequential arrays
                for ($i = 0; $i < count($arr); $i++) {
@@ -1036,8 +1025,7 @@
                        if (is_array($v)) {
                            if (($arr[$i][$k] = $this->_arrayBuild($v)) == false) return false;
                        }
                        else { // reinsert the var
                        } else { // reinsert the var
                            $arr[$i][$k] = $v;
                        }
                    }
@@ -1051,8 +1039,7 @@
                    }
                }
                return $arr;
            }
            elseif (empty($arr)) {
            } elseif (empty($arr)) {
                return true;
            }
        }
@@ -1068,7 +1055,8 @@
         * @access private
         * @return string used for eval'ing
         */
        function _parseIf ($varname, $value=null, $op=null, $namespace=null) {
        private function _parseIf($varname, $value = null, $op = null, $namespace = null)
        {
            if (isset($namespace)) $namespace = substr($namespace, 0, -1);
            $comp_str = ''; // used for extended if statements
@@ -1079,20 +1067,17 @@
                if (!empty($op)) {
                    if (in_array($op, $this->allowed_if_ops)) {
                        $comp_str .= $op;
                    }
                    else {
                    } else {
                        vlibTemplateError::raiseError('VT_WARNING_INVALID_IF_OP', WARNING, $op);
                    }
                }
                else {
                } else {
                    $comp_str .= '==';
                }
                // now we add the value, if it's numeric, then we leave the quotes off
                if (is_numeric($value)) {
                    $comp_str .= $value;
                }
                else {
                } else {
                    $comp_str .= '\''.$value.'\'';
                }
            }
@@ -1104,15 +1089,13 @@
                if ($this->_namespace[$i] == $namespace || (($i + 1) == $numnamespaces && !empty($namespace))) {
                    $retstr .= "['".$namespace."'][\$_".$i."]";
                    break 1;
                }
                else {
                } else {
                    $retstr .= "['".$this->_namespace[$i]."'][\$_".$i."]";
                }
            }
            if ($this->OPTIONS['GLOBAL_VARS'] && empty($namespace)) {
                return '(('.$retstr.'[\''.$varname.'\'] !== null) ? '.$retstr.'[\''.$varname.'\'] : $this->_vars[\''.$varname.'\'])'.$comp_str;
            }
            else {
            } else {
                return $retstr."['".$varname."']".$comp_str;
            }
        }
@@ -1126,7 +1109,8 @@
         * @access private
         * @return string used for eval'ing
         */
        function _parseLoop ($varname) {
        private function _parseLoop ($varname)
        {
            array_push($this->_namespace, $varname);
            $tempvar = count($this->_namespace) - 1;
            $retstr = "for (\$_".$tempvar."=0 ; \$_".$tempvar." < count(\$this->_arrvars";
@@ -1151,22 +1135,21 @@
         * @access private
         * @return string used for eval'ing
         */
        function _parseVar ($wholetag, $tag, $varname, $escape, $format, $namespace) {
        private function _parseVar ($wholetag, $tag, $varname, $escape, $format, $namespace)
        {
            if (!empty($namespace)) $namespace = substr($namespace, 0, -1);
            $wholetag = stripslashes($wholetag);
            if (count($this->_namespace) == 0 || $namespace == 'global') {
                $var1 = '$this->_vars[\''.$varname.'\']';
            }
            else {
            } else {
                $var1build = "\$this->_arrvars";
                $numnamespaces = count($this->_namespace);
                for ($i=0; $i < $numnamespaces; $i++) {
                    if ($this->_namespace[$i] == $namespace || (($i + 1) == $numnamespaces && !empty($namespace))) {
                        $var1build .= "['".$namespace."'][\$_".$i."]";
                        break 1;
                    }
                    else {
                    } else {
                        $var1build .= "['".$this->_namespace[$i]."'][\$_".$i."]";
                    }
                }
@@ -1188,7 +1171,7 @@
                $aftervar   = $this->FORMAT_TAGS[$format]['close'] . $aftervar;
            }
            // build return values
            //* build return values
            $retstr  = 'if ('.$var1.' !== null) { ';
            $retstr .= 'print('.$beforevar.$var1.$aftervar.'); ';
            $retstr .= '}';
@@ -1204,24 +1187,23 @@
                    $comment = addcslashes('<!-- unknown variable '.ereg_replace('<!--|-->', '', $wholetag).'//-->', '"');
                    $retstr .= ' else { print("'.$comment.'"); $this->_setUnknown("'.$varname.'"); }';
                    return $retstr;
                break;
                case 'leave':
                    $retstr .= ' else { print("'.addcslashes($wholetag, '"').'"); $this->_setUnknown("'.$varname.'"); }';
                    return $retstr;
                break;
                case 'print':
                    $retstr .= ' else { print("'.htmlspecialchars($wholetag, ENT_QUOTES).'"); $this->_setUnknown("'.$varname.'"); }';
                    return $retstr;
                break;
                case 'ignore':
                    return $retstr;
                break;
                case 'remove':
                default:
                    $retstr .= ' else { $this->_setUnknown("'.$varname.'"); }';
                    return $retstr;
                break;
            }
        }
@@ -1234,7 +1216,8 @@
         * @access private
         * @return string replace values
         */
        function _parseTag ($args) {
        private function _parseTag ($args)
        {
            $wholetag = $args[0];
            $openclose = $args[1];
            $tag = strtolower($args[2]);
@@ -1247,13 +1230,12 @@
                if ($tag == 'loop' || $tag == 'endloop') array_pop($this->_namespace);
                if ($tag == 'comment' || $tag == 'endcomment') {
                    return '<?php */ ?>'.$newline;
                }
                else {
                } else {
                    return '<?php } ?>'.$newline;
                }
            }
            // arrange attributes
            //* arrange attributes
            for ($i=3; $i < 8; $i=($i+2)) {
                if (empty($args[$i]) && empty($args[($i+1)])) break;
                $key = (empty($args[$i])) ? 'name' : strtolower($args[$i]);
@@ -1276,53 +1258,43 @@
            }
            // return correct string (tag dependent)
            //* return correct string (tag dependent)
            switch ($tag) {
                case 'var':
                    if (empty($escape) && (!empty($this->OPTIONS['DEFAULT_ESCAPE']) && strtolower($this->OPTIONS['DEFAULT_ESCAPE']) != 'none')) {
                        $escape = strtolower($this->OPTIONS['DEFAULT_ESCAPE']);
                    }
                    return '<?php '.$this->_parseVar ($wholetag, $tag, $var, @$escape, @$format, @$namespace)." ?>$newline";
                break;
                case 'if':
                    return '<?php if ('. $this->_parseIf($var, @$value, @$op, @$namespace) .') { ?>'.$newline;
                break;
                case 'unless':
                      return '<?php if (!'. $this->_parseIf($var, @$value, @$op, @$namespace) .') { ?>'.$newline;
                break;
                case 'elseif':
                      return '<?php } elseif ('. $this->_parseIf($var, @$value, @$op, @$namespace) .') { ?>'.$newline;
                break;
                case 'loop':
                      return '<?php '. $this->_parseLoop($var) .'?>'.$newline;
                break;
                case 'comment':
                    if (empty($var)) { // full open/close style comment
                        return '<?php /* ?>'.$newline;
                    }
                    else { // just ignore tag if it was a one line comment
                    } else { // just ignore tag if it was a one line comment
                        return;
                    }
                break;
                case 'phpinclude':
                    if ($this->OPTIONS['ENABLE_PHPINCLUDE']) {
                        return '<?php include(\''.$file.'\'); ?>'.$newline;
                    }
                break;
                case 'include':
                    return '<?php $this->_getData($this->_fileSearch(\''.$file.'\'), 1); ?>';
                break;
                
                case 'dyninclude':
                    return '<?php $this->_getData($this->_fileSearch($this->_dyninclude[\''.$name.'\']), 1); ?>';
                break;
                default:
                    if ($this->OPTIONS['STRICT']) vlibTemplateError::raiseError('VT_ERROR_INVALID_TAG', KILL, htmlspecialchars($wholetag, ENT_QUOTES));
@@ -1342,7 +1314,8 @@
         * @access private
         * @return boolean true/false
         */
        function _intParse () {
        private function _intParse ()
        {
            $mqrt = get_magic_quotes_runtime();
            set_magic_quotes_runtime(0);
            $this->_tmplfilep = '?>'.$this->_getData($this->_tmplfilename).'<?php return true;';
@@ -1360,7 +1333,8 @@
         * @access private
         * @return boolean true/false
         */
        function _parse ($compress='') {
        private function _parse ($compress = '')
        {
            if (!$this->_parsed) {
                if ($this->OPTIONS['TIME_PARSE']) $this->_firstparsetime = $this->_getMicroTime();
@@ -1384,9 +1358,6 @@
                if (!$success) vlibTemplateError::raiseError('VT_ERROR_PARSE', FATAL);
                $this->_tmploutput .= ob_get_contents();
            ob_end_clean();
            return true;
        }
@@ -1404,7 +1375,8 @@
         * @return bool true/false
         * @access private
         */
        function _setOption () {
        private function _setOption()
        {
            $numargs = func_num_args();
            if ($numargs < 1) {
                vlibTemplateError::raiseError('VT_ERROR_WRONG_NO_PARAMS', null, '_setOption()');
@@ -1417,18 +1389,15 @@
                    foreach ($options as $k => $v) {
                        if ($v != null) {
                            if(in_array($k, array_keys($this->OPTIONS))) $this->OPTIONS[$k] = $v;
                        }
                        else {
                        } else {
                            continue;
                        }
                    }
                }
                else {
                } else {
                    vlibTemplateError::raiseError('VT_ERROR_WRONG_NO_PARAMS', null, '_setOption()');
                    return false;
                }
            }
            elseif (is_int($numargs / 2)) {
            }elseif (is_int($numargs / 2)) {
                for ($i = 0; $i < $numargs; $i=($i+2)) {
                    $k  = func_get_arg($i);
                    $v = func_get_arg(($i+1));
@@ -1436,8 +1405,7 @@
                        if(in_array($k, array_keys($this->OPTIONS))) $this->OPTIONS[$k] = $v;
                    }
                }
            }
            else {
            } else {
                vlibTemplateError::raiseError('VT_ERROR_WRONG_NO_PARAMS', null, '_setOption()');
                return false;
            }
@@ -1453,7 +1421,8 @@
         * @param string var
         * @access private
         */
        function _setUnknown ($var) {
        private function _setUnknown($var)
        {
            if (!in_array($var, $this->_unknowns)) array_push($this->_unknowns, $var);
        }
@@ -1464,8 +1433,9 @@
         * @return float microtime
         * @access private
         */
        function _getMicrotime () {
            list($msec, $sec) = explode(" ",microtime());
        private function _getMicrotime()
        {
            list($msec, $sec) = explode(' ',microtime());
            return ((float)$msec + (float)$sec);
        }
@@ -1478,7 +1448,7 @@
         * @return string encoded in hex
         * @access private
         */
        function _escape_hex($str="", $entity=false) {
        private  function _escape_hex($str = '', $entity = false) {
            $prestr = $entity ? '&#x' : '%';
            $poststr= $entity ? ';' : '';
            for ($i=0; $i < strlen($str); $i++) {
@@ -1496,7 +1466,7 @@
        function recache()           {vlibTemplateError::raiseError('VT_WARNING_NOT_CACHE_OBJ', WARNING, 'recache()');}
        function setCacheLifeTime()  {vlibTemplateError::raiseError('VT_WARNING_NOT_CACHE_OBJ', WARNING, 'setCacheLifeTime()');}
        function setCacheExtension() {vlibTemplateError::raiseError('VT_WARNING_NOT_CACHE_OBJ', WARNING, 'setCacheExtension()');}
    }
    } // << end class Def
    //include_once ($conf['classpath'].'/vlibTemplate/debug.php');
    include_once ($conf['classpath'].'/tpl_cache.inc.php');
interface/lib/classes/tpl_ini.inc.php
@@ -45,8 +45,9 @@
    class vlibIni{
        /** config vars for vlibTemplate */
        public static function vlibTemplate () {
        /** Returns $array of config vars for vlibTemplate */
        public static function vlibTemplate()
        {
            
            global $conf;
@@ -104,7 +105,7 @@
        /** config vars for vlibDate */
        /** Returns $array of config vars for vlibDate */
        public function vlibDate()
        {
            return array( 'DEFAULT_LANG' => 'de' ); //* default language for the date displays
@@ -112,5 +113,6 @@
    }// << end class vlibIni
} // << if Defined
?>