[pLog-svn] r2879 - in plog/trunk/class/template/smarty: .
coreplugins
Mark Wu
markplace at gmail.com
Wed Feb 1 16:24:46 GMT 2006
When I commit the code, I just found you did the same things .... Hee hee
Mark
> -----Original Message-----
> From: plog-svn-bounces at devel.lifetype.net
> [mailto:plog-svn-bounces at devel.lifetype.net] On Behalf Of
> oscar at devel.lifetype.net
> Sent: Wednesday, February 01, 2006 11:28 PM
> To: plog-svn at devel.lifetype.net
> Subject: [pLog-svn] r2879 - in
> plog/trunk/class/template/smarty: . coreplugins
>
> Author: oscar
> Date: 2006-02-01 15:27:58 +0000 (Wed, 01 Feb 2006)
> New Revision: 2879
>
> Modified:
> plog/trunk/class/template/smarty/Config_File.class.php
> plog/trunk/class/template/smarty/Smarty.class.php
> plog/trunk/class/template/smarty/Smarty_Compiler.class.php
>
> plog/trunk/class/template/smarty/core/core.assemble_plugin_fil
> epath.php
> plog/trunk/class/template/smarty/core/core.create_dir_structure.php
>
> plog/trunk/class/template/smarty/core/core.display_debug_console.php
> plog/trunk/class/template/smarty/core/core.get_php_resource.php
> plog/trunk/class/template/smarty/core/core.is_secure.php
> plog/trunk/class/template/smarty/core/core.is_trusted.php
>
> plog/trunk/class/template/smarty/core/core.process_cached_inserts.php
>
> plog/trunk/class/template/smarty/core/core.process_compiled_in
> clude.php
> plog/trunk/class/template/smarty/core/core.read_cache_file.php
> plog/trunk/class/template/smarty/core/core.rm_auto.php
> plog/trunk/class/template/smarty/core/core.rmdir.php
> plog/trunk/class/template/smarty/core/core.run_insert_handler.php
> plog/trunk/class/template/smarty/core/core.smarty_include_php.php
> plog/trunk/class/template/smarty/core/core.write_cache_file.php
>
> plog/trunk/class/template/smarty/core/core.write_compiled_include.php
>
> plog/trunk/class/template/smarty/core/core.write_compiled_resource.php
> plog/trunk/class/template/smarty/core/core.write_file.php
> plog/trunk/class/template/smarty/debug.tpl
> plog/trunk/class/template/smarty/plugins/block.textformat.php
> plog/trunk/class/template/smarty/plugins/compiler.assign.php
>
> plog/trunk/class/template/smarty/plugins/function.assign_debug
> _info.php
> plog/trunk/class/template/smarty/plugins/function.config_load.php
> plog/trunk/class/template/smarty/plugins/function.counter.php
> plog/trunk/class/template/smarty/plugins/function.cycle.php
> plog/trunk/class/template/smarty/plugins/function.debug.php
> plog/trunk/class/template/smarty/plugins/function.eval.php
> plog/trunk/class/template/smarty/plugins/function.fetch.php
>
> plog/trunk/class/template/smarty/plugins/function.html_checkboxes.php
> plog/trunk/class/template/smarty/plugins/function.html_image.php
> plog/trunk/class/template/smarty/plugins/function.html_options.php
> plog/trunk/class/template/smarty/plugins/function.html_radios.php
>
> plog/trunk/class/template/smarty/plugins/function.html_select_date.php
>
> plog/trunk/class/template/smarty/plugins/function.html_select_time.php
> plog/trunk/class/template/smarty/plugins/function.html_table.php
> plog/trunk/class/template/smarty/plugins/function.mailto.php
> plog/trunk/class/template/smarty/plugins/function.math.php
> plog/trunk/class/template/smarty/plugins/function.popup.php
> plog/trunk/class/template/smarty/plugins/function.popup_init.php
> plog/trunk/class/template/smarty/plugins/modifier.capitalize.php
> plog/trunk/class/template/smarty/plugins/modifier.cat.php
>
> plog/trunk/class/template/smarty/plugins/modifier.count_characters.php
>
> plog/trunk/class/template/smarty/plugins/modifier.count_paragraphs.php
>
> plog/trunk/class/template/smarty/plugins/modifier.count_sentences.php
> plog/trunk/class/template/smarty/plugins/modifier.count_words.php
> plog/trunk/class/template/smarty/plugins/modifier.date_format.php
>
> plog/trunk/class/template/smarty/plugins/modifier.debug_print_var.php
> plog/trunk/class/template/smarty/plugins/modifier.default.php
> plog/trunk/class/template/smarty/plugins/modifier.escape.php
> plog/trunk/class/template/smarty/plugins/modifier.indent.php
> plog/trunk/class/template/smarty/plugins/modifier.lower.php
> plog/trunk/class/template/smarty/plugins/modifier.nl2br.php
> plog/trunk/class/template/smarty/plugins/modifier.regex_replace.php
> plog/trunk/class/template/smarty/plugins/modifier.replace.php
> plog/trunk/class/template/smarty/plugins/modifier.spacify.php
> plog/trunk/class/template/smarty/plugins/modifier.string_format.php
> plog/trunk/class/template/smarty/plugins/modifier.strip.php
> plog/trunk/class/template/smarty/plugins/modifier.strip_tags.php
> plog/trunk/class/template/smarty/plugins/modifier.truncate.php
> plog/trunk/class/template/smarty/plugins/modifier.upper.php
> plog/trunk/class/template/smarty/plugins/modifier.wordwrap.php
>
> plog/trunk/class/template/smarty/plugins/outputfilter.trimwhit
> espace.php
>
> plog/trunk/class/template/smarty/plugins/shared.escape_special
> _chars.php
> plog/trunk/class/template/smarty/plugins/shared.make_timestamp.php
> Log:
> upgraded to smarty 2.6.12
>
>
> Modified: plog/trunk/class/template/smarty/Config_File.class.php
> ===================================================================
> --- plog/trunk/class/template/smarty/Config_File.class.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++ plog/trunk/class/template/smarty/Config_File.class.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -18,14 +18,14 @@
> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
> 02111-1307 USA
> *
> * @link http://smarty.php.net/
> - * @version 2.6.2
> - * @copyright Copyright: 2001-2004 ispi of Lincoln, Inc.
> + * @version 2.6.12
> + * @copyright Copyright: 2001-2005 New Digital Group, Inc.
> * @author Andrei Zmievski <andrei at php.net>
> * @access public
> * @package Smarty
> */
>
> -/* $Id: Config_File.class.php,v 1.2 2004/02/20 15:52:24
> phunkphorce Exp $ */
> +/* $Id: Config_File.class.php,v 1.83 2005/12/14 14:53:55
> mohrt Exp $ */
>
> /**
> * Config file reading class
> @@ -105,7 +105,7 @@
> * @param string $var_name (optional) variable to get info for
> * @return string|array a value or array of values
> */
> - function &get($file_name, $section_name = NULL, $var_name = NULL)
> + function get($file_name, $section_name = NULL, $var_name = NULL)
> {
> if (empty($file_name)) {
> $this->_trigger_error_msg('Empty config file name');
> @@ -240,7 +240,7 @@
> return false;
> }
>
> - $contents = fread($fp, filesize($config_file));
> + $contents = ($size = filesize($config_file)) ?
> fread($fp, $size) : '';
> fclose($fp);
>
> $this->_config_data[$config_file] =
> $this->parse_contents($contents);
> @@ -285,9 +285,9 @@
> $line = $lines[$i];
> if (empty($line)) continue;
>
> - if ( $line{0} == '[' &&
> preg_match('!^\[(.*?)\]!', $line, $match) ) {
> + if ( substr($line, 0, 1) == '[' &&
> preg_match('!^\[(.*?)\]!', $line, $match) ) {
> /* section found */
> - if ($match[1]{0} == '.') {
> + if (substr($match[1], 0, 1) == '.') {
> /* hidden section */
> if ($this->read_hidden) {
> $section_name = substr($match[1], 1);
> @@ -347,7 +347,7 @@
> */
> function _set_config_var(&$container, $var_name,
> $var_value, $booleanize)
> {
> - if ($var_name{0} == '.') {
> + if (substr($var_name, 0, 1) == '.') {
> if (!$this->read_hidden)
> return;
> else
>
> Modified: plog/trunk/class/template/smarty/Smarty.class.php
> ===================================================================
> --- plog/trunk/class/template/smarty/Smarty.class.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++ plog/trunk/class/template/smarty/Smarty.class.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -1,12 +1,6 @@
> <?php
>
> /**
> - * WARNING: This smarty class has been modified by me to
> improve a couple of things so that
> - * they would work better in plog. Do not just update them
> like that!!!
> - * look in lines 1247 and 1248
> - */
> -
> -/**
> * Project: Smarty: the PHP compiling template engine
> * File: Smarty.class.php
> *
> @@ -29,14 +23,14 @@
> * smarty-general-subscribe at lists.php.net
> *
> * @link http://smarty.php.net/
> - * @copyright 2001-2004 ispi of Lincoln, Inc.
> - * @author Monte Ohrt <monte at ispi.net>
> + * @copyright 2001-2005 New Digital Group, Inc.
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @author Andrei Zmievski <andrei at php.net>
> * @package Smarty
> - * @version 2.6.2
> + * @version 2.6.12
> */
>
> -/* $Id: Smarty.class.php,v 1.2 2004/02/20 15:52:24
> phunkphorce Exp $ */
> +/* $Id: Smarty.class.php,v 1.523 2005/12/31 19:17:04 messju Exp $ */
>
> /**
> * DIR_SEP isn't used anymore, but third party apps might
> @@ -55,13 +49,17 @@
> define('SMARTY_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR);
> }
>
> +if (!defined('SMARTY_CORE_DIR')) {
> + define('SMARTY_CORE_DIR', SMARTY_DIR . 'internals' .
> DIRECTORY_SEPARATOR);
> +}
> +
> define('SMARTY_PHP_PASSTHRU', 0);
> define('SMARTY_PHP_QUOTE', 1);
> define('SMARTY_PHP_REMOVE', 2);
> define('SMARTY_PHP_ALLOW', 3);
>
> /**
> - * \ingroup Template
> + * @package Smarty
> */
> class Smarty
> {
> @@ -187,7 +185,7 @@
> *
> * @var boolean
> */
> - var $cache_modified_check = true;
> + var $cache_modified_check = false;
>
> /**
> * This determines how Smarty handles "<?php ... ?>"
> tags in templates.
> @@ -234,11 +232,11 @@
>
> 'isset', 'empty',
>
> 'count', 'sizeof',
>
> 'in_array', 'is_array',
> -
> 'true','false'),
> +
> 'true', 'false', 'null'),
> 'INCLUDE_ANY' => false,
> 'PHP_TAGS' => false,
> 'MODIFIER_FUNCS' =>
> array('count'),
> - 'ALLOW_CONSTANTS' => false
> + 'ALLOW_CONSTANTS' => false
> );
>
> /**
> @@ -270,7 +268,7 @@
> *
> * @var string
> */
> - var $request_vars_order = "EGPCS";
> + var $request_vars_order = 'EGPCS';
>
> /**
> * Indicates wether $HTTP_*_VARS[]
> (request_use_auto_globals=false)
> @@ -406,13 +404,6 @@
> * @access private
> */
> /**
> - * error messages. true/false
> - *
> - * @var boolean
> - */
> - var $_error_msg = false;
> -
> - /**
> * where assigned template vars are kept
> *
> * @var array
> @@ -473,7 +464,7 @@
> *
> * @var string
> */
> - var $_version = '2.6.2';
> + var $_version = '2.6.12';
>
> /**
> * current template inclusion depth
> @@ -923,7 +914,7 @@
> switch ($type) {
> case 'output':
> $_params = array('plugins' =>
> array(array($type . 'filter', $name, null, null, false)));
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.load_plugins.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.load_plugins.php');
> smarty_core_load_plugins($_params, $this);
> break;
>
> @@ -950,10 +941,10 @@
> if (!isset($compile_id))
> $compile_id = $this->compile_id;
>
> - if (!isset($tpl_file))
> - $compile_id = null;
> + if (!isset($tpl_file))
> + $compile_id = null;
>
> - $_auto_id = $this->_get_auto_id($cache_id, $compile_id);
> + $_auto_id = $this->_get_auto_id($cache_id, $compile_id);
>
> if (!empty($this->cache_handler_func)) {
> return call_user_func_array($this->cache_handler_func,
> @@ -963,7 +954,7 @@
> 'auto_source' => $tpl_file,
> 'auto_id' => $_auto_id,
> 'exp_time' => $exp_time);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.rm_auto.php');
> + require_once(SMARTY_CORE_DIR . 'core.rm_auto.php');
> return smarty_core_rm_auto($_params, $this);
> }
>
> @@ -978,18 +969,7 @@
> */
> function clear_all_cache($exp_time = null)
> {
> - if (!empty($this->cache_handler_func)) {
> - $dummy = null;
> - call_user_func_array($this->cache_handler_func,
> - array('clear', &$this, &$dummy,
> null, null, null, $exp_time));
> - } else {
> - $_params = array('auto_base' => $this->cache_dir,
> - 'auto_source' => null,
> - 'auto_id' => null,
> - 'exp_time' => $exp_time);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.rm_auto.php');
> - return smarty_core_rm_auto($_params, $this);
> - }
> + return $this->clear_cache(null, null, null, $exp_time);
> }
>
>
> @@ -1014,7 +994,7 @@
> 'cache_id' => $cache_id,
> 'compile_id' => $compile_id
> );
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.read_cache_file.php');
> + require_once(SMARTY_CORE_DIR . 'core.read_cache_file.php');
> return smarty_core_read_cache_file($_params, $this);
> }
>
> @@ -1048,7 +1028,7 @@
> 'auto_id' => $compile_id,
> 'exp_time' => $exp_time,
> 'extensions' => array('.inc', '.php'));
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.rm_auto.php');
> + require_once(SMARTY_CORE_DIR . 'core.rm_auto.php');
> return smarty_core_rm_auto($_params, $this);
> }
>
> @@ -1075,9 +1055,12 @@
> {
> if(!isset($name)) {
> return $this->_tpl_vars;
> - }
> - if(isset($this->_tpl_vars[$name])) {
> + } elseif(isset($this->_tpl_vars[$name])) {
> return $this->_tpl_vars[$name];
> + } else {
> + // var non-existant, return valid reference
> + $_tmp = null;
> + return $_tmp;
> }
> }
>
> @@ -1094,6 +1077,10 @@
> return $this->_config[0]['vars'];
> } else if(isset($this->_config[0]['vars'][$name])) {
> return $this->_config[0]['vars'][$name];
> + } else {
> + // var non-existant, return valid reference
> + $_tmp = null;
> + return $_tmp;
> }
> }
>
> @@ -1152,15 +1139,14 @@
> $this->debugging = true;
> }
> } else {
> - $_cookie_var =
> $this->request_use_auto_globals ? $_COOKIE['SMARTY_DEBUG'] :
> $GLOBALS['HTTP_COOKIE_VARS']['SMARTY_DEBUG'];
> - $this->debugging = $_cookie_var ? true : false;
> + $this->debugging =
> (bool)($this->request_use_auto_globals ?
> @$_COOKIE['SMARTY_DEBUG'] :
> @$GLOBALS['HTTP_COOKIE_VARS']['SMARTY_DEBUG']);
> }
> }
>
> if ($this->debugging) {
> // capture time for debugging info
> $_params = array();
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_microtime.php');
> + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
> $_debug_start_time =
> smarty_core_get_microtime($_params, $this);
> $this->_smarty_debug_info[] = array('type'
> => 'template',
> 'filename'
> => $resource_name,
> @@ -1185,20 +1171,20 @@
> 'compile_id' => $compile_id,
> 'results' => null
> );
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.read_cache_file.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.read_cache_file.php');
> if (smarty_core_read_cache_file($_params, $this)) {
> $_smarty_results = $_params['results'];
> - if (@count($this->_cache_info['insert_tags'])) {
> + if (!empty($this->_cache_info['insert_tags'])) {
> $_params = array('plugins' =>
> $this->_cache_info['insert_tags']);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.load_plugins.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.load_plugins.php');
> smarty_core_load_plugins($_params, $this);
> $_params = array('results' => $_smarty_results);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.process_cached_inserts.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.process_cached_inserts.php');
> $_smarty_results =
> smarty_core_process_cached_inserts($_params, $this);
> }
> - if (@count($this->_cache_info['cache_serials'])) {
> + if (!empty($this->_cache_info['cache_serials'])) {
> $_params = array('results' => $_smarty_results);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.process_compiled_include.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.process_compiled_include.php');
> $_smarty_results =
> smarty_core_process_compiled_include($_params, $this);
> }
>
> @@ -1208,9 +1194,9 @@
> {
> // capture time for debugging info
> $_params = array();
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_microtime.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.get_microtime.php');
>
> $this->_smarty_debug_info[$_included_tpls_idx]['exec_time'] =
> smarty_core_get_microtime($_params, $this) - $_debug_start_time;
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.display_debug_console.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.display_debug_console.php');
> $_smarty_results .=
> smarty_core_display_debug_console($_params, $this);
> }
> if ($this->cache_modified_check) {
> @@ -1221,12 +1207,12 @@
> && !$this->_cache_serials
> && $_gmt_mtime == $_last_modified_date) {
> if (php_sapi_name()=='cgi')
> - header("Status: 304 Not Modified");
> + header('Status: 304 Not Modified');
> else
> - header("HTTP/1.1 304 Not Modified");
> + header('HTTP/1.1 304 Not Modified');
>
> } else {
> - header("Last-Modified: ".$_gmt_mtime);
> + header('Last-Modified: '.$_gmt_mtime);
> echo $_smarty_results;
> }
> } else {
> @@ -1244,10 +1230,8 @@
> }
> } else {
>
> $this->_cache_info['template'][$resource_name] = true;
> - $timestamp = time();
> - $this->_cache_info['timestamp']
> = $timestamp;
> if ($this->cache_modified_check && $display) {
> - header("Last-Modified: ".gmdate('D, d M
> Y H:i:s', $timestamp).' GMT');
> + header('Last-Modified: '.gmdate('D, d M
> Y H:i:s', time()).' GMT');
> }
> }
> }
> @@ -1293,9 +1277,9 @@
> 'cache_id' => $cache_id,
> 'compile_id' => $compile_id,
> 'results' => $_smarty_results);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.write_cache_file.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.write_cache_file.php');
> smarty_core_write_cache_file($_params, $this);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.process_cached_inserts.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.process_cached_inserts.php');
> $_smarty_results =
> smarty_core_process_cached_inserts($_params, $this);
>
> if ($this->_cache_serials) {
> @@ -1314,9 +1298,9 @@
> if ($this->debugging) {
> // capture time for debugging info
> $_params = array();
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_microtime.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.get_microtime.php');
>
> $this->_smarty_debug_info[$_included_tpls_idx]['exec_time'] =
> (smarty_core_get_microtime($_params, $this) - $_debug_start_time);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.display_debug_console.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.display_debug_console.php');
> echo
> smarty_core_display_debug_console($_params, $this);
> }
> error_reporting($_smarty_old_error_level);
> @@ -1382,7 +1366,7 @@
> function _get_plugin_filepath($type, $name)
> {
> $_params = array('type' => $type, 'name' => $name);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.assemble_plugin_filepath.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.assemble_plugin_filepath.php');
> return smarty_core_assemble_plugin_filepath($_params, $this);
> }
>
> @@ -1435,23 +1419,21 @@
> }
>
> $_source_content = $_params['source_content'];
> - $_resource_timestamp = $_params['resource_timestamp'];
> $_cache_include = substr($compile_path, 0, -4).'.inc';
>
> if ($this->_compile_source($resource_name,
> $_source_content, $_compiled_content, $_cache_include)) {
> // if a _cache_serial was set, we also have to
> write an include-file:
> if ($this->_cache_include_info) {
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.write_compiled_include.php');
> -
> smarty_core_write_compiled_include(array_merge($this->_cache_i
> nclude_info, array('compiled_content'=>$_compiled_content)), $this);
> + require_once(SMARTY_CORE_DIR .
> 'core.write_compiled_include.php');
> +
> smarty_core_write_compiled_include(array_merge($this->_cache_i
> nclude_info, array('compiled_content'=>$_compiled_content,
> 'resource_name'=>$resource_name)), $this);
> }
>
> - $_params = array('compile_path'=>$compile_path,
> 'compiled_content' => $_compiled_content,
> 'resource_timestamp' => $_resource_timestamp);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.write_compiled_resource.php');
> + $_params = array('compile_path'=>$compile_path,
> 'compiled_content' => $_compiled_content);
> + require_once(SMARTY_CORE_DIR .
> 'core.write_compiled_resource.php');
> smarty_core_write_compiled_resource($_params, $this);
>
> return true;
> } else {
> - $this->trigger_error($smarty_compiler->_error_msg);
> return false;
> }
>
> @@ -1491,6 +1473,7 @@
> $smarty_compiler->secure_dir = $this->secure_dir;
> $smarty_compiler->security_settings =
> $this->security_settings;
> $smarty_compiler->trusted_dir = $this->trusted_dir;
> + $smarty_compiler->use_sub_dirs = $this->use_sub_dirs;
> $smarty_compiler->_reg_objects = &$this->_reg_objects;
> $smarty_compiler->_plugins = &$this->_plugins;
> $smarty_compiler->_tpl_vars = &$this->_tpl_vars;
> @@ -1499,7 +1482,9 @@
> $smarty_compiler->_config = $this->_config;
> $smarty_compiler->request_use_auto_globals =
> $this->request_use_auto_globals;
>
> - $smarty_compiler->_cache_serial = null;
> + if (isset($cache_include_path) &&
> isset($this->_cache_serials[$cache_include_path])) {
> + $smarty_compiler->_cache_serial =
> $this->_cache_serials[$cache_include_path];
> + }
> $smarty_compiler->_cache_include = $cache_include_path;
>
>
> @@ -1554,6 +1539,8 @@
> $_params = array('resource_name' =>
> $params['resource_name']) ;
> if (isset($params['resource_base_path']))
> $_params['resource_base_path'] =
> $params['resource_base_path'];
> + else
> + $_params['resource_base_path'] = $this->template_dir;
>
> if ($this->_parse_resource_name($_params)) {
> $_resource_type = $_params['resource_type'];
> @@ -1604,7 +1591,7 @@
> $this->trigger_error('unable to read
> resource: "' . $params['resource_name'] . '"');
> }
> } else if ($_return && $this->security) {
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.is_secure.php');
> + require_once(SMARTY_CORE_DIR . 'core.is_secure.php');
> if (!smarty_core_is_secure($_params, $this)) {
> if (!$params['quiet'])
> $this->trigger_error('(secure mode)
> accessing "' . $params['resource_name'] . '" is not allowed');
> @@ -1649,16 +1636,10 @@
> }
>
> if ($params['resource_type'] == 'file') {
> - if
> (!preg_match("/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/",
> $params['resource_name'])) {
> + if
> (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/',
> $params['resource_name'])) {
> // relative pathname to $params['resource_base_path']
> // use the first directory where the file is found
> - if (isset($params['resource_base_path'])) {
> - $_resource_base_path =
> (array)$params['resource_base_path'];
> - } else {
> - $_resource_base_path =
> (array)$this->template_dir;
> - $_resource_base_path[] = '.';
> - }
> - foreach ($_resource_base_path as $_curr_path) {
> + foreach
> ((array)$params['resource_base_path'] as $_curr_path) {
> $_fullpath = $_curr_path .
> DIRECTORY_SEPARATOR . $params['resource_name'];
> if (file_exists($_fullpath) &&
> is_file($_fullpath)) {
> $params['resource_name'] = $_fullpath;
> @@ -1666,17 +1647,20 @@
> }
> // didn't find the file, try include_path
> $_params = array('file_path' => $_fullpath);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_include_path.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.get_include_path.php');
>
> if(smarty_core_get_include_path($_params, $this)) {
> $params['resource_name'] =
> $_params['new_file_path'];
> return true;
> }
> }
> return false;
> + } else {
> + /* absolute path */
> + return file_exists($params['resource_name']);
> }
> } elseif
> (empty($this->_plugins['resource'][$params['resource_type']])) {
> $_params = array('type' => $params['resource_type']);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.load_resource_plugin.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.load_resource_plugin.php');
> smarty_core_load_resource_plugin($_params, $this);
> }
>
> @@ -1714,8 +1698,8 @@
> */
> function _dequote($string)
> {
> - if (($string{0} == "'" || $string{0} == '"') &&
> - $string{strlen($string)-1} == $string{0})
> + if ((substr($string, 0, 1) == "'" || substr($string,
> 0, 1) == '"') &&
> + substr($string, -1) == substr($string, 0, 1))
> return substr($string, 1, -1);
> else
> return $string;
> @@ -1723,50 +1707,23 @@
>
>
> /**
> - * read in a file from line $start for $lines.
> - * read the entire file if $start and $lines are null.
> + * read in a file
> *
> * @param string $filename
> - * @param integer $start
> - * @param integer $lines
> * @return string
> */
> - function _read_file($filename, $start=null, $lines=null)
> + function _read_file($filename)
> {
> - if( !is_readable($filename))
> - return false;
> -
> - if (!($fd = @fopen($filename, 'r'))) {
> + if ( file_exists($filename) && ($fd =
> @fopen($filename, 'rb')) ) {
> + $contents = '';
> + while (!feof($fd)) {
> + $contents .= fread($fd, 8192);
> + }
> + fclose($fd);
> + return $contents;
> + } else {
> return false;
> }
> - flock($fd, LOCK_SH);
> - if ($start == null && $lines == null) {
> - // read the entire file
> - $contents = fread($fd, filesize($filename));
> - } else {
> - if ( $start > 1 ) {
> - // skip the first lines before $start
> - for ($loop=1; $loop < $start; $loop++) {
> - fgets($fd, 65536);
> - }
> - }
> - if ( $lines == null ) {
> - // read the rest of the file
> - while (!feof($fd)) {
> - $contents .= fgets($fd, 65536);
> - }
> - } else {
> - // read up to $lines lines
> - for ($loop=0; $loop < $lines; $loop++) {
> - $contents .= fgets($fd, 65536);
> - if (feof($fd)) {
> - break;
> - }
> - }
> - }
> - }
> - fclose($fd);
> - return $contents;
> }
>
> /**
> @@ -1782,17 +1739,8 @@
> function _get_auto_filename($auto_base, $auto_source =
> null, $auto_id = null)
> {
> $_compile_dir_sep = $this->use_sub_dirs ?
> DIRECTORY_SEPARATOR : '^';
> + $_return = $auto_base . DIRECTORY_SEPARATOR;
>
> - if(@is_dir($auto_base)) {
> - $_return = $auto_base . DIRECTORY_SEPARATOR;
> - } else {
> - // auto_base not found, try include_path
> - $_params = array('file_path' => $auto_base);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_include_path.php');
> - smarty_core_get_include_path($_params, $this);
> - $_return = isset($_params['new_file_path']) ?
> $_params['new_file_path'] . DIRECTORY_SEPARATOR : null;
> - }
> -
> if(isset($auto_id)) {
> // make auto_id safe for directory names
> $auto_id =
> str_replace('%7C',$_compile_dir_sep,(urlencode($auto_id)));
> @@ -1803,11 +1751,12 @@
> if(isset($auto_source)) {
> // make source name safe for filename
> $_filename = urlencode(basename($auto_source));
> - $_crc32 = crc32($auto_source) . $_compile_dir_sep;
> + $_crc32 = sprintf('%08X', crc32($auto_source));
> // prepend %% to avoid name conflicts with
> // with $params['auto_id'] names
> - $_crc32 = '%%' . substr($_crc32,0,3) .
> $_compile_dir_sep . '%%' . $_crc32;
> - $_return .= $_crc32 . $_filename;
> + $_crc32 = substr($_crc32, 0, 2) . $_compile_dir_sep .
> + substr($_crc32, 0, 3) .
> $_compile_dir_sep . $_crc32;
> + $_return .= '%%' . $_crc32 . '%%' . $_filename;
> }
>
> return $_return;
> @@ -1823,11 +1772,9 @@
> {
> if(isset($exp_time)) {
> if(time() - @filemtime($resource) >= $exp_time) {
> - if( is_readable($resource)) return false;
> return @unlink($resource);
> }
> } else {
> - if( is_readable($resource)) return false;
> return @unlink($resource);
> }
> }
> @@ -1901,7 +1848,7 @@
> {
> if ($this->debugging) {
> $_params = array();
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_microtime.php');
> + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
> $debug_start_time =
> smarty_core_get_microtime($_params, $this);
> $this->_smarty_debug_info[] = array('type'
> => 'template',
> 'filename'
> => $params['smarty_include_tpl_file'],
> @@ -1932,7 +1879,7 @@
> if ($this->debugging) {
> // capture time for debugging info
> $_params = array();
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_microtime.php');
> + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
>
> $this->_smarty_debug_info[$included_tpls_idx]['exec_time'] =
> smarty_core_get_microtime($_params, $this) - $debug_start_time;
> }
>
> @@ -1952,7 +1899,7 @@
>
> if ($this->_cache_including) {
> /* return next set of cache_attrs */
> - $_return =& current($_cache_attrs);
> + $_return = current($_cache_attrs);
> next($_cache_attrs);
> return $_return;
>
>
> Modified: plog/trunk/class/template/smarty/Smarty_Compiler.class.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/Smarty_Compiler.class.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/Smarty_Compiler.class.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -19,18 +19,18 @@
> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
> 02111-1307 USA
> *
> * @link http://smarty.php.net/
> - * @author Monte Ohrt <monte at ispi.net>
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @author Andrei Zmievski <andrei at php.net>
> - * @version 2.6.2
> - * @copyright 2001-2004 ispi of Lincoln, Inc.
> + * @version 2.6.12
> + * @copyright 2001-2005 New Digital Group, Inc.
> * @package Smarty
> */
>
> -/* $Id: Smarty_Compiler.class.php,v 1.2 2004/02/20 15:52:24
> phunkphorce Exp $ */
> +/* $Id: Smarty_Compiler.class.php,v 1.376 2006/01/15
> 19:29:45 messju Exp $ */
>
> /**
> * Template compiling class
> - * \ingroup Template
> + * @package Smarty
> */
> class Smarty_Compiler extends Smarty {
>
> @@ -49,7 +49,9 @@
> var $_si_qstr_regexp = null;
> var $_qstr_regexp = null;
> var $_func_regexp = null;
> + var $_reg_obj_regexp = null;
> var $_var_bracket_regexp = null;
> + var $_num_const_regexp = null;
> var $_dvar_guts_regexp = null;
> var $_dvar_regexp = null;
> var $_cvar_regexp = null;
> @@ -97,6 +99,12 @@
> // [$bar]
> $this->_var_bracket_regexp = '\[\$?[\w\.]+\]';
>
> + // matches numerical constants
> + // 30
> + // -12
> + // 13.22
> + $this->_num_const_regexp = '(?:\-?\d+(?:\.\d+)?)';
> +
> // matches $ vars (not objects):
> // $foo
> // $foo.bar
> @@ -105,11 +113,10 @@
> // $foo[$bar]
> // $foo[5][blah]
> // $foo[5].bar[$foobar][4]
> - $this->_dvar_math_regexp = '[\+\-\*\/\%]';
> + $this->_dvar_math_regexp = '(?:[\+\*\/\%]|(?:-(?!>)))';
> $this->_dvar_math_var_regexp = '[\$\w\.\+\-\*\/\%\d\>\[\]]';
> - $this->_dvar_num_var_regexp = '\-?\d+(?:\.\d+)?' .
> $this->_dvar_math_var_regexp;
> $this->_dvar_guts_regexp = '\w+(?:' .
> $this->_var_bracket_regexp
> - . ')*(?:\.\$?\w+(?:' .
> $this->_var_bracket_regexp . ')*)*(?:' .
> $this->_dvar_math_regexp . '(?:\-?\d+(?:\.\d+)?|' .
> $this->_dvar_math_var_regexp . ')*)?';
> + . ')*(?:\.\$?\w+(?:' .
> $this->_var_bracket_regexp . ')*)*(?:' .
> $this->_dvar_math_regexp . '(?:' . $this->_num_const_regexp .
> '|' . $this->_dvar_math_var_regexp . ')*)?';
> $this->_dvar_regexp = '\$' . $this->_dvar_guts_regexp;
>
> // matches config vars:
> @@ -134,7 +141,7 @@
> // "text"
> $this->_var_regexp = '(?:' . $this->_avar_regexp .
> '|' . $this->_qstr_regexp . ')';
>
> - // matches valid object call (no objects allowed in
> parameters):
> + // matches valid object call (one level of object
> nesting allowed in parameters):
> // $foo->bar
> // $foo->bar()
> // $foo->bar("text")
> @@ -142,13 +149,20 @@
> // $foo->bar($foo, "foo")
> // $foo->bar->foo()
> // $foo->bar->foo->bar()
> + // $foo->bar($foo->bar)
> + // $foo->bar($foo->bar())
> + // $foo->bar($foo->bar($blah,$foo,44,"foo",$foo[0].bar))
> $this->_obj_ext_regexp = '\->(?:\$?' .
> $this->_dvar_guts_regexp . ')';
> - $this->_obj_params_regexp = '\((?:\w+|'
> - . $this->_var_regexp . '(?:\s*,\s*(?:(?:\w+|'
> - . $this->_var_regexp . ')))*)?\)';
> + $this->_obj_restricted_param_regexp = '(?:'
> + . '(?:' . $this->_var_regexp . '|' .
> $this->_num_const_regexp . ')(?:' . $this->_obj_ext_regexp .
> '(?:\((?:(?:' . $this->_var_regexp . '|' .
> $this->_num_const_regexp . ')'
> + . '(?:\s*,\s*(?:' . $this->_var_regexp . '|'
> . $this->_num_const_regexp . '))*)?\))?)*)';
> + $this->_obj_single_param_regexp = '(?:\w+|' .
> $this->_obj_restricted_param_regexp . '(?:\s*,\s*(?:(?:\w+|'
> + . $this->_var_regexp .
> $this->_obj_restricted_param_regexp . ')))*)';
> + $this->_obj_params_regexp = '\((?:' .
> $this->_obj_single_param_regexp
> + . '(?:\s*,\s*' .
> $this->_obj_single_param_regexp . ')*)?\)';
> $this->_obj_start_regexp = '(?:' .
> $this->_dvar_regexp . '(?:' . $this->_obj_ext_regexp . ')+)';
> - $this->_obj_call_regexp = '(?:' .
> $this->_obj_start_regexp . '(?:' . $this->_obj_params_regexp . ')?)';
> -
> + $this->_obj_call_regexp = '(?:' .
> $this->_obj_start_regexp . '(?:' . $this->_obj_params_regexp
> . ')?(?:' . $this->_dvar_math_regexp . '(?:' .
> $this->_num_const_regexp . '|' . $this->_dvar_math_var_regexp
> . ')*)?)';
> +
> // matches valid modifier syntax:
> // |foo
> // |@foo
> @@ -157,7 +171,7 @@
> // |foo:"bar":$foobar
> // |foo|bar
> // |foo:$foo->bar
> - $this->_mod_regexp = '(?:\|@?\w+(?::(?>-?\w+|'
> + $this->_mod_regexp = '(?:\|@?\w+(?::(?:\w+|' .
> $this->_num_const_regexp . '|'
> . $this->_obj_call_regexp . '|' .
> $this->_avar_regexp . '|' . $this->_qstr_regexp .'))*)';
>
> // matches valid function name:
> @@ -179,7 +193,7 @@
> // "text"|bar
> // $foo->bar
> $this->_param_regexp = '(?:\s*(?:' .
> $this->_obj_call_regexp . '|'
> - . $this->_var_regexp . '|\w+)(?>' .
> $this->_mod_regexp . '*)\s*)';
> + . $this->_var_regexp . '|' .
> $this->_num_const_regexp . '|\w+)(?>' . $this->_mod_regexp .
> '*)\s*)';
>
> // matches valid parenthesised function parameters:
> //
> @@ -223,8 +237,8 @@
>
> $this->_current_file = $resource_name;
> $this->_current_line_no = 1;
> - $ldq = preg_quote($this->left_delimiter, '!');
> - $rdq = preg_quote($this->right_delimiter, '!');
> + $ldq = preg_quote($this->left_delimiter, '~');
> + $rdq = preg_quote($this->right_delimiter, '~');
>
> // run template source through prefilter functions
> if (count($this->_plugins['prefilter']) > 0) {
> @@ -241,7 +255,7 @@
> }
>
> /* fetch all special blocks */
> - $search =
> "!{$ldq}\*(.*?)\*{$rdq}|{$ldq}\s*literal\s*{$rdq}(.*?){$ldq}\s
> */literal\s*{$rdq}|{$ldq}\s*php\s*{$rdq}(.*?){$ldq}\s*/php\s*{
> $rdq}!s";
> + $search =
> "~{$ldq}\*(.*?)\*{$rdq}|{$ldq}\s*literal\s*{$rdq}(.*?){$ldq}\s
> */literal\s*{$rdq}|{$ldq}\s*php\s*{$rdq}(.*?){$ldq}\s*/php\s*{
> $rdq}~s";
>
> preg_match_all($search, $source_content, $match,
> PREG_SET_ORDER);
> $this->_folded_blocks = $match;
> @@ -256,15 +270,15 @@
> , $source_content);
>
> /* Gather all template tags. */
> - preg_match_all("!{$ldq}\s*(.*?)\s*{$rdq}!s",
> $source_content, $_match);
> + preg_match_all("~{$ldq}\s*(.*?)\s*{$rdq}~s",
> $source_content, $_match);
> $template_tags = $_match[1];
> /* Split content by template tags to obtain
> non-template content. */
> - $text_blocks = preg_split("!{$ldq}.*?{$rdq}!s",
> $source_content);
> + $text_blocks = preg_split("~{$ldq}.*?{$rdq}~s",
> $source_content);
>
> /* loop through text blocks */
> for ($curr_tb = 0, $for_max = count($text_blocks);
> $curr_tb < $for_max; $curr_tb++) {
> /* match anything resembling php tags */
> - if
> (preg_match_all('!(<\?(?:\w+|=)?|\?>|language\s*=\s*[\"\']?php
> [\"\']?)!is', $text_blocks[$curr_tb], $sp_match)) {
> + if
> (preg_match_all('~(<\?(?:\w+|=)?|\?>|language\s*=\s*[\"\']?php
> [\"\']?)~is', $text_blocks[$curr_tb], $sp_match)) {
> /* replace tags with placeholders to prevent
> recursive replacements */
> $sp_match[1] = array_unique($sp_match[1]);
> usort($sp_match[1], '_smarty_sort_length');
> @@ -284,7 +298,7 @@
> $text_blocks[$curr_tb] =
> str_replace('%%%SMARTYSP'.$curr_sp.'%%%', '', $text_blocks[$curr_tb]);
> } else {
> /* SMARTY_PHP_ALLOW, but echo non
> php starting tags */
> - $sp_match[1][$curr_sp] =
> preg_replace('%(<\?(?!php|=|$))%i', '<?php echo
> \'\\1\'?>'."\n", $sp_match[1][$curr_sp]);
> + $sp_match[1][$curr_sp] =
> preg_replace('~(<\?(?!php|=|$))~i', '<?php echo
> \'\\1\'?>'."\n", $sp_match[1][$curr_sp]);
> $text_blocks[$curr_tb] =
> str_replace('%%%SMARTYSP'.$curr_sp.'%%%',
> $sp_match[1][$curr_sp], $text_blocks[$curr_tb]);
> }
> }
> @@ -304,31 +318,50 @@
> return;
> }
>
> + /* Reformat $text_blocks between 'strip' and '/strip' tags,
> + removing spaces, tabs and newlines. */
> + $strip = false;
> + for ($i = 0, $for_max = count($compiled_tags); $i <
> $for_max; $i++) {
> + if ($compiled_tags[$i] == '{strip}') {
> + $compiled_tags[$i] = '';
> + $strip = true;
> + /* remove leading whitespaces */
> + $text_blocks[$i + 1] = ltrim($text_blocks[$i + 1]);
> + }
> + if ($strip) {
> + /* strip all $text_blocks before the next '/strip' */
> + for ($j = $i + 1; $j < $for_max; $j++) {
> + /* remove leading and trailing
> whitespaces of each line */
> + $text_blocks[$j] = preg_replace('![\t
> ]*[\r\n]+[\t ]*!', '', $text_blocks[$j]);
> + if ($compiled_tags[$j] == '{/strip}') {
>
> + /* remove trailing whitespaces from
> the last text_block */
> + $text_blocks[$j] = rtrim($text_blocks[$j]);
> + }
> + $text_blocks[$j] = "<?php echo '" .
> strtr($text_blocks[$j], array("'"=>"\'", "\\"=>"\\\\")) . "'; ?>";
> + if ($compiled_tags[$j] == '{/strip}') {
> + $compiled_tags[$j] = "\n"; /*
> slurped by php, but necessary
> + if a newline is
> following the closing strip-tag */
> + $strip = false;
> + $i = $j;
> + break;
> + }
> + }
> + }
> + }
> $compiled_content = '';
>
> /* Interleave the compiled contents and text blocks
> to get the final result. */
> for ($i = 0, $for_max = count($compiled_tags); $i <
> $for_max; $i++) {
> if ($compiled_tags[$i] == '') {
> // tag result empty, remove first newline
> from following text block
> - $text_blocks[$i+1] =
> preg_replace('!^(\r\n|\r|\n)!', '', $text_blocks[$i+1]);
> + $text_blocks[$i+1] =
> preg_replace('~^(\r\n|\r|\n)~', '', $text_blocks[$i+1]);
> }
> $compiled_content .= $text_blocks[$i].$compiled_tags[$i];
> }
> $compiled_content .= $text_blocks[$i];
>
> - /* Reformat data between 'strip' and '/strip' tags,
> removing spaces, tabs and newlines. */
> - if
> (preg_match_all("!{$ldq}strip{$rdq}.*?{$ldq}/strip{$rdq}!s",
> $compiled_content, $_match)) {
> - $strip_tags = $_match[0];
> - $strip_tags_modified =
> preg_replace("!{$ldq}/?strip{$rdq}|[\t ]+$|^[\t ]+!m", '',
> $strip_tags);
> - $strip_tags_modified =
> preg_replace('![\r\n]+!m', '', $strip_tags_modified);
> - for ($i = 0, $for_max = count($strip_tags); $i <
> $for_max; $i++)
> - $compiled_content =
> preg_replace("!{$ldq}strip{$rdq}.*?{$ldq}/strip{$rdq}!s",
> -
> $this->_quote_replace($strip_tags_modified[$i]),
> -
> $compiled_content, 1);
> - }
> -
> // remove \n from the end of the file, if any
> - if (($_len=strlen($compiled_content)) &&
> ($compiled_content{$_len - 1} == "\n" )) {
> + if (strlen($compiled_content) &&
> (substr($compiled_content, -1) == "\n") ) {
> $compiled_content = substr($compiled_content, 0, -1);
> }
>
> @@ -337,7 +370,7 @@
> }
>
> // remove unnecessary close/open tags
> - $compiled_content = preg_replace('!\?>\n?<\?php!',
> '', $compiled_content);
> + $compiled_content = preg_replace('~\?>\n?<\?php~',
> '', $compiled_content);
>
> // run compiled template through postfilter functions
> if (count($this->_plugins['postfilter']) > 0) {
> @@ -363,19 +396,19 @@
> $_plugins_params = "array('plugins' => array(";
> foreach ($this->_plugin_info as $plugin_type =>
> $plugins) {
> foreach ($plugins as $plugin_name => $plugin_info) {
> - $_plugins_params .=
> "array('$plugin_type', '$plugin_name', '$plugin_info[0]',
> $plugin_info[1], ";
> + $_plugins_params .=
> "array('$plugin_type', '$plugin_name', '" .
> strtr($plugin_info[0], array("'" => "\\'", "\\" => "\\\\")) .
> "', $plugin_info[1], ";
> $_plugins_params .= $plugin_info[2] ?
> 'true),' : 'false),';
> }
> }
> $_plugins_params .= '))';
> - $plugins_code = "<?php require_once(SMARTY_DIR .
> 'core' . DIRECTORY_SEPARATOR .
> 'core.load_plugins.php');\nsmarty_core_load_plugins($_plugins_
> params, \$this); ?>\n";
> + $plugins_code = "<?php
> require_once(SMARTY_CORE_DIR .
> 'core.load_plugins.php');\nsmarty_core_load_plugins($_plugins_
> params, \$this); ?>\n";
> $template_header .= $plugins_code;
> $this->_plugin_info = array();
> $this->_plugins_code = $plugins_code;
> }
>
> if ($this->_init_smarty_vars) {
> - $template_header .= "<?php
> require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR .
> 'core.assign_smarty_interface.php');\nsmarty_core_assign_smart
> y_interface(null, \$this); ?>\n";
> + $template_header .= "<?php
> require_once(SMARTY_CORE_DIR .
> 'core.assign_smarty_interface.php');\nsmarty_core_assign_smart
> y_interface(null, \$this); ?>\n";
> $this->_init_smarty_vars = false;
> }
>
> @@ -392,33 +425,29 @@
> function _compile_tag($template_tag)
> {
> /* Matched comment. */
> - if ($template_tag{0} == '*' &&
> $template_tag{strlen($template_tag) - 1} == '*')
> + if (substr($template_tag, 0, 1) == '*' &&
> substr($template_tag, -1) == '*')
> return '';
> -
> +
> /* Split tag into two three parts: command, command
> modifiers and the arguments. */
> - if(! preg_match('/^(?:(' . $this->_obj_call_regexp .
> '|' . $this->_var_regexp
> + if(! preg_match('~^(?:(' . $this->_num_const_regexp
> . '|' . $this->_obj_call_regexp . '|' . $this->_var_regexp
> . '|\/?' . $this->_reg_obj_regexp . '|\/?' .
> $this->_func_regexp . ')(' . $this->_mod_regexp . '*))
> (?:\s+(.*))?$
> - /xs', $template_tag, $match)) {
> + ~xs', $template_tag, $match)) {
> $this->_syntax_error("unrecognized tag:
> $template_tag", E_USER_ERROR, __FILE__, __LINE__);
> }
> -
> +
> $tag_command = $match[1];
> $tag_modifier = isset($match[2]) ? $match[2] : null;
> $tag_args = isset($match[3]) ? $match[3] : null;
>
> - if (preg_match('!^' . $this->_obj_call_regexp . '|'
> . $this->_var_regexp . '$!', $tag_command)) {
> + if (preg_match('~^' . $this->_num_const_regexp . '|'
> . $this->_obj_call_regexp . '|' . $this->_var_regexp . '$~',
> $tag_command)) {
> /* tag name is a variable or object */
> - $_return = $this->_parse_var_props($tag_command
> . $tag_modifier, $this->_parse_attrs($tag_args));
> - if(isset($_tag_attrs['assign'])) {
> - return "<?php \$this->assign('" .
> $this->_dequote($_tag_attrs['assign']) . "', $_return ); ?>\n";
> - } else {
> - return "<?php echo $_return; ?>" .
> $this->_additional_newline;
> - }
> + $_return = $this->_parse_var_props($tag_command
> . $tag_modifier);
> + return "<?php echo $_return; ?>" .
> $this->_additional_newline;
> }
>
> /* If the tag name is a registered object, we process it. */
> - if (preg_match('!^\/?' . $this->_reg_obj_regexp .
> '$!', $tag_command)) {
> + if (preg_match('~^\/?' . $this->_reg_obj_regexp .
> '$~', $tag_command)) {
> return
> $this->_compile_registered_object_tag($tag_command,
> $this->_parse_attrs($tag_args), $tag_modifier);
> }
>
> @@ -436,7 +465,7 @@
> case 'else':
> list($_open_tag) = end($this->_tag_stack);
> if ($_open_tag != 'if' && $_open_tag != 'elseif')
> - $this->_syntax_error('unxepected
> {else}', E_USER_ERROR, __FILE__, __LINE__);
> + $this->_syntax_error('unexpected
> {else}', E_USER_ERROR, __FILE__, __LINE__);
> else
> $this->_push_tag('else');
> return '<?php else: ?>';
> @@ -444,7 +473,7 @@
> case 'elseif':
> list($_open_tag) = end($this->_tag_stack);
> if ($_open_tag != 'if' && $_open_tag != 'elseif')
> - $this->_syntax_error('unxepected
> {elseif}', E_USER_ERROR, __FILE__, __LINE__);
> + $this->_syntax_error('unexpected
> {elseif}', E_USER_ERROR, __FILE__, __LINE__);
> if ($_open_tag == 'if')
> $this->_push_tag('elseif');
> return $this->_compile_if_tag($tag_args, true);
> @@ -488,29 +517,29 @@
>
> case 'foreachelse':
> $this->_push_tag('foreachelse');
> - return "<?php endforeach; unset(\$_from); else: ?>";
> + return "<?php endforeach; else: ?>";
>
> case '/foreach':
> $_open_tag = $this->_pop_tag('foreach');
> if ($_open_tag == 'foreachelse')
> - return "<?php endif; ?>";
> + return "<?php endif; unset(\$_from); ?>";
> else
> - return "<?php endforeach;
> unset(\$_from); endif; ?>";
> + return "<?php endforeach; endif;
> unset(\$_from); ?>";
> break;
>
> case 'strip':
> case '/strip':
> - if ($tag_command{0}=='/') {
> + if (substr($tag_command, 0, 1)=='/') {
> $this->_pop_tag('strip');
> if (--$this->_strip_depth==0) { /*
> outermost closing {/strip} */
> $this->_additional_newline = "\n";
> - return
> $this->left_delimiter.$tag_command.$this->right_delimiter;
> + return '{' . $tag_command . '}';
> }
> } else {
> $this->_push_tag('strip');
> if ($this->_strip_depth++==0) { /*
> outermost opening {strip} */
> $this->_additional_newline = "";
> - return
> $this->left_delimiter.$tag_command.$this->right_delimiter;
> + return '{' . $tag_command . '}';
> }
> }
> return '';
> @@ -546,7 +575,7 @@
> } else if
> ($this->_compile_block_tag($tag_command, $tag_args,
> $tag_modifier, $output)) {
> return $output;
> } else if
> ($this->_compile_custom_tag($tag_command, $tag_args,
> $tag_modifier, $output)) {
> - return $output;
> + return $output;
> } else {
> $this->_syntax_error("unrecognized tag
> '$tag_command'", E_USER_ERROR, __FILE__, __LINE__);
> }
> @@ -635,7 +664,7 @@
> */
> function _compile_block_tag($tag_command, $tag_args,
> $tag_modifier, &$output)
> {
> - if ($tag_command{0} == '/') {
> + if (substr($tag_command, 0, 1) == '/') {
> $start_tag = false;
> $tag_command = substr($tag_command, 1);
> } else
> @@ -697,17 +726,18 @@
> if ($start_tag) {
> $output = '<?php ' .
> $this->_push_cacheable_state('block', $tag_command);
> $attrs = $this->_parse_attrs($tag_args);
> - $arg_list = $this->_compile_arg_list('block',
> $tag_command, $attrs, $_cache_attrs='');
> + $_cache_attrs='';
> + $arg_list = $this->_compile_arg_list('block',
> $tag_command, $attrs, $_cache_attrs);
> $output .= "$_cache_attrs\$this->_tag_stack[] =
> array('$tag_command', array(".implode(',', $arg_list).')); ';
> - $output .= $this->_compile_plugin_call('block',
> $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][
> 1], null, $this, $_block_repeat=true);';
> + $output .= '$_block_repeat=true;' .
> $this->_compile_plugin_call('block',
> $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][
> 1], null, $this, $_block_repeat);';
> $output .= 'while ($_block_repeat) { ob_start(); ?>';
> } else {
> - $output = '<?php $this->_block_content =
> ob_get_contents(); ob_end_clean(); ';
> - $_out_tag_text =
> $this->_compile_plugin_call('block',
> $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][
> 1], $this->_block_content, $this, $_block_repeat=false)';
> + $output = '<?php $_block_content =
> ob_get_contents(); ob_end_clean(); ';
> + $_out_tag_text =
> $this->_compile_plugin_call('block',
> $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][
> 1], $_block_content, $this, $_block_repeat)';
> if ($tag_modifier != '') {
> $this->_parse_modifiers($_out_tag_text,
> $tag_modifier);
> }
> - $output .= 'echo '.$_out_tag_text.'; } ';
> + $output .= '$_block_repeat=false;echo ' .
> $_out_tag_text . '; } ';
> $output .= " array_pop(\$this->_tag_stack); " .
> $this->_pop_cacheable_state('block', $tag_command) . '?>';
> }
>
> @@ -772,7 +802,8 @@
>
> $_cacheable_state =
> $this->_push_cacheable_state('function', $tag_command);
> $attrs = $this->_parse_attrs($tag_args);
> - $arg_list = $this->_compile_arg_list('function',
> $tag_command, $attrs, $_cache_attrs='');
> + $_cache_attrs = '';
> + $arg_list = $this->_compile_arg_list('function',
> $tag_command, $attrs, $_cache_attrs);
>
> $output = $this->_compile_plugin_call('function',
> $tag_command).'(array('.implode(',', $arg_list)."), \$this)";
> if($tag_modifier != '') {
> @@ -797,7 +828,7 @@
> */
> function _compile_registered_object_tag($tag_command,
> $attrs, $tag_modifier)
> {
> - if ($tag_command{0} == '/') {
> + if (substr($tag_command, 0, 1) == '/') {
> $start_tag = false;
> $tag_command = substr($tag_command, 1);
> } else {
> @@ -845,13 +876,13 @@
> // block method
> if ($start_tag) {
> $prefix = "\$this->_tag_stack[] =
> array('$obj_comp', $args); ";
> - $prefix .=
> "\$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_st
> ack[count(\$this->_tag_stack)-1][1], null, \$this,
> \$_block_repeat=true); ";
> + $prefix .= "\$_block_repeat=true;
> \$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_sta
> ck[count(\$this->_tag_stack)-1][1], null, \$this, \$_block_repeat); ";
> $prefix .= "while (\$_block_repeat) {
> ob_start();";
> $return = null;
> $postfix = '';
> } else {
> - $prefix = "\$this->_obj_block_content =
> ob_get_contents(); ob_end_clean(); ";
> - $return =
> "\$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_st
> ack[count(\$this->_tag_stack)-1][1],
> \$this->_obj_block_content, \$this, \$_block_repeat=false)";
> + $prefix = "\$_obj_block_content =
> ob_get_contents(); ob_end_clean(); ";
> + $return = "\$_block_repeat=false;
> \$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_sta
> ck[count(\$this->_tag_stack)-1][1], \$_obj_block_content,
> \$this, \$_block_repeat)";
> $postfix = "} array_pop(\$this->_tag_stack);";
> }
> } else {
> @@ -912,7 +943,7 @@
>
> $_params = "array('args' => array(".implode(', ',
> (array)$arg_list)."))";
>
> - return "<?php require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.run_insert_handler.php');\necho
> smarty_core_run_insert_handler($_params, \$this); ?>" .
> $this->_additional_newline;
> + return "<?php require_once(SMARTY_CORE_DIR .
> 'core.run_insert_handler.php');\necho
> smarty_core_run_insert_handler($_params, \$this); ?>" .
> $this->_additional_newline;
> }
>
> /**
> @@ -996,7 +1027,7 @@
>
> $_params = "array('smarty_file' => " .
> $attrs['file'] . ", 'smarty_assign' => '$assign_var',
> 'smarty_once' => $once_var, 'smarty_include_vars' =>
> array(".implode(',', $arg_list)."))";
>
> - return "<?php require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR .
> 'core.smarty_include_php.php');\nsmarty_core_smarty_include_ph
> p($_params, \$this); ?>" . $this->_additional_newline;
> + return "<?php require_once(SMARTY_CORE_DIR .
> 'core.smarty_include_php.php');\nsmarty_core_smarty_include_ph
> p($_params, \$this); ?>" . $this->_additional_newline;
> }
>
>
> @@ -1017,7 +1048,7 @@
> $this->_syntax_error("missing section name",
> E_USER_ERROR, __FILE__, __LINE__);
> }
>
> - $output .= "if
> (isset(\$this->_sections[$section_name]))
> unset(\$this->_sections[$section_name]);\n";
> + $output .= "unset(\$this->_sections[$section_name]);\n";
> $section_props = "\$this->_sections[$section_name]";
>
> foreach ($attrs as $attr_name => $attr_value) {
> @@ -1117,50 +1148,45 @@
> $arg_list = array();
>
> if (empty($attrs['from'])) {
> - $this->_syntax_error("missing 'from' attribute",
> E_USER_ERROR, __FILE__, __LINE__);
> + return $this->_syntax_error("foreach: missing
> 'from' attribute", E_USER_ERROR, __FILE__, __LINE__);
> }
> + $from = $attrs['from'];
>
> if (empty($attrs['item'])) {
> - $this->_syntax_error("missing 'item' attribute",
> E_USER_ERROR, __FILE__, __LINE__);
> + return $this->_syntax_error("foreach: missing
> 'item' attribute", E_USER_ERROR, __FILE__, __LINE__);
> }
> -
> - $from = $attrs['from'];
> $item = $this->_dequote($attrs['item']);
> - if (isset($attrs['name']))
> - $name = $attrs['name'];
> -
> - $output = '<?php ';
> - if (isset($name)) {
> - $output .= "if (isset(\$this->_foreach[$name]))
> unset(\$this->_foreach[$name]);\n";
> - $foreach_props = "\$this->_foreach[$name]";
> + if (!preg_match('~^\w+$~', $item)) {
> + return $this->_syntax_error("'foreach: item'
> must be a variable name (literal string)", E_USER_ERROR,
> __FILE__, __LINE__);
> }
>
> - $key_part = '';
> -
> - foreach ($attrs as $attr_name => $attr_value) {
> - switch ($attr_name) {
> - case 'key':
> - $key = $this->_dequote($attrs['key']);
> - $key_part = "\$this->_tpl_vars['$key'] => ";
> - break;
> -
> - case 'name':
> - $output .=
> "{$foreach_props}['$attr_name'] = $attr_value;\n";
> - break;
> + if (isset($attrs['key'])) {
> + $key = $this->_dequote($attrs['key']);
> + if (!preg_match('~^\w+$~', $key)) {
> + return $this->_syntax_error("foreach: 'key'
> must to be a variable name (literal string)", E_USER_ERROR,
> __FILE__, __LINE__);
> }
> + $key_part = "\$this->_tpl_vars['$key'] => ";
> + } else {
> + $key = null;
> + $key_part = '';
> }
>
> + if (isset($attrs['name'])) {
> + $name = $attrs['name'];
> + } else {
> + $name = null;
> + }
> +
> + $output = '<?php ';
> + $output .= "\$_from = $from; if (!is_array(\$_from)
> && !is_object(\$_from)) { settype(\$_from, 'array'); }";
> if (isset($name)) {
> - $output .= "{$foreach_props}['total'] =
> count(\$_from = (array)$from);\n";
> - $output .= "{$foreach_props}['show'] =
> {$foreach_props}['total'] > 0;\n";
> - $output .= "if ({$foreach_props}['show']):\n";
> - $output .= "{$foreach_props}['iteration'] = 0;\n";
> + $foreach_props = "\$this->_foreach[$name]";
> + $output .= "{$foreach_props} = array('total' =>
> count(\$_from), 'iteration' => 0);\n";
> + $output .= "if ({$foreach_props}['total'] > 0):\n";
> $output .= " foreach (\$_from as
> $key_part\$this->_tpl_vars['$item']):\n";
> $output .= " {$foreach_props}['iteration']++;\n";
> - $output .= " {$foreach_props}['first'] =
> ({$foreach_props}['iteration'] == 1);\n";
> - $output .= " {$foreach_props}['last'] =
> ({$foreach_props}['iteration'] == {$foreach_props}['total']);\n";
> } else {
> - $output .= "if (count(\$_from = (array)$from)):\n";
> + $output .= "if (count(\$_from)):\n";
> $output .= " foreach (\$_from as
> $key_part\$this->_tpl_vars['$item']):\n";
> }
> $output .= '?>';
> @@ -1216,16 +1242,23 @@
> {
>
> /* Tokenize args for 'if' tag. */
> - preg_match_all('/(?>
> + preg_match_all('~(?>
> ' . $this->_obj_call_regexp . '(?:' .
> $this->_mod_regexp . '*)? | # valid object call
> ' . $this->_var_regexp . '(?:' .
> $this->_mod_regexp . '*)? | # var or quoted string
>
> \-?0[xX][0-9a-fA-F]+|\-?\d+(?:\.\d+)?|\.\d+|!==|===|==|!=|<>|<
> <|>>|<=|>=|\&\&|\|\||\(|\)|,|\!|\^|=|\&|\~|<|>|\||\%|\+|\-|\/|
> \*|\@ | # valid non-word token
> \b\w+\b
> | # valid word token
> \S+
> # anything else
> - )/x', $tag_args, $match);
> + )~x', $tag_args, $match);
>
> $tokens = $match[0];
>
> + if(empty($tokens)) {
> + $_error_msg .= $elseif ? "'elseif'" : "'if'";
> + $_error_msg .= ' statement requires arguments';
> + $this->_syntax_error($_error_msg, E_USER_ERROR,
> __FILE__, __LINE__);
> + }
> +
> +
> // make sure we have balanced parenthesis
> $token_count = array_count_values($tokens);
> if(isset($token_count['(']) && $token_count['('] !=
> $token_count[')']) {
> @@ -1342,13 +1375,16 @@
> break;
>
> default:
> - if(preg_match('!^' . $this->_func_regexp
> . '$!', $token) ) {
> + if(preg_match('~^' . $this->_func_regexp
> . '$~', $token) ) {
> // function call
> if($this->security &&
> !in_array($token,
> $this->security_settings['IF_FUNCS'])) {
>
> $this->_syntax_error("(secure mode) '$token' not allowed in
> if statement", E_USER_ERROR, __FILE__, __LINE__);
> }
> - } elseif(preg_match('!^' .
> $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' .
> $this->_mod_regexp . '*)$!', $token)) {
> + } elseif(preg_match('~^' .
> $this->_var_regexp . '$~', $token) && (strpos('+-*/^%&|',
> substr($token, -1)) === false) && isset($tokens[$i+1]) &&
> $tokens[$i+1] == '(') {
> + // variable function call
> + $this->_syntax_error("variable
> function call '$token' not allowed in if statement",
> E_USER_ERROR, __FILE__, __LINE__);
> + } elseif(preg_match('~^' .
> $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' .
> $this->_mod_regexp . '*)$~', $token)) {
> // object or variable
> $token = $this->_parse_var_props($token);
> } elseif(is_numeric($token)) {
> @@ -1472,10 +1508,10 @@
> {
>
> /* Tokenize tag attributes. */
> - preg_match_all('/(?:' . $this->_obj_call_regexp .
> '|' . $this->_qstr_regexp . ' | (?>[^"\'=\s]+)
> + preg_match_all('~(?:' . $this->_obj_call_regexp .
> '|' . $this->_qstr_regexp . ' | (?>[^"\'=\s]+)
> )+ |
> [=]
> - /x', $tag_args, $match);
> + ~x', $tag_args, $match);
> $tokens = $match[0];
>
> $attrs = array();
> @@ -1490,7 +1526,7 @@
> case 0:
> /* If the token is a valid identifier,
> we set attribute name
> and go to state 1. */
> - if (preg_match('!^\w+$!', $token)) {
> + if (preg_match('~^\w+$~', $token)) {
> $attr_name = $token;
> $state = 1;
> } else
> @@ -1511,15 +1547,15 @@
> if ($token != '=') {
> /* We booleanize the token if it's a
> non-quoted possible
> boolean value. */
> - if (preg_match('!^(on|yes|true)$!',
> $token)) {
> + if (preg_match('~^(on|yes|true)$~',
> $token)) {
> $token = 'true';
> - } else if
> (preg_match('!^(off|no|false)$!', $token)) {
> + } else if
> (preg_match('~^(off|no|false)$~', $token)) {
> $token = 'false';
> } else if ($token == 'null') {
> $token = 'null';
> - } else if
> (preg_match('!^-?([0-9]+|0[xX][0-9a-fA-F]+)$!', $token)) {
> + } else if (preg_match('~^' .
> $this->_num_const_regexp . '|0[xX][0-9a-fA-F]+$~', $token)) {
> /* treat integer literally */
> - } else if (!preg_match('!^' .
> $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' .
> $this->_mod_regexp . ')*$!', $token)) {
> + } else if (!preg_match('~^' .
> $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' .
> $this->_mod_regexp . ')*$~', $token)) {
> /* treat as a string,
> double-quote it escaping quotes */
> $token = '"'.addslashes($token).'"';
> }
> @@ -1571,44 +1607,52 @@
> {
> $val = trim($val);
>
> - if(preg_match('!^(' . $this->_obj_call_regexp . '|'
> . $this->_dvar_regexp . ')(' . $this->_mod_regexp . '*)$!',
> $val, $match)) {
> + if(preg_match('~^(' . $this->_obj_call_regexp . '|'
> . $this->_dvar_regexp . ')(' . $this->_mod_regexp . '*)$~',
> $val, $match)) {
> // $ variable or object
> $return = $this->_parse_var($match[1]);
> $modifiers = $match[2];
> - if (!empty($this->default_modifiers) &&
> !preg_match('!(^|\|)smarty:nodefaults($|\|)!',$modifiers)) {
> + if (!empty($this->default_modifiers) &&
> !preg_match('~(^|\|)smarty:nodefaults($|\|)~',$modifiers)) {
> $_default_mod_string =
> implode('|',(array)$this->default_modifiers);
> $modifiers = empty($modifiers) ?
> $_default_mod_string : $_default_mod_string . '|' . $modifiers;
> }
> $this->_parse_modifiers($return, $modifiers);
> return $return;
> - } elseif (preg_match('!^' . $this->_db_qstr_regexp .
> '(?:' . $this->_mod_regexp . '*)$!', $val)) {
> + } elseif (preg_match('~^' . $this->_db_qstr_regexp .
> '(?:' . $this->_mod_regexp . '*)$~', $val)) {
> // double quoted text
> - preg_match('!^(' . $this->_db_qstr_regexp .
> ')('. $this->_mod_regexp . '*)$!', $val, $match);
> + preg_match('~^(' . $this->_db_qstr_regexp .
> ')('. $this->_mod_regexp . '*)$~', $val, $match);
> $return = $this->_expand_quoted_text($match[1]);
> if($match[2] != '') {
> $this->_parse_modifiers($return, $match[2]);
> }
> return $return;
> }
> - elseif(preg_match('!^' . $this->_si_qstr_regexp .
> '(?:' . $this->_mod_regexp . '*)$!', $val)) {
> + elseif(preg_match('~^' . $this->_num_const_regexp .
> '(?:' . $this->_mod_regexp . '*)$~', $val)) {
> + // numerical constant
> + preg_match('~^(' . $this->_num_const_regexp
> . ')('. $this->_mod_regexp . '*)$~', $val, $match);
> + if($match[2] != '') {
> + $this->_parse_modifiers($match[1], $match[2]);
> + return $match[1];
> + }
> + }
> + elseif(preg_match('~^' . $this->_si_qstr_regexp .
> '(?:' . $this->_mod_regexp . '*)$~', $val)) {
> // single quoted text
> - preg_match('!^(' . $this->_si_qstr_regexp .
> ')('. $this->_mod_regexp . '*)$!', $val, $match);
> + preg_match('~^(' . $this->_si_qstr_regexp .
> ')('. $this->_mod_regexp . '*)$~', $val, $match);
> if($match[2] != '') {
> $this->_parse_modifiers($match[1], $match[2]);
> return $match[1];
> }
> }
> - elseif(preg_match('!^' . $this->_cvar_regexp . '(?:'
> . $this->_mod_regexp . '*)$!', $val)) {
> + elseif(preg_match('~^' . $this->_cvar_regexp . '(?:'
> . $this->_mod_regexp . '*)$~', $val)) {
> // config var
> return $this->_parse_conf_var($val);
> }
> - elseif(preg_match('!^' . $this->_svar_regexp . '(?:'
> . $this->_mod_regexp . '*)$!', $val)) {
> + elseif(preg_match('~^' . $this->_svar_regexp . '(?:'
> . $this->_mod_regexp . '*)$~', $val)) {
> // section var
> return $this->_parse_section_prop($val);
> }
> elseif(!in_array($val, $this->_permitted_tokens) &&
> !is_numeric($val)) {
> // literal string
> - return $this->_expand_quoted_text('"' . $val .'"');
> + return $this->_expand_quoted_text('"' .
> strtr($val, array('\\' => '\\\\', '"' => '\\"')) .'"');
> }
> return $val;
> }
> @@ -1622,19 +1666,19 @@
> function _expand_quoted_text($var_expr)
> {
> // if contains unescaped $, expand it
> - if(preg_match_all('%(?:\`(?<!\\\\)\$' .
> $this->_dvar_guts_regexp .
> '\`)|(?:(?<!\\\\)\$\w+(\[[a-zA-Z0-9]+\])*)%', $var_expr, $_match)) {
> + if(preg_match_all('~(?:\`(?<!\\\\)\$' .
> $this->_dvar_guts_regexp . '(?:' . $this->_obj_ext_regexp .
> ')*\`)|(?:(?<!\\\\)\$\w+(\[[a-zA-Z0-9]+\])*)~', $var_expr, $_match)) {
> $_match = $_match[0];
> rsort($_match);
> reset($_match);
> foreach($_match as $_var) {
> $var_expr = str_replace ($_var, '".(' .
> $this->_parse_var(str_replace('`','',$_var)) . ')."', $var_expr);
> }
> - $_return = preg_replace('%\.""|(?<!\\\\)""\.%',
> '', $var_expr);
> + $_return = preg_replace('~\.""|(?<!\\\\)""\.~',
> '', $var_expr);
> } else {
> $_return = $var_expr;
> }
> // replace double quoted literal string with single quotes
> - $_return = preg_replace('!^"([\s\w]+)"$!',"'\\1'",$_return);
> + $_return = preg_replace('~^"([\s\w]+)"$~',"'\\1'",$_return);
> return $_return;
> }
>
> @@ -1648,7 +1692,7 @@
> function _parse_var($var_expr)
> {
> $_has_math = false;
> - $_math_vars =
> preg_split('!('.$this->_dvar_math_regexp.'|'.$this->_qstr_rege
> xp.')!', $var_expr, -1, PREG_SPLIT_DELIM_CAPTURE);
> + $_math_vars =
> preg_split('~('.$this->_dvar_math_regexp.'|'.$this->_qstr_rege
> xp.')~', $var_expr, -1, PREG_SPLIT_DELIM_CAPTURE);
>
> if(count($_math_vars) > 1) {
> $_first_var = "";
> @@ -1660,7 +1704,7 @@
>
> if(!empty($_math_var) || is_numeric($_math_var)) {
> // hit a math operator, so process the
> stuff which came before it
> - if(preg_match('!^' .
> $this->_dvar_math_regexp . '$!', $_math_var)) {
> + if(preg_match('~^' .
> $this->_dvar_math_regexp . '$~', $_math_var)) {
> $_has_math = true;
> if(!empty($_complete_var) ||
> is_numeric($_complete_var)) {
> $_output .=
> $this->_parse_var($_complete_var);
> @@ -1674,23 +1718,13 @@
>
> $_complete_var = "";
> } else {
> - // fetch multiple -> (like
> $foo->bar->baz ) which wouldn't get fetched else, because it
> would only get $foo->bar and treat the ->baz as "-" ">baz" then
> - for($_i = $_k + 1; $_i <=
> count($_math_vars); $_i += 2) {
> - // fetch -> because it gets
> splitted at - and move it back together
> - if( /* prevent notice */
> (isset($_math_vars[$_i]) && isset($_math_vars[$_i+1])) &&
> ($_math_vars[$_i] === '-' && $_math_vars[$_i+1]{0} === '>')) {
> - $_math_var .=
> $_math_vars[$_i].$_math_vars[$_i+1];
> - $_math_vars[$_i] =
> $_math_vars[$_i+1] = '';
> - } else {
> - break;
> - }
> - }
> $_complete_var .= $_math_var;
> }
> }
> }
> if($_has_math) {
> if(!empty($_complete_var) ||
> is_numeric($_complete_var))
> - $_output .=
> $this->_parse_var($_complete_var, true);
> + $_output .= $this->_parse_var($_complete_var);
>
> // get the modifiers working (only the last
> var from math + modifier is left)
> $var_expr = $_complete_var;
> @@ -1698,15 +1732,16 @@
> }
>
> // prevent cutting of first digit in the number (we
> _definitly_ got a number if the first char is a digit)
> - if(is_numeric($var_expr{0}))
> + if(is_numeric(substr($var_expr, 0, 1)))
> $_var_ref = $var_expr;
> else
> $_var_ref = substr($var_expr, 1);
> -
> +
> if(!$_has_math) {
> +
> // get [foo] and .foo and ->foo and (...) pieces
> - preg_match_all('!(?:^\w+)|' .
> $this->_obj_params_regexp . '|(?:' .
> $this->_var_bracket_regexp . ')|->\$?\w+|\.\$?\w+|\S+!',
> $_var_ref, $match);
> -
> + preg_match_all('~(?:^\w+)|' .
> $this->_obj_params_regexp . '|(?:' .
> $this->_var_bracket_regexp . ')|->\$?\w+|\.\$?\w+|\S+~',
> $_var_ref, $match);
> +
> $_indexes = $match[0];
> $_var_name = array_shift($_indexes);
>
> @@ -1723,7 +1758,7 @@
> $_var_name = substr(array_shift($_indexes), 1);
> $_output = "\$this->_smarty_vars['$_var_name']";
> }
> - } elseif(is_numeric($_var_name) &&
> is_numeric($var_expr{0})) {
> + } elseif(is_numeric($_var_name) &&
> is_numeric(substr($var_expr, 0, 1))) {
> // because . is the operator for accessing
> arrays thru inidizes we need to put it together again for
> floating point numbers
> if(count($_indexes) > 0)
> {
> @@ -1736,11 +1771,11 @@
> }
>
> foreach ($_indexes as $_index) {
> - if ($_index{0} == '[') {
> + if (substr($_index, 0, 1) == '[') {
> $_index = substr($_index, 1, -1);
> if (is_numeric($_index)) {
> $_output .= "[$_index]";
> - } elseif ($_index{0} == '$') {
> + } elseif (substr($_index, 0, 1) == '$') {
> if (strpos($_index, '.') !== false) {
> $_output .= '[' .
> $this->_parse_var($_index) . ']';
> } else {
> @@ -1752,8 +1787,8 @@
> $_var_section_prop =
> isset($_var_parts[1]) ? $_var_parts[1] : 'index';
> $_output .=
> "[\$this->_sections['$_var_section']['$_var_section_prop']]";
> }
> - } else if ($_index{0} == '.') {
> - if ($_index{1} == '$')
> + } else if (substr($_index, 0, 1) == '.') {
> + if (substr($_index, 1, 1) == '$')
> $_output .= "[\$this->_tpl_vars['" .
> substr($_index, 2) . "']]";
> else
> $_output .= "['" . substr($_index, 1) . "']";
> @@ -1762,7 +1797,7 @@
> $this->_syntax_error('call to
> internal object members is not allowed', E_USER_ERROR,
> __FILE__, __LINE__);
> } elseif($this->security &&
> substr($_index, 2, 1) == '_') {
> $this->_syntax_error('(secure) call
> to private object member is not allowed', E_USER_ERROR,
> __FILE__, __LINE__);
> - } elseif ($_index{2} == '$') {
> + } elseif (substr($_index, 2, 1) == '$') {
> if ($this->security) {
> $this->_syntax_error('(secure)
> call to dynamic object member is not allowed', E_USER_ERROR,
> __FILE__, __LINE__);
> } else {
> @@ -1771,7 +1806,7 @@
> } else {
> $_output .= $_index;
> }
> - } elseif ($_index{0} == '(') {
> + } elseif (substr($_index, 0, 1) == '(') {
> $_index = $this->_parse_parenth_args($_index);
> $_output .= $_index;
> } else {
> @@ -1791,13 +1826,14 @@
> */
> function _parse_parenth_args($parenth_args)
> {
> - preg_match_all('!' . $this->_param_regexp .
> '!',$parenth_args, $match);
> - $match = $match[0];
> - rsort($match);
> - reset($match);
> - $orig_vals = $match;
> + preg_match_all('~' . $this->_param_regexp .
> '~',$parenth_args, $match);
> + $orig_vals = $match = $match[0];
> $this->_parse_vars_props($match);
> - return str_replace($orig_vals, $match, $parenth_args);
> + $replace = array();
> + for ($i = 0, $count = count($match); $i < $count; $i++) {
> + $replace[$orig_vals[$i]] = $match[$i];
> + }
> + return strtr($parenth_args, $replace);
> }
>
> /**
> @@ -1853,7 +1889,7 @@
> */
> function _parse_modifiers(&$output, $modifier_string)
> {
> - preg_match_all('!\|(@?\w+)((?>:(?:'.
> $this->_qstr_regexp . '|[^|]+))*)!', '|' . $modifier_string, $_match);
> + preg_match_all('~\|(@?\w+)((?>:(?:'.
> $this->_qstr_regexp . '|[^|]+))*)~', '|' . $modifier_string, $_match);
> list(, $_modifiers, $modifier_arg_strings) = $_match;
>
> for ($_i = 0, $_for_max = count($_modifiers); $_i <
> $_for_max; $_i++) {
> @@ -1864,10 +1900,10 @@
> continue;
> }
>
> - preg_match_all('!:(' . $this->_qstr_regexp .
> '|[^:]+)!', $modifier_arg_strings[$_i], $_match);
> + preg_match_all('~:(' . $this->_qstr_regexp .
> '|[^:]+)~', $modifier_arg_strings[$_i], $_match);
> $_modifier_args = $_match[1];
>
> - if ($_modifier_name{0} == '@') {
> + if (substr($_modifier_name, 0, 1) == '@') {
> $_map_array = false;
> $_modifier_name = substr($_modifier_name, 1);
> } else {
> @@ -1889,10 +1925,10 @@
>
> if($_modifier_name == 'default') {
> // supress notifications of default modifier
> vars and args
> - if($output{0} == '$') {
> + if(substr($output, 0, 1) == '$') {
> $output = '@' . $output;
> }
> - if(isset($_modifier_args[0]) &&
> $_modifier_args[0]{0} == '$') {
> + if(isset($_modifier_args[0]) &&
> substr($_modifier_args[0], 0, 1) == '$') {
> $_modifier_args[0] = '@' . $_modifier_args[0];
> }
> }
> @@ -1944,7 +1980,7 @@
> /* Extract the reference name. */
> $_ref = substr($indexes[0], 1);
> foreach($indexes as $_index_no=>$_index) {
> - if ($_index{0} != '.' && $_index_no<2 ||
> !preg_match('!^(\.|\[|->)!', $_index)) {
> + if (substr($_index, 0, 1) != '.' && $_index_no<2
> || !preg_match('~^(\.|\[|->)~', $_index)) {
> $this->_syntax_error('$smarty' . implode('',
> array_slice($indexes, 0, 2)) . ' is an invalid reference',
> E_USER_ERROR, __FILE__, __LINE__);
> }
> }
> @@ -1956,13 +1992,41 @@
> break;
>
> case 'foreach':
> + array_shift($indexes);
> + $_var =
> $this->_parse_var_props(substr($indexes[0], 1));
> + $_propname = substr($indexes[1], 1);
> + $_max_index = 1;
> + switch ($_propname) {
> + case 'index':
> + array_shift($indexes);
> + $compiled_ref =
> "(\$this->_foreach[$_var]['iteration']-1)";
> + break;
> +
> + case 'first':
> + array_shift($indexes);
> + $compiled_ref =
> "(\$this->_foreach[$_var]['iteration'] <= 1)";
> + break;
> +
> + case 'last':
> + array_shift($indexes);
> + $compiled_ref =
> "(\$this->_foreach[$_var]['iteration'] ==
> \$this->_foreach[$_var]['total'])";
> + break;
> +
> + case 'show':
> + array_shift($indexes);
> + $compiled_ref =
> "(\$this->_foreach[$_var]['total'] > 0)";
> + break;
> +
> + default:
> + unset($_max_index);
> + $compiled_ref = "\$this->_foreach[$_var]";
> + }
> + break;
> +
> case 'section':
> array_shift($indexes);
> $_var =
> $this->_parse_var_props(substr($indexes[0], 1));
> - if ($_ref == 'foreach')
> - $compiled_ref = "\$this->_foreach[$_var]";
> - else
> - $compiled_ref = "\$this->_sections[$_var]";
> + $compiled_ref = "\$this->_sections[$_var]";
> break;
>
> case 'get':
> @@ -2016,9 +2080,18 @@
> break;
>
> case 'const':
> + if ($this->security &&
> !$this->security_settings['ALLOW_CONSTANTS']) {
> + $this->_syntax_error("(secure mode)
> constants not permitted",
> + E_USER_WARNING,
> __FILE__, __LINE__);
> + return;
> + }
> array_shift($indexes);
> - $_val =
> $this->_parse_var_props(substr($indexes[0],1));
> - $compiled_ref = '@constant(' . $_val . ')';
> + if (preg_match('!^\.\w+$!', $indexes[0])) {
> + $compiled_ref = '@' . substr($indexes[0], 1);
> + } else {
> + $_val =
> $this->_parse_var_props(substr($indexes[0], 1));
> + $compiled_ref = '@constant(' . $_val . ')';
> + }
> $_max_index = 1;
> break;
>
> @@ -2034,7 +2107,7 @@
> case 'rdelim':
> $compiled_ref = "'$this->right_delimiter'";
> break;
> -
> +
> default:
> $this->_syntax_error('$smarty.' . $_ref . '
> is an unknown reference', E_USER_ERROR, __FILE__, __LINE__);
> break;
> @@ -2089,7 +2162,7 @@
> if ($prefilter === false) {
>
> unset($this->_plugins['prefilter'][$filter_name]);
> $_params = array('plugins' =>
> array(array('prefilter', $filter_name, null, null, false)));
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.load_plugins.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.load_plugins.php');
> smarty_core_load_plugins($_params, $this);
> }
> }
> @@ -2099,7 +2172,7 @@
> if ($postfilter === false) {
>
> unset($this->_plugins['postfilter'][$filter_name]);
> $_params = array('plugins' =>
> array(array('postfilter', $filter_name, null, null, false)));
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.load_plugins.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.load_plugins.php');
> smarty_core_load_plugins($_params, $this);
> }
> }
> @@ -2115,7 +2188,7 @@
> */
> function _quote_replace($string)
> {
> - return preg_replace('![\\$]\d!', '\\\\\\0', $string);
> + return strtr($string, array('\\' => '\\\\', '$' => '\\$'));
> }
>
> /**
> @@ -2143,9 +2216,9 @@
> if ($_cacheable
> || 0<$this->_cacheable_state++) return '';
> if (!isset($this->_cache_serial))
> $this->_cache_serial = md5(uniqid('Smarty'));
> - $_ret = 'if ($this->caching) { echo \'{nocache:'
> + $_ret = 'if ($this->caching &&
> !$this->_cache_including) { echo \'{nocache:'
> . $this->_cache_serial . '#' . $this->_nocache_count
> - . '}\';}';
> + . '}\'; };';
> return $_ret;
> }
>
> @@ -2160,15 +2233,15 @@
> $_cacheable = !isset($this->_plugins[$type][$name])
> || $this->_plugins[$type][$name][4];
> if ($_cacheable
> || --$this->_cacheable_state>0) return '';
> - return 'if ($this->caching) { echo \'{/nocache:'
> + return 'if ($this->caching &&
> !$this->_cache_including) { echo \'{/nocache:'
> . $this->_cache_serial . '#' . ($this->_nocache_count++)
> - . '}\';}';
> + . '}\'; };';
> }
>
>
> /**
> * push opening tag-name, file-name and line-number on
> the tag-stack
> - * @param: string the opening tag's name
> + * @param string the opening tag's name
> */
> function _push_tag($open_tag)
> {
> @@ -2178,8 +2251,8 @@
> /**
> * pop closing tag-name
> * raise an error if this stack-top doesn't match with
> the closing tag
> - * @param: string the closing tag's name
> - * @return: string the opening tag's name
> + * @param string the closing tag's name
> + * @return string the opening tag's name
> */
> function _pop_tag($close_tag)
> {
> @@ -2200,6 +2273,13 @@
> $this->_pop_tag($close_tag);
> return $_open_tag;
> }
> + if ($_open_tag == 'else' || $_open_tag == 'elseif') {
> + $_open_tag = 'if';
> + } elseif ($_open_tag == 'sectionelse') {
> + $_open_tag = 'section';
> + } elseif ($_open_tag == 'foreachelse') {
> + $_open_tag = 'foreach';
> + }
> $message = " expected {/$_open_tag} (opened line
> $_line_no).";
> }
> $this->_syntax_error("mismatched tag {/$close_tag}.$message",
>
> Modified:
> plog/trunk/class/template/smarty/core/core.assemble_plugin_fil
> epath.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/core/core.assemble_plugin_fil
> epath.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/core/core.assemble_plugin_fil
> epath.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -50,9 +50,10 @@
> $_plugin_filepath = $_plugin_dir .
> DIRECTORY_SEPARATOR . $_plugin_filename;
>
> $_params = array('file_path' => $_plugin_filepath);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_include_path.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.get_include_path.php');
> if(smarty_core_get_include_path($_params, $smarty)) {
> - return $_params['new_file_path'];
> + $_return = $_params['new_file_path'];
> + break;
> }
> }
> }
>
> Modified:
> plog/trunk/class/template/smarty/core/core.create_dir_structure.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/core/core.create_dir_struct
> ure.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/core/core.create_dir_struct
> ure.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -22,7 +22,7 @@
> /* unix-style paths */
> $_dir = $params['dir'];
> $_dir_parts = preg_split('!/+!', $_dir, -1,
> PREG_SPLIT_NO_EMPTY);
> - $_new_dir = ($_dir{0}=='/') ? '/' : getcwd().'/';
> + $_new_dir = (substr($_dir, 0, 1)=='/') ? '/' :
> getcwd().'/';
> if($_use_open_basedir = !empty($_open_basedir_ini)) {
> $_open_basedirs = explode(':', $_open_basedir_ini);
> }
>
> Modified:
> plog/trunk/class/template/smarty/core/core.display_debug_console.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/core/core.display_debug_cons
> ole.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/core/core.display_debug_cons
> ole.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -23,8 +23,9 @@
> // set path to debug template from SMARTY_DIR
> $smarty->debug_tpl = SMARTY_DIR . 'debug.tpl';
> if($smarty->security && is_file($smarty->debug_tpl)) {
> - $smarty->secure_dir[] =
> dirname(realpath($smarty->debug_tpl));
> + $smarty->secure_dir[] = realpath($smarty->debug_tpl);
> }
> + $smarty->debug_tpl = 'file:' . SMARTY_DIR . 'debug.tpl';
> }
>
> $_ldelim_orig = $smarty->left_delimiter;
>
> Modified:
> plog/trunk/class/template/smarty/core/core.get_php_resource.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/core/core.get_php_resou
> rce.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/core/core.get_php_resou
> rce.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -32,7 +32,7 @@
> } else {
> // test for file in include_path
> $_params = array('file_path' =>
> $params['resource_name']);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_include_path.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.get_include_path.php');
> if(smarty_core_get_include_path($_params, $smarty)) {
> $_include_path = $_params['new_file_path'];
> $_readable = true;
> @@ -56,7 +56,7 @@
>
> if ($_readable) {
> if ($smarty->security) {
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.is_trusted.php');
> + require_once(SMARTY_CORE_DIR . 'core.is_trusted.php');
> if (!smarty_core_is_trusted($params, $smarty)) {
> $smarty->$_error_funcc('(secure mode) ' .
> $params['resource_type'] . ':' . $params['resource_name'] . '
> is not trusted');
> return false;
>
> Modified: plog/trunk/class/template/smarty/core/core.is_secure.php
> ===================================================================
> --- plog/trunk/class/template/smarty/core/core.is_secure.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++ plog/trunk/class/template/smarty/core/core.is_secure.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -17,41 +17,41 @@
>
> function smarty_core_is_secure($params, &$smarty)
> {
> - static $check_template_dir = true;
> -
> if (!$smarty->security ||
> $smarty->security_settings['INCLUDE_ANY']) {
> return true;
> }
>
> - $_smarty_secure = false;
> if ($params['resource_type'] == 'file') {
> - if($check_template_dir) {
> - if (!in_array($smarty->template_dir,
> $smarty->secure_dir))
> - // add template_dir to secure_dir array
> - array_unshift($smarty->secure_dir,
> $smarty->template_dir);
> - $check_template_dir = false;
> + $_rp = realpath($params['resource_name']);
> + if (isset($params['resource_base_path'])) {
> + foreach ((array)$params['resource_base_path'] as
> $curr_dir) {
> + if ( ($_cd = realpath($curr_dir)) !== false &&
> + strncmp($_rp, $_cd, strlen($_cd)) == 0 &&
> + substr($_rp, strlen($_cd), 1) ==
> DIRECTORY_SEPARATOR ) {
> + return true;
> + }
> + }
> }
> if (!empty($smarty->secure_dir)) {
> - $_rp = realpath($params['resource_name']);
> foreach ((array)$smarty->secure_dir as $curr_dir) {
> - if ( !empty($curr_dir) && is_readable ($curr_dir)) {
> - $_cd = realpath($curr_dir);
> - if (strncmp($_rp, $_cd, strlen($_cd)) == 0
> - && $_rp{strlen($_cd)} ==
> DIRECTORY_SEPARATOR ) {
> - $_smarty_secure = true;
> - break;
> + if ( ($_cd = realpath($curr_dir)) !== false) {
> + if($_cd == $_rp) {
> + return true;
> + } elseif (strncmp($_rp, $_cd,
> strlen($_cd)) == 0 &&
> + substr($_rp, strlen($_cd), 1) ==
> DIRECTORY_SEPARATOR) {
> + return true;
> }
> }
> }
> }
> } else {
> // resource is not on local file system
> - $_smarty_secure = call_user_func_array(
> + return call_user_func_array(
>
> $smarty->_plugins['resource'][$params['resource_type']][0][2],
> - array($params['resource_name'],
> &$_smarty_secure, &$smarty));
> + array($params['resource_name'], &$smarty));
> }
>
> - return $_smarty_secure;
> + return false;
> }
>
> /* vim: set expandtab: */
>
> Modified: plog/trunk/class/template/smarty/core/core.is_trusted.php
> ===================================================================
> --- plog/trunk/class/template/smarty/core/core.is_trusted.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++ plog/trunk/class/template/smarty/core/core.is_trusted.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -5,9 +5,6 @@
> * @subpackage plugins
> */
>
> -/**#@+
> - * @access private
> - */
> /**
> * determines if a resource is trusted or not
> *
> @@ -28,7 +25,7 @@
> if (!empty($curr_dir) && is_readable ($curr_dir)) {
> $_cd = realpath($curr_dir);
> if (strncmp($_rp, $_cd, strlen($_cd)) == 0
> - && $_rp{strlen($_cd)} ==
> DIRECTORY_SEPARATOR ) {
> + && substr($_rp, strlen($_cd), 1) ==
> DIRECTORY_SEPARATOR ) {
> $_smarty_trusted = true;
> break;
> }
>
> Modified:
> plog/trunk/class/template/smarty/core/core.process_cached_inserts.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/core/core.process_cached_inse
> rts.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/core/core.process_cached_inse
> rts.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -20,7 +20,7 @@
> for ($i = 0, $for_max = count($cached_inserts); $i <
> $for_max; $i++) {
> if ($smarty->debugging) {
> $_params = array();
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_microtime.php');
> + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
> $debug_start_time =
> smarty_core_get_microtime($_params, $smarty);
> }
>
> @@ -29,7 +29,7 @@
>
> if (isset($args['script'])) {
> $_params = array('resource_name' =>
> $smarty->_dequote($args['script']));
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_php_resource.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.get_php_resource.php');
> if(!smarty_core_get_php_resource($_params, $smarty)) {
> return false;
> }
> @@ -52,10 +52,10 @@
> $replace = '';
> }
>
> - $params['results'] =
> str_replace($cached_inserts[$i], $replace, $params['results']);
> + $params['results'] =
> substr_replace($params['results'], $replace,
> strpos($params['results'], $cached_inserts[$i]),
> strlen($cached_inserts[$i]));
> if ($smarty->debugging) {
> $_params = array();
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_microtime.php');
> + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
> $smarty->_smarty_debug_info[] = array('type'
> => 'insert',
> 'filename'
> => 'insert_'.$name,
> 'depth'
> => $smarty->_inclusion_depth,
>
> Modified:
> plog/trunk/class/template/smarty/core/core.process_compiled_in
> clude.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/core/core.process_compiled_in
> clude.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/core/core.process_compiled_in
> clude.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -20,6 +20,11 @@
> $smarty->_cache_including = true;
>
> $_return = $params['results'];
> +
> + foreach ($smarty->_cache_info['cache_serials'] as
> $_include_file_path=>$_cache_serial) {
> + $smarty->_include($_include_file_path, true);
> + }
> +
> foreach ($smarty->_cache_serials as
> $_include_file_path=>$_cache_serial) {
> $_return =
> preg_replace_callback('!(\{nocache\:('.$_cache_serial.')#(\d+)\})!s',
> array(&$smarty,
> '_process_compiled_include_callback'),
>
> Modified:
> plog/trunk/class/template/smarty/core/core.read_cache_file.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/core/core.read_cache_f
> ile.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/core/core.read_cache_f
> ile.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -48,11 +48,12 @@
> return false;
> }
>
> - $cache_split = explode("\n", $params['results'], 2);
> - $cache_header = $cache_split[0];
> + $_contents = $params['results'];
> + $_info_start = strpos($_contents, "\n") + 1;
> + $_info_len = (int)substr($_contents, 0, $_info_start - 1);
> + $_cache_info = unserialize(substr($_contents,
> $_info_start, $_info_len));
> + $params['results'] = substr($_contents, $_info_start +
> $_info_len);
>
> - $_cache_info = unserialize($cache_header);
> -
> if ($smarty->caching == 2 && isset ($_cache_info['expires'])){
> // caching by expiration time
> if ($_cache_info['expires'] > -1 && (time() >
> $_cache_info['expires'])) {
> @@ -89,17 +90,6 @@
> }
> }
>
> - foreach ($_cache_info['cache_serials'] as
> $_include_file_path=>$_cache_serial) {
> - if (empty($smarty->_cache_serials[$_include_file_path])) {
> - $smarty->_include($_include_file_path, true);
> - }
> -
> - if ($smarty->_cache_serials[$_include_file_path] !=
> $_cache_serial) {
> - /* regenerate */
> - return false;
> - }
> - }
> - $params['results'] = $cache_split[1];
>
> $content_cache[$params['tpl_file'].','.$params['cache_id'].','
> .$params['compile_id']] = array($params['results'], $_cache_info);
>
> $smarty->_cache_info = $_cache_info;
>
> Modified: plog/trunk/class/template/smarty/core/core.rm_auto.php
> ===================================================================
> --- plog/trunk/class/template/smarty/core/core.rm_auto.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++ plog/trunk/class/template/smarty/core/core.rm_auto.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -28,7 +28,7 @@
> 'level' => 0,
> 'exp_time' => $params['exp_time']
> );
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.rmdir.php');
> + require_once(SMARTY_CORE_DIR . 'core.rmdir.php');
> $_res = smarty_core_rmdir($_params, $smarty);
> } else {
> $_tname =
> $smarty->_get_auto_filename($params['auto_base'],
> $params['auto_source'], $params['auto_id']);
> @@ -47,7 +47,7 @@
> 'level' => 1,
> 'exp_time' => $params['exp_time']
> );
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.rmdir.php');
> + require_once(SMARTY_CORE_DIR . 'core.rmdir.php');
> $_res = smarty_core_rmdir($_params, $smarty);
> } else {
> // remove matching file names
>
> Modified: plog/trunk/class/template/smarty/core/core.rmdir.php
> ===================================================================
> --- plog/trunk/class/template/smarty/core/core.rmdir.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++ plog/trunk/class/template/smarty/core/core.rmdir.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -32,7 +32,6 @@
> 'level' => $params['level'] + 1,
> 'exp_time' => $params['exp_time']
> );
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.rmdir.php');
> smarty_core_rmdir($_params, $smarty);
> }
> else {
>
> Modified:
> plog/trunk/class/template/smarty/core/core.run_insert_handler.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/core/core.run_insert_hand
> ler.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/core/core.run_insert_hand
> ler.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,7 +14,7 @@
> function smarty_core_run_insert_handler($params, &$smarty)
> {
>
> - require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR .
> 'core.get_microtime.php');
> + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
> if ($smarty->debugging) {
> $_params = array();
> $_debug_start_time =
> smarty_core_get_microtime($_params, $smarty);
> @@ -34,7 +34,7 @@
> } else {
> if (isset($params['args']['script'])) {
> $_params = array('resource_name' =>
> $smarty->_dequote($params['args']['script']));
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_php_resource.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.get_php_resource.php');
> if(!smarty_core_get_php_resource($_params, $smarty)) {
> return false;
> }
> @@ -51,7 +51,7 @@
> $_content = $_funcname($params['args'], $smarty);
> if ($smarty->debugging) {
> $_params = array();
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_microtime.php');
> + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
> $smarty->_smarty_debug_info[] = array('type'
> => 'insert',
> 'filename'
> => 'insert_'.$params['args']['name'],
> 'depth'
> => $smarty->_inclusion_depth,
>
> Modified:
> plog/trunk/class/template/smarty/core/core.smarty_include_php.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/core/core.smarty_include_
> php.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/core/core.smarty_include_
> php.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -21,7 +21,7 @@
> function smarty_core_smarty_include_php($params, &$smarty)
> {
> $_params = array('resource_name' => $params['smarty_file']);
> - require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR .
> 'core.get_php_resource.php');
> + require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php');
> smarty_core_get_php_resource($_params, $smarty);
> $_smarty_resource_type = $_params['resource_type'];
> $_smarty_php_resource = $_params['php_resource'];
>
> Modified:
> plog/trunk/class/template/smarty/core/core.write_cache_file.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/core/core.write_cache_f
> ile.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/core/core.write_cache_f
> ile.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -31,16 +31,39 @@
> $smarty->_cache_info['expires'] = -1;
> }
>
> - // collapse {nocache...}-tags
> - $params['results'] =
> preg_replace('!((\{nocache\:([0-9a-f]{32})#(\d+)\})'
> - .'.*'
> - .'{/nocache\:\\3#\\4\})!Us'
> - ,'\\2'
> - ,$params['results']);
> + // collapse nocache.../nocache-tags
> + if
> (preg_match_all('!\{(/?)nocache\:[0-9a-f]{32}#\d+\}!',
> $params['results'], $match, PREG_PATTERN_ORDER)) {
> + // remove everything between every pair of outermost
> noache.../nocache-tags
> + // and replace it by a single nocache-tag
> + // this new nocache-tag will be replaced by dynamic
> contents in
> + // smarty_core_process_compiled_includes() on a cache-read
> +
> + $match_count = count($match[0]);
> + $results =
> preg_split('!(\{/?nocache\:[0-9a-f]{32}#\d+\})!',
> $params['results'], -1, PREG_SPLIT_DELIM_CAPTURE);
> +
> + $level = 0;
> + $j = 0;
> + for ($i=0, $results_count = count($results); $i <
> $results_count && $j < $match_count; $i++) {
> + if ($results[$i] == $match[0][$j]) {
> + // nocache tag
> + if ($match[1][$j]) { // closing tag
> + $level--;
> + unset($results[$i]);
> + } else { // opening tag
> + if ($level++ > 0) unset($results[$i]);
> + }
> + $j++;
> + } elseif ($level > 0) {
> + unset($results[$i]);
> + }
> + }
> + $params['results'] = implode('', $results);
> + }
> $smarty->_cache_info['cache_serials'] = $smarty->_cache_serials;
>
> // prepend the cache header info into cache file
> - $params['results'] =
> serialize($smarty->_cache_info)."\n".$params['results'];
> + $_cache_info = serialize($smarty->_cache_info);
> + $params['results'] = strlen($_cache_info) . "\n" .
> $_cache_info . $params['results'];
>
> if (!empty($smarty->cache_handler_func)) {
> // use cache_handler function
> @@ -62,7 +85,7 @@
> $_auto_id =
> $smarty->_get_auto_id($params['cache_id'], $params['compile_id']);
> $_cache_file =
> $smarty->_get_auto_filename($smarty->cache_dir,
> $params['tpl_file'], $_auto_id);
> $_params = array('filename' => $_cache_file,
> 'contents' => $params['results'], 'create_dirs' => true);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.write_file.php');
> + require_once(SMARTY_CORE_DIR . 'core.write_file.php');
> smarty_core_write_file($_params, $smarty);
> return true;
> }
>
> Modified:
> plog/trunk/class/template/smarty/core/core.write_compiled_include.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/core/core.write_compiled_incl
> ude.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/core/core.write_compiled_incl
> ude.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -10,14 +10,13 @@
> *
> * @param string $compile_path
> * @param string $template_compiled
> - * @param integer $template_timestamp
> * @return boolean
> */
>
> function smarty_core_write_compiled_include($params, &$smarty)
> {
> - $_tag_start = 'if \(\$this->caching\) \{ echo
> \'\{nocache\:('.$params['cache_serial'].')#(\d+)\}\';\}';
> - $_tag_end = 'if \(\$this->caching\) \{ echo
> \'\{/nocache\:(\\2)#(\\3)\}\';\}';
> + $_tag_start = 'if \(\$this->caching &&
> \!\$this->_cache_including\) \{ echo
> \'\{nocache\:('.$params['cache_serial'].')#(\d+)\}\'; \};';
> + $_tag_end = 'if \(\$this->caching &&
> \!\$this->_cache_including\) \{ echo
> \'\{/nocache\:(\\2)#(\\3)\}\'; \};';
>
> preg_match_all('!('.$_tag_start.'(.*)'.$_tag_end.')!Us',
> $params['compiled_content'],
> $_match_source, PREG_SET_ORDER);
> @@ -26,7 +25,8 @@
> if (count($_match_source)==0) return;
>
> // convert the matched php-code to functions
> - $_include_compiled = "<?php /* funky header here */\n\n";
> + $_include_compiled = "<?php /* Smarty version
> ".$smarty->_version.", created on ".strftime("%Y-%m-%d
> %H:%M:%S")."\n";
> + $_include_compiled .= " compiled from " .
> strtr(urlencode($params['resource_name']), array('%2F'=>'/',
> '%3A'=>':')) . " */\n\n";
>
> $_compile_path = $params['include_file_path'];
>
> @@ -35,12 +35,44 @@
>
> $_include_compiled .= $params['plugins_code'];
> $_include_compiled .= "<?php";
> +
> + $this_varname = ((double)phpversion() >= 5.0) ?
> '_smarty' : 'this';
> for ($_i = 0, $_for_max = count($_match_source); $_i <
> $_for_max; $_i++) {
> $_match =& $_match_source[$_i];
> + $source = $_match[4];
> + if ($this_varname == '_smarty') {
> + /* rename $this to $_smarty in the sourcecode */
> + $tokens = token_get_all('<?php ' . $_match[4]);
> +
> + /* remove trailing <?php */
> + $open_tag = '';
> + while ($tokens) {
> + $token = array_shift($tokens);
> + if (is_array($token)) {
> + $open_tag .= $token[1];
> + } else {
> + $open_tag .= $token;
> + }
> + if ($open_tag == '<?php ') break;
> + }
> +
> + for ($i=0, $count = count($tokens); $i < $count; $i++) {
> + if (is_array($tokens[$i])) {
> + if ($tokens[$i][0] == T_VARIABLE &&
> $tokens[$i][1] == '$this') {
> + $tokens[$i] = '$' . $this_varname;
> + } else {
> + $tokens[$i] = $tokens[$i][1];
> + }
> + }
> + }
> + $source = implode('', $tokens);
> + }
> +
> + /* add function to compiled include */
> $_include_compiled .= "
> -function _smarty_tplfunc_$_match[2]_$_match[3](&\$this)
> +function _smarty_tplfunc_$_match[2]_$_match[3](&\$$this_varname)
> {
> -$_match[4]
> +$source
> }
>
> ";
> @@ -50,7 +82,7 @@
> $_params = array('filename' => $_compile_path,
> 'contents' => $_include_compiled,
> 'create_dirs' => true);
>
> - require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR .
> 'core.write_file.php');
> + require_once(SMARTY_CORE_DIR . 'core.write_file.php');
> smarty_core_write_file($_params, $smarty);
> return true;
> }
>
> Modified:
> plog/trunk/class/template/smarty/core/core.write_compiled_resource.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/core/core.write_compiled_reso
> urce.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/core/core.write_compiled_reso
> urce.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -10,7 +10,6 @@
> *
> * @param string $compile_path
> * @param string $compiled_content
> - * @param integer $resource_timestamp
> * @return true
> */
> function smarty_core_write_compiled_resource($params, &$smarty)
> @@ -25,8 +24,8 @@
> return false;
> }
>
> - $_params = array('filename' => $params['compile_path'],
> 'timestamp'=>$params['resource_timestamp'], 'contents' =>
> $params['compiled_content'], 'create_dirs' => true);
> - require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR .
> 'core.write_file.php');
> + $_params = array('filename' => $params['compile_path'],
> 'contents' => $params['compiled_content'], 'create_dirs' => true);
> + require_once(SMARTY_CORE_DIR . 'core.write_file.php');
> smarty_core_write_file($_params, $smarty);
> return true;
> }
>
> Modified: plog/trunk/class/template/smarty/core/core.write_file.php
> ===================================================================
> --- plog/trunk/class/template/smarty/core/core.write_file.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++ plog/trunk/class/template/smarty/core/core.write_file.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -19,25 +19,28 @@
>
> if ($params['create_dirs']) {
> $_params = array('dir' => $_dirname);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.create_dir_structure.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.create_dir_structure.php');
> smarty_core_create_dir_structure($_params, $smarty);
> }
>
> // write to tmp file, then rename it to avoid
> // file locking race condition
> - $_tmp_file = $_dirname . DIRECTORY_SEPARATOR . uniqid('');
> + $_tmp_file = tempnam($_dirname, 'wrt');
>
> - if (!($fd = @fopen($_tmp_file, 'w'))) {
> - $smarty->trigger_error("problem writing temporary
> file '$_tmp_file'");
> - return false;
> + if (!($fd = @fopen($_tmp_file, 'wb'))) {
> + $_tmp_file = $_dirname . DIRECTORY_SEPARATOR . uniqid('wrt');
> + if (!($fd = @fopen($_tmp_file, 'wb'))) {
> + $smarty->trigger_error("problem writing
> temporary file '$_tmp_file'");
> + return false;
> + }
> }
>
> fwrite($fd, $params['contents']);
> - if (isset($params['timestamp'])) {
> - touch($_tmp_file, $params['timestamp']);
> - }
> fclose($fd);
> - if(file_exists($params['filename'])) {
> +
> + // Delete the file if it allready exists (this is needed on Win,
> + // because it cannot overwrite files with rename()
> + if (file_exists($params['filename'])) {
> @unlink($params['filename']);
> }
> @rename($_tmp_file, $params['filename']);
>
> Modified: plog/trunk/class/template/smarty/debug.tpl
> ===================================================================
> --- plog/trunk/class/template/smarty/debug.tpl
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++ plog/trunk/class/template/smarty/debug.tpl
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -36,7 +36,7 @@
> var title = 'Console_' + self.name;
> {rdelim}
> _smarty_console =
> window.open("",title.value,"width=680,height=600,resizable,scr
> ollbars=yes");
> - _smarty_console.document.write("<HTML><TITLE>Smarty
> Debug Console_"+self.name+"</TITLE><BODY bgcolor=#ffffff>");
> +
> _smarty_console.document.write("<HTML><HEAD><TITLE>Smarty
> Debug Console_"+self.name+"</TITLE></HEAD><BODY bgcolor=#ffffff>");
> _smarty_console.document.write("<table border=0 width=100%>");
> _smarty_console.document.write("<tr bgcolor=#cccccc><th
> colspan=2>Smarty Debug Console</th></tr>");
> _smarty_console.document.write("<tr bgcolor=#cccccc><td
> colspan=2><b>included templates & config files (load time in
> seconds):</b></td></tr>");
>
> Modified:
> plog/trunk/class/template/smarty/plugins/block.textformat.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/block.textformat.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/block.textformat.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -23,6 +23,7 @@
> * indent_char: string (" ")
> * wrap_boundary: boolean (true)
> * </pre>
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string contents of the block
> * @param Smarty clever simulation of a method
> * @return string string $content re-formatted
> @@ -71,33 +72,30 @@
> }
>
> // split into paragraphs
> - $paragraphs = preg_split('![\r\n][\r\n]!',$content);
> - $output = '';
> + $_paragraphs = preg_split('![\r\n][\r\n]!',$content);
> + $_output = '';
>
> - foreach ($paragraphs as $paragraph) {
> - if ($paragraph == '') {
> + for($_x = 0, $_y = count($_paragraphs); $_x < $_y; $_x++) {
> + if ($_paragraphs[$_x] == '') {
> continue;
> }
> // convert mult. spaces & special chars to single space
> - $paragraph =
> preg_replace(array('!\s+!','!(^\s+)|(\s+$)!'),array('
> ',''),$paragraph);
> + $_paragraphs[$_x] =
> preg_replace(array('!\s+!','!(^\s+)|(\s+$)!'), array(' ',''),
> $_paragraphs[$_x]);
> // indent first line
> if($indent_first > 0) {
> - $paragraph =
> str_repeat($indent_char,$indent_first) . $paragraph;
> + $_paragraphs[$_x] = str_repeat($indent_char,
> $indent_first) . $_paragraphs[$_x];
> }
> // wordwrap sentences
> - $paragraph = wordwrap($paragraph, $wrap - $indent,
> $wrap_char, $wrap_cut);
> + $_paragraphs[$_x] = wordwrap($_paragraphs[$_x],
> $wrap - $indent, $wrap_char, $wrap_cut);
> // indent lines
> if($indent > 0) {
> - $paragraph =
> preg_replace('!^!m',str_repeat($indent_char,$indent),$paragraph);
> + $_paragraphs[$_x] = preg_replace('!^!m',
> str_repeat($indent_char, $indent), $_paragraphs[$_x]);
> }
> - $output .= $paragraph . $wrap_char . $wrap_char;
> }
> + $_output = implode($wrap_char . $wrap_char, $_paragraphs);
>
> - if ($assign) {
> - $smarty->assign($assign,$output);
> - } else {
> - return $output;
> - }
> + return $assign ? $smarty->assign($assign, $_output) : $_output;
> +
> }
>
> /* vim: set expandtab: */
>
> Modified: plog/trunk/class/template/smarty/plugins/compiler.assign.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/compiler.assign.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/compiler.assign.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -1,4 +1,9 @@
> <?php
> +/**
> + * Smarty plugin
> + * @package Smarty
> + * @subpackage plugins
> + */
>
> /**
> * Smarty {assign} compiler function plugin
> @@ -8,6 +13,8 @@
> * Purpose: assign a value to a template variable
> * @link
> http://smarty.php.net/manual/en/language.custom.functions.php#
> LANGUAGE.FUNCTION.ASSIGN {assign}
> * (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com> (initial author)
> + * @auther messju mohr <messju at lammfellpuschen dot de>
> (conversion to compiler function)
> * @param string containing var-attribute and value-attribute
> * @param Smarty_Compiler
> */
>
> Modified:
> plog/trunk/class/template/smarty/plugins/function.assign_debug
> _info.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.assign_debug
> _info.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.assign_debug
> _info.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -11,6 +11,7 @@
> * Type: function<br>
> * Name: assign_debug_info<br>
> * Purpose: assign debug info to the template<br>
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param array unused in this plugin, this plugin uses
> {@link Smarty::$_config},
> * {@link Smarty::$_tpl_vars} and {@link
> Smarty::$_smarty_debug_info}
> * @param Smarty
> @@ -24,7 +25,7 @@
> ksort($config_vars);
> $smarty->assign("_debug_config_keys",
> array_keys($config_vars));
> $smarty->assign("_debug_config_vals",
> array_values($config_vars));
> - }
> + }
>
> $included_templates = $smarty->_smarty_debug_info;
>
>
> Modified:
> plog/trunk/class/template/smarty/plugins/function.config_load.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.config_l
> oad.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.config_l
> oad.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -13,6 +13,8 @@
> * Purpose: load config file vars
> * @link
> http://smarty.php.net/manual/en/language.function.config.load.
> php {config_load}
> * (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> + * @author messju mohr <messju at lammfellpuschen dot de>
> (added use of resources)
> * @param array Format:
> * <pre>
> * array('file' => required config file name,
> @@ -26,7 +28,7 @@
> {
> if ($smarty->debugging) {
> $_params = array();
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_microtime.php');
> + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
> $_debug_start_time =
> smarty_core_get_microtime($_params, $smarty);
> }
>
> @@ -53,7 +55,9 @@
> }
> }
>
> - $_params = array('resource_name' => $_file,
> 'resource_base_path' => $smarty->config_dir);
> + $_params = array('resource_name' => $_file,
> + 'resource_base_path' => $smarty->config_dir,
> + 'get_source' => false);
> $smarty->_parse_resource_name($_params);
> $_file_path = $_params['resource_type'] . ':' .
> $_params['resource_name'];
> if (isset($_section))
> @@ -61,10 +65,19 @@
> else
> $_compile_file = $smarty->_get_compile_path($_file_path);
>
> - if($smarty->force_compile
> - || !file_exists($_compile_file)
> - || ($smarty->compile_check
> - && !$smarty->_is_compiled($_file_path,
> $_compile_file))) {
> + if($smarty->force_compile || !file_exists($_compile_file)) {
> + $_compile = true;
> + } elseif ($smarty->compile_check) {
> + $_params = array('resource_name' => $_file,
> + 'resource_base_path' =>
> $smarty->config_dir,
> + 'get_source' => false);
> + $_compile = $smarty->_fetch_resource_info($_params) &&
> + $_params['resource_timestamp'] >
> filemtime($_compile_file);
> + } else {
> + $_compile = false;
> + }
> +
> + if($_compile) {
> // compile config file
> if(!is_object($smarty->_conf_obj)) {
> require_once SMARTY_DIR .
> $smarty->config_class . '.class.php';
> @@ -74,7 +87,10 @@
> $smarty->_conf_obj->read_hidden =
> $smarty->config_read_hidden;
> $smarty->_conf_obj->fix_newlines =
> $smarty->config_fix_newlines;
> }
> - $_params = array('resource_name' => $_file,
> 'resource_base_path' => $smarty->config_dir);
> +
> + $_params = array('resource_name' => $_file,
> + 'resource_base_path' =>
> $smarty->config_dir,
> + $_params['get_source'] = true);
> if (!$smarty->_fetch_resource_info($_params)) {
> return;
> }
> @@ -87,7 +103,7 @@
> $_output = '<?php $_config_vars =
> unserialize(\'' .
> strtr(serialize($_config_vars),array('\''=>'\\\'',
> '\\'=>'\\\\')) . '\'); ?>';
> }
> $_params = (array('compile_path' =>
> $_compile_file, 'compiled_content' => $_output,
> 'resource_timestamp' => $_params['resource_timestamp']));
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.write_compiled_resource.php');
> + require_once(SMARTY_CORE_DIR .
> 'core.write_compiled_resource.php');
> smarty_core_write_compiled_resource($_params, $smarty);
> } else {
> include($_compile_file);
> @@ -112,7 +128,7 @@
>
> if ($smarty->debugging) {
> $_params = array();
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.get_microtime.php');
> + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
> $smarty->_smarty_debug_info[] = array('type'
> => 'config',
> 'filename'
> => $_file.' ['.$_section.'] '.$_scope,
> 'depth'
> => $smarty->_inclusion_depth,
>
> Modified:
> plog/trunk/class/template/smarty/plugins/function.counter.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.counter.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.counter.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -12,6 +12,7 @@
> * Type: function<br>
> * Name: counter<br>
> * Purpose: print out a counter value
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @link
> http://smarty.php.net/manual/en/language.function.counter.php
> {counter}
> * (Smarty online manual)
> * @param array parameters
>
> Modified: plog/trunk/class/template/smarty/plugins/function.cycle.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.cycle.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.cycle.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -23,7 +23,7 @@
> * - delimiter = the value delimiter, default is ","
> * - assign = boolean, assigns to template var instead of
> * printed.
> - *
> + *
> * Examples:<br>
> * <pre>
> * {cycle values="#eeeeee,#d0d0d0d"}
> @@ -32,7 +32,7 @@
> * </pre>
> * @link
> http://smarty.php.net/manual/en/language.function.cycle.php {cycle}
> * (Smarty online manual)
> - * @author Monte Ohrt <monte at ispi.net>
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @author credit to Mark Priatel <mpriatel at rogers.com>
> * @author credit to Gerard <gerard at interfold.com>
> * @author credit to Jason Sweat <jsweat_php at yahoo.com>
> @@ -66,7 +66,7 @@
> $cycle_vars[$name]['delimiter'] =
> (isset($params['delimiter'])) ? $params['delimiter'] : ',';
>
> if(is_array($cycle_vars[$name]['values'])) {
> - $cycle_array = $cycle_vars[$name]['values'];
> + $cycle_array = $cycle_vars[$name]['values'];
> } else {
> $cycle_array =
> explode($cycle_vars[$name]['delimiter'],$cycle_vars[$name]['values']);
> }
> @@ -88,7 +88,7 @@
>
> if($advance) {
> if ( $cycle_vars[$name]['index'] >=
> count($cycle_array) -1 ) {
> - $cycle_vars[$name]['index'] = 0;
> + $cycle_vars[$name]['index'] = 0;
> } else {
> $cycle_vars[$name]['index']++;
> }
>
> Modified: plog/trunk/class/template/smarty/plugins/function.debug.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.debug.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.debug.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -15,7 +15,7 @@
> * Purpose: popup debug window
> * @link
> http://smarty.php.net/manual/en/language.function.debug.php {debug}
> * (Smarty online manual)
> - * @author Monte Ohrt <monte at ispi.net>
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @version 1.0
> * @param array
> * @param Smarty
> @@ -23,10 +23,10 @@
> */
> function smarty_function_debug($params, &$smarty)
> {
> - if($params['output']) {
> - $smarty->assign('_smarty_debug_output',$params['output']);
> + if (isset($params['output'])) {
> + $smarty->assign('_smarty_debug_output', $params['output']);
> }
> - require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR .
> 'core.display_debug_console.php');
> + require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php');
> return smarty_core_display_debug_console(null, $smarty);
> }
>
>
> Modified: plog/trunk/class/template/smarty/plugins/function.eval.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.eval.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.eval.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: evaluate a template variable as a template<br>
> * @link
> http://smarty.php.net/manual/en/language.function.eval.php {eval}
> * (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param array
> * @param Smarty
> */
>
> Modified: plog/trunk/class/template/smarty/plugins/function.fetch.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.fetch.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.fetch.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: fetch file, web or ftp data and display results
> * @link
> http://smarty.php.net/manual/en/language.function.fetch.php {fetch}
> * (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param array
> * @param Smarty
> * @return string|null if the assign parameter is passed,
> Smarty assigns the
> @@ -26,9 +27,10 @@
> return;
> }
>
> + $content = '';
> if ($smarty->security &&
> !preg_match('!^(http|ftp)://!i', $params['file'])) {
> $_params = array('resource_type' => 'file',
> 'resource_name' => $params['file']);
> - require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.is_secure.php');
> + require_once(SMARTY_CORE_DIR . 'core.is_secure.php');
> if(!smarty_core_is_secure($_params, $smarty)) {
> $smarty->_trigger_fatal_error('[plugin] (secure
> mode) fetch \'' . $params['file'] . '\' is not allowed');
> return;
> @@ -63,9 +65,12 @@
> } else {
> $port = $uri_parts['port'];
> }
> - if(empty($uri_parts['user'])) {
> - $user = '';
> + if(!empty($uri_parts['user'])) {
> + $user = $uri_parts['user'];
> }
> + if(!empty($uri_parts['pass'])) {
> + $pass = $uri_parts['pass'];
> + }
> // loop through parameters, setup headers
> foreach($params as $param_key => $param_value) {
> switch($param_key) {
> @@ -171,7 +176,6 @@
> fputs($fp, "Authorization: BASIC
> ".base64_encode("$user:$pass")."\r\n");
> }
>
> - $content = '';
> fputs($fp, "\r\n");
> while(!feof($fp)) {
> $content .= fgets($fp,4096);
>
> Modified:
> plog/trunk/class/template/smarty/plugins/function.html_checkboxes.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.html_checkbo
> xes.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.html_checkbo
> xes.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -20,7 +20,8 @@
> * - options (optional) - associative array
> * - checked (optional) - array default not set
> * - separator (optional) - ie <br> or
> - * - output (optional) - without this one the
> buttons don't have names
> + * - output (optional) - the output next to
> each checkbox
> + * - assign (optional) - assign the output as
> an array to this variable
> * Examples:
> * <pre>
> * {html_checkboxes values=$ids output=$names}
> @@ -30,7 +31,7 @@
> * @link
> http://smarty.php.net/manual/en/language.function.html.checkbo
> xes.php {html_checkboxes}
> * (Smarty online manual)
> * @author Christopher Kvarme <christopher.kvarme at flashjab.com>
> - * @author credits to Monte Ohrt <monte at ispi.net>
> + * @author credits to Monte Ohrt <monte at ohrt dot com>
> * @version 1.0
> * @param array
> * @param Smarty
> @@ -81,6 +82,9 @@
> $options = (array)$_val;
> break;
>
> + case 'assign':
> + break;
> +
> default:
> if(!is_array($_val)) {
> $extra .= '
> '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
> @@ -95,23 +99,27 @@
> return ''; /* raise error here? */
>
> settype($selected, 'array');
> - $_html_result = '';
> + $_html_result = array();
>
> - if (is_array($options)) {
> + if (isset($options)) {
>
> foreach ($options as $_key=>$_val)
> - $_html_result .=
> smarty_function_html_checkboxes_output($name, $_key, $_val,
> $selected, $extra, $separator, $labels);
> + $_html_result[] =
> smarty_function_html_checkboxes_output($name, $_key, $_val,
> $selected, $extra, $separator, $labels);
>
>
> } else {
> foreach ($values as $_i=>$_key) {
> $_val = isset($output[$_i]) ? $output[$_i] : '';
> - $_html_result .=
> smarty_function_html_checkboxes_output($name, $_key, $_val,
> $selected, $extra, $separator, $labels);
> + $_html_result[] =
> smarty_function_html_checkboxes_output($name, $_key, $_val,
> $selected, $extra, $separator, $labels);
> }
>
> }
>
> - return $_html_result;
> + if(!empty($params['assign'])) {
> + $smarty->assign($params['assign'], $_html_result);
> + } else {
> + return implode("\n",$_html_result);
> + }
>
> }
>
> @@ -127,7 +135,7 @@
> }
> $_output .= $extra . ' />' . $output;
> if ($labels) $_output .= '</label>';
> - $_output .= $separator . "\n";
> + $_output .= $separator;
>
> return $_output;
> }
>
> Modified:
> plog/trunk/class/template/smarty/plugins/function.html_image.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.html_im
> age.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.html_im
> age.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -15,17 +15,17 @@
> * Purpose: format HTML tags for the image<br>
> * Input:<br>
> * - file = file (and path) of image (required)
> - * - border = border width (optional, default 0)
> * - height = image height (optional, default actual height)
> - * - image =image width (optional, default actual width)
> + * - width = image width (optional, default actual width)
> * - basedir = base directory for absolute paths, default
> * is environment variable DOCUMENT_ROOT
> + * - path_prefix = prefix for path output (optional,
> default empty)
> *
> - * Examples: {html_image file="images/masthead.gif"}
> - * Output: <img src="images/masthead.gif" border=0
> width=400 height=23>
> + * Examples: {html_image file="/images/masthead.gif"}
> + * Output: <img src="/images/masthead.gif" width=400 height=23>
> * @link
> http://smarty.php.net/manual/en/language.function.html.image.p
> hp {html_image}
> * (Smarty online manual)
> - * @author Monte Ohrt <monte at ispi.net>
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @author credits to Duda <duda at big.hu> - wrote first image function
> * in repository, helped with lots of functionality
> * @version 1.0
> @@ -40,21 +40,21 @@
>
> $alt = '';
> $file = '';
> - $border = 0;
> $height = '';
> $width = '';
> $extra = '';
> $prefix = '';
> $suffix = '';
> + $path_prefix = '';
> $server_vars = ($smarty->request_use_auto_globals) ?
> $_SERVER : $GLOBALS['HTTP_SERVER_VARS'];
> $basedir = isset($server_vars['DOCUMENT_ROOT']) ?
> $server_vars['DOCUMENT_ROOT'] : '';
> foreach($params as $_key => $_val) {
> switch($_key) {
> case 'file':
> - case 'border':
> case 'height':
> case 'width':
> case 'dpi':
> + case 'path_prefix':
> case 'basedir':
> $$_key = $_val;
> break;
> @@ -93,15 +93,9 @@
> } else {
> $_image_path = $file;
> }
> -
> +
> if(!isset($params['width']) || !isset($params['height'])) {
> - if ($smarty->security &&
> - ($_params = array('resource_type' => 'file',
> 'resource_name' => $_image_path)) &&
> - (require_once(SMARTY_DIR . 'core' .
> DIRECTORY_SEPARATOR . 'core.is_secure.php')) &&
> - (!smarty_core_is_secure($_params, $smarty)) ) {
> - $smarty->trigger_error("html_image: (secure)
> '$_image_path' not in secure directory", E_USER_NOTICE);
> -
> - } elseif (!$_image_data = @getimagesize($_image_path)) {
> + if(!$_image_data = @getimagesize($_image_path)) {
> if(!file_exists($_image_path)) {
> $smarty->trigger_error("html_image: unable
> to find '$_image_path'", E_USER_NOTICE);
> return;
> @@ -113,7 +107,13 @@
> return;
> }
> }
> -
> + if ($smarty->security &&
> + ($_params = array('resource_type' => 'file',
> 'resource_name' => $_image_path)) &&
> + (require_once(SMARTY_CORE_DIR . 'core.is_secure.php')) &&
> + (!smarty_core_is_secure($_params, $smarty)) ) {
> + $smarty->trigger_error("html_image: (secure)
> '$_image_path' not in secure directory", E_USER_NOTICE);
> + }
> +
> if(!isset($params['width'])) {
> $width = $_image_data[0];
> }
> @@ -134,7 +134,7 @@
> $height = round($height * $_resize);
> }
>
> - return $prefix . '<img src="'.$file.'" alt="'.$alt.'"
> border="'.$border.'" width="'.$width.'"
> height="'.$height.'"'.$extra.' />' . $suffix;
> + return $prefix . '<img src="'.$path_prefix.$file.'"
> alt="'.$alt.'" width="'.$width.'"
> height="'.$height.'"'.$extra.' />' . $suffix;
> }
>
> /* vim: set expandtab: */
>
> Modified:
> plog/trunk/class/template/smarty/plugins/function.html_options.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.html_opti
> ons.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.html_opti
> ons.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -21,6 +21,7 @@
> * the passed parameters
> * @link
> http://smarty.php.net/manual/en/language.function.html.options
> .php {html_image}
> * (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param array
> * @param Smarty
> * @return string
> @@ -72,14 +73,14 @@
>
> $_html_result = '';
>
> - if (is_array($options)) {
> + if (isset($options)) {
>
> foreach ($options as $_key=>$_val)
> $_html_result .=
> smarty_function_html_options_optoutput($_key, $_val, $selected);
>
> } else {
>
> - foreach ((array)$values as $_i=>$_key) {
> + foreach ($values as $_i=>$_key) {
> $_val = isset($output[$_i]) ? $output[$_i] : '';
> $_html_result .=
> smarty_function_html_options_optoutput($_key, $_val, $selected);
> }
>
> Modified:
> plog/trunk/class/template/smarty/plugins/function.html_radios.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.html_rad
> ios.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.html_rad
> ios.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -20,7 +20,8 @@
> * - options (optional) - associative array
> * - checked (optional) - array default not set
> * - separator (optional) - ie <br> or
> - * - output (optional) - without this one the
> buttons don't have names
> + * - output (optional) - the output next to
> each radio button
> + * - assign (optional) - assign the output as
> an array to this variable
> * Examples:
> * <pre>
> * {html_radios values=$ids output=$names}
> @@ -30,7 +31,7 @@
> * @link
> http://smarty.php.net/manual/en/language.function.html.radios.
> php {html_radios}
> * (Smarty online manual)
> * @author Christopher Kvarme <christopher.kvarme at flashjab.com>
> - * @author credits to Monte Ohrt <monte at ispi.net>
> + * @author credits to Monte Ohrt <monte at ohrt dot com>
> * @version 1.0
> * @param array
> * @param Smarty
> @@ -47,6 +48,7 @@
> $selected = null;
> $separator = '';
> $labels = true;
> + $label_ids = false;
> $output = null;
> $extra = '';
>
> @@ -67,6 +69,7 @@
> break;
>
> case 'labels':
> + case 'label_ids':
> $$_key = (bool)$_val;
> break;
>
> @@ -84,6 +87,8 @@
> $options = (array)$_val;
> break;
>
> + case 'assign':
> + break;
>
> default:
> if(!is_array($_val)) {
> @@ -98,39 +103,52 @@
> if (!isset($options) && !isset($values))
> return ''; /* raise error here? */
>
> - $_html_result = '';
> + $_html_result = array();
>
> - if (isset($options) && is_array($options)) {
> + if (isset($options)) {
>
> - foreach ((array)$options as $_key=>$_val)
> - $_html_result .=
> smarty_function_html_radios_output($name, $_key, $_val,
> $selected, $extra, $separator, $labels);
> + foreach ($options as $_key=>$_val)
> + $_html_result[] =
> smarty_function_html_radios_output($name, $_key, $_val,
> $selected, $extra, $separator, $labels, $label_ids);
>
> } else {
>
> - foreach ((array)$values as $_i=>$_key) {
> + foreach ($values as $_i=>$_key) {
> $_val = isset($output[$_i]) ? $output[$_i] : '';
> - $_html_result .=
> smarty_function_html_radios_output($name, $_key, $_val,
> $selected, $extra, $separator, $labels);
> + $_html_result[] =
> smarty_function_html_radios_output($name, $_key, $_val,
> $selected, $extra, $separator, $labels, $label_ids);
> }
>
> }
>
> - return $_html_result;
> + if(!empty($params['assign'])) {
> + $smarty->assign($params['assign'], $_html_result);
> + } else {
> + return implode("\n",$_html_result);
> + }
>
> }
>
> -function smarty_function_html_radios_output($name, $value,
> $output, $selected, $extra, $separator, $labels) {
> +function smarty_function_html_radios_output($name, $value,
> $output, $selected, $extra, $separator, $labels, $label_ids) {
> $_output = '';
> - if ($labels) $_output .= '<label>';
> - $_output .= '<input type="radio" name="'
> + if ($labels) {
> + if($label_ids) {
> + $_id =
> smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!
> ', '_', $name . '_' . $value));
> + $_output .= '<label for="' . $_id . '">';
> + } else {
> + $_output .= '<label>';
> + }
> + }
> + $_output .= '<input type="radio" name="'
> . smarty_function_escape_special_chars($name) . '" value="'
> . smarty_function_escape_special_chars($value) . '"';
>
> - if ($value==$selected) {
> + if ($labels && $label_ids) $_output .= ' id="' . $_id . '"';
> +
> + if ((string)$value==$selected) {
> $_output .= ' checked="checked"';
> }
> $_output .= $extra . ' />' . $output;
> if ($labels) $_output .= '</label>';
> - $_output .= $separator . "\n";
> + $_output .= $separator;
>
> return $_output;
> }
>
> Modified:
> plog/trunk/class/template/smarty/plugins/function.html_select_date.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.html_select_
> date.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.html_select_
> date.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -22,16 +22,20 @@
> * month values (Gary Loescher)
> * - 1.3.1 added support for choosing format for
> * day values (Marcus Bointon)
> + * - 1.3.2 suppport negative timestamps, force year
> + * dropdown to include given date unless
> explicitly set (Monte)
> * @link
> http://smarty.php.net/manual/en/language.function.html.select.
> date.php {html_select_date}
> * (Smarty online manual)
> - * @version 1.3.1
> - * @author Andrei Zmievski
> + * @version 1.3.2
> + * @author Andrei Zmievski
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param array
> * @param Smarty
> * @return string
> */
> function smarty_function_html_select_date($params, &$smarty)
> {
> + require_once
> $smarty->_get_plugin_filepath('shared','escape_special_chars');
> require_once
> $smarty->_get_plugin_filepath('shared','make_timestamp');
> require_once
> $smarty->_get_plugin_filepath('function','html_options');
> /* Default values. */
> @@ -76,6 +80,7 @@
> $day_empty = null;
> $month_empty = null;
> $year_empty = null;
> + $extra_attrs = '';
>
> foreach ($params as $_key=>$_value) {
> switch ($_key) {
> @@ -117,21 +122,28 @@
> break;
>
> default:
> - $smarty->trigger_error("[html_select_date]
> unknown parameter $_key", E_USER_WARNING);
> -
> + if(!is_array($_value)) {
> + $extra_attrs .= '
> '.$_key.'="'.smarty_function_escape_special_chars($_value).'"';
> + } else {
> +
> $smarty->trigger_error("html_select_date: extra attribute
> '$_key' cannot be an array", E_USER_NOTICE);
> + }
> + break;
> }
> }
>
> + if(preg_match('!^-\d+$!',$time)) {
> + // negative timestamp, use date()
> + $time = date('Y-m-d',$time);
> + }
> // If $time is not in format yyyy-mm-dd
> if (!preg_match('/^\d{0,4}-\d{0,2}-\d{0,2}$/', $time)) {
> - // then $time is empty or unix timestamp or mysql timestamp
> - // using smarty_make_timestamp to get an unix timestamp and
> + // use smarty_make_timestamp to get an unix timestamp and
> // strftime to make yyyy-mm-dd
> $time = strftime('%Y-%m-%d', smarty_make_timestamp($time));
> }
> // Now split this in pieces, which later can be used to
> set the select
> $time = explode("-", $time);
> -
> +
> // make syntax "+N" or "-N" work with start_year and end_year
> if (preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match)) {
> if ($match[1] == '+') {
> @@ -147,6 +159,16 @@
> $start_year = strftime('%Y') - $match[2];
> }
> }
> + if (strlen($time[0]) > 0) {
> + if ($start_year > $time[0] &&
> !isset($params['start_year'])) {
> + // force start year to include given date if not
> explicitly set
> + $start_year = $time[0];
> + }
> + if($end_year < $time[0] && !isset($params['end_year'])) {
> + // force end year to include given date if not
> explicitly set
> + $end_year = $time[0];
> + }
> + }
>
> $field_order = strtoupper($field_order);
>
> @@ -179,14 +201,13 @@
> if (null !== $all_extra){
> $month_result .= ' ' . $all_extra;
> }
> - $month_result .= '>'."\n";
> + $month_result .= $extra_attrs . '>'."\n";
>
> $month_result .=
> smarty_function_html_options(array('output' => $month_names,
>
> 'values' => $month_values,
> -
> 'selected' => $month_values[(int)$time[1]],
> +
> 'selected' => (int)$time[1] ? strftime($month_value_format,
> mktime(0, 0, 0, (int)$time[1], 1, 2000)) : '',
>
> 'print_result' => false),
> $smarty);
> -
> $month_result .= '</select>';
> }
>
> @@ -216,7 +237,7 @@
> if (null !== $day_extra){
> $day_result .= ' ' . $day_extra;
> }
> - $day_result .= '>'."\n";
> + $day_result .= $extra_attrs . '>'."\n";
> $day_result .=
> smarty_function_html_options(array('output' => $days,
>
> 'values' => $day_values,
>
> 'selected' => $time[2],
> @@ -239,11 +260,13 @@
> if (null !== $year_extra){
> $year_result .= ' ' . $year_extra;
> }
> - $year_result .= '>';
> + $year_result .= ' />';
> } else {
> $years = range((int)$start_year, (int)$end_year);
> if ($reverse_years) {
> rsort($years, SORT_NUMERIC);
> + } else {
> + sort($years, SORT_NUMERIC);
> }
> $yearvals = $years;
> if(isset($year_empty)) {
> @@ -260,7 +283,7 @@
> if (null !== $year_extra){
> $year_result .= ' ' . $year_extra;
> }
> - $year_result .= '>'."\n";
> + $year_result .= $extra_attrs . '>'."\n";
> $year_result .=
> smarty_function_html_options(array('output' => $years,
>
> 'values' => $yearvals,
>
> 'selected' => $time[0],
>
> Modified:
> plog/trunk/class/template/smarty/plugins/function.html_select_time.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.html_select_
> time.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.html_select_
> time.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,8 @@
> * Purpose: Prints the dropdowns for time selection
> * @link
> http://smarty.php.net/manual/en/language.function.html.select.
> time.php {html_select_time}
> * (Smarty online manual)
> + * @author Roberto Berto <roberto at berto.net>
> + * @credits Monte Ohrt <monte AT ohrt DOT com>
> * @param array
> * @param Smarty
> * @return string
>
> Modified:
> plog/trunk/class/template/smarty/plugins/function.html_table.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.html_ta
> ble.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.html_ta
> ble.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -33,7 +33,7 @@
> * {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
> * {table loop=$data cols=4 tr_attr=$colors}
> * </pre>
> - * @author Monte Ohrt <monte at ispi.net>
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @version 1.0
> * @link
> http://smarty.php.net/manual/en/language.function.html.table.p
> hp {html_table}
> * (Smarty online manual)
> @@ -73,6 +73,7 @@
> case 'trailpad':
> case 'hdir':
> case 'vdir':
> + case 'inner':
> $$_key = (string)$_value;
> break;
>
>
> Modified: plog/trunk/class/template/smarty/plugins/function.mailto.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.mailto.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.mailto.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -20,6 +20,7 @@
> * - encode = (optional) can be one of:
> * * none : no encoding (default)
> * * javascript : encode with javascript
> + * * javascript_charcode : encode with
> javascript charcode
> * * hex : encode with hexidecimal (no javascript)
> * - cc = (optional) address(es) to carbon copy
> * - bcc = (optional) address(es) to blind carbon copy
> @@ -40,7 +41,7 @@
> * @link
> http://smarty.php.net/manual/en/language.function.mailto.php {mailto}
> * (Smarty online manual)
> * @version 1.2
> - * @author Monte Ohrt <monte at ispi.net>
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @author credits to Jason Sweat (added cc, bcc and
> subject functionality)
> * @param array
> * @param Smarty
> @@ -48,7 +49,7 @@
> */
> function smarty_function_mailto($params, &$smarty)
> {
> - $extra = '';
> + $extra = '';
>
> if (empty($params['address'])) {
> $smarty->trigger_error("mailto: missing 'address'
> parameter");
> @@ -92,7 +93,7 @@
> $address .= $mail_parm_vals;
>
> $encode = (empty($params['encode'])) ? 'none' :
> $params['encode'];
> - if (!in_array($encode,array('javascript','hex','none')) ) {
> + if
> (!in_array($encode,array('javascript','javascript_charcode','h
> ex','none')) ) {
> $smarty->trigger_error("mailto: 'encode' parameter
> must be none, javascript or hex");
> return;
> }
> @@ -105,8 +106,27 @@
> $js_encode .= '%' . bin2hex($string[$x]);
> }
>
> - return '<script type="text/javascript"
> language="javascript">eval(unescape(\''.$js_encode.'\'))</script>';
> + return '<script
> type="text/javascript">eval(unescape(\''.$js_encode.'\'))</script>';
>
> + } elseif ($encode == 'javascript_charcode' ) {
> + $string = '<a href="mailto:'.$address.'"
> '.$extra.'>'.$text.'</a>';
> +
> + for($x = 0, $y = strlen($string); $x < $y; $x++ ) {
> + $ord[] = ord($string[$x]);
> + }
> +
> + $_ret = "<script type=\"text/javascript\"
> language=\"javascript\">\n";
> + $_ret .= "<!--\n";
> + $_ret .= "{document.write(String.fromCharCode(";
> + $_ret .= implode(',',$ord);
> + $_ret .= "))";
> + $_ret .= "}\n";
> + $_ret .= "//-->\n";
> + $_ret .= "</script>\n";
> +
> + return $_ret;
> +
> +
> } elseif ($encode == 'hex') {
>
> preg_match('!^(.*)(\?.*)$!',$address,$match);
> @@ -114,6 +134,7 @@
> $smarty->trigger_error("mailto: hex encoding
> does not work with extra attributes. Try javascript.");
> return;
> }
> + $address_encode = '';
> for ($x=0; $x < strlen($address); $x++) {
> if(preg_match('!\w!',$address[$x])) {
> $address_encode .= '%' . bin2hex($address[$x]);
> @@ -121,11 +142,13 @@
> $address_encode .= $address[$x];
> }
> }
> + $text_encode = '';
> for ($x=0; $x < strlen($text); $x++) {
> $text_encode .= '&#x' . bin2hex($text[$x]).';';
> }
>
> - return '<a href="mailto:'.$address_encode.'"
> '.$extra.'>'.$text_encode.'</a>';
> + $mailto = "mailto:";
> + return '<a href="'.$mailto.$address_encode.'"
> '.$extra.'>'.$text_encode.'</a>';
>
> } else {
> // no encoding
>
> Modified: plog/trunk/class/template/smarty/plugins/function.math.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.math.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.math.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: handle math computations in template<br>
> * @link
> http://smarty.php.net/manual/en/language.function.math.php {math}
> * (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param array
> * @param Smarty
> * @return string
> @@ -35,12 +36,13 @@
> }
>
> // match all vars in equation, make sure all are passed
> -
> preg_match_all("!\!(0x)([a-zA-Z][a-zA-Z0-9_]*)!",$equation, $match);
> +
> preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]+)!",
> $equation, $match);
> $allowed_funcs =
> array('int','abs','ceil','cos','exp','floor','log','log10',
>
> 'max','min','pi','pow','rand','round','sin','sqrt','srand','tan');
> - foreach($match[2] as $curr_var) {
> - if (!in_array($curr_var,array_keys($params)) &&
> !in_array($curr_var, $allowed_funcs)) {
> - $smarty->trigger_error("math: parameter
> $curr_var not passed as argument");
> +
> + foreach($match[1] as $curr_var) {
> + if ($curr_var && !in_array($curr_var,
> array_keys($params)) && !in_array($curr_var, $allowed_funcs)) {
> + $smarty->trigger_error("math: function call
> $curr_var not allowed");
> return;
> }
> }
> @@ -56,7 +58,7 @@
> $smarty->trigger_error("math: parameter
> $key: is not numeric");
> return;
> }
> - $equation = preg_replace("/\b$key\b/",$val, $equation);
> + $equation = preg_replace("/\b$key\b/", "
> \$params['$key'] ", $equation);
> }
> }
>
>
> Modified: plog/trunk/class/template/smarty/plugins/function.popup.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.popup.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.popup.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: make text pop up in windows via overlib
> * @link
> http://smarty.php.net/manual/en/language.function.popup.php {popup}
> * (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param array
> * @param Smarty
> * @return string
> @@ -25,7 +26,11 @@
> switch ($_key) {
> case 'text':
> case 'trigger':
> + case 'function':
> + case 'inarray':
> $$_key = (string)$_value;
> + if ($_key == 'function' || $_key == 'inarray')
> + $append .= ',' . strtoupper($_key) .
> ",'$_value'";
> break;
>
> case 'caption':
> @@ -42,6 +47,15 @@
> case 'textfont':
> case 'captionfont':
> case 'closefont':
> + case 'fgbackground':
> + case 'bgbackground':
> + case 'caparray':
> + case 'capicon':
> + case 'background':
> + case 'frame':
> + $append .= ',' . strtoupper($_key) . ",'$_value'";
> + break;
> +
> case 'textsize':
> case 'captionsize':
> case 'closesize':
> @@ -50,23 +64,15 @@
> case 'border':
> case 'offsetx':
> case 'offsety':
> - case 'fgbackground':
> - case 'bgbackground':
> - case 'inarray':
> - case 'caparray':
> - case 'capicon':
> case 'snapx':
> case 'snapy':
> case 'fixx':
> case 'fixy':
> - case 'background':
> case 'padx':
> case 'pady':
> - case 'frame':
> case 'timeout':
> case 'delay':
> - case 'function':
> - $append .= ',' . strtoupper($_key) . ",'$_value'";
> + $append .= ',' . strtoupper($_key) . ",$_value";
> break;
>
> case 'sticky':
> @@ -81,6 +87,9 @@
> case 'fullhtml':
> case 'hauto':
> case 'vauto':
> + case 'mouseoff':
> + case 'followmouse':
> + case 'closeclick':
> if ($_value) $append .= ',' . strtoupper($_key);
> break;
>
> @@ -97,8 +106,11 @@
> if (empty($trigger)) { $trigger = "onmouseover"; }
>
> $retval = $trigger . '="return
> overlib(\''.preg_replace(array("!'!","![\r\n]!"),array("\'",'\
> r'),$text).'\'';
> - $retval .= $append . ');" onmouseout="nd();"';
> + $retval .= $append . ');"';
> + if ($trigger == 'onmouseover')
> + $retval .= ' onmouseout="nd();"';
>
> +
> return $retval;
> }
>
>
> Modified:
> plog/trunk/class/template/smarty/plugins/function.popup_init.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/function.popup_i
> nit.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/function.popup_i
> nit.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: initialize overlib
> * @link
> http://smarty.php.net/manual/en/language.function.popup.init.p
> hp {popup_init}
> * (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param array
> * @param Smarty
> * @return string
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.capitalize.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.capital
> ize.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.capital
> ize.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,12 +14,30 @@
> * Purpose: capitalize words in the string
> * @link
> http://smarty.php.net/manual/en/language.modifiers.php#LANGUAG
> E.MODIFIER.CAPITALIZE
> * capitalize (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @return string
> */
> -function smarty_modifier_capitalize($string)
> +function smarty_modifier_capitalize($string, $uc_digits = false)
> {
> - return ucwords($string);
> + smarty_modifier_capitalize_ucfirst(null, $uc_digits);
> + return preg_replace_callback('!\b\w+\b!',
> 'smarty_modifier_capitalize_ucfirst', $string);
> }
>
> +function smarty_modifier_capitalize_ucfirst($string,
> $uc_digits = null)
> +{
> + static $_uc_digits = false;
> +
> + if(isset($uc_digits)) {
> + $_uc_digits = $uc_digits;
> + return;
> + }
> +
> + if(!preg_match('!\d!',$string[0]) || $_uc_digits)
> + return ucfirst($string[0]);
> + else
> + return $string[0];
> +}
> +
> +
> ?>
>
> Modified: plog/trunk/class/template/smarty/plugins/modifier.cat.php
> ===================================================================
> --- plog/trunk/class/template/smarty/plugins/modifier.cat.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++ plog/trunk/class/template/smarty/plugins/modifier.cat.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -17,7 +17,7 @@
> * Example: {$var|cat:"foo"}
> * @link
> http://smarty.php.net/manual/en/language.modifier.cat.php cat
> * (Smarty online manual)
> - * @author Monte Ohrt <monte at ispi.net>
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @version 1.0
> * @param string
> * @param string
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.count_characters.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.count_charac
> ters.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.count_charac
> ters.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: count the number of characters in a text
> * @link
> http://smarty.php.net/manual/en/language.modifier.count.characters.php
> * count_characters (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @param boolean include whitespace in the character count
> * @return integer
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.count_paragraphs.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.count_paragr
> aphs.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.count_paragr
> aphs.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: count the number of paragraphs in a text
> * @link
> http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php
> * count_paragraphs (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @return integer
> */
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.count_sentences.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.count_senten
> ces.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.count_senten
> ces.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: count the number of sentences in a text
> * @link
> http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php
> * count_sentences (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @return integer
> */
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.count_words.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.count_wo
> rds.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.count_wo
> rds.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: count the number of words in a text
> * @link
> http://smarty.php.net/manual/en/language.modifier.count.words.php
> * count_words (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @return integer
> */
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.date_format.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.date_for
> mat.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.date_for
> mat.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -21,6 +21,7 @@
> * - default_date: default date if $string is empty
> * @link
> http://smarty.php.net/manual/en/language.modifier.date.format.php
> * date_format (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @param string
> * @param string
> @@ -29,6 +30,11 @@
> */
> function smarty_modifier_date_format($string, $format="%b
> %e, %Y", $default_date=null)
> {
> + if (substr(PHP_OS,0,3) == 'WIN') {
> + $_win_from = array ('%e', '%T', '%D');
> + $_win_to = array ('%#d', '%H:%M:%S', '%m/%d/%y');
> + $format = str_replace($_win_from, $_win_to, $format);
> + }
> if($string != '') {
> return strftime($format, smarty_make_timestamp($string));
> } elseif (isset($default_date) && $default_date != '') {
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.debug_print_var.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.debug_print_
> var.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.debug_print_
> var.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: formats variable contents for display in the console
> * @link
> http://smarty.php.net/manual/en/language.modifier.debug.print.var.php
> * debug_print_var (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param array|object
> * @param integer
> * @param integer
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.default.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.default.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.default.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: designate default value for empty variables
> * @link
> http://smarty.php.net/manual/en/language.modifier.default.php
> * default (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @param string
> * @return string
>
> Modified: plog/trunk/class/template/smarty/plugins/modifier.escape.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.escape.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.escape.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,25 +14,26 @@
> * Purpose: Escape the string according to escapement type
> * @link http://smarty.php.net/manual/en/language.modifier.escape.php
> * escape (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @param html|htmlall|url|quotes|hex|hexentity|javascript
> * @return string
> */
> -function smarty_modifier_escape($string, $esc_type = 'html')
> +function smarty_modifier_escape($string, $esc_type = 'html',
> $char_set = 'ISO-8859-1')
> {
> switch ($esc_type) {
> case 'html':
> - return htmlspecialchars($string, ENT_QUOTES);
> + return htmlspecialchars($string, ENT_QUOTES, $char_set);
>
> case 'htmlall':
> - return htmlentities($string, ENT_QUOTES);
> + return htmlentities($string, ENT_QUOTES, $char_set);
>
> case 'url':
> - return urlencode($string);
> -
> - case 'raw':
> return rawurlencode($string);
>
> + case 'urlpathinfo':
> + return str_replace('%2F','/',rawurlencode($string));
> +
> case 'quotes':
> // escape unescaped single quotes
> return preg_replace("%(?<!\\\\)'%", "\\'", $string);
> @@ -52,9 +53,35 @@
> }
> return $return;
>
> + case 'decentity':
> + $return = '';
> + for ($x=0; $x < strlen($string); $x++) {
> + $return .= '&#' . ord($string[$x]) . ';';
> + }
> + return $return;
> +
> case 'javascript':
> - // escape quotes and backslashes and newlines
> - return strtr($string,
> array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n'));
> + // escape quotes and backslashes, newlines, etc.
> + return strtr($string,
> array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\
> n','</'=>'<\/'));
> +
> + case 'mail':
> + // safe way to display e-mail address on a web page
> + return str_replace(array('@', '.'),array(' [AT]
> ', ' [DOT] '), $string);
> +
> + case 'nonstd':
> + // escape non-standard chars, such as ms document quotes
> + $_res = '';
> + for($_i = 0, $_len = strlen($string); $_i <
> $_len; $_i++) {
> + $_ord = ord(substr($string, $_i, 1));
> + // non-standard char, escape it
> + if($_ord >= 126){
> + $_res .= '&#' . $_ord . ';';
> + }
> + else {
> + $_res .= substr($string, $_i, 1);
> + }
> + }
> + return $_res;
>
> default:
> return $string;
>
> Modified: plog/trunk/class/template/smarty/plugins/modifier.indent.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.indent.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.indent.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: indent lines of text
> * @link http://smarty.php.net/manual/en/language.modifier.indent.php
> * indent (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @param integer
> * @param string
>
> Modified: plog/trunk/class/template/smarty/plugins/modifier.lower.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.lower.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.lower.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: convert string to lowercase
> * @link http://smarty.php.net/manual/en/language.modifier.lower.php
> * lower (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @return string
> */
>
> Modified: plog/trunk/class/template/smarty/plugins/modifier.nl2br.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.nl2br.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.nl2br.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -21,7 +21,7 @@
> * @link http://smarty.php.net/manual/en/language.modifier.nl2br.php
> * nl2br (Smarty online manual)
> * @version 1.0
> - * @author Monte Ohrt <monte at ispi.net>
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @return string
> */
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.regex_replace.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.regex_repl
> ace.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.regex_repl
> ace.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: regular epxression search/replace
> * @link
> http://smarty.php.net/manual/en/language.modifier.regex.replace.php
> * regex_replace (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @param string|array
> * @param string|array
> @@ -21,6 +22,10 @@
> */
> function smarty_modifier_regex_replace($string, $search, $replace)
> {
> + if (preg_match('!\W(\w+)$!s', $search, $match) &&
> (strpos($match[1], 'e') !== false)) {
> + /* remove eval-modifier from $search */
> + $search = substr($search, 0, -strlen($match[1])) .
> str_replace('e', '', $match[1]);
> + }
> return preg_replace($search, $replace, $string);
> }
>
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.replace.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.replace.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.replace.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: simple search/replace
> * @link
> http://smarty.php.net/manual/en/language.modifier.replace.php
> * replace (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @param string
> * @param string
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.spacify.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.spacify.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.spacify.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: add spaces between characters in a string
> * @link
> http://smarty.php.net/manual/en/language.modifier.spacify.php
> * spacify (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @param string
> * @return string
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.string_format.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.string_for
> mat.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.string_for
> mat.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: format strings via sprintf
> * @link
> http://smarty.php.net/manual/en/language.modifier.string.format.php
> * string_format (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @param string
> * @return string
>
> Modified: plog/trunk/class/template/smarty/plugins/modifier.strip.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.strip.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.strip.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -17,7 +17,7 @@
> * Date: September 25th, 2002
> * @link http://smarty.php.net/manual/en/language.modifier.strip.php
> * strip (Smarty online manual)
> - * @author Monte Ohrt <monte at ispi.net>
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @version 1.0
> * @param string
> * @param string
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.strip_tags.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.strip_t
> ags.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.strip_t
> ags.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: strip html tags from text
> * @link
> http://smarty.php.net/manual/en/language.modifier.strip.tags.php
> * strip_tags (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @param boolean
> * @return string
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.truncate.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.trunc
> ate.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.trunc
> ate.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -13,29 +13,36 @@
> * Name: truncate<br>
> * Purpose: Truncate a string to a certain length if necessary,
> * optionally splitting in the middle of a word, and
> - * appending the $etc string.
> + * appending the $etc string or inserting $etc
> into the middle.
> * @link
> http://smarty.php.net/manual/en/language.modifier.truncate.php
> * truncate (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @param integer
> * @param string
> * @param boolean
> + * @param boolean
> * @return string
> */
> function smarty_modifier_truncate($string, $length = 80,
> $etc = '...',
> - $break_words = false)
> + $break_words = false,
> $middle = false)
> {
> if ($length == 0)
> return '';
>
> if (strlen($string) > $length) {
> $length -= strlen($etc);
> - if (!$break_words)
> + if (!$break_words && !$middle) {
> $string = preg_replace('/\s+?(\S+)?$/', '',
> substr($string, 0, $length+1));
> -
> - return substr($string, 0, $length).$etc;
> - } else
> + }
> + if(!$middle) {
> + return substr($string, 0, $length).$etc;
> + } else {
> + return substr($string, 0, $length/2) . $etc .
> substr($string, -$length/2);
> + }
> + } else {
> return $string;
> + }
> }
>
> /* vim: set expandtab: */
>
> Modified: plog/trunk/class/template/smarty/plugins/modifier.upper.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.upper.php
> 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.upper.php
> 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: convert string to uppercase
> * @link http://smarty.php.net/manual/en/language.modifier.upper.php
> * upper (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @return string
> */
>
> Modified:
> plog/trunk/class/template/smarty/plugins/modifier.wordwrap.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/modifier.wordw
> rap.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/modifier.wordw
> rap.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -14,6 +14,7 @@
> * Purpose: wrap a string of text at a given length
> * @link
> http://smarty.php.net/manual/en/language.modifier.wordwrap.php
> * wordwrap (Smarty online manual)
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @param integer
> * @param string
>
> Modified:
> plog/trunk/class/template/smarty/plugins/outputfilter.trimwhit
> espace.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/outputfilter.trimwhit
> espace.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/outputfilter.trimwhit
> espace.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -19,7 +19,7 @@
> * Install: Drop into the plugin directory, call
> *
> <code>$smarty->load_filter('output','trimwhitespace');</code>
> * from application.
> - * @author Monte Ohrt <monte at ispi.net>
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @author Contributions from Lars Noschinski
> <lars at usenet.noschinski.de>
> * @version 1.3
> * @param string
>
> Modified:
> plog/trunk/class/template/smarty/plugins/shared.escape_special
> _chars.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/shared.escape_special
> _chars.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/shared.escape_special
> _chars.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -12,6 +12,7 @@
> * Function: smarty_function_escape_special_chars<br>
> * Purpose: used by other smarty functions to escape
> * special chars except for already escaped ones
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @return string
> */
>
> Modified:
> plog/trunk/class/template/smarty/plugins/shared.make_timestamp.php
> ===================================================================
> ---
> plog/trunk/class/template/smarty/plugins/shared.make_timest
> amp.php 2006-01-31 22:34:25 UTC (rev 2878)
> +++
> plog/trunk/class/template/smarty/plugins/shared.make_timest
> amp.php 2006-02-01 15:27:58 UTC (rev 2879)
> @@ -10,32 +10,35 @@
> * Function: smarty_make_timestamp<br>
> * Purpose: used by other smarty functions to make a timestamp
> * from a string.
> + * @author Monte Ohrt <monte at ohrt dot com>
> * @param string
> * @return string
> */
> function smarty_make_timestamp($string)
> {
> if(empty($string)) {
> - $string = "now";
> - }
> - $time = strtotime($string);
> - if (is_numeric($time) && $time != -1)
> - return $time;
> + // use "now":
> + $time = time();
>
> - // is mysql timestamp format of YYYYMMDDHHMMSS?
> - if (preg_match('/^\d{14}$/', $string)) {
> - $time =
> mktime(substr($string,8,2),substr($string,10,2),substr($string,12,2),
> -
> substr($string,4,2),substr($string,6,2),substr($string,0,4));
> -
> - return $time;
> + } elseif (preg_match('/^\d{14}$/', $string)) {
> + // it is mysql timestamp format of YYYYMMDDHHMMSS?
>
> + $time = mktime(substr($string, 8, 2),substr($string,
> 10, 2),substr($string, 12, 2),
> + substr($string, 4, 2),substr($string,
> 6, 2),substr($string, 0, 4));
> +
> + } elseif (is_numeric($string)) {
> + // it is a numeric string, we handle it as timestamp
> + $time = (int)$string;
> +
> + } else {
> + // strtotime should handle it
> + $time = strtotime($string);
> + if ($time == -1 || $time === false) {
> + // strtotime() was not able to parse $string, use "now":
> + $time = time();
> + }
> }
> + return $time;
>
> - // couldn't recognize it, try to return a time
> - $time = (int) $string;
> - if ($time > 0)
> - return $time;
> - else
> - return time();
> }
>
> /* vim: set expandtab: */
>
> _______________________________________________
> pLog-svn mailing list
> pLog-svn at devel.lifetype.net
> http://devel.lifetype.net/mailman/listinfo/plog-svn
More information about the pLog-svn
mailing list