Skip to content
tpl.inc.php 44.6 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 {

		/*-----------------------------------------------------------------------------\
tbrehm's avatar
tbrehm committed
    |                                 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();
		/*-----------------------------------------------------------------------------\
tbrehm's avatar
tbrehm committed
    |                           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
Loading full blame...