update Smarty to 3.1.21

git-svn-id: https://svn.code.sf.net/p/postfixadmin/code/trunk@1704 a1433add-5e2c-0410-b055-b7f2511e0802
pull/2/head
Christian Boltz 11 years ago
parent 6ec360b0b7
commit 49be08c9fe

@ -24,6 +24,7 @@ SVN changes since 3.0 beta1 (2.91)
- $CONF[default_aliases] can now use the new domain as alias target (patch#124) - $CONF[default_aliases] can now use the new domain as alias target (patch#124)
- check that vacation start/end date are not in the past (patch#122) - check that vacation start/end date are not in the past (patch#122)
- update vacation INSTALL.TXT with more secure locations - update vacation INSTALL.TXT with more secure locations
- update Smarty to 3.1.21
Version 3.0 beta1 (2.91) - 2014/05/06 - SVN r1670 Version 3.0 beta1 (2.91) - 2014/05/06 - SVN r1670
------------------------------------------------- -------------------------------------------------

@ -2,22 +2,18 @@
/** /**
* Project: Smarty: the PHP compiling template engine * Project: Smarty: the PHP compiling template engine
* File: Smarty.class.php * File: Smarty.class.php
* SVN: $Id: Smarty.class.php 4800 2013-12-15 15:19:01Z Uwe.Tews@googlemail.com $ * SVN: $Id: Smarty.class.php 4897 2014-10-14 22:29:58Z Uwe.Tews@googlemail.com $
*
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either * License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version. * version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details. * Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software * License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* For questions, help, comments, discussion, etc., please join the * For questions, help, comments, discussion, etc., please join the
* Smarty mailing list. Send a blank e-mail to * Smarty mailing list. Send a blank e-mail to
* smarty-discussion-subscribe@googlegroups.com * smarty-discussion-subscribe@googlegroups.com
@ -28,7 +24,7 @@
* @author Uwe Tews * @author Uwe Tews
* @author Rodney Rehm * @author Rodney Rehm
* @package Smarty * @package Smarty
* @version 3.1-DEV * @version 3.1.21
*/ */
/** /**
@ -92,16 +88,17 @@ if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR
/** /**
* Load always needed external class files * Load always needed external class files
*/ */
include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_data.php'; include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_data.php';
include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_templatebase.php'; include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_templatebase.php';
include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_template.php'; include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_template.php';
include_once SMARTY_SYSPLUGINS_DIR.'smarty_resource.php'; include_once SMARTY_SYSPLUGINS_DIR . 'smarty_resource.php';
include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_resource_file.php'; include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_resource_file.php';
include_once SMARTY_SYSPLUGINS_DIR.'smarty_cacheresource.php'; include_once SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php';
include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_cacheresource_file.php'; include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_cacheresource_file.php';
/** /**
* This is the main Smarty class * This is the main Smarty class
*
* @package Smarty * @package Smarty
*/ */
class Smarty extends Smarty_Internal_TemplateBase class Smarty extends Smarty_Internal_TemplateBase
@ -113,7 +110,7 @@ class Smarty extends Smarty_Internal_TemplateBase
/** /**
* smarty version * smarty version
*/ */
const SMARTY_VERSION = 'Smarty-3.1.16'; const SMARTY_VERSION = 'Smarty-3.1.21-dev';
/** /**
* define variable scopes * define variable scopes
@ -131,7 +128,7 @@ class Smarty extends Smarty_Internal_TemplateBase
/** /**
* define constant for clearing cache files be saved expiration datees * define constant for clearing cache files be saved expiration datees
*/ */
const CLEAR_EXPIRED = -1; const CLEAR_EXPIRED = - 1;
/** /**
* define compile check modes * define compile check modes
@ -206,111 +203,133 @@ class Smarty extends Smarty_Internal_TemplateBase
/** /**
* auto literal on delimiters with whitspace * auto literal on delimiters with whitspace
*
* @var boolean * @var boolean
*/ */
public $auto_literal = true; public $auto_literal = true;
/** /**
* display error on not assigned variables * display error on not assigned variables
*
* @var boolean * @var boolean
*/ */
public $error_unassigned = false; public $error_unassigned = false;
/** /**
* look up relative filepaths in include_path * look up relative filepaths in include_path
*
* @var boolean * @var boolean
*/ */
public $use_include_path = false; public $use_include_path = false;
/** /**
* template directory * template directory
*
* @var array * @var array
*/ */
private $template_dir = array(); private $template_dir = array();
/** /**
* joined template directory string used in cache keys * joined template directory string used in cache keys
*
* @var string * @var string
*/ */
public $joined_template_dir = null; public $joined_template_dir = null;
/** /**
* joined config directory string used in cache keys * joined config directory string used in cache keys
*
* @var string * @var string
*/ */
public $joined_config_dir = null; public $joined_config_dir = null;
/** /**
* default template handler * default template handler
*
* @var callable * @var callable
*/ */
public $default_template_handler_func = null; public $default_template_handler_func = null;
/** /**
* default config handler * default config handler
*
* @var callable * @var callable
*/ */
public $default_config_handler_func = null; public $default_config_handler_func = null;
/** /**
* default plugin handler * default plugin handler
*
* @var callable * @var callable
*/ */
public $default_plugin_handler_func = null; public $default_plugin_handler_func = null;
/** /**
* compile directory * compile directory
*
* @var string * @var string
*/ */
private $compile_dir = null; private $compile_dir = null;
/** /**
* plugins directory * plugins directory
*
* @var array * @var array
*/ */
private $plugins_dir = array(); private $plugins_dir = array();
/** /**
* cache directory * cache directory
*
* @var string * @var string
*/ */
private $cache_dir = null; private $cache_dir = null;
/** /**
* config directory * config directory
*
* @var array * @var array
*/ */
private $config_dir = array(); private $config_dir = array();
/** /**
* force template compiling? * force template compiling?
*
* @var boolean * @var boolean
*/ */
public $force_compile = false; public $force_compile = false;
/** /**
* check template for modifications? * check template for modifications?
*
* @var boolean * @var boolean
*/ */
public $compile_check = true; public $compile_check = true;
/** /**
* use sub dirs for compiled/cached files? * use sub dirs for compiled/cached files?
*
* @var boolean * @var boolean
*/ */
public $use_sub_dirs = false; public $use_sub_dirs = false;
/** /**
* allow ambiguous resources (that are made unique by the resource handler) * allow ambiguous resources (that are made unique by the resource handler)
*
* @var boolean * @var boolean
*/ */
public $allow_ambiguous_resources = false; public $allow_ambiguous_resources = false;
/** /**
* caching enabled * caching enabled
*
* @var boolean * @var boolean
*/ */
public $caching = false; public $caching = false;
/** /**
* merge compiled includes * merge compiled includes
*
* @var boolean * @var boolean
*/ */
public $merge_compiled_includes = false; public $merge_compiled_includes = false;
/** /**
* template inheritance merge compiled includes * template inheritance merge compiled includes
*
* @var boolean * @var boolean
*/ */
public $inheritance_merge_compiled_includes = true; public $inheritance_merge_compiled_includes = true;
/** /**
* cache lifetime in seconds * cache lifetime in seconds
*
* @var integer * @var integer
*/ */
public $cache_lifetime = 3600; public $cache_lifetime = 3600;
/** /**
* force cache file creation * force cache file creation
*
* @var boolean * @var boolean
*/ */
public $force_cache = false; public $force_cache = false;
@ -330,11 +349,13 @@ class Smarty extends Smarty_Internal_TemplateBase
public $compile_id = null; public $compile_id = null;
/** /**
* template left-delimiter * template left-delimiter
*
* @var string * @var string
*/ */
public $left_delimiter = "{"; public $left_delimiter = "{";
/** /**
* template right-delimiter * template right-delimiter
*
* @var string * @var string
*/ */
public $right_delimiter = "}"; public $right_delimiter = "}";
@ -343,7 +364,6 @@ class Smarty extends Smarty_Internal_TemplateBase
*/ */
/** /**
* class name * class name
*
* This should be instance of Smarty_Security. * This should be instance of Smarty_Security.
* *
* @var string * @var string
@ -370,7 +390,6 @@ class Smarty extends Smarty_Internal_TemplateBase
public $allow_php_templates = false; public $allow_php_templates = false;
/** /**
* Should compiled-templates be prevented from being called directly? * Should compiled-templates be prevented from being called directly?
*
* {@internal * {@internal
* Currently used by Smarty_Internal_Template only. * Currently used by Smarty_Internal_Template only.
* }} * }}
@ -381,7 +400,6 @@ class Smarty extends Smarty_Internal_TemplateBase
/**#@-*/ /**#@-*/
/** /**
* debug mode * debug mode
*
* Setting this to true enables the debug-console. * Setting this to true enables the debug-console.
* *
* @var boolean * @var boolean
@ -393,12 +411,12 @@ class Smarty extends Smarty_Internal_TemplateBase
* <li>NONE => no debugging control allowed</li> * <li>NONE => no debugging control allowed</li>
* <li>URL => enable debugging when SMARTY_DEBUG is found in the URL.</li> * <li>URL => enable debugging when SMARTY_DEBUG is found in the URL.</li>
* </ul> * </ul>
*
* @var string * @var string
*/ */
public $debugging_ctrl = 'NONE'; public $debugging_ctrl = 'NONE';
/** /**
* Name of debugging URL-param. * Name of debugging URL-param.
*
* Only used when $debugging_ctrl is set to 'URL'. * Only used when $debugging_ctrl is set to 'URL'.
* The name of the URL-parameter that activates debugging. * The name of the URL-parameter that activates debugging.
* *
@ -407,16 +425,19 @@ class Smarty extends Smarty_Internal_TemplateBase
public $smarty_debug_id = 'SMARTY_DEBUG'; public $smarty_debug_id = 'SMARTY_DEBUG';
/** /**
* Path of debug template. * Path of debug template.
*
* @var string * @var string
*/ */
public $debug_tpl = null; public $debug_tpl = null;
/** /**
* When set, smarty uses this value as error_reporting-level. * When set, smarty uses this value as error_reporting-level.
*
* @var int * @var int
*/ */
public $error_reporting = null; public $error_reporting = null;
/** /**
* Internal flag for getTags() * Internal flag for getTags()
*
* @var boolean * @var boolean
*/ */
public $get_used_tags = false; public $get_used_tags = false;
@ -427,16 +448,19 @@ class Smarty extends Smarty_Internal_TemplateBase
/** /**
* Controls whether variables with the same name overwrite each other. * Controls whether variables with the same name overwrite each other.
*
* @var boolean * @var boolean
*/ */
public $config_overwrite = true; public $config_overwrite = true;
/** /**
* Controls whether config values of on/true/yes and off/false/no get converted to boolean. * Controls whether config values of on/true/yes and off/false/no get converted to boolean.
*
* @var boolean * @var boolean
*/ */
public $config_booleanize = true; public $config_booleanize = true;
/** /**
* Controls whether hidden config sections/vars are read from the file. * Controls whether hidden config sections/vars are read from the file.
*
* @var boolean * @var boolean
*/ */
public $config_read_hidden = false; public $config_read_hidden = false;
@ -449,16 +473,19 @@ class Smarty extends Smarty_Internal_TemplateBase
/** /**
* locking concurrent compiles * locking concurrent compiles
*
* @var boolean * @var boolean
*/ */
public $compile_locking = true; public $compile_locking = true;
/** /**
* Controls whether cache resources should emply locking mechanism * Controls whether cache resources should emply locking mechanism
*
* @var boolean * @var boolean
*/ */
public $cache_locking = false; public $cache_locking = false;
/** /**
* seconds to wait for acquiring a lock before ignoring the write lock * seconds to wait for acquiring a lock before ignoring the write lock
*
* @var float * @var float
*/ */
public $locking_timeout = 10; public $locking_timeout = 10;
@ -467,19 +494,19 @@ class Smarty extends Smarty_Internal_TemplateBase
/** /**
* global template functions * global template functions
*
* @var array * @var array
*/ */
public $template_functions = array(); public $template_functions = array();
/** /**
* resource type used if none given * resource type used if none given
*
* Must be an valid key of $registered_resources. * Must be an valid key of $registered_resources.
*
* @var string * @var string
*/ */
public $default_resource_type = 'file'; public $default_resource_type = 'file';
/** /**
* caching type * caching type
*
* Must be an element of $cache_resource_types. * Must be an element of $cache_resource_types.
* *
* @var string * @var string
@ -487,121 +514,145 @@ class Smarty extends Smarty_Internal_TemplateBase
public $caching_type = 'file'; public $caching_type = 'file';
/** /**
* internal config properties * internal config properties
*
* @var array * @var array
*/ */
public $properties = array(); public $properties = array();
/** /**
* config type * config type
*
* @var string * @var string
*/ */
public $default_config_type = 'file'; public $default_config_type = 'file';
/** /**
* cached template objects * cached template objects
*
* @var array * @var array
*/ */
public $template_objects = array(); public $template_objects = array();
/** /**
* check If-Modified-Since headers * check If-Modified-Since headers
*
* @var boolean * @var boolean
*/ */
public $cache_modified_check = false; public $cache_modified_check = false;
/** /**
* registered plugins * registered plugins
*
* @var array * @var array
*/ */
public $registered_plugins = array(); public $registered_plugins = array();
/** /**
* plugin search order * plugin search order
*
* @var array * @var array
*/ */
public $plugin_search_order = array('function', 'block', 'compiler', 'class'); public $plugin_search_order = array('function', 'block', 'compiler', 'class');
/** /**
* registered objects * registered objects
*
* @var array * @var array
*/ */
public $registered_objects = array(); public $registered_objects = array();
/** /**
* registered classes * registered classes
*
* @var array * @var array
*/ */
public $registered_classes = array(); public $registered_classes = array();
/** /**
* registered filters * registered filters
*
* @var array * @var array
*/ */
public $registered_filters = array(); public $registered_filters = array();
/** /**
* registered resources * registered resources
*
* @var array * @var array
*/ */
public $registered_resources = array(); public $registered_resources = array();
/** /**
* resource handler cache * resource handler cache
*
* @var array * @var array
*/ */
public $_resource_handlers = array(); public $_resource_handlers = array();
/** /**
* registered cache resources * registered cache resources
*
* @var array * @var array
*/ */
public $registered_cache_resources = array(); public $registered_cache_resources = array();
/** /**
* cache resource handler cache * cache resource handler cache
*
* @var array * @var array
*/ */
public $_cacheresource_handlers = array(); public $_cacheresource_handlers = array();
/** /**
* autoload filter * autoload filter
*
* @var array * @var array
*/ */
public $autoload_filters = array(); public $autoload_filters = array();
/** /**
* default modifier * default modifier
*
* @var array * @var array
*/ */
public $default_modifiers = array(); public $default_modifiers = array();
/** /**
* autoescape variable output * autoescape variable output
*
* @var boolean * @var boolean
*/ */
public $escape_html = false; public $escape_html = false;
/** /**
* global internal smarty vars * global internal smarty vars
*
* @var array * @var array
*/ */
public static $_smarty_vars = array(); public static $_smarty_vars = array();
/** /**
* start time for execution time calculation * start time for execution time calculation
*
* @var int * @var int
*/ */
public $start_time = 0; public $start_time = 0;
/** /**
* default file permissions * default file permissions
*
* @var int * @var int
*/ */
public $_file_perms = 0644; public $_file_perms = 0644;
/** /**
* default dir permissions * default dir permissions
*
* @var int * @var int
*/ */
public $_dir_perms = 0771; public $_dir_perms = 0771;
/** /**
* block tag hierarchy * block tag hierarchy
*
* @var array * @var array
*/ */
public $_tag_stack = array(); public $_tag_stack = array();
/** /**
* self pointer to Smarty object * self pointer to Smarty object
*
* @var Smarty * @var Smarty
*/ */
public $smarty; public $smarty;
/** /**
* required by the compiler for BC * required by the compiler for BC
*
* @var string * @var string
*/ */
public $_current_file = null; public $_current_file = null;
/** /**
* internal flag to enable parser debugging * internal flag to enable parser debugging
*
* @var bool * @var bool
*/ */
public $_parserdebug = false; public $_parserdebug = false;
@ -611,11 +662,19 @@ class Smarty extends Smarty_Internal_TemplateBase
* @var array * @var array
*/ */
public $merged_templates_func = array(); public $merged_templates_func = array();
/**
* Cache of is_file results of loadPlugin()
*
* @var array
*/
public static $_is_file_cache= array();
/**#@-*/ /**#@-*/
/** /**
* Initialize new Smarty object * Initialize new Smarty object
*
*/ */
public function __construct() public function __construct()
{ {
@ -656,11 +715,11 @@ class Smarty extends Smarty_Internal_TemplateBase
/** /**
* <<magic>> Generic getter. * <<magic>> Generic getter.
*
* Calls the appropriate getter function. * Calls the appropriate getter function.
* Issues an E_USER_NOTICE if no valid getter is found. * Issues an E_USER_NOTICE if no valid getter is found.
* *
* @param string $name property name * @param string $name property name
*
* @return mixed * @return mixed
*/ */
public function __get($name) public function __get($name)
@ -676,13 +735,12 @@ class Smarty extends Smarty_Internal_TemplateBase
if (isset($allowed[$name])) { if (isset($allowed[$name])) {
return $this->{$allowed[$name]}(); return $this->{$allowed[$name]}();
} else { } else {
trigger_error('Undefined property: '. get_class($this) .'::$'. $name, E_USER_NOTICE); trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
} }
} }
/** /**
* <<magic>> Generic setter. * <<magic>> Generic setter.
*
* Calls the appropriate setter function. * Calls the appropriate setter function.
* Issues an E_USER_NOTICE if no valid setter is found. * Issues an E_USER_NOTICE if no valid setter is found.
* *
@ -710,6 +768,7 @@ class Smarty extends Smarty_Internal_TemplateBase
* Check if a template resource exists * Check if a template resource exists
* *
* @param string $resource_name template name * @param string $resource_name template name
*
* @return boolean status * @return boolean status
*/ */
public function templateExists($resource_name) public function templateExists($resource_name)
@ -727,8 +786,8 @@ class Smarty extends Smarty_Internal_TemplateBase
/** /**
* Returns a single or all global variables * Returns a single or all global variables
* *
* @param object $smarty
* @param string $varname variable name or null * @param string $varname variable name or null
*
* @return string variable value or or array of variables * @return string variable value or or array of variables
*/ */
public function getGlobal($varname = null) public function getGlobal($varname = null)
@ -754,6 +813,7 @@ class Smarty extends Smarty_Internal_TemplateBase
* *
* @param integer $exp_time expiration time * @param integer $exp_time expiration time
* @param string $type resource type * @param string $type resource type
*
* @return integer number of cache files deleted * @return integer number of cache files deleted
*/ */
public function clearAllCache($exp_time = null, $type = null) public function clearAllCache($exp_time = null, $type = null)
@ -773,6 +833,7 @@ class Smarty extends Smarty_Internal_TemplateBase
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer $exp_time expiration time * @param integer $exp_time expiration time
* @param string $type resource type * @param string $type resource type
*
* @return integer number of cache files deleted * @return integer number of cache files deleted
*/ */
public function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) public function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null)
@ -788,6 +849,7 @@ class Smarty extends Smarty_Internal_TemplateBase
* Loads security class and enables security * Loads security class and enables security
* *
* @param string|Smarty_Security $security_class if a string is used, it must be class-name * @param string|Smarty_Security $security_class if a string is used, it must be class-name
*
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
* @throws SmartyException when an invalid class name is provided * @throws SmartyException when an invalid class name is provided
*/ */
@ -816,6 +878,7 @@ class Smarty extends Smarty_Internal_TemplateBase
/** /**
* Disable security * Disable security
*
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
*/ */
public function disableSecurity() public function disableSecurity()
@ -829,13 +892,14 @@ class Smarty extends Smarty_Internal_TemplateBase
* Set template directory * Set template directory
* *
* @param string|array $template_dir directory(s) of template sources * @param string|array $template_dir directory(s) of template sources
*
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
*/ */
public function setTemplateDir($template_dir) public function setTemplateDir($template_dir)
{ {
$this->template_dir = array(); $this->template_dir = array();
foreach ((array) $template_dir as $k => $v) { foreach ((array) $template_dir as $k => $v) {
$this->template_dir[$k] = rtrim($v, '/\\') . DS; $this->template_dir[$k] = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS;
} }
$this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir); $this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir);
@ -848,30 +912,35 @@ class Smarty extends Smarty_Internal_TemplateBase
* *
* @param string|array $template_dir directory(s) of template sources * @param string|array $template_dir directory(s) of template sources
* @param string $key of the array element to assign the template dir to * @param string $key of the array element to assign the template dir to
*
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
* @throws SmartyException when the given template directory is not valid * @throws SmartyException when the given template directory is not valid
*/ */
public function addTemplateDir($template_dir, $key=null) public function addTemplateDir($template_dir, $key = null)
{ {
// make sure we're dealing with an array // make sure we're dealing with an array
$this->template_dir = (array) $this->template_dir; $this->template_dir = (array) $this->template_dir;
if (is_array($template_dir)) { if (is_array($template_dir)) {
foreach ($template_dir as $k => $v) { foreach ($template_dir as $k => $v) {
$v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS;
if (is_int($k)) { if (is_int($k)) {
// indexes are not merged but appended // indexes are not merged but appended
$this->template_dir[] = rtrim($v, '/\\') . DS; $this->template_dir[] = $v;
} else { } else {
// string indexes are overridden // string indexes are overridden
$this->template_dir[$k] = rtrim($v, '/\\') . DS; $this->template_dir[$k] = $v;
} }
} }
} elseif ($key !== null) { } else {
$v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($template_dir, '/\\')) . DS;
if ($key !== null) {
// override directory at specified index // override directory at specified index
$this->template_dir[$key] = rtrim($template_dir, '/\\') . DS; $this->template_dir[$key] = $v;
} else { } else {
// append new directory // append new directory
$this->template_dir[] = rtrim($template_dir, '/\\') . DS; $this->template_dir[] = $v;
}
} }
$this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir); $this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir);
@ -881,10 +950,11 @@ class Smarty extends Smarty_Internal_TemplateBase
/** /**
* Get template directories * Get template directories
* *
* @param mixed index of directory to get, null to get all * @param mixed $index index of directory to get, null to get all
*
* @return array|string list of template directories, or directory of $index * @return array|string list of template directories, or directory of $index
*/ */
public function getTemplateDir($index=null) public function getTemplateDir($index = null)
{ {
if ($index !== null) { if ($index !== null) {
return isset($this->template_dir[$index]) ? $this->template_dir[$index] : null; return isset($this->template_dir[$index]) ? $this->template_dir[$index] : null;
@ -896,14 +966,15 @@ class Smarty extends Smarty_Internal_TemplateBase
/** /**
* Set config directory * Set config directory
* *
* @param string|array $template_dir directory(s) of configuration sources * @param $config_dir
*
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
*/ */
public function setConfigDir($config_dir) public function setConfigDir($config_dir)
{ {
$this->config_dir = array(); $this->config_dir = array();
foreach ((array) $config_dir as $k => $v) { foreach ((array) $config_dir as $k => $v) {
$this->config_dir[$k] = rtrim($v, '/\\') . DS; $this->config_dir[$k] = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS;
} }
$this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir); $this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir);
@ -915,30 +986,35 @@ class Smarty extends Smarty_Internal_TemplateBase
* Add config directory(s) * Add config directory(s)
* *
* @param string|array $config_dir directory(s) of config sources * @param string|array $config_dir directory(s) of config sources
* @param string key of the array element to assign the config dir to * @param mixed $key key of the array element to assign the config dir to
*
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
*/ */
public function addConfigDir($config_dir, $key=null) public function addConfigDir($config_dir, $key = null)
{ {
// make sure we're dealing with an array // make sure we're dealing with an array
$this->config_dir = (array) $this->config_dir; $this->config_dir = (array) $this->config_dir;
if (is_array($config_dir)) { if (is_array($config_dir)) {
foreach ($config_dir as $k => $v) { foreach ($config_dir as $k => $v) {
$v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS;
if (is_int($k)) { if (is_int($k)) {
// indexes are not merged but appended // indexes are not merged but appended
$this->config_dir[] = rtrim($v, '/\\') . DS; $this->config_dir[] = $v;
} else { } else {
// string indexes are overridden // string indexes are overridden
$this->config_dir[$k] = rtrim($v, '/\\') . DS; $this->config_dir[$k] = $v;
} }
} }
} elseif ($key !== null) { } else {
$v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($config_dir, '/\\')) . DS;
if ($key !== null) {
// override directory at specified index // override directory at specified index
$this->config_dir[$key] = rtrim($config_dir, '/\\') . DS; $this->config_dir[$key] = rtrim($v, '/\\') . DS;
} else { } else {
// append new directory // append new directory
$this->config_dir[] = rtrim($config_dir, '/\\') . DS; $this->config_dir[] = rtrim($v, '/\\') . DS;
}
} }
$this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir); $this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir);
@ -949,10 +1025,11 @@ class Smarty extends Smarty_Internal_TemplateBase
/** /**
* Get config directory * Get config directory
* *
* @param mixed index of directory to get, null to get all * @param mixed $index index of directory to get, null to get all
*
* @return array|string configuration directory * @return array|string configuration directory
*/ */
public function getConfigDir($index=null) public function getConfigDir($index = null)
{ {
if ($index !== null) { if ($index !== null) {
return isset($this->config_dir[$index]) ? $this->config_dir[$index] : null; return isset($this->config_dir[$index]) ? $this->config_dir[$index] : null;
@ -965,6 +1042,7 @@ class Smarty extends Smarty_Internal_TemplateBase
* Set plugins directory * Set plugins directory
* *
* @param string|array $plugins_dir directory(s) of plugins * @param string|array $plugins_dir directory(s) of plugins
*
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
*/ */
public function setPluginsDir($plugins_dir) public function setPluginsDir($plugins_dir)
@ -980,8 +1058,8 @@ class Smarty extends Smarty_Internal_TemplateBase
/** /**
* Adds directory of plugin files * Adds directory of plugin files
* *
* @param object $smarty * @param $plugins_dir
* @param string $ |array $ plugins folder *
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
*/ */
public function addPluginsDir($plugins_dir) public function addPluginsDir($plugins_dir)
@ -1023,6 +1101,7 @@ class Smarty extends Smarty_Internal_TemplateBase
* Set compile directory * Set compile directory
* *
* @param string $compile_dir directory to store compiled templates in * @param string $compile_dir directory to store compiled templates in
*
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
*/ */
public function setCompileDir($compile_dir) public function setCompileDir($compile_dir)
@ -1049,6 +1128,7 @@ class Smarty extends Smarty_Internal_TemplateBase
* Set cache directory * Set cache directory
* *
* @param string $cache_dir directory to store cached templates in * @param string $cache_dir directory to store cached templates in
*
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
*/ */
public function setCacheDir($cache_dir) public function setCacheDir($cache_dir)
@ -1075,6 +1155,7 @@ class Smarty extends Smarty_Internal_TemplateBase
* Set default modifiers * Set default modifiers
* *
* @param array|string $modifiers modifier or list of modifiers to set * @param array|string $modifiers modifier or list of modifiers to set
*
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
*/ */
public function setDefaultModifiers($modifiers) public function setDefaultModifiers($modifiers)
@ -1088,6 +1169,7 @@ class Smarty extends Smarty_Internal_TemplateBase
* Add default modifiers * Add default modifiers
* *
* @param array|string $modifiers modifier or list of modifiers to add * @param array|string $modifiers modifier or list of modifiers to add
*
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
*/ */
public function addDefaultModifiers($modifiers) public function addDefaultModifiers($modifiers)
@ -1111,15 +1193,15 @@ class Smarty extends Smarty_Internal_TemplateBase
return $this->default_modifiers; return $this->default_modifiers;
} }
/** /**
* Set autoload filters * Set autoload filters
* *
* @param array $filters filters to load automatically * @param array $filters filters to load automatically
* @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types * @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types
*
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
*/ */
public function setAutoloadFilters($filters, $type=null) public function setAutoloadFilters($filters, $type = null)
{ {
if ($type !== null) { if ($type !== null) {
$this->autoload_filters[$type] = (array) $filters; $this->autoload_filters[$type] = (array) $filters;
@ -1135,9 +1217,10 @@ class Smarty extends Smarty_Internal_TemplateBase
* *
* @param array $filters filters to load automatically * @param array $filters filters to load automatically
* @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types * @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types
*
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
*/ */
public function addAutoloadFilters($filters, $type=null) public function addAutoloadFilters($filters, $type = null)
{ {
if ($type !== null) { if ($type !== null) {
if (!empty($this->autoload_filters[$type])) { if (!empty($this->autoload_filters[$type])) {
@ -1162,9 +1245,10 @@ class Smarty extends Smarty_Internal_TemplateBase
* Get autoload filters * Get autoload filters
* *
* @param string $type type of filter to get autoloads for. Defaults to all autoload filters * @param string $type type of filter to get autoloads for. Defaults to all autoload filters
*
* @return array array( 'type1' => array( 'filter1', 'filter2', … ) ) or array( 'filter1', 'filter2', …) if $type was specified * @return array array( 'type1' => array( 'filter1', 'filter2', … ) ) or array( 'filter1', 'filter2', …) if $type was specified
*/ */
public function getAutoloadFilters($type=null) public function getAutoloadFilters($type = null)
{ {
if ($type !== null) { if ($type !== null) {
return isset($this->autoload_filters[$type]) ? $this->autoload_filters[$type] : array(); return isset($this->autoload_filters[$type]) ? $this->autoload_filters[$type] : array();
@ -1187,6 +1271,7 @@ class Smarty extends Smarty_Internal_TemplateBase
* set the debug template * set the debug template
* *
* @param string $tpl_name * @param string $tpl_name
*
* @return Smarty current Smarty instance for chaining * @return Smarty current Smarty instance for chaining
* @throws SmartyException if file is not readable * @throws SmartyException if file is not readable
*/ */
@ -1208,15 +1293,16 @@ class Smarty extends Smarty_Internal_TemplateBase
* @param mixed $compile_id compile id to be used with this template * @param mixed $compile_id compile id to be used with this template
* @param object $parent next higher level of Smarty variables * @param object $parent next higher level of Smarty variables
* @param boolean $do_clone flag is Smarty object shall be cloned * @param boolean $do_clone flag is Smarty object shall be cloned
*
* @return object template object * @return object template object
*/ */
public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true) public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true)
{ {
if (!empty($cache_id) && (is_object($cache_id) || is_array($cache_id))) { if ($cache_id !== null && (is_object($cache_id) || is_array($cache_id))) {
$parent = $cache_id; $parent = $cache_id;
$cache_id = null; $cache_id = null;
} }
if (!empty($parent) && is_array($parent)) { if ($parent !== null && is_array($parent)) {
$data = $parent; $data = $parent;
$parent = null; $parent = null;
} else { } else {
@ -1267,7 +1353,6 @@ class Smarty extends Smarty_Internal_TemplateBase
return $tpl; return $tpl;
} }
/** /**
* Takes unknown classes and loads plugin files for them * Takes unknown classes and loads plugin files for them
* class name format: Smarty_PluginType_PluginName * class name format: Smarty_PluginType_PluginName
@ -1275,6 +1360,8 @@ class Smarty extends Smarty_Internal_TemplateBase
* *
* @param string $plugin_name class plugin name to load * @param string $plugin_name class plugin name to load
* @param bool $check check if already loaded * @param bool $check check if already loaded
*
* @throws SmartyException
* @return string |boolean filepath of loaded file or false * @return string |boolean filepath of loaded file or false
*/ */
public function loadPlugin($plugin_name, $check = true) public function loadPlugin($plugin_name, $check = true)
@ -1289,15 +1376,12 @@ class Smarty extends Smarty_Internal_TemplateBase
// count($_name_parts) < 3 === !isset($_name_parts[2]) // count($_name_parts) < 3 === !isset($_name_parts[2])
if (!isset($_name_parts[2]) || strtolower($_name_parts[0]) !== 'smarty') { if (!isset($_name_parts[2]) || strtolower($_name_parts[0]) !== 'smarty') {
throw new SmartyException("plugin {$plugin_name} is not a valid name format"); throw new SmartyException("plugin {$plugin_name} is not a valid name format");
return false;
} }
// if type is "internal", get plugin from sysplugins // if type is "internal", get plugin from sysplugins
if (strtolower($_name_parts[1]) == 'internal') { if (strtolower($_name_parts[1]) == 'internal') {
$file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php'; $file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php';
if (file_exists($file)) { if (isset(self::$_is_file_cache[$file]) ? self::$_is_file_cache[$file] : self::$_is_file_cache[$file] = is_file($file)) {
require_once($file); require_once($file);
return $file; return $file;
} else { } else {
return false; return false;
@ -1315,9 +1399,8 @@ class Smarty extends Smarty_Internal_TemplateBase
$_plugin_dir . strtolower($_plugin_filename), $_plugin_dir . strtolower($_plugin_filename),
); );
foreach ($names as $file) { foreach ($names as $file) {
if (file_exists($file)) { if (isset(self::$_is_file_cache[$file]) ? self::$_is_file_cache[$file] : self::$_is_file_cache[$file] = is_file($file)) {
require_once($file); require_once($file);
return $file; return $file;
} }
if ($this->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) { if ($this->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) {
@ -1347,6 +1430,7 @@ class Smarty extends Smarty_Internal_TemplateBase
* @param bool $force_compile force all to recompile * @param bool $force_compile force all to recompile
* @param int $time_limit * @param int $time_limit
* @param int $max_errors * @param int $max_errors
*
* @return integer number of template files recompiled * @return integer number of template files recompiled
*/ */
public function compileAllTemplates($extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null) public function compileAllTemplates($extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
@ -1361,6 +1445,7 @@ class Smarty extends Smarty_Internal_TemplateBase
* @param bool $force_compile force all to recompile * @param bool $force_compile force all to recompile
* @param int $time_limit * @param int $time_limit
* @param int $max_errors * @param int $max_errors
*
* @return integer number of template files recompiled * @return integer number of template files recompiled
*/ */
public function compileAllConfig($extension = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null) public function compileAllConfig($extension = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null)
@ -1374,6 +1459,7 @@ class Smarty extends Smarty_Internal_TemplateBase
* @param string $resource_name template name * @param string $resource_name template name
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer $exp_time expiration time * @param integer $exp_time expiration time
*
* @return integer number of template files deleted * @return integer number of template files deleted
*/ */
public function clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) public function clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null)
@ -1381,11 +1467,11 @@ class Smarty extends Smarty_Internal_TemplateBase
return Smarty_Internal_Utility::clearCompiledTemplate($resource_name, $compile_id, $exp_time, $this); return Smarty_Internal_Utility::clearCompiledTemplate($resource_name, $compile_id, $exp_time, $this);
} }
/** /**
* Return array of tag/attributes of all tags used by an template * Return array of tag/attributes of all tags used by an template
* *
* @param object $templae template object * @param Smarty_Internal_Template $template
*
* @return array of tag/attributes * @return array of tag/attributes
*/ */
public function getTags(Smarty_Internal_Template $template) public function getTags(Smarty_Internal_Template $template)
@ -1397,9 +1483,10 @@ class Smarty extends Smarty_Internal_TemplateBase
* Run installation test * Run installation test
* *
* @param array $errors Array to write errors into, rather than outputting them * @param array $errors Array to write errors into, rather than outputting them
*
* @return boolean true if setup is fine, false if something is wrong * @return boolean true if setup is fine, false if something is wrong
*/ */
public function testInstall(&$errors=null) public function testInstall(&$errors = null)
{ {
return Smarty_Internal_Utility::testInstall($this, $errors); return Smarty_Internal_Utility::testInstall($this, $errors);
} }
@ -1408,7 +1495,13 @@ class Smarty extends Smarty_Internal_TemplateBase
* Error Handler to mute expected messages * Error Handler to mute expected messages
* *
* @link http://php.net/set_error_handler * @link http://php.net/set_error_handler
*
* @param integer $errno Error level * @param integer $errno Error level
* @param $errstr
* @param $errfile
* @param $errline
* @param $errcontext
*
* @return boolean * @return boolean
*/ */
public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext)
@ -1511,6 +1604,7 @@ if (Smarty::$_CHARSET !== 'UTF-8') {
/** /**
* Smarty exception class * Smarty exception class
*
* @package Smarty * @package Smarty
*/ */
class SmartyException extends Exception class SmartyException extends Exception
@ -1525,6 +1619,7 @@ class SmartyException extends Exception
/** /**
* Smarty compiler exception class * Smarty compiler exception class
*
* @package Smarty * @package Smarty
*/ */
class SmartyCompilerException extends SmartyException class SmartyCompilerException extends SmartyException
@ -1533,23 +1628,28 @@ class SmartyCompilerException extends SmartyException
{ {
return ' --> Smarty Compiler: ' . $this->message . ' <-- '; return ' --> Smarty Compiler: ' . $this->message . ' <-- ';
} }
/** /**
* The line number of the template error * The line number of the template error
*
* @type int|null * @type int|null
*/ */
public $line = null; public $line = null;
/** /**
* The template source snippet relating to the error * The template source snippet relating to the error
*
* @type string|null * @type string|null
*/ */
public $source = null; public $source = null;
/** /**
* The raw text of the error message * The raw text of the error message
*
* @type string|null * @type string|null
*/ */
public $desc = null; public $desc = null;
/** /**
* The resource identifier or template name * The resource identifier or template name
*
* @type string|null * @type string|null
*/ */
public $template = null; public $template = null;

@ -3,21 +3,17 @@
* Project: Smarty: the PHP compiling template engine * Project: Smarty: the PHP compiling template engine
* File: SmartyBC.class.php * File: SmartyBC.class.php
* SVN: $Id$ * SVN: $Id$
*
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either * License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version. * version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details. * Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software * License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* For questions, help, comments, discussion, etc., please join the * For questions, help, comments, discussion, etc., please join the
* Smarty mailing list. Send a blank e-mail to * Smarty mailing list. Send a blank e-mail to
* smarty-discussion-subscribe@googlegroups.com * smarty-discussion-subscribe@googlegroups.com
@ -32,7 +28,7 @@
/** /**
* @ignore * @ignore
*/ */
require(dirname(__FILE__) . '/Smarty.class.php'); require_once(dirname(__FILE__) . '/Smarty.class.php');
/** /**
* Smarty Backward Compatability Wrapper Class * Smarty Backward Compatability Wrapper Class
@ -43,6 +39,7 @@ class SmartyBC extends Smarty
{ {
/** /**
* Smarty 2 BC * Smarty 2 BC
*
* @var string * @var string
*/ */
public $_version = self::SMARTY_VERSION; public $_version = self::SMARTY_VERSION;
@ -52,7 +49,7 @@ class SmartyBC extends Smarty
* *
* @param array $options options to set during initialization, e.g. array( 'forceCompile' => false ) * @param array $options options to set during initialization, e.g. array( 'forceCompile' => false )
*/ */
public function __construct(array $options=array()) public function __construct(array $options = array())
{ {
parent::__construct($options); parent::__construct($options);
// register {php} tag // register {php} tag
@ -100,7 +97,7 @@ class SmartyBC extends Smarty
* @param bool $cacheable * @param bool $cacheable
* @param mixed $cache_attrs * @param mixed $cache_attrs
*/ */
public function register_function($function, $function_impl, $cacheable=true, $cache_attrs=null) public function register_function($function, $function_impl, $cacheable = true, $cache_attrs = null)
{ {
$this->registerPlugin('function', $function, $function_impl, $cacheable, $cache_attrs); $this->registerPlugin('function', $function, $function_impl, $cacheable, $cache_attrs);
} }
@ -122,7 +119,10 @@ class SmartyBC extends Smarty
* @param object $object_impl the referenced PHP object to register * @param object $object_impl the referenced PHP object to register
* @param array $allowed list of allowed methods (empty = all) * @param array $allowed list of allowed methods (empty = all)
* @param boolean $smarty_args smarty argument format, else traditional * @param boolean $smarty_args smarty argument format, else traditional
* @param array $block_functs list of methods that are block format * @param array $block_methods list of methods that are block format
*
* @throws SmartyException
* @internal param array $block_functs list of methods that are block format
*/ */
public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array())
{ {
@ -149,7 +149,7 @@ class SmartyBC extends Smarty
* @param bool $cacheable * @param bool $cacheable
* @param mixed $cache_attrs * @param mixed $cache_attrs
*/ */
public function register_block($block, $block_impl, $cacheable=true, $cache_attrs=null) public function register_block($block, $block_impl, $cacheable = true, $cache_attrs = null)
{ {
$this->registerPlugin('block', $block, $block_impl, $cacheable, $cache_attrs); $this->registerPlugin('block', $block, $block_impl, $cacheable, $cache_attrs);
} }
@ -171,7 +171,7 @@ class SmartyBC extends Smarty
* @param string $function_impl name of PHP function to register * @param string $function_impl name of PHP function to register
* @param bool $cacheable * @param bool $cacheable
*/ */
public function register_compiler_function($function, $function_impl, $cacheable=true) public function register_compiler_function($function, $function_impl, $cacheable = true)
{ {
$this->registerPlugin('compiler', $function, $function_impl, $cacheable); $this->registerPlugin('compiler', $function, $function_impl, $cacheable);
} }
@ -309,6 +309,7 @@ class SmartyBC extends Smarty
* @param string $cache_id name of cache_id * @param string $cache_id name of cache_id
* @param string $compile_id name of compile_id * @param string $compile_id name of compile_id
* @param string $exp_time expiration time * @param string $exp_time expiration time
*
* @return boolean * @return boolean
*/ */
public function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null) public function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null)
@ -320,6 +321,7 @@ class SmartyBC extends Smarty
* clear the entire contents of cache (all templates) * clear the entire contents of cache (all templates)
* *
* @param string $exp_time expire time * @param string $exp_time expire time
*
* @return boolean * @return boolean
*/ */
public function clear_all_cache($exp_time = null) public function clear_all_cache($exp_time = null)
@ -333,6 +335,7 @@ class SmartyBC extends Smarty
* @param string $tpl_file name of template file * @param string $tpl_file name of template file
* @param string $cache_id * @param string $cache_id
* @param string $compile_id * @param string $compile_id
*
* @return boolean * @return boolean
*/ */
public function is_cached($tpl_file, $cache_id = null, $compile_id = null) public function is_cached($tpl_file, $cache_id = null, $compile_id = null)
@ -356,6 +359,7 @@ class SmartyBC extends Smarty
* @param string $tpl_file * @param string $tpl_file
* @param string $compile_id * @param string $compile_id
* @param string $exp_time * @param string $exp_time
*
* @return boolean results of {@link smarty_core_rm_auto()} * @return boolean results of {@link smarty_core_rm_auto()}
*/ */
public function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null) public function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null)
@ -367,6 +371,7 @@ class SmartyBC extends Smarty
* Checks whether requested template exists. * Checks whether requested template exists.
* *
* @param string $tpl_file * @param string $tpl_file
*
* @return boolean * @return boolean
*/ */
public function template_exists($tpl_file) public function template_exists($tpl_file)
@ -378,9 +383,10 @@ class SmartyBC extends Smarty
* Returns an array containing template variables * Returns an array containing template variables
* *
* @param string $name * @param string $name
*
* @return array * @return array
*/ */
public function get_template_vars($name=null) public function get_template_vars($name = null)
{ {
return $this->getTemplateVars($name); return $this->getTemplateVars($name);
} }
@ -389,9 +395,10 @@ class SmartyBC extends Smarty
* Returns an array containing config variables * Returns an array containing config variables
* *
* @param string $name * @param string $name
*
* @return array * @return array
*/ */
public function get_config_vars($name=null) public function get_config_vars($name = null)
{ {
return $this->getConfigVars($name); return $this->getConfigVars($name);
} }
@ -412,6 +419,7 @@ class SmartyBC extends Smarty
* return a reference to a registered object * return a reference to a registered object
* *
* @param string $name * @param string $name
*
* @return object * @return object
*/ */
public function get_registered_object($name) public function get_registered_object($name)
@ -439,7 +447,6 @@ class SmartyBC extends Smarty
{ {
trigger_error("Smarty error: $error_msg", $error_type); trigger_error("Smarty error: $error_msg", $error_type);
} }
} }
/** /**
@ -449,6 +456,7 @@ class SmartyBC extends Smarty
* @param string $content contents of the block * @param string $content contents of the block
* @param object $template template object * @param object $template template object
* @param boolean &$repeat repeat flag * @param boolean &$repeat repeat flag
*
* @return string content re-formatted * @return string content re-formatted
*/ */
function smarty_php_tag($params, $content, $template, &$repeat) function smarty_php_tag($params, $content, $template, &$repeat)

@ -1,19 +1,19 @@
{capture name='_smarty_debug' assign=debug_output} {capture name='_smarty_debug' assign=debug_output}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head> <head>
<title>Smarty Debug Console</title> <title>Smarty Debug Console</title>
<style type="text/css"> <style type="text/css">
{literal} {literal}
body, h1, h2, td, th, p { body, h1, h2, td, th, p {
font-family: sans-serif; font-family: sans-serif;
font-weight: normal; font-weight: normal;
font-size: 0.9em; font-size: 0.9em;
margin: 1px; margin: 1px;
padding: 0; padding: 0;
} }
h1 { h1 {
margin: 0; margin: 0;
text-align: left; text-align: left;
padding: 2px; padding: 2px;
@ -23,111 +23,115 @@ h1 {
font-size: 1.2em; font-size: 1.2em;
} }
h2 { h2 {
background-color: #9B410E; background-color: #9B410E;
color: white; color: white;
text-align: left; text-align: left;
font-weight: bold; font-weight: bold;
padding: 2px; padding: 2px;
border-top: 1px solid black; border-top: 1px solid black;
} }
body { body {
background: black; background: black;
} }
p, table, div { p, table, div {
background: #f0ead8; background: #f0ead8;
} }
p { p {
margin: 0; margin: 0;
font-style: italic; font-style: italic;
text-align: center; text-align: center;
} }
table { table {
width: 100%; width: 100%;
} }
th, td { th, td {
font-family: monospace; font-family: monospace;
vertical-align: top; vertical-align: top;
text-align: left; text-align: left;
width: 50%; width: 50%;
} }
td { td {
color: green; color: green;
} }
.odd { .odd {
background-color: #eeeeee; background-color: #eeeeee;
} }
.even { .even {
background-color: #fafafa; background-color: #fafafa;
} }
.exectime { .exectime {
font-size: 0.8em; font-size: 0.8em;
font-style: italic; font-style: italic;
} }
#table_assigned_vars th { #table_assigned_vars th {
color: blue; color: blue;
} }
#table_config_vars th { #table_config_vars th {
color: maroon; color: maroon;
} }
{/literal}
</style>
</head>
<body>
<h1>Smarty Debug Console - {if isset($template_name)}{$template_name|debug_print_var nofilter}{else}Total Time {$execution_time|string_format:"%.5f"}{/if}</h1> {/literal}
</style>
</head>
<body>
{if !empty($template_data)} <h1>Smarty Debug Console
<h2>included templates &amp; config files (load time in seconds)</h2> - {if isset($template_name)}{$template_name|debug_print_var nofilter}{else}Total Time {$execution_time|string_format:"%.5f"}{/if}</h1>
<div> {if !empty($template_data)}
{foreach $template_data as $template} <h2>included templates &amp; config files (load time in seconds)</h2>
<div>
{foreach $template_data as $template}
<font color=brown>{$template.name}</font> <font color=brown>{$template.name}</font>
<span class="exectime"> <span class="exectime">
(compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"}) (compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"}
)
</span> </span>
<br> <br>
{/foreach} {/foreach}
</div> </div>
{/if} {/if}
<h2>assigned template variables</h2> <h2>assigned template variables</h2>
<table id="table_assigned_vars"> <table id="table_assigned_vars">
{foreach $assigned_vars as $vars} {foreach $assigned_vars as $vars}
<tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}"> <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
<th>${$vars@key|escape:'html'}</th> <th>${$vars@key|escape:'html'}</th>
<td>{$vars|debug_print_var nofilter}</td></tr> <td>{$vars|debug_print_var nofilter}</td>
</tr>
{/foreach} {/foreach}
</table> </table>
<h2>assigned config file variables (outer template scope)</h2> <h2>assigned config file variables (outer template scope)</h2>
<table id="table_config_vars"> <table id="table_config_vars">
{foreach $config_vars as $vars} {foreach $config_vars as $vars}
<tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}"> <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
<th>{$vars@key|escape:'html'}</th> <th>{$vars@key|escape:'html'}</th>
<td>{$vars|debug_print_var nofilter}</td></tr> <td>{$vars|debug_print_var nofilter}</td>
</tr>
{/foreach} {/foreach}
</table> </table>
</body> </body>
</html> </html>
{/capture} {/capture}
<script type="text/javascript"> <script type="text/javascript">
{$id = $template_name|default:''|md5} {$id = $template_name|default:''|md5}
_smarty_console = window.open("","console{$id}","width=680,height=600,resizable,scrollbars=yes"); _smarty_console = window.open("", "console{$id}", "width=680,height=600,resizable,scrollbars=yes");
_smarty_console.document.write("{$debug_output|escape:'javascript' nofilter}"); _smarty_console.document.write("{$debug_output|escape:'javascript' nofilter}");
_smarty_console.document.close(); _smarty_console.document.close();
</script> </script>

@ -8,7 +8,6 @@
/** /**
* Smarty {textformat}{/textformat} block plugin * Smarty {textformat}{/textformat} block plugin
*
* Type: block function<br> * Type: block function<br>
* Name: textformat<br> * Name: textformat<br>
* Purpose: format text a certain way with preset styles * Purpose: format text a certain way with preset styles
@ -25,10 +24,12 @@
* *
* @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat} * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat}
* (Smarty online manual) * (Smarty online manual)
*
* @param array $params parameters * @param array $params parameters
* @param string $content contents of the block * @param string $content contents of the block
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
* @param boolean &$repeat repeat flag * @param boolean &$repeat repeat flag
*
* @return string content re-formatted * @return string content re-formatted
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*/ */
@ -76,7 +77,6 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
} }
// split into paragraphs // split into paragraphs
$_paragraphs = preg_split('![\r\n]{2}!', $content); $_paragraphs = preg_split('![\r\n]{2}!', $content);
$_output = '';
foreach ($_paragraphs as &$_paragraph) { foreach ($_paragraphs as &$_paragraph) {
if (!$_paragraph) { if (!$_paragraph) {

@ -1,13 +1,13 @@
<?php <?php
/** /**
* Smarty plugin * Smarty plugin
*
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {counter} function plugin * Smarty {counter} function plugin
*
* Type: function<br> * Type: function<br>
* Name: counter<br> * Name: counter<br>
* Purpose: print out a counter value * Purpose: print out a counter value
@ -15,8 +15,10 @@
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @link http://www.smarty.net/manual/en/language.function.counter.php {counter} * @link http://www.smarty.net/manual/en/language.function.counter.php {counter}
* (Smarty online manual) * (Smarty online manual)
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
*
* @return string|null * @return string|null
*/ */
function smarty_function_counter($params, $template) function smarty_function_counter($params, $template)
@ -26,10 +28,10 @@ function smarty_function_counter($params, $template)
$name = (isset($params['name'])) ? $params['name'] : 'default'; $name = (isset($params['name'])) ? $params['name'] : 'default';
if (!isset($counters[$name])) { if (!isset($counters[$name])) {
$counters[$name] = array( $counters[$name] = array(
'start'=>1, 'start' => 1,
'skip'=>1, 'skip' => 1,
'direction'=>'up', 'direction' => 'up',
'count'=>1 'count' => 1
); );
} }
$counter =& $counters[$name]; $counter =& $counters[$name];
@ -66,11 +68,11 @@ function smarty_function_counter($params, $template)
$counter['direction'] = $params['direction']; $counter['direction'] = $params['direction'];
} }
if ($counter['direction'] == "down") if ($counter['direction'] == "down") {
$counter['count'] -= $counter['skip']; $counter['count'] -= $counter['skip'];
else } else {
$counter['count'] += $counter['skip']; $counter['count'] += $counter['skip'];
}
return $retval; return $retval;
} }

@ -8,7 +8,6 @@
/** /**
* Smarty {cycle} function plugin * Smarty {cycle} function plugin
*
* Type: function<br> * Type: function<br>
* Name: cycle<br> * Name: cycle<br>
* Date: May 3, 2002<br> * Date: May 3, 2002<br>
@ -38,8 +37,10 @@
* @author credit to Gerard <gerard@interfold.com> * @author credit to Gerard <gerard@interfold.com>
* @author credit to Jason Sweat <jsweat_php@yahoo.com> * @author credit to Jason Sweat <jsweat_php@yahoo.com>
* @version 1.3 * @version 1.3
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
*
* @return string|null * @return string|null
*/ */
@ -59,8 +60,9 @@ function smarty_function_cycle($params, $template)
return; return;
} }
} else { } else {
if(isset($cycle_vars[$name]['values']) if (isset($cycle_vars[$name]['values'])
&& $cycle_vars[$name]['values'] != $params['values'] ) { && $cycle_vars[$name]['values'] != $params['values']
) {
$cycle_vars[$name]['index'] = 0; $cycle_vars[$name]['index'] = 0;
} }
$cycle_vars[$name]['values'] = $params['values']; $cycle_vars[$name]['values'] = $params['values'];
@ -75,10 +77,10 @@ function smarty_function_cycle($params, $template)
if (is_array($cycle_vars[$name]['values'])) { if (is_array($cycle_vars[$name]['values'])) {
$cycle_array = $cycle_vars[$name]['values']; $cycle_array = $cycle_vars[$name]['values'];
} else { } else {
$cycle_array = explode($cycle_vars[$name]['delimiter'],$cycle_vars[$name]['values']); $cycle_array = explode($cycle_vars[$name]['delimiter'], $cycle_vars[$name]['values']);
} }
if (!isset($cycle_vars[$name]['index']) || $reset ) { if (!isset($cycle_vars[$name]['index']) || $reset) {
$cycle_vars[$name]['index'] = 0; $cycle_vars[$name]['index'] = 0;
} }
@ -94,10 +96,10 @@ function smarty_function_cycle($params, $template)
} }
if ($advance) { if ($advance) {
if ( $cycle_vars[$name]['index'] >= count($cycle_array) -1 ) { if ($cycle_vars[$name]['index'] >= count($cycle_array) - 1) {
$cycle_vars[$name]['index'] = 0; $cycle_vars[$name]['index'] = 0;
} else { } else {
$cycle_vars[$name]['index']++; $cycle_vars[$name]['index'] ++;
} }
} }

@ -8,7 +8,6 @@
/** /**
* Smarty {fetch} plugin * Smarty {fetch} plugin
*
* Type: function<br> * Type: function<br>
* Name: fetch<br> * Name: fetch<br>
* Purpose: fetch file, web or ftp data and display results * Purpose: fetch file, web or ftp data and display results
@ -16,14 +15,17 @@
* @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch} * @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch}
* (Smarty online manual) * (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
*
* @throws SmartyException
* @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable * @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable
*/ */
function smarty_function_fetch($params, $template) function smarty_function_fetch($params, $template)
{ {
if (empty($params['file'])) { if (empty($params['file'])) {
trigger_error("[plugin] fetch parameter 'file' cannot be empty",E_USER_NOTICE); trigger_error("[plugin] fetch parameter 'file' cannot be empty", E_USER_NOTICE);
return; return;
} }
@ -60,7 +62,7 @@ function smarty_function_fetch($params, $template)
$host = $server_name = $uri_parts['host']; $host = $server_name = $uri_parts['host'];
$timeout = 30; $timeout = 30;
$accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*";
$agent = "Smarty Template Engine ". Smarty::SMARTY_VERSION; $agent = "Smarty Template Engine " . Smarty::SMARTY_VERSION;
$referer = ""; $referer = "";
$uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/'; $uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/';
$uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : ''; $uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : '';
@ -100,8 +102,8 @@ function smarty_function_fetch($params, $template)
break; break;
case "header": case "header":
if (!empty($param_value)) { if (!empty($param_value)) {
if (!preg_match('![\w\d-]+: .+!',$param_value)) { if (!preg_match('![\w\d-]+: .+!', $param_value)) {
trigger_error("[plugin] invalid header format '".$param_value."'",E_USER_NOTICE); trigger_error("[plugin] invalid header format '" . $param_value . "'", E_USER_NOTICE);
return; return;
} else { } else {
@ -118,7 +120,7 @@ function smarty_function_fetch($params, $template)
if (!preg_match('!\D!', $param_value)) { if (!preg_match('!\D!', $param_value)) {
$proxy_port = (int) $param_value; $proxy_port = (int) $param_value;
} else { } else {
trigger_error("[plugin] invalid value for attribute '".$param_key."'",E_USER_NOTICE); trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE);
return; return;
} }
@ -137,26 +139,26 @@ function smarty_function_fetch($params, $template)
if (!preg_match('!\D!', $param_value)) { if (!preg_match('!\D!', $param_value)) {
$timeout = (int) $param_value; $timeout = (int) $param_value;
} else { } else {
trigger_error("[plugin] invalid value for attribute '".$param_key."'",E_USER_NOTICE); trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE);
return; return;
} }
break; break;
default: default:
trigger_error("[plugin] unrecognized attribute '".$param_key."'",E_USER_NOTICE); trigger_error("[plugin] unrecognized attribute '" . $param_key . "'", E_USER_NOTICE);
return; return;
} }
} }
if (!empty($proxy_host) && !empty($proxy_port)) { if (!empty($proxy_host) && !empty($proxy_port)) {
$_is_proxy = true; $_is_proxy = true;
$fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout); $fp = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout);
} else { } else {
$fp = fsockopen($server_name,$port,$errno,$errstr,$timeout); $fp = fsockopen($server_name, $port, $errno, $errstr, $timeout);
} }
if (!$fp) { if (!$fp) {
trigger_error("[plugin] unable to fetch: $errstr ($errno)",E_USER_NOTICE); trigger_error("[plugin] unable to fetch: $errstr ($errno)", E_USER_NOTICE);
return; return;
} else { } else {
@ -179,35 +181,35 @@ function smarty_function_fetch($params, $template)
} }
if (isset($extra_headers) && is_array($extra_headers)) { if (isset($extra_headers) && is_array($extra_headers)) {
foreach ($extra_headers as $curr_header) { foreach ($extra_headers as $curr_header) {
fputs($fp, $curr_header."\r\n"); fputs($fp, $curr_header . "\r\n");
} }
} }
if (!empty($user) && !empty($pass)) { if (!empty($user) && !empty($pass)) {
fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n"); fputs($fp, "Authorization: BASIC " . base64_encode("$user:$pass") . "\r\n");
} }
fputs($fp, "\r\n"); fputs($fp, "\r\n");
while (!feof($fp)) { while (!feof($fp)) {
$content .= fgets($fp,4096); $content .= fgets($fp, 4096);
} }
fclose($fp); fclose($fp);
$csplit = preg_split("!\r\n\r\n!",$content,2); $csplit = preg_split("!\r\n\r\n!", $content, 2);
$content = $csplit[1]; $content = $csplit[1];
if (!empty($params['assign_headers'])) { if (!empty($params['assign_headers'])) {
$template->assign($params['assign_headers'],preg_split("!\r\n!",$csplit[0])); $template->assign($params['assign_headers'], preg_split("!\r\n!", $csplit[0]));
} }
} }
} else { } else {
trigger_error("[plugin fetch] unable to parse URL, check syntax",E_USER_NOTICE); trigger_error("[plugin fetch] unable to parse URL, check syntax", E_USER_NOTICE);
return; return;
} }
} else { } else {
$content = @file_get_contents($params['file']); $content = @file_get_contents($params['file']);
if ($content === false) { if ($content === false) {
throw new SmartyException("{fetch} cannot read resource '" . $params['file'] ."'"); throw new SmartyException("{fetch} cannot read resource '" . $params['file'] . "'");
} }
} }

