Newer
Older
<?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. |
\-----------------------------------------------------------------------------*/
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
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 |
\-----------------------------------------------------------------------------*/
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
/**
* 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...