Commit d9bb6255 authored by pedro_morgan's avatar pedro_morgan
Browse files

* Made the tpl class php 5

* Minor tweaks
parent 0191ab5a
<?php
/**
* Template Class
*
* @author Kelvin Jones <kelvin@kelvinjones.co.uk>
* @copyright 2002 Active Fish Group
* @version 1.1
* @package ISPConfig
*/
* 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: */
// +----------------------------------------------------------------------+
......@@ -19,160 +22,130 @@
//
// $Id: class.tpl.inc.php,v 1.1 2003/07/08 12:31:10 platinum Exp $
// check to avoid multiple including of class
//** check to avoid multiple including of class
if (!defined('vlibTemplateClassLoaded')) {
define('vlibTemplateClassLoaded', 1);
global $conf;
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
);
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 */
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)')
);
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 */
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'=> '))')
);
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 */
var $allowed_if_ops = array('==','!=','<>','<','>','<=','>=');
private $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');
private $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;
private $VLIBTEMPLATE_ROOT = null;
/** contains current directory used when doing recursive include */
var $_currentincludedir = array();
private $_currentincludedir = array();
/** current depth of includes */
var $_includedepth = 0;
private $_includedepth = 0;
/** full path to tmpl file */
var $_tmplfilename = null;
private $_tmplfilename = null;
/** file data before it's parsed */
var $_tmplfile = null;
private $_tmplfile = null;
/** parsed version of file, ready for eval()ing */
var $_tmplfilep = null;
private $_tmplfilep = null;
/** eval()ed version ready for printing or whatever */
var $_tmploutput = null;
private $_tmploutput = null;
/** array for variables to be kept */
var $_vars = array();
private $_vars = array();
/** array where loop variables are kept */
var $_arrvars = array();
private $_arrvars = array();
/** array which holds the current namespace during parse */
var $_namespace = array();
private $_namespace = array();
/** variable is set to true once the template is parsed, to save re-parsing everything */
var $_parsed = false;
private $_parsed = false;
/** array holds all unknowns vars */
var $_unknowns = array();
private $_unknowns = array();
/** microtime when template parsing began */
var $_firstparsetime = null;
private $_firstparsetime = null;
/** total time taken to parse template */
var $_totalparsetime = null;
private $_totalparsetime = null;
/** name of current loop being passed in */
var $_currloopname = null;
private $_currloopname = null;
/** rows with the above loop */
var $_currloop = array();
private $_currloop = array();
/** define vars to avoid warnings */
var $_debug = null;
var $_cache = null;
private $_debug = null;
private $_cache = null;
/** array which holds the dynamic Includes */
var $_dyninclude = array();
/*-----------------------------------------------------------------------------\
| public functions |
\-----------------------------------------------------------------------------*/
private $_dyninclude = array();
/*-----------------------------------------------------------------------------\
| public functions |
\-----------------------------------------------------------------------------*/
/**
* FUNCTION: newTemplate
......@@ -185,10 +158,11 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true
* @access public
*/
function newTemplate ($tmplfile) {
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
//* make sure that any parsing vars are cleared for the new template
$this->_tmplfile = null;
$this->_tmplfilep = null;
$this->_tmploutput = null;
......@@ -197,7 +171,7 @@ if (!defined('vlibTemplateClassLoaded')) {
$this->_firstparsetime = null;
$this->_totalparsetime = null;
// reset debug module
//* reset debug module
if ($this->_debug) $this->_debugReset();
$this->_tmplfilename = $tfile;
......@@ -216,7 +190,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true/false
* @access public
*/
function setVar ($k,$v=null) {
public function setVar($k, $v = null)
{
if (is_array($k)) {
foreach($k as $key => $value){
$key = ($this->OPTIONS['CASELESS']) ? strtolower(trim($key)) : trim($key);
......@@ -224,13 +199,11 @@ if (!defined('vlibTemplateClassLoaded')) {
$this->_vars[$key] = $value;
}
}
}
else {
} else {
if (preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $k) && $v !== null) {
if ($this->OPTIONS['CASELESS']) $k = strtolower($k);
$this->_vars[trim($k)] = $v;
}
else {
} else {
return false;
}
}
......@@ -249,8 +222,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true/false
* @access public
*/
function setInclude($k, $v = null) {
public function setInclude($k, $v = null)
{
if(is_array($k)) {
foreach($k as $key => $val) {
$this->_dyninclude[$key] = $val;
......@@ -258,7 +231,6 @@ if (!defined('vlibTemplateClassLoaded')) {
} else {
$this->_dyninclude[$k] = $v;
}
return true;
}
......@@ -272,7 +244,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true/false returns true unless called with 0 params
* @access public
*/
function unsetVar () {
public function unsetVar()
{
$num_args = func_num_args();
if ($num_args < 1) return false;
......@@ -293,7 +266,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return array
* @access public
*/
function getVars () {
public function getVars()
{
if (empty($this->_vars)) return false;
return $this->_vars;
}
......@@ -306,7 +280,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return var
* @access public
*/
function getVar ($var) {
public function getVar($var)
{
if ($this->OPTIONS['CASELESS']) $var = strtolower($var);
if (empty($var) || !isset($this->_vars[$var])) return false;
return $this->_vars[$var];
......@@ -320,13 +295,14 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return true
* @access public
*/
function setContextVars () {
public function setContextVars()
{
$_phpself = @$GLOBALS['HTTP_SERVER_VARS']['PHP_SELF'];
$_pathinfo = @$GLOBALS['HTTP_SERVER_VARS']['PATH_INFO'];
$_request_uri = @$GLOBALS['HTTP_SERVER_VARS']['REQUEST_URI'];
$_qs = @$GLOBALS['HTTP_SERVER_VARS']['QUERY_STRING'];
// the following fixes bug of $PHP_SELF on Win32 CGI and IIS.
//* the following fixes bug of $PHP_SELF on Win32 CGI and IIS.
$_self = (!empty($_pathinfo)) ? $_pathinfo : $_phpself;
$_uri = (!empty($_request_uri)) ? $_request_uri : $_self.'?'.$_qs;
......@@ -345,7 +321,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true/false
* @access public
*/
function setLoop ($k,$v) {
public function setLoop($k, $v)
{
if (is_array($v) && preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $k)) {
$k = ($this->OPTIONS['CASELESS']) ? strtolower(trim($k)) : trim($k);
$this->_arrvars[$k] = array();
......@@ -368,7 +345,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true/false
* @access public
*/
function setDbLoop ($loopname, $result, $db_type='MYSQL') {
public function setDbLoop($loopname, $result, $db_type = 'MYSQL')
{
$db_type = strtoupper($db_type);
if (!in_array($db_type, $this->allowed_loop_dbs)) {
vlibTemplateError::raiseError('VT_WARNING_INVALID_LOOP_DB',WARNING, $db_type);
......@@ -386,7 +364,7 @@ if (!defined('vlibTemplateClassLoaded')) {
while($r = mysql_fetch_assoc($result)) {
$loop_arr[] = $r;
}
break;
break;
case 'POSTGRESQL':
if (get_resource_type($result) != 'pgsql result') {
......@@ -399,7 +377,7 @@ if (!defined('vlibTemplateClassLoaded')) {
for ($i=0; $i < $nr; $i++) {
$loop_arr[] = pg_fetch_array($result, $i, PGSQL_ASSOC);
}
break;
break;
case 'INFORMIX':
if (!$result) {
......@@ -409,7 +387,7 @@ if (!defined('vlibTemplateClassLoaded')) {
while($r = ifx_fetch_row($result, 'NEXT')) {
$loop_arr[] = $r;
}
break;
break;
case 'INTERBASE':
if (get_resource_type($result) != 'interbase result') {
......@@ -419,7 +397,7 @@ if (!defined('vlibTemplateClassLoaded')) {
while($r = ibase_fetch_row($result)) {
$loop_arr[] = $r;
}
break;
break;
case 'INGRES':
if (!$result) {
......@@ -429,7 +407,7 @@ if (!defined('vlibTemplateClassLoaded')) {
while($r = ingres_fetch_array(INGRES_ASSOC, $result)) {
$loop_arr[] = $r;
}
break;
break;
case 'MSSQL':
if (get_resource_type($result) != 'mssql result') {
......@@ -439,7 +417,7 @@ if (!defined('vlibTemplateClassLoaded')) {
while($r = mssql_fetch_array($result)) {
$loop_arr[] = $r;
}
break;
break;
case 'MSQL':
if (get_resource_type($result) != 'msql result') {
......@@ -449,7 +427,7 @@ if (!defined('vlibTemplateClassLoaded')) {
while($r = msql_fetch_array($result, MSQL_ASSOC)) {
$loop_arr[] = $r;
}
break;
break;
case 'OCI8':
if (get_resource_type($result) != 'oci8 statement') {
......@@ -459,7 +437,7 @@ if (!defined('vlibTemplateClassLoaded')) {
while(OCIFetchInto($result, &$r, OCI_ASSOC+OCI_RETURN_LOBS)) {
$loop_arr[] = $r;
}
break;
break;
case 'ORACLE':
if (get_resource_type($result) != 'oracle Cursor') {
......@@ -469,7 +447,7 @@ if (!defined('vlibTemplateClassLoaded')) {
while(ora_fetch_into($result, &$r, ORA_FETCHINTO_ASSOC)) {
$loop_arr[] = $r;
}
break;
break;
case 'OVRIMOS':
if (!$result) {
......@@ -479,7 +457,7 @@ if (!defined('vlibTemplateClassLoaded')) {
while(ovrimos_fetch_into($result, &$r, 'NEXT')) {
$loop_arr[] = $r;
}
break;
break;
case 'SYBASE':
if (get_resource_type($result) != 'sybase-db result') {
......@@ -490,7 +468,7 @@ if (!defined('vlibTemplateClassLoaded')) {
while($r = sybase_fetch_array($result)) {
$loop_arr[] = $r;
}
break;
break;
}
$this->setLoop($loopname, $loop_arr);
return true;
......@@ -505,13 +483,13 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true/false
* @access public
*/
function newLoop ($loopname) {
public function newLoop($loopname)
{
if (preg_match('/^[a-z_]+[a-z0-9_]*$/i', $loopname)) {
$this->_currloopname[$loopname] = $loopname;
$this->_currloop[$loopname] = array();
return true;
}
else {
} else {
return false;
}
}
......@@ -526,7 +504,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true/false
* @access public
*/
function addRow ($row, $loopname=null) {
public function addRow($row, $loopname = null)
{
if (!$loopname) $loopname = $this->_currloopname[(count($this->_currloopname)-1)];
if (!isset($this->_currloop[$loopname]) || empty($this->_currloopname)) {
......@@ -536,8 +515,7 @@ if (!defined('vlibTemplateClassLoaded')) {
if (is_array($row)) {
$this->_currloop[$loopname][] = $row;
return true;
}
else {
} else {
return false;
}
}
......@@ -552,7 +530,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true/false
* @access public
*/
function addLoop ($loopname=null) {
public function addLoop($loopname = null)
{
if ($loopname == null) { // add last loop used
if (!empty($this->_currloop)) {
foreach ($this->_currloop as $k => $v) {
......@@ -561,16 +540,13 @@ if (!defined('vlibTemplateClassLoaded')) {
}
$this->_currloopname = array();
return true;
}
else {
} else {
return false;
}
}
elseif (!isset($this->_currloop[$loopname]) || empty($this->_currloopname)) { // newLoop not yet envoked
vlibTemplateError::raiseError('VT_WARNING_LOOP_NOT_SET',WARNING);
} elseif (!isset($this->_currloop[$loopname]) || empty($this->_currloopname)) { // newLoop not yet envoked
vlibTemplateError::raiseError('VT_WARNING_LOOP_NOT_SET', WARNING);
return false;
}
else { // add a specific loop
} else { // add a specific loop
$this->setLoop($loopname, $this->_currloop[$loopname]);
unset($this->_currloopname[$loopname], $this->_currloop[$loopname]);
}
......@@ -587,7 +563,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true/false returns true unless called with 0 params
* @access public
*/
function unsetLoop () {
public function unsetLoop()
{
$num_args = func_num_args();
if ($num_args < 1) return false;
......@@ -600,7 +577,6 @@ if (!defined('vlibTemplateClassLoaded')) {
return true;
}
/**
* FUNCTION: reset
*
......@@ -610,7 +586,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true
* @access public
*/
function reset () {
public function reset()
{
$this->clearVars();
$this->clearLoops();
$this->_tmplfilename = null;
......@@ -634,7 +611,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true
* @access public
*/
function clearVars () {
public function clearVars()
{
$this->_vars = array();
return true;
}
......@@ -647,7 +625,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true
* @access public
*/
function clearLoops () {
public function clearLoops()
{
$this->_arrvars = array();
$this->_currloopname = null;
$this->_currloop = array();
......@@ -662,7 +641,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true
* @access public
*/
function clearAll () {
public function clearAll()
{
$this->clearVars();
$this->clearLoops();
return true;
......@@ -677,7 +657,8 @@ if (!defined('vlibTemplateClassLoaded')) {
* @return boolean true/false
* @access public
*/
function unknownsExist () {
public function unknownsExist()