@ -8,7 +8,6 @@
/** /**
* Smarty {html_checkboxes} function plugin * Smarty {html_checkboxes} function plugin
*
* File: function.html_checkboxes.php<br> * File: function.html_checkboxes.php<br>
* Type: function<br> * Type: function<br>
* Name: html_checkboxes<br> * Name: html_checkboxes<br>
@ -37,8 +36,10 @@
* @author Christopher Kvarme <christopher.kvarme@flashjab.com> * @author Christopher Kvarme <christopher.kvarme@flashjab.com>
* @author credits to Monte Ohrt <monte at ohrt dot com> * @author credits to Monte Ohrt <monte at ohrt dot com>
* @version 1.0 * @version 1.0
*
* @param array $params parameters * @param array $params parameters
* @param object $template template object * @param object $template template object
*
* @return string * @return string
* @uses smarty_function_escape_special_chars() * @uses smarty_function_escape_special_chars()
*/ */
@ -89,7 +90,7 @@ function smarty_function_html_checkboxes($params, $template)
if (method_exists($_sel, "__toString")) { if (method_exists($_sel, "__toString")) {
$_sel = smarty_function_escape_special_chars((string) $_sel->__toString()); $_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
} else { } else {
trigger_error("html_checkboxes: selected attribute contains an object of class '". get_class($_sel) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_checkboxes: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE);
continue; continue;
} }
} else { } else {
@ -101,7 +102,7 @@ function smarty_function_html_checkboxes($params, $template)
if (method_exists($_val, "__toString")) { if (method_exists($_val, "__toString")) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString()); $selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else { } else {
trigger_error("html_checkboxes: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_checkboxes: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
} }
} else { } else {
$selected = smarty_function_escape_special_chars((string) $_val); $selected = smarty_function_escape_special_chars((string) $_val);
@ -116,7 +117,8 @@ function smarty_function_html_checkboxes($params, $template)
case 'assign': case 'assign':
break; break;
case 'strict': break; case 'strict':
break;
case 'disabled': case 'disabled':
case 'readonly': case 'readonly':
@ -135,7 +137,7 @@ function smarty_function_html_checkboxes($params, $template)
default: default:
if (!is_array($_val)) { if (!is_array($_val)) {
$extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else { } else {
trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE); trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
} }
@ -143,17 +145,18 @@ function smarty_function_html_checkboxes($params, $template)
} }
} }
if (!isset($options) && !isset($values)) if (!isset($options) && !isset($values)) {
return ''; /* raise error here? */ return '';
} /* raise error here? */
$_html_result = array(); $_html_result = array();
if (isset($options)) { if (isset($options)) {
foreach ($options as $_key=>$_val) { foreach ($options as $_key => $_val) {
$_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape);
} }
} else { } else {
foreach ($values as $_i=>$_key) { foreach ($values as $_i => $_key) {
$_val = isset($output[$_i]) ? $output[$_i] : ''; $_val = isset($output[$_i]) ? $output[$_i] : '';
$_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape);
} }
@ -164,10 +167,9 @@ function smarty_function_html_checkboxes($params, $template)
} else { } else {
return implode("\n", $_html_result); return implode("\n", $_html_result);
} }
} }
function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape=true) function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape = true)
{ {
$_output = ''; $_output = '';
@ -175,7 +177,7 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte
if (method_exists($value, "__toString")) { if (method_exists($value, "__toString")) {
$value = (string) $value->__toString(); $value = (string) $value->__toString();
} else { } else {
trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
return ''; return '';
} }
@ -187,7 +189,7 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte
if (method_exists($output, "__toString")) { if (method_exists($output, "__toString")) {
$output = (string) $output->__toString(); $output = (string) $output->__toString();
} else { } else {
trigger_error("html_options: output is an object of class '". get_class($output) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE);
return ''; return '';
} }

@ -8,7 +8,6 @@
/** /**
* Smarty {html_image} function plugin * Smarty {html_image} function plugin
*
* Type: function<br> * Type: function<br>
* Name: html_image<br> * Name: html_image<br>
* Date: Feb 24, 2003<br> * Date: Feb 24, 2003<br>
@ -29,8 +28,11 @@
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author credits to Duda <duda@big.hu> * @author credits to Duda <duda@big.hu>
* @version 1.0 * @version 1.0
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
*
* @throws SmartyException
* @return string * @return string
* @uses smarty_function_escape_special_chars() * @uses smarty_function_escape_special_chars()
*/ */
@ -112,7 +114,7 @@ function smarty_function_html_image($params, $template)
} }
} else { } else {
// local file // local file
if (!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) { if (!$template->smarty->security_policy->isTrustedResourceDir($_image_path)) {
return; return;
} }
} }

@ -8,7 +8,6 @@
/** /**
* Smarty {html_options} function plugin * Smarty {html_options} function plugin
*
* Type: function<br> * Type: function<br>
* Name: html_options<br> * Name: html_options<br>
* Purpose: Prints the list of <option> tags generated from * Purpose: Prints the list of <option> tags generated from
@ -28,12 +27,13 @@
* (Smarty online manual) * (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author Ralf Strehle (minor optimization) <ralf dot strehle at yahoo dot de> * @author Ralf Strehle (minor optimization) <ralf dot strehle at yahoo dot de>
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object *
* @return string * @return string
* @uses smarty_function_escape_special_chars() * @uses smarty_function_escape_special_chars()
*/ */
function smarty_function_html_options($params, $template) function smarty_function_html_options($params)
{ {
require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
@ -72,7 +72,7 @@ function smarty_function_html_options($params, $template)
if (method_exists($_sel, "__toString")) { if (method_exists($_sel, "__toString")) {
$_sel = smarty_function_escape_special_chars((string) $_sel->__toString()); $_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
} else { } else {
trigger_error("html_options: selected attribute contains an object of class '". get_class($_sel) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_options: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE);
continue; continue;
} }
} else { } else {
@ -84,14 +84,15 @@ function smarty_function_html_options($params, $template)
if (method_exists($_val, "__toString")) { if (method_exists($_val, "__toString")) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString()); $selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else { } else {
trigger_error("html_options: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_options: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
} }
} else { } else {
$selected = smarty_function_escape_special_chars((string) $_val); $selected = smarty_function_escape_special_chars((string) $_val);
} }
break; break;
case 'strict': break; case 'strict':
break;
case 'disabled': case 'disabled':
case 'readonly': case 'readonly':
@ -139,8 +140,8 @@ function smarty_function_html_options($params, $template)
} }
if (!empty($name)) { if (!empty($name)) {
$_html_class = !empty($class) ? ' class="'.$class.'"' : ''; $_html_class = !empty($class) ? ' class="' . $class . '"' : '';
$_html_id = !empty($id) ? ' id="'.$id.'"' : ''; $_html_id = !empty($id) ? ' id="' . $id . '"' : '';
$_html_result = '<select name="' . $name . '"' . $_html_class . $_html_id . $extra . '>' . "\n" . $_html_result . '</select>' . "\n"; $_html_result = '<select name="' . $name . '"' . $_html_class . $_html_id . $extra . '>' . "\n" . $_html_result . '</select>' . "\n";
} }
@ -159,13 +160,13 @@ function smarty_function_html_options_optoutput($key, $value, $selected, $id, $c
} elseif ($_key === $selected) { } elseif ($_key === $selected) {
$_html_result .= ' selected="selected"'; $_html_result .= ' selected="selected"';
} }
$_html_class = !empty($class) ? ' class="'.$class.' option"' : ''; $_html_class = !empty($class) ? ' class="' . $class . ' option"' : '';
$_html_id = !empty($id) ? ' id="'.$id.'-'.$idx.'"' : ''; $_html_id = !empty($id) ? ' id="' . $id . '-' . $idx . '"' : '';
if (is_object($value)) { if (is_object($value)) {
if (method_exists($value, "__toString")) { if (method_exists($value, "__toString")) {
$value = smarty_function_escape_special_chars((string) $value->__toString()); $value = smarty_function_escape_special_chars((string) $value->__toString());
} else { } else {
trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
return ''; return '';
} }
@ -173,11 +174,11 @@ function smarty_function_html_options_optoutput($key, $value, $selected, $id, $c
$value = smarty_function_escape_special_chars((string) $value); $value = smarty_function_escape_special_chars((string) $value);
} }
$_html_result .= $_html_class . $_html_id . '>' . $value . '</option>' . "\n"; $_html_result .= $_html_class . $_html_id . '>' . $value . '</option>' . "\n";
$idx++; $idx ++;
} else { } else {
$_idx = 0; $_idx = 0;
$_html_result = smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id.'-'.$idx) : null, $class, $_idx); $_html_result = smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id . '-' . $idx) : null, $class, $_idx);
$idx++; $idx ++;
} }
return $_html_result; return $_html_result;

