Skip to content
tpl.inc.php 56 KiB
Newer Older
tbrehm's avatar
tbrehm committed
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
// | PHP version 4.0                                                      |
// +----------------------------------------------------------------------+
// | Copyright (c) 2002 Active Fish Group                                 |
// +----------------------------------------------------------------------+
// | Authors: Kelvin Jones <kelvin@kelvinjones.co.uk>                     |
// +----------------------------------------------------------------------+
//
// $Id: class.tpl.inc.php,v 1.1 2003/07/08 12:31:10 platinum Exp $

// check to avoid multiple including of class
if (!defined('vlibTemplateClassLoaded')) {
    define('vlibTemplateClassLoaded', 1);

   	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
                             );

        /** 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)')
                                );

        /** 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'=> '))')
                                );

        /** operators allowed when using extended TMPL_IF syntax */
        var $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');

        /** root directory of vlibTemplate automagically filled in */
        var $VLIBTEMPLATE_ROOT = null;

        /** contains current directory used when doing recursive include */
        var $_currentincludedir = array();

        /** current depth of includes */
        var $_includedepth = 0;

        /** full path to tmpl file */
        var $_tmplfilename = null;

        /** file data before it's parsed */
        var $_tmplfile = null;

        /** parsed version of file, ready for eval()ing */
        var $_tmplfilep = null;

        /** eval()ed version ready for printing or whatever */
        var $_tmploutput = null;

        /** array for variables to be kept */
        var $_vars = array();

        /** array where loop variables are kept */
        var $_arrvars = array();

        /** array which holds the current namespace during parse */
        var $_namespace = array();

        /** variable is set to true once the template is parsed, to save re-parsing everything */
        var $_parsed = false;

        /** array holds all unknowns vars */
        var $_unknowns = array();

        /** microtime when template parsing began */
        var $_firstparsetime = null;

        /** total time taken to parse template */
        var $_totalparsetime = null;

        /** name of current loop being passed in */
        var $_currloopname = null;

        /** rows with the above loop */
        var $_currloop = array();

        /** define vars to avoid warnings */
        var $_debug = null;
        var $_cache = null;
        
        /** array which holds the dynamic Includes */
        var $_dyninclude = array();
    /*-----------------------------------------------------------------------------\
    |                           public functions                                   |
    \-----------------------------------------------------------------------------*/
		
		
        /**
         * FUNCTION: newTemplate
         *
         * Usually called by the class constructor.
         * Stores the filename in $this->_tmplfilename.
         * Raises an error if the template file is not found.
         *
         * @param string $tmplfile full path to template file
         * @return boolean true
         * @access 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
            $this->_tmplfile = null;
            $this->_tmplfilep = null;
            $this->_tmploutput = null;
            $this->_parsed = false;
            $this->_unknowns = array();
            $this->_firstparsetime = null;
            $this->_totalparsetime = null;

            // reset debug module
            if ($this->_debug) $this->_debugReset();

            $this->_tmplfilename = $tfile;
            return true;
        }

        /**
         * FUNCTION: setVar
         *
Loading full blame...