Skip to content
tpl.inc.php 44.2 KiB
Newer Older
<?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
 */


/* 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 and avoid multiple loading of class
if (!defined('vlibTemplateClassLoaded')) {

	define('vlibTemplateClassLoaded', 1);
	include_once ISPC_INSTALL_ROOT.'/install/lib/classes/tpl_error.inc.php';
	include_once ISPC_INSTALL_ROOT.'/install/lib/classes/tpl_ini.inc.php';

	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 */
		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 */
		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 */
		private $allowed_if_ops = array('==', '!=', '<>', '<', '>', '<=', '>=');



		/** dbs allowed by vlibTemplate::setDbLoop(). */
		private $allowed_loop_dbs = array('MYSQL', 'POSTGRESQL', 'INFORMIX', 'INTERBASE', 'INGRES',
			'MSSQL', 'MSQL', 'OCI8', 'ORACLE', 'OVRIMOS', 'SYBASE');



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



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



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



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



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



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



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



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



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

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



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



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



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



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



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



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



		/** define vars to avoid warnings */
		private $_debug = null;
		private $_cache = null;



		/** array which holds the dynamic Includes */
		private $_dyninclude = array();

		/*-----------------------------------------------------------------------------\
        |                           public functions                                   |
        \-----------------------------------------------------------------------------*/





		/**
		 * 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
		 */
		public function newTemplate($tmplfile)
Loading full blame...