@ -8,7 +8,6 @@
/** /**
* Smarty {html_radios} function plugin * Smarty {html_radios} function plugin
*
* File: function.html_radios.php<br> * File: function.html_radios.php<br>
* Type: function<br> * Type: function<br>
* Name: html_radios<br> * Name: html_radios<br>
@ -37,8 +36,10 @@
* @author Christopher Kvarme <christopher.kvarme@flashjab.com> * @author Christopher Kvarme <christopher.kvarme@flashjab.com>
* @author credits to Monte Ohrt <monte at ohrt dot com> * @author credits to Monte Ohrt <monte at ohrt dot com>
* @version 1.0 * @version 1.0
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
*
* @return string * @return string
* @uses smarty_function_escape_special_chars() * @uses smarty_function_escape_special_chars()
*/ */
@ -72,7 +73,7 @@ function smarty_function_html_radios($params, $template)
if (method_exists($_val, "__toString")) { if (method_exists($_val, "__toString")) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString()); $selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else { } else {
trigger_error("html_radios: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_radios: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
} }
} else { } else {
$selected = (string) $_val; $selected = (string) $_val;
@ -102,7 +103,8 @@ function smarty_function_html_radios($params, $template)
case 'assign': case 'assign':
break; break;
case 'strict': break; case 'strict':
break;
case 'disabled': case 'disabled':
case 'readonly': case 'readonly':
@ -163,7 +165,7 @@ function smarty_function_html_radios_output($name, $value, $output, $selected, $
if (method_exists($value, "__toString")) { if (method_exists($value, "__toString")) {
$value = (string) $value->__toString(); $value = (string) $value->__toString();
} else { } else {
trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
return ''; return '';
} }
@ -175,7 +177,7 @@ function smarty_function_html_radios_output($name, $value, $output, $selected, $
if (method_exists($output, "__toString")) { if (method_exists($output, "__toString")) {
$output = (string) $output->__toString(); $output = (string) $output->__toString();
} else { } else {
trigger_error("html_options: output is an object of class '". get_class($output) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE);
return ''; return '';
} }

@ -17,11 +17,9 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
/** /**
* Smarty {html_select_date} plugin * Smarty {html_select_date} plugin
*
* Type: function<br> * Type: function<br>
* Name: html_select_date<br> * Name: html_select_date<br>
* Purpose: Prints the dropdowns for date selection. * Purpose: Prints the dropdowns for date selection.
*
* ChangeLog: * ChangeLog:
* <pre> * <pre>
* - 1.0 initial release * - 1.0 initial release
@ -47,11 +45,12 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
* @author Andrei Zmievski * @author Andrei Zmievski
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author Rodney Rehm * @author Rodney Rehm
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object *
* @return string * @return string
*/ */
function smarty_function_html_select_date($params, $template) function smarty_function_html_select_date($params)
{ {
// generate timestamps used for month names only // generate timestamps used for month names only
static $_month_timestamps = null; static $_month_timestamps = null;
@ -59,7 +58,7 @@ function smarty_function_html_select_date($params, $template)
if ($_month_timestamps === null) { if ($_month_timestamps === null) {
$_current_year = date('Y'); $_current_year = date('Y');
$_month_timestamps = array(); $_month_timestamps = array();
for ($i = 1; $i <= 12; $i++) { for ($i = 1; $i <= 12; $i ++) {
$_month_timestamps[$i] = mktime(0, 0, 0, $i, 1, 2000); $_month_timestamps[$i] = mktime(0, 0, 0, $i, 1, 2000);
} }
} }
@ -187,7 +186,6 @@ function smarty_function_html_select_date($params, $template)
? $params['time'][$prefix . $_elementName] ? $params['time'][$prefix . $_elementName]
: date($_elementKey); : date($_elementKey);
} }
$time = mktime(0, 0, 0, $_month, $_day, $_year);
} elseif (isset($params['time'][$field_array][$prefix . 'Year'])) { } elseif (isset($params['time'][$field_array][$prefix . 'Year'])) {
// $_REQUEST given // $_REQUEST given
foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) { foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
@ -196,7 +194,6 @@ function smarty_function_html_select_date($params, $template)
? $params['time'][$field_array][$prefix . $_elementName] ? $params['time'][$field_array][$prefix . $_elementName]
: date($_elementKey); : date($_elementKey);
} }
$time = mktime(0, 0, 0, $_month, $_day, $_year);
} else { } else {
// no date found, use NOW // no date found, use NOW
list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d')); list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d'));
@ -219,9 +216,9 @@ function smarty_function_html_select_date($params, $template)
if ($t === null) { if ($t === null) {
$$key = (int) $_current_year; $$key = (int) $_current_year;
} elseif ($t[0] == '+') { } elseif ($t[0] == '+') {
$$key = (int) ($_current_year + trim(substr($t, 1))); $$key = (int) ($_current_year + (int)trim(substr($t, 1)));
} elseif ($t[0] == '-') { } elseif ($t[0] == '-') {
$$key = (int) ($_current_year - trim(substr($t, 1))); $$key = (int) ($_current_year - (int)trim(substr($t, 1)));
} else { } else {
$$key = (int) $$key; $$key = (int) $$key;
} }
@ -236,7 +233,6 @@ function smarty_function_html_select_date($params, $template)
// generate year <select> or <input> // generate year <select> or <input>
if ($display_years) { if ($display_years) {
$_html_years = '';
$_extra = ''; $_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Year]') : ($prefix . 'Year'); $_name = $field_array ? ($field_array . '[' . $prefix . 'Year]') : ($prefix . 'Year');
if ($all_extra) { if ($all_extra) {
@ -252,7 +248,7 @@ function smarty_function_html_select_date($params, $template)
$_html_years = '<select name="' . $_name . '"'; $_html_years = '<select name="' . $_name . '"';
if ($year_id !== null || $all_id !== null) { if ($year_id !== null || $all_id !== null) {
$_html_years .= ' id="' . smarty_function_escape_special_chars( $_html_years .= ' id="' . smarty_function_escape_special_chars(
$year_id !== null ? ( $year_id ? $year_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) $year_id !== null ? ($year_id ? $year_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
) . '"'; ) . '"';
} }
if ($year_size) { if ($year_size) {
@ -261,11 +257,11 @@ function smarty_function_html_select_date($params, $template)
$_html_years .= $_extra . $extra_attrs . '>' . $option_separator; $_html_years .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($year_empty) || isset($all_empty)) { if (isset($year_empty) || isset($all_empty)) {
$_html_years .= '<option value="">' . ( isset($year_empty) ? $year_empty : $all_empty ) . '</option>' . $option_separator; $_html_years .= '<option value="">' . (isset($year_empty) ? $year_empty : $all_empty) . '</option>' . $option_separator;
} }
$op = $start_year > $end_year ? -1 : 1; $op = $start_year > $end_year ? - 1 : 1;
for ($i=$start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) { for ($i = $start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) {
$_html_years .= '<option value="' . $i . '"' $_html_years .= '<option value="' . $i . '"'
. ($_year == $i ? ' selected="selected"' : '') . ($_year == $i ? ' selected="selected"' : '')
. '>' . $i . '</option>' . $option_separator; . '>' . $i . '</option>' . $option_separator;
@ -277,7 +273,6 @@ function smarty_function_html_select_date($params, $template)
// generate month <select> or <input> // generate month <select> or <input>
if ($display_months) { if ($display_months) {
$_html_month = '';
$_extra = ''; $_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Month]') : ($prefix . 'Month'); $_name = $field_array ? ($field_array . '[' . $prefix . 'Month]') : ($prefix . 'Month');
if ($all_extra) { if ($all_extra) {
@ -290,7 +285,7 @@ function smarty_function_html_select_date($params, $template)
$_html_months = '<select name="' . $_name . '"'; $_html_months = '<select name="' . $_name . '"';
if ($month_id !== null || $all_id !== null) { if ($month_id !== null || $all_id !== null) {
$_html_months .= ' id="' . smarty_function_escape_special_chars( $_html_months .= ' id="' . smarty_function_escape_special_chars(
$month_id !== null ? ( $month_id ? $month_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) $month_id !== null ? ($month_id ? $month_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
) . '"'; ) . '"';
} }
if ($month_size) { if ($month_size) {
@ -299,10 +294,10 @@ function smarty_function_html_select_date($params, $template)
$_html_months .= $_extra . $extra_attrs . '>' . $option_separator; $_html_months .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($month_empty) || isset($all_empty)) { if (isset($month_empty) || isset($all_empty)) {
$_html_months .= '<option value="">' . ( isset($month_empty) ? $month_empty : $all_empty ) . '</option>' . $option_separator; $_html_months .= '<option value="">' . (isset($month_empty) ? $month_empty : $all_empty) . '</option>' . $option_separator;
} }
for ($i = 1; $i <= 12; $i++) { for ($i = 1; $i <= 12; $i ++) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = isset($month_names) ? smarty_function_escape_special_chars($month_names[$i]) : ($month_format == "%m" ? $_val : strftime($month_format, $_month_timestamps[$i])); $_text = isset($month_names) ? smarty_function_escape_special_chars($month_names[$i]) : ($month_format == "%m" ? $_val : strftime($month_format, $_month_timestamps[$i]));
$_value = $month_value_format == "%m" ? $_val : strftime($month_value_format, $_month_timestamps[$i]); $_value = $month_value_format == "%m" ? $_val : strftime($month_value_format, $_month_timestamps[$i]);
@ -316,7 +311,6 @@ function smarty_function_html_select_date($params, $template)
// generate day <select> or <input> // generate day <select> or <input>
if ($display_days) { if ($display_days) {
$_html_day = '';
$_extra = ''; $_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Day]') : ($prefix . 'Day'); $_name = $field_array ? ($field_array . '[' . $prefix . 'Day]') : ($prefix . 'Day');
if ($all_extra) { if ($all_extra) {
@ -329,7 +323,7 @@ function smarty_function_html_select_date($params, $template)
$_html_days = '<select name="' . $_name . '"'; $_html_days = '<select name="' . $_name . '"';
if ($day_id !== null || $all_id !== null) { if ($day_id !== null || $all_id !== null) {
$_html_days .= ' id="' . smarty_function_escape_special_chars( $_html_days .= ' id="' . smarty_function_escape_special_chars(
$day_id !== null ? ( $day_id ? $day_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) $day_id !== null ? ($day_id ? $day_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
) . '"'; ) . '"';
} }
if ($day_size) { if ($day_size) {
@ -338,10 +332,10 @@ function smarty_function_html_select_date($params, $template)
$_html_days .= $_extra . $extra_attrs . '>' . $option_separator; $_html_days .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($day_empty) || isset($all_empty)) { if (isset($day_empty) || isset($all_empty)) {
$_html_days .= '<option value="">' . ( isset($day_empty) ? $day_empty : $all_empty ) . '</option>' . $option_separator; $_html_days .= '<option value="">' . (isset($day_empty) ? $day_empty : $all_empty) . '</option>' . $option_separator;
} }
for ($i = 1; $i <= 31; $i++) { for ($i = 1; $i <= 31; $i ++) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = $day_format == '%02d' ? $_val : sprintf($day_format, $i); $_text = $day_format == '%02d' ? $_val : sprintf($day_format, $i);
$_value = $day_value_format == '%02d' ? $_val : sprintf($day_value_format, $i); $_value = $day_value_format == '%02d' ? $_val : sprintf($day_value_format, $i);
@ -355,7 +349,7 @@ function smarty_function_html_select_date($params, $template)
// order the fields for output // order the fields for output
$_html = ''; $_html = '';
for ($i=0; $i <= 2; $i++) { for ($i = 0; $i <= 2; $i ++) {
switch ($field_order[$i]) { switch ($field_order[$i]) {
case 'Y': case 'Y':
case 'y': case 'y':

@ -17,7 +17,6 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
/** /**
* Smarty {html_select_time} function plugin * Smarty {html_select_time} function plugin
*
* Type: function<br> * Type: function<br>
* Name: html_select_time<br> * Name: html_select_time<br>
* Purpose: Prints the dropdowns for time selection * Purpose: Prints the dropdowns for time selection
@ -26,12 +25,13 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
* (Smarty online manual) * (Smarty online manual)
* @author Roberto Berto <roberto@berto.net> * @author Roberto Berto <roberto@berto.net>
* @author Monte Ohrt <monte AT ohrt DOT com> * @author Monte Ohrt <monte AT ohrt DOT com>
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object *
* @return string * @return string
* @uses smarty_make_timestamp() * @uses smarty_make_timestamp()
*/ */
function smarty_function_html_select_time($params, $template) function smarty_function_html_select_time($params)
{ {
$prefix = "Time_"; $prefix = "Time_";
$field_array = null; $field_array = null;
@ -160,7 +160,7 @@ function smarty_function_html_select_time($params, $template)
$_meridian = isset($params['time'][$prefix . 'Meridian']) $_meridian = isset($params['time'][$prefix . 'Meridian'])
? (' ' . $params['time'][$prefix . 'Meridian']) ? (' ' . $params['time'][$prefix . 'Meridian'])
: ''; : '';
$time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian ); $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time)); list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
} elseif (isset($params['time'][$field_array][$prefix . 'Hour'])) { } elseif (isset($params['time'][$field_array][$prefix . 'Hour'])) {
// $_REQUEST given // $_REQUEST given
@ -173,7 +173,7 @@ function smarty_function_html_select_time($params, $template)
$_meridian = isset($params['time'][$field_array][$prefix . 'Meridian']) $_meridian = isset($params['time'][$field_array][$prefix . 'Meridian'])
? (' ' . $params['time'][$field_array][$prefix . 'Meridian']) ? (' ' . $params['time'][$field_array][$prefix . 'Meridian'])
: ''; : '';
$time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian ); $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time)); list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
} else { } else {
// no date found, use NOW // no date found, use NOW
@ -204,7 +204,7 @@ function smarty_function_html_select_time($params, $template)
$_html_hours = '<select name="' . $_name . '"'; $_html_hours = '<select name="' . $_name . '"';
if ($hour_id !== null || $all_id !== null) { if ($hour_id !== null || $all_id !== null) {
$_html_hours .= ' id="' . smarty_function_escape_special_chars( $_html_hours .= ' id="' . smarty_function_escape_special_chars(
$hour_id !== null ? ( $hour_id ? $hour_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) $hour_id !== null ? ($hour_id ? $hour_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
) . '"'; ) . '"';
} }
if ($hour_size) { if ($hour_size) {
@ -213,12 +213,12 @@ function smarty_function_html_select_time($params, $template)
$_html_hours .= $_extra . $extra_attrs . '>' . $option_separator; $_html_hours .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($hour_empty) || isset($all_empty)) { if (isset($hour_empty) || isset($all_empty)) {
$_html_hours .= '<option value="">' . ( isset($hour_empty) ? $hour_empty : $all_empty ) . '</option>' . $option_separator; $_html_hours .= '<option value="">' . (isset($hour_empty) ? $hour_empty : $all_empty) . '</option>' . $option_separator;
} }
$start = $use_24_hours ? 0 : 1; $start = $use_24_hours ? 0 : 1;
$end = $use_24_hours ? 23 : 12; $end = $use_24_hours ? 23 : 12;
for ($i=$start; $i <= $end; $i++) { for ($i = $start; $i <= $end; $i ++) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = $hour_format == '%02d' ? $_val : sprintf($hour_format, $i); $_text = $hour_format == '%02d' ? $_val : sprintf($hour_format, $i);
$_value = $hour_value_format == '%02d' ? $_val : sprintf($hour_value_format, $i); $_value = $hour_value_format == '%02d' ? $_val : sprintf($hour_value_format, $i);
@ -226,7 +226,7 @@ function smarty_function_html_select_time($params, $template)
if (!$use_24_hours) { if (!$use_24_hours) {
$_hour12 = $_hour == 0 $_hour12 = $_hour == 0
? 12 ? 12
: ($_hour <= 12 ? $_hour : $_hour -12); : ($_hour <= 12 ? $_hour : $_hour - 12);
} }
$selected = $_hour !== null ? ($use_24_hours ? $_hour == $_val : $_hour12 == $_val) : null; $selected = $_hour !== null ? ($use_24_hours ? $_hour == $_val : $_hour12 == $_val) : null;
@ -253,7 +253,7 @@ function smarty_function_html_select_time($params, $template)
$_html_minutes = '<select name="' . $_name . '"'; $_html_minutes = '<select name="' . $_name . '"';
if ($minute_id !== null || $all_id !== null) { if ($minute_id !== null || $all_id !== null) {
$_html_minutes .= ' id="' . smarty_function_escape_special_chars( $_html_minutes .= ' id="' . smarty_function_escape_special_chars(
$minute_id !== null ? ( $minute_id ? $minute_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) $minute_id !== null ? ($minute_id ? $minute_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
) . '"'; ) . '"';
} }
if ($minute_size) { if ($minute_size) {
@ -262,11 +262,11 @@ function smarty_function_html_select_time($params, $template)
$_html_minutes .= $_extra . $extra_attrs . '>' . $option_separator; $_html_minutes .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($minute_empty) || isset($all_empty)) { if (isset($minute_empty) || isset($all_empty)) {
$_html_minutes .= '<option value="">' . ( isset($minute_empty) ? $minute_empty : $all_empty ) . '</option>' . $option_separator; $_html_minutes .= '<option value="">' . (isset($minute_empty) ? $minute_empty : $all_empty) . '</option>' . $option_separator;
} }
$selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null; $selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null;
for ($i=0; $i <= 59; $i += $minute_interval) { for ($i = 0; $i <= 59; $i += $minute_interval) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = $minute_format == '%02d' ? $_val : sprintf($minute_format, $i); $_text = $minute_format == '%02d' ? $_val : sprintf($minute_format, $i);
$_value = $minute_value_format == '%02d' ? $_val : sprintf($minute_value_format, $i); $_value = $minute_value_format == '%02d' ? $_val : sprintf($minute_value_format, $i);
@ -293,7 +293,7 @@ function smarty_function_html_select_time($params, $template)
$_html_seconds = '<select name="' . $_name . '"'; $_html_seconds = '<select name="' . $_name . '"';
if ($second_id !== null || $all_id !== null) { if ($second_id !== null || $all_id !== null) {
$_html_seconds .= ' id="' . smarty_function_escape_special_chars( $_html_seconds .= ' id="' . smarty_function_escape_special_chars(
$second_id !== null ? ( $second_id ? $second_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) $second_id !== null ? ($second_id ? $second_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
) . '"'; ) . '"';
} }
if ($second_size) { if ($second_size) {
@ -302,11 +302,11 @@ function smarty_function_html_select_time($params, $template)
$_html_seconds .= $_extra . $extra_attrs . '>' . $option_separator; $_html_seconds .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($second_empty) || isset($all_empty)) { if (isset($second_empty) || isset($all_empty)) {
$_html_seconds .= '<option value="">' . ( isset($second_empty) ? $second_empty : $all_empty ) . '</option>' . $option_separator; $_html_seconds .= '<option value="">' . (isset($second_empty) ? $second_empty : $all_empty) . '</option>' . $option_separator;
} }
$selected = $_second !== null ? ($_second - $_second % $second_interval) : null; $selected = $_second !== null ? ($_second - $_second % $second_interval) : null;
for ($i=0; $i <= 59; $i += $second_interval) { for ($i = 0; $i <= 59; $i += $second_interval) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = $second_format == '%02d' ? $_val : sprintf($second_format, $i); $_text = $second_format == '%02d' ? $_val : sprintf($second_format, $i);
$_value = $second_value_format == '%02d' ? $_val : sprintf($second_value_format, $i); $_value = $second_value_format == '%02d' ? $_val : sprintf($second_value_format, $i);
@ -333,7 +333,7 @@ function smarty_function_html_select_time($params, $template)
$_html_meridian = '<select name="' . $_name . '"'; $_html_meridian = '<select name="' . $_name . '"';
if ($meridian_id !== null || $all_id !== null) { if ($meridian_id !== null || $all_id !== null) {
$_html_meridian .= ' id="' . smarty_function_escape_special_chars( $_html_meridian .= ' id="' . smarty_function_escape_special_chars(
$meridian_id !== null ? ( $meridian_id ? $meridian_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) $meridian_id !== null ? ($meridian_id ? $meridian_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
) . '"'; ) . '"';
} }
if ($meridian_size) { if ($meridian_size) {
@ -342,11 +342,11 @@ function smarty_function_html_select_time($params, $template)
$_html_meridian .= $_extra . $extra_attrs . '>' . $option_separator; $_html_meridian .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($meridian_empty) || isset($all_empty)) { if (isset($meridian_empty) || isset($all_empty)) {
$_html_meridian .= '<option value="">' . ( isset($meridian_empty) ? $meridian_empty : $all_empty ) . '</option>' . $option_separator; $_html_meridian .= '<option value="">' . (isset($meridian_empty) ? $meridian_empty : $all_empty) . '</option>' . $option_separator;
} }
$_html_meridian .= '<option value="am"'. ($_hour > 0 && $_hour < 12 ? ' selected="selected"' : '') .'>AM</option>' . $option_separator $_html_meridian .= '<option value="am"' . ($_hour > 0 && $_hour < 12 ? ' selected="selected"' : '') . '>AM</option>' . $option_separator
. '<option value="pm"'. ($_hour < 12 ? '' : ' selected="selected"') .'>PM</option>' . $option_separator . '<option value="pm"' . ($_hour < 12 ? '' : ' selected="selected"') . '>PM</option>' . $option_separator
. '</select>'; . '</select>';
} }

@ -8,7 +8,6 @@
/** /**
* Smarty {html_table} function plugin * Smarty {html_table} function plugin
*
* Type: function<br> * Type: function<br>
* Name: html_table<br> * Name: html_table<br>
* Date: Feb 17, 2003<br> * Date: Feb 17, 2003<br>
@ -43,11 +42,12 @@
* @version 1.1 * @version 1.1
* @link http://www.smarty.net/manual/en/language.function.html.table.php {html_table} * @link http://www.smarty.net/manual/en/language.function.html.table.php {html_table}
* (Smarty online manual) * (Smarty online manual)
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object *
* @return string * @return string
*/ */
function smarty_function_html_table($params, $template) function smarty_function_html_table($params)
{ {
$table_attr = 'border="1"'; $table_attr = 'border="1"';
$tr_attr = ''; $tr_attr = '';
@ -63,7 +63,7 @@ function smarty_function_html_table($params, $template)
$loop = null; $loop = null;
if (!isset($params['loop'])) { if (!isset($params['loop'])) {
trigger_error("html_table: missing 'loop' parameter",E_USER_WARNING); trigger_error("html_table: missing 'loop' parameter", E_USER_WARNING);
return; return;
} }
@ -130,7 +130,7 @@ function smarty_function_html_table($params, $template)
$cols = ($hdir == 'right') ? $cols : array_reverse($cols); $cols = ($hdir == 'right') ? $cols : array_reverse($cols);
$output .= "<thead><tr>\n"; $output .= "<thead><tr>\n";
for ($r = 0; $r < $cols_count; $r++) { for ($r = 0; $r < $cols_count; $r ++) {
$output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>'; $output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>';
$output .= $cols[$r]; $output .= $cols[$r];
$output .= "</th>\n"; $output .= "</th>\n";
@ -139,12 +139,12 @@ function smarty_function_html_table($params, $template)
} }
$output .= "<tbody>\n"; $output .= "<tbody>\n";
for ($r = 0; $r < $rows; $r++) { for ($r = 0; $r < $rows; $r ++) {
$output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n"; $output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n";
$rx = ($vdir == 'down') ? $r * $cols_count : ($rows-1 - $r) * $cols_count; $rx = ($vdir == 'down') ? $r * $cols_count : ($rows - 1 - $r) * $cols_count;
for ($c = 0; $c < $cols_count; $c++) { for ($c = 0; $c < $cols_count; $c ++) {
$x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count-1 - $c; $x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count - 1 - $c;
if ($inner != 'cols') { if ($inner != 'cols') {
/* shuffle x to loop over rows*/ /* shuffle x to loop over rows*/
$x = floor($x / $cols_count) + ($x % $cols_count) * $rows; $x = floor($x / $cols_count) + ($x % $cols_count) * $rows;

@ -8,7 +8,6 @@
/** /**
* Smarty {mailto} function plugin * Smarty {mailto} function plugin
*
* Type: function<br> * Type: function<br>
* Name: mailto<br> * Name: mailto<br>
* Date: May 21, 2002 * Date: May 21, 2002
@ -44,17 +43,18 @@
* @version 1.2 * @version 1.2
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author credits to Jason Sweat (added cc, bcc and subject functionality) * @author credits to Jason Sweat (added cc, bcc and subject functionality)
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object *
* @return string * @return string
*/ */
function smarty_function_mailto($params, $template) function smarty_function_mailto($params)
{ {
static $_allowed_encoding = array('javascript' => true, 'javascript_charcode' => true, 'hex' => true, 'none' => true); static $_allowed_encoding = array('javascript' => true, 'javascript_charcode' => true, 'hex' => true, 'none' => true);
$extra = ''; $extra = '';
if (empty($params['address'])) { if (empty($params['address'])) {
trigger_error("mailto: missing 'address' parameter",E_USER_WARNING); trigger_error("mailto: missing 'address' parameter", E_USER_WARNING);
return; return;
} else { } else {
@ -72,8 +72,9 @@ function smarty_function_mailto($params, $template)
case 'cc': case 'cc':
case 'bcc': case 'bcc':
case 'followupto': case 'followupto':
if (!empty($value)) if (!empty($value)) {
$mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value)); $mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value));
}
break; break;
case 'subject': case 'subject':
@ -104,7 +105,7 @@ function smarty_function_mailto($params, $template)
$string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');'; $string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');';
$js_encode = ''; $js_encode = '';
for ($x = 0, $_length = strlen($string); $x < $_length; $x++) { for ($x = 0, $_length = strlen($string); $x < $_length; $x ++) {
$js_encode .= '%' . bin2hex($string[$x]); $js_encode .= '%' . bin2hex($string[$x]);
} }
@ -112,7 +113,7 @@ function smarty_function_mailto($params, $template)
} elseif ($encode == 'javascript_charcode') { } elseif ($encode == 'javascript_charcode') {
$string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>'; $string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
for ($x = 0, $y = strlen($string); $x < $y; $x++) { for ($x = 0, $y = strlen($string); $x < $y; $x ++) {
$ord[] = ord($string[$x]); $ord[] = ord($string[$x]);
} }
@ -127,12 +128,12 @@ function smarty_function_mailto($params, $template)
} elseif ($encode == 'hex') { } elseif ($encode == 'hex') {
preg_match('!^(.*)(\?.*)$!', $address, $match); preg_match('!^(.*)(\?.*)$!', $address, $match);
if (!empty($match[2])) { if (!empty($match[2])) {
trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.",E_USER_WARNING); trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.", E_USER_WARNING);
return; return;
} }
$address_encode = ''; $address_encode = '';
for ($x = 0, $_length = strlen($address); $x < $_length; $x++) { for ($x = 0, $_length = strlen($address); $x < $_length; $x ++) {
if (preg_match('!\w!' . Smarty::$_UTF8_MODIFIER, $address[$x])) { if (preg_match('!\w!' . Smarty::$_UTF8_MODIFIER, $address[$x])) {
$address_encode .= '%' . bin2hex($address[$x]); $address_encode .= '%' . bin2hex($address[$x]);
} else { } else {
@ -140,7 +141,7 @@ function smarty_function_mailto($params, $template)
} }
} }
$text_encode = ''; $text_encode = '';
for ($x = 0, $_length = strlen($text); $x < $_length; $x++) { for ($x = 0, $_length = strlen($text); $x < $_length; $x ++) {
$text_encode .= '&#x' . bin2hex($text[$x]) . ';'; $text_encode .= '&#x' . bin2hex($text[$x]) . ';';
} }

@ -1,15 +1,14 @@
<?php <?php
/** /**
* Smarty plugin * Smarty plugin
*
* This plugin is only for Smarty2 BC * This plugin is only for Smarty2 BC
*
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {math} function plugin * Smarty {math} function plugin
*
* Type: function<br> * Type: function<br>
* Name: math<br> * Name: math<br>
* Purpose: handle math computations in template * Purpose: handle math computations in template
@ -17,8 +16,10 @@
* @link http://www.smarty.net/manual/en/language.function.math.php {math} * @link http://www.smarty.net/manual/en/language.function.math.php {math}
* (Smarty online manual) * (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
*
* @return string|null * @return string|null
*/ */
function smarty_function_math($params, $template) function smarty_function_math($params, $template)
@ -26,11 +27,11 @@ function smarty_function_math($params, $template)
static $_allowed_funcs = array( static $_allowed_funcs = array(
'int' => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => true, 'int' => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => true,
'log' => true, 'log10' => true, 'max' => true, 'min' => true, 'pi' => true, 'pow' => true, 'log' => true, 'log10' => true, 'max' => true, 'min' => true, 'pi' => true, 'pow' => true,
'rand' => true, 'round' => true, 'sin' => true, 'sqrt' => true, 'srand' => true ,'tan' => true 'rand' => true, 'round' => true, 'sin' => true, 'sqrt' => true, 'srand' => true, 'tan' => true
); );
// be sure equation parameter is present // be sure equation parameter is present
if (empty($params['equation'])) { if (empty($params['equation'])) {
trigger_error("math: missing equation parameter",E_USER_WARNING); trigger_error("math: missing equation parameter", E_USER_WARNING);
return; return;
} }
@ -38,18 +39,18 @@ function smarty_function_math($params, $template)
$equation = $params['equation']; $equation = $params['equation'];
// make sure parenthesis are balanced // make sure parenthesis are balanced
if (substr_count($equation,"(") != substr_count($equation,")")) { if (substr_count($equation, "(") != substr_count($equation, ")")) {
trigger_error("math: unbalanced parenthesis",E_USER_WARNING); trigger_error("math: unbalanced parenthesis", E_USER_WARNING);
return; return;
} }
// match all vars in equation, make sure all are passed // match all vars in equation, make sure all are passed
preg_match_all("!(?:0x[a-fA-F0-9]+)|([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);
foreach ($match[1] as $curr_var) { foreach ($match[1] as $curr_var) {
if ($curr_var && !isset($params[$curr_var]) && !isset($_allowed_funcs[$curr_var])) { if ($curr_var && !isset($params[$curr_var]) && !isset($_allowed_funcs[$curr_var])) {
trigger_error("math: function call $curr_var not allowed",E_USER_WARNING); trigger_error("math: function call $curr_var not allowed", E_USER_WARNING);
return; return;
} }
@ -58,13 +59,13 @@ function smarty_function_math($params, $template)
foreach ($params as $key => $val) { foreach ($params as $key => $val) {
if ($key != "equation" && $key != "format" && $key != "assign") { if ($key != "equation" && $key != "format" && $key != "assign") {
// make sure value is not empty // make sure value is not empty
if (strlen($val)==0) { if (strlen($val) == 0) {
trigger_error("math: parameter $key is empty",E_USER_WARNING); trigger_error("math: parameter $key is empty", E_USER_WARNING);
return; return;
} }
if (!is_numeric($val)) { if (!is_numeric($val)) {
trigger_error("math: parameter $key: is not numeric",E_USER_WARNING); trigger_error("math: parameter $key: is not numeric", E_USER_WARNING);
return; return;
} }
@ -72,19 +73,19 @@ function smarty_function_math($params, $template)
} }
} }
$smarty_math_result = null; $smarty_math_result = null;
eval("\$smarty_math_result = ".$equation.";"); eval("\$smarty_math_result = " . $equation . ";");
if (empty($params['format'])) { if (empty($params['format'])) {
if (empty($params['assign'])) { if (empty($params['assign'])) {
return $smarty_math_result; return $smarty_math_result;
} else { } else {
$template->assign($params['assign'],$smarty_math_result); $template->assign($params['assign'], $smarty_math_result);
} }
} else { } else {
if (empty($params['assign'])) { if (empty($params['assign'])) {
printf($params['format'],$smarty_math_result); printf($params['format'], $smarty_math_result);
} else { } else {
$template->assign($params['assign'],sprintf($params['format'],$smarty_math_result)); $template->assign($params['assign'], sprintf($params['format'], $smarty_math_result));
} }
} }
} }

@ -8,16 +8,15 @@
/** /**
* Smarty capitalize modifier plugin * Smarty capitalize modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: capitalize<br> * Name: capitalize<br>
* Purpose: capitalize words in the string * Purpose: capitalize words in the string
*
* {@internal {$string|capitalize:true:true} is the fastest option for MBString enabled systems }} * {@internal {$string|capitalize:true:true} is the fastest option for MBString enabled systems }}
* *
* @param string $string string to capitalize * @param string $string string to capitalize
* @param boolean $uc_digits also capitalize "x123" to "X123" * @param boolean $uc_digits also capitalize "x123" to "X123"
* @param boolean $lc_rest capitalize first letters, lowercase all following letters "aAa" to "Aaa" * @param boolean $lc_rest capitalize first letters, lowercase all following letters "aAa" to "Aaa"
*
* @return string capitalized string * @return string capitalized string
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author Rodney Rehm * @author Rodney Rehm
@ -27,7 +26,7 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
if ($lc_rest) { if ($lc_rest) {
// uppercase (including hyphenated words) // uppercase (including hyphenated words)
$upper_string = mb_convert_case( $string, MB_CASE_TITLE, Smarty::$_CHARSET ); $upper_string = mb_convert_case($string, MB_CASE_TITLE, Smarty::$_CHARSET);
} else { } else {
// uppercase word breaks // uppercase word breaks
$upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert_cb', $string); $upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert_cb', $string);
@ -35,7 +34,7 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals
// check uc_digits case // check uc_digits case
if (!$uc_digits) { if (!$uc_digits) {
if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) { if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) {
foreach($matches[1] as $match) { foreach ($matches[1] as $match) {
$upper_string = substr_replace($upper_string, mb_strtolower($match[0], Smarty::$_CHARSET), $match[1], strlen($match[0])); $upper_string = substr_replace($upper_string, mb_strtolower($match[0], Smarty::$_CHARSET), $match[1], strlen($match[0]));
} }
} }
@ -53,7 +52,7 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals
// check uc_digits case // check uc_digits case
if (!$uc_digits) { if (!$uc_digits) {
if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) { if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) {
foreach($matches[1] as $match) { foreach ($matches[1] as $match) {
$upper_string = substr_replace($upper_string, strtolower($match[0]), $match[1], strlen($match[0])); $upper_string = substr_replace($upper_string, strtolower($match[0]), $match[1], strlen($match[0]));
} }
} }
@ -70,18 +69,22 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals
* *
* @author Kyle Renfrow * @author Kyle Renfrow
*/ */
function smarty_mod_cap_mbconvert_cb($matches){ function smarty_mod_cap_mbconvert_cb($matches)
return stripslashes($matches[1]).mb_convert_case(stripslashes($matches[2]),MB_CASE_UPPER, Smarty::$_CHARSET); {
return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[2]), MB_CASE_UPPER, Smarty::$_CHARSET);
} }
function smarty_mod_cap_mbconvert2_cb($matches){ function smarty_mod_cap_mbconvert2_cb($matches)
return stripslashes($matches[1]).mb_convert_case(stripslashes($matches[3]),MB_CASE_UPPER, Smarty::$_CHARSET); {
return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[3]), MB_CASE_UPPER, Smarty::$_CHARSET);
} }
function smarty_mod_cap_ucfirst_cb($matches){ function smarty_mod_cap_ucfirst_cb($matches)
return stripslashes($matches[1]).ucfirst(stripslashes($matches[2])); {
return stripslashes($matches[1]) . ucfirst(stripslashes($matches[2]));
} }
function smarty_mod_cap_ucfirst2_cb($matches){ function smarty_mod_cap_ucfirst2_cb($matches)
return stripslashes($matches[1]).ucfirst(stripslashes($matches[3])); {
return stripslashes($matches[1]) . ucfirst(stripslashes($matches[3]));
} }

@ -8,7 +8,6 @@
/** /**
* Smarty date_format modifier plugin * Smarty date_format modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: date_format<br> * Name: date_format<br>
* Purpose: format datestamps via strftime<br> * Purpose: format datestamps via strftime<br>
@ -19,14 +18,16 @@
* *
* @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param string $string input date string * @param string $string input date string
* @param string $format strftime format for output * @param string $format strftime format for output
* @param string $default_date default date if $string is empty * @param string $default_date default date if $string is empty
* @param string $formatter either 'strftime' or 'auto' * @param string $formatter either 'strftime' or 'auto'
*
* @return string |void * @return string |void
* @uses smarty_make_timestamp() * @uses smarty_make_timestamp()
*/ */
function smarty_modifier_date_format($string, $format=null, $default_date='', $formatter='auto') function smarty_modifier_date_format($string, $format = null, $default_date = '', $formatter = 'auto')
{ {
if ($format === null) { if ($format === null) {
$format = Smarty::$_DATE_FORMAT; $format = Smarty::$_DATE_FORMAT;
@ -42,7 +43,7 @@ function smarty_modifier_date_format($string, $format=null, $default_date='', $f
} else { } else {
return; return;
} }
if ($formatter=='strftime'||($formatter=='auto'&&strpos($format,'%')!==false)) { if ($formatter == 'strftime' || ($formatter == 'auto' && strpos($format, '%') !== false)) {
if (DS == '\\') { if (DS == '\\') {
$_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T'); $_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T');
$_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S'); $_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S');

@ -8,18 +8,19 @@
/** /**
* Smarty debug_print_var modifier plugin * Smarty debug_print_var modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: debug_print_var<br> * Name: debug_print_var<br>
* Purpose: formats variable contents for display in the console * Purpose: formats variable contents for display in the console
* *
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param array|object $var variable to be formatted * @param array|object $var variable to be formatted
* @param integer $depth maximum recursion depth if $var is an array * @param integer $depth maximum recursion depth if $var is an array
* @param integer $length maximum string length if $var is a string * @param integer $length maximum string length if $var is a string
*
* @return string * @return string
*/ */
function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40) function smarty_modifier_debug_print_var($var, $depth = 0, $length = 40)
{ {
$_replace = array("\n" => '<i>\n</i>', $_replace = array("\n" => '<i>\n</i>',
"\r" => '<i>\r</i>', "\r" => '<i>\r</i>',
@ -33,7 +34,7 @@ function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
$results .= '<br>' . str_repeat('&nbsp;', $depth * 2) $results .= '<br>' . str_repeat('&nbsp;', $depth * 2)
. '<b>' . strtr($curr_key, $_replace) . '</b> =&gt; ' . '<b>' . strtr($curr_key, $_replace) . '</b> =&gt; '
. smarty_modifier_debug_print_var($curr_val, ++$depth, $length); . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
$depth--; $depth --;
} }
break; break;
@ -44,7 +45,7 @@ function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
$results .= '<br>' . str_repeat('&nbsp;', $depth * 2) $results .= '<br>' . str_repeat('&nbsp;', $depth * 2)
. '<b> -&gt;' . strtr($curr_key, $_replace) . '</b> = ' . '<b> -&gt;' . strtr($curr_key, $_replace) . '</b> = '
. smarty_modifier_debug_print_var($curr_val, ++$depth, $length); . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
$depth--; $depth --;
} }
break; break;

@ -8,17 +8,18 @@
/** /**
* Smarty escape modifier plugin * Smarty escape modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: escape<br> * Name: escape<br>
* Purpose: escape string for output * Purpose: escape string for output
* *
* @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual) * @link http://www.smarty.net/docs/en/language.modifier.escape
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param string $string input string * @param string $string input string
* @param string $esc_type escape type * @param string $esc_type escape type
* @param string $char_set character set, used for htmlspecialchars() or htmlentities() * @param string $char_set character set, used for htmlspecialchars() or htmlentities()
* @param boolean $double_encode encode already encoded entitites again, used for htmlspecialchars() or htmlentities() * @param boolean $double_encode encode already encoded entitites again, used for htmlspecialchars() or htmlentities()
*
* @return string escaped input string * @return string escaped input string
*/ */
function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true) function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true)
@ -105,7 +106,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
// Note that the UTF-8 encoded character ä will be represented as %c3%a4 // Note that the UTF-8 encoded character ä will be represented as %c3%a4
$return = ''; $return = '';
$_length = strlen($string); $_length = strlen($string);
for ($x = 0; $x < $_length; $x++) { for ($x = 0; $x < $_length; $x ++) {
$return .= '%' . bin2hex($string[$x]); $return .= '%' . bin2hex($string[$x]);
} }
@ -124,7 +125,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
} }
// no MBString fallback // no MBString fallback
$_length = strlen($string); $_length = strlen($string);
for ($x = 0; $x < $_length; $x++) { for ($x = 0; $x < $_length; $x ++) {
$return .= '&#x' . bin2hex($string[$x]) . ';'; $return .= '&#x' . bin2hex($string[$x]) . ';';
} }
@ -143,7 +144,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
} }
// no MBString fallback // no MBString fallback
$_length = strlen($string); $_length = strlen($string);
for ($x = 0; $x < $_length; $x++) { for ($x = 0; $x < $_length; $x ++) {
$return .= '&#' . ord($string[$x]) . ';'; $return .= '&#' . ord($string[$x]) . ';';
} }
@ -179,7 +180,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
} }
$_length = strlen($string); $_length = strlen($string);
for ($_i = 0; $_i < $_length; $_i++) { for ($_i = 0; $_i < $_length; $_i ++) {
$_ord = ord(substr($string, $_i, 1)); $_ord = ord(substr($string, $_i, 1));
// non-standard char, escape it // non-standard char, escape it
if ($_ord >= 126) { if ($_ord >= 126) {

@ -8,7 +8,6 @@
/** /**
* Smarty regex_replace modifier plugin * Smarty regex_replace modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: regex_replace<br> * Name: regex_replace<br>
* Purpose: regular expression search/replace * Purpose: regular expression search/replace
@ -16,9 +15,11 @@
* @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php
* regex_replace (Smarty online manual) * regex_replace (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param string $string input string * @param string $string input string
* @param string|array $search regular expression(s) to search for * @param string|array $search regular expression(s) to search for
* @param string|array $replace string(s) that should be replaced * @param string|array $replace string(s) that should be replaced
*
* @return string * @return string
*/ */
function smarty_modifier_regex_replace($string, $search, $replace) function smarty_modifier_regex_replace($string, $search, $replace)
@ -36,6 +37,7 @@ function smarty_modifier_regex_replace($string, $search, $replace)
/** /**
* @param string $search string(s) that should be replaced * @param string $search string(s) that should be replaced
*
* @return string * @return string
* @ignore * @ignore
*/ */
@ -43,12 +45,12 @@ function _smarty_regex_replace_check($search)
{ {
// null-byte injection detection // null-byte injection detection
// anything behind the first null-byte is ignored // anything behind the first null-byte is ignored
if (($pos = strpos($search,"\0")) !== false) { if (($pos = strpos($search, "\0")) !== false) {
$search = substr($search,0,$pos); $search = substr($search, 0, $pos);
} }
// remove eval-modifier from $search // remove eval-modifier from $search
if (preg_match('!([a-zA-Z\s]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) { if (preg_match('!([a-zA-Z\s]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) {
$search = substr($search, 0, -strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]); $search = substr($search, 0, - strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]);
} }
return $search; return $search;

@ -1,13 +1,13 @@
<?php <?php
/** /**
* Smarty plugin * Smarty plugin
*
* @package Smarty * @package Smarty
* @subpackage PluginsModifier * @subpackage PluginsModifier
*/ */
/** /**
* Smarty replace modifier plugin * Smarty replace modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: replace<br> * Name: replace<br>
* Purpose: simple search/replace * Purpose: simple search/replace
@ -15,9 +15,11 @@
* @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual) * @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author Uwe Tews * @author Uwe Tews
*
* @param string $string input string * @param string $string input string
* @param string $search text to search for * @param string $search text to search for
* @param string $replace replacement text * @param string $replace replacement text
*
* @return string * @return string
*/ */
function smarty_modifier_replace($string, $search, $replace) function smarty_modifier_replace($string, $search, $replace)

@ -1,25 +1,27 @@
<?php <?php
/** /**
* Smarty plugin * Smarty plugin
*
* @package Smarty * @package Smarty
* @subpackage PluginsModifier * @subpackage PluginsModifier
*/ */
/** /**
* Smarty spacify modifier plugin * Smarty spacify modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: spacify<br> * Name: spacify<br>
* Purpose: add spaces between characters in a string * Purpose: add spaces between characters in a string
* *
* @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual) * @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param string $string input string * @param string $string input string
* @param string $spacify_char string to insert between characters. * @param string $spacify_char string to insert between characters.
*
* @return string * @return string
*/ */
function smarty_modifier_spacify($string, $spacify_char = ' ') function smarty_modifier_spacify($string, $spacify_char = ' ')
{ {
// well… what about charsets besides latin and UTF-8? // well… what about charsets besides latin and UTF-8?
return implode($spacify_char, preg_split('//' . Smarty::$_UTF8_MODIFIER, $string, -1, PREG_SPLIT_NO_EMPTY)); return implode($spacify_char, preg_split('//' . Smarty::$_UTF8_MODIFIER, $string, - 1, PREG_SPLIT_NO_EMPTY));
} }

@ -8,7 +8,6 @@
/** /**
* Smarty truncate modifier plugin * Smarty truncate modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: truncate<br> * Name: truncate<br>
* Purpose: Truncate a string to a certain length if necessary, * Purpose: Truncate a string to a certain length if necessary,
@ -17,17 +16,20 @@
* *
* @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual) * @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param string $string input string * @param string $string input string
* @param integer $length length of truncated text * @param integer $length length of truncated text
* @param string $etc end string * @param string $etc end string
* @param boolean $break_words truncate at word boundary * @param boolean $break_words truncate at word boundary
* @param boolean $middle truncate in the middle of text * @param boolean $middle truncate in the middle of text
*
* @return string truncated string * @return string truncated string
*/ */
function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false)
{ {
if ($length == 0) if ($length == 0) {
return ''; return '';
}
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
if (mb_strlen($string, Smarty::$_CHARSET) > $length) { if (mb_strlen($string, Smarty::$_CHARSET) > $length) {

@ -8,7 +8,6 @@
/** /**
* Smarty cat modifier plugin * Smarty cat modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: cat<br> * Name: cat<br>
* Date: Feb 24, 2003<br> * Date: Feb 24, 2003<br>
@ -19,10 +18,12 @@
* @link http://smarty.php.net/manual/en/language.modifier.cat.php cat * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat
* (Smarty online manual) * (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_cat($params, $compiler) function smarty_modifiercompiler_cat($params)
{ {
return '('.implode(').(', $params).')'; return '(' . implode(').(', $params) . ')';
} }

@ -8,17 +8,18 @@
/** /**
* Smarty count_characters modifier plugin * Smarty count_characters modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: count_characteres<br> * Name: count_characteres<br>
* Purpose: count the number of characters in a text * Purpose: count the number of characters in a text
* *
* @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_count_characters($params, $compiler) function smarty_modifiercompiler_count_characters($params)
{ {
if (!isset($params[1]) || $params[1] != 'true') { if (!isset($params[1]) || $params[1] != 'true') {
return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[0] . ', $tmp)'; return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[0] . ', $tmp)';

@ -8,7 +8,6 @@
/** /**
* Smarty count_paragraphs modifier plugin * Smarty count_paragraphs modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: count_paragraphs<br> * Name: count_paragraphs<br>
* Purpose: count the number of paragraphs in a text * Purpose: count the number of paragraphs in a text
@ -16,10 +15,12 @@
* @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
* count_paragraphs (Smarty online manual) * count_paragraphs (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_count_paragraphs($params, $compiler) function smarty_modifiercompiler_count_paragraphs($params)
{ {
// count \r or \n characters // count \r or \n characters
return '(preg_match_all(\'#[\r\n]+#\', ' . $params[0] . ', $tmp)+1)'; return '(preg_match_all(\'#[\r\n]+#\', ' . $params[0] . ', $tmp)+1)';

@ -8,7 +8,6 @@
/** /**
* Smarty count_sentences modifier plugin * Smarty count_sentences modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: count_sentences * Name: count_sentences
* Purpose: count the number of sentences in a text * Purpose: count the number of sentences in a text
@ -16,10 +15,12 @@
* @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
* count_sentences (Smarty online manual) * count_sentences (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_count_sentences($params, $compiler) function smarty_modifiercompiler_count_sentences($params)
{ {
// find periods, question marks, exclamation marks with a word before but not after. // find periods, question marks, exclamation marks with a word before but not after.
return 'preg_match_all("#\w[\.\?\!](\W|$)#S' . Smarty::$_UTF8_MODIFIER . '", ' . $params[0] . ', $tmp)'; return 'preg_match_all("#\w[\.\?\!](\W|$)#S' . Smarty::$_UTF8_MODIFIER . '", ' . $params[0] . ', $tmp)';

@ -8,17 +8,18 @@
/** /**
* Smarty count_words modifier plugin * Smarty count_words modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: count_words<br> * Name: count_words<br>
* Purpose: count the number of words in a text * Purpose: count the number of words in a text
* *
* @link http://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_count_words($params, $compiler) function smarty_modifiercompiler_count_words($params)
{ {
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
// return 'preg_match_all(\'#[\w\pL]+#' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)'; // return 'preg_match_all(\'#[\w\pL]+#' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)';

@ -8,17 +8,18 @@
/** /**
* Smarty default modifier plugin * Smarty default modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: default<br> * Name: default<br>
* Purpose: designate default value for empty variables * Purpose: designate default value for empty variables
* *
* @link http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_default ($params, $compiler) function smarty_modifiercompiler_default($params)
{ {
$output = $params[0]; $output = $params[0];
if (!isset($params[1])) { if (!isset($params[1])) {

@ -9,18 +9,20 @@
/** /**
* @ignore * @ignore
*/ */
require_once( SMARTY_PLUGINS_DIR .'shared.literal_compiler_param.php' ); require_once(SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php');
/** /**
* Smarty escape modifier plugin * Smarty escape modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: escape<br> * Name: escape<br>
* Purpose: escape string for output * Purpose: escape string for output
* *
* @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual) * @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual)
* @author Rodney Rehm * @author Rodney Rehm
*
* @param array $params parameters * @param array $params parameters
* @param $compiler
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_escape($params, $compiler) function smarty_modifiercompiler_escape($params, $compiler)
@ -43,12 +45,12 @@ function smarty_modifiercompiler_escape($params, $compiler)
case 'html': case 'html':
if ($_double_encode) { if ($_double_encode) {
return 'htmlspecialchars(' return 'htmlspecialchars('
. $params[0] .', ENT_QUOTES, ' . $params[0] . ', ENT_QUOTES, '
. var_export($char_set, true) . ', ' . var_export($char_set, true) . ', '
. var_export($double_encode, true) . ')'; . var_export($double_encode, true) . ')';
} elseif ($double_encode) { } elseif ($double_encode) {
return 'htmlspecialchars(' return 'htmlspecialchars('
. $params[0] .', ENT_QUOTES, ' . $params[0] . ', ENT_QUOTES, '
. var_export($char_set, true) . ')'; . var_export($char_set, true) . ')';
} else { } else {
// fall back to modifier.escape.php // fall back to modifier.escape.php
@ -59,7 +61,7 @@ function smarty_modifiercompiler_escape($params, $compiler)
if ($_double_encode) { if ($_double_encode) {
// php >=5.2.3 - go native // php >=5.2.3 - go native
return 'mb_convert_encoding(htmlspecialchars(' return 'mb_convert_encoding(htmlspecialchars('
. $params[0] .', ENT_QUOTES, ' . $params[0] . ', ENT_QUOTES, '
. var_export($char_set, true) . ', ' . var_export($char_set, true) . ', '
. var_export($double_encode, true) . var_export($double_encode, true)
. '), "HTML-ENTITIES", ' . '), "HTML-ENTITIES", '
@ -67,7 +69,7 @@ function smarty_modifiercompiler_escape($params, $compiler)
} elseif ($double_encode) { } elseif ($double_encode) {
// php <5.2.3 - only handle double encoding // php <5.2.3 - only handle double encoding
return 'mb_convert_encoding(htmlspecialchars(' return 'mb_convert_encoding(htmlspecialchars('
. $params[0] .', ENT_QUOTES, ' . $params[0] . ', ENT_QUOTES, '
. var_export($char_set, true) . var_export($char_set, true)
. '), "HTML-ENTITIES", ' . '), "HTML-ENTITIES", '
. var_export($char_set, true) . ')'; . var_export($char_set, true) . ')';
@ -80,13 +82,13 @@ function smarty_modifiercompiler_escape($params, $compiler)
if ($_double_encode) { if ($_double_encode) {
// php >=5.2.3 - go native // php >=5.2.3 - go native
return 'htmlentities(' return 'htmlentities('
. $params[0] .', ENT_QUOTES, ' . $params[0] . ', ENT_QUOTES, '
. var_export($char_set, true) . ', ' . var_export($char_set, true) . ', '
. var_export($double_encode, true) . ')'; . var_export($double_encode, true) . ')';
} elseif ($double_encode) { } elseif ($double_encode) {
// php <5.2.3 - only handle double encoding // php <5.2.3 - only handle double encoding
return 'htmlentities(' return 'htmlentities('
. $params[0] .', ENT_QUOTES, ' . $params[0] . ', ENT_QUOTES, '
. var_export($char_set, true) . ')'; . var_export($char_set, true) . ')';
} else { } else {
// fall back to modifier.escape.php // fall back to modifier.escape.php
@ -105,20 +107,20 @@ function smarty_modifiercompiler_escape($params, $compiler)
case 'javascript': case 'javascript':
// escape quotes and backslashes, newlines, etc. // escape quotes and backslashes, newlines, etc.
return 'strtr(' . $params[0] . ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "</" => "<\/" ))'; return 'strtr(' . $params[0] . ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "</" => "<\/" ))';
} }
} catch (SmartyException $e) { }
catch (SmartyException $e) {
// pass through to regular plugin fallback // pass through to regular plugin fallback
} }
// could not optimize |escape call, so fallback to regular plugin // could not optimize |escape call, so fallback to regular plugin
if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) { if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) {
$compiler->template->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR .'modifier.escape.php'; $compiler->template->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php';
$compiler->template->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape'; $compiler->template->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape';
} else { } else {
$compiler->template->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR .'modifier.escape.php'; $compiler->template->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php';
$compiler->template->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape'; $compiler->template->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape';
} }
return 'smarty_modifier_escape(' . join( ', ', $params ) . ')'; return 'smarty_modifier_escape(' . join(', ', $params) . ')';
} }

@ -8,16 +8,17 @@
/** /**
* Smarty from_charset modifier plugin * Smarty from_charset modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: from_charset<br> * Name: from_charset<br>
* Purpose: convert character encoding from $charset to internal encoding * Purpose: convert character encoding from $charset to internal encoding
* *
* @author Rodney Rehm * @author Rodney Rehm
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_from_charset($params, $compiler) function smarty_modifiercompiler_from_charset($params)
{ {
if (!Smarty::$_MBSTRING) { if (!Smarty::$_MBSTRING) {
// FIXME: (rodneyrehm) shouldn't this throw an error? // FIXME: (rodneyrehm) shouldn't this throw an error?

@ -1,24 +1,26 @@
<?php <?php
/** /**
* Smarty plugin * Smarty plugin
*
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty indent modifier plugin * Smarty indent modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: indent<br> * Name: indent<br>
* Purpose: indent lines of text * Purpose: indent lines of text
* *
* @link http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_indent($params, $compiler) function smarty_modifiercompiler_indent($params)
{ {
if (!isset($params[1])) { if (!isset($params[1])) {
$params[1] = 4; $params[1] = 4;

@ -1,13 +1,13 @@
<?php <?php
/** /**
* Smarty plugin * Smarty plugin
*
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty lower modifier plugin * Smarty lower modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: lower<br> * Name: lower<br>
* Purpose: convert string to lowercase * Purpose: convert string to lowercase
@ -15,14 +15,16 @@
* @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_lower($params, $compiler) function smarty_modifiercompiler_lower($params)
{ {
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
return 'mb_strtolower(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')' ; return 'mb_strtolower(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
} }
// no MBString fallback // no MBString fallback
return 'strtolower(' . $params[0] . ')'; return 'strtolower(' . $params[0] . ')';

@ -8,16 +8,14 @@
/** /**
* Smarty noprint modifier plugin * Smarty noprint modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: noprint<br> * Name: noprint<br>
* Purpose: return an empty string * Purpose: return an empty string
* *
* @author Uwe Tews * @author Uwe Tews
* @param array $params parameters
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_noprint($params, $compiler) function smarty_modifiercompiler_noprint()
{ {
return "''"; return "''";
} }

@ -8,17 +8,18 @@
/** /**
* Smarty string_format modifier plugin * Smarty string_format modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: string_format<br> * Name: string_format<br>
* Purpose: format strings via sprintf * Purpose: format strings via sprintf
* *
* @link http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_string_format($params, $compiler) function smarty_modifiercompiler_string_format($params)
{ {
return 'sprintf(' . $params[1] . ',' . $params[0] . ')'; return 'sprintf(' . $params[1] . ',' . $params[0] . ')';
} }

@ -8,7 +8,6 @@
/** /**
* Smarty strip modifier plugin * Smarty strip modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: strip<br> * Name: strip<br>
* Purpose: Replace all repeated spaces, newlines, tabs * Purpose: Replace all repeated spaces, newlines, tabs
@ -18,11 +17,13 @@
* *
* @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_strip($params, $compiler) function smarty_modifiercompiler_strip($params)
{ {
if (!isset($params[1])) { if (!isset($params[1])) {
$params[1] = "' '"; $params[1] = "' '";

@ -8,19 +8,20 @@
/** /**
* Smarty strip_tags modifier plugin * Smarty strip_tags modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: strip_tags<br> * Name: strip_tags<br>
* Purpose: strip html tags from text * Purpose: strip html tags from text
* *
* @link http://www.smarty.net/manual/en/language.modifier.strip.tags.php strip_tags (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.strip.tags.php strip_tags (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_strip_tags($params, $compiler) function smarty_modifiercompiler_strip_tags($params)
{ {
if (!isset($params[1]) || $params[1] === true || trim($params[1],'"') == 'true') { if (!isset($params[1]) || $params[1] === true || trim($params[1], '"') == 'true') {
return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})"; return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})";
} else { } else {
return 'strip_tags(' . $params[0] . ')'; return 'strip_tags(' . $params[0] . ')';

@ -8,16 +8,17 @@
/** /**
* Smarty to_charset modifier plugin * Smarty to_charset modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: to_charset<br> * Name: to_charset<br>
* Purpose: convert character encoding from internal encoding to $charset * Purpose: convert character encoding from internal encoding to $charset
* *
* @author Rodney Rehm * @author Rodney Rehm
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_to_charset($params, $compiler) function smarty_modifiercompiler_to_charset($params)
{ {
if (!Smarty::$_MBSTRING) { if (!Smarty::$_MBSTRING) {
// FIXME: (rodneyrehm) shouldn't this throw an error? // FIXME: (rodneyrehm) shouldn't this throw an error?

@ -8,16 +8,17 @@
/** /**
* Smarty unescape modifier plugin * Smarty unescape modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: unescape<br> * Name: unescape<br>
* Purpose: unescape html entities * Purpose: unescape html entities
* *
* @author Rodney Rehm * @author Rodney Rehm
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_unescape($params, $compiler) function smarty_modifiercompiler_unescape($params)
{ {
if (!isset($params[1])) { if (!isset($params[1])) {
$params[1] = 'html'; $params[1] = 'html';

@ -8,20 +8,21 @@
/** /**
* Smarty upper modifier plugin * Smarty upper modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: lower<br> * Name: lower<br>
* Purpose: convert string to uppercase * Purpose: convert string to uppercase
* *
* @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual) * @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_upper($params, $compiler) function smarty_modifiercompiler_upper($params)
{ {
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')' ; return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
} }
// no MBString fallback // no MBString fallback
return 'strtoupper(' . $params[0] . ')'; return 'strtoupper(' . $params[0] . ')';

@ -8,14 +8,16 @@
/** /**
* Smarty wordwrap modifier plugin * Smarty wordwrap modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: wordwrap<br> * Name: wordwrap<br>
* Purpose: wrap a string of text at a given length * 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) * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
* @param $compiler
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_wordwrap($params, $compiler) function smarty_modifiercompiler_wordwrap($params, $compiler)
@ -32,10 +34,10 @@ function smarty_modifiercompiler_wordwrap($params, $compiler)
$function = 'wordwrap'; $function = 'wordwrap';
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) { if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) {
$compiler->template->required_plugins['nocache']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR .'shared.mb_wordwrap.php'; $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php';
$compiler->template->required_plugins['nocache']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap'; $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';
} else { } else {
$compiler->template->required_plugins['compiled']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR .'shared.mb_wordwrap.php'; $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php';
$compiler->template->required_plugins['compiled']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap'; $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';
} }
$function = 'smarty_mb_wordwrap'; $function = 'smarty_mb_wordwrap';

@ -8,16 +8,16 @@
/** /**
* Smarty trimwhitespace outputfilter plugin * Smarty trimwhitespace outputfilter plugin
*
* Trim unnecessary whitespace from HTML markup. * Trim unnecessary whitespace from HTML markup.
* *
* @author Rodney Rehm * @author Rodney Rehm
*
* @param string $source input string * @param string $source input string
* @param Smarty_Internal_Template $smarty Smarty object *
* @return string filtered output * @return string filtered output
* @todo substr_replace() is not overloaded by mbstring.func_overload - so this function might fail! * @todo substr_replace() is not overloaded by mbstring.func_overload - so this function might fail!
*/ */
function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $smarty) function smarty_outputfilter_trimwhitespace($source)
{ {
$store = array(); $store = array();
$_store = 0; $_store = 0;
@ -35,13 +35,13 @@ function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $s
$source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length); $source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length);
$_offset += $_length - strlen($replace); $_offset += $_length - strlen($replace);
$_store++; $_store ++;
} }
} }
// Strip all HTML-Comments // Strip all HTML-Comments
// yes, even the ones in <script> - see http://stackoverflow.com/a/808850/515124 // yes, even the ones in <script> - see http://stackoverflow.com/a/808850/515124
$source = preg_replace( '#<!--.*?-->#ms', '', $source ); $source = preg_replace('#<!--.*?-->#ms', '', $source);
// capture html elements not to be messed with // capture html elements not to be messed with
$_offset = 0; $_offset = 0;
@ -53,7 +53,7 @@ function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $s
$source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length); $source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length);
$_offset += $_length - strlen($replace); $_offset += $_length - strlen($replace);
$_store++; $_store ++;
} }
} }
@ -69,7 +69,7 @@ function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $s
'#>\s+$#Ss' => '>', '#>\s+$#Ss' => '>',
); );
$source = preg_replace( array_keys($expressions), array_values($expressions), $source ); $source = preg_replace(array_keys($expressions), array_values($expressions), $source);
// note: for some very weird reason trim() seems to remove spaces inside attributes. // note: for some very weird reason trim() seems to remove spaces inside attributes.
// maybe a \0 byte or something is interfering? // maybe a \0 byte or something is interfering?
// $source = trim( $source ); // $source = trim( $source );
@ -82,7 +82,7 @@ function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $s
$source = substr_replace($source, $replace, $match[0][1] + $_offset, $_length); $source = substr_replace($source, $replace, $match[0][1] + $_offset, $_length);
$_offset += strlen($replace) - $_length; $_offset += strlen($replace) - $_length;
$_store++; $_store ++;
} }
} }

@ -9,13 +9,14 @@
if (version_compare(PHP_VERSION, '5.2.3', '>=')) { if (version_compare(PHP_VERSION, '5.2.3', '>=')) {
/** /**
* escape_special_chars common function * escape_special_chars common function
*
* Function: smarty_function_escape_special_chars<br> * Function: smarty_function_escape_special_chars<br>
* Purpose: used by other smarty functions to escape * Purpose: used by other smarty functions to escape
* special chars except for already escaped ones * special chars except for already escaped ones
* *
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param string $string text that should by escaped * @param string $string text that should by escaped
*
* @return string * @return string
*/ */
function smarty_function_escape_special_chars($string) function smarty_function_escape_special_chars($string)
@ -29,13 +30,14 @@ if (version_compare(PHP_VERSION, '5.2.3', '>=')) {
} else { } else {
/** /**
* escape_special_chars common function * escape_special_chars common function
*
* Function: smarty_function_escape_special_chars<br> * Function: smarty_function_escape_special_chars<br>
* Purpose: used by other smarty functions to escape * Purpose: used by other smarty functions to escape
* special chars except for already escaped ones * special chars except for already escaped ones
* *
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param string $string text that should by escaped * @param string $string text that should by escaped
*
* @return string * @return string
*/ */
function smarty_function_escape_special_chars($string) function smarty_function_escape_special_chars($string)

@ -12,18 +12,19 @@
* @param array $params parameter array as given to the compiler function * @param array $params parameter array as given to the compiler function
* @param integer $index array index of the parameter to convert * @param integer $index array index of the parameter to convert
* @param mixed $default value to be returned if the parameter is not present * @param mixed $default value to be returned if the parameter is not present
*
* @return mixed evaluated value of parameter or $default * @return mixed evaluated value of parameter or $default
* @throws SmartyException if parameter is not a literal (but an expression, variable, …) * @throws SmartyException if parameter is not a literal (but an expression, variable, …)
* @author Rodney Rehm * @author Rodney Rehm
*/ */
function smarty_literal_compiler_param($params, $index, $default=null) function smarty_literal_compiler_param($params, $index, $default = null)
{ {
// not set, go default // not set, go default
if (!isset($params[$index])) { if (!isset($params[$index])) {
return $default; return $default;
} }
// test if param is a literal // test if param is a literal
if (!preg_match('/^([\'"]?)[a-zA-Z0-9]+(\\1)$/', $params[$index])) { if (!preg_match('/^([\'"]?)[a-zA-Z0-9-]+(\\1)$/', $params[$index])) {
throw new SmartyException('$param[' . $index . '] is not a literal and is thus not evaluatable at compile time'); throw new SmartyException('$param[' . $index . '] is not a literal and is thus not evaluatable at compile time');
} }

@ -11,7 +11,9 @@
* Purpose: used by other smarty functions to make a timestamp from a string. * Purpose: used by other smarty functions to make a timestamp from a string.
* *
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param DateTime|int|string $string date object, timestamp or string that can be converted using strtotime() * @param DateTime|int|string $string date object, timestamp or string that can be converted using strtotime()
*
* @return int * @return int
*/ */
function smarty_make_timestamp($string) function smarty_make_timestamp($string)
@ -23,15 +25,15 @@ function smarty_make_timestamp($string)
return $string->getTimestamp(); return $string->getTimestamp();
} elseif (strlen($string) == 14 && ctype_digit($string)) { } elseif (strlen($string) == 14 && ctype_digit($string)) {
// it is mysql timestamp format of YYYYMMDDHHMMSS? // it is mysql timestamp format of YYYYMMDDHHMMSS?
return mktime(substr($string, 8, 2),substr($string, 10, 2),substr($string, 12, 2), return mktime(substr($string, 8, 2), substr($string, 10, 2), substr($string, 12, 2),
substr($string, 4, 2),substr($string, 6, 2),substr($string, 0, 4)); substr($string, 4, 2), substr($string, 6, 2), substr($string, 0, 4));
} elseif (is_numeric($string)) { } elseif (is_numeric($string)) {
// it is a numeric string, we handle it as timestamp // it is a numeric string, we handle it as timestamp
return (int) $string; return (int) $string;
} else { } else {
// strtotime should handle it // strtotime should handle it
$time = strtotime($string); $time = strtotime($string);
if ($time == -1 || $time === false) { if ($time == - 1 || $time === false) {
// strtotime() was not able to parse $string, use "now": // strtotime() was not able to parse $string, use "now":
return time(); return time();
} }

@ -14,10 +14,11 @@ if (!function_exists('smarty_mb_str_replace')) {
* @param string $replace the replacement string * @param string $replace the replacement string
* @param string $subject the source string * @param string $subject the source string
* @param int &$count number of matches found * @param int &$count number of matches found
*
* @return string replaced string * @return string replaced string
* @author Rodney Rehm * @author Rodney Rehm
*/ */
function smarty_mb_str_replace($search, $replace, $subject, &$count=0) function smarty_mb_str_replace($search, $replace, $subject, &$count = 0)
{ {
if (!is_array($search) && is_array($replace)) { if (!is_array($search) && is_array($replace)) {
return false; return false;
@ -25,7 +26,7 @@ if (!function_exists('smarty_mb_str_replace')) {
if (is_array($subject)) { if (is_array($subject)) {
// call mb_replace for each single string in $subject // call mb_replace for each single string in $subject
foreach ($subject as &$string) { foreach ($subject as &$string) {
$string = &smarty_mb_str_replace($search, $replace, $string, $c); $string = & smarty_mb_str_replace($search, $replace, $string, $c);
$count += $c; $count += $c;
} }
} elseif (is_array($search)) { } elseif (is_array($search)) {
@ -36,7 +37,7 @@ if (!function_exists('smarty_mb_str_replace')) {
} }
} else { } else {
$n = max(count($search), count($replace)); $n = max(count($search), count($replace));
while ($n--) { while ($n --) {
$subject = smarty_mb_str_replace(current($search), current($replace), $subject, $c); $subject = smarty_mb_str_replace(current($search), current($replace), $subject, $c);
$count += $c; $count += $c;
next($search); next($search);
@ -51,5 +52,4 @@ if (!function_exists('smarty_mb_str_replace')) {
return $subject; return $subject;
} }
} }

@ -10,12 +10,14 @@
* convert characters to their decimal unicode equivalents * convert characters to their decimal unicode equivalents
* *
* @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
*
* @param string $string characters to calculate unicode of * @param string $string characters to calculate unicode of
* @param string $encoding encoding of $string, if null mb_internal_encoding() is used * @param string $encoding encoding of $string, if null mb_internal_encoding() is used
*
* @return array sequence of unicodes * @return array sequence of unicodes
* @author Rodney Rehm * @author Rodney Rehm
*/ */
function smarty_mb_to_unicode($string, $encoding=null) function smarty_mb_to_unicode($string, $encoding = null)
{ {
if ($encoding) { if ($encoding) {
$expanded = mb_convert_encoding($string, "UTF-32BE", $encoding); $expanded = mb_convert_encoding($string, "UTF-32BE", $encoding);
@ -30,12 +32,14 @@ function smarty_mb_to_unicode($string, $encoding=null)
* convert unicodes to the character of given encoding * convert unicodes to the character of given encoding
* *
* @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
*
* @param integer|array $unicode single unicode or list of unicodes to convert * @param integer|array $unicode single unicode or list of unicodes to convert
* @param string $encoding encoding of returned string, if null mb_internal_encoding() is used * @param string $encoding encoding of returned string, if null mb_internal_encoding() is used
*
* @return string unicode as character sequence in given $encoding * @return string unicode as character sequence in given $encoding
* @author Rodney Rehm * @author Rodney Rehm
*/ */
function smarty_mb_from_unicode($unicode, $encoding=null) function smarty_mb_from_unicode($unicode, $encoding = null)
{ {
$t = ''; $t = '';
if (!$encoding) { if (!$encoding) {

@ -12,34 +12,30 @@ if (!function_exists('smarty_mb_wordwrap')) {
* Wrap a string to a given number of characters * Wrap a string to a given number of characters
* *
* @link http://php.net/manual/en/function.wordwrap.php for similarity * @link http://php.net/manual/en/function.wordwrap.php for similarity
*
* @param string $str the string to wrap * @param string $str the string to wrap
* @param int $width the width of the output * @param int $width the width of the output
* @param string $break the character used to break the line * @param string $break the character used to break the line
* @param boolean $cut ignored parameter, just for the sake of * @param boolean $cut ignored parameter, just for the sake of
*
* @return string wrapped string * @return string wrapped string
* @author Rodney Rehm * @author Rodney Rehm
*/ */
function smarty_mb_wordwrap($str, $width=75, $break="\n", $cut=false) function smarty_mb_wordwrap($str, $width = 75, $break = "\n", $cut = false)
{ {
// break words into tokens using white space as a delimiter // break words into tokens using white space as a delimiter
$tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE); $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
$length = 0; $length = 0;
$t = ''; $t = '';
$_previous = false; $_previous = false;
$_space = false;
foreach ($tokens as $_token) { foreach ($tokens as $_token) {
$token_length = mb_strlen($_token, Smarty::$_CHARSET); $token_length = mb_strlen($_token, Smarty::$_CHARSET);
$_tokens = array($_token); $_tokens = array($_token);
if ($token_length > $width) { if ($token_length > $width) {
// remove last space
$t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
$_previous = false;
$length = 0;
if ($cut) { if ($cut) {
$_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE); $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
// broken words go on a new line
$t .= $break;
} }
} }
@ -50,27 +46,23 @@ if (!function_exists('smarty_mb_wordwrap')) {
if ($length > $width) { if ($length > $width) {
// remove space before inserted break // remove space before inserted break
if ($_previous && $token_length < $width) { if ($_previous) {
$t = mb_substr($t, 0, -1, Smarty::$_CHARSET); $t = mb_substr($t, 0, - 1, Smarty::$_CHARSET);
} }
if (!$_space) {
// add the break before the token // add the break before the token
if (!empty($t)) {
$t .= $break; $t .= $break;
}
$length = $token_length; $length = $token_length;
// skip space after inserting a break
if ($_space) {
$length = 0;
continue;
} }
} elseif ($token == "\n") { } elseif ($token == "\n") {
// hard break must reset counters // hard break must reset counters
$_previous = 0; $_previous = 0;
$length = 0; $length = 0;
} else {
// remember if we had a space or not
$_previous = $_space;
} }
$_previous = $_space;
// add the token // add the token
$t .= $token; $t .= $token;
} }
@ -78,5 +70,4 @@ if (!function_exists('smarty_mb_wordwrap')) {
return $t; return $t;
} }
} }

@ -10,10 +10,10 @@
* Smarty htmlspecialchars variablefilter plugin * Smarty htmlspecialchars variablefilter plugin
* *
* @param string $source input string * @param string $source input string
* @param Smarty_Internal_Template $smarty Smarty object *
* @return string filtered output * @return string filtered output
*/ */
function smarty_variablefilter_htmlspecialchars($source, $smarty) function smarty_variablefilter_htmlspecialchars($source)
{ {
return htmlspecialchars($source, ENT_QUOTES, Smarty::$_CHARSET); return htmlspecialchars($source, ENT_QUOTES, Smarty::$_CHARSET);
} }

@ -1,28 +1,30 @@
<?php <?php
/** /**
* Smarty Internal Plugin * Smarty Internal Plugin
* *
* @package Smarty * @package Smarty
* @subpackage Cacher * @subpackage Cacher
*/ */
/** /**
* Cache Handler API * Cache Handler API
* *
* @package Smarty * @package Smarty
* @subpackage Cacher * @subpackage Cacher
* @author Rodney Rehm * @author Rodney Rehm
*/ */
abstract class Smarty_CacheResource abstract class Smarty_CacheResource
{ {
/** /**
* cache for Smarty_CacheResource instances * cache for Smarty_CacheResource instances
*
* @var array * @var array
*/ */
public static $resources = array(); public static $resources = array();
/** /**
* resource types provided by the core * resource types provided by the core
*
* @var array * @var array
*/ */
protected static $sysplugins = array( protected static $sysplugins = array(
@ -34,6 +36,7 @@ abstract class Smarty_CacheResource
* *
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
*
* @return void * @return void
*/ */
abstract public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template); abstract public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template);
@ -41,7 +44,8 @@ abstract class Smarty_CacheResource
/** /**
* populate Cached Object with timestamp and exists from Resource * populate Cached Object with timestamp and exists from Resource
* *
* @param Smarty_Template_Cached $source cached object * @param Smarty_Template_Cached $cached
*
* @return void * @return void
*/ */
abstract public function populateTimestamp(Smarty_Template_Cached $cached); abstract public function populateTimestamp(Smarty_Template_Cached $cached);
@ -51,15 +55,17 @@ abstract class Smarty_CacheResource
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @return booelan true or false if the cached content does not exist *
* @return boolean true or false if the cached content does not exist
*/ */
abstract public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null); abstract public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null);
/** /**
* Write the rendered template output to cache * Write the rendered template output to cache
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param string $content content to cache * @param string $content content to cache
*
* @return boolean success * @return boolean success
*/ */
abstract public function writeCachedContent(Smarty_Internal_Template $_template, $content); abstract public function writeCachedContent(Smarty_Internal_Template $_template, $content);
@ -68,7 +74,8 @@ abstract class Smarty_CacheResource
* Return cached content * Return cached content
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param string $content content of cache *
* @return null|string
*/ */
public function getCachedContent(Smarty_Internal_Template $_template) public function getCachedContent(Smarty_Internal_Template $_template)
{ {
@ -87,9 +94,10 @@ abstract class Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param integer $exp_time expiration time (number of seconds, not timestamp) * @param integer $exp_time expiration time (number of seconds, not timestamp)
*
* @return integer number of cache files deleted * @return integer number of cache files deleted
*/ */
abstract public function clearAll(Smarty $smarty, $exp_time=null); abstract public function clearAll(Smarty $smarty, $exp_time = null);
/** /**
* Empty cache for a specific template * Empty cache for a specific template
@ -99,10 +107,17 @@ abstract class Smarty_CacheResource
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer $exp_time expiration time (number of seconds, not timestamp) * @param integer $exp_time expiration time (number of seconds, not timestamp)
*
* @return integer number of cache files deleted * @return integer number of cache files deleted
*/ */
abstract public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time); abstract public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time);
/**
* @param Smarty $smarty
* @param Smarty_Template_Cached $cached
*
* @return bool|null
*/
public function locked(Smarty $smarty, Smarty_Template_Cached $cached) public function locked(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
// theoretically locking_timeout should be checked against time_limit (max_execution_time) // theoretically locking_timeout should be checked against time_limit (max_execution_time)
@ -120,18 +135,42 @@ abstract class Smarty_CacheResource
return $hadLock; return $hadLock;
} }
/**
* Check is cache is locked for this template
*
* @param Smarty $smarty
* @param Smarty_Template_Cached $cached
*
* @return bool
*/
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
// check if lock exists // check if lock exists
return false; return false;
} }
/**
* Lock cache for this template
*
* @param Smarty $smarty
* @param Smarty_Template_Cached $cached
*
* @return bool
*/
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
// create lock // create lock
return true; return true;
} }
/**
* Unlock cache for this template
*
* @param Smarty $smarty
* @param Smarty_Template_Cached $cached
*
* @return bool
*/
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
// release lock // release lock
@ -143,6 +182,8 @@ abstract class Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param string $type name of the cache resource * @param string $type name of the cache resource
*
* @throws SmartyException
* @return Smarty_CacheResource Cache Resource Handler * @return Smarty_CacheResource Cache Resource Handler
*/ */
public static function load(Smarty $smarty, $type = null) public static function load(Smarty $smarty, $type = null)
@ -200,84 +241,95 @@ abstract class Smarty_CacheResource
} }
/** /**
* Smarty Resource Data Object * Smarty Resource Data Object
* * Cache Data Container for Template Files
* Cache Data Container for Template Files *
* * @package Smarty
* @package Smarty * @subpackage TemplateResources
* @subpackage TemplateResources * @author Rodney Rehm
* @author Rodney Rehm */
*/
class Smarty_Template_Cached class Smarty_Template_Cached
{ {
/** /**
* Source Filepath * Source Filepath
*
* @var string * @var string
*/ */
public $filepath = false; public $filepath = false;
/** /**
* Source Content * Source Content
*
* @var string * @var string
*/ */
public $content = null; public $content = null;
/** /**
* Source Timestamp * Source Timestamp
*
* @var integer * @var integer
*/ */
public $timestamp = false; public $timestamp = false;
/** /**
* Source Existence * Source Existence
*
* @var boolean * @var boolean
*/ */
public $exists = false; public $exists = false;
/** /**
* Cache Is Valid * Cache Is Valid
*
* @var boolean * @var boolean
*/ */
public $valid = false; public $valid = false;
/** /**
* Cache was processed * Cache was processed
*
* @var boolean * @var boolean
*/ */
public $processed = false; public $processed = false;
/** /**
* CacheResource Handler * CacheResource Handler
*
* @var Smarty_CacheResource * @var Smarty_CacheResource
*/ */
public $handler = null; public $handler = null;
/** /**
* Template Compile Id (Smarty_Internal_Template::$compile_id) * Template Compile Id (Smarty_Internal_Template::$compile_id)
*
* @var string * @var string
*/ */
public $compile_id = null; public $compile_id = null;
/** /**
* Template Cache Id (Smarty_Internal_Template::$cache_id) * Template Cache Id (Smarty_Internal_Template::$cache_id)
*
* @var string * @var string
*/ */
public $cache_id = null; public $cache_id = null;
/** /**
* Id for cache locking * Id for cache locking
*
* @var string * @var string
*/ */
public $lock_id = null; public $lock_id = null;
/** /**
* flag that cache is locked by this instance * flag that cache is locked by this instance
*
* @var bool * @var bool
*/ */
public $is_locked = false; public $is_locked = false;
/** /**
* Source Object * Source Object
*
* @var Smarty_Template_Source * @var Smarty_Template_Source
*/ */
public $source = null; public $source = null;
@ -366,12 +418,14 @@ class Smarty_Template_Cached
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param string $content content to cache * @param string $content content to cache
*
* @return boolean success * @return boolean success
*/ */
public function write(Smarty_Internal_Template $_template, $content) public function write(Smarty_Internal_Template $_template, $content)
{ {
if (!$_template->source->recompiled) { if (!$_template->source->recompiled) {
if ($this->handler->writeCachedContent($_template, $content)) { if ($this->handler->writeCachedContent($_template, $content)) {
$this->content = null;
$this->timestamp = time(); $this->timestamp = time();
$this->exists = true; $this->exists = true;
$this->valid = true; $this->valid = true;
@ -385,5 +439,4 @@ class Smarty_Template_Cached
return false; return false;
} }
} }

@ -24,13 +24,13 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* @param string $compile_id compile id * @param string $compile_id compile id
* @param string $content cached content * @param string $content cached content
* @param integer $mtime cache modification timestamp (epoch) * @param integer $mtime cache modification timestamp (epoch)
*
* @return void * @return void
*/ */
abstract protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime); abstract protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime);
/** /**
* Fetch cached content's modification timestamp from data source * Fetch cached content's modification timestamp from data source
*
* {@internal implementing this method is optional. * {@internal implementing this method is optional.
* Only implement it if modification times can be accessed faster than loading the complete cached content.}} * Only implement it if modification times can be accessed faster than loading the complete cached content.}}
* *
@ -38,6 +38,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* @param string $name template name * @param string $name template name
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
*
* @return integer|boolean timestamp (epoch) the template was modified, or false if not found * @return integer|boolean timestamp (epoch) the template was modified, or false if not found
*/ */
protected function fetchTimestamp($id, $name, $cache_id, $compile_id) protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
@ -54,6 +55,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer|null $exp_time seconds till expiration or null * @param integer|null $exp_time seconds till expiration or null
* @param string $content content to cache * @param string $content content to cache
*
* @return boolean success * @return boolean success
*/ */
abstract protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content); abstract protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content);
@ -65,6 +67,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer|null $exp_time seconds till expiration time in seconds or null * @param integer|null $exp_time seconds till expiration time in seconds or null
*
* @return integer number of deleted caches * @return integer number of deleted caches
*/ */
abstract protected function delete($name, $cache_id, $compile_id, $exp_time); abstract protected function delete($name, $cache_id, $compile_id, $exp_time);
@ -74,6 +77,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* *
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
*
* @return void * @return void
*/ */
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template) public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
@ -88,7 +92,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
/** /**
* populate Cached Object with timestamp and exists from Resource * populate Cached Object with timestamp and exists from Resource
* *
* @param Smarty_Template_Cached $source cached object * @param Smarty_Template_Cached $cached
*
* @return void * @return void
*/ */
public function populateTimestamp(Smarty_Template_Cached $cached) public function populateTimestamp(Smarty_Template_Cached $cached)
@ -111,9 +116,10 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @return booelan true or false if the cached content does not exist *
* @return boolean true or false if the cached content does not exist
*/ */
public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null) public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null)
{ {
if (!$cached) { if (!$cached) {
$cached = $_template->cached; $cached = $_template->cached;
@ -131,6 +137,9 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
); );
} }
if (isset($content)) { if (isset($content)) {
/** @var Smarty_Internal_Template $_smarty_tpl
* used in evaluated code
*/
$_smarty_tpl = $_template; $_smarty_tpl = $_template;
eval("?>" . $content); eval("?>" . $content);
@ -145,6 +154,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param string $content content to cache * @param string $content content to cache
*
* @return boolean success * @return boolean success
*/ */
public function writeCachedContent(Smarty_Internal_Template $_template, $content) public function writeCachedContent(Smarty_Internal_Template $_template, $content)
@ -164,9 +174,10 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param integer $exp_time expiration time (number of seconds, not timestamp) * @param integer $exp_time expiration time (number of seconds, not timestamp)
*
* @return integer number of cache files deleted * @return integer number of cache files deleted
*/ */
public function clearAll(Smarty $smarty, $exp_time=null) public function clearAll(Smarty $smarty, $exp_time = null)
{ {
$this->cache = array(); $this->cache = array();
@ -181,13 +192,40 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer $exp_time expiration time (number of seconds, not timestamp) * @param integer $exp_time expiration time (number of seconds, not timestamp)
*
* @return integer number of cache files deleted * @return integer number of cache files deleted
*/ */
public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
{ {
$this->cache = array(); $this->cache = array();
$cache_name = null;
if (isset($resource_name)) {
$_save_stat = $smarty->caching;
$smarty->caching = true;
$tpl = new $smarty->template_class($resource_name, $smarty);
$smarty->caching = $_save_stat;
if ($tpl->source->exists) {
$cache_name = $tpl->source->name;
} else {
return 0;
}
// remove from template cache
if ($smarty->allow_ambiguous_resources) {
$_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id;
} else {
$_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id;
}
if (isset($_templateId[150])) {
$_templateId = sha1($_templateId);
}
unset($smarty->template_objects[$_templateId]);
// template object no longer needed
unset($tpl);
}
return $this->delete($resource_name, $cache_id, $compile_id, $exp_time); return $this->delete($cache_name, $cache_id, $compile_id, $exp_time);
} }
/** /**
@ -195,7 +233,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @return booelan true or false if cache is locked *
* @return boolean true or false if cache is locked
*/ */
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
@ -215,6 +254,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
*
* @return bool|void
*/ */
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
@ -230,6 +271,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
*
* @return bool|void
*/ */
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {

@ -8,19 +8,16 @@
/** /**
* Smarty Cache Handler Base for Key/Value Storage Implementations * Smarty Cache Handler Base for Key/Value Storage Implementations
*
* This class implements the functionality required to use simple key/value stores * This class implements the functionality required to use simple key/value stores
* for hierarchical cache groups. key/value stores like memcache or APC do not support * for hierarchical cache groups. key/value stores like memcache or APC do not support
* wildcards in keys, therefore a cache group cannot be cleared like "a|*" - which * wildcards in keys, therefore a cache group cannot be cleared like "a|*" - which
* is no problem to filesystem and RDBMS implementations. * is no problem to filesystem and RDBMS implementations.
*
* This implementation is based on the concept of invalidation. While one specific cache * This implementation is based on the concept of invalidation. While one specific cache
* can be identified and cleared, any range of caches cannot be identified. For this reason * can be identified and cleared, any range of caches cannot be identified. For this reason
* each level of the cache group hierarchy can have its own value in the store. These values * each level of the cache group hierarchy can have its own value in the store. These values
* are nothing but microtimes, telling us when a particular cache group was cleared for the * are nothing but microtimes, telling us when a particular cache group was cleared for the
* last time. These keys are evaluated for every cache read to determine if the cache has * last time. These keys are evaluated for every cache read to determine if the cache has
* been invalidated since it was created and should hence be treated as inexistent. * been invalidated since it was created and should hence be treated as inexistent.
*
* Although deep hierarchies are possible, they are not recommended. Try to keep your * Although deep hierarchies are possible, they are not recommended. Try to keep your
* cache groups as shallow as possible. Anything up 3-5 parents should be ok. So * cache groups as shallow as possible. Anything up 3-5 parents should be ok. So
* »a|b|c« is a good depth where »a|b|c|d|e|f|g|h|i|j|k« isn't. Try to join correlating * »a|b|c« is a good depth where »a|b|c|d|e|f|g|h|i|j|k« isn't. Try to join correlating
@ -35,11 +32,13 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
{ {
/** /**
* cache for contents * cache for contents
*
* @var array * @var array
*/ */
protected $contents = array(); protected $contents = array();
/** /**
* cache for timestamps * cache for timestamps
*
* @var array * @var array
*/ */
protected $timestamps = array(); protected $timestamps = array();
@ -49,12 +48,13 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* *
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
*
* @return void * @return void
*/ */
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template) public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
{ {
$cached->filepath = $_template->source->uid $cached->filepath = $_template->source->uid
. '#' . $this->sanitize($cached->source->name) . '#' . $this->sanitize($cached->source->resource)
. '#' . $this->sanitize($cached->cache_id) . '#' . $this->sanitize($cached->cache_id)
. '#' . $this->sanitize($cached->compile_id); . '#' . $this->sanitize($cached->compile_id);
@ -65,6 +65,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* populate Cached Object with timestamp and exists from Resource * populate Cached Object with timestamp and exists from Resource
* *
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
*
* @return void * @return void
*/ */
public function populateTimestamp(Smarty_Template_Cached $cached) public function populateTimestamp(Smarty_Template_Cached $cached)
@ -82,9 +83,10 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @return booelan true or false if the cached content does not exist *
* @return boolean true or false if the cached content does not exist
*/ */
public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null) public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null)
{ {
if (!$cached) { if (!$cached) {
$cached = $_template->cached; $cached = $_template->cached;
@ -97,6 +99,9 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
} }
} }
if (isset($content)) { if (isset($content)) {
/** @var Smarty_Internal_Template $_smarty_tpl
* used in evaluated code
*/
$_smarty_tpl = $_template; $_smarty_tpl = $_template;
eval("?>" . $content); eval("?>" . $content);
@ -111,6 +116,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param string $content content to cache * @param string $content content to cache
*
* @return boolean success * @return boolean success
*/ */
public function writeCachedContent(Smarty_Internal_Template $_template, $content) public function writeCachedContent(Smarty_Internal_Template $_template, $content)
@ -122,27 +128,26 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
/** /**
* Empty cache * Empty cache
*
* {@internal the $exp_time argument is ignored altogether }} * {@internal the $exp_time argument is ignored altogether }}
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param integer $exp_time expiration time [being ignored] * @param integer $exp_time expiration time [being ignored]
*
* @return integer number of cache files deleted [always -1] * @return integer number of cache files deleted [always -1]
* @uses purge() to clear the whole store * @uses purge() to clear the whole store
* @uses invalidate() to mark everything outdated if purge() is inapplicable * @uses invalidate() to mark everything outdated if purge() is inapplicable
*/ */
public function clearAll(Smarty $smarty, $exp_time=null) public function clearAll(Smarty $smarty, $exp_time = null)
{ {
if (!$this->purge()) { if (!$this->purge()) {
$this->invalidate(null); $this->invalidate(null);
} }
return -1; return - 1;
} }
/** /**
* Empty cache for a specific template * Empty cache for a specific template
*
* {@internal the $exp_time argument is ignored altogether}} * {@internal the $exp_time argument is ignored altogether}}
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
@ -150,6 +155,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer $exp_time expiration time [being ignored] * @param integer $exp_time expiration time [being ignored]
*
* @return integer number of cache files deleted [always -1] * @return integer number of cache files deleted [always -1]
* @uses buildCachedFilepath() to generate the CacheID * @uses buildCachedFilepath() to generate the CacheID
* @uses invalidate() to mark CacheIDs parent chain as outdated * @uses invalidate() to mark CacheIDs parent chain as outdated
@ -162,8 +168,9 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
$this->delete(array($cid)); $this->delete(array($cid));
$this->invalidate($cid, $resource_name, $cache_id, $compile_id, $uid); $this->invalidate($cid, $resource_name, $cache_id, $compile_id, $uid);
return -1; return - 1;
} }
/** /**
* Get template's unique ID * Get template's unique ID
* *
@ -171,6 +178,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param string $resource_name template name * @param string $resource_name template name
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
*
* @return string filepath of cache file * @return string filepath of cache file
*/ */
protected function getTemplateUid(Smarty $smarty, $resource_name, $cache_id, $compile_id) protected function getTemplateUid(Smarty $smarty, $resource_name, $cache_id, $compile_id)
@ -201,6 +209,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* Sanitize CacheID components * Sanitize CacheID components
* *
* @param string $string CacheID component to sanitize * @param string $string CacheID component to sanitize
*
* @return string sanitized CacheID component * @return string sanitized CacheID component
*/ */
protected function sanitize($string) protected function sanitize($string)
@ -224,6 +233,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param string $content cached content * @param string $content cached content
* @param integer &$timestamp cached timestamp (epoch) * @param integer &$timestamp cached timestamp (epoch)
* @param string $resource_uid resource's uid * @param string $resource_uid resource's uid
*
* @return boolean success * @return boolean success
*/ */
protected function fetch($cid, $resource_name = null, $cache_id = null, $compile_id = null, &$content = null, &$timestamp = null, $resource_uid = null) protected function fetch($cid, $resource_name = null, $cache_id = null, $compile_id = null, &$content = null, &$timestamp = null, $resource_uid = null)
@ -245,7 +255,6 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
/** /**
* Add current microtime to the beginning of $cache_content * Add current microtime to the beginning of $cache_content
*
* {@internal the header uses 8 Bytes, the first 4 Bytes are the seconds, the second 4 Bytes are the microseconds}} * {@internal the header uses 8 Bytes, the first 4 Bytes are the seconds, the second 4 Bytes are the microseconds}}
* *
* @param string &$content the content to be cached * @param string &$content the content to be cached
@ -261,6 +270,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* Extract the timestamp the $content was cached * Extract the timestamp the $content was cached
* *
* @param string &$content the cached content * @param string &$content the cached content
*
* @return float the microtime the content was cached * @return float the microtime the content was cached
*/ */
protected function getMetaTimestamp(&$content) protected function getMetaTimestamp(&$content)
@ -280,6 +290,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param string $resource_uid source's uid * @param string $resource_uid source's uid
*
* @return void * @return void
*/ */
protected function invalidate($cid = null, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null) protected function invalidate($cid = null, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
@ -289,23 +300,25 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
// invalidate everything // invalidate everything
if (!$resource_name && !$cache_id && !$compile_id) { if (!$resource_name && !$cache_id && !$compile_id) {
$key = 'IVK#ALL'; $key = 'IVK#ALL';
} } // invalidate all caches by template
// invalidate all caches by template else {
else if ($resource_name && !$cache_id && !$compile_id) { if ($resource_name && !$cache_id && !$compile_id) {
$key = 'IVK#TEMPLATE#' . $resource_uid . '#' . $this->sanitize($resource_name); $key = 'IVK#TEMPLATE#' . $resource_uid . '#' . $this->sanitize($resource_name);
} } // invalidate all caches by cache group
// invalidate all caches by cache group else {
else if (!$resource_name && $cache_id && !$compile_id) { if (!$resource_name && $cache_id && !$compile_id) {
$key = 'IVK#CACHE#' . $this->sanitize($cache_id); $key = 'IVK#CACHE#' . $this->sanitize($cache_id);
} } // invalidate all caches by compile id
// invalidate all caches by compile id else {
else if (!$resource_name && !$cache_id && $compile_id) { if (!$resource_name && !$cache_id && $compile_id) {
$key = 'IVK#COMPILE#' . $this->sanitize($compile_id); $key = 'IVK#COMPILE#' . $this->sanitize($compile_id);
} } // invalidate by combination
// invalidate by combination
else { else {
$key = 'IVK#CID#' . $cid; $key = 'IVK#CID#' . $cid;
} }
}
}
}
$this->write(array($key => $now)); $this->write(array($key => $now));
} }
@ -317,6 +330,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param string $resource_uid source's filepath * @param string $resource_uid source's filepath
*
* @return float the microtime the CacheID was invalidated * @return float the microtime the CacheID was invalidated
*/ */
protected function getLatestInvalidationTimestamp($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null) protected function getLatestInvalidationTimestamp($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
@ -342,7 +356,6 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
/** /**
* Translate a CacheID into the list of applicable InvalidationKeys. * Translate a CacheID into the list of applicable InvalidationKeys.
*
* Splits "some|chain|into|an|array" into array( '#clearAll#', 'some', 'some|chain', 'some|chain|into', ... ) * Splits "some|chain|into|an|array" into array( '#clearAll#', 'some', 'some|chain', 'some|chain|into', ... )
* *
* @param string $cid CacheID to translate * @param string $cid CacheID to translate
@ -350,6 +363,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param string $resource_uid source's filepath * @param string $resource_uid source's filepath
*
* @return array list of InvalidationKeys * @return array list of InvalidationKeys
* @uses $invalidationKeyPrefix to prepend to each InvalidationKey * @uses $invalidationKeyPrefix to prepend to each InvalidationKey
*/ */
@ -387,7 +401,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
$t[] = 'IVK#CACHE#' . $part; $t[] = 'IVK#CACHE#' . $part;
$t[] = 'IVK#CID' . $_name . $part . $_compile; $t[] = 'IVK#CID' . $_name . $part . $_compile;
// skip past delimiter position // skip past delimiter position
$i++; $i ++;
} }
return $t; return $t;
@ -398,7 +412,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @return booelan true or false if cache is locked *
* @return boolean true or false if cache is locked
*/ */
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
@ -413,6 +428,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
*
* @return bool|void
*/ */
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
@ -426,6 +443,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
*
* @return bool|void
*/ */
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
@ -438,6 +457,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* Read values for a set of keys from cache * Read values for a set of keys from cache
* *
* @param array $keys list of keys to fetch * @param array $keys list of keys to fetch
*
* @return array list of values with the given keys used as indexes * @return array list of values with the given keys used as indexes
*/ */
abstract protected function read(array $keys); abstract protected function read(array $keys);
@ -447,14 +467,16 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* *
* @param array $keys list of values to save * @param array $keys list of values to save
* @param int $expire expiration time * @param int $expire expiration time
*
* @return boolean true on success, false on failure * @return boolean true on success, false on failure
*/ */
abstract protected function write(array $keys, $expire=null); abstract protected function write(array $keys, $expire = null);
/** /**
* Remove values from cache * Remove values from cache
* *
* @param array $keys list of keys to delete * @param array $keys list of keys to delete
*
* @return boolean true on success, false on failure * @return boolean true on success, false on failure
*/ */
abstract protected function delete(array $keys); abstract protected function delete(array $keys);
@ -468,5 +490,4 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
{ {
return false; return false;
} }
} }

@ -8,13 +8,11 @@
/** /**
* Smarty Resource Data Object * Smarty Resource Data Object
*
* Meta Data Container for Config Files * Meta Data Container for Config Files
* *
* @package Smarty * @package Smarty
* @subpackage TemplateResources * @subpackage TemplateResources
* @author Rodney Rehm * @author Rodney Rehm
*
* @property string $content * @property string $content
* @property int $timestamp * @property int $timestamp
* @property bool $exists * @property bool $exists
@ -52,6 +50,7 @@ class Smarty_Config_Source extends Smarty_Template_Source
* *
* @param string $property_name valid: content, timestamp, exists * @param string $property_name valid: content, timestamp, exists
* @param mixed $value newly assigned value (not check for correct type) * @param mixed $value newly assigned value (not check for correct type)
*
* @throws SmartyException when the given property name is not valid * @throws SmartyException when the given property name is not valid
*/ */
public function __set($property_name, $value) public function __set($property_name, $value)
@ -72,6 +71,8 @@ class Smarty_Config_Source extends Smarty_Template_Source
* <<magic>> Generic getter. * <<magic>> Generic getter.
* *
* @param string $property_name valid: content, timestamp, exists * @param string $property_name valid: content, timestamp, exists
*
* @return mixed|void
* @throws SmartyException when the given property name is not valid * @throws SmartyException when the given property name is not valid
*/ */
public function __get($property_name) public function __get($property_name)
@ -90,5 +91,4 @@ class Smarty_Config_Source extends Smarty_Template_Source
throw new SmartyException("config property '$property_name' does not exist."); throw new SmartyException("config property '$property_name' does not exist.");
} }
} }
} }

@ -1,5 +1,5 @@
<?php <?php
/** /**
* Smarty Internal Plugin CacheResource File * Smarty Internal Plugin CacheResource File
* *
* @package Smarty * @package Smarty
@ -8,21 +8,21 @@
* @author Rodney Rehm * @author Rodney Rehm
*/ */
/** /**
* This class does contain all necessary methods for the HTML cache on file system * This class does contain all necessary methods for the HTML cache on file system
*
* Implements the file system as resource for the HTML cache Version ussing nocache inserts. * Implements the file system as resource for the HTML cache Version ussing nocache inserts.
* *
* @package Smarty * @package Smarty
* @subpackage Cacher * @subpackage Cacher
*/ */
class Smarty_Internal_CacheResource_File extends Smarty_CacheResource class Smarty_Internal_CacheResource_File extends Smarty_CacheResource
{ {
/** /**
* populate Cached Object with meta data from Resource * populate Cached Object with meta data from Resource
* *
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
*
* @return void * @return void
*/ */
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template) public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
@ -58,7 +58,7 @@
} else { } else {
$_lock_dir = $_cache_dir; $_lock_dir = $_cache_dir;
} }
$cached->lock_id = $_lock_dir.sha1($_cache_id.$_compile_id.$_template->source->uid).'.lock'; $cached->lock_id = $_lock_dir . sha1($_cache_id . $_compile_id . $_template->source->uid) . '.lock';
} }
$cached->filepath = $_cache_dir . $_cache_id . $_compile_id . $_filepath . '.' . basename($_source_file_path) . '.php'; $cached->filepath = $_cache_dir . $_cache_id . $_compile_id . $_filepath . '.' . basename($_source_file_path) . '.php';
$cached->timestamp = @filemtime($cached->filepath); $cached->timestamp = @filemtime($cached->filepath);
@ -69,6 +69,7 @@
* populate Cached Object with timestamp and exists from Resource * populate Cached Object with timestamp and exists from Resource
* *
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
*
* @return void * @return void
*/ */
public function populateTimestamp(Smarty_Template_Cached $cached) public function populateTimestamp(Smarty_Template_Cached $cached)
@ -82,10 +83,14 @@
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @return booelan true or false if the cached content does not exist *
* @return booleantrue or false if the cached content does not exist
*/ */
public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null) public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null)
{ {
/** @var Smarty_Internal_Template $_smarty_tpl
* used in included file
*/
$_smarty_tpl = $_template; $_smarty_tpl = $_template;
return @include $_template->cached->filepath; return @include $_template->cached->filepath;
@ -96,6 +101,7 @@
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param string $content content to cache * @param string $content content to cache
*
* @return boolean success * @return boolean success
*/ */
public function writeCachedContent(Smarty_Internal_Template $_template, $content) public function writeCachedContent(Smarty_Internal_Template $_template, $content)
@ -114,8 +120,9 @@
/** /**
* Empty cache * Empty cache
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty $smarty
* @param integer $exp_time expiration time (number of seconds, not timestamp) * @param integer $exp_time expiration time (number of seconds, not timestamp)
*
* @return integer number of cache files deleted * @return integer number of cache files deleted
*/ */
public function clearAll(Smarty $smarty, $exp_time = null) public function clearAll(Smarty $smarty, $exp_time = null)
@ -126,11 +133,12 @@
/** /**
* Empty cache for a specific template * Empty cache for a specific template
* *
* @param Smarty $_template template object * @param Smarty $smarty
* @param string $resource_name template name * @param string $resource_name template name
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer $exp_time expiration time (number of seconds, not timestamp) * @param integer $exp_time expiration time (number of seconds, not timestamp)
*
* @return integer number of cache files deleted * @return integer number of cache files deleted
*/ */
public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
@ -139,7 +147,10 @@
$_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null; $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null;
$_dir_sep = $smarty->use_sub_dirs ? '/' : '^'; $_dir_sep = $smarty->use_sub_dirs ? '/' : '^';
$_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0; $_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0;
$_dir = $smarty->getCacheDir(); if (($_dir = realpath($smarty->getCacheDir())) === false) {
return 0;
}
$_dir .= '/';
$_dir_length = strlen($_dir); $_dir_length = strlen($_dir);
if (isset($_cache_id)) { if (isset($_cache_id)) {
$_cache_id_parts = explode('|', $_cache_id); $_cache_id_parts = explode('|', $_cache_id);
@ -180,7 +191,9 @@
$_cacheDirs = new RecursiveDirectoryIterator($_dir); $_cacheDirs = new RecursiveDirectoryIterator($_dir);
$_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST); $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST);
foreach ($_cache as $_file) { foreach ($_cache as $_file) {
if (substr(basename($_file->getPathname()),0,1) == '.' || strpos($_file, '.svn') !== false) continue; if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) {
continue;
}
// directory ? // directory ?
if ($_file->isDir()) { if ($_file->isDir()) {
if (!$_cache->isDot()) { if (!$_cache->isDot()) {
@ -192,12 +205,12 @@
$_parts_count = count($_parts); $_parts_count = count($_parts);
// check name // check name
if (isset($resource_name)) { if (isset($resource_name)) {
if ($_parts[$_parts_count-1] != $_resourcename_parts) { if ($_parts[$_parts_count - 1] != $_resourcename_parts) {
continue; continue;
} }
} }
// check compile id // check compile id
if (isset($_compile_id) && (!isset($_parts[$_parts_count-2 - $_compile_id_offset]) || $_parts[$_parts_count-2 - $_compile_id_offset] != $_compile_id)) { if (isset($_compile_id) && (!isset($_parts[$_parts_count - 2 - $_compile_id_offset]) || $_parts[$_parts_count - 2 - $_compile_id_offset] != $_compile_id)) {
continue; continue;
} }
// check cache id // check cache id
@ -207,8 +220,10 @@
if ($_parts_count < $_cache_id_parts_count) { if ($_parts_count < $_cache_id_parts_count) {
continue; continue;
} }
for ($i = 0; $i < $_cache_id_parts_count; $i++) { for ($i = 0; $i < $_cache_id_parts_count; $i ++) {
if ($_parts[$i] != $_cache_id_parts[$i]) continue 2; if ($_parts[$i] != $_cache_id_parts[$i]) {
continue 2;
}
} }
} }
// expired ? // expired ?
@ -237,7 +252,8 @@
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @return booelan true or false if cache is locked *
* @return boolean true or false if cache is locked
*/ */
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
@ -256,6 +272,8 @@
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
*
* @return bool|void
*/ */
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
@ -268,10 +286,12 @@
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
*
* @return bool|void
*/ */
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
$cached->is_locked = false; $cached->is_locked = false;
@unlink($cached->lock_id); @unlink($cached->lock_id);
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Append * Smarty Internal Plugin Compile Append
*
* Compiles the {append} tag * Compiles the {append} tag
* *
* @package Smarty * @package Smarty
@ -23,6 +22,7 @@ class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -47,5 +47,4 @@ class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign
// call compile assign // call compile assign
return parent::compile($_new_attr, $compiler, $_params); return parent::compile($_new_attr, $compiler, $_params);
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Assign * Smarty Internal Plugin Compile Assign
*
* Compiles the {assign} tag * Compiles the {assign} tag
* *
* @package Smarty * @package Smarty
@ -23,6 +22,7 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -83,5 +83,4 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase
return $output; return $output;
} }
} }

@ -2,7 +2,6 @@
/** /**
* Smarty Internal Plugin Compile Block * Smarty Internal Plugin Compile Block
*
* Compiles the {block}{/block} tags * Compiles the {block}{/block} tags
* *
* @package Smarty * @package Smarty
@ -70,6 +69,7 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return boolean true * @return boolean true
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -78,13 +78,18 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
$_name = trim($_attr['name'], "\"'"); $_name = trim($_attr['name'], "\"'");
// existing child must override parent settings
if (isset($compiler->template->block_data[$_name]) && $compiler->template->block_data[$_name]['mode'] == 'replace') {
$_attr['append'] = false;
$_attr['prepend'] = false;
}
// check if we process an inheritance child template // check if we process an inheritance child template
if ($compiler->inheritance_child) { if ($compiler->inheritance_child) {
array_unshift(self::$nested_block_names, $_name); array_unshift(self::$nested_block_names, $_name);
$this->template->block_data[$_name]['source'] = '';
// build {block} for child block // build {block} for child block
self::$block_data[$_name]['source'] = self::$block_data[$_name]['source'] =
"{$compiler->smarty->left_delimiter}private_child_block name={$_attr['name']} file='{$compiler->template->source->filepath}'" . "{$compiler->smarty->left_delimiter}private_child_block name={$_attr['name']} file='{$compiler->template->source->filepath}' type='{$compiler->template->source->type}' resource='{$compiler->template->template_resource}'" .
" uid='{$compiler->template->source->uid}' line={$compiler->lex->line}"; " uid='{$compiler->template->source->uid}' line={$compiler->lex->line}";
if ($_attr['nocache']) { if ($_attr['nocache']) {
self::$block_data[$_name]['source'] .= ' nocache'; self::$block_data[$_name]['source'] .= ' nocache';
@ -114,12 +119,12 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase
return true; return true;
} }
/** /**
* Compile saved child block source * Compile saved child block source
* *
* @param object $compiler compiler object * @param object $compiler compiler object
* @param string $_name optional name of child block * @param string $_name optional name of child block
*
* @return string compiled code of child block * @return string compiled code of child block
*/ */
static function compileChildBlock($compiler, $_name = null) static function compileChildBlock($compiler, $_name = null)
@ -208,7 +213,8 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase
* *
* @param object $compiler compiler object * @param object $compiler compiler object
* @param string $_name optional name of child block * @param string $_name optional name of child block
* @return string compiled code of schild block *
* @return string compiled code of child block
*/ */
static function compileParentBlock($compiler, $_name = null) static function compileParentBlock($compiler, $_name = null)
{ {
@ -237,17 +243,16 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase
/** /**
* Process block source * Process block source
* *
* @param $compiler
* @param string $source source text * @param string $source source text
* @return '' *
*/ */
static function blockSource($compiler, $source) static function blockSource($compiler, $source)
{ {
Smarty_Internal_Compile_Block::$block_data[Smarty_Internal_Compile_Block::$nested_block_names[0]]['source'] .= $source; Smarty_Internal_Compile_Block::$block_data[Smarty_Internal_Compile_Block::$nested_block_names[0]]['source'] .= $source;
} }
} }
/** /**
* Smarty Internal Plugin Compile BlockClose Class * Smarty Internal Plugin Compile BlockClose Class
* *
@ -261,6 +266,7 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -276,7 +282,6 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase
if ($compiler->inheritance_child) { if ($compiler->inheritance_child) {
$name1 = Smarty_Internal_Compile_Block::$nested_block_names[0]; $name1 = Smarty_Internal_Compile_Block::$nested_block_names[0];
Smarty_Internal_Compile_Block::$block_data[$name1]['source'] .= "{$compiler->smarty->left_delimiter}/private_child_block{$compiler->smarty->right_delimiter}"; Smarty_Internal_Compile_Block::$block_data[$name1]['source'] .= "{$compiler->smarty->left_delimiter}/private_child_block{$compiler->smarty->right_delimiter}";
$level = count(Smarty_Internal_Compile_Block::$nested_block_names);
array_shift(Smarty_Internal_Compile_Block::$nested_block_names); array_shift(Smarty_Internal_Compile_Block::$nested_block_names);
if (!empty(Smarty_Internal_Compile_Block::$nested_block_names)) { if (!empty(Smarty_Internal_Compile_Block::$nested_block_names)) {
$name2 = Smarty_Internal_Compile_Block::$nested_block_names[0]; $name2 = Smarty_Internal_Compile_Block::$nested_block_names[0];
@ -361,14 +366,14 @@ class Smarty_Internal_Compile_Private_Child_Block extends Smarty_Internal_Compil
* @var array * @var array
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $required_attributes = array('name', 'file', 'uid', 'line'); public $required_attributes = array('name', 'file', 'uid', 'line', 'type', 'resource');
/** /**
* Compiles code for the {private_child_block} tag * Compiles code for the {private_child_block} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return boolean true * @return boolean true
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -376,6 +381,16 @@ class Smarty_Internal_Compile_Private_Child_Block extends Smarty_Internal_Compil
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
// update template with original template resource of {block}
if (trim($_attr['type'], "'") == 'file') {
$compiler->template->template_resource = 'file:' . realpath(trim($_attr['file'], "'"));
} else {
$compiler->template->template_resource = trim($_attr['resource'], "'");
}
// source object
unset ($compiler->template->source);
$exists = $compiler->template->source->exists;
// must merge includes // must merge includes
if ($_attr['nocache'] == true) { if ($_attr['nocache'] == true) {
$compiler->tag_nocache = true; $compiler->tag_nocache = true;
@ -403,12 +418,12 @@ class Smarty_Internal_Compile_Private_Child_Block extends Smarty_Internal_Compil
class Smarty_Internal_Compile_Private_Child_Blockclose extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Private_Child_Blockclose extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {/private_child_block} tag * Compiles code for the {/private_child_block} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return boolean true * @return boolean true
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)

@ -1,13 +1,13 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Break * Smarty Internal Plugin Compile Break
*
* Compiles the {break} tag * Compiles the {break} tag
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Break Class * Smarty Internal Plugin Compile Break Class
* *
@ -37,6 +37,7 @@ class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -61,15 +62,14 @@ class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
$stack_count = count($compiler->_tag_stack) - 1; $stack_count = count($compiler->_tag_stack) - 1;
while ($level_count > 0 && $stack_count >= 0) { while ($level_count > 0 && $stack_count >= 0) {
if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) { if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {
$level_count--; $level_count --;
} }
$stack_count--; $stack_count --;
} }
if ($level_count != 0) { if ($level_count != 0) {
$compiler->trigger_template_error("cannot break {$_levels} level(s)", $compiler->lex->taglineno); $compiler->trigger_template_error("cannot break {$_levels} level(s)", $compiler->lex->taglineno);
} }
return "<?php break {$_levels}?>"; return "<?php break {$_levels};?>";
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Function_Call * Smarty Internal Plugin Compile Function_Call
*
* Compiles the calls of user defined tags defined by {function} * Compiles the calls of user defined tags defined by {function}
* *
* @package Smarty * @package Smarty
@ -44,7 +43,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter *
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -53,7 +52,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
// save possible attributes // save possible attributes
if (isset($_attr['assign'])) { if (isset($_attr['assign'])) {
// output will be stored in a smarty variable instead of beind displayed // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign']; $_assign = $_attr['assign'];
} }
$_name = $_attr['name']; $_name = $_attr['name'];
@ -96,7 +95,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
} }
} }
} }
//varibale name? //variable name?
if (!(strpos($_name, '$') === false)) { if (!(strpos($_name, '$') === false)) {
$call_cache = $_name; $call_cache = $_name;
$call_function = '$tmp = "smarty_template_function_".' . $_name . '; $tmp'; $call_function = '$tmp = "smarty_template_function_".' . $_name . '; $tmp';
@ -125,5 +124,4 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
return $_output; return $_output;
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Capture * Smarty Internal Plugin Compile Capture
*
* Compiles the {capture} tag * Compiles the {capture} tag
* *
* @package Smarty * @package Smarty
@ -37,6 +36,7 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -55,7 +55,6 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase
return $_output; return $_output;
} }
} }
/** /**
@ -71,6 +70,7 @@ class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -93,5 +93,4 @@ class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase
return $_output; return $_output;
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Config Load * Smarty Internal Plugin Compile Config Load
*
* Compiles the {config load} tag * Compiles the {config load} tag
* *
* @package Smarty * @package Smarty
@ -30,7 +29,7 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase
* @var array * @var array
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $shorttag_order = array('file','section'); public $shorttag_order = array('file', 'section');
/** /**
* Attribute definition: Overwrites base class. * Attribute definition: Overwrites base class.
* *
@ -44,11 +43,12 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
{ {
static $_is_legal_scope = array('local' => true,'parent' => true,'root' => true,'global' => true); static $_is_legal_scope = array('local' => true, 'parent' => true, 'root' => true, 'global' => true);
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
@ -56,7 +56,7 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase
$compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
} }
// save posible attributes // save possible attributes
$conf_file = $_attr['file']; $conf_file = $_attr['file'];
if (isset($_attr['section'])) { if (isset($_attr['section'])) {
$section = $_attr['section']; $section = $_attr['section'];
@ -79,5 +79,4 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase
return $_output; return $_output;
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Continue * Smarty Internal Plugin Compile Continue
*
* Compiles the {continue} tag * Compiles the {continue} tag
* *
* @package Smarty * @package Smarty
@ -38,6 +37,7 @@ class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -62,15 +62,14 @@ class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase
$stack_count = count($compiler->_tag_stack) - 1; $stack_count = count($compiler->_tag_stack) - 1;
while ($level_count > 0 && $stack_count >= 0) { while ($level_count > 0 && $stack_count >= 0) {
if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) { if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {
$level_count--; $level_count --;
} }
$stack_count--; $stack_count --;
} }
if ($level_count != 0) { if ($level_count != 0) {
$compiler->trigger_template_error("cannot continue {$_levels} level(s)", $compiler->lex->taglineno); $compiler->trigger_template_error("cannot continue {$_levels} level(s)", $compiler->lex->taglineno);
} }
return "<?php continue {$_levels}?>"; return "<?php continue {$_levels};?>";
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Debug * Smarty Internal Plugin Compile Debug
*
* Compiles the {debug} tag. * Compiles the {debug} tag.
* It opens a window the the Smarty Debugging Console. * It opens a window the the Smarty Debugging Console.
* *
@ -23,6 +22,7 @@ class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -38,5 +38,4 @@ class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase
return $_output; return $_output;
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Eval * Smarty Internal Plugin Compile Eval
*
* Compiles the {eval} tag. * Compiles the {eval} tag.
* *
* @package Smarty * @package Smarty
@ -37,13 +36,14 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
* @var array * @var array
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $shorttag_order = array('var','assign'); public $shorttag_order = array('var', 'assign');
/** /**
* Compiles code for the {eval} tag * Compiles code for the {eval} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -53,12 +53,12 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
if (isset($_attr['assign'])) { if (isset($_attr['assign'])) {
// output will be stored in a smarty variable instead of beind displayed // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign']; $_assign = $_attr['assign'];
} }
// create template object // create template object
$_output = "\$_template = new {$compiler->smarty->template_class}('eval:'.".$_attr['var'].", \$_smarty_tpl->smarty, \$_smarty_tpl);"; $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'." . $_attr['var'] . ", \$_smarty_tpl->smarty, \$_smarty_tpl);";
//was there an assign attribute? //was there an assign attribute?
if (isset($_assign)) { if (isset($_assign)) {
$_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());"; $_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());";
@ -68,5 +68,4 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
return "<?php $_output ?>"; return "<?php $_output ?>";
} }
} }

@ -2,7 +2,6 @@
/** /**
* Smarty Internal Plugin Compile extend * Smarty Internal Plugin Compile extend
*
* Compiles the {extends} tag * Compiles the {extends} tag
* *
* @package Smarty * @package Smarty
@ -38,6 +37,7 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -52,6 +52,9 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase
} }
$name = $_attr['file']; $name = $_attr['file'];
/** @var Smarty_Internal_Template $_smarty_tpl
* used in evaluated code
*/
$_smarty_tpl = $compiler->template; $_smarty_tpl = $compiler->template;
eval("\$tpl_name = $name;"); eval("\$tpl_name = $name;");
// create template object // create template object
@ -59,7 +62,7 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase
// check for recursion // check for recursion
$uid = $_template->source->uid; $uid = $_template->source->uid;
if (isset($compiler->extends_uid[$uid])) { if (isset($compiler->extends_uid[$uid])) {
$compiler->trigger_template_error("illegal recursive call of \"$include_file\"", $this->lex->line - 1); $compiler->trigger_template_error("illegal recursive call of \"$include_file\"", $compiler->lex->line - 1);
} }
$compiler->extends_uid[$uid] = true; $compiler->extends_uid[$uid] = true;
if (empty($_template->source->components)) { if (empty($_template->source->components)) {
@ -69,7 +72,7 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase
array_unshift($compiler->sources, $source); array_unshift($compiler->sources, $source);
$uid = $source->uid; $uid = $source->uid;
if (isset($compiler->extends_uid[$uid])) { if (isset($compiler->extends_uid[$uid])) {
$compiler->trigger_template_error("illegal recursive call of \"{$sorce->filepath}\"", $this->lex->line - 1); $compiler->trigger_template_error("illegal recursive call of \"{$source->filepath}\"", $compiler->lex->line - 1);
} }
$compiler->extends_uid[$uid] = true; $compiler->extends_uid[$uid] = true;
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile For * Smarty Internal Plugin Compile For
*
* Compiles the {for} {forelse} {/for} tags * Compiles the {for} {forelse} {/for} tags
* *
* @package Smarty * @package Smarty
@ -19,21 +18,18 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {for} tag * Compiles code for the {for} tag
* * Smarty 3 does implement two different syntax's:
* Smarty 3 does implement two different sytaxes:
*
* - {for $var in $array} * - {for $var in $array}
* For looping over arrays or iterators * For looping over arrays or iterators
*
* - {for $x=0; $x<$y; $x++} * - {for $x=0; $x<$y; $x++}
* For general loops * For general loops
* * The parser is generating different sets of attribute by which this compiler can
* The parser is gereration different sets of attribute by which this compiler can * determine which syntax is used.
* determin which syntax is used.
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -81,7 +77,6 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase
// return compiled code // return compiled code
return $output; return $output;
} }
} }
/** /**
@ -98,6 +93,7 @@ class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -110,7 +106,6 @@ class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase
return "<?php }} else { ?>"; return "<?php }} else { ?>";
} }
} }
/** /**
@ -127,6 +122,7 @@ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -146,5 +142,4 @@ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase
return "<?php }} ?>"; return "<?php }} ?>";
} }
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Foreach * Smarty Internal Plugin Compile Foreach
*
* Compiles the {foreach} {foreachelse} {/foreach} tags * Compiles the {foreach} {foreachelse} {/foreach} tags
* *
* @package Smarty * @package Smarty
@ -37,7 +36,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase
* @var array * @var array
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $shorttag_order = array('from','item','key','name'); public $shorttag_order = array('from', 'item', 'key', 'name');
/** /**
* Compiles code for the {foreach} tag * Compiles code for the {foreach} tag
@ -45,11 +44,11 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
{ {
$tpl = $compiler->template;
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
@ -80,12 +79,12 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase
$ItemVarName = '$' . trim($item, '\'"') . '@'; $ItemVarName = '$' . trim($item, '\'"') . '@';
// evaluates which Smarty variables and properties have to be computed // evaluates which Smarty variables and properties have to be computed
if ($has_name) { if ($has_name) {
$usesSmartyFirst = strpos($tpl->source->content, $SmartyVarName . 'first') !== false; $usesSmartyFirst = strpos($compiler->lex->data, $SmartyVarName . 'first') !== false;
$usesSmartyLast = strpos($tpl->source->content, $SmartyVarName . 'last') !== false; $usesSmartyLast = strpos($compiler->lex->data, $SmartyVarName . 'last') !== false;
$usesSmartyIndex = strpos($tpl->source->content, $SmartyVarName . 'index') !== false; $usesSmartyIndex = strpos($compiler->lex->data, $SmartyVarName . 'index') !== false;
$usesSmartyIteration = strpos($tpl->source->content, $SmartyVarName . 'iteration') !== false; $usesSmartyIteration = strpos($compiler->lex->data, $SmartyVarName . 'iteration') !== false;
$usesSmartyShow = strpos($tpl->source->content, $SmartyVarName . 'show') !== false; $usesSmartyShow = strpos($compiler->lex->data, $SmartyVarName . 'show') !== false;
$usesSmartyTotal = strpos($tpl->source->content, $SmartyVarName . 'total') !== false; $usesSmartyTotal = strpos($compiler->lex->data, $SmartyVarName . 'total') !== false;
} else { } else {
$usesSmartyFirst = false; $usesSmartyFirst = false;
$usesSmartyLast = false; $usesSmartyLast = false;
@ -93,12 +92,12 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase
$usesSmartyShow = false; $usesSmartyShow = false;
} }
$usesPropFirst = $usesSmartyFirst || strpos($tpl->source->content, $ItemVarName . 'first') !== false; $usesPropFirst = $usesSmartyFirst || strpos($compiler->lex->data, $ItemVarName . 'first') !== false;
$usesPropLast = $usesSmartyLast || strpos($tpl->source->content, $ItemVarName . 'last') !== false; $usesPropLast = $usesSmartyLast || strpos($compiler->lex->data, $ItemVarName . 'last') !== false;
$usesPropIndex = $usesPropFirst || strpos($tpl->source->content, $ItemVarName . 'index') !== false; $usesPropIndex = $usesPropFirst || strpos($compiler->lex->data, $ItemVarName . 'index') !== false;
$usesPropIteration = $usesPropLast || strpos($tpl->source->content, $ItemVarName . 'iteration') !== false; $usesPropIteration = $usesPropLast || strpos($compiler->lex->data, $ItemVarName . 'iteration') !== false;
$usesPropShow = strpos($tpl->source->content, $ItemVarName . 'show') !== false; $usesPropShow = strpos($compiler->lex->data, $ItemVarName . 'show') !== false;
$usesPropTotal = $usesSmartyTotal || $usesSmartyShow || $usesPropShow || $usesPropLast || strpos($tpl->source->content, $ItemVarName . 'total') !== false; $usesPropTotal = $usesSmartyTotal || $usesSmartyShow || $usesPropShow || $usesPropLast || strpos($compiler->lex->data, $ItemVarName . 'total') !== false;
// generate output code // generate output code
$output = "<?php "; $output = "<?php ";
$output .= " \$_smarty_tpl->tpl_vars[$item] = new Smarty_Variable; \$_smarty_tpl->tpl_vars[$item]->_loop = false;\n"; $output .= " \$_smarty_tpl->tpl_vars[$item] = new Smarty_Variable; \$_smarty_tpl->tpl_vars[$item]->_loop = false;\n";
@ -182,6 +181,7 @@ class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -194,7 +194,6 @@ class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase
return "<?php }\nif (!\$_smarty_tpl->tpl_vars[$item]->_loop) {\n?>"; return "<?php }\nif (!\$_smarty_tpl->tpl_vars[$item]->_loop) {\n?>";
} }
} }
/** /**
@ -211,6 +210,7 @@ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -226,5 +226,4 @@ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
return "<?php } ?>"; return "<?php } ?>";
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Function * Smarty Internal Plugin Compile Function
*
* Compiles the {function} {/function} tags * Compiles the {function} {/function} tags
* *
* @package Smarty * @package Smarty
@ -45,6 +44,7 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return boolean true * @return boolean true
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -64,9 +64,12 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
// set flag that we are compiling a template function // set flag that we are compiling a template function
$compiler->compiles_template_function = true; $compiler->compiles_template_function = true;
$compiler->template->properties['function'][$_name]['parameter'] = array(); $compiler->template->properties['function'][$_name]['parameter'] = array();
/** @var Smarty_Internal_Template $_smarty_tpl
* used in evaluated code
*/
$_smarty_tpl = $compiler->template; $_smarty_tpl = $compiler->template;
foreach ($_attr as $_key => $_data) { foreach ($_attr as $_key => $_data) {
eval ('$tmp='.$_data.';'); eval ('$tmp=' . $_data . ';');
$compiler->template->properties['function'][$_name]['parameter'][$_key] = $tmp; $compiler->template->properties['function'][$_name]['parameter'][$_key] = $tmp;
} }
$compiler->smarty->template_functions[$_name]['parameter'] = $compiler->template->properties['function'][$_name]['parameter']; $compiler->smarty->template_functions[$_name]['parameter'] = $compiler->template->properties['function'][$_name]['parameter'];
@ -79,7 +82,7 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
foreach (\$_smarty_tpl->smarty->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}; foreach (\$_smarty_tpl->smarty->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);};
foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>"; foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>";
} }
// Init temporay context // Init temporary context
$compiler->template->required_plugins = array('compiled' => array(), 'nocache' => array()); $compiler->template->required_plugins = array('compiled' => array(), 'nocache' => array());
$compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser); $compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser);
$compiler->parser->current_buffer->append_subtree(new _smarty_tag($compiler->parser, $output)); $compiler->parser->current_buffer->append_subtree(new _smarty_tag($compiler->parser, $output));
@ -88,7 +91,6 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
$compiler->template->properties['function'][$_name]['compiled'] = ''; $compiler->template->properties['function'][$_name]['compiled'] = '';
return true; return true;
} }
} }
/** /**
@ -105,6 +107,7 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return boolean true * @return boolean true
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -132,11 +135,6 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
} }
$plugins_string .= "?>/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/';?>\n"; $plugins_string .= "?>/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/';?>\n";
} }
// remove last line break from function definition
$last = count($compiler->parser->current_buffer->subtrees) - 1;
if ($compiler->parser->current_buffer->subtrees[$last] instanceof _smarty_linebreak) {
unset($compiler->parser->current_buffer->subtrees[$last]);
}
// if caching save template function for possible nocache call // if caching save template function for possible nocache call
if ($compiler->template->caching) { if ($compiler->template->caching) {
$compiler->template->properties['function'][$_name]['compiled'] .= $plugins_string $compiler->template->properties['function'][$_name]['compiled'] .= $plugins_string
@ -161,5 +159,4 @@ foreach (Smarty::\$global_tpl_vars as \$key => \$value) if(!isset(\$_smarty_tpl-
return $output; return $output;
} }
} }

@ -1,20 +1,19 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile If * Smarty Internal Plugin Compile If
* * Compiles the {if} {else} {elseif} {/if} tags
* Compiles the {if} {else} {elseif} {/if} tags *
* * @package Smarty
* @package Smarty * @subpackage Compiler
* @subpackage Compiler * @author Uwe Tews
* @author Uwe Tews */
*/
/** /**
* Smarty Internal Plugin Compile If Class * Smarty Internal Plugin Compile If Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
{ {
/** /**
@ -23,6 +22,7 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -33,7 +33,7 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
// must whole block be nocache ? // must whole block be nocache ?
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache; $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
if (!array_key_exists("if condition",$parameter)) { if (!array_key_exists("if condition", $parameter)) {
$compiler->trigger_template_error("missing if condition", $compiler->lex->taglineno); $compiler->trigger_template_error("missing if condition", $compiler->lex->taglineno);
} }
@ -50,11 +50,11 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
$_nocache = ''; $_nocache = '';
} }
if (is_array($parameter['if condition']['var'])) { if (is_array($parameter['if condition']['var'])) {
$_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]) || !is_array(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]->value)) \$_smarty_tpl->createLocalArrayVariable(".$parameter['if condition']['var']['var']."$_nocache);\n"; $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
$_output .= "if (\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]->value".$parameter['if condition']['var']['smarty_internal_index']." = ".$parameter['if condition']['value'].") {?>"; $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>";
} else { } else {
$_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."])) \$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."] = new Smarty_Variable(null{$_nocache});"; $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
$_output .= "if (\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."]->value = ".$parameter['if condition']['value'].") {?>"; $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>";
} }
return $_output; return $_output;
@ -62,15 +62,14 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
return "<?php if ({$parameter['if condition']}) {?>"; return "<?php if ({$parameter['if condition']}) {?>";
} }
} }
} }
/** /**
* Smarty Internal Plugin Compile Else Class * Smarty Internal Plugin Compile Else Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase
{ {
/** /**
@ -79,6 +78,7 @@ class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -88,15 +88,14 @@ class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase
return "<?php } else { ?>"; return "<?php } else { ?>";
} }
} }
/** /**
* Smarty Internal Plugin Compile ElseIf Class * Smarty Internal Plugin Compile ElseIf Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
{ {
/** /**
@ -105,6 +104,7 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -114,7 +114,7 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif')); list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
if (!array_key_exists("if condition",$parameter)) { if (!array_key_exists("if condition", $parameter)) {
$compiler->trigger_template_error("missing elseif condition", $compiler->lex->taglineno); $compiler->trigger_template_error("missing elseif condition", $compiler->lex->taglineno);
} }
@ -154,8 +154,9 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
} }
} else { } else {
$tmp = ''; $tmp = '';
foreach ($compiler->prefix_code as $code) foreach ($compiler->prefix_code as $code) {
$tmp .= $code; $tmp .= $code;
}
$compiler->prefix_code = array(); $compiler->prefix_code = array();
$this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache)); $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache));
if ($condition_by_assign) { if ($condition_by_assign) {
@ -173,15 +174,14 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
} }
} }
} }
} }
/** /**
* Smarty Internal Plugin Compile Ifclose Class * Smarty Internal Plugin Compile Ifclose Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase
{ {
/** /**
@ -190,6 +190,7 @@ class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -200,11 +201,10 @@ class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase
} }
list($nesting, $compiler->nocache) = $this->closeTag($compiler, array('if', 'else', 'elseif')); list($nesting, $compiler->nocache) = $this->closeTag($compiler, array('if', 'else', 'elseif'));
$tmp = ''; $tmp = '';
for ($i = 0; $i < $nesting; $i++) { for ($i = 0; $i < $nesting; $i ++) {
$tmp .= '}'; $tmp .= '}';
} }
return "<?php {$tmp}?>"; return "<?php {$tmp}?>";
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Include * Smarty Internal Plugin Compile Include
*
* Compiles the {include} tag * Compiles the {include} tag
* *
* @package Smarty * @package Smarty
@ -56,17 +55,18 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
{ {
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
// save posible attributes // save possible attributes
$include_file = $_attr['file']; $include_file = $_attr['file'];
if (isset($_attr['assign'])) { if (isset($_attr['assign'])) {
// output will be stored in a smarty variable instead of beind displayed // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign']; $_assign = $_attr['assign'];
} }
@ -85,11 +85,11 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
$_caching = Smarty::CACHING_OFF; $_caching = Smarty::CACHING_OFF;
// flag if included template code should be merged into caller // flag if included template code should be merged into caller
$merge_compiled_includes = ($compiler->smarty->merge_compiled_includes ||($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes)|| $_attr['inline'] === true) && !$compiler->template->source->recompiled; $merge_compiled_includes = ($compiler->smarty->merge_compiled_includes || ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) || $_attr['inline'] === true) && !$compiler->template->source->recompiled;
// set default when in nocache mode // set default when in nocache mode
// if ($compiler->template->caching && ($compiler->nocache || $compiler->tag_nocache || $compiler->forceNocache == 2)) { // if ($compiler->template->caching && ($compiler->nocache || $compiler->tag_nocache || $compiler->forceNocache == 2)) {
if ($compiler->template->caching && ((!$compiler->inheritance && !$compiler->nocache && !$compiler->tag_nocache) || ($compiler->inheritance && ($compiler->nocache ||$compiler->tag_nocache)))) { if ($compiler->template->caching && ((!$compiler->inheritance && !$compiler->nocache && !$compiler->tag_nocache) || ($compiler->inheritance && ($compiler->nocache || $compiler->tag_nocache)))) {
$_caching = self::CACHING_NOCACHE_CODE; $_caching = self::CACHING_NOCACHE_CODE;
} }
/* /*
@ -164,12 +164,15 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
$uid = sha1($_compile_id); $uid = sha1($_compile_id);
$tpl_name = null; $tpl_name = null;
$nocache = false; $nocache = false;
/** @var Smarty_Internal_Template $_smarty_tpl
* used in evaluated code
*/
$_smarty_tpl = $compiler->template; $_smarty_tpl = $compiler->template;
eval("\$tpl_name = $include_file;"); eval("\$tpl_name = $include_file;");
if (!isset($compiler->smarty->merged_templates_func[$tpl_name][$uid]) || $compiler->inheritance) { if (!isset($compiler->smarty->merged_templates_func[$tpl_name][$uid])) {
$tpl = new $compiler->smarty->template_class ($tpl_name, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id); $tpl = new $compiler->smarty->template_class ($tpl_name, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id);
// save unique function name // save unique function name
$compiler->smarty->merged_templates_func[$tpl_name][$uid]['func'] = $tpl->properties['unifunc'] = 'content_' . str_replace('.', '_', uniqid('', true)); $compiler->smarty->merged_templates_func[$tpl_name][$uid]['func'] = $tpl->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
// use current nocache hash for inlined code // use current nocache hash for inlined code
$compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash'] = $tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash']; $compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash'] = $tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash'];
if ($compiler->template->caching && $_caching == self::CACHING_NOCACHE_CODE) { if ($compiler->template->caching && $_caching == self::CACHING_NOCACHE_CODE) {
@ -183,7 +186,6 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
$tpl->mustCompile = true; $tpl->mustCompile = true;
if (!($tpl->source->uncompiled) && $tpl->source->exists) { if (!($tpl->source->uncompiled) && $tpl->source->exists) {
// get compiled code // get compiled code
$compiled_code = $tpl->compiler->compileTemplate($tpl, $nocache); $compiled_code = $tpl->compiler->compileTemplate($tpl, $nocache);
// release compiler object to free memory // release compiler object to free memory
@ -214,17 +216,17 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
if (!empty($_attr)) { if (!empty($_attr)) {
if ($_parent_scope == Smarty::SCOPE_LOCAL) { if ($_parent_scope == Smarty::SCOPE_LOCAL) {
// create variables // create variables
$nccode = '';
foreach ($_attr as $key => $value) { foreach ($_attr as $key => $value) {
$_pairs[] = "'$key'=>$value"; $_pairs[] = "'$key'=>$value";
$nccode .= "\$_smarty_tpl->tpl_vars['$key'] = new Smarty_variable($value);\n";
} }
$_vars = 'array(' . join(',', $_pairs) . ')'; $_vars = 'array(' . join(',', $_pairs) . ')';
$_has_vars = true;
} else { } else {
$compiler->trigger_template_error('variable passing not allowed in parent/global scope', $compiler->lex->taglineno); $compiler->trigger_template_error('variable passing not allowed in parent/global scope', $compiler->lex->taglineno);
} }
} else { } else {
$_vars = 'array()'; $_vars = 'array()';
$_has_vars = false;
} }
if ($has_compiled_template) { if ($has_compiled_template) {
// never call inline templates in nocache mode // never call inline templates in nocache mode
@ -232,6 +234,11 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
$_hash = $compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash']; $_hash = $compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash'];
$_output = "<?php /* Call merged included template \"" . $tpl_name . "\" */\n"; $_output = "<?php /* Call merged included template \"" . $tpl_name . "\" */\n";
$_output .= "\$_tpl_stack[] = \$_smarty_tpl;\n"; $_output .= "\$_tpl_stack[] = \$_smarty_tpl;\n";
if (!empty($nccode) && $_caching == 9999 && $_smarty_tpl->caching) {
$compiler->suppressNocacheProcessing = false;
$_output .= substr($compiler->processNocacheCode('<?php ' .$nccode . "?>\n", true), 6, -3);
$compiler->suppressNocacheProcessing = true;
}
$_output .= " \$_smarty_tpl = \$_smarty_tpl->setupInlineSubTemplate($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope, '$_hash');\n"; $_output .= " \$_smarty_tpl = \$_smarty_tpl->setupInlineSubTemplate($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope, '$_hash');\n";
if (isset($_assign)) { if (isset($_assign)) {
$_output .= 'ob_start(); '; $_output .= 'ob_start(); ';

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Include PHP * Smarty Internal Plugin Compile Include PHP
*
* Compiles the {include_php} tag * Compiles the {include_php} tag
* *
* @package Smarty * @package Smarty
@ -44,6 +43,8 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @throws SmartyException
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -54,8 +55,9 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
$_output = '<?php '; /** @var Smarty_Internal_Template $_smarty_tpl
* used in evaluated code
*/
$_smarty_tpl = $compiler->template; $_smarty_tpl = $compiler->template;
$_filepath = false; $_filepath = false;
eval('$_file = ' . $_attr['file'] . ';'); eval('$_file = ' . $_attr['file'] . ';');
@ -102,5 +104,4 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
return "<?php include{$_once} ('{$_filepath}');?>\n"; return "<?php include{$_once} ('{$_filepath}');?>\n";
} }
} }
} }

@ -2,7 +2,6 @@
/** /**
* Smarty Internal Plugin Compile Insert * Smarty Internal Plugin Compile Insert
*
* Compiles the {insert} tag * Compiles the {insert} tag
* *
* @package Smarty * @package Smarty
@ -45,6 +44,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -59,12 +59,12 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
$_script = null; $_script = null;
$_output = '<?php '; $_output = '<?php ';
// save posible attributes // save possible attributes
eval('$_name = ' . $_attr['name'] . ';'); eval('$_name = ' . $_attr['name'] . ';');
if (isset($_attr['assign'])) { if (isset($_attr['assign'])) {
// output will be stored in a smarty variable instead of being displayed // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign']; $_assign = $_attr['assign'];
// create variable to make shure that the compiler knows about its nocache status // create variable to make sure that the compiler knows about its nocache status
$compiler->template->tpl_vars[trim($_attr['assign'], "'")] = new Smarty_Variable(null, true); $compiler->template->tpl_vars[trim($_attr['assign'], "'")] = new Smarty_Variable(null, true);
} }
if (isset($_attr['script'])) { if (isset($_attr['script'])) {
@ -137,5 +137,4 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
return $_output; return $_output;
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Ldelim * Smarty Internal Plugin Compile Ldelim
*
* Compiles the {ldelim} tag * Compiles the {ldelim} tag
* *
* @package Smarty * @package Smarty
@ -19,10 +18,11 @@ class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {ldelim} tag * Compiles code for the {ldelim} tag
*
* This tag does output the left delimiter * This tag does output the left delimiter
*
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -36,5 +36,4 @@ class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase
return $compiler->smarty->left_delimiter; return $compiler->smarty->left_delimiter;
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Nocache * Smarty Internal Plugin Compile Nocache
*
* Compiles the {nocache} {/nocache} tags. * Compiles the {nocache} {/nocache} tags.
* *
* @package Smarty * @package Smarty
@ -10,7 +9,7 @@
*/ */
/** /**
* Smarty Internal Plugin Compile Nocache Classv * Smarty Internal Plugin Compile Nocache Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
@ -19,11 +18,11 @@ class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {nocache} tag * Compiles code for the {nocache} tag
*
* This tag does not generate compiled output. It only sets a compiler flag. * This tag does not generate compiled output. It only sets a compiler flag.
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return bool * @return bool
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -32,17 +31,13 @@ class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase
if ($_attr['nocache'] === true) { if ($_attr['nocache'] === true) {
$compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
} }
if ($compiler->template->caching) {
// enter nocache mode // enter nocache mode
$this->openTag($compiler, 'nocache', $compiler->nocache);
$compiler->nocache = true; $compiler->nocache = true;
}
// this tag does not return compiled code // this tag does not return compiled code
$compiler->has_code = false; $compiler->has_code = false;
return true; return true;
} }
} }
/** /**
@ -55,24 +50,21 @@ class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {/nocache} tag * Compiles code for the {/nocache} tag
*
* This tag does not generate compiled output. It only sets a compiler flag. * This tag does not generate compiled output. It only sets a compiler flag.
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return bool * @return bool
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
{ {
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
if ($compiler->template->caching) { // leave nocache mode
// restore old nocache mode $compiler->nocache = false;
$compiler->nocache = $this->closeTag($compiler, 'nocache');
}
// this tag does not return compiled code // this tag does not return compiled code
$compiler->has_code = false; $compiler->has_code = false;
return true; return true;
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Block Plugin * Smarty Internal Plugin Compile Block Plugin
*
* Compiles code for the execution of block plugin * Compiles code for the execution of block plugin
* *
* @package Smarty * @package Smarty
@ -33,11 +32,12 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @param string $tag name of block plugin * @param string $tag name of block plugin
* @param string $function PHP function name * @param string $function PHP function name
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter, $tag, $function) public function compile($args, $compiler, $parameter, $tag, $function)
{ {
if (!isset($tag[5]) || substr($tag, -5) != 'close') { if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
// opening tag of block plugin // opening tag of block plugin
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
@ -67,20 +67,19 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
$compiler->tag_nocache = true; $compiler->tag_nocache = true;
} }
// closing tag of block plugin, restore nocache // closing tag of block plugin, restore nocache
list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, -5)); list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, - 5));
// This tag does create output // This tag does create output
$compiler->has_output = true; $compiler->has_output = true;
// compile code // compile code
if (!isset($parameter['modifier_list'])) { if (!isset($parameter['modifier_list'])) {
$mod_pre = $mod_post =''; $mod_pre = $mod_post = '';
} else { } else {
$mod_pre = ' ob_start(); '; $mod_pre = ' ob_start(); ';
$mod_post = 'echo '.$compiler->compileTag('private_modifier',array(),array('modifierlist'=>$parameter['modifier_list'],'value'=>'ob_get_clean()')).';'; $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';';
} }
$output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post." } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
} }
return $output . "\n"; return $output . "\n";
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Function Plugin * Smarty Internal Plugin Compile Function Plugin
*
* Compiles code for the execution of function plugin * Compiles code for the execution of function plugin
* *
* @package Smarty * @package Smarty
@ -40,6 +39,7 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @param string $tag name of function plugin * @param string $tag name of function plugin
* @param string $function PHP function name * @param string $function PHP function name
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter, $tag, $function) public function compile($args, $compiler, $parameter, $tag, $function)
@ -68,5 +68,4 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
return $output; return $output;
} }
} }

@ -2,7 +2,6 @@
/** /**
* Smarty Internal Plugin Compile Modifier * Smarty Internal Plugin Compile Modifier
*
* Compiles code for modifier execution * Compiles code for modifier execution
* *
* @package Smarty * @package Smarty
@ -24,6 +23,7 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -136,5 +136,4 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
return $output; return $output;
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Object Block Function * Smarty Internal Plugin Compile Object Block Function
*
* Compiles code for registered objects as block function * Compiles code for registered objects as block function
* *
* @package Smarty * @package Smarty
@ -33,11 +32,12 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @param string $tag name of block object * @param string $tag name of block object
* @param string $method name of method to call * @param string $method name of method to call
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter, $tag, $method) public function compile($args, $compiler, $parameter, $tag, $method)
{ {
if (!isset($tag[5]) || substr($tag, -5) != 'close') { if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
// opening tag of block plugin // opening tag of block plugin
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
@ -62,7 +62,7 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
// compile code // compile code
$output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}->{$method}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}->{$method}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
} else { } else {
$base_tag = substr($tag, 0, -5); $base_tag = substr($tag, 0, - 5);
// must endblock be nocache? // must endblock be nocache?
if ($compiler->nocache) { if ($compiler->nocache) {
$compiler->tag_nocache = true; $compiler->tag_nocache = true;
@ -83,5 +83,4 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
return $output . "\n"; return $output . "\n";
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Object Funtion * Smarty Internal Plugin Compile Object Function
*
* Compiles code for registered objects as function * Compiles code for registered objects as function
* *
* @package Smarty * @package Smarty
@ -33,6 +32,7 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @param string $tag name of function * @param string $tag name of function
* @param string $method name of method to call * @param string $method name of method to call
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter, $tag, $method) public function compile($args, $compiler, $parameter, $tag, $method)
@ -81,5 +81,4 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
return $output; return $output;
} }
} }

@ -1,20 +1,19 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Print Expression * Smarty Internal Plugin Compile Print Expression
* * Compiles any tag which will output an expression or variable
* Compiles any tag which will output an expression or variable *
* * @package Smarty
* @package Smarty * @subpackage Compiler
* @subpackage Compiler * @author Uwe Tews
* @author Uwe Tews */
*/
/** /**
* Smarty Internal Plugin Compile Print Expression Class * Smarty Internal Plugin Compile Print Expression Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase
{ {
/** /**
@ -33,11 +32,13 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
public $option_flags = array('nocache', 'nofilter'); public $option_flags = array('nocache', 'nofilter');
/** /**
* Compiles code for gererting output from any expression * Compiles code for generating output from any expression
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @throws SmartyException
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -48,12 +49,6 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
if ($_attr['nocache'] === true) { if ($_attr['nocache'] === true) {
$compiler->tag_nocache = true; $compiler->tag_nocache = true;
} }
// filter handling
if ($_attr['nofilter'] === true) {
$_filter = 'false';
} else {
$_filter = 'true';
}
if (isset($_attr['assign'])) { if (isset($_attr['assign'])) {
// assign output to variable // assign output to variable
$output = "<?php \$_smarty_tpl->assign({$_attr['assign']},{$parameter['value']});?>"; $output = "<?php \$_smarty_tpl->assign({$_attr['assign']},{$parameter['value']});?>";
@ -71,7 +66,7 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
$modifierlist = array(); $modifierlist = array();
foreach ($compiler->smarty->default_modifiers as $key => $single_default_modifier) { foreach ($compiler->smarty->default_modifiers as $key => $single_default_modifier) {
preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array); preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array);
for ($i = 0, $count = count($mod_array[0]);$i < $count;$i++) { for ($i = 0, $count = count($mod_array[0]); $i < $count; $i ++) {
if ($mod_array[0][$i] != ':') { if ($mod_array[0][$i] != ':') {
$modifierlist[$key][] = $mod_array[0][$i]; $modifierlist[$key][] = $mod_array[0][$i];
} }
@ -85,7 +80,7 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
if ($compiler->template->smarty->escape_html) { if ($compiler->template->smarty->escape_html) {
$output = "htmlspecialchars({$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')"; $output = "htmlspecialchars({$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')";
} }
// loop over registerd filters // loop over registered filters
if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) { if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) {
foreach ($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => $function) { foreach ($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => $function) {
if (!is_array($function)) { if (!is_array($function)) {
@ -130,7 +125,8 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
/** /**
* @param object $compiler compiler object * @param object $compiler compiler object
* @param string $name name of variable filter * @param string $name name of variable filter
* @param type $output embedded output * @param string $output embedded output
*
* @return string * @return string
*/ */
private function compile_output_filter($compiler, $name, $output) private function compile_output_filter($compiler, $name, $output)
@ -152,5 +148,4 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
return "{$plugin_name}({$output},\$_smarty_tpl)"; return "{$plugin_name}({$output},\$_smarty_tpl)";
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Registered Block * Smarty Internal Plugin Compile Registered Block
*
* Compiles code for the execution of a registered block function * Compiles code for the execution of a registered block function
* *
* @package Smarty * @package Smarty
@ -32,11 +31,12 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @param string $tag name of block function * @param string $tag name of block function
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter, $tag) public function compile($args, $compiler, $parameter, $tag)
{ {
if (!isset($tag[5]) || substr($tag,-5) != 'close') { if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
// opening tag of block plugin // opening tag of block plugin
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
@ -54,8 +54,8 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C
foreach ($_attr as $_key => $_value) { foreach ($_attr as $_key => $_value) {
if (is_int($_key)) { if (is_int($_key)) {
$_paramsArray[] = "$_key=>$_value"; $_paramsArray[] = "$_key=>$_value";
} elseif ($compiler->template->caching && in_array($_key,$tag_info[2])) { } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) {
$_value = str_replace("'","^#^",$_value); $_value = str_replace("'", "^#^", $_value);
$_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^"; $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
} else { } else {
$_paramsArray[] = "'$_key'=>$_value"; $_paramsArray[] = "'$_key'=>$_value";
@ -80,7 +80,7 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C
if ($compiler->nocache) { if ($compiler->nocache) {
$compiler->tag_nocache = true; $compiler->tag_nocache = true;
} }
$base_tag = substr($tag, 0, -5); $base_tag = substr($tag, 0, - 5);
// closing tag of block plugin, restore nocache // closing tag of block plugin, restore nocache
list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag); list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag);
// This tag does create output // This tag does create output
@ -92,21 +92,20 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C
} }
// compile code // compile code
if (!isset($parameter['modifier_list'])) { if (!isset($parameter['modifier_list'])) {
$mod_pre = $mod_post =''; $mod_pre = $mod_post = '';
} else { } else {
$mod_pre = ' ob_start(); '; $mod_pre = ' ob_start(); ';
$mod_post = 'echo '.$compiler->compileTag('private_modifier',array(),array('modifierlist'=>$parameter['modifier_list'],'value'=>'ob_get_clean()')).';'; $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';';
} }
if (!is_array($function)) { if (!is_array($function)) {
$output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat);".$mod_post." } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat);" . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
} elseif (is_object($function[0])) { } elseif (is_object($function[0])) {
$output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post."} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
} else { } else {
$output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function[0]}::{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post."} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function[0]}::{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
} }
} }
return $output . "\n"; return $output . "\n";
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Registered Function * Smarty Internal Plugin Compile Registered Function
*
* Compiles code for the execution of a registered function * Compiles code for the execution of a registered function
* *
* @package Smarty * @package Smarty
@ -32,6 +31,7 @@ class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Interna
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @param string $tag name of function * @param string $tag name of function
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter, $tag) public function compile($args, $compiler, $parameter, $tag)
@ -56,8 +56,8 @@ class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Interna
foreach ($_attr as $_key => $_value) { foreach ($_attr as $_key => $_value) {
if (is_int($_key)) { if (is_int($_key)) {
$_paramsArray[] = "$_key=>$_value"; $_paramsArray[] = "$_key=>$_value";
} elseif ($compiler->template->caching && in_array($_key,$tag_info[2])) { } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) {
$_value = str_replace("'","^#^",$_value); $_value = str_replace("'", "^#^", $_value);
$_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^"; $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
} else { } else {
$_paramsArray[] = "'$_key'=>$_value"; $_paramsArray[] = "'$_key'=>$_value";
@ -76,5 +76,4 @@ class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Interna
return $output; return $output;
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Special Smarty Variable * Smarty Internal Plugin Compile Special Smarty Variable
*
* Compiles the special $smarty variables * Compiles the special $smarty variables
* *
* @package Smarty * @package Smarty
@ -18,15 +17,17 @@
class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the speical $smarty variables * Compiles code for the special $smarty variables
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param $parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
{ {
$_index = preg_split("/\]\[/",substr($parameter, 1, strlen($parameter)-2)); $_index = preg_split("/\]\[/", substr($parameter, 1, strlen($parameter) - 2));
$compiled_ref = ' '; $compiled_ref = ' ';
$variable = trim($_index[0], "'"); $variable = trim($_index[0], "'");
switch ($variable) { switch ($variable) {
@ -56,7 +57,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
$compiler->trigger_template_error("(secure mode) super globals not permitted"); $compiler->trigger_template_error("(secure mode) super globals not permitted");
break; break;
} }
$compiled_ref = '$_'.strtoupper($variable); $compiled_ref = '$_' . strtoupper($variable);
break; break;
case 'template': case 'template':
@ -110,5 +111,4 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
return $compiled_ref; return $compiled_ref;
} }
} }

@ -1,8 +1,8 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Rdelim * Smarty Internal Plugin Compile Rdelim
*
* Compiles the {rdelim} tag * Compiles the {rdelim} tag
*
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
@ -18,11 +18,11 @@ class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {rdelim} tag * Compiles code for the {rdelim} tag
*
* This tag does output the right delimiter. * This tag does output the right delimiter.
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -36,5 +36,4 @@ class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase
return $compiler->smarty->right_delimiter; return $compiler->smarty->right_delimiter;
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Section * Smarty Internal Plugin Compile Section
*
* Compiles the {section} {sectionelse} {/section} tags * Compiles the {section} {sectionelse} {/section} tags
* *
* @package Smarty * @package Smarty
@ -44,6 +43,7 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -69,10 +69,11 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase
break; break;
case 'show': case 'show':
if (is_bool($attr_value)) if (is_bool($attr_value)) {
$show_attr_value = $attr_value ? 'true' : 'false'; $show_attr_value = $attr_value ? 'true' : 'false';
else } else {
$show_attr_value = "(bool) $attr_value"; $show_attr_value = "(bool) $attr_value";
}
$output .= "{$section_props}['show'] = $show_attr_value;\n"; $output .= "{$section_props}['show'] = $show_attr_value;\n";
break; break;
@ -91,23 +92,27 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase
} }
} }
if (!isset($_attr['show'])) if (!isset($_attr['show'])) {
$output .= "{$section_props}['show'] = true;\n"; $output .= "{$section_props}['show'] = true;\n";
}
if (!isset($_attr['loop'])) if (!isset($_attr['loop'])) {
$output .= "{$section_props}['loop'] = 1;\n"; $output .= "{$section_props}['loop'] = 1;\n";
}
if (!isset($_attr['max'])) if (!isset($_attr['max'])) {
$output .= "{$section_props}['max'] = {$section_props}['loop'];\n"; $output .= "{$section_props}['max'] = {$section_props}['loop'];\n";
else } else {
$output .= "if ({$section_props}['max'] < 0)\n" . " {$section_props}['max'] = {$section_props}['loop'];\n"; $output .= "if ({$section_props}['max'] < 0)\n" . " {$section_props}['max'] = {$section_props}['loop'];\n";
}
if (!isset($_attr['step'])) if (!isset($_attr['step'])) {
$output .= "{$section_props}['step'] = 1;\n"; $output .= "{$section_props}['step'] = 1;\n";
}
if (!isset($_attr['start'])) if (!isset($_attr['start'])) {
$output .= "{$section_props}['start'] = {$section_props}['step'] > 0 ? 0 : {$section_props}['loop']-1;\n"; $output .= "{$section_props}['start'] = {$section_props}['step'] > 0 ? 0 : {$section_props}['loop']-1;\n";
else { } else {
$output .= "if ({$section_props}['start'] < 0)\n" . " {$section_props}['start'] = max({$section_props}['step'] > 0 ? 0 : -1, {$section_props}['loop'] + {$section_props}['start']);\n" . "else\n" . " {$section_props}['start'] = min({$section_props}['start'], {$section_props}['step'] > 0 ? {$section_props}['loop'] : {$section_props}['loop']-1);\n"; $output .= "if ({$section_props}['start'] < 0)\n" . " {$section_props}['start'] = max({$section_props}['step'] > 0 ? 0 : -1, {$section_props}['loop'] + {$section_props}['start']);\n" . "else\n" . " {$section_props}['start'] = min({$section_props}['start'], {$section_props}['step'] > 0 ? {$section_props}['loop'] : {$section_props}['loop']-1);\n";
} }
@ -134,7 +139,6 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase
return $output; return $output;
} }
} }
/** /**
@ -150,6 +154,7 @@ class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -162,7 +167,6 @@ class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase
return "<?php endfor; else: ?>"; return "<?php endfor; else: ?>";
} }
} }
/** /**
@ -178,6 +182,7 @@ class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -198,5 +203,4 @@ class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase
return "<?php endfor; endif; ?>"; return "<?php endfor; endif; ?>";
} }
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Setfilter * Smarty Internal Plugin Compile Setfilter
*
* Compiles code for setfilter tag * Compiles code for setfilter tag
* *
* @package Smarty * @package Smarty
@ -23,6 +22,7 @@ class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -34,7 +34,6 @@ class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileBase
return true; return true;
} }
} }
/** /**
@ -47,11 +46,11 @@ class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {/setfilter} tag * Compiles code for the {/setfilter} tag
*
* This tag does not generate compiled output. It resets variable filter. * This tag does not generate compiled output. It resets variable filter.
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -68,5 +67,4 @@ class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_CompileBase
return true; return true;
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile While * Smarty Internal Plugin Compile While
*
* Compiles the {while} tag * Compiles the {while} tag
* *
* @package Smarty * @package Smarty
@ -23,6 +22,7 @@ class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@ -31,7 +31,7 @@ class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
$this->openTag($compiler, 'while', $compiler->nocache); $this->openTag($compiler, 'while', $compiler->nocache);
if (!array_key_exists("if condition",$parameter)) { if (!array_key_exists("if condition", $parameter)) {
$compiler->trigger_template_error("missing while condition", $compiler->lex->taglineno); $compiler->trigger_template_error("missing while condition", $compiler->lex->taglineno);
} }
@ -62,7 +62,6 @@ class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase
return "<?php while ({$parameter['if condition']}) {?>"; return "<?php while ({$parameter['if condition']}) {?>";
} }
} }
} }
/** /**
@ -78,6 +77,7 @@ class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@ -90,5 +90,4 @@ class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase
return "<?php }?>"; return "<?php }?>";
} }
} }

@ -43,7 +43,6 @@ abstract class Smarty_Internal_CompileBase
/** /**
* This function checks if the attributes passed are valid * This function checks if the attributes passed are valid
*
* The attributes passed for the tag to compile are checked against the list of required and * The attributes passed for the tag to compile are checked against the list of required and
* optional attributes. Required attributes must be present. Optional attributes are check against * optional attributes. Required attributes must be present. Optional attributes are check against
* the corresponding list. The keyword '_any' specifies that any attribute will be accepted * the corresponding list. The keyword '_any' specifies that any attribute will be accepted
@ -51,6 +50,7 @@ abstract class Smarty_Internal_CompileBase
* *
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $attributes attributes applied to the tag * @param array $attributes attributes applied to the tag
*
* @return array of mapped attributes for further processing * @return array of mapped attributes for further processing
*/ */
public function getAttributes($compiler, $attributes) public function getAttributes($compiler, $attributes)
@ -105,7 +105,7 @@ abstract class Smarty_Internal_CompileBase
$compiler->trigger_template_error("missing \"" . $attr . "\" attribute", $compiler->lex->taglineno); $compiler->trigger_template_error("missing \"" . $attr . "\" attribute", $compiler->lex->taglineno);
} }
} }
// check for unallowed attributes // check for not allowed attributes
if ($this->optional_attributes != array('_any')) { if ($this->optional_attributes != array('_any')) {
$tmp_array = array_merge($this->required_attributes, $this->optional_attributes, $this->option_flags); $tmp_array = array_merge($this->required_attributes, $this->optional_attributes, $this->option_flags);
foreach ($_indexed_attr as $key => $dummy) { foreach ($_indexed_attr as $key => $dummy) {
@ -126,7 +126,6 @@ abstract class Smarty_Internal_CompileBase
/** /**
* Push opening tag name on stack * Push opening tag name on stack
*
* Optionally additional data can be saved on stack * Optionally additional data can be saved on stack
* *
* @param object $compiler compiler object * @param object $compiler compiler object
@ -140,11 +139,11 @@ abstract class Smarty_Internal_CompileBase
/** /**
* Pop closing tag * Pop closing tag
*
* Raise an error if this stack-top doesn't match with expected opening tags * Raise an error if this stack-top doesn't match with expected opening tags
* *
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array|string $expectedTag the expected opening tag names * @param array|string $expectedTag the expected opening tag names
*
* @return mixed any type the opening tag's name or saved data * @return mixed any type the opening tag's name or saved data
*/ */
public function closeTag($compiler, $expectedTag) public function closeTag($compiler, $expectedTag)
@ -172,5 +171,4 @@ abstract class Smarty_Internal_CompileBase
return; return;
} }
} }

