diff --git a/composer.json b/composer.json index d90d617b9a..6a72c130d4 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,8 @@ "defuse/php-encryption": "1.*", "pear/Text_LanguageDetect": "1.*", "pear-pear.php.net/Text_Highlighter": "*", - "paragonie/random_compat": "^2.0" + "paragonie/random_compat": "^2.0", + "smarty/smarty": "^3.1" }, "repositories": [ { diff --git a/composer.lock b/composer.lock index 4ad749273f..c5a82428df 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "a5c0c297b0e8185f2bcd3aad20ec5acc", + "content-hash": "40fc48f9b1e36f9f4960eb0ccf51a3c4", "packages": [ { "name": "defuse/php-encryption", @@ -520,6 +520,59 @@ "description": "Identify human languages from text samples", "homepage": "http://pear.php.net/package/Text_LanguageDetect", "time": "2017-03-02T16:14:08+00:00" + }, + { + "name": "smarty/smarty", + "version": "v3.1.31", + "source": { + "type": "git", + "url": "https://github.com/smarty-php/smarty.git", + "reference": "c7d42e4a327c402897dd587871434888fde1e7a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/c7d42e4a327c402897dd587871434888fde1e7a9", + "reference": "c7d42e4a327c402897dd587871434888fde1e7a9", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "files": [ + "libs/bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Monte Ohrt", + "email": "monte@ohrt.com" + }, + { + "name": "Uwe Tews", + "email": "uwe.tews@googlemail.com" + }, + { + "name": "Rodney Rehm", + "email": "rodney.rehm@medialize.de" + } + ], + "description": "Smarty - the compiling PHP template engine", + "homepage": "http://www.smarty.net", + "keywords": [ + "templating" + ], + "time": "2016-12-14T21:57:25+00:00" } ], "packages-dev": [], diff --git a/include/friendica_smarty.php b/include/friendica_smarty.php index 5dd324bf75..f95bb69aaa 100644 --- a/include/friendica_smarty.php +++ b/include/friendica_smarty.php @@ -2,15 +2,16 @@ use Friendica\Render\ITemplateEngine; -require_once("library/Smarty/libs/Smarty.class.php"); require_once "include/plugin.php"; -define('SMARTY3_TEMPLATE_FOLDER','templates'); +define('SMARTY3_TEMPLATE_FOLDER', 'templates'); -class FriendicaSmarty extends Smarty { +class FriendicaSmarty extends Smarty +{ public $filename; - function __construct() { + function __construct() + { parent::__construct(); $a = get_app(); @@ -18,10 +19,10 @@ class FriendicaSmarty extends Smarty { // setTemplateDir can be set to an array, which Smarty will parse in order. // The order is thus very important here - $template_dirs = array('theme' => "view/theme/$theme/".SMARTY3_TEMPLATE_FOLDER."/"); - if ( x($a->theme_info,"extends") ) - $template_dirs = $template_dirs + array('extends' => "view/theme/".$a->theme_info["extends"]."/".SMARTY3_TEMPLATE_FOLDER."/"); - $template_dirs = $template_dirs + array('base' => "view/".SMARTY3_TEMPLATE_FOLDER."/"); + $template_dirs = array('theme' => "view/theme/$theme/" . SMARTY3_TEMPLATE_FOLDER . "/"); + if (x($a->theme_info, "extends")) + $template_dirs = $template_dirs + array('extends' => "view/theme/" . $a->theme_info["extends"] . "/" . SMARTY3_TEMPLATE_FOLDER . "/"); + $template_dirs = $template_dirs + array('base' => "view/" . SMARTY3_TEMPLATE_FOLDER . "/"); $this->setTemplateDir($template_dirs); $this->setCompileDir('view/smarty3/compiled/'); @@ -35,27 +36,31 @@ class FriendicaSmarty extends Smarty { $this->error_reporting = E_ALL & ~E_NOTICE; } - function parsed($template = '') { + function parsed($template = '') + { if ($template) { return $this->fetch('string:' . $template); } return $this->fetch('file:' . $this->filename); } - } -class FriendicaSmartyEngine implements ITemplateEngine { - static $name ="smarty3"; +class FriendicaSmartyEngine implements ITemplateEngine +{ + static $name = "smarty3"; - public function __construct(){ - if (!is_writable('view/smarty3/')){ - echo "ERROR: folder view/smarty3/ must be writable by webserver."; killme(); + public function __construct() + { + if (!is_writable('view/smarty3/')) { + echo "ERROR: folder view/smarty3/ must be writable by webserver."; + killme(); } } // ITemplateEngine interface - public function replaceMacros($s, $r) { + public function replaceMacros($s, $r) + { $template = ''; if (gettype($s) === 'string') { $template = $s; @@ -66,13 +71,13 @@ class FriendicaSmartyEngine implements ITemplateEngine { // "middleware": inject variables into templates $arr = array( - "template"=> basename($s->filename), + "template" => basename($s->filename), "vars" => $r ); call_hooks("template_vars", $arr); $r = $arr['vars']; - foreach ($r as $key=>$value) { + foreach ($r as $key => $value) { if ($key[0] === '$') { $key = substr($key, 1); } @@ -81,9 +86,10 @@ class FriendicaSmartyEngine implements ITemplateEngine { return $s->parsed($template); } - public function getTemplateFile($file, $root=''){ + public function getTemplateFile($file, $root = '') + { $a = get_app(); - $template_file = get_template_file($a, SMARTY3_TEMPLATE_FOLDER.'/'.$file, $root); + $template_file = get_template_file($a, SMARTY3_TEMPLATE_FOLDER . '/' . $file, $root); $template = new FriendicaSmarty(); $template->filename = $template_file; return $template; diff --git a/library/Smarty/libs/Smarty.class.php b/library/Smarty/libs/Smarty.class.php deleted file mode 100644 index 6291e4cd5e..0000000000 --- a/library/Smarty/libs/Smarty.class.php +++ /dev/null @@ -1,1674 +0,0 @@ - - * @author Uwe Tews - * @author Rodney Rehm - * @package Smarty - * @version 3.1.19 - */ - -/** - * define shorthand directory separator constant - */ -if (!defined('DS')) { - define('DS', DIRECTORY_SEPARATOR); -} - -/** - * set SMARTY_DIR to absolute path to Smarty library files. - * Sets SMARTY_DIR only if user application has not already defined it. - */ -if (!defined('SMARTY_DIR')) { - define('SMARTY_DIR', dirname(__FILE__) . DS); -} - -/** - * set SMARTY_SYSPLUGINS_DIR to absolute path to Smarty internal plugins. - * Sets SMARTY_SYSPLUGINS_DIR only if user application has not already defined it. - */ -if (!defined('SMARTY_SYSPLUGINS_DIR')) { - define('SMARTY_SYSPLUGINS_DIR', SMARTY_DIR . 'sysplugins' . DS); -} -if (!defined('SMARTY_PLUGINS_DIR')) { - define('SMARTY_PLUGINS_DIR', SMARTY_DIR . 'plugins' . DS); -} -if (!defined('SMARTY_MBSTRING')) { - define('SMARTY_MBSTRING', function_exists('mb_split')); -} -if (!defined('SMARTY_RESOURCE_CHAR_SET')) { - // UTF-8 can only be done properly when mbstring is available! - /** - * @deprecated in favor of Smarty::$_CHARSET - */ - define('SMARTY_RESOURCE_CHAR_SET', SMARTY_MBSTRING ? 'UTF-8' : 'ISO-8859-1'); -} -if (!defined('SMARTY_RESOURCE_DATE_FORMAT')) { - /** - * @deprecated in favor of Smarty::$_DATE_FORMAT - */ - define('SMARTY_RESOURCE_DATE_FORMAT', '%b %e, %Y'); -} - -/** - * register the class autoloader - */ -if (!defined('SMARTY_SPL_AUTOLOAD')) { - define('SMARTY_SPL_AUTOLOAD', 0); -} - -if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false) { - $registeredAutoLoadFunctions = spl_autoload_functions(); - if (!isset($registeredAutoLoadFunctions['spl_autoload'])) { - spl_autoload_register(); - } -} else { - spl_autoload_register('smartyAutoload'); -} - -/** - * Load always needed external class files - */ -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_template.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_cacheresource.php'; -include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_cacheresource_file.php'; - -/** - * This is the main Smarty class - * - * @package Smarty - */ -class Smarty extends Smarty_Internal_TemplateBase -{ - /**#@+ - * constant definitions - */ - - /** - * smarty version - */ - const SMARTY_VERSION = 'Smarty-3.1.19'; - - /** - * define variable scopes - */ - const SCOPE_LOCAL = 0; - const SCOPE_PARENT = 1; - const SCOPE_ROOT = 2; - const SCOPE_GLOBAL = 3; - /** - * define caching modes - */ - const CACHING_OFF = 0; - const CACHING_LIFETIME_CURRENT = 1; - const CACHING_LIFETIME_SAVED = 2; - /** - * define constant for clearing cache files be saved expiration datees - */ - const CLEAR_EXPIRED = - 1; - - /** - * define compile check modes - */ - const COMPILECHECK_OFF = 0; - const COMPILECHECK_ON = 1; - const COMPILECHECK_CACHEMISS = 2; - /** - * modes for handling of "" tags in templates. - */ - const PHP_PASSTHRU = 0; //-> print tags as plain text - const PHP_QUOTE = 1; //-> escape tags as entities - const PHP_REMOVE = 2; //-> escape tags as entities - const PHP_ALLOW = 3; //-> escape tags as entities - /** - * filter types - */ - const FILTER_POST = 'post'; - const FILTER_PRE = 'pre'; - const FILTER_OUTPUT = 'output'; - const FILTER_VARIABLE = 'variable'; - /** - * plugin types - */ - const PLUGIN_FUNCTION = 'function'; - const PLUGIN_BLOCK = 'block'; - const PLUGIN_COMPILER = 'compiler'; - const PLUGIN_MODIFIER = 'modifier'; - const PLUGIN_MODIFIERCOMPILER = 'modifiercompiler'; - - /**#@-*/ - - /** - * assigned global tpl vars - */ - public static $global_tpl_vars = array(); - - /** - * error handler returned by set_error_hanlder() in Smarty::muteExpectedErrors() - */ - public static $_previous_error_handler = null; - /** - * contains directories outside of SMARTY_DIR that are to be muted by muteExpectedErrors() - */ - public static $_muted_directories = array(); - /** - * Flag denoting if Multibyte String functions are available - */ - public static $_MBSTRING = SMARTY_MBSTRING; - /** - * The character set to adhere to (e.g. "UTF-8") - */ - public static $_CHARSET = SMARTY_RESOURCE_CHAR_SET; - /** - * The date format to be used internally - * (accepts date() and strftime()) - */ - public static $_DATE_FORMAT = SMARTY_RESOURCE_DATE_FORMAT; - /** - * Flag denoting if PCRE should run in UTF-8 mode - */ - public static $_UTF8_MODIFIER = 'u'; - - /** - * Flag denoting if operating system is windows - */ - public static $_IS_WINDOWS = false; - - /**#@+ - * variables - */ - - /** - * auto literal on delimiters with whitspace - * - * @var boolean - */ - public $auto_literal = true; - /** - * display error on not assigned variables - * - * @var boolean - */ - public $error_unassigned = false; - /** - * look up relative filepaths in include_path - * - * @var boolean - */ - public $use_include_path = false; - /** - * template directory - * - * @var array - */ - private $template_dir = array(); - /** - * joined template directory string used in cache keys - * - * @var string - */ - public $joined_template_dir = null; - /** - * joined config directory string used in cache keys - * - * @var string - */ - public $joined_config_dir = null; - /** - * default template handler - * - * @var callable - */ - public $default_template_handler_func = null; - /** - * default config handler - * - * @var callable - */ - public $default_config_handler_func = null; - /** - * default plugin handler - * - * @var callable - */ - public $default_plugin_handler_func = null; - /** - * compile directory - * - * @var string - */ - private $compile_dir = null; - /** - * plugins directory - * - * @var array - */ - private $plugins_dir = array(); - /** - * cache directory - * - * @var string - */ - private $cache_dir = null; - /** - * config directory - * - * @var array - */ - private $config_dir = array(); - /** - * force template compiling? - * - * @var boolean - */ - public $force_compile = false; - /** - * check template for modifications? - * - * @var boolean - */ - public $compile_check = true; - /** - * use sub dirs for compiled/cached files? - * - * @var boolean - */ - public $use_sub_dirs = false; - /** - * allow ambiguous resources (that are made unique by the resource handler) - * - * @var boolean - */ - public $allow_ambiguous_resources = false; - /** - * caching enabled - * - * @var boolean - */ - public $caching = false; - /** - * merge compiled includes - * - * @var boolean - */ - public $merge_compiled_includes = false; - /** - * template inheritance merge compiled includes - * - * @var boolean - */ - public $inheritance_merge_compiled_includes = true; - /** - * cache lifetime in seconds - * - * @var integer - */ - public $cache_lifetime = 3600; - /** - * force cache file creation - * - * @var boolean - */ - public $force_cache = false; - /** - * Set this if you want different sets of cache files for the same - * templates. - * - * @var string - */ - public $cache_id = null; - /** - * Set this if you want different sets of compiled files for the same - * templates. - * - * @var string - */ - public $compile_id = null; - /** - * template left-delimiter - * - * @var string - */ - public $left_delimiter = "{"; - /** - * template right-delimiter - * - * @var string - */ - public $right_delimiter = "}"; - /**#@+ - * security - */ - /** - * class name - * This should be instance of Smarty_Security. - * - * @var string - * @see Smarty_Security - */ - public $security_class = 'Smarty_Security'; - /** - * implementation of security class - * - * @var Smarty_Security - */ - public $security_policy = null; - /** - * controls handling of PHP-blocks - * - * @var integer - */ - public $php_handling = self::PHP_PASSTHRU; - /** - * controls if the php template file resource is allowed - * - * @var bool - */ - public $allow_php_templates = false; - /** - * Should compiled-templates be prevented from being called directly? - * {@internal - * Currently used by Smarty_Internal_Template only. - * }} - * - * @var boolean - */ - public $direct_access_security = true; - /**#@-*/ - /** - * debug mode - * Setting this to true enables the debug-console. - * - * @var boolean - */ - public $debugging = false; - /** - * This determines if debugging is enable-able from the browser. - * - * - * @var string - */ - public $debugging_ctrl = 'NONE'; - /** - * Name of debugging URL-param. - * Only used when $debugging_ctrl is set to 'URL'. - * The name of the URL-parameter that activates debugging. - * - * @var type - */ - public $smarty_debug_id = 'SMARTY_DEBUG'; - /** - * Path of debug template. - * - * @var string - */ - public $debug_tpl = null; - /** - * When set, smarty uses this value as error_reporting-level. - * - * @var int - */ - public $error_reporting = null; - /** - * Internal flag for getTags() - * - * @var boolean - */ - public $get_used_tags = false; - - /**#@+ - * config var settings - */ - - /** - * Controls whether variables with the same name overwrite each other. - * - * @var boolean - */ - public $config_overwrite = true; - /** - * Controls whether config values of on/true/yes and off/false/no get converted to boolean. - * - * @var boolean - */ - public $config_booleanize = true; - /** - * Controls whether hidden config sections/vars are read from the file. - * - * @var boolean - */ - public $config_read_hidden = false; - - /**#@-*/ - - /**#@+ - * resource locking - */ - - /** - * locking concurrent compiles - * - * @var boolean - */ - public $compile_locking = true; - /** - * Controls whether cache resources should emply locking mechanism - * - * @var boolean - */ - public $cache_locking = false; - /** - * seconds to wait for acquiring a lock before ignoring the write lock - * - * @var float - */ - public $locking_timeout = 10; - - /**#@-*/ - - /** - * global template functions - * - * @var array - */ - public $template_functions = array(); - /** - * resource type used if none given - * Must be an valid key of $registered_resources. - * - * @var string - */ - public $default_resource_type = 'file'; - /** - * caching type - * Must be an element of $cache_resource_types. - * - * @var string - */ - public $caching_type = 'file'; - /** - * internal config properties - * - * @var array - */ - public $properties = array(); - /** - * config type - * - * @var string - */ - public $default_config_type = 'file'; - /** - * cached template objects - * - * @var array - */ - public $template_objects = array(); - /** - * check If-Modified-Since headers - * - * @var boolean - */ - public $cache_modified_check = false; - /** - * registered plugins - * - * @var array - */ - public $registered_plugins = array(); - /** - * plugin search order - * - * @var array - */ - public $plugin_search_order = array('function', 'block', 'compiler', 'class'); - /** - * registered objects - * - * @var array - */ - public $registered_objects = array(); - /** - * registered classes - * - * @var array - */ - public $registered_classes = array(); - /** - * registered filters - * - * @var array - */ - public $registered_filters = array(); - /** - * registered resources - * - * @var array - */ - public $registered_resources = array(); - /** - * resource handler cache - * - * @var array - */ - public $_resource_handlers = array(); - /** - * registered cache resources - * - * @var array - */ - public $registered_cache_resources = array(); - /** - * cache resource handler cache - * - * @var array - */ - public $_cacheresource_handlers = array(); - /** - * autoload filter - * - * @var array - */ - public $autoload_filters = array(); - /** - * default modifier - * - * @var array - */ - public $default_modifiers = array(); - /** - * autoescape variable output - * - * @var boolean - */ - public $escape_html = false; - /** - * global internal smarty vars - * - * @var array - */ - public static $_smarty_vars = array(); - /** - * start time for execution time calculation - * - * @var int - */ - public $start_time = 0; - /** - * default file permissions - * - * @var int - */ - public $_file_perms = 0644; - /** - * default dir permissions - * - * @var int - */ - public $_dir_perms = 0771; - /** - * block tag hierarchy - * - * @var array - */ - public $_tag_stack = array(); - /** - * self pointer to Smarty object - * - * @var Smarty - */ - public $smarty; - /** - * required by the compiler for BC - * - * @var string - */ - public $_current_file = null; - /** - * internal flag to enable parser debugging - * - * @var bool - */ - public $_parserdebug = false; - /** - * Saved parameter of merged templates during compilation - * - * @var array - */ - public $merged_templates_func = array(); - /**#@-*/ - - /** - * Initialize new Smarty object - - */ - public function __construct() - { - // selfpointer needed by some other class methods - $this->smarty = $this; - if (is_callable('mb_internal_encoding')) { - mb_internal_encoding(Smarty::$_CHARSET); - } - $this->start_time = microtime(true); - // set default dirs - $this->setTemplateDir('.' . DS . 'templates' . DS) - ->setCompileDir('.' . DS . 'templates_c' . DS) - ->setPluginsDir(SMARTY_PLUGINS_DIR) - ->setCacheDir('.' . DS . 'cache' . DS) - ->setConfigDir('.' . DS . 'configs' . DS); - - $this->debug_tpl = 'file:' . dirname(__FILE__) . '/debug.tpl'; - if (isset($_SERVER['SCRIPT_NAME'])) { - $this->assignGlobal('SCRIPT_NAME', $_SERVER['SCRIPT_NAME']); - } - } - - /** - * Class destructor - */ - public function __destruct() - { - // intentionally left blank - } - - /** - * <> set selfpointer on cloned object - */ - public function __clone() - { - $this->smarty = $this; - } - - /** - * <> Generic getter. - * Calls the appropriate getter function. - * Issues an E_USER_NOTICE if no valid getter is found. - * - * @param string $name property name - * - * @return mixed - */ - public function __get($name) - { - $allowed = array( - 'template_dir' => 'getTemplateDir', - 'config_dir' => 'getConfigDir', - 'plugins_dir' => 'getPluginsDir', - 'compile_dir' => 'getCompileDir', - 'cache_dir' => 'getCacheDir', - ); - - if (isset($allowed[$name])) { - return $this->{$allowed[$name]}(); - } else { - trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE); - } - } - - /** - * <> Generic setter. - * Calls the appropriate setter function. - * Issues an E_USER_NOTICE if no valid setter is found. - * - * @param string $name property name - * @param mixed $value parameter passed to setter - */ - public function __set($name, $value) - { - $allowed = array( - 'template_dir' => 'setTemplateDir', - 'config_dir' => 'setConfigDir', - 'plugins_dir' => 'setPluginsDir', - 'compile_dir' => 'setCompileDir', - 'cache_dir' => 'setCacheDir', - ); - - if (isset($allowed[$name])) { - $this->{$allowed[$name]}($value); - } else { - trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE); - } - } - - /** - * Check if a template resource exists - * - * @param string $resource_name template name - * - * @return boolean status - */ - public function templateExists($resource_name) - { - // create template object - $save = $this->template_objects; - $tpl = new $this->template_class($resource_name, $this); - // check if it does exists - $result = $tpl->source->exists; - $this->template_objects = $save; - - return $result; - } - - /** - * Returns a single or all global variables - * - * @param string $varname variable name or null - * - * @return string variable value or or array of variables - */ - public function getGlobal($varname = null) - { - if (isset($varname)) { - if (isset(self::$global_tpl_vars[$varname])) { - return self::$global_tpl_vars[$varname]->value; - } else { - return ''; - } - } else { - $_result = array(); - foreach (self::$global_tpl_vars AS $key => $var) { - $_result[$key] = $var->value; - } - - return $_result; - } - } - - /** - * Empty cache folder - * - * @param integer $exp_time expiration time - * @param string $type resource type - * - * @return integer number of cache files deleted - */ - public function clearAllCache($exp_time = null, $type = null) - { - // load cache resource and call clearAll - $_cache_resource = Smarty_CacheResource::load($this, $type); - Smarty_CacheResource::invalidLoadedCache($this); - - return $_cache_resource->clearAll($this, $exp_time); - } - - /** - * Empty cache for a specific template - * - * @param string $template_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer $exp_time expiration time - * @param string $type resource type - * - * @return integer number of cache files deleted - */ - public function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) - { - // load cache resource and call clear - $_cache_resource = Smarty_CacheResource::load($this, $type); - Smarty_CacheResource::invalidLoadedCache($this); - - return $_cache_resource->clear($this, $template_name, $cache_id, $compile_id, $exp_time); - } - - /** - * Loads security class and enables security - * - * @param string|Smarty_Security $security_class if a string is used, it must be class-name - * - * @return Smarty current Smarty instance for chaining - * @throws SmartyException when an invalid class name is provided - */ - public function enableSecurity($security_class = null) - { - if ($security_class instanceof Smarty_Security) { - $this->security_policy = $security_class; - - return $this; - } elseif (is_object($security_class)) { - throw new SmartyException("Class '" . get_class($security_class) . "' must extend Smarty_Security."); - } - if ($security_class == null) { - $security_class = $this->security_class; - } - if (!class_exists($security_class)) { - throw new SmartyException("Security class '$security_class' is not defined"); - } elseif ($security_class !== 'Smarty_Security' && !is_subclass_of($security_class, 'Smarty_Security')) { - throw new SmartyException("Class '$security_class' must extend Smarty_Security."); - } else { - $this->security_policy = new $security_class($this); - } - - return $this; - } - - /** - * Disable security - * - * @return Smarty current Smarty instance for chaining - */ - public function disableSecurity() - { - $this->security_policy = null; - - return $this; - } - - /** - * Set template directory - * - * @param string|array $template_dir directory(s) of template sources - * - * @return Smarty current Smarty instance for chaining - */ - public function setTemplateDir($template_dir) - { - $this->template_dir = array(); - foreach ((array) $template_dir as $k => $v) { - $this->template_dir[$k] = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS; - } - - $this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir); - - return $this; - } - - /** - * Add template directory(s) - * - * @param string|array $template_dir directory(s) of template sources - * @param string $key of the array element to assign the template dir to - * - * @return Smarty current Smarty instance for chaining - * @throws SmartyException when the given template directory is not valid - */ - public function addTemplateDir($template_dir, $key = null) - { - // make sure we're dealing with an array - $this->template_dir = (array) $this->template_dir; - - if (is_array($template_dir)) { - foreach ($template_dir as $k => $v) { - $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS; - if (is_int($k)) { - // indexes are not merged but appended - $this->template_dir[] = $v; - } else { - // string indexes are overridden - $this->template_dir[$k] = $v; - } - } - } else { - $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($template_dir, '/\\')) . DS; - if ($key !== null) { - // override directory at specified index - $this->template_dir[$key] = $v; - } else { - // append new directory - $this->template_dir[] = $v; - } - } - $this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir); - - return $this; - } - - /** - * Get template directories - * - * @param mixed $index index of directory to get, null to get all - * - * @return array|string list of template directories, or directory of $index - */ - public function getTemplateDir($index = null) - { - if ($index !== null) { - return isset($this->template_dir[$index]) ? $this->template_dir[$index] : null; - } - - return (array) $this->template_dir; - } - - /** - * Set config directory - * - * @param $config_dir - * - * @return Smarty current Smarty instance for chaining - */ - public function setConfigDir($config_dir) - { - $this->config_dir = array(); - foreach ((array) $config_dir as $k => $v) { - $this->config_dir[$k] = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS; - } - - $this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir); - - return $this; - } - - /** - * Add config directory(s) - * - * @param string|array $config_dir directory(s) of config sources - * @param mixed $key key of the array element to assign the config dir to - * - * @return Smarty current Smarty instance for chaining - */ - public function addConfigDir($config_dir, $key = null) - { - // make sure we're dealing with an array - $this->config_dir = (array) $this->config_dir; - - if (is_array($config_dir)) { - foreach ($config_dir as $k => $v) { - $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS; - if (is_int($k)) { - // indexes are not merged but appended - $this->config_dir[] = $v; - } else { - // string indexes are overridden - $this->config_dir[$k] = $v; - } - } - } else { - $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($config_dir, '/\\')) . DS; - if ($key !== null) { - // override directory at specified index - $this->config_dir[$key] = rtrim($v, '/\\') . DS; - } else { - // append new directory - $this->config_dir[] = rtrim($v, '/\\') . DS; - } - } - - $this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir); - - return $this; - } - - /** - * Get config directory - * - * @param mixed $index index of directory to get, null to get all - * - * @return array|string configuration directory - */ - public function getConfigDir($index = null) - { - if ($index !== null) { - return isset($this->config_dir[$index]) ? $this->config_dir[$index] : null; - } - - return (array) $this->config_dir; - } - - /** - * Set plugins directory - * - * @param string|array $plugins_dir directory(s) of plugins - * - * @return Smarty current Smarty instance for chaining - */ - public function setPluginsDir($plugins_dir) - { - $this->plugins_dir = array(); - foreach ((array) $plugins_dir as $k => $v) { - $this->plugins_dir[$k] = rtrim($v, '/\\') . DS; - } - - return $this; - } - - /** - * Adds directory of plugin files - * - * @param $plugins_dir - * - * @return Smarty current Smarty instance for chaining - */ - public function addPluginsDir($plugins_dir) - { - // make sure we're dealing with an array - $this->plugins_dir = (array) $this->plugins_dir; - - if (is_array($plugins_dir)) { - foreach ($plugins_dir as $k => $v) { - if (is_int($k)) { - // indexes are not merged but appended - $this->plugins_dir[] = rtrim($v, '/\\') . DS; - } else { - // string indexes are overridden - $this->plugins_dir[$k] = rtrim($v, '/\\') . DS; - } - } - } else { - // append new directory - $this->plugins_dir[] = rtrim($plugins_dir, '/\\') . DS; - } - - $this->plugins_dir = array_unique($this->plugins_dir); - - return $this; - } - - /** - * Get plugin directories - * - * @return array list of plugin directories - */ - public function getPluginsDir() - { - return (array) $this->plugins_dir; - } - - /** - * Set compile directory - * - * @param string $compile_dir directory to store compiled templates in - * - * @return Smarty current Smarty instance for chaining - */ - public function setCompileDir($compile_dir) - { - $this->compile_dir = rtrim($compile_dir, '/\\') . DS; - if (!isset(Smarty::$_muted_directories[$this->compile_dir])) { - Smarty::$_muted_directories[$this->compile_dir] = null; - } - - return $this; - } - - /** - * Get compiled directory - * - * @return string path to compiled templates - */ - public function getCompileDir() - { - return $this->compile_dir; - } - - /** - * Set cache directory - * - * @param string $cache_dir directory to store cached templates in - * - * @return Smarty current Smarty instance for chaining - */ - public function setCacheDir($cache_dir) - { - $this->cache_dir = rtrim($cache_dir, '/\\') . DS; - if (!isset(Smarty::$_muted_directories[$this->cache_dir])) { - Smarty::$_muted_directories[$this->cache_dir] = null; - } - - return $this; - } - - /** - * Get cache directory - * - * @return string path of cache directory - */ - public function getCacheDir() - { - return $this->cache_dir; - } - - /** - * Set default modifiers - * - * @param array|string $modifiers modifier or list of modifiers to set - * - * @return Smarty current Smarty instance for chaining - */ - public function setDefaultModifiers($modifiers) - { - $this->default_modifiers = (array) $modifiers; - - return $this; - } - - /** - * Add default modifiers - * - * @param array|string $modifiers modifier or list of modifiers to add - * - * @return Smarty current Smarty instance for chaining - */ - public function addDefaultModifiers($modifiers) - { - if (is_array($modifiers)) { - $this->default_modifiers = array_merge($this->default_modifiers, $modifiers); - } else { - $this->default_modifiers[] = $modifiers; - } - - return $this; - } - - /** - * Get default modifiers - * - * @return array list of default modifiers - */ - public function getDefaultModifiers() - { - return $this->default_modifiers; - } - - /** - * Set autoload filters - * - * @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 - * - * @return Smarty current Smarty instance for chaining - */ - public function setAutoloadFilters($filters, $type = null) - { - if ($type !== null) { - $this->autoload_filters[$type] = (array) $filters; - } else { - $this->autoload_filters = (array) $filters; - } - - return $this; - } - - /** - * Add autoload filters - * - * @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 - * - * @return Smarty current Smarty instance for chaining - */ - public function addAutoloadFilters($filters, $type = null) - { - if ($type !== null) { - if (!empty($this->autoload_filters[$type])) { - $this->autoload_filters[$type] = array_merge($this->autoload_filters[$type], (array) $filters); - } else { - $this->autoload_filters[$type] = (array) $filters; - } - } else { - foreach ((array) $filters as $key => $value) { - if (!empty($this->autoload_filters[$key])) { - $this->autoload_filters[$key] = array_merge($this->autoload_filters[$key], (array) $value); - } else { - $this->autoload_filters[$key] = (array) $value; - } - } - } - - return $this; - } - - /** - * Get 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 - */ - public function getAutoloadFilters($type = null) - { - if ($type !== null) { - return isset($this->autoload_filters[$type]) ? $this->autoload_filters[$type] : array(); - } - - return $this->autoload_filters; - } - - /** - * return name of debugging template - * - * @return string - */ - public function getDebugTemplate() - { - return $this->debug_tpl; - } - - /** - * set the debug template - * - * @param string $tpl_name - * - * @return Smarty current Smarty instance for chaining - * @throws SmartyException if file is not readable - */ - public function setDebugTemplate($tpl_name) - { - if (!is_readable($tpl_name)) { - throw new SmartyException("Unknown file '{$tpl_name}'"); - } - $this->debug_tpl = $tpl_name; - - return $this; - } - - /** - * creates a template object - * - * @param string $template the resource handle of the template file - * @param mixed $cache_id cache 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 boolean $do_clone flag is Smarty object shall be cloned - * - * @return object template object - */ - public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true) - { - if ($cache_id !== null && (is_object($cache_id) || is_array($cache_id))) { - $parent = $cache_id; - $cache_id = null; - } - if ($parent !== null && is_array($parent)) { - $data = $parent; - $parent = null; - } else { - $data = null; - } - // default to cache_id and compile_id of Smarty object - $cache_id = $cache_id === null ? $this->cache_id : $cache_id; - $compile_id = $compile_id === null ? $this->compile_id : $compile_id; - // already in template cache? - if ($this->allow_ambiguous_resources) { - $_templateId = Smarty_Resource::getUniqueTemplateName($this, $template) . $cache_id . $compile_id; - } else { - $_templateId = $this->joined_template_dir . '#' . $template . $cache_id . $compile_id; - } - if (isset($_templateId[150])) { - $_templateId = sha1($_templateId); - } - if ($do_clone) { - if (isset($this->template_objects[$_templateId])) { - // return cached template object - $tpl = clone $this->template_objects[$_templateId]; - $tpl->smarty = clone $tpl->smarty; - $tpl->parent = $parent; - $tpl->tpl_vars = array(); - $tpl->config_vars = array(); - } else { - $tpl = new $this->template_class($template, clone $this, $parent, $cache_id, $compile_id); - } - } else { - if (isset($this->template_objects[$_templateId])) { - // return cached template object - $tpl = $this->template_objects[$_templateId]; - $tpl->parent = $parent; - $tpl->tpl_vars = array(); - $tpl->config_vars = array(); - } else { - $tpl = new $this->template_class($template, $this, $parent, $cache_id, $compile_id); - } - } - // fill data if present - if (!empty($data) && is_array($data)) { - // set up variable values - foreach ($data as $_key => $_val) { - $tpl->tpl_vars[$_key] = new Smarty_variable($_val); - } - } - - return $tpl; - } - - /** - * Takes unknown classes and loads plugin files for them - * class name format: Smarty_PluginType_PluginName - * plugin filename format: plugintype.pluginname.php - * - * @param string $plugin_name class plugin name to load - * @param bool $check check if already loaded - * - * @throws SmartyException - * @return string |boolean filepath of loaded file or false - */ - public function loadPlugin($plugin_name, $check = true) - { - // if function or class exists, exit silently (already loaded) - if ($check && (is_callable($plugin_name) || class_exists($plugin_name, false))) { - return true; - } - // Plugin name is expected to be: Smarty_[Type]_[Name] - $_name_parts = explode('_', $plugin_name, 3); - // class name must have three parts to be valid plugin - // count($_name_parts) < 3 === !isset($_name_parts[2]) - if (!isset($_name_parts[2]) || strtolower($_name_parts[0]) !== 'smarty') { - throw new SmartyException("plugin {$plugin_name} is not a valid name format"); - } - // if type is "internal", get plugin from sysplugins - if (strtolower($_name_parts[1]) == 'internal') { - $file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php'; - if (file_exists($file)) { - require_once($file); - - return $file; - } else { - return false; - } - } - // plugin filename is expected to be: [type].[name].php - $_plugin_filename = "{$_name_parts[1]}.{$_name_parts[2]}.php"; - - $_stream_resolve_include_path = function_exists('stream_resolve_include_path'); - - // loop through plugin dirs and find the plugin - foreach ($this->getPluginsDir() as $_plugin_dir) { - $names = array( - $_plugin_dir . $_plugin_filename, - $_plugin_dir . strtolower($_plugin_filename), - ); - foreach ($names as $file) { - if (file_exists($file)) { - require_once($file); - - return $file; - } - if ($this->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) { - // try PHP include_path - if ($_stream_resolve_include_path) { - $file = stream_resolve_include_path($file); - } else { - $file = Smarty_Internal_Get_Include_Path::getIncludePath($file); - } - - if ($file !== false) { - require_once($file); - - return $file; - } - } - } - } - // no plugin loaded - return false; - } - - /** - * Compile all template files - * - * @param string $extension file extension - * @param bool $force_compile force all to recompile - * @param int $time_limit - * @param int $max_errors - * - * @return integer number of template files recompiled - */ - public function compileAllTemplates($extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null) - { - return Smarty_Internal_Utility::compileAllTemplates($extension, $force_compile, $time_limit, $max_errors, $this); - } - - /** - * Compile all config files - * - * @param string $extension file extension - * @param bool $force_compile force all to recompile - * @param int $time_limit - * @param int $max_errors - * - * @return integer number of template files recompiled - */ - public function compileAllConfig($extension = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null) - { - return Smarty_Internal_Utility::compileAllConfig($extension, $force_compile, $time_limit, $max_errors, $this); - } - - /** - * Delete compiled template file - * - * @param string $resource_name template name - * @param string $compile_id compile id - * @param integer $exp_time expiration time - * - * @return integer number of template files deleted - */ - public function clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) - { - return Smarty_Internal_Utility::clearCompiledTemplate($resource_name, $compile_id, $exp_time, $this); - } - - /** - * Return array of tag/attributes of all tags used by an template - * - * @param Smarty_Internal_Template $template - * - * @return array of tag/attributes - */ - public function getTags(Smarty_Internal_Template $template) - { - return Smarty_Internal_Utility::getTags($template); - } - - /** - * Run installation test - * - * @param array $errors Array to write errors into, rather than outputting them - * - * @return boolean true if setup is fine, false if something is wrong - */ - public function testInstall(&$errors = null) - { - return Smarty_Internal_Utility::testInstall($this, $errors); - } - - /** - * Error Handler to mute expected messages - * - * @link http://php.net/set_error_handler - * - * @param integer $errno Error level - * @param $errstr - * @param $errfile - * @param $errline - * @param $errcontext - * - * @return boolean - */ - public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) - { - $_is_muted_directory = false; - - // add the SMARTY_DIR to the list of muted directories - if (!isset(Smarty::$_muted_directories[SMARTY_DIR])) { - $smarty_dir = realpath(SMARTY_DIR); - if ($smarty_dir !== false) { - Smarty::$_muted_directories[SMARTY_DIR] = array( - 'file' => $smarty_dir, - 'length' => strlen($smarty_dir), - ); - } - } - - // walk the muted directories and test against $errfile - foreach (Smarty::$_muted_directories as $key => &$dir) { - if (!$dir) { - // resolve directory and length for speedy comparisons - $file = realpath($key); - if ($file === false) { - // this directory does not exist, remove and skip it - unset(Smarty::$_muted_directories[$key]); - continue; - } - $dir = array( - 'file' => $file, - 'length' => strlen($file), - ); - } - if (!strncmp($errfile, $dir['file'], $dir['length'])) { - $_is_muted_directory = true; - break; - } - } - - // pass to next error handler if this error did not occur inside SMARTY_DIR - // or the error was within smarty but masked to be ignored - if (!$_is_muted_directory || ($errno && $errno & error_reporting())) { - if (Smarty::$_previous_error_handler) { - return call_user_func(Smarty::$_previous_error_handler, $errno, $errstr, $errfile, $errline, $errcontext); - } else { - return false; - } - } - } - - /** - * Enable error handler to mute expected messages - * - * @return void - */ - public static function muteExpectedErrors() - { - /* - error muting is done because some people implemented custom error_handlers using - http://php.net/set_error_handler and for some reason did not understand the following paragraph: - - It is important to remember that the standard PHP error handler is completely bypassed for the - error types specified by error_types unless the callback function returns FALSE. - error_reporting() settings will have no effect and your error handler will be called regardless - - however you are still able to read the current value of error_reporting and act appropriately. - Of particular note is that this value will be 0 if the statement that caused the error was - prepended by the @ error-control operator. - - Smarty deliberately uses @filemtime() over file_exists() and filemtime() in some places. Reasons include - - @filemtime() is almost twice as fast as using an additional file_exists() - - between file_exists() and filemtime() a possible race condition is opened, - which does not exist using the simple @filemtime() approach. - */ - $error_handler = array('Smarty', 'mutingErrorHandler'); - $previous = set_error_handler($error_handler); - - // avoid dead loops - if ($previous !== $error_handler) { - Smarty::$_previous_error_handler = $previous; - } - } - - /** - * Disable error handler muting expected messages - * - * @return void - */ - public static function unmuteExpectedErrors() - { - restore_error_handler(); - } -} - -// Check if we're running on windows -Smarty::$_IS_WINDOWS = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'; - -// let PCRE (preg_*) treat strings as ISO-8859-1 if we're not dealing with UTF-8 -if (Smarty::$_CHARSET !== 'UTF-8') { - Smarty::$_UTF8_MODIFIER = ''; -} - -/** - * Smarty exception class - * - * @package Smarty - */ -class SmartyException extends Exception -{ - public static $escape = false; - - public function __toString() - { - return ' --> Smarty: ' . (self::$escape ? htmlentities($this->message) : $this->message) . ' <-- '; - } -} - -/** - * Smarty compiler exception class - * - * @package Smarty - */ -class SmartyCompilerException extends SmartyException -{ - public function __toString() - { - return ' --> Smarty Compiler: ' . $this->message . ' <-- '; - } - - /** - * The line number of the template error - * - * @type int|null - */ - public $line = null; - /** - * The template source snippet relating to the error - * - * @type string|null - */ - public $source = null; - /** - * The raw text of the error message - * - * @type string|null - */ - public $desc = null; - /** - * The resource identifier or template name - * - * @type string|null - */ - public $template = null; -} - -/** - * Autoloader - */ -function smartyAutoload($class) -{ - $_class = strtolower($class); - static $_classes = array( - 'smarty_config_source' => true, - 'smarty_config_compiled' => true, - 'smarty_security' => true, - 'smarty_cacheresource' => true, - 'smarty_cacheresource_custom' => true, - 'smarty_cacheresource_keyvaluestore' => true, - 'smarty_resource' => true, - 'smarty_resource_custom' => true, - 'smarty_resource_uncompiled' => true, - 'smarty_resource_recompiled' => true, - ); - - if (!strncmp($_class, 'smarty_internal_', 16) || isset($_classes[$_class])) { - include SMARTY_SYSPLUGINS_DIR . $_class . '.php'; - } -} diff --git a/library/Smarty/libs/plugins/function.counter.php b/library/Smarty/libs/plugins/function.counter.php deleted file mode 100644 index 4da85a14e5..0000000000 --- a/library/Smarty/libs/plugins/function.counter.php +++ /dev/null @@ -1,78 +0,0 @@ - - * Name: counter
- * Purpose: print out a counter value - * - * @author Monte Ohrt - * @link http://www.smarty.net/manual/en/language.function.counter.php {counter} - * (Smarty online manual) - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @return string|null - */ -function smarty_function_counter($params, $template) -{ - static $counters = array(); - - $name = (isset($params['name'])) ? $params['name'] : 'default'; - if (!isset($counters[$name])) { - $counters[$name] = array( - 'start' => 1, - 'skip' => 1, - 'direction' => 'up', - 'count' => 1 - ); - } - $counter =& $counters[$name]; - - if (isset($params['start'])) { - $counter['start'] = $counter['count'] = (int) $params['start']; - } - - if (!empty($params['assign'])) { - $counter['assign'] = $params['assign']; - } - - if (isset($counter['assign'])) { - $template->assign($counter['assign'], $counter['count']); - } - - if (isset($params['print'])) { - $print = (bool) $params['print']; - } else { - $print = empty($counter['assign']); - } - - if ($print) { - $retval = $counter['count']; - } else { - $retval = null; - } - - if (isset($params['skip'])) { - $counter['skip'] = $params['skip']; - } - - if (isset($params['direction'])) { - $counter['direction'] = $params['direction']; - } - - if ($counter['direction'] == "down") { - $counter['count'] -= $counter['skip']; - } else { - $counter['count'] += $counter['skip']; - } - - return $retval; -} diff --git a/library/Smarty/libs/plugins/function.math.php b/library/Smarty/libs/plugins/function.math.php deleted file mode 100644 index aba76e8257..0000000000 --- a/library/Smarty/libs/plugins/function.math.php +++ /dev/null @@ -1,91 +0,0 @@ - - * Name: math
- * Purpose: handle math computations in template - * - * @link http://www.smarty.net/manual/en/language.function.math.php {math} - * (Smarty online manual) - * @author Monte Ohrt - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @return string|null - */ -function smarty_function_math($params, $template) -{ - static $_allowed_funcs = array( - 'int' => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => 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 - ); - // be sure equation parameter is present - if (empty($params['equation'])) { - trigger_error("math: missing equation parameter", E_USER_WARNING); - - return; - } - - $equation = $params['equation']; - - // make sure parenthesis are balanced - if (substr_count($equation, "(") != substr_count($equation, ")")) { - trigger_error("math: unbalanced parenthesis", E_USER_WARNING); - - return; - } - - // 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); - - foreach ($match[1] as $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); - - return; - } - } - - foreach ($params as $key => $val) { - if ($key != "equation" && $key != "format" && $key != "assign") { - // make sure value is not empty - if (strlen($val) == 0) { - trigger_error("math: parameter $key is empty", E_USER_WARNING); - - return; - } - if (!is_numeric($val)) { - trigger_error("math: parameter $key: is not numeric", E_USER_WARNING); - - return; - } - $equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation); - } - } - $smarty_math_result = null; - eval("\$smarty_math_result = " . $equation . ";"); - - if (empty($params['format'])) { - if (empty($params['assign'])) { - return $smarty_math_result; - } else { - $template->assign($params['assign'], $smarty_math_result); - } - } else { - if (empty($params['assign'])) { - printf($params['format'], $smarty_math_result); - } else { - $template->assign($params['assign'], sprintf($params['format'], $smarty_math_result)); - } - } -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.unescape.php b/library/Smarty/libs/plugins/modifiercompiler.unescape.php deleted file mode 100644 index 3b17ea2e19..0000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.unescape.php +++ /dev/null @@ -1,50 +0,0 @@ - - * Name: unescape
- * Purpose: unescape html entities - * - * @author Rodney Rehm - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_unescape($params) -{ - if (!isset($params[1])) { - $params[1] = 'html'; - } - if (!isset($params[2])) { - $params[2] = '\'' . addslashes(Smarty::$_CHARSET) . '\''; - } else { - $params[2] = "'" . $params[2] . "'"; - } - - switch (trim($params[1], '"\'')) { - case 'entity': - case 'htmlall': - if (Smarty::$_MBSTRING) { - return 'mb_convert_encoding(' . $params[0] . ', ' . $params[2] . ', \'HTML-ENTITIES\')'; - } - - return 'html_entity_decode(' . $params[0] . ', ENT_NOQUOTES, ' . $params[2] . ')'; - - case 'html': - return 'htmlspecialchars_decode(' . $params[0] . ', ENT_QUOTES)'; - - case 'url': - return 'rawurldecode(' . $params[0] . ')'; - - default: - return $params[0]; - } -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.wordwrap.php b/library/Smarty/libs/plugins/modifiercompiler.wordwrap.php deleted file mode 100644 index 2ad928ea1f..0000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.wordwrap.php +++ /dev/null @@ -1,47 +0,0 @@ - - * Name: wordwrap
- * Purpose: wrap a string of text at a given length - * - * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * @param $compiler - * - * @return string with compiled code - */ -function smarty_modifiercompiler_wordwrap($params, $compiler) -{ - if (!isset($params[1])) { - $params[1] = 80; - } - if (!isset($params[2])) { - $params[2] = '"\n"'; - } - if (!isset($params[3])) { - $params[3] = 'false'; - } - $function = 'wordwrap'; - if (Smarty::$_MBSTRING) { - 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']['function'] = 'smarty_mb_wordwrap'; - } else { - $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'; - } - $function = 'smarty_mb_wordwrap'; - } - - return $function . '(' . $params[0] . ',' . $params[1] . ',' . $params[2] . ',' . $params[3] . ')'; -} diff --git a/library/Smarty/libs/plugins/shared.escape_special_chars.php b/library/Smarty/libs/plugins/shared.escape_special_chars.php deleted file mode 100644 index d3bd756b11..0000000000 --- a/library/Smarty/libs/plugins/shared.escape_special_chars.php +++ /dev/null @@ -1,53 +0,0 @@ -=')) { - /** - * escape_special_chars common function - * Function: smarty_function_escape_special_chars
- * Purpose: used by other smarty functions to escape - * special chars except for already escaped ones - * - * @author Monte Ohrt - * - * @param string $string text that should by escaped - * - * @return string - */ - function smarty_function_escape_special_chars($string) - { - if (!is_array($string)) { - $string = htmlspecialchars($string, ENT_COMPAT, Smarty::$_CHARSET, false); - } - - return $string; - } -} else { - /** - * escape_special_chars common function - * Function: smarty_function_escape_special_chars
- * Purpose: used by other smarty functions to escape - * special chars except for already escaped ones - * - * @author Monte Ohrt - * - * @param string $string text that should by escaped - * - * @return string - */ - function smarty_function_escape_special_chars($string) - { - if (!is_array($string)) { - $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); - $string = htmlspecialchars($string); - $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); - } - - return $string; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_cacheresource.php b/library/Smarty/libs/sysplugins/smarty_cacheresource.php deleted file mode 100644 index 667bee44ff..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_cacheresource.php +++ /dev/null @@ -1,442 +0,0 @@ - true, - ); - - /** - * populate Cached Object with meta data from Resource - * - * @param Smarty_Template_Cached $cached cached object - * @param Smarty_Internal_Template $_template template object - * - * @return void - */ - abstract public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template); - - /** - * populate Cached Object with timestamp and exists from Resource - * - * @param Smarty_Template_Cached $cached - * - * @return void - */ - abstract public function populateTimestamp(Smarty_Template_Cached $cached); - - /** - * Read the cached template and process header - * - * @param Smarty_Internal_Template $_template template object - * @param Smarty_Template_Cached $cached cached object - * - * @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); - - /** - * Write the rendered template output to cache - * - * @param Smarty_Internal_Template $_template template object - * @param string $content content to cache - * - * @return boolean success - */ - abstract public function writeCachedContent(Smarty_Internal_Template $_template, $content); - - /** - * Return cached content - * - * @param Smarty_Internal_Template $_template template object - * - * @return null|string - */ - public function getCachedContent(Smarty_Internal_Template $_template) - { - if ($_template->cached->handler->process($_template)) { - ob_start(); - $_template->properties['unifunc']($_template); - - return ob_get_clean(); - } - - return null; - } - - /** - * Empty cache - * - * @param Smarty $smarty Smarty object - * @param integer $exp_time expiration time (number of seconds, not timestamp) - * - * @return integer number of cache files deleted - */ - abstract public function clearAll(Smarty $smarty, $exp_time = null); - - /** - * Empty cache for a specific template - * - * @param Smarty $smarty Smarty object - * @param string $resource_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer $exp_time expiration time (number of seconds, not timestamp) - * - * @return integer number of cache files deleted - */ - 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) - { - // theoretically locking_timeout should be checked against time_limit (max_execution_time) - $start = microtime(true); - $hadLock = null; - while ($this->hasLock($smarty, $cached)) { - $hadLock = true; - if (microtime(true) - $start > $smarty->locking_timeout) { - // abort waiting for lock release - return false; - } - sleep(1); - } - - 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) - { - // check if lock exists - 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) - { - // create lock - 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) - { - // release lock - return true; - } - - /** - * Load Cache Resource Handler - * - * @param Smarty $smarty Smarty object - * @param string $type name of the cache resource - * - * @throws SmartyException - * @return Smarty_CacheResource Cache Resource Handler - */ - public static function load(Smarty $smarty, $type = null) - { - if (!isset($type)) { - $type = $smarty->caching_type; - } - - // try smarty's cache - if (isset($smarty->_cacheresource_handlers[$type])) { - return $smarty->_cacheresource_handlers[$type]; - } - - // try registered resource - if (isset($smarty->registered_cache_resources[$type])) { - // do not cache these instances as they may vary from instance to instance - return $smarty->_cacheresource_handlers[$type] = $smarty->registered_cache_resources[$type]; - } - // try sysplugins dir - if (isset(self::$sysplugins[$type])) { - if (!isset(self::$resources[$type])) { - $cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type); - self::$resources[$type] = new $cache_resource_class(); - } - - return $smarty->_cacheresource_handlers[$type] = self::$resources[$type]; - } - // try plugins dir - $cache_resource_class = 'Smarty_CacheResource_' . ucfirst($type); - if ($smarty->loadPlugin($cache_resource_class)) { - if (!isset(self::$resources[$type])) { - self::$resources[$type] = new $cache_resource_class(); - } - - return $smarty->_cacheresource_handlers[$type] = self::$resources[$type]; - } - // give up - throw new SmartyException("Unable to load cache resource '{$type}'"); - } - - /** - * Invalid Loaded Cache Files - * - * @param Smarty $smarty Smarty object - */ - public static function invalidLoadedCache(Smarty $smarty) - { - foreach ($smarty->template_objects as $tpl) { - if (isset($tpl->cached)) { - $tpl->cached->valid = false; - $tpl->cached->processed = false; - } - } - } -} - -/** - * Smarty Resource Data Object - * Cache Data Container for Template Files - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - */ -class Smarty_Template_Cached -{ - /** - * Source Filepath - * - * @var string - */ - public $filepath = false; - - /** - * Source Content - * - * @var string - */ - public $content = null; - - /** - * Source Timestamp - * - * @var integer - */ - public $timestamp = false; - - /** - * Source Existence - * - * @var boolean - */ - public $exists = false; - - /** - * Cache Is Valid - * - * @var boolean - */ - public $valid = false; - - /** - * Cache was processed - * - * @var boolean - */ - public $processed = false; - - /** - * CacheResource Handler - * - * @var Smarty_CacheResource - */ - public $handler = null; - - /** - * Template Compile Id (Smarty_Internal_Template::$compile_id) - * - * @var string - */ - public $compile_id = null; - - /** - * Template Cache Id (Smarty_Internal_Template::$cache_id) - * - * @var string - */ - public $cache_id = null; - - /** - * Id for cache locking - * - * @var string - */ - public $lock_id = null; - - /** - * flag that cache is locked by this instance - * - * @var bool - */ - public $is_locked = false; - - /** - * Source Object - * - * @var Smarty_Template_Source - */ - public $source = null; - - /** - * create Cached Object container - * - * @param Smarty_Internal_Template $_template template object - */ - public function __construct(Smarty_Internal_Template $_template) - { - $this->compile_id = $_template->compile_id; - $this->cache_id = $_template->cache_id; - $this->source = $_template->source; - $_template->cached = $this; - $smarty = $_template->smarty; - - // - // load resource handler - // - $this->handler = $handler = Smarty_CacheResource::load($smarty); // Note: prone to circular references - - // - // check if cache is valid - // - if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || $_template->source->recompiled) { - $handler->populate($this, $_template); - - return; - } - while (true) { - while (true) { - $handler->populate($this, $_template); - if ($this->timestamp === false || $smarty->force_compile || $smarty->force_cache) { - $this->valid = false; - } else { - $this->valid = true; - } - if ($this->valid && $_template->caching == Smarty::CACHING_LIFETIME_CURRENT && $_template->cache_lifetime >= 0 && time() > ($this->timestamp + $_template->cache_lifetime)) { - // lifetime expired - $this->valid = false; - } - if ($this->valid || !$_template->smarty->cache_locking) { - break; - } - if (!$this->handler->locked($_template->smarty, $this)) { - $this->handler->acquireLock($_template->smarty, $this); - break 2; - } - } - if ($this->valid) { - if (!$_template->smarty->cache_locking || $this->handler->locked($_template->smarty, $this) === null) { - // load cache file for the following checks - if ($smarty->debugging) { - Smarty_Internal_Debug::start_cache($_template); - } - if ($handler->process($_template, $this) === false) { - $this->valid = false; - } else { - $this->processed = true; - } - if ($smarty->debugging) { - Smarty_Internal_Debug::end_cache($_template); - } - } else { - continue; - } - } else { - return; - } - if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_SAVED && $_template->properties['cache_lifetime'] >= 0 && (time() > ($_template->cached->timestamp + $_template->properties['cache_lifetime']))) { - $this->valid = false; - } - if (!$this->valid && $_template->smarty->cache_locking) { - $this->handler->acquireLock($_template->smarty, $this); - - return; - } else { - return; - } - } - } - - /** - * Write this cache object to handler - * - * @param Smarty_Internal_Template $_template template object - * @param string $content content to cache - * - * @return boolean success - */ - public function write(Smarty_Internal_Template $_template, $content) - { - if (!$_template->source->recompiled) { - if ($this->handler->writeCachedContent($_template, $content)) { - $this->content = null; - $this->timestamp = time(); - $this->exists = true; - $this->valid = true; - if ($_template->smarty->cache_locking) { - $this->handler->releaseLock($_template->smarty, $this); - } - - return true; - } - } - - return false; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_config_source.php b/library/Smarty/libs/sysplugins/smarty_config_source.php deleted file mode 100644 index fd37e61f7c..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_config_source.php +++ /dev/null @@ -1,94 +0,0 @@ -handler = $handler; // Note: prone to circular references - - // Note: these may be ->config_compiler_class etc in the future - //$this->config_compiler_class = $handler->config_compiler_class; - //$this->config_lexer_class = $handler->config_lexer_class; - //$this->config_parser_class = $handler->config_parser_class; - - $this->smarty = $smarty; - $this->resource = $resource; - $this->type = $type; - $this->name = $name; - $this->unique_resource = $unique_resource; - } - - /** - * <> Generic setter. - * - * @param string $property_name valid: content, timestamp, exists - * @param mixed $value newly assigned value (not check for correct type) - * - * @throws SmartyException when the given property name is not valid - */ - public function __set($property_name, $value) - { - switch ($property_name) { - case 'content': - case 'timestamp': - case 'exists': - $this->$property_name = $value; - break; - - default: - throw new SmartyException("invalid config property '$property_name'."); - } - } - - /** - * <> Generic getter. - * - * @param string $property_name valid: content, timestamp, exists - * - * @return mixed|void - * @throws SmartyException when the given property name is not valid - */ - public function __get($property_name) - { - switch ($property_name) { - case 'timestamp': - case 'exists': - $this->handler->populateTimestamp($this); - - return $this->$property_name; - - case 'content': - return $this->content = $this->handler->getContent($this); - - default: - throw new SmartyException("config property '$property_name' does not exist."); - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_cacheresource_file.php b/library/Smarty/libs/sysplugins/smarty_internal_cacheresource_file.php deleted file mode 100644 index 17c6e4bf47..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_cacheresource_file.php +++ /dev/null @@ -1,294 +0,0 @@ -source->filepath); - $_cache_id = isset($_template->cache_id) ? preg_replace('![^\w\|]+!', '_', $_template->cache_id) : null; - $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w\|]+!', '_', $_template->compile_id) : null; - $_filepath = $_template->source->uid; - // if use_sub_dirs, break file into directories - if ($_template->smarty->use_sub_dirs) { - $_filepath = substr($_filepath, 0, 2) . DS - . substr($_filepath, 2, 2) . DS - . substr($_filepath, 4, 2) . DS - . $_filepath; - } - $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^'; - if (isset($_cache_id)) { - $_cache_id = str_replace('|', $_compile_dir_sep, $_cache_id) . $_compile_dir_sep; - } else { - $_cache_id = ''; - } - if (isset($_compile_id)) { - $_compile_id = $_compile_id . $_compile_dir_sep; - } else { - $_compile_id = ''; - } - $_cache_dir = $_template->smarty->getCacheDir(); - if ($_template->smarty->cache_locking) { - // create locking file name - // relative file name? - if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_cache_dir)) { - $_lock_dir = rtrim(getcwd(), '/\\') . DS . $_cache_dir; - } else { - $_lock_dir = $_cache_dir; - } - $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->timestamp = @filemtime($cached->filepath); - $cached->exists = !!$cached->timestamp; - } - - /** - * populate Cached Object with timestamp and exists from Resource - * - * @param Smarty_Template_Cached $cached cached object - * - * @return void - */ - public function populateTimestamp(Smarty_Template_Cached $cached) - { - $cached->timestamp = @filemtime($cached->filepath); - $cached->exists = !!$cached->timestamp; - } - - /** - * Read the cached template and process its header - * - * @param Smarty_Internal_Template $_template template object - * @param Smarty_Template_Cached $cached cached object - * - * @return booleantrue or false if the cached content does not exist - */ - 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; - - return @include $_template->cached->filepath; - } - - /** - * Write the rendered template output to cache - * - * @param Smarty_Internal_Template $_template template object - * @param string $content content to cache - * - * @return boolean success - */ - public function writeCachedContent(Smarty_Internal_Template $_template, $content) - { - if (Smarty_Internal_Write_File::writeFile($_template->cached->filepath, $content, $_template->smarty) === true) { - $_template->cached->timestamp = @filemtime($_template->cached->filepath); - $_template->cached->exists = !!$_template->cached->timestamp; - if ($_template->cached->exists) { - return true; - } - } - - return false; - } - - /** - * Empty cache - * - * @param Smarty $smarty - * @param integer $exp_time expiration time (number of seconds, not timestamp) - * - * @return integer number of cache files deleted - */ - public function clearAll(Smarty $smarty, $exp_time = null) - { - return $this->clear($smarty, null, null, null, $exp_time); - } - - /** - * Empty cache for a specific template - * - * @param Smarty $smarty - * @param string $resource_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer $exp_time expiration time (number of seconds, not timestamp) - * - * @return integer number of cache files deleted - */ - public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) - { - $_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null; - $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null; - $_dir_sep = $smarty->use_sub_dirs ? '/' : '^'; - $_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0; - $_dir = realpath($smarty->getCacheDir()) . '/'; - $_dir_length = strlen($_dir); - if (isset($_cache_id)) { - $_cache_id_parts = explode('|', $_cache_id); - $_cache_id_parts_count = count($_cache_id_parts); - if ($smarty->use_sub_dirs) { - foreach ($_cache_id_parts as $id_part) { - $_dir .= $id_part . DS; - } - } - } - if (isset($resource_name)) { - $_save_stat = $smarty->caching; - $smarty->caching = true; - $tpl = new $smarty->template_class($resource_name, $smarty); - $smarty->caching = $_save_stat; - - // remove from template cache - $tpl->source; // have the template registered before unset() - 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]); - - if ($tpl->source->exists) { - $_resourcename_parts = basename(str_replace('^', '/', $tpl->cached->filepath)); - } else { - return 0; - } - } - $_count = 0; - $_time = time(); - if (file_exists($_dir)) { - $_cacheDirs = new RecursiveDirectoryIterator($_dir); - $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST); - foreach ($_cache as $_file) { - if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { - continue; - } - // directory ? - if ($_file->isDir()) { - if (!$_cache->isDot()) { - // delete folder if empty - @rmdir($_file->getPathname()); - } - } else { - $_parts = explode($_dir_sep, str_replace('\\', '/', substr((string) $_file, $_dir_length))); - $_parts_count = count($_parts); - // check name - if (isset($resource_name)) { - if ($_parts[$_parts_count - 1] != $_resourcename_parts) { - continue; - } - } - // check compile id - if (isset($_compile_id) && (!isset($_parts[$_parts_count - 2 - $_compile_id_offset]) || $_parts[$_parts_count - 2 - $_compile_id_offset] != $_compile_id)) { - continue; - } - // check cache id - if (isset($_cache_id)) { - // count of cache id parts - $_parts_count = (isset($_compile_id)) ? $_parts_count - 2 - $_compile_id_offset : $_parts_count - 1 - $_compile_id_offset; - if ($_parts_count < $_cache_id_parts_count) { - continue; - } - for ($i = 0; $i < $_cache_id_parts_count; $i ++) { - if ($_parts[$i] != $_cache_id_parts[$i]) { - continue 2; - } - } - } - // expired ? - if (isset($exp_time)) { - if ($exp_time < 0) { - preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_file), $match); - if ($_time < (@filemtime($_file) + $match[1])) { - continue; - } - } else { - if ($_time - @filemtime($_file) < $exp_time) { - continue; - } - } - } - $_count += @unlink((string) $_file) ? 1 : 0; - } - } - } - - return $_count; - } - - /** - * Check is cache is locked for this template - * - * @param Smarty $smarty Smarty object - * @param Smarty_Template_Cached $cached cached object - * - * @return boolean true or false if cache is locked - */ - public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) - { - if (version_compare(PHP_VERSION, '5.3.0', '>=')) { - clearstatcache(true, $cached->lock_id); - } else { - clearstatcache(); - } - $t = @filemtime($cached->lock_id); - - return $t && (time() - $t < $smarty->locking_timeout); - } - - /** - * Lock cache for this template - * - * @param Smarty $smarty Smarty object - * @param Smarty_Template_Cached $cached cached object - * - * @return bool|void - */ - public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) - { - $cached->is_locked = true; - touch($cached->lock_id); - } - - /** - * Unlock cache for this template - * - * @param Smarty $smarty Smarty object - * @param Smarty_Template_Cached $cached cached object - * - * @return bool|void - */ - public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) - { - $cached->is_locked = false; - @unlink($cached->lock_id); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php deleted file mode 100644 index caa34861f0..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php +++ /dev/null @@ -1,86 +0,0 @@ -required_attributes = array('var', 'value'); - $this->shorttag_order = array('var', 'value'); - $this->optional_attributes = array('scope'); - $_nocache = 'null'; - $_scope = Smarty::SCOPE_LOCAL; - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // nocache ? - if ($compiler->tag_nocache || $compiler->nocache) { - $_nocache = 'true'; - // create nocache var to make it know for further compiling - if (isset($compiler->template->tpl_vars[trim($_attr['var'], "'")])) { - $compiler->template->tpl_vars[trim($_attr['var'], "'")]->nocache = true; - } else { - $compiler->template->tpl_vars[trim($_attr['var'], "'")] = new Smarty_variable(null, true); - } - } - // scope setup - if (isset($_attr['scope'])) { - $_attr['scope'] = trim($_attr['scope'], "'\""); - if ($_attr['scope'] == 'parent') { - $_scope = Smarty::SCOPE_PARENT; - } elseif ($_attr['scope'] == 'root') { - $_scope = Smarty::SCOPE_ROOT; - } elseif ($_attr['scope'] == 'global') { - $_scope = Smarty::SCOPE_GLOBAL; - } else { - $compiler->trigger_template_error('illegal value for "scope" attribute', $compiler->lex->taglineno); - } - } - // compiled output - if (isset($parameter['smarty_internal_index'])) { - $output = "createLocalArrayVariable($_attr[var], $_nocache, $_scope);\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value$parameter[smarty_internal_index] = $_attr[value];"; - } else { - // implement Smarty2's behaviour of variables assigned by reference - if ($compiler->template->smarty instanceof SmartyBC) { - $output = "tpl_vars[$_attr[var]])) {\$_smarty_tpl->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];"; - $output .= "\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value = $_attr[value]; \$_smarty_tpl->tpl_vars[$_attr[var]]->nocache = $_nocache; \$_smarty_tpl->tpl_vars[$_attr[var]]->scope = $_scope;"; - $output .= "\n} else \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_variable($_attr[value], $_nocache, $_scope);"; - } else { - $output = "tpl_vars[$_attr[var]] = new Smarty_variable($_attr[value], $_nocache, $_scope);"; - } - } - if ($_scope == Smarty::SCOPE_PARENT) { - $output .= "\nif (\$_smarty_tpl->parent != null) \$_smarty_tpl->parent->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];"; - } elseif ($_scope == Smarty::SCOPE_ROOT || $_scope == Smarty::SCOPE_GLOBAL) { - $output .= "\n\$_ptr = \$_smarty_tpl->parent; while (\$_ptr != null) {\$_ptr->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]]; \$_ptr = \$_ptr->parent; }"; - } - if ($_scope == Smarty::SCOPE_GLOBAL) { - $output .= "\nSmarty::\$global_tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];"; - } - $output .= '?>'; - - return $output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_block.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_block.php deleted file mode 100644 index 921d807ee7..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_block.php +++ /dev/null @@ -1,438 +0,0 @@ -getAttributes($compiler, $args); - $_name = trim($_attr['name'], "\"'"); - - // check if we process an inheritance child template - if ($compiler->inheritance_child) { - array_unshift(self::$nested_block_names, $_name); - // build {block} for child block - self::$block_data[$_name]['source'] = - "{$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}"; - if ($_attr['nocache']) { - self::$block_data[$_name]['source'] .= ' nocache'; - } - self::$block_data[$_name]['source'] .= $compiler->smarty->right_delimiter; - - $save = array($_attr, $compiler->inheritance); - $this->openTag($compiler, 'block', $save); - // set flag for {block} tag - $compiler->inheritance = true; - $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK); - $compiler->has_code = false; - return; - } - // must merge includes - if ($_attr['nocache'] == true) { - $compiler->tag_nocache = true; - } - $save = array($_attr, $compiler->inheritance, $compiler->parser->current_buffer, $compiler->nocache); - $this->openTag($compiler, 'block', $save); - $compiler->inheritance = true; - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - - $compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser); - $compiler->has_code = false; - - return true; - } - - /** - * Compile saved child block source - * - * @param object $compiler compiler object - * @param string $_name optional name of child block - * - * @return string compiled code of child block - */ - static function compileChildBlock($compiler, $_name = null) - { - if ($compiler->inheritance_child) { - $name1 = Smarty_Internal_Compile_Block::$nested_block_names[0]; - if (isset($compiler->template->block_data[$name1])) { - // replace inner block name with generic - Smarty_Internal_Compile_Block::$block_data[$name1]['source'] .= $compiler->template->block_data[$name1]['source']; - Smarty_Internal_Compile_Block::$block_data[$name1]['child'] = true; - } - $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK); - $compiler->has_code = false; - return; - } - // if called by {$smarty.block.child} we must search the name of enclosing {block} - if ($_name == null) { - $stack_count = count($compiler->_tag_stack); - while (--$stack_count >= 0) { - if ($compiler->_tag_stack[$stack_count][0] == 'block') { - $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'], "\"'"); - break; - } - } - } - if ($_name == null) { - $compiler->trigger_template_error(' tag {$smarty.block.child} used outside {block} tags ', $compiler->lex->taglineno); - } - // undefined child? - if (!isset($compiler->template->block_data[$_name]['source'])) { - $compiler->popTrace(); - return ''; - } - // flag that child is already compile by {$smarty.block.child} inclusion - $compiler->template->block_data[$_name]['compiled'] = true; - $_tpl = new Smarty_Internal_template('string:' . $compiler->template->block_data[$_name]['source'], $compiler->smarty, $compiler->template, $compiler->template->cache_id, - $compiler->template->compile_id, $compiler->template->caching, $compiler->template->cache_lifetime); - if ($compiler->smarty->debugging) { - Smarty_Internal_Debug::ignore($_tpl); - } - $_tpl->tpl_vars = $compiler->template->tpl_vars; - $_tpl->variable_filters = $compiler->template->variable_filters; - $_tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash']; - $_tpl->allow_relative_path = true; - $_tpl->compiler->inheritance = true; - $_tpl->compiler->suppressHeader = true; - $_tpl->compiler->suppressFilter = true; - $_tpl->compiler->suppressTemplatePropertyHeader = true; - $_tpl->compiler->suppressMergedTemplates = true; - $nocache = $compiler->nocache || $compiler->tag_nocache; - if (strpos($compiler->template->block_data[$_name]['source'], self::parent) !== false) { - $_output = str_replace(self::parent, $compiler->parser->current_buffer->to_smarty_php(), $_tpl->compiler->compileTemplate($_tpl, $nocache)); - } elseif ($compiler->template->block_data[$_name]['mode'] == 'prepend') { - $_output = $_tpl->compiler->compileTemplate($_tpl, $nocache) . $compiler->parser->current_buffer->to_smarty_php(); - } elseif ($compiler->template->block_data[$_name]['mode'] == 'append') { - $_output = $compiler->parser->current_buffer->to_smarty_php() . $_tpl->compiler->compileTemplate($_tpl, $nocache); - } elseif (!empty($compiler->template->block_data[$_name])) { - $_output = $_tpl->compiler->compileTemplate($_tpl, $nocache); - } - $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $_tpl->properties['file_dependency']); - $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $_tpl->properties['function']); - $compiler->merged_templates = array_merge($compiler->merged_templates, $_tpl->compiler->merged_templates); - $compiler->template->variable_filters = $_tpl->variable_filters; - if ($_tpl->has_nocache_code) { - $compiler->template->has_nocache_code = true; - } - foreach ($_tpl->required_plugins as $key => $tmp1) { - if ($compiler->nocache && $compiler->template->caching) { - $code = 'nocache'; - } else { - $code = $key; - } - foreach ($tmp1 as $name => $tmp) { - foreach ($tmp as $type => $data) { - $compiler->template->required_plugins[$code][$name][$type] = $data; - } - } - } - unset($_tpl); - $compiler->has_code = true; - return $_output; - } - - /** - * Compile $smarty.block.parent - * - * @param object $compiler compiler object - * @param string $_name optional name of child block - * - * @return string compiled code of child block - */ - static function compileParentBlock($compiler, $_name = null) - { - // if called by {$smarty.block.parent} we must search the name of enclosing {block} - if ($_name == null) { - $stack_count = count($compiler->_tag_stack); - while (--$stack_count >= 0) { - if ($compiler->_tag_stack[$stack_count][0] == 'block') { - $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'], "\"'"); - break; - } - } - } - if ($_name == null) { - $compiler->trigger_template_error(' tag {$smarty.block.parent} used outside {block} tags ', $compiler->lex->taglineno); - } - if (empty(Smarty_Internal_Compile_Block::$nested_block_names)) { - $compiler->trigger_template_error(' illegal {$smarty.block.parent} in parent template ', $compiler->lex->taglineno); - } - Smarty_Internal_Compile_Block::$block_data[Smarty_Internal_Compile_Block::$nested_block_names[0]]['source'] .= Smarty_Internal_Compile_Block::parent; - $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK); - $compiler->has_code = false; - return; - } - - /** - * Process block source - * - * @param $compiler - * @param string $source source text - * - */ - static function blockSource($compiler, $source) - { - Smarty_Internal_Compile_Block::$block_data[Smarty_Internal_Compile_Block::$nested_block_names[0]]['source'] .= $source; - } -} - -/** - * Smarty Internal Plugin Compile BlockClose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {/block} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) - { - $compiler->has_code = true; - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - $saved_data = $this->closeTag($compiler, array('block')); - $_name = trim($saved_data[0]['name'], "\"'"); - // reset flag for {block} tag - $compiler->inheritance = $saved_data[1]; - // check if we process an inheritance child template - if ($compiler->inheritance_child) { - $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}"; - array_shift(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]; - if (isset($compiler->template->block_data[$name1]) || !$saved_data[0]['hide']) { - if (isset(Smarty_Internal_Compile_Block::$block_data[$name1]['child']) || !isset($compiler->template->block_data[$name1])) { - Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source']; - } else { - if ($compiler->template->block_data[$name1]['mode'] == 'append') { - Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source'] . $compiler->template->block_data[$name1]['source']; - } elseif ($compiler->template->block_data[$name1]['mode'] == 'prepend') { - Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= $compiler->template->block_data[$name1]['source'] . Smarty_Internal_Compile_Block::$block_data[$name1]['source']; - } else { - Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= $compiler->template->block_data[$name1]['source']; - } - } - } - unset(Smarty_Internal_Compile_Block::$block_data[$name1]); - $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK); - } else { - if (isset($compiler->template->block_data[$name1]) || !$saved_data[0]['hide']) { - if (isset($compiler->template->block_data[$name1]) && !isset(Smarty_Internal_Compile_Block::$block_data[$name1]['child'])) { - if (strpos($compiler->template->block_data[$name1]['source'], Smarty_Internal_Compile_Block::parent) !== false) { - $compiler->template->block_data[$name1]['source'] = - str_replace(Smarty_Internal_Compile_Block::parent, Smarty_Internal_Compile_Block::$block_data[$name1]['source'], $compiler->template->block_data[$name1]['source']); - } elseif ($compiler->template->block_data[$name1]['mode'] == 'prepend') { - $compiler->template->block_data[$name1]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source']; - } elseif ($compiler->template->block_data[$name1]['mode'] == 'append') { - $compiler->template->block_data[$name1]['source'] = Smarty_Internal_Compile_Block::$block_data[$name1]['source'] . $compiler->template->block_data[$name1]['source']; - } - } else { - $compiler->template->block_data[$name1]['source'] = Smarty_Internal_Compile_Block::$block_data[$name1]['source']; - } - $compiler->template->block_data[$name1]['mode'] = 'replace'; - if ($saved_data[0]['append']) { - $compiler->template->block_data[$name1]['mode'] = 'append'; - } - if ($saved_data[0]['prepend']) { - $compiler->template->block_data[$name1]['mode'] = 'prepend'; - } - } - unset(Smarty_Internal_Compile_Block::$block_data[$name1]); - $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY); - } - $compiler->has_code = false; - return; - } - if (isset($compiler->template->block_data[$_name]) && !isset($compiler->template->block_data[$_name]['compiled'])) { - $_output = Smarty_Internal_Compile_Block::compileChildBlock($compiler, $_name); - } else { - if ($saved_data[0]['hide'] && !isset($compiler->template->block_data[$_name]['source'])) { - $_output = ''; - } else { - $_output = $compiler->parser->current_buffer->to_smarty_php(); - } - } - unset($compiler->template->block_data[$_name]['compiled']); - // reset flags - $compiler->parser->current_buffer = $saved_data[2]; - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - $compiler->nocache = $saved_data[3]; - // $_output content has already nocache code processed - $compiler->suppressNocacheProcessing = true; - - return $_output; - } -} - -/** - * Smarty Internal Plugin Compile Child Block Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Child_Block extends Smarty_Internal_CompileBase -{ - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('name', 'file', 'uid', 'line', 'type', 'resource'); - - /** - * Compiles code for the {private_child_block} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return boolean true - */ - public function compile($args, $compiler) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - // update template with original template resource of {block} - if (trim($_attr['type'], "'") == 'file') { - $compiler->template->template_resource = 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 - if ($_attr['nocache'] == true) { - $compiler->tag_nocache = true; - } - $save = array($_attr, $compiler->nocache); - - // set trace back to child block - $compiler->pushTrace(trim($_attr['file'], "\"'"), trim($_attr['uid'], "\"'"), $_attr['line'] - $compiler->lex->line); - - $this->openTag($compiler, 'private_child_block', $save); - - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - $compiler->has_code = false; - - return true; - } -} - -/** - * Smarty Internal Plugin Compile Child Block Close Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Child_Blockclose extends Smarty_Internal_CompileBase -{ - - /** - * Compiles code for the {/private_child_block} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return boolean true - */ - public function compile($args, $compiler) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - $saved_data = $this->closeTag($compiler, array('private_child_block')); - - // end of child block - $compiler->popTrace(); - - $compiler->nocache = $saved_data[1]; - $compiler->has_code = false; - - return true; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_break.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_break.php deleted file mode 100644 index b470234b16..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_break.php +++ /dev/null @@ -1,75 +0,0 @@ - true, 'foreach' => true, 'while' => true, 'section' => true); - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - if ($_attr['nocache'] === true) { - $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); - } - - if (isset($_attr['levels'])) { - if (!is_numeric($_attr['levels'])) { - $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno); - } - $_levels = $_attr['levels']; - } else { - $_levels = 1; - } - $level_count = $_levels; - $stack_count = count($compiler->_tag_stack) - 1; - while ($level_count > 0 && $stack_count >= 0) { - if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) { - $level_count --; - } - $stack_count --; - } - if ($level_count != 0) { - $compiler->trigger_template_error("cannot break {$_levels} level(s)", $compiler->lex->taglineno); - } - - return ""; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_call.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_call.php deleted file mode 100644 index bfbd1f5472..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_call.php +++ /dev/null @@ -1,127 +0,0 @@ -getAttributes($compiler, $args); - // save possible attributes - if (isset($_attr['assign'])) { - // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr['assign']; - } - $_name = $_attr['name']; - if ($compiler->compiles_template_function) { - $compiler->called_functions[] = trim($_name, "'\""); - } - unset($_attr['name'], $_attr['assign'], $_attr['nocache']); - // set flag (compiled code of {function} must be included in cache file - if ($compiler->nocache || $compiler->tag_nocache) { - $_nocache = 'true'; - } else { - $_nocache = 'false'; - } - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - if (isset($compiler->template->properties['function'][$_name]['parameter'])) { - foreach ($compiler->template->properties['function'][$_name]['parameter'] as $_key => $_value) { - if (!isset($_attr[$_key])) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - } - } elseif (isset($compiler->smarty->template_functions[$_name]['parameter'])) { - foreach ($compiler->smarty->template_functions[$_name]['parameter'] as $_key => $_value) { - if (!isset($_attr[$_key])) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - } - } - //variable name? - if (!(strpos($_name, '$') === false)) { - $call_cache = $_name; - $call_function = '$tmp = "smarty_template_function_".' . $_name . '; $tmp'; - } else { - $_name = trim($_name, "'\""); - $call_cache = "'{$_name}'"; - $call_function = 'smarty_template_function_' . $_name; - } - - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - $_hash = str_replace('-', '_', $compiler->template->properties['nocache_hash']); - // was there an assign attribute - if (isset($_assign)) { - if ($compiler->template->caching) { - $_output = "assign({$_assign}, ob_get_clean());?>\n"; - } else { - $_output = "assign({$_assign}, ob_get_clean());?>\n"; - } - } else { - if ($compiler->template->caching) { - $_output = "\n"; - } else { - $_output = "\n"; - } - } - - return $_output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_capture.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_capture.php deleted file mode 100644 index 34728e47ab..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_capture.php +++ /dev/null @@ -1,96 +0,0 @@ -getAttributes($compiler, $args); - - $buffer = isset($_attr['name']) ? $_attr['name'] : "'default'"; - $assign = isset($_attr['assign']) ? $_attr['assign'] : 'null'; - $append = isset($_attr['append']) ? $_attr['append'] : 'null'; - - $compiler->_capture_stack[0][] = array($buffer, $assign, $append, $compiler->nocache); - // maybe nocache because of nocache variables - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - $_output = "_capture_stack[0][] = array($buffer, $assign, $append); ob_start(); ?>"; - - return $_output; - } -} - -/** - * Smarty Internal Plugin Compile Captureclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {/capture} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - - list($buffer, $assign, $append, $compiler->nocache) = array_pop($compiler->_capture_stack[0]); - - $_output = "_capture_stack[0]);\n"; - $_output .= "if (!empty(\$_capture_buffer)) {\n"; - $_output .= " if (isset(\$_capture_assign)) \$_smarty_tpl->assign(\$_capture_assign, ob_get_contents());\n"; - $_output .= " if (isset( \$_capture_append)) \$_smarty_tpl->append( \$_capture_append, ob_get_contents());\n"; - $_output .= " Smarty::\$_smarty_vars['capture'][\$_capture_buffer]=ob_get_clean();\n"; - $_output .= "} else \$_smarty_tpl->capture_error();?>"; - - return $_output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php deleted file mode 100644 index 7038bfb4d3..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php +++ /dev/null @@ -1,75 +0,0 @@ - true, 'foreach' => true, 'while' => true, 'section' => true); - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - if ($_attr['nocache'] === true) { - $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); - } - - if (isset($_attr['levels'])) { - if (!is_numeric($_attr['levels'])) { - $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno); - } - $_levels = $_attr['levels']; - } else { - $_levels = 1; - } - $level_count = $_levels; - $stack_count = count($compiler->_tag_stack) - 1; - while ($level_count > 0 && $stack_count >= 0) { - if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) { - $level_count --; - } - $stack_count --; - } - if ($level_count != 0) { - $compiler->trigger_template_error("cannot continue {$_levels} level(s)", $compiler->lex->taglineno); - } - - return ""; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_extends.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_extends.php deleted file mode 100644 index 2b541f2e35..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_extends.php +++ /dev/null @@ -1,85 +0,0 @@ -getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); - } - if (strpos($_attr['file'], '$_tmp') !== false) { - $compiler->trigger_template_error('illegal value for file attribute', $compiler->lex->taglineno); - } - - $name = $_attr['file']; - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $compiler->template; - eval("\$tpl_name = $name;"); - // create template object - $_template = new $compiler->smarty->template_class($tpl_name, $compiler->smarty, $compiler->template); - // check for recursion - $uid = $_template->source->uid; - if (isset($compiler->extends_uid[$uid])) { - $compiler->trigger_template_error("illegal recursive call of \"$include_file\"", $compiler->lex->line - 1); - } - $compiler->extends_uid[$uid] = true; - if (empty($_template->source->components)) { - array_unshift($compiler->sources, $_template->source); - } else { - foreach ($_template->source->components as $source) { - array_unshift($compiler->sources, $source); - $uid = $source->uid; - if (isset($compiler->extends_uid[$uid])) { - $compiler->trigger_template_error("illegal recursive call of \"{$source->filepath}\"", $compiler->lex->line - 1); - } - $compiler->extends_uid[$uid] = true; - } - } - unset ($_template); - $compiler->inheritance_child = true; - $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY); - return ''; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_foreach.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_foreach.php deleted file mode 100644 index fc77f57490..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_foreach.php +++ /dev/null @@ -1,229 +0,0 @@ -getAttributes($compiler, $args); - - $from = $_attr['from']; - $item = $_attr['item']; - if (!strncmp("\$_smarty_tpl->tpl_vars[$item]", $from, strlen($item) + 24)) { - $compiler->trigger_template_error("item variable {$item} may not be the same variable as at 'from'", $compiler->lex->taglineno); - } - - if (isset($_attr['key'])) { - $key = $_attr['key']; - } else { - $key = null; - } - - $this->openTag($compiler, 'foreach', array('foreach', $compiler->nocache, $item, $key)); - // maybe nocache because of nocache variables - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - - if (isset($_attr['name'])) { - $name = $_attr['name']; - $has_name = true; - $SmartyVarName = '$smarty.foreach.' . trim($name, '\'"') . '.'; - } else { - $name = null; - $has_name = false; - } - $ItemVarName = '$' . trim($item, '\'"') . '@'; - // evaluates which Smarty variables and properties have to be computed - if ($has_name) { - $usesSmartyFirst = strpos($compiler->lex->data, $SmartyVarName . 'first') !== false; - $usesSmartyLast = strpos($compiler->lex->data, $SmartyVarName . 'last') !== false; - $usesSmartyIndex = strpos($compiler->lex->data, $SmartyVarName . 'index') !== false; - $usesSmartyIteration = strpos($compiler->lex->data, $SmartyVarName . 'iteration') !== false; - $usesSmartyShow = strpos($compiler->lex->data, $SmartyVarName . 'show') !== false; - $usesSmartyTotal = strpos($compiler->lex->data, $SmartyVarName . 'total') !== false; - } else { - $usesSmartyFirst = false; - $usesSmartyLast = false; - $usesSmartyTotal = false; - $usesSmartyShow = false; - } - - $usesPropFirst = $usesSmartyFirst || strpos($compiler->lex->data, $ItemVarName . 'first') !== false; - $usesPropLast = $usesSmartyLast || strpos($compiler->lex->data, $ItemVarName . 'last') !== false; - $usesPropIndex = $usesPropFirst || strpos($compiler->lex->data, $ItemVarName . 'index') !== false; - $usesPropIteration = $usesPropLast || strpos($compiler->lex->data, $ItemVarName . 'iteration') !== false; - $usesPropShow = strpos($compiler->lex->data, $ItemVarName . 'show') !== false; - $usesPropTotal = $usesSmartyTotal || $usesSmartyShow || $usesPropShow || $usesPropLast || strpos($compiler->lex->data, $ItemVarName . 'total') !== false; - // generate output code - $output = "tpl_vars[$item] = new Smarty_Variable; \$_smarty_tpl->tpl_vars[$item]->_loop = false;\n"; - if ($key != null) { - $output .= " \$_smarty_tpl->tpl_vars[$key] = new Smarty_Variable;\n"; - } - $output .= " \$_from = $from; if (!is_array(\$_from) && !is_object(\$_from)) { settype(\$_from, 'array');}\n"; - if ($usesPropTotal) { - $output .= " \$_smarty_tpl->tpl_vars[$item]->total= \$_smarty_tpl->_count(\$_from);\n"; - } - if ($usesPropIteration) { - $output .= " \$_smarty_tpl->tpl_vars[$item]->iteration=0;\n"; - } - if ($usesPropIndex) { - $output .= " \$_smarty_tpl->tpl_vars[$item]->index=-1;\n"; - } - if ($usesPropShow) { - $output .= " \$_smarty_tpl->tpl_vars[$item]->show = (\$_smarty_tpl->tpl_vars[$item]->total > 0);\n"; - } - if ($has_name) { - if ($usesSmartyTotal) { - $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['total'] = \$_smarty_tpl->tpl_vars[$item]->total;\n"; - } - if ($usesSmartyIteration) { - $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['iteration']=0;\n"; - } - if ($usesSmartyIndex) { - $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['index']=-1;\n"; - } - if ($usesSmartyShow) { - $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['show']=(\$_smarty_tpl->tpl_vars[$item]->total > 0);\n"; - } - } - $output .= "foreach (\$_from as \$_smarty_tpl->tpl_vars[$item]->key => \$_smarty_tpl->tpl_vars[$item]->value) {\n\$_smarty_tpl->tpl_vars[$item]->_loop = true;\n"; - if ($key != null) { - $output .= " \$_smarty_tpl->tpl_vars[$key]->value = \$_smarty_tpl->tpl_vars[$item]->key;\n"; - } - if ($usesPropIteration) { - $output .= " \$_smarty_tpl->tpl_vars[$item]->iteration++;\n"; - } - if ($usesPropIndex) { - $output .= " \$_smarty_tpl->tpl_vars[$item]->index++;\n"; - } - if ($usesPropFirst) { - $output .= " \$_smarty_tpl->tpl_vars[$item]->first = \$_smarty_tpl->tpl_vars[$item]->index === 0;\n"; - } - if ($usesPropLast) { - $output .= " \$_smarty_tpl->tpl_vars[$item]->last = \$_smarty_tpl->tpl_vars[$item]->iteration === \$_smarty_tpl->tpl_vars[$item]->total;\n"; - } - if ($has_name) { - if ($usesSmartyFirst) { - $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['first'] = \$_smarty_tpl->tpl_vars[$item]->first;\n"; - } - if ($usesSmartyIteration) { - $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['iteration']++;\n"; - } - if ($usesSmartyIndex) { - $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['index']++;\n"; - } - if ($usesSmartyLast) { - $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['last'] = \$_smarty_tpl->tpl_vars[$item]->last;\n"; - } - } - $output .= "?>"; - - return $output; - } -} - -/** - * Smarty Internal Plugin Compile Foreachelse Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {foreachelse} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - list($openTag, $nocache, $item, $key) = $this->closeTag($compiler, array('foreach')); - $this->openTag($compiler, 'foreachelse', array('foreachelse', $nocache, $item, $key)); - - return "tpl_vars[$item]->_loop) {\n?>"; - } -} - -/** - * Smarty Internal Plugin Compile Foreachclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {/foreach} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - - list($openTag, $compiler->nocache, $item, $key) = $this->closeTag($compiler, array('foreach', 'foreachelse')); - - return ""; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_function.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_function.php deleted file mode 100644 index e161bac147..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_function.php +++ /dev/null @@ -1,167 +0,0 @@ -getAttributes($compiler, $args); - - if ($_attr['nocache'] === true) { - $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); - } - unset($_attr['nocache']); - $save = array($_attr, $compiler->parser->current_buffer, - $compiler->template->has_nocache_code, $compiler->template->required_plugins); - $this->openTag($compiler, 'function', $save); - $_name = trim($_attr['name'], "'\""); - unset($_attr['name']); - // set flag that we are compiling a template function - $compiler->compiles_template_function = true; - $compiler->template->properties['function'][$_name]['parameter'] = array(); - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $compiler->template; - foreach ($_attr as $_key => $_data) { - eval ('$tmp=' . $_data . ';'); - $compiler->template->properties['function'][$_name]['parameter'][$_key] = $tmp; - } - $compiler->smarty->template_functions[$_name]['parameter'] = $compiler->template->properties['function'][$_name]['parameter']; - if ($compiler->template->caching) { - $output = ''; - } else { - $output = "tpl_vars; - 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);}?>"; - } - // Init temporary context - $compiler->template->required_plugins = array('compiled' => array(), 'nocache' => array()); - $compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser); - $compiler->parser->current_buffer->append_subtree(new _smarty_tag($compiler->parser, $output)); - $compiler->template->has_nocache_code = false; - $compiler->has_code = false; - $compiler->template->properties['function'][$_name]['compiled'] = ''; - return true; - } -} - -/** - * Smarty Internal Plugin Compile Functionclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {/function} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return boolean true - */ - public function compile($args, $compiler, $parameter) - { - $_attr = $this->getAttributes($compiler, $args); - $saved_data = $this->closeTag($compiler, array('function')); - $_name = trim($saved_data[0]['name'], "'\""); - // build plugin include code - $plugins_string = ''; - if (!empty($compiler->template->required_plugins['compiled'])) { - $plugins_string = 'template->required_plugins['compiled'] as $tmp) { - foreach ($tmp as $data) { - $plugins_string .= "if (!is_callable('{$data['function']}')) include '{$data['file']}';\n"; - } - } - $plugins_string .= '?>'; - } - if (!empty($compiler->template->required_plugins['nocache'])) { - $plugins_string .= "template->properties['nocache_hash']}%%*/template->required_plugins['nocache'] as $tmp) { - foreach ($tmp as $data) { - $plugins_string .= "if (!is_callable(\'{$data['function']}\')) include \'{$data['file']}\';\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 ($compiler->template->caching) { - $compiler->template->properties['function'][$_name]['compiled'] .= $plugins_string - . $compiler->parser->current_buffer->to_smarty_php(); - $compiler->template->properties['function'][$_name]['nocache_hash'] = $compiler->template->properties['nocache_hash']; - $compiler->template->properties['function'][$_name]['has_nocache_code'] = $compiler->template->has_nocache_code; - $compiler->template->properties['function'][$_name]['called_functions'] = $compiler->called_functions; - $compiler->called_functions = array(); - $compiler->smarty->template_functions[$_name] = $compiler->template->properties['function'][$_name]; - $compiler->has_code = false; - $output = true; - } else { - $output = $plugins_string . $compiler->parser->current_buffer->to_smarty_php() . "tpl_vars = \$saved_tpl_vars; -foreach (Smarty::\$global_tpl_vars as \$key => \$value) if(!isset(\$_smarty_tpl->tpl_vars[\$key])) \$_smarty_tpl->tpl_vars[\$key] = \$value;}}?>\n"; - } - // reset flag that we are compiling a template function - $compiler->compiles_template_function = false; - // restore old compiler status - $compiler->parser->current_buffer = $saved_data[1]; - $compiler->template->has_nocache_code = $compiler->template->has_nocache_code | $saved_data[2]; - $compiler->template->required_plugins = $saved_data[3]; - - return $output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_if.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_if.php deleted file mode 100644 index d709fcfd81..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_if.php +++ /dev/null @@ -1,210 +0,0 @@ -getAttributes($compiler, $args); - $this->openTag($compiler, 'if', array(1, $compiler->nocache)); - // must whole block be nocache ? - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - - if (!array_key_exists("if condition", $parameter)) { - $compiler->trigger_template_error("missing if condition", $compiler->lex->taglineno); - } - - if (is_array($parameter['if condition'])) { - if ($compiler->nocache) { - $_nocache = ',true'; - // create nocache var to make it know for further compiling - if (is_array($parameter['if condition']['var'])) { - $compiler->template->tpl_vars[trim($parameter['if condition']['var']['var'], "'")] = new Smarty_variable(null, true); - } else { - $compiler->template->tpl_vars[trim($parameter['if condition']['var'], "'")] = new Smarty_variable(null, true); - } - } else { - $_nocache = ''; - } - if (is_array($parameter['if condition']['var'])) { - $_output = "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'] . ") {?>"; - } else { - $_output = "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'] . ") {?>"; - } - - return $_output; - } else { - return ""; - } - } -} - -/** - * Smarty Internal Plugin Compile Else Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {else} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) - { - list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif')); - $this->openTag($compiler, 'else', array($nesting, $compiler->tag_nocache)); - - return ""; - } -} - -/** - * Smarty Internal Plugin Compile ElseIf Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {elseif} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif')); - - if (!array_key_exists("if condition", $parameter)) { - $compiler->trigger_template_error("missing elseif condition", $compiler->lex->taglineno); - } - - if (is_array($parameter['if condition'])) { - $condition_by_assign = true; - if ($compiler->nocache) { - $_nocache = ',true'; - // create nocache var to make it know for further compiling - if (is_array($parameter['if condition']['var'])) { - $compiler->template->tpl_vars[trim($parameter['if condition']['var']['var'], "'")] = new Smarty_variable(null, true); - } else { - $compiler->template->tpl_vars[trim($parameter['if condition']['var'], "'")] = new Smarty_variable(null, true); - } - } else { - $_nocache = ''; - } - } else { - $condition_by_assign = false; - } - - if (empty($compiler->prefix_code)) { - if ($condition_by_assign) { - $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache)); - if (is_array($parameter['if condition']['var'])) { - $_output = "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'] . ") {?>"; - } else { - $_output = "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'] . ") {?>"; - } - - return $_output; - } else { - $this->openTag($compiler, 'elseif', array($nesting, $compiler->tag_nocache)); - - return ""; - } - } else { - $tmp = ''; - foreach ($compiler->prefix_code as $code) { - $tmp .= $code; - } - $compiler->prefix_code = array(); - $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache)); - if ($condition_by_assign) { - if (is_array($parameter['if condition']['var'])) { - $_output = "{$tmp}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'] . ") {?>"; - } else { - $_output = "{$tmp}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'] . ") {?>"; - } - - return $_output; - } else { - return "{$tmp}"; - } - } - } -} - -/** - * Smarty Internal Plugin Compile Ifclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {/if} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, $compiler, $parameter) - { - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - list($nesting, $compiler->nocache) = $this->closeTag($compiler, array('if', 'else', 'elseif')); - $tmp = ''; - for ($i = 0; $i < $nesting; $i ++) { - $tmp .= '}'; - } - - return ""; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_include.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_include.php deleted file mode 100644 index 4b7b09ce73..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_include.php +++ /dev/null @@ -1,265 +0,0 @@ -getAttributes($compiler, $args); - // save possible attributes - $include_file = $_attr['file']; - - if (isset($_attr['assign'])) { - // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr['assign']; - } - - $_parent_scope = Smarty::SCOPE_LOCAL; - if (isset($_attr['scope'])) { - $_attr['scope'] = trim($_attr['scope'], "'\""); - if ($_attr['scope'] == 'parent') { - $_parent_scope = Smarty::SCOPE_PARENT; - } elseif ($_attr['scope'] == 'root') { - $_parent_scope = Smarty::SCOPE_ROOT; - } elseif ($_attr['scope'] == 'global') { - $_parent_scope = Smarty::SCOPE_GLOBAL; - } - } - - $_caching = Smarty::CACHING_OFF; - - // 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; - - // set default when in nocache mode - // 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)))) { - $_caching = self::CACHING_NOCACHE_CODE; - } - /* - * if the {include} tag provides individual parameter for caching - * it will not be included into the common cache file and treated like - * a nocache section - */ - if (isset($_attr['cache_lifetime'])) { - $_cache_lifetime = $_attr['cache_lifetime']; - $compiler->tag_nocache = true; - $_caching = Smarty::CACHING_LIFETIME_CURRENT; - } else { - $_cache_lifetime = 'null'; - } - if (isset($_attr['cache_id'])) { - $_cache_id = $_attr['cache_id']; - $compiler->tag_nocache = true; - $_caching = Smarty::CACHING_LIFETIME_CURRENT; - } else { - $_cache_id = '$_smarty_tpl->cache_id'; - } - if (isset($_attr['compile_id'])) { - $_compile_id = $_attr['compile_id']; - } else { - $_compile_id = '$_smarty_tpl->compile_id'; - } - if ($_attr['caching'] === true) { - $_caching = Smarty::CACHING_LIFETIME_CURRENT; - } - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - if ($merge_compiled_includes) { - $_caching = self::CACHING_NOCACHE_CODE; - } else { - $_caching = Smarty::CACHING_OFF; - } - } - - $has_compiled_template = false; - if ($merge_compiled_includes && $_attr['inline'] !== true) { - // variable template name ? - if ($compiler->has_variable_string || !((substr_count($include_file, '"') == 2 || substr_count($include_file, "'") == 2)) - || substr_count($include_file, '(') != 0 || substr_count($include_file, '$_smarty_tpl->') != 0 - ) { - $merge_compiled_includes = false; - if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) { - $compiler->trigger_template_error(' variable template file names not allow within {block} tags'); - } - } - // variable compile_id? - if (isset($_attr['compile_id'])) { - if (!((substr_count($_attr['compile_id'], '"') == 2 || substr_count($_attr['compile_id'], "'") == 2)) - || substr_count($_attr['compile_id'], '(') != 0 || substr_count($_attr['compile_id'], '$_smarty_tpl->') != 0 - ) { - $merge_compiled_includes = false; - if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) { - $compiler->trigger_template_error(' variable compile_id not allow within {block} tags'); - } - } - } - } - if ($merge_compiled_includes) { - if ($compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache) && $_caching != self::CACHING_NOCACHE_CODE) { - $merge_compiled_includes = false; - if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) { - $compiler->trigger_template_error(' invalid caching mode of subtemplate within {block} tags'); - } - } - } - if ($merge_compiled_includes) { - // we must observe different compile_id - $uid = sha1($_compile_id); - $tpl_name = null; - $nocache = false; - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $compiler->template; - eval("\$tpl_name = $include_file;"); - 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); - // save unique function name - $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 - $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) { - // all code must be nocache - $nocache = true; - } - if ($compiler->inheritance) { - $tpl->compiler->inheritance = true; - } - // make sure whole chain gets compiled - $tpl->mustCompile = true; - if (!($tpl->source->uncompiled) && $tpl->source->exists) { - - // get compiled code - $compiled_code = $tpl->compiler->compileTemplate($tpl, $nocache); - // release compiler object to free memory - unset($tpl->compiler); - // merge compiled code for {function} tags - $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $tpl->properties['function']); - // merge filedependency - $tpl->properties['file_dependency'][$tpl->source->uid] = array($tpl->source->filepath, $tpl->source->timestamp, $tpl->source->type); - $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $tpl->properties['file_dependency']); - // remove header code - $compiled_code = preg_replace("/(<\?php \/\*%%SmartyHeaderCode:{$tpl->properties['nocache_hash']}%%\*\/(.+?)\/\*\/%%SmartyHeaderCode%%\*\/\?>\n)/s", '', $compiled_code); - if ($tpl->has_nocache_code) { - // replace nocache_hash - $compiled_code = str_replace("{$tpl->properties['nocache_hash']}", $compiler->template->properties['nocache_hash'], $compiled_code); - $compiler->template->has_nocache_code = true; - } - $compiler->merged_templates[$tpl->properties['unifunc']] = $compiled_code; - $has_compiled_template = true; - unset ($tpl); - } - } else { - $has_compiled_template = true; - } - } - // delete {include} standard attributes - unset($_attr['file'], $_attr['assign'], $_attr['cache_id'], $_attr['compile_id'], $_attr['cache_lifetime'], $_attr['nocache'], $_attr['caching'], $_attr['scope'], $_attr['inline']); - // remaining attributes must be assigned as smarty variable - if (!empty($_attr)) { - if ($_parent_scope == Smarty::SCOPE_LOCAL) { - // create variables - $nccode = ''; - foreach ($_attr as $key => $value) { - $_pairs[] = "'$key'=>$value"; - $nccode .= "\$_smarty_tpl->tpl_vars['$key'] = new Smarty_variable($value);\n"; - } - $_vars = 'array(' . join(',', $_pairs) . ')'; - } else { - $compiler->trigger_template_error('variable passing not allowed in parent/global scope', $compiler->lex->taglineno); - } - } else { - $_vars = 'array()'; - } - if ($has_compiled_template) { - // never call inline templates in nocache mode - $compiler->suppressNocacheProcessing = true; - $_hash = $compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash']; - $_output = "caching) { - $compiler->suppressNocacheProcessing = false; - $_output .= substr($compiler->processNocacheCode('\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"; - if (isset($_assign)) { - $_output .= 'ob_start(); '; - } - $_output .= $compiler->smarty->merged_templates_func[$tpl_name][$uid]['func'] . "(\$_smarty_tpl);\n"; - $_output .= "\$_smarty_tpl = array_pop(\$_tpl_stack); "; - if (isset($_assign)) { - $_output .= " \$_smarty_tpl->tpl_vars[$_assign] = new Smarty_variable(ob_get_clean());"; - } - $_output .= "\n/* End of included template \"" . $tpl_name . "\" */?>"; - - return $_output; - } - - // was there an assign attribute - if (isset($_assign)) { - $_output = "tpl_vars[$_assign] = new Smarty_variable(\$_smarty_tpl->getSubTemplate ($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope));?>\n";; - } else { - $_output = "getSubTemplate ($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope);?>\n"; - } - - return $_output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php deleted file mode 100644 index 3dff8538e8..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php +++ /dev/null @@ -1,85 +0,0 @@ -getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - // convert attributes into parameter array string - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - - $this->openTag($compiler, $tag, array($_params, $compiler->nocache)); - // maybe nocache because of nocache variables or nocache plugin - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - // compile code - $output = "smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } else { - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - // closing tag of block plugin, restore nocache - list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, - 5)); - // This tag does create output - $compiler->has_output = true; - // compile code - if (!isset($parameter['modifier_list'])) { - $mod_pre = $mod_post = ''; - } else { - $mod_pre = ' ob_start(); '; - $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';'; - } - $output = "smarty->_tag_stack);?>"; - } - - return $output . "\n"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php deleted file mode 100644 index 5418fefff0..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php +++ /dev/null @@ -1,86 +0,0 @@ -getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - // convert attributes into parameter array string - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - - $this->openTag($compiler, $tag . '->' . $method, array($_params, $compiler->nocache)); - // maybe nocache because of nocache variables or nocache plugin - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - // compile code - $output = "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 { - $base_tag = substr($tag, 0, - 5); - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - // closing tag of block plugin, restore nocache - list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag . '->' . $method); - // This tag does create output - $compiler->has_output = true; - // compile code - if (!isset($parameter['modifier_list'])) { - $mod_pre = $mod_post = ''; - } else { - $mod_pre = ' ob_start(); '; - $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';'; - } - $output = "smarty->registered_objects['{$base_tag}'][0]->{$method}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; - } - - return $output . "\n"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php deleted file mode 100644 index 188bbe77a1..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php +++ /dev/null @@ -1,151 +0,0 @@ -getAttributes($compiler, $args); - // nocache option - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - if (isset($_attr['assign'])) { - // assign output to variable - $output = "assign({$_attr['assign']},{$parameter['value']});?>"; - } else { - // display value - $output = $parameter['value']; - // tag modifier - if (!empty($parameter['modifierlist'])) { - $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifierlist'], 'value' => $output)); - } - if (!$_attr['nofilter']) { - // default modifier - if (!empty($compiler->smarty->default_modifiers)) { - if (empty($compiler->default_modifier_list)) { - $modifierlist = array(); - foreach ($compiler->smarty->default_modifiers as $key => $single_default_modifier) { - preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array); - for ($i = 0, $count = count($mod_array[0]); $i < $count; $i ++) { - if ($mod_array[0][$i] != ':') { - $modifierlist[$key][] = $mod_array[0][$i]; - } - } - } - $compiler->default_modifier_list = $modifierlist; - } - $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $compiler->default_modifier_list, 'value' => $output)); - } - // autoescape html - if ($compiler->template->smarty->escape_html) { - $output = "htmlspecialchars({$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')"; - } - // loop over registered filters - if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) { - foreach ($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => $function) { - if (!is_array($function)) { - $output = "{$function}({$output},\$_smarty_tpl)"; - } elseif (is_object($function[0])) { - $output = "\$_smarty_tpl->smarty->registered_filters[Smarty::FILTER_VARIABLE]['{$key}'][0]->{$function[1]}({$output},\$_smarty_tpl)"; - } else { - $output = "{$function[0]}::{$function[1]}({$output},\$_smarty_tpl)"; - } - } - } - // auto loaded filters - if (isset($compiler->smarty->autoload_filters[Smarty::FILTER_VARIABLE])) { - foreach ((array) $compiler->template->smarty->autoload_filters[Smarty::FILTER_VARIABLE] as $name) { - $result = $this->compile_output_filter($compiler, $name, $output); - if ($result !== false) { - $output = $result; - } else { - // not found, throw exception - throw new SmartyException("Unable to load filter '{$name}'"); - } - } - } - if (isset($compiler->template->variable_filters)) { - foreach ($compiler->template->variable_filters as $filter) { - if (count($filter) == 1 && ($result = $this->compile_output_filter($compiler, $filter[0], $output)) !== false) { - $output = $result; - } else { - $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => array($filter), 'value' => $output)); - } - } - } - } - - $compiler->has_output = true; - $output = ""; - } - - return $output; - } - - /** - * @param object $compiler compiler object - * @param string $name name of variable filter - * @param string $output embedded output - * - * @return string - */ - private function compile_output_filter($compiler, $name, $output) - { - $plugin_name = "smarty_variablefilter_{$name}"; - $path = $compiler->smarty->loadPlugin($plugin_name, false); - if ($path) { - if ($compiler->template->caching) { - $compiler->template->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['file'] = $path; - $compiler->template->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name; - } else { - $compiler->template->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['file'] = $path; - $compiler->template->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name; - } - } else { - // not found - return false; - } - - return "{$plugin_name}({$output},\$_smarty_tpl)"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php deleted file mode 100644 index 68ab644fc9..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php +++ /dev/null @@ -1,111 +0,0 @@ -getAttributes($compiler, $args); - if ($_attr['nocache']) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag])) { - $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag]; - } else { - $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$tag]; - } - // convert attributes into parameter array string - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) { - $_value = str_replace("'", "^#^", $_value); - $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - - $this->openTag($compiler, $tag, array($_params, $compiler->nocache)); - // maybe nocache because of nocache variables or nocache plugin - $compiler->nocache = !$tag_info[1] | $compiler->nocache | $compiler->tag_nocache; - $function = $tag_info[0]; - // compile code - if (!is_array($function)) { - $output = "smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } elseif (is_object($function[0])) { - $output = "smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } else { - $output = "smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function[0]}::{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } - } else { - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - $base_tag = substr($tag, 0, - 5); - // closing tag of block plugin, restore nocache - list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag); - // This tag does create output - $compiler->has_output = true; - if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) { - $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0]; - } else { - $function = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0]; - } - // compile code - if (!isset($parameter['modifier_list'])) { - $mod_pre = $mod_post = ''; - } else { - $mod_pre = ' ob_start(); '; - $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';'; - } - if (!is_array($function)) { - $output = "smarty->_tag_stack);?>"; - } elseif (is_object($function[0])) { - $output = "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 { - $output = "smarty->_tag_stack);?>"; - } - } - - return $output . "\n"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php deleted file mode 100644 index 23b17ae141..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php +++ /dev/null @@ -1,114 +0,0 @@ -getVariable('smarty')->value$parameter"; - case 'section': - return "\$_smarty_tpl->getVariable('smarty')->value$parameter"; - case 'capture': - return "Smarty::\$_smarty_vars$parameter"; - case 'now': - return 'time()'; - case 'cookies': - if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_super_globals) { - $compiler->trigger_template_error("(secure mode) super globals not permitted"); - break; - } - $compiled_ref = '$_COOKIE'; - break; - - case 'get': - case 'post': - case 'env': - case 'server': - case 'session': - case 'request': - if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_super_globals) { - $compiler->trigger_template_error("(secure mode) super globals not permitted"); - break; - } - $compiled_ref = '$_' . strtoupper($variable); - break; - - case 'template': - return 'basename($_smarty_tpl->source->filepath)'; - - case 'template_object': - return '$_smarty_tpl'; - - case 'current_dir': - return 'dirname($_smarty_tpl->source->filepath)'; - - case 'version': - $_version = Smarty::SMARTY_VERSION; - - return "'$_version'"; - - case 'const': - if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_constants) { - $compiler->trigger_template_error("(secure mode) constants not permitted"); - break; - } - - return "@constant({$_index[1]})"; - - case 'config': - if (isset($_index[2])) { - return "(is_array(\$tmp = \$_smarty_tpl->getConfigVariable($_index[1])) ? \$tmp[$_index[2]] : null)"; - } else { - return "\$_smarty_tpl->getConfigVariable($_index[1])"; - } - case 'ldelim': - $_ldelim = $compiler->smarty->left_delimiter; - - return "'$_ldelim'"; - - case 'rdelim': - $_rdelim = $compiler->smarty->right_delimiter; - - return "'$_rdelim'"; - - default: - $compiler->trigger_template_error('$smarty.' . trim($_index[0], "'") . ' is invalid'); - break; - } - if (isset($_index[1])) { - array_shift($_index); - foreach ($_index as $_ind) { - $compiled_ref = $compiled_ref . "[$_ind]"; - } - } - - return $compiled_ref; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_section.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_section.php deleted file mode 100644 index 5ac3fb067c..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_section.php +++ /dev/null @@ -1,206 +0,0 @@ -getAttributes($compiler, $args); - - $this->openTag($compiler, 'section', array('section', $compiler->nocache)); - // maybe nocache because of nocache variables - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - - $output = "tpl_vars['smarty']->value['section'][$section_name])) unset(\$_smarty_tpl->tpl_vars['smarty']->value['section'][$section_name]);\n"; - $section_props = "\$_smarty_tpl->tpl_vars['smarty']->value['section'][$section_name]"; - - foreach ($_attr as $attr_name => $attr_value) { - switch ($attr_name) { - case 'loop': - $output .= "{$section_props}['loop'] = is_array(\$_loop=$attr_value) ? count(\$_loop) : max(0, (int) \$_loop); unset(\$_loop);\n"; - break; - - case 'show': - if (is_bool($attr_value)) { - $show_attr_value = $attr_value ? 'true' : 'false'; - } else { - $show_attr_value = "(bool) $attr_value"; - } - $output .= "{$section_props}['show'] = $show_attr_value;\n"; - break; - - case 'name': - $output .= "{$section_props}['$attr_name'] = $attr_value;\n"; - break; - - case 'max': - case 'start': - $output .= "{$section_props}['$attr_name'] = (int) $attr_value;\n"; - break; - - case 'step': - $output .= "{$section_props}['$attr_name'] = ((int) $attr_value) == 0 ? 1 : (int) $attr_value;\n"; - break; - } - } - - if (!isset($_attr['show'])) { - $output .= "{$section_props}['show'] = true;\n"; - } - - if (!isset($_attr['loop'])) { - $output .= "{$section_props}['loop'] = 1;\n"; - } - - if (!isset($_attr['max'])) { - $output .= "{$section_props}['max'] = {$section_props}['loop'];\n"; - } else { - $output .= "if ({$section_props}['max'] < 0)\n" . " {$section_props}['max'] = {$section_props}['loop'];\n"; - } - - if (!isset($_attr['step'])) { - $output .= "{$section_props}['step'] = 1;\n"; - } - - if (!isset($_attr['start'])) { - $output .= "{$section_props}['start'] = {$section_props}['step'] > 0 ? 0 : {$section_props}['loop']-1;\n"; - } 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}['show']) {\n"; - if (!isset($_attr['start']) && !isset($_attr['step']) && !isset($_attr['max'])) { - $output .= " {$section_props}['total'] = {$section_props}['loop'];\n"; - } else { - $output .= " {$section_props}['total'] = min(ceil(({$section_props}['step'] > 0 ? {$section_props}['loop'] - {$section_props}['start'] : {$section_props}['start']+1)/abs({$section_props}['step'])), {$section_props}['max']);\n"; - } - $output .= " if ({$section_props}['total'] == 0)\n" . " {$section_props}['show'] = false;\n" . "} else\n" . " {$section_props}['total'] = 0;\n"; - - $output .= "if ({$section_props}['show']):\n"; - $output .= " - for ({$section_props}['index'] = {$section_props}['start'], {$section_props}['iteration'] = 1; - {$section_props}['iteration'] <= {$section_props}['total']; - {$section_props}['index'] += {$section_props}['step'], {$section_props}['iteration']++):\n"; - $output .= "{$section_props}['rownum'] = {$section_props}['iteration'];\n"; - $output .= "{$section_props}['index_prev'] = {$section_props}['index'] - {$section_props}['step'];\n"; - $output .= "{$section_props}['index_next'] = {$section_props}['index'] + {$section_props}['step'];\n"; - $output .= "{$section_props}['first'] = ({$section_props}['iteration'] == 1);\n"; - $output .= "{$section_props}['last'] = ({$section_props}['iteration'] == {$section_props}['total']);\n"; - - $output .= "?>"; - - return $output; - } -} - -/** - * Smarty Internal Plugin Compile Sectionelse Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {sectionelse} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - list($openTag, $nocache) = $this->closeTag($compiler, array('section')); - $this->openTag($compiler, 'sectionelse', array('sectionelse', $nocache)); - - return ""; - } -} - -/** - * Smarty Internal Plugin Compile Sectionclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {/section} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - - list($openTag, $compiler->nocache) = $this->closeTag($compiler, array('section', 'sectionelse')); - - if ($openTag == 'sectionelse') { - return ""; - } else { - return ""; - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_while.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_while.php deleted file mode 100644 index 36dc049dba..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_while.php +++ /dev/null @@ -1,93 +0,0 @@ -getAttributes($compiler, $args); - $this->openTag($compiler, 'while', $compiler->nocache); - - if (!array_key_exists("if condition", $parameter)) { - $compiler->trigger_template_error("missing while condition", $compiler->lex->taglineno); - } - - // maybe nocache because of nocache variables - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - if (is_array($parameter['if condition'])) { - if ($compiler->nocache) { - $_nocache = ',true'; - // create nocache var to make it know for further compiling - if (is_array($parameter['if condition']['var'])) { - $compiler->template->tpl_vars[trim($parameter['if condition']['var']['var'], "'")] = new Smarty_variable(null, true); - } else { - $compiler->template->tpl_vars[trim($parameter['if condition']['var'], "'")] = new Smarty_variable(null, true); - } - } else { - $_nocache = ''; - } - if (is_array($parameter['if condition']['var'])) { - $_output = "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 .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>"; - } else { - $_output = "tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});"; - $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>"; - } - - return $_output; - } else { - return ""; - } - } -} - -/** - * Smarty Internal Plugin Compile Whileclose Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {/while} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) - { - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - $compiler->nocache = $this->closeTag($compiler, array('while')); - - return ""; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_config.php b/library/Smarty/libs/sysplugins/smarty_internal_config.php deleted file mode 100644 index 25694d5a9a..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_config.php +++ /dev/null @@ -1,306 +0,0 @@ -data = $data; - $this->smarty = $smarty; - $this->config_resource = $config_resource; - } - - /** - * Returns the compiled filepath - * - * @return string the compiled filepath - */ - public function getCompiledFilepath() - { - return $this->compiled_filepath === null ? - ($this->compiled_filepath = $this->buildCompiledFilepath()) : - $this->compiled_filepath; - } - - /** - * Get file path. - * - * @return string - */ - public function buildCompiledFilepath() - { - $_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 - + (int) $this->smarty->config_overwrite * 4; - $_filepath = sha1(realpath($this->source->filepath) . $_flag); - // if use_sub_dirs, break file into directories - if ($this->smarty->use_sub_dirs) { - $_filepath = substr($_filepath, 0, 2) . DS - . substr($_filepath, 2, 2) . DS - . substr($_filepath, 4, 2) . DS - . $_filepath; - } - $_compile_dir_sep = $this->smarty->use_sub_dirs ? DS : '^'; - if (isset($_compile_id)) { - $_filepath = $_compile_id . $_compile_dir_sep . $_filepath; - } - $_compile_dir = $this->smarty->getCompileDir(); - - return $_compile_dir . $_filepath . '.' . basename($this->source->name) . '.config' . '.php'; - } - - /** - * Returns the timestamp of the compiled file - * - * @return integer the file timestamp - */ - public function getCompiledTimestamp() - { - return $this->compiled_timestamp === null - ? ($this->compiled_timestamp = (file_exists($this->getCompiledFilepath())) ? filemtime($this->getCompiledFilepath()) : false) - : $this->compiled_timestamp; - } - - /** - * 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 - * - * @return boolean true if the file must be compiled - */ - public function mustCompile() - { - return $this->mustCompile === null ? - $this->mustCompile = ($this->smarty->force_compile || $this->getCompiledTimestamp() === false || $this->smarty->compile_check && $this->getCompiledTimestamp() < $this->source->timestamp) : - $this->mustCompile; - } - - /** - * Returns the compiled config file - * It checks if the config file must be compiled or just read the compiled version - * - * @return string the compiled config file - */ - public function getCompiledConfig() - { - if ($this->compiled_config === null) { - // see if template needs compiling. - if ($this->mustCompile()) { - $this->compileConfigSource(); - } else { - $this->compiled_config = file_get_contents($this->getCompiledFilepath()); - } - } - - return $this->compiled_config; - } - - /** - * Compiles the config files - * - * @throws Exception - */ - public function compileConfigSource() - { - // compile template - if (!is_object($this->compiler_object)) { - // load compiler - $this->compiler_object = new Smarty_Internal_Config_File_Compiler($this->smarty); - } - // compile locking - if ($this->smarty->compile_locking) { - if ($saved_timestamp = $this->getCompiledTimestamp()) { - touch($this->getCompiledFilepath()); - } - } - // call compiler - try { - $this->compiler_object->compileSource($this); - } - catch (Exception $e) { - // restore old timestamp in case of error - if ($this->smarty->compile_locking && $saved_timestamp) { - touch($this->getCompiledFilepath(), $saved_timestamp); - } - throw $e; - } - // compiling succeeded - // write compiled template - Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->getCompiledConfig(), $this->smarty); - } - - /** - * load config variables - * - * @param mixed $sections array of section names, single section or null - * @param string $scope global,parent or local - * - * @throws Exception - */ - public function loadConfigVars($sections = null, $scope = 'local') - { - if ($this->data instanceof Smarty_Internal_Template) { - $this->data->properties['file_dependency'][sha1($this->source->filepath)] = array($this->source->filepath, $this->source->timestamp, 'file'); - } - if ($this->mustCompile()) { - $this->compileConfigSource(); - } - // pointer to scope - if ($scope == 'local') { - $scope_ptr = $this->data; - } elseif ($scope == 'parent') { - if (isset($this->data->parent)) { - $scope_ptr = $this->data->parent; - } else { - $scope_ptr = $this->data; - } - } elseif ($scope == 'root' || $scope == 'global') { - $scope_ptr = $this->data; - while (isset($scope_ptr->parent)) { - $scope_ptr = $scope_ptr->parent; - } - } - $_config_vars = array(); - include($this->getCompiledFilepath()); - // copy global config vars - foreach ($_config_vars['vars'] as $variable => $value) { - if ($this->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) { - $scope_ptr->config_vars[$variable] = $value; - } else { - $scope_ptr->config_vars[$variable] = array_merge((array) $scope_ptr->config_vars[$variable], (array) $value); - } - } - // scan sections - if (!empty($sections)) { - foreach ((array) $sections as $this_section) { - if (isset($_config_vars['sections'][$this_section])) { - foreach ($_config_vars['sections'][$this_section]['vars'] as $variable => $value) { - if ($this->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) { - $scope_ptr->config_vars[$variable] = $value; - } else { - $scope_ptr->config_vars[$variable] = array_merge((array) $scope_ptr->config_vars[$variable], (array) $value); - } - } - } - } - } - } - - /** - * set Smarty property in template context - * - * @param string $property_name property name - * @param mixed $value value - * - * @throws SmartyException if $property_name is not valid - */ - public function __set($property_name, $value) - { - switch ($property_name) { - case 'source': - case 'compiled': - $this->$property_name = $value; - - return; - } - - throw new SmartyException("invalid config property '$property_name'."); - } - - /** - * get Smarty property in template context - * - * @param string $property_name property name - * - * @return \Smarty_Config_Source|\Smarty_Template_Compiled - * @throws SmartyException if $property_name is not valid - */ - public function __get($property_name) - { - switch ($property_name) { - case 'source': - if (empty($this->config_resource)) { - throw new SmartyException("Unable to parse resource name \"{$this->config_resource}\""); - } - $this->source = Smarty_Resource::config($this); - - return $this->source; - - case 'compiled': - $this->compiled = $this->source->getCompiled($this); - - return $this->compiled; - } - - throw new SmartyException("config attribute '$property_name' does not exist."); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php b/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php deleted file mode 100644 index 1173104399..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php +++ /dev/null @@ -1,159 +0,0 @@ -smarty = $smarty; - $this->config_data['sections'] = array(); - $this->config_data['vars'] = array(); - } - - /** - * Method to compile a Smarty template. - * - * @param Smarty_Internal_Config $config config object - * - * @return bool true if compiling succeeded, false if it failed - */ - public function compileSource(Smarty_Internal_Config $config) - { - /* here is where the compiling takes place. Smarty - tags in the templates are replaces with PHP code, - then written to compiled files. */ - $this->config = $config; - // get config file source - $_content = $config->source->content . "\n"; - // on empty template just return - if ($_content == '') { - return true; - } - // init the lexer/parser to compile the config file - $lex = new Smarty_Internal_Configfilelexer($_content, $this); - $parser = new Smarty_Internal_Configfileparser($lex, $this); - - 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 - while ($lex->yylex()) { - if ($this->smarty->_parserdebug) { - echo "
Parsing {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n"; - } - $parser->doParse($lex->token, $lex->value); - } - // finish parsing process - $parser->doParse(0, 0); - - if ($mbEncoding) { - mb_internal_encoding($mbEncoding); - } - - $config->compiled_config = 'config_data, true) . '; ?>'; - } - - /** - * display compiler error messages without dying - * If parameter $args is empty it is a parser detected syntax error. - * 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 - * - * @param string $args individual error message or null - * - * @throws SmartyCompilerException - */ - public function trigger_config_file_error($args = null) - { - $this->lex = Smarty_Internal_Configfilelexer::instance(); - $this->parser = Smarty_Internal_Configfileparser::instance(); - // get template source line which has error - $line = $this->lex->line; - if (isset($args)) { - // $line--; - } - $match = preg_split("/\n/", $this->lex->data); - $error_text = "Syntax error in config file '{$this->config->source->filepath}' on line {$line} '{$match[$line - 1]}' "; - if (isset($args)) { - // individual error message - $error_text .= $args; - } else { - // expected token from parser - foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) { - $exp_token = $this->parser->yyTokenName[$token]; - if (isset($this->lex->smarty_token_names[$exp_token])) { - // token type from lexer - $expect[] = '"' . $this->lex->smarty_token_names[$exp_token] . '"'; - } else { - // otherwise internal token name - $expect[] = $this->parser->yyTokenName[$token]; - } - } - // output parser error message - $error_text .= ' - Unexpected "' . $this->lex->value . '", expected one of: ' . implode(' , ', $expect); - } - throw new SmartyCompilerException($error_text); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_data.php b/library/Smarty/libs/sysplugins/smarty_internal_data.php deleted file mode 100644 index 9e16f10c00..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_data.php +++ /dev/null @@ -1,576 +0,0 @@ - $_val) { - if ($_key != '') { - $this->tpl_vars[$_key] = new Smarty_variable($_val, $nocache); - } - } - } else { - if ($tpl_var != '') { - $this->tpl_vars[$tpl_var] = new Smarty_variable($value, $nocache); - } - } - - return $this; - } - - /** - * assigns a global Smarty variable - * - * @param string $varname the global variable name - * @param mixed $value the value to assign - * @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 - */ - public function assignGlobal($varname, $value = null, $nocache = false) - { - if ($varname != '') { - Smarty::$global_tpl_vars[$varname] = new Smarty_variable($value, $nocache); - $ptr = $this; - while ($ptr instanceof Smarty_Internal_Template) { - $ptr->tpl_vars[$varname] = clone Smarty::$global_tpl_vars[$varname]; - $ptr = $ptr->parent; - } - } - - return $this; - } - - /** - * assigns values to template variables by reference - * - * @param string $tpl_var the template variable name - * @param $value - * @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 - */ - public function assignByRef($tpl_var, &$value, $nocache = false) - { - if ($tpl_var != '') { - $this->tpl_vars[$tpl_var] = new Smarty_variable(null, $nocache); - $this->tpl_vars[$tpl_var]->value = & $value; - } - - return $this; - } - - /** - * appends values to template variables - * - * @param array|string $tpl_var the template variable name(s) - * @param mixed $value the value to append - * @param boolean $merge flag if array elements shall be merged - * @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 - */ - public function append($tpl_var, $value = null, $merge = false, $nocache = false) - { - if (is_array($tpl_var)) { - // $tpl_var is an array, ignore $value - foreach ($tpl_var as $_key => $_val) { - if ($_key != '') { - if (!isset($this->tpl_vars[$_key])) { - $tpl_var_inst = $this->getVariable($_key, null, true, false); - if ($tpl_var_inst instanceof Undefined_Smarty_Variable) { - $this->tpl_vars[$_key] = new Smarty_variable(null, $nocache); - } else { - $this->tpl_vars[$_key] = clone $tpl_var_inst; - } - } - if (!(is_array($this->tpl_vars[$_key]->value) || $this->tpl_vars[$_key]->value instanceof ArrayAccess)) { - settype($this->tpl_vars[$_key]->value, 'array'); - } - if ($merge && is_array($_val)) { - foreach ($_val as $_mkey => $_mval) { - $this->tpl_vars[$_key]->value[$_mkey] = $_mval; - } - } else { - $this->tpl_vars[$_key]->value[] = $_val; - } - } - } - } else { - if ($tpl_var != '' && isset($value)) { - if (!isset($this->tpl_vars[$tpl_var])) { - $tpl_var_inst = $this->getVariable($tpl_var, null, true, false); - if ($tpl_var_inst instanceof Undefined_Smarty_Variable) { - $this->tpl_vars[$tpl_var] = new Smarty_variable(null, $nocache); - } else { - $this->tpl_vars[$tpl_var] = clone $tpl_var_inst; - } - } - if (!(is_array($this->tpl_vars[$tpl_var]->value) || $this->tpl_vars[$tpl_var]->value instanceof ArrayAccess)) { - settype($this->tpl_vars[$tpl_var]->value, 'array'); - } - if ($merge && is_array($value)) { - foreach ($value as $_mkey => $_mval) { - $this->tpl_vars[$tpl_var]->value[$_mkey] = $_mval; - } - } else { - $this->tpl_vars[$tpl_var]->value[] = $value; - } - } - } - - return $this; - } - - /** - * appends values to template variables by reference - * - * @param string $tpl_var the template variable name - * @param mixed &$value the referenced value to append - * @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 - */ - public function appendByRef($tpl_var, &$value, $merge = false) - { - if ($tpl_var != '' && isset($value)) { - if (!isset($this->tpl_vars[$tpl_var])) { - $this->tpl_vars[$tpl_var] = new Smarty_variable(); - } - if (!is_array($this->tpl_vars[$tpl_var]->value)) { - settype($this->tpl_vars[$tpl_var]->value, 'array'); - } - if ($merge && is_array($value)) { - foreach ($value as $_key => $_val) { - $this->tpl_vars[$tpl_var]->value[$_key] = & $value[$_key]; - } - } else { - $this->tpl_vars[$tpl_var]->value[] = & $value; - } - } - - return $this; - } - - /** - * Returns a single or all template variables - * - * @param string $varname variable name or null - * @param object $_ptr optional pointer to data object - * @param boolean $search_parents include parent templates? - * - * @return string variable value or or array of variables - */ - public function getTemplateVars($varname = null, $_ptr = null, $search_parents = true) - { - if (isset($varname)) { - $_var = $this->getVariable($varname, $_ptr, $search_parents, false); - if (is_object($_var)) { - return $_var->value; - } else { - return null; - } - } else { - $_result = array(); - if ($_ptr === null) { - $_ptr = $this; - } - while ($_ptr !== null) { - foreach ($_ptr->tpl_vars AS $key => $var) { - if (!array_key_exists($key, $_result)) { - $_result[$key] = $var->value; - } - } - // not found, try at parent - if ($search_parents) { - $_ptr = $_ptr->parent; - } else { - $_ptr = null; - } - } - if ($search_parents && isset(Smarty::$global_tpl_vars)) { - foreach (Smarty::$global_tpl_vars AS $key => $var) { - if (!array_key_exists($key, $_result)) { - $_result[$key] = $var->value; - } - } - } - - return $_result; - } - } - - /** - * clear the given assigned template variable. - * - * @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 - */ - public function clearAssign($tpl_var) - { - if (is_array($tpl_var)) { - foreach ($tpl_var as $curr_var) { - unset($this->tpl_vars[$curr_var]); - } - } else { - unset($this->tpl_vars[$tpl_var]); - } - - return $this; - } - - /** - * clear all the assigned template variables. - * - * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function clearAllAssign() - { - $this->tpl_vars = array(); - - return $this; - } - - /** - * load a config file, optionally load just selected sections - * - * @param string $config_file filename - * @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 - */ - public function configLoad($config_file, $sections = null) - { - // load Config class - $config = new Smarty_Internal_Config($config_file, $this->smarty, $this); - $config->loadConfigVars($sections); - - return $this; - } - - /** - * gets the object of a Smarty variable - * - * @param string $variable the name of the Smarty variable - * @param object $_ptr optional pointer to data object - * @param boolean $search_parents search also in parent data - * @param bool $error_enable - * - * @return object the object of the variable - */ - public function getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true) - { - if ($_ptr === null) { - $_ptr = $this; - } - while ($_ptr !== null) { - if (isset($_ptr->tpl_vars[$variable])) { - // found it, return it - return $_ptr->tpl_vars[$variable]; - } - // not found, try at parent - if ($search_parents) { - $_ptr = $_ptr->parent; - } else { - $_ptr = null; - } - } - if (isset(Smarty::$global_tpl_vars[$variable])) { - // found it, return it - return Smarty::$global_tpl_vars[$variable]; - } - if ($this->smarty->error_unassigned && $error_enable) { - // force a notice - $x = $$variable; - } - - return new Undefined_Smarty_Variable; - } - - /** - * gets a config variable - * - * @param string $variable the name of the config variable - * @param bool $error_enable - * - * @return mixed the value of the config variable - */ - public function getConfigVariable($variable, $error_enable = true) - { - $_ptr = $this; - while ($_ptr !== null) { - if (isset($_ptr->config_vars[$variable])) { - // found it, return it - return $_ptr->config_vars[$variable]; - } - // not found, try at parent - $_ptr = $_ptr->parent; - } - if ($this->smarty->error_unassigned && $error_enable) { - // force a notice - $x = $$variable; - } - - return null; - } - - /** - * gets a stream variable - * - * @param string $variable the stream of the variable - * - * @throws SmartyException - * @return mixed the value of the stream variable - */ - public function getStreamVariable($variable) - { - $_result = ''; - $fp = fopen($variable, 'r+'); - if ($fp) { - while (!feof($fp) && ($current_line = fgets($fp)) !== false) { - $_result .= $current_line; - } - fclose($fp); - - return $_result; - } - - if ($this->smarty->error_unassigned) { - throw new SmartyException('Undefined stream variable "' . $variable . '"'); - } else { - return null; - } - } - - /** - * Returns a single or all config variables - * - * @param string $varname variable name or null - * @param bool $search_parents - * - * @return string variable value or or array of variables - */ - public function getConfigVars($varname = null, $search_parents = true) - { - $_ptr = $this; - $var_array = array(); - while ($_ptr !== null) { - if (isset($varname)) { - if (isset($_ptr->config_vars[$varname])) { - return $_ptr->config_vars[$varname]; - } - } else { - $var_array = array_merge($_ptr->config_vars, $var_array); - } - // not found, try at parent - if ($search_parents) { - $_ptr = $_ptr->parent; - } else { - $_ptr = null; - } - } - if (isset($varname)) { - return ''; - } else { - return $var_array; - } - } - - /** - * Deassigns a single or all config variables - * - * @param string $varname variable name or null - * - * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function clearConfig($varname = null) - { - if (isset($varname)) { - unset($this->config_vars[$varname]); - } else { - $this->config_vars = array(); - } - - return $this; - } -} - -/** - * class for the Smarty data object - * The Smarty data object will hold Smarty variables in the current scope - * - * @package Smarty - * @subpackage Template - */ -class Smarty_Data extends Smarty_Internal_Data -{ - /** - * Smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * create Smarty data object - * - * @param Smarty|array $_parent parent template - * @param Smarty|Smarty_Internal_Template $smarty global smarty instance - * - * @throws SmartyException - */ - public function __construct($_parent = null, $smarty = null) - { - $this->smarty = $smarty; - if (is_object($_parent)) { - // when object set up back pointer - $this->parent = $_parent; - } elseif (is_array($_parent)) { - // set up variable values - foreach ($_parent as $_key => $_val) { - $this->tpl_vars[$_key] = new Smarty_variable($_val); - } - } elseif ($_parent != null) { - throw new SmartyException("Wrong type for template variables"); - } - } -} - -/** - * class for the Smarty variable object - * This class defines the Smarty variable object - * - * @package Smarty - * @subpackage Template - */ -class Smarty_Variable -{ - /** - * template variable - * - * @var mixed - */ - public $value = null; - /** - * if true any output of this variable will be not cached - * - * @var boolean - */ - public $nocache = false; - /** - * the scope the variable will have (local,parent or root) - * - * @var int - */ - public $scope = Smarty::SCOPE_LOCAL; - - /** - * create Smarty variable object - * - * @param mixed $value the value to assign - * @param boolean $nocache if true any output of this variable will be not cached - * @param int $scope the scope the variable will have (local,parent or root) - */ - public function __construct($value = null, $nocache = false, $scope = Smarty::SCOPE_LOCAL) - { - $this->value = $value; - $this->nocache = $nocache; - $this->scope = $scope; - } - - /** - * <> String conversion - * - * @return string - */ - public function __toString() - { - return (string) $this->value; - } -} - -/** - * class for undefined variable object - * This class defines an object for undefined variable handling - * - * @package Smarty - * @subpackage Template - */ -class Undefined_Smarty_Variable -{ - /** - * Returns FALSE for 'nocache' and NULL otherwise. - * - * @param string $name - * - * @return bool - */ - public function __get($name) - { - if ($name == 'nocache') { - return false; - } else { - return null; - } - } - - /** - * Always returns an empty string. - * - * @return string - */ - public function __toString() - { - return ""; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_debug.php b/library/Smarty/libs/sysplugins/smarty_internal_debug.php deleted file mode 100644 index e5175d51d3..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_debug.php +++ /dev/null @@ -1,254 +0,0 @@ -source->uid == '') { - $template->source->filepath; - } - self::$ignore_uid[$template->source->uid] = true; - } - - /** - * Start logging of compile time - * - * @param object $template - */ - public static function start_compile($template) - { - static $_is_stringy = array('string' => true, 'eval' => true); - if (!empty($template->compiler->trace_uid)) { - $key = $template->compiler->trace_uid; - if (!isset(self::$template_data[$key])) { - if (isset($_is_stringy[$template->source->type])) { - self::$template_data[$key]['name'] = '\'' . substr($template->source->name, 0, 25) . '...\''; - } else { - self::$template_data[$key]['name'] = $template->source->filepath; - } - self::$template_data[$key]['compile_time'] = 0; - self::$template_data[$key]['render_time'] = 0; - self::$template_data[$key]['cache_time'] = 0; - } - } else { - if (isset(self::$ignore_uid[$template->source->uid])) { - return; - } - $key = self::get_key($template); - } - self::$template_data[$key]['start_time'] = microtime(true); - } - - /** - * End logging of compile time - * - * @param object $template - */ - public static function end_compile($template) - { - if (!empty($template->compiler->trace_uid)) { - $key = $template->compiler->trace_uid; - } else { - if (isset(self::$ignore_uid[$template->source->uid])) { - return; - } - - $key = self::get_key($template); - } - self::$template_data[$key]['compile_time'] += microtime(true) - self::$template_data[$key]['start_time']; - } - - /** - * Start logging of render time - * - * @param object $template - */ - public static function start_render($template) - { - $key = self::get_key($template); - self::$template_data[$key]['start_time'] = microtime(true); - } - - /** - * End logging of compile time - * - * @param object $template - */ - public static function end_render($template) - { - $key = self::get_key($template); - self::$template_data[$key]['render_time'] += microtime(true) - self::$template_data[$key]['start_time']; - } - - /** - * Start logging of cache time - * - * @param object $template cached template - */ - public static function start_cache($template) - { - $key = self::get_key($template); - self::$template_data[$key]['start_time'] = microtime(true); - } - - /** - * End logging of cache time - * - * @param object $template cached template - */ - public static function end_cache($template) - { - $key = self::get_key($template); - self::$template_data[$key]['cache_time'] += microtime(true) - self::$template_data[$key]['start_time']; - } - - /** - * Opens a window for the Smarty Debugging Consol and display the data - * - * @param Smarty_Internal_Template|Smarty $obj object to debug - */ - public static function display_debug($obj) - { - // prepare information of assigned variables - $ptr = self::get_debug_vars($obj); - if ($obj instanceof Smarty) { - $smarty = clone $obj; - } else { - $smarty = clone $obj->smarty; - } - $_assigned_vars = $ptr->tpl_vars; - ksort($_assigned_vars); - $_config_vars = $ptr->config_vars; - ksort($_config_vars); - $smarty->registered_filters = array(); - $smarty->autoload_filters = array(); - $smarty->default_modifiers = array(); - $smarty->force_compile = false; - $smarty->left_delimiter = '{'; - $smarty->right_delimiter = '}'; - $smarty->debugging = false; - $smarty->debugging_ctrl = 'NONE'; - $smarty->force_compile = false; - $_template = new Smarty_Internal_Template($smarty->debug_tpl, $smarty); - $_template->caching = false; - $_template->disableSecurity(); - $_template->cache_id = null; - $_template->compile_id = null; - if ($obj instanceof Smarty_Internal_Template) { - $_template->assign('template_name', $obj->source->type . ':' . $obj->source->name); - } - if ($obj instanceof Smarty) { - $_template->assign('template_data', self::$template_data); - } else { - $_template->assign('template_data', null); - } - $_template->assign('assigned_vars', $_assigned_vars); - $_template->assign('config_vars', $_config_vars); - $_template->assign('execution_time', microtime(true) - $smarty->start_time); - echo $_template->fetch(); - } - - /** - * Recursively gets variables from all template/data scopes - * - * @param Smarty_Internal_Template|Smarty_Data $obj object to debug - * - * @return StdClass - */ - public static function get_debug_vars($obj) - { - $config_vars = $obj->config_vars; - $tpl_vars = array(); - foreach ($obj->tpl_vars as $key => $var) { - $tpl_vars[$key] = clone $var; - if ($obj instanceof Smarty_Internal_Template) { - $tpl_vars[$key]->scope = $obj->source->type . ':' . $obj->source->name; - } elseif ($obj instanceof Smarty_Data) { - $tpl_vars[$key]->scope = 'Data object'; - } else { - $tpl_vars[$key]->scope = 'Smarty root'; - } - } - - if (isset($obj->parent)) { - $parent = self::get_debug_vars($obj->parent); - $tpl_vars = array_merge($parent->tpl_vars, $tpl_vars); - $config_vars = array_merge($parent->config_vars, $config_vars); - } else { - foreach (Smarty::$global_tpl_vars as $name => $var) { - if (!array_key_exists($name, $tpl_vars)) { - $clone = clone $var; - $clone->scope = 'Global'; - $tpl_vars[$name] = $clone; - } - } - } - - return (object) array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars); - } - - /** - * Return key into $template_data for template - * - * @param object $template template object - * - * @return string key into $template_data - */ - private static function get_key($template) - { - static $_is_stringy = array('string' => true, 'eval' => true); - // calculate Uid if not already done - if ($template->source->uid == '') { - $template->source->filepath; - } - $key = $template->source->uid; - if (isset(self::$template_data[$key])) { - return $key; - } else { - if (isset($_is_stringy[$template->source->type])) { - self::$template_data[$key]['name'] = '\'' . substr($template->source->name, 0, 25) . '...\''; - } else { - self::$template_data[$key]['name'] = $template->source->filepath; - } - self::$template_data[$key]['compile_time'] = 0; - self::$template_data[$key]['render_time'] = 0; - self::$template_data[$key]['cache_time'] = 0; - - return $key; - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_filter_handler.php b/library/Smarty/libs/sysplugins/smarty_internal_filter_handler.php deleted file mode 100644 index 4f0f3981c9..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_filter_handler.php +++ /dev/null @@ -1,67 +0,0 @@ -smarty->autoload_filters[$type])) { - foreach ((array) $template->smarty->autoload_filters[$type] as $name) { - $plugin_name = "Smarty_{$type}filter_{$name}"; - if ($template->smarty->loadPlugin($plugin_name)) { - if (function_exists($plugin_name)) { - // use loaded Smarty2 style plugin - $output = $plugin_name($output, $template); - } elseif (class_exists($plugin_name, false)) { - // loaded class of filter plugin - $output = call_user_func(array($plugin_name, 'execute'), $output, $template); - } - } else { - // nothing found, throw exception - throw new SmartyException("Unable to load filter {$plugin_name}"); - } - } - } - // loop over registerd filters of specified type - if (!empty($template->smarty->registered_filters[$type])) { - foreach ($template->smarty->registered_filters[$type] as $key => $name) { - if (is_array($template->smarty->registered_filters[$type][$key])) { - $output = call_user_func($template->smarty->registered_filters[$type][$key], $output, $template); - } else { - $output = $template->smarty->registered_filters[$type][$key]($output, $template); - } - } - } - // return filtered output - return $output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_function_call_handler.php b/library/Smarty/libs/sysplugins/smarty_internal_function_call_handler.php deleted file mode 100644 index a81ff728bb..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_function_call_handler.php +++ /dev/null @@ -1,52 +0,0 @@ -tpl_vars; - 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);}?>"; - if ($_nocache) { - $_code .= preg_replace(array("!<\?php echo \\'/\*%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/|/\*/%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/\\';\?>!", - "!\\\'!"), array('', "'"), $_template->smarty->template_functions[$_name]['compiled']); - $_template->smarty->template_functions[$_name]['called_nocache'] = true; - } else { - $_code .= preg_replace("/{$_template->smarty->template_functions[$_name]['nocache_hash']}/", $_template->properties['nocache_hash'], $_template->smarty->template_functions[$_name]['compiled']); - } - $_code .= "tpl_vars = \$saved_tpl_vars;}"; - eval($_code); - } - $_function($_template, $_params); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_get_include_path.php b/library/Smarty/libs/sysplugins/smarty_internal_get_include_path.php deleted file mode 100644 index d46ca70290..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_get_include_path.php +++ /dev/null @@ -1,46 +0,0 @@ -parser = $parser; - $this->data = $data; - $this->saved_block_nesting = $parser->block_nesting_level; - } - - /** - * Return buffer content - * - * @return string content - */ - public function to_smarty_php() - { - return $this->data; - } - - /** - * Return complied code that loads the evaluated output of buffer content into a temporary variable - * - * @return string template code - */ - public function assign_to_var() - { - $var = sprintf('$_tmp%d', ++Smarty_Internal_Templateparser::$prefix_number); - $this->parser->compiler->prefix_code[] = sprintf('%s', $this->data, $var); - - return $var; - } -} - -/** - * Code fragment inside a tag. - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class _smarty_code extends _smarty_parsetree -{ - /** - * Create parse tree buffer for code fragment - * - * @param object $parser parser object - * @param string $data content - */ - public function __construct($parser, $data) - { - $this->parser = $parser; - $this->data = $data; - } - - /** - * Return buffer content in parentheses - * - * @return string content - */ - public function to_smarty_php() - { - return sprintf("(%s)", $this->data); - } -} - -/** - * Double quoted string inside a tag. - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class _smarty_doublequoted extends _smarty_parsetree -{ - /** - * Create parse tree buffer for double quoted string subtrees - * - * @param object $parser parser object - * @param _smarty_parsetree $subtree parsetree buffer - */ - public function __construct($parser, _smarty_parsetree $subtree) - { - $this->parser = $parser; - $this->subtrees[] = $subtree; - if ($subtree instanceof _smarty_tag) { - $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack); - } - } - - /** - * Append buffer to subtree - * - * @param _smarty_parsetree $subtree parsetree buffer - */ - public function append_subtree(_smarty_parsetree $subtree) - { - $last_subtree = count($this->subtrees) - 1; - if ($last_subtree >= 0 && $this->subtrees[$last_subtree] instanceof _smarty_tag && $this->subtrees[$last_subtree]->saved_block_nesting < $this->parser->block_nesting_level) { - if ($subtree instanceof _smarty_code) { - $this->subtrees[$last_subtree]->data .= 'data . ';?>'; - } elseif ($subtree instanceof _smarty_dq_content) { - $this->subtrees[$last_subtree]->data .= 'data . '";?>'; - } else { - $this->subtrees[$last_subtree]->data .= $subtree->data; - } - } else { - $this->subtrees[] = $subtree; - } - if ($subtree instanceof _smarty_tag) { - $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack); - } - } - - /** - * Merge subtree buffer content together - * - * @return string compiled template code - */ - public function to_smarty_php() - { - $code = ''; - foreach ($this->subtrees as $subtree) { - if ($code !== "") { - $code .= "."; - } - if ($subtree instanceof _smarty_tag) { - $more_php = $subtree->assign_to_var(); - } else { - $more_php = $subtree->to_smarty_php(); - } - - $code .= $more_php; - - if (!$subtree instanceof _smarty_dq_content) { - $this->parser->compiler->has_variable_string = true; - } - } - - return $code; - } -} - -/** - * Raw chars as part of a double quoted string. - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class _smarty_dq_content extends _smarty_parsetree -{ - /** - * Create parse tree buffer with string content - * - * @param object $parser parser object - * @param string $data string section - */ - public function __construct($parser, $data) - { - $this->parser = $parser; - $this->data = $data; - } - - /** - * Return content as double quoted string - * - * @return string doubled quoted string - */ - public function to_smarty_php() - { - return '"' . $this->data . '"'; - } -} - -/** - * Template element - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class _smarty_template_buffer extends _smarty_parsetree -{ - /** - * Array of template elements - * - * @var array - */ - public $subtrees = Array(); - - /** - * Create root of parse tree for template elements - * - * @param object $parser parse object - */ - public function __construct($parser) - { - $this->parser = $parser; - } - - /** - * Append buffer to subtree - * - * @param _smarty_parsetree $subtree - */ - public function append_subtree(_smarty_parsetree $subtree) - { - $this->subtrees[] = $subtree; - } - - /** - * Sanitize and merge subtree buffers together - * - * @return string template code content - */ - public function to_smarty_php() - { - $code = ''; - for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key ++) { - if ($key + 2 < $cnt) { - if ($this->subtrees[$key] instanceof _smarty_linebreak && $this->subtrees[$key + 1] instanceof _smarty_tag && $this->subtrees[$key + 1]->data == '' && $this->subtrees[$key + 2] instanceof _smarty_linebreak) { - $key = $key + 1; - continue; - } - if (substr($this->subtrees[$key]->data, - 1) == '<' && $this->subtrees[$key + 1]->data == '' && substr($this->subtrees[$key + 2]->data, - 1) == '?') { - $key = $key + 2; - continue; - } - } - if (substr($code, - 1) == '<') { - $subtree = $this->subtrees[$key]->to_smarty_php(); - if (substr($subtree, 0, 1) == '?') { - $code = substr($code, 0, strlen($code) - 1) . '<?' . substr($subtree, 1); - } elseif ($this->parser->asp_tags && substr($subtree, 0, 1) == '%') { - $code = substr($code, 0, strlen($code) - 1) . '<%' . substr($subtree, 1); - } else { - $code .= $subtree; - } - continue; - } - if ($this->parser->asp_tags && substr($code, - 1) == '%') { - $subtree = $this->subtrees[$key]->to_smarty_php(); - if (substr($subtree, 0, 1) == '>') { - $code = substr($code, 0, strlen($code) - 1) . '%>' . substr($subtree, 1); - } else { - $code .= $subtree; - } - continue; - } - if (substr($code, - 1) == '?') { - $subtree = $this->subtrees[$key]->to_smarty_php(); - if (substr($subtree, 0, 1) == '>') { - $code = substr($code, 0, strlen($code) - 1) . '?>' . substr($subtree, 1); - } else { - $code .= $subtree; - } - continue; - } - $code .= $this->subtrees[$key]->to_smarty_php(); - } - - return $code; - } -} - -/** - * template text - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class _smarty_text extends _smarty_parsetree -{ - /** - * Create template text buffer - * - * @param object $parser parser object - * @param string $data text - */ - public function __construct($parser, $data) - { - $this->parser = $parser; - $this->data = $data; - } - - /** - * Return buffer content - * - * @return strint text - */ - public function to_smarty_php() - { - return $this->data; - } -} - -/** - * template linebreaks - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class _smarty_linebreak extends _smarty_parsetree -{ - /** - * Create buffer with linebreak content - * - * @param object $parser parser object - * @param string $data linebreak string - */ - public function __construct($parser, $data) - { - $this->parser = $parser; - $this->data = $data; - } - - /** - * Return linebrak - * - * @return string linebreak - */ - public function to_smarty_php() - { - return $this->data; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_file.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_file.php deleted file mode 100644 index 0abdc44954..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_file.php +++ /dev/null @@ -1,89 +0,0 @@ -filepath = $this->buildFilepath($source, $_template); - - if ($source->filepath !== false) { - if (is_object($source->smarty->security_policy)) { - $source->smarty->security_policy->isTrustedResourceDir($source->filepath); - } - - $source->uid = sha1(realpath($source->filepath)); - if ($source->smarty->compile_check && !isset($source->timestamp)) { - $source->timestamp = @filemtime($source->filepath); - $source->exists = !!$source->timestamp; - } - } - } - - /** - * populate Source Object with timestamp and exists from Resource - * - * @param Smarty_Template_Source $source source object - */ - public function populateTimestamp(Smarty_Template_Source $source) - { - $source->timestamp = @filemtime($source->filepath); - $source->exists = !!$source->timestamp; - } - - /** - * Load template's source from file into current template object - * - * @param Smarty_Template_Source $source source object - * - * @return string template source - * @throws SmartyException if source cannot be loaded - */ - public function getContent(Smarty_Template_Source $source) - { - if ($source->timestamp) { - return file_get_contents($source->filepath); - } - if ($source instanceof Smarty_Config_Source) { - throw new SmartyException("Unable to read config {$source->type} '{$source->name}'"); - } - throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); - } - - /** - * Determine basename for compiled filename - * - * @param Smarty_Template_Source $source source object - * - * @return string resource's basename - */ - public function getBasename(Smarty_Template_Source $source) - { - $_file = $source->name; - if (($_pos = strpos($_file, ']')) !== false) { - $_file = substr($_file, $_pos + 1); - } - - return basename($_file); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php b/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php deleted file mode 100644 index 50bd16ef22..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php +++ /dev/null @@ -1,140 +0,0 @@ -smarty = $smarty; - parent::__construct(); - // get required plugins - $this->lexer_class = $lexer_class; - $this->parser_class = $parser_class; - } - - /** - * method to compile a Smarty template - * - * @param mixed $_content template source - * - * @return bool true if compiling succeeded, false if it failed - */ - protected function doCompile($_content) - { - /* here is where the compiling takes place. Smarty - tags in the templates are replaces with PHP code, - then written to compiled files. */ - // init the lexer/parser to compile the template - $this->lex = new $this->lexer_class($_content, $this); - $this->parser = new $this->parser_class($this->lex, $this); - if ($this->inheritance_child) { - // start state on child templates - $this->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY); - } - 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) { - $this->parser->PrintTrace(); - $this->lex->PrintTrace(); - } - // get tokens from lexer and parse them - while ($this->lex->yylex() && !$this->abort_and_recompile) { - if ($this->smarty->_parserdebug) { - echo "
Line {$this->lex->line} Parsing  {$this->parser->yyTokenName[$this->lex->token]} Token " .
-                    htmlentities($this->lex->value) . "
"; - } - $this->parser->doParse($this->lex->token, $this->lex->value); - } - - if ($this->abort_and_recompile) { - // exit here on abort - return false; - } - // finish parsing process - $this->parser->doParse(0, 0); - if ($mbEncoding) { - mb_internal_encoding($mbEncoding); - } - // check for unclosed tags - if (count($this->_tag_stack) > 0) { - // get stacked info - list($openTag, $_data) = array_pop($this->_tag_stack); - $this->trigger_template_error("unclosed {$this->smarty->left_delimiter}" . $openTag . "{$this->smarty->right_delimiter} tag"); - } - // return compiled code - // return str_replace(array("? >\nparser->retvalue); - return $this->parser->retvalue; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_template.php b/library/Smarty/libs/sysplugins/smarty_internal_template.php deleted file mode 100644 index e905c1e450..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_template.php +++ /dev/null @@ -1,737 +0,0 @@ - array(), - 'nocache_hash' => '', - 'function' => array()); - /** - * required plugins - * - * @var array - */ - public $required_plugins = array('compiled' => array(), 'nocache' => array()); - /** - * Global smarty instance - * - * @var Smarty - */ - public $smarty = null; - /** - * blocks for template inheritance - * - * @var array - */ - public $block_data = array(); - /** - * variable filters - * - * @var array - */ - public $variable_filters = array(); - /** - * optional log of tag/attributes - * - * @var array - */ - public $used_tags = array(); - /** - * internal flag to allow relative path in child template blocks - * - * @var bool - */ - public $allow_relative_path = false; - /** - * internal capture runtime stack - * - * @var array - */ - public $_capture_stack = array(0 => array()); - - /** - * Create template data object - * Some of the global Smarty settings copied to template scope - * It load the required template resources and cacher plugins - * - * @param string $template_resource template resource string - * @param Smarty $smarty Smarty instance - * @param Smarty_Internal_Template $_parent back pointer to parent object with variables or null - * @param mixed $_cache_id cache id or null - * @param mixed $_compile_id compile id or null - * @param bool $_caching use caching? - * @param int $_cache_lifetime cache life-time in seconds - */ - public function __construct($template_resource, $smarty, $_parent = null, $_cache_id = null, $_compile_id = null, $_caching = null, $_cache_lifetime = null) - { - $this->smarty = & $smarty; - // Smarty parameter - $this->cache_id = $_cache_id === null ? $this->smarty->cache_id : $_cache_id; - $this->compile_id = $_compile_id === null ? $this->smarty->compile_id : $_compile_id; - $this->caching = $_caching === null ? $this->smarty->caching : $_caching; - if ($this->caching === true) { - $this->caching = Smarty::CACHING_LIFETIME_CURRENT; - } - $this->cache_lifetime = $_cache_lifetime === null ? $this->smarty->cache_lifetime : $_cache_lifetime; - $this->parent = $_parent; - // Template resource - $this->template_resource = $template_resource; - // copy block data of template inheritance - if ($this->parent instanceof Smarty_Internal_Template) { - $this->block_data = $this->parent->block_data; - } - } - - /** - * Returns if the current template must be compiled by the Smarty compiler - * It does compare the timestamps of template source and the compiled templates and checks the force compile configuration - * - * @throws SmartyException - * @return boolean true if the template must be compiled - */ - public function mustCompile() - { - if (!$this->source->exists) { - if ($this->parent instanceof Smarty_Internal_Template) { - $parent_resource = " in '$this->parent->template_resource}'"; - } else { - $parent_resource = ''; - } - throw new SmartyException("Unable to load template {$this->source->type} '{$this->source->name}'{$parent_resource}"); - } - if ($this->mustCompile === null) { - $this->mustCompile = (!$this->source->uncompiled && ($this->smarty->force_compile || $this->source->recompiled || $this->compiled->timestamp === false || - ($this->smarty->compile_check && $this->compiled->timestamp < $this->source->timestamp))); - } - - return $this->mustCompile; - } - - /** - * Compiles the template - * If the template is not evaluated the compiled template is saved on disk - */ - public function compileTemplateSource() - { - if (!$this->source->recompiled) { - $this->properties['file_dependency'] = array(); - if ($this->source->components) { - // for the extends resource the compiler will fill it - // uses real resource for file dependency - // $source = end($this->source->components); - // $this->properties['file_dependency'][$this->source->uid] = array($this->source->filepath, $this->source->timestamp, $source->type); - } else { - $this->properties['file_dependency'][$this->source->uid] = array($this->source->filepath, $this->source->timestamp, $this->source->type); - } - } - // compile locking - if ($this->smarty->compile_locking && !$this->source->recompiled) { - if ($saved_timestamp = $this->compiled->timestamp) { - touch($this->compiled->filepath); - } - } - // call compiler - try { - $code = $this->compiler->compileTemplate($this); - } - catch (Exception $e) { - // restore old timestamp in case of error - if ($this->smarty->compile_locking && !$this->source->recompiled && $saved_timestamp) { - touch($this->compiled->filepath, $saved_timestamp); - } - throw $e; - } - // compiling succeded - if (!$this->source->recompiled && $this->compiler->write_compiled_code) { - // write compiled template - $_filepath = $this->compiled->filepath; - if ($_filepath === false) { - throw new SmartyException('getCompiledFilepath() did not return a destination to save the compiled template to'); - } - Smarty_Internal_Write_File::writeFile($_filepath, $code, $this->smarty); - $this->compiled->exists = true; - $this->compiled->isCompiled = true; - } - // release compiler object to free memory - unset($this->compiler); - } - - /** - * Writes the cached template output - * - * @param string $content - * - * @return bool - */ - public function writeCachedContent($content) - { - if ($this->source->recompiled || !($this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED)) { - // don't write cache file - return false; - } - $this->properties['cache_lifetime'] = $this->cache_lifetime; - $this->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true)); - $content = $this->createTemplateCodeFrame($content, true); - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $this; - eval("?>" . $content); - $this->cached->valid = true; - $this->cached->processed = true; - - return $this->cached->write($this, $content); - } - - /** - * Template code runtime function to get subtemplate content - * - * @param string $template the resource handle of the template file - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param integer $caching cache mode - * @param integer $cache_lifetime life time of cache data - * @param $data - * @param int $parent_scope scope in which {include} should execute - * - * @returns string template content - */ - public function getSubTemplate($template, $cache_id, $compile_id, $caching, $cache_lifetime, $data, $parent_scope) - { - // already in template cache? - if ($this->smarty->allow_ambiguous_resources) { - $_templateId = Smarty_Resource::getUniqueTemplateName($this, $template) . $cache_id . $compile_id; - } else { - $_templateId = $this->smarty->joined_template_dir . '#' . $template . $cache_id . $compile_id; - } - - if (isset($_templateId[150])) { - $_templateId = sha1($_templateId); - } - if (isset($this->smarty->template_objects[$_templateId])) { - // clone cached template object because of possible recursive call - $tpl = clone $this->smarty->template_objects[$_templateId]; - $tpl->parent = $this; - $tpl->caching = $caching; - $tpl->cache_lifetime = $cache_lifetime; - } else { - $tpl = new $this->smarty->template_class($template, $this->smarty, $this, $cache_id, $compile_id, $caching, $cache_lifetime); - } - // get variables from calling scope - if ($parent_scope == Smarty::SCOPE_LOCAL) { - $tpl->tpl_vars = $this->tpl_vars; - $tpl->tpl_vars['smarty'] = clone $this->tpl_vars['smarty']; - } elseif ($parent_scope == Smarty::SCOPE_PARENT) { - $tpl->tpl_vars = & $this->tpl_vars; - } elseif ($parent_scope == Smarty::SCOPE_GLOBAL) { - $tpl->tpl_vars = & Smarty::$global_tpl_vars; - } elseif (($scope_ptr = $this->getScopePointer($parent_scope)) == null) { - $tpl->tpl_vars = & $this->tpl_vars; - } else { - $tpl->tpl_vars = & $scope_ptr->tpl_vars; - } - $tpl->config_vars = $this->config_vars; - if (!empty($data)) { - // set up variable values - foreach ($data as $_key => $_val) { - $tpl->tpl_vars[$_key] = new Smarty_variable($_val); - } - } - - return $tpl->fetch(null, null, null, null, false, false, true); - } - - /** - * Template code runtime function to set up an inline subtemplate - * - * @param string $template the resource handle of the template file - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param integer $caching cache mode - * @param integer $cache_lifetime life time of cache data - * @param $data - * @param int $parent_scope scope in which {include} should execute - * @param string $hash nocache hash code - * - * @returns string template content - */ - public function setupInlineSubTemplate($template, $cache_id, $compile_id, $caching, $cache_lifetime, $data, $parent_scope, $hash) - { - $tpl = new $this->smarty->template_class($template, $this->smarty, $this, $cache_id, $compile_id, $caching, $cache_lifetime); - $tpl->properties['nocache_hash'] = $hash; - // get variables from calling scope - if ($parent_scope == Smarty::SCOPE_LOCAL) { - $tpl->tpl_vars = $this->tpl_vars; - $tpl->tpl_vars['smarty'] = clone $this->tpl_vars['smarty']; - } elseif ($parent_scope == Smarty::SCOPE_PARENT) { - $tpl->tpl_vars = & $this->tpl_vars; - } elseif ($parent_scope == Smarty::SCOPE_GLOBAL) { - $tpl->tpl_vars = & Smarty::$global_tpl_vars; - } elseif (($scope_ptr = $this->getScopePointer($parent_scope)) == null) { - $tpl->tpl_vars = & $this->tpl_vars; - } else { - $tpl->tpl_vars = & $scope_ptr->tpl_vars; - } - $tpl->config_vars = $this->config_vars; - if (!empty($data)) { - // set up variable values - foreach ($data as $_key => $_val) { - $tpl->tpl_vars[$_key] = new Smarty_variable($_val); - } - } - - return $tpl; - } - - /** - * Create code frame for compiled and cached templates - * - * @param string $content optional template content - * @param bool $cache flag for cache file - * - * @return string - */ - public function createTemplateCodeFrame($content = '', $cache = false) - { - $plugins_string = ''; - // include code for plugins - if (!$cache) { - if (!empty($this->required_plugins['compiled'])) { - $plugins_string = 'required_plugins['compiled'] as $tmp) { - foreach ($tmp as $data) { - $file = addslashes($data['file']); - if (is_Array($data['function'])) { - $plugins_string .= "if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) include '{$file}';\n"; - } else { - $plugins_string .= "if (!is_callable('{$data['function']}')) include '{$file}';\n"; - } - } - } - $plugins_string .= '?>'; - } - if (!empty($this->required_plugins['nocache'])) { - $this->has_nocache_code = true; - $plugins_string .= "properties['nocache_hash']}%%*/smarty; "; - foreach ($this->required_plugins['nocache'] as $tmp) { - foreach ($tmp as $data) { - $file = addslashes($data['file']); - if (is_Array($data['function'])) { - $plugins_string .= addslashes("if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) include '{$file}';\n"); - } else { - $plugins_string .= addslashes("if (!is_callable('{$data['function']}')) include '{$file}';\n"); - } - } - } - $plugins_string .= "?>/*/%%SmartyNocache:{$this->properties['nocache_hash']}%%*/';?>\n"; - } - } - // build property code - $this->properties['has_nocache_code'] = $this->has_nocache_code; - $output = ''; - if (!$this->source->recompiled) { - $output = "properties['nocache_hash']}%%*/"; - if ($this->smarty->direct_access_security) { - $output .= "if(!defined('SMARTY_DIR')) exit('no direct access allowed');\n"; - } - } - if ($cache) { - // remove compiled code of{function} definition - unset($this->properties['function']); - if (!empty($this->smarty->template_functions)) { - // copy code of {function} tags called in nocache mode - foreach ($this->smarty->template_functions as $name => $function_data) { - if (isset($function_data['called_nocache'])) { - foreach ($function_data['called_functions'] as $func_name) { - $this->smarty->template_functions[$func_name]['called_nocache'] = true; - } - } - } - foreach ($this->smarty->template_functions as $name => $function_data) { - if (isset($function_data['called_nocache'])) { - unset($function_data['called_nocache'], $function_data['called_functions'], $this->smarty->template_functions[$name]['called_nocache']); - $this->properties['function'][$name] = $function_data; - } - } - } - } - $this->properties['version'] = Smarty::SMARTY_VERSION; - if (!isset($this->properties['unifunc'])) { - $this->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true)); - } - if (!$this->source->recompiled) { - $output .= "\$_valid = \$_smarty_tpl->decodeProperties(" . var_export($this->properties, true) . ',' . ($cache ? 'true' : 'false') . "); /*/%%SmartyHeaderCode%%*/?>\n"; - $output .= 'properties['unifunc'] . '\')) {function ' . $this->properties['unifunc'] . '($_smarty_tpl) {?>'; - } - $output .= $plugins_string; - $output .= $content; - if (!$this->source->recompiled) { - $output .= "\n"; - } - - return $output; - } - - /** - * This function is executed automatically when a compiled or cached template file is included - * - Decode saved properties from compiled template and cache files - * - Check if compiled or cache file is valid - * - * @param array $properties special template properties - * @param bool $cache flag if called from cache file - * - * @return bool flag if compiled or cache file is valid - */ - public function decodeProperties($properties, $cache = false) - { - $this->has_nocache_code = $properties['has_nocache_code']; - $this->properties['nocache_hash'] = $properties['nocache_hash']; - if (isset($properties['cache_lifetime'])) { - $this->properties['cache_lifetime'] = $properties['cache_lifetime']; - } - if (isset($properties['file_dependency'])) { - $this->properties['file_dependency'] = array_merge($this->properties['file_dependency'], $properties['file_dependency']); - } - if (!empty($properties['function'])) { - $this->properties['function'] = array_merge($this->properties['function'], $properties['function']); - $this->smarty->template_functions = array_merge($this->smarty->template_functions, $properties['function']); - } - $this->properties['version'] = (isset($properties['version'])) ? $properties['version'] : ''; - $this->properties['unifunc'] = $properties['unifunc']; - // check file dependencies at compiled code - $is_valid = true; - if ($this->properties['version'] != Smarty::SMARTY_VERSION) { - $is_valid = false; - } elseif (((!$cache && $this->smarty->compile_check && empty($this->compiled->_properties) && !$this->compiled->isCompiled) || $cache && ($this->smarty->compile_check === true || $this->smarty->compile_check === Smarty::COMPILECHECK_ON)) && !empty($this->properties['file_dependency'])) { - foreach ($this->properties['file_dependency'] as $_file_to_check) { - if ($_file_to_check[2] == 'file' || $_file_to_check[2] == 'php') { - if ($this->source->filepath == $_file_to_check[0] && isset($this->source->timestamp)) { - // do not recheck current template - $mtime = $this->source->timestamp; - } else { - // file and php types can be checked without loading the respective resource handlers - $mtime = @filemtime($_file_to_check[0]); - } - } elseif ($_file_to_check[2] == 'string') { - continue; - } else { - $source = Smarty_Resource::source(null, $this->smarty, $_file_to_check[0]); - $mtime = $source->timestamp; - } - if (!$mtime || $mtime > $_file_to_check[1]) { - $is_valid = false; - break; - } - } - } - if ($cache) { - // CACHING_LIFETIME_SAVED cache expiry has to be validated here since otherwise we'd define the unifunc - if ($this->caching === Smarty::CACHING_LIFETIME_SAVED && - $this->properties['cache_lifetime'] >= 0 && - (time() > ($this->cached->timestamp + $this->properties['cache_lifetime'])) - ) { - $is_valid = false; - } - $this->cached->valid = $is_valid; - } else { - $this->mustCompile = !$is_valid; - } - // store data in reusable Smarty_Template_Compiled - if (!$cache) { - $this->compiled->_properties = $properties; - } - - return $is_valid; - } - - /** - * Template code runtime function to create a local Smarty variable for array assignments - * - * @param string $tpl_var tempate variable name - * @param bool $nocache cache mode of variable - * @param int $scope scope of variable - */ - public function createLocalArrayVariable($tpl_var, $nocache = false, $scope = Smarty::SCOPE_LOCAL) - { - if (!isset($this->tpl_vars[$tpl_var])) { - $this->tpl_vars[$tpl_var] = new Smarty_variable(array(), $nocache, $scope); - } else { - $this->tpl_vars[$tpl_var] = clone $this->tpl_vars[$tpl_var]; - if ($scope != Smarty::SCOPE_LOCAL) { - $this->tpl_vars[$tpl_var]->scope = $scope; - } - if (!(is_array($this->tpl_vars[$tpl_var]->value) || $this->tpl_vars[$tpl_var]->value instanceof ArrayAccess)) { - settype($this->tpl_vars[$tpl_var]->value, 'array'); - } - } - } - - /** - * Template code runtime function to get pointer to template variable array of requested scope - * - * @param int $scope requested variable scope - * - * @return array array of template variables - */ - public function &getScope($scope) - { - if ($scope == Smarty::SCOPE_PARENT && !empty($this->parent)) { - return $this->parent->tpl_vars; - } elseif ($scope == Smarty::SCOPE_ROOT && !empty($this->parent)) { - $ptr = $this->parent; - while (!empty($ptr->parent)) { - $ptr = $ptr->parent; - } - - return $ptr->tpl_vars; - } elseif ($scope == Smarty::SCOPE_GLOBAL) { - return Smarty::$global_tpl_vars; - } - $null = null; - - return $null; - } - - /** - * Get parent or root of template parent chain - * - * @param int $scope pqrent or root scope - * - * @return mixed object - */ - public function getScopePointer($scope) - { - if ($scope == Smarty::SCOPE_PARENT && !empty($this->parent)) { - return $this->parent; - } elseif ($scope == Smarty::SCOPE_ROOT && !empty($this->parent)) { - $ptr = $this->parent; - while (!empty($ptr->parent)) { - $ptr = $ptr->parent; - } - - return $ptr; - } - - return null; - } - - /** - * [util function] counts an array, arrayaccess/traversable or PDOStatement object - * - * @param mixed $value - * - * @return int the count for arrays and objects that implement countable, 1 for other objects that don't, and 0 for empty elements - */ - public function _count($value) - { - if (is_array($value) === true || $value instanceof Countable) { - return count($value); - } elseif ($value instanceof IteratorAggregate) { - // Note: getIterator() returns a Traversable, not an Iterator - // thus rewind() and valid() methods may not be present - return iterator_count($value->getIterator()); - } elseif ($value instanceof Iterator) { - return iterator_count($value); - } elseif ($value instanceof PDOStatement) { - return $value->rowCount(); - } elseif ($value instanceof Traversable) { - return iterator_count($value); - } elseif ($value instanceof ArrayAccess) { - if ($value->offsetExists(0)) { - return 1; - } - } elseif (is_object($value)) { - return count($value); - } - - return 0; - } - - /** - * runtime error not matching capture tags - - */ - public function capture_error() - { - throw new SmartyException("Not matching {capture} open/close in \"{$this->template_resource}\""); - } - - /** - * Empty cache for this template - * - * @param integer $exp_time expiration time - * - * @return integer number of cache files deleted - */ - public function clearCache($exp_time = null) - { - Smarty_CacheResource::invalidLoadedCache($this->smarty); - - return $this->cached->handler->clear($this->smarty, $this->template_name, $this->cache_id, $this->compile_id, $exp_time); - } - - /** - * set Smarty property in template context - * - * @param string $property_name property name - * @param mixed $value value - * - * @throws SmartyException - */ - public function __set($property_name, $value) - { - switch ($property_name) { - case 'source': - case 'compiled': - case 'cached': - case 'compiler': - $this->$property_name = $value; - - return; - - // FIXME: routing of template -> smarty attributes - default: - if (property_exists($this->smarty, $property_name)) { - $this->smarty->$property_name = $value; - - return; - } - } - - throw new SmartyException("invalid template property '$property_name'."); - } - - /** - * get Smarty property in template context - * - * @param string $property_name property name - * - * @throws SmartyException - */ - public function __get($property_name) - { - switch ($property_name) { - case 'source': - if (strlen($this->template_resource) == 0) { - throw new SmartyException('Missing template name'); - } - $this->source = Smarty_Resource::source($this); - // cache template object under a unique ID - // do not cache eval resources - if ($this->source->type != 'eval') { - if ($this->smarty->allow_ambiguous_resources) { - $_templateId = $this->source->unique_resource . $this->cache_id . $this->compile_id; - } else { - $_templateId = $this->smarty->joined_template_dir . '#' . $this->template_resource . $this->cache_id . $this->compile_id; - } - - if (isset($_templateId[150])) { - $_templateId = sha1($_templateId); - } - $this->smarty->template_objects[$_templateId] = $this; - } - - return $this->source; - - case 'compiled': - $this->compiled = $this->source->getCompiled($this); - - return $this->compiled; - - case 'cached': - if (!class_exists('Smarty_Template_Cached')) { - include SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php'; - } - $this->cached = new Smarty_Template_Cached($this); - - return $this->cached; - - case 'compiler': - $this->smarty->loadPlugin($this->source->compiler_class); - $this->compiler = new $this->source->compiler_class($this->source->template_lexer_class, $this->source->template_parser_class, $this->smarty); - - return $this->compiler; - - // FIXME: routing of template -> smarty attributes - default: - if (property_exists($this->smarty, $property_name)) { - return $this->smarty->$property_name; - } - } - - throw new SmartyException("template property '$property_name' does not exist."); - } - - /** - * Template data object destructor - - */ - public function __destruct() - { - if ($this->smarty->cache_locking && isset($this->cached) && $this->cached->is_locked) { - $this->cached->handler->releaseLock($this->smarty, $this->cached); - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_templatebase.php b/library/Smarty/libs/sysplugins/smarty_internal_templatebase.php deleted file mode 100644 index 955411f065..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_templatebase.php +++ /dev/null @@ -1,860 +0,0 @@ -template_class) { - $template = $this; - } - if ($cache_id !== null && is_object($cache_id)) { - $parent = $cache_id; - $cache_id = null; - } - if ($parent === null && ($this instanceof Smarty || is_string($template))) { - $parent = $this; - } - // create template object if necessary - $_template = ($template instanceof $this->template_class) - ? $template - : $this->smarty->createTemplate($template, $cache_id, $compile_id, $parent, false); - // if called by Smarty object make sure we use current caching status - if ($this instanceof Smarty) { - $_template->caching = $this->caching; - } - // merge all variable scopes into template - if ($merge_tpl_vars) { - // save local variables - $save_tpl_vars = $_template->tpl_vars; - $save_config_vars = $_template->config_vars; - $ptr_array = array($_template); - $ptr = $_template; - while (isset($ptr->parent)) { - $ptr_array[] = $ptr = $ptr->parent; - } - $ptr_array = array_reverse($ptr_array); - $parent_ptr = reset($ptr_array); - $tpl_vars = $parent_ptr->tpl_vars; - $config_vars = $parent_ptr->config_vars; - while ($parent_ptr = next($ptr_array)) { - if (!empty($parent_ptr->tpl_vars)) { - $tpl_vars = array_merge($tpl_vars, $parent_ptr->tpl_vars); - } - if (!empty($parent_ptr->config_vars)) { - $config_vars = array_merge($config_vars, $parent_ptr->config_vars); - } - } - if (!empty(Smarty::$global_tpl_vars)) { - $tpl_vars = array_merge(Smarty::$global_tpl_vars, $tpl_vars); - } - $_template->tpl_vars = $tpl_vars; - $_template->config_vars = $config_vars; - } - // dummy local smarty variable - if (!isset($_template->tpl_vars['smarty'])) { - $_template->tpl_vars['smarty'] = new Smarty_Variable; - } - if (isset($this->smarty->error_reporting)) { - $_smarty_old_error_level = error_reporting($this->smarty->error_reporting); - } - // check URL debugging control - if (!$this->smarty->debugging && $this->smarty->debugging_ctrl == 'URL') { - if (isset($_SERVER['QUERY_STRING'])) { - $_query_string = $_SERVER['QUERY_STRING']; - } else { - $_query_string = ''; - } - if (false !== strpos($_query_string, $this->smarty->smarty_debug_id)) { - if (false !== strpos($_query_string, $this->smarty->smarty_debug_id . '=on')) { - // enable debugging for this browser session - setcookie('SMARTY_DEBUG', true); - $this->smarty->debugging = true; - } elseif (false !== strpos($_query_string, $this->smarty->smarty_debug_id . '=off')) { - // disable debugging for this browser session - setcookie('SMARTY_DEBUG', false); - $this->smarty->debugging = false; - } else { - // enable debugging for this page - $this->smarty->debugging = true; - } - } else { - if (isset($_COOKIE['SMARTY_DEBUG'])) { - $this->smarty->debugging = true; - } - } - } - // must reset merge template date - $_template->smarty->merged_templates_func = array(); - // get rendered template - // disable caching for evaluated code - if ($_template->source->recompiled) { - $_template->caching = false; - } - // checks if template exists - if (!$_template->source->exists) { - if ($_template->parent instanceof Smarty_Internal_Template) { - $parent_resource = " in '{$_template->parent->template_resource}'"; - } else { - $parent_resource = ''; - } - throw new SmartyException("Unable to load template {$_template->source->type} '{$_template->source->name}'{$parent_resource}"); - } - // read from cache or render - if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || !$_template->cached->valid) { - // render template (not loaded and not in cache) - if (!$_template->source->uncompiled) { - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $_template; - if ($_template->source->recompiled) { - $code = $_template->compiler->compileTemplate($_template); - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_render($_template); - } - try { - ob_start(); - eval("?>" . $code); - unset($code); - } - catch (Exception $e) { - ob_get_clean(); - throw $e; - } - } else { - if (!$_template->compiled->exists || ($_template->smarty->force_compile && !$_template->compiled->isCompiled)) { - $_template->compileTemplateSource(); - $code = file_get_contents($_template->compiled->filepath); - eval("?>" . $code); - unset($code); - $_template->compiled->loaded = true; - $_template->compiled->isCompiled = true; - } - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_render($_template); - } - if (!$_template->compiled->loaded) { - include($_template->compiled->filepath); - if ($_template->mustCompile) { - // recompile and load again - $_template->compileTemplateSource(); - $code = file_get_contents($_template->compiled->filepath); - eval("?>" . $code); - unset($code); - $_template->compiled->isCompiled = true; - } - $_template->compiled->loaded = true; - } else { - $_template->decodeProperties($_template->compiled->_properties, false); - } - try { - ob_start(); - if (empty($_template->properties['unifunc']) || !is_callable($_template->properties['unifunc'])) { - throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'"); - } - array_unshift($_template->_capture_stack, array()); - // - // render compiled template - // - $_template->properties['unifunc']($_template); - // any unclosed {capture} tags ? - if (isset($_template->_capture_stack[0][0])) { - $_template->capture_error(); - } - array_shift($_template->_capture_stack); - } - catch (Exception $e) { - ob_get_clean(); - throw $e; - } - } - } else { - if ($_template->source->uncompiled) { - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_render($_template); - } - try { - ob_start(); - $_template->source->renderUncompiled($_template); - } - catch (Exception $e) { - ob_get_clean(); - throw $e; - } - } else { - throw new SmartyException("Resource '$_template->source->type' must have 'renderUncompiled' method"); - } - } - $_output = ob_get_clean(); - if (!$_template->source->recompiled && empty($_template->properties['file_dependency'][$_template->source->uid])) { - $_template->properties['file_dependency'][$_template->source->uid] = array($_template->source->filepath, $_template->source->timestamp, $_template->source->type); - } - if ($_template->parent instanceof Smarty_Internal_Template) { - $_template->parent->properties['file_dependency'] = array_merge($_template->parent->properties['file_dependency'], $_template->properties['file_dependency']); - foreach ($_template->required_plugins as $code => $tmp1) { - foreach ($tmp1 as $name => $tmp) { - foreach ($tmp as $type => $data) { - $_template->parent->required_plugins[$code][$name][$type] = $data; - } - } - } - } - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_render($_template); - } - // write to cache when nessecary - if (!$_template->source->recompiled && ($_template->caching == Smarty::CACHING_LIFETIME_SAVED || $_template->caching == Smarty::CACHING_LIFETIME_CURRENT)) { - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_cache($_template); - } - $_template->properties['has_nocache_code'] = false; - // get text between non-cached items - $cache_split = preg_split("!/\*%%SmartyNocache:{$_template->properties['nocache_hash']}%%\*\/(.+?)/\*/%%SmartyNocache:{$_template->properties['nocache_hash']}%%\*/!s", $_output); - // get non-cached items - preg_match_all("!/\*%%SmartyNocache:{$_template->properties['nocache_hash']}%%\*\/(.+?)/\*/%%SmartyNocache:{$_template->properties['nocache_hash']}%%\*/!s", $_output, $cache_parts); - $output = ''; - // loop over items, stitch back together - foreach ($cache_split as $curr_idx => $curr_split) { - // escape PHP tags in template content - $output .= preg_replace('/(<%|%>|<\?php|<\?|\?>)/', "\n", $curr_split); - if (isset($cache_parts[0][$curr_idx])) { - $_template->properties['has_nocache_code'] = true; - // remove nocache tags from cache output - $output .= preg_replace("!/\*/?%%SmartyNocache:{$_template->properties['nocache_hash']}%%\*/!", '', $cache_parts[0][$curr_idx]); - } - } - if (!$no_output_filter && !$_template->has_nocache_code && (isset($this->smarty->autoload_filters['output']) || isset($this->smarty->registered_filters['output']))) { - $output = Smarty_Internal_Filter_Handler::runFilter('output', $output, $_template); - } - // rendering (must be done before writing cache file because of {function} nocache handling) - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $_template; - try { - ob_start(); - eval("?>" . $output); - $_output = ob_get_clean(); - } - catch (Exception $e) { - ob_get_clean(); - throw $e; - } - // write cache file content - $_template->writeCachedContent($output); - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_cache($_template); - } - } else { - // var_dump('renderTemplate', $_template->has_nocache_code, $_template->template_resource, $_template->properties['nocache_hash'], $_template->parent->properties['nocache_hash'], $_output); - if (!empty($_template->properties['nocache_hash']) && !empty($_template->parent->properties['nocache_hash'])) { - // replace nocache_hash - $_output = str_replace("{$_template->properties['nocache_hash']}", $_template->parent->properties['nocache_hash'], $_output); - $_template->parent->has_nocache_code = $_template->parent->has_nocache_code || $_template->has_nocache_code; - } - } - } else { - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_cache($_template); - } - try { - ob_start(); - array_unshift($_template->_capture_stack, array()); - // - // render cached template - // - $_template->properties['unifunc']($_template); - // any unclosed {capture} tags ? - if (isset($_template->_capture_stack[0][0])) { - $_template->capture_error(); - } - array_shift($_template->_capture_stack); - $_output = ob_get_clean(); - } - catch (Exception $e) { - ob_get_clean(); - throw $e; - } - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_cache($_template); - } - } - if ((!$this->caching || $_template->has_nocache_code || $_template->source->recompiled) && !$no_output_filter && (isset($this->smarty->autoload_filters['output']) || isset($this->smarty->registered_filters['output']))) { - $_output = Smarty_Internal_Filter_Handler::runFilter('output', $_output, $_template); - } - if (isset($this->error_reporting)) { - error_reporting($_smarty_old_error_level); - } - // display or fetch - if ($display) { - if ($this->caching && $this->cache_modified_check) { - $_isCached = $_template->isCached() && !$_template->has_nocache_code; - $_last_modified_date = @substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 0, strpos($_SERVER['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3); - if ($_isCached && $_template->cached->timestamp <= strtotime($_last_modified_date)) { - switch (PHP_SAPI) { - case 'cgi': // php-cgi < 5.3 - case 'cgi-fcgi': // php-cgi >= 5.3 - case 'fpm-fcgi': // php-fpm >= 5.3.3 - header('Status: 304 Not Modified'); - break; - - case 'cli': - if ( /* ^phpunit */ - !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */ - ) { - $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified'; - } - break; - - default: - header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified'); - break; - } - } else { - switch (PHP_SAPI) { - case 'cli': - if ( /* ^phpunit */ - !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */ - ) { - $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $_template->cached->timestamp) . ' GMT'; - } - break; - - default: - header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $_template->cached->timestamp) . ' GMT'); - break; - } - echo $_output; - } - } else { - echo $_output; - } - // debug output - if ($this->smarty->debugging) { - Smarty_Internal_Debug::display_debug($_template); - } - if ($merge_tpl_vars) { - // restore local variables - $_template->tpl_vars = $save_tpl_vars; - $_template->config_vars = $save_config_vars; - } - - return; - } else { - if ($merge_tpl_vars) { - // restore local variables - $_template->tpl_vars = $save_tpl_vars; - $_template->config_vars = $save_config_vars; - } - // return fetched content - return $_output; - } - } - - /** - * displays a Smarty template - * - * @param string $template the resource handle of the template file or template object - * @param mixed $cache_id cache 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 - */ - public function display($template = null, $cache_id = null, $compile_id = null, $parent = null) - { - // display template - $this->fetch($template, $cache_id, $compile_id, $parent, true); - } - - /** - * test if cache is valid - * - * @param string|object $template the resource handle of the template file or template object - * @param mixed $cache_id cache 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 - * - * @return boolean cache status - */ - public function isCached($template = null, $cache_id = null, $compile_id = null, $parent = null) - { - if ($template === null && $this instanceof $this->template_class) { - return $this->cached->valid; - } - if (!($template instanceof $this->template_class)) { - if ($parent === null) { - $parent = $this; - } - $template = $this->smarty->createTemplate($template, $cache_id, $compile_id, $parent, false); - } - // return cache status of template - return $template->cached->valid; - } - - /** - * creates a data object - * - * @param object $parent next higher level of Smarty variables - * - * @returns Smarty_Data data object - */ - public function createData($parent = null) - { - return new Smarty_Data($parent, $this); - } - - /** - * Registers plugin to be used in templates - * - * @param string $type plugin type - * @param string $tag name of template tag - * @param callback $callback PHP callback to register - * @param boolean $cacheable if true (default) this fuction is cachable - * @param array $cache_attr caching attributes if any - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - * @throws SmartyException when the plugin tag is invalid - */ - public function registerPlugin($type, $tag, $callback, $cacheable = true, $cache_attr = null) - { - if (isset($this->smarty->registered_plugins[$type][$tag])) { - throw new SmartyException("Plugin tag \"{$tag}\" already registered"); - } elseif (!is_callable($callback)) { - throw new SmartyException("Plugin \"{$tag}\" not callable"); - } else { - $this->smarty->registered_plugins[$type][$tag] = array($callback, (bool) $cacheable, (array) $cache_attr); - } - - return $this; - } - - /** - * Unregister Plugin - * - * @param string $type of plugin - * @param string $tag name of plugin - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function unregisterPlugin($type, $tag) - { - if (isset($this->smarty->registered_plugins[$type][$tag])) { - unset($this->smarty->registered_plugins[$type][$tag]); - } - - return $this; - } - - /** - * Registers a resource to fetch a template - * - * @param string $type name of resource type - * @param Smarty_Resource|array $callback or instance of Smarty_Resource, or array of callbacks to handle resource (deprecated) - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function registerResource($type, $callback) - { - $this->smarty->registered_resources[$type] = $callback instanceof Smarty_Resource ? $callback : array($callback, false); - - return $this; - } - - /** - * Unregisters a resource - * - * @param string $type name of resource type - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function unregisterResource($type) - { - if (isset($this->smarty->registered_resources[$type])) { - unset($this->smarty->registered_resources[$type]); - } - - return $this; - } - - /** - * Registers a cache resource to cache a template's output - * - * @param string $type name of cache resource type - * @param Smarty_CacheResource $callback instance of Smarty_CacheResource to handle output caching - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function registerCacheResource($type, Smarty_CacheResource $callback) - { - $this->smarty->registered_cache_resources[$type] = $callback; - - return $this; - } - - /** - * Unregisters a cache resource - * - * @param string $type name of cache resource type - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function unregisterCacheResource($type) - { - if (isset($this->smarty->registered_cache_resources[$type])) { - unset($this->smarty->registered_cache_resources[$type]); - } - - return $this; - } - - /** - * Registers object to be used in templates - * - * @param $object_name - * @param object $object_impl the referenced PHP object to register - * @param array $allowed list of allowed methods (empty = all) - * @param boolean $smarty_args smarty argument format, else traditional - * @param array $block_methods list of block-methods - * - * @throws SmartyException - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function registerObject($object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) - { - // test if allowed methods callable - if (!empty($allowed)) { - foreach ((array) $allowed as $method) { - if (!is_callable(array($object_impl, $method)) && !property_exists($object_impl, $method)) { - throw new SmartyException("Undefined method or property '$method' in registered object"); - } - } - } - // test if block methods callable - if (!empty($block_methods)) { - foreach ((array) $block_methods as $method) { - if (!is_callable(array($object_impl, $method))) { - throw new SmartyException("Undefined method '$method' in registered object"); - } - } - } - // register the object - $this->smarty->registered_objects[$object_name] = - array($object_impl, (array) $allowed, (boolean) $smarty_args, (array) $block_methods); - - return $this; - } - - /** - * return a reference to a registered object - * - * @param string $name object name - * - * @return object - * @throws SmartyException if no such object is found - */ - public function getRegisteredObject($name) - { - if (!isset($this->smarty->registered_objects[$name])) { - throw new SmartyException("'$name' is not a registered object"); - } - if (!is_object($this->smarty->registered_objects[$name][0])) { - throw new SmartyException("registered '$name' is not an object"); - } - - return $this->smarty->registered_objects[$name][0]; - } - - /** - * unregister an object - * - * @param string $name object name - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function unregisterObject($name) - { - if (isset($this->smarty->registered_objects[$name])) { - unset($this->smarty->registered_objects[$name]); - } - - return $this; - } - - /** - * Registers static classes to be used in templates - * - * @param $class_name - * @param string $class_impl the referenced PHP class to register - * - * @throws SmartyException - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function registerClass($class_name, $class_impl) - { - // test if exists - if (!class_exists($class_impl)) { - throw new SmartyException("Undefined class '$class_impl' in register template class"); - } - // register the class - $this->smarty->registered_classes[$class_name] = $class_impl; - - return $this; - } - - /** - * Registers a default plugin handler - * - * @param callable $callback class/method name - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - * @throws SmartyException if $callback is not callable - */ - public function registerDefaultPluginHandler($callback) - { - if (is_callable($callback)) { - $this->smarty->default_plugin_handler_func = $callback; - } else { - throw new SmartyException("Default plugin handler '$callback' not callable"); - } - - return $this; - } - - /** - * Registers a default template handler - * - * @param callable $callback class/method name - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - * @throws SmartyException if $callback is not callable - */ - public function registerDefaultTemplateHandler($callback) - { - if (is_callable($callback)) { - $this->smarty->default_template_handler_func = $callback; - } else { - throw new SmartyException("Default template handler '$callback' not callable"); - } - - return $this; - } - - /** - * Registers a default template handler - * - * @param callable $callback class/method name - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - * @throws SmartyException if $callback is not callable - */ - public function registerDefaultConfigHandler($callback) - { - if (is_callable($callback)) { - $this->smarty->default_config_handler_func = $callback; - } else { - throw new SmartyException("Default config handler '$callback' not callable"); - } - - return $this; - } - - /** - * Registers a filter function - * - * @param string $type filter type - * @param callback $callback - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function registerFilter($type, $callback) - { - $this->smarty->registered_filters[$type][$this->_get_filter_name($callback)] = $callback; - - return $this; - } - - /** - * Unregisters a filter function - * - * @param string $type filter type - * @param callback $callback - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function unregisterFilter($type, $callback) - { - $name = $this->_get_filter_name($callback); - if (isset($this->smarty->registered_filters[$type][$name])) { - unset($this->smarty->registered_filters[$type][$name]); - } - - return $this; - } - - /** - * Return internal filter name - * - * @param callback $function_name - * - * @return string internal filter name - */ - public function _get_filter_name($function_name) - { - if (is_array($function_name)) { - $_class_name = (is_object($function_name[0]) ? - get_class($function_name[0]) : $function_name[0]); - - return $_class_name . '_' . $function_name[1]; - } else { - return $function_name; - } - } - - /** - * load a filter of specified type and name - * - * @param string $type filter type - * @param string $name filter name - * - * @throws SmartyException if filter could not be loaded - */ - public function loadFilter($type, $name) - { - $_plugin = "smarty_{$type}filter_{$name}"; - $_filter_name = $_plugin; - if ($this->smarty->loadPlugin($_plugin)) { - if (class_exists($_plugin, false)) { - $_plugin = array($_plugin, 'execute'); - } - if (is_callable($_plugin)) { - $this->smarty->registered_filters[$type][$_filter_name] = $_plugin; - - return true; - } - } - throw new SmartyException("{$type}filter \"{$name}\" not callable"); - } - - /** - * unload a filter of specified type and name - * - * @param string $type filter type - * @param string $name filter name - * - * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining - */ - public function unloadFilter($type, $name) - { - $_filter_name = "smarty_{$type}filter_{$name}"; - if (isset($this->smarty->registered_filters[$type][$_filter_name])) { - unset ($this->smarty->registered_filters[$type][$_filter_name]); - } - - return $this; - } - - /** - * preg_replace callback to convert camelcase getter/setter to underscore property names - * - * @param string $match match string - * - * @return string replacemant - */ - private function replaceCamelcase($match) - { - return "_" . strtolower($match[1]); - } - - /** - * Handle unknown class methods - * - * @param string $name unknown method-name - * @param array $args argument array - * - * @throws SmartyException - */ - public function __call($name, $args) - { - static $_prefixes = array('set' => true, 'get' => true); - static $_resolved_property_name = array(); - static $_resolved_property_source = array(); - - // method of Smarty object? - if (method_exists($this->smarty, $name)) { - return call_user_func_array(array($this->smarty, $name), $args); - } - // see if this is a set/get for a property - $first3 = strtolower(substr($name, 0, 3)); - if (isset($_prefixes[$first3]) && isset($name[3]) && $name[3] !== '_') { - if (isset($_resolved_property_name[$name])) { - $property_name = $_resolved_property_name[$name]; - } else { - // try to keep case correct for future PHP 6.0 case-sensitive class methods - // lcfirst() not available < PHP 5.3.0, so improvise - $property_name = strtolower(substr($name, 3, 1)) . substr($name, 4); - // convert camel case to underscored name - $property_name = preg_replace_callback('/([A-Z])/', array($this, 'replaceCamelcase'), $property_name); - $_resolved_property_name[$name] = $property_name; - } - if (isset($_resolved_property_source[$property_name])) { - $_is_this = $_resolved_property_source[$property_name]; - } else { - $_is_this = null; - if (property_exists($this, $property_name)) { - $_is_this = true; - } elseif (property_exists($this->smarty, $property_name)) { - $_is_this = false; - } - $_resolved_property_source[$property_name] = $_is_this; - } - if ($_is_this) { - if ($first3 == 'get') { - return $this->$property_name; - } else { - return $this->$property_name = $args[0]; - } - } elseif ($_is_this === false) { - if ($first3 == 'get') { - return $this->smarty->$property_name; - } else { - return $this->smarty->$property_name = $args[0]; - } - } else { - throw new SmartyException("property '$property_name' does not exist."); - } - } - if ($name == 'Smarty') { - throw new SmartyException("PHP5 requires you to call __construct() instead of Smarty()"); - } - // must be unknown - throw new SmartyException("Call of unknown method '$name'."); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php b/library/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php deleted file mode 100644 index d00bfb8f43..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php +++ /dev/null @@ -1,823 +0,0 @@ -nocache_hash = str_replace(array('.', ','), '-', uniqid(rand(), true)); - } - - /** - * Method to compile a Smarty template - * - * @param Smarty_Internal_Template $template template object to compile - * @param bool $nocache true is shall be compiled in nocache mode - * - * @return bool true if compiling succeeded, false if it failed - */ - public function compileTemplate(Smarty_Internal_Template $template, $nocache = false) - { - if (empty($template->properties['nocache_hash'])) { - $template->properties['nocache_hash'] = $this->nocache_hash; - } else { - $this->nocache_hash = $template->properties['nocache_hash']; - } - // flag for nochache sections - $this->nocache = $nocache; - $this->tag_nocache = false; - // save template object in compiler class - $this->template = $template; - // reset has nocache code flag - $this->template->has_nocache_code = false; - $save_source = $this->template->source; - // template header code - $template_header = ''; - if (!$this->suppressHeader) { - $template_header .= "template->source->filepath . "\" */ ?>\n"; - } - - if (empty($this->template->source->components)) { - $this->sources = array($template->source); - } else { - // we have array of inheritance templates by extends: resource - $this->sources = array_reverse($template->source->components); - } - $loop = 0; - // the $this->sources array can get additional elements while compiling by the {extends} tag - while ($this->template->source = array_shift($this->sources)) { - $this->smarty->_current_file = $this->template->source->filepath; - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_compile($this->template); - } - $no_sources = count($this->sources); - if ($loop || $no_sources) { - $this->template->properties['file_dependency'][$this->template->source->uid] = array($this->template->source->filepath, $this->template->source->timestamp, $this->template->source->type); - } - $loop ++; - if ($no_sources) { - $this->inheritance_child = true; - } else { - $this->inheritance_child = false; - } - do { - $_compiled_code = ''; - // flag for aborting current and start recompile - $this->abort_and_recompile = false; - // get template source - $_content = $this->template->source->content; - if ($_content != '') { - // run prefilter if required - if ((isset($this->smarty->autoload_filters['pre']) || isset($this->smarty->registered_filters['pre'])) && !$this->suppressFilter) { - $_content = Smarty_Internal_Filter_Handler::runFilter('pre', $_content, $template); - } - // call compiler - $_compiled_code = $this->doCompile($_content); - } - } while ($this->abort_and_recompile); - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_compile($this->template); - } - } - // restore source - $this->template->source = $save_source; - unset($save_source); - $this->smarty->_current_file = $this->template->source->filepath; - // free memory - unset($this->parser->root_buffer, $this->parser->current_buffer, $this->parser, $this->lex, $this->template); - self::$_tag_objects = array(); - // return compiled code to template object - $merged_code = ''; - if (!$this->suppressMergedTemplates && !empty($this->merged_templates)) { - foreach ($this->merged_templates as $code) { - $merged_code .= $code; - } - } - // run postfilter if required on compiled template code - if ((isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) && !$this->suppressFilter && $_compiled_code != '') { - $_compiled_code = Smarty_Internal_Filter_Handler::runFilter('post', $_compiled_code, $template); - } - if ($this->suppressTemplatePropertyHeader) { - $code = $_compiled_code . $merged_code; - } else { - $code = $template_header . $template->createTemplateCodeFrame($_compiled_code) . $merged_code; - } - // unset content because template inheritance could have replace source with parent code - unset ($template->source->content); - - return $code; - } - - /** - * Compile Tag - * This is a call back from the lexer/parser - * It executes the required compile plugin for the Smarty tag - * - * @param string $tag tag name - * @param array $args array with tag attributes - * @param array $parameter array with compilation parameter - * - * @throws SmartyCompilerException - * @throws SmartyException - * @return string compiled code - */ - public function compileTag($tag, $args, $parameter = array()) - { - // $args contains the attributes parsed and compiled by the lexer/parser - // assume that tag does compile into code, but creates no HTML output - $this->has_code = true; - $this->has_output = false; - // log tag/attributes - if (isset($this->smarty->get_used_tags) && $this->smarty->get_used_tags) { - $this->template->used_tags[] = array($tag, $args); - } - // check nocache option flag - if (in_array("'nocache'", $args) || in_array(array('nocache' => 'true'), $args) - || in_array(array('nocache' => '"true"'), $args) || in_array(array('nocache' => "'true'"), $args) - ) { - $this->tag_nocache = true; - } - // compile the smarty tag (required compile classes to compile the tag are autoloaded) - if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) { - if (isset($this->smarty->template_functions[$tag])) { - // template defined by {template} tag - $args['_attr']['name'] = "'" . $tag . "'"; - $_output = $this->callTagCompiler('call', $args, $parameter); - } - } - if ($_output !== false) { - if ($_output !== true) { - // did we get compiled code - if ($this->has_code) { - // Does it create output? - if ($this->has_output) { - $_output .= "\n"; - } - // return compiled code - return $_output; - } - } - // tag did not produce compiled code - return null; - } else { - // map_named attributes - if (isset($args['_attr'])) { - foreach ($args['_attr'] as $key => $attribute) { - if (is_array($attribute)) { - $args = array_merge($args, $attribute); - } - } - } - // not an internal compiler tag - if (strlen($tag) < 6 || substr($tag, - 5) != 'close') { - // check if tag is a registered object - if (isset($this->smarty->registered_objects[$tag]) && isset($parameter['object_method'])) { - $method = $parameter['object_method']; - if (!in_array($method, $this->smarty->registered_objects[$tag][3]) && - (empty($this->smarty->registered_objects[$tag][1]) || in_array($method, $this->smarty->registered_objects[$tag][1])) - ) { - return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $method); - } elseif (in_array($method, $this->smarty->registered_objects[$tag][3])) { - return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $method); - } else { - // throw exception - $this->trigger_template_error('not allowed method "' . $method . '" in registered object "' . $tag . '"', $this->lex->taglineno); - } - } - // check if tag is registered - foreach (array(Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK) as $plugin_type) { - if (isset($this->smarty->registered_plugins[$plugin_type][$tag])) { - // if compiler function plugin call it now - if ($plugin_type == Smarty::PLUGIN_COMPILER) { - $new_args = array(); - foreach ($args as $key => $mixed) { - if (is_array($mixed)) { - $new_args = array_merge($new_args, $mixed); - } else { - $new_args[$key] = $mixed; - } - } - if (!$this->smarty->registered_plugins[$plugin_type][$tag][1]) { - $this->tag_nocache = true; - } - $function = $this->smarty->registered_plugins[$plugin_type][$tag][0]; - if (!is_array($function)) { - return $function($new_args, $this); - } elseif (is_object($function[0])) { - return $this->smarty->registered_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this); - } else { - return call_user_func_array($function, array($new_args, $this)); - } - } - // compile registered function or block function - if ($plugin_type == Smarty::PLUGIN_FUNCTION || $plugin_type == Smarty::PLUGIN_BLOCK) { - return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag); - } - } - } - // check plugins from plugins folder - foreach ($this->smarty->plugin_search_order as $plugin_type) { - if ($plugin_type == Smarty::PLUGIN_COMPILER && $this->smarty->loadPlugin('smarty_compiler_' . $tag) && (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))) { - $plugin = 'smarty_compiler_' . $tag; - if (is_callable($plugin)) { - // convert arguments format for old compiler plugins - $new_args = array(); - foreach ($args as $key => $mixed) { - if (is_array($mixed)) { - $new_args = array_merge($new_args, $mixed); - } else { - $new_args[$key] = $mixed; - } - } - - return $plugin($new_args, $this->smarty); - } - if (class_exists($plugin, false)) { - $plugin_object = new $plugin; - if (method_exists($plugin_object, 'compile')) { - return $plugin_object->compile($args, $this); - } - } - throw new SmartyException("Plugin \"{$tag}\" not callable"); - } else { - if ($function = $this->getPlugin($tag, $plugin_type)) { - if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) { - return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $parameter, $tag, $function); - } - } - } - } - if (is_callable($this->smarty->default_plugin_handler_func)) { - $found = false; - // look for already resolved tags - foreach ($this->smarty->plugin_search_order as $plugin_type) { - if (isset($this->default_handler_plugins[$plugin_type][$tag])) { - $found = true; - break; - } - } - if (!$found) { - // call default handler - foreach ($this->smarty->plugin_search_order as $plugin_type) { - if ($this->getPluginFromDefaultHandler($tag, $plugin_type)) { - $found = true; - break; - } - } - } - if ($found) { - // if compiler function plugin call it now - if ($plugin_type == Smarty::PLUGIN_COMPILER) { - $new_args = array(); - foreach ($args as $mixed) { - $new_args = array_merge($new_args, $mixed); - } - $function = $this->default_handler_plugins[$plugin_type][$tag][0]; - if (!is_array($function)) { - return $function($new_args, $this); - } elseif (is_object($function[0])) { - return $this->default_handler_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this); - } else { - return call_user_func_array($function, array($new_args, $this)); - } - } else { - return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag); - } - } - } - } else { - // compile closing tag of block function - $base_tag = substr($tag, 0, - 5); - // check if closing tag is a registered object - if (isset($this->smarty->registered_objects[$base_tag]) && isset($parameter['object_method'])) { - $method = $parameter['object_method']; - if (in_array($method, $this->smarty->registered_objects[$base_tag][3])) { - return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $method); - } else { - // throw exception - $this->trigger_template_error('not allowed closing tag method "' . $method . '" in registered object "' . $base_tag . '"', $this->lex->taglineno); - } - } - // registered block tag ? - if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag]) || isset($this->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) { - return $this->callTagCompiler('private_registered_block', $args, $parameter, $tag); - } - // block plugin? - if ($function = $this->getPlugin($base_tag, Smarty::PLUGIN_BLOCK)) { - return $this->callTagCompiler('private_block_plugin', $args, $parameter, $tag, $function); - } - // registered compiler plugin ? - if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag])) { - // if compiler function plugin call it now - $args = array(); - if (!$this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][1]) { - $this->tag_nocache = true; - } - $function = $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0]; - if (!is_array($function)) { - return $function($args, $this); - } elseif (is_object($function[0])) { - return $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0][0]->$function[1]($args, $this); - } else { - return call_user_func_array($function, array($args, $this)); - } - } - if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) { - $plugin = 'smarty_compiler_' . $tag; - if (is_callable($plugin)) { - return $plugin($args, $this->smarty); - } - if (class_exists($plugin, false)) { - $plugin_object = new $plugin; - if (method_exists($plugin_object, 'compile')) { - return $plugin_object->compile($args, $this); - } - } - throw new SmartyException("Plugin \"{$tag}\" not callable"); - } - } - $this->trigger_template_error("unknown tag \"" . $tag . "\"", $this->lex->taglineno); - } - } - - /** - * lazy loads internal compile plugin for tag and calls the compile method - * compile objects cached for reuse. - * class name format: Smarty_Internal_Compile_TagName - * plugin filename format: Smarty_Internal_Tagname.php - * - * @param string $tag tag name - * @param array $args list of tag attributes - * @param mixed $param1 optional parameter - * @param mixed $param2 optional parameter - * @param mixed $param3 optional parameter - * - * @return string compiled code - */ - public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null) - { - // re-use object if already exists - if (isset(self::$_tag_objects[$tag])) { - // compile this tag - return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3); - } - // lazy load internal compiler plugin - $class_name = 'Smarty_Internal_Compile_' . $tag; - if ($this->smarty->loadPlugin($class_name)) { - // check if tag allowed by security - if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) { - // use plugin if found - self::$_tag_objects[$tag] = new $class_name; - // compile this tag - return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3); - } - } - // no internal compile plugin for this tag - return false; - } - - /** - * Check for plugins and return function name - * - * @param $plugin_name - * @param string $plugin_type type of plugin - * - * @return string call name of function - */ - public function getPlugin($plugin_name, $plugin_type) - { - $function = null; - if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { - if (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) { - $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function']; - } elseif (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) { - $this->template->required_plugins['nocache'][$plugin_name][$plugin_type] = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]; - $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function']; - } - } else { - if (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) { - $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function']; - } elseif (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) { - $this->template->required_plugins['compiled'][$plugin_name][$plugin_type] = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]; - $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function']; - } - } - if (isset($function)) { - if ($plugin_type == 'modifier') { - $this->modifier_plugins[$plugin_name] = true; - } - - return $function; - } - // loop through plugin dirs and find the plugin - $function = 'smarty_' . $plugin_type . '_' . $plugin_name; - $file = $this->smarty->loadPlugin($function, false); - - if (is_string($file)) { - if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { - $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['file'] = $file; - $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'] = $function; - } else { - $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['file'] = $file; - $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'] = $function; - } - if ($plugin_type == 'modifier') { - $this->modifier_plugins[$plugin_name] = true; - } - - return $function; - } - if (is_callable($function)) { - // plugin function is defined in the script - return $function; - } - - return false; - } - - /** - * Check for plugins by default plugin handler - * - * @param string $tag name of tag - * @param string $plugin_type type of plugin - * - * @return boolean true if found - */ - public function getPluginFromDefaultHandler($tag, $plugin_type) - { - $callback = null; - $script = null; - $cacheable = true; - $result = call_user_func_array( - $this->smarty->default_plugin_handler_func, array($tag, $plugin_type, $this->template, &$callback, &$script, &$cacheable) - ); - if ($result) { - $this->tag_nocache = $this->tag_nocache || !$cacheable; - if ($script !== null) { - if (is_file($script)) { - if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { - $this->template->required_plugins['nocache'][$tag][$plugin_type]['file'] = $script; - $this->template->required_plugins['nocache'][$tag][$plugin_type]['function'] = $callback; - } else { - $this->template->required_plugins['compiled'][$tag][$plugin_type]['file'] = $script; - $this->template->required_plugins['compiled'][$tag][$plugin_type]['function'] = $callback; - } - include_once $script; - } else { - $this->trigger_template_error("Default plugin handler: Returned script file \"{$script}\" for \"{$tag}\" not found"); - } - } - if (!is_string($callback) && !(is_array($callback) && is_string($callback[0]) && is_string($callback[1]))) { - $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" must be a static function name or array of class and function name"); - } - if (is_callable($callback)) { - $this->default_handler_plugins[$plugin_type][$tag] = array($callback, true, array()); - - return true; - } else { - $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" not callable"); - } - } - - return false; - } - - /** - * Inject inline code for nocache template sections - * This method gets the content of each template element from the parser. - * If the content is compiled code and it should be not cached the code is injected - * into the rendered output. - * - * @param string $content content of template element - * @param boolean $is_code true if content is compiled code - * - * @return string content - */ - public function processNocacheCode($content, $is_code) - { - // If the template is not evaluated and we have a nocache section and or a nocache tag - if ($is_code && !empty($content)) { - // generate replacement code - if ((!($this->template->source->recompiled) || $this->forceNocache) && $this->template->caching && !$this->suppressNocacheProcessing && - ($this->nocache || $this->tag_nocache) - ) { - $this->template->has_nocache_code = true; - $_output = addcslashes($content, '\'\\'); - $_output = str_replace("^#^", "'", $_output); - $_output = "nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n"; - // make sure we include modifier plugins for nocache code - foreach ($this->modifier_plugins as $plugin_name => $dummy) { - if (isset($this->template->required_plugins['compiled'][$plugin_name]['modifier'])) { - $this->template->required_plugins['nocache'][$plugin_name]['modifier'] = $this->template->required_plugins['compiled'][$plugin_name]['modifier']; - } - } - } else { - $_output = $content; - } - } else { - $_output = $content; - } - $this->modifier_plugins = array(); - $this->suppressNocacheProcessing = false; - $this->tag_nocache = false; - - return $_output; - } - - /** - * push current file and line offset on stack for tracing {block} source lines - * - * @param string $file new filename - * @param string $uid uid of file - * @param int $line line offset to source - * @param bool $debug false debug end_compile shall not be called - */ - public function pushTrace($file, $uid, $line, $debug = true) - { - if ($this->smarty->debugging && $debug) { - Smarty_Internal_Debug::end_compile($this->template); - } - array_push($this->trace_stack, array($this->smarty->_current_file, $this->trace_filepath, $this->trace_uid, $this->trace_line_offset)); - $this->trace_filepath = $this->smarty->_current_file = $file; - $this->trace_uid = $uid; - $this->trace_line_offset = $line; - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_compile($this->template); - } - } - - /** - * restore file and line offset - - */ - public function popTrace() - { - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_compile($this->template); - } - $r = array_pop($this->trace_stack); - $this->smarty->_current_file = $r[0]; - $this->trace_filepath = $r[1]; - $this->trace_uid = $r[2]; - $this->trace_line_offset = $r[3]; - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_compile($this->template); - } - } - - /** - * display compiler error messages without dying - * If parameter $args is empty it is a parser detected syntax error. - * 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 - * - * @param string $args individual error message or null - * @param string $line line-number - * - * @throws SmartyCompilerException when an unexpected token is found - */ - public function trigger_template_error($args = null, $line = null) - { - // get template source line which has error - if (!isset($line)) { - $line = $this->lex->line; - } - // $line += $this->trace_line_offset; - $match = preg_split("/\n/", $this->lex->data); - $error_text = 'Syntax error in template "' . (empty($this->trace_filepath) ? $this->template->source->filepath : $this->trace_filepath) . '" on line ' . ($line + $this->trace_line_offset) . ' "' . trim(preg_replace('![\t\r\n]+!', ' ', $match[$line - 1])) . '" '; - if (isset($args)) { - // individual error message - $error_text .= $args; - } else { - // expected token from parser - $error_text .= ' - Unexpected "' . $this->lex->value . '"'; - if (count($this->parser->yy_get_expected_tokens($this->parser->yymajor)) <= 4) { - foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) { - $exp_token = $this->parser->yyTokenName[$token]; - if (isset($this->lex->smarty_token_names[$exp_token])) { - // token type from lexer - $expect[] = '"' . $this->lex->smarty_token_names[$exp_token] . '"'; - } else { - // otherwise internal token name - $expect[] = $this->parser->yyTokenName[$token]; - } - } - $error_text .= ', expected one of: ' . implode(' , ', $expect); - } - } - $e = new SmartyCompilerException($error_text); - $e->line = $line; - $e->source = trim(preg_replace('![\t\r\n]+!', ' ', $match[$line - 1])); - $e->desc = $args; - $e->template = $this->template->source->filepath; - throw $e; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_templatelexer.php b/library/Smarty/libs/sysplugins/smarty_internal_templatelexer.php deleted file mode 100644 index a94b5f1e3e..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_templatelexer.php +++ /dev/null @@ -1,1557 +0,0 @@ - 'TEXT', 2 => 'SMARTY', 3 => 'LITERAL', 4 => 'DOUBLEQUOTEDSTRING', 5 => 'CHILDBODY'); - public $smarty_token_names = array( // Text for parser error messages - 'IDENTITY' => '===', - 'NONEIDENTITY' => '!==', - 'EQUALS' => '==', - 'NOTEQUALS' => '!=', - 'GREATEREQUAL' => '(>=,ge)', - 'LESSEQUAL' => '(<=,le)', - 'GREATERTHAN' => '(>,gt)', - 'LESSTHAN' => '(<,lt)', - 'MOD' => '(%,mod)', - 'NOT' => '(!,not)', - 'LAND' => '(&&,and)', - 'LOR' => '(||,or)', - 'LXOR' => 'xor', - 'OPENP' => '(', - 'CLOSEP' => ')', - 'OPENB' => '[', - 'CLOSEB' => ']', - 'PTR' => '->', - 'APTR' => '=>', - 'EQUAL' => '=', - 'NUMBER' => 'number', - 'UNIMATH' => '+" , "-', - 'MATH' => '*" , "/" , "%', - 'INCDEC' => '++" , "--', - 'SPACE' => ' ', - 'DOLLAR' => '$', - 'SEMICOLON' => ';', - 'COLON' => ':', - 'DOUBLECOLON' => '::', - 'AT' => '@', - 'HATCH' => '#', - 'QUOTE' => '"', - 'BACKTICK' => '`', - 'VERT' => '|', - 'DOT' => '.', - 'COMMA' => '","', - 'ANDSYM' => '"&"', - 'QMARK' => '"?"', - 'ID' => 'identifier', - 'TEXT' => 'text', - 'FAKEPHPSTARTTAG' => 'Fake PHP start tag', - 'PHPSTARTTAG' => 'PHP start tag', - 'PHPENDTAG' => 'PHP end tag', - 'LITERALSTART' => 'Literal start', - 'LITERALEND' => 'Literal end', - 'LDELSLASH' => 'closing tag', - 'COMMENT' => 'comment', - 'AS' => 'as', - 'TO' => 'to', - ); - - function __construct($data, $compiler) - { - // $this->data = preg_replace("/(\r\n|\r|\n)/", "\n", $data); - $this->data = $data; - $this->counter = 0; - $this->line = 1; - $this->smarty = $compiler->smarty; - $this->compiler = $compiler; - $this->ldel = preg_quote($this->smarty->left_delimiter, '/'); - $this->ldel_length = strlen($this->smarty->left_delimiter); - $this->rdel = preg_quote($this->smarty->right_delimiter, '/'); - $this->rdel_length = strlen($this->smarty->right_delimiter); - $this->smarty_token_names['LDEL'] = $this->smarty->left_delimiter; - $this->smarty_token_names['RDEL'] = $this->smarty->right_delimiter; - } - - public function PrintTrace() - { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '
'; - } - - private $_yy_state = 1; - private $_yy_stack = array(); - - public function yylex() - { - return $this->{'yylex' . $this->_yy_state}(); - } - - public function yypushstate($state) - { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - array_push($this->_yy_stack, $this->_yy_state); - $this->_yy_state = $state; - 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); - } - } - - public function yypopstate() - { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - $this->_yy_state = array_pop($this->_yy_stack); - 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); - } - } - - public function yybegin($state) - { - $this->_yy_state = $state; - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - } - - public function yylex1() - { - $tokenMap = array( - 1 => 0, - 2 => 1, - 4 => 0, - 5 => 0, - 6 => 0, - 7 => 1, - 9 => 0, - 10 => 0, - 11 => 0, - 12 => 0, - 13 => 0, - 14 => 0, - 15 => 0, - 16 => 0, - 17 => 0, - 18 => 0, - 19 => 0, - ); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - $yy_global_pattern = "/\G(\\{\\})|\G(" . $this->ldel . "\\*([\S\s]*?)\\*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*setfilter\\s+)|\G(" . $this->ldel . "\\s*\/)|\G(" . $this->ldel . "\\s*)|\G(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|\G(\\?>)|\G(\\s*" . $this->rdel . ")|\G(<%)|\G(%>)|\G([\S\s])/iS"; - - do { - if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns - if (!count($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state TEXT'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - if ($tokenMap[$this->token]) { - // extract sub-patterns for passing to lex function - $yysubmatches = array_slice($yysubmatches, $this->token + 1, - $tokenMap[$this->token]); - } else { - $yysubmatches = array(); - } - $this->value = current($yymatches); // token value - $r = $this->{'yy_r1_' . $this->token}($yysubmatches); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . - ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const TEXT = 1; - - function yy_r1_1($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r1_2($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_COMMENT; - } - - function yy_r1_4($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_STRIPON; - } - } - - function yy_r1_5($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF; - } - } - - function yy_r1_6($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; - $this->yypushstate(self::LITERAL); - } - } - - function yy_r1_7($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELIF; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r1_9($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELFOR; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r1_10($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r1_11($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r1_12($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r1_13($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r1_14($yy_subpatterns) - { - - if (in_array($this->value, Array('token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG; - } elseif ($this->value == 'token = Smarty_Internal_Templateparser::TP_XMLTAG; - } else { - $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG; - $this->value = substr($this->value, 0, 2); - } - } - - function yy_r1_15($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG; - } - - function yy_r1_16($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r1_17($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG; - } - - function yy_r1_18($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG; - } - - function yy_r1_19($yy_subpatterns) - { - - $to = strlen($this->data); - preg_match("/{$this->ldel}|<\?|\?>|<%|%>/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - public function yylex2() - { - $tokenMap = array( - 1 => 0, - 2 => 0, - 3 => 1, - 5 => 0, - 6 => 0, - 7 => 0, - 8 => 0, - 9 => 0, - 10 => 0, - 11 => 0, - 12 => 0, - 13 => 0, - 14 => 0, - 15 => 1, - 17 => 1, - 19 => 1, - 21 => 0, - 22 => 0, - 23 => 0, - 24 => 0, - 25 => 0, - 26 => 0, - 27 => 0, - 28 => 0, - 29 => 0, - 30 => 0, - 31 => 0, - 32 => 0, - 33 => 0, - 34 => 0, - 35 => 0, - 36 => 0, - 37 => 0, - 38 => 3, - 42 => 0, - 43 => 0, - 44 => 0, - 45 => 0, - 46 => 0, - 47 => 0, - 48 => 0, - 49 => 0, - 50 => 1, - 52 => 1, - 54 => 0, - 55 => 0, - 56 => 0, - 57 => 0, - 58 => 0, - 59 => 0, - 60 => 0, - 61 => 0, - 62 => 0, - 63 => 0, - 64 => 0, - 65 => 0, - 66 => 0, - 67 => 0, - 68 => 0, - 69 => 0, - 70 => 1, - 72 => 0, - 73 => 0, - 74 => 0, - 75 => 0, - 76 => 0, - ); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - $yy_global_pattern = "/\G(\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$]smarty\\.block\\.(child|parent))|\G(\\$)|\G(\\s*" . $this->rdel . ")|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*===\\s*)|\G(\\s*!==\\s*)|\G(\\s*==\\s*|\\s+eq\\s+)|\G(\\s*!=\\s*|\\s*<>\\s*|\\s+(ne|neq)\\s+)|\G(\\s*>=\\s*|\\s+(ge|gte)\\s+)|\G(\\s*<=\\s*|\\s+(le|lte)\\s+)|\G(\\s*>\\s*|\\s+gt\\s+)|\G(\\s*<\\s*|\\s+lt\\s+)|\G(\\s+mod\\s+)|\G(!\\s*|not\\s+)|\G(\\s*&&\\s*|\\s*and\\s+)|\G(\\s*\\|\\|\\s*|\\s*or\\s+)|\G(\\s*xor\\s+)|\G(\\s+is\\s+odd\\s+by\\s+)|\G(\\s+is\\s+not\\s+odd\\s+by\\s+)|\G(\\s+is\\s+odd)|\G(\\s+is\\s+not\\s+odd)|\G(\\s+is\\s+even\\s+by\\s+)|\G(\\s+is\\s+not\\s+even\\s+by\\s+)|\G(\\s+is\\s+even)|\G(\\s+is\\s+not\\s+even)|\G(\\s+is\\s+div\\s+by\\s+)|\G(\\s+is\\s+not\\s+div\\s+by\\s+)|\G(\\((int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)\\)\\s*)|\G(\\s*\\(\\s*)|\G(\\s*\\))|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*->\\s*)|\G(\\s*=>\\s*)|\G(\\s*=\\s*)|\G(\\+\\+|--)|\G(\\s*(\\+|-)\\s*)|\G(\\s*(\\*|\/|%)\\s*)|\G(@)|\G(#)|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*=\\s*)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G(`)|\G(\\|)|\G(\\.)|\G(\\s*,\\s*)|\G(\\s*;)|\G(::)|\G(\\s*:\\s*)|\G(\\s*&\\s*)|\G(\\s*\\?\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*\/)|\G(" . $this->ldel . "\\s*)|\G([\S\s])/iS"; - - do { - if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns - if (!count($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state SMARTY'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - if ($tokenMap[$this->token]) { - // extract sub-patterns for passing to lex function - $yysubmatches = array_slice($yysubmatches, $this->token + 1, - $tokenMap[$this->token]); - } else { - $yysubmatches = array(); - } - $this->value = current($yymatches); // token value - $r = $this->{'yy_r2_' . $this->token}($yysubmatches); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . - ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const SMARTY = 2; - - function yy_r2_1($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_QUOTE; - $this->yypushstate(self::DOUBLEQUOTEDSTRING); - } - - function yy_r2_2($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING; - } - - function yy_r2_3($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT; - $this->taglineno = $this->line; - } - - function yy_r2_5($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_DOLLAR; - } - - function yy_r2_6($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_RDEL; - $this->yypopstate(); - } - - function yy_r2_7($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ISIN; - } - - function yy_r2_8($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_AS; - } - - function yy_r2_9($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_TO; - } - - function yy_r2_10($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_STEP; - } - - function yy_r2_11($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF; - } - - function yy_r2_12($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_IDENTITY; - } - - function yy_r2_13($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_NONEIDENTITY; - } - - function yy_r2_14($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_EQUALS; - } - - function yy_r2_15($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_NOTEQUALS; - } - - function yy_r2_17($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_GREATEREQUAL; - } - - function yy_r2_19($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_LESSEQUAL; - } - - function yy_r2_21($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_GREATERTHAN; - } - - function yy_r2_22($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_LESSTHAN; - } - - function yy_r2_23($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_MOD; - } - - function yy_r2_24($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_NOT; - } - - function yy_r2_25($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_LAND; - } - - function yy_r2_26($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_LOR; - } - - function yy_r2_27($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_LXOR; - } - - function yy_r2_28($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ISODDBY; - } - - function yy_r2_29($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ISNOTODDBY; - } - - function yy_r2_30($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ISODD; - } - - function yy_r2_31($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ISNOTODD; - } - - function yy_r2_32($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ISEVENBY; - } - - function yy_r2_33($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVENBY; - } - - function yy_r2_34($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ISEVEN; - } - - function yy_r2_35($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVEN; - } - - function yy_r2_36($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ISDIVBY; - } - - function yy_r2_37($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ISNOTDIVBY; - } - - function yy_r2_38($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_TYPECAST; - } - - function yy_r2_42($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_OPENP; - } - - function yy_r2_43($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_CLOSEP; - } - - function yy_r2_44($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_OPENB; - } - - function yy_r2_45($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_CLOSEB; - } - - function yy_r2_46($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_PTR; - } - - function yy_r2_47($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_APTR; - } - - function yy_r2_48($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_EQUAL; - } - - function yy_r2_49($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_INCDEC; - } - - function yy_r2_50($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_UNIMATH; - } - - function yy_r2_52($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_MATH; - } - - function yy_r2_54($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_AT; - } - - function yy_r2_55($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_HATCH; - } - - function yy_r2_56($yy_subpatterns) - { - - // resolve conflicts with shorttag and right_delimiter starting with '=' - if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->rdel_length) == $this->smarty->right_delimiter) { - preg_match("/\s+/", $this->value, $match); - $this->value = $match[0]; - $this->token = Smarty_Internal_Templateparser::TP_SPACE; - } else { - $this->token = Smarty_Internal_Templateparser::TP_ATTR; - } - } - - function yy_r2_57($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ID; - } - - function yy_r2_58($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_INTEGER; - } - - function yy_r2_59($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; - $this->yypopstate(); - } - - function yy_r2_60($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_VERT; - } - - function yy_r2_61($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_DOT; - } - - function yy_r2_62($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_COMMA; - } - - function yy_r2_63($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON; - } - - function yy_r2_64($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON; - } - - function yy_r2_65($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_COLON; - } - - function yy_r2_66($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ANDSYM; - } - - function yy_r2_67($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_QMARK; - } - - function yy_r2_68($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_HEX; - } - - function yy_r2_69($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_SPACE; - } - - function yy_r2_70($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELIF; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r2_72($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELFOR; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r2_73($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r2_74($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r2_75($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r2_76($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - public function yylex3() - { - $tokenMap = array( - 1 => 0, - 2 => 0, - 3 => 0, - 4 => 0, - 5 => 0, - 6 => 0, - 7 => 0, - ); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - $yy_global_pattern = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/literal\\s*" . $this->rdel . ")|\G(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|\G(\\?>)|\G(<%)|\G(%>)|\G([\S\s])/iS"; - - do { - if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns - if (!count($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state LITERAL'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - if ($tokenMap[$this->token]) { - // extract sub-patterns for passing to lex function - $yysubmatches = array_slice($yysubmatches, $this->token + 1, - $tokenMap[$this->token]); - } else { - $yysubmatches = array(); - } - $this->value = current($yymatches); // token value - $r = $this->{'yy_r3_' . $this->token}($yysubmatches); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . - ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const LITERAL = 3; - - function yy_r3_1($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; - $this->yypushstate(self::LITERAL); - } - } - - function yy_r3_2($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LITERALEND; - $this->yypopstate(); - } - } - - function yy_r3_3($yy_subpatterns) - { - - if (in_array($this->value, Array('token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG; - } else { - $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG; - $this->value = substr($this->value, 0, 2); - } - } - - function yy_r3_4($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG; - } - - function yy_r3_5($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG; - } - - function yy_r3_6($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG; - } - - function yy_r3_7($yy_subpatterns) - { - - $to = strlen($this->data); - preg_match("/{$this->ldel}\/?literal{$this->rdel}|<\?|<%|\?>|%>/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } else { - $this->compiler->trigger_template_error("missing or misspelled literal closing tag"); - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } - - public function yylex4() - { - $tokenMap = array( - 1 => 1, - 3 => 0, - 4 => 0, - 5 => 0, - 6 => 0, - 7 => 0, - 8 => 0, - 9 => 0, - 10 => 0, - 11 => 3, - 15 => 0, - ); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - $yy_global_pattern = "/\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*\/)|\G(" . $this->ldel . "\\s*)|\G(\")|\G(`\\$)|\G(\\$[0-9]*[a-zA-Z_]\\w*)|\G(\\$)|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(" . $this->ldel . "|\\$|`\\$|\")))|\G([\S\s])/iS"; - - do { - if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns - if (!count($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state DOUBLEQUOTEDSTRING'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - if ($tokenMap[$this->token]) { - // extract sub-patterns for passing to lex function - $yysubmatches = array_slice($yysubmatches, $this->token + 1, - $tokenMap[$this->token]); - } else { - $yysubmatches = array(); - } - $this->value = current($yymatches); // token value - $r = $this->{'yy_r4_' . $this->token}($yysubmatches); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . - ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const DOUBLEQUOTEDSTRING = 4; - - function yy_r4_1($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELIF; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r4_3($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELFOR; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r4_4($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r4_5($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r4_6($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - - function yy_r4_7($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_QUOTE; - $this->yypopstate(); - } - - function yy_r4_8($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; - $this->value = substr($this->value, 0, - 1); - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - - function yy_r4_9($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; - } - - function yy_r4_10($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r4_11($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r4_15($yy_subpatterns) - { - - $to = strlen($this->data); - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - public function yylex5() - { - $tokenMap = array( - 1 => 0, - 2 => 0, - 3 => 0, - 4 => 0, - ); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - $yy_global_pattern = "/\G(" . $this->ldel . "\\s*strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*block)|\G([\S\s])/iS"; - - do { - if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns - if (!count($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state CHILDBODY'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - if ($tokenMap[$this->token]) { - // extract sub-patterns for passing to lex function - $yysubmatches = array_slice($yysubmatches, $this->token + 1, - $tokenMap[$this->token]); - } else { - $yysubmatches = array(); - } - $this->value = current($yymatches); // token value - $r = $this->{'yy_r5_' . $this->token}($yysubmatches); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . - ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const CHILDBODY = 5; - - function yy_r5_1($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - return false; - } else { - $this->token = Smarty_Internal_Templateparser::TP_STRIPON; - } - } - - function yy_r5_2($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - return false; - } else { - $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF; - } - } - - function yy_r5_3($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - return false; - } else { - $this->yypopstate(); - return true; - } - } - - function yy_r5_4($yy_subpatterns) - { - - $to = strlen($this->data); - preg_match("/" . $this->ldel . "\s*((\/)?strip\s*" . $this->rdel . "|block\s+)/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - return false; - } - - public function yylex6() - { - $tokenMap = array( - 1 => 0, - 2 => 0, - 3 => 0, - 4 => 1, - 6 => 0, - ); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - $yy_global_pattern = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*block)|\G(" . $this->ldel . "\\s*\/block)|\G(" . $this->ldel . "\\s*[$]smarty\\.block\\.(child|parent))|\G([\S\s])/iS"; - - do { - if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns - if (!count($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state CHILDBLOCK'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - if ($tokenMap[$this->token]) { - // extract sub-patterns for passing to lex function - $yysubmatches = array_slice($yysubmatches, $this->token + 1, - $tokenMap[$this->token]); - } else { - $yysubmatches = array(); - } - $this->value = current($yymatches); // token value - $r = $this->{'yy_r6_' . $this->token}($yysubmatches); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . - ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const CHILDBLOCK = 6; - - function yy_r6_1($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - $this->yypushstate(self::CHILDLITERAL); - } - } - - function yy_r6_2($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->yypopstate(); - return true; - } - } - - function yy_r6_3($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->yypopstate(); - return true; - } - } - - function yy_r6_4($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->yypopstate(); - return true; - } - } - - function yy_r6_6($yy_subpatterns) - { - - $to = strlen($this->data); - preg_match("/" . $this->ldel . "\s*(literal\s*" . $this->rdel . "|(\/)?block(\s|" . $this->rdel . ")|[\$]smarty\.block\.(child|parent))/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } - - public function yylex7() - { - $tokenMap = array( - 1 => 0, - 2 => 0, - 3 => 0, - ); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - $yy_global_pattern = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/literal\\s*" . $this->rdel . ")|\G([\S\s])/iS"; - - do { - if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns - if (!count($yymatches)) { - throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state CHILDLITERAL'); - } - next($yymatches); // skip global match - $this->token = key($yymatches); // token number - if ($tokenMap[$this->token]) { - // extract sub-patterns for passing to lex function - $yysubmatches = array_slice($yysubmatches, $this->token + 1, - $tokenMap[$this->token]); - } else { - $yysubmatches = array(); - } - $this->value = current($yymatches); // token value - $r = $this->{'yy_r7_' . $this->token}($yysubmatches); - if ($r === null) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - // accept this token - return true; - } elseif ($r === true) { - // we have changed state - // process this token in the new state - return $this->yylex(); - } elseif ($r === false) { - $this->counter += strlen($this->value); - $this->line += substr_count($this->value, "\n"); - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . - ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const CHILDLITERAL = 7; - - function yy_r7_1($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - $this->yypushstate(self::CHILDLITERAL); - } - } - - function yy_r7_2($yy_subpatterns) - { - - if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } else { - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - $this->yypopstate(); - } - } - - function yy_r7_3($yy_subpatterns) - { - - $to = strlen($this->data); - preg_match("/{$this->ldel}\/?literal\s*{$this->rdel}/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } else { - $this->compiler->trigger_template_error("missing or misspelled literal closing tag"); - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; - } -} - - \ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_templateparser.php b/library/Smarty/libs/sysplugins/smarty_internal_templateparser.php deleted file mode 100644 index c781e4c10f..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_templateparser.php +++ /dev/null @@ -1,4546 +0,0 @@ -string = $s->string; - $this->metadata = $s->metadata; - } else { - $this->string = (string) $s; - if ($m instanceof TP_yyToken) { - $this->metadata = $m->metadata; - } elseif (is_array($m)) { - $this->metadata = $m; - } - } - } - - public function __toString() - { - return $this->_string; - } - - public function offsetExists($offset) - { - return isset($this->metadata[$offset]); - } - - public function offsetGet($offset) - { - return $this->metadata[$offset]; - } - - public function offsetSet($offset, $value) - { - if ($offset === null) { - if (isset($value[0])) { - $x = ($value instanceof TP_yyToken) ? - $value->metadata : $value; - $this->metadata = array_merge($this->metadata, $x); - - return; - } - $offset = count($this->metadata); - } - if ($value === null) { - return; - } - if ($value instanceof TP_yyToken) { - if ($value->metadata) { - $this->metadata[$offset] = $value->metadata; - } - } elseif ($value) { - $this->metadata[$offset] = $value; - } - } - - public function offsetUnset($offset) - { - unset($this->metadata[$offset]); - } -} - -class TP_yyStackEntry -{ - public $stateno; /* The state-number */ - public $major; /* The major token value. This is the code - ** number for the token at this stack level */ - public $minor; /* The user-supplied minor token value. This - ** is the value of the token */ -} - -; - -#line 13 "smarty_internal_templateparser.y" -class Smarty_Internal_Templateparser #line 80 "smarty_internal_templateparser.php" -{ - #line 15 "smarty_internal_templateparser.y" - - const Err1 = "Security error: Call to private object member not allowed"; - const Err2 = "Security error: Call to dynamic object member not allowed"; - const Err3 = "PHP in template not allowed. Use SmartyBC to enable it"; - // states whether the parse was successful or not - public $successful = true; - public $retvalue = 0; - public static $prefix_number = 0; - private $lex; - private $internalError = false; - private $strip = false; - - function __construct($lex, $compiler) - { - $this->lex = $lex; - $this->compiler = $compiler; - $this->smarty = $this->compiler->smarty; - $this->template = $this->compiler->template; - $this->compiler->has_variable_string = false; - $this->compiler->prefix_code = array(); - $this->block_nesting_level = 0; - if ($this->security = isset($this->smarty->security_policy)) { - $this->php_handling = $this->smarty->security_policy->php_handling; - } else { - $this->php_handling = $this->smarty->php_handling; - } - $this->is_xml = false; - $this->asp_tags = (ini_get('asp_tags') != '0'); - $this->current_buffer = $this->root_buffer = new _smarty_template_buffer($this); - } - - public static function escape_start_tag($tag_text) - { - $tag = preg_replace('/\A<\?(.*)\z/', '<?\1', $tag_text, - 1, $count); //Escape tag - return $tag; - } - - public static function escape_end_tag($tag_text) - { - return '?>'; - } - - public function compileVariable($variable) - { - if (strpos($variable, '(') == 0) { - // not a variable variable - $var = trim($variable, '\''); - $this->compiler->tag_nocache = $this->compiler->tag_nocache | $this->template->getVariable($var, null, true, false)->nocache; - $this->template->properties['variables'][$var] = $this->compiler->tag_nocache | $this->compiler->nocache; - } - // return '(isset($_smarty_tpl->tpl_vars['. $variable .'])?$_smarty_tpl->tpl_vars['. $variable .']->value:$_smarty_tpl->getVariable('. $variable .')->value)'; - return '$_smarty_tpl->tpl_vars[' . $variable . ']->value'; - } - - #line 133 "smarty_internal_templateparser.php" - - const TP_VERT = 1; - const TP_COLON = 2; - const TP_RDEL = 3; - const TP_COMMENT = 4; - const TP_PHPSTARTTAG = 5; - const TP_PHPENDTAG = 6; - const TP_ASPSTARTTAG = 7; - const TP_ASPENDTAG = 8; - const TP_FAKEPHPSTARTTAG = 9; - const TP_XMLTAG = 10; - const TP_TEXT = 11; - const TP_STRIPON = 12; - const TP_STRIPOFF = 13; - const TP_BLOCKSOURCE = 14; - const TP_LITERALSTART = 15; - const TP_LITERALEND = 16; - const TP_LITERAL = 17; - const TP_LDEL = 18; - const TP_DOLLAR = 19; - const TP_ID = 20; - const TP_EQUAL = 21; - const TP_PTR = 22; - const TP_LDELIF = 23; - const TP_LDELFOR = 24; - const TP_SEMICOLON = 25; - const TP_INCDEC = 26; - const TP_TO = 27; - const TP_STEP = 28; - const TP_LDELFOREACH = 29; - const TP_SPACE = 30; - const TP_AS = 31; - const TP_APTR = 32; - const TP_LDELSETFILTER = 33; - const TP_SMARTYBLOCKCHILDPARENT = 34; - const TP_LDELSLASH = 35; - const TP_ATTR = 36; - const TP_INTEGER = 37; - const TP_COMMA = 38; - const TP_OPENP = 39; - const TP_CLOSEP = 40; - const TP_MATH = 41; - const TP_UNIMATH = 42; - const TP_ANDSYM = 43; - const TP_ISIN = 44; - const TP_ISDIVBY = 45; - const TP_ISNOTDIVBY = 46; - const TP_ISEVEN = 47; - const TP_ISNOTEVEN = 48; - const TP_ISEVENBY = 49; - const TP_ISNOTEVENBY = 50; - const TP_ISODD = 51; - const TP_ISNOTODD = 52; - const TP_ISODDBY = 53; - const TP_ISNOTODDBY = 54; - const TP_INSTANCEOF = 55; - const TP_QMARK = 56; - const TP_NOT = 57; - const TP_TYPECAST = 58; - const TP_HEX = 59; - const TP_DOT = 60; - const TP_SINGLEQUOTESTRING = 61; - const TP_DOUBLECOLON = 62; - const TP_AT = 63; - const TP_HATCH = 64; - const TP_OPENB = 65; - const TP_CLOSEB = 66; - const TP_EQUALS = 67; - const TP_NOTEQUALS = 68; - const TP_GREATERTHAN = 69; - const TP_LESSTHAN = 70; - const TP_GREATEREQUAL = 71; - const TP_LESSEQUAL = 72; - const TP_IDENTITY = 73; - const TP_NONEIDENTITY = 74; - const TP_MOD = 75; - const TP_LAND = 76; - const TP_LOR = 77; - const TP_LXOR = 78; - const TP_QUOTE = 79; - const TP_BACKTICK = 80; - const TP_DOLLARID = 81; - const YY_NO_ACTION = 570; - const YY_ACCEPT_ACTION = 569; - const YY_ERROR_ACTION = 568; - - const YY_SZ_ACTTAB = 2407; - static public $yy_action = array( - /* 0 */ - 219, 309, 305, 301, 302, 303, 304, 310, 311, 317, - /* 10 */ - 318, 319, 201, 30, 273, 9, 33, 238, 280, 15, - /* 20 */ - 5, 108, 235, 234, 220, 7, 126, 42, 30, 30, - /* 30 */ - 259, 211, 256, 495, 15, 15, 10, 33, 495, 280, - /* 40 */ - 46, 47, 51, 45, 24, 14, 352, 353, 39, 37, - /* 50 */ - 278, 359, 12, 25, 219, 219, 326, 434, 219, 192, - /* 60 */ - 434, 569, 95, 263, 227, 306, 360, 361, 358, 357, - /* 70 */ - 354, 355, 356, 342, 341, 328, 329, 330, 292, 219, - /* 80 */ - 202, 322, 242, 30, 434, 231, 207, 434, 143, 15, - /* 90 */ - 434, 35, 158, 434, 46, 47, 51, 45, 24, 14, - /* 100 */ - 352, 353, 39, 37, 278, 359, 12, 25, 219, 48, - /* 110 */ - 32, 219, 48, 391, 196, 2, 31, 138, 321, 4, - /* 120 */ - 360, 361, 358, 357, 354, 355, 356, 342, 341, 328, - /* 130 */ - 329, 330, 127, 48, 290, 349, 251, 30, 145, 140, - /* 140 */ - 30, 207, 264, 15, 200, 322, 15, 334, 46, 47, - /* 150 */ - 51, 45, 24, 14, 352, 353, 39, 37, 278, 359, - /* 160 */ - 12, 25, 219, 289, 219, 48, 431, 297, 219, 33, - /* 170 */ - 396, 280, 18, 191, 360, 361, 358, 357, 354, 355, - /* 180 */ - 356, 342, 341, 328, 329, 330, 300, 285, 286, 287, - /* 190 */ - 299, 206, 219, 431, 428, 194, 201, 315, 314, 431, - /* 200 */ - 207, 281, 46, 47, 51, 45, 24, 14, 352, 353, - /* 210 */ - 39, 37, 278, 359, 12, 25, 219, 33, 48, 280, - /* 220 */ - 34, 30, 48, 197, 322, 276, 158, 15, 360, 361, - /* 230 */ - 358, 357, 354, 355, 356, 342, 341, 328, 329, 330, - /* 240 */ - 230, 338, 16, 289, 103, 179, 244, 219, 295, 2, - /* 250 */ - 41, 33, 265, 280, 283, 148, 46, 47, 51, 45, - /* 260 */ - 24, 14, 352, 353, 39, 37, 278, 359, 12, 25, - /* 270 */ - 219, 207, 145, 43, 132, 189, 109, 333, 307, 227, - /* 280 */ - 306, 190, 360, 361, 358, 357, 354, 355, 356, 342, - /* 290 */ - 341, 328, 329, 330, 20, 22, 248, 339, 219, 99, - /* 300 */ - 174, 48, 324, 33, 346, 280, 18, 288, 207, 283, - /* 310 */ - 46, 47, 51, 45, 24, 14, 352, 353, 39, 37, - /* 320 */ - 278, 359, 12, 25, 219, 289, 207, 30, 41, 110, - /* 330 */ - 275, 2, 41, 15, 272, 266, 360, 361, 358, 357, - /* 340 */ - 354, 355, 356, 342, 341, 328, 329, 330, 242, 40, - /* 350 */ - 236, 347, 104, 177, 145, 219, 44, 316, 148, 135, - /* 360 */ - 228, 27, 283, 269, 46, 47, 51, 45, 24, 14, - /* 370 */ - 352, 353, 39, 37, 278, 359, 12, 25, 219, 207, - /* 380 */ - 208, 33, 7, 280, 245, 239, 136, 173, 241, 279, - /* 390 */ - 360, 361, 358, 357, 354, 355, 356, 342, 341, 328, - /* 400 */ - 329, 330, 29, 158, 106, 13, 122, 171, 181, 6, - /* 410 */ - 33, 15, 226, 33, 219, 237, 283, 283, 46, 47, - /* 420 */ - 51, 45, 24, 14, 352, 353, 39, 37, 278, 359, - /* 430 */ - 12, 25, 219, 205, 205, 252, 313, 238, 312, 235, - /* 440 */ - 232, 195, 97, 127, 360, 361, 358, 357, 354, 355, - /* 450 */ - 356, 342, 341, 328, 329, 330, 28, 320, 230, 105, - /* 460 */ - 182, 164, 176, 33, 279, 254, 282, 186, 207, 283, - /* 470 */ - 283, 253, 46, 47, 51, 45, 24, 14, 352, 353, - /* 480 */ - 39, 37, 278, 359, 12, 25, 219, 205, 260, 107, - /* 490 */ - 235, 262, 33, 193, 214, 332, 166, 198, 360, 361, - /* 500 */ - 358, 357, 354, 355, 356, 342, 341, 328, 329, 330, - /* 510 */ - 137, 175, 167, 291, 308, 344, 185, 261, 267, 161, - /* 520 */ - 283, 283, 128, 337, 124, 283, 46, 47, 51, 45, - /* 530 */ - 24, 14, 352, 353, 39, 37, 278, 359, 12, 25, - /* 540 */ - 219, 38, 205, 203, 141, 169, 257, 134, 35, 130, - /* 550 */ - 156, 114, 360, 361, 358, 357, 354, 355, 356, 342, - /* 560 */ - 341, 328, 329, 330, 320, 158, 320, 241, 36, 293, - /* 570 */ - 298, 94, 21, 26, 284, 219, 292, 168, 271, 162, - /* 580 */ - 46, 47, 51, 45, 24, 14, 352, 353, 39, 37, - /* 590 */ - 278, 359, 12, 25, 219, 279, 229, 205, 44, 281, - /* 600 */ - 187, 17, 270, 331, 98, 127, 360, 361, 358, 357, - /* 610 */ - 354, 355, 356, 342, 341, 328, 329, 330, 199, 320, - /* 620 */ - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - /* 630 */ - 331, 331, 331, 331, 46, 47, 51, 45, 24, 14, - /* 640 */ - 352, 353, 39, 37, 278, 359, 12, 25, 219, 331, - /* 650 */ - 268, 331, 331, 331, 331, 331, 331, 331, 125, 115, - /* 660 */ - 360, 361, 358, 357, 354, 355, 356, 342, 341, 328, - /* 670 */ - 329, 330, 279, 331, 320, 331, 331, 331, 331, 331, - /* 680 */ - 331, 331, 331, 331, 331, 331, 331, 331, 46, 47, - /* 690 */ - 51, 45, 24, 14, 352, 353, 39, 37, 278, 359, - /* 700 */ - 12, 25, 219, 331, 204, 331, 331, 331, 331, 331, - /* 710 */ - 331, 159, 100, 116, 360, 361, 358, 357, 354, 355, - /* 720 */ - 356, 342, 341, 328, 329, 330, 320, 320, 320, 331, - /* 730 */ - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - /* 740 */ - 331, 331, 46, 47, 51, 45, 24, 14, 352, 353, - /* 750 */ - 39, 37, 278, 359, 12, 25, 219, 331, 331, 331, - /* 760 */ - 331, 331, 331, 331, 331, 102, 117, 331, 360, 361, - /* 770 */ - 358, 357, 354, 355, 356, 342, 341, 328, 329, 330, - /* 780 */ - 320, 320, 331, 331, 331, 331, 331, 331, 331, 331, - /* 790 */ - 331, 331, 331, 331, 331, 331, 46, 47, 51, 45, - /* 800 */ - 24, 14, 352, 353, 39, 37, 278, 359, 12, 25, - /* 810 */ - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - /* 820 */ - 158, 331, 360, 361, 358, 357, 354, 355, 356, 342, - /* 830 */ - 341, 328, 329, 330, 331, 331, 331, 331, 46, 47, - /* 840 */ - 51, 45, 24, 14, 352, 353, 39, 37, 278, 359, - /* 850 */ - 12, 25, 331, 331, 331, 331, 331, 331, 211, 331, - /* 860 */ - 331, 331, 331, 10, 360, 361, 358, 357, 354, 355, - /* 870 */ - 356, 342, 341, 328, 329, 330, 331, 331, 331, 331, - /* 880 */ - 331, 331, 331, 9, 142, 212, 331, 331, 5, 108, - /* 890 */ - 331, 246, 331, 331, 126, 157, 183, 331, 259, 123, - /* 900 */ - 256, 331, 250, 331, 23, 283, 331, 52, 277, 331, - /* 910 */ - 331, 255, 350, 348, 331, 345, 331, 279, 180, 178, - /* 920 */ - 331, 331, 49, 50, 296, 240, 351, 283, 283, 106, - /* 930 */ - 1, 274, 331, 147, 331, 331, 331, 331, 331, 279, - /* 940 */ - 279, 9, 144, 92, 96, 233, 5, 108, 331, 345, - /* 950 */ - 331, 331, 126, 331, 331, 246, 259, 323, 256, 146, - /* 960 */ - 250, 331, 23, 123, 184, 52, 331, 331, 331, 331, - /* 970 */ - 246, 331, 343, 283, 153, 255, 350, 348, 123, 345, - /* 980 */ - 49, 50, 296, 240, 351, 279, 331, 106, 1, 331, - /* 990 */ - 255, 350, 348, 331, 345, 33, 331, 280, 331, 9, - /* 1000 */ - 142, 224, 96, 331, 5, 108, 331, 30, 331, 247, - /* 1010 */ - 126, 246, 331, 15, 259, 149, 256, 331, 250, 123, - /* 1020 */ - 23, 331, 331, 52, 331, 331, 331, 331, 331, 331, - /* 1030 */ - 331, 255, 350, 348, 331, 345, 331, 331, 49, 50, - /* 1040 */ - 296, 240, 351, 331, 331, 106, 1, 331, 331, 331, - /* 1050 */ - 331, 331, 33, 331, 280, 331, 331, 9, 135, 224, - /* 1060 */ - 96, 331, 5, 108, 30, 246, 258, 331, 126, 151, - /* 1070 */ - 15, 246, 259, 123, 256, 154, 250, 331, 11, 123, - /* 1080 */ - 331, 52, 331, 331, 331, 255, 350, 348, 331, 345, - /* 1090 */ - 331, 255, 350, 348, 331, 345, 49, 50, 296, 240, - /* 1100 */ - 351, 331, 331, 106, 1, 331, 331, 331, 331, 331, - /* 1110 */ - 331, 331, 331, 331, 331, 9, 142, 210, 96, 331, - /* 1120 */ - 5, 108, 331, 331, 331, 331, 126, 246, 331, 331, - /* 1130 */ - 259, 155, 256, 331, 216, 123, 23, 331, 331, 52, - /* 1140 */ - 331, 331, 331, 331, 331, 331, 331, 255, 350, 348, - /* 1150 */ - 331, 345, 331, 331, 49, 50, 296, 240, 351, 331, - /* 1160 */ - 331, 106, 1, 331, 331, 331, 331, 331, 331, 331, - /* 1170 */ - 331, 331, 331, 9, 131, 224, 96, 331, 5, 108, - /* 1180 */ - 331, 331, 331, 331, 126, 246, 331, 331, 259, 152, - /* 1190 */ - 256, 331, 250, 123, 3, 331, 331, 52, 331, 331, - /* 1200 */ - 331, 331, 331, 331, 331, 255, 350, 348, 331, 345, - /* 1210 */ - 331, 331, 49, 50, 296, 240, 351, 331, 331, 106, - /* 1220 */ - 1, 331, 331, 331, 331, 331, 331, 331, 331, 331, - /* 1230 */ - 331, 9, 142, 213, 96, 331, 5, 108, 331, 331, - /* 1240 */ - 331, 331, 126, 246, 331, 331, 259, 150, 256, 331, - /* 1250 */ - 250, 123, 23, 331, 331, 52, 331, 331, 331, 331, - /* 1260 */ - 331, 331, 331, 255, 350, 348, 331, 345, 331, 331, - /* 1270 */ - 49, 50, 296, 240, 351, 331, 331, 106, 1, 331, - /* 1280 */ - 219, 331, 401, 331, 331, 331, 331, 331, 331, 9, - /* 1290 */ - 142, 209, 96, 331, 5, 108, 331, 331, 331, 331, - /* 1300 */ - 126, 249, 331, 331, 259, 331, 256, 331, 250, 30, - /* 1310 */ - 23, 190, 163, 52, 331, 15, 331, 331, 2, 331, - /* 1320 */ - 331, 283, 331, 331, 20, 22, 331, 331, 49, 50, - /* 1330 */ - 296, 240, 351, 331, 331, 106, 1, 331, 207, 331, - /* 1340 */ - 331, 145, 331, 331, 331, 432, 331, 9, 139, 224, - /* 1350 */ - 96, 331, 5, 108, 331, 331, 331, 331, 126, 331, - /* 1360 */ - 331, 331, 259, 243, 256, 331, 250, 331, 23, 190, - /* 1370 */ - 188, 52, 432, 331, 331, 331, 331, 331, 432, 283, - /* 1380 */ - 331, 2, 20, 22, 331, 331, 49, 50, 296, 240, - /* 1390 */ - 351, 331, 331, 106, 1, 331, 207, 331, 331, 331, - /* 1400 */ - 331, 331, 331, 331, 145, 9, 135, 224, 96, 331, - /* 1410 */ - 5, 108, 331, 331, 331, 331, 126, 331, 331, 331, - /* 1420 */ - 259, 331, 256, 331, 250, 331, 11, 101, 160, 52, - /* 1430 */ - 331, 331, 331, 331, 331, 331, 331, 283, 331, 331, - /* 1440 */ - 20, 22, 331, 331, 49, 50, 296, 240, 351, 331, - /* 1450 */ - 331, 106, 331, 331, 207, 331, 331, 331, 331, 331, - /* 1460 */ - 331, 331, 331, 9, 135, 225, 96, 331, 5, 108, - /* 1470 */ - 331, 331, 331, 331, 126, 331, 331, 331, 259, 331, - /* 1480 */ - 256, 331, 250, 331, 11, 331, 477, 52, 331, 331, - /* 1490 */ - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - /* 1500 */ - 331, 331, 49, 50, 296, 240, 351, 331, 477, 106, - /* 1510 */ - 477, 477, 331, 477, 477, 331, 331, 331, 331, 477, - /* 1520 */ - 331, 477, 2, 477, 96, 331, 331, 331, 331, 331, - /* 1530 */ - 331, 331, 331, 331, 331, 246, 331, 331, 477, 120, - /* 1540 */ - 331, 331, 84, 123, 331, 145, 331, 331, 331, 477, - /* 1550 */ - 331, 294, 327, 331, 331, 255, 350, 348, 331, 345, - /* 1560 */ - 331, 331, 331, 477, 331, 331, 331, 246, 331, 218, - /* 1570 */ - 362, 120, 331, 331, 84, 123, 331, 331, 331, 331, - /* 1580 */ - 331, 331, 331, 294, 327, 331, 331, 255, 350, 348, - /* 1590 */ - 246, 345, 331, 331, 129, 331, 331, 61, 119, 232, - /* 1600 */ - 331, 246, 335, 331, 331, 129, 294, 327, 80, 123, - /* 1610 */ - 255, 350, 348, 331, 345, 331, 331, 294, 327, 331, - /* 1620 */ - 331, 255, 350, 348, 331, 345, 246, 331, 331, 331, - /* 1630 */ - 129, 331, 215, 80, 123, 331, 331, 331, 331, 331, - /* 1640 */ - 331, 331, 294, 327, 331, 331, 255, 350, 348, 331, - /* 1650 */ - 345, 331, 331, 331, 246, 190, 170, 221, 129, 331, - /* 1660 */ - 331, 55, 119, 133, 331, 283, 331, 331, 20, 22, - /* 1670 */ - 294, 327, 331, 331, 255, 350, 348, 246, 345, 331, - /* 1680 */ - 331, 129, 207, 331, 80, 123, 331, 331, 331, 331, - /* 1690 */ - 331, 331, 331, 294, 327, 331, 246, 255, 350, 348, - /* 1700 */ - 129, 345, 331, 89, 123, 331, 331, 331, 223, 331, - /* 1710 */ - 331, 331, 294, 327, 331, 331, 255, 350, 348, 246, - /* 1720 */ - 345, 331, 331, 129, 331, 331, 70, 123, 331, 331, - /* 1730 */ - 246, 331, 331, 331, 111, 294, 327, 67, 123, 255, - /* 1740 */ - 350, 348, 331, 345, 331, 331, 294, 327, 331, 246, - /* 1750 */ - 255, 350, 348, 129, 345, 331, 86, 123, 331, 331, - /* 1760 */ - 331, 331, 331, 331, 331, 294, 327, 331, 246, 255, - /* 1770 */ - 350, 348, 129, 345, 331, 90, 123, 331, 331, 331, - /* 1780 */ - 331, 331, 331, 331, 294, 327, 331, 246, 255, 350, - /* 1790 */ - 348, 129, 345, 331, 77, 123, 331, 331, 331, 331, - /* 1800 */ - 331, 331, 331, 294, 327, 331, 246, 255, 350, 348, - /* 1810 */ - 129, 345, 331, 74, 123, 331, 331, 246, 331, 331, - /* 1820 */ - 331, 129, 294, 327, 66, 123, 255, 350, 348, 331, - /* 1830 */ - 345, 331, 331, 294, 327, 331, 246, 222, 350, 348, - /* 1840 */ - 129, 345, 331, 69, 123, 331, 331, 331, 331, 331, - /* 1850 */ - 331, 331, 294, 327, 331, 246, 255, 350, 348, 129, - /* 1860 */ - 345, 331, 78, 123, 331, 331, 331, 331, 331, 331, - /* 1870 */ - 331, 294, 327, 331, 246, 255, 350, 348, 129, 345, - /* 1880 */ - 331, 60, 123, 331, 331, 331, 331, 331, 331, 331, - /* 1890 */ - 294, 327, 331, 246, 255, 350, 348, 129, 345, 331, - /* 1900 */ - 53, 123, 331, 331, 246, 331, 331, 331, 129, 294, - /* 1910 */ - 327, 65, 123, 255, 350, 348, 331, 345, 331, 331, - /* 1920 */ - 294, 327, 336, 331, 255, 350, 348, 331, 345, 8, - /* 1930 */ - 331, 331, 331, 331, 5, 108, 331, 331, 331, 331, - /* 1940 */ - 126, 331, 331, 246, 259, 331, 256, 129, 331, 331, - /* 1950 */ - 72, 123, 331, 331, 331, 331, 331, 331, 331, 294, - /* 1960 */ - 327, 331, 246, 255, 350, 348, 129, 345, 331, 85, - /* 1970 */ - 123, 331, 331, 331, 331, 331, 331, 331, 294, 327, - /* 1980 */ - 331, 246, 255, 350, 348, 129, 345, 331, 81, 123, - /* 1990 */ - 331, 19, 340, 331, 331, 331, 331, 294, 327, 331, - /* 2000 */ - 246, 255, 350, 348, 113, 345, 331, 82, 123, 331, - /* 2010 */ - 331, 246, 331, 331, 331, 93, 294, 327, 54, 121, - /* 2020 */ - 255, 350, 348, 331, 345, 331, 331, 294, 327, 331, - /* 2030 */ - 246, 217, 350, 348, 129, 345, 331, 58, 123, 331, - /* 2040 */ - 331, 331, 331, 331, 331, 331, 294, 327, 331, 336, - /* 2050 */ - 255, 350, 348, 331, 345, 331, 8, 331, 331, 331, - /* 2060 */ - 331, 5, 108, 331, 331, 331, 331, 126, 246, 331, - /* 2070 */ - 331, 259, 129, 256, 331, 88, 123, 331, 331, 246, - /* 2080 */ - 331, 331, 331, 129, 294, 327, 56, 123, 255, 350, - /* 2090 */ - 348, 331, 345, 331, 331, 294, 327, 331, 331, 255, - /* 2100 */ - 350, 348, 331, 345, 246, 331, 331, 331, 129, 331, - /* 2110 */ - 331, 68, 123, 331, 331, 331, 331, 325, 19, 340, - /* 2120 */ - 294, 327, 331, 331, 255, 350, 348, 331, 345, 331, - /* 2130 */ - 331, 331, 331, 246, 331, 331, 331, 118, 331, 331, - /* 2140 */ - 59, 123, 331, 331, 331, 331, 190, 172, 331, 294, - /* 2150 */ - 327, 331, 331, 255, 350, 348, 283, 345, 246, 20, - /* 2160 */ - 22, 331, 93, 331, 331, 57, 121, 331, 331, 331, - /* 2170 */ - 331, 331, 331, 207, 294, 327, 331, 246, 255, 350, - /* 2180 */ - 348, 129, 345, 331, 64, 123, 331, 331, 246, 331, - /* 2190 */ - 331, 331, 129, 294, 327, 63, 123, 255, 350, 348, - /* 2200 */ - 331, 345, 331, 331, 294, 327, 331, 246, 255, 350, - /* 2210 */ - 348, 129, 345, 331, 73, 123, 331, 331, 331, 331, - /* 2220 */ - 190, 165, 331, 294, 327, 331, 331, 255, 350, 348, - /* 2230 */ - 283, 345, 331, 20, 22, 331, 246, 331, 331, 331, - /* 2240 */ - 129, 331, 331, 87, 123, 331, 331, 207, 331, 331, - /* 2250 */ - 331, 331, 294, 327, 331, 331, 255, 350, 348, 331, - /* 2260 */ - 345, 246, 331, 331, 331, 129, 331, 331, 75, 123, - /* 2270 */ - 331, 331, 246, 331, 331, 331, 129, 294, 327, 61, - /* 2280 */ - 123, 255, 350, 348, 331, 345, 331, 331, 294, 327, - /* 2290 */ - 331, 246, 255, 350, 348, 129, 345, 331, 71, 123, - /* 2300 */ - 331, 331, 246, 331, 331, 331, 129, 294, 327, 83, - /* 2310 */ - 123, 255, 350, 348, 331, 345, 331, 331, 294, 327, - /* 2320 */ - 331, 331, 255, 350, 348, 331, 345, 246, 331, 331, - /* 2330 */ - 331, 112, 331, 331, 76, 123, 331, 331, 331, 331, - /* 2340 */ - 331, 331, 331, 294, 327, 331, 331, 255, 350, 348, - /* 2350 */ - 331, 345, 246, 331, 331, 331, 129, 331, 331, 91, - /* 2360 */ - 123, 331, 331, 246, 331, 331, 331, 129, 294, 327, - /* 2370 */ - 62, 123, 255, 350, 348, 331, 345, 331, 331, 294, - /* 2380 */ - 327, 331, 246, 255, 350, 348, 129, 345, 331, 79, - /* 2390 */ - 123, 331, 331, 331, 331, 331, 331, 331, 294, 327, - /* 2400 */ - 331, 331, 255, 350, 348, 331, 345, - ); - static public $yy_lookahead = array( - /* 0 */ - 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, - /* 10 */ - 13, 14, 15, 30, 66, 18, 18, 2, 20, 36, - /* 20 */ - 23, 24, 94, 95, 96, 39, 29, 28, 30, 30, - /* 30 */ - 33, 60, 35, 60, 36, 36, 65, 18, 65, 20, - /* 40 */ - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - /* 50 */ - 51, 52, 53, 54, 1, 1, 3, 3, 1, 91, - /* 60 */ - 3, 83, 84, 85, 86, 87, 67, 68, 69, 70, - /* 70 */ - 71, 72, 73, 74, 75, 76, 77, 78, 112, 1, - /* 80 */ - 114, 115, 63, 30, 30, 31, 118, 30, 19, 36, - /* 90 */ - 36, 21, 22, 36, 41, 42, 43, 44, 45, 46, - /* 100 */ - 47, 48, 49, 50, 51, 52, 53, 54, 1, 55, - /* 110 */ - 32, 1, 55, 3, 91, 39, 18, 19, 20, 38, - /* 120 */ - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - /* 130 */ - 77, 78, 62, 55, 20, 37, 60, 30, 62, 20, - /* 140 */ - 30, 118, 66, 36, 114, 115, 36, 66, 41, 42, - /* 150 */ - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - /* 160 */ - 53, 54, 1, 26, 1, 55, 3, 37, 1, 18, - /* 170 */ - 3, 20, 21, 91, 67, 68, 69, 70, 71, 72, - /* 180 */ - 73, 74, 75, 76, 77, 78, 5, 6, 7, 8, - /* 190 */ - 9, 20, 1, 30, 3, 100, 15, 16, 17, 36, - /* 200 */ - 118, 119, 41, 42, 43, 44, 45, 46, 47, 48, - /* 210 */ - 49, 50, 51, 52, 53, 54, 1, 18, 55, 20, - /* 220 */ - 21, 30, 55, 114, 115, 26, 22, 36, 67, 68, - /* 230 */ - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - /* 240 */ - 86, 80, 32, 26, 91, 92, 31, 1, 109, 39, - /* 250 */ - 38, 18, 40, 20, 101, 116, 41, 42, 43, 44, - /* 260 */ - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - /* 270 */ - 1, 118, 62, 18, 19, 20, 122, 123, 85, 86, - /* 280 */ - 87, 91, 67, 68, 69, 70, 71, 72, 73, 74, - /* 290 */ - 75, 76, 77, 78, 104, 105, 63, 80, 1, 91, - /* 300 */ - 92, 55, 3, 18, 115, 20, 21, 20, 118, 101, - /* 310 */ - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - /* 320 */ - 51, 52, 53, 54, 1, 26, 118, 30, 38, 88, - /* 330 */ - 40, 39, 38, 36, 40, 66, 67, 68, 69, 70, - /* 340 */ - 71, 72, 73, 74, 75, 76, 77, 78, 63, 21, - /* 350 */ - 63, 109, 91, 92, 62, 1, 2, 16, 116, 19, - /* 360 */ - 20, 18, 101, 40, 41, 42, 43, 44, 45, 46, - /* 370 */ - 47, 48, 49, 50, 51, 52, 53, 54, 1, 118, - /* 380 */ - 3, 18, 39, 20, 19, 20, 19, 111, 60, 113, - /* 390 */ - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - /* 400 */ - 77, 78, 21, 22, 64, 30, 39, 92, 92, 39, - /* 410 */ - 18, 36, 20, 18, 1, 20, 101, 101, 41, 42, - /* 420 */ - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - /* 430 */ - 53, 54, 1, 118, 118, 22, 87, 2, 89, 94, - /* 440 */ - 95, 91, 98, 62, 67, 68, 69, 70, 71, 72, - /* 450 */ - 73, 74, 75, 76, 77, 78, 21, 113, 86, 111, - /* 460 */ - 92, 92, 111, 18, 113, 20, 20, 111, 118, 101, - /* 470 */ - 101, 40, 41, 42, 43, 44, 45, 46, 47, 48, - /* 480 */ - 49, 50, 51, 52, 53, 54, 1, 118, 3, 100, - /* 490 */ - 94, 95, 18, 100, 20, 123, 111, 25, 67, 68, - /* 500 */ - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - /* 510 */ - 38, 92, 92, 20, 3, 3, 92, 20, 40, 64, - /* 520 */ - 101, 101, 19, 3, 19, 101, 41, 42, 43, 44, - /* 530 */ - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - /* 540 */ - 1, 2, 118, 20, 19, 64, 20, 19, 21, 98, - /* 550 */ - 20, 98, 67, 68, 69, 70, 71, 72, 73, 74, - /* 560 */ - 75, 76, 77, 78, 113, 22, 113, 60, 27, 20, - /* 570 */ - 37, 20, 56, 2, 101, 1, 112, 111, 116, 111, - /* 580 */ - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - /* 590 */ - 51, 52, 53, 54, 1, 113, 97, 118, 2, 119, - /* 600 */ - 111, 97, 30, 124, 98, 62, 67, 68, 69, 70, - /* 610 */ - 71, 72, 73, 74, 75, 76, 77, 78, 25, 113, - /* 620 */ - 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, - /* 630 */ - 124, 124, 124, 124, 41, 42, 43, 44, 45, 46, - /* 640 */ - 47, 48, 49, 50, 51, 52, 53, 54, 1, 124, - /* 650 */ - 3, 124, 124, 124, 124, 124, 124, 124, 99, 98, - /* 660 */ - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - /* 670 */ - 77, 78, 113, 124, 113, 124, 124, 124, 124, 124, - /* 680 */ - 124, 124, 124, 124, 124, 124, 124, 124, 41, 42, - /* 690 */ - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - /* 700 */ - 53, 54, 1, 124, 3, 124, 124, 124, 124, 124, - /* 710 */ - 124, 98, 98, 98, 67, 68, 69, 70, 71, 72, - /* 720 */ - 73, 74, 75, 76, 77, 78, 113, 113, 113, 124, - /* 730 */ - 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, - /* 740 */ - 124, 124, 41, 42, 43, 44, 45, 46, 47, 48, - /* 750 */ - 49, 50, 51, 52, 53, 54, 1, 124, 124, 124, - /* 760 */ - 124, 124, 124, 124, 124, 98, 98, 124, 67, 68, - /* 770 */ - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - /* 780 */ - 113, 113, 124, 124, 124, 124, 124, 124, 124, 124, - /* 790 */ - 124, 124, 124, 124, 124, 124, 41, 42, 43, 44, - /* 800 */ - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - /* 810 */ - 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, - /* 820 */ - 22, 124, 67, 68, 69, 70, 71, 72, 73, 74, - /* 830 */ - 75, 76, 77, 78, 124, 124, 124, 124, 41, 42, - /* 840 */ - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - /* 850 */ - 53, 54, 124, 124, 124, 124, 124, 124, 60, 124, - /* 860 */ - 124, 124, 124, 65, 67, 68, 69, 70, 71, 72, - /* 870 */ - 73, 74, 75, 76, 77, 78, 124, 124, 124, 124, - /* 880 */ - 124, 124, 124, 18, 19, 20, 124, 124, 23, 24, - /* 890 */ - 124, 86, 124, 124, 29, 90, 92, 124, 33, 94, - /* 900 */ - 35, 124, 37, 124, 39, 101, 124, 42, 103, 124, - /* 910 */ - 124, 106, 107, 108, 124, 110, 124, 113, 92, 92, - /* 920 */ - 124, 124, 57, 58, 59, 60, 61, 101, 101, 64, - /* 930 */ - 65, 66, 124, 94, 124, 124, 124, 124, 124, 113, - /* 940 */ - 113, 18, 19, 20, 79, 106, 23, 24, 124, 110, - /* 950 */ - 124, 124, 29, 124, 124, 86, 33, 34, 35, 90, - /* 960 */ - 37, 124, 39, 94, 92, 42, 124, 124, 124, 124, - /* 970 */ - 86, 124, 103, 101, 90, 106, 107, 108, 94, 110, - /* 980 */ - 57, 58, 59, 60, 61, 113, 124, 64, 65, 124, - /* 990 */ - 106, 107, 108, 124, 110, 18, 124, 20, 124, 18, - /* 1000 */ - 19, 20, 79, 124, 23, 24, 124, 30, 124, 32, - /* 1010 */ - 29, 86, 124, 36, 33, 90, 35, 124, 37, 94, - /* 1020 */ - 39, 124, 124, 42, 124, 124, 124, 124, 124, 124, - /* 1030 */ - 124, 106, 107, 108, 124, 110, 124, 124, 57, 58, - /* 1040 */ - 59, 60, 61, 124, 124, 64, 65, 124, 124, 124, - /* 1050 */ - 124, 124, 18, 124, 20, 124, 124, 18, 19, 20, - /* 1060 */ - 79, 124, 23, 24, 30, 86, 32, 124, 29, 90, - /* 1070 */ - 36, 86, 33, 94, 35, 90, 37, 124, 39, 94, - /* 1080 */ - 124, 42, 124, 124, 124, 106, 107, 108, 124, 110, - /* 1090 */ - 124, 106, 107, 108, 124, 110, 57, 58, 59, 60, - /* 1100 */ - 61, 124, 124, 64, 65, 124, 124, 124, 124, 124, - /* 1110 */ - 124, 124, 124, 124, 124, 18, 19, 20, 79, 124, - /* 1120 */ - 23, 24, 124, 124, 124, 124, 29, 86, 124, 124, - /* 1130 */ - 33, 90, 35, 124, 37, 94, 39, 124, 124, 42, - /* 1140 */ - 124, 124, 124, 124, 124, 124, 124, 106, 107, 108, - /* 1150 */ - 124, 110, 124, 124, 57, 58, 59, 60, 61, 124, - /* 1160 */ - 124, 64, 65, 124, 124, 124, 124, 124, 124, 124, - /* 1170 */ - 124, 124, 124, 18, 19, 20, 79, 124, 23, 24, - /* 1180 */ - 124, 124, 124, 124, 29, 86, 124, 124, 33, 90, - /* 1190 */ - 35, 124, 37, 94, 39, 124, 124, 42, 124, 124, - /* 1200 */ - 124, 124, 124, 124, 124, 106, 107, 108, 124, 110, - /* 1210 */ - 124, 124, 57, 58, 59, 60, 61, 124, 124, 64, - /* 1220 */ - 65, 124, 124, 124, 124, 124, 124, 124, 124, 124, - /* 1230 */ - 124, 18, 19, 20, 79, 124, 23, 24, 124, 124, - /* 1240 */ - 124, 124, 29, 86, 124, 124, 33, 90, 35, 124, - /* 1250 */ - 37, 94, 39, 124, 124, 42, 124, 124, 124, 124, - /* 1260 */ - 124, 124, 124, 106, 107, 108, 124, 110, 124, 124, - /* 1270 */ - 57, 58, 59, 60, 61, 124, 124, 64, 65, 124, - /* 1280 */ - 1, 124, 3, 124, 124, 124, 124, 124, 124, 18, - /* 1290 */ - 19, 20, 79, 124, 23, 24, 124, 124, 124, 124, - /* 1300 */ - 29, 22, 124, 124, 33, 124, 35, 124, 37, 30, - /* 1310 */ - 39, 91, 92, 42, 124, 36, 124, 124, 39, 124, - /* 1320 */ - 124, 101, 124, 124, 104, 105, 124, 124, 57, 58, - /* 1330 */ - 59, 60, 61, 124, 124, 64, 65, 124, 118, 124, - /* 1340 */ - 124, 62, 124, 124, 124, 3, 124, 18, 19, 20, - /* 1350 */ - 79, 124, 23, 24, 124, 124, 124, 124, 29, 124, - /* 1360 */ - 124, 124, 33, 21, 35, 124, 37, 124, 39, 91, - /* 1370 */ - 92, 42, 30, 124, 124, 124, 124, 124, 36, 101, - /* 1380 */ - 124, 39, 104, 105, 124, 124, 57, 58, 59, 60, - /* 1390 */ - 61, 124, 124, 64, 65, 124, 118, 124, 124, 124, - /* 1400 */ - 124, 124, 124, 124, 62, 18, 19, 20, 79, 124, - /* 1410 */ - 23, 24, 124, 124, 124, 124, 29, 124, 124, 124, - /* 1420 */ - 33, 124, 35, 124, 37, 124, 39, 91, 92, 42, - /* 1430 */ - 124, 124, 124, 124, 124, 124, 124, 101, 124, 124, - /* 1440 */ - 104, 105, 124, 124, 57, 58, 59, 60, 61, 124, - /* 1450 */ - 124, 64, 124, 124, 118, 124, 124, 124, 124, 124, - /* 1460 */ - 124, 124, 124, 18, 19, 20, 79, 124, 23, 24, - /* 1470 */ - 124, 124, 124, 124, 29, 124, 124, 124, 33, 124, - /* 1480 */ - 35, 124, 37, 124, 39, 124, 3, 42, 124, 124, - /* 1490 */ - 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, - /* 1500 */ - 124, 124, 57, 58, 59, 60, 61, 124, 25, 64, - /* 1510 */ - 27, 28, 124, 30, 31, 124, 124, 124, 124, 36, - /* 1520 */ - 124, 38, 39, 40, 79, 124, 124, 124, 124, 124, - /* 1530 */ - 124, 124, 124, 124, 124, 86, 124, 124, 55, 90, - /* 1540 */ - 124, 124, 93, 94, 124, 62, 124, 124, 124, 66, - /* 1550 */ - 124, 102, 103, 124, 124, 106, 107, 108, 124, 110, - /* 1560 */ - 124, 124, 124, 80, 124, 124, 124, 86, 124, 120, - /* 1570 */ - 121, 90, 124, 124, 93, 94, 124, 124, 124, 124, - /* 1580 */ - 124, 124, 124, 102, 103, 124, 124, 106, 107, 108, - /* 1590 */ - 86, 110, 124, 124, 90, 124, 124, 93, 94, 95, - /* 1600 */ - 124, 86, 121, 124, 124, 90, 102, 103, 93, 94, - /* 1610 */ - 106, 107, 108, 124, 110, 124, 124, 102, 103, 124, - /* 1620 */ - 124, 106, 107, 108, 124, 110, 86, 124, 124, 124, - /* 1630 */ - 90, 124, 117, 93, 94, 124, 124, 124, 124, 124, - /* 1640 */ - 124, 124, 102, 103, 124, 124, 106, 107, 108, 124, - /* 1650 */ - 110, 124, 124, 124, 86, 91, 92, 117, 90, 124, - /* 1660 */ - 124, 93, 94, 95, 124, 101, 124, 124, 104, 105, - /* 1670 */ - 102, 103, 124, 124, 106, 107, 108, 86, 110, 124, - /* 1680 */ - 124, 90, 118, 124, 93, 94, 124, 124, 124, 124, - /* 1690 */ - 124, 124, 124, 102, 103, 124, 86, 106, 107, 108, - /* 1700 */ - 90, 110, 124, 93, 94, 124, 124, 124, 117, 124, - /* 1710 */ - 124, 124, 102, 103, 124, 124, 106, 107, 108, 86, - /* 1720 */ - 110, 124, 124, 90, 124, 124, 93, 94, 124, 124, - /* 1730 */ - 86, 124, 124, 124, 90, 102, 103, 93, 94, 106, - /* 1740 */ - 107, 108, 124, 110, 124, 124, 102, 103, 124, 86, - /* 1750 */ - 106, 107, 108, 90, 110, 124, 93, 94, 124, 124, - /* 1760 */ - 124, 124, 124, 124, 124, 102, 103, 124, 86, 106, - /* 1770 */ - 107, 108, 90, 110, 124, 93, 94, 124, 124, 124, - /* 1780 */ - 124, 124, 124, 124, 102, 103, 124, 86, 106, 107, - /* 1790 */ - 108, 90, 110, 124, 93, 94, 124, 124, 124, 124, - /* 1800 */ - 124, 124, 124, 102, 103, 124, 86, 106, 107, 108, - /* 1810 */ - 90, 110, 124, 93, 94, 124, 124, 86, 124, 124, - /* 1820 */ - 124, 90, 102, 103, 93, 94, 106, 107, 108, 124, - /* 1830 */ - 110, 124, 124, 102, 103, 124, 86, 106, 107, 108, - /* 1840 */ - 90, 110, 124, 93, 94, 124, 124, 124, 124, 124, - /* 1850 */ - 124, 124, 102, 103, 124, 86, 106, 107, 108, 90, - /* 1860 */ - 110, 124, 93, 94, 124, 124, 124, 124, 124, 124, - /* 1870 */ - 124, 102, 103, 124, 86, 106, 107, 108, 90, 110, - /* 1880 */ - 124, 93, 94, 124, 124, 124, 124, 124, 124, 124, - /* 1890 */ - 102, 103, 124, 86, 106, 107, 108, 90, 110, 124, - /* 1900 */ - 93, 94, 124, 124, 86, 124, 124, 124, 90, 102, - /* 1910 */ - 103, 93, 94, 106, 107, 108, 124, 110, 124, 124, - /* 1920 */ - 102, 103, 11, 124, 106, 107, 108, 124, 110, 18, - /* 1930 */ - 124, 124, 124, 124, 23, 24, 124, 124, 124, 124, - /* 1940 */ - 29, 124, 124, 86, 33, 124, 35, 90, 124, 124, - /* 1950 */ - 93, 94, 124, 124, 124, 124, 124, 124, 124, 102, - /* 1960 */ - 103, 124, 86, 106, 107, 108, 90, 110, 124, 93, - /* 1970 */ - 94, 124, 124, 124, 124, 124, 124, 124, 102, 103, - /* 1980 */ - 124, 86, 106, 107, 108, 90, 110, 124, 93, 94, - /* 1990 */ - 79, 80, 81, 124, 124, 124, 124, 102, 103, 124, - /* 2000 */ - 86, 106, 107, 108, 90, 110, 124, 93, 94, 124, - /* 2010 */ - 124, 86, 124, 124, 124, 90, 102, 103, 93, 94, - /* 2020 */ - 106, 107, 108, 124, 110, 124, 124, 102, 103, 124, - /* 2030 */ - 86, 106, 107, 108, 90, 110, 124, 93, 94, 124, - /* 2040 */ - 124, 124, 124, 124, 124, 124, 102, 103, 124, 11, - /* 2050 */ - 106, 107, 108, 124, 110, 124, 18, 124, 124, 124, - /* 2060 */ - 124, 23, 24, 124, 124, 124, 124, 29, 86, 124, - /* 2070 */ - 124, 33, 90, 35, 124, 93, 94, 124, 124, 86, - /* 2080 */ - 124, 124, 124, 90, 102, 103, 93, 94, 106, 107, - /* 2090 */ - 108, 124, 110, 124, 124, 102, 103, 124, 124, 106, - /* 2100 */ - 107, 108, 124, 110, 86, 124, 124, 124, 90, 124, - /* 2110 */ - 124, 93, 94, 124, 124, 124, 124, 79, 80, 81, - /* 2120 */ - 102, 103, 124, 124, 106, 107, 108, 124, 110, 124, - /* 2130 */ - 124, 124, 124, 86, 124, 124, 124, 90, 124, 124, - /* 2140 */ - 93, 94, 124, 124, 124, 124, 91, 92, 124, 102, - /* 2150 */ - 103, 124, 124, 106, 107, 108, 101, 110, 86, 104, - /* 2160 */ - 105, 124, 90, 124, 124, 93, 94, 124, 124, 124, - /* 2170 */ - 124, 124, 124, 118, 102, 103, 124, 86, 106, 107, - /* 2180 */ - 108, 90, 110, 124, 93, 94, 124, 124, 86, 124, - /* 2190 */ - 124, 124, 90, 102, 103, 93, 94, 106, 107, 108, - /* 2200 */ - 124, 110, 124, 124, 102, 103, 124, 86, 106, 107, - /* 2210 */ - 108, 90, 110, 124, 93, 94, 124, 124, 124, 124, - /* 2220 */ - 91, 92, 124, 102, 103, 124, 124, 106, 107, 108, - /* 2230 */ - 101, 110, 124, 104, 105, 124, 86, 124, 124, 124, - /* 2240 */ - 90, 124, 124, 93, 94, 124, 124, 118, 124, 124, - /* 2250 */ - 124, 124, 102, 103, 124, 124, 106, 107, 108, 124, - /* 2260 */ - 110, 86, 124, 124, 124, 90, 124, 124, 93, 94, - /* 2270 */ - 124, 124, 86, 124, 124, 124, 90, 102, 103, 93, - /* 2280 */ - 94, 106, 107, 108, 124, 110, 124, 124, 102, 103, - /* 2290 */ - 124, 86, 106, 107, 108, 90, 110, 124, 93, 94, - /* 2300 */ - 124, 124, 86, 124, 124, 124, 90, 102, 103, 93, - /* 2310 */ - 94, 106, 107, 108, 124, 110, 124, 124, 102, 103, - /* 2320 */ - 124, 124, 106, 107, 108, 124, 110, 86, 124, 124, - /* 2330 */ - 124, 90, 124, 124, 93, 94, 124, 124, 124, 124, - /* 2340 */ - 124, 124, 124, 102, 103, 124, 124, 106, 107, 108, - /* 2350 */ - 124, 110, 86, 124, 124, 124, 90, 124, 124, 93, - /* 2360 */ - 94, 124, 124, 86, 124, 124, 124, 90, 102, 103, - /* 2370 */ - 93, 94, 106, 107, 108, 124, 110, 124, 124, 102, - /* 2380 */ - 103, 124, 86, 106, 107, 108, 90, 110, 124, 93, - /* 2390 */ - 94, 124, 124, 124, 124, 124, 124, 124, 102, 103, - /* 2400 */ - 124, 124, 106, 107, 108, 124, 110, - ); - const YY_SHIFT_USE_DFLT = - 53; - const YY_SHIFT_MAX = 259; - static public $yy_shift_ofst = array( - /* 0 */ - - 3, 1213, 981, 1155, 1213, 1155, 981, 981, 923, 923, - /* 10 */ - 865, 981, 981, 1097, 981, 981, 981, 981, 981, 981, - /* 20 */ - 981, 1329, 981, 981, 981, 981, 1271, 981, 981, 981, - /* 30 */ - 1097, 981, 981, 981, 981, 981, 981, 981, 981, 981, - /* 40 */ - 981, 981, 981, 981, 1039, 1039, 1387, 1387, 1445, 1387, - /* 50 */ - 1387, 1387, 1387, - 1, 53, 107, 107, 107, 107, 107, - /* 60 */ - 485, 431, 593, 647, 701, 323, 161, 215, 377, 269, - /* 70 */ - 539, 755, 755, 755, 755, 755, 755, 755, 755, 755, - /* 80 */ - 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, - /* 90 */ - 797, 797, 1279, 110, 297, - 3, 2038, 977, 1034, 191, - /* 100 */ - - 2, 191, - 2, 297, 297, 798, 340, 354, 367, 1911, - /* 110 */ - 181, 54, 57, 163, 199, 285, 19, 151, 167, 70, - /* 120 */ - 78, 381, 367, 543, 363, - 17, 375, 365, 363, 246, - /* 130 */ - 363, 395, 392, - 17, 363, 363, 363, 367, 363, 445, - /* 140 */ - 413, 363, 395, 363, 474, 365, 574, 204, 204, 574, - /* 150 */ - 574, 574, 574, 574, 574, 574, 574, - 53, 255, 233, - /* 160 */ - - 17, - 27, - 29, - 17, - 17, - 17, - 29, - 17, - 29, - 27, - /* 170 */ - - 17, - 17, - 17, - 29, - 17, - 17, - 29, - 17, - 17, - 17, - /* 180 */ - - 17, - 17, - 17, - 17, - 17, - 17, - 29, - 29, - 17, 343, - /* 190 */ - 574, 574, 574, 596, 596, 574, 574, 204, 572, 572, - /* 200 */ - 204, 341, 204, 370, - 53, - 53, - 53, - 53, - 53, 1483, - /* 210 */ - 1342, 98, 76, 210, 435, 212, 328, 299, 81, 287, - /* 220 */ - 472, 294, 217, 290, 292, 292, 370, 511, 455, 505, - /* 230 */ - 520, 528, 478, 481, 541, 527, 446, 15, 114, - 14, - /* 240 */ - 533, 130, 493, 497, 503, 523, 512, 525, 549, 551, - /* 250 */ - 507, 526, 530, 516, 571, 137, 119, - 52, 69, 171, - ); - const YY_REDUCE_USE_DFLT = - 73; - const YY_REDUCE_MAX = 208; - static public $yy_reduce_ofst = array( - /* 0 */ - - 22, 1449, 1540, 1504, 1481, 1568, 1515, 1591, 1925, 2072, - /* 10 */ - 1750, 1818, 1895, 1644, 1663, 1914, 2205, 2277, 1876, 1731, - /* 20 */ - 1857, 1633, 1701, 2186, 2150, 2296, 2266, 2091, 2047, 1993, - /* 30 */ - 2241, 2102, 1720, 1788, 1982, 1769, 1807, 1610, 1682, 2175, - /* 40 */ - 2216, 2121, 1944, 2018, 805, 869, 884, 979, 925, 985, - /* 50 */ - 1041, 1157, 1099, 1220, 1336, 2129, 1278, 1336, 1564, 2055, - /* 60 */ - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - /* 70 */ - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - /* 80 */ - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - /* 90 */ - 190, 190, 261, 208, 153, 193, 154, 827, 826, 369, - /* 100 */ - 804, 315, 872, 316, 424, - 34, 839, 82, - 72, 372, - /* 110 */ - 349, - 32, - 32, - 32, 559, 351, 351, 351, - 32, 30, - /* 120 */ - - 32, 30, 345, 30, 453, 420, 368, 242, 344, - 32, - /* 130 */ - 276, 561, 451, 419, 506, 615, 668, 396, 613, 615, - /* 140 */ - 350, 614, 615, 667, 615, 139, - 32, 30, 109, - 32, - /* 150 */ - - 32, - 32, - 32, - 32, - 32, - 32, 23, - 32, 462, 482, - /* 160 */ - 473, 466, 464, 473, 473, 473, 464, 473, 464, 468, - /* 170 */ - 473, 473, 473, 464, 473, 473, 464, 473, 473, 473, - /* 180 */ - 473, 473, 473, 473, 473, 473, 464, 464, 473, 489, - /* 190 */ - 479, 479, 479, 480, 480, 479, 479, 189, 504, 499, - /* 200 */ - 189, 241, 189, 348, 356, 393, 389, 95, 385, - ); - static public $yyExpectedTokens = array( - /* 0 */ - array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 23, 24, 29, 33, 35,), - /* 1 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 2 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 3 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 4 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 5 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 6 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 7 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 8 */ - array(18, 19, 20, 23, 24, 29, 33, 34, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 9 */ - array(18, 19, 20, 23, 24, 29, 33, 34, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 10 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 66, 79,), - /* 11 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 12 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 13 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 14 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 15 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 16 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 17 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 18 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 19 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 20 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 21 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 22 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 23 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 24 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 25 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 26 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 27 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 28 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 29 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 30 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 31 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 32 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 33 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 34 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 35 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 36 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 37 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 38 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 39 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 40 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 41 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 42 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 43 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 44 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 45 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,), - /* 46 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,), - /* 47 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,), - /* 48 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,), - /* 49 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,), - /* 50 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,), - /* 51 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,), - /* 52 */ - array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,), - /* 53 */ - array(1, 28, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 54 */ - array(1, 3, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 55 */ - array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 56 */ - array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 57 */ - array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 58 */ - array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 59 */ - array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 60 */ - array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 61 */ - array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 62 */ - array(1, 25, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 63 */ - array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 64 */ - array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 65 */ - array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 66 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80,), - /* 67 */ - array(1, 31, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 68 */ - array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 69 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 70 */ - array(1, 2, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 71 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 72 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 73 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 74 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 75 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 76 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 77 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 78 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 79 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 80 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 81 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 82 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 83 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 84 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 85 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 86 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 87 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 88 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 89 */ - array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 90 */ - array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 91 */ - array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,), - /* 92 */ - array(1, 3, 22, 30, 36, 39, 62,), - /* 93 */ - array(1, 3, 30, 36, 55,), - /* 94 */ - array(1, 30, 36,), - /* 95 */ - array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 23, 24, 29, 33, 35,), - /* 96 */ - array(11, 18, 23, 24, 29, 33, 35, 79, 80, 81,), - /* 97 */ - array(18, 20, 30, 32, 36,), - /* 98 */ - array(18, 20, 30, 32, 36,), - /* 99 */ - array(1, 3, 30, 36,), - /* 100 */ - array(18, 20, 30, 36,), - /* 101 */ - array(1, 3, 30, 36,), - /* 102 */ - array(18, 20, 30, 36,), - /* 103 */ - array(1, 30, 36,), - /* 104 */ - array(1, 30, 36,), - /* 105 */ - array(22, 60, 65,), - /* 106 */ - array(19, 20, 64,), - /* 107 */ - array(1, 2,), - /* 108 */ - array(19, 39,), - /* 109 */ - array(11, 18, 23, 24, 29, 33, 35, 79, 80, 81,), - /* 110 */ - array(5, 6, 7, 8, 9, 15, 16, 17,), - /* 111 */ - array(1, 3, 30, 31, 36, 55,), - /* 112 */ - array(1, 3, 30, 36, 55,), - /* 113 */ - array(1, 3, 30, 36, 55,), - /* 114 */ - array(18, 20, 21, 26,), - /* 115 */ - array(18, 20, 21, 63,), - /* 116 */ - array(18, 20, 63,), - /* 117 */ - array(18, 20, 21,), - /* 118 */ - array(1, 3, 55,), - /* 119 */ - array(21, 22, 62,), - /* 120 */ - array(1, 32, 55,), - /* 121 */ - array(21, 22, 62,), - /* 122 */ - array(19, 39,), - /* 123 */ - array(22, 62,), - /* 124 */ - array(18, 20,), - /* 125 */ - array(30, 36,), - /* 126 */ - array(30, 36,), - /* 127 */ - array(19, 20,), - /* 128 */ - array(18, 20,), - /* 129 */ - array(1, 55,), - /* 130 */ - array(18, 20,), - /* 131 */ - array(18, 20,), - /* 132 */ - array(18, 20,), - /* 133 */ - array(30, 36,), - /* 134 */ - array(18, 20,), - /* 135 */ - array(18, 20,), - /* 136 */ - array(18, 20,), - /* 137 */ - array(19, 39,), - /* 138 */ - array(18, 20,), - /* 139 */ - array(18, 20,), - /* 140 */ - array(1, 22,), - /* 141 */ - array(18, 20,), - /* 142 */ - array(18, 20,), - /* 143 */ - array(18, 20,), - /* 144 */ - array(18, 20,), - /* 145 */ - array(19, 20,), - /* 146 */ - array(1,), - /* 147 */ - array(22,), - /* 148 */ - array(22,), - /* 149 */ - array(1,), - /* 150 */ - array(1,), - /* 151 */ - array(1,), - /* 152 */ - array(1,), - /* 153 */ - array(1,), - /* 154 */ - array(1,), - /* 155 */ - array(1,), - /* 156 */ - array(1,), - /* 157 */ - array(), - /* 158 */ - array(18, 19, 20,), - /* 159 */ - array(18, 20, 63,), - /* 160 */ - array(30, 36,), - /* 161 */ - array(60, 65,), - /* 162 */ - array(60, 65,), - /* 163 */ - array(30, 36,), - /* 164 */ - array(30, 36,), - /* 165 */ - array(30, 36,), - /* 166 */ - array(60, 65,), - /* 167 */ - array(30, 36,), - /* 168 */ - array(60, 65,), - /* 169 */ - array(60, 65,), - /* 170 */ - array(30, 36,), - /* 171 */ - array(30, 36,), - /* 172 */ - array(30, 36,), - /* 173 */ - array(60, 65,), - /* 174 */ - array(30, 36,), - /* 175 */ - array(30, 36,), - /* 176 */ - array(60, 65,), - /* 177 */ - array(30, 36,), - /* 178 */ - array(30, 36,), - /* 179 */ - array(30, 36,), - /* 180 */ - array(30, 36,), - /* 181 */ - array(30, 36,), - /* 182 */ - array(30, 36,), - /* 183 */ - array(30, 36,), - /* 184 */ - array(30, 36,), - /* 185 */ - array(30, 36,), - /* 186 */ - array(60, 65,), - /* 187 */ - array(60, 65,), - /* 188 */ - array(30, 36,), - /* 189 */ - array(18, 39,), - /* 190 */ - array(1,), - /* 191 */ - array(1,), - /* 192 */ - array(1,), - /* 193 */ - array(2,), - /* 194 */ - array(2,), - /* 195 */ - array(1,), - /* 196 */ - array(1,), - /* 197 */ - array(22,), - /* 198 */ - array(30,), - /* 199 */ - array(30,), - /* 200 */ - array(22,), - /* 201 */ - array(16,), - /* 202 */ - array(22,), - /* 203 */ - array(39,), - /* 204 */ - array(), - /* 205 */ - array(), - /* 206 */ - array(), - /* 207 */ - array(), - /* 208 */ - array(), - /* 209 */ - array(3, 25, 27, 28, 30, 31, 36, 38, 39, 40, 55, 62, 66, 80,), - /* 210 */ - array(3, 21, 30, 36, 39, 62,), - /* 211 */ - array(18, 19, 20, 37,), - /* 212 */ - array(39, 60, 62, 66,), - /* 213 */ - array(32, 39, 62,), - /* 214 */ - array(2, 21,), - /* 215 */ - array(38, 40,), - /* 216 */ - array(21, 60,), - /* 217 */ - array(3, 26,), - /* 218 */ - array(38, 66,), - /* 219 */ - array(20, 63,), - /* 220 */ - array(25, 38,), - /* 221 */ - array(38, 40,), - /* 222 */ - array(26, 80,), - /* 223 */ - array(38, 40,), - /* 224 */ - array(39, 62,), - /* 225 */ - array(39, 62,), - /* 226 */ - array(39,), - /* 227 */ - array(3,), - /* 228 */ - array(64,), - /* 229 */ - array(19,), - /* 230 */ - array(3,), - /* 231 */ - array(19,), - /* 232 */ - array(40,), - /* 233 */ - array(64,), - /* 234 */ - array(27,), - /* 235 */ - array(21,), - /* 236 */ - array(20,), - /* 237 */ - array(2,), - /* 238 */ - array(20,), - /* 239 */ - array(39,), - /* 240 */ - array(37,), - /* 241 */ - array(37,), - /* 242 */ - array(20,), - /* 243 */ - array(20,), - /* 244 */ - array(19,), - /* 245 */ - array(20,), - /* 246 */ - array(3,), - /* 247 */ - array(19,), - /* 248 */ - array(20,), - /* 249 */ - array(20,), - /* 250 */ - array(60,), - /* 251 */ - array(20,), - /* 252 */ - array(20,), - /* 253 */ - array(56,), - /* 254 */ - array(2,), - /* 255 */ - array(26,), - /* 256 */ - array(20,), - /* 257 */ - array(66,), - /* 258 */ - array(19,), - /* 259 */ - array(20,), - /* 260 */ - array(), - /* 261 */ - array(), - /* 262 */ - array(), - /* 263 */ - array(), - /* 264 */ - array(), - /* 265 */ - array(), - /* 266 */ - array(), - /* 267 */ - array(), - /* 268 */ - array(), - /* 269 */ - array(), - /* 270 */ - array(), - /* 271 */ - array(), - /* 272 */ - array(), - /* 273 */ - array(), - /* 274 */ - array(), - /* 275 */ - array(), - /* 276 */ - array(), - /* 277 */ - array(), - /* 278 */ - array(), - /* 279 */ - array(), - /* 280 */ - array(), - /* 281 */ - array(), - /* 282 */ - array(), - /* 283 */ - array(), - /* 284 */ - array(), - /* 285 */ - array(), - /* 286 */ - array(), - /* 287 */ - array(), - /* 288 */ - array(), - /* 289 */ - array(), - /* 290 */ - array(), - /* 291 */ - array(), - /* 292 */ - array(), - /* 293 */ - array(), - /* 294 */ - array(), - /* 295 */ - array(), - /* 296 */ - array(), - /* 297 */ - array(), - /* 298 */ - array(), - /* 299 */ - array(), - /* 300 */ - array(), - /* 301 */ - array(), - /* 302 */ - array(), - /* 303 */ - array(), - /* 304 */ - array(), - /* 305 */ - array(), - /* 306 */ - array(), - /* 307 */ - array(), - /* 308 */ - array(), - /* 309 */ - array(), - /* 310 */ - array(), - /* 311 */ - array(), - /* 312 */ - array(), - /* 313 */ - array(), - /* 314 */ - array(), - /* 315 */ - array(), - /* 316 */ - array(), - /* 317 */ - array(), - /* 318 */ - array(), - /* 319 */ - array(), - /* 320 */ - array(), - /* 321 */ - array(), - /* 322 */ - array(), - /* 323 */ - array(), - /* 324 */ - array(), - /* 325 */ - array(), - /* 326 */ - array(), - /* 327 */ - array(), - /* 328 */ - array(), - /* 329 */ - array(), - /* 330 */ - array(), - /* 331 */ - array(), - /* 332 */ - array(), - /* 333 */ - array(), - /* 334 */ - array(), - /* 335 */ - array(), - /* 336 */ - array(), - /* 337 */ - array(), - /* 338 */ - array(), - /* 339 */ - array(), - /* 340 */ - array(), - /* 341 */ - array(), - /* 342 */ - array(), - /* 343 */ - array(), - /* 344 */ - array(), - /* 345 */ - array(), - /* 346 */ - array(), - /* 347 */ - array(), - /* 348 */ - array(), - /* 349 */ - array(), - /* 350 */ - array(), - /* 351 */ - array(), - /* 352 */ - array(), - /* 353 */ - array(), - /* 354 */ - array(), - /* 355 */ - array(), - /* 356 */ - array(), - /* 357 */ - array(), - /* 358 */ - array(), - /* 359 */ - array(), - /* 360 */ - array(), - /* 361 */ - array(), - /* 362 */ - array(), - ); - static public $yy_default = array( - /* 0 */ - 366, 551, 522, 568, 568, 568, 522, 522, 568, 568, - /* 10 */ - 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, - /* 20 */ - 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, - /* 30 */ - 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, - /* 40 */ - 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, - /* 50 */ - 568, 568, 568, 428, 568, 405, 428, 428, 428, 397, - /* 60 */ - 568, 568, 568, 568, 568, 568, 568, 433, 568, 568, - /* 70 */ - 568, 553, 449, 520, 552, 457, 433, 452, 439, 462, - /* 80 */ - 521, 461, 430, 435, 554, 438, 454, 453, 410, 458, - /* 90 */ - 466, 465, 477, 441, 428, 363, 568, 428, 428, 485, - /* 100 */ - 428, 448, 428, 428, 428, 534, 568, 419, 568, 568, - /* 110 */ - 568, 441, 441, 441, 568, 495, 495, 495, 441, 486, - /* 120 */ - 441, 486, 568, 486, 568, 428, 428, 568, 568, 441, - /* 130 */ - 495, 568, 568, 407, 568, 568, 568, 568, 568, 568, - /* 140 */ - 422, 568, 568, 568, 568, 568, 451, 486, 531, 464, - /* 150 */ - 446, 445, 468, 444, 469, 470, 424, 529, 568, 496, - /* 160 */ - 395, 489, 492, 412, 392, 406, 514, 409, 490, 491, - /* 170 */ - 413, 394, 398, 513, 393, 408, 493, 400, 417, 402, - /* 180 */ - 415, 404, 414, 418, 416, 403, 515, 512, 399, 495, - /* 190 */ - 448, 420, 485, 523, 524, 423, 425, 532, 567, 567, - /* 200 */ - 509, 383, 535, 495, 495, 528, 528, 528, 495, 443, - /* 210 */ - 477, 568, 477, 477, 507, 568, 473, 467, 568, 568, - /* 220 */ - 568, 568, 467, 568, 477, 463, 507, 568, 568, 568, - /* 230 */ - 568, 568, 568, 568, 436, 568, 568, 507, 568, 533, - /* 240 */ - 568, 475, 568, 568, 568, 568, 568, 568, 568, 568, - /* 250 */ - 473, 568, 568, 479, 507, 467, 568, 568, 568, 568, - /* 260 */ - 508, 429, 437, 364, 501, 519, 503, 440, 500, 479, - /* 270 */ - 566, 516, 517, 502, 504, 518, 411, 530, 459, 506, - /* 280 */ - 507, 527, 525, 427, 426, 388, 389, 390, 526, 471, - /* 290 */ - 443, 487, 494, 497, 442, 482, 472, 474, 476, 387, - /* 300 */ - 386, 371, 372, 373, 374, 370, 369, 365, 367, 368, - /* 310 */ - 375, 376, 382, 384, 385, 381, 380, 377, 378, 379, - /* 320 */ - 505, 498, 510, 421, 562, 555, 563, 447, 545, 546, - /* 330 */ - 547, 556, 557, 558, 548, 550, 565, 564, 560, 559, - /* 340 */ - 561, 544, 543, 450, 484, 488, 511, 483, 481, 499, - /* 350 */ - 478, 480, 455, 456, 540, 541, 542, 539, 538, 460, - /* 360 */ - 536, 537, 549, - ); - const YYNOCODE = 125; - const YYSTACKDEPTH = 500; - const YYNSTATE = 363; - const YYNRULE = 205; - const YYERRORSYMBOL = 82; - const YYERRSYMDT = 'yy0'; - const YYFALLBACK = 0; - public static $yyFallback = array(); - - public function Trace($TraceFILE, $zTracePrompt) - { - if (!$TraceFILE) { - $zTracePrompt = 0; - } elseif (!$zTracePrompt) { - $TraceFILE = 0; - } - $this->yyTraceFILE = $TraceFILE; - $this->yyTracePrompt = $zTracePrompt; - } - - public function PrintTrace() - { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '
'; - } - - public $yyTraceFILE; - public $yyTracePrompt; - public $yyidx; /* Index of top element in stack */ - public $yyerrcnt; /* Shifts left before out of the error */ - public $yystack = array(); /* The parser's stack */ - - public $yyTokenName = array( - '$', 'VERT', 'COLON', 'RDEL', - 'COMMENT', 'PHPSTARTTAG', 'PHPENDTAG', 'ASPSTARTTAG', - 'ASPENDTAG', 'FAKEPHPSTARTTAG', 'XMLTAG', 'TEXT', - 'STRIPON', 'STRIPOFF', 'BLOCKSOURCE', 'LITERALSTART', - 'LITERALEND', 'LITERAL', 'LDEL', 'DOLLAR', - 'ID', 'EQUAL', 'PTR', 'LDELIF', - 'LDELFOR', 'SEMICOLON', 'INCDEC', 'TO', - 'STEP', 'LDELFOREACH', 'SPACE', 'AS', - 'APTR', 'LDELSETFILTER', 'SMARTYBLOCKCHILDPARENT', 'LDELSLASH', - 'ATTR', 'INTEGER', 'COMMA', 'OPENP', - 'CLOSEP', 'MATH', 'UNIMATH', 'ANDSYM', - 'ISIN', 'ISDIVBY', 'ISNOTDIVBY', 'ISEVEN', - 'ISNOTEVEN', 'ISEVENBY', 'ISNOTEVENBY', 'ISODD', - 'ISNOTODD', 'ISODDBY', 'ISNOTODDBY', 'INSTANCEOF', - 'QMARK', 'NOT', 'TYPECAST', 'HEX', - 'DOT', 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'AT', - 'HATCH', 'OPENB', 'CLOSEB', 'EQUALS', - 'NOTEQUALS', 'GREATERTHAN', 'LESSTHAN', 'GREATEREQUAL', - 'LESSEQUAL', 'IDENTITY', 'NONEIDENTITY', 'MOD', - 'LAND', 'LOR', 'LXOR', 'QUOTE', - 'BACKTICK', 'DOLLARID', 'error', 'start', - 'template', 'template_element', 'smartytag', 'literal', - 'literal_elements', 'literal_element', 'value', 'modifierlist', - 'attributes', 'expr', 'varindexed', 'statement', - 'statements', 'optspace', 'varvar', 'foraction', - 'modparameters', 'attribute', 'ternary', 'array', - 'ifcond', 'lop', 'variable', 'function', - 'doublequoted_with_quotes', 'static_class_access', 'object', 'arrayindex', - 'indexdef', 'varvarele', 'objectchain', 'objectelement', - 'method', 'params', 'modifier', 'modparameter', - 'arrayelements', 'arrayelement', 'doublequoted', 'doublequotedcontent', - ); - - public static $yyRuleName = array( - /* 0 */ - "start ::= template", - /* 1 */ - "template ::= template_element", - /* 2 */ - "template ::= template template_element", - /* 3 */ - "template ::=", - /* 4 */ - "template_element ::= smartytag RDEL", - /* 5 */ - "template_element ::= COMMENT", - /* 6 */ - "template_element ::= literal", - /* 7 */ - "template_element ::= PHPSTARTTAG", - /* 8 */ - "template_element ::= PHPENDTAG", - /* 9 */ - "template_element ::= ASPSTARTTAG", - /* 10 */ - "template_element ::= ASPENDTAG", - /* 11 */ - "template_element ::= FAKEPHPSTARTTAG", - /* 12 */ - "template_element ::= XMLTAG", - /* 13 */ - "template_element ::= TEXT", - /* 14 */ - "template_element ::= STRIPON", - /* 15 */ - "template_element ::= STRIPOFF", - /* 16 */ - "template_element ::= BLOCKSOURCE", - /* 17 */ - "literal ::= LITERALSTART LITERALEND", - /* 18 */ - "literal ::= LITERALSTART literal_elements LITERALEND", - /* 19 */ - "literal_elements ::= literal_elements literal_element", - /* 20 */ - "literal_elements ::=", - /* 21 */ - "literal_element ::= literal", - /* 22 */ - "literal_element ::= LITERAL", - /* 23 */ - "literal_element ::= PHPSTARTTAG", - /* 24 */ - "literal_element ::= FAKEPHPSTARTTAG", - /* 25 */ - "literal_element ::= PHPENDTAG", - /* 26 */ - "literal_element ::= ASPSTARTTAG", - /* 27 */ - "literal_element ::= ASPENDTAG", - /* 28 */ - "smartytag ::= LDEL value", - /* 29 */ - "smartytag ::= LDEL value modifierlist attributes", - /* 30 */ - "smartytag ::= LDEL value attributes", - /* 31 */ - "smartytag ::= LDEL expr modifierlist attributes", - /* 32 */ - "smartytag ::= LDEL expr attributes", - /* 33 */ - "smartytag ::= LDEL DOLLAR ID EQUAL value", - /* 34 */ - "smartytag ::= LDEL DOLLAR ID EQUAL expr", - /* 35 */ - "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes", - /* 36 */ - "smartytag ::= LDEL varindexed EQUAL expr attributes", - /* 37 */ - "smartytag ::= LDEL ID attributes", - /* 38 */ - "smartytag ::= LDEL ID", - /* 39 */ - "smartytag ::= LDEL ID PTR ID attributes", - /* 40 */ - "smartytag ::= LDEL ID modifierlist attributes", - /* 41 */ - "smartytag ::= LDEL ID PTR ID modifierlist attributes", - /* 42 */ - "smartytag ::= LDELIF expr", - /* 43 */ - "smartytag ::= LDELIF expr attributes", - /* 44 */ - "smartytag ::= LDELIF statement", - /* 45 */ - "smartytag ::= LDELIF statement attributes", - /* 46 */ - "smartytag ::= LDELFOR statements SEMICOLON optspace expr SEMICOLON optspace DOLLAR varvar foraction attributes", - /* 47 */ - "foraction ::= EQUAL expr", - /* 48 */ - "foraction ::= INCDEC", - /* 49 */ - "smartytag ::= LDELFOR statement TO expr attributes", - /* 50 */ - "smartytag ::= LDELFOR statement TO expr STEP expr attributes", - /* 51 */ - "smartytag ::= LDELFOREACH attributes", - /* 52 */ - "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar attributes", - /* 53 */ - "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar attributes", - /* 54 */ - "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar attributes", - /* 55 */ - "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar APTR DOLLAR varvar attributes", - /* 56 */ - "smartytag ::= LDELSETFILTER ID modparameters", - /* 57 */ - "smartytag ::= LDELSETFILTER ID modparameters modifierlist", - /* 58 */ - "smartytag ::= LDEL SMARTYBLOCKCHILDPARENT", - /* 59 */ - "smartytag ::= LDELSLASH ID", - /* 60 */ - "smartytag ::= LDELSLASH ID modifierlist", - /* 61 */ - "smartytag ::= LDELSLASH ID PTR ID", - /* 62 */ - "smartytag ::= LDELSLASH ID PTR ID modifierlist", - /* 63 */ - "attributes ::= attributes attribute", - /* 64 */ - "attributes ::= attribute", - /* 65 */ - "attributes ::=", - /* 66 */ - "attribute ::= SPACE ID EQUAL ID", - /* 67 */ - "attribute ::= ATTR expr", - /* 68 */ - "attribute ::= ATTR value", - /* 69 */ - "attribute ::= SPACE ID", - /* 70 */ - "attribute ::= SPACE expr", - /* 71 */ - "attribute ::= SPACE value", - /* 72 */ - "attribute ::= SPACE INTEGER EQUAL expr", - /* 73 */ - "statements ::= statement", - /* 74 */ - "statements ::= statements COMMA statement", - /* 75 */ - "statement ::= DOLLAR varvar EQUAL expr", - /* 76 */ - "statement ::= varindexed EQUAL expr", - /* 77 */ - "statement ::= OPENP statement CLOSEP", - /* 78 */ - "expr ::= value", - /* 79 */ - "expr ::= ternary", - /* 80 */ - "expr ::= DOLLAR ID COLON ID", - /* 81 */ - "expr ::= expr MATH value", - /* 82 */ - "expr ::= expr UNIMATH value", - /* 83 */ - "expr ::= expr ANDSYM value", - /* 84 */ - "expr ::= array", - /* 85 */ - "expr ::= expr modifierlist", - /* 86 */ - "expr ::= expr ifcond expr", - /* 87 */ - "expr ::= expr ISIN array", - /* 88 */ - "expr ::= expr ISIN value", - /* 89 */ - "expr ::= expr lop expr", - /* 90 */ - "expr ::= expr ISDIVBY expr", - /* 91 */ - "expr ::= expr ISNOTDIVBY expr", - /* 92 */ - "expr ::= expr ISEVEN", - /* 93 */ - "expr ::= expr ISNOTEVEN", - /* 94 */ - "expr ::= expr ISEVENBY expr", - /* 95 */ - "expr ::= expr ISNOTEVENBY expr", - /* 96 */ - "expr ::= expr ISODD", - /* 97 */ - "expr ::= expr ISNOTODD", - /* 98 */ - "expr ::= expr ISODDBY expr", - /* 99 */ - "expr ::= expr ISNOTODDBY expr", - /* 100 */ - "expr ::= value INSTANCEOF ID", - /* 101 */ - "expr ::= value INSTANCEOF value", - /* 102 */ - "ternary ::= OPENP expr CLOSEP QMARK DOLLAR ID COLON expr", - /* 103 */ - "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr", - /* 104 */ - "value ::= variable", - /* 105 */ - "value ::= UNIMATH value", - /* 106 */ - "value ::= NOT value", - /* 107 */ - "value ::= TYPECAST value", - /* 108 */ - "value ::= variable INCDEC", - /* 109 */ - "value ::= HEX", - /* 110 */ - "value ::= INTEGER", - /* 111 */ - "value ::= INTEGER DOT INTEGER", - /* 112 */ - "value ::= INTEGER DOT", - /* 113 */ - "value ::= DOT INTEGER", - /* 114 */ - "value ::= ID", - /* 115 */ - "value ::= function", - /* 116 */ - "value ::= OPENP expr CLOSEP", - /* 117 */ - "value ::= SINGLEQUOTESTRING", - /* 118 */ - "value ::= doublequoted_with_quotes", - /* 119 */ - "value ::= ID DOUBLECOLON static_class_access", - /* 120 */ - "value ::= varindexed DOUBLECOLON static_class_access", - /* 121 */ - "value ::= smartytag RDEL", - /* 122 */ - "value ::= value modifierlist", - /* 123 */ - "variable ::= varindexed", - /* 124 */ - "variable ::= DOLLAR varvar AT ID", - /* 125 */ - "variable ::= object", - /* 126 */ - "variable ::= HATCH ID HATCH", - /* 127 */ - "variable ::= HATCH ID HATCH arrayindex", - /* 128 */ - "variable ::= HATCH variable HATCH", - /* 129 */ - "variable ::= HATCH variable HATCH arrayindex", - /* 130 */ - "varindexed ::= DOLLAR varvar arrayindex", - /* 131 */ - "arrayindex ::= arrayindex indexdef", - /* 132 */ - "arrayindex ::=", - /* 133 */ - "indexdef ::= DOT DOLLAR varvar", - /* 134 */ - "indexdef ::= DOT DOLLAR varvar AT ID", - /* 135 */ - "indexdef ::= DOT ID", - /* 136 */ - "indexdef ::= DOT INTEGER", - /* 137 */ - "indexdef ::= DOT LDEL expr RDEL", - /* 138 */ - "indexdef ::= OPENB ID CLOSEB", - /* 139 */ - "indexdef ::= OPENB ID DOT ID CLOSEB", - /* 140 */ - "indexdef ::= OPENB expr CLOSEB", - /* 141 */ - "indexdef ::= OPENB CLOSEB", - /* 142 */ - "varvar ::= varvarele", - /* 143 */ - "varvar ::= varvar varvarele", - /* 144 */ - "varvarele ::= ID", - /* 145 */ - "varvarele ::= LDEL expr RDEL", - /* 146 */ - "object ::= varindexed objectchain", - /* 147 */ - "objectchain ::= objectelement", - /* 148 */ - "objectchain ::= objectchain objectelement", - /* 149 */ - "objectelement ::= PTR ID arrayindex", - /* 150 */ - "objectelement ::= PTR DOLLAR varvar arrayindex", - /* 151 */ - "objectelement ::= PTR LDEL expr RDEL arrayindex", - /* 152 */ - "objectelement ::= PTR ID LDEL expr RDEL arrayindex", - /* 153 */ - "objectelement ::= PTR method", - /* 154 */ - "function ::= ID OPENP params CLOSEP", - /* 155 */ - "method ::= ID OPENP params CLOSEP", - /* 156 */ - "method ::= DOLLAR ID OPENP params CLOSEP", - /* 157 */ - "params ::= params COMMA expr", - /* 158 */ - "params ::= expr", - /* 159 */ - "params ::=", - /* 160 */ - "modifierlist ::= modifierlist modifier modparameters", - /* 161 */ - "modifierlist ::= modifier modparameters", - /* 162 */ - "modifier ::= VERT AT ID", - /* 163 */ - "modifier ::= VERT ID", - /* 164 */ - "modparameters ::= modparameters modparameter", - /* 165 */ - "modparameters ::=", - /* 166 */ - "modparameter ::= COLON value", - /* 167 */ - "modparameter ::= COLON array", - /* 168 */ - "static_class_access ::= method", - /* 169 */ - "static_class_access ::= method objectchain", - /* 170 */ - "static_class_access ::= ID", - /* 171 */ - "static_class_access ::= DOLLAR ID arrayindex", - /* 172 */ - "static_class_access ::= DOLLAR ID arrayindex objectchain", - /* 173 */ - "ifcond ::= EQUALS", - /* 174 */ - "ifcond ::= NOTEQUALS", - /* 175 */ - "ifcond ::= GREATERTHAN", - /* 176 */ - "ifcond ::= LESSTHAN", - /* 177 */ - "ifcond ::= GREATEREQUAL", - /* 178 */ - "ifcond ::= LESSEQUAL", - /* 179 */ - "ifcond ::= IDENTITY", - /* 180 */ - "ifcond ::= NONEIDENTITY", - /* 181 */ - "ifcond ::= MOD", - /* 182 */ - "lop ::= LAND", - /* 183 */ - "lop ::= LOR", - /* 184 */ - "lop ::= LXOR", - /* 185 */ - "array ::= OPENB arrayelements CLOSEB", - /* 186 */ - "arrayelements ::= arrayelement", - /* 187 */ - "arrayelements ::= arrayelements COMMA arrayelement", - /* 188 */ - "arrayelements ::=", - /* 189 */ - "arrayelement ::= value APTR expr", - /* 190 */ - "arrayelement ::= ID APTR expr", - /* 191 */ - "arrayelement ::= expr", - /* 192 */ - "doublequoted_with_quotes ::= QUOTE QUOTE", - /* 193 */ - "doublequoted_with_quotes ::= QUOTE doublequoted QUOTE", - /* 194 */ - "doublequoted ::= doublequoted doublequotedcontent", - /* 195 */ - "doublequoted ::= doublequotedcontent", - /* 196 */ - "doublequotedcontent ::= BACKTICK variable BACKTICK", - /* 197 */ - "doublequotedcontent ::= BACKTICK expr BACKTICK", - /* 198 */ - "doublequotedcontent ::= DOLLARID", - /* 199 */ - "doublequotedcontent ::= LDEL variable RDEL", - /* 200 */ - "doublequotedcontent ::= LDEL expr RDEL", - /* 201 */ - "doublequotedcontent ::= smartytag RDEL", - /* 202 */ - "doublequotedcontent ::= TEXT", - /* 203 */ - "optspace ::= SPACE", - /* 204 */ - "optspace ::=", - ); - - public function tokenName($tokenType) - { - if ($tokenType === 0) { - return 'End of Input'; - } - if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) { - return $this->yyTokenName[$tokenType]; - } else { - return "Unknown"; - } - } - - public static function yy_destructor($yymajor, $yypminor) - { - switch ($yymajor) { - default: - break; /* If no destructor action specified: do nothing */ - } - } - - public function yy_pop_parser_stack() - { - if (!count($this->yystack)) { - return; - } - $yytos = array_pop($this->yystack); - if ($this->yyTraceFILE && $this->yyidx >= 0) { - fwrite($this->yyTraceFILE, - $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] . - "\n"); - } - $yymajor = $yytos->major; - self::yy_destructor($yymajor, $yytos->minor); - $this->yyidx --; - - return $yymajor; - } - - public function __destruct() - { - while ($this->yystack !== Array()) { - $this->yy_pop_parser_stack(); - } - if (is_resource($this->yyTraceFILE)) { - fclose($this->yyTraceFILE); - } - } - - public function yy_get_expected_tokens($token) - { - $state = $this->yystack[$this->yyidx]->stateno; - $expected = self::$yyExpectedTokens[$state]; - if (in_array($token, self::$yyExpectedTokens[$state], true)) { - return $expected; - } - $stack = $this->yystack; - $yyidx = $this->yyidx; - do { - $yyact = $this->yy_find_shift_action($token); - if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) { - // reduce action - $done = 0; - do { - if ($done ++ == 100) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // too much recursion prevents proper detection - // so give up - return array_unique($expected); - } - $yyruleno = $yyact - self::YYNSTATE; - $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs']; - $nextstate = $this->yy_find_reduce_action( - $this->yystack[$this->yyidx]->stateno, - self::$yyRuleInfo[$yyruleno]['lhs']); - if (isset(self::$yyExpectedTokens[$nextstate])) { - $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]); - if (in_array($token, - self::$yyExpectedTokens[$nextstate], true)) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - - return array_unique($expected); - } - } - if ($nextstate < self::YYNSTATE) { - // we need to shift a non-terminal - $this->yyidx ++; - $x = new TP_yyStackEntry; - $x->stateno = $nextstate; - $x->major = self::$yyRuleInfo[$yyruleno]['lhs']; - $this->yystack[$this->yyidx] = $x; - continue 2; - } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // the last token was just ignored, we can't accept - // by ignoring input, this is in essence ignoring a - // syntax error! - return array_unique($expected); - } elseif ($nextstate === self::YY_NO_ACTION) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // input accepted, but not shifted (I guess) - return $expected; - } else { - $yyact = $nextstate; - } - } while (true); - } - break; - } while (true); - $this->yyidx = $yyidx; - $this->yystack = $stack; - - return array_unique($expected); - } - - public function yy_is_expected_token($token) - { - if ($token === 0) { - return true; // 0 is not part of this - } - $state = $this->yystack[$this->yyidx]->stateno; - if (in_array($token, self::$yyExpectedTokens[$state], true)) { - return true; - } - $stack = $this->yystack; - $yyidx = $this->yyidx; - do { - $yyact = $this->yy_find_shift_action($token); - if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) { - // reduce action - $done = 0; - do { - if ($done ++ == 100) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // too much recursion prevents proper detection - // so give up - return true; - } - $yyruleno = $yyact - self::YYNSTATE; - $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs']; - $nextstate = $this->yy_find_reduce_action( - $this->yystack[$this->yyidx]->stateno, - self::$yyRuleInfo[$yyruleno]['lhs']); - if (isset(self::$yyExpectedTokens[$nextstate]) && - in_array($token, self::$yyExpectedTokens[$nextstate], true) - ) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - - return true; - } - if ($nextstate < self::YYNSTATE) { - // we need to shift a non-terminal - $this->yyidx ++; - $x = new TP_yyStackEntry; - $x->stateno = $nextstate; - $x->major = self::$yyRuleInfo[$yyruleno]['lhs']; - $this->yystack[$this->yyidx] = $x; - continue 2; - } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - if (!$token) { - // end of input: this is valid - return true; - } - // the last token was just ignored, we can't accept - // by ignoring input, this is in essence ignoring a - // syntax error! - return false; - } elseif ($nextstate === self::YY_NO_ACTION) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // input accepted, but not shifted (I guess) - return true; - } else { - $yyact = $nextstate; - } - } while (true); - } - break; - } while (true); - $this->yyidx = $yyidx; - $this->yystack = $stack; - - return true; - } - - public function yy_find_shift_action($iLookAhead) - { - $stateno = $this->yystack[$this->yyidx]->stateno; - - /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */ - if (!isset(self::$yy_shift_ofst[$stateno])) { - // no shift actions - return self::$yy_default[$stateno]; - } - $i = self::$yy_shift_ofst[$stateno]; - if ($i === self::YY_SHIFT_USE_DFLT) { - return self::$yy_default[$stateno]; - } - if ($iLookAhead == self::YYNOCODE) { - return self::YY_NO_ACTION; - } - $i += $iLookAhead; - if ($i < 0 || $i >= self::YY_SZ_ACTTAB || - self::$yy_lookahead[$i] != $iLookAhead - ) { - if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback) - && ($iFallback = self::$yyFallback[$iLookAhead]) != 0 - ) { - if ($this->yyTraceFILE) { - fwrite($this->yyTraceFILE, $this->yyTracePrompt . "FALLBACK " . - $this->yyTokenName[$iLookAhead] . " => " . - $this->yyTokenName[$iFallback] . "\n"); - } - - return $this->yy_find_shift_action($iFallback); - } - - return self::$yy_default[$stateno]; - } else { - return self::$yy_action[$i]; - } - } - - public function yy_find_reduce_action($stateno, $iLookAhead) - { - /* $stateno = $this->yystack[$this->yyidx]->stateno; */ - - if (!isset(self::$yy_reduce_ofst[$stateno])) { - return self::$yy_default[$stateno]; - } - $i = self::$yy_reduce_ofst[$stateno]; - if ($i == self::YY_REDUCE_USE_DFLT) { - return self::$yy_default[$stateno]; - } - if ($iLookAhead == self::YYNOCODE) { - return self::YY_NO_ACTION; - } - $i += $iLookAhead; - if ($i < 0 || $i >= self::YY_SZ_ACTTAB || - self::$yy_lookahead[$i] != $iLookAhead - ) { - return self::$yy_default[$stateno]; - } else { - return self::$yy_action[$i]; - } - } - - public function yy_shift($yyNewState, $yyMajor, $yypMinor) - { - $this->yyidx ++; - if ($this->yyidx >= self::YYSTACKDEPTH) { - $this->yyidx --; - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt); - } - while ($this->yyidx >= 0) { - $this->yy_pop_parser_stack(); - } - #line 85 "smarty_internal_templateparser.y" - - $this->internalError = true; - $this->compiler->trigger_template_error("Stack overflow in template parser"); - #line 1707 "smarty_internal_templateparser.php" - - return; - } - $yytos = new TP_yyStackEntry; - $yytos->stateno = $yyNewState; - $yytos->major = $yyMajor; - $yytos->minor = $yypMinor; - array_push($this->yystack, $yytos); - if ($this->yyTraceFILE && $this->yyidx > 0) { - fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt, - $yyNewState); - fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt); - for ($i = 1; $i <= $this->yyidx; $i ++) { - fprintf($this->yyTraceFILE, " %s", - $this->yyTokenName[$this->yystack[$i]->major]); - } - fwrite($this->yyTraceFILE, "\n"); - } - } - - public static $yyRuleInfo = array( - array('lhs' => 83, 'rhs' => 1), - array('lhs' => 84, 'rhs' => 1), - array('lhs' => 84, 'rhs' => 2), - array('lhs' => 84, 'rhs' => 0), - array('lhs' => 85, 'rhs' => 2), - array('lhs' => 85, 'rhs' => 1), - array('lhs' => 85, 'rhs' => 1), - array('lhs' => 85, 'rhs' => 1), - array('lhs' => 85, 'rhs' => 1), - array('lhs' => 85, 'rhs' => 1), - array('lhs' => 85, 'rhs' => 1), - array('lhs' => 85, 'rhs' => 1), - array('lhs' => 85, 'rhs' => 1), - array('lhs' => 85, 'rhs' => 1), - array('lhs' => 85, 'rhs' => 1), - array('lhs' => 85, 'rhs' => 1), - array('lhs' => 85, 'rhs' => 1), - array('lhs' => 87, 'rhs' => 2), - array('lhs' => 87, 'rhs' => 3), - array('lhs' => 88, 'rhs' => 2), - array('lhs' => 88, 'rhs' => 0), - array('lhs' => 89, 'rhs' => 1), - array('lhs' => 89, 'rhs' => 1), - array('lhs' => 89, 'rhs' => 1), - array('lhs' => 89, 'rhs' => 1), - array('lhs' => 89, 'rhs' => 1), - array('lhs' => 89, 'rhs' => 1), - array('lhs' => 89, 'rhs' => 1), - array('lhs' => 86, 'rhs' => 2), - array('lhs' => 86, 'rhs' => 4), - array('lhs' => 86, 'rhs' => 3), - array('lhs' => 86, 'rhs' => 4), - array('lhs' => 86, 'rhs' => 3), - array('lhs' => 86, 'rhs' => 5), - array('lhs' => 86, 'rhs' => 5), - array('lhs' => 86, 'rhs' => 6), - array('lhs' => 86, 'rhs' => 5), - array('lhs' => 86, 'rhs' => 3), - array('lhs' => 86, 'rhs' => 2), - array('lhs' => 86, 'rhs' => 5), - array('lhs' => 86, 'rhs' => 4), - array('lhs' => 86, 'rhs' => 6), - array('lhs' => 86, 'rhs' => 2), - array('lhs' => 86, 'rhs' => 3), - array('lhs' => 86, 'rhs' => 2), - array('lhs' => 86, 'rhs' => 3), - array('lhs' => 86, 'rhs' => 11), - array('lhs' => 99, 'rhs' => 2), - array('lhs' => 99, 'rhs' => 1), - array('lhs' => 86, 'rhs' => 5), - array('lhs' => 86, 'rhs' => 7), - array('lhs' => 86, 'rhs' => 2), - array('lhs' => 86, 'rhs' => 7), - array('lhs' => 86, 'rhs' => 10), - array('lhs' => 86, 'rhs' => 7), - array('lhs' => 86, 'rhs' => 10), - array('lhs' => 86, 'rhs' => 3), - array('lhs' => 86, 'rhs' => 4), - array('lhs' => 86, 'rhs' => 2), - array('lhs' => 86, 'rhs' => 2), - array('lhs' => 86, 'rhs' => 3), - array('lhs' => 86, 'rhs' => 4), - array('lhs' => 86, 'rhs' => 5), - array('lhs' => 92, 'rhs' => 2), - array('lhs' => 92, 'rhs' => 1), - array('lhs' => 92, 'rhs' => 0), - array('lhs' => 101, 'rhs' => 4), - array('lhs' => 101, 'rhs' => 2), - array('lhs' => 101, 'rhs' => 2), - array('lhs' => 101, 'rhs' => 2), - array('lhs' => 101, 'rhs' => 2), - array('lhs' => 101, 'rhs' => 2), - array('lhs' => 101, 'rhs' => 4), - array('lhs' => 96, 'rhs' => 1), - array('lhs' => 96, 'rhs' => 3), - array('lhs' => 95, 'rhs' => 4), - array('lhs' => 95, 'rhs' => 3), - array('lhs' => 95, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 1), - array('lhs' => 93, 'rhs' => 1), - array('lhs' => 93, 'rhs' => 4), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 1), - array('lhs' => 93, 'rhs' => 2), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 2), - array('lhs' => 93, 'rhs' => 2), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 2), - array('lhs' => 93, 'rhs' => 2), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 93, 'rhs' => 3), - array('lhs' => 102, 'rhs' => 8), - array('lhs' => 102, 'rhs' => 7), - array('lhs' => 90, 'rhs' => 1), - array('lhs' => 90, 'rhs' => 2), - array('lhs' => 90, 'rhs' => 2), - array('lhs' => 90, 'rhs' => 2), - array('lhs' => 90, 'rhs' => 2), - array('lhs' => 90, 'rhs' => 1), - array('lhs' => 90, 'rhs' => 1), - array('lhs' => 90, 'rhs' => 3), - array('lhs' => 90, 'rhs' => 2), - array('lhs' => 90, 'rhs' => 2), - array('lhs' => 90, 'rhs' => 1), - array('lhs' => 90, 'rhs' => 1), - array('lhs' => 90, 'rhs' => 3), - array('lhs' => 90, 'rhs' => 1), - array('lhs' => 90, 'rhs' => 1), - array('lhs' => 90, 'rhs' => 3), - array('lhs' => 90, 'rhs' => 3), - array('lhs' => 90, 'rhs' => 2), - array('lhs' => 90, 'rhs' => 2), - array('lhs' => 106, 'rhs' => 1), - array('lhs' => 106, 'rhs' => 4), - array('lhs' => 106, 'rhs' => 1), - array('lhs' => 106, 'rhs' => 3), - array('lhs' => 106, 'rhs' => 4), - array('lhs' => 106, 'rhs' => 3), - array('lhs' => 106, 'rhs' => 4), - array('lhs' => 94, 'rhs' => 3), - array('lhs' => 111, 'rhs' => 2), - array('lhs' => 111, 'rhs' => 0), - array('lhs' => 112, 'rhs' => 3), - array('lhs' => 112, 'rhs' => 5), - array('lhs' => 112, 'rhs' => 2), - array('lhs' => 112, 'rhs' => 2), - array('lhs' => 112, 'rhs' => 4), - array('lhs' => 112, 'rhs' => 3), - array('lhs' => 112, 'rhs' => 5), - array('lhs' => 112, 'rhs' => 3), - array('lhs' => 112, 'rhs' => 2), - array('lhs' => 98, 'rhs' => 1), - array('lhs' => 98, 'rhs' => 2), - array('lhs' => 113, 'rhs' => 1), - array('lhs' => 113, 'rhs' => 3), - array('lhs' => 110, 'rhs' => 2), - array('lhs' => 114, 'rhs' => 1), - array('lhs' => 114, 'rhs' => 2), - array('lhs' => 115, 'rhs' => 3), - array('lhs' => 115, 'rhs' => 4), - array('lhs' => 115, 'rhs' => 5), - array('lhs' => 115, 'rhs' => 6), - array('lhs' => 115, 'rhs' => 2), - array('lhs' => 107, 'rhs' => 4), - array('lhs' => 116, 'rhs' => 4), - array('lhs' => 116, 'rhs' => 5), - array('lhs' => 117, 'rhs' => 3), - array('lhs' => 117, 'rhs' => 1), - array('lhs' => 117, 'rhs' => 0), - array('lhs' => 91, 'rhs' => 3), - array('lhs' => 91, 'rhs' => 2), - array('lhs' => 118, 'rhs' => 3), - array('lhs' => 118, 'rhs' => 2), - array('lhs' => 100, 'rhs' => 2), - array('lhs' => 100, 'rhs' => 0), - array('lhs' => 119, 'rhs' => 2), - array('lhs' => 119, 'rhs' => 2), - array('lhs' => 109, 'rhs' => 1), - array('lhs' => 109, 'rhs' => 2), - array('lhs' => 109, 'rhs' => 1), - array('lhs' => 109, 'rhs' => 3), - array('lhs' => 109, 'rhs' => 4), - array('lhs' => 104, 'rhs' => 1), - array('lhs' => 104, 'rhs' => 1), - array('lhs' => 104, 'rhs' => 1), - array('lhs' => 104, 'rhs' => 1), - array('lhs' => 104, 'rhs' => 1), - array('lhs' => 104, 'rhs' => 1), - array('lhs' => 104, 'rhs' => 1), - array('lhs' => 104, 'rhs' => 1), - array('lhs' => 104, 'rhs' => 1), - array('lhs' => 105, 'rhs' => 1), - array('lhs' => 105, 'rhs' => 1), - array('lhs' => 105, 'rhs' => 1), - array('lhs' => 103, 'rhs' => 3), - array('lhs' => 120, 'rhs' => 1), - array('lhs' => 120, 'rhs' => 3), - array('lhs' => 120, 'rhs' => 0), - array('lhs' => 121, 'rhs' => 3), - array('lhs' => 121, 'rhs' => 3), - array('lhs' => 121, 'rhs' => 1), - array('lhs' => 108, 'rhs' => 2), - array('lhs' => 108, 'rhs' => 3), - array('lhs' => 122, 'rhs' => 2), - array('lhs' => 122, 'rhs' => 1), - array('lhs' => 123, 'rhs' => 3), - array('lhs' => 123, 'rhs' => 3), - array('lhs' => 123, 'rhs' => 1), - array('lhs' => 123, 'rhs' => 3), - array('lhs' => 123, 'rhs' => 3), - array('lhs' => 123, 'rhs' => 2), - array('lhs' => 123, 'rhs' => 1), - array('lhs' => 97, 'rhs' => 1), - array('lhs' => 97, 'rhs' => 0), - ); - - public static $yyReduceMap = array( - 0 => 0, - 1 => 1, - 2 => 1, - 4 => 4, - 5 => 5, - 6 => 6, - 7 => 7, - 8 => 8, - 9 => 9, - 10 => 10, - 11 => 11, - 12 => 12, - 13 => 13, - 14 => 14, - 15 => 15, - 16 => 16, - 17 => 17, - 20 => 17, - 204 => 17, - 18 => 18, - 77 => 18, - 19 => 19, - 105 => 19, - 107 => 19, - 108 => 19, - 131 => 19, - 169 => 19, - 21 => 21, - 22 => 21, - 48 => 21, - 70 => 21, - 71 => 21, - 78 => 21, - 79 => 21, - 84 => 21, - 104 => 21, - 109 => 21, - 110 => 21, - 115 => 21, - 117 => 21, - 118 => 21, - 125 => 21, - 142 => 21, - 168 => 21, - 170 => 21, - 186 => 21, - 191 => 21, - 203 => 21, - 23 => 23, - 24 => 23, - 25 => 25, - 26 => 26, - 27 => 27, - 28 => 28, - 29 => 29, - 30 => 30, - 32 => 30, - 31 => 31, - 33 => 33, - 34 => 33, - 35 => 35, - 36 => 36, - 37 => 37, - 38 => 38, - 39 => 39, - 40 => 40, - 41 => 41, - 42 => 42, - 43 => 43, - 45 => 43, - 44 => 44, - 46 => 46, - 47 => 47, - 49 => 49, - 50 => 50, - 51 => 51, - 52 => 52, - 54 => 52, - 53 => 53, - 55 => 53, - 56 => 56, - 57 => 57, - 58 => 58, - 59 => 59, - 60 => 60, - 61 => 61, - 62 => 62, - 63 => 63, - 64 => 64, - 73 => 64, - 158 => 64, - 162 => 64, - 166 => 64, - 167 => 64, - 65 => 65, - 159 => 65, - 165 => 65, - 66 => 66, - 67 => 67, - 68 => 67, - 69 => 69, - 72 => 72, - 74 => 74, - 75 => 75, - 76 => 75, - 80 => 80, - 81 => 81, - 82 => 81, - 83 => 81, - 85 => 85, - 122 => 85, - 86 => 86, - 89 => 86, - 100 => 86, - 87 => 87, - 88 => 88, - 90 => 90, - 91 => 91, - 92 => 92, - 97 => 92, - 93 => 93, - 96 => 93, - 94 => 94, - 99 => 94, - 95 => 95, - 98 => 95, - 101 => 101, - 102 => 102, - 103 => 103, - 106 => 106, - 111 => 111, - 112 => 112, - 113 => 113, - 114 => 114, - 116 => 116, - 119 => 119, - 120 => 120, - 121 => 121, - 123 => 123, - 124 => 124, - 126 => 126, - 127 => 127, - 128 => 128, - 129 => 129, - 130 => 130, - 132 => 132, - 188 => 132, - 133 => 133, - 134 => 134, - 135 => 135, - 136 => 136, - 137 => 137, - 140 => 137, - 138 => 138, - 139 => 139, - 141 => 141, - 143 => 143, - 144 => 144, - 145 => 145, - 146 => 146, - 147 => 147, - 148 => 148, - 149 => 149, - 150 => 150, - 151 => 151, - 152 => 152, - 153 => 153, - 154 => 154, - 155 => 155, - 156 => 156, - 157 => 157, - 160 => 160, - 161 => 161, - 163 => 163, - 164 => 164, - 171 => 171, - 172 => 172, - 173 => 173, - 174 => 174, - 175 => 175, - 176 => 176, - 177 => 177, - 178 => 178, - 179 => 179, - 180 => 180, - 181 => 181, - 182 => 182, - 183 => 183, - 184 => 184, - 185 => 185, - 187 => 187, - 189 => 189, - 190 => 190, - 192 => 192, - 193 => 193, - 194 => 194, - 195 => 195, - 196 => 196, - 197 => 196, - 199 => 196, - 198 => 198, - 200 => 200, - 201 => 201, - 202 => 202, - ); - - #line 96 "smarty_internal_templateparser.y" - function yy_r0() - { - $this->_retvalue = $this->root_buffer->to_smarty_php(); - } - #line 2146 "smarty_internal_templateparser.php" - #line 104 "smarty_internal_templateparser.y" - function yy_r1() - { - if ($this->yystack[$this->yyidx + 0]->minor != null) { - $this->current_buffer->append_subtree($this->yystack[$this->yyidx + 0]->minor); - } - } - #line 2153 "smarty_internal_templateparser.php" - #line 124 "smarty_internal_templateparser.y" - function yy_r4() - { - if ($this->compiler->has_code) { - $tmp = ''; - foreach ($this->compiler->prefix_code as $code) { - $tmp .= $code; - } - $this->compiler->prefix_code = array(); - $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode($tmp . $this->yystack[$this->yyidx + - 1]->minor, true)); - } else { - $this->_retvalue = null; - } - $this->compiler->has_variable_string = false; - $this->block_nesting_level = count($this->compiler->_tag_stack); - } - #line 2165 "smarty_internal_templateparser.php" - #line 136 "smarty_internal_templateparser.y" - function yy_r5() - { - $this->_retvalue = null; - } - #line 2170 "smarty_internal_templateparser.php" - #line 141 "smarty_internal_templateparser.y" - function yy_r6() - { - $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor); - } - #line 2175 "smarty_internal_templateparser.php" - #line 146 "smarty_internal_templateparser.y" - function yy_r7() - { - if ($this->php_handling == Smarty::PHP_PASSTHRU) { - $this->_retvalue = new _smarty_text($this, self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor)); - } elseif ($this->php_handling == Smarty::PHP_QUOTE) { - $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES)); - } elseif ($this->php_handling == Smarty::PHP_ALLOW) { - if (!($this->smarty instanceof SmartyBC)) { - $this->compiler->trigger_template_error(self::Err3); - } - $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('php_handling == Smarty::PHP_REMOVE) { - $this->_retvalue = null; - } - } - #line 2191 "smarty_internal_templateparser.php" - #line 162 "smarty_internal_templateparser.y" - function yy_r8() - { - if ($this->is_xml) { - $this->compiler->tag_nocache = true; - $this->is_xml = false; - $save = $this->template->has_nocache_code; - $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode("';?>\n", $this->compiler, true)); - $this->template->has_nocache_code = $save; - } elseif ($this->php_handling == Smarty::PHP_PASSTHRU) { - $this->_retvalue = new _smarty_text($this, '?>'); - } elseif ($this->php_handling == Smarty::PHP_QUOTE) { - $this->_retvalue = new _smarty_text($this, htmlspecialchars('?>', ENT_QUOTES)); - } elseif ($this->php_handling == Smarty::PHP_ALLOW) { - $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('?>', true)); - } elseif ($this->php_handling == Smarty::PHP_REMOVE) { - $this->_retvalue = null; - } - } - #line 2210 "smarty_internal_templateparser.php" - #line 181 "smarty_internal_templateparser.y" - function yy_r9() - { - if ($this->php_handling == Smarty::PHP_PASSTHRU) { - $this->_retvalue = new _smarty_text($this, '<%'); - } elseif ($this->php_handling == Smarty::PHP_QUOTE) { - $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES)); - } elseif ($this->php_handling == Smarty::PHP_ALLOW) { - if ($this->asp_tags) { - if (!($this->smarty instanceof SmartyBC)) { - $this->compiler->trigger_template_error(self::Err3); - } - $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('<%', true)); - } else { - $this->_retvalue = new _smarty_text($this, '<%'); - } - } elseif ($this->php_handling == Smarty::PHP_REMOVE) { - if ($this->asp_tags) { - $this->_retvalue = null; - } else { - $this->_retvalue = new _smarty_text($this, '<%'); - } - } - } - #line 2234 "smarty_internal_templateparser.php" - #line 205 "smarty_internal_templateparser.y" - function yy_r10() - { - if ($this->php_handling == Smarty::PHP_PASSTHRU) { - $this->_retvalue = new _smarty_text($this, '%>'); - } elseif ($this->php_handling == Smarty::PHP_QUOTE) { - $this->_retvalue = new _smarty_text($this, htmlspecialchars('%>', ENT_QUOTES)); - } elseif ($this->php_handling == Smarty::PHP_ALLOW) { - if ($this->asp_tags) { - $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('%>', true)); - } else { - $this->_retvalue = new _smarty_text($this, '%>'); - } - } elseif ($this->php_handling == Smarty::PHP_REMOVE) { - if ($this->asp_tags) { - $this->_retvalue = null; - } else { - $this->_retvalue = new _smarty_text($this, '%>'); - } - } - } - #line 2255 "smarty_internal_templateparser.php" - #line 225 "smarty_internal_templateparser.y" - function yy_r11() - { - if ($this->strip) { - $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor))); - } else { - $this->_retvalue = new _smarty_text($this, self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor)); - } - } - #line 2264 "smarty_internal_templateparser.php" - #line 234 "smarty_internal_templateparser.y" - function yy_r12() - { - $this->compiler->tag_nocache = true; - $this->is_xml = true; - $save = $this->template->has_nocache_code; - $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode("", $this->compiler, true)); - $this->template->has_nocache_code = $save; - } - #line 2273 "smarty_internal_templateparser.php" - #line 243 "smarty_internal_templateparser.y" - function yy_r13() - { - if ($this->strip) { - $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor)); - } else { - $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor); - } - } - #line 2282 "smarty_internal_templateparser.php" - #line 252 "smarty_internal_templateparser.y" - function yy_r14() - { - $this->strip = true; - } - #line 2287 "smarty_internal_templateparser.php" - #line 256 "smarty_internal_templateparser.y" - function yy_r15() - { - $this->strip = false; - } - #line 2292 "smarty_internal_templateparser.php" - #line 260 "smarty_internal_templateparser.y" - function yy_r16() - { - if ($this->strip) { - SMARTY_INTERNAL_COMPILE_BLOCK::blockSource($this->compiler, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor)); - } else { - SMARTY_INTERNAL_COMPILE_BLOCK::blockSource($this->compiler, $this->yystack[$this->yyidx + 0]->minor); - } - } - #line 2301 "smarty_internal_templateparser.php" - #line 269 "smarty_internal_templateparser.y" - function yy_r17() - { - $this->_retvalue = ''; - } - #line 2306 "smarty_internal_templateparser.php" - #line 273 "smarty_internal_templateparser.y" - function yy_r18() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor; - } - #line 2311 "smarty_internal_templateparser.php" - #line 277 "smarty_internal_templateparser.y" - function yy_r19() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2316 "smarty_internal_templateparser.php" - #line 285 "smarty_internal_templateparser.y" - function yy_r21() - { - $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; - } - #line 2321 "smarty_internal_templateparser.php" - #line 293 "smarty_internal_templateparser.y" - function yy_r23() - { - $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor); - } - #line 2326 "smarty_internal_templateparser.php" - #line 301 "smarty_internal_templateparser.y" - function yy_r25() - { - $this->_retvalue = self::escape_end_tag($this->yystack[$this->yyidx + 0]->minor); - } - #line 2331 "smarty_internal_templateparser.php" - #line 305 "smarty_internal_templateparser.y" - function yy_r26() - { - $this->_retvalue = '<%'; - } - #line 2336 "smarty_internal_templateparser.php" - #line 309 "smarty_internal_templateparser.y" - function yy_r27() - { - $this->_retvalue = '%>'; - } - #line 2341 "smarty_internal_templateparser.php" - #line 318 "smarty_internal_templateparser.y" - function yy_r28() - { - $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), array('value' => $this->yystack[$this->yyidx + 0]->minor)); - } - #line 2346 "smarty_internal_templateparser.php" - #line 322 "smarty_internal_templateparser.y" - function yy_r29() - { - $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[$this->yyidx + 0]->minor, array('value' => $this->yystack[$this->yyidx + - 2]->minor, 'modifierlist' => $this->yystack[$this->yyidx + - 1]->minor)); - } - #line 2351 "smarty_internal_templateparser.php" - #line 326 "smarty_internal_templateparser.y" - function yy_r30() - { - $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[$this->yyidx + 0]->minor, array('value' => $this->yystack[$this->yyidx + - 1]->minor)); - } - #line 2356 "smarty_internal_templateparser.php" - #line 330 "smarty_internal_templateparser.y" - function yy_r31() - { - $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[$this->yyidx + 0]->minor, array('value' => $this->yystack[$this->yyidx + - 2]->minor, 'modifierlist' => $this->yystack[$this->yyidx + - 1]->minor)); - } - #line 2361 "smarty_internal_templateparser.php" - #line 343 "smarty_internal_templateparser.y" - function yy_r33() - { - $this->_retvalue = $this->compiler->compileTag('assign', array(array('value' => $this->yystack[$this->yyidx + 0]->minor), array('var' => "'" . $this->yystack[$this->yyidx + - 2]->minor . "'"))); - } - #line 2366 "smarty_internal_templateparser.php" - #line 351 "smarty_internal_templateparser.y" - function yy_r35() - { - $this->_retvalue = $this->compiler->compileTag('assign', array_merge(array(array('value' => $this->yystack[$this->yyidx + - 1]->minor), array('var' => "'" . $this->yystack[$this->yyidx + - 3]->minor . "'")), $this->yystack[$this->yyidx + 0]->minor)); - } - #line 2371 "smarty_internal_templateparser.php" - #line 355 "smarty_internal_templateparser.y" - function yy_r36() - { - $this->_retvalue = $this->compiler->compileTag('assign', array_merge(array(array('value' => $this->yystack[$this->yyidx + - 1]->minor), array('var' => $this->yystack[$this->yyidx + - 3]->minor['var'])), $this->yystack[$this->yyidx + 0]->minor), array('smarty_internal_index' => $this->yystack[$this->yyidx + - 3]->minor['smarty_internal_index'])); - } - #line 2376 "smarty_internal_templateparser.php" - #line 360 "smarty_internal_templateparser.y" - function yy_r37() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 1]->minor, $this->yystack[$this->yyidx + 0]->minor); - } - #line 2381 "smarty_internal_templateparser.php" - #line 364 "smarty_internal_templateparser.y" - function yy_r38() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor, array()); - } - #line 2386 "smarty_internal_templateparser.php" - #line 369 "smarty_internal_templateparser.y" - function yy_r39() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor, array('object_method' => $this->yystack[$this->yyidx + - 1]->minor)); - } - #line 2391 "smarty_internal_templateparser.php" - #line 374 "smarty_internal_templateparser.y" - function yy_r40() - { - $this->_retvalue = '' . $this->compiler->compileTag($this->yystack[$this->yyidx + - 2]->minor, $this->yystack[$this->yyidx + 0]->minor) . '_retvalue .= $this->compiler->compileTag('private_modifier', array(), array('modifierlist' => $this->yystack[$this->yyidx + - 1]->minor, 'value' => 'ob_get_clean()')) . '?>'; - } - #line 2397 "smarty_internal_templateparser.php" - #line 380 "smarty_internal_templateparser.y" - function yy_r41() - { - $this->_retvalue = '' . $this->compiler->compileTag($this->yystack[$this->yyidx + - 4]->minor, $this->yystack[$this->yyidx + 0]->minor, array('object_method' => $this->yystack[$this->yyidx + - 2]->minor)) . '_retvalue .= $this->compiler->compileTag('private_modifier', array(), array('modifierlist' => $this->yystack[$this->yyidx + - 1]->minor, 'value' => 'ob_get_clean()')) . '?>'; - } - #line 2403 "smarty_internal_templateparser.php" - #line 386 "smarty_internal_templateparser.y" - function yy_r42() - { - $tag = trim(substr($this->yystack[$this->yyidx + - 1]->minor, $this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), array('if condition' => $this->yystack[$this->yyidx + 0]->minor)); - } - #line 2409 "smarty_internal_templateparser.php" - #line 391 "smarty_internal_templateparser.y" - function yy_r43() - { - $tag = trim(substr($this->yystack[$this->yyidx + - 2]->minor, $this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, $this->yystack[$this->yyidx + 0]->minor, array('if condition' => $this->yystack[$this->yyidx + - 1]->minor)); - } - #line 2415 "smarty_internal_templateparser.php" - #line 396 "smarty_internal_templateparser.y" - function yy_r44() - { - $tag = trim(substr($this->yystack[$this->yyidx + - 1]->minor, $this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), array('if condition' => $this->yystack[$this->yyidx + 0]->minor)); - } - #line 2421 "smarty_internal_templateparser.php" - #line 407 "smarty_internal_templateparser.y" - function yy_r46() - { - $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('start' => $this->yystack[$this->yyidx + - 9]->minor), array('ifexp' => $this->yystack[$this->yyidx + - 6]->minor), array('var' => $this->yystack[$this->yyidx + - 2]->minor), array('step' => $this->yystack[$this->yyidx + - 1]->minor))), 1); - } - #line 2426 "smarty_internal_templateparser.php" - #line 411 "smarty_internal_templateparser.y" - function yy_r47() - { - $this->_retvalue = '=' . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2431 "smarty_internal_templateparser.php" - #line 419 "smarty_internal_templateparser.y" - function yy_r49() - { - $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('start' => $this->yystack[$this->yyidx + - 3]->minor), array('to' => $this->yystack[$this->yyidx + - 1]->minor))), 0); - } - #line 2436 "smarty_internal_templateparser.php" - #line 423 "smarty_internal_templateparser.y" - function yy_r50() - { - $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('start' => $this->yystack[$this->yyidx + - 5]->minor), array('to' => $this->yystack[$this->yyidx + - 3]->minor), array('step' => $this->yystack[$this->yyidx + - 1]->minor))), 0); - } - #line 2441 "smarty_internal_templateparser.php" - #line 428 "smarty_internal_templateparser.y" - function yy_r51() - { - $this->_retvalue = $this->compiler->compileTag('foreach', $this->yystack[$this->yyidx + 0]->minor); - } - #line 2446 "smarty_internal_templateparser.php" - #line 433 "smarty_internal_templateparser.y" - function yy_r52() - { - $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('from' => $this->yystack[$this->yyidx + - 4]->minor), array('item' => $this->yystack[$this->yyidx + - 1]->minor)))); - } - #line 2451 "smarty_internal_templateparser.php" - #line 437 "smarty_internal_templateparser.y" - function yy_r53() - { - $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('from' => $this->yystack[$this->yyidx + - 7]->minor), array('item' => $this->yystack[$this->yyidx + - 1]->minor), array('key' => $this->yystack[$this->yyidx + - 4]->minor)))); - } - #line 2456 "smarty_internal_templateparser.php" - #line 450 "smarty_internal_templateparser.y" - function yy_r56() - { - $this->_retvalue = $this->compiler->compileTag('setfilter', array(), array('modifier_list' => array(array_merge(array($this->yystack[$this->yyidx + - 1]->minor), $this->yystack[$this->yyidx + 0]->minor)))); - } - #line 2461 "smarty_internal_templateparser.php" - #line 454 "smarty_internal_templateparser.y" - function yy_r57() - { - $this->_retvalue = $this->compiler->compileTag('setfilter', array(), array('modifier_list' => array_merge(array(array_merge(array($this->yystack[$this->yyidx + - 2]->minor), $this->yystack[$this->yyidx + - 1]->minor)), $this->yystack[$this->yyidx + 0]->minor))); - } - #line 2466 "smarty_internal_templateparser.php" - #line 459 "smarty_internal_templateparser.y" - function yy_r58() - { - $j = strrpos($this->yystack[$this->yyidx + 0]->minor, '.'); - if ($this->yystack[$this->yyidx + 0]->minor[$j + 1] == 'c') { - // {$smarty.block.child} - $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler); - } else { - // {$smarty.block.parent} - $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileParentBlock($this->compiler); - } - } - #line 2478 "smarty_internal_templateparser.php" - #line 472 "smarty_internal_templateparser.y" - function yy_r59() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor . 'close', array()); - } - #line 2483 "smarty_internal_templateparser.php" - #line 476 "smarty_internal_templateparser.y" - function yy_r60() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 1]->minor . 'close', array(), array('modifier_list' => $this->yystack[$this->yyidx + 0]->minor)); - } - #line 2488 "smarty_internal_templateparser.php" - #line 481 "smarty_internal_templateparser.y" - function yy_r61() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 2]->minor . 'close', array(), array('object_method' => $this->yystack[$this->yyidx + 0]->minor)); - } - #line 2493 "smarty_internal_templateparser.php" - #line 485 "smarty_internal_templateparser.y" - function yy_r62() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 3]->minor . 'close', array(), array('object_method' => $this->yystack[$this->yyidx + - 1]->minor, 'modifier_list' => $this->yystack[$this->yyidx + 0]->minor)); - } - #line 2498 "smarty_internal_templateparser.php" - #line 493 "smarty_internal_templateparser.y" - function yy_r63() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor; - $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; - } - #line 2504 "smarty_internal_templateparser.php" - #line 499 "smarty_internal_templateparser.y" - function yy_r64() - { - $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); - } - #line 2509 "smarty_internal_templateparser.php" - #line 504 "smarty_internal_templateparser.y" - function yy_r65() - { - $this->_retvalue = array(); - } - #line 2514 "smarty_internal_templateparser.php" - #line 509 "smarty_internal_templateparser.y" - function yy_r66() - { - if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) { - $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => 'true'); - } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) { - $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => 'false'); - } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) { - $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => 'null'); - } else { - $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => "'" . $this->yystack[$this->yyidx + 0]->minor . "'"); - } - } - #line 2527 "smarty_internal_templateparser.php" - #line 521 "smarty_internal_templateparser.y" - function yy_r67() - { - $this->_retvalue = array(trim($this->yystack[$this->yyidx + - 1]->minor, " =\n\r\t") => $this->yystack[$this->yyidx + 0]->minor); - } - #line 2532 "smarty_internal_templateparser.php" - #line 529 "smarty_internal_templateparser.y" - function yy_r69() - { - $this->_retvalue = "'" . $this->yystack[$this->yyidx + 0]->minor . "'"; - } - #line 2537 "smarty_internal_templateparser.php" - #line 541 "smarty_internal_templateparser.y" - function yy_r72() - { - $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => $this->yystack[$this->yyidx + 0]->minor); - } - #line 2542 "smarty_internal_templateparser.php" - #line 554 "smarty_internal_templateparser.y" - function yy_r74() - { - $this->yystack[$this->yyidx + - 2]->minor[] = $this->yystack[$this->yyidx + 0]->minor; - $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor; - } - #line 2548 "smarty_internal_templateparser.php" - #line 559 "smarty_internal_templateparser.y" - function yy_r75() - { - $this->_retvalue = array('var' => $this->yystack[$this->yyidx + - 2]->minor, 'value' => $this->yystack[$this->yyidx + 0]->minor); - } - #line 2553 "smarty_internal_templateparser.php" - #line 587 "smarty_internal_templateparser.y" - function yy_r80() - { - $this->_retvalue = '$_smarty_tpl->getStreamVariable(\'' . $this->yystack[$this->yyidx + - 2]->minor . '://' . $this->yystack[$this->yyidx + 0]->minor . '\')'; - } - #line 2558 "smarty_internal_templateparser.php" - #line 592 "smarty_internal_templateparser.y" - function yy_r81() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . trim($this->yystack[$this->yyidx + - 1]->minor) . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2563 "smarty_internal_templateparser.php" - #line 611 "smarty_internal_templateparser.y" - function yy_r85() - { - $this->_retvalue = $this->compiler->compileTag('private_modifier', array(), array('value' => $this->yystack[$this->yyidx + - 1]->minor, 'modifierlist' => $this->yystack[$this->yyidx + 0]->minor)); - } - #line 2568 "smarty_internal_templateparser.php" - #line 617 "smarty_internal_templateparser.y" - function yy_r86() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2573 "smarty_internal_templateparser.php" - #line 621 "smarty_internal_templateparser.y" - function yy_r87() - { - $this->_retvalue = 'in_array(' . $this->yystack[$this->yyidx + - 2]->minor . ',' . $this->yystack[$this->yyidx + 0]->minor . ')'; - } - #line 2578 "smarty_internal_templateparser.php" - #line 625 "smarty_internal_templateparser.y" - function yy_r88() - { - $this->_retvalue = 'in_array(' . $this->yystack[$this->yyidx + - 2]->minor . ',(array)' . $this->yystack[$this->yyidx + 0]->minor . ')'; - } - #line 2583 "smarty_internal_templateparser.php" - #line 633 "smarty_internal_templateparser.y" - function yy_r90() - { - $this->_retvalue = '!(' . $this->yystack[$this->yyidx + - 2]->minor . ' % ' . $this->yystack[$this->yyidx + 0]->minor . ')'; - } - #line 2588 "smarty_internal_templateparser.php" - #line 637 "smarty_internal_templateparser.y" - function yy_r91() - { - $this->_retvalue = '(' . $this->yystack[$this->yyidx + - 2]->minor . ' % ' . $this->yystack[$this->yyidx + 0]->minor . ')'; - } - #line 2593 "smarty_internal_templateparser.php" - #line 641 "smarty_internal_templateparser.y" - function yy_r92() - { - $this->_retvalue = '!(1 & ' . $this->yystack[$this->yyidx + - 1]->minor . ')'; - } - #line 2598 "smarty_internal_templateparser.php" - #line 645 "smarty_internal_templateparser.y" - function yy_r93() - { - $this->_retvalue = '(1 & ' . $this->yystack[$this->yyidx + - 1]->minor . ')'; - } - #line 2603 "smarty_internal_templateparser.php" - #line 649 "smarty_internal_templateparser.y" - function yy_r94() - { - $this->_retvalue = '!(1 & ' . $this->yystack[$this->yyidx + - 2]->minor . ' / ' . $this->yystack[$this->yyidx + 0]->minor . ')'; - } - #line 2608 "smarty_internal_templateparser.php" - #line 653 "smarty_internal_templateparser.y" - function yy_r95() - { - $this->_retvalue = '(1 & ' . $this->yystack[$this->yyidx + - 2]->minor . ' / ' . $this->yystack[$this->yyidx + 0]->minor . ')'; - } - #line 2613 "smarty_internal_templateparser.php" - #line 677 "smarty_internal_templateparser.y" - function yy_r101() - { - self::$prefix_number ++; - $this->compiler->prefix_code[] = 'yystack[$this->yyidx + 0]->minor . ';?>'; - $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + - 1]->minor . '$_tmp' . self::$prefix_number; - } - #line 2620 "smarty_internal_templateparser.php" - #line 686 "smarty_internal_templateparser.y" - function yy_r102() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 6]->minor . ' ? ' . $this->compileVariable("'" . $this->yystack[$this->yyidx + - 2]->minor . "'") . ' : ' . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2625 "smarty_internal_templateparser.php" - #line 690 "smarty_internal_templateparser.y" - function yy_r103() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 5]->minor . ' ? ' . $this->yystack[$this->yyidx + - 2]->minor . ' : ' . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2630 "smarty_internal_templateparser.php" - #line 705 "smarty_internal_templateparser.y" - function yy_r106() - { - $this->_retvalue = '!' . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2635 "smarty_internal_templateparser.php" - #line 726 "smarty_internal_templateparser.y" - function yy_r111() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . '.' . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2640 "smarty_internal_templateparser.php" - #line 730 "smarty_internal_templateparser.y" - function yy_r112() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor . '.'; - } - #line 2645 "smarty_internal_templateparser.php" - #line 734 "smarty_internal_templateparser.y" - function yy_r113() - { - $this->_retvalue = '.' . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2650 "smarty_internal_templateparser.php" - #line 739 "smarty_internal_templateparser.y" - function yy_r114() - { - if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) { - $this->_retvalue = 'true'; - } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) { - $this->_retvalue = 'false'; - } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) { - $this->_retvalue = 'null'; - } else { - $this->_retvalue = "'" . $this->yystack[$this->yyidx + 0]->minor . "'"; - } - } - #line 2663 "smarty_internal_templateparser.php" - #line 757 "smarty_internal_templateparser.y" - function yy_r116() - { - $this->_retvalue = "(" . $this->yystack[$this->yyidx + - 1]->minor . ")"; - } - #line 2668 "smarty_internal_templateparser.php" - #line 772 "smarty_internal_templateparser.y" - function yy_r119() - { - if (!$this->security || isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + - 2]->minor]) || $this->smarty->security_policy->isTrustedStaticClass($this->yystack[$this->yyidx + - 2]->minor, $this->compiler)) { - if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + - 2]->minor])) { - $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + - 2]->minor] . '::' . $this->yystack[$this->yyidx + 0]->minor; - } else { - $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . '::' . $this->yystack[$this->yyidx + 0]->minor; - } - } else { - $this->compiler->trigger_template_error("static class '" . $this->yystack[$this->yyidx + - 2]->minor . "' is undefined or not allowed by security setting"); - } - } - #line 2681 "smarty_internal_templateparser.php" - #line 784 "smarty_internal_templateparser.y" - function yy_r120() - { - if ($this->yystack[$this->yyidx + - 2]->minor['var'] == '\'smarty\'') { - $this->_retvalue = $this->compiler->compileTag('private_special_variable', array(), $this->yystack[$this->yyidx + - 2]->minor['smarty_internal_index']) . '::' . $this->yystack[$this->yyidx + 0]->minor; - } else { - $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + - 2]->minor['var']) . $this->yystack[$this->yyidx + - 2]->minor['smarty_internal_index'] . '::' . $this->yystack[$this->yyidx + 0]->minor; - } - } - #line 2690 "smarty_internal_templateparser.php" - #line 793 "smarty_internal_templateparser.y" - function yy_r121() - { - self::$prefix_number ++; - $this->compiler->prefix_code[] = '' . $this->yystack[$this->yyidx + - 1]->minor . ''; - $this->_retvalue = '$_tmp' . self::$prefix_number; - } - #line 2697 "smarty_internal_templateparser.php" - #line 808 "smarty_internal_templateparser.y" - function yy_r123() - { - if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') { - $smarty_var = $this->compiler->compileTag('private_special_variable', array(), $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']); - $this->_retvalue = $smarty_var; - } else { - // used for array reset,next,prev,end,current - $this->last_variable = $this->yystack[$this->yyidx + 0]->minor['var']; - $this->last_index = $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']; - $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + 0]->minor['var']) . $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']; - } - } - #line 2710 "smarty_internal_templateparser.php" - #line 821 "smarty_internal_templateparser.y" - function yy_r124() - { - $this->_retvalue = '$_smarty_tpl->tpl_vars[' . $this->yystack[$this->yyidx + - 2]->minor . ']->' . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2715 "smarty_internal_templateparser.php" - #line 831 "smarty_internal_templateparser.y" - function yy_r126() - { - $this->_retvalue = '$_smarty_tpl->getConfigVariable(\'' . $this->yystack[$this->yyidx + - 1]->minor . '\')'; - } - #line 2720 "smarty_internal_templateparser.php" - #line 835 "smarty_internal_templateparser.y" - function yy_r127() - { - $this->_retvalue = '(is_array($tmp = $_smarty_tpl->getConfigVariable(\'' . $this->yystack[$this->yyidx + - 2]->minor . '\')) ? $tmp' . $this->yystack[$this->yyidx + 0]->minor . ' :null)'; - } - #line 2725 "smarty_internal_templateparser.php" - #line 839 "smarty_internal_templateparser.y" - function yy_r128() - { - $this->_retvalue = '$_smarty_tpl->getConfigVariable(' . $this->yystack[$this->yyidx + - 1]->minor . ')'; - } - #line 2730 "smarty_internal_templateparser.php" - #line 843 "smarty_internal_templateparser.y" - function yy_r129() - { - $this->_retvalue = '(is_array($tmp = $_smarty_tpl->getConfigVariable(' . $this->yystack[$this->yyidx + - 2]->minor . ')) ? $tmp' . $this->yystack[$this->yyidx + 0]->minor . ' : null)'; - } - #line 2735 "smarty_internal_templateparser.php" - #line 847 "smarty_internal_templateparser.y" - function yy_r130() - { - $this->_retvalue = array('var' => $this->yystack[$this->yyidx + - 1]->minor, 'smarty_internal_index' => $this->yystack[$this->yyidx + 0]->minor); - } - #line 2740 "smarty_internal_templateparser.php" - #line 860 "smarty_internal_templateparser.y" - function yy_r132() - { - return; - } - #line 2745 "smarty_internal_templateparser.php" - #line 866 "smarty_internal_templateparser.y" - function yy_r133() - { - $this->_retvalue = '[' . $this->compileVariable($this->yystack[$this->yyidx + 0]->minor) . ']'; - } - #line 2750 "smarty_internal_templateparser.php" - #line 870 "smarty_internal_templateparser.y" - function yy_r134() - { - $this->_retvalue = '[' . $this->compileVariable($this->yystack[$this->yyidx + - 2]->minor) . '->' . $this->yystack[$this->yyidx + 0]->minor . ']'; - } - #line 2755 "smarty_internal_templateparser.php" - #line 874 "smarty_internal_templateparser.y" - function yy_r135() - { - $this->_retvalue = "['" . $this->yystack[$this->yyidx + 0]->minor . "']"; - } - #line 2760 "smarty_internal_templateparser.php" - #line 878 "smarty_internal_templateparser.y" - function yy_r136() - { - $this->_retvalue = "[" . $this->yystack[$this->yyidx + 0]->minor . "]"; - } - #line 2765 "smarty_internal_templateparser.php" - #line 882 "smarty_internal_templateparser.y" - function yy_r137() - { - $this->_retvalue = "[" . $this->yystack[$this->yyidx + - 1]->minor . "]"; - } - #line 2770 "smarty_internal_templateparser.php" - #line 887 "smarty_internal_templateparser.y" - function yy_r138() - { - $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . $this->yystack[$this->yyidx + - 1]->minor . '\'][\'index\']') . ']'; - } - #line 2775 "smarty_internal_templateparser.php" - #line 891 "smarty_internal_templateparser.y" - function yy_r139() - { - $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . $this->yystack[$this->yyidx + - 3]->minor . '\'][\'' . $this->yystack[$this->yyidx + - 1]->minor . '\']') . ']'; - } - #line 2780 "smarty_internal_templateparser.php" - #line 901 "smarty_internal_templateparser.y" - function yy_r141() - { - $this->_retvalue = '[]'; - } - #line 2785 "smarty_internal_templateparser.php" - #line 914 "smarty_internal_templateparser.y" - function yy_r143() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor . '.' . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2790 "smarty_internal_templateparser.php" - #line 919 "smarty_internal_templateparser.y" - function yy_r144() - { - $this->_retvalue = '\'' . $this->yystack[$this->yyidx + 0]->minor . '\''; - } - #line 2795 "smarty_internal_templateparser.php" - #line 924 "smarty_internal_templateparser.y" - function yy_r145() - { - $this->_retvalue = '(' . $this->yystack[$this->yyidx + - 1]->minor . ')'; - } - #line 2800 "smarty_internal_templateparser.php" - #line 931 "smarty_internal_templateparser.y" - function yy_r146() - { - if ($this->yystack[$this->yyidx + - 1]->minor['var'] == '\'smarty\'') { - $this->_retvalue = $this->compiler->compileTag('private_special_variable', array(), $this->yystack[$this->yyidx + - 1]->minor['smarty_internal_index']) . $this->yystack[$this->yyidx + 0]->minor; - } else { - $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + - 1]->minor['var']) . $this->yystack[$this->yyidx + - 1]->minor['smarty_internal_index'] . $this->yystack[$this->yyidx + 0]->minor; - } - } - #line 2809 "smarty_internal_templateparser.php" - #line 940 "smarty_internal_templateparser.y" - function yy_r147() - { - $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; - } - #line 2814 "smarty_internal_templateparser.php" - #line 945 "smarty_internal_templateparser.y" - function yy_r148() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2819 "smarty_internal_templateparser.php" - #line 950 "smarty_internal_templateparser.y" - function yy_r149() - { - if ($this->security && substr($this->yystack[$this->yyidx + - 1]->minor, 0, 1) == '_') { - $this->compiler->trigger_template_error(self::Err1); - } - $this->_retvalue = '->' . $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2827 "smarty_internal_templateparser.php" - #line 957 "smarty_internal_templateparser.y" - function yy_r150() - { - if ($this->security) { - $this->compiler->trigger_template_error(self::Err2); - } - $this->_retvalue = '->{' . $this->compileVariable($this->yystack[$this->yyidx + - 1]->minor) . $this->yystack[$this->yyidx + 0]->minor . '}'; - } - #line 2835 "smarty_internal_templateparser.php" - #line 964 "smarty_internal_templateparser.y" - function yy_r151() - { - if ($this->security) { - $this->compiler->trigger_template_error(self::Err2); - } - $this->_retvalue = '->{' . $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + 0]->minor . '}'; - } - #line 2843 "smarty_internal_templateparser.php" - #line 971 "smarty_internal_templateparser.y" - function yy_r152() - { - if ($this->security) { - $this->compiler->trigger_template_error(self::Err2); - } - $this->_retvalue = '->{\'' . $this->yystack[$this->yyidx + - 4]->minor . '\'.' . $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + 0]->minor . '}'; - } - #line 2851 "smarty_internal_templateparser.php" - #line 979 "smarty_internal_templateparser.y" - function yy_r153() - { - $this->_retvalue = '->' . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2856 "smarty_internal_templateparser.php" - #line 987 "smarty_internal_templateparser.y" - function yy_r154() - { - if (!$this->security || $this->smarty->security_policy->isTrustedPhpFunction($this->yystack[$this->yyidx + - 3]->minor, $this->compiler)) { - if (strcasecmp($this->yystack[$this->yyidx + - 3]->minor, 'isset') === 0 || strcasecmp($this->yystack[$this->yyidx + - 3]->minor, 'empty') === 0 || strcasecmp($this->yystack[$this->yyidx + - 3]->minor, 'array') === 0 || is_callable($this->yystack[$this->yyidx + - 3]->minor)) { - $func_name = strtolower($this->yystack[$this->yyidx + - 3]->minor); - if ($func_name == 'isset') { - if (count($this->yystack[$this->yyidx + - 1]->minor) == 0) { - $this->compiler->trigger_template_error('Illegal number of paramer in "isset()"'); - } - $par = implode(',', $this->yystack[$this->yyidx + - 1]->minor); - if (strncasecmp($par, '$_smarty_tpl->getConfigVariable', strlen('$_smarty_tpl->getConfigVariable')) === 0) { - self::$prefix_number ++; - $this->compiler->prefix_code[] = ''; - $isset_par = '$_tmp' . self::$prefix_number; - } else { - $isset_par = str_replace("')->value", "',null,true,false)->value", $par); - } - $this->_retvalue = $this->yystack[$this->yyidx + - 3]->minor . "(" . $isset_par . ")"; - } elseif (in_array($func_name, array('empty', 'reset', 'current', 'end', 'prev', 'next'))) { - if (count($this->yystack[$this->yyidx + - 1]->minor) != 1) { - $this->compiler->trigger_template_error('Illegal number of paramer in "empty()"'); - } - if ($func_name == 'empty') { - $this->_retvalue = $func_name . '(' . str_replace("')->value", "',null,true,false)->value", $this->yystack[$this->yyidx + - 1]->minor[0]) . ')'; - } else { - $this->_retvalue = $func_name . '(' . $this->yystack[$this->yyidx + - 1]->minor[0] . ')'; - } - } else { - $this->_retvalue = $this->yystack[$this->yyidx + - 3]->minor . "(" . implode(',', $this->yystack[$this->yyidx + - 1]->minor) . ")"; - } - } else { - $this->compiler->trigger_template_error("unknown function \"" . $this->yystack[$this->yyidx + - 3]->minor . "\""); - } - } - } - #line 2892 "smarty_internal_templateparser.php" - #line 1025 "smarty_internal_templateparser.y" - function yy_r155() - { - if ($this->security && substr($this->yystack[$this->yyidx + - 3]->minor, 0, 1) == '_') { - $this->compiler->trigger_template_error(self::Err1); - } - $this->_retvalue = $this->yystack[$this->yyidx + - 3]->minor . "(" . implode(',', $this->yystack[$this->yyidx + - 1]->minor) . ")"; - } - #line 2900 "smarty_internal_templateparser.php" - #line 1032 "smarty_internal_templateparser.y" - function yy_r156() - { - if ($this->security) { - $this->compiler->trigger_template_error(self::Err2); - } - self::$prefix_number ++; - $this->compiler->prefix_code[] = 'compileVariable("'" . $this->yystack[$this->yyidx + - 3]->minor . "'") . ';?>'; - $this->_retvalue = '$_tmp' . self::$prefix_number . '(' . implode(',', $this->yystack[$this->yyidx + - 1]->minor) . ')'; - } - #line 2910 "smarty_internal_templateparser.php" - #line 1043 "smarty_internal_templateparser.y" - function yy_r157() - { - $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 2]->minor, array($this->yystack[$this->yyidx + 0]->minor)); - } - #line 2915 "smarty_internal_templateparser.php" - #line 1060 "smarty_internal_templateparser.y" - function yy_r160() - { - $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 2]->minor, array(array_merge($this->yystack[$this->yyidx + - 1]->minor, $this->yystack[$this->yyidx + 0]->minor))); - } - #line 2920 "smarty_internal_templateparser.php" - #line 1064 "smarty_internal_templateparser.y" - function yy_r161() - { - $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + - 1]->minor, $this->yystack[$this->yyidx + 0]->minor)); - } - #line 2925 "smarty_internal_templateparser.php" - #line 1072 "smarty_internal_templateparser.y" - function yy_r163() - { - $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); - } - #line 2930 "smarty_internal_templateparser.php" - #line 1080 "smarty_internal_templateparser.y" - function yy_r164() - { - $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 1]->minor, $this->yystack[$this->yyidx + 0]->minor); - } - #line 2935 "smarty_internal_templateparser.php" - #line 1114 "smarty_internal_templateparser.y" - function yy_r171() - { - $this->_retvalue = '$' . $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2940 "smarty_internal_templateparser.php" - #line 1119 "smarty_internal_templateparser.y" - function yy_r172() - { - $this->_retvalue = '$' . $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor; - } - #line 2945 "smarty_internal_templateparser.php" - #line 1125 "smarty_internal_templateparser.y" - function yy_r173() - { - $this->_retvalue = '=='; - } - #line 2950 "smarty_internal_templateparser.php" - #line 1129 "smarty_internal_templateparser.y" - function yy_r174() - { - $this->_retvalue = '!='; - } - #line 2955 "smarty_internal_templateparser.php" - #line 1133 "smarty_internal_templateparser.y" - function yy_r175() - { - $this->_retvalue = '>'; - } - #line 2960 "smarty_internal_templateparser.php" - #line 1137 "smarty_internal_templateparser.y" - function yy_r176() - { - $this->_retvalue = '<'; - } - #line 2965 "smarty_internal_templateparser.php" - #line 1141 "smarty_internal_templateparser.y" - function yy_r177() - { - $this->_retvalue = '>='; - } - #line 2970 "smarty_internal_templateparser.php" - #line 1145 "smarty_internal_templateparser.y" - function yy_r178() - { - $this->_retvalue = '<='; - } - #line 2975 "smarty_internal_templateparser.php" - #line 1149 "smarty_internal_templateparser.y" - function yy_r179() - { - $this->_retvalue = '==='; - } - #line 2980 "smarty_internal_templateparser.php" - #line 1153 "smarty_internal_templateparser.y" - function yy_r180() - { - $this->_retvalue = '!=='; - } - #line 2985 "smarty_internal_templateparser.php" - #line 1157 "smarty_internal_templateparser.y" - function yy_r181() - { - $this->_retvalue = '%'; - } - #line 2990 "smarty_internal_templateparser.php" - #line 1161 "smarty_internal_templateparser.y" - function yy_r182() - { - $this->_retvalue = '&&'; - } - #line 2995 "smarty_internal_templateparser.php" - #line 1165 "smarty_internal_templateparser.y" - function yy_r183() - { - $this->_retvalue = '||'; - } - #line 3000 "smarty_internal_templateparser.php" - #line 1169 "smarty_internal_templateparser.y" - function yy_r184() - { - $this->_retvalue = ' XOR '; - } - #line 3005 "smarty_internal_templateparser.php" - #line 1176 "smarty_internal_templateparser.y" - function yy_r185() - { - $this->_retvalue = 'array(' . $this->yystack[$this->yyidx + - 1]->minor . ')'; - } - #line 3010 "smarty_internal_templateparser.php" - #line 1184 "smarty_internal_templateparser.y" - function yy_r187() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . ',' . $this->yystack[$this->yyidx + 0]->minor; - } - #line 3015 "smarty_internal_templateparser.php" - #line 1192 "smarty_internal_templateparser.y" - function yy_r189() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . '=>' . $this->yystack[$this->yyidx + 0]->minor; - } - #line 3020 "smarty_internal_templateparser.php" - #line 1196 "smarty_internal_templateparser.y" - function yy_r190() - { - $this->_retvalue = '\'' . $this->yystack[$this->yyidx + - 2]->minor . '\'=>' . $this->yystack[$this->yyidx + 0]->minor; - } - #line 3025 "smarty_internal_templateparser.php" - #line 1208 "smarty_internal_templateparser.y" - function yy_r192() - { - $this->_retvalue = "''"; - } - #line 3030 "smarty_internal_templateparser.php" - #line 1212 "smarty_internal_templateparser.y" - function yy_r193() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor->to_smarty_php(); - } - #line 3035 "smarty_internal_templateparser.php" - #line 1217 "smarty_internal_templateparser.y" - function yy_r194() - { - $this->yystack[$this->yyidx + - 1]->minor->append_subtree($this->yystack[$this->yyidx + 0]->minor); - $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor; - } - #line 3041 "smarty_internal_templateparser.php" - #line 1222 "smarty_internal_templateparser.y" - function yy_r195() - { - $this->_retvalue = new _smarty_doublequoted($this, $this->yystack[$this->yyidx + 0]->minor); - } - #line 3046 "smarty_internal_templateparser.php" - #line 1226 "smarty_internal_templateparser.y" - function yy_r196() - { - $this->_retvalue = new _smarty_code($this, '(string)' . $this->yystack[$this->yyidx + - 1]->minor); - } - #line 3051 "smarty_internal_templateparser.php" - #line 1234 "smarty_internal_templateparser.y" - function yy_r198() - { - $this->_retvalue = new _smarty_code($this, '(string)$_smarty_tpl->tpl_vars[\'' . substr($this->yystack[$this->yyidx + 0]->minor, 1) . '\']->value'); - } - #line 3056 "smarty_internal_templateparser.php" - #line 1242 "smarty_internal_templateparser.y" - function yy_r200() - { - $this->_retvalue = new _smarty_code($this, '(string)(' . $this->yystack[$this->yyidx + - 1]->minor . ')'); - } - #line 3061 "smarty_internal_templateparser.php" - #line 1246 "smarty_internal_templateparser.y" - function yy_r201() - { - $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + - 1]->minor); - } - #line 3066 "smarty_internal_templateparser.php" - #line 1250 "smarty_internal_templateparser.y" - function yy_r202() - { - $this->_retvalue = new _smarty_dq_content($this, $this->yystack[$this->yyidx + 0]->minor); - } - - #line 3071 "smarty_internal_templateparser.php" - - private $_retvalue; - - public function yy_reduce($yyruleno) - { - $yymsp = $this->yystack[$this->yyidx]; - if ($this->yyTraceFILE && $yyruleno >= 0 - && $yyruleno < count(self::$yyRuleName) - ) { - fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n", - $this->yyTracePrompt, $yyruleno, - self::$yyRuleName[$yyruleno]); - } - - $this->_retvalue = $yy_lefthand_side = null; - if (array_key_exists($yyruleno, self::$yyReduceMap)) { - // call the action - $this->_retvalue = null; - $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}(); - $yy_lefthand_side = $this->_retvalue; - } - $yygoto = self::$yyRuleInfo[$yyruleno]['lhs']; - $yysize = self::$yyRuleInfo[$yyruleno]['rhs']; - $this->yyidx -= $yysize; - for ($i = $yysize; $i; $i --) { - // pop all of the right-hand side parameters - array_pop($this->yystack); - } - $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto); - if ($yyact < self::YYNSTATE) { - if (!$this->yyTraceFILE && $yysize) { - $this->yyidx ++; - $x = new TP_yyStackEntry; - $x->stateno = $yyact; - $x->major = $yygoto; - $x->minor = $yy_lefthand_side; - $this->yystack[$this->yyidx] = $x; - } else { - $this->yy_shift($yyact, $yygoto, $yy_lefthand_side); - } - } elseif ($yyact == self::YYNSTATE + self::YYNRULE + 1) { - $this->yy_accept(); - } - } - - public function yy_parse_failed() - { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt); - } - while ($this->yyidx >= 0) { - $this->yy_pop_parser_stack(); - } - } - - public function yy_syntax_error($yymajor, $TOKEN) - { - #line 78 "smarty_internal_templateparser.y" - - $this->internalError = true; - $this->yymajor = $yymajor; - $this->compiler->trigger_template_error(); - #line 3133 "smarty_internal_templateparser.php" - } - - public function yy_accept() - { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt); - } - while ($this->yyidx >= 0) { - $stack = $this->yy_pop_parser_stack(); - } - #line 70 "smarty_internal_templateparser.y" - - $this->successful = !$this->internalError; - $this->internalError = false; - $this->retvalue = $this->_retvalue; - //echo $this->retvalue."\n\n"; - #line 3150 "smarty_internal_templateparser.php" - } - - public function doParse($yymajor, $yytokenvalue) - { - $yyerrorhit = 0; /* True if yymajor has invoked an error */ - - if ($this->yyidx === null || $this->yyidx < 0) { - $this->yyidx = 0; - $this->yyerrcnt = - 1; - $x = new TP_yyStackEntry; - $x->stateno = 0; - $x->major = 0; - $this->yystack = array(); - array_push($this->yystack, $x); - } - $yyendofinput = ($yymajor == 0); - - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sInput %s\n", - $this->yyTracePrompt, $this->yyTokenName[$yymajor]); - } - - do { - $yyact = $this->yy_find_shift_action($yymajor); - if ($yymajor < self::YYERRORSYMBOL && - !$this->yy_is_expected_token($yymajor) - ) { - // force a syntax error - $yyact = self::YY_ERROR_ACTION; - } - if ($yyact < self::YYNSTATE) { - $this->yy_shift($yyact, $yymajor, $yytokenvalue); - $this->yyerrcnt --; - if ($yyendofinput && $this->yyidx >= 0) { - $yymajor = 0; - } else { - $yymajor = self::YYNOCODE; - } - } elseif ($yyact < self::YYNSTATE + self::YYNRULE) { - $this->yy_reduce($yyact - self::YYNSTATE); - } elseif ($yyact == self::YY_ERROR_ACTION) { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sSyntax Error!\n", - $this->yyTracePrompt); - } - if (self::YYERRORSYMBOL) { - if ($this->yyerrcnt < 0) { - $this->yy_syntax_error($yymajor, $yytokenvalue); - } - $yymx = $this->yystack[$this->yyidx]->major; - if ($yymx == self::YYERRORSYMBOL || $yyerrorhit) { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sDiscard input token %s\n", - $this->yyTracePrompt, $this->yyTokenName[$yymajor]); - } - $this->yy_destructor($yymajor, $yytokenvalue); - $yymajor = self::YYNOCODE; - } else { - while ($this->yyidx >= 0 && - $yymx != self::YYERRORSYMBOL && - ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE - ) { - $this->yy_pop_parser_stack(); - } - if ($this->yyidx < 0 || $yymajor == 0) { - $this->yy_destructor($yymajor, $yytokenvalue); - $this->yy_parse_failed(); - $yymajor = self::YYNOCODE; - } elseif ($yymx != self::YYERRORSYMBOL) { - $u2 = 0; - $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2); - } - } - $this->yyerrcnt = 3; - $yyerrorhit = 1; - } else { - if ($this->yyerrcnt <= 0) { - $this->yy_syntax_error($yymajor, $yytokenvalue); - } - $this->yyerrcnt = 3; - $this->yy_destructor($yymajor, $yytokenvalue); - if ($yyendofinput) { - $this->yy_parse_failed(); - } - $yymajor = self::YYNOCODE; - } - } else { - $this->yy_accept(); - $yymajor = self::YYNOCODE; - } - } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_utility.php b/library/Smarty/libs/sysplugins/smarty_internal_utility.php deleted file mode 100644 index 0a5975bba7..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_utility.php +++ /dev/null @@ -1,837 +0,0 @@ - - * @author Uwe Tews - * @package Smarty - * @subpackage PluginsInternal - * @version 3-SVN$Rev: 3286 $ - */ - -/** - * Utility class - * - * @package Smarty - * @subpackage Security - */ -class Smarty_Internal_Utility -{ - /** - * private constructor to prevent calls creation of new instances - */ - final private function __construct() - { - // intentionally left blank - } - - /** - * Compile all template files - * - * @param string $extension template file name extension - * @param bool $force_compile force all to recompile - * @param int $time_limit set maximum execution time - * @param int $max_errors set maximum allowed errors - * @param Smarty $smarty Smarty instance - * - * @return integer number of template files compiled - */ - public static function compileAllTemplates($extension, $force_compile, $time_limit, $max_errors, Smarty $smarty) - { - // switch off time limit - if (function_exists('set_time_limit')) { - @set_time_limit($time_limit); - } - $smarty->force_compile = $force_compile; - $_count = 0; - $_error_count = 0; - // loop over array of template directories - foreach ($smarty->getTemplateDir() as $_dir) { - $_compileDirs = new RecursiveDirectoryIterator($_dir); - $_compile = new RecursiveIteratorIterator($_compileDirs); - foreach ($_compile as $_fileinfo) { - $_file = $_fileinfo->getFilename(); - if (substr(basename($_fileinfo->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { - continue; - } - if (!substr_compare($_file, $extension, - strlen($extension)) == 0) { - continue; - } - if ($_fileinfo->getPath() == substr($_dir, 0, - 1)) { - $_template_file = $_file; - } else { - $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file; - } - echo '
', $_dir, '---', $_template_file; - flush(); - $_start_time = microtime(true); - try { - $_tpl = $smarty->createTemplate($_template_file, null, null, null, false); - if ($_tpl->mustCompile()) { - $_tpl->compileTemplateSource(); - $_count ++; - echo ' compiled in ', microtime(true) - $_start_time, ' seconds'; - flush(); - } else { - echo ' is up to date'; - flush(); - } - } - catch (Exception $e) { - echo 'Error: ', $e->getMessage(), "

"; - $_error_count ++; - } - // free memory - $smarty->template_objects = array(); - $_tpl->smarty->template_objects = array(); - $_tpl = null; - if ($max_errors !== null && $_error_count == $max_errors) { - echo '

too many errors'; - exit(); - } - } - } - - return $_count; - } - - /** - * Compile all config files - * - * @param string $extension config file name extension - * @param bool $force_compile force all to recompile - * @param int $time_limit set maximum execution time - * @param int $max_errors set maximum allowed errors - * @param Smarty $smarty Smarty instance - * - * @return integer number of config files compiled - */ - public static function compileAllConfig($extension, $force_compile, $time_limit, $max_errors, Smarty $smarty) - { - // switch off time limit - if (function_exists('set_time_limit')) { - @set_time_limit($time_limit); - } - $smarty->force_compile = $force_compile; - $_count = 0; - $_error_count = 0; - // loop over array of template directories - foreach ($smarty->getConfigDir() as $_dir) { - $_compileDirs = new RecursiveDirectoryIterator($_dir); - $_compile = new RecursiveIteratorIterator($_compileDirs); - foreach ($_compile as $_fileinfo) { - $_file = $_fileinfo->getFilename(); - if (substr(basename($_fileinfo->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { - continue; - } - if (!substr_compare($_file, $extension, - strlen($extension)) == 0) { - continue; - } - if ($_fileinfo->getPath() == substr($_dir, 0, - 1)) { - $_config_file = $_file; - } else { - $_config_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file; - } - echo '
', $_dir, '---', $_config_file; - flush(); - $_start_time = microtime(true); - try { - $_config = new Smarty_Internal_Config($_config_file, $smarty); - if ($_config->mustCompile()) { - $_config->compileConfigSource(); - $_count ++; - echo ' compiled in ', microtime(true) - $_start_time, ' seconds'; - flush(); - } else { - echo ' is up to date'; - flush(); - } - } - catch (Exception $e) { - echo 'Error: ', $e->getMessage(), "

"; - $_error_count ++; - } - if ($max_errors !== null && $_error_count == $max_errors) { - echo '

too many errors'; - exit(); - } - } - } - - return $_count; - } - - /** - * Delete compiled template file - * - * @param string $resource_name template name - * @param string $compile_id compile id - * @param integer $exp_time expiration time - * @param Smarty $smarty Smarty instance - * - * @return integer number of template files deleted - */ - public static function clearCompiledTemplate($resource_name, $compile_id, $exp_time, Smarty $smarty) - { - $_compile_dir = realpath($smarty->getCompileDir()) . '/'; - $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null; - $_dir_sep = $smarty->use_sub_dirs ? '/' : '^'; - if (isset($resource_name)) { - $_save_stat = $smarty->caching; - $smarty->caching = false; - $tpl = new $smarty->template_class($resource_name, $smarty); - $smarty->caching = $_save_stat; - - // remove from template cache - $tpl->source; // have the template registered before unset() - 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]); - - if ($tpl->source->exists) { - $_resource_part_1 = basename(str_replace('^', '/', $tpl->compiled->filepath)); - $_resource_part_1_length = strlen($_resource_part_1); - } else { - return 0; - } - - $_resource_part_2 = str_replace('.php', '.cache.php', $_resource_part_1); - $_resource_part_2_length = strlen($_resource_part_2); - } - $_dir = $_compile_dir; - if ($smarty->use_sub_dirs && isset($_compile_id)) { - $_dir .= $_compile_id . $_dir_sep; - } - if (isset($_compile_id)) { - $_compile_id_part = str_replace('\\', '/', $_compile_dir . $_compile_id . $_dir_sep); - $_compile_id_part_length = strlen($_compile_id_part); - } - $_count = 0; - try { - $_compileDirs = new RecursiveDirectoryIterator($_dir); - // NOTE: UnexpectedValueException thrown for PHP >= 5.3 - } - catch (Exception $e) { - return 0; - } - $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST); - foreach ($_compile as $_file) { - if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { - continue; - } - - $_filepath = str_replace('\\', '/', (string) $_file); - - if ($_file->isDir()) { - if (!$_compile->isDot()) { - // delete folder if empty - @rmdir($_file->getPathname()); - } - } else { - $unlink = false; - if ((!isset($_compile_id) || (isset($_filepath[$_compile_id_part_length]) && $a = !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length))) - && (!isset($resource_name) - || (isset($_filepath[$_resource_part_1_length]) - && substr_compare($_filepath, $_resource_part_1, - $_resource_part_1_length, $_resource_part_1_length) == 0) - || (isset($_filepath[$_resource_part_2_length]) - && substr_compare($_filepath, $_resource_part_2, - $_resource_part_2_length, $_resource_part_2_length) == 0)) - ) { - if (isset($exp_time)) { - if (time() - @filemtime($_filepath) >= $exp_time) { - $unlink = true; - } - } else { - $unlink = true; - } - } - - if ($unlink && @unlink($_filepath)) { - $_count ++; - } - } - } - // clear compiled cache - Smarty_Resource::$sources = array(); - Smarty_Resource::$compileds = array(); - - return $_count; - } - - /** - * Return array of tag/attributes of all tags used by an template - * - * @param Smarty_Internal_Template $template - * - * @throws Exception - * @throws SmartyException - * @return array of tag/attributes - */ - public static function getTags(Smarty_Internal_Template $template) - { - $template->smarty->get_used_tags = true; - $template->compileTemplateSource(); - - return $template->used_tags; - } - - /** - * diagnose Smarty setup - * If $errors is secified, the diagnostic report will be appended to the array, rather than being output. - * - * @param Smarty $smarty Smarty instance to test - * @param array $errors array to push results into rather than outputting them - * - * @return bool status, true if everything is fine, false else - */ - public static function testInstall(Smarty $smarty, &$errors = null) - { - $status = true; - - if ($errors === null) { - echo "
\n";
-            echo "Smarty Installation test...\n";
-            echo "Testing template directory...\n";
-        }
-
-        $_stream_resolve_include_path = function_exists('stream_resolve_include_path');
-
-        // test if all registered template_dir are accessible
-        foreach ($smarty->getTemplateDir() as $template_dir) {
-            $_template_dir = $template_dir;
-            $template_dir = realpath($template_dir);
-            // resolve include_path or fail existence
-            if (!$template_dir) {
-                if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_template_dir)) {
-                    // try PHP include_path
-                    if ($_stream_resolve_include_path) {
-                        $template_dir = stream_resolve_include_path($_template_dir);
-                    } else {
-                        $template_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_template_dir);
-                    }
-
-                    if ($template_dir !== false) {
-                        if ($errors === null) {
-                            echo "$template_dir is OK.\n";
-                        }
-
-                        continue;
-                    } else {
-                        $status = false;
-                        $message = "FAILED: $_template_dir does not exist (and couldn't be found in include_path either)";
-                        if ($errors === null) {
-                            echo $message . ".\n";
-                        } else {
-                            $errors['template_dir'] = $message;
-                        }
-
-                        continue;
-                    }
-                } else {
-                    $status = false;
-                    $message = "FAILED: $_template_dir does not exist";
-                    if ($errors === null) {
-                        echo $message . ".\n";
-                    } else {
-                        $errors['template_dir'] = $message;
-                    }
-
-                    continue;
-                }
-            }
-
-            if (!is_dir($template_dir)) {
-                $status = false;
-                $message = "FAILED: $template_dir is not a directory";
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['template_dir'] = $message;
-                }
-            } elseif (!is_readable($template_dir)) {
-                $status = false;
-                $message = "FAILED: $template_dir is not readable";
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['template_dir'] = $message;
-                }
-            } else {
-                if ($errors === null) {
-                    echo "$template_dir is OK.\n";
-                }
-            }
-        }
-
-        if ($errors === null) {
-            echo "Testing compile directory...\n";
-        }
-
-        // test if registered compile_dir is accessible
-        $__compile_dir = $smarty->getCompileDir();
-        $_compile_dir = realpath($__compile_dir);
-        if (!$_compile_dir) {
-            $status = false;
-            $message = "FAILED: {$__compile_dir} does not exist";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['compile_dir'] = $message;
-            }
-        } elseif (!is_dir($_compile_dir)) {
-            $status = false;
-            $message = "FAILED: {$_compile_dir} is not a directory";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['compile_dir'] = $message;
-            }
-        } elseif (!is_readable($_compile_dir)) {
-            $status = false;
-            $message = "FAILED: {$_compile_dir} is not readable";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['compile_dir'] = $message;
-            }
-        } elseif (!is_writable($_compile_dir)) {
-            $status = false;
-            $message = "FAILED: {$_compile_dir} is not writable";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['compile_dir'] = $message;
-            }
-        } else {
-            if ($errors === null) {
-                echo "{$_compile_dir} is OK.\n";
-            }
-        }
-
-        if ($errors === null) {
-            echo "Testing plugins directory...\n";
-        }
-
-        // test if all registered plugins_dir are accessible
-        // and if core plugins directory is still registered
-        $_core_plugins_dir = realpath(dirname(__FILE__) . '/../plugins');
-        $_core_plugins_available = false;
-        foreach ($smarty->getPluginsDir() as $plugin_dir) {
-            $_plugin_dir = $plugin_dir;
-            $plugin_dir = realpath($plugin_dir);
-            // resolve include_path or fail existence
-            if (!$plugin_dir) {
-                if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) {
-                    // try PHP include_path
-                    if ($_stream_resolve_include_path) {
-                        $plugin_dir = stream_resolve_include_path($_plugin_dir);
-                    } else {
-                        $plugin_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_plugin_dir);
-                    }
-
-                    if ($plugin_dir !== false) {
-                        if ($errors === null) {
-                            echo "$plugin_dir is OK.\n";
-                        }
-
-                        continue;
-                    } else {
-                        $status = false;
-                        $message = "FAILED: $_plugin_dir does not exist (and couldn't be found in include_path either)";
-                        if ($errors === null) {
-                            echo $message . ".\n";
-                        } else {
-                            $errors['plugins_dir'] = $message;
-                        }
-
-                        continue;
-                    }
-                } else {
-                    $status = false;
-                    $message = "FAILED: $_plugin_dir does not exist";
-                    if ($errors === null) {
-                        echo $message . ".\n";
-                    } else {
-                        $errors['plugins_dir'] = $message;
-                    }
-
-                    continue;
-                }
-            }
-
-            if (!is_dir($plugin_dir)) {
-                $status = false;
-                $message = "FAILED: $plugin_dir is not a directory";
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['plugins_dir'] = $message;
-                }
-            } elseif (!is_readable($plugin_dir)) {
-                $status = false;
-                $message = "FAILED: $plugin_dir is not readable";
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['plugins_dir'] = $message;
-                }
-            } elseif ($_core_plugins_dir && $_core_plugins_dir == realpath($plugin_dir)) {
-                $_core_plugins_available = true;
-                if ($errors === null) {
-                    echo "$plugin_dir is OK.\n";
-                }
-            } else {
-                if ($errors === null) {
-                    echo "$plugin_dir is OK.\n";
-                }
-            }
-        }
-        if (!$_core_plugins_available) {
-            $status = false;
-            $message = "WARNING: Smarty's own libs/plugins is not available";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } elseif (!isset($errors['plugins_dir'])) {
-                $errors['plugins_dir'] = $message;
-            }
-        }
-
-        if ($errors === null) {
-            echo "Testing cache directory...\n";
-        }
-
-        // test if all registered cache_dir is accessible
-        $__cache_dir = $smarty->getCacheDir();
-        $_cache_dir = realpath($__cache_dir);
-        if (!$_cache_dir) {
-            $status = false;
-            $message = "FAILED: {$__cache_dir} does not exist";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['cache_dir'] = $message;
-            }
-        } elseif (!is_dir($_cache_dir)) {
-            $status = false;
-            $message = "FAILED: {$_cache_dir} is not a directory";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['cache_dir'] = $message;
-            }
-        } elseif (!is_readable($_cache_dir)) {
-            $status = false;
-            $message = "FAILED: {$_cache_dir} is not readable";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['cache_dir'] = $message;
-            }
-        } elseif (!is_writable($_cache_dir)) {
-            $status = false;
-            $message = "FAILED: {$_cache_dir} is not writable";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['cache_dir'] = $message;
-            }
-        } else {
-            if ($errors === null) {
-                echo "{$_cache_dir} is OK.\n";
-            }
-        }
-
-        if ($errors === null) {
-            echo "Testing configs directory...\n";
-        }
-
-        // test if all registered config_dir are accessible
-        foreach ($smarty->getConfigDir() as $config_dir) {
-            $_config_dir = $config_dir;
-            $config_dir = realpath($config_dir);
-            // resolve include_path or fail existence
-            if (!$config_dir) {
-                if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_config_dir)) {
-                    // try PHP include_path
-                    if ($_stream_resolve_include_path) {
-                        $config_dir = stream_resolve_include_path($_config_dir);
-                    } else {
-                        $config_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_config_dir);
-                    }
-
-                    if ($config_dir !== false) {
-                        if ($errors === null) {
-                            echo "$config_dir is OK.\n";
-                        }
-
-                        continue;
-                    } else {
-                        $status = false;
-                        $message = "FAILED: $_config_dir does not exist (and couldn't be found in include_path either)";
-                        if ($errors === null) {
-                            echo $message . ".\n";
-                        } else {
-                            $errors['config_dir'] = $message;
-                        }
-
-                        continue;
-                    }
-                } else {
-                    $status = false;
-                    $message = "FAILED: $_config_dir does not exist";
-                    if ($errors === null) {
-                        echo $message . ".\n";
-                    } else {
-                        $errors['config_dir'] = $message;
-                    }
-
-                    continue;
-                }
-            }
-
-            if (!is_dir($config_dir)) {
-                $status = false;
-                $message = "FAILED: $config_dir is not a directory";
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['config_dir'] = $message;
-                }
-            } elseif (!is_readable($config_dir)) {
-                $status = false;
-                $message = "FAILED: $config_dir is not readable";
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['config_dir'] = $message;
-                }
-            } else {
-                if ($errors === null) {
-                    echo "$config_dir is OK.\n";
-                }
-            }
-        }
-
-        if ($errors === null) {
-            echo "Testing sysplugin files...\n";
-        }
-        // test if sysplugins are available
-        $source = SMARTY_SYSPLUGINS_DIR;
-        if (is_dir($source)) {
-            $expected = array(
-                "smarty_cacheresource.php"                                  => true,
-                "smarty_cacheresource_custom.php"                           => true,
-                "smarty_cacheresource_keyvaluestore.php"                    => true,
-                "smarty_config_source.php"                                  => true,
-                "smarty_internal_cacheresource_file.php"                    => true,
-                "smarty_internal_compile_append.php"                        => true,
-                "smarty_internal_compile_assign.php"                        => true,
-                "smarty_internal_compile_block.php"                         => true,
-                "smarty_internal_compile_break.php"                         => true,
-                "smarty_internal_compile_call.php"                          => true,
-                "smarty_internal_compile_capture.php"                       => true,
-                "smarty_internal_compile_config_load.php"                   => true,
-                "smarty_internal_compile_continue.php"                      => true,
-                "smarty_internal_compile_debug.php"                         => true,
-                "smarty_internal_compile_eval.php"                          => true,
-                "smarty_internal_compile_extends.php"                       => true,
-                "smarty_internal_compile_for.php"                           => true,
-                "smarty_internal_compile_foreach.php"                       => true,
-                "smarty_internal_compile_function.php"                      => true,
-                "smarty_internal_compile_if.php"                            => true,
-                "smarty_internal_compile_include.php"                       => true,
-                "smarty_internal_compile_include_php.php"                   => true,
-                "smarty_internal_compile_insert.php"                        => true,
-                "smarty_internal_compile_ldelim.php"                        => true,
-                "smarty_internal_compile_nocache.php"                       => true,
-                "smarty_internal_compile_private_block_plugin.php"          => true,
-                "smarty_internal_compile_private_function_plugin.php"       => true,
-                "smarty_internal_compile_private_modifier.php"              => true,
-                "smarty_internal_compile_private_object_block_function.php" => true,
-                "smarty_internal_compile_private_object_function.php"       => true,
-                "smarty_internal_compile_private_print_expression.php"      => true,
-                "smarty_internal_compile_private_registered_block.php"      => true,
-                "smarty_internal_compile_private_registered_function.php"   => true,
-                "smarty_internal_compile_private_special_variable.php"      => true,
-                "smarty_internal_compile_rdelim.php"                        => true,
-                "smarty_internal_compile_section.php"                       => true,
-                "smarty_internal_compile_setfilter.php"                     => true,
-                "smarty_internal_compile_while.php"                         => true,
-                "smarty_internal_compilebase.php"                           => true,
-                "smarty_internal_config.php"                                => true,
-                "smarty_internal_config_file_compiler.php"                  => true,
-                "smarty_internal_configfilelexer.php"                       => true,
-                "smarty_internal_configfileparser.php"                      => true,
-                "smarty_internal_data.php"                                  => true,
-                "smarty_internal_debug.php"                                 => true,
-                "smarty_internal_filter_handler.php"                        => true,
-                "smarty_internal_function_call_handler.php"                 => true,
-                "smarty_internal_get_include_path.php"                      => true,
-                "smarty_internal_nocache_insert.php"                        => true,
-                "smarty_internal_parsetree.php"                             => true,
-                "smarty_internal_resource_eval.php"                         => true,
-                "smarty_internal_resource_extends.php"                      => true,
-                "smarty_internal_resource_file.php"                         => true,
-                "smarty_internal_resource_registered.php"                   => true,
-                "smarty_internal_resource_stream.php"                       => true,
-                "smarty_internal_resource_string.php"                       => true,
-                "smarty_internal_smartytemplatecompiler.php"                => true,
-                "smarty_internal_template.php"                              => true,
-                "smarty_internal_templatebase.php"                          => true,
-                "smarty_internal_templatecompilerbase.php"                  => true,
-                "smarty_internal_templatelexer.php"                         => true,
-                "smarty_internal_templateparser.php"                        => true,
-                "smarty_internal_utility.php"                               => true,
-                "smarty_internal_write_file.php"                            => true,
-                "smarty_resource.php"                                       => true,
-                "smarty_resource_custom.php"                                => true,
-                "smarty_resource_recompiled.php"                            => true,
-                "smarty_resource_uncompiled.php"                            => true,
-                "smarty_security.php"                                       => true,
-            );
-            $iterator = new DirectoryIterator($source);
-            foreach ($iterator as $file) {
-                if (!$file->isDot()) {
-                    $filename = $file->getFilename();
-                    if (isset($expected[$filename])) {
-                        unset($expected[$filename]);
-                    }
-                }
-            }
-            if ($expected) {
-                $status = false;
-                $message = "FAILED: files missing from libs/sysplugins: " . join(', ', array_keys($expected));
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['sysplugins'] = $message;
-                }
-            } elseif ($errors === null) {
-                echo "... OK\n";
-            }
-        } else {
-            $status = false;
-            $message = "FAILED: " . SMARTY_SYSPLUGINS_DIR . ' is not a directory';
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['sysplugins_dir_constant'] = $message;
-            }
-        }
-
-        if ($errors === null) {
-            echo "Testing plugin files...\n";
-        }
-        // test if core plugins are available
-        $source = SMARTY_PLUGINS_DIR;
-        if (is_dir($source)) {
-            $expected = array(
-                "block.textformat.php"                  => true,
-                "function.counter.php"                  => true,
-                "function.cycle.php"                    => true,
-                "function.fetch.php"                    => true,
-                "function.html_checkboxes.php"          => true,
-                "function.html_image.php"               => true,
-                "function.html_options.php"             => true,
-                "function.html_radios.php"              => true,
-                "function.html_select_date.php"         => true,
-                "function.html_select_time.php"         => true,
-                "function.html_table.php"               => true,
-                "function.mailto.php"                   => true,
-                "function.math.php"                     => true,
-                "modifier.capitalize.php"               => true,
-                "modifier.date_format.php"              => true,
-                "modifier.debug_print_var.php"          => true,
-                "modifier.escape.php"                   => true,
-                "modifier.regex_replace.php"            => true,
-                "modifier.replace.php"                  => true,
-                "modifier.spacify.php"                  => true,
-                "modifier.truncate.php"                 => true,
-                "modifiercompiler.cat.php"              => true,
-                "modifiercompiler.count_characters.php" => true,
-                "modifiercompiler.count_paragraphs.php" => true,
-                "modifiercompiler.count_sentences.php"  => true,
-                "modifiercompiler.count_words.php"      => true,
-                "modifiercompiler.default.php"          => true,
-                "modifiercompiler.escape.php"           => true,
-                "modifiercompiler.from_charset.php"     => true,
-                "modifiercompiler.indent.php"           => true,
-                "modifiercompiler.lower.php"            => true,
-                "modifiercompiler.noprint.php"          => true,
-                "modifiercompiler.string_format.php"    => true,
-                "modifiercompiler.strip.php"            => true,
-                "modifiercompiler.strip_tags.php"       => true,
-                "modifiercompiler.to_charset.php"       => true,
-                "modifiercompiler.unescape.php"         => true,
-                "modifiercompiler.upper.php"            => true,
-                "modifiercompiler.wordwrap.php"         => true,
-                "outputfilter.trimwhitespace.php"       => true,
-                "shared.escape_special_chars.php"       => true,
-                "shared.literal_compiler_param.php"     => true,
-                "shared.make_timestamp.php"             => true,
-                "shared.mb_str_replace.php"             => true,
-                "shared.mb_unicode.php"                 => true,
-                "shared.mb_wordwrap.php"                => true,
-                "variablefilter.htmlspecialchars.php"   => true,
-            );
-            $iterator = new DirectoryIterator($source);
-            foreach ($iterator as $file) {
-                if (!$file->isDot()) {
-                    $filename = $file->getFilename();
-                    if (isset($expected[$filename])) {
-                        unset($expected[$filename]);
-                    }
-                }
-            }
-            if ($expected) {
-                $status = false;
-                $message = "FAILED: files missing from libs/plugins: " . join(', ', array_keys($expected));
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['plugins'] = $message;
-                }
-            } elseif ($errors === null) {
-                echo "... OK\n";
-            }
-        } else {
-            $status = false;
-            $message = "FAILED: " . SMARTY_PLUGINS_DIR . ' is not a directory';
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['plugins_dir_constant'] = $message;
-            }
-        }
-
-        if ($errors === null) {
-            echo "Tests complete.\n";
-            echo "
\n"; - } - - return $status; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_resource.php b/library/Smarty/libs/sysplugins/smarty_resource.php deleted file mode 100644 index f478a533d2..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_resource.php +++ /dev/null @@ -1,912 +0,0 @@ - true, - 'string' => true, - 'extends' => true, - 'stream' => true, - 'eval' => true, - 'php' => true - ); - - /** - * Name of the Class to compile this resource's contents with - * - * @var string - */ - public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler'; - - /** - * Name of the Class to tokenize this resource's contents with - * - * @var string - */ - public $template_lexer_class = 'Smarty_Internal_Templatelexer'; - - /** - * Name of the Class to parse this resource's contents with - * - * @var string - */ - public $template_parser_class = 'Smarty_Internal_Templateparser'; - - /** - * Load template's source into current template object - * {@internal The loaded source is assigned to $_template->source->content directly.}} - * - * @param Smarty_Template_Source $source source object - * - * @return string template source - * @throws SmartyException if source cannot be loaded - */ - abstract public function getContent(Smarty_Template_Source $source); - - /** - * populate Source Object with meta data from Resource - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - */ - abstract public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null); - - /** - * populate Source Object with timestamp and exists from Resource - * - * @param Smarty_Template_Source $source source object - */ - public function populateTimestamp(Smarty_Template_Source $source) - { - // intentionally left blank - } - - /** - * modify resource_name according to resource handlers specifications - * - * @param Smarty $smarty Smarty instance - * @param string $resource_name resource_name to make unique - * @param boolean $is_config flag for config resource - * - * @return string unique resource name - */ - protected function buildUniqueResourceName(Smarty $smarty, $resource_name, $is_config = false) - { - if ($is_config) { - return get_class($this) . '#' . $smarty->joined_config_dir . '#' . $resource_name; - } else { - return get_class($this) . '#' . $smarty->joined_template_dir . '#' . $resource_name; - } - } - - /** - * populate Compiled Object with compiled filepath - * - * @param Smarty_Template_Compiled $compiled compiled object - * @param Smarty_Internal_Template $_template template object - */ - public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template) - { - $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w\|]+!', '_', $_template->compile_id) : null; - $_filepath = $compiled->source->uid; - // if use_sub_dirs, break file into directories - if ($_template->smarty->use_sub_dirs) { - $_filepath = substr($_filepath, 0, 2) . DS - . substr($_filepath, 2, 2) . DS - . substr($_filepath, 4, 2) . DS - . $_filepath; - } - $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^'; - if (isset($_compile_id)) { - $_filepath = $_compile_id . $_compile_dir_sep . $_filepath; - } - // caching token - if ($_template->caching) { - $_cache = '.cache'; - } else { - $_cache = ''; - } - $_compile_dir = $_template->smarty->getCompileDir(); - // set basename if not specified - $_basename = $this->getBasename($compiled->source); - if ($_basename === null) { - $_basename = basename(preg_replace('![^\w\/]+!', '_', $compiled->source->name)); - } - // separate (optional) basename by dot - if ($_basename) { - $_basename = '.' . $_basename; - } - - $compiled->filepath = $_compile_dir . $_filepath . '.' . $compiled->source->type . $_basename . $_cache . '.php'; - } - - /** - * Normalize Paths "foo/../bar" to "bar" - * - * @param string $_path path to normalize - * @param boolean $ds respect windows directory separator - * - * @return string normalized path - */ - protected function normalizePath($_path, $ds = true) - { - if ($ds) { - // don't we all just love windows? - $_path = str_replace('\\', '/', $_path); - } - - $offset = 0; - - // resolve simples - $_path = preg_replace('#/\./(\./)*#', '/', $_path); - // resolve parents - while (true) { - $_parent = strpos($_path, '/../', $offset); - if (!$_parent) { - break; - } elseif ($_path[$_parent - 1] === '.') { - $offset = $_parent + 3; - continue; - } - - $_pos = strrpos($_path, '/', $_parent - strlen($_path) - 1); - if ($_pos === false) { - // don't we all just love windows? - $_pos = $_parent; - } - - $_path = substr_replace($_path, '', $_pos, $_parent + 3 - $_pos); - } - - if ($ds && DS != '/') { - // don't we all just love windows? - $_path = str_replace('/', '\\', $_path); - } - - return $_path; - } - - /** - * build template filepath by traversing the template_dir array - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - * - * @return string fully qualified filepath - * @throws SmartyException if default template handler is registered but not callable - */ - protected function buildFilepath(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) - { - $file = $source->name; - if ($source instanceof Smarty_Config_Source) { - $_directories = $source->smarty->getConfigDir(); - $_default_handler = $source->smarty->default_config_handler_func; - } else { - $_directories = $source->smarty->getTemplateDir(); - $_default_handler = $source->smarty->default_template_handler_func; - } - - // go relative to a given template? - $_file_is_dotted = $file[0] == '.' && ($file[1] == '.' || $file[1] == '/' || $file[1] == "\\"); - if ($_template && $_template->parent instanceof Smarty_Internal_Template && $_file_is_dotted) { - if ($_template->parent->source->type != 'file' && $_template->parent->source->type != 'extends' && !$_template->parent->allow_relative_path) { - throw new SmartyException("Template '{$file}' cannot be relative to template of resource type '{$_template->parent->source->type}'"); - } - $file = dirname($_template->parent->source->filepath) . DS . $file; - $_file_exact_match = true; - if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $file)) { - // the path gained from the parent template is relative to the current working directory - // as expansions (like include_path) have already been done - $file = getcwd() . DS . $file; - } - } - - // resolve relative path - if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $file)) { - // don't we all just love windows? - $_path = DS . trim($file, '/'); - $_was_relative = true; - } else { - // don't we all just love windows? - $_path = str_replace('\\', '/', $file); - } - $_path = $this->normalizePath($_path, false); - if (DS != '/') { - // don't we all just love windows? - $_path = str_replace('/', '\\', $_path); - } - // revert to relative - if (isset($_was_relative)) { - $_path = substr($_path, 1); - } - - // this is only required for directories - $file = rtrim($_path, '/\\'); - - // files relative to a template only get one shot - if (isset($_file_exact_match)) { - return $this->fileExists($source, $file) ? $file : false; - } - - // template_dir index? - if (preg_match('#^\[(?P[^\]]+)\](?P.+)$#', $file, $match)) { - $_directory = null; - // try string indexes - if (isset($_directories[$match['key']])) { - $_directory = $_directories[$match['key']]; - } elseif (is_numeric($match['key'])) { - // try numeric index - $match['key'] = (int) $match['key']; - if (isset($_directories[$match['key']])) { - $_directory = $_directories[$match['key']]; - } else { - // try at location index - $keys = array_keys($_directories); - $_directory = $_directories[$keys[$match['key']]]; - } - } - - if ($_directory) { - $_file = substr($file, strpos($file, ']') + 1); - $_filepath = $_directory . $_file; - if ($this->fileExists($source, $_filepath)) { - return $_filepath; - } - } - } - - $_stream_resolve_include_path = function_exists('stream_resolve_include_path'); - - // relative file name? - if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $file)) { - foreach ($_directories as $_directory) { - $_filepath = $_directory . $file; - if ($this->fileExists($source, $_filepath)) { - return $this->normalizePath($_filepath); - } - if ($source->smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_directory)) { - // try PHP include_path - if ($_stream_resolve_include_path) { - $_filepath = stream_resolve_include_path($_filepath); - } else { - $_filepath = Smarty_Internal_Get_Include_Path::getIncludePath($_filepath); - } - - if ($_filepath !== false) { - if ($this->fileExists($source, $_filepath)) { - return $this->normalizePath($_filepath); - } - } - } - } - } - - // try absolute filepath - if ($this->fileExists($source, $file)) { - return $file; - } - - // no tpl file found - if ($_default_handler) { - if (!is_callable($_default_handler)) { - if ($source instanceof Smarty_Config_Source) { - throw new SmartyException("Default config handler not callable"); - } else { - throw new SmartyException("Default template handler not callable"); - } - } - $_return = call_user_func_array($_default_handler, - array($source->type, $source->name, &$_content, &$_timestamp, $source->smarty)); - if (is_string($_return)) { - $source->timestamp = @filemtime($_return); - $source->exists = !!$source->timestamp; - - return $_return; - } elseif ($_return === true) { - $source->content = $_content; - $source->timestamp = $_timestamp; - $source->exists = true; - - return $_filepath; - } - } - - // give up - return false; - } - - /** - * test is file exists and save timestamp - * - * @param Smarty_Template_Source $source source object - * @param string $file file name - * - * @return bool true if file exists - */ - protected function fileExists(Smarty_Template_Source $source, $file) - { - $source->timestamp = is_file($file) ? @filemtime($file) : false; - - return $source->exists = !!$source->timestamp; - } - - /** - * Determine basename for compiled filename - * - * @param Smarty_Template_Source $source source object - * - * @return string resource's basename - */ - protected function getBasename(Smarty_Template_Source $source) - { - return null; - } - - /** - * Load Resource Handler - * - * @param Smarty $smarty smarty object - * @param string $type name of the resource - * - * @throws SmartyException - * @return Smarty_Resource Resource Handler - */ - public static function load(Smarty $smarty, $type) - { - // try smarty's cache - if (isset($smarty->_resource_handlers[$type])) { - return $smarty->_resource_handlers[$type]; - } - - // try registered resource - if (isset($smarty->registered_resources[$type])) { - if ($smarty->registered_resources[$type] instanceof Smarty_Resource) { - $smarty->_resource_handlers[$type] = $smarty->registered_resources[$type]; - // note registered to smarty is not kept unique! - return $smarty->_resource_handlers[$type]; - } - - if (!isset(self::$resources['registered'])) { - self::$resources['registered'] = new Smarty_Internal_Resource_Registered(); - } - if (!isset($smarty->_resource_handlers[$type])) { - $smarty->_resource_handlers[$type] = self::$resources['registered']; - } - - return $smarty->_resource_handlers[$type]; - } - - // try sysplugins dir - if (isset(self::$sysplugins[$type])) { - if (!isset(self::$resources[$type])) { - $_resource_class = 'Smarty_Internal_Resource_' . ucfirst($type); - self::$resources[$type] = new $_resource_class(); - } - - return $smarty->_resource_handlers[$type] = self::$resources[$type]; - } - - // try plugins dir - $_resource_class = 'Smarty_Resource_' . ucfirst($type); - if ($smarty->loadPlugin($_resource_class)) { - if (isset(self::$resources[$type])) { - return $smarty->_resource_handlers[$type] = self::$resources[$type]; - } - - if (class_exists($_resource_class, false)) { - self::$resources[$type] = new $_resource_class(); - - return $smarty->_resource_handlers[$type] = self::$resources[$type]; - } else { - $smarty->registerResource($type, array( - "smarty_resource_{$type}_source", - "smarty_resource_{$type}_timestamp", - "smarty_resource_{$type}_secure", - "smarty_resource_{$type}_trusted" - )); - - // give it another try, now that the resource is registered properly - return self::load($smarty, $type); - } - } - - // try streams - $_known_stream = stream_get_wrappers(); - if (in_array($type, $_known_stream)) { - // is known stream - if (is_object($smarty->security_policy)) { - $smarty->security_policy->isTrustedStream($type); - } - if (!isset(self::$resources['stream'])) { - self::$resources['stream'] = new Smarty_Internal_Resource_Stream(); - } - - return $smarty->_resource_handlers[$type] = self::$resources['stream']; - } - - // TODO: try default_(template|config)_handler - - // give up - throw new SmartyException("Unknown resource type '{$type}'"); - } - - /** - * extract resource_type and resource_name from template_resource and config_resource - * @note "C:/foo.tpl" was forced to file resource up till Smarty 3.1.3 (including). - * - * @param string $resource_name template_resource or config_resource to parse - * @param string $default_resource the default resource_type defined in $smarty - * @param string &$name the parsed resource name - * @param string &$type the parsed resource type - * - * @return void - */ - protected static function parseResourceName($resource_name, $default_resource, &$name, &$type) - { - $parts = explode(':', $resource_name, 2); - if (!isset($parts[1]) || !isset($parts[0][1])) { - // no resource given, use default - // or single character before the colon is not a resource type, but part of the filepath - $type = $default_resource; - $name = $resource_name; - } else { - $type = $parts[0]; - $name = $parts[1]; - } - } - - /** - * modify resource_name according to resource handlers specifications - * - * @param Smarty $smarty Smarty instance - * @param string $resource_name resource_name to make unique - * - * @return string unique resource name - */ - - /** - * modify template_resource according to resource handlers specifications - * - * @param Smarty_Internal_template $template Smarty instance - * @param string $template_resource template_resource to extract resource handler and name of - * - * @return string unique resource name - */ - public static function getUniqueTemplateName($template, $template_resource) - { - self::parseResourceName($template_resource, $template->smarty->default_resource_type, $name, $type); - // TODO: optimize for Smarty's internal resource types - $resource = Smarty_Resource::load($template->smarty, $type); - // go relative to a given template? - $_file_is_dotted = $name[0] == '.' && ($name[1] == '.' || $name[1] == '/' || $name[1] == "\\"); - if ($template instanceof Smarty_Internal_Template && $_file_is_dotted && ($template->source->type == 'file' || $template->parent->source->type == 'extends')) { - $name = dirname($template->source->filepath) . DS . $name; - } - return $resource->buildUniqueResourceName($template->smarty, $name); - } - - /** - * initialize Source Object for given resource - * Either [$_template] or [$smarty, $template_resource] must be specified - * - * @param Smarty_Internal_Template $_template template object - * @param Smarty $smarty smarty object - * @param string $template_resource resource identifier - * - * @return Smarty_Template_Source Source Object - */ - public static function source(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null) - { - if ($_template) { - $smarty = $_template->smarty; - $template_resource = $_template->template_resource; - } - - // parse resource_name, load resource handler, identify unique resource name - self::parseResourceName($template_resource, $smarty->default_resource_type, $name, $type); - $resource = Smarty_Resource::load($smarty, $type); - // go relative to a given template? - $_file_is_dotted = isset($name[0]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/' || $name[1] == "\\"); - if ($_file_is_dotted && isset($_template) && $_template->parent instanceof Smarty_Internal_Template && ($_template->parent->source->type == 'file' || $_template->parent->source->type == 'extends')) { - $name2 = dirname($_template->parent->source->filepath) . DS . $name; - } else { - $name2 = $name; - } - $unique_resource_name = $resource->buildUniqueResourceName($smarty, $name2); - - // check runtime cache - $_cache_key = 'template|' . $unique_resource_name; - if ($smarty->compile_id) { - $_cache_key .= '|' . $smarty->compile_id; - } - if (isset(self::$sources[$_cache_key])) { - return self::$sources[$_cache_key]; - } - - // create source - $source = new Smarty_Template_Source($resource, $smarty, $template_resource, $type, $name, $unique_resource_name); - $resource->populate($source, $_template); - - // runtime cache - self::$sources[$_cache_key] = $source; - - return $source; - } - - /** - * initialize Config Source Object for given resource - * - * @param Smarty_Internal_Config $_config config object - * - * @throws SmartyException - * @return Smarty_Config_Source Source Object - */ - public static function config(Smarty_Internal_Config $_config) - { - static $_incompatible_resources = array('eval' => true, 'string' => true, 'extends' => true, 'php' => true); - $config_resource = $_config->config_resource; - $smarty = $_config->smarty; - - // parse resource_name - self::parseResourceName($config_resource, $smarty->default_config_type, $name, $type); - - // make sure configs are not loaded via anything smarty can't handle - if (isset($_incompatible_resources[$type])) { - throw new SmartyException ("Unable to use resource '{$type}' for config"); - } - - // load resource handler, identify unique resource name - $resource = Smarty_Resource::load($smarty, $type); - $unique_resource_name = $resource->buildUniqueResourceName($smarty, $name, true); - - // check runtime cache - $_cache_key = 'config|' . $unique_resource_name; - if (isset(self::$sources[$_cache_key])) { - return self::$sources[$_cache_key]; - } - - // create source - $source = new Smarty_Config_Source($resource, $smarty, $config_resource, $type, $name, $unique_resource_name); - $resource->populate($source, null); - - // runtime cache - self::$sources[$_cache_key] = $source; - - return $source; - } -} - -/** - * Smarty Resource Data Object - * Meta Data Container for Template Files - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - * @property integer $timestamp Source Timestamp - * @property boolean $exists Source Existence - * @property boolean $template Extended Template reference - * @property string $content Source Content - */ -class Smarty_Template_Source -{ - /** - * Name of the Class to compile this resource's contents with - * - * @var string - */ - public $compiler_class = null; - - /** - * Name of the Class to tokenize this resource's contents with - * - * @var string - */ - public $template_lexer_class = null; - - /** - * Name of the Class to parse this resource's contents with - * - * @var string - */ - public $template_parser_class = null; - - /** - * Unique Template ID - * - * @var string - */ - public $uid = null; - - /** - * Template Resource (Smarty_Internal_Template::$template_resource) - * - * @var string - */ - public $resource = null; - - /** - * Resource Type - * - * @var string - */ - public $type = null; - - /** - * Resource Name - * - * @var string - */ - public $name = null; - - /** - * Unique Resource Name - * - * @var string - */ - public $unique_resource = null; - - /** - * Source Filepath - * - * @var string - */ - public $filepath = null; - - /** - * Source is bypassing compiler - * - * @var boolean - */ - public $uncompiled = null; - - /** - * Source must be recompiled on every occasion - * - * @var boolean - */ - public $recompiled = null; - - /** - * The Components an extended template is made of - * - * @var array - */ - public $components = null; - - /** - * Resource Handler - * - * @var Smarty_Resource - */ - public $handler = null; - - /** - * Smarty instance - * - * @var Smarty - */ - public $smarty = null; - - /** - * create Source Object container - * - * @param Smarty_Resource $handler Resource Handler this source object communicates with - * @param Smarty $smarty Smarty instance this source object belongs to - * @param string $resource full template_resource - * @param string $type type of resource - * @param string $name resource name - * @param string $unique_resource unique resource name - */ - public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name, $unique_resource) - { - $this->handler = $handler; // Note: prone to circular references - - $this->compiler_class = $handler->compiler_class; - $this->template_lexer_class = $handler->template_lexer_class; - $this->template_parser_class = $handler->template_parser_class; - $this->uncompiled = $this->handler instanceof Smarty_Resource_Uncompiled; - $this->recompiled = $this->handler instanceof Smarty_Resource_Recompiled; - - $this->smarty = $smarty; - $this->resource = $resource; - $this->type = $type; - $this->name = $name; - $this->unique_resource = $unique_resource; - } - - /** - * get a Compiled Object of this source - * - * @param Smarty_Internal_Template|Smarty_Internal_Config $_template template object - * - * @return Smarty_Template_Compiled compiled object - */ - public function getCompiled($_template) - { - // check runtime cache - $_cache_key = $this->unique_resource . '#' . $_template->compile_id; - if (isset(Smarty_Resource::$compileds[$_cache_key])) { - return Smarty_Resource::$compileds[$_cache_key]; - } - - $compiled = new Smarty_Template_Compiled($this); - $this->handler->populateCompiledFilepath($compiled, $_template); - $compiled->timestamp = @filemtime($compiled->filepath); - $compiled->exists = !!$compiled->timestamp; - - // runtime cache - Smarty_Resource::$compileds[$_cache_key] = $compiled; - - return $compiled; - } - - /** - * render the uncompiled source - * - * @param Smarty_Internal_Template $_template template object - */ - public function renderUncompiled(Smarty_Internal_Template $_template) - { - return $this->handler->renderUncompiled($this, $_template); - } - - /** - * <> Generic Setter. - * - * @param string $property_name valid: timestamp, exists, content, template - * @param mixed $value new value (is not checked) - * - * @throws SmartyException if $property_name is not valid - */ - public function __set($property_name, $value) - { - switch ($property_name) { - // regular attributes - case 'timestamp': - case 'exists': - case 'content': - // required for extends: only - case 'template': - $this->$property_name = $value; - break; - - default: - throw new SmartyException("invalid source property '$property_name'."); - } - } - - /** - * <> Generic getter. - * - * @param string $property_name valid: timestamp, exists, content - * - * @return mixed - * @throws SmartyException if $property_name is not valid - */ - public function __get($property_name) - { - switch ($property_name) { - case 'timestamp': - case 'exists': - $this->handler->populateTimestamp($this); - - return $this->$property_name; - - case 'content': - return $this->content = $this->handler->getContent($this); - - default: - throw new SmartyException("source property '$property_name' does not exist."); - } - } -} - -/** - * Smarty Resource Data Object - * Meta Data Container for Template Files - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - * @property string $content compiled content - */ -class Smarty_Template_Compiled -{ - /** - * Compiled Filepath - * - * @var string - */ - public $filepath = null; - - /** - * Compiled Timestamp - * - * @var integer - */ - public $timestamp = null; - - /** - * Compiled Existence - * - * @var boolean - */ - public $exists = false; - - /** - * Compiled Content Loaded - * - * @var boolean - */ - public $loaded = false; - - /** - * Template was compiled - * - * @var boolean - */ - public $isCompiled = false; - - /** - * Source Object - * - * @var Smarty_Template_Source - */ - public $source = null; - - /** - * Metadata properties - * populated by Smarty_Internal_Template::decodeProperties() - * - * @var array - */ - public $_properties = null; - - /** - * create Compiled Object container - * - * @param Smarty_Template_Source $source source object this compiled object belongs to - */ - public function __construct(Smarty_Template_Source $source) - { - $this->source = $source; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_resource_recompiled.php b/library/Smarty/libs/sysplugins/smarty_resource_recompiled.php deleted file mode 100644 index 66b36e17a3..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_resource_recompiled.php +++ /dev/null @@ -1,33 +0,0 @@ -filepath = false; - $compiled->timestamp = false; - $compiled->exists = false; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_security.php b/library/Smarty/libs/sysplugins/smarty_security.php deleted file mode 100644 index 75d8756ec0..0000000000 --- a/library/Smarty/libs/sysplugins/smarty_security.php +++ /dev/null @@ -1,480 +0,0 @@ -" tags in templates. - * possible values: - *
    - *
  • Smarty::PHP_PASSTHRU -> echo PHP tags as they are
  • - *
  • Smarty::PHP_QUOTE -> escape tags as entities
  • - *
  • Smarty::PHP_REMOVE -> remove php tags
  • - *
  • Smarty::PHP_ALLOW -> execute php tags
  • - *
- * - * @var integer - */ - public $php_handling = Smarty::PHP_PASSTHRU; - /** - * This is the list of template directories that are considered secure. - * $template_dir is in this list implicitly. - * - * @var array - */ - public $secure_dir = array(); - /** - * This is an array of directories where trusted php scripts reside. - * {@link $security} is disabled during their inclusion/execution. - * - * @var array - */ - public $trusted_dir = array(); - /** - * List of regular expressions (PCRE) that include trusted URIs - * - * @var array - */ - public $trusted_uri = array(); - /** - * This is an array of trusted static classes. - * If empty access to all static classes is allowed. - * If set to 'none' none is allowed. - * - * @var array - */ - public $static_classes = array(); - /** - * This is an array of trusted PHP functions. - * If empty all functions are allowed. - * To disable all PHP functions set $php_functions = null. - * - * @var array - */ - public $php_functions = array( - 'isset', 'empty', - 'count', 'sizeof', - 'in_array', 'is_array', - 'time', - 'nl2br', - ); - /** - * This is an array of trusted PHP modifiers. - * If empty all modifiers are allowed. - * To disable all modifier set $modifiers = null. - * - * @var array - */ - public $php_modifiers = array( - 'escape', - 'count' - ); - /** - * This is an array of allowed tags. - * If empty no restriction by allowed_tags. - * - * @var array - */ - public $allowed_tags = array(); - /** - * This is an array of disabled tags. - * If empty no restriction by disabled_tags. - * - * @var array - */ - public $disabled_tags = array(); - /** - * This is an array of allowed modifier plugins. - * If empty no restriction by allowed_modifiers. - * - * @var array - */ - public $allowed_modifiers = array(); - /** - * This is an array of disabled modifier plugins. - * If empty no restriction by disabled_modifiers. - * - * @var array - */ - public $disabled_modifiers = array(); - /** - * This is an array of trusted streams. - * If empty all streams are allowed. - * To disable all streams set $streams = null. - * - * @var array - */ - public $streams = array('file'); - /** - * + flag if constants can be accessed from template - * - * @var boolean - */ - public $allow_constants = true; - /** - * + flag if super globals can be accessed from template - * - * @var boolean - */ - public $allow_super_globals = true; - - /** - * Cache for $resource_dir lookup - * - * @var array - */ - protected $_resource_dir = null; - /** - * Cache for $template_dir lookup - * - * @var array - */ - protected $_template_dir = null; - /** - * Cache for $config_dir lookup - * - * @var array - */ - protected $_config_dir = null; - /** - * Cache for $secure_dir lookup - * - * @var array - */ - protected $_secure_dir = null; - /** - * Cache for $php_resource_dir lookup - * - * @var array - */ - protected $_php_resource_dir = null; - /** - * Cache for $trusted_dir lookup - * - * @var array - */ - protected $_trusted_dir = null; - - /** - * @param Smarty $smarty - */ - public function __construct($smarty) - { - $this->smarty = $smarty; - } - - /** - * Check if PHP function is trusted. - * - * @param string $function_name - * @param object $compiler compiler object - * - * @return boolean true if function is trusted - * @throws SmartyCompilerException if php function is not trusted - */ - public function isTrustedPhpFunction($function_name, $compiler) - { - if (isset($this->php_functions) && (empty($this->php_functions) || in_array($function_name, $this->php_functions))) { - return true; - } - - $compiler->trigger_template_error("PHP function '{$function_name}' not allowed by security setting"); - - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if static class is trusted. - * - * @param string $class_name - * @param object $compiler compiler object - * - * @return boolean true if class is trusted - * @throws SmartyCompilerException if static class is not trusted - */ - public function isTrustedStaticClass($class_name, $compiler) - { - if (isset($this->static_classes) && (empty($this->static_classes) || in_array($class_name, $this->static_classes))) { - return true; - } - - $compiler->trigger_template_error("access to static class '{$class_name}' not allowed by security setting"); - - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if PHP modifier is trusted. - * - * @param string $modifier_name - * @param object $compiler compiler object - * - * @return boolean true if modifier is trusted - * @throws SmartyCompilerException if modifier is not trusted - */ - public function isTrustedPhpModifier($modifier_name, $compiler) - { - if (isset($this->php_modifiers) && (empty($this->php_modifiers) || in_array($modifier_name, $this->php_modifiers))) { - return true; - } - - $compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting"); - - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if tag is trusted. - * - * @param string $tag_name - * @param object $compiler compiler object - * - * @return boolean true if tag is trusted - * @throws SmartyCompilerException if modifier is not trusted - */ - public function isTrustedTag($tag_name, $compiler) - { - // check for internal always required tags - if (in_array($tag_name, array('assign', 'call', 'private_filter', 'private_block_plugin', 'private_function_plugin', 'private_object_block_function', - 'private_object_function', 'private_registered_function', 'private_registered_block', 'private_special_variable', 'private_print_expression', 'private_modifier')) - ) { - return true; - } - // check security settings - if (empty($this->allowed_tags)) { - if (empty($this->disabled_tags) || !in_array($tag_name, $this->disabled_tags)) { - return true; - } else { - $compiler->trigger_template_error("tag '{$tag_name}' disabled by security setting", $compiler->lex->taglineno); - } - } elseif (in_array($tag_name, $this->allowed_tags) && !in_array($tag_name, $this->disabled_tags)) { - return true; - } else { - $compiler->trigger_template_error("tag '{$tag_name}' not allowed by security setting", $compiler->lex->taglineno); - } - - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if modifier plugin is trusted. - * - * @param string $modifier_name - * @param object $compiler compiler object - * - * @return boolean true if tag is trusted - * @throws SmartyCompilerException if modifier is not trusted - */ - public function isTrustedModifier($modifier_name, $compiler) - { - // check for internal always allowed modifier - if (in_array($modifier_name, array('default'))) { - return true; - } - // check security settings - if (empty($this->allowed_modifiers)) { - if (empty($this->disabled_modifiers) || !in_array($modifier_name, $this->disabled_modifiers)) { - return true; - } else { - $compiler->trigger_template_error("modifier '{$modifier_name}' disabled by security setting", $compiler->lex->taglineno); - } - } elseif (in_array($modifier_name, $this->allowed_modifiers) && !in_array($modifier_name, $this->disabled_modifiers)) { - return true; - } else { - $compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting", $compiler->lex->taglineno); - } - - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if stream is trusted. - * - * @param string $stream_name - * - * @return boolean true if stream is trusted - * @throws SmartyException if stream is not trusted - */ - public function isTrustedStream($stream_name) - { - if (isset($this->streams) && (empty($this->streams) || in_array($stream_name, $this->streams))) { - return true; - } - - throw new SmartyException("stream '{$stream_name}' not allowed by security setting"); - } - - /** - * Check if directory of file resource is trusted. - * - * @param string $filepath - * - * @return boolean true if directory is trusted - * @throws SmartyException if directory is not trusted - */ - public function isTrustedResourceDir($filepath) - { - $_template = false; - $_config = false; - $_secure = false; - - $_template_dir = $this->smarty->getTemplateDir(); - $_config_dir = $this->smarty->getConfigDir(); - - // check if index is outdated - if ((!$this->_template_dir || $this->_template_dir !== $_template_dir) - || (!$this->_config_dir || $this->_config_dir !== $_config_dir) - || (!empty($this->secure_dir) && (!$this->_secure_dir || $this->_secure_dir !== $this->secure_dir)) - ) { - $this->_resource_dir = array(); - $_template = true; - $_config = true; - $_secure = !empty($this->secure_dir); - } - - // rebuild template dir index - if ($_template) { - $this->_template_dir = $_template_dir; - foreach ($_template_dir as $directory) { - $directory = realpath($directory); - $this->_resource_dir[$directory] = true; - } - } - - // rebuild config dir index - if ($_config) { - $this->_config_dir = $_config_dir; - foreach ($_config_dir as $directory) { - $directory = realpath($directory); - $this->_resource_dir[$directory] = true; - } - } - - // rebuild secure dir index - if ($_secure) { - $this->_secure_dir = $this->secure_dir; - foreach ((array) $this->secure_dir as $directory) { - $directory = realpath($directory); - $this->_resource_dir[$directory] = true; - } - } - - $_filepath = realpath($filepath); - $directory = dirname($_filepath); - $_directory = array(); - while (true) { - // remember the directory to add it to _resource_dir in case we're successful - $_directory[$directory] = true; - // test if the directory is trusted - if (isset($this->_resource_dir[$directory])) { - // merge sub directories of current $directory into _resource_dir to speed up subsequent lookup - $this->_resource_dir = array_merge($this->_resource_dir, $_directory); - - return true; - } - // abort if we've reached root - if (($pos = strrpos($directory, DS)) === false || !isset($directory[1])) { - break; - } - // bubble up one level - $directory = substr($directory, 0, $pos); - } - - // give up - throw new SmartyException("directory '{$_filepath}' not allowed by security setting"); - } - - /** - * Check if URI (e.g. {fetch} or {html_image}) is trusted - * To simplify things, isTrustedUri() resolves all input to "{$PROTOCOL}://{$HOSTNAME}". - * So "http://username:password@hello.world.example.org:8080/some-path?some=query-string" - * is reduced to "http://hello.world.example.org" prior to applying the patters from {@link $trusted_uri}. - * - * @param string $uri - * - * @return boolean true if URI is trusted - * @throws SmartyException if URI is not trusted - * @uses $trusted_uri for list of patterns to match against $uri - */ - public function isTrustedUri($uri) - { - $_uri = parse_url($uri); - if (!empty($_uri['scheme']) && !empty($_uri['host'])) { - $_uri = $_uri['scheme'] . '://' . $_uri['host']; - foreach ($this->trusted_uri as $pattern) { - if (preg_match($pattern, $_uri)) { - return true; - } - } - } - - throw new SmartyException("URI '{$uri}' not allowed by security setting"); - } - - /** - * Check if directory of file resource is trusted. - * - * @param string $filepath - * - * @return boolean true if directory is trusted - * @throws SmartyException if PHP directory is not trusted - */ - public function isTrustedPHPDir($filepath) - { - if (empty($this->trusted_dir)) { - throw new SmartyException("directory '{$filepath}' not allowed by security setting (no trusted_dir specified)"); - } - - // check if index is outdated - if (!$this->_trusted_dir || $this->_trusted_dir !== $this->trusted_dir) { - $this->_php_resource_dir = array(); - - $this->_trusted_dir = $this->trusted_dir; - foreach ((array) $this->trusted_dir as $directory) { - $directory = realpath($directory); - $this->_php_resource_dir[$directory] = true; - } - } - - $_filepath = realpath($filepath); - $directory = dirname($_filepath); - $_directory = array(); - while (true) { - // remember the directory to add it to _resource_dir in case we're successful - $_directory[] = $directory; - // test if the directory is trusted - if (isset($this->_php_resource_dir[$directory])) { - // merge sub directories of current $directory into _resource_dir to speed up subsequent lookup - $this->_php_resource_dir = array_merge($this->_php_resource_dir, $_directory); - - return true; - } - // abort if we've reached root - if (($pos = strrpos($directory, DS)) === false || !isset($directory[2])) { - break; - } - // bubble up one level - $directory = substr($directory, 0, $pos); - } - - throw new SmartyException("directory '{$_filepath}' not allowed by security setting"); - } -} diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 6aa0273ecf..20d9db7f3a 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -12,6 +12,7 @@ return array( 'Friendica\\App' => $baseDir . '/src/App.php', 'Friendica\\BaseModule' => $baseDir . '/src/BaseModule.php', 'Friendica\\BaseObject' => $baseDir . '/src/BaseObject.php', + 'Friendica\\Content\\ContactSelector' => $baseDir . '/src/Content/ContactSelector.php', 'Friendica\\Content\\Feature' => $baseDir . '/src/Content/Feature.php', 'Friendica\\Content\\ForumManager' => $baseDir . '/src/Content/ForumManager.php', 'Friendica\\Content\\OEmbed' => $baseDir . '/src/Content/OEmbed.php', @@ -27,10 +28,14 @@ return array( 'Friendica\\Model\\Contact' => $baseDir . '/src/Model/Contact.php', 'Friendica\\Model\\GContact' => $baseDir . '/src/Model/GContact.php', 'Friendica\\Model\\Group' => $baseDir . '/src/Model/Group.php', + 'Friendica\\Model\\Item' => $baseDir . '/src/Model/Item.php', 'Friendica\\Model\\Photo' => $baseDir . '/src/Model/Photo.php', 'Friendica\\Model\\Profile' => $baseDir . '/src/Model/Profile.php', + 'Friendica\\Model\\Term' => $baseDir . '/src/Model/Term.php', 'Friendica\\Model\\User' => $baseDir . '/src/Model/User.php', 'Friendica\\Module\\Feed' => $baseDir . '/src/Module/Feed.php', + 'Friendica\\Module\\Login' => $baseDir . '/src/Module/Login.php', + 'Friendica\\Module\\Logout' => $baseDir . '/src/Module/Logout.php', 'Friendica\\Module\\Oembed' => $baseDir . '/src/Module/Oembed.php', 'Friendica\\Network\\FKOAuth1' => $baseDir . '/src/Network/FKOAuth1.php', 'Friendica\\Network\\FKOAuthDataStore' => $baseDir . '/src/Network/FKOAuthDataStore.php', diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index a11144496e..df7cf3808c 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -9,4 +9,5 @@ return array( '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', '8170285c807a9f24f165f37b15bc9a36' => $vendorDir . '/defuse/php-encryption/Crypto.php', '5255c38a0faeba867671b61dfda6d864' => $vendorDir . '/paragonie/random_compat/lib/random.php', + 'f084d01b0a599f67676cffef638aa95b' => $vendorDir . '/smarty/smarty/libs/bootstrap.php', ); diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index d09872de5c..e323edbeab 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -10,6 +10,7 @@ class ComposerStaticInitFriendica '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', '8170285c807a9f24f165f37b15bc9a36' => __DIR__ . '/..' . '/defuse/php-encryption/Crypto.php', '5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php', + 'f084d01b0a599f67676cffef638aa95b' => __DIR__ . '/..' . '/smarty/smarty/libs/bootstrap.php', ); public static $prefixLengthsPsr4 = array ( @@ -65,6 +66,7 @@ class ComposerStaticInitFriendica 'Friendica\\App' => __DIR__ . '/../..' . '/src/App.php', 'Friendica\\BaseModule' => __DIR__ . '/../..' . '/src/BaseModule.php', 'Friendica\\BaseObject' => __DIR__ . '/../..' . '/src/BaseObject.php', + 'Friendica\\Content\\ContactSelector' => __DIR__ . '/../..' . '/src/Content/ContactSelector.php', 'Friendica\\Content\\Feature' => __DIR__ . '/../..' . '/src/Content/Feature.php', 'Friendica\\Content\\ForumManager' => __DIR__ . '/../..' . '/src/Content/ForumManager.php', 'Friendica\\Content\\OEmbed' => __DIR__ . '/../..' . '/src/Content/OEmbed.php', @@ -80,10 +82,14 @@ class ComposerStaticInitFriendica 'Friendica\\Model\\Contact' => __DIR__ . '/../..' . '/src/Model/Contact.php', 'Friendica\\Model\\GContact' => __DIR__ . '/../..' . '/src/Model/GContact.php', 'Friendica\\Model\\Group' => __DIR__ . '/../..' . '/src/Model/Group.php', + 'Friendica\\Model\\Item' => __DIR__ . '/../..' . '/src/Model/Item.php', 'Friendica\\Model\\Photo' => __DIR__ . '/../..' . '/src/Model/Photo.php', 'Friendica\\Model\\Profile' => __DIR__ . '/../..' . '/src/Model/Profile.php', + 'Friendica\\Model\\Term' => __DIR__ . '/../..' . '/src/Model/Term.php', 'Friendica\\Model\\User' => __DIR__ . '/../..' . '/src/Model/User.php', 'Friendica\\Module\\Feed' => __DIR__ . '/../..' . '/src/Module/Feed.php', + 'Friendica\\Module\\Login' => __DIR__ . '/../..' . '/src/Module/Login.php', + 'Friendica\\Module\\Logout' => __DIR__ . '/../..' . '/src/Module/Logout.php', 'Friendica\\Module\\Oembed' => __DIR__ . '/../..' . '/src/Module/Oembed.php', 'Friendica\\Network\\FKOAuth1' => __DIR__ . '/../..' . '/src/Network/FKOAuth1.php', 'Friendica\\Network\\FKOAuthDataStore' => __DIR__ . '/../..' . '/src/Network/FKOAuthDataStore.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 15012d345f..bdabd2b3ac 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -539,5 +539,60 @@ "mobile detector", "php mobile detect" ] + }, + { + "name": "smarty/smarty", + "version": "v3.1.31", + "version_normalized": "3.1.31.0", + "source": { + "type": "git", + "url": "https://github.com/smarty-php/smarty.git", + "reference": "c7d42e4a327c402897dd587871434888fde1e7a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/c7d42e4a327c402897dd587871434888fde1e7a9", + "reference": "c7d42e4a327c402897dd587871434888fde1e7a9", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "time": "2016-12-14T21:57:25+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "libs/bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Monte Ohrt", + "email": "monte@ohrt.com" + }, + { + "name": "Uwe Tews", + "email": "uwe.tews@googlemail.com" + }, + { + "name": "Rodney Rehm", + "email": "rodney.rehm@medialize.de" + } + ], + "description": "Smarty - the compiling PHP template engine", + "homepage": "http://www.smarty.net", + "keywords": [ + "templating" + ] } ] diff --git a/vendor/smarty/smarty/COMPOSER_RELEASE_NOTES.txt b/vendor/smarty/smarty/COMPOSER_RELEASE_NOTES.txt new file mode 100644 index 0000000000..c943d9f2eb --- /dev/null +++ b/vendor/smarty/smarty/COMPOSER_RELEASE_NOTES.txt @@ -0,0 +1,29 @@ + + +Starting with Smarty 3.1.21 Composer has been configured to load the packages from github. + +******************************************************************************* +* * +* NOTE: Because of this change you must clear your local composer cache with * +* the "composer clearcache" command * +* * +******************************************************************************* + +To get the latest stable version use + "require": { + "smarty/smarty": "~3.1" + } +in your composer.json file. + +To get the trunk version use + "require": { + "smarty/smarty": "~3.1@dev" + } + +The "smarty/smarty" package will start at libs/.... subfolder. + +To retrieve the development and documentation folders add + "require-dev": { + "smarty/smarty-dev": "~3.1@dev" + } + diff --git a/vendor/smarty/smarty/INHERITANCE_RELEASE_NOTES.txt b/vendor/smarty/smarty/INHERITANCE_RELEASE_NOTES.txt new file mode 100644 index 0000000000..c415c4ccd1 --- /dev/null +++ b/vendor/smarty/smarty/INHERITANCE_RELEASE_NOTES.txt @@ -0,0 +1,87 @@ +3.1.31-dev +New tags for inheritance parent and child +{block_parent} == {$smarty.block.parent} +{block_child} == {$smarty.block.child} + +Since 3.1.28 you can mix inheritance by extends resource with the {extends} tag. +A template called by extends resource can extend a subtemplate or chain buy the {extends} tag. +Since 3.1.31 this feature can be turned off by setting the new Smarty property Smarty::$extends_recursion to false. + + +3.1.28 +Starting with version 3.1.28 template inheritance is no longer a compile time process. +All {block} tag parent/child relations are resolved at run time. +This does resolve all known existing restrictions (see below). + +The $smarty::$inheritance_merge_compiled_includes property has been removed. +Any access to it is ignored. + +New features: + +Any code outside root {block} tags in child templates is now executed but any output will be ignored. + + {extends 'foo.tpl'} + {$bar = 'on'} // assigns variable $bar seen in parent templates + {block 'buh'}{/block} + + {extends 'foo.tpl'} + {$bar} // the output of variable bar is ignored + {block 'buh'}{/block} + +{block} tags can be dynamically en/disabled by conditions. + + {block 'root'} + {if $foo} + {block 'v1'} + .... + {/block} + {else} + {block 'v1'} + .... + {/block} + {/if} + {/block} + +{block} tags can have variable names. + + {block $foo} + .... + {/block} + +Starting with 3.1.28 you can mix inheritance by extends resource with the {extends} tag. +A template called by extends resource can extend a subtemplate or chain buy the {extends} tag. + +NOTE There is a BC break. If you used the extends resource {extends} tags have been ignored. + +THE FOLLOWING RESTRICTIONS ARE NO LONGER EXISTING: +In Smarty 3.1 template inheritance is a compile time process. All the extending of {block} tags +is done at compile time and the parent and child templates are compiled in a single compiled template. +{include} subtemplate could also {block} tags. Such subtemplate could not compiled by it's own because +it could be used in other context where the {block} extended with a different result. For that reasion +the compiled code of {include} subtemplates gets also merged in compiled inheritance template. + +Merging the code into a single compile template has some drawbacks. +1. You could not use variable file names in {include} Smarty would use the {include} of compilation time. +2. You could not use individual compile_id in {include} +3. Seperate caching of subtemplate was not possible +4. Any change of the template directory structure between calls was not necessarily seen. + +Starting with 3.1.15 some of the above conditions got checked and resulted in an exception. It turned out +that a couple of users did use some of above and now got exceptions. + +To resolve this starting with 3.1.16 there is a new configuration parameter $inheritance_merge_compiled_includes. +For most backward compatibility its default setting is true. +With this setting all {include} subtemplate will be merge into the compiled inheritance template, but the above cases +could be rejected by exception. + + +If $smarty->inheritance_merge_compiled_includes = false; {include} subtemplate will not be merged. +You must now manually merge all {include} subtemplate which do contain {block} tags. This is done by setting the "inline" option. +{include file='foo.bar' inline} + +1. In case of a variable file name like {include file=$foo inline} you must use the variable in a compile_id $smarty->compile_id = $foo; +2. If you use individual compile_id in {include file='foo.tpl' compile_id=$bar inline} it must be used in the + global compile_id as well $smarty->compile_id = $bar; +3. If call templates with different template_dir configurations and a parent could same named child template from different folders + you must make the folder name part of the compile_id. + diff --git a/library/Smarty/COPYING.lib b/vendor/smarty/smarty/LICENSE similarity index 93% rename from library/Smarty/COPYING.lib rename to vendor/smarty/smarty/LICENSE index 02bbb60bc4..fb8ca6c6fb 100644 --- a/library/Smarty/COPYING.lib +++ b/vendor/smarty/smarty/LICENSE @@ -1,3 +1,17 @@ +Smarty: the PHP compiling template engine + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + 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, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + See the GNU Lesser General Public License below for more details. + + GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 @@ -162,4 +176,4 @@ General Public License ever published by the Free Software Foundation. whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the -Library. \ No newline at end of file +Library. diff --git a/vendor/smarty/smarty/NEW_FEATURES.txt b/vendor/smarty/smarty/NEW_FEATURES.txt new file mode 100644 index 0000000000..adbc1099b9 --- /dev/null +++ b/vendor/smarty/smarty/NEW_FEATURES.txt @@ -0,0 +1,239 @@ + + +This file contains a brief description of new features which have been added to Smarty 3.1 + +Smarty 3.1.31 + New tags for inheritance parent and child + ========================================= + {block_parent} == {$smarty.block.parent} + {block_child} == {$smarty.block.child} + +Smarty 3.1.30 + + Loop optimization {foreach} and {section} + ========================================= + Smarty does optimize the {foreach} and {section} loops by removing code for not needed loop + properties. + The compiler collects needed properties by scanning the current template for $item@property, + $smarty.foreach.name.property and $smarty.section.name.property. + The compiler does not know if additional properties will be needed outside the current template scope. + Additional properties can be generated by adding them with the property attribute. + + Example: + index.tpl + {foreach $from as $item properties=[iteration, index]} + {include 'sub.tpl'} + {$item.total} + {/foreach} + + sub.tpl + {$item.index} {$item.iteration} {$item.total} + + In above example code for the 'total' property is automatically generated as $item.total is used in + index.tpl. Code for 'iteration' and 'index' must be added with properties=[iteration, index]. + + New tag {make_nocache} + ====================== + Syntax: {make_nocache $foo} + + This tag makes a variable which does exists normally only while rendering the compiled template + available in the cached template for use in not cached expressions. + + Expample: + {foreach from=$list item=item} +
  • {$item.name} {make_nocache $item}{if $current==$item.id} ACTIVE{/if}
  • + {/foreach} + + The {foreach} loop is rendered while processing the compiled template, but $current is a nocache + variable. Normally the {if $current==$item.id} would fail as the $item variable is unkown in the + cached template. {make_nocache $item} does make the current $item value known in thee cached template. + + {make_nocache} is ignored when caching is disabled or the variable does exists as nocache variable. + + NOTE: if the variable value does contain objects these must have the __set_state method implemented. + + + Scope Attributes + ================ + The scope handling has been updated to cover all cases of variable assignments in templates. + + The tags {assign}, {append} direct assignments like {$foo = ...}, {$foo[...]= ...} support + the following optional scope attributes: + scope='parent' - the variable will be assigned in the current template and if the template + was included by {include} the calling template + scope='tpl_root' - the variable will be assigned in the outermost root template called by $smarty->display() + or $smarty->fetch() and is bubbled up all {include} sub-templates to the current template. + scope='smarty' - the variable will be assigned in the Smarty object and is bubbled up all {include} sub-templates + to the current template. + scope='global' - the variable will be assigned as Smarty object global variable and is bubbled up all {include} + sub-templates to the current template. + scope='root' - the variable will be assigned if a data object was used for variable definitions in the data + object or in the Smarty object otherwise and is bubbled up all {include} sub-templates to the + current template. + scope='local' - this scope has only a meaning if the tag is called within a template {function}. + The variable will be assigned in the local scope of the template function and the + template which did call the template function. + + + The {config_load} tag supports all of the above except the global scope. + + The scope attribute can be used also with the {include} tag. + Supported scope are parent, tpl_root, smarty, global and root. + A scope used together with the {include} tag will cause that with some exceptions any variable + assignment within that sub-template will update/assign the variable in other scopes according + to the above rules. It does include also variables assigned by plugins, tags supporting the assign=foo + attribute and direct assignments in {if} and {while} like {if $foo=$bar}. + Excluded are the key and value variables of {foreach}, {for} loop variables , variables passed by attributes + in {include} and direct increments/decrements like {$foo++}, {$foo--} + + Note: The scopes should be used only to the extend really need. If a variable value assigned in an included + sub-template should be returned to the calling sub-template just use {$foo='bar' scope='parent'}. + Use scopes only with variables for which it's realy needed. Avoid general scope settings with the + {include} tag as it can have a performance impact. + + The {assign}, {append}, {config_load} and {$foo...=...} tags have a new option flag 'noscope'.Thi + Example: {$foo='bar' noscope} This will assign $foo only in the current template and any scope settings + at {include} is ignored. + + + Caching + ======= + Caching does now observe the template_dir setting and will create separate cache files if required + + Compiled Templates + ================== + The template_dir setting is now encoded in the uid of the file name. + The content of the compiled template may depend on the template_dir search order + {include .... inline} is used or $smarty->merge_compiled_includes is enabled + + APC + === + If APC is enabled force an apc_compile_file() when compiled or cached template was updated + +Smarty 3.1.28 + + OPCACHE + ======= + Smarty does now invalidate automatically updated and cleared compiled or cached template files in OPCACHE. + Correct operation is no longer dependent on OPCACHE configuration settings. + + Template inheritance + ==================== + Template inheritance is now processed in run time. + See the INHERITANCE_RELEASE_NOTES + + Modifier regex_replace + ====================== + An optional limit parameter was added + + fetch() and display() + ===================== + The fetch() and display() methods of the template object accept now optionally the same parameter + as the corresponding Smarty methods to get the content of another template. + Example: + $template->display(); Does display template of template object + $template->display('foo.tpl'); Does display template 'foo.bar' + + File: resource + ============== + Multiple template_dir entries can now be selected by a comma separated list of indices. + The template_dir array is searched in the order of the indices. (Could be used to change the default search order) + Example: + $smarty->display('[1],[0]foo.bar'); + + Filter support + ============== + Optional filter names + An optional filter name was added to $smarty->registerFilter(). It can be used to unregister a filter by name. + - $smarty->registerFilter('output', $callback, 'name'); + $smarty->unregister('output', 'name'); + + Closures + $smarty->registerFilter() does now accept closures. + - $smarty->registerFilter('pre', function($source) {return $source;}); + If no optional filter name was specified it gets the default name 'closure'. + If you register multiple closures register each with a unique filter name. + - $smarty->registerFilter('pre', function($source) {return $source;}, 'closure_1'); + - $smarty->registerFilter('pre', function($source) {return $source;}, 'closure_2'); + + +Smarty 3.1.22 + + Namespace support within templates + ================================== + Within templates you can now use namespace specifications on: + - Constants like foo\bar\FOO + - Class names like foo\bar\Baz::FOO, foo\bar\Baz::$foo, foo\bar\Baz::foo() + - PHP function names like foo\bar\baz() + + Security + ======== + - disable special $smarty variable - + The Smarty_Security class has the new property $disabled_special_smarty_vars. + It's an array which can be loaded with the $smarty special variable names like + 'template_object', 'template', 'current_dir' and others which will be disabled. + Note: That this security check is performed at compile time. + + - limit template nesting - + Property $max_template_nesting of Smarty_Security does set the maximum template nesting level. + The main template is level 1. The nesting level is checked at run time. When the maximum will be exceeded + an Exception will be thrown. The default setting is 0 which does disable this check. + + - trusted static methods - + The Smarty_Security class has the new property $trusted_static_methods to restrict access to static methods. + It's an nested array of trusted class and method names. + Format: + array ( + 'class_1' => array('method_1', 'method_2'), // allowed methods + 'class_2' => array(), // all methods of class allowed + ) + To disable access for all methods of all classes set $trusted_static_methods = null; + The default value is an empty array() which does enables all methods of all classes, but for backward compatibility + the setting of $static_classes will be checked. + Note: That this security check is performed at compile time. + + - trusted static properties - + The Smarty_Security class has the new property $trusted_static_properties to restrict access to static properties. + It's an nested array of trusted class and property names. + Format: + array ( + 'class_1' => array('prop_1', 'prop_2'), // allowed properties listed + 'class_2' => array(), // all properties of class allowed + } + To disable access for all properties of all classes set $trusted_static_properties = null; + The default value is an empty array() which does enables all properties of all classes, but for backward compatibility + the setting of $static_classes will be checked. + Note: That this security check is performed at compile time. + + - trusted constants . + The Smarty_Security class has the new property $trusted_constants to restrict access to constants. + It's an array of trusted constant names. + Format: + array ( + 'SMARTY_DIR' , // allowed constant + } + If the array is empty (default) the usage of constants can be controlled with the + Smarty_Security::$allow_constants property (default true) + + + + Compiled Templates + ================== + Smarty does now automatically detects a change of the $merge_compiled_includes and $escape_html + property and creates different compiled templates files depending on the setting. + + Same applies to config files and the $config_overwrite, $config_booleanize and + $config_read_hidden properties. + + Debugging + ========= + The layout of the debug window has been changed for better readability + + New class constants + Smarty::DEBUG_OFF + Smarty::DEBUG_ON + Smarty::DEBUG_INDIVIDUAL + have been introduced for setting the $debugging property. + + Smarty::DEBUG_INDIVIDUAL will create for each display() and fetch() call an individual debug window. + diff --git a/library/Smarty/README b/vendor/smarty/smarty/README similarity index 98% rename from library/Smarty/README rename to vendor/smarty/smarty/README index 50e0d60e59..08b397c3f6 100644 --- a/library/Smarty/README +++ b/vendor/smarty/smarty/README @@ -1,4 +1,4 @@ -Smarty 3.1.19 +Smarty 3.x Author: Monte Ohrt Author: Uwe Tews @@ -460,12 +460,13 @@ included template. PLUGINS ======= -Smarty3 are following the same coding rules as in Smarty2. -The only difference is that the template object is passed as additional third parameter. +Smarty 3 plugins follow the same coding rules as in Smarty 2. +The main difference is that the template object is now passed in place of the smarty object. +The smarty object can be still be accessed through $template->smarty. -smarty_plugintype_name (array $params, object $smarty, object $template) +smarty_plugintype_name (array $params, Smarty_Internal_Template $template) -The Smarty 2 plugins are still compatible as long as they do not make use of specific Smarty2 internals. +The Smarty 2 plugins are still compatible as long as they do not make use of specific Smarty 2 internals. TEMPLATE INHERITANCE: diff --git a/vendor/smarty/smarty/README.md b/vendor/smarty/smarty/README.md new file mode 100644 index 0000000000..5783eb3e05 --- /dev/null +++ b/vendor/smarty/smarty/README.md @@ -0,0 +1,65 @@ +#Smarty 3 template engine +##Distribution repository + +> Smarty 3.1.28 introduces run time template inheritance + +> Read the NEW_FEATURES and INHERITANCE_RELEASE_NOTES file for recent extensions to Smarty 3.1 functionality + +Smarty versions 3.1.11 or later are now on github and can be installed with Composer. + + +The "smarty/smarty" package will start at libs/.... subfolder. + +To get the latest stable version of Smarty 3.1 use + +```json +"require": { + "smarty/smarty": "~3.1" +} +``` + +in your composer.json file. + +To get the trunk version use + +```json +"require": { + "smarty/smarty": "~3.1@dev" +} +``` + +For a specific version use something like + +```json +"require": { + "smarty/smarty": "3.1.19" +} +``` + +PHPUnit test can be installed by corresponding composer entries like + +```json +"require": { + "smarty/smarty-phpunit": "3.1.19" +} +``` + +Similar applies for the lexer/parser generator + +```json +"require": { + "smarty/smarty-lexer": "3.1.19" +} +``` + +Or you could use + +```json +"require": { + "smarty/smarty-dev": "3.1.19" +} +``` + +Which is a wrapper to install all 3 packages + +Composer can also be used for Smarty2 versions 2.6.24 to 2.6.28 diff --git a/library/Smarty/SMARTY_2_BC_NOTES.txt b/vendor/smarty/smarty/SMARTY_2_BC_NOTES.txt similarity index 100% rename from library/Smarty/SMARTY_2_BC_NOTES.txt rename to vendor/smarty/smarty/SMARTY_2_BC_NOTES.txt diff --git a/library/Smarty/SMARTY_3.0_BC_NOTES.txt b/vendor/smarty/smarty/SMARTY_3.0_BC_NOTES.txt similarity index 100% rename from library/Smarty/SMARTY_3.0_BC_NOTES.txt rename to vendor/smarty/smarty/SMARTY_3.0_BC_NOTES.txt diff --git a/library/Smarty/SMARTY_3.1_NOTES.txt b/vendor/smarty/smarty/SMARTY_3.1_NOTES.txt similarity index 100% rename from library/Smarty/SMARTY_3.1_NOTES.txt rename to vendor/smarty/smarty/SMARTY_3.1_NOTES.txt diff --git a/library/Smarty/change_log.txt b/vendor/smarty/smarty/change_log.txt similarity index 67% rename from library/Smarty/change_log.txt rename to vendor/smarty/smarty/change_log.txt index 7eb58320d0..1d42b0a769 100644 --- a/library/Smarty/change_log.txt +++ b/vendor/smarty/smarty/change_log.txt @@ -1,7 +1,837 @@ - ===== 3.1.20-dev ===== (xx.xx.2014) - ===== 3.1.19 ===== (06.30.2014) +===== 3.1.31 ===== (14.12.2016) + 23.11.2016 + - move template object cache into static variables + + 19.11.2016 + - bugfix inheritance root child templates containing nested {block}{/block} could call sub-bock content from parent + template https://github.com/smarty-php/smarty/issues/317 + - change version checking + + 11.11.2016 + - bugfix when Smarty is using a cached template object on Smarty::fetch() or Smarty::isCached() the inheritance data + must be removed https://github.com/smarty-php/smarty/issues/312 + - smaller speed optimization + + 08.11.2016 + - add bootstrap file to load and register Smarty_Autoloader. Change composer.json to make it known to composer + + 07.11.2016 + - optimization of lexer speed https://github.com/smarty-php/smarty/issues/311 + + 27.10.2016 + - bugfix template function definitions array has not been cached between Smarty::fetch() and Smarty::display() calls + https://github.com/smarty-php/smarty/issues/301 + + 23.10.2016 + - improvement/bugfix when Smarty::fetch() is called on a template object the inheritance and tplFunctions property + should be copied to the called template object + + 21.10.2016 + - bugfix for compile locking touched timestamp of old compiled file was not restored on compilation error https://github.com/smarty-php/smarty/issues/308 + + 20.10.2016 + - bugfix nocache code was not removed in cache file when subtemplate did contain PHP short tags in text but no other + nocache code https://github.com/smarty-php/smarty/issues/300 + + 19.10.2016 + - bugfix {make_nocache $var} did fail when variable value did contain '\' https://github.com/smarty-php/smarty/issues/305 + - bugfix {make_nocache $var} remove spaces from variable value https://github.com/smarty-php/smarty/issues/304 + + 12.10.2016 + - bugfix {include} with template names including variable or constants could fail after bugfix from + 28.09.2016 https://github.com/smarty-php/smarty/issues/302 + + 08.10.2016 + - optimization move runtime extension for template functions into Smarty objects + + 29.09.2016 + - improvement new Smarty::$extends_recursion property to disable execution of {extends} in templates called by extends resource + https://github.com/smarty-php/smarty/issues/296 + + 28.09.2016 + - bugfix the generated code for calling a subtemplate must pass the template resource name in single quotes https://github.com/smarty-php/smarty/issues/299 + - bugfix nocache hash was not removed for tags in subtemplates https://github.com/smarty-php/smarty/issues/300 + + 27.09.2016 + - bugfix when Smarty does use an internally cached template object on Smarty::fetch() calls + the template and config variables must be cleared https://github.com/smarty-php/smarty/issues/297 + + 20.09.2016 + - bugfix some $smarty special template variables are no longer accessed as real variable. + using them on calls like {if isset($smarty.foo)} or {if empty($smarty.foo)} will fail + http://www.smarty.net/forums/viewtopic.php?t=26222 + - temporary fix for https://github.com/smarty-php/smarty/issues/293 main reason still under investigation + - improvement new tags {block_parent} {block_child} in template inheritance + + 19.09.2016 + - optimization clear compiled and cached folder completely on detected version change + - cleanup convert cache resource file method clear into runtime extension + + 15.09.2016 + - bugfix assigning a variable in if condition by function like {if $value = array_shift($array)} the function got called twice https://github.com/smarty-php/smarty/issues/291 + - bugfix function plugins called with assign attribute like {foo assign='bar'} did not output returned content because + because assumption was made that it was assigned to a variable https://github.com/smarty-php/smarty/issues/292 + - bugfix calling $smarty->isCached() on a not existing cache file with $smarty->cache_locking = true; could cause a 10 second delay http://www.smarty.net/forums/viewtopic.php?t=26282 + - improvement make Smarty::clearCompiledTemplate() on custom resource independent from changes of templateId computation + + 11.09.2016 + - improvement {math} misleading E_USER_WARNING messages when parameter value = null https://github.com/smarty-php/smarty/issues/288 + - improvement move often used code snippets into methods + - performance Smarty::configLoad() did load unneeded template source object + + 09.09.2016 + - bugfix/optimization {foreach} did not execute the {foreachelse} when iterating empty objects https://github.com/smarty-php/smarty/pull/287 + - bugfix {foreach} must keep the @properties when restoring a saved $item variable as the properties might be used outside {foreach} https://github.com/smarty-php/smarty/issues/267 + - improvement {foreach} observe {break n} and {continue n} nesting levels when restoring saved $item and $key variables + + 08.09.2016 + - bugfix implement wrapper for removed method getConfigVariable() https://github.com/smarty-php/smarty/issues/286 + + 07.09.2016 + - bugfix using nocache like attribute with value true like {plugin nocache=true} did not work https://github.com/smarty-php/smarty/issues/285 + - bugfix uppercase TRUE, FALSE and NULL did not work when security was enabled https://github.com/smarty-php/smarty/issues/282 + - bugfix when {foreach} was looping over an object the total property like {$item@total} did always return 1 https://github.com/smarty-php/smarty/issues/281 + - bugfix {capture}{/capture} did add in 3.1.30 unintended additional blank lines https://github.com/smarty-php/smarty/issues/268 + + 01.09.2016 + - performance require_once should be called only once for shared plugins https://github.com/smarty-php/smarty/issues/280 + + 26.08.2016 + - bugfix change of 23.08.2016 failed on linux when use_include_path = true + + 23.08.2016 + - bugfix remove constant DS as shortcut for DIRECTORY_SEPARATOR as the user may have defined it to something else https://github.com/smarty-php/smarty/issues/277 + + 20.08-2016 + - bugfix {config_load ... scope="global"} shall not throw an arror but fallback to scope="smarty" https://github.com/smarty-php/smarty/issues/274 + - bugfix {make_nocache} failed when using composer autoloader https://github.com/smarty-php/smarty/issues/275 + + 14.08.2016 + - bugfix $smarty_>debugging = true; did E_NOTICE messages when {eval} tag was used https://github.com/smarty-php/smarty/issues/266 + - bugfix Class 'Smarty_Internal_Runtime_ValidateCompiled' not found when upgrading from some older Smarty versions with existing + compiled or cached template files https://github.com/smarty-php/smarty/issues/269 + - optimization remove unneeded call to update acopes when {assign} scope and template scope was local (default) + +===== 3.1.30 ===== (07.08.2016) + + 07.08.2016 + - bugfix update of 04.08.2016 was incomplete + + 05.08.2016 + - bugfix compiling of templates failed when the Smarty delimiter did contain '/' https://github.com/smarty-php/smarty/issues/264 + - updated error checking at template and config default handler + + 04.08.2016 + - improvement move template function source parameter into extension + + 26.07.2016 + - optimization unneeded loading of compiled resource + + 24.07.2016 + - regression this->addPluginsDir('/abs/path/to/dir') adding absolute path without trailing '/' did fail https://github.com/smarty-php/smarty/issues/260 + + 23.07.2016 + - bugfix setTemplateDir('/') and setTemplateDir('') did create wrong absolute filepath https://github.com/smarty-php/smarty/issues/245 + - optimization of filepath normalization + - improvement remove double function declaration in plugin shared.escape_special_cars.php https://github.com/smarty-php/smarty/issues/229 + + 19.07.2016 + - bugfix multiple {include} with relative filepath within {block}{/block} could fail https://github.com/smarty-php/smarty/issues/246 + - bugfix {math} shell injection vulnerability patch provided by Tim Weber + + 18.07.2016 + - bugfix {foreach} if key variable and item@key attribute have been used both the key variable was not updated https://github.com/smarty-php/smarty/issues/254 + - bugfix modifier on plugins like {plugin|modifier ... } did fail when the plugin does return an array https://github.com/smarty-php/smarty/issues/228 + - bugfix avoid opcache_invalidate to result in ErrorException when opcache.restrict_api is not empty https://github.com/smarty-php/smarty/pull/244 + - bugfix multiple {include} with relative filepath within {block}{/block} could fail https://github.com/smarty-php/smarty/issues/246 + + 14.07.2016 + - bugfix wrong parameter on compileAllTemplates() and compileAllConfig() https://github.com/smarty-php/smarty/issues/231 + + 13.07.2016 + - bugfix PHP 7 compatibility on registered compiler plugins https://github.com/smarty-php/smarty/issues/241 + - update testInstall() https://github.com/smarty-php/smarty/issues/248https://github.com/smarty-php/smarty/issues/248 + - bugfix enable debugging could fail when template objects did already exists https://github.com/smarty-php/smarty/issues/237 + - bugfix template function data should be merged when loading subtemplate https://github.com/smarty-php/smarty/issues/240 + - bugfix wrong parameter on compileAllTemplates() https://github.com/smarty-php/smarty/issues/231 + + 12.07.2016 + - bugfix {foreach} item variable must be created also on empty from array https://github.com/smarty-php/smarty/issues/238 and https://github.com/smarty-php/smarty/issues/239 + - bugfix enableSecurity() must init cache flags https://github.com/smarty-php/smarty/issues/247 + + 27.05.2016 + - bugfix/improvement of compileAlltemplates() follow symlinks in template folder (PHP >= 5.3.1) https://github.com/smarty-php/smarty/issues/224 + clear internal cache and expension handler for each template to avoid possible conflicts https://github.com/smarty-php/smarty/issues/231 + + 16.05.2016 + - optimization {foreach} compiler and processing + - broken PHP 5.3 and 5.4 compatibility + + 15.05.2016 + - optimization and cleanup of resource code + + 10.05.2016 + - optimization of inheritance processing + + 07.05.2016 + -bugfix Only variables should be assigned by reference https://github.com/smarty-php/smarty/issues/227 + + 02.05.2016 + - enhancement {block} tag names can now be variable https://github.com/smarty-php/smarty/issues/221 + + 01.05.2016 + - bugfix same relative filepath at {include} called from template in different folders could display wrong sub-template + + 29.04.2016 + - bugfix {strip} remove space on linebreak between html tags https://github.com/smarty-php/smarty/issues/213 + + 24.04.2016 + - bugfix nested {include} with relative file path could fail when called in {block} ... {/block} https://github.com/smarty-php/smarty/issues/218 + + 14.04.2016 + - bugfix special variable {$smarty.capture.name} was not case sensitive on name https://github.com/smarty-php/smarty/issues/210 + - bugfix the default template handler must calculate the source uid https://github.com/smarty-php/smarty/issues/205 + + 13.04.2016 + - bugfix template inheritance status must be saved when calling sub-templates https://github.com/smarty-php/smarty/issues/215 + + 27.03.2016 + - bugfix change of 11.03.2016 cause again {capture} data could not been seen in other templates with {$smarty.capture.name} https://github.com/smarty-php/smarty/issues/153 + + 11.03.2016 + - optimization of capture and security handling + - improvement $smarty->clearCompiledTemplate() should return on recompiled or uncompiled resources + + 10.03.2016 + - optimization of resource processing + + 09.03.2016 + - improvement rework of 'scope' attribute handling see see NEW_FEATURES.txt https://github.com/smarty-php/smarty/issues/194 + https://github.com/smarty-php/smarty/issues/186 https://github.com/smarty-php/smarty/issues/179 + - bugfix correct Autoloader update of 2.3.2014 https://github.com/smarty-php/smarty/issues/199 + + 04.03.2016 + - bugfix change from 01.03.2016 will cause $smarty->isCached(..) failure if called multiple time for same template + (forum topic 25935) + + 02.03.2016 + - revert autoloader optimizations because of unexplainable warning when using plugins https://github.com/smarty-php/smarty/issues/199 + + 01.03.2016 + - bugfix template objects must be cached on $smarty->fetch('foo.tpl) calls incase the template is fetched + multiple times (forum topic 25909) + + 25.02.2016 + - bugfix wrong _realpath with 4 or more parent-directories https://github.com/smarty-php/smarty/issues/190 + - optimization of _realpath + - bugfix instanceof expression in template code must be treated as value https://github.com/smarty-php/smarty/issues/191 + + 20.02.2016 + - bugfix {strip} must keep space between hmtl tags. Broken by changes of 10.2.2016 https://github.com/smarty-php/smarty/issues/184 + - new feature/bugfix {foreach}{section} add 'properties' attribute to force compilation of loop properties + see NEW_FEATURES.txt https://github.com/smarty-php/smarty/issues/189 + + 19.02.2016 + - revert output buffer flushing on display, echo content again because possible problems when PHP files had + characters (newline} after ?> at file end https://github.com/smarty-php/smarty/issues/187 + + 14.02.2016 + - new tag {make_nocache} read NEW_FEATURES.txt https://github.com/smarty-php/smarty/issues/110 + - optimization of sub-template processing + - bugfix using extendsall as default resource and {include} inside {block} tags could produce unexpected results https://github.com/smarty-php/smarty/issues/183 + - optimization of tag attribute compiling + - optimization make compiler tag object cache static for higher compilation speed + + 11.02.2016 + - improvement added KnockoutJS comments to trimwhitespace outputfilter https://github.com/smarty-php/smarty/issues/82 + https://github.com/smarty-php/smarty/pull/181 + + 10.02.2016 + - bugfix {strip} must keep space on output creating smarty tags within html tags https://github.com/smarty-php/smarty/issues/177 + - bugfix wrong precedence on special if conditions like '$foo is ... by $bar' could cause wrong code https://github.com/smarty-php/smarty/issues/178 + - improvement because of ambiguities the inline constant support has been removed from the $foo.bar syntax https://github.com/smarty-php/smarty/issues/149 + - bugfix other {strip} error with output tags between hmtl https://github.com/smarty-php/smarty/issues/180 + + 09.02.2016 + - move some code from parser into compiler + - reformat all code for unique style + - update/bugfix scope attribute handling reworked. Read the newfeatures.txt file + + 05.02.2016 + - improvement internal compiler changes + + 01.02.2016 + - bugfix {foreach} compilation failed when $smarty->merge_compiled_includes = true and pre-filters are used. + + 29.01.2016 + - bugfix implement replacement code for _tag_stack property https://github.com/smarty-php/smarty/issues/151 + + 28.01.2016 + - bugfix allow windows network filepath or wrapper (forum topic 25876) https://github.com/smarty-php/smarty/issues/170 + - bugfix if fetch('foo.tpl') is called on a template object the $parent parameter should default to the calling template object https://github.com/smarty-php/smarty/issues/152 + + 27.01.2016 + - revert bugfix compiling {section} did create warning + - bugfix {$smarty.section.customer.loop} did throw compiler error https://github.com/smarty-php/smarty/issues/161 + update of yesterdays fix + - bugfix string resource could inject code at {block} or inline subtemplates through PHP comments https://github.com/smarty-php/smarty/issues/157 + - bugfix output filters did not observe nocache code flhttps://github.com/smarty-php/smarty/issues/154g https://github.com/smarty-php/smarty/issues/160 + - bugfix {extends} with relative file path did not work https://github.com/smarty-php/smarty/issues/154 + https://github.com/smarty-php/smarty/issues/158 + - bugfix {capture} data could not been seen in other templates with {$smarty.capture.name} https://github.com/smarty-php/smarty/issues/153 + + 26.01.2016 + - improvement observe Smarty::$_CHARSET in debugging console https://github.com/smarty-php/smarty/issues/169 + - bugfix compiling {section} did create warning + - bugfix {$smarty.section.customer.loop} did throw compiler error https://github.com/smarty-php/smarty/issues/161 + + 02.01.2016 + - update scope handling + - optimize block plugin compiler + - improvement runtime checks if registered block plugins are callable + + 01.01.2016 + - remove Smarty::$resource_cache_mode property + + 31.12.2015 + - optimization of {assign}, {if} and {while} compiled code + + 30.12.2015 + - bugfix plugin names starting with "php" did not compile https://github.com/smarty-php/smarty/issues/147 + + 29.12.2015 + - bugfix Smarty::error_reporting was not observed when display() or fetch() was called on template objects https://github.com/smarty-php/smarty/issues/145 + + 28.12.2015 + - optimization of {foreach} code size and processing + + 27.12.2015 + - improve inheritance code + - update external methods + - code fixes + - PHPdoc updates + + 25.12.2015 + - compile {block} tag code and its processing into classes + - optimization replace hhvm extension by inline code + - new feature If ACP is enabled force an apc_compile_file() when compiled or cached template was updated + + 24.12.2015 + - new feature Compiler does now observe the template_dir setting and will create separate compiled files if required + - bugfix post filter did fail on template inheritance https://github.com/smarty-php/smarty/issues/144 + + 23.12.2015 + - optimization move internal method decodeProperties back into template object + - optimization move subtemplate processing back into template object + - new feature Caching does now observe the template_dir setting and will create separate cache files if required + + 22.12.2015 + - change $xxx_dir properties from private to protected in case Smarty class gets extended + - code optimizations + + 21.12.2015 + - bugfix a filepath starting with '/' or '\' on windows should normalize to the root dir + of current working drive https://github.com/smarty-php/smarty/issues/134 + - optimization of filepath normalization + - bugfix {strip} must remove all blanks between html tags https://github.com/smarty-php/smarty/issues/136 + + ===== 3.1.29 ===== (21.12.2015) + 21.12.2015 + - optimization improve speed of filetime checks on extends and extendsall resource + + 20.12.2015 + - bugfix failure when the default resource type was set to 'extendsall' https://github.com/smarty-php/smarty/issues/123 + - update compilation of Smarty special variables + - bugfix add addition check for OS type on normalization of file path https://github.com/smarty-php/smarty/issues/134 + - bugfix the source uid of the extendsall resource must contain $template_dir settings https://github.com/smarty-php/smarty/issues/123 + + 19.12.2015 + - bugfix using $smarty.capture.foo in expressions could fail https://github.com/smarty-php/smarty/pull/138 + - bugfix broken PHP 5.2 compatibility https://github.com/smarty-php/smarty/issues/139 + - remove no longer used code + - improvement make sure that compiled and cache templates never can contain a trailing '?>? + + 18.12.2015 + - bugfix regression when modifier parameter was followed by math https://github.com/smarty-php/smarty/issues/132 + + 17.12.2015 + - bugfix {$smarty.capture.nameFail} did lowercase capture name https://github.com/smarty-php/smarty/issues/135 + - bugfix using {block append/prepend} on same block in multiple levels of inheritance templates could fail (forum topic 25827) + - bugfix text content consisting of just a single '0' like in {if true}0{/if} was suppressed (forum topic 25834) + + 16.12.2015 + - bugfix {foreach} did fail if from atrribute is a Generator class https://github.com/smarty-php/smarty/issues/128 + - bugfix direct access $smarty->template_dir = 'foo'; should call Smarty::setTemplateDir() https://github.com/smarty-php/smarty/issues/121 + + 15.12.2015 + - bugfix {$smarty.cookies.foo} did return the $_COOKIE array not the 'foo' value https://github.com/smarty-php/smarty/issues/122 + - bugfix a call to clearAllCache() and other should clear all internal template object caches (forum topic 25828) + + 14.12.2015 + - bugfix {$smarty.config.foo} broken in 3.1.28 https://github.com/smarty-php/smarty/issues/120 + - bugfix multiple calls of {section} with same name droped E_NOTICE error https://github.com/smarty-php/smarty/issues/118 + + ===== 3.1.28 ===== (13.12.2015) + 13.12.2015 + - bugfix {foreach} and {section} with uppercase characters in name attribute did not work (forum topic 25819) + - bugfix $smarty->debugging_ctrl = 'URL' did not work (forum topic 25811) + - bugfix Debug Console could display incorrect data when using subtemplates + + 09.12.2015 + - bugfix Smarty did fail under PHP 7.0.0 with use_include_path = true; + + 09.12.2015 + - bugfix {strip} should exclude some html tags from stripping, related to fix for https://github.com/smarty-php/smarty/issues/111 + + 08.12.2015 + - bugfix internal template function data got stored in wrong compiled file https://github.com/smarty-php/smarty/issues/114 + + 05.12.2015 + -bugfix {strip} should insert a single space https://github.com/smarty-php/smarty/issues/111 + + 25.11.2015 + -bugfix a left delimter like '[%' did fail on [%$var_[%$variable%]%] (forum topic 25798) + + 02.11.2015 + - bugfix {include} with variable file name like {include file="foo_`$bar`.tpl"} did fail in 3.1.28-dev https://github.com/smarty-php/smarty/issues/102 + + 01.11.2015 + - update config file processing + + 31.10.2015 + - bugfix add missing $trusted_dir property to SmartyBC class (forum topic 25751) + + 29.10.2015 + - improve template scope handling + + 24.10.2015 + - more optimizations of template processing + - bugfix Error when using {include} within {capture} https://github.com/smarty-php/smarty/issues/100 + + 21.10.2015 + - move some code into runtime extensions + + 18.10.2015 + - optimize filepath normalization + - rework of template inheritance + - speed and size optimizations + - bugfix under HHVM temporary cache file must only be created when caches template was updated + - fix compiled code for new {block} assign attribute + - update code generated by template function call handler + + 18.09.2015 + - bugfix {if $foo instanceof $bar} failed to compile if 2nd value is a variable https://github.com/smarty-php/smarty/issues/92 + + 17.09.2015 + - bugfix {foreach} first attribute was not correctly reset since commit 05a8fa2 of 02.08.2015 https://github.com/smarty-php/smarty/issues/90 + + 16.09.2015 + - update compiler by moving no longer needed properties, code optimizations and other + + 14.09.2015 + - optimize autoloader + - optimize subtemplate handling + - update template inheritance processing + - move code of {call} processing back into Smarty_Internal_Template class + - improvement invalidate OPCACHE for cleared compiled and cached template files (forum topic 25557) + - bugfix unintended multiple debug windows (forum topic 25699) + + 30.08.2015 + - size optimization move some runtime functions into extension + - optimize inline template processing + - optimization merge inheritance child and parent templates into one compiled template file + + 29.08.2015 + - improvement convert template inheritance into runtime processing + - bugfix {$smarty.block.parent} did always reference the root parent block https://github.com/smarty-php/smarty/issues/68 + + 23.08.2015 + - introduce Smarty::$resource_cache_mode and cache template object of {include} inside loop + - load seldom used Smarty API methods dynamically to reduce memory footprint + - cache template object of {include} if same template is included several times + - convert debug console processing to object + - use output buffers for better performance and less memory usage + - optimize nocache hash processing + - remove not really needed properties + - optimize rendering + - move caching to Smarty::_cache + - remove properties with redundant content + - optimize Smarty::templateExists() + - optimize use_include_path processing + - relocate properties for size optimization + - remove redundant code + - bugfix compiling super globals like {$smarty.get.foo} did fail in the master branch https://github.com/smarty-php/smarty/issues/77 + + 06.08.2015 + - avoid possible circular object references caused by parser/lexer objects + - rewrite compileAll... utility methods + - commit several internal improvements + - bugfix Smarty failed when compile_id did contain "|" + + 03.08.2015 + - rework clear cache methods + - bugfix compileAllConfig() was broken since 3.1.22 because of the changes in config file processing + - improve getIncludePath() to return directory if no file was given + + 02.08.2015 + - optimization and code cleanup of {foreach} and {section} compiler + - rework {capture} compiler + + 01.08.2015 + - update DateTime object can be instance of DateTimeImmutable since PHP5.5 https://github.com/smarty-php/smarty/pull/75 + - improvement show resource type and start of template source instead of uid on eval: and string: resource (forum topic 25630) + + 31.07.2015 + - optimize {foreach} and {section} compiler + + 29.07.2015 + - optimize {section} compiler for speed and size of compiled code + + 28.07.2015 + - update for PHP 7 compatibility + + 26.07.2015 + - improvement impement workaround for HHVM PHP incompatibillity https://github.com/facebook/hhvm/issues/4797 + + 25.07.2015 + - bugfix parser did hang on text starting fetch('foo.tpl') https://github.com/smarty-php/smarty/issues/70 + - improvement Added $limit parameter to regex_replace modifier #71 + - new feature multiple indices on file: resource + + 06.07.2015 + - optimize {block} compilation + - optimization get rid of __get and __set in source object + + 01.07.2015 + - optimize compile check handling + - update {foreach} compiler + - bugfix debugging console did not display string values containing \n, \r or \t correctly https://github.com/smarty-php/smarty/issues/66 + - optimize source resources + + 28.06.2015 + - move $smarty->enableSecurity() into Smarty_Security class + - optimize security isTrustedResourceDir() + - move auto load filter methods into extension + - move $smarty->getTemplateVars() into extension + - move getStreamVariable() into extension + - move $smarty->append() and $smarty->appendByRef() into extension + - optimize autoloader + - optimize file path normalization + - bugfix PATH_SEPARATOR was replaced by mistake in autoloader + - remove redundant code + + 27.06.2015 + - bugfix resolve naming conflict between custom Smarty delimiter '<%' and PHP ASP tags https://github.com/smarty-php/smarty/issues/64 + - update $smarty->_realpath for relative path not starting with './' + - update Smarty security with new realpath handling + - update {include_php} with new realpath handling + - move $smarty->loadPlugin() into extension + - minor compiler optimizations + - bugfix allow function plugins with name ending with 'close' https://github.com/smarty-php/smarty/issues/52 + - rework of $smarty->clearCompiledTemplate() and move it to its own extension + + 19.06.2015 + - improvement allow closures as callback at $smarty->registerFilter() https://github.com/smarty-php/smarty/issues/59 + + ===== 3.1.27===== (18.06.2015) + 18.06.2015 + - bugfix another update on file path normalization failed on path containing something like "/.foo/" https://github.com/smarty-php/smarty/issues/56 + + ===== 3.1.26===== (18.06.2015) + 18.06.2015 + - bugfix file path normalization failed on path containing something like "/.foo/" https://github.com/smarty-php/smarty/issues/56 + + 17.06.2015 + - bugfix calling a plugin with nocache option but no other attributes like {foo nocache} caused call to undefined function https://github.com/smarty-php/smarty/issues/55 + + ===== 3.1.25===== (15.06.2015) + 15.06.2015 + - optimization of smarty_cachereource_keyvaluestore.php code + + 14.06.2015 + - bugfix a relative sub template path could fail if template_dir path did contain /../ https://github.com/smarty-php/smarty/issues/50 + - optimization rework of path normalization + - bugfix an output tag with variable, modifier followed by an operator like {$foo|modifier+1} did fail https://github.com/smarty-php/smarty/issues/53 + + 13.06.2015 + - bugfix a custom cache resource using smarty_cachereource_keyvaluestore.php did fail if php.ini mbstring.func_overload = 2 (forum topic 25568) + + 11.06.2015 + - bugfix the lexer could hang on very large quoted strings (forum topic 25570) + + 08.06.2015 + - bugfix using {$foo} as array index like $bar.{$foo} or in double quoted string like "some {$foo} thing" failed https://github.com/smarty-php/smarty/issues/49 + + 04.06.2015 + - bugfix possible error message on unset() while compiling {block} tags https://github.com/smarty-php/smarty/issues/46 + + 01.06.2015 + - bugfix including template variables broken since 3.1.22 https://github.com/smarty-php/smarty/issues/47 + + 27.05.2015 + - bugfix {include} with variable file name must not create by default individual cache file (since 3.1.22) https://github.com/smarty-php/smarty/issues/43 + + 24.05.2015 + - bugfix if condition string 'neq' broken due to a typo https://github.com/smarty-php/smarty/issues/42 + + ===== 3.1.24===== (23.05.2015) + 23.05.2015 + - improvement on php_handling to allow very large PHP sections, better error handling + - improvement allow extreme large comment sections (forum 25538) + + 21.05.2015 + - bugfix broken PHP 5.2 compatibility when compiling 1 did compile into wrong code https://github.com/smarty-php/smarty/issues/41 + + 19.05.2015 + - bugfix compiler did overwrite existing variable value when setting the nocache attribute https://github.com/smarty-php/smarty/issues/39 + - bugfix output filter trimwhitespace could run into the pcre.backtrack_limit on large output (code.google issue 220) + - bugfix compiler could run into the pcre.backtrack_limit on larger comment or {php} tag sections (forum 25538) + + 18.05.2015 + - improvement introduce shortcuts in lexer/parser rules for most frequent terms for higher + compilation speed + + 16.05.2015 + - bugfix {php}{/php} did work just for single lines https://github.com/smarty-php/smarty/issues/33 + - improvement remove not needed ?> handling from parser to new compiler module + + 05.05.2015 + - bugfix code could be messed up when {tags} are used in multiple attributes https://github.com/smarty-php/smarty/issues/23 + + 04.05.2015 + - bugfix Smarty_Resource::parseResourceName incompatible with Google AppEngine (https://github.com/smarty-php/smarty/issues/22) + - improvement use is_file() checks to avoid errors suppressed by @ which could still cause problems (https://github.com/smarty-php/smarty/issues/24) + + 28.04.2015 + - bugfix plugins of merged subtemplates not loaded in 3.1.22-dev (forum topic 25508) 2nd fix + + 28.04.2015 + - bugfix plugins of merged subtemplates not loaded in 3.1.22-dev (forum topic 25508) + + 23.04.2015 + - bugfix a nocache template variable used as parameter at {insert} was by mistake cached + + 20.04.2015 + - bugfix at a template function containing nocache code a parmeter could overwrite a template variable of same name + + 27.03.2015 + - bugfix Smarty_Security->allow_constants=false; did also disable true, false and null (change of 16.03.2015) + - improvement added a whitelist for trusted constants to security Smarty_Security::$trusted_constants (forum topic 25471) + + 20.03.2015 + - bugfix make sure that function properties get saved only in compiled files containing the fuction definition {forum topic 25452} + - bugfix correct update of global variable values on exit of template functions. (reported under Smarty Developers) + + 16.03.2015 + - bugfix problems with {function}{/function} and {call} tags in different subtemplate cache files {forum topic 25452} + - bugfix Smarty_Security->allow_constants=false; did not disallow direct usage of defined constants like {SMARTY_DIR} {forum topic 25457} + - bugfix {block}{/block} tags did not work inside double quoted strings https://github.com/smarty-php/smarty/issues/18 + + + 15.03.2015 + - bugfix $smarty->compile_check must be restored before rendering of a just updated cache file {forum 25452} + + 14.03.2015 + - bugfix {nocache} {/nocache} tags corrupted code when used within a nocache section caused by a nocache template variable. + + - bugfix template functions defined with {function} in an included subtemplate could not be called in nocache + mode with {call... nocache} if the subtemplate had it's own cache file {forum 25452} + + 10.03.2015 + - bugfix {include ... nocache} whith variable file or compile_id attribute was not executed in nocache mode. + + 12.02.2015 + - bugfix multiple Smarty::fetch() of same template when $smarty->merge_compiled_includes = true; could cause function already defined error + + 11.02.2015 + - bugfix recursive {includes} did create E_NOTICE message when $smarty->merge_compiled_includes = true; (github issue #16) + + 22.01.2015 + - new feature security can now control access to static methods and properties + see also NEW_FEATURES.txt + + 21.01.2015 + - bugfix clearCompiledTemplates(), clearAll() and clear() could try to delete whole drive at wrong path permissions because realpath() fail (forum 25397) + - bugfix 'self::' and 'parent::' was interpreted in template syntax as static class + + 04.01.2015 + - push last weeks changes to github + + - different optimizations + - improvement automatically create different versions of compiled templates and config files depending + on property settings. + - optimization restructure template processing by moving code into classes it better belongs to + - optimization restructure config file processing + + 31.12.2014 + - bugfix use function_exists('mb_get_info') for setting Smarty::$_MBSTRING. + Function mb_split could be overloaded depending on php.ini mbstring.func_overload + + + 29.12.2014 + - new feature security can now limit the template nesting level by property $max_template_nesting + see also NEW_FEATURES.txt (forum 25370) + + 29.12.2014 + - new feature security can now disable special $smarty variables listed in property $disabled_special_smarty_vars + see also NEW_FEATURES.txt (forum 25370) + + 27.12.2014 + - bugfix clear internal _is_file_cache when plugins_dir was modified + + 13.12.2014 + - improvement optimization of lexer and parser resulting in a up to 30% higher compiling speed + + 11.12.2014 + - bugfix resolve parser ambiguity between constant print tag {CONST} and other smarty tags after change of 09.12.2014 + + 09.12.2014 + - bugfix variables $null, $true and $false did not work after the change of 12.11.2014 (forum 25342) + - bugfix call of template function by a variable name did not work after latest changes (forum 25342) + + 23.11.2014 + - bugfix a plugin with attached modifier could fail if the tag was immediately followed by another Smarty tag (since 3.1.21) (forum 25326) + + 13.11.2014 + - improvement move autoload code into Autoloader.php. Use Composer autoloader when possible + + 12.11.2014 + - new feature added support of namespaces to template code + + 08.11.2014 - 10.11.2014 + - bugfix subtemplate called in nocache mode could be called with wrong compile_id when it did change on one of the calling templates + - improvement add code of template functions called in nocache mode dynamically to cache file (related to bugfix of 01.11.2014) + - bugfix Debug Console did not include all data from merged compiled subtemplates + + 04.11.2014 + - new feature $smarty->debugging = true; => overwrite existing Debug Console window (old behaviour) + $smarty->debugging = 2; => individual Debug Console window by template name + + 03.11.2014 + - bugfix Debug Console did not show included subtemplates since 3.1.17 (forum 25301) + - bugfix Modifier debug_print_var did not limit recursion or prevent recursive object display at Debug Console + (ATTENTION: parameter order has changed to be able to specify maximum recursion) + - bugfix Debug consol did not include subtemplate information with $smarty->merge_compiled_includes = true + - improvement The template variables are no longer displayed as objects on the Debug Console + - improvement $smarty->createData($parent = null, $name = null) new optional name parameter for display at Debug Console + - addition of some hooks for future extension of Debug Console + + 01.11.2014 + - bugfix and enhancement on subtemplate {include} and template {function} tags. + * Calling a template which has a nocache section could fail if it was called from a cached and a not cached subtemplate. + * Calling the same subtemplate cached and not cached with the $smarty->merge_compiled_includes enabled could cause problems + * Many smaller related changes + + 30.10.2014 + - bugfix access to class constant by object like {$object::CONST} or variable class name {$class::CONST} did not work (forum 25301) + + 26.10.2014 + - bugfix E_NOTICE message was created during compilation when ASP tags '<%' or '%>' are in template source text + - bugfix merge_compiled_includes option failed when caching enables and same subtemplate was included cached and not cached + + ===== 3.1.21 ===== (18.10.2014) + 18.10.2014 + - composer moved to github + + 17.10.2014 + - bugfix on $php_handling security and optimization of smarty_internal_parsetree (Thue Kristensen) + + 16.10.2014 + - bugfix composer.json update + + 15.10.2014 + - bugfix calling a new created cache file with fetch() and Smarty::CACHING_LIFETIME_SAVED multiple times did fail (forum 22350) + + 14.10.2014 + - bugfix any tag placed within " diff --git a/library/Smarty/libs/plugins/block.textformat.php b/vendor/smarty/smarty/libs/plugins/block.textformat.php similarity index 90% rename from library/Smarty/libs/plugins/block.textformat.php rename to vendor/smarty/smarty/libs/plugins/block.textformat.php index abf544939f..e2c5e3de4f 100644 --- a/library/Smarty/libs/plugins/block.textformat.php +++ b/vendor/smarty/smarty/libs/plugins/block.textformat.php @@ -38,6 +38,9 @@ function smarty_block_textformat($params, $content, $template, &$repeat) if (is_null($content)) { return; } + if (Smarty::$_MBSTRING && !is_callable('smarty_mb_wordwrap')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'); + } $style = null; $indent = 0; @@ -83,14 +86,15 @@ function smarty_block_textformat($params, $content, $template, &$repeat) continue; } // convert mult. spaces & special chars to single space - $_paragraph = preg_replace(array('!\s+!' . Smarty::$_UTF8_MODIFIER, '!(^\s+)|(\s+$)!' . Smarty::$_UTF8_MODIFIER), array(' ', ''), $_paragraph); + $_paragraph = + preg_replace(array('!\s+!' . Smarty::$_UTF8_MODIFIER, '!(^\s+)|(\s+$)!' . Smarty::$_UTF8_MODIFIER), + array(' ', ''), $_paragraph); // indent first line if ($indent_first > 0) { $_paragraph = str_repeat($indent_char, $indent_first) . $_paragraph; } // wordwrap sentences if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'); $_paragraph = smarty_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); } else { $_paragraph = wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); diff --git a/vendor/smarty/smarty/libs/plugins/function.counter.php b/vendor/smarty/smarty/libs/plugins/function.counter.php new file mode 100644 index 0000000000..bcc8f498cc --- /dev/null +++ b/vendor/smarty/smarty/libs/plugins/function.counter.php @@ -0,0 +1,73 @@ + + * Name: counter
    + * Purpose: print out a counter value + * + * @author Monte Ohrt + * @link http://www.smarty.net/manual/en/language.function.counter.php {counter} + * (Smarty online manual) + * + * @param array $params parameters + * @param Smarty_Internal_Template $template template object + * + * @return string|null + */ +function smarty_function_counter($params, $template) +{ + static $counters = array(); + + $name = (isset($params[ 'name' ])) ? $params[ 'name' ] : 'default'; + if (!isset($counters[ $name ])) { + $counters[ $name ] = array('start' => 1, 'skip' => 1, 'direction' => 'up', 'count' => 1); + } + $counter =& $counters[ $name ]; + + if (isset($params[ 'start' ])) { + $counter[ 'start' ] = $counter[ 'count' ] = (int) $params[ 'start' ]; + } + + if (!empty($params[ 'assign' ])) { + $counter[ 'assign' ] = $params[ 'assign' ]; + } + + if (isset($counter[ 'assign' ])) { + $template->assign($counter[ 'assign' ], $counter[ 'count' ]); + } + + if (isset($params[ 'print' ])) { + $print = (bool) $params[ 'print' ]; + } else { + $print = empty($counter[ 'assign' ]); + } + + if ($print) { + $retval = $counter[ 'count' ]; + } else { + $retval = null; + } + + if (isset($params[ 'skip' ])) { + $counter[ 'skip' ] = $params[ 'skip' ]; + } + + if (isset($params[ 'direction' ])) { + $counter[ 'direction' ] = $params[ 'direction' ]; + } + + if ($counter[ 'direction' ] == "down") { + $counter[ 'count' ] -= $counter[ 'skip' ]; + } else { + $counter[ 'count' ] += $counter[ 'skip' ]; + } + + return $retval; +} diff --git a/library/Smarty/libs/plugins/function.cycle.php b/vendor/smarty/smarty/libs/plugins/function.cycle.php similarity index 54% rename from library/Smarty/libs/plugins/function.cycle.php rename to vendor/smarty/smarty/libs/plugins/function.cycle.php index 8dc5cd9d51..a76d49aed0 100644 --- a/library/Smarty/libs/plugins/function.cycle.php +++ b/vendor/smarty/smarty/libs/plugins/function.cycle.php @@ -48,58 +48,56 @@ function smarty_function_cycle($params, $template) { static $cycle_vars; - $name = (empty($params['name'])) ? 'default' : $params['name']; - $print = (isset($params['print'])) ? (bool) $params['print'] : true; - $advance = (isset($params['advance'])) ? (bool) $params['advance'] : true; - $reset = (isset($params['reset'])) ? (bool) $params['reset'] : false; + $name = (empty($params[ 'name' ])) ? 'default' : $params[ 'name' ]; + $print = (isset($params[ 'print' ])) ? (bool) $params[ 'print' ] : true; + $advance = (isset($params[ 'advance' ])) ? (bool) $params[ 'advance' ] : true; + $reset = (isset($params[ 'reset' ])) ? (bool) $params[ 'reset' ] : false; - if (!isset($params['values'])) { - if (!isset($cycle_vars[$name]['values'])) { + if (!isset($params[ 'values' ])) { + if (!isset($cycle_vars[ $name ][ 'values' ])) { trigger_error("cycle: missing 'values' parameter"); return; } } else { - if (isset($cycle_vars[$name]['values']) - && $cycle_vars[$name]['values'] != $params['values'] - ) { - $cycle_vars[$name]['index'] = 0; + if (isset($cycle_vars[ $name ][ 'values' ]) && $cycle_vars[ $name ][ 'values' ] != $params[ 'values' ]) { + $cycle_vars[ $name ][ 'index' ] = 0; } - $cycle_vars[$name]['values'] = $params['values']; + $cycle_vars[ $name ][ 'values' ] = $params[ 'values' ]; } - if (isset($params['delimiter'])) { - $cycle_vars[$name]['delimiter'] = $params['delimiter']; - } elseif (!isset($cycle_vars[$name]['delimiter'])) { - $cycle_vars[$name]['delimiter'] = ','; + if (isset($params[ 'delimiter' ])) { + $cycle_vars[ $name ][ 'delimiter' ] = $params[ 'delimiter' ]; + } elseif (!isset($cycle_vars[ $name ][ 'delimiter' ])) { + $cycle_vars[ $name ][ 'delimiter' ] = ','; } - if (is_array($cycle_vars[$name]['values'])) { - $cycle_array = $cycle_vars[$name]['values']; + if (is_array($cycle_vars[ $name ][ 'values' ])) { + $cycle_array = $cycle_vars[ $name ][ 'values' ]; } 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) { - $cycle_vars[$name]['index'] = 0; + if (!isset($cycle_vars[ $name ][ 'index' ]) || $reset) { + $cycle_vars[ $name ][ 'index' ] = 0; } - if (isset($params['assign'])) { + if (isset($params[ 'assign' ])) { $print = false; - $template->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]); + $template->assign($params[ 'assign' ], $cycle_array[ $cycle_vars[ $name ][ 'index' ] ]); } if ($print) { - $retval = $cycle_array[$cycle_vars[$name]['index']]; + $retval = $cycle_array[ $cycle_vars[ $name ][ 'index' ] ]; } else { $retval = null; } if ($advance) { - if ($cycle_vars[$name]['index'] >= count($cycle_array) - 1) { - $cycle_vars[$name]['index'] = 0; + if ($cycle_vars[ $name ][ 'index' ] >= count($cycle_array) - 1) { + $cycle_vars[ $name ][ 'index' ] = 0; } else { - $cycle_vars[$name]['index'] ++; + $cycle_vars[ $name ][ 'index' ] ++; } } diff --git a/library/Smarty/libs/plugins/function.fetch.php b/vendor/smarty/smarty/libs/plugins/function.fetch.php similarity index 83% rename from library/Smarty/libs/plugins/function.fetch.php rename to vendor/smarty/smarty/libs/plugins/function.fetch.php index 3506d4a8d6..cb60dd9183 100644 --- a/library/Smarty/libs/plugins/function.fetch.php +++ b/vendor/smarty/smarty/libs/plugins/function.fetch.php @@ -24,31 +24,31 @@ */ 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); return; } // strip file protocol - if (stripos($params['file'], 'file://') === 0) { - $params['file'] = substr($params['file'], 7); + if (stripos($params[ 'file' ], 'file://') === 0) { + $params[ 'file' ] = substr($params[ 'file' ], 7); } - $protocol = strpos($params['file'], '://'); + $protocol = strpos($params[ 'file' ], '://'); if ($protocol !== false) { - $protocol = strtolower(substr($params['file'], 0, $protocol)); + $protocol = strtolower(substr($params[ 'file' ], 0, $protocol)); } if (isset($template->smarty->security_policy)) { if ($protocol) { // remote resource (or php stream, …) - if (!$template->smarty->security_policy->isTrustedUri($params['file'])) { + if (!$template->smarty->security_policy->isTrustedUri($params[ 'file' ])) { return; } } else { // local file - if (!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) { + if (!$template->smarty->security_policy->isTrustedResourceDir($params[ 'file' ])) { return; } } @@ -57,26 +57,26 @@ function smarty_function_fetch($params, $template) $content = ''; if ($protocol == 'http') { // http fetch - if ($uri_parts = parse_url($params['file'])) { + if ($uri_parts = parse_url($params[ 'file' ])) { // set defaults - $host = $server_name = $uri_parts['host']; + $host = $server_name = $uri_parts[ 'host' ]; $timeout = 30; $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; $agent = "Smarty Template Engine " . Smarty::SMARTY_VERSION; $referer = ""; - $uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/'; - $uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : ''; + $uri = !empty($uri_parts[ 'path' ]) ? $uri_parts[ 'path' ] : '/'; + $uri .= !empty($uri_parts[ 'query' ]) ? '?' . $uri_parts[ 'query' ] : ''; $_is_proxy = false; - if (empty($uri_parts['port'])) { + if (empty($uri_parts[ 'port' ])) { $port = 80; } else { - $port = $uri_parts['port']; + $port = $uri_parts[ 'port' ]; } - if (!empty($uri_parts['user'])) { - $user = $uri_parts['user']; + if (!empty($uri_parts[ 'user' ])) { + $user = $uri_parts[ 'user' ]; } - if (!empty($uri_parts['pass'])) { - $pass = $uri_parts['pass']; + if (!empty($uri_parts[ 'pass' ])) { + $pass = $uri_parts[ 'pass' ]; } // loop through parameters, setup headers foreach ($params as $param_key => $param_value) { @@ -163,7 +163,7 @@ function smarty_function_fetch($params, $template) return; } else { if ($_is_proxy) { - fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n"); + fputs($fp, 'GET ' . $params[ 'file' ] . " HTTP/1.0\r\n"); } else { fputs($fp, "GET $uri HTTP/1.0\r\n"); } @@ -195,10 +195,10 @@ function smarty_function_fetch($params, $template) fclose($fp); $csplit = preg_split("!\r\n\r\n!", $content, 2); - $content = $csplit[1]; + $content = $csplit[ 1 ]; - if (!empty($params['assign_headers'])) { - $template->assign($params['assign_headers'], preg_split("!\r\n!", $csplit[0])); + if (!empty($params[ 'assign_headers' ])) { + $template->assign($params[ 'assign_headers' ], preg_split("!\r\n!", $csplit[ 0 ])); } } } else { @@ -207,14 +207,14 @@ function smarty_function_fetch($params, $template) return; } } else { - $content = @file_get_contents($params['file']); + $content = @file_get_contents($params[ 'file' ]); if ($content === false) { - throw new SmartyException("{fetch} cannot read resource '" . $params['file'] . "'"); + throw new SmartyException("{fetch} cannot read resource '" . $params[ 'file' ] . "'"); } } - if (!empty($params['assign'])) { - $template->assign($params['assign'], $content); + if (!empty($params[ 'assign' ])) { + $template->assign($params[ 'assign' ], $content); } else { return $content; } diff --git a/library/Smarty/libs/plugins/function.html_checkboxes.php b/vendor/smarty/smarty/libs/plugins/function.html_checkboxes.php similarity index 78% rename from library/Smarty/libs/plugins/function.html_checkboxes.php rename to vendor/smarty/smarty/libs/plugins/function.html_checkboxes.php index d786803686..04ce45733a 100644 --- a/library/Smarty/libs/plugins/function.html_checkboxes.php +++ b/vendor/smarty/smarty/libs/plugins/function.html_checkboxes.php @@ -45,7 +45,9 @@ */ function smarty_function_html_checkboxes($params, $template) { - require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + if (!is_callable('smarty_function_escape_special_chars')) { + require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + } $name = 'checkbox'; $values = null; @@ -90,19 +92,21 @@ function smarty_function_html_checkboxes($params, $template) if (method_exists($_sel, "__toString")) { $_sel = smarty_function_escape_special_chars((string) $_sel->__toString()); } 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; } } else { $_sel = smarty_function_escape_special_chars((string) $_sel); } - $selected[$_sel] = true; + $selected[ $_sel ] = true; } } elseif (is_object($_val)) { if (method_exists($_val, "__toString")) { $selected = smarty_function_escape_special_chars((string) $_val->__toString()); } 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 { $selected = smarty_function_escape_special_chars((string) $_val); @@ -110,7 +114,8 @@ function smarty_function_html_checkboxes($params, $template) break; case 'checkboxes': - trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', E_USER_WARNING); + trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', + E_USER_WARNING); $options = (array) $_val; break; @@ -122,9 +127,10 @@ function smarty_function_html_checkboxes($params, $template) case 'disabled': case 'readonly': - if (!empty($params['strict'])) { + if (!empty($params[ 'strict' ])) { if (!is_scalar($_val)) { - trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE); + trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", + E_USER_NOTICE); } if ($_val === true || $_val === $_key) { @@ -153,23 +159,28 @@ function smarty_function_html_checkboxes($params, $template) if (isset($options)) { 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 { foreach ($values as $_i => $_key) { - $_val = isset($output[$_i]) ? $output[$_i] : ''; - $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); + $_val = isset($output[ $_i ]) ? $output[ $_i ] : ''; + $_html_result[] = + smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, + $label_ids, $escape); } } - if (!empty($params['assign'])) { - $template->assign($params['assign'], $_html_result); + if (!empty($params[ 'assign' ])) { + $template->assign($params[ 'assign' ], $_html_result); } else { 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 = ''; @@ -177,7 +188,8 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte if (method_exists($value, "__toString")) { $value = (string) $value->__toString(); } 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 ''; } @@ -189,7 +201,8 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte if (method_exists($output, "__toString")) { $output = (string) $output->__toString(); } 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 ''; } @@ -199,7 +212,8 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte if ($labels) { if ($label_ids) { - $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value)); + $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', + $name . '_' . $value)); $_output .= '