From c38950b11b2343ff6d9e0b3323fda62dcfdda4a4 Mon Sep 17 00:00:00 2001 From: thepurpleblob Date: Tue, 19 Apr 2005 09:52:16 +0000 Subject: [PATCH] Upgraded to latest version of Smarty 2.6.9 --- lib/smarty/Config_File.class.php | 6 +- lib/smarty/Smarty.class.php | 190 ++++----- lib/smarty/Smarty_Compiler.class.php | 391 +++++++++++------- lib/smarty/debug.tpl | 2 +- lib/smarty/plugins/block.textformat.php | 31 +- lib/smarty/plugins/compiler.assign.php | 9 +- .../plugins/function.assign_debug_info.php | 8 +- lib/smarty/plugins/function.config_load.php | 36 +- lib/smarty/plugins/function.counter.php | 4 +- lib/smarty/plugins/function.cycle.php | 18 +- lib/smarty/plugins/function.debug.php | 14 +- lib/smarty/plugins/function.eval.php | 6 +- lib/smarty/plugins/function.fetch.php | 15 +- .../plugins/function.html_checkboxes.php | 42 +- lib/smarty/plugins/function.html_image.php | 23 +- lib/smarty/plugins/function.html_options.php | 10 +- lib/smarty/plugins/function.html_radios.php | 54 ++- .../plugins/function.html_select_date.php | 34 +- .../plugins/function.html_select_time.php | 4 +- lib/smarty/plugins/function.html_table.php | 13 +- lib/smarty/plugins/function.mailto.php | 41 +- lib/smarty/plugins/function.math.php | 15 +- lib/smarty/plugins/function.popup.php | 34 +- lib/smarty/plugins/function.popup_init.php | 4 +- lib/smarty/plugins/modifier.capitalize.php | 25 +- lib/smarty/plugins/modifier.cat.php | 6 +- .../plugins/modifier.count_characters.php | 4 +- .../plugins/modifier.count_paragraphs.php | 4 +- .../plugins/modifier.count_sentences.php | 2 +- lib/smarty/plugins/modifier.count_words.php | 4 +- lib/smarty/plugins/modifier.date_format.php | 13 +- .../plugins/modifier.debug_print_var.php | 8 +- lib/smarty/plugins/modifier.default.php | 4 +- lib/smarty/plugins/modifier.escape.php | 36 +- lib/smarty/plugins/modifier.indent.php | 4 +- lib/smarty/plugins/modifier.lower.php | 4 +- lib/smarty/plugins/modifier.nl2br.php | 10 +- lib/smarty/plugins/modifier.regex_replace.php | 8 +- lib/smarty/plugins/modifier.replace.php | 4 +- lib/smarty/plugins/modifier.spacify.php | 4 +- lib/smarty/plugins/modifier.string_format.php | 4 +- lib/smarty/plugins/modifier.strip.php | 8 +- lib/smarty/plugins/modifier.strip_tags.php | 4 +- lib/smarty/plugins/modifier.truncate.php | 4 +- lib/smarty/plugins/modifier.upper.php | 4 +- lib/smarty/plugins/modifier.wordwrap.php | 4 +- .../plugins/outputfilter.trimwhitespace.php | 12 +- .../plugins/shared.escape_special_chars.php | 2 +- lib/smarty/plugins/shared.make_timestamp.php | 2 +- 49 files changed, 678 insertions(+), 510 deletions(-) diff --git a/lib/smarty/Config_File.class.php b/lib/smarty/Config_File.class.php index 0ba9636a0d7..247d78084ed 100644 --- a/lib/smarty/Config_File.class.php +++ b/lib/smarty/Config_File.class.php @@ -18,8 +18,8 @@ * 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.9 + * @copyright Copyright: 2001-2005 New Digital Group, Inc. * @author Andrei Zmievski * @access public * @package Smarty @@ -240,7 +240,7 @@ class Config_File { 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); diff --git a/lib/smarty/Smarty.class.php b/lib/smarty/Smarty.class.php index ff8e7e45777..18fe3c2bc6f 100644 --- a/lib/smarty/Smarty.class.php +++ b/lib/smarty/Smarty.class.php @@ -23,11 +23,11 @@ * smarty-general-subscribe@lists.php.net * * @link http://smarty.php.net/ - * @copyright 2001-2004 ispi of Lincoln, Inc. - * @author Monte Ohrt + * @copyright 2001-2005 New Digital Group, Inc. + * @author Monte Ohrt * @author Andrei Zmievski * @package Smarty - * @version 2.6.2 + * @version 2.6.9 */ /* $Id$ */ @@ -49,6 +49,10 @@ if (!defined('SMARTY_DIR')) { 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); @@ -228,11 +232,11 @@ class Smarty '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 ); /** @@ -264,7 +268,7 @@ class Smarty * * @var string */ - var $request_vars_order = "EGPCS"; + var $request_vars_order = 'EGPCS'; /** * Indicates wether $HTTP_*_VARS[] (request_use_auto_globals=false) @@ -399,13 +403,6 @@ class Smarty * There should be no need to touch anything below this line. * @access private */ - /** - * error messages. true/false - * - * @var boolean - */ - var $_error_msg = false; - /** * where assigned template vars are kept * @@ -467,7 +464,7 @@ class Smarty * * @var string */ - var $_version = '2.6.2'; + var $_version = '2.6.9'; /** * current template inclusion depth @@ -917,7 +914,7 @@ class Smarty 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; @@ -944,10 +941,10 @@ class Smarty 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, @@ -957,7 +954,7 @@ class Smarty '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); } @@ -972,18 +969,7 @@ class Smarty */ 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); } @@ -1008,7 +994,7 @@ class Smarty '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); } @@ -1042,7 +1028,7 @@ class Smarty '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); } @@ -1146,15 +1132,14 @@ class Smarty $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, @@ -1179,20 +1164,20 @@ class Smarty '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); } @@ -1202,9 +1187,9 @@ class Smarty { // 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) { @@ -1215,12 +1200,12 @@ class Smarty && !$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 { @@ -1239,7 +1224,7 @@ class Smarty } else { $this->_cache_info['template'][$resource_name] = true; if ($this->cache_modified_check && $display) { - header("Last-Modified: ".gmdate('D, d M Y H:i:s', time()).' GMT'); + header('Last-Modified: '.gmdate('D, d M Y H:i:s', time()).' GMT'); } } } @@ -1285,9 +1270,9 @@ class Smarty '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) { @@ -1306,9 +1291,9 @@ class Smarty 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); @@ -1374,7 +1359,7 @@ class Smarty 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); } @@ -1427,23 +1412,21 @@ class Smarty } $_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_include_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_include_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; } @@ -1483,6 +1466,7 @@ class Smarty $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; @@ -1491,7 +1475,9 @@ class Smarty $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; @@ -1546,6 +1532,8 @@ class Smarty $_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']; @@ -1596,7 +1584,7 @@ class Smarty $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'); @@ -1641,16 +1629,10 @@ class Smarty } 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; @@ -1658,17 +1640,20 @@ class Smarty } // 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); } @@ -1715,47 +1700,20 @@ class Smarty /** - * 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 (!($fd = @fopen($filename, 'r'))) { + if ( file_exists($filename) && ($fd = @fopen($filename, 'rb')) ) { + $contents = ($size = filesize($filename)) ? fread($fd, $size) : ''; + 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; } /** @@ -1771,16 +1729,7 @@ class Smarty function _get_auto_filename($auto_base, $auto_source = null, $auto_id = null) { $_compile_dir_sep = $this->use_sub_dirs ? 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; - } + $_return = $auto_base . DIRECTORY_SEPARATOR; if(isset($auto_id)) { // make auto_id safe for directory names @@ -1792,11 +1741,12 @@ class Smarty 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; @@ -1888,7 +1838,7 @@ class Smarty { 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'], @@ -1919,7 +1869,7 @@ class Smarty 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; } diff --git a/lib/smarty/Smarty_Compiler.class.php b/lib/smarty/Smarty_Compiler.class.php index 597c86b8558..aba1fb65f32 100644 --- a/lib/smarty/Smarty_Compiler.class.php +++ b/lib/smarty/Smarty_Compiler.class.php @@ -19,10 +19,10 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * @link http://smarty.php.net/ - * @author Monte Ohrt + * @author Monte Ohrt * @author Andrei Zmievski - * @version 2.6.2 - * @copyright 2001-2004 ispi of Lincoln, Inc. + * @version 2.6.9 + * @copyright 2001-2005 New Digital Group, Inc. * @package Smarty */ @@ -49,7 +49,9 @@ class Smarty_Compiler extends Smarty { 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 @@ class Smarty_Compiler extends Smarty { // [$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 @@ class Smarty_Compiler extends Smarty { // $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 @@ class Smarty_Compiler extends Smarty { // "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 @@ class Smarty_Compiler extends Smarty { // $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 @@ class Smarty_Compiler extends Smarty { // |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 @@ class Smarty_Compiler extends Smarty { // "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 @@ class Smarty_Compiler extends Smarty { $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 @@ class Smarty_Compiler extends Smarty { } /* 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 @@ class Smarty_Compiler extends Smarty { , $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 @@ class Smarty_Compiler extends Smarty { $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', ''."\n", $sp_match[1][$curr_sp]); + $sp_match[1][$curr_sp] = preg_replace('~(<\?(?!php|=|$))~i', ''."\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,29 +318,48 @@ class Smarty_Compiler extends Smarty { 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] = ""\'", "\\"=>"\\\\")) . "'; ?>"; + 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" )) { $compiled_content = substr($compiled_content, 0, -1); @@ -337,7 +370,7 @@ class Smarty_Compiler extends Smarty { } // 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 @@ class Smarty_Compiler extends Smarty { $_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 = "\n"; + $plugins_code = "\n"; $template_header .= $plugins_code; $this->_plugin_info = array(); $this->_plugins_code = $plugins_code; } if ($this->_init_smarty_vars) { - $template_header .= "\n"; + $template_header .= "\n"; $this->_init_smarty_vars = false; } @@ -394,31 +427,27 @@ class Smarty_Compiler extends Smarty { /* Matched comment. */ if ($template_tag{0} == '*' && $template_tag{strlen($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 "assign('" . $this->_dequote($_tag_attrs['assign']) . "', $_return ); ?>\n"; - } else { - return "" . $this->_additional_newline; - } + $_return = $this->_parse_var_props($tag_command . $tag_modifier); + 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 @@ class Smarty_Compiler extends Smarty { 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 ''; @@ -444,7 +473,7 @@ class Smarty_Compiler extends Smarty { 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,14 +517,14 @@ class Smarty_Compiler extends Smarty { case 'foreachelse': $this->_push_tag('foreachelse'); - return ""; + return ""; case '/foreach': $_open_tag = $this->_pop_tag('foreach'); if ($_open_tag == 'foreachelse') - return ""; + return ""; else - return ""; + return ""; break; case 'strip': @@ -504,13 +533,13 @@ class Smarty_Compiler extends Smarty { $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 ''; @@ -702,8 +731,8 @@ class Smarty_Compiler extends Smarty { $output .= $this->_compile_plugin_call('block', $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][1], null, $this, $_block_repeat=true);'; $output .= 'while ($_block_repeat) { ob_start(); ?>'; } else { - $output = '_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 = '_compile_plugin_call('block', $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][1], $_block_content, $this, $_block_repeat=false)'; if ($tag_modifier != '') { $this->_parse_modifiers($_out_tag_text, $tag_modifier); } @@ -850,8 +879,8 @@ class Smarty_Compiler extends Smarty { $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_stack[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 = "\$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], \$_obj_block_content, \$this, \$_block_repeat=false)"; $postfix = "} array_pop(\$this->_tag_stack);"; } } else { @@ -912,7 +941,7 @@ class Smarty_Compiler extends Smarty { $_params = "array('args' => array(".implode(', ', (array)$arg_list)."))"; - return "" . $this->_additional_newline; + return "" . $this->_additional_newline; } /** @@ -996,7 +1025,7 @@ class Smarty_Compiler extends Smarty { $_params = "array('smarty_file' => " . $attrs['file'] . ", 'smarty_assign' => '$assign_var', 'smarty_once' => $once_var, 'smarty_include_vars' => array(".implode(',', $arg_list)."))"; - return "" . $this->_additional_newline; + return "" . $this->_additional_newline; } @@ -1017,7 +1046,7 @@ class Smarty_Compiler extends Smarty { $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 +1146,45 @@ class Smarty_Compiler extends Smarty { $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__); + } + $item = $this->_dequote($attrs['item']); + if (!preg_match('~^\w+$~', $item)) { + return $this->_syntax_error("'foreach: item' must be a variable name (literal string)", E_USER_ERROR, __FILE__, __LINE__); } - $from = $attrs['from']; - $item = $this->_dequote($attrs['item']); - if (isset($attrs['name'])) + 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 = '_foreach[$name])) unset(\$this->_foreach[$name]);\n"; $foreach_props = "\$this->_foreach[$name]"; - } - - $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($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"; + $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,13 +1240,13 @@ class Smarty_Compiler extends Smarty { { /* 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]; @@ -1342,13 +1366,16 @@ class Smarty_Compiler extends Smarty { 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) && 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 +1499,10 @@ class Smarty_Compiler extends Smarty { { /* 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 +1517,7 @@ class Smarty_Compiler extends Smarty { 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 +1538,15 @@ class Smarty_Compiler extends Smarty { 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,38 +1598,46 @@ class Smarty_Compiler extends Smarty { { $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)) { - // single quoted text - preg_match('!^(' . $this->_si_qstr_regexp . ')('. $this->_mod_regexp . '*)$!', $val, $match); + 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->_cvar_regexp . '(?:' . $this->_mod_regexp . '*)$!', $val)) { + 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); + if($match[2] != '') { + $this->_parse_modifiers($match[1], $match[2]); + return $match[1]; + } + } + 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); } @@ -1622,19 +1657,19 @@ class Smarty_Compiler extends Smarty { function _expand_quoted_text($var_expr) { // if contains unescaped $, expand it - if(preg_match_all('%(?:\`(?_dvar_guts_regexp . '\`)|(?:(?_dvar_guts_regexp . '(?:' . $this->_obj_ext_regexp . ')*\`)|(?:(?_parse_var(str_replace('`','',$_var)) . ')."', $var_expr); } - $_return = preg_replace('%\.""|(?_dvar_math_regexp.'|'.$this->_qstr_regexp.')!', $var_expr, -1, PREG_SPLIT_DELIM_CAPTURE); + $_math_vars = preg_split('~('.$this->_dvar_math_regexp.'|'.$this->_qstr_regexp.')~', $var_expr, -1, PREG_SPLIT_DELIM_CAPTURE); if(count($_math_vars) > 1) { $_first_var = ""; @@ -1660,7 +1695,7 @@ class Smarty_Compiler extends Smarty { 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 +1709,13 @@ class Smarty_Compiler extends Smarty { $_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; @@ -1702,11 +1727,12 @@ class Smarty_Compiler extends Smarty { $_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); @@ -1791,13 +1817,14 @@ class Smarty_Compiler extends Smarty { */ 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 +1880,7 @@ class Smarty_Compiler extends Smarty { */ 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,7 +1891,7 @@ class Smarty_Compiler extends Smarty { 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} == '@') { @@ -1944,7 +1971,7 @@ class Smarty_Compiler extends Smarty { /* 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 ($_index{0} != '.' && $_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 +1983,41 @@ class Smarty_Compiler extends Smarty { 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 +2071,18 @@ class Smarty_Compiler extends Smarty { 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; @@ -2027,6 +2091,14 @@ class Smarty_Compiler extends Smarty { $_max_index = 3; break; + case 'ldelim': + $compiled_ref = "'$this->left_delimiter'"; + break; + + case 'rdelim': + $compiled_ref = "'$this->right_delimiter'"; + break; + default: $this->_syntax_error('$smarty.' . $_ref . ' is an unknown reference', E_USER_ERROR, __FILE__, __LINE__); break; @@ -2081,7 +2153,7 @@ class Smarty_Compiler extends Smarty { 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); } } @@ -2091,7 +2163,7 @@ class Smarty_Compiler extends Smarty { 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); } } @@ -2107,7 +2179,7 @@ class Smarty_Compiler extends Smarty { */ function _quote_replace($string) { - return preg_replace('![\\$]\d!', '\\\\\\0', $string); + return strtr($string, array('\\' => '\\\\', '$' => '\\$')); } /** @@ -2135,7 +2207,7 @@ class Smarty_Compiler extends Smarty { 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; @@ -2152,7 +2224,7 @@ class Smarty_Compiler extends Smarty { $_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++) . '}\';}'; } @@ -2160,7 +2232,7 @@ class Smarty_Compiler extends Smarty { /** * 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) { @@ -2170,8 +2242,8 @@ class Smarty_Compiler extends Smarty { /** * 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) { @@ -2192,6 +2264,13 @@ class Smarty_Compiler extends Smarty { $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", diff --git a/lib/smarty/debug.tpl b/lib/smarty/debug.tpl index 01265fb445c..7f1c9d42587 100644 --- a/lib/smarty/debug.tpl +++ b/lib/smarty/debug.tpl @@ -36,7 +36,7 @@ var title = 'Console_' + self.name; {rdelim} _smarty_console = window.open("",title.value,"width=680,height=600,resizable,scrollbars=yes"); - _smarty_console.document.write("Smarty Debug Console_"+self.name+""); + _smarty_console.document.write("Smarty Debug Console_"+self.name+""); _smarty_console.document.write(""); _smarty_console.document.write(""); _smarty_console.document.write(""); diff --git a/lib/smarty/plugins/block.textformat.php b/lib/smarty/plugins/block.textformat.php index 3e7ce0c4746..aaebab2f512 100644 --- a/lib/smarty/plugins/block.textformat.php +++ b/lib/smarty/plugins/block.textformat.php @@ -8,10 +8,10 @@ /** * Smarty {textformat}{/textformat} block plugin * - * Type: block function
- * Name: textformat
+ * Type: block function
+ * Name: textformat
* Purpose: format text a certain way with preset styles - * or custom wrap/indent settings
+ * or custom wrap/indent settings
* @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat} * (Smarty online manual) * @param array @@ -71,33 +71,30 @@ function smarty_block_textformat($params, $content, &$smarty) } // 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); + + return $assign ? $smarty->assign($assign, $_output) : $_output; - if ($assign) { - $smarty->assign($assign,$output); - } else { - return $output; - } } /* vim: set expandtab: */ diff --git a/lib/smarty/plugins/compiler.assign.php b/lib/smarty/plugins/compiler.assign.php index bc8c58a3962..2e020177962 100644 --- a/lib/smarty/plugins/compiler.assign.php +++ b/lib/smarty/plugins/compiler.assign.php @@ -1,10 +1,15 @@ - * Name: assign
+ * Type: compiler function
+ * Name: assign
* 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) diff --git a/lib/smarty/plugins/function.assign_debug_info.php b/lib/smarty/plugins/function.assign_debug_info.php index a2061a19eeb..8015624b1f7 100644 --- a/lib/smarty/plugins/function.assign_debug_info.php +++ b/lib/smarty/plugins/function.assign_debug_info.php @@ -8,9 +8,9 @@ /** * Smarty {assign_debug_info} function plugin * - * Type: function
- * Name: assign_debug_info
- * Purpose: assign debug info to the template
+ * Type: function
+ * Name: assign_debug_info
+ * Purpose: assign debug info to the template
* @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 +24,7 @@ function smarty_function_assign_debug_info($params, &$smarty) 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; diff --git a/lib/smarty/plugins/function.config_load.php b/lib/smarty/plugins/function.config_load.php index faff9e52c87..db7f8f6b9b4 100644 --- a/lib/smarty/plugins/function.config_load.php +++ b/lib/smarty/plugins/function.config_load.php @@ -8,8 +8,8 @@ /** * Smarty {config_load} function plugin * - * Type: function
- * Name: config_load
+ * Type: function
+ * Name: config_load
* Purpose: load config file vars * @link http://smarty.php.net/manual/en/language.function.config.load.php {config_load} * (Smarty online manual) @@ -26,7 +26,7 @@ function smarty_function_config_load($params, &$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'); $_debug_start_time = smarty_core_get_microtime($_params, $smarty); } @@ -53,7 +53,9 @@ function smarty_function_config_load($params, &$smarty) } } - $_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 +63,19 @@ function smarty_function_config_load($params, &$smarty) 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 +85,10 @@ function smarty_function_config_load($params, &$smarty) $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 +101,7 @@ function smarty_function_config_load($params, &$smarty) $_output = ''\\\'', '\\'=>'\\\\')) . '\'); ?>'; } $_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 +126,7 @@ function smarty_function_config_load($params, &$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' => 'config', 'filename' => $_file.' ['.$_section.'] '.$_scope, 'depth' => $smarty->_inclusion_depth, diff --git a/lib/smarty/plugins/function.counter.php b/lib/smarty/plugins/function.counter.php index 03c9ac501f9..cfe5dd886f9 100644 --- a/lib/smarty/plugins/function.counter.php +++ b/lib/smarty/plugins/function.counter.php @@ -9,8 +9,8 @@ /** * Smarty {counter} function plugin * - * Type: function
- * Name: counter
+ * Type: function
+ * Name: counter
* Purpose: print out a counter value * @link http://smarty.php.net/manual/en/language.function.counter.php {counter} * (Smarty online manual) diff --git a/lib/smarty/plugins/function.cycle.php b/lib/smarty/plugins/function.cycle.php index f89654978ec..fe78bb87da0 100644 --- a/lib/smarty/plugins/function.cycle.php +++ b/lib/smarty/plugins/function.cycle.php @@ -8,10 +8,10 @@ /** * Smarty {cycle} function plugin * - * Type: function
- * Name: cycle
- * Date: May 3, 2002
- * Purpose: cycle through given values
+ * Type: function
+ * Name: cycle
+ * Date: May 3, 2002
+ * Purpose: cycle through given values
* Input: * - name = name of cycle (optional) * - values = comma separated list of values to cycle, @@ -23,8 +23,8 @@ * - delimiter = the value delimiter, default is "," * - assign = boolean, assigns to template var instead of * printed. - * - * Examples:
+ * + * Examples:
*
  * {cycle values="#eeeeee,#d0d0d0d"}
  * {cycle name=row values="one,two,three" reset=true}
@@ -32,7 +32,7 @@
  * 
* @link http://smarty.php.net/manual/en/language.function.cycle.php {cycle} * (Smarty online manual) - * @author Monte Ohrt + * @author Monte Ohrt * @author credit to Mark Priatel * @author credit to Gerard * @author credit to Jason Sweat @@ -66,7 +66,7 @@ function smarty_function_cycle($params, &$smarty) $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 @@ function smarty_function_cycle($params, &$smarty) 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']++; } diff --git a/lib/smarty/plugins/function.debug.php b/lib/smarty/plugins/function.debug.php index fc16eb48e1f..43452307bcb 100644 --- a/lib/smarty/plugins/function.debug.php +++ b/lib/smarty/plugins/function.debug.php @@ -9,13 +9,13 @@ /** * Smarty {debug} function plugin * - * Type: function
- * Name: debug
- * Date: July 1, 2002
+ * Type: function
+ * Name: debug
+ * Date: July 1, 2002
* Purpose: popup debug window * @link http://smarty.php.net/manual/en/language.function.debug.php {debug} * (Smarty online manual) - * @author Monte Ohrt + * @author Monte Ohrt * @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); } diff --git a/lib/smarty/plugins/function.eval.php b/lib/smarty/plugins/function.eval.php index b6c488a8718..3a4b8b2b8c4 100644 --- a/lib/smarty/plugins/function.eval.php +++ b/lib/smarty/plugins/function.eval.php @@ -9,9 +9,9 @@ /** * Smarty {eval} function plugin * - * Type: function
- * Name: eval
- * Purpose: evaluate a template variable as a template
+ * Type: function
+ * Name: eval
+ * Purpose: evaluate a template variable as a template
* @link http://smarty.php.net/manual/en/language.function.eval.php {eval} * (Smarty online manual) * @param array diff --git a/lib/smarty/plugins/function.fetch.php b/lib/smarty/plugins/function.fetch.php index 49134a67cfa..f5a6987a905 100644 --- a/lib/smarty/plugins/function.fetch.php +++ b/lib/smarty/plugins/function.fetch.php @@ -9,8 +9,8 @@ /** * Smarty {fetch} plugin * - * Type: function
- * Name: fetch
+ * Type: function
+ * Name: fetch
* 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) @@ -26,9 +26,10 @@ function smarty_function_fetch($params, &$smarty) 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,8 +64,11 @@ function smarty_function_fetch($params, &$smarty) } 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) { @@ -171,7 +175,6 @@ function smarty_function_fetch($params, &$smarty) fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n"); } - $content = ''; fputs($fp, "\r\n"); while(!feof($fp)) { $content .= fgets($fp,4096); diff --git a/lib/smarty/plugins/function.html_checkboxes.php b/lib/smarty/plugins/function.html_checkboxes.php index 25cef84c54f..ed8ad7f33db 100644 --- a/lib/smarty/plugins/function.html_checkboxes.php +++ b/lib/smarty/plugins/function.html_checkboxes.php @@ -9,28 +9,29 @@ /** * Smarty {html_checkboxes} function plugin * - * File: function.html_checkboxes.php
- * Type: function
- * Name: html_checkboxes
- * Date: 24.Feb.2003
- * Purpose: Prints out a list of checkbox input types
- * Input:
+ * File: function.html_checkboxes.php
+ * Type: function
+ * Name: html_checkboxes
+ * Date: 24.Feb.2003
+ * Purpose: Prints out a list of checkbox input types
+ * Input:
* - name (optional) - string default "checkbox" * - values (required) - array * - options (optional) - associative array * - checked (optional) - array default not set - * - separator (optional) - ie
or   - * - output (optional) - without this one the buttons don't have names + * - separator (optional) - ie
or   + * - output (optional) - the output next to each checkbox + * - assign (optional) - assign the output as an array to this variable * Examples: *
  * {html_checkboxes values=$ids output=$names}
- * {html_checkboxes values=$ids name='box' separator='
' output=$names} - * {html_checkboxes values=$ids checked=$checked separator='
' output=$names} + * {html_checkboxes values=$ids name='box' separator='
' output=$names} + * {html_checkboxes values=$ids checked=$checked separator='
' output=$names} *
* @link http://smarty.php.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} * (Smarty online manual) * @author Christopher Kvarme - * @author credits to Monte Ohrt + * @author credits to Monte Ohrt * @version 1.0 * @param array * @param Smarty @@ -81,6 +82,9 @@ function smarty_function_html_checkboxes($params, &$smarty) $options = (array)$_val; break; + case 'assign': + break; + default: if(!is_array($_val)) { $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; @@ -95,23 +99,27 @@ function smarty_function_html_checkboxes($params, &$smarty) 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 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte } $_output .= $extra . ' />' . $output; if ($labels) $_output .= ''; - $_output .= $separator . "\n"; + $_output .= $separator; return $_output; } diff --git a/lib/smarty/plugins/function.html_image.php b/lib/smarty/plugins/function.html_image.php index d14ecdbd94a..c62b0fea691 100644 --- a/lib/smarty/plugins/function.html_image.php +++ b/lib/smarty/plugins/function.html_image.php @@ -9,23 +9,22 @@ /** * Smarty {html_image} function plugin * - * Type: function
- * Name: html_image
- * Date: Feb 24, 2003
- * Purpose: format HTML tags for the image
- * Input:
+ * Type: function
+ * Name: html_image
+ * Date: Feb 24, 2003
+ * Purpose: format HTML tags for the image
+ * Input:
* - 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 * * Examples: {html_image file="images/masthead.gif"} - * Output: + * Output: * @link http://smarty.php.net/manual/en/language.function.html.image.php {html_image} * (Smarty online manual) - * @author Monte Ohrt + * @author Monte Ohrt * @author credits to Duda - wrote first image function * in repository, helped with lots of functionality * @version 1.0 @@ -40,7 +39,6 @@ function smarty_function_html_image($params, &$smarty) $alt = ''; $file = ''; - $border = 0; $height = ''; $width = ''; $extra = ''; @@ -51,7 +49,6 @@ function smarty_function_html_image($params, &$smarty) foreach($params as $_key => $_val) { switch($_key) { case 'file': - case 'border': case 'height': case 'width': case 'dpi': @@ -97,7 +94,7 @@ function smarty_function_html_image($params, &$smarty) 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')) && + (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); @@ -134,7 +131,7 @@ function smarty_function_html_image($params, &$smarty) $height = round($height * $_resize); } - return $prefix . ''.$alt.'' . $suffix; + return $prefix . ''.$alt.'' . $suffix; } /* vim: set expandtab: */ diff --git a/lib/smarty/plugins/function.html_options.php b/lib/smarty/plugins/function.html_options.php index 6ff0622737b..ae864f7327c 100644 --- a/lib/smarty/plugins/function.html_options.php +++ b/lib/smarty/plugins/function.html_options.php @@ -9,9 +9,9 @@ /** * Smarty {html_options} function plugin * - * Type: function
- * Name: html_options
- * Input:
+ * Type: function
+ * Name: html_options
+ * Input:
* - name (optional) - string default "select" * - values (required if no options supplied) - array * - options (required if no values supplied) - associative array @@ -72,14 +72,14 @@ function smarty_function_html_options($params, &$smarty) $_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); } diff --git a/lib/smarty/plugins/function.html_radios.php b/lib/smarty/plugins/function.html_radios.php index e19fad1dcc8..dc7baee84fe 100644 --- a/lib/smarty/plugins/function.html_radios.php +++ b/lib/smarty/plugins/function.html_radios.php @@ -9,28 +9,29 @@ /** * Smarty {html_radios} function plugin * - * File: function.html_radios.php
- * Type: function
- * Name: html_radios
- * Date: 24.Feb.2003
- * Purpose: Prints out a list of radio input types
- * Input:
+ * File: function.html_radios.php
+ * Type: function
+ * Name: html_radios
+ * Date: 24.Feb.2003
+ * Purpose: Prints out a list of radio input types
+ * Input:
* - name (optional) - string default "radio" * - values (required) - array * - options (optional) - associative array * - checked (optional) - array default not set - * - separator (optional) - ie
or   - * - output (optional) - without this one the buttons don't have names + * - separator (optional) - ie
or   + * - output (optional) - the output next to each radio button + * - assign (optional) - assign the output as an array to this variable * Examples: *
  * {html_radios values=$ids output=$names}
- * {html_radios values=$ids name='box' separator='
' output=$names} - * {html_radios values=$ids checked=$checked separator='
' output=$names} + * {html_radios values=$ids name='box' separator='
' output=$names} + * {html_radios values=$ids checked=$checked separator='
' output=$names} *
* @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios} * (Smarty online manual) * @author Christopher Kvarme - * @author credits to Monte Ohrt + * @author credits to Monte Ohrt * @version 1.0 * @param array * @param Smarty @@ -84,6 +85,8 @@ function smarty_function_html_radios($params, &$smarty) $options = (array)$_val; break; + case 'assign': + break; default: if(!is_array($_val)) { @@ -98,39 +101,48 @@ function smarty_function_html_radios($params, &$smarty) 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); } 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); } } - 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) { $_output = ''; - if ($labels) $_output .= ''; - $_output .= $separator . "\n"; + $_output .= $separator; return $_output; } diff --git a/lib/smarty/plugins/function.html_select_date.php b/lib/smarty/plugins/function.html_select_date.php index e15f599bbab..fc2d449a8e1 100644 --- a/lib/smarty/plugins/function.html_select_date.php +++ b/lib/smarty/plugins/function.html_select_date.php @@ -8,11 +8,11 @@ /** * Smarty {html_select_date} plugin * - * Type: function
- * Name: html_select_date
+ * Type: function
+ * Name: html_select_date
* Purpose: Prints the dropdowns for date selection. * - * ChangeLog:
+ * ChangeLog:
* - 1.0 initial release * - 1.1 added support for +/- N syntax for begin * and end year values. (Monte) @@ -22,9 +22,11 @@ * 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 + * @version 1.3.2 * @author Andrei Zmievski * @param array * @param Smarty @@ -122,16 +124,19 @@ function smarty_function_html_select_date($params, &$smarty) } } + 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 +152,16 @@ function smarty_function_html_select_date($params, &$smarty) $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); @@ -183,10 +198,9 @@ function smarty_function_html_select_date($params, &$smarty) $month_result .= smarty_function_html_options(array('output' => $month_names, 'values' => $month_values, - 'selected' => $month_values[(int)$time[1]], + 'selected' => $a=$time[1] ? strftime($month_value_format, mktime(0, 0, 0, (int)$time[1], 1, 2000)) : '', 'print_result' => false), $smarty); - $month_result .= ''; } @@ -244,6 +258,8 @@ function smarty_function_html_select_date($params, &$smarty) $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)) { diff --git a/lib/smarty/plugins/function.html_select_time.php b/lib/smarty/plugins/function.html_select_time.php index 805c118e6db..00cd1ae8896 100644 --- a/lib/smarty/plugins/function.html_select_time.php +++ b/lib/smarty/plugins/function.html_select_time.php @@ -9,8 +9,8 @@ /** * Smarty {html_select_time} function plugin * - * Type: function
- * Name: html_select_time
+ * Type: function
+ * Name: html_select_time
* 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) diff --git a/lib/smarty/plugins/function.html_table.php b/lib/smarty/plugins/function.html_table.php index 623dbf1b740..62d7410b8d4 100644 --- a/lib/smarty/plugins/function.html_table.php +++ b/lib/smarty/plugins/function.html_table.php @@ -9,11 +9,11 @@ /** * Smarty {html_table} function plugin * - * Type: function
- * Name: html_table
- * Date: Feb 17, 2003
- * Purpose: make an html table from an array of data
- * Input:
+ * Type: function
+ * Name: html_table
+ * Date: Feb 17, 2003
+ * Purpose: make an html table from an array of data
+ * Input:
* - loop = array to loop through * - cols = number of columns * - rows = number of rows @@ -33,7 +33,7 @@ * {table loop=$data cols=4 tr_attr='"bgcolor=red"'} * {table loop=$data cols=4 tr_attr=$colors} * - * @author Monte Ohrt + * @author Monte Ohrt * @version 1.0 * @link http://smarty.php.net/manual/en/language.function.html.table.php {html_table} * (Smarty online manual) @@ -73,6 +73,7 @@ function smarty_function_html_table($params, &$smarty) case 'trailpad': case 'hdir': case 'vdir': + case 'inner': $$_key = (string)$_value; break; diff --git a/lib/smarty/plugins/function.mailto.php b/lib/smarty/plugins/function.mailto.php index 333fbc2233f..64c122ce4e0 100644 --- a/lib/smarty/plugins/function.mailto.php +++ b/lib/smarty/plugins/function.mailto.php @@ -9,17 +9,18 @@ /** * Smarty {mailto} function plugin * - * Type: function
- * Name: mailto
+ * Type: function
+ * Name: mailto
* Date: May 21, 2002 * Purpose: automate mailto address link creation, and optionally - * encode them.
- * Input:
+ * encode them.
+ * Input:
* - address = e-mail address * - text = (optional) text to display, default is address * - 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 + * @author Monte Ohrt * @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 @@ function smarty_function_mailto($params, &$smarty) $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','hex','none')) ) { $smarty->trigger_error("mailto: 'encode' parameter must be none, javascript or hex"); return; } @@ -105,8 +106,27 @@ function smarty_function_mailto($params, &$smarty) $js_encode .= '%' . bin2hex($string[$x]); } - return ''; + return ''; + } elseif ($encode == 'javascript_charcode' ) { + $string = ''.$text.''; + + for($x = 0, $y = strlen($string); $x < $y; $x++ ) { + $ord[] = ord($string[$x]); + } + + $_ret = "\n"; + + return $_ret; + + } elseif ($encode == 'hex') { preg_match('!^(.*)(\?.*)$!',$address,$match); @@ -114,6 +134,7 @@ function smarty_function_mailto($params, &$smarty) $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 @@ function smarty_function_mailto($params, &$smarty) $address_encode .= $address[$x]; } } + $text_encode = ''; for ($x=0; $x < strlen($text); $x++) { $text_encode .= '&#x' . bin2hex($text[$x]).';'; } - return ''.$text_encode.''; + $mailto = "mailto:"; + return ''.$text_encode.''; } else { // no encoding diff --git a/lib/smarty/plugins/function.math.php b/lib/smarty/plugins/function.math.php index 03d0368a032..04391077062 100644 --- a/lib/smarty/plugins/function.math.php +++ b/lib/smarty/plugins/function.math.php @@ -9,9 +9,9 @@ /** * Smarty {math} function plugin * - * Type: function
- * Name: math
- * Purpose: handle math computations in template
+ * Type: function
+ * Name: math
+ * Purpose: handle math computations in template
* @link http://smarty.php.net/manual/en/language.function.math.php {math} * (Smarty online manual) * @param array @@ -35,12 +35,13 @@ function smarty_function_math($params, &$smarty) } // 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; } } diff --git a/lib/smarty/plugins/function.popup.php b/lib/smarty/plugins/function.popup.php index 0fa56ce2601..2ba54de5ab7 100644 --- a/lib/smarty/plugins/function.popup.php +++ b/lib/smarty/plugins/function.popup.php @@ -9,8 +9,8 @@ /** * Smarty {popup} function plugin * - * Type: function
- * Name: popup
+ * Type: function
+ * Name: popup
* Purpose: make text pop up in windows via overlib * @link http://smarty.php.net/manual/en/language.function.popup.php {popup} * (Smarty online manual) @@ -25,7 +25,11 @@ function smarty_function_popup($params, &$smarty) 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 +46,15 @@ function smarty_function_popup($params, &$smarty) 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 +63,15 @@ function smarty_function_popup($params, &$smarty) 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 +86,8 @@ function smarty_function_popup($params, &$smarty) case 'fullhtml': case 'hauto': case 'vauto': + case 'mouseoff': + case 'followmouse': if ($_value) $append .= ',' . strtoupper($_key); break; @@ -97,7 +104,10 @@ function smarty_function_popup($params, &$smarty) 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; } diff --git a/lib/smarty/plugins/function.popup_init.php b/lib/smarty/plugins/function.popup_init.php index 04e52d40ab6..f62c33c13f6 100644 --- a/lib/smarty/plugins/function.popup_init.php +++ b/lib/smarty/plugins/function.popup_init.php @@ -9,8 +9,8 @@ /** * Smarty {popup_init} function plugin * - * Type: function
- * Name: popup_init
+ * Type: function
+ * Name: popup_init
* Purpose: initialize overlib * @link http://smarty.php.net/manual/en/language.function.popup.init.php {popup_init} * (Smarty online manual) diff --git a/lib/smarty/plugins/modifier.capitalize.php b/lib/smarty/plugins/modifier.capitalize.php index 053fc4a65f4..2b9169cefa6 100644 --- a/lib/smarty/plugins/modifier.capitalize.php +++ b/lib/smarty/plugins/modifier.capitalize.php @@ -9,17 +9,34 @@ /** * Smarty capitalize modifier plugin * - * Type: modifier
- * Name: capitalize
+ * Type: modifier
+ * Name: capitalize
* Purpose: capitalize words in the string * @link http://smarty.php.net/manual/en/language.modifiers.php#LANGUAGE.MODIFIER.CAPITALIZE * capitalize (Smarty online manual) * @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]; +} + + ?> diff --git a/lib/smarty/plugins/modifier.cat.php b/lib/smarty/plugins/modifier.cat.php index 4c6a7c68473..2e37940d432 100644 --- a/lib/smarty/plugins/modifier.cat.php +++ b/lib/smarty/plugins/modifier.cat.php @@ -9,15 +9,15 @@ /** * Smarty cat modifier plugin * - * Type: modifier
- * Name: cat
+ * Type: modifier
+ * Name: cat
* Date: Feb 24, 2003 * Purpose: catenate a value to a variable * Input: string to catenate * Example: {$var|cat:"foo"} * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat * (Smarty online manual) - * @author Monte Ohrt + * @author Monte Ohrt * @version 1.0 * @param string * @param string diff --git a/lib/smarty/plugins/modifier.count_characters.php b/lib/smarty/plugins/modifier.count_characters.php index 9b631aa6510..49ce655e853 100644 --- a/lib/smarty/plugins/modifier.count_characters.php +++ b/lib/smarty/plugins/modifier.count_characters.php @@ -9,8 +9,8 @@ /** * Smarty count_characters modifier plugin * - * Type: modifier
- * Name: count_characteres
+ * Type: modifier
+ * Name: count_characteres
* 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) diff --git a/lib/smarty/plugins/modifier.count_paragraphs.php b/lib/smarty/plugins/modifier.count_paragraphs.php index 4d99415108e..6a9833c97ca 100644 --- a/lib/smarty/plugins/modifier.count_paragraphs.php +++ b/lib/smarty/plugins/modifier.count_paragraphs.php @@ -9,8 +9,8 @@ /** * Smarty count_paragraphs modifier plugin * - * Type: modifier
- * Name: count_paragraphs
+ * Type: modifier
+ * Name: count_paragraphs
* 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) diff --git a/lib/smarty/plugins/modifier.count_sentences.php b/lib/smarty/plugins/modifier.count_sentences.php index 1c8753f6cd3..0c210f08fe9 100644 --- a/lib/smarty/plugins/modifier.count_sentences.php +++ b/lib/smarty/plugins/modifier.count_sentences.php @@ -9,7 +9,7 @@ /** * Smarty count_sentences modifier plugin * - * Type: modifier
+ * Type: modifier
* Name: count_sentences * Purpose: count the number of sentences in a text * @link http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php diff --git a/lib/smarty/plugins/modifier.count_words.php b/lib/smarty/plugins/modifier.count_words.php index 1a6fcca0685..42c8a741c5c 100644 --- a/lib/smarty/plugins/modifier.count_words.php +++ b/lib/smarty/plugins/modifier.count_words.php @@ -9,8 +9,8 @@ /** * Smarty count_words modifier plugin * - * Type: modifier
- * Name: count_words
+ * Type: modifier
+ * Name: count_words
* 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) diff --git a/lib/smarty/plugins/modifier.date_format.php b/lib/smarty/plugins/modifier.date_format.php index 0fd624cf0e9..2f36b3b79c0 100644 --- a/lib/smarty/plugins/modifier.date_format.php +++ b/lib/smarty/plugins/modifier.date_format.php @@ -12,10 +12,10 @@ require_once $smarty->_get_plugin_filepath('shared','make_timestamp'); /** * Smarty date_format modifier plugin * - * Type: modifier
- * Name: date_format
- * Purpose: format datestamps via strftime
- * Input:
+ * Type: modifier
+ * Name: date_format
+ * Purpose: format datestamps via strftime
+ * Input:
* - string: input date string * - format: strftime format for output * - default_date: default date if $string is empty @@ -29,6 +29,11 @@ require_once $smarty->_get_plugin_filepath('shared','make_timestamp'); */ 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 != '') { diff --git a/lib/smarty/plugins/modifier.debug_print_var.php b/lib/smarty/plugins/modifier.debug_print_var.php index cf358192946..b9bb1848802 100644 --- a/lib/smarty/plugins/modifier.debug_print_var.php +++ b/lib/smarty/plugins/modifier.debug_print_var.php @@ -9,8 +9,8 @@ /** * Smarty debug_print_var modifier plugin * - * Type: modifier
- * Name: debug_print_var
+ * Type: modifier
+ * Name: debug_print_var
* 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) @@ -26,14 +26,14 @@ function smarty_modifier_debug_print_var($var, $depth = 0, $length = 40) $results = "Array (".count($var).")"; foreach ($var as $curr_key => $curr_val) { $return = smarty_modifier_debug_print_var($curr_val, $depth+1, $length); - $results .= "
".str_repeat(' ', $depth*2)."".strtr($curr_key, $_replace)." => $return"; + $results .= "
".str_repeat(' ', $depth*2)."".strtr($curr_key, $_replace)." => $return"; } } else if (is_object($var)) { $object_vars = get_object_vars($var); $results = "".get_class($var)." Object (".count($object_vars).")"; foreach ($object_vars as $curr_key => $curr_val) { $return = smarty_modifier_debug_print_var($curr_val, $depth+1, $length); - $results .= "
".str_repeat(' ', $depth*2)."$curr_key => $return"; + $results .= "
".str_repeat(' ', $depth*2)."$curr_key => $return"; } } else if (is_resource($var)) { $results = ''.(string)$var.''; diff --git a/lib/smarty/plugins/modifier.default.php b/lib/smarty/plugins/modifier.default.php index 4b8c1f6bde7..8268e396ff0 100644 --- a/lib/smarty/plugins/modifier.default.php +++ b/lib/smarty/plugins/modifier.default.php @@ -9,8 +9,8 @@ /** * Smarty default modifier plugin * - * Type: modifier
- * Name: default
+ * Type: modifier
+ * Name: default
* Purpose: designate default value for empty variables * @link http://smarty.php.net/manual/en/language.modifier.default.php * default (Smarty online manual) diff --git a/lib/smarty/plugins/modifier.escape.php b/lib/smarty/plugins/modifier.escape.php index 61c83cb7476..a32a8766caf 100644 --- a/lib/smarty/plugins/modifier.escape.php +++ b/lib/smarty/plugins/modifier.escape.php @@ -9,8 +9,8 @@ /** * Smarty escape modifier plugin * - * Type: modifier
- * Name: escape
+ * Type: modifier
+ * Name: escape
* Purpose: Escape the string according to escapement type * @link http://smarty.php.net/manual/en/language.modifier.escape.php * escape (Smarty online manual) @@ -28,7 +28,7 @@ function smarty_modifier_escape($string, $esc_type = 'html') return htmlentities($string, ENT_QUOTES); case 'url': - return urlencode($string); + return rawurlencode($string); case 'quotes': // escape unescaped single quotes @@ -49,9 +49,35 @@ function smarty_modifier_escape($string, $esc_type = 'html') } 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($string{$_i}); + // non-standard char, escape it + if($_ord >= 126){ + $_res .= '&#' . $_ord . ';'; + } + else { + $_res .= $string{$_i}; + } + } + return $_res; default: return $string; diff --git a/lib/smarty/plugins/modifier.indent.php b/lib/smarty/plugins/modifier.indent.php index 661173a728a..1642bac3ded 100644 --- a/lib/smarty/plugins/modifier.indent.php +++ b/lib/smarty/plugins/modifier.indent.php @@ -9,8 +9,8 @@ /** * Smarty indent modifier plugin * - * Type: modifier
- * Name: indent
+ * Type: modifier
+ * Name: indent
* Purpose: indent lines of text * @link http://smarty.php.net/manual/en/language.modifier.indent.php * indent (Smarty online manual) diff --git a/lib/smarty/plugins/modifier.lower.php b/lib/smarty/plugins/modifier.lower.php index b6e97e9ccbd..0b4d1517dc6 100644 --- a/lib/smarty/plugins/modifier.lower.php +++ b/lib/smarty/plugins/modifier.lower.php @@ -9,8 +9,8 @@ /** * Smarty lower modifier plugin * - * Type: modifier
- * Name: lower
+ * Type: modifier
+ * Name: lower
* Purpose: convert string to lowercase * @link http://smarty.php.net/manual/en/language.modifier.lower.php * lower (Smarty online manual) diff --git a/lib/smarty/plugins/modifier.nl2br.php b/lib/smarty/plugins/modifier.nl2br.php index 80995891971..d6fabff64d0 100644 --- a/lib/smarty/plugins/modifier.nl2br.php +++ b/lib/smarty/plugins/modifier.nl2br.php @@ -9,11 +9,11 @@ /** * Smarty plugin * - * Type: modifier
- * Name: nl2br
+ * Type: modifier
+ * Name: nl2br
* Date: Feb 26, 2003 - * Purpose: convert \r\n, \r or \n to <
> - * Input:
+ * Purpose: convert \r\n, \r or \n to <
> + * Input:
* - contents = contents to replace * - preceed_test = if true, includes preceeding break tags * in replacement @@ -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 + * @author Monte Ohrt * @param string * @return string */ diff --git a/lib/smarty/plugins/modifier.regex_replace.php b/lib/smarty/plugins/modifier.regex_replace.php index e1134004671..7eee497c85b 100644 --- a/lib/smarty/plugins/modifier.regex_replace.php +++ b/lib/smarty/plugins/modifier.regex_replace.php @@ -9,8 +9,8 @@ /** * Smarty regex_replace modifier plugin * - * Type: modifier
- * Name: regex_replace
+ * Type: modifier
+ * Name: regex_replace
* Purpose: regular epxression search/replace * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php * regex_replace (Smarty online manual) @@ -21,6 +21,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); } diff --git a/lib/smarty/plugins/modifier.replace.php b/lib/smarty/plugins/modifier.replace.php index 35988a03ce6..2a43515f7ea 100644 --- a/lib/smarty/plugins/modifier.replace.php +++ b/lib/smarty/plugins/modifier.replace.php @@ -9,8 +9,8 @@ /** * Smarty replace modifier plugin * - * Type: modifier
- * Name: replace
+ * Type: modifier
+ * Name: replace
* Purpose: simple search/replace * @link http://smarty.php.net/manual/en/language.modifier.replace.php * replace (Smarty online manual) diff --git a/lib/smarty/plugins/modifier.spacify.php b/lib/smarty/plugins/modifier.spacify.php index 16245731e22..dad057f9b5e 100644 --- a/lib/smarty/plugins/modifier.spacify.php +++ b/lib/smarty/plugins/modifier.spacify.php @@ -9,8 +9,8 @@ /** * Smarty spacify modifier plugin * - * Type: modifier
- * Name: spacify
+ * Type: modifier
+ * Name: spacify
* Purpose: add spaces between characters in a string * @link http://smarty.php.net/manual/en/language.modifier.spacify.php * spacify (Smarty online manual) diff --git a/lib/smarty/plugins/modifier.string_format.php b/lib/smarty/plugins/modifier.string_format.php index d7646146abd..efd621506fa 100644 --- a/lib/smarty/plugins/modifier.string_format.php +++ b/lib/smarty/plugins/modifier.string_format.php @@ -9,8 +9,8 @@ /** * Smarty string_format modifier plugin * - * Type: modifier
- * Name: string_format
+ * Type: modifier
+ * Name: string_format
* Purpose: format strings via sprintf * @link http://smarty.php.net/manual/en/language.modifier.string.format.php * string_format (Smarty online manual) diff --git a/lib/smarty/plugins/modifier.strip.php b/lib/smarty/plugins/modifier.strip.php index 0d4155aada3..cc5c453c8a7 100644 --- a/lib/smarty/plugins/modifier.strip.php +++ b/lib/smarty/plugins/modifier.strip.php @@ -9,15 +9,15 @@ /** * Smarty strip modifier plugin * - * Type: modifier
- * Name: strip
+ * Type: modifier
+ * Name: strip
* Purpose: Replace all repeated spaces, newlines, tabs - * with a single space or supplied replacement string.
+ * with a single space or supplied replacement string.
* Example: {$var|strip} {$var|strip:" "} * Date: September 25th, 2002 * @link http://smarty.php.net/manual/en/language.modifier.strip.php * strip (Smarty online manual) - * @author Monte Ohrt + * @author Monte Ohrt * @version 1.0 * @param string * @param string diff --git a/lib/smarty/plugins/modifier.strip_tags.php b/lib/smarty/plugins/modifier.strip_tags.php index 2840032c8ff..45f1ec14d15 100644 --- a/lib/smarty/plugins/modifier.strip_tags.php +++ b/lib/smarty/plugins/modifier.strip_tags.php @@ -9,8 +9,8 @@ /** * Smarty strip_tags modifier plugin * - * Type: modifier
- * Name: strip_tags
+ * Type: modifier
+ * Name: strip_tags
* Purpose: strip html tags from text * @link http://smarty.php.net/manual/en/language.modifier.strip.tags.php * strip_tags (Smarty online manual) diff --git a/lib/smarty/plugins/modifier.truncate.php b/lib/smarty/plugins/modifier.truncate.php index 0718a0fdea5..15a26ba9755 100644 --- a/lib/smarty/plugins/modifier.truncate.php +++ b/lib/smarty/plugins/modifier.truncate.php @@ -9,8 +9,8 @@ /** * Smarty truncate modifier plugin * - * Type: modifier
- * Name: truncate
+ * Type: modifier
+ * Name: truncate
* Purpose: Truncate a string to a certain length if necessary, * optionally splitting in the middle of a word, and * appending the $etc string. diff --git a/lib/smarty/plugins/modifier.upper.php b/lib/smarty/plugins/modifier.upper.php index bef09b7b6dd..69960ae7217 100644 --- a/lib/smarty/plugins/modifier.upper.php +++ b/lib/smarty/plugins/modifier.upper.php @@ -9,8 +9,8 @@ /** * Smarty upper modifier plugin * - * Type: modifier
- * Name: upper
+ * Type: modifier
+ * Name: upper
* Purpose: convert string to uppercase * @link http://smarty.php.net/manual/en/language.modifier.upper.php * upper (Smarty online manual) diff --git a/lib/smarty/plugins/modifier.wordwrap.php b/lib/smarty/plugins/modifier.wordwrap.php index 37dd014c8b2..b9a9fe94b3f 100644 --- a/lib/smarty/plugins/modifier.wordwrap.php +++ b/lib/smarty/plugins/modifier.wordwrap.php @@ -9,8 +9,8 @@ /** * Smarty wordwrap modifier plugin * - * Type: modifier
- * Name: wordwrap
+ * Type: modifier
+ * Name: wordwrap
* 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) diff --git a/lib/smarty/plugins/outputfilter.trimwhitespace.php b/lib/smarty/plugins/outputfilter.trimwhitespace.php index 160cbac65a1..01e35e03df9 100644 --- a/lib/smarty/plugins/outputfilter.trimwhitespace.php +++ b/lib/smarty/plugins/outputfilter.trimwhitespace.php @@ -8,18 +8,18 @@ /** * Smarty trimwhitespace outputfilter plugin * - * File: outputfilter.trimwhitespace.php
- * Type: outputfilter
- * Name: trimwhitespace
- * Date: Jan 25, 2003
+ * File: outputfilter.trimwhitespace.php
+ * Type: outputfilter
+ * Name: trimwhitespace
+ * Date: Jan 25, 2003
* Purpose: trim leading white space and blank lines from * template source after it gets interpreted, cleaning * up code and saving bandwidth. Does not affect - * <
>
and blocks.
+ * <
>
and blocks.
* Install: Drop into the plugin directory, call * $smarty->load_filter('output','trimwhitespace'); * from application. - * @author Monte Ohrt + * @author Monte Ohrt * @author Contributions from Lars Noschinski * @version 1.3 * @param string diff --git a/lib/smarty/plugins/shared.escape_special_chars.php b/lib/smarty/plugins/shared.escape_special_chars.php index 69b3495dc1a..515763abedc 100644 --- a/lib/smarty/plugins/shared.escape_special_chars.php +++ b/lib/smarty/plugins/shared.escape_special_chars.php @@ -9,7 +9,7 @@ /** * escape_special_chars common function * - * Function: smarty_function_escape_special_chars
+ * Function: smarty_function_escape_special_chars
* Purpose: used by other smarty functions to escape * special chars except for already escaped ones * @param string diff --git a/lib/smarty/plugins/shared.make_timestamp.php b/lib/smarty/plugins/shared.make_timestamp.php index ec961ff1638..acdd7773592 100644 --- a/lib/smarty/plugins/shared.make_timestamp.php +++ b/lib/smarty/plugins/shared.make_timestamp.php @@ -7,7 +7,7 @@ /** - * Function: smarty_make_timestamp
+ * Function: smarty_make_timestamp
* Purpose: used by other smarty functions to make a timestamp * from a string. * @param string
Smarty Debug Console
included templates & config files (load time in seconds):