@ -9,20 +9,16 @@
/** /**
* Smarty Internal Plugin Config * Smarty Internal Plugin Config
*
* Main class for config variables * Main class for config variables
* *
* @package Smarty * @package Smarty
* @subpackage Config * @subpackage Config
*
* @property Smarty_Config_Source $source
* @property Smarty_Config_Compiled $compiled
* @ignore * @ignore
*/ */
class Smarty_Internal_Config class Smarty_Internal_Config
{ {
/** /**
* Samrty instance * Smarty instance
* *
* @var Smarty object * @var Smarty object
*/ */
@ -35,6 +31,7 @@ class Smarty_Internal_Config
public $data = null; public $data = null;
/** /**
* Config resource * Config resource
*
* @var string * @var string
*/ */
public $config_resource = null; public $config_resource = null;
@ -58,6 +55,7 @@ class Smarty_Internal_Config
public $compiled_timestamp = null; public $compiled_timestamp = null;
/** /**
* flag if compiled config file is invalid and must be (re)compiled * flag if compiled config file is invalid and must be (re)compiled
*
* @var bool * @var bool
*/ */
public $mustCompile = null; public $mustCompile = null;
@ -104,7 +102,7 @@ class Smarty_Internal_Config
$_compile_id = isset($this->smarty->compile_id) ? preg_replace('![^\w\|]+!', '_', $this->smarty->compile_id) : null; $_compile_id = isset($this->smarty->compile_id) ? preg_replace('![^\w\|]+!', '_', $this->smarty->compile_id) : null;
$_flag = (int) $this->smarty->config_read_hidden + (int) $this->smarty->config_booleanize * 2 $_flag = (int) $this->smarty->config_read_hidden + (int) $this->smarty->config_booleanize * 2
+ (int) $this->smarty->config_overwrite * 4; + (int) $this->smarty->config_overwrite * 4;
$_filepath = sha1($this->source->filepath . $_flag); $_filepath = sha1(realpath($this->source->filepath) . $_flag);
// if use_sub_dirs, break file into directories // if use_sub_dirs, break file into directories
if ($this->smarty->use_sub_dirs) { if ($this->smarty->use_sub_dirs) {
$_filepath = substr($_filepath, 0, 2) . DS $_filepath = substr($_filepath, 0, 2) . DS
@ -122,7 +120,7 @@ class Smarty_Internal_Config
} }
/** /**
* Returns the timpestamp of the compiled file * Returns the timestamp of the compiled file
* *
* @return integer the file timestamp * @return integer the file timestamp
*/ */
@ -135,7 +133,6 @@ class Smarty_Internal_Config
/** /**
* Returns if the current config file must be compiled * Returns if the current config file must be compiled
*
* It does compare the timestamps of config source and the compiled config and checks the force compile configuration * It does compare the timestamps of config source and the compiled config and checks the force compile configuration
* *
* @return boolean true if the file must be compiled * @return boolean true if the file must be compiled
@ -143,13 +140,12 @@ class Smarty_Internal_Config
public function mustCompile() public function mustCompile()
{ {
return $this->mustCompile === null ? return $this->mustCompile === null ?
$this->mustCompile = ($this->smarty->force_compile || $this->getCompiledTimestamp () === false || $this->smarty->compile_check && $this->getCompiledTimestamp () < $this->source->timestamp): $this->mustCompile = ($this->smarty->force_compile || $this->getCompiledTimestamp() === false || $this->smarty->compile_check && $this->getCompiledTimestamp() < $this->source->timestamp) :
$this->mustCompile; $this->mustCompile;
} }
/** /**
* Returns the compiled config file * Returns the compiled config file
*
* It checks if the config file must be compiled or just read the compiled version * It checks if the config file must be compiled or just read the compiled version
* *
* @return string the compiled config file * @return string the compiled config file
@ -189,14 +185,15 @@ class Smarty_Internal_Config
// call compiler // call compiler
try { try {
$this->compiler_object->compileSource($this); $this->compiler_object->compileSource($this);
} catch (Exception $e) { }
catch (Exception $e) {
// restore old timestamp in case of error // restore old timestamp in case of error
if ($this->smarty->compile_locking && $saved_timestamp) { if ($this->smarty->compile_locking && $saved_timestamp) {
touch($this->getCompiledFilepath(), $saved_timestamp); touch($this->getCompiledFilepath(), $saved_timestamp);
} }
throw $e; throw $e;
} }
// compiling succeded // compiling succeeded
// write compiled template // write compiled template
Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->getCompiledConfig(), $this->smarty); Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->getCompiledConfig(), $this->smarty);
} }
@ -205,7 +202,9 @@ class Smarty_Internal_Config
* load config variables * load config variables
* *
* @param mixed $sections array of section names, single section or null * @param mixed $sections array of section names, single section or null
* @param object $scope global,parent or local * @param string $scope global,parent or local
*
* @throws Exception
*/ */
public function loadConfigVars($sections = null, $scope = 'local') public function loadConfigVars($sections = null, $scope = 'local')
{ {
@ -261,6 +260,7 @@ class Smarty_Internal_Config
* *
* @param string $property_name property name * @param string $property_name property name
* @param mixed $value value * @param mixed $value value
*
* @throws SmartyException if $property_name is not valid * @throws SmartyException if $property_name is not valid
*/ */
public function __set($property_name, $value) public function __set($property_name, $value)
@ -280,6 +280,8 @@ class Smarty_Internal_Config
* get Smarty property in template context * get Smarty property in template context
* *
* @param string $property_name property name * @param string $property_name property name
*
* @return \Smarty_Config_Source|\Smarty_Template_Compiled
* @throws SmartyException if $property_name is not valid * @throws SmartyException if $property_name is not valid
*/ */
public function __get($property_name) public function __get($property_name)
@ -301,5 +303,4 @@ class Smarty_Internal_Config
throw new SmartyException("config attribute '$property_name' does not exist."); throw new SmartyException("config attribute '$property_name' does not exist.");
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Config File Compiler * Smarty Internal Plugin Config File Compiler
*
* This is the config file compiler class. It calls the lexer and parser to * This is the config file compiler class. It calls the lexer and parser to
* perform the compiling. * perform the compiling.
* *
@ -69,6 +68,7 @@ class Smarty_Internal_Config_File_Compiler
* Method to compile a Smarty template. * Method to compile a Smarty template.
* *
* @param Smarty_Internal_Config $config config object * @param Smarty_Internal_Config $config config object
*
* @return bool true if compiling succeeded, false if it failed * @return bool true if compiling succeeded, false if it failed
*/ */
public function compileSource(Smarty_Internal_Config $config) public function compileSource(Smarty_Internal_Config $config)
@ -84,28 +84,46 @@ class Smarty_Internal_Config_File_Compiler
return true; return true;
} }
// init the lexer/parser to compile the config file // init the lexer/parser to compile the config file
$lex = new Smarty_Internal_Configfilelexer($_content, $this->smarty); $lex = new Smarty_Internal_Configfilelexer($_content, $this);
$parser = new Smarty_Internal_Configfileparser($lex, $this); $parser = new Smarty_Internal_Configfileparser($lex, $this);
if ($this->smarty->_parserdebug) $parser->PrintTrace();
if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
$mbEncoding = mb_internal_encoding();
mb_internal_encoding('ASCII');
} else {
$mbEncoding = null;
}
if ($this->smarty->_parserdebug) {
$parser->PrintTrace();
}
// get tokens from lexer and parse them // get tokens from lexer and parse them
while ($lex->yylex()) { while ($lex->yylex()) {
if ($this->smarty->_parserdebug) echo "<br>Parsing {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n"; if ($this->smarty->_parserdebug) {
echo "<br>Parsing {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n";
}
$parser->doParse($lex->token, $lex->value); $parser->doParse($lex->token, $lex->value);
} }
// finish parsing process // finish parsing process
$parser->doParse(0, 0); $parser->doParse(0, 0);
if ($mbEncoding) {
mb_internal_encoding($mbEncoding);
}
$config->compiled_config = '<?php $_config_vars = ' . var_export($this->config_data, true) . '; ?>'; $config->compiled_config = '<?php $_config_vars = ' . var_export($this->config_data, true) . '; ?>';
} }
/** /**
* display compiler error messages without dying * display compiler error messages without dying
*
* If parameter $args is empty it is a parser detected syntax error. * If parameter $args is empty it is a parser detected syntax error.
* In this case the parser is called to obtain information about exspected tokens. * In this case the parser is called to obtain information about expected tokens.
*
* If parameter $args contains a string this is used as error message * If parameter $args contains a string this is used as error message
* *
* @param string $args individual error message or null * @param string $args individual error message or null
*
* @throws SmartyCompilerException
*/ */
public function trigger_config_file_error($args = null) public function trigger_config_file_error($args = null)
{ {
@ -117,12 +135,12 @@ class Smarty_Internal_Config_File_Compiler
// $line--; // $line--;
} }
$match = preg_split("/\n/", $this->lex->data); $match = preg_split("/\n/", $this->lex->data);
$error_text = "Syntax error in config file '{$this->config->source->filepath}' on line {$line} '{$match[$line-1]}' "; $error_text = "Syntax error in config file '{$this->config->source->filepath}' on line {$line} '{$match[$line - 1]}' ";
if (isset($args)) { if (isset($args)) {
// individual error message // individual error message
$error_text .= $args; $error_text .= $args;
} else { } else {
// exspected token from parser // expected token from parser
foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) { foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) {
$exp_token = $this->parser->yyTokenName[$token]; $exp_token = $this->parser->yyTokenName[$token];
if (isset($this->lex->smarty_token_names[$exp_token])) { if (isset($this->lex->smarty_token_names[$exp_token])) {
@ -138,5 +156,4 @@ class Smarty_Internal_Config_File_Compiler
} }
throw new SmartyCompilerException($error_text); throw new SmartyCompilerException($error_text);
} }
} }

