Newer
Older
* 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
include_once (ISPC_CLASS_PATH.'/tpl_error.inc.php');
include_once (ISPC_CLASS_PATH.'/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
);
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)')
);
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('==','!=','<>','<','>','<=','>=');
private $allowed_loop_dbs = array('MYSQL','POSTGRESQL','INFORMIX','INTERBASE','INGRES',
'MSSQL','MSQL','OCI8','ORACLE','OVRIMOS','SYBASE');
/** root directory of vlibTemplate automagically filled in */
/** contains current directory used when doing recursive include */
/** eval()ed version ready for printing or whatever */
/** array which holds the current namespace during parse */
/** variable is set to true once the template is parsed, to save re-parsing everything */
private $_debug = null;
private $_cache = null;
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
*/
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;
if ($this->_debug){
$this->_debugReset();
}
$this->_tmplfilename = $tfile;
return true;
}
/**
* Sets variables to be used by the template
* If $k is an array, then it will treat it as an associative array
* using the keys as variable names and the values as variable values.
* @param mixed $k key to define variable name
* @param mixed $v variable to assign to $k
* @return boolean true/false
* @access public
*/
if (is_array($k)) {
foreach($k as $key => $value){
$key = ($this->OPTIONS['CASELESS']) ? strtolower(trim($key)) : trim($key);
if (preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $key) && $value !== null ) {
$this->_vars[$key] = $value;
}
}
if (preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $k) && $v !== null) {
Loading full blame...