@ -1,15 +1,16 @@
<?php <?php
/** /**
* Smarty Internal Plugin Configfilelexer * Smarty Internal Plugin Configfilelexer
* * This is the lexer to break the config file source into tokens
* This is the lexer to break the config file source into tokens *
* @package Smarty * @package Smarty
* @subpackage Config * @subpackage Config
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Configfilelexer * Smarty Internal Plugin Configfilelexer
*/ */
class Smarty_Internal_Configfilelexer class Smarty_Internal_Configfilelexer
{ {
@ -22,36 +23,39 @@ class Smarty_Internal_Configfilelexer
private $state = 1; private $state = 1;
public $yyTraceFILE; public $yyTraceFILE;
public $yyTracePrompt; public $yyTracePrompt;
public $state_name = array (1 => 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', 6 => 'TRIPPLE'); public $state_name = array(1 => 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', 6 => 'TRIPPLE');
public $smarty_token_names = array ( // Text for parser error messages public $smarty_token_names = array( // Text for parser error messages
); );
function __construct($data, $compiler)
function __construct($data, $smarty)
{ {
// set instance object // set instance object
self::instance($this); self::instance($this);
$this->data = $data . "\n"; //now all lines are \n-terminated $this->data = $data . "\n"; //now all lines are \n-terminated
$this->counter = 0; $this->counter = 0;
if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) {
$this->counter += strlen($match[0]);
}
$this->line = 1; $this->line = 1;
$this->smarty = $smarty; $this->compiler = $compiler;
$this->mbstring_overload = ini_get('mbstring.func_overload') & 2; $this->smarty = $compiler->smarty;
} }
public static function &instance($new_instance = null) public static function &instance($new_instance = null)
{ {
static $instance = null; static $instance = null;
if (isset($new_instance) && is_object($new_instance)) if (isset($new_instance) && is_object($new_instance)) {
$instance = $new_instance; $instance = $new_instance;
}
return $instance; return $instance;
} }
public function PrintTrace() public function PrintTrace()
{ {
$this->yyTraceFILE = fopen('php://output', 'w'); $this->yyTraceFILE = fopen('php://output', 'w');
$this->yyTracePrompt = '<br>'; $this->yyTracePrompt = '<br>';
} }
private $_yy_state = 1; private $_yy_state = 1;
private $_yy_stack = array(); private $_yy_stack = array();
@ -81,7 +85,6 @@ class Smarty_Internal_Configfilelexer
if ($this->yyTraceFILE) { if ($this->yyTraceFILE) {
fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
} }
} }
public function yybegin($state) public function yybegin($state)
@ -92,12 +95,9 @@ class Smarty_Internal_Configfilelexer
} }
} }
public function yylex1() public function yylex1()
{ {
$tokenMap = array ( $tokenMap = array(
1 => 0, 1 => 0,
2 => 0, 2 => 0,
3 => 0, 3 => 0,
@ -107,13 +107,13 @@ class Smarty_Internal_Configfilelexer
7 => 0, 7 => 0,
8 => 0, 8 => 0,
); );
if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { if ($this->counter >= strlen($this->data)) {
return false; // end of input return false; // end of input
} }
$yy_global_pattern = "/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/iS"; $yy_global_pattern = "/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/iS";
do { do {
if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches; $yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) { if (!count($yymatches)) {
@ -133,7 +133,7 @@ class Smarty_Internal_Configfilelexer
$this->value = current($yymatches); // token value $this->value = current($yymatches); // token value
$r = $this->{'yy_r1_' . $this->token}($yysubmatches); $r = $this->{'yy_r1_' . $this->token}($yysubmatches);
if ($r === null) { if ($r === null) {
$this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value)); $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n"); $this->line += substr_count($this->value, "\n");
// accept this token // accept this token
return true; return true;
@ -142,73 +142,78 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state // process this token in the new state
return $this->yylex(); return $this->yylex();
} elseif ($r === false) { } elseif ($r === false) {
$this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value)); $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n"); $this->line += substr_count($this->value, "\n");
if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { if ($this->counter >= strlen($this->data)) {
return false; // end of input return false; // end of input
} }
// skip this token // skip this token
continue; continue;
} } else { }
} else {
throw new Exception('Unexpected input at line' . $this->line . throw new Exception('Unexpected input at line' . $this->line .
': ' . $this->data[$this->counter]); ': ' . $this->data[$this->counter]);
} }
break; break;
} while (true); } while (true);
} // end function } // end function
const START = 1; const START = 1;
function yy_r1_1($yy_subpatterns) function yy_r1_1($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART; $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART;
$this->yypushstate(self::COMMENT); $this->yypushstate(self::COMMENT);
} }
function yy_r1_2($yy_subpatterns) function yy_r1_2($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_OPENB; $this->token = Smarty_Internal_Configfileparser::TPC_OPENB;
$this->yypushstate(self::SECTION); $this->yypushstate(self::SECTION);
} }
function yy_r1_3($yy_subpatterns) function yy_r1_3($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB; $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB;
} }
function yy_r1_4($yy_subpatterns) function yy_r1_4($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_EQUAL; $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL;
$this->yypushstate(self::VALUE); $this->yypushstate(self::VALUE);
} }
function yy_r1_5($yy_subpatterns) function yy_r1_5($yy_subpatterns)
{ {
return false; return false;
} }
function yy_r1_6($yy_subpatterns) function yy_r1_6($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
} }
function yy_r1_7($yy_subpatterns) function yy_r1_7($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_ID; $this->token = Smarty_Internal_Configfileparser::TPC_ID;
} }
function yy_r1_8($yy_subpatterns) function yy_r1_8($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_OTHER; $this->token = Smarty_Internal_Configfileparser::TPC_OTHER;
} }
public function yylex2() public function yylex2()
{ {
$tokenMap = array ( $tokenMap = array(
1 => 0, 1 => 0,
2 => 0, 2 => 0,
3 => 0, 3 => 0,
@ -219,13 +224,13 @@ class Smarty_Internal_Configfilelexer
8 => 0, 8 => 0,
9 => 0, 9 => 0,
); );
if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { if ($this->counter >= strlen($this->data)) {
return false; // end of input return false; // end of input
} }
$yy_global_pattern = "/\G([ \t\r]+)|\G(\\d+\\.\\d+(?=[ \t\r]*[\n#;]))|\G(\\d+(?=[ \t\r]*[\n#;]))|\G(\"\"\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#;]))|\G(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#;]))|\G([a-zA-Z]+(?=[ \t\r]*[\n#;]))|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/iS"; $yy_global_pattern = "/\G([ \t\r]+)|\G(\\d+\\.\\d+(?=[ \t\r]*[\n#;]))|\G(\\d+(?=[ \t\r]*[\n#;]))|\G(\"\"\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#;]))|\G(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#;]))|\G([a-zA-Z]+(?=[ \t\r]*[\n#;]))|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/iS";
do { do {
if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches; $yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) { if (!count($yymatches)) {
@ -245,7 +250,7 @@ class Smarty_Internal_Configfilelexer
$this->value = current($yymatches); // token value $this->value = current($yymatches); // token value
$r = $this->{'yy_r2_' . $this->token}($yysubmatches); $r = $this->{'yy_r2_' . $this->token}($yysubmatches);
if ($r === null) { if ($r === null) {
$this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value)); $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n"); $this->line += substr_count($this->value, "\n");
// accept this token // accept this token
return true; return true;
@ -254,63 +259,69 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state // process this token in the new state
return $this->yylex(); return $this->yylex();
} elseif ($r === false) { } elseif ($r === false) {
$this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value)); $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n"); $this->line += substr_count($this->value, "\n");
if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { if ($this->counter >= strlen($this->data)) {
return false; // end of input return false; // end of input
} }
// skip this token // skip this token
continue; continue;
} } else { }
} else {
throw new Exception('Unexpected input at line' . $this->line . throw new Exception('Unexpected input at line' . $this->line .
': ' . $this->data[$this->counter]); ': ' . $this->data[$this->counter]);
} }
break; break;
} while (true); } while (true);
} // end function } // end function
const VALUE = 2; const VALUE = 2;
function yy_r2_1($yy_subpatterns) function yy_r2_1($yy_subpatterns)
{ {
return false; return false;
} }
function yy_r2_2($yy_subpatterns) function yy_r2_2($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_FLOAT; $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT;
$this->yypopstate(); $this->yypopstate();
} }
function yy_r2_3($yy_subpatterns) function yy_r2_3($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_INT; $this->token = Smarty_Internal_Configfileparser::TPC_INT;
$this->yypopstate(); $this->yypopstate();
} }
function yy_r2_4($yy_subpatterns) function yy_r2_4($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES; $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES;
$this->yypushstate(self::TRIPPLE); $this->yypushstate(self::TRIPPLE);
} }
function yy_r2_5($yy_subpatterns) function yy_r2_5($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING; $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING;
$this->yypopstate(); $this->yypopstate();
} }
function yy_r2_6($yy_subpatterns) function yy_r2_6($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING; $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING;
$this->yypopstate(); $this->yypopstate();
} }
function yy_r2_7($yy_subpatterns) function yy_r2_7($yy_subpatterns)
{ {
if (!$this->smarty->config_booleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", "no")) ) { if (!$this->smarty->config_booleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", "no"))) {
$this->yypopstate(); $this->yypopstate();
$this->yypushstate(self::NAKED_STRING_VALUE); $this->yypushstate(self::NAKED_STRING_VALUE);
return true; //reprocess in new state return true; //reprocess in new state
@ -319,12 +330,14 @@ class Smarty_Internal_Configfilelexer
$this->yypopstate(); $this->yypopstate();
} }
} }
function yy_r2_8($yy_subpatterns) function yy_r2_8($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
$this->yypopstate(); $this->yypopstate();
} }
function yy_r2_9($yy_subpatterns) function yy_r2_9($yy_subpatterns)
{ {
@ -333,20 +346,18 @@ class Smarty_Internal_Configfilelexer
$this->yypopstate(); $this->yypopstate();
} }
public function yylex3() public function yylex3()
{ {
$tokenMap = array ( $tokenMap = array(
1 => 0, 1 => 0,
); );
if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { if ($this->counter >= strlen($this->data)) {
return false; // end of input return false; // end of input
} }
$yy_global_pattern = "/\G([^\n]+?(?=[ \t\r]*\n))/iS"; $yy_global_pattern = "/\G([^\n]+?(?=[ \t\r]*\n))/iS";
do { do {
if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches; $yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) { if (!count($yymatches)) {
@ -366,7 +377,7 @@ class Smarty_Internal_Configfilelexer
$this->value = current($yymatches); // token value $this->value = current($yymatches); // token value
$r = $this->{'yy_r3_' . $this->token}($yysubmatches); $r = $this->{'yy_r3_' . $this->token}($yysubmatches);
if ($r === null) { if ($r === null) {
$this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value)); $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n"); $this->line += substr_count($this->value, "\n");
// accept this token // accept this token
return true; return true;
@ -375,24 +386,24 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state // process this token in the new state
return $this->yylex(); return $this->yylex();
} elseif ($r === false) { } elseif ($r === false) {
$this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value)); $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n"); $this->line += substr_count($this->value, "\n");
if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { if ($this->counter >= strlen($this->data)) {
return false; // end of input return false; // end of input
} }
// skip this token // skip this token
continue; continue;
} } else { }
} else {
throw new Exception('Unexpected input at line' . $this->line . throw new Exception('Unexpected input at line' . $this->line .
': ' . $this->data[$this->counter]); ': ' . $this->data[$this->counter]);
} }
break; break;
} while (true); } while (true);
} // end function } // end function
const NAKED_STRING_VALUE = 3; const NAKED_STRING_VALUE = 3;
function yy_r3_1($yy_subpatterns) function yy_r3_1($yy_subpatterns)
{ {
@ -400,22 +411,20 @@ class Smarty_Internal_Configfilelexer
$this->yypopstate(); $this->yypopstate();
} }
public function yylex4() public function yylex4()
{ {
$tokenMap = array ( $tokenMap = array(
1 => 0, 1 => 0,
2 => 0, 2 => 0,
3 => 0, 3 => 0,
); );
if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { if ($this->counter >= strlen($this->data)) {
return false; // end of input return false; // end of input
} }
$yy_global_pattern = "/\G([ \t\r]+)|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/iS"; $yy_global_pattern = "/\G([ \t\r]+)|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/iS";
do { do {
if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches; $yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) { if (!count($yymatches)) {
@ -435,7 +444,7 @@ class Smarty_Internal_Configfilelexer
$this->value = current($yymatches); // token value $this->value = current($yymatches); // token value
$r = $this->{'yy_r4_' . $this->token}($yysubmatches); $r = $this->{'yy_r4_' . $this->token}($yysubmatches);
if ($r === null) { if ($r === null) {
$this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value)); $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n"); $this->line += substr_count($this->value, "\n");
// accept this token // accept this token
return true; return true;
@ -444,34 +453,36 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state // process this token in the new state
return $this->yylex(); return $this->yylex();
} elseif ($r === false) { } elseif ($r === false) {
$this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value)); $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n"); $this->line += substr_count($this->value, "\n");
if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { if ($this->counter >= strlen($this->data)) {
return false; // end of input return false; // end of input
} }
// skip this token // skip this token
continue; continue;
} } else { }
} else {
throw new Exception('Unexpected input at line' . $this->line . throw new Exception('Unexpected input at line' . $this->line .
': ' . $this->data[$this->counter]); ': ' . $this->data[$this->counter]);
} }
break; break;
} while (true); } while (true);
} // end function } // end function
const COMMENT = 4; const COMMENT = 4;
function yy_r4_1($yy_subpatterns) function yy_r4_1($yy_subpatterns)
{ {
return false; return false;
} }
function yy_r4_2($yy_subpatterns) function yy_r4_2($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
} }
function yy_r4_3($yy_subpatterns) function yy_r4_3($yy_subpatterns)
{ {
@ -479,21 +490,19 @@ class Smarty_Internal_Configfilelexer
$this->yypopstate(); $this->yypopstate();
} }
public function yylex5() public function yylex5()
{ {
$tokenMap = array ( $tokenMap = array(
1 => 0, 1 => 0,
2 => 0, 2 => 0,
); );
if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { if ($this->counter >= strlen($this->data)) {
return false; // end of input return false; // end of input
} }
$yy_global_pattern = "/\G(\\.)|\G(.*?(?=[\.=[\]\r\n]))/iS"; $yy_global_pattern = "/\G(\\.)|\G(.*?(?=[\.=[\]\r\n]))/iS";
do { do {
if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches; $yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) { if (!count($yymatches)) {
@ -513,7 +522,7 @@ class Smarty_Internal_Configfilelexer
$this->value = current($yymatches); // token value $this->value = current($yymatches); // token value
$r = $this->{'yy_r5_' . $this->token}($yysubmatches); $r = $this->{'yy_r5_' . $this->token}($yysubmatches);
if ($r === null) { if ($r === null) {
$this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value)); $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n"); $this->line += substr_count($this->value, "\n");
// accept this token // accept this token
return true; return true;
@ -522,29 +531,30 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state // process this token in the new state
return $this->yylex(); return $this->yylex();
} elseif ($r === false) { } elseif ($r === false) {
$this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value)); $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n"); $this->line += substr_count($this->value, "\n");
if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { if ($this->counter >= strlen($this->data)) {
return false; // end of input return false; // end of input
} }
// skip this token // skip this token
continue; continue;
} } else { }
} else {
throw new Exception('Unexpected input at line' . $this->line . throw new Exception('Unexpected input at line' . $this->line .
': ' . $this->data[$this->counter]); ': ' . $this->data[$this->counter]);
} }
break; break;
} while (true); } while (true);
} // end function } // end function
const SECTION = 5; const SECTION = 5;
function yy_r5_1($yy_subpatterns) function yy_r5_1($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Configfileparser::TPC_DOT; $this->token = Smarty_Internal_Configfileparser::TPC_DOT;
} }
function yy_r5_2($yy_subpatterns) function yy_r5_2($yy_subpatterns)
{ {
@ -552,20 +562,19 @@ class Smarty_Internal_Configfilelexer
$this->yypopstate(); $this->yypopstate();
} }
public function yylex6() public function yylex6()
{ {
$tokenMap = array ( $tokenMap = array(
1 => 0, 1 => 0,
2 => 0, 2 => 0,
); );
if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { if ($this->counter >= strlen($this->data)) {
return false; // end of input return false; // end of input
} }
$yy_global_pattern = "/\G(\"\"\"(?=[ \t\r]*[\n#;]))|\G([\S\s])/iS"; $yy_global_pattern = "/\G(\"\"\"(?=[ \t\r]*[\n#;]))|\G([\S\s])/iS";
do { do {
if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
$yysubmatches = $yymatches; $yysubmatches = $yymatches;
$yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
if (!count($yymatches)) { if (!count($yymatches)) {
@ -585,7 +594,7 @@ class Smarty_Internal_Configfilelexer
$this->value = current($yymatches); // token value $this->value = current($yymatches); // token value
$r = $this->{'yy_r6_' . $this->token}($yysubmatches); $r = $this->{'yy_r6_' . $this->token}($yysubmatches);
if ($r === null) { if ($r === null) {
$this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value)); $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n"); $this->line += substr_count($this->value, "\n");
// accept this token // accept this token
return true; return true;
@ -594,24 +603,24 @@ class Smarty_Internal_Configfilelexer
// process this token in the new state // process this token in the new state
return $this->yylex(); return $this->yylex();
} elseif ($r === false) { } elseif ($r === false) {
$this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value)); $this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n"); $this->line += substr_count($this->value, "\n");
if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { if ($this->counter >= strlen($this->data)) {
return false; // end of input return false; // end of input
} }
// skip this token // skip this token
continue; continue;
} } else { }
} else {
throw new Exception('Unexpected input at line' . $this->line . throw new Exception('Unexpected input at line' . $this->line .
': ' . $this->data[$this->counter]); ': ' . $this->data[$this->counter]);
} }
break; break;
} while (true); } while (true);
} // end function } // end function
const TRIPPLE = 6; const TRIPPLE = 6;
function yy_r6_1($yy_subpatterns) function yy_r6_1($yy_subpatterns)
{ {
@ -619,28 +628,19 @@ class Smarty_Internal_Configfilelexer
$this->yypopstate(); $this->yypopstate();
$this->yypushstate(self::START); $this->yypushstate(self::START);
} }
function yy_r6_2($yy_subpatterns) function yy_r6_2($yy_subpatterns)
{ {
if ($this->mbstring_overload) {
$to = mb_strlen($this->data,'latin1');
} else {
$to = strlen($this->data); $to = strlen($this->data);
} preg_match("/\"\"\"[ \t\r]*[\n#;]/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
preg_match("/\"\"\"[ \t\r]*[\n#;]/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
if (isset($match[0][1])) { if (isset($match[0][1])) {
$to = $match[0][1]; $to = $match[0][1];
} else { } else {
$this->compiler->trigger_template_error ("missing or misspelled literal closing tag"); $this->compiler->trigger_template_error("missing or misspelled literal closing tag");
}
if ($this->mbstring_overload) {
$this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1');
} else {
$this->value = substr($this->data,$this->counter,$to-$this->counter);
} }
$this->value = substr($this->data, $this->counter, $to - $this->counter);
$this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT; $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT;
} }
} }

@ -1,14 +1,14 @@
<?php <?php
/**
* Smarty Internal Plugin Configfileparser
*
* This is the config file parser.
* It is generated from the internal.configfileparser.y file
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Configfileparser
* This is the config file parser.
* It is generated from the internal.configfileparser.y file
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
class TPC_yyToken implements ArrayAccess class TPC_yyToken implements ArrayAccess
{ {
public $string = ''; public $string = '';
@ -81,13 +81,14 @@ class TPC_yyStackEntry
** number for the token at this stack level */ ** number for the token at this stack level */
public $minor; /* The user-supplied minor token value. This public $minor; /* The user-supplied minor token value. This
** is the value of the token */ ** is the value of the token */
}; }
;
#line 12 "smarty_internal_configfileparser.y" #line 12 "smarty_internal_configfileparser.y"
class Smarty_Internal_Configfileparser#line 80 "smarty_internal_configfileparser.php" class Smarty_Internal_Configfileparser #line 80 "smarty_internal_configfileparser.php"
{ {
#line 14 "smarty_internal_configfileparser.y" #line 14 "smarty_internal_configfileparser.y"
// states whether the parse was successful or not // states whether the parse was successful or not
public $successful = true; public $successful = true;
@ -95,23 +96,27 @@ class Smarty_Internal_Configfileparser#line 80 "smarty_internal_configfileparser
private $lex; private $lex;
private $internalError = false; private $internalError = false;
function __construct($lex, $compiler) { function __construct($lex, $compiler)
{
// set instance object // set instance object
self::instance($this); self::instance($this);
$this->lex = $lex; $this->lex = $lex;
$this->smarty = $compiler->smarty; $this->smarty = $compiler->smarty;
$this->compiler = $compiler; $this->compiler = $compiler;
} }
public static function &instance($new_instance = null) public static function &instance($new_instance = null)
{ {
static $instance = null; static $instance = null;
if (isset($new_instance) && is_object($new_instance)) if (isset($new_instance) && is_object($new_instance)) {
$instance = $new_instance; $instance = $new_instance;
}
return $instance; return $instance;
} }
private function parse_bool($str) { private function parse_bool($str)
if (in_array(strtolower($str) ,array('on','yes','true'))) { {
if (in_array(strtolower($str), array('on', 'yes', 'true'))) {
$res = true; $res = true;
} else { } else {
$res = false; $res = false;
@ -121,10 +126,12 @@ class Smarty_Internal_Configfileparser#line 80 "smarty_internal_configfileparser
private static $escapes_single = Array('\\' => '\\', private static $escapes_single = Array('\\' => '\\',
'\'' => '\''); '\'' => '\'');
private static function parse_single_quoted_string($qstr) {
$escaped_string = substr($qstr, 1, strlen($qstr)-2); //remove outer quotes
$ss = preg_split('/(\\\\.)/', $escaped_string, -1, PREG_SPLIT_DELIM_CAPTURE); private static function parse_single_quoted_string($qstr)
{
$escaped_string = substr($qstr, 1, strlen($qstr) - 2); //remove outer quotes
$ss = preg_split('/(\\\\.)/', $escaped_string, - 1, PREG_SPLIT_DELIM_CAPTURE);
$str = ""; $str = "";
foreach ($ss as $s) { foreach ($ss as $s) {
@ -140,16 +147,19 @@ class Smarty_Internal_Configfileparser#line 80 "smarty_internal_configfileparser
return $str; return $str;
} }
private static function parse_double_quoted_string($qstr) { private static function parse_double_quoted_string($qstr)
$inner_str = substr($qstr, 1, strlen($qstr)-2); {
$inner_str = substr($qstr, 1, strlen($qstr) - 2);
return stripcslashes($inner_str); return stripcslashes($inner_str);
} }
private static function parse_tripple_double_quoted_string($qstr) { private static function parse_tripple_double_quoted_string($qstr)
{
return stripcslashes($qstr); return stripcslashes($qstr);
} }
private function set_var(Array $var, Array &$target_array) { private function set_var(Array $var, Array &$target_array)
{
$key = $var["key"]; $key = $var["key"];
$value = $var["value"]; $value = $var["value"];
@ -161,7 +171,8 @@ class Smarty_Internal_Configfileparser#line 80 "smarty_internal_configfileparser
} }
} }
private function add_global_vars(Array $vars) { private function add_global_vars(Array $vars)
{
if (!isset($this->compiler->config_data['vars'])) { if (!isset($this->compiler->config_data['vars'])) {
$this->compiler->config_data['vars'] = Array(); $this->compiler->config_data['vars'] = Array();
} }
@ -170,7 +181,8 @@ class Smarty_Internal_Configfileparser#line 80 "smarty_internal_configfileparser
} }
} }
private function add_section_vars($section_name, Array $vars) { private function add_section_vars($section_name, Array $vars)
{
if (!isset($this->compiler->config_data['sections'][$section_name]['vars'])) { if (!isset($this->compiler->config_data['sections'][$section_name]['vars'])) {
$this->compiler->config_data['sections'][$section_name]['vars'] = Array(); $this->compiler->config_data['sections'][$section_name]['vars'] = Array();
} }
@ -178,7 +190,8 @@ class Smarty_Internal_Configfileparser#line 80 "smarty_internal_configfileparser
$this->set_var($var, $this->compiler->config_data['sections'][$section_name]); $this->set_var($var, $this->compiler->config_data['sections'][$section_name]);
} }
} }
#line 174 "smarty_internal_configfileparser.php"
#line 174 "smarty_internal_configfileparser.php"
const TPC_OPENB = 1; const TPC_OPENB = 1;
const TPC_SECTION = 2; const TPC_SECTION = 2;
@ -203,74 +216,126 @@ class Smarty_Internal_Configfileparser#line 80 "smarty_internal_configfileparser
const YY_ERROR_ACTION = 58; const YY_ERROR_ACTION = 58;
const YY_SZ_ACTTAB = 38; const YY_SZ_ACTTAB = 38;
static public $yy_action = array( static public $yy_action = array(
/* 0 */ 29, 30, 34, 33, 24, 13, 19, 25, 35, 21, /* 0 */
/* 10 */ 59, 8, 3, 1, 20, 12, 14, 31, 20, 12, 29, 30, 34, 33, 24, 13, 19, 25, 35, 21,
/* 20 */ 15, 17, 23, 18, 27, 26, 4, 5, 6, 32, /* 10 */
/* 30 */ 2, 11, 28, 22, 16, 9, 7, 10, 59, 8, 3, 1, 20, 12, 14, 31, 20, 12,
/* 20 */
15, 17, 23, 18, 27, 26, 4, 5, 6, 32,
/* 30 */
2, 11, 28, 22, 16, 9, 7, 10,
); );
static public $yy_lookahead = array( static public $yy_lookahead = array(
/* 0 */ 7, 8, 9, 10, 11, 12, 5, 27, 15, 16, /* 0 */
/* 10 */ 20, 21, 23, 23, 17, 18, 13, 14, 17, 18, 7, 8, 9, 10, 11, 12, 5, 27, 15, 16,
/* 20 */ 15, 2, 17, 4, 25, 26, 6, 3, 3, 14, /* 10 */
/* 30 */ 23, 1, 24, 17, 2, 25, 22, 25, 20, 21, 23, 23, 17, 18, 13, 14, 17, 18,
); /* 20 */
const YY_SHIFT_USE_DFLT = -8; 15, 2, 17, 4, 25, 26, 6, 3, 3, 14,
/* 30 */
23, 1, 24, 17, 2, 25, 22, 25,
);
const YY_SHIFT_USE_DFLT = - 8;
const YY_SHIFT_MAX = 19; const YY_SHIFT_MAX = 19;
static public $yy_shift_ofst = array( static public $yy_shift_ofst = array(
/* 0 */ -8, 1, 1, 1, -7, -3, -3, 30, -8, -8, /* 0 */
/* 10 */ -8, 19, 5, 3, 15, 16, 24, 25, 32, 20, - 8, 1, 1, 1, - 7, - 3, - 3, 30, - 8, - 8,
); /* 10 */
const YY_REDUCE_USE_DFLT = -21; - 8, 19, 5, 3, 15, 16, 24, 25, 32, 20,
);
const YY_REDUCE_USE_DFLT = - 21;
const YY_REDUCE_MAX = 10; const YY_REDUCE_MAX = 10;
static public $yy_reduce_ofst = array( static public $yy_reduce_ofst = array(
/* 0 */ -10, -1, -1, -1, -20, 10, 12, 8, 14, 7, /* 0 */
/* 10 */ -11, - 10, - 1, - 1, - 1, - 20, 10, 12, 8, 14, 7,
); /* 10 */
- 11,
);
static public $yyExpectedTokens = array( static public $yyExpectedTokens = array(
/* 0 */ array(), /* 0 */
/* 1 */ array(5, 17, 18, ), array(),
/* 2 */ array(5, 17, 18, ), /* 1 */
/* 3 */ array(5, 17, 18, ), array(5, 17, 18,),
/* 4 */ array(7, 8, 9, 10, 11, 12, 15, 16, ), /* 2 */
/* 5 */ array(17, 18, ), array(5, 17, 18,),
/* 6 */ array(17, 18, ), /* 3 */
/* 7 */ array(1, ), array(5, 17, 18,),
/* 8 */ array(), /* 4 */
/* 9 */ array(), array(7, 8, 9, 10, 11, 12, 15, 16,),
/* 10 */ array(), /* 5 */
/* 11 */ array(2, 4, ), array(17, 18,),
/* 12 */ array(15, 17, ), /* 6 */
/* 13 */ array(13, 14, ), array(17, 18,),
/* 14 */ array(14, ), /* 7 */
/* 15 */ array(17, ), array(1,),
/* 16 */ array(3, ), /* 8 */
/* 17 */ array(3, ), array(),
/* 18 */ array(2, ), /* 9 */
/* 19 */ array(6, ), array(),
/* 20 */ array(), /* 10 */
/* 21 */ array(), array(),
/* 22 */ array(), /* 11 */
/* 23 */ array(), array(2, 4,),
/* 24 */ array(), /* 12 */
/* 25 */ array(), array(15, 17,),
/* 26 */ array(), /* 13 */
/* 27 */ array(), array(13, 14,),
/* 28 */ array(), /* 14 */
/* 29 */ array(), array(14,),
/* 30 */ array(), /* 15 */
/* 31 */ array(), array(17,),
/* 32 */ array(), /* 16 */
/* 33 */ array(), array(3,),
/* 34 */ array(), /* 17 */
/* 35 */ array(), array(3,),
); /* 18 */
array(2,),
/* 19 */
array(6,),
/* 20 */
array(),
/* 21 */
array(),
/* 22 */
array(),
/* 23 */
array(),
/* 24 */
array(),
/* 25 */
array(),
/* 26 */
array(),
/* 27 */
array(),
/* 28 */
array(),
/* 29 */
array(),
/* 30 */
array(),
/* 31 */
array(),
/* 32 */
array(),
/* 33 */
array(),
/* 34 */
array(),
/* 35 */
array(),
);
static public $yy_default = array( static public $yy_default = array(
/* 0 */ 44, 37, 41, 40, 58, 58, 58, 36, 39, 44, /* 0 */
/* 10 */ 44, 58, 58, 58, 58, 58, 58, 58, 58, 58, 44, 37, 41, 40, 58, 58, 58, 36, 39, 44,
/* 20 */ 55, 54, 57, 56, 50, 45, 43, 42, 38, 46, /* 10 */
/* 30 */ 47, 52, 51, 49, 48, 53, 44, 58, 58, 58, 58, 58, 58, 58, 58, 58,
); /* 20 */
55, 54, 57, 56, 50, 45, 43, 42, 38, 46,
/* 30 */
47, 52, 51, 49, 48, 53,
);
const YYNOCODE = 29; const YYNOCODE = 29;
const YYSTACKDEPTH = 100; const YYSTACKDEPTH = 100;
const YYNSTATE = 36; const YYNSTATE = 36;
@ -278,8 +343,8 @@ static public $yy_action = array(
const YYERRORSYMBOL = 19; const YYERRORSYMBOL = 19;
const YYERRSYMDT = 'yy0'; const YYERRSYMDT = 'yy0';
const YYFALLBACK = 0; const YYFALLBACK = 0;
public static $yyFallback = array( public static $yyFallback = array();
);
public function Trace($TraceFILE, $zTracePrompt) public function Trace($TraceFILE, $zTracePrompt)
{ {
if (!$TraceFILE) { if (!$TraceFILE) {
@ -314,28 +379,50 @@ static public $yy_action = array(
); );
public static $yyRuleName = array( public static $yyRuleName = array(
/* 0 */ "start ::= global_vars sections", /* 0 */
/* 1 */ "global_vars ::= var_list", "start ::= global_vars sections",
/* 2 */ "sections ::= sections section", /* 1 */
/* 3 */ "sections ::=", "global_vars ::= var_list",
/* 4 */ "section ::= OPENB SECTION CLOSEB newline var_list", /* 2 */
/* 5 */ "section ::= OPENB DOT SECTION CLOSEB newline var_list", "sections ::= sections section",
/* 6 */ "var_list ::= var_list newline", /* 3 */
/* 7 */ "var_list ::= var_list var", "sections ::=",
/* 8 */ "var_list ::=", /* 4 */
/* 9 */ "var ::= ID EQUAL value", "section ::= OPENB SECTION CLOSEB newline var_list",
/* 10 */ "value ::= FLOAT", /* 5 */
/* 11 */ "value ::= INT", "section ::= OPENB DOT SECTION CLOSEB newline var_list",
/* 12 */ "value ::= BOOL", /* 6 */
/* 13 */ "value ::= SINGLE_QUOTED_STRING", "var_list ::= var_list newline",
/* 14 */ "value ::= DOUBLE_QUOTED_STRING", /* 7 */
/* 15 */ "value ::= TRIPPLE_QUOTES TRIPPLE_TEXT TRIPPLE_QUOTES_END", "var_list ::= var_list var",
/* 16 */ "value ::= TRIPPLE_QUOTES TRIPPLE_QUOTES_END", /* 8 */
/* 17 */ "value ::= NAKED_STRING", "var_list ::=",
/* 18 */ "value ::= OTHER", /* 9 */
/* 19 */ "newline ::= NEWLINE", "var ::= ID EQUAL value",
/* 20 */ "newline ::= COMMENTSTART NEWLINE", /* 10 */
/* 21 */ "newline ::= COMMENTSTART NAKED_STRING NEWLINE", "value ::= FLOAT",
/* 11 */
"value ::= INT",
/* 12 */
"value ::= BOOL",
/* 13 */
"value ::= SINGLE_QUOTED_STRING",
/* 14 */
"value ::= DOUBLE_QUOTED_STRING",
/* 15 */
"value ::= TRIPPLE_QUOTES TRIPPLE_TEXT TRIPPLE_QUOTES_END",
/* 16 */
"value ::= TRIPPLE_QUOTES TRIPPLE_QUOTES_END",
/* 17 */
"value ::= NAKED_STRING",
/* 18 */
"value ::= OTHER",
/* 19 */
"newline ::= NEWLINE",
/* 20 */
"newline ::= COMMENTSTART NEWLINE",
/* 21 */
"newline ::= COMMENTSTART NAKED_STRING NEWLINE",
); );
public function tokenName($tokenType) public function tokenName($tokenType)
@ -353,7 +440,8 @@ static public $yy_action = array(
public static function yy_destructor($yymajor, $yypminor) public static function yy_destructor($yymajor, $yypminor)
{ {
switch ($yymajor) { switch ($yymajor) {
default: break; /* If no destructor action specified: do nothing */ default:
break; /* If no destructor action specified: do nothing */
} }
} }
@ -370,7 +458,7 @@ static public $yy_action = array(
} }
$yymajor = $yytos->major; $yymajor = $yytos->major;
self::yy_destructor($yymajor, $yytos->minor); self::yy_destructor($yymajor, $yytos->minor);
$this->yyidx--; $this->yyidx --;
return $yymajor; return $yymajor;
} }
@ -400,7 +488,7 @@ static public $yy_action = array(
// reduce action // reduce action
$done = 0; $done = 0;
do { do {
if ($done++ == 100) { if ($done ++ == 100) {
$this->yyidx = $yyidx; $this->yyidx = $yyidx;
$this->yystack = $stack; $this->yystack = $stack;
// too much recursion prevents proper detection // too much recursion prevents proper detection
@ -424,7 +512,7 @@ static public $yy_action = array(
} }
if ($nextstate < self::YYNSTATE) { if ($nextstate < self::YYNSTATE) {
// we need to shift a non-terminal // we need to shift a non-terminal
$this->yyidx++; $this->yyidx ++;
$x = new TPC_yyStackEntry; $x = new TPC_yyStackEntry;
$x->stateno = $nextstate; $x->stateno = $nextstate;
$x->major = self::$yyRuleInfo[$yyruleno]['lhs']; $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
@ -472,7 +560,7 @@ static public $yy_action = array(
// reduce action // reduce action
$done = 0; $done = 0;
do { do {
if ($done++ == 100) { if ($done ++ == 100) {
$this->yyidx = $yyidx; $this->yyidx = $yyidx;
$this->yystack = $stack; $this->yystack = $stack;
// too much recursion prevents proper detection // too much recursion prevents proper detection
@ -485,7 +573,8 @@ static public $yy_action = array(
$this->yystack[$this->yyidx]->stateno, $this->yystack[$this->yyidx]->stateno,
self::$yyRuleInfo[$yyruleno]['lhs']); self::$yyRuleInfo[$yyruleno]['lhs']);
if (isset(self::$yyExpectedTokens[$nextstate]) && if (isset(self::$yyExpectedTokens[$nextstate]) &&
in_array($token, self::$yyExpectedTokens[$nextstate], true)) { in_array($token, self::$yyExpectedTokens[$nextstate], true)
) {
$this->yyidx = $yyidx; $this->yyidx = $yyidx;
$this->yystack = $stack; $this->yystack = $stack;
@ -493,7 +582,7 @@ static public $yy_action = array(
} }
if ($nextstate < self::YYNSTATE) { if ($nextstate < self::YYNSTATE) {
// we need to shift a non-terminal // we need to shift a non-terminal
$this->yyidx++; $this->yyidx ++;
$x = new TPC_yyStackEntry; $x = new TPC_yyStackEntry;
$x->stateno = $nextstate; $x->stateno = $nextstate;
$x->major = self::$yyRuleInfo[$yyruleno]['lhs']; $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
@ -546,9 +635,11 @@ static public $yy_action = array(
} }
$i += $iLookAhead; $i += $iLookAhead;
if ($i < 0 || $i >= self::YY_SZ_ACTTAB || if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
self::$yy_lookahead[$i] != $iLookAhead) { self::$yy_lookahead[$i] != $iLookAhead
) {
if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback) if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)
&& ($iFallback = self::$yyFallback[$iLookAhead]) != 0) { && ($iFallback = self::$yyFallback[$iLookAhead]) != 0
) {
if ($this->yyTraceFILE) { if ($this->yyTraceFILE) {
fwrite($this->yyTraceFILE, $this->yyTracePrompt . "FALLBACK " . fwrite($this->yyTraceFILE, $this->yyTracePrompt . "FALLBACK " .
$this->yyTokenName[$iLookAhead] . " => " . $this->yyTokenName[$iLookAhead] . " => " .
@ -580,7 +671,8 @@ static public $yy_action = array(
} }
$i += $iLookAhead; $i += $iLookAhead;
if ($i < 0 || $i >= self::YY_SZ_ACTTAB || if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
self::$yy_lookahead[$i] != $iLookAhead) { self::$yy_lookahead[$i] != $iLookAhead
) {
return self::$yy_default[$stateno]; return self::$yy_default[$stateno];
} else { } else {
return self::$yy_action[$i]; return self::$yy_action[$i];
@ -589,20 +681,20 @@ static public $yy_action = array(
public function yy_shift($yyNewState, $yyMajor, $yypMinor) public function yy_shift($yyNewState, $yyMajor, $yypMinor)
{ {
$this->yyidx++; $this->yyidx ++;
if ($this->yyidx >= self::YYSTACKDEPTH) { if ($this->yyidx >= self::YYSTACKDEPTH) {
$this->yyidx--; $this->yyidx --;
if ($this->yyTraceFILE) { if ($this->yyTraceFILE) {
fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt); fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
} }
while ($this->yyidx >= 0) { while ($this->yyidx >= 0) {
$this->yy_pop_parser_stack(); $this->yy_pop_parser_stack();
} }
#line 125 "smarty_internal_configfileparser.y" #line 125 "smarty_internal_configfileparser.y"
$this->internalError = true; $this->internalError = true;
$this->compiler->trigger_config_file_error("Stack overflow in configfile parser"); $this->compiler->trigger_config_file_error("Stack overflow in configfile parser");
#line 601 "smarty_internal_configfileparser.php" #line 601 "smarty_internal_configfileparser.php"
return; return;
} }
@ -615,37 +707,37 @@ static public $yy_action = array(
fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt, fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt,
$yyNewState); $yyNewState);
fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt); fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt);
for ($i = 1; $i <= $this->yyidx; $i++) { for ($i = 1; $i <= $this->yyidx; $i ++) {
fprintf($this->yyTraceFILE, " %s", fprintf($this->yyTraceFILE, " %s",
$this->yyTokenName[$this->yystack[$i]->major]); $this->yyTokenName[$this->yystack[$i]->major]);
} }
fwrite($this->yyTraceFILE,"\n"); fwrite($this->yyTraceFILE, "\n");
} }
} }
public static $yyRuleInfo = array( public static $yyRuleInfo = array(
array( 'lhs' => 20, 'rhs' => 2 ), array('lhs' => 20, 'rhs' => 2),
array( 'lhs' => 21, 'rhs' => 1 ), array('lhs' => 21, 'rhs' => 1),
array( 'lhs' => 22, 'rhs' => 2 ), array('lhs' => 22, 'rhs' => 2),
array( 'lhs' => 22, 'rhs' => 0 ), array('lhs' => 22, 'rhs' => 0),
array( 'lhs' => 24, 'rhs' => 5 ), array('lhs' => 24, 'rhs' => 5),
array( 'lhs' => 24, 'rhs' => 6 ), array('lhs' => 24, 'rhs' => 6),
array( 'lhs' => 23, 'rhs' => 2 ), array('lhs' => 23, 'rhs' => 2),
array( 'lhs' => 23, 'rhs' => 2 ), array('lhs' => 23, 'rhs' => 2),
array( 'lhs' => 23, 'rhs' => 0 ), array('lhs' => 23, 'rhs' => 0),
array( 'lhs' => 26, 'rhs' => 3 ), array('lhs' => 26, 'rhs' => 3),
array( 'lhs' => 27, 'rhs' => 1 ), array('lhs' => 27, 'rhs' => 1),
array( 'lhs' => 27, 'rhs' => 1 ), array('lhs' => 27, 'rhs' => 1),
array( 'lhs' => 27, 'rhs' => 1 ), array('lhs' => 27, 'rhs' => 1),
array( 'lhs' => 27, 'rhs' => 1 ), array('lhs' => 27, 'rhs' => 1),
array( 'lhs' => 27, 'rhs' => 1 ), array('lhs' => 27, 'rhs' => 1),
array( 'lhs' => 27, 'rhs' => 3 ), array('lhs' => 27, 'rhs' => 3),
array( 'lhs' => 27, 'rhs' => 2 ), array('lhs' => 27, 'rhs' => 2),
array( 'lhs' => 27, 'rhs' => 1 ), array('lhs' => 27, 'rhs' => 1),
array( 'lhs' => 27, 'rhs' => 1 ), array('lhs' => 27, 'rhs' => 1),
array( 'lhs' => 25, 'rhs' => 1 ), array('lhs' => 25, 'rhs' => 1),
array( 'lhs' => 25, 'rhs' => 2 ), array('lhs' => 25, 'rhs' => 2),
array( 'lhs' => 25, 'rhs' => 3 ), array('lhs' => 25, 'rhs' => 3),
); );
public static $yyReduceMap = array( public static $yyReduceMap = array(
@ -672,90 +764,109 @@ static public $yy_action = array(
17 => 17, 17 => 17,
18 => 17, 18 => 17,
); );
#line 131 "smarty_internal_configfileparser.y"
function yy_r0(){ #line 131 "smarty_internal_configfileparser.y"
function yy_r0()
{
$this->_retvalue = null; $this->_retvalue = null;
} }
#line 675 "smarty_internal_configfileparser.php" #line 675 "smarty_internal_configfileparser.php"
#line 136 "smarty_internal_configfileparser.y" #line 136 "smarty_internal_configfileparser.y"
function yy_r1(){ function yy_r1()
$this->add_global_vars($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = null; {
$this->add_global_vars($this->yystack[$this->yyidx + 0]->minor);
$this->_retvalue = null;
} }
#line 680 "smarty_internal_configfileparser.php" #line 680 "smarty_internal_configfileparser.php"
#line 149 "smarty_internal_configfileparser.y" #line 149 "smarty_internal_configfileparser.y"
function yy_r4(){ function yy_r4()
$this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor); {
$this->add_section_vars($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor);
$this->_retvalue = null; $this->_retvalue = null;
} }
#line 686 "smarty_internal_configfileparser.php" #line 686 "smarty_internal_configfileparser.php"
#line 154 "smarty_internal_configfileparser.y" #line 154 "smarty_internal_configfileparser.y"
function yy_r5(){ function yy_r5()
{
if ($this->smarty->config_read_hidden) { if ($this->smarty->config_read_hidden) {
$this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor); $this->add_section_vars($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor);
} }
$this->_retvalue = null; $this->_retvalue = null;
} }
#line 694 "smarty_internal_configfileparser.php" #line 694 "smarty_internal_configfileparser.php"
#line 162 "smarty_internal_configfileparser.y" #line 162 "smarty_internal_configfileparser.y"
function yy_r6(){ function yy_r6()
$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; {
$this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor;
} }
#line 699 "smarty_internal_configfileparser.php" #line 699 "smarty_internal_configfileparser.php"
#line 166 "smarty_internal_configfileparser.y" #line 166 "smarty_internal_configfileparser.y"
function yy_r7(){ function yy_r7()
$this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor, Array($this->yystack[$this->yyidx + 0]->minor)); {
$this->_retvalue = array_merge($this->yystack[$this->yyidx + - 1]->minor, Array($this->yystack[$this->yyidx + 0]->minor));
} }
#line 704 "smarty_internal_configfileparser.php" #line 704 "smarty_internal_configfileparser.php"
#line 170 "smarty_internal_configfileparser.y" #line 170 "smarty_internal_configfileparser.y"
function yy_r8(){ function yy_r8()
{
$this->_retvalue = Array(); $this->_retvalue = Array();
} }
#line 709 "smarty_internal_configfileparser.php" #line 709 "smarty_internal_configfileparser.php"
#line 176 "smarty_internal_configfileparser.y" #line 176 "smarty_internal_configfileparser.y"
function yy_r9(){ function yy_r9()
$this->_retvalue = Array("key" => $this->yystack[$this->yyidx + -2]->minor, "value" => $this->yystack[$this->yyidx + 0]->minor); {
$this->_retvalue = Array("key" => $this->yystack[$this->yyidx + - 2]->minor, "value" => $this->yystack[$this->yyidx + 0]->minor);
} }
#line 714 "smarty_internal_configfileparser.php" #line 714 "smarty_internal_configfileparser.php"
#line 181 "smarty_internal_configfileparser.y" #line 181 "smarty_internal_configfileparser.y"
function yy_r10(){ function yy_r10()
{
$this->_retvalue = (float) $this->yystack[$this->yyidx + 0]->minor; $this->_retvalue = (float) $this->yystack[$this->yyidx + 0]->minor;
} }
#line 719 "smarty_internal_configfileparser.php" #line 719 "smarty_internal_configfileparser.php"
#line 185 "smarty_internal_configfileparser.y" #line 185 "smarty_internal_configfileparser.y"
function yy_r11(){ function yy_r11()
{
$this->_retvalue = (int) $this->yystack[$this->yyidx + 0]->minor; $this->_retvalue = (int) $this->yystack[$this->yyidx + 0]->minor;
} }
#line 724 "smarty_internal_configfileparser.php" #line 724 "smarty_internal_configfileparser.php"
#line 189 "smarty_internal_configfileparser.y" #line 189 "smarty_internal_configfileparser.y"
function yy_r12(){ function yy_r12()
{
$this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor);
} }
#line 729 "smarty_internal_configfileparser.php" #line 729 "smarty_internal_configfileparser.php"
#line 193 "smarty_internal_configfileparser.y" #line 193 "smarty_internal_configfileparser.y"
function yy_r13(){ function yy_r13()
{
$this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor);
} }
#line 734 "smarty_internal_configfileparser.php" #line 734 "smarty_internal_configfileparser.php"
#line 197 "smarty_internal_configfileparser.y" #line 197 "smarty_internal_configfileparser.y"
function yy_r14(){ function yy_r14()
{
$this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor);
} }
#line 739 "smarty_internal_configfileparser.php" #line 739 "smarty_internal_configfileparser.php"
#line 201 "smarty_internal_configfileparser.y" #line 201 "smarty_internal_configfileparser.y"
function yy_r15(){ function yy_r15()
$this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + -1]->minor); {
$this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + - 1]->minor);
} }
#line 744 "smarty_internal_configfileparser.php" #line 744 "smarty_internal_configfileparser.php"
#line 205 "smarty_internal_configfileparser.y" #line 205 "smarty_internal_configfileparser.y"
function yy_r16(){ function yy_r16()
{
$this->_retvalue = ''; $this->_retvalue = '';
} }
#line 749 "smarty_internal_configfileparser.php" #line 749 "smarty_internal_configfileparser.php"
#line 209 "smarty_internal_configfileparser.y" #line 209 "smarty_internal_configfileparser.y"
function yy_r17(){ function yy_r17()
{
$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
} }
#line 754 "smarty_internal_configfileparser.php"
#line 754 "smarty_internal_configfileparser.php"
private $_retvalue; private $_retvalue;
@ -763,7 +874,8 @@ static public $yy_action = array(
{ {
$yymsp = $this->yystack[$this->yyidx]; $yymsp = $this->yystack[$this->yyidx];
if ($this->yyTraceFILE && $yyruleno >= 0 if ($this->yyTraceFILE && $yyruleno >= 0
&& $yyruleno < count(self::$yyRuleName)) { && $yyruleno < count(self::$yyRuleName)
) {
fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n", fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n",
$this->yyTracePrompt, $yyruleno, $this->yyTracePrompt, $yyruleno,
self::$yyRuleName[$yyruleno]); self::$yyRuleName[$yyruleno]);
@ -779,14 +891,14 @@ static public $yy_action = array(
$yygoto = self::$yyRuleInfo[$yyruleno]['lhs']; $yygoto = self::$yyRuleInfo[$yyruleno]['lhs'];
$yysize = self::$yyRuleInfo[$yyruleno]['rhs']; $yysize = self::$yyRuleInfo[$yyruleno]['rhs'];
$this->yyidx -= $yysize; $this->yyidx -= $yysize;
for ($i = $yysize; $i; $i--) { for ($i = $yysize; $i; $i --) {
// pop all of the right-hand side parameters // pop all of the right-hand side parameters
array_pop($this->yystack); array_pop($this->yystack);
} }
$yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto); $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto);
if ($yyact < self::YYNSTATE) { if ($yyact < self::YYNSTATE) {
if (!$this->yyTraceFILE && $yysize) { if (!$this->yyTraceFILE && $yysize) {
$this->yyidx++; $this->yyidx ++;
$x = new TPC_yyStackEntry; $x = new TPC_yyStackEntry;
$x->stateno = $yyact; $x->stateno = $yyact;
$x->major = $yygoto; $x->major = $yygoto;
@ -804,35 +916,37 @@ static public $yy_action = array(
{ {
if ($this->yyTraceFILE) { if ($this->yyTraceFILE) {
fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt); fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
} while ($this->yyidx >= 0) { }
while ($this->yyidx >= 0) {
$this->yy_pop_parser_stack(); $this->yy_pop_parser_stack();
} }
} }
public function yy_syntax_error($yymajor, $TOKEN) public function yy_syntax_error($yymajor, $TOKEN)
{ {
#line 118 "smarty_internal_configfileparser.y" #line 118 "smarty_internal_configfileparser.y"
$this->internalError = true; $this->internalError = true;
$this->yymajor = $yymajor; $this->yymajor = $yymajor;
$this->compiler->trigger_config_file_error(); $this->compiler->trigger_config_file_error();
#line 816 "smarty_internal_configfileparser.php" #line 816 "smarty_internal_configfileparser.php"
} }
public function yy_accept() public function yy_accept()
{ {
if ($this->yyTraceFILE) { if ($this->yyTraceFILE) {
fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt); fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
} while ($this->yyidx >= 0) { }
while ($this->yyidx >= 0) {
$stack = $this->yy_pop_parser_stack(); $stack = $this->yy_pop_parser_stack();
} }
#line 110 "smarty_internal_configfileparser.y" #line 110 "smarty_internal_configfileparser.y"
$this->successful = !$this->internalError; $this->successful = !$this->internalError;
$this->internalError = false; $this->internalError = false;
$this->retvalue = $this->_retvalue; $this->retvalue = $this->_retvalue;
//echo $this->retvalue."\n\n"; //echo $this->retvalue."\n\n";
#line 833 "smarty_internal_configfileparser.php" #line 833 "smarty_internal_configfileparser.php"
} }
public function doParse($yymajor, $yytokenvalue) public function doParse($yymajor, $yytokenvalue)
@ -841,14 +955,14 @@ static public $yy_action = array(
if ($this->yyidx === null || $this->yyidx < 0) { if ($this->yyidx === null || $this->yyidx < 0) {
$this->yyidx = 0; $this->yyidx = 0;
$this->yyerrcnt = -1; $this->yyerrcnt = - 1;
$x = new TPC_yyStackEntry; $x = new TPC_yyStackEntry;
$x->stateno = 0; $x->stateno = 0;
$x->major = 0; $x->major = 0;
$this->yystack = array(); $this->yystack = array();
array_push($this->yystack, $x); array_push($this->yystack, $x);
} }
$yyendofinput = ($yymajor==0); $yyendofinput = ($yymajor == 0);
if ($this->yyTraceFILE) { if ($this->yyTraceFILE) {
fprintf($this->yyTraceFILE, "%sInput %s\n", fprintf($this->yyTraceFILE, "%sInput %s\n",
@ -858,13 +972,14 @@ static public $yy_action = array(
do { do {
$yyact = $this->yy_find_shift_action($yymajor); $yyact = $this->yy_find_shift_action($yymajor);
if ($yymajor < self::YYERRORSYMBOL && if ($yymajor < self::YYERRORSYMBOL &&
!$this->yy_is_expected_token($yymajor)) { !$this->yy_is_expected_token($yymajor)
) {
// force a syntax error // force a syntax error
$yyact = self::YY_ERROR_ACTION; $yyact = self::YY_ERROR_ACTION;
} }
if ($yyact < self::YYNSTATE) { if ($yyact < self::YYNSTATE) {
$this->yy_shift($yyact, $yymajor, $yytokenvalue); $this->yy_shift($yyact, $yymajor, $yytokenvalue);
$this->yyerrcnt--; $this->yyerrcnt --;
if ($yyendofinput && $this->yyidx >= 0) { if ($yyendofinput && $this->yyidx >= 0) {
$yymajor = 0; $yymajor = 0;
} else { } else {
@ -893,10 +1008,10 @@ static public $yy_action = array(
while ($this->yyidx >= 0 && while ($this->yyidx >= 0 &&
$yymx != self::YYERRORSYMBOL && $yymx != self::YYERRORSYMBOL &&
($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
){ ) {
$this->yy_pop_parser_stack(); $this->yy_pop_parser_stack();
} }
if ($this->yyidx < 0 || $yymajor==0) { if ($this->yyidx < 0 || $yymajor == 0) {
$this->yy_destructor($yymajor, $yytokenvalue); $this->yy_destructor($yymajor, $yytokenvalue);
$this->yy_parse_failed(); $this->yy_parse_failed();
$yymajor = self::YYNOCODE; $yymajor = self::YYNOCODE;

@ -1,8 +1,7 @@
<?php <?php
/** /**
* Smarty Internal Plugin Data * Smarty Internal Plugin Data
* * This file contains the basic classes and methods for template and variable creation
* This file contains the basic classes and methodes for template and variable creation
* *
* @package Smarty * @package Smarty
* @subpackage Template * @subpackage Template
@ -10,7 +9,7 @@
*/ */
/** /**
* Base class with template and variable methodes * Base class with template and variable methods
* *
* @package Smarty * @package Smarty
* @subpackage Template * @subpackage Template
@ -48,7 +47,7 @@ class Smarty_Internal_Data
* @param array|string $tpl_var the template variable name(s) * @param array|string $tpl_var the template variable name(s)
* @param mixed $value the value to assign * @param mixed $value the value to assign
* @param boolean $nocache if true any output of this variable will be not cached * @param boolean $nocache if true any output of this variable will be not cached
* @param boolean $scope the scope the variable will have (local,parent or root) *
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/ */
public function assign($tpl_var, $value = null, $nocache = false) public function assign($tpl_var, $value = null, $nocache = false)
@ -74,6 +73,7 @@ class Smarty_Internal_Data
* @param string $varname the global variable name * @param string $varname the global variable name
* @param mixed $value the value to assign * @param mixed $value the value to assign
* @param boolean $nocache if true any output of this variable will be not cached * @param boolean $nocache if true any output of this variable will be not cached
*
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/ */
public function assignGlobal($varname, $value = null, $nocache = false) public function assignGlobal($varname, $value = null, $nocache = false)
@ -89,19 +89,21 @@ class Smarty_Internal_Data
return $this; return $this;
} }
/** /**
* assigns values to template variables by reference * assigns values to template variables by reference
* *
* @param string $tpl_var the template variable name * @param string $tpl_var the template variable name
* @param mixed $ &$value the referenced value to assign * @param $value
* @param boolean $nocache if true any output of this variable will be not cached * @param boolean $nocache if true any output of this variable will be not cached
*
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/ */
public function assignByRef($tpl_var, &$value, $nocache = false) public function assignByRef($tpl_var, &$value, $nocache = false)
{ {
if ($tpl_var != '') { if ($tpl_var != '') {
$this->tpl_vars[$tpl_var] = new Smarty_variable(null, $nocache); $this->tpl_vars[$tpl_var] = new Smarty_variable(null, $nocache);
$this->tpl_vars[$tpl_var]->value = &$value; $this->tpl_vars[$tpl_var]->value = & $value;
} }
return $this; return $this;
@ -114,6 +116,7 @@ class Smarty_Internal_Data
* @param mixed $value the value to append * @param mixed $value the value to append
* @param boolean $merge flag if array elements shall be merged * @param boolean $merge flag if array elements shall be merged
* @param boolean $nocache if true any output of this variable will be not cached * @param boolean $nocache if true any output of this variable will be not cached
*
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/ */
public function append($tpl_var, $value = null, $merge = false, $nocache = false) public function append($tpl_var, $value = null, $merge = false, $nocache = false)
@ -174,6 +177,7 @@ class Smarty_Internal_Data
* @param string $tpl_var the template variable name * @param string $tpl_var the template variable name
* @param mixed &$value the referenced value to append * @param mixed &$value the referenced value to append
* @param boolean $merge flag if array elements shall be merged * @param boolean $merge flag if array elements shall be merged
*
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/ */
public function appendByRef($tpl_var, &$value, $merge = false) public function appendByRef($tpl_var, &$value, $merge = false)
@ -187,10 +191,10 @@ class Smarty_Internal_Data
} }
if ($merge && is_array($value)) { if ($merge && is_array($value)) {
foreach ($value as $_key => $_val) { foreach ($value as $_key => $_val) {
$this->tpl_vars[$tpl_var]->value[$_key] = &$value[$_key]; $this->tpl_vars[$tpl_var]->value[$_key] = & $value[$_key];
} }
} else { } else {
$this->tpl_vars[$tpl_var]->value[] = &$value; $this->tpl_vars[$tpl_var]->value[] = & $value;
} }
} }
@ -201,8 +205,9 @@ class Smarty_Internal_Data
* Returns a single or all template variables * Returns a single or all template variables
* *
* @param string $varname variable name or null * @param string $varname variable name or null
* @param string $_ptr optional pointer to data object * @param object $_ptr optional pointer to data object
* @param boolean $search_parents include parent templates? * @param boolean $search_parents include parent templates?
*
* @return string variable value or or array of variables * @return string variable value or or array of variables
*/ */
public function getTemplateVars($varname = null, $_ptr = null, $search_parents = true) public function getTemplateVars($varname = null, $_ptr = null, $search_parents = true)
@ -218,7 +223,8 @@ class Smarty_Internal_Data
$_result = array(); $_result = array();
if ($_ptr === null) { if ($_ptr === null) {
$_ptr = $this; $_ptr = $this;
} while ($_ptr !== null) { }
while ($_ptr !== null) {
foreach ($_ptr->tpl_vars AS $key => $var) { foreach ($_ptr->tpl_vars AS $key => $var) {
if (!array_key_exists($key, $_result)) { if (!array_key_exists($key, $_result)) {
$_result[$key] = $var->value; $_result[$key] = $var->value;
@ -247,6 +253,7 @@ class Smarty_Internal_Data
* clear the given assigned template variable. * clear the given assigned template variable.
* *
* @param string|array $tpl_var the template variable(s) to clear * @param string|array $tpl_var the template variable(s) to clear
*
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/ */
public function clearAssign($tpl_var) public function clearAssign($tpl_var)
@ -264,6 +271,7 @@ class Smarty_Internal_Data
/** /**
* clear all the assigned template variables. * clear all the assigned template variables.
*
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/ */
public function clearAllAssign() public function clearAllAssign()
@ -278,6 +286,7 @@ class Smarty_Internal_Data
* *
* @param string $config_file filename * @param string $config_file filename
* @param mixed $sections array of section names, single section or null * @param mixed $sections array of section names, single section or null
*
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/ */
public function configLoad($config_file, $sections = null) public function configLoad($config_file, $sections = null)
@ -295,13 +304,16 @@ class Smarty_Internal_Data
* @param string $variable the name of the Smarty variable * @param string $variable the name of the Smarty variable
* @param object $_ptr optional pointer to data object * @param object $_ptr optional pointer to data object
* @param boolean $search_parents search also in parent data * @param boolean $search_parents search also in parent data
* @param bool $error_enable
*
* @return object the object of the variable * @return object the object of the variable
*/ */
public function getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true) public function getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true)
{ {
if ($_ptr === null) { if ($_ptr === null) {
$_ptr = $this; $_ptr = $this;
} while ($_ptr !== null) { }
while ($_ptr !== null) {
if (isset($_ptr->tpl_vars[$variable])) { if (isset($_ptr->tpl_vars[$variable])) {
// found it, return it // found it, return it
return $_ptr->tpl_vars[$variable]; return $_ptr->tpl_vars[$variable];
@ -329,6 +341,8 @@ class Smarty_Internal_Data
* gets a config variable * gets a config variable
* *
* @param string $variable the name of the config variable * @param string $variable the name of the config variable
* @param bool $error_enable
*
* @return mixed the value of the config variable * @return mixed the value of the config variable
*/ */
public function getConfigVariable($variable, $error_enable = true) public function getConfigVariable($variable, $error_enable = true)
@ -354,6 +368,8 @@ class Smarty_Internal_Data
* gets a stream variable * gets a stream variable
* *
* @param string $variable the stream of the variable * @param string $variable the stream of the variable
*
* @throws SmartyException
* @return mixed the value of the stream variable * @return mixed the value of the stream variable
*/ */
public function getStreamVariable($variable) public function getStreamVariable($variable)
@ -361,7 +377,7 @@ class Smarty_Internal_Data
$_result = ''; $_result = '';
$fp = fopen($variable, 'r+'); $fp = fopen($variable, 'r+');
if ($fp) { if ($fp) {
while (!feof($fp) && ($current_line = fgets($fp)) !== false ) { while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
$_result .= $current_line; $_result .= $current_line;
} }
fclose($fp); fclose($fp);
@ -380,6 +396,8 @@ class Smarty_Internal_Data
* Returns a single or all config variables * Returns a single or all config variables
* *
* @param string $varname variable name or null * @param string $varname variable name or null
* @param bool $search_parents
*
* @return string variable value or or array of variables * @return string variable value or or array of variables
*/ */
public function getConfigVars($varname = null, $search_parents = true) public function getConfigVars($varname = null, $search_parents = true)
@ -412,6 +430,7 @@ class Smarty_Internal_Data
* Deassigns a single or all config variables * Deassigns a single or all config variables
* *
* @param string $varname variable name or null * @param string $varname variable name or null
*
* @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
*/ */
public function clearConfig($varname = null) public function clearConfig($varname = null)
@ -424,12 +443,10 @@ class Smarty_Internal_Data
return $this; return $this;
} }
} }
/** /**
* class for the Smarty data object * class for the Smarty data object
*
* The Smarty data object will hold Smarty variables in the current scope * The Smarty data object will hold Smarty variables in the current scope
* *
* @package Smarty * @package Smarty
@ -448,9 +465,11 @@ class Smarty_Data extends Smarty_Internal_Data
* create Smarty data object * create Smarty data object
* *
* @param Smarty|array $_parent parent template * @param Smarty|array $_parent parent template
* @param Smarty $smarty global smarty instance * @param Smarty|Smarty_Internal_Template $smarty global smarty instance
*
* @throws SmartyException
*/ */
public function __construct ($_parent = null, $smarty = null) public function __construct($_parent = null, $smarty = null)
{ {
$this->smarty = $smarty; $this->smarty = $smarty;
if (is_object($_parent)) { if (is_object($_parent)) {
@ -465,12 +484,10 @@ class Smarty_Data extends Smarty_Internal_Data
throw new SmartyException("Wrong type for template variables"); throw new SmartyException("Wrong type for template variables");
} }
} }
} }
/** /**
* class for the Smarty variable object * class for the Smarty variable object
*
* This class defines the Smarty variable object * This class defines the Smarty variable object
* *
* @package Smarty * @package Smarty
@ -520,12 +537,10 @@ class Smarty_Variable
{ {
return (string) $this->value; return (string) $this->value;
} }
} }
/** /**
* class for undefined variable object * class for undefined variable object
*
* This class defines an object for undefined variable handling * This class defines an object for undefined variable handling
* *
* @package Smarty * @package Smarty
@ -537,6 +552,7 @@ class Undefined_Smarty_Variable
* Returns FALSE for 'nocache' and NULL otherwise. * Returns FALSE for 'nocache' and NULL otherwise.
* *
* @param string $name * @param string $name
*
* @return bool * @return bool
*/ */
public function __get($name) public function __get($name)
@ -557,5 +573,4 @@ class Undefined_Smarty_Variable
{ {
return ""; return "";
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Debug * Smarty Internal Plugin Debug
*
* Class to collect data for the Smarty Debugging Consol * Class to collect data for the Smarty Debugging Consol
* *
* @package Smarty * @package Smarty
@ -187,6 +186,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
* Recursively gets variables from all template/data scopes * Recursively gets variables from all template/data scopes
* *
* @param Smarty_Internal_Template|Smarty_Data $obj object to debug * @param Smarty_Internal_Template|Smarty_Data $obj object to debug
*
* @return StdClass * @return StdClass
*/ */
public static function get_debug_vars($obj) public static function get_debug_vars($obj)
@ -218,13 +218,14 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
} }
} }
return (object)array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars); return (object) array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars);
} }
/** /**
* Return key into $template_data for template * Return key into $template_data for template
* *
* @param object $template template object * @param object $template template object
*
* @return string key into $template_data * @return string key into $template_data
*/ */
private static function get_key($template) private static function get_key($template)
@ -250,5 +251,4 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
return $key; return $key;
} }
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Filter Handler * Smarty Internal Plugin Filter Handler
*
* Smarty filter handler class * Smarty filter handler class
* *
* @package Smarty * @package Smarty
@ -19,7 +18,6 @@ class Smarty_Internal_Filter_Handler
{ {
/** /**
* Run filters over content * Run filters over content
*
* The filters will be lazy loaded if required * The filters will be lazy loaded if required
* class name format: Smarty_FilterType_FilterName * class name format: Smarty_FilterType_FilterName
* plugin filename format: filtertype.filtername.php * plugin filename format: filtertype.filtername.php
@ -28,6 +26,8 @@ class Smarty_Internal_Filter_Handler
* @param string $type the type of filter ('pre','post','output') which shall run * @param string $type the type of filter ('pre','post','output') which shall run
* @param string $content the content which shall be processed by the filters * @param string $content the content which shall be processed by the filters
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
*
* @throws SmartyException
* @return string the filtered content * @return string the filtered content
*/ */
public static function runFilter($type, $content, Smarty_Internal_Template $template) public static function runFilter($type, $content, Smarty_Internal_Template $template)
@ -64,5 +64,4 @@ class Smarty_Internal_Filter_Handler
// return filtered output // return filtered output
return $output; return $output;
} }
} }

@ -49,5 +49,4 @@ class Smarty_Internal_Function_Call_Handler
} }
$_function($_template, $_params); $_function($_template, $_params);
} }
} }

@ -19,6 +19,7 @@ class Smarty_Internal_Get_Include_Path
* Return full file path from PHP include_path * Return full file path from PHP include_path
* *
* @param string $filepath filepath * @param string $filepath filepath
*
* @return string|boolean full filepath or false * @return string|boolean full filepath or false
*/ */
public static function getIncludePath($filepath) public static function getIncludePath($filepath)
@ -42,5 +43,4 @@ class Smarty_Internal_Get_Include_Path
return false; return false;
} }
} }

@ -1,7 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Nocache Insert * Smarty Internal Plugin Nocache Insert
*
* Compiles the {insert} tag into the cache file * Compiles the {insert} tag into the cache file
* *
* @package Smarty * @package Smarty
@ -25,6 +24,7 @@ class Smarty_Internal_Nocache_Insert
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param string $_script script name to load or 'null' * @param string $_script script name to load or 'null'
* @param string $_assign optional variable name * @param string $_assign optional variable name
*
* @return string compiled code * @return string compiled code
*/ */
public static function compile($_function, $_attr, $_template, $_script, $_assign = null) public static function compile($_function, $_attr, $_template, $_script, $_assign = null)
@ -48,5 +48,4 @@ class Smarty_Internal_Nocache_Insert
return "/*%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/" . $_output . "/*/%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/"; return "/*%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/" . $_output . "/*/%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/";
} }
} }

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save