diff --git a/src/includes/MySmarty.class.php b/src/includes/MySmarty.class.php
index 79fa6e5..1b91fcd 100644
--- a/src/includes/MySmarty.class.php
+++ b/src/includes/MySmarty.class.php
@@ -1,6 +1,6 @@
force_compile = true;
-$smarty->debugging = true;
-$smarty->caching = true;
-$smarty->cache_lifetime = 120;
-
-$smarty->assign("Name","Fred Irving Johnathan Bradley Peppergill",true);
-$smarty->assign("FirstName",array("John","Mary","James","Henry"));
-$smarty->assign("LastName",array("Doe","Smith","Johnson","Case"));
-$smarty->assign("Class",array(array("A","B","C","D"), array("E", "F", "G", "H"),
- array("I", "J", "K", "L"), array("M", "N", "O", "P")));
-
-$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),
- array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
-
-$smarty->assign("option_values", array("NY","NE","KS","IA","OK","TX"));
-$smarty->assign("option_output", array("New York","Nebraska","Kansas","Iowa","Oklahoma","Texas"));
-$smarty->assign("option_selected", "NE");
-
-$smarty->display('index.tpl');
-?>
diff --git a/src/includes/Smarty-3.1.12/demo/templates/index.tpl b/src/includes/Smarty-3.1.12/demo/templates/index.tpl
deleted file mode 100644
index 38d2334..0000000
--- a/src/includes/Smarty-3.1.12/demo/templates/index.tpl
+++ /dev/null
@@ -1,82 +0,0 @@
-{config_load file="test.conf" section="setup"}
-{include file="header.tpl" title=foo}
-
-
-
-{* bold and title are read from the config file *}
-{if #bold#}{/if}
-{* capitalize the first letters of each word of the title *}
-Title: {#title#|capitalize}
-{if #bold#} {/if}
-
-The current date and time is {$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}
-
-The value of global assigned variable $SCRIPT_NAME is {$SCRIPT_NAME}
-
-Example of accessing server environment variable SERVER_NAME: {$smarty.server.SERVER_NAME}
-
-The value of {ldelim}$Name{rdelim} is {$Name}
-
-variable modifier example of {ldelim}$Name|upper{rdelim}
-
-{$Name|upper}
-
-
-An example of a section loop:
-
-{section name=outer
-loop=$FirstName}
-{if $smarty.section.outer.index is odd by 2}
- {$smarty.section.outer.rownum} . {$FirstName[outer]} {$LastName[outer]}
-{else}
- {$smarty.section.outer.rownum} * {$FirstName[outer]} {$LastName[outer]}
-{/if}
-{sectionelse}
- none
-{/section}
-
-An example of section looped key values:
-
-{section name=sec1 loop=$contacts}
- phone: {$contacts[sec1].phone}
- fax: {$contacts[sec1].fax}
- cell: {$contacts[sec1].cell}
-{/section}
-
-
-testing strip tags
-{strip}
-
-{/strip}
-
-
-
-This is an example of the html_select_date function:
-
-
-
-This is an example of the html_select_time function:
-
-
-
-This is an example of the html_options function:
-
-
-
-{include file="footer.tpl"}
diff --git a/src/includes/Smarty-3.1.12/libs/Smarty.class.php b/src/includes/Smarty-3.1.12/libs/Smarty.class.php
deleted file mode 100644
index 4a914ab..0000000
--- a/src/includes/Smarty-3.1.12/libs/Smarty.class.php
+++ /dev/null
@@ -1,1520 +0,0 @@
-
- * @author Uwe Tews
- * @author Rodney Rehm
- * @package Smarty
- * @version 3.1.12
- */
-
-/**
- * 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.12';
-
- /**
- * 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 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;
- /**
- * 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.
- *
- * NONE => no debugging control allowed
- * URL => enable debugging when SMARTY_DEBUG is found in the URL.
- *
- * @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 object $smarty
- * @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
- */
- 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] = 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) {
- if (is_int($k)) {
- // indexes are not merged but appended
- $this->template_dir[] = rtrim($v, '/\\') . DS;
- } else {
- // string indexes are overridden
- $this->template_dir[$k] = rtrim($v, '/\\') . DS;
- }
- }
- } elseif ($key !== null) {
- // override directory at specified index
- $this->template_dir[$key] = rtrim($template_dir, '/\\') . DS;
- } else {
- // append new directory
- $this->template_dir[] = rtrim($template_dir, '/\\') . DS;
- }
- $this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir);
- return $this;
- }
-
- /**
- * Get template directories
- *
- * @param mixed 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 string|array $template_dir directory(s) of configuration sources
- * @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] = 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 string 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) {
- if (is_int($k)) {
- // indexes are not merged but appended
- $this->config_dir[] = rtrim($v, '/\\') . DS;
- } else {
- // string indexes are overridden
- $this->config_dir[$k] = rtrim($v, '/\\') . DS;
- }
- }
- } elseif( $key !== null ) {
- // override directory at specified index
- $this->config_dir[$key] = rtrim($config_dir, '/\\') . DS;
- } else {
- // append new directory
- $this->config_dir[] = rtrim($config_dir, '/\\') . DS;
- }
-
- $this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir);
- return $this;
- }
-
- /**
- * Get config directory
- *
- * @param mixed 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 object $smarty
- * @param string $ |array $ plugins folder
- * @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 (!empty($cache_id) && (is_object($cache_id) || is_array($cache_id))) {
- $parent = $cache_id;
- $cache_id = null;
- }
- if (!empty($parent) && 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
- * @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");
- return false;
- }
- // 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($extention = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
- {
- return Smarty_Internal_Utility::compileAllTemplates($extention, $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($extention = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null)
- {
- return Smarty_Internal_Utility::compileAllConfig($extention, $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 object $templae template object
- * @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
- * @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);
- 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);
- $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 function __construct($message) {
- $this->message = htmlentities($message);
- }
-}
-
-/**
- * Smarty compiler exception class
- * @package Smarty
- */
-class SmartyCompilerException extends SmartyException {
-}
-
-/**
- * Autoloader
- */
-function smartyAutoload($class)
-{
- $_class = strtolower($class);
- $_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/src/includes/Smarty-3.1.12/libs/debug.tpl b/src/includes/Smarty-3.1.12/libs/debug.tpl
deleted file mode 100644
index 12eef0f..0000000
--- a/src/includes/Smarty-3.1.12/libs/debug.tpl
+++ /dev/null
@@ -1,133 +0,0 @@
-{capture name='_smarty_debug' assign=debug_output}
-
-
-
- Smarty Debug Console
-
-
-
-
-Smarty Debug Console - {if isset($template_name)}{$template_name|debug_print_var nofilter}{else}Total Time {$execution_time|string_format:"%.5f"}{/if}
-
-{if !empty($template_data)}
-included templates & config files (load time in seconds)
-
-
-{foreach $template_data as $template}
- {$template.name}
-
- (compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"})
-
-
-{/foreach}
-
-{/if}
-
-assigned template variables
-
-
- {foreach $assigned_vars as $vars}
-
- ${$vars@key|escape:'html'}
- {$vars|debug_print_var nofilter}
- {/foreach}
-
-
-assigned config file variables (outer template scope)
-
-
- {foreach $config_vars as $vars}
-
- {$vars@key|escape:'html'}
- {$vars|debug_print_var nofilter}
- {/foreach}
-
-
-
-
-{/capture}
-
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/function.counter.php b/src/includes/Smarty-3.1.12/libs/plugins/function.counter.php
deleted file mode 100644
index 3906bad..0000000
--- a/src/includes/Smarty-3.1.12/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;
-
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/function.cycle.php b/src/includes/Smarty-3.1.12/libs/plugins/function.cycle.php
deleted file mode 100644
index 1778ffb..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/function.cycle.php
+++ /dev/null
@@ -1,106 +0,0 @@
-
- * Name: cycle
- * Date: May 3, 2002
- * Purpose: cycle through given values
- * Params:
- *
- * - name - name of cycle (optional)
- * - values - comma separated list of values to cycle, or an array of values to cycle
- * (this can be left out for subsequent calls)
- * - reset - boolean - resets given var to true
- * - print - boolean - print var or not. default is true
- * - advance - boolean - whether or not to advance the cycle
- * - delimiter - the value delimiter, default is ","
- * - assign - boolean, assigns to template var instead of printed.
- *
- * Examples:
- *
- * {cycle values="#eeeeee,#d0d0d0d"}
- * {cycle name=row values="one,two,three" reset=true}
- * {cycle name=row}
- *
- *
- * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle}
- * (Smarty online manual)
- * @author Monte Ohrt
- * @author credit to Mark Priatel
- * @author credit to Gerard
- * @author credit to Jason Sweat
- * @version 1.3
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
- * @return string|null
- */
-
-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;
-
- 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;
- }
- $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(is_array($cycle_vars[$name]['values'])) {
- $cycle_array = $cycle_vars[$name]['values'];
- } else {
- $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($params['assign'])) {
- $print = false;
- $template->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]);
- }
-
- if($print) {
- $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;
- } else {
- $cycle_vars[$name]['index']++;
- }
- }
-
- return $retval;
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/function.fetch.php b/src/includes/Smarty-3.1.12/libs/plugins/function.fetch.php
deleted file mode 100644
index eca1182..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/function.fetch.php
+++ /dev/null
@@ -1,214 +0,0 @@
-
- * Name: fetch
- * Purpose: fetch file, web or ftp data and display results
- *
- * @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch}
- * (Smarty online manual)
- * @author Monte Ohrt
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
- * @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable
- */
-function smarty_function_fetch($params, $template)
-{
- 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);
- }
-
- $protocol = strpos($params['file'], '://');
- if ($protocol !== false) {
- $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'])) {
- return;
- }
- } else {
- // local file
- if(!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) {
- return;
- }
- }
- }
-
- $content = '';
- if ($protocol == 'http') {
- // http fetch
- if($uri_parts = parse_url($params['file'])) {
- // set defaults
- $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'] : '';
- $_is_proxy = false;
- if(empty($uri_parts['port'])) {
- $port = 80;
- } else {
- $port = $uri_parts['port'];
- }
- if(!empty($uri_parts['user'])) {
- $user = $uri_parts['user'];
- }
- if(!empty($uri_parts['pass'])) {
- $pass = $uri_parts['pass'];
- }
- // loop through parameters, setup headers
- foreach($params as $param_key => $param_value) {
- switch($param_key) {
- case "file":
- case "assign":
- case "assign_headers":
- break;
- case "user":
- if(!empty($param_value)) {
- $user = $param_value;
- }
- break;
- case "pass":
- if(!empty($param_value)) {
- $pass = $param_value;
- }
- break;
- case "accept":
- if(!empty($param_value)) {
- $accept = $param_value;
- }
- break;
- case "header":
- if(!empty($param_value)) {
- if(!preg_match('![\w\d-]+: .+!',$param_value)) {
- trigger_error("[plugin] invalid header format '".$param_value."'",E_USER_NOTICE);
- return;
- } else {
- $extra_headers[] = $param_value;
- }
- }
- break;
- case "proxy_host":
- if(!empty($param_value)) {
- $proxy_host = $param_value;
- }
- break;
- case "proxy_port":
- if(!preg_match('!\D!', $param_value)) {
- $proxy_port = (int) $param_value;
- } else {
- trigger_error("[plugin] invalid value for attribute '".$param_key."'",E_USER_NOTICE);
- return;
- }
- break;
- case "agent":
- if(!empty($param_value)) {
- $agent = $param_value;
- }
- break;
- case "referer":
- if(!empty($param_value)) {
- $referer = $param_value;
- }
- break;
- case "timeout":
- if(!preg_match('!\D!', $param_value)) {
- $timeout = (int) $param_value;
- } else {
- trigger_error("[plugin] invalid value for attribute '".$param_key."'",E_USER_NOTICE);
- return;
- }
- break;
- default:
- trigger_error("[plugin] unrecognized attribute '".$param_key."'",E_USER_NOTICE);
- return;
- }
- }
- if(!empty($proxy_host) && !empty($proxy_port)) {
- $_is_proxy = true;
- $fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout);
- } else {
- $fp = fsockopen($server_name,$port,$errno,$errstr,$timeout);
- }
-
- if(!$fp) {
- trigger_error("[plugin] unable to fetch: $errstr ($errno)",E_USER_NOTICE);
- return;
- } else {
- if($_is_proxy) {
- fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n");
- } else {
- fputs($fp, "GET $uri HTTP/1.0\r\n");
- }
- if(!empty($host)) {
- fputs($fp, "Host: $host\r\n");
- }
- if(!empty($accept)) {
- fputs($fp, "Accept: $accept\r\n");
- }
- if(!empty($agent)) {
- fputs($fp, "User-Agent: $agent\r\n");
- }
- if(!empty($referer)) {
- fputs($fp, "Referer: $referer\r\n");
- }
- if(isset($extra_headers) && is_array($extra_headers)) {
- foreach($extra_headers as $curr_header) {
- fputs($fp, $curr_header."\r\n");
- }
- }
- if(!empty($user) && !empty($pass)) {
- fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n");
- }
-
- fputs($fp, "\r\n");
- while(!feof($fp)) {
- $content .= fgets($fp,4096);
- }
- fclose($fp);
- $csplit = preg_split("!\r\n\r\n!",$content,2);
-
- $content = $csplit[1];
-
- if(!empty($params['assign_headers'])) {
- $template->assign($params['assign_headers'],preg_split("!\r\n!",$csplit[0]));
- }
- }
- } else {
- trigger_error("[plugin fetch] unable to parse URL, check syntax",E_USER_NOTICE);
- return;
- }
- } else {
- $content = @file_get_contents($params['file']);
- if ($content === false) {
- throw new SmartyException("{fetch} cannot read resource '" . $params['file'] ."'");
- }
- }
-
- if (!empty($params['assign'])) {
- $template->assign($params['assign'], $content);
- } else {
- return $content;
- }
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/function.html_checkboxes.php b/src/includes/Smarty-3.1.12/libs/plugins/function.html_checkboxes.php
deleted file mode 100644
index fb9584b..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/function.html_checkboxes.php
+++ /dev/null
@@ -1,216 +0,0 @@
-
- * Type: function
- * Name: html_checkboxes
- * Date: 24.Feb.2003
- * Purpose: Prints out a list of checkbox input types
- * Examples:
- *
- * {html_checkboxes values=$ids output=$names}
- * {html_checkboxes values=$ids name='box' separator=' ' output=$names}
- * {html_checkboxes values=$ids checked=$checked separator=' ' output=$names}
- *
- * Params:
- *
- * - name (optional) - string default "checkbox"
- * - values (required) - array
- * - options (optional) - associative array
- * - checked (optional) - array default not set
- * - separator (optional) - ie or
- * - output (optional) - the output next to each checkbox
- * - assign (optional) - assign the output as an array to this variable
- * - escape (optional) - escape the content (not value), defaults to true
- *
- *
- * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
- * (Smarty online manual)
- * @author Christopher Kvarme
- * @author credits to Monte Ohrt
- * @version 1.0
- * @param array $params parameters
- * @param object $template template object
- * @return string
- * @uses smarty_function_escape_special_chars()
- */
-function smarty_function_html_checkboxes($params, $template)
-{
- require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
-
- $name = 'checkbox';
- $values = null;
- $options = null;
- $selected = array();
- $separator = '';
- $escape = true;
- $labels = true;
- $label_ids = false;
- $output = null;
-
- $extra = '';
-
- foreach($params as $_key => $_val) {
- switch($_key) {
- case 'name':
- case 'separator':
- $$_key = (string) $_val;
- break;
-
- case 'escape':
- case 'labels':
- case 'label_ids':
- $$_key = (bool) $_val;
- break;
-
- case 'options':
- $$_key = (array) $_val;
- break;
-
- case 'values':
- case 'output':
- $$_key = array_values((array) $_val);
- break;
-
- case 'checked':
- case 'selected':
- if (is_array($_val)) {
- $selected = array();
- foreach ($_val as $_sel) {
- if (is_object($_sel)) {
- 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);
- continue;
- }
- } else {
- $_sel = smarty_function_escape_special_chars((string) $_sel);
- }
- $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);
- }
- } else {
- $selected = smarty_function_escape_special_chars((string) $_val);
- }
- break;
-
- case 'checkboxes':
- trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', E_USER_WARNING);
- $options = (array) $_val;
- break;
-
- case 'assign':
- break;
-
- default:
- if(!is_array($_val)) {
- $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
- } else {
- trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
- break;
- }
- }
-
- if (!isset($options) && !isset($values))
- return ''; /* raise error here? */
-
- $_html_result = array();
-
- 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);
- }
- } 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);
- }
- }
-
- 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) {
- $_output = '';
-
- if (is_object($value)) {
- 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);
- return '';
- }
- } else {
- $value = (string) $value;
- }
-
- if (is_object($output)) {
- 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);
- return '';
- }
- } else {
- $output = (string) $output;
- }
-
- if ($labels) {
- if ($label_ids) {
- $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value));
- $_output .= '';
- } else {
- $_output .= '';
- }
- }
-
- $name = smarty_function_escape_special_chars($name);
- $value = smarty_function_escape_special_chars($value);
- if ($escape) {
- $output = smarty_function_escape_special_chars($output);
- }
-
- $_output .= ' ' . $output;
- if ($labels) {
- $_output .= ' ';
- }
-
- $_output .= $separator;
- return $_output;
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/function.html_options.php b/src/includes/Smarty-3.1.12/libs/plugins/function.html_options.php
deleted file mode 100644
index 46330e8..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/function.html_options.php
+++ /dev/null
@@ -1,176 +0,0 @@
-
- * Name: html_options
- * Purpose: Prints the list of tags generated from
- * the passed parameters
- * Params:
- *
- * - name (optional) - string default "select"
- * - values (required) - if no options supplied) - array
- * - options (required) - if no values supplied) - associative array
- * - selected (optional) - string default not set
- * - output (required) - if not options supplied) - array
- * - id (optional) - string default not set
- * - class (optional) - string default not set
- *
- *
- * @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image}
- * (Smarty online manual)
- * @author Monte Ohrt
- * @author Ralf Strehle (minor optimization)
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
- * @return string
- * @uses smarty_function_escape_special_chars()
- */
-function smarty_function_html_options($params, $template)
-{
- require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
-
- $name = null;
- $values = null;
- $options = null;
- $selected = null;
- $output = null;
- $id = null;
- $class = null;
-
- $extra = '';
-
- foreach ($params as $_key => $_val) {
- switch ($_key) {
- case 'name':
- case 'class':
- case 'id':
- $$_key = (string) $_val;
- break;
-
- case 'options':
- $options = (array) $_val;
- break;
-
- case 'values':
- case 'output':
- $$_key = array_values((array) $_val);
- break;
-
- case 'selected':
- if (is_array($_val)) {
- $selected = array();
- foreach ($_val as $_sel) {
- if (is_object($_sel)) {
- if (method_exists($_sel, "__toString")) {
- $_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
- } else {
- trigger_error("html_options: 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;
- }
- } elseif (is_object($_val)) {
- if (method_exists($_val, "__toString")) {
- $selected = smarty_function_escape_special_chars((string) $_val->__toString());
- } else {
- trigger_error("html_options: 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);
- }
- break;
-
- default:
- if (!is_array($_val)) {
- $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
- } else {
- trigger_error("html_options: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
- break;
- }
- }
-
- if (!isset($options) && !isset($values)) {
- /* raise error here? */
- return '';
- }
-
- $_html_result = '';
- $_idx = 0;
-
- if (isset($options)) {
- foreach ($options as $_key => $_val) {
- $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx);
- }
- } else {
- foreach ($values as $_i => $_key) {
- $_val = isset($output[$_i]) ? $output[$_i] : '';
- $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx);
- }
- }
-
- if (!empty($name)) {
- $_html_class = !empty($class) ? ' class="'.$class.'"' : '';
- $_html_id = !empty($id) ? ' id="'.$id.'"' : '';
- $_html_result = '' . "\n" . $_html_result . ' ' . "\n";
- }
-
- return $_html_result;
-}
-
-function smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, &$idx)
-{
- if (!is_array($value)) {
- $_key = smarty_function_escape_special_chars($key);
- $_html_result = '__toString());
- } else {
- trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE);
- return '';
- }
- } else {
- $value = smarty_function_escape_special_chars((string) $value);
- }
- $_html_result .= $_html_class . $_html_id . '>' . $value . ' ' . "\n";
- $idx++;
- } else {
- $_idx = 0;
- $_html_result = smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id.'-'.$idx) : null, $class, $_idx);
- $idx++;
- }
- return $_html_result;
-}
-
-function smarty_function_html_options_optgroup($key, $values, $selected, $id, $class, &$idx)
-{
- $optgroup_html = '' . "\n";
- foreach ($values as $key => $value) {
- $optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, $idx);
- }
- $optgroup_html .= " \n";
- return $optgroup_html;
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/function.html_radios.php b/src/includes/Smarty-3.1.12/libs/plugins/function.html_radios.php
deleted file mode 100644
index 7c83072..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/function.html_radios.php
+++ /dev/null
@@ -1,200 +0,0 @@
-
- * Type: function
- * Name: html_radios
- * Date: 24.Feb.2003
- * Purpose: Prints out a list of radio input types
- * Params:
- *
- * - name (optional) - string default "radio"
- * - values (required) - array
- * - options (required) - associative array
- * - checked (optional) - array default not set
- * - separator (optional) - ie or
- * - output (optional) - the output next to each radio button
- * - assign (optional) - assign the output as an array to this variable
- * - escape (optional) - escape the content (not value), defaults to true
- *
- * Examples:
- *
- * {html_radios values=$ids output=$names}
- * {html_radios values=$ids name='box' separator=' ' output=$names}
- * {html_radios values=$ids checked=$checked separator=' ' output=$names}
- *
- *
- * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
- * (Smarty online manual)
- * @author Christopher Kvarme
- * @author credits to Monte Ohrt
- * @version 1.0
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
- * @return string
- * @uses smarty_function_escape_special_chars()
- */
-function smarty_function_html_radios($params, $template)
-{
- require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
-
- $name = 'radio';
- $values = null;
- $options = null;
- $selected = null;
- $separator = '';
- $escape = true;
- $labels = true;
- $label_ids = false;
- $output = null;
- $extra = '';
-
- foreach($params as $_key => $_val) {
- switch ($_key) {
- case 'name':
- case 'separator':
- $$_key = (string) $_val;
- break;
-
- case 'checked':
- case 'selected':
- if (is_array($_val)) {
- trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING);
- } elseif (is_object($_val)) {
- if (method_exists($_val, "__toString")) {
- $selected = smarty_function_escape_special_chars((string) $_val->__toString());
- } else {
- trigger_error("html_radios: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE);
- }
- } else {
- $selected = (string) $_val;
- }
- break;
-
- case 'escape':
- case 'labels':
- case 'label_ids':
- $$_key = (bool) $_val;
- break;
-
- case 'options':
- $$_key = (array) $_val;
- break;
-
- case 'values':
- case 'output':
- $$_key = array_values((array) $_val);
- break;
-
- case 'radios':
- trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead', E_USER_WARNING);
- $options = (array) $_val;
- break;
-
- case 'assign':
- break;
-
- default:
- if (!is_array($_val)) {
- $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
- } else {
- trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
- break;
- }
- }
-
- if (!isset($options) && !isset($values)) {
- /* raise error here? */
- return '';
- }
-
- $_html_result = array();
-
- if (isset($options)) {
- foreach ($options as $_key => $_val) {
- $_html_result[] = smarty_function_html_radios_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_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape);
- }
- }
-
- if (!empty($params['assign'])) {
- $template->assign($params['assign'], $_html_result);
- } else {
- return implode("\n", $_html_result);
- }
-}
-
-function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape)
-{
- $_output = '';
-
- if (is_object($value)) {
- 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);
- return '';
- }
- } else {
- $value = (string) $value;
- }
-
- if (is_object($output)) {
- 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);
- return '';
- }
- } else {
- $output = (string) $output;
- }
-
- if ($labels) {
- if ($label_ids) {
- $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value));
- $_output .= '';
- } else {
- $_output .= '';
- }
- }
-
- $name = smarty_function_escape_special_chars($name);
- $value = smarty_function_escape_special_chars($value);
- if ($escape) {
- $output = smarty_function_escape_special_chars($output);
- }
-
- $_output .= ' ' . $output;
- if ($labels) {
- $_output .= ' ';
- }
-
- $_output .= $separator;
- return $_output;
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/function.math.php b/src/includes/Smarty-3.1.12/libs/plugins/function.math.php
deleted file mode 100644
index f4d3f05..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/function.math.php
+++ /dev/null
@@ -1,87 +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));
- }
- }
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifier.capitalize.php b/src/includes/Smarty-3.1.12/libs/plugins/modifier.capitalize.php
deleted file mode 100644
index a78e363..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifier.capitalize.php
+++ /dev/null
@@ -1,65 +0,0 @@
-
- * Name: capitalize
- * Purpose: capitalize words in the string
- *
- * {@internal {$string|capitalize:true:true} is the fastest option for MBString enabled systems }}
- *
- * @param string $string string to capitalize
- * @param boolean $uc_digits also capitalize "x123" to "X123"
- * @param boolean $lc_rest capitalize first letters, lowercase all following letters "aAa" to "Aaa"
- * @return string capitalized string
- * @author Monte Ohrt
- * @author Rodney Rehm
- */
-function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = false)
-{
- if (Smarty::$_MBSTRING) {
- if ($lc_rest) {
- // uppercase (including hyphenated words)
- $upper_string = mb_convert_case( $string, MB_CASE_TITLE, Smarty::$_CHARSET );
- } else {
- // uppercase word breaks
- $upper_string = preg_replace("!(^|[^\p{L}'])([\p{Ll}])!eS" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').mb_convert_case(stripslashes('\\2'),MB_CASE_UPPER, '" . addslashes(Smarty::$_CHARSET) . "')", $string);
- }
- // check uc_digits case
- if (!$uc_digits) {
- if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) {
- foreach($matches[1] as $match) {
- $upper_string = substr_replace($upper_string, mb_strtolower($match[0], Smarty::$_CHARSET), $match[1], strlen($match[0]));
- }
- }
- }
- $upper_string = preg_replace("!((^|\s)['\"])(\w)!e" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').mb_convert_case(stripslashes('\\3'),MB_CASE_UPPER, '" . addslashes(Smarty::$_CHARSET) . "')", $upper_string);
- return $upper_string;
- }
-
- // lowercase first
- if ($lc_rest) {
- $string = strtolower($string);
- }
- // uppercase (including hyphenated words)
- $upper_string = preg_replace("!(^|[^\p{L}'])([\p{Ll}])!eS" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').ucfirst(stripslashes('\\2'))", $string);
- // check uc_digits case
- if (!$uc_digits) {
- if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) {
- foreach($matches[1] as $match) {
- $upper_string = substr_replace($upper_string, strtolower($match[0]), $match[1], strlen($match[0]));
- }
- }
- }
- $upper_string = preg_replace("!((^|\s)['\"])(\w)!e" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').strtoupper(stripslashes('\\3'))", $upper_string);
- return $upper_string;
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifier.date_format.php b/src/includes/Smarty-3.1.12/libs/plugins/modifier.date_format.php
deleted file mode 100644
index f3eaba0..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifier.date_format.php
+++ /dev/null
@@ -1,65 +0,0 @@
-
- * Name: date_format
- * Purpose: format datestamps via strftime
- * Input:
- * - string: input date string
- * - format: strftime format for output
- * - default_date: default date if $string is empty
- *
- * @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual)
- * @author Monte Ohrt
- * @param string $string input date string
- * @param string $format strftime format for output
- * @param string $default_date default date if $string is empty
- * @param string $formatter either 'strftime' or 'auto'
- * @return string |void
- * @uses smarty_make_timestamp()
- */
-function smarty_modifier_date_format($string, $format=null, $default_date='', $formatter='auto')
-{
- if ($format === null) {
- $format = Smarty::$_DATE_FORMAT;
- }
- /**
- * Include the {@link shared.make_timestamp.php} plugin
- */
- require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
- if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') {
- $timestamp = smarty_make_timestamp($string);
- } elseif ($default_date != '') {
- $timestamp = smarty_make_timestamp($default_date);
- } else {
- return;
- }
- if($formatter=='strftime'||($formatter=='auto'&&strpos($format,'%')!==false)) {
- if (DS == '\\') {
- $_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T');
- $_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S');
- if (strpos($format, '%e') !== false) {
- $_win_from[] = '%e';
- $_win_to[] = sprintf('%\' 2d', date('j', $timestamp));
- }
- if (strpos($format, '%l') !== false) {
- $_win_from[] = '%l';
- $_win_to[] = sprintf('%\' 2d', date('h', $timestamp));
- }
- $format = str_replace($_win_from, $_win_to, $format);
- }
- return strftime($format, $timestamp);
- } else {
- return date($format, $timestamp);
- }
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifier.debug_print_var.php b/src/includes/Smarty-3.1.12/libs/plugins/modifier.debug_print_var.php
deleted file mode 100644
index fa44100..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifier.debug_print_var.php
+++ /dev/null
@@ -1,105 +0,0 @@
-
- * Name: debug_print_var
- * Purpose: formats variable contents for display in the console
- *
- * @author Monte Ohrt
- * @param array|object $var variable to be formatted
- * @param integer $depth maximum recursion depth if $var is an array
- * @param integer $length maximum string length if $var is a string
- * @return string
- */
-function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
-{
- $_replace = array("\n" => '\n ',
- "\r" => '\r ',
- "\t" => '\t '
- );
-
- switch (gettype($var)) {
- case 'array' :
- $results = 'Array (' . count($var) . ') ';
- foreach ($var as $curr_key => $curr_val) {
- $results .= ' ' . str_repeat(' ', $depth * 2)
- . '' . strtr($curr_key, $_replace) . ' => '
- . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
- $depth--;
- }
- break;
-
- case 'object' :
- $object_vars = get_object_vars($var);
- $results = '' . get_class($var) . ' Object (' . count($object_vars) . ') ';
- foreach ($object_vars as $curr_key => $curr_val) {
- $results .= ' ' . str_repeat(' ', $depth * 2)
- . ' ->' . strtr($curr_key, $_replace) . ' = '
- . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
- $depth--;
- }
- break;
-
- case 'boolean' :
- case 'NULL' :
- case 'resource' :
- if (true === $var) {
- $results = 'true';
- } elseif (false === $var) {
- $results = 'false';
- } elseif (null === $var) {
- $results = 'null';
- } else {
- $results = htmlspecialchars((string) $var);
- }
- $results = '' . $results . ' ';
- break;
-
- case 'integer' :
- case 'float' :
- $results = htmlspecialchars((string) $var);
- break;
-
- case 'string' :
- $results = strtr($var, $_replace);
- if (Smarty::$_MBSTRING) {
- if (mb_strlen($var, Smarty::$_CHARSET) > $length) {
- $results = mb_substr($var, 0, $length - 3, Smarty::$_CHARSET) . '...';
- }
- } else {
- if (isset($var[$length])) {
- $results = substr($var, 0, $length - 3) . '...';
- }
- }
-
- $results = htmlspecialchars('"' . $results . '"');
- break;
-
- case 'unknown type' :
- default :
- $results = strtr((string) $var, $_replace);
- if (Smarty::$_MBSTRING) {
- if (mb_strlen($results, Smarty::$_CHARSET) > $length) {
- $results = mb_substr($results, 0, $length - 3, Smarty::$_CHARSET) . '...';
- }
- } else {
- if (strlen($results) > $length) {
- $results = substr($results, 0, $length - 3) . '...';
- }
- }
-
- $results = htmlspecialchars($results);
- }
-
- return $results;
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifier.regex_replace.php b/src/includes/Smarty-3.1.12/libs/plugins/modifier.regex_replace.php
deleted file mode 100644
index f9fd5fa..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifier.regex_replace.php
+++ /dev/null
@@ -1,55 +0,0 @@
-
- * Name: regex_replace
- * Purpose: regular expression search/replace
- *
- * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php
- * regex_replace (Smarty online manual)
- * @author Monte Ohrt
- * @param string $string input string
- * @param string|array $search regular expression(s) to search for
- * @param string|array $replace string(s) that should be replaced
- * @return string
- */
-function smarty_modifier_regex_replace($string, $search, $replace)
-{
- if(is_array($search)) {
- foreach($search as $idx => $s) {
- $search[$idx] = _smarty_regex_replace_check($s);
- }
- } else {
- $search = _smarty_regex_replace_check($search);
- }
- return preg_replace($search, $replace, $string);
-}
-
-/**
- * @param string $search string(s) that should be replaced
- * @return string
- * @ignore
- */
-function _smarty_regex_replace_check($search)
-{
- // null-byte injection detection
- // anything behind the first null-byte is ignored
- if (($pos = strpos($search,"\0")) !== false) {
- $search = substr($search,0,$pos);
- }
- // remove eval-modifier from $search
- if (preg_match('!([a-zA-Z\s]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) {
- $search = substr($search, 0, -strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]);
- }
- return $search;
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifier.replace.php b/src/includes/Smarty-3.1.12/libs/plugins/modifier.replace.php
deleted file mode 100644
index 4d71a6e..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifier.replace.php
+++ /dev/null
@@ -1,33 +0,0 @@
-
- * Name: replace
- * Purpose: simple search/replace
- *
- * @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual)
- * @author Monte Ohrt
- * @author Uwe Tews
- * @param string $string input string
- * @param string $search text to search for
- * @param string $replace replacement text
- * @return string
- */
-function smarty_modifier_replace($string, $search, $replace)
-{
- if (Smarty::$_MBSTRING) {
- require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php');
- return smarty_mb_str_replace($search, $replace, $string);
- }
-
- return str_replace($search, $replace, $string);
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.cat.php b/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.cat.php
deleted file mode 100644
index 1cfe630..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.cat.php
+++ /dev/null
@@ -1,30 +0,0 @@
-
- * Name: cat
- * Date: Feb 24, 2003
- * Purpose: catenate a value to a variable
- * Input: string to catenate
- * Example: {$var|cat:"foo"}
- *
- * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat
- * (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_cat($params, $compiler)
-{
- return '('.implode(').(', $params).')';
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.count_characters.php b/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.count_characters.php
deleted file mode 100644
index 98e8efa..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.count_characters.php
+++ /dev/null
@@ -1,33 +0,0 @@
-
- * Name: count_characteres
- * Purpose: count the number of characters in a text
- *
- * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_count_characters($params, $compiler)
-{
- if (!isset($params[1]) || $params[1] != 'true') {
- return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[0] . ', $tmp)';
- }
- if (Smarty::$_MBSTRING) {
- return 'mb_strlen(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
- }
- // no MBString fallback
- return 'strlen(' . $params[0] . ')';
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.escape.php b/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.escape.php
deleted file mode 100644
index f50028b..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.escape.php
+++ /dev/null
@@ -1,125 +0,0 @@
-
- * Name: escape
- * Purpose: escape string for output
- *
- * @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual)
- * @author Rodney Rehm
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_escape($params, $compiler)
-{
- static $_double_encode = null;
- if ($_double_encode === null) {
- $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>=');
- }
-
- try {
- $esc_type = smarty_literal_compiler_param($params, 1, 'html');
- $char_set = smarty_literal_compiler_param($params, 2, Smarty::$_CHARSET);
- $double_encode = smarty_literal_compiler_param($params, 3, true);
-
- if (!$char_set) {
- $char_set = Smarty::$_CHARSET;
- }
-
- switch ($esc_type) {
- case 'html':
- if ($_double_encode) {
- return 'htmlspecialchars('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ', '
- . var_export($double_encode, true) . ')';
- } else if ($double_encode) {
- return 'htmlspecialchars('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ')';
- } else {
- // fall back to modifier.escape.php
- }
-
- case 'htmlall':
- if (Smarty::$_MBSTRING) {
- if ($_double_encode) {
- // php >=5.2.3 - go native
- return 'mb_convert_encoding(htmlspecialchars('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ', '
- . var_export($double_encode, true)
- . '), "HTML-ENTITIES", '
- . var_export($char_set, true) . ')';
- } else if ($double_encode) {
- // php <5.2.3 - only handle double encoding
- return 'mb_convert_encoding(htmlspecialchars('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true)
- . '), "HTML-ENTITIES", '
- . var_export($char_set, true) . ')';
- } else {
- // fall back to modifier.escape.php
- }
- }
-
- // no MBString fallback
- if ($_double_encode) {
- // php >=5.2.3 - go native
- return 'htmlentities('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ', '
- . var_export($double_encode, true) . ')';
- } else if ($double_encode) {
- // php <5.2.3 - only handle double encoding
- return 'htmlentities('
- . $params[0] .', ENT_QUOTES, '
- . var_export($char_set, true) . ')';
- } else {
- // fall back to modifier.escape.php
- }
-
- case 'url':
- return 'rawurlencode(' . $params[0] . ')';
-
- case 'urlpathinfo':
- return 'str_replace("%2F", "/", rawurlencode(' . $params[0] . '))';
-
- case 'quotes':
- // escape unescaped single quotes
- return 'preg_replace("%(? "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "" => "<\/" ))';
-
- }
- } catch(SmartyException $e) {
- // pass through to regular plugin fallback
- }
-
- // could not optimize |escape call, so fallback to regular plugin
- if ($compiler->tag_nocache | $compiler->nocache) {
- $compiler->template->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR .'modifier.escape.php';
- $compiler->template->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape';
- } else {
- $compiler->template->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR .'modifier.escape.php';
- $compiler->template->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape';
- }
- return 'smarty_modifier_escape(' . join( ', ', $params ) . ')';
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.indent.php b/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.indent.php
deleted file mode 100644
index 020c4fd..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.indent.php
+++ /dev/null
@@ -1,32 +0,0 @@
-
- * Name: indent
- * Purpose: indent lines of text
- *
- * @link http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-
-function smarty_modifiercompiler_indent($params, $compiler)
-{
- if (!isset($params[1])) {
- $params[1] = 4;
- }
- if (!isset($params[2])) {
- $params[2] = "' '";
- }
- return 'preg_replace(\'!^!m\',str_repeat(' . $params[2] . ',' . $params[1] . '),' . $params[0] . ')';
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.lower.php b/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.lower.php
deleted file mode 100644
index 1845cc1..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.lower.php
+++ /dev/null
@@ -1,31 +0,0 @@
-
- * Name: lower
- * Purpose: convert string to lowercase
- *
- * @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual)
- * @author Monte Ohrt
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-
-function smarty_modifiercompiler_lower($params, $compiler)
-{
- if (Smarty::$_MBSTRING) {
- return 'mb_strtolower(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')' ;
- }
- // no MBString fallback
- return 'strtolower(' . $params[0] . ')';
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.noprint.php b/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.noprint.php
deleted file mode 100644
index 3ca2657..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.noprint.php
+++ /dev/null
@@ -1,25 +0,0 @@
-
- * Name: noprint
- * Purpose: return an empty string
- *
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_noprint($params, $compiler)
-{
- return "''";
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.string_format.php b/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.string_format.php
deleted file mode 100644
index 8334597..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.string_format.php
+++ /dev/null
@@ -1,26 +0,0 @@
-
- * Name: string_format
- * Purpose: format strings via sprintf
- *
- * @link http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_string_format($params, $compiler)
-{
- return 'sprintf(' . $params[1] . ',' . $params[0] . ')';
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.strip_tags.php b/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.strip_tags.php
deleted file mode 100644
index 296a3a2..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.strip_tags.php
+++ /dev/null
@@ -1,33 +0,0 @@
-
- * Name: strip_tags
- * Purpose: strip html tags from text
- *
- * @link http://www.smarty.net/manual/en/language.modifier.strip.tags.php strip_tags (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_strip_tags($params, $compiler)
-{
- if (!isset($params[1])) {
- $params[1] = true;
- }
- if ($params[1] === true) {
- return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})";
- } else {
- return 'strip_tags(' . $params[0] . ')';
- }
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.unescape.php b/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.unescape.php
deleted file mode 100644
index 4321ff1..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.unescape.php
+++ /dev/null
@@ -1,51 +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, $compiler)
-{
- 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];
- }
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.upper.php b/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.upper.php
deleted file mode 100644
index f368e37..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.upper.php
+++ /dev/null
@@ -1,30 +0,0 @@
-
- * Name: lower
- * Purpose: convert string to uppercase
- *
- * @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual)
- * @author Uwe Tews
- * @param array $params parameters
- * @return string with compiled code
- */
-function smarty_modifiercompiler_upper($params, $compiler)
-{
- if (Smarty::$_MBSTRING) {
- return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')' ;
- }
- // no MBString fallback
- return 'strtoupper(' . $params[0] . ')';
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.wordwrap.php b/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.wordwrap.php
deleted file mode 100644
index f6845ad..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifiercompiler.wordwrap.php
+++ /dev/null
@@ -1,46 +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
- * @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->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] . ')';
-}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/outputfilter.trimwhitespace.php b/src/includes/Smarty-3.1.12/libs/plugins/outputfilter.trimwhitespace.php
deleted file mode 100644
index 87cf8c7..0000000
--- a/src/includes/Smarty-3.1.12/libs/plugins/outputfilter.trimwhitespace.php
+++ /dev/null
@@ -1,94 +0,0 @@
-.*?#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
- foreach ($matches as $match) {
- $store[] = $match[0][0];
- $_length = strlen($match[0][0]);
- $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
- $source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length);
-
- $_offset += $_length - strlen($replace);
- $_store++;
- }
- }
-
- // Strip all HTML-Comments
- // yes, even the ones in
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/block.textformat.php b/src/includes/smarty-3.1.48/libs/plugins/block.textformat.php
similarity index 66%
rename from src/includes/Smarty-3.1.12/libs/plugins/block.textformat.php
rename to src/includes/smarty-3.1.48/libs/plugins/block.textformat.php
index b22b104..5e49463 100644
--- a/src/includes/Smarty-3.1.12/libs/plugins/block.textformat.php
+++ b/src/includes/smarty-3.1.48/libs/plugins/block.textformat.php
@@ -2,42 +2,51 @@
/**
* Smarty plugin to format text blocks
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsBlock
*/
-
/**
* Smarty {textformat}{/textformat} block plugin
- *
- * Type: block function
- * Name: textformat
+ * Type: block function
+ * Name: textformat
* Purpose: format text a certain way with preset styles
- * or custom wrap/indent settings
+ * or custom wrap/indent settings
* Params:
- *
+ *
* - style - string (email)
* - indent - integer (0)
* - wrap - integer (80)
* - wrap_char - string ("\n")
* - indent_char - string (" ")
* - wrap_boundary - boolean (true)
- *
*
- * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat}
- * (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat}
+ * (Smarty online manual)
+ *
* @param array $params parameters
* @param string $content contents of the block
* @param Smarty_Internal_Template $template template object
* @param boolean &$repeat repeat flag
+ *
* @return string content re-formatted
* @author Monte Ohrt
+ * @throws \SmartyException
*/
-function smarty_block_textformat($params, $content, $template, &$repeat)
+function smarty_block_textformat($params, $content, Smarty_Internal_Template $template, &$repeat)
{
if (is_null($content)) {
return;
}
-
+ if (Smarty::$_MBSTRING) {
+ $template->_checkPlugins(
+ array(
+ array(
+ 'function' => 'smarty_modifier_mb_wordwrap',
+ 'file' => SMARTY_PLUGINS_DIR . 'modifier.mb_wordwrap.php'
+ )
+ )
+ );
+ }
$style = null;
$indent = 0;
$indent_first = 0;
@@ -46,7 +55,6 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
$wrap_char = "\n";
$wrap_cut = false;
$assign = null;
-
foreach ($params as $_key => $_val) {
switch ($_key) {
case 'style':
@@ -55,44 +63,47 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
case 'assign':
$$_key = (string)$_val;
break;
-
case 'indent':
case 'indent_first':
case 'wrap':
$$_key = (int)$_val;
break;
-
case 'wrap_cut':
$$_key = (bool)$_val;
break;
-
default:
- trigger_error("textformat: unknown attribute '$_key'");
+ trigger_error("textformat: unknown attribute '{$_key}'");
}
}
-
- if ($style == 'email') {
+ if ($style === 'email') {
$wrap = 72;
}
// split into paragraphs
$_paragraphs = preg_split('![\r\n]{2}!', $content);
- $_output = '';
-
-
foreach ($_paragraphs as &$_paragraph) {
if (!$_paragraph) {
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);
+ $_paragraph = smarty_modifier_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut);
} else {
$_paragraph = wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut);
}
@@ -102,12 +113,9 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
}
}
$_output = implode($wrap_char . $wrap_char, $_paragraphs);
-
if ($assign) {
$template->assign($assign, $_output);
} else {
return $_output;
}
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/smarty-3.1.48/libs/plugins/function.counter.php b/src/includes/smarty-3.1.48/libs/plugins/function.counter.php
new file mode 100644
index 0000000..a4129e7
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/plugins/function.counter.php
@@ -0,0 +1,62 @@
+
+ * @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/src/includes/smarty-3.1.48/libs/plugins/function.cycle.php b/src/includes/smarty-3.1.48/libs/plugins/function.cycle.php
new file mode 100644
index 0000000..07ffcc5
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/plugins/function.cycle.php
@@ -0,0 +1,92 @@
+
+ * @author credit to Mark Priatel
+ * @author credit to Gerard
+ * @author credit to Jason Sweat
+ * @version 1.3
+ *
+ * @param array $params parameters
+ * @param Smarty_Internal_Template $template template object
+ *
+ * @return string|null
+ */
+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;
+ 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;
+ }
+ $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 (is_array($cycle_vars[ $name ][ 'values' ])) {
+ $cycle_array = $cycle_vars[ $name ][ 'values' ];
+ } else {
+ $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($params[ 'assign' ])) {
+ $print = false;
+ $template->assign($params[ 'assign' ], $cycle_array[ $cycle_vars[ $name ][ 'index' ] ]);
+ }
+ if ($print) {
+ $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;
+ } else {
+ $cycle_vars[ $name ][ 'index' ]++;
+ }
+ }
+ return $retval;
+}
diff --git a/src/includes/smarty-3.1.48/libs/plugins/function.fetch.php b/src/includes/smarty-3.1.48/libs/plugins/function.fetch.php
new file mode 100644
index 0000000..768761b
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/plugins/function.fetch.php
@@ -0,0 +1,204 @@
+
+ *
+ * @param array $params parameters
+ * @param Smarty_Internal_Template $template template object
+ *
+ * @throws SmartyException
+ * @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable
+ */
+function smarty_function_fetch($params, $template)
+{
+ 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);
+ }
+ $protocol = strpos($params[ 'file' ], '://');
+ if ($protocol !== false) {
+ $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' ])) {
+ return;
+ }
+ } else {
+ // local file
+ if (!$template->smarty->security_policy->isTrustedResourceDir($params[ 'file' ])) {
+ return;
+ }
+ }
+ }
+ $content = '';
+ if ($protocol === 'http') {
+ // http fetch
+ if ($uri_parts = parse_url($params[ 'file' ])) {
+ // set defaults
+ $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' ] : '';
+ $_is_proxy = false;
+ if (empty($uri_parts[ 'port' ])) {
+ $port = 80;
+ } else {
+ $port = $uri_parts[ 'port' ];
+ }
+ if (!empty($uri_parts[ 'user' ])) {
+ $user = $uri_parts[ 'user' ];
+ }
+ if (!empty($uri_parts[ 'pass' ])) {
+ $pass = $uri_parts[ 'pass' ];
+ }
+ // loop through parameters, setup headers
+ foreach ($params as $param_key => $param_value) {
+ switch ($param_key) {
+ case 'file':
+ case 'assign':
+ case 'assign_headers':
+ break;
+ case 'user':
+ if (!empty($param_value)) {
+ $user = $param_value;
+ }
+ break;
+ case 'pass':
+ if (!empty($param_value)) {
+ $pass = $param_value;
+ }
+ break;
+ case 'accept':
+ if (!empty($param_value)) {
+ $accept = $param_value;
+ }
+ break;
+ case 'header':
+ if (!empty($param_value)) {
+ if (!preg_match('![\w\d-]+: .+!', $param_value)) {
+ trigger_error("[plugin] invalid header format '{$param_value}'", E_USER_NOTICE);
+ return;
+ } else {
+ $extra_headers[] = $param_value;
+ }
+ }
+ break;
+ case 'proxy_host':
+ if (!empty($param_value)) {
+ $proxy_host = $param_value;
+ }
+ break;
+ case 'proxy_port':
+ if (!preg_match('!\D!', $param_value)) {
+ $proxy_port = (int)$param_value;
+ } else {
+ trigger_error("[plugin] invalid value for attribute '{$param_key }'", E_USER_NOTICE);
+ return;
+ }
+ break;
+ case 'agent':
+ if (!empty($param_value)) {
+ $agent = $param_value;
+ }
+ break;
+ case 'referer':
+ if (!empty($param_value)) {
+ $referer = $param_value;
+ }
+ break;
+ case 'timeout':
+ if (!preg_match('!\D!', $param_value)) {
+ $timeout = (int)$param_value;
+ } else {
+ trigger_error("[plugin] invalid value for attribute '{$param_key}'", E_USER_NOTICE);
+ return;
+ }
+ break;
+ default:
+ trigger_error("[plugin] unrecognized attribute '{$param_key}'", E_USER_NOTICE);
+ return;
+ }
+ }
+ if (!empty($proxy_host) && !empty($proxy_port)) {
+ $_is_proxy = true;
+ $fp = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout);
+ } else {
+ $fp = fsockopen($server_name, $port, $errno, $errstr, $timeout);
+ }
+ if (!$fp) {
+ trigger_error("[plugin] unable to fetch: $errstr ($errno)", E_USER_NOTICE);
+ return;
+ } else {
+ if ($_is_proxy) {
+ fputs($fp, 'GET ' . $params[ 'file' ] . " HTTP/1.0\r\n");
+ } else {
+ fputs($fp, "GET $uri HTTP/1.0\r\n");
+ }
+ if (!empty($host)) {
+ fputs($fp, "Host: $host\r\n");
+ }
+ if (!empty($accept)) {
+ fputs($fp, "Accept: $accept\r\n");
+ }
+ if (!empty($agent)) {
+ fputs($fp, "User-Agent: $agent\r\n");
+ }
+ if (!empty($referer)) {
+ fputs($fp, "Referer: $referer\r\n");
+ }
+ if (isset($extra_headers) && is_array($extra_headers)) {
+ foreach ($extra_headers as $curr_header) {
+ fputs($fp, $curr_header . "\r\n");
+ }
+ }
+ if (!empty($user) && !empty($pass)) {
+ fputs($fp, 'Authorization: BASIC ' . base64_encode("$user:$pass") . "\r\n");
+ }
+ fputs($fp, "\r\n");
+ while (!feof($fp)) {
+ $content .= fgets($fp, 4096);
+ }
+ fclose($fp);
+ $csplit = preg_split("!\r\n\r\n!", $content, 2);
+ $content = $csplit[ 1 ];
+ if (!empty($params[ 'assign_headers' ])) {
+ $template->assign($params[ 'assign_headers' ], preg_split("!\r\n!", $csplit[ 0 ]));
+ }
+ }
+ } else {
+ trigger_error("[plugin fetch] unable to parse URL, check syntax", E_USER_NOTICE);
+ return;
+ }
+ } else {
+ $content = @file_get_contents($params[ 'file' ]);
+ if ($content === false) {
+ throw new SmartyException("{fetch} cannot read resource '" . $params[ 'file' ] . "'");
+ }
+ }
+ if (!empty($params[ 'assign' ])) {
+ $template->assign($params[ 'assign' ], $content);
+ } else {
+ return $content;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/plugins/function.html_checkboxes.php b/src/includes/smarty-3.1.48/libs/plugins/function.html_checkboxes.php
new file mode 100644
index 0000000..302358e
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/plugins/function.html_checkboxes.php
@@ -0,0 +1,286 @@
+' output=$names}
+ * {html_checkboxes values=$ids checked=$checked separator=' ' output=$names}
+ *
+ * Params:
+ *
+ * - name (optional) - string default "checkbox"
+ * - values (required) - array
+ * - options (optional) - associative array
+ * - checked (optional) - array default not set
+ * - separator (optional) - ie or
+ * - output (optional) - the output next to each checkbox
+ * - assign (optional) - assign the output as an array to this variable
+ * - escape (optional) - escape the content (not value), defaults to true
+ *
+ * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
+ * (Smarty online manual)
+ * @author Christopher Kvarme
+ * @author credits to Monte Ohrt
+ * @version 1.0
+ *
+ * @param array $params parameters
+ * @param Smarty_Internal_Template $template template object
+ *
+ * @return string
+ * @uses smarty_function_escape_special_chars()
+ * @throws \SmartyException
+ */
+function smarty_function_html_checkboxes($params, Smarty_Internal_Template $template)
+{
+ $template->_checkPlugins(
+ array(
+ array(
+ 'function' => 'smarty_function_escape_special_chars',
+ 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'
+ )
+ )
+ );
+ $name = 'checkbox';
+ $values = null;
+ $options = null;
+ $selected = array();
+ $separator = '';
+ $escape = true;
+ $labels = true;
+ $label_ids = false;
+ $output = null;
+ $extra = '';
+ foreach ($params as $_key => $_val) {
+ switch ($_key) {
+ case 'name':
+ case 'separator':
+ $$_key = (string)$_val;
+ break;
+ case 'escape':
+ case 'labels':
+ case 'label_ids':
+ $$_key = (bool)$_val;
+ break;
+ case 'options':
+ $$_key = (array)$_val;
+ break;
+ case 'values':
+ case 'output':
+ $$_key = array_values((array)$_val);
+ break;
+ case 'checked':
+ case 'selected':
+ if (is_array($_val)) {
+ $selected = array();
+ foreach ($_val as $_sel) {
+ if (is_object($_sel)) {
+ 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
+ );
+ continue;
+ }
+ } else {
+ $_sel = smarty_function_escape_special_chars((string)$_sel);
+ }
+ $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
+ );
+ }
+ } else {
+ $selected = smarty_function_escape_special_chars((string)$_val);
+ }
+ break;
+ case 'checkboxes':
+ trigger_error(
+ 'html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead',
+ E_USER_WARNING
+ );
+ $options = (array)$_val;
+ break;
+ case 'assign':
+ break;
+ case 'strict':
+ break;
+ case 'disabled':
+ case 'readonly':
+ 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
+ );
+ }
+ if ($_val === true || $_val === $_key) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
+ }
+ break;
+ }
+ // omit break; to fall through!
+ // no break
+ default:
+ if (!is_array($_val)) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
+ } else {
+ trigger_error("html_checkboxes: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
+ }
+ break;
+ }
+ }
+ if (!isset($options) && !isset($values)) {
+ return '';
+ } /* raise error here? */
+ $_html_result = array();
+ 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
+ );
+ }
+ } 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
+ );
+ }
+ }
+ if (!empty($params[ 'assign' ])) {
+ $template->assign($params[ 'assign' ], $_html_result);
+ } else {
+ return implode("\n", $_html_result);
+ }
+}
+
+/**
+ * @param $name
+ * @param $value
+ * @param $output
+ * @param $selected
+ * @param $extra
+ * @param $separator
+ * @param $labels
+ * @param $label_ids
+ * @param bool $escape
+ *
+ * @return string
+ */
+function smarty_function_html_checkboxes_output(
+ $name,
+ $value,
+ $output,
+ $selected,
+ $extra,
+ $separator,
+ $labels,
+ $label_ids,
+ $escape = true
+) {
+ $_output = '';
+ if (is_object($value)) {
+ 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
+ );
+ return '';
+ }
+ } else {
+ $value = (string)$value;
+ }
+ if (is_object($output)) {
+ 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
+ );
+ return '';
+ }
+ } else {
+ $output = (string)$output;
+ }
+ if ($labels) {
+ if ($label_ids) {
+ $_id = smarty_function_escape_special_chars(
+ preg_replace(
+ '![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER,
+ '_',
+ $name . '_' . $value
+ )
+ );
+ $_output .= '';
+ } else {
+ $_output .= '';
+ }
+ }
+ $name = smarty_function_escape_special_chars($name);
+ $value = smarty_function_escape_special_chars($value);
+ if ($escape) {
+ $output = smarty_function_escape_special_chars($output);
+ }
+ $_output .= ' ' . $output;
+ if ($labels) {
+ $_output .= ' ';
+ }
+ $_output .= $separator;
+ return $_output;
+}
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/function.html_image.php b/src/includes/smarty-3.1.48/libs/plugins/function.html_image.php
similarity index 50%
rename from src/includes/Smarty-3.1.12/libs/plugins/function.html_image.php
rename to src/includes/smarty-3.1.48/libs/plugins/function.html_image.php
index 6521966..ad468e4 100644
--- a/src/includes/Smarty-3.1.12/libs/plugins/function.html_image.php
+++ b/src/includes/smarty-3.1.48/libs/plugins/function.html_image.php
@@ -1,43 +1,49 @@
- * Name: html_image
- * Date: Feb 24, 2003
- * Purpose: format HTML tags for the image
- * Examples: {html_image file="/images/masthead.gif"}
- * Output:
+ * Type: function
+ * Name: html_image
+ * Date: Feb 24, 2003
+ * Purpose: format HTML tags for the image
+ * Examples: {html_image file="/images/masthead.gif"}
+ * Output:
* Params:
- *
+ *
* - file - (required) - file (and path) of image
* - height - (optional) - image height (default actual height)
* - width - (optional) - image width (default actual width)
* - basedir - (optional) - base directory for absolute paths, default is environment variable DOCUMENT_ROOT
* - path_prefix - prefix for path output (optional, default empty)
- *
- *
- * @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image}
- * (Smarty online manual)
- * @author Monte Ohrt
- * @author credits to Duda
+ *
+ * @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image}
+ * (Smarty online manual)
+ * @author Monte Ohrt
+ * @author credits to Duda
* @version 1.0
+ *
* @param array $params parameters
* @param Smarty_Internal_Template $template template object
- * @return string
- * @uses smarty_function_escape_special_chars()
+ *
+ * @throws SmartyException
+ * @return string
+ * @uses smarty_function_escape_special_chars()
*/
-function smarty_function_html_image($params, $template)
+function smarty_function_html_image($params, Smarty_Internal_Template $template)
{
- require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
-
+ $template->_checkPlugins(
+ array(
+ array(
+ 'function' => 'smarty_function_escape_special_chars',
+ 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'
+ )
+ )
+ );
$alt = '';
$file = '';
$height = '';
@@ -46,8 +52,8 @@ function smarty_function_html_image($params, $template)
$prefix = '';
$suffix = '';
$path_prefix = '';
- $basedir = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : '';
- foreach($params as $_key => $_val) {
+ $basedir = isset($_SERVER[ 'DOCUMENT_ROOT' ]) ? $_SERVER[ 'DOCUMENT_ROOT' ] : '';
+ foreach ($params as $_key => $_val) {
switch ($_key) {
case 'file':
case 'height':
@@ -57,103 +63,96 @@ function smarty_function_html_image($params, $template)
case 'basedir':
$$_key = $_val;
break;
-
case 'alt':
if (!is_array($_val)) {
$$_key = smarty_function_escape_special_chars($_val);
} else {
- throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
+ throw new SmartyException(
+ "html_image: extra attribute '{$_key}' cannot be an array",
+ E_USER_NOTICE
+ );
+ }
break;
-
case 'link':
case 'href':
$prefix = '';
$suffix = ' ';
break;
-
default:
if (!is_array($_val)) {
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else {
- throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
+ throw new SmartyException(
+ "html_image: extra attribute '{$_key}' cannot be an array",
+ E_USER_NOTICE
+ );
+ }
break;
- }
- }
-
+ }
+ }
if (empty($file)) {
- trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE);
+ trigger_error('html_image: missing \'file\' parameter', E_USER_NOTICE);
return;
- }
-
- if ($file[0] == '/') {
+ }
+ if ($file[ 0 ] === '/') {
$_image_path = $basedir . $file;
} else {
$_image_path = $file;
}
-
// 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($_image_path)) {
return;
}
}
}
-
- if (!isset($params['width']) || !isset($params['height'])) {
+ if (!isset($params[ 'width' ]) || !isset($params[ 'height' ])) {
// FIXME: (rodneyrehm) getimagesize() loads the complete file off a remote resource, use custom [jpg,png,gif]header reader!
if (!$_image_data = @getimagesize($_image_path)) {
if (!file_exists($_image_path)) {
- trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE);
+ trigger_error("html_image: unable to find '{$_image_path}'", E_USER_NOTICE);
return;
- } else if (!is_readable($_image_path)) {
- trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE);
+ } elseif (!is_readable($_image_path)) {
+ trigger_error("html_image: unable to read '{$_image_path}'", E_USER_NOTICE);
return;
} else {
- trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE);
+ trigger_error("html_image: '{$_image_path}' is not a valid image file", E_USER_NOTICE);
return;
- }
+ }
}
-
- if (!isset($params['width'])) {
- $width = $_image_data[0];
- }
- if (!isset($params['height'])) {
- $height = $_image_data[1];
- }
- }
-
- if (isset($params['dpi'])) {
- if (strstr($_SERVER['HTTP_USER_AGENT'], 'Mac')) {
+ if (!isset($params[ 'width' ])) {
+ $width = $_image_data[ 0 ];
+ }
+ if (!isset($params[ 'height' ])) {
+ $height = $_image_data[ 1 ];
+ }
+ }
+ if (isset($params[ 'dpi' ])) {
+ if (strstr($_SERVER[ 'HTTP_USER_AGENT' ], 'Mac')) {
// FIXME: (rodneyrehm) wrong dpi assumption
// don't know who thought this up… even if it was true in 1998, it's definitely wrong in 2011.
$dpi_default = 72;
} else {
$dpi_default = 96;
- }
- $_resize = $dpi_default / $params['dpi'];
+ }
+ $_resize = $dpi_default / $params[ 'dpi' ];
$width = round($width * $_resize);
$height = round($height * $_resize);
- }
-
- return $prefix . ' ' . $suffix;
-}
-
-?>
\ No newline at end of file
+ }
+ return $prefix . ' ' . $suffix;
+}
diff --git a/src/includes/smarty-3.1.48/libs/plugins/function.html_options.php b/src/includes/smarty-3.1.48/libs/plugins/function.html_options.php
new file mode 100644
index 0000000..6907e8e
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/plugins/function.html_options.php
@@ -0,0 +1,230 @@
+ tags generated from
+ * the passed parameters
+ * Params:
+ *
+ * - name (optional) - string default "select"
+ * - values (required) - if no options supplied) - array
+ * - options (required) - if no values supplied) - associative array
+ * - selected (optional) - string default not set
+ * - output (required) - if not options supplied) - array
+ * - id (optional) - string default not set
+ * - class (optional) - string default not set
+ *
+ * @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image}
+ * (Smarty online manual)
+ * @author Monte Ohrt
+ * @author Ralf Strehle (minor optimization)
+ *
+ * @param array $params parameters
+ *
+ * @param \Smarty_Internal_Template $template
+ *
+ * @return string
+ * @uses smarty_function_escape_special_chars()
+ * @throws \SmartyException
+ */
+function smarty_function_html_options($params, Smarty_Internal_Template $template)
+{
+ $template->_checkPlugins(
+ array(
+ array(
+ 'function' => 'smarty_function_escape_special_chars',
+ 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'
+ )
+ )
+ );
+ $name = null;
+ $values = null;
+ $options = null;
+ $selected = null;
+ $output = null;
+ $id = null;
+ $class = null;
+ $extra = '';
+ foreach ($params as $_key => $_val) {
+ switch ($_key) {
+ case 'name':
+ case 'class':
+ case 'id':
+ $$_key = (string)$_val;
+ break;
+ case 'options':
+ $options = (array)$_val;
+ break;
+ case 'values':
+ case 'output':
+ $$_key = array_values((array)$_val);
+ break;
+ case 'selected':
+ if (is_array($_val)) {
+ $selected = array();
+ foreach ($_val as $_sel) {
+ if (is_object($_sel)) {
+ if (method_exists($_sel, '__toString')) {
+ $_sel = smarty_function_escape_special_chars((string)$_sel->__toString());
+ } else {
+ trigger_error(
+ 'html_options: 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;
+ }
+ } elseif (is_object($_val)) {
+ if (method_exists($_val, '__toString')) {
+ $selected = smarty_function_escape_special_chars((string)$_val->__toString());
+ } else {
+ trigger_error(
+ 'html_options: 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);
+ }
+ break;
+ case 'strict':
+ break;
+ case 'disabled':
+ case 'readonly':
+ 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
+ );
+ }
+ if ($_val === true || $_val === $_key) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
+ }
+ break;
+ }
+ // omit break; to fall through!
+ // no break
+ default:
+ if (!is_array($_val)) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
+ } else {
+ trigger_error("html_options: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
+ }
+ break;
+ }
+ }
+ if (!isset($options) && !isset($values)) {
+ /* raise error here? */
+ return '';
+ }
+ $_html_result = '';
+ $_idx = 0;
+ if (isset($options)) {
+ foreach ($options as $_key => $_val) {
+ $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx);
+ }
+ } else {
+ foreach ($values as $_i => $_key) {
+ $_val = isset($output[ $_i ]) ? $output[ $_i ] : '';
+ $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx);
+ }
+ }
+ if (!empty($name)) {
+ $_html_class = !empty($class) ? ' class="' . $class . '"' : '';
+ $_html_id = !empty($id) ? ' id="' . $id . '"' : '';
+ $_html_result =
+ '' . "\n" . $_html_result .
+ ' ' . "\n";
+ }
+ return $_html_result;
+}
+
+/**
+ * @param $key
+ * @param $value
+ * @param $selected
+ * @param $id
+ * @param $class
+ * @param $idx
+ *
+ * @return string
+ */
+function smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, &$idx)
+{
+ if (!is_array($value)) {
+ $_key = smarty_function_escape_special_chars($key);
+ $_html_result = '__toString());
+ } else {
+ trigger_error(
+ 'html_options: value is an object of class \'' . get_class($value) .
+ '\' without __toString() method',
+ E_USER_NOTICE
+ );
+ return '';
+ }
+ } else {
+ $value = smarty_function_escape_special_chars((string)$value);
+ }
+ $_html_result .= $_html_class . $_html_id . '>' . $value . ' ' . "\n";
+ $idx++;
+ } else {
+ $_idx = 0;
+ $_html_result =
+ smarty_function_html_options_optgroup(
+ $key,
+ $value,
+ $selected,
+ !empty($id) ? ($id . '-' . $idx) : null,
+ $class,
+ $_idx
+ );
+ $idx++;
+ }
+ return $_html_result;
+}
+
+/**
+ * @param $key
+ * @param $values
+ * @param $selected
+ * @param $id
+ * @param $class
+ * @param $idx
+ *
+ * @return string
+ */
+function smarty_function_html_options_optgroup($key, $values, $selected, $id, $class, &$idx)
+{
+ $optgroup_html = '' . "\n";
+ foreach ($values as $key => $value) {
+ $optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, $idx);
+ }
+ $optgroup_html .= " \n";
+ return $optgroup_html;
+}
diff --git a/src/includes/smarty-3.1.48/libs/plugins/function.html_radios.php b/src/includes/smarty-3.1.48/libs/plugins/function.html_radios.php
new file mode 100644
index 0000000..5e83458
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/plugins/function.html_radios.php
@@ -0,0 +1,266 @@
+ or
+ * - output (optional) - the output next to each radio button
+ * - assign (optional) - assign the output as an array to this variable
+ * - escape (optional) - escape the content (not value), defaults to true
+ *
+ * Examples:
+ *
+ * {html_radios values=$ids output=$names}
+ * {html_radios values=$ids name='box' separator=' ' output=$names}
+ * {html_radios values=$ids checked=$checked separator=' ' output=$names}
+ *
+ * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
+ * (Smarty online manual)
+ * @author Christopher Kvarme
+ * @author credits to Monte Ohrt
+ * @version 1.0
+ *
+ * @param array $params parameters
+ * @param Smarty_Internal_Template $template template object
+ *
+ * @return string
+ * @uses smarty_function_escape_special_chars()
+ * @throws \SmartyException
+ */
+function smarty_function_html_radios($params, Smarty_Internal_Template $template)
+{
+ $template->_checkPlugins(
+ array(
+ array(
+ 'function' => 'smarty_function_escape_special_chars',
+ 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'
+ )
+ )
+ );
+ $name = 'radio';
+ $values = null;
+ $options = null;
+ $selected = null;
+ $separator = '';
+ $escape = true;
+ $labels = true;
+ $label_ids = false;
+ $output = null;
+ $extra = '';
+ foreach ($params as $_key => $_val) {
+ switch ($_key) {
+ case 'name':
+ case 'separator':
+ $$_key = (string)$_val;
+ break;
+ case 'checked':
+ case 'selected':
+ if (is_array($_val)) {
+ trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING);
+ } elseif (is_object($_val)) {
+ if (method_exists($_val, '__toString')) {
+ $selected = smarty_function_escape_special_chars((string)$_val->__toString());
+ } else {
+ trigger_error(
+ 'html_radios: selected attribute is an object of class \'' . get_class($_val) .
+ '\' without __toString() method',
+ E_USER_NOTICE
+ );
+ }
+ } else {
+ $selected = (string)$_val;
+ }
+ break;
+ case 'escape':
+ case 'labels':
+ case 'label_ids':
+ $$_key = (bool)$_val;
+ break;
+ case 'options':
+ $$_key = (array)$_val;
+ break;
+ case 'values':
+ case 'output':
+ $$_key = array_values((array)$_val);
+ break;
+ case 'radios':
+ trigger_error(
+ 'html_radios: the use of the "radios" attribute is deprecated, use "options" instead',
+ E_USER_WARNING
+ );
+ $options = (array)$_val;
+ break;
+ case 'assign':
+ break;
+ case 'strict':
+ break;
+ case 'disabled':
+ case 'readonly':
+ 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
+ );
+ }
+ if ($_val === true || $_val === $_key) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
+ }
+ break;
+ }
+ // omit break; to fall through!
+ // no break
+ default:
+ if (!is_array($_val)) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
+ } else {
+ trigger_error("html_radios: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
+ }
+ break;
+ }
+ }
+ if (!isset($options) && !isset($values)) {
+ /* raise error here? */
+ return '';
+ }
+ $_html_result = array();
+ if (isset($options)) {
+ foreach ($options as $_key => $_val) {
+ $_html_result[] =
+ smarty_function_html_radios_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_radios_output(
+ $name,
+ $_key,
+ $_val,
+ $selected,
+ $extra,
+ $separator,
+ $labels,
+ $label_ids,
+ $escape
+ );
+ }
+ }
+ if (!empty($params[ 'assign' ])) {
+ $template->assign($params[ 'assign' ], $_html_result);
+ } else {
+ return implode("\n", $_html_result);
+ }
+}
+
+/**
+ * @param $name
+ * @param $value
+ * @param $output
+ * @param $selected
+ * @param $extra
+ * @param $separator
+ * @param $labels
+ * @param $label_ids
+ * @param $escape
+ *
+ * @return string
+ */
+function smarty_function_html_radios_output(
+ $name,
+ $value,
+ $output,
+ $selected,
+ $extra,
+ $separator,
+ $labels,
+ $label_ids,
+ $escape
+) {
+ $_output = '';
+ if (is_object($value)) {
+ 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
+ );
+ return '';
+ }
+ } else {
+ $value = (string)$value;
+ }
+ if (is_object($output)) {
+ 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
+ );
+ return '';
+ }
+ } else {
+ $output = (string)$output;
+ }
+ if ($labels) {
+ if ($label_ids) {
+ $_id = smarty_function_escape_special_chars(
+ preg_replace(
+ '![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER,
+ '_',
+ $name . '_' . $value
+ )
+ );
+ $_output .= '';
+ } else {
+ $_output .= '';
+ }
+ }
+ $name = smarty_function_escape_special_chars($name);
+ $value = smarty_function_escape_special_chars($value);
+ if ($escape) {
+ $output = smarty_function_escape_special_chars($output);
+ }
+ $_output .= ' ' . $output;
+ if ($labels) {
+ $_output .= ' ';
+ }
+ $_output .= $separator;
+ return $_output;
+}
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/function.html_select_date.php b/src/includes/smarty-3.1.48/libs/plugins/function.html_select_date.php
similarity index 60%
rename from src/includes/Smarty-3.1.12/libs/plugins/function.html_select_date.php
rename to src/includes/smarty-3.1.48/libs/plugins/function.html_select_date.php
index 13c5003..0791f1a 100644
--- a/src/includes/Smarty-3.1.12/libs/plugins/function.html_select_date.php
+++ b/src/includes/smarty-3.1.48/libs/plugins/function.html_select_date.php
@@ -1,29 +1,17 @@
- * Name: html_select_date
+ * Type: function
+ * Name: html_select_date
* Purpose: Prints the dropdowns for date selection.
- *
* ChangeLog:
- *
+ *
* - 1.0 initial release
* - 1.1 added support for +/- N syntax for begin
* and end year values. (Monte)
@@ -37,22 +25,33 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
* dropdown to include given date unless explicitly set (Monte)
* - 1.3.4 fix behaviour of 0000-00-00 00:00:00 dates to match that
* of 0000-00-00 dates (cybot, boots)
- * - 2.0 complete rewrite for performance,
+ * - 2.0 complete rewrite for performance,
* added attributes month_names, *_id
- *
- *
- * @link http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date}
- * (Smarty online manual)
+ *
+ * @link http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date}
+ * (Smarty online manual)
* @version 2.0
- * @author Andrei Zmievski
- * @author Monte Ohrt
- * @author Rodney Rehm
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
- * @return string
+ * @author Andrei Zmievski
+ * @author Monte Ohrt
+ * @author Rodney Rehm
+ *
+ * @param array $params parameters
+ *
+ * @param \Smarty_Internal_Template $template
+ *
+ * @return string
+ * @throws \SmartyException
*/
-function smarty_function_html_select_date($params, $template)
+function smarty_function_html_select_date($params, Smarty_Internal_Template $template)
{
+ $template->_checkPlugins(
+ array(
+ array(
+ 'function' => 'smarty_function_escape_special_chars',
+ 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'
+ )
+ )
+ );
// generate timestamps used for month names only
static $_month_timestamps = null;
static $_current_year = null;
@@ -60,23 +59,22 @@ function smarty_function_html_select_date($params, $template)
$_current_year = date('Y');
$_month_timestamps = array();
for ($i = 1; $i <= 12; $i++) {
- $_month_timestamps[$i] = mktime(0, 0, 0, $i, 1, 2000);
+ $_month_timestamps[ $i ] = mktime(0, 0, 0, $i, 1, 2000);
}
}
-
/* Default values. */
- $prefix = "Date_";
+ $prefix = 'Date_';
$start_year = null;
$end_year = null;
$display_days = true;
$display_months = true;
$display_years = true;
- $month_format = "%B";
+ $month_format = '%B';
/* Write months as numbers by default GL */
- $month_value_format = "%m";
- $day_format = "%02d";
+ $month_value_format = '%m';
+ $day_format = '%02d';
/* Write day values using this format MB */
- $day_value_format = "%d";
+ $day_value_format = '%d';
$year_as_text = false;
/* Display years in reverse order? Ie. 2000,1999,.... */
$reverse_years = false;
@@ -103,6 +101,7 @@ function smarty_function_html_select_date($params, $template)
$field_separator = "\n";
$option_separator = "\n";
$time = null;
+
// $all_empty = null;
// $day_empty = null;
// $month_empty = null;
@@ -112,23 +111,18 @@ function smarty_function_html_select_date($params, $template)
$day_id = null;
$month_id = null;
$year_id = null;
-
foreach ($params as $_key => $_value) {
switch ($_key) {
case 'time':
- if (!is_array($_value) && $_value !== null) {
- $time = smarty_make_timestamp($_value);
- }
+ $$_key = $_value; // we'll handle conversion below
break;
-
case 'month_names':
- if (is_array($_value) && count($_value) == 12) {
+ if (is_array($_value) && count($_value) === 12) {
$$_key = $_value;
} else {
- trigger_error("html_select_date: month_names must be an array of 12 strings", E_USER_NOTICE);
+ trigger_error('html_select_date: month_names must be an array of 12 strings', E_USER_NOTICE);
}
break;
-
case 'prefix':
case 'field_array':
case 'start_year':
@@ -157,7 +151,6 @@ function smarty_function_html_select_date($params, $template)
case 'year_id':
$$_key = (string)$_value;
break;
-
case 'display_days':
case 'display_months':
case 'display_years':
@@ -165,198 +158,210 @@ function smarty_function_html_select_date($params, $template)
case 'reverse_years':
$$_key = (bool)$_value;
break;
-
default:
if (!is_array($_value)) {
$extra_attrs .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_value) . '"';
} else {
- trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
- }
+ trigger_error("html_select_date: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
+ }
break;
- }
+ }
}
-
// Note: date() is faster than strftime()
// Note: explode(date()) is faster than date() date() date()
- if (isset($params['time']) && is_array($params['time'])) {
- if (isset($params['time'][$prefix . 'Year'])) {
+
+ if (isset($time) && is_array($time)) {
+ if (isset($time[$prefix . 'Year'])) {
// $_REQUEST[$field_array] given
- foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
+ foreach (array(
+ 'Y' => 'Year',
+ 'm' => 'Month',
+ 'd' => 'Day'
+ ) as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName);
- $$_variableName = isset($params['time'][$prefix . $_elementName])
- ? $params['time'][$prefix . $_elementName]
- : date($_elementKey);
+ $$_variableName =
+ isset($time[$prefix . $_elementName]) ? $time[$prefix . $_elementName] :
+ date($_elementKey);
}
- $time = mktime(0, 0, 0, $_month, $_day, $_year);
- } elseif (isset($params['time'][$field_array][$prefix . 'Year'])) {
+ } elseif (isset($time[$field_array][$prefix . 'Year'])) {
// $_REQUEST given
- foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
+ foreach (array(
+ 'Y' => 'Year',
+ 'm' => 'Month',
+ 'd' => 'Day'
+ ) as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName);
- $$_variableName = isset($params['time'][$field_array][$prefix . $_elementName])
- ? $params['time'][$field_array][$prefix . $_elementName]
- : date($_elementKey);
+ $$_variableName = isset($time[$field_array][$prefix . $_elementName]) ?
+ $time[$field_array][$prefix . $_elementName] : date($_elementKey);
}
- $time = mktime(0, 0, 0, $_month, $_day, $_year);
} else {
// no date found, use NOW
- list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d'));
+ list($_year, $_month, $_day) = explode('-', date('Y-m-d'));
}
+ } elseif (isset($time) && preg_match("/(\d*)-(\d*)-(\d*)/", $time, $matches)) {
+ $_year = $_month = $_day = null;
+ if ($matches[1] > '') $_year = (int) $matches[1];
+ if ($matches[2] > '') $_month = (int) $matches[2];
+ if ($matches[3] > '') $_day = (int) $matches[3];
} elseif ($time === null) {
if (array_key_exists('time', $params)) {
- $_year = $_month = $_day = $time = null;
+ $_year = $_month = $_day = null;
} else {
- list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d'));
+ list($_year, $_month, $_day) = explode('-', date('Y-m-d'));
}
} else {
- list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d', $time));
+ $template->_checkPlugins(
+ array(
+ array(
+ 'function' => 'smarty_make_timestamp',
+ 'file' => SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'
+ )
+ )
+ );
+ $time = smarty_make_timestamp($time);
+ list($_year, $_month, $_day) = explode('-', date('Y-m-d', $time));
}
// make syntax "+N" or "-N" work with $start_year and $end_year
// Note preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match) is slower than trim+substr
- foreach (array('start', 'end') as $key) {
+ foreach (array(
+ 'start',
+ 'end'
+ ) as $key) {
$key .= '_year';
$t = $$key;
if ($t === null) {
$$key = (int)$_current_year;
- } else if ($t[0] == '+') {
- $$key = (int)($_current_year + trim(substr($t, 1)));
- } else if ($t[0] == '-') {
- $$key = (int)($_current_year - trim(substr($t, 1)));
+ } elseif ($t[ 0 ] === '+') {
+ $$key = (int)($_current_year + (int)trim(substr($t, 1)));
+ } elseif ($t[ 0 ] === '-') {
+ $$key = (int)($_current_year - (int)trim(substr($t, 1)));
} else {
$$key = (int)$$key;
}
}
-
// flip for ascending or descending
if (($start_year > $end_year && !$reverse_years) || ($start_year < $end_year && $reverse_years)) {
$t = $end_year;
$end_year = $start_year;
$start_year = $t;
}
-
// generate year or
if ($display_years) {
- $_html_years = '';
$_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Year]') : ($prefix . 'Year');
if ($all_extra) {
$_extra .= ' ' . $all_extra;
- }
+ }
if ($year_extra) {
$_extra .= ' ' . $year_extra;
}
-
if ($year_as_text) {
- $_html_years = ' ';
+ $_html_years =
+ ' ';
} else {
$_html_years = '' . $option_separator;
-
if (isset($year_empty) || isset($all_empty)) {
- $_html_years .= '' . ( isset($year_empty) ? $year_empty : $all_empty ) . ' ' . $option_separator;
+ $_html_years .= '' . (isset($year_empty) ? $year_empty : $all_empty) . ' ' .
+ $option_separator;
}
-
$op = $start_year > $end_year ? -1 : 1;
- for ($i=$start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) {
- $_html_years .= '' . $i . ' ' . $option_separator;
+ for ($i = $start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) {
+ $_html_years .= '' . $i .
+ ' ' . $option_separator;
}
-
$_html_years .= ' ';
}
}
-
// generate month or
if ($display_months) {
- $_html_month = '';
$_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Month]') : ($prefix . 'Month');
if ($all_extra) {
$_extra .= ' ' . $all_extra;
- }
+ }
if ($month_extra) {
$_extra .= ' ' . $month_extra;
}
-
$_html_months = '' . $option_separator;
-
- if (isset($month_empty) || isset($all_empty)) {
- $_html_months .= '' . ( isset($month_empty) ? $month_empty : $all_empty ) . ' ' . $option_separator;
}
-
+ $_html_months .= $_extra . $extra_attrs . '>' . $option_separator;
+ if (isset($month_empty) || isset($all_empty)) {
+ $_html_months .= '' . (isset($month_empty) ? $month_empty : $all_empty) . ' ' .
+ $option_separator;
+ }
for ($i = 1; $i <= 12; $i++) {
$_val = sprintf('%02d', $i);
- $_text = isset($month_names) ? smarty_function_escape_special_chars($month_names[$i]) : ($month_format == "%m" ? $_val : strftime($month_format, $_month_timestamps[$i]));
- $_value = $month_value_format == "%m" ? $_val : strftime($month_value_format, $_month_timestamps[$i]);
- $_html_months .= '' . $_text . ' ' . $option_separator;
+ $_text = isset($month_names) ? smarty_function_escape_special_chars($month_names[ $i ]) :
+ ($month_format === '%m' ? $_val : strftime($month_format, $_month_timestamps[ $i ]));
+ $_value = $month_value_format === '%m' ? $_val : strftime($month_value_format, $_month_timestamps[ $i ]);
+ $_html_months .= '' . $_text . ' ' . $option_separator;
}
-
$_html_months .= ' ';
}
-
// generate day or
if ($display_days) {
- $_html_day = '';
$_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Day]') : ($prefix . 'Day');
if ($all_extra) {
$_extra .= ' ' . $all_extra;
- }
+ }
if ($day_extra) {
$_extra .= ' ' . $day_extra;
}
-
$_html_days = '' . $option_separator;
-
- if (isset($day_empty) || isset($all_empty)) {
- $_html_days .= '' . ( isset($day_empty) ? $day_empty : $all_empty ) . ' ' . $option_separator;
}
-
+ $_html_days .= $_extra . $extra_attrs . '>' . $option_separator;
+ if (isset($day_empty) || isset($all_empty)) {
+ $_html_days .= '' . (isset($day_empty) ? $day_empty : $all_empty) . ' ' .
+ $option_separator;
+ }
for ($i = 1; $i <= 31; $i++) {
$_val = sprintf('%02d', $i);
- $_text = $day_format == '%02d' ? $_val : sprintf($day_format, $i);
- $_value = $day_value_format == '%02d' ? $_val : sprintf($day_value_format, $i);
- $_html_days .= '' . $_text . ' ' . $option_separator;
+ $_text = $day_format === '%02d' ? $_val : sprintf($day_format, $i);
+ $_value = $day_value_format === '%02d' ? $_val : sprintf($day_value_format, $i);
+ $_html_days .= '' .
+ $_text . ' ' . $option_separator;
}
-
$_html_days .= ' ';
}
-
// order the fields for output
$_html = '';
- for ($i=0; $i <= 2; $i++) {
- switch ($field_order[$i]) {
+ for ($i = 0; $i <= 2; $i++) {
+ switch ($field_order[ $i ]) {
case 'Y':
case 'y':
if (isset($_html_years)) {
@@ -365,8 +370,7 @@ function smarty_function_html_select_date($params, $template)
}
$_html .= $_html_years;
}
- break;
-
+ break;
case 'm':
case 'M':
if (isset($_html_months)) {
@@ -375,8 +379,7 @@ function smarty_function_html_select_date($params, $template)
}
$_html .= $_html_months;
}
- break;
-
+ break;
case 'd':
case 'D':
if (isset($_html_days)) {
@@ -385,10 +388,8 @@ function smarty_function_html_select_date($params, $template)
}
$_html .= $_html_days;
}
- break;
+ break;
}
}
return $_html;
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/function.html_select_time.php b/src/includes/smarty-3.1.48/libs/plugins/function.html_select_time.php
similarity index 57%
rename from src/includes/Smarty-3.1.12/libs/plugins/function.html_select_time.php
rename to src/includes/smarty-3.1.48/libs/plugins/function.html_select_time.php
index 9fb8038..cb047bc 100644
--- a/src/includes/Smarty-3.1.12/libs/plugins/function.html_select_time.php
+++ b/src/includes/smarty-3.1.48/libs/plugins/function.html_select_time.php
@@ -2,115 +2,110 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
-
-/**
- * @ignore
- */
-require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
-/**
- * @ignore
- */
-require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
-
/**
* Smarty {html_select_time} function plugin
- *
- * Type: function
- * Name: html_select_time
+ * Type: function
+ * Name: html_select_time
* Purpose: Prints the dropdowns for time selection
*
- * @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time}
- * (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time}
+ * (Smarty online manual)
* @author Roberto Berto
* @author Monte Ohrt
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
+ *
+ * @param array $params parameters
+ *
+ * @param \Smarty_Internal_Template $template
+ *
* @return string
- * @uses smarty_make_timestamp()
+ * @uses smarty_make_timestamp()
+ * @throws \SmartyException
*/
-function smarty_function_html_select_time($params, $template)
+function smarty_function_html_select_time($params, Smarty_Internal_Template $template)
{
- $prefix = "Time_";
+ $template->_checkPlugins(
+ array(
+ array(
+ 'function' => 'smarty_function_escape_special_chars',
+ 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'
+ )
+ )
+ );
+ $prefix = 'Time_';
$field_array = null;
$field_separator = "\n";
$option_separator = "\n";
$time = null;
-
$display_hours = true;
$display_minutes = true;
$display_seconds = true;
$display_meridian = true;
-
$hour_format = '%02d';
$hour_value_format = '%02d';
$minute_format = '%02d';
$minute_value_format = '%02d';
$second_format = '%02d';
$second_value_format = '%02d';
-
$hour_size = null;
$minute_size = null;
$second_size = null;
$meridian_size = null;
-
$all_empty = null;
$hour_empty = null;
$minute_empty = null;
$second_empty = null;
$meridian_empty = null;
-
$all_id = null;
$hour_id = null;
$minute_id = null;
$second_id = null;
$meridian_id = null;
-
$use_24_hours = true;
$minute_interval = 1;
$second_interval = 1;
-
$extra_attrs = '';
$all_extra = null;
$hour_extra = null;
$minute_extra = null;
$second_extra = null;
$meridian_extra = null;
-
foreach ($params as $_key => $_value) {
switch ($_key) {
case 'time':
if (!is_array($_value) && $_value !== null) {
+ $template->_checkPlugins(
+ array(
+ array(
+ 'function' => 'smarty_make_timestamp',
+ 'file' => SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'
+ )
+ )
+ );
$time = smarty_make_timestamp($_value);
}
break;
-
case 'prefix':
case 'field_array':
-
case 'field_separator':
case 'option_separator':
-
case 'all_extra':
case 'hour_extra':
case 'minute_extra':
case 'second_extra':
case 'meridian_extra':
-
case 'all_empty':
case 'hour_empty':
case 'minute_empty':
case 'second_empty':
case 'meridian_empty':
-
case 'all_id':
case 'hour_id':
case 'minute_id':
case 'second_id':
case 'meridian_id':
-
case 'hour_format':
case 'hour_value_format':
case 'minute_format':
@@ -119,7 +114,6 @@ function smarty_function_html_select_time($params, $template)
case 'second_value_format':
$$_key = (string)$_value;
break;
-
case 'display_hours':
case 'display_minutes':
case 'display_seconds':
@@ -127,53 +121,55 @@ function smarty_function_html_select_time($params, $template)
case 'use_24_hours':
$$_key = (bool)$_value;
break;
-
case 'minute_interval':
case 'second_interval':
-
case 'hour_size':
case 'minute_size':
case 'second_size':
case 'meridian_size':
$$_key = (int)$_value;
break;
-
default:
if (!is_array($_value)) {
$extra_attrs .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_value) . '"';
} else {
- trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
+ trigger_error("html_select_date: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
}
break;
}
}
-
- if (isset($params['time']) && is_array($params['time'])) {
- if (isset($params['time'][$prefix . 'Hour'])) {
+ if (isset($params[ 'time' ]) && is_array($params[ 'time' ])) {
+ if (isset($params[ 'time' ][ $prefix . 'Hour' ])) {
// $_REQUEST[$field_array] given
- foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
+ foreach (array(
+ 'H' => 'Hour',
+ 'i' => 'Minute',
+ 's' => 'Second'
+ ) as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName);
- $$_variableName = isset($params['time'][$prefix . $_elementName])
- ? $params['time'][$prefix . $_elementName]
- : date($_elementKey);
+ $$_variableName =
+ isset($params[ 'time' ][ $prefix . $_elementName ]) ? $params[ 'time' ][ $prefix . $_elementName ] :
+ date($_elementKey);
}
- $_meridian = isset($params['time'][$prefix . 'Meridian'])
- ? (' ' . $params['time'][$prefix . 'Meridian'])
- : '';
- $time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian );
+ $_meridian =
+ isset($params[ 'time' ][ $prefix . 'Meridian' ]) ? (' ' . $params[ 'time' ][ $prefix . 'Meridian' ]) :
+ '';
+ $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
- } elseif (isset($params['time'][$field_array][$prefix . 'Hour'])) {
+ } elseif (isset($params[ 'time' ][ $field_array ][ $prefix . 'Hour' ])) {
// $_REQUEST given
- foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
+ foreach (array(
+ 'H' => 'Hour',
+ 'i' => 'Minute',
+ 's' => 'Second'
+ ) as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName);
- $$_variableName = isset($params['time'][$field_array][$prefix . $_elementName])
- ? $params['time'][$field_array][$prefix . $_elementName]
- : date($_elementKey);
+ $$_variableName = isset($params[ 'time' ][ $field_array ][ $prefix . $_elementName ]) ?
+ $params[ 'time' ][ $field_array ][ $prefix . $_elementName ] : date($_elementKey);
}
- $_meridian = isset($params['time'][$field_array][$prefix . 'Meridian'])
- ? (' ' . $params['time'][$field_array][$prefix . 'Meridian'])
- : '';
- $time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian );
+ $_meridian = isset($params[ 'time' ][ $field_array ][ $prefix . 'Meridian' ]) ?
+ (' ' . $params[ 'time' ][ $field_array ][ $prefix . 'Meridian' ]) : '';
+ $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
} else {
// no date found, use NOW
@@ -188,7 +184,6 @@ function smarty_function_html_select_time($params, $template)
} else {
list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
}
-
// generate hour
if ($display_hours) {
$_html_hours = '';
@@ -200,44 +195,37 @@ function smarty_function_html_select_time($params, $template)
if ($hour_extra) {
$_extra .= ' ' . $hour_extra;
}
-
$_html_hours = '' . $option_separator;
-
if (isset($hour_empty) || isset($all_empty)) {
- $_html_hours .= '' . ( isset($hour_empty) ? $hour_empty : $all_empty ) . ' ' . $option_separator;
+ $_html_hours .= '' . (isset($hour_empty) ? $hour_empty : $all_empty) . ' ' .
+ $option_separator;
}
-
$start = $use_24_hours ? 0 : 1;
$end = $use_24_hours ? 23 : 12;
- for ($i=$start; $i <= $end; $i++) {
+ for ($i = $start; $i <= $end; $i++) {
$_val = sprintf('%02d', $i);
- $_text = $hour_format == '%02d' ? $_val : sprintf($hour_format, $i);
- $_value = $hour_value_format == '%02d' ? $_val : sprintf($hour_value_format, $i);
-
+ $_text = $hour_format === '%02d' ? $_val : sprintf($hour_format, $i);
+ $_value = $hour_value_format === '%02d' ? $_val : sprintf($hour_value_format, $i);
if (!$use_24_hours) {
- $_hour12 = $_hour == 0
- ? 12
- : ($_hour <= 12 ? $_hour : $_hour -12);
+ $_hour12 = $_hour == 0 ? 12 : ($_hour <= 12 ? $_hour : $_hour - 12);
}
-
$selected = $_hour !== null ? ($use_24_hours ? $_hour == $_val : $_hour12 == $_val) : null;
- $_html_hours .= '' . $_text . ' ' . $option_separator;
+ $_html_hours .= '' .
+ $_text . ' ' . $option_separator;
}
-
$_html_hours .= ' ';
}
-
// generate minute
if ($display_minutes) {
$_html_minutes = '';
@@ -249,35 +237,33 @@ function smarty_function_html_select_time($params, $template)
if ($minute_extra) {
$_extra .= ' ' . $minute_extra;
}
-
$_html_minutes = '' . $option_separator;
-
if (isset($minute_empty) || isset($all_empty)) {
- $_html_minutes .= '' . ( isset($minute_empty) ? $minute_empty : $all_empty ) . ' ' . $option_separator;
+ $_html_minutes .= '' . (isset($minute_empty) ? $minute_empty : $all_empty) . ' ' .
+ $option_separator;
}
-
$selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null;
- for ($i=0; $i <= 59; $i += $minute_interval) {
+ for ($i = 0; $i <= 59; $i += $minute_interval) {
$_val = sprintf('%02d', $i);
- $_text = $minute_format == '%02d' ? $_val : sprintf($minute_format, $i);
- $_value = $minute_value_format == '%02d' ? $_val : sprintf($minute_value_format, $i);
- $_html_minutes .= '' . $_text . ' ' . $option_separator;
+ $_text = $minute_format === '%02d' ? $_val : sprintf($minute_format, $i);
+ $_value = $minute_value_format === '%02d' ? $_val : sprintf($minute_value_format, $i);
+ $_html_minutes .= '' . $_text . ' ' . $option_separator;
}
-
$_html_minutes .= ' ';
}
-
// generate second
if ($display_seconds) {
$_html_seconds = '';
@@ -289,35 +275,33 @@ function smarty_function_html_select_time($params, $template)
if ($second_extra) {
$_extra .= ' ' . $second_extra;
}
-
$_html_seconds = '' . $option_separator;
-
if (isset($second_empty) || isset($all_empty)) {
- $_html_seconds .= '' . ( isset($second_empty) ? $second_empty : $all_empty ) . ' ' . $option_separator;
+ $_html_seconds .= '' . (isset($second_empty) ? $second_empty : $all_empty) . ' ' .
+ $option_separator;
}
-
$selected = $_second !== null ? ($_second - $_second % $second_interval) : null;
- for ($i=0; $i <= 59; $i += $second_interval) {
+ for ($i = 0; $i <= 59; $i += $second_interval) {
$_val = sprintf('%02d', $i);
- $_text = $second_format == '%02d' ? $_val : sprintf($second_format, $i);
- $_value = $second_value_format == '%02d' ? $_val : sprintf($second_value_format, $i);
- $_html_seconds .= '' . $_text . ' ' . $option_separator;
+ $_text = $second_format === '%02d' ? $_val : sprintf($second_format, $i);
+ $_value = $second_value_format === '%02d' ? $_val : sprintf($second_value_format, $i);
+ $_html_seconds .= '' . $_text . ' ' . $option_separator;
}
-
$_html_seconds .= ' ';
}
-
// generate meridian
if ($display_meridian && !$use_24_hours) {
$_html_meridian = '';
@@ -329,29 +313,36 @@ function smarty_function_html_select_time($params, $template)
if ($meridian_extra) {
$_extra .= ' ' . $meridian_extra;
}
-
$_html_meridian = '' . $option_separator;
-
if (isset($meridian_empty) || isset($all_empty)) {
- $_html_meridian .= '' . ( isset($meridian_empty) ? $meridian_empty : $all_empty ) . ' ' . $option_separator;
+ $_html_meridian .= '' . (isset($meridian_empty) ? $meridian_empty : $all_empty) .
+ ' ' . $option_separator;
}
-
- $_html_meridian .= 'AM ' . $option_separator
- . 'PM ' . $option_separator
- . ' ';
+ $_html_meridian .= ' 0 && $_hour < 12 ? ' selected="selected"' : '') .
+ '>AM ' . $option_separator . 'PM ' . $option_separator .
+ ' ';
}
-
$_html = '';
- foreach (array('_html_hours', '_html_minutes', '_html_seconds', '_html_meridian') as $k) {
+ foreach (array(
+ '_html_hours',
+ '_html_minutes',
+ '_html_seconds',
+ '_html_meridian'
+ ) as $k) {
if (isset($$k)) {
if ($_html) {
$_html .= $field_separator;
@@ -359,8 +350,5 @@ function smarty_function_html_select_time($params, $template)
$_html .= $$k;
}
}
-
return $_html;
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/function.html_table.php b/src/includes/smarty-3.1.48/libs/plugins/function.html_table.php
similarity index 75%
rename from src/includes/Smarty-3.1.12/libs/plugins/function.html_table.php
rename to src/includes/smarty-3.1.48/libs/plugins/function.html_table.php
index 6b9cb9d..ae61e83 100644
--- a/src/includes/Smarty-3.1.12/libs/plugins/function.html_table.php
+++ b/src/includes/smarty-3.1.48/libs/plugins/function.html_table.php
@@ -2,19 +2,17 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
-
/**
* Smarty {html_table} function plugin
- *
- * Type: function
- * Name: html_table
- * Date: Feb 17, 2003
- * Purpose: make an html table from an array of data
+ * Type: function
+ * Name: html_table
+ * Date: Feb 17, 2003
+ * Purpose: make an html table from an array of data
* Params:
- *
+ *
* - loop - array to loop through
* - cols - number of columns, comma separated list of column names
* or array of column names
@@ -29,25 +27,25 @@
* - hdir - horizontal direction (default: "right", means left-to-right)
* - inner - inner loop (default "cols": print $loop line by line,
* $loop will be printed column by column otherwise)
- *
+ *
* Examples:
- *
+ *
* {table loop=$data}
* {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
* {table loop=$data cols="first,second,third" tr_attr=$colors}
- *
*
- * @author Monte Ohrt
- * @author credit to Messju Mohr
- * @author credit to boots
+ * @author Monte Ohrt
+ * @author credit to Messju Mohr
+ * @author credit to boots
* @version 1.1
- * @link http://www.smarty.net/manual/en/language.function.html.table.php {html_table}
- * (Smarty online manual)
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
+ * @link http://www.smarty.net/manual/en/language.function.html.table.php {html_table}
+ * (Smarty online manual)
+ *
+ * @param array $params parameters
+ *
* @return string
*/
-function smarty_function_html_table($params, $template)
+function smarty_function_html_table($params)
{
$table_attr = 'border="1"';
$tr_attr = '';
@@ -61,18 +59,15 @@ function smarty_function_html_table($params, $template)
$inner = 'cols';
$caption = '';
$loop = null;
-
- if (!isset($params['loop'])) {
- trigger_error("html_table: missing 'loop' parameter",E_USER_WARNING);
+ if (!isset($params[ 'loop' ])) {
+ trigger_error("html_table: missing 'loop' parameter", E_USER_WARNING);
return;
}
-
foreach ($params as $_key => $_value) {
switch ($_key) {
case 'loop':
$$_key = (array)$_value;
break;
-
case 'cols':
if (is_array($_value) && !empty($_value)) {
$cols = $_value;
@@ -86,11 +81,9 @@ function smarty_function_html_table($params, $template)
$cols_count = $cols;
}
break;
-
case 'rows':
$$_key = (int)$_value;
break;
-
case 'table_attr':
case 'trailpad':
case 'hdir':
@@ -99,7 +92,6 @@ function smarty_function_html_table($params, $template)
case 'caption':
$$_key = (string)$_value;
break;
-
case 'tr_attr':
case 'td_attr':
case 'th_attr':
@@ -107,50 +99,42 @@ function smarty_function_html_table($params, $template)
break;
}
}
-
$loop_count = count($loop);
- if (empty($params['rows'])) {
+ if (empty($params[ 'rows' ])) {
/* no rows specified */
$rows = ceil($loop_count / $cols_count);
- } elseif (empty($params['cols'])) {
- if (!empty($params['rows'])) {
+ } elseif (empty($params[ 'cols' ])) {
+ if (!empty($params[ 'rows' ])) {
/* no cols specified, but rows */
$cols_count = ceil($loop_count / $rows);
}
}
-
$output = "\n";
-
if (!empty($caption)) {
$output .= '' . $caption . " \n";
}
-
if (is_array($cols)) {
- $cols = ($hdir == 'right') ? $cols : array_reverse($cols);
+ $cols = ($hdir === 'right') ? $cols : array_reverse($cols);
$output .= "\n";
-
for ($r = 0; $r < $cols_count; $r++) {
$output .= '';
- $output .= $cols[$r];
+ $output .= $cols[ $r ];
$output .= " \n";
}
$output .= " \n";
}
-
$output .= "\n";
for ($r = 0; $r < $rows; $r++) {
$output .= "\n";
- $rx = ($vdir == 'down') ? $r * $cols_count : ($rows-1 - $r) * $cols_count;
-
+ $rx = ($vdir === 'down') ? $r * $cols_count : ($rows - 1 - $r) * $cols_count;
for ($c = 0; $c < $cols_count; $c++) {
- $x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count-1 - $c;
- if ($inner != 'cols') {
+ $x = ($hdir === 'right') ? $rx + $c : $rx + $cols_count - 1 - $c;
+ if ($inner !== 'cols') {
/* shuffle x to loop over rows*/
$x = floor($x / $cols_count) + ($x % $cols_count) * $rows;
}
-
if ($x < $loop_count) {
- $output .= "" . $loop[$x] . " \n";
+ $output .= "" . $loop[ $x ] . " \n";
} else {
$output .= "$trailpad \n";
}
@@ -159,19 +143,22 @@ function smarty_function_html_table($params, $template)
}
$output .= " \n";
$output .= "
\n";
-
return $output;
}
+/**
+ * @param $name
+ * @param $var
+ * @param $no
+ *
+ * @return string
+ */
function smarty_function_html_table_cycle($name, $var, $no)
{
if (!is_array($var)) {
$ret = $var;
} else {
- $ret = $var[$no % count($var)];
+ $ret = $var[ $no % count($var) ];
}
-
return ($ret) ? ' ' . $ret : '';
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/function.mailto.php b/src/includes/smarty-3.1.48/libs/plugins/function.mailto.php
similarity index 52%
rename from src/includes/Smarty-3.1.12/libs/plugins/function.mailto.php
rename to src/includes/smarty-3.1.48/libs/plugins/function.mailto.php
index 55d5c06..5119a15 100644
--- a/src/includes/Smarty-3.1.12/libs/plugins/function.mailto.php
+++ b/src/includes/smarty-3.1.48/libs/plugins/function.mailto.php
@@ -2,88 +2,89 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFunction
*/
-
/**
* Smarty {mailto} function plugin
- *
- * Type: function
- * Name: mailto
+ * Type: function
+ * Name: mailto
* Date: May 21, 2002
- * Purpose: automate mailto address link creation, and optionally encode them.
+ * Purpose: automate mailto address link creation, and optionally encode them.
* Params:
- *
+ *
* - address - (required) - e-mail address
* - text - (optional) - text to display, default is address
* - encode - (optional) - can be one of:
* * none : no encoding (default)
* * javascript : encode with javascript
* * javascript_charcode : encode with javascript charcode
- * * hex : encode with hexidecimal (no javascript)
+ * * hex : encode with hexadecimal (no javascript)
* - cc - (optional) - address(es) to carbon copy
* - bcc - (optional) - address(es) to blind carbon copy
* - subject - (optional) - e-mail subject
* - newsgroups - (optional) - newsgroup(s) to post to
* - followupto - (optional) - address(es) to follow up to
* - extra - (optional) - extra tags for the href link
- *
+ *
* Examples:
- *
+ *
* {mailto address="me@domain.com"}
* {mailto address="me@domain.com" encode="javascript"}
* {mailto address="me@domain.com" encode="hex"}
* {mailto address="me@domain.com" subject="Hello to you!"}
* {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"}
* {mailto address="me@domain.com" extra='class="mailto"'}
- *
*
- * @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto}
- * (Smarty online manual)
+ * @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto}
+ * (Smarty online manual)
* @version 1.2
- * @author Monte Ohrt
- * @author credits to Jason Sweat (added cc, bcc and subject functionality)
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
+ * @author Monte Ohrt
+ * @author credits to Jason Sweat (added cc, bcc and subject functionality)
+ *
+ * @param array $params parameters
+ *
* @return string
*/
-function smarty_function_mailto($params, $template)
+function smarty_function_mailto($params)
{
- static $_allowed_encoding = array('javascript' => true, 'javascript_charcode' => true, 'hex' => true, 'none' => true);
- $extra = '';
+ static $_allowed_encoding = array(
+ 'javascript' => true,
+ 'javascript_charcode' => true,
+ 'hex' => true,
+ 'none' => true
+ );
- if (empty($params['address'])) {
- trigger_error("mailto: missing 'address' parameter",E_USER_WARNING);
+ $extra = '';
+ if (empty($params[ 'address' ])) {
+ trigger_error("mailto: missing 'address' parameter", E_USER_WARNING);
return;
} else {
- $address = $params['address'];
+ $address = $params[ 'address' ];
}
$text = $address;
+
// netscape and mozilla do not decode %40 (@) in BCC field (bug?)
// so, don't encode it.
- $search = array('%40', '%2C');
- $replace = array('@', ',');
$mail_parms = array();
foreach ($params as $var => $value) {
switch ($var) {
case 'cc':
case 'bcc':
case 'followupto':
- if (!empty($value))
- $mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value));
+ if (!empty($value)) {
+ $mail_parms[] = $var . '=' . str_replace(array('%40', '%2C'), array('@', ','), rawurlencode($value));
+ }
break;
-
case 'subject':
case 'newsgroups':
$mail_parms[] = $var . '=' . rawurlencode($value);
break;
-
case 'extra':
case 'text':
$$var = $value;
-
+ // no break
default:
}
}
@@ -91,62 +92,56 @@ function smarty_function_mailto($params, $template)
if ($mail_parms) {
$address .= '?' . join('&', $mail_parms);
}
-
- $encode = (empty($params['encode'])) ? 'none' : $params['encode'];
- if (!isset($_allowed_encoding[$encode])) {
- trigger_error("mailto: 'encode' parameter must be none, javascript, javascript_charcode or hex", E_USER_WARNING);
+ $encode = (empty($params[ 'encode' ])) ? 'none' : $params[ 'encode' ];
+ if (!isset($_allowed_encoding[ $encode ])) {
+ trigger_error(
+ "mailto: 'encode' parameter must be none, javascript, javascript_charcode or hex",
+ E_USER_WARNING
+ );
return;
}
- // FIXME: (rodneyrehm) document.write() excues me what? 1998 has passed!
- if ($encode == 'javascript') {
- $string = 'document.write(\'' . $text . ' \');';
+ $flags = ENT_QUOTES;
+ if (defined('ENT_SUBSTITUTE') && defined('ENT_HTML401')) {
+ $flags |= ENT_SUBSTITUTE | ENT_HTML401;
+ }
+
+ $string = '' . htmlspecialchars($text, $flags, Smarty::$_CHARSET) . ' ';
+
+ if ($encode === 'javascript') {
$js_encode = '';
for ($x = 0, $_length = strlen($string); $x < $_length; $x++) {
- $js_encode .= '%' . bin2hex($string[$x]);
+ $js_encode .= '%' . bin2hex($string[ $x ]);
}
-
- return '';
- } elseif ($encode == 'javascript_charcode') {
- $string = '' . $text . ' ';
-
- for($x = 0, $y = strlen($string); $x < $y; $x++) {
- $ord[] = ord($string[$x]);
+ return '';
+ } elseif ($encode === 'javascript_charcode') {
+ for ($x = 0, $_length = strlen($string); $x < $_length; $x++) {
+ $ord[] = ord($string[ $x ]);
}
-
- $_ret = "\n";
-
- return $_ret;
- } elseif ($encode == 'hex') {
+ return '';
+ } elseif ($encode === 'hex') {
preg_match('!^(.*)(\?.*)$!', $address, $match);
- if (!empty($match[2])) {
- trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.",E_USER_WARNING);
+ if (!empty($match[ 2 ])) {
+ trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.", E_USER_WARNING);
return;
}
$address_encode = '';
for ($x = 0, $_length = strlen($address); $x < $_length; $x++) {
- if (preg_match('!\w!' . Smarty::$_UTF8_MODIFIER, $address[$x])) {
- $address_encode .= '%' . bin2hex($address[$x]);
+ if (preg_match('!\w!' . Smarty::$_UTF8_MODIFIER, $address[ $x ])) {
+ $address_encode .= '%' . bin2hex($address[ $x ]);
} else {
- $address_encode .= $address[$x];
+ $address_encode .= $address[ $x ];
}
}
$text_encode = '';
for ($x = 0, $_length = strlen($text); $x < $_length; $x++) {
- $text_encode .= '' . bin2hex($text[$x]) . ';';
+ $text_encode .= '' . bin2hex($text[ $x ]) . ';';
}
-
$mailto = "mailto:";
return '' . $text_encode . ' ';
} else {
// no encoding
- return '' . $text . ' ';
+ return $string;
}
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/smarty-3.1.48/libs/plugins/function.math.php b/src/includes/smarty-3.1.48/libs/plugins/function.math.php
new file mode 100644
index 0000000..e2f8e04
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/plugins/function.math.php
@@ -0,0 +1,142 @@
+
+ *
+ * @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,
+ 'acos' => true,
+ 'acosh' => true,
+ 'cos' => true,
+ 'cosh' => true,
+ 'deg2rad' => true,
+ 'rad2deg' => true,
+ 'exp' => true,
+ 'floor' => true,
+ 'log' => true,
+ 'log10' => true,
+ 'max' => true,
+ 'min' => true,
+ 'pi' => true,
+ 'pow' => true,
+ 'rand' => true,
+ 'round' => true,
+ 'asin' => true,
+ 'asinh' => true,
+ 'sin' => true,
+ 'sinh' => true,
+ 'sqrt' => true,
+ 'srand' => true,
+ 'atan' => true,
+ 'atanh' => true,
+ 'tan' => true,
+ 'tanh' => true
+ );
+
+ // be sure equation parameter is present
+ if (empty($params[ 'equation' ])) {
+ trigger_error("math: missing equation parameter", E_USER_WARNING);
+ return;
+ }
+ $equation = $params[ 'equation' ];
+
+ // Remove whitespaces
+ $equation = preg_replace('/\s+/', '', $equation);
+
+ // Adapted from https://www.php.net/manual/en/function.eval.php#107377
+ $number = '(?:\d+(?:[,.]\d+)?|pi|Ï€)'; // What is a number
+ $functionsOrVars = '((?:0x[a-fA-F0-9]+)|([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*))';
+ $operators = '[,+\/*\^%-]'; // Allowed math operators
+ $regexp = '/^(('.$number.'|'.$functionsOrVars.'|('.$functionsOrVars.'\s*\((?1)*\)|\((?1)*\)))(?:'.$operators.'(?1))?)+$/';
+
+ if (!preg_match($regexp, $equation)) {
+ trigger_error("math: illegal characters", E_USER_WARNING);
+ return;
+ }
+
+ // make sure parenthesis are balanced
+ if (substr_count($equation, '(') !== substr_count($equation, ')')) {
+ trigger_error("math: unbalanced parenthesis", E_USER_WARNING);
+ return;
+ }
+
+ // disallow backticks
+ if (strpos($equation, '`') !== false) {
+ trigger_error("math: backtick character not allowed in equation", E_USER_WARNING);
+ return;
+ }
+
+ // also disallow dollar signs
+ if (strpos($equation, '$') !== false) {
+ trigger_error("math: dollar signs not allowed in equation", 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;
+ }
+ }
+ }
+ // match all vars in equation, make sure all are passed
+ preg_match_all('!(?:0x[a-fA-F0-9]+)|([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)!', $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, or missing parameter '{$curr_var}'",
+ E_USER_WARNING
+ );
+ return;
+ }
+ }
+ foreach ($params as $key => $val) {
+ if ($key !== 'equation' && $key !== 'format' && $key !== 'assign') {
+ $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/src/includes/smarty-3.1.48/libs/plugins/modifier.capitalize.php b/src/includes/smarty-3.1.48/libs/plugins/modifier.capitalize.php
new file mode 100644
index 0000000..c5fc400
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/plugins/modifier.capitalize.php
@@ -0,0 +1,145 @@
+
+ * @author Rodney Rehm
+ */
+function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = false)
+{
+ if (Smarty::$_MBSTRING) {
+ if ($lc_rest) {
+ // uppercase (including hyphenated words)
+ $upper_string = mb_convert_case($string, MB_CASE_TITLE, Smarty::$_CHARSET);
+ } else {
+ // uppercase word breaks
+ $upper_string = preg_replace_callback(
+ "!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER,
+ 'smarty_mod_cap_mbconvert_cb',
+ $string
+ );
+ }
+ // check uc_digits case
+ if (!$uc_digits) {
+ if (preg_match_all(
+ "!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER,
+ $string,
+ $matches,
+ PREG_OFFSET_CAPTURE
+ )
+ ) {
+ foreach ($matches[ 1 ] as $match) {
+ $upper_string =
+ substr_replace(
+ $upper_string,
+ mb_strtolower($match[ 0 ], Smarty::$_CHARSET),
+ $match[ 1 ],
+ strlen($match[ 0 ])
+ );
+ }
+ }
+ }
+ $upper_string =
+ preg_replace_callback(
+ "!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER,
+ 'smarty_mod_cap_mbconvert2_cb',
+ $upper_string
+ );
+ return $upper_string;
+ }
+ // lowercase first
+ if ($lc_rest) {
+ $string = strtolower($string);
+ }
+ // uppercase (including hyphenated words)
+ $upper_string =
+ preg_replace_callback(
+ "!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER,
+ 'smarty_mod_cap_ucfirst_cb',
+ $string
+ );
+ // check uc_digits case
+ if (!$uc_digits) {
+ if (preg_match_all(
+ "!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER,
+ $string,
+ $matches,
+ PREG_OFFSET_CAPTURE
+ )
+ ) {
+ foreach ($matches[ 1 ] as $match) {
+ $upper_string =
+ substr_replace($upper_string, strtolower($match[ 0 ]), $match[ 1 ], strlen($match[ 0 ]));
+ }
+ }
+ }
+ $upper_string = preg_replace_callback(
+ "!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER,
+ 'smarty_mod_cap_ucfirst2_cb',
+ $upper_string
+ );
+ return $upper_string;
+}
+
+/**
+ *
+ * Bug: create_function() use exhausts memory when used in long loops
+ * Fix: use declared functions for callbacks instead of using create_function()
+ * Note: This can be fixed using anonymous functions instead, but that requires PHP >= 5.3
+ *
+ * @author Kyle Renfrow
+ */
+/**
+ * @param $matches
+ *
+ * @return string
+ */
+function smarty_mod_cap_mbconvert_cb($matches)
+{
+ return stripslashes($matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 2 ]), MB_CASE_UPPER, Smarty::$_CHARSET);
+}
+
+/**
+ * @param $matches
+ *
+ * @return string
+ */
+function smarty_mod_cap_mbconvert2_cb($matches)
+{
+ return stripslashes($matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 3 ]), MB_CASE_UPPER, Smarty::$_CHARSET);
+}
+
+/**
+ * @param $matches
+ *
+ * @return string
+ */
+function smarty_mod_cap_ucfirst_cb($matches)
+{
+ return stripslashes($matches[ 1 ]) . ucfirst(stripslashes($matches[ 2 ]));
+}
+
+/**
+ * @param $matches
+ *
+ * @return string
+ */
+function smarty_mod_cap_ucfirst2_cb($matches)
+{
+ return stripslashes($matches[ 1 ]) . ucfirst(stripslashes($matches[ 3 ]));
+}
diff --git a/src/includes/smarty-3.1.48/libs/plugins/modifier.date_format.php b/src/includes/smarty-3.1.48/libs/plugins/modifier.date_format.php
new file mode 100644
index 0000000..c8e88c5
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/plugins/modifier.date_format.php
@@ -0,0 +1,85 @@
+
+ *
+ * @param string $string input date string
+ * @param string $format strftime format for output
+ * @param string $default_date default date if $string is empty
+ * @param string $formatter either 'strftime' or 'auto'
+ *
+ * @return string |void
+ * @uses smarty_make_timestamp()
+ */
+function smarty_modifier_date_format($string, $format = null, $default_date = '', $formatter = 'auto')
+{
+ if ($format === null) {
+ $format = Smarty::$_DATE_FORMAT;
+ }
+ /**
+ * require_once the {@link shared.make_timestamp.php} plugin
+ */
+ static $is_loaded = false;
+ if (!$is_loaded) {
+ if (!is_callable('smarty_make_timestamp')) {
+ include_once SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php';
+ }
+ $is_loaded = true;
+ }
+ if (!empty($string) && $string !== '0000-00-00' && $string !== '0000-00-00 00:00:00') {
+ $timestamp = smarty_make_timestamp($string);
+ } elseif (!empty($default_date)) {
+ $timestamp = smarty_make_timestamp($default_date);
+ } else {
+ return;
+ }
+ if ($formatter === 'strftime' || ($formatter === 'auto' && strpos($format, '%') !== false)) {
+ if (Smarty::$_IS_WINDOWS) {
+ $_win_from = array(
+ '%D',
+ '%h',
+ '%n',
+ '%r',
+ '%R',
+ '%t',
+ '%T'
+ );
+ $_win_to = array(
+ '%m/%d/%y',
+ '%b',
+ "\n",
+ '%I:%M:%S %p',
+ '%H:%M',
+ "\t",
+ '%H:%M:%S'
+ );
+ if (strpos($format, '%e') !== false) {
+ $_win_from[] = '%e';
+ $_win_to[] = sprintf('%\' 2d', date('j', $timestamp));
+ }
+ if (strpos($format, '%l') !== false) {
+ $_win_from[] = '%l';
+ $_win_to[] = sprintf('%\' 2d', date('h', $timestamp));
+ }
+ $format = str_replace($_win_from, $_win_to, $format);
+ }
+ return strftime($format, $timestamp);
+ } else {
+ return date($format, $timestamp);
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/plugins/modifier.debug_print_var.php b/src/includes/smarty-3.1.48/libs/plugins/modifier.debug_print_var.php
new file mode 100644
index 0000000..78397d0
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/plugins/modifier.debug_print_var.php
@@ -0,0 +1,103 @@
+
+ *
+ * @param array|object $var variable to be formatted
+ * @param int $max maximum recursion depth if $var is an array or object
+ * @param int $length maximum string length if $var is a string
+ * @param int $depth actual recursion depth
+ * @param array $objects processed objects in actual depth to prevent recursive object processing
+ *
+ * @return string
+ */
+function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, $depth = 0, $objects = array())
+{
+ $_replace = array("\n" => '\n', "\r" => '\r', "\t" => '\t');
+ switch (gettype($var)) {
+ case 'array':
+ $results = 'Array (' . count($var) . ') ';
+ if ($depth === $max) {
+ break;
+ }
+ foreach ($var as $curr_key => $curr_val) {
+ $results .= ' ' . str_repeat(' ', $depth * 2) . '' . strtr($curr_key, $_replace) .
+ ' => ' .
+ smarty_modifier_debug_print_var($curr_val, $max, $length, ++$depth, $objects);
+ $depth--;
+ }
+ break;
+ case 'object':
+ $object_vars = get_object_vars($var);
+ $results = '' . get_class($var) . ' Object (' . count($object_vars) . ') ';
+ if (in_array($var, $objects)) {
+ $results .= ' called recursive';
+ break;
+ }
+ if ($depth === $max) {
+ break;
+ }
+ $objects[] = $var;
+ foreach ($object_vars as $curr_key => $curr_val) {
+ $results .= ' ' . str_repeat(' ', $depth * 2) . ' ->' . strtr($curr_key, $_replace) .
+ ' = ' . smarty_modifier_debug_print_var($curr_val, $max, $length, ++$depth, $objects);
+ $depth--;
+ }
+ break;
+ case 'boolean':
+ case 'NULL':
+ case 'resource':
+ if (true === $var) {
+ $results = 'true';
+ } elseif (false === $var) {
+ $results = 'false';
+ } elseif (null === $var) {
+ $results = 'null';
+ } else {
+ $results = htmlspecialchars((string)$var);
+ }
+ $results = '' . $results . ' ';
+ break;
+ case 'integer':
+ case 'float':
+ $results = htmlspecialchars((string)$var);
+ break;
+ case 'string':
+ $results = strtr($var, $_replace);
+ if (Smarty::$_MBSTRING) {
+ if (mb_strlen($var, Smarty::$_CHARSET) > $length) {
+ $results = mb_substr($var, 0, $length - 3, Smarty::$_CHARSET) . '...';
+ }
+ } else {
+ if (isset($var[ $length ])) {
+ $results = substr($var, 0, $length - 3) . '...';
+ }
+ }
+ $results = htmlspecialchars('"' . $results . '"', ENT_QUOTES, Smarty::$_CHARSET);
+ break;
+ case 'unknown type':
+ default:
+ $results = strtr((string)$var, $_replace);
+ if (Smarty::$_MBSTRING) {
+ if (mb_strlen($results, Smarty::$_CHARSET) > $length) {
+ $results = mb_substr($results, 0, $length - 3, Smarty::$_CHARSET) . '...';
+ }
+ } else {
+ if (strlen($results) > $length) {
+ $results = substr($results, 0, $length - 3) . '...';
+ }
+ }
+ $results = htmlspecialchars($results, ENT_QUOTES, Smarty::$_CHARSET);
+ }
+ return $results;
+}
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/modifier.escape.php b/src/includes/smarty-3.1.48/libs/plugins/modifier.escape.php
similarity index 59%
rename from src/includes/Smarty-3.1.12/libs/plugins/modifier.escape.php
rename to src/includes/smarty-3.1.48/libs/plugins/modifier.escape.php
index 5ca8e77..c256358 100644
--- a/src/includes/Smarty-3.1.12/libs/plugins/modifier.escape.php
+++ b/src/includes/smarty-3.1.48/libs/plugins/modifier.escape.php
@@ -2,36 +2,36 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsModifier
*/
-
/**
* Smarty escape modifier plugin
- *
- * Type: modifier
- * Name: escape
+ * Type: modifier
+ * Name: escape
* Purpose: escape string for output
*
- * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
+ * @link http://www.smarty.net/docs/en/language.modifier.escape
* @author Monte Ohrt
+ *
* @param string $string input string
* @param string $esc_type escape type
* @param string $char_set character set, used for htmlspecialchars() or htmlentities()
* @param boolean $double_encode encode already encoded entitites again, used for htmlspecialchars() or htmlentities()
+ *
* @return string escaped input string
*/
function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true)
{
static $_double_encode = null;
+ static $is_loaded_1 = false;
+ static $is_loaded_2 = false;
if ($_double_encode === null) {
$_double_encode = version_compare(PHP_VERSION, '5.2.3', '>=');
}
-
if (!$char_set) {
$char_set = Smarty::$_CHARSET;
}
-
switch ($esc_type) {
case 'html':
if ($_double_encode) {
@@ -45,11 +45,21 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
// php <5.2.3 - prevent double encoding
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
$string = htmlspecialchars($string, ENT_QUOTES, $char_set);
- $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
+ $string = str_replace(
+ array(
+ '%%%SMARTY_START%%%',
+ '%%%SMARTY_END%%%'
+ ),
+ array(
+ '&',
+ ';'
+ ),
+ $string
+ );
return $string;
}
}
-
+ // no break
case 'htmlall':
if (Smarty::$_MBSTRING) {
// mb_convert_encoding ignores htmlspecialchars()
@@ -64,15 +74,24 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
// php <5.2.3 - prevent double encoding
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
$string = htmlspecialchars($string, ENT_QUOTES, $char_set);
- $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
+ $string =
+ str_replace(
+ array(
+ '%%%SMARTY_START%%%',
+ '%%%SMARTY_END%%%'
+ ),
+ array(
+ '&',
+ ';'
+ ),
+ $string
+ );
return $string;
}
}
-
// htmlentities() won't convert everything, so use mb_convert_encoding
return mb_convert_encoding($string, 'HTML-ENTITIES', $char_set);
}
-
// no MBString fallback
if ($_double_encode) {
return htmlentities($string, ENT_QUOTES, $char_set, $double_encode);
@@ -82,35 +101,46 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
} else {
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
$string = htmlentities($string, ENT_QUOTES, $char_set);
- $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
+ $string = str_replace(
+ array(
+ '%%%SMARTY_START%%%',
+ '%%%SMARTY_END%%%'
+ ),
+ array(
+ '&',
+ ';'
+ ),
+ $string
+ );
return $string;
}
}
-
+ // no break
case 'url':
return rawurlencode($string);
-
case 'urlpathinfo':
return str_replace('%2F', '/', rawurlencode($string));
-
case 'quotes':
// escape unescaped single quotes
return preg_replace("%(? '\\\\', "'" => "\\'", '"' => '\\"', "\r" => '\\r', "\n" => '\\n', '' => '<\/'));
-
+ return strtr(
+ $string,
+ array(
+ '\\' => '\\\\',
+ "'" => "\\'",
+ '"' => '\\"',
+ "\r" => '\\r',
+ "\n" => '\\n',
+ '' => '<\/',
+ // see https://html.spec.whatwg.org/multipage/scripting.html#restrictions-for-contents-of-script-elements
+ '#is',
+ $source,
+ $matches,
+ PREG_OFFSET_CAPTURE | PREG_SET_ORDER
+ )
+ ) {
+ foreach ($matches as $match) {
+ $store[] = $match[ 0 ][ 0 ];
+ $_length = strlen($match[ 0 ][ 0 ]);
+ $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
+ $source = substr_replace($source, $replace, $match[ 0 ][ 1 ] - $_offset, $_length);
+ $_offset += $_length - strlen($replace);
+ $_store++;
+ }
+ }
+ // Strip all HTML-Comments
+ // yes, even the ones in ]*>)|(]*>)|(]*>.*? ]*>)#is',
+ $source,
+ $matches,
+ PREG_OFFSET_CAPTURE | PREG_SET_ORDER
+ )
+ ) {
+ foreach ($matches as $match) {
+ $store[] = $match[ 0 ][ 0 ];
+ $_length = strlen($match[ 0 ][ 0 ]);
+ $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
+ $source = substr_replace($source, $replace, $match[ 0 ][ 1 ] - $_offset, $_length);
+ $_offset += $_length - strlen($replace);
+ $_store++;
+ }
+ }
+ $expressions = array(// replace multiple spaces between tags by a single space
+ // can't remove them entirely, becaue that might break poorly implemented CSS display:inline-block elements
+ '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',
+ // remove spaces between attributes (but not in attribute values!)
+ '#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5',
+ // note: for some very weird reason trim() seems to remove spaces inside attributes.
+ // maybe a \0 byte or something is interfering?
+ '#^\s+<#Ss' => '<',
+ '#>\s+$#Ss' => '>',
+ );
+ $source = preg_replace(array_keys($expressions), array_values($expressions), $source);
+ // note: for some very weird reason trim() seems to remove spaces inside attributes.
+ // maybe a \0 byte or something is interfering?
+ // $source = trim( $source );
+ $_offset = 0;
+ if (preg_match_all('#@!@SMARTY:([0-9]+):SMARTY@!@#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
+ foreach ($matches as $match) {
+ $_length = strlen($match[ 0 ][ 0 ]);
+ $replace = $store[ $match[ 1 ][ 0 ] ];
+ $source = substr_replace($source, $replace, $match[ 0 ][ 1 ] + $_offset, $_length);
+ $_offset += strlen($replace) - $_length;
+ $_store++;
+ }
+ }
+ return $source;
+}
diff --git a/src/includes/smarty-3.1.48/libs/plugins/shared.escape_special_chars.php b/src/includes/smarty-3.1.48/libs/plugins/shared.escape_special_chars.php
new file mode 100644
index 0000000..6b18d3e
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/plugins/shared.escape_special_chars.php
@@ -0,0 +1,32 @@
+
+ *
+ * @param string $string text that should by escaped
+ *
+ * @return string
+ */
+function smarty_function_escape_special_chars($string)
+{
+ if (!is_array($string)) {
+ if (version_compare(PHP_VERSION, '5.2.3', '>=')) {
+ $string = htmlspecialchars($string, ENT_COMPAT, Smarty::$_CHARSET, false);
+ } else {
+ $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/src/includes/Smarty-3.1.12/libs/plugins/shared.literal_compiler_param.php b/src/includes/smarty-3.1.48/libs/plugins/shared.literal_compiler_param.php
similarity index 66%
rename from src/includes/Smarty-3.1.12/libs/plugins/shared.literal_compiler_param.php
rename to src/includes/smarty-3.1.48/libs/plugins/shared.literal_compiler_param.php
index dbcd937..65caf03 100644
--- a/src/includes/Smarty-3.1.12/libs/plugins/shared.literal_compiler_param.php
+++ b/src/includes/smarty-3.1.48/libs/plugins/shared.literal_compiler_param.php
@@ -2,32 +2,34 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsShared
*/
-
/**
* evaluate compiler parameter
*
* @param array $params parameter array as given to the compiler function
* @param integer $index array index of the parameter to convert
* @param mixed $default value to be returned if the parameter is not present
+ *
* @return mixed evaluated value of parameter or $default
* @throws SmartyException if parameter is not a literal (but an expression, variable, …)
* @author Rodney Rehm
*/
-function smarty_literal_compiler_param($params, $index, $default=null)
+function smarty_literal_compiler_param($params, $index, $default = null)
{
// not set, go default
- if (!isset($params[$index])) {
+ if (!isset($params[ $index ])) {
return $default;
}
// test if param is a literal
- if (!preg_match('/^([\'"]?)[a-zA-Z0-9]+(\\1)$/', $params[$index])) {
- throw new SmartyException('$param[' . $index . '] is not a literal and is thus not evaluatable at compile time');
+ if (!preg_match('/^([\'"]?)[a-zA-Z0-9-]+(\\1)$/', $params[ $index ])) {
+ throw new SmartyException(
+ '$param[' . $index .
+ '] is not a literal and is thus not evaluatable at compile time'
+ );
}
-
$t = null;
- eval("\$t = " . $params[$index] . ";");
+ eval("\$t = " . $params[ $index ] . ";");
return $t;
}
diff --git a/src/includes/smarty-3.1.48/libs/plugins/shared.make_timestamp.php b/src/includes/smarty-3.1.48/libs/plugins/shared.make_timestamp.php
new file mode 100644
index 0000000..9626dc6
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/plugins/shared.make_timestamp.php
@@ -0,0 +1,49 @@
+
+ *
+ * @param DateTime|int|string $string date object, timestamp or string that can be converted using strtotime()
+ *
+ * @return int
+ */
+function smarty_make_timestamp($string)
+{
+ if (empty($string)) {
+ // use "now":
+ return time();
+ } elseif ($string instanceof DateTime
+ || (interface_exists('DateTimeInterface', false) && $string instanceof DateTimeInterface)
+ ) {
+ return (int)$string->format('U'); // PHP 5.2 BC
+ } elseif (strlen($string) === 14 && ctype_digit($string)) {
+ // it is mysql timestamp format of YYYYMMDDHHMMSS?
+ return mktime(
+ substr($string, 8, 2),
+ substr($string, 10, 2),
+ substr($string, 12, 2),
+ substr($string, 4, 2),
+ substr($string, 6, 2),
+ substr($string, 0, 4)
+ );
+ } elseif (is_numeric($string)) {
+ // it is a numeric string, we handle it as timestamp
+ return (int)$string;
+ } else {
+ // strtotime should handle it
+ $time = strtotime($string);
+ if ($time === -1 || $time === false) {
+ // strtotime() was not able to parse $string, use "now":
+ return time();
+ }
+ return $time;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/plugins/shared.mb_str_replace.php b/src/includes/smarty-3.1.48/libs/plugins/shared.mb_str_replace.php
new file mode 100644
index 0000000..6366205
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/plugins/shared.mb_str_replace.php
@@ -0,0 +1,87 @@
+
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/plugins/variablefilter.htmlspecialchars.php b/src/includes/smarty-3.1.48/libs/plugins/variablefilter.htmlspecialchars.php
similarity index 50%
rename from src/includes/Smarty-3.1.12/libs/plugins/variablefilter.htmlspecialchars.php
rename to src/includes/smarty-3.1.48/libs/plugins/variablefilter.htmlspecialchars.php
index aff711e..3c85295 100644
--- a/src/includes/Smarty-3.1.12/libs/plugins/variablefilter.htmlspecialchars.php
+++ b/src/includes/smarty-3.1.48/libs/plugins/variablefilter.htmlspecialchars.php
@@ -2,20 +2,18 @@
/**
* Smarty plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage PluginsFilter
*/
-
/**
* Smarty htmlspecialchars variablefilter plugin
*
- * @param string $source input string
- * @param Smarty_Internal_Template $smarty Smarty object
+ * @param string $source input string
+ * @param \Smarty_Internal_Template $template
+ *
* @return string filtered output
*/
-function smarty_variablefilter_htmlspecialchars($source, $smarty)
+function smarty_variablefilter_htmlspecialchars($source, Smarty_Internal_Template $template)
{
return htmlspecialchars($source, ENT_QUOTES, Smarty::$_CHARSET);
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_cacheresource.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_cacheresource.php
new file mode 100644
index 0000000..91e9f39
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_cacheresource.php
@@ -0,0 +1,219 @@
+ 'smarty_internal_cacheresource_file.php',);
+
+ /**
+ * 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
+ * @param boolean $update flag if called because cache update
+ *
+ * @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,
+ $update = false
+ );
+
+ /**
+ * 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);
+
+ /**
+ * Read cached template from cache
+ *
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return string content
+ */
+ abstract public function readCachedContent(Smarty_Internal_Template $_template);
+
+ /**
+ * 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();
+ $unifunc = $_template->cached->unifunc;
+ $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->_cache[ 'cacheresource_handlers' ][ $type ])) {
+ return $smarty->_cache[ '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->_cache[ 'cacheresource_handlers' ][ $type ] = $smarty->registered_cache_resources[ $type ];
+ }
+ // try sysplugins dir
+ if (isset(self::$sysplugins[ $type ])) {
+ $cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type);
+ return $smarty->_cache[ 'cacheresource_handlers' ][ $type ] = new $cache_resource_class();
+ }
+ // try plugins dir
+ $cache_resource_class = 'Smarty_CacheResource_' . ucfirst($type);
+ if ($smarty->loadPlugin($cache_resource_class)) {
+ return $smarty->_cache[ 'cacheresource_handlers' ][ $type ] = new $cache_resource_class();
+ }
+ // give up
+ throw new SmartyException("Unable to load cache resource '{$type}'");
+ }
+}
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_cacheresource_custom.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_cacheresource_custom.php
similarity index 55%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_cacheresource_custom.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_cacheresource_custom.php
index ee9de15..68ad112 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_cacheresource_custom.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_cacheresource_custom.php
@@ -2,35 +2,35 @@
/**
* Smarty Internal Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
*/
/**
* Cache Handler API
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
-abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
-
+abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
+{
/**
* fetch cached content and its modification time from data source
*
- * @param string $id unique cache content identifier
- * @param string $name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param string $content cached content
- * @param integer $mtime cache modification timestamp (epoch)
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param string $content cached content
+ * @param integer $mtime cache modification timestamp (epoch)
+ *
* @return void
*/
- protected abstract function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime);
+ abstract protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime);
/**
* Fetch cached content's modification timestamp from data source
- *
* {@internal implementing this method is optional.
* Only implement it if modification times can be accessed faster than loading the complete cached content.}}
*
@@ -38,11 +38,12 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
* @param string $name template name
* @param string $cache_id cache id
* @param string $compile_id compile id
+ *
* @return integer|boolean timestamp (epoch) the template was modified, or false if not found
*/
protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
{
- return null;
+ return false;
}
/**
@@ -53,54 +54,69 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
* @param string $cache_id cache id
* @param string $compile_id compile id
* @param integer|null $exp_time seconds till expiration or null
- * @param string $content content to cache
- * @return boolean success
+ * @param string $content content to cache
+ *
+ * @return boolean success
*/
- protected abstract function save($id, $name, $cache_id, $compile_id, $exp_time, $content);
+ abstract protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content);
/**
* Delete content from cache
*
- * @param string $name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
+ * @param string|null $name template name
+ * @param string|null $cache_id cache id
+ * @param string|null $compile_id compile id
* @param integer|null $exp_time seconds till expiration time in seconds or null
- * @return integer number of deleted caches
+ *
+ * @return integer number of deleted caches
*/
- protected abstract function delete($name, $cache_id, $compile_id, $exp_time);
+ abstract protected function delete($name, $cache_id, $compile_id, $exp_time);
/**
* populate Cached Object with meta data from Resource
*
* @param Smarty_Template_Cached $cached cached object
* @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
{
$_cache_id = isset($cached->cache_id) ? preg_replace('![^\w\|]+!', '_', $cached->cache_id) : null;
- $_compile_id = isset($cached->compile_id) ? preg_replace('![^\w\|]+!', '_', $cached->compile_id) : null;
-
- $cached->filepath = sha1($cached->source->filepath . $_cache_id . $_compile_id);
+ $_compile_id = isset($cached->compile_id) ? preg_replace('![^\w]+!', '_', $cached->compile_id) : null;
+ $path = $cached->source->uid . $_cache_id . $_compile_id;
+ $cached->filepath = sha1($path);
+ if ($_template->smarty->cache_locking) {
+ $cached->lock_id = sha1('lock.' . $path);
+ }
$this->populateTimestamp($cached);
}
/**
* populate Cached Object with timestamp and exists from Resource
*
- * @param Smarty_Template_Cached $source cached object
+ * @param Smarty_Template_Cached $cached
+ *
* @return void
*/
public function populateTimestamp(Smarty_Template_Cached $cached)
{
- $mtime = $this->fetchTimestamp($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id);
+ $mtime =
+ $this->fetchTimestamp($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id);
if ($mtime !== null) {
$cached->timestamp = $mtime;
$cached->exists = !!$cached->timestamp;
return;
}
$timestamp = null;
- $this->fetch($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id, $cached->content, $timestamp);
+ $this->fetch(
+ $cached->filepath,
+ $cached->source->name,
+ $cached->cache_id,
+ $cached->compile_id,
+ $cached->content,
+ $timestamp
+ );
$cached->timestamp = isset($timestamp) ? $timestamp : false;
$cached->exists = !!$cached->timestamp;
}
@@ -108,30 +124,35 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
/**
* Read the cached template and process the header
*
- * @param Smarty_Internal_Template $_template template object
- * @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if the cached content does not exist
+ * @param \Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
+ * @param Smarty_Template_Cached $cached cached object
+ * @param boolean $update flag if called because cache update
+ *
+ * @return boolean true or false if the cached content does not exist
*/
- public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null)
- {
+ public function process(
+ Smarty_Internal_Template $_smarty_tpl,
+ Smarty_Template_Cached $cached = null,
+ $update = false
+ ) {
if (!$cached) {
- $cached = $_template->cached;
+ $cached = $_smarty_tpl->cached;
}
$content = $cached->content ? $cached->content : null;
$timestamp = $cached->timestamp ? $cached->timestamp : null;
if ($content === null || !$timestamp) {
$this->fetch(
- $_template->cached->filepath,
- $_template->source->name,
- $_template->cache_id,
- $_template->compile_id,
+ $_smarty_tpl->cached->filepath,
+ $_smarty_tpl->source->name,
+ $_smarty_tpl->cache_id,
+ $_smarty_tpl->compile_id,
$content,
$timestamp
);
}
if (isset($content)) {
- $_smarty_tpl = $_template;
- eval("?>" . $content);
+ eval('?>' . $content);
+ $cached->content = null;
return true;
}
return false;
@@ -142,7 +163,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
*
* @param Smarty_Internal_Template $_template template object
* @param string $content content to cache
- * @return boolean success
+ *
+ * @return boolean success
*/
public function writeCachedContent(Smarty_Internal_Template $_template, $content)
{
@@ -151,21 +173,49 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
$_template->source->name,
$_template->cache_id,
$_template->compile_id,
- $_template->properties['cache_lifetime'],
+ $_template->cache_lifetime,
$content
);
}
+ /**
+ * Read cached template from cache
+ *
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return string|boolean content
+ */
+ public function readCachedContent(Smarty_Internal_Template $_template)
+ {
+ $content = $_template->cached->content ? $_template->cached->content : null;
+ $timestamp = null;
+ if ($content === null) {
+ $timestamp = null;
+ $this->fetch(
+ $_template->cached->filepath,
+ $_template->source->name,
+ $_template->cache_id,
+ $_template->compile_id,
+ $content,
+ $timestamp
+ );
+ }
+ if (isset($content)) {
+ return $content;
+ }
+ return false;
+ }
+
/**
* 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
*/
- public function clearAll(Smarty $smarty, $exp_time=null)
+ public function clearAll(Smarty $smarty, $exp_time = null)
{
- $this->cache = array();
return $this->delete(null, null, null, $exp_time);
}
@@ -177,61 +227,71 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
* @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
+ *
+ * @return int number of cache files deleted
+ * @throws \SmartyException
*/
public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
{
- $this->cache = array();
- return $this->delete($resource_name, $cache_id, $compile_id, $exp_time);
+ $cache_name = null;
+ if (isset($resource_name)) {
+ $source = Smarty_Template_Source::load(null, $smarty, $resource_name);
+ if ($source->exists) {
+ $cache_name = $source->name;
+ } else {
+ return 0;
+ }
+ }
+ return $this->delete($cache_name, $cache_id, $compile_id, $exp_time);
}
/**
* Check is cache is locked for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if cache is locked
+ *
+ * @return boolean true or false if cache is locked
*/
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
- $id = $cached->filepath;
+ $id = $cached->lock_id;
$name = $cached->source->name . '.lock';
-
- $mtime = $this->fetchTimestamp($id, $name, null, null);
+ $mtime = $this->fetchTimestamp($id, $name, $cached->cache_id, $cached->compile_id);
if ($mtime === null) {
- $this->fetch($id, $name, null, null, $content, $mtime);
+ $this->fetch($id, $name, $cached->cache_id, $cached->compile_id, $content, $mtime);
}
-
- return $mtime && time() - $mtime < $smarty->locking_timeout;
+ return $mtime && ($t = time()) - $mtime < $smarty->locking_timeout;
}
/**
* Lock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @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;
-
- $id = $cached->filepath;
+ $id = $cached->lock_id;
$name = $cached->source->name . '.lock';
- $this->save($id, $name, null, null, $smarty->locking_timeout, '');
+ $this->save($id, $name, $cached->cache_id, $cached->compile_id, $smarty->locking_timeout, '');
}
/**
* Unlock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @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;
-
$name = $cached->source->name . '.lock';
- $this->delete($name, null, null, null);
+ $this->delete($name, $cached->cache_id, $cached->compile_id, null);
}
}
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_cacheresource_keyvaluestore.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
similarity index 64%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
index dff9b65..59bf1d4 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
@@ -2,44 +2,44 @@
/**
* Smarty Internal Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
*/
/**
* Smarty Cache Handler Base for Key/Value Storage Implementations
- *
* This class implements the functionality required to use simple key/value stores
* for hierarchical cache groups. key/value stores like memcache or APC do not support
* wildcards in keys, therefore a cache group cannot be cleared like "a|*" - which
* is no problem to filesystem and RDBMS implementations.
- *
* This implementation is based on the concept of invalidation. While one specific cache
* can be identified and cleared, any range of caches cannot be identified. For this reason
* each level of the cache group hierarchy can have its own value in the store. These values
* are nothing but microtimes, telling us when a particular cache group was cleared for the
* last time. These keys are evaluated for every cache read to determine if the cache has
* been invalidated since it was created and should hence be treated as inexistent.
- *
* Although deep hierarchies are possible, they are not recommended. Try to keep your
* cache groups as shallow as possible. Anything up 3-5 parents should be ok. So
* »a|b|c« is a good depth where »a|b|c|d|e|f|g|h|i|j|k« isn't. Try to join correlating
* cache groups: if your cache groups look somewhat like »a|b|$page|$items|$whatever«
* consider using »a|b|c|$page-$items-$whatever« instead.
*
- * @package Smarty
+ * @package Smarty
* @subpackage Cacher
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
-abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
-
+abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
+{
/**
* cache for contents
+ *
* @var array
*/
protected $contents = array();
+
/**
* cache for timestamps
+ *
* @var array
*/
protected $timestamps = array();
@@ -49,15 +49,13 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
*
* @param Smarty_Template_Cached $cached cached object
* @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
{
- $cached->filepath = $_template->source->uid
- . '#' . $this->sanitize($cached->source->name)
- . '#' . $this->sanitize($cached->cache_id)
- . '#' . $this->sanitize($cached->compile_id);
-
+ $cached->filepath = $_template->source->uid . '#' . $this->sanitize($cached->source->resource) . '#' .
+ $this->sanitize($cached->cache_id) . '#' . $this->sanitize($cached->compile_id);
$this->populateTimestamp($cached);
}
@@ -65,40 +63,63 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
* 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)
{
- if (!$this->fetch($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id, $content, $timestamp, $cached->source->uid)) {
+ if (!$this->fetch(
+ $cached->filepath,
+ $cached->source->name,
+ $cached->cache_id,
+ $cached->compile_id,
+ $content,
+ $timestamp,
+ $cached->source->uid
+ )
+ ) {
return;
}
$cached->content = $content;
- $cached->timestamp = (int) $timestamp;
- $cached->exists = $cached->timestamp;
+ $cached->timestamp = (int)$timestamp;
+ $cached->exists = !!$cached->timestamp;
}
/**
* Read the cached template and process the header
*
- * @param Smarty_Internal_Template $_template template object
- * @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if the cached content does not exist
+ * @param \Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
+ * @param Smarty_Template_Cached $cached cached object
+ * @param boolean $update flag if called because cache update
+ *
+ * @return boolean true or false if the cached content does not exist
*/
- public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null)
- {
+ public function process(
+ Smarty_Internal_Template $_smarty_tpl,
+ Smarty_Template_Cached $cached = null,
+ $update = false
+ ) {
if (!$cached) {
- $cached = $_template->cached;
+ $cached = $_smarty_tpl->cached;
}
$content = $cached->content ? $cached->content : null;
$timestamp = $cached->timestamp ? $cached->timestamp : null;
if ($content === null || !$timestamp) {
- if (!$this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $content, $timestamp, $_template->source->uid)) {
+ if (!$this->fetch(
+ $_smarty_tpl->cached->filepath,
+ $_smarty_tpl->source->name,
+ $_smarty_tpl->cache_id,
+ $_smarty_tpl->compile_id,
+ $content,
+ $timestamp,
+ $_smarty_tpl->source->uid
+ )
+ ) {
return false;
}
}
if (isset($content)) {
- $_smarty_tpl = $_template;
- eval("?>" . $content);
+ eval('?>' . $content);
return true;
}
return false;
@@ -108,27 +129,59 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
* Write the rendered template output to cache
*
* @param Smarty_Internal_Template $_template template object
- * @param string $content content to cache
- * @return boolean success
+ * @param string $content content to cache
+ *
+ * @return boolean success
*/
public function writeCachedContent(Smarty_Internal_Template $_template, $content)
{
$this->addMetaTimestamp($content);
- return $this->write(array($_template->cached->filepath => $content), $_template->properties['cache_lifetime']);
+ return $this->write(array($_template->cached->filepath => $content), $_template->cache_lifetime);
+ }
+
+ /**
+ * Read cached template from cache
+ *
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return string|false content
+ */
+ public function readCachedContent(Smarty_Internal_Template $_template)
+ {
+ $content = $_template->cached->content ? $_template->cached->content : null;
+ $timestamp = null;
+ if ($content === null) {
+ if (!$this->fetch(
+ $_template->cached->filepath,
+ $_template->source->name,
+ $_template->cache_id,
+ $_template->compile_id,
+ $content,
+ $timestamp,
+ $_template->source->uid
+ )
+ ) {
+ return false;
+ }
+ }
+ if (isset($content)) {
+ return $content;
+ }
+ return false;
}
/**
* Empty cache
- *
* {@internal the $exp_time argument is ignored altogether }}
*
* @param Smarty $smarty Smarty object
* @param integer $exp_time expiration time [being ignored]
+ *
* @return integer number of cache files deleted [always -1]
- * @uses purge() to clear the whole store
- * @uses invalidate() to mark everything outdated if purge() is inapplicable
+ * @uses purge() to clear the whole store
+ * @uses invalidate() to mark everything outdated if purge() is inapplicable
*/
- public function clearAll(Smarty $smarty, $exp_time=null)
+ public function clearAll(Smarty $smarty, $exp_time = null)
{
if (!$this->purge()) {
$this->invalidate(null);
@@ -138,7 +191,6 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Empty cache for a specific template
- *
* {@internal the $exp_time argument is ignored altogether}}
*
* @param Smarty $smarty Smarty object
@@ -146,63 +198,55 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
* @param string $cache_id cache id
* @param string $compile_id compile id
* @param integer $exp_time expiration time [being ignored]
- * @return integer number of cache files deleted [always -1]
- * @uses buildCachedFilepath() to generate the CacheID
- * @uses invalidate() to mark CacheIDs parent chain as outdated
- * @uses delete() to remove CacheID from cache
+ *
+ * @return int number of cache files deleted [always -1]
+ * @throws \SmartyException
+ * @uses buildCachedFilepath() to generate the CacheID
+ * @uses invalidate() to mark CacheIDs parent chain as outdated
+ * @uses delete() to remove CacheID from cache
*/
public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
{
- $uid = $this->getTemplateUid($smarty, $resource_name, $cache_id, $compile_id);
- $cid = $uid . '#' . $this->sanitize($resource_name) . '#' . $this->sanitize($cache_id) . '#' . $this->sanitize($compile_id);
+ $uid = $this->getTemplateUid($smarty, $resource_name);
+ $cid = $uid . '#' . $this->sanitize($resource_name) . '#' . $this->sanitize($cache_id) . '#' .
+ $this->sanitize($compile_id);
$this->delete(array($cid));
$this->invalidate($cid, $resource_name, $cache_id, $compile_id, $uid);
return -1;
}
+
/**
* Get template's unique ID
*
* @param Smarty $smarty Smarty object
* @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
+ *
* @return string filepath of cache file
+ * @throws \SmartyException
*/
- protected function getTemplateUid(Smarty $smarty, $resource_name, $cache_id, $compile_id)
+ protected function getTemplateUid(Smarty $smarty, $resource_name)
{
- $uid = '';
if (isset($resource_name)) {
- $tpl = new $smarty->template_class($resource_name, $smarty);
- if ($tpl->source->exists) {
- $uid = $tpl->source->uid;
+ $source = Smarty_Template_Source::load(null, $smarty, $resource_name);
+ if ($source->exists) {
+ return $source->uid;
}
-
- // remove from template cache
- if ($smarty->allow_ambiguous_resources) {
- $_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id;
- } else {
- $_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id;
- }
- if (isset($_templateId[150])) {
- $_templateId = sha1($_templateId);
- }
- unset($smarty->template_objects[$_templateId]);
}
- return $uid;
+ return '';
}
/**
* Sanitize CacheID components
*
* @param string $string CacheID component to sanitize
+ *
* @return string sanitized CacheID component
*/
protected function sanitize($string)
{
- // some poeple smoke bad weed
$string = trim($string, '|');
if (!$string) {
- return null;
+ return '';
}
return preg_replace('#[^\w\|]+#S', '_', $string);
}
@@ -217,36 +261,42 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
* @param string $content cached content
* @param integer &$timestamp cached timestamp (epoch)
* @param string $resource_uid resource's uid
+ *
* @return boolean success
*/
- protected function fetch($cid, $resource_name = null, $cache_id = null, $compile_id = null, &$content = null, &$timestamp = null, $resource_uid = null)
- {
+ protected function fetch(
+ $cid,
+ $resource_name = null,
+ $cache_id = null,
+ $compile_id = null,
+ &$content = null,
+ &$timestamp = null,
+ $resource_uid = null
+ ) {
$t = $this->read(array($cid));
- $content = !empty($t[$cid]) ? $t[$cid] : null;
+ $content = !empty($t[ $cid ]) ? $t[ $cid ] : null;
$timestamp = null;
-
if ($content && ($timestamp = $this->getMetaTimestamp($content))) {
- $invalidated = $this->getLatestInvalidationTimestamp($cid, $resource_name, $cache_id, $compile_id, $resource_uid);
+ $invalidated =
+ $this->getLatestInvalidationTimestamp($cid, $resource_name, $cache_id, $compile_id, $resource_uid);
if ($invalidated > $timestamp) {
$timestamp = null;
$content = null;
}
}
-
return !!$content;
}
/**
* Add current microtime to the beginning of $cache_content
- *
* {@internal the header uses 8 Bytes, the first 4 Bytes are the seconds, the second 4 Bytes are the microseconds}}
*
* @param string &$content the content to be cached
*/
protected function addMetaTimestamp(&$content)
{
- $mt = explode(" ", microtime());
- $ts = pack("NN", $mt[1], (int) ($mt[0] * 100000000));
+ $mt = explode(' ', microtime());
+ $ts = pack('NN', $mt[ 1 ], (int)($mt[ 0 ] * 100000000));
$content = $ts . $content;
}
@@ -254,14 +304,17 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
* Extract the timestamp the $content was cached
*
* @param string &$content the cached content
- * @return float the microtime the content was cached
+ *
+ * @return float the microtime the content was cached
*/
protected function getMetaTimestamp(&$content)
{
- $s = unpack("N", substr($content, 0, 4));
- $m = unpack("N", substr($content, 4, 4));
- $content = substr($content, 8);
- return $s[1] + ($m[1] / 100000000);
+ extract(unpack('N1s/N1m/a*content', $content));
+ /**
+ * @var int $s
+ * @var int $m
+ */
+ return $s + ($m / 100000000);
}
/**
@@ -272,31 +325,39 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
* @param string $cache_id cache id
* @param string $compile_id compile id
* @param string $resource_uid source's uid
+ *
* @return void
*/
- protected function invalidate($cid = null, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
- {
+ protected function invalidate(
+ $cid = null,
+ $resource_name = null,
+ $cache_id = null,
+ $compile_id = null,
+ $resource_uid = null
+ ) {
$now = microtime(true);
$key = null;
// invalidate everything
if (!$resource_name && !$cache_id && !$compile_id) {
$key = 'IVK#ALL';
- }
- // invalidate all caches by template
- else if ($resource_name && !$cache_id && !$compile_id) {
- $key = 'IVK#TEMPLATE#' . $resource_uid . '#' . $this->sanitize($resource_name);
- }
- // invalidate all caches by cache group
- else if (!$resource_name && $cache_id && !$compile_id) {
- $key = 'IVK#CACHE#' . $this->sanitize($cache_id);
- }
- // invalidate all caches by compile id
- else if (!$resource_name && !$cache_id && $compile_id) {
- $key = 'IVK#COMPILE#' . $this->sanitize($compile_id);
- }
- // invalidate by combination
+ } // invalidate all caches by template
else {
- $key = 'IVK#CID#' . $cid;
+ if ($resource_name && !$cache_id && !$compile_id) {
+ $key = 'IVK#TEMPLATE#' . $resource_uid . '#' . $this->sanitize($resource_name);
+ } // invalidate all caches by cache group
+ else {
+ if (!$resource_name && $cache_id && !$compile_id) {
+ $key = 'IVK#CACHE#' . $this->sanitize($cache_id);
+ } // invalidate all caches by compile id
+ else {
+ if (!$resource_name && !$cache_id && $compile_id) {
+ $key = 'IVK#COMPILE#' . $this->sanitize($compile_id);
+ } // invalidate by combination
+ else {
+ $key = 'IVK#CID#' . $cid;
+ }
+ }
+ }
}
$this->write(array($key => $now));
}
@@ -309,10 +370,16 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
* @param string $cache_id cache id
* @param string $compile_id compile id
* @param string $resource_uid source's filepath
- * @return float the microtime the CacheID was invalidated
+ *
+ * @return float the microtime the CacheID was invalidated
*/
- protected function getLatestInvalidationTimestamp($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
- {
+ protected function getLatestInvalidationTimestamp(
+ $cid,
+ $resource_name = null,
+ $cache_id = null,
+ $compile_id = null,
+ $resource_uid = null
+ ) {
// abort if there is no CacheID
if (false && !$cid) {
return 0;
@@ -321,7 +388,6 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
if (!($_cid = $this->listInvalidationKeys($cid, $resource_name, $cache_id, $compile_id, $resource_uid))) {
return 0;
}
-
// there are no InValidationKeys
if (!($values = $this->read($_cid))) {
return 0;
@@ -333,19 +399,24 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Translate a CacheID into the list of applicable InvalidationKeys.
- *
- * Splits "some|chain|into|an|array" into array( '#clearAll#', 'some', 'some|chain', 'some|chain|into', ... )
+ * Splits 'some|chain|into|an|array' into array( '#clearAll#', 'some', 'some|chain', 'some|chain|into', ... )
*
* @param string $cid CacheID to translate
* @param string $resource_name template name
* @param string $cache_id cache id
* @param string $compile_id compile id
* @param string $resource_uid source's filepath
- * @return array list of InvalidationKeys
- * @uses $invalidationKeyPrefix to prepend to each InvalidationKey
+ *
+ * @return array list of InvalidationKeys
+ * @uses $invalidationKeyPrefix to prepend to each InvalidationKey
*/
- protected function listInvalidationKeys($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
- {
+ protected function listInvalidationKeys(
+ $cid,
+ $resource_name = null,
+ $cache_id = null,
+ $compile_id = null,
+ $resource_uid = null
+ ) {
$t = array('IVK#ALL');
$_name = $_compile = '#';
if ($resource_name) {
@@ -357,7 +428,6 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
$t[] = 'IVK#COMPILE' . $_compile;
}
$_name .= '#';
- // some poeple smoke bad weed
$cid = trim($cache_id, '|');
if (!$cid) {
return $t;
@@ -386,22 +456,25 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Check is cache is locked for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
- * @return booelan true or false if cache is locked
+ *
+ * @return boolean true or false if cache is locked
*/
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
$key = 'LOCK#' . $cached->filepath;
$data = $this->read(array($key));
- return $data && time() - $data[$key] < $smarty->locking_timeout;
+ return $data && time() - $data[ $key ] < $smarty->locking_timeout;
}
/**
* Lock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
+ *
+ * @return bool|void
*/
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -413,8 +486,10 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
/**
* Unlock cache for this template
*
- * @param Smarty $smarty Smarty object
+ * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
+ *
+ * @return bool|void
*/
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
@@ -427,26 +502,29 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
* Read values for a set of keys from cache
*
* @param array $keys list of keys to fetch
+ *
* @return array list of values with the given keys used as indexes
*/
- protected abstract function read(array $keys);
+ abstract protected function read(array $keys);
/**
* Save values for a set of keys to cache
*
* @param array $keys list of values to save
* @param int $expire expiration time
+ *
* @return boolean true on success, false on failure
*/
- protected abstract function write(array $keys, $expire=null);
+ abstract protected function write(array $keys, $expire = null);
/**
* Remove values from cache
*
* @param array $keys list of keys to delete
+ *
* @return boolean true on success, false on failure
*/
- protected abstract function delete(array $keys);
+ abstract protected function delete(array $keys);
/**
* Remove *all* values from cache
@@ -457,7 +535,4 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
{
return false;
}
-
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_data.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_data.php
new file mode 100644
index 0000000..2545ed3
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_data.php
@@ -0,0 +1,68 @@
+dataObjectName = 'Data_object ' . (isset($name) ? "'{$name}'" : self::$count);
+ $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');
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_block.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_block.php
new file mode 100644
index 0000000..9956d64
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_block.php
@@ -0,0 +1,90 @@
+name = $name;
+ $this->tplIndex = $tplIndex;
+ }
+
+ /**
+ * Compiled block code overloaded by {block} class
+ *
+ * @param \Smarty_Internal_Template $tpl
+ */
+ public function callBlock(Smarty_Internal_Template $tpl)
+ {
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_cacheresource_file.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_cacheresource_file.php
new file mode 100644
index 0000000..6161844
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_cacheresource_file.php
@@ -0,0 +1,239 @@
+source;
+ $smarty = &$_template->smarty;
+ $_compile_dir_sep = $smarty->use_sub_dirs ? DIRECTORY_SEPARATOR : '^';
+ $_filepath = sha1($source->uid . $smarty->_joined_template_dir);
+ $cached->filepath = $smarty->getCacheDir();
+ if (isset($_template->cache_id)) {
+ $cached->filepath .= preg_replace(
+ array(
+ '![^\w|]+!',
+ '![|]+!'
+ ),
+ array(
+ '_',
+ $_compile_dir_sep
+ ),
+ $_template->cache_id
+ ) . $_compile_dir_sep;
+ }
+ if (isset($_template->compile_id)) {
+ $cached->filepath .= preg_replace('![^\w]+!', '_', $_template->compile_id) . $_compile_dir_sep;
+ }
+ // if use_sub_dirs, break file into directories
+ if ($smarty->use_sub_dirs) {
+ $cached->filepath .= $_filepath[ 0 ] . $_filepath[ 1 ] . DIRECTORY_SEPARATOR . $_filepath[ 2 ] .
+ $_filepath[ 3 ] .
+ DIRECTORY_SEPARATOR .
+ $_filepath[ 4 ] . $_filepath[ 5 ] . DIRECTORY_SEPARATOR;
+ }
+ $cached->filepath .= $_filepath;
+ $basename = $source->handler->getBasename($source);
+ if (!empty($basename)) {
+ $cached->filepath .= '.' . $basename;
+ }
+ if ($smarty->cache_locking) {
+ $cached->lock_id = $cached->filepath . '.lock';
+ }
+ $cached->filepath .= '.php';
+ $cached->timestamp = $cached->exists = is_file($cached->filepath);
+ if ($cached->exists) {
+ $cached->timestamp = filemtime($cached->filepath);
+ }
+ }
+
+ /**
+ * 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 = $cached->exists = is_file($cached->filepath);
+ if ($cached->exists) {
+ $cached->timestamp = filemtime($cached->filepath);
+ }
+ }
+
+ /**
+ * Read the cached template and process its header
+ *
+ * @param \Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
+ * @param Smarty_Template_Cached $cached cached object
+ * @param bool $update flag if called because cache update
+ *
+ * @return boolean true or false if the cached content does not exist
+ */
+ public function process(
+ Smarty_Internal_Template $_smarty_tpl,
+ Smarty_Template_Cached $cached = null,
+ $update = false
+ ) {
+ $_smarty_tpl->cached->valid = false;
+ if ($update && defined('HHVM_VERSION')) {
+ eval('?>' . file_get_contents($_smarty_tpl->cached->filepath));
+ return true;
+ } else {
+ return @include $_smarty_tpl->cached->filepath;
+ }
+ }
+
+ /**
+ * Write the rendered template output to cache
+ *
+ * @param Smarty_Internal_Template $_template template object
+ * @param string $content content to cache
+ *
+ * @return bool success
+ * @throws \SmartyException
+ */
+ public function writeCachedContent(Smarty_Internal_Template $_template, $content)
+ {
+ if ($_template->smarty->ext->_writeFile->writeFile(
+ $_template->cached->filepath,
+ $content,
+ $_template->smarty
+ ) === true
+ ) {
+ if (function_exists('opcache_invalidate')
+ && (!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api'))) < 1
+ ) {
+ opcache_invalidate($_template->cached->filepath, true);
+ } elseif (function_exists('apc_compile_file')) {
+ apc_compile_file($_template->cached->filepath);
+ }
+ $cached = $_template->cached;
+ $cached->timestamp = $cached->exists = is_file($cached->filepath);
+ if ($cached->exists) {
+ $cached->timestamp = filemtime($cached->filepath);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Read cached template from cache
+ *
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return string content
+ */
+ public function readCachedContent(Smarty_Internal_Template $_template)
+ {
+ if (is_file($_template->cached->filepath)) {
+ return file_get_contents($_template->cached->filepath);
+ }
+ 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 $smarty->ext->_cacheResourceFile->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)
+ {
+ return $smarty->ext->_cacheResourceFile->clear($smarty, $resource_name, $cache_id, $compile_id, $exp_time);
+ }
+
+ /**
+ * 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();
+ }
+ if (is_file($cached->lock_id)) {
+ $t = filemtime($cached->lock_id);
+ return $t && (time() - $t < $smarty->locking_timeout);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * 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/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_append.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_append.php
similarity index 58%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_append.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_append.php
index f6036e8..1a9befb 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_append.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_append.php
@@ -1,44 +1,46 @@
required_attributes = array('var', 'value');
$this->shorttag_order = array('var', 'value');
$this->optional_attributes = array('scope', 'index');
+ $this->mapCache = array();
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
// map to compile assign attributes
- if (isset($_attr['index'])) {
- $_params['smarty_internal_index'] = '[' . $_attr['index'] . ']';
- unset($_attr['index']);
+ if (isset($_attr[ 'index' ])) {
+ $_params[ 'smarty_internal_index' ] = '[' . $_attr[ 'index' ] . ']';
+ unset($_attr[ 'index' ]);
} else {
- $_params['smarty_internal_index'] = '[]';
+ $_params[ 'smarty_internal_index' ] = '[]';
}
$_new_attr = array();
foreach ($_attr as $key => $value) {
@@ -47,7 +49,4 @@ class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign {
// call compile assign
return parent::compile($_new_attr, $compiler, $_params);
}
-
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_assign.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_assign.php
new file mode 100644
index 0000000..1f0ab9b
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_assign.php
@@ -0,0 +1,96 @@
+ Smarty::SCOPE_LOCAL, 'parent' => Smarty::SCOPE_PARENT,
+ 'root' => Smarty::SCOPE_ROOT, 'global' => Smarty::SCOPE_GLOBAL,
+ 'tpl_root' => Smarty::SCOPE_TPL_ROOT, 'smarty' => Smarty::SCOPE_SMARTY
+ );
+
+ /**
+ * Compiles code for the {assign} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws \SmartyCompilerException
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
+ {
+ // the following must be assigned at runtime because it will be overwritten in Smarty_Internal_Compile_Append
+ $this->required_attributes = array('var', 'value');
+ $this->shorttag_order = array('var', 'value');
+ $this->optional_attributes = array('scope');
+ $this->mapCache = array();
+ $_nocache = false;
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ // nocache ?
+ if ($_var = $compiler->getId($_attr[ 'var' ])) {
+ $_var = "'{$_var}'";
+ } else {
+ $_var = $_attr[ 'var' ];
+ }
+ if ($compiler->tag_nocache || $compiler->nocache) {
+ $_nocache = true;
+ // create nocache var to make it know for further compiling
+ $compiler->setNocacheInVariable($_attr[ 'var' ]);
+ }
+ // scope setup
+ if ($_attr[ 'noscope' ]) {
+ $_scope = -1;
+ } else {
+ $_scope = $compiler->convertScope($_attr, $this->valid_scopes);
+ }
+ // optional parameter
+ $_params = '';
+ if ($_nocache || $_scope) {
+ $_params .= ' ,' . var_export($_nocache, true);
+ }
+ if ($_scope) {
+ $_params .= ' ,' . $_scope;
+ }
+ if (isset($parameter[ 'smarty_internal_index' ])) {
+ $output =
+ "tpl_vars[{$_var}]) ? \$_smarty_tpl->tpl_vars[{$_var}]->value : array();\n";
+ $output .= "if (!(is_array(\$_tmp_array) || \$_tmp_array instanceof ArrayAccess)) {\n";
+ $output .= "settype(\$_tmp_array, 'array');\n";
+ $output .= "}\n";
+ $output .= "\$_tmp_array{$parameter['smarty_internal_index']} = {$_attr['value']};\n";
+ $output .= "\$_smarty_tpl->_assignInScope({$_var}, \$_tmp_array{$_params});?>";
+ } else {
+ $output = "_assignInScope({$_var}, {$_attr['value']}{$_params});?>";
+ }
+ return $output;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_block.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_block.php
new file mode 100644
index 0000000..cbaccd2
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_block.php
@@ -0,0 +1,189 @@
+
+ */
+class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inheritance
+{
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $required_attributes = array('name');
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $shorttag_order = array('name');
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $option_flags = array('hide', 'nocache');
+
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $optional_attributes = array('assign');
+
+ /**
+ * Compiles code for the {block} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
+ {
+ if (!isset($compiler->_cache[ 'blockNesting' ])) {
+ $compiler->_cache[ 'blockNesting' ] = 0;
+ }
+ if ($compiler->_cache[ 'blockNesting' ] === 0) {
+ // make sure that inheritance gets initialized in template code
+ $this->registerInit($compiler);
+ $this->option_flags = array('hide', 'nocache', 'append', 'prepend');
+ } else {
+ $this->option_flags = array('hide', 'nocache');
+ }
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ ++$compiler->_cache[ 'blockNesting' ];
+ $_className = 'Block_' . preg_replace('![^\w]+!', '_', uniqid(mt_rand(), true));
+ $compiler->_cache[ 'blockName' ][ $compiler->_cache[ 'blockNesting' ] ] = $_attr[ 'name' ];
+ $compiler->_cache[ 'blockClass' ][ $compiler->_cache[ 'blockNesting' ] ] = $_className;
+ $compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ] = array();
+ $compiler->_cache[ 'blockParams' ][ 1 ][ 'subBlocks' ][ trim($_attr[ 'name' ], '"\'') ][] = $_className;
+ $this->openTag(
+ $compiler,
+ 'block',
+ array(
+ $_attr, $compiler->nocache, $compiler->parser->current_buffer,
+ $compiler->template->compiled->has_nocache_code,
+ $compiler->template->caching
+ )
+ );
+ $compiler->saveRequiredPlugins(true);
+ $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
+ $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
+ $compiler->template->compiled->has_nocache_code = false;
+ $compiler->suppressNocacheProcessing = true;
+ }
+}
+
+/**
+ * Smarty Internal Plugin Compile BlockClose Class
+ */
+class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_Compile_Shared_Inheritance
+{
+ /**
+ * Compiles code for the {/block} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return bool true
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
+ {
+ list($_attr, $_nocache, $_buffer, $_has_nocache_code, $_caching) = $this->closeTag($compiler, array('block'));
+ // init block parameter
+ $_block = $compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ];
+ unset($compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ]);
+ $_name = $_attr[ 'name' ];
+ $_assign = isset($_attr[ 'assign' ]) ? $_attr[ 'assign' ] : null;
+ unset($_attr[ 'assign' ], $_attr[ 'name' ]);
+ foreach ($_attr as $name => $stat) {
+ if ((is_bool($stat) && $stat !== false) || (!is_bool($stat) && $stat !== 'false')) {
+ $_block[ $name ] = 'true';
+ }
+ }
+ $_className = $compiler->_cache[ 'blockClass' ][ $compiler->_cache[ 'blockNesting' ] ];
+ // get compiled block code
+ $_functionCode = $compiler->parser->current_buffer;
+ // setup buffer for template function code
+ $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
+ $output = "cStyleComment(" {block {$_name}} ") . "\n";
+ $output .= "class {$_className} extends Smarty_Internal_Block\n";
+ $output .= "{\n";
+ foreach ($_block as $property => $value) {
+ $output .= "public \${$property} = " . var_export($value, true) . ";\n";
+ }
+ $output .= "public function callBlock(Smarty_Internal_Template \$_smarty_tpl) {\n";
+ $output .= $compiler->compileRequiredPlugins();
+ $compiler->restoreRequiredPlugins();
+ if ($compiler->template->compiled->has_nocache_code) {
+ $output .= "\$_smarty_tpl->cached->hashes['{$compiler->template->compiled->nocache_hash}'] = true;\n";
+ }
+ if (isset($_assign)) {
+ $output .= "ob_start();\n";
+ }
+ $output .= "?>\n";
+ $compiler->parser->current_buffer->append_subtree(
+ $compiler->parser,
+ new Smarty_Internal_ParseTree_Tag(
+ $compiler->parser,
+ $output
+ )
+ );
+ $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode);
+ $output = "assign({$_assign}, ob_get_clean());\n";
+ }
+ $output .= "}\n";
+ $output .= "}\n";
+ $output .= $compiler->cStyleComment(" {/block {$_name}} ") . "\n\n";
+ $output .= "?>\n";
+ $compiler->parser->current_buffer->append_subtree(
+ $compiler->parser,
+ new Smarty_Internal_ParseTree_Tag(
+ $compiler->parser,
+ $output
+ )
+ );
+ $compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser);
+ $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
+ // restore old status
+ $compiler->template->compiled->has_nocache_code = $_has_nocache_code;
+ $compiler->tag_nocache = $compiler->nocache;
+ $compiler->nocache = $_nocache;
+ $compiler->parser->current_buffer = $_buffer;
+ $output = "_cache[ 'blockNesting' ] === 1) {
+ $output .= "\$_smarty_tpl->inheritance->instanceBlock(\$_smarty_tpl, '$_className', $_name);\n";
+ } else {
+ $output .= "\$_smarty_tpl->inheritance->instanceBlock(\$_smarty_tpl, '$_className', $_name, \$this->tplIndex);\n";
+ }
+ $output .= "?>\n";
+ --$compiler->_cache[ 'blockNesting' ];
+ if ($compiler->_cache[ 'blockNesting' ] === 0) {
+ unset($compiler->_cache[ 'blockNesting' ]);
+ }
+ $compiler->has_code = true;
+ $compiler->suppressNocacheProcessing = true;
+ return $output;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_block_child.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_block_child.php
new file mode 100644
index 0000000..588d186
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_block_child.php
@@ -0,0 +1,24 @@
+
+ */
+class Smarty_Internal_Compile_Block_Child extends Smarty_Internal_Compile_Child
+{
+ /**
+ * Tag name
+ *
+ * @var string
+ */
+ public $tag = 'block_child';
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_block_parent.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_block_parent.php
new file mode 100644
index 0000000..97f11ca
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_block_parent.php
@@ -0,0 +1,31 @@
+
+ */
+class Smarty_Internal_Compile_Block_Parent extends Smarty_Internal_Compile_Child
+{
+ /**
+ * Tag name
+ *
+ * @var string
+ */
+ public $tag = 'block_parent';
+
+ /**
+ * Block type
+ *
+ * @var string
+ */
+ public $blockType = 'Parent';
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_break.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_break.php
new file mode 100644
index 0000000..1ee8d75
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_break.php
@@ -0,0 +1,117 @@
+checkLevels($args, $compiler);
+ $output = " 0 && $this->tag === 'continue') {
+ $foreachLevels--;
+ }
+ if ($foreachLevels > 0) {
+ /* @var Smarty_Internal_Compile_Foreach $foreachCompiler */
+ $foreachCompiler = $compiler->getTagCompiler('foreach');
+ $output .= $foreachCompiler->compileRestore($foreachLevels);
+ }
+ $output .= "{$this->tag} {$levels};?>";
+ return $output;
+ }
+
+ /**
+ * check attributes and return array of break and foreach levels
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
+ * @return array
+ * @throws \SmartyCompilerException
+ */
+ public function checkLevels($args, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ static $_is_loopy = array('for' => 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', null, true);
+ }
+ if (isset($_attr[ 'levels' ])) {
+ if (!is_numeric($_attr[ 'levels' ])) {
+ $compiler->trigger_template_error('level attribute must be a numeric constant', null, true);
+ }
+ $levels = $_attr[ 'levels' ];
+ } else {
+ $levels = 1;
+ }
+ $level_count = $levels;
+ $stack_count = count($compiler->_tag_stack) - 1;
+ $foreachLevels = 0;
+ $lastTag = '';
+ while ($level_count > 0 && $stack_count >= 0) {
+ if (isset($_is_loopy[ $compiler->_tag_stack[ $stack_count ][ 0 ] ])) {
+ $lastTag = $compiler->_tag_stack[ $stack_count ][ 0 ];
+ if ($level_count === 0) {
+ break;
+ }
+ $level_count--;
+ if ($compiler->_tag_stack[ $stack_count ][ 0 ] === 'foreach') {
+ $foreachLevels++;
+ }
+ }
+ $stack_count--;
+ }
+ if ($level_count !== 0) {
+ $compiler->trigger_template_error("cannot {$this->tag} {$levels} level(s)", null, true);
+ }
+ if ($lastTag === 'foreach' && $this->tag === 'break' && $foreachLevels > 0) {
+ $foreachLevels--;
+ }
+ return array($levels, $foreachLevels);
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_call.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_call.php
new file mode 100644
index 0000000..445cabc
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_call.php
@@ -0,0 +1,89 @@
+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 = trim($_attr['name'], "''");
+ $_name = $_attr[ 'name' ];
+ unset($_attr[ 'name' ], $_attr[ 'assign' ], $_attr[ 'nocache' ]);
+ // set flag (compiled code of {function} must be included in cache file
+ if (!$compiler->template->caching || $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";
+ }
+ }
+ $_params = 'array(' . implode(',', $_paramsArray) . ')';
+ //$compiler->suppressNocacheProcessing = true;
+ // was there an assign attribute
+ if (isset($_assign)) {
+ $_output =
+ "smarty->ext->_tplFunction->callTemplateFunction(\$_smarty_tpl, {$_name}, {$_params}, {$_nocache});\n\$_smarty_tpl->assign({$_assign}, ob_get_clean());?>\n";
+ } else {
+ $_output =
+ "smarty->ext->_tplFunction->callTemplateFunction(\$_smarty_tpl, {$_name}, {$_params}, {$_nocache});?>\n";
+ }
+ return $_output;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_capture.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_capture.php
new file mode 100644
index 0000000..a4ffbc9
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_capture.php
@@ -0,0 +1,105 @@
+smarty->ext->_capture->getBuffer($_smarty_tpl' .
+ (isset($parameter[ 1 ]) ? ", {$parameter[ 1 ]})" : ')');
+ }
+
+ /**
+ * Compiles code for the {capture} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param null $parameter
+ *
+ * @return string compiled code
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter = null)
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args, $parameter, 'capture');
+ $buffer = isset($_attr[ 'name' ]) ? $_attr[ 'name' ] : "'default'";
+ $assign = isset($_attr[ 'assign' ]) ? $_attr[ 'assign' ] : 'null';
+ $append = isset($_attr[ 'append' ]) ? $_attr[ 'append' ] : 'null';
+ $compiler->_cache[ 'capture_stack' ][] = array($compiler->nocache);
+ // maybe nocache because of nocache variables
+ $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
+ $_output = "smarty->ext->_capture->open(\$_smarty_tpl, $buffer, $assign, $append);?>";
+ 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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param null $parameter
+ *
+ * @return string compiled code
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args, $parameter, '/capture');
+ // must endblock be nocache?
+ if ($compiler->nocache) {
+ $compiler->tag_nocache = true;
+ }
+ list($compiler->nocache) = array_pop($compiler->_cache[ 'capture_stack' ]);
+ return "smarty->ext->_capture->close(\$_smarty_tpl);?>";
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_child.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_child.php
new file mode 100644
index 0000000..f728c18
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_child.php
@@ -0,0 +1,79 @@
+
+ */
+class Smarty_Internal_Compile_Child extends Smarty_Internal_CompileBase
+{
+ /**
+ * Attribute definition: Overwrites base class.
+ *
+ * @var array
+ * @see Smarty_Internal_CompileBase
+ */
+ public $optional_attributes = array('assign');
+
+ /**
+ * Tag name
+ *
+ * @var string
+ */
+ public $tag = 'child';
+
+ /**
+ * Block type
+ *
+ * @var string
+ */
+ public $blockType = 'Child';
+
+ /**
+ * Compiles code for the {child} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws \SmartyCompilerException
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $tag = isset($parameter[ 0 ]) ? "'{$parameter[0]}'" : "'{{$this->tag}}'";
+ if (!isset($compiler->_cache[ 'blockNesting' ])) {
+ $compiler->trigger_template_error(
+ "{$tag} used outside {block} tags ",
+ $compiler->parser->lex->taglineno
+ );
+ }
+ $compiler->has_code = true;
+ $compiler->suppressNocacheProcessing = true;
+ if ($this->blockType === 'Child') {
+ $compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ][ 'callsChild' ] = 'true';
+ }
+ $_assign = isset($_attr[ 'assign' ]) ? $_attr[ 'assign' ] : null;
+ $output = "inheritance->call' . $this->blockType . '($_smarty_tpl, $this' .
+ ($this->blockType === 'Child' ? '' : ", {$tag}") . ");\n";
+ if (isset($_assign)) {
+ $output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n";
+ }
+ $output .= "?>\n";
+ return $output;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_config_load.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_config_load.php
new file mode 100644
index 0000000..8fe64ee
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_config_load.php
@@ -0,0 +1,96 @@
+ Smarty::SCOPE_LOCAL, 'parent' => Smarty::SCOPE_PARENT,
+ 'root' => Smarty::SCOPE_ROOT, 'tpl_root' => Smarty::SCOPE_TPL_ROOT,
+ 'smarty' => Smarty::SCOPE_SMARTY, 'global' => Smarty::SCOPE_SMARTY
+ );
+
+ /**
+ * Compiles code for the {config_load} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws \SmartyCompilerException
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ if ($_attr[ 'nocache' ] === true) {
+ $compiler->trigger_template_error('nocache option not allowed', null, true);
+ }
+ // save possible attributes
+ $conf_file = $_attr[ 'file' ];
+ if (isset($_attr[ 'section' ])) {
+ $section = $_attr[ 'section' ];
+ } else {
+ $section = 'null';
+ }
+ // scope setup
+ if ($_attr[ 'noscope' ]) {
+ $_scope = -1;
+ } else {
+ $_scope = $compiler->convertScope($_attr, $this->valid_scopes);
+ }
+ // create config object
+ $_output =
+ "smarty->ext->configLoad->_loadConfigFile(\$_smarty_tpl, {$conf_file}, {$section}, {$_scope});\n?>\n";
+ return $_output;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_continue.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_continue.php
new file mode 100644
index 0000000..e545728
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_continue.php
@@ -0,0 +1,25 @@
+getAttributes($compiler, $args);
-
// compile always as nocache
$compiler->tag_nocache = true;
-
// display debug template
- $_output = "smarty->loadPlugin('Smarty_Internal_Debug'); Smarty_Internal_Debug::display_debug(\$_smarty_tpl); ?>";
+ $_output =
+ "display_debug(\$_smarty_tpl);\n";
+ $_output .= "unset(\$_smarty_debug);\n?>";
return $_output;
}
-
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_eval.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_eval.php
similarity index 69%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_eval.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_eval.php
index 6cf481b..8e0174e 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_eval.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_eval.php
@@ -1,22 +1,21 @@
required_attributes = array('var');
- $this->optional_attributes = array('assign');
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
- if (isset($_attr['assign'])) {
- // output will be stored in a smarty variable instead of beind displayed
- $_assign = $_attr['assign'];
+ if (isset($_attr[ 'assign' ])) {
+ // output will be stored in a smarty variable instead of being displayed
+ $_assign = $_attr[ 'assign' ];
}
-
// create template object
- $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'.".$_attr['var'].", \$_smarty_tpl->smarty, \$_smarty_tpl);";
+ $_output =
+ "\$_template = new {$compiler->smarty->template_class}('eval:'.{$_attr[ 'var' ]}, \$_smarty_tpl->smarty, \$_smarty_tpl);";
//was there an assign attribute?
if (isset($_assign)) {
$_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());";
} else {
- $_output .= "echo \$_template->fetch();";
+ $_output .= 'echo $_template->fetch();';
}
return "";
}
-
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_extends.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_extends.php
new file mode 100644
index 0000000..d72d2b7
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_extends.php
@@ -0,0 +1,158 @@
+getAttributes($compiler, $args);
+ if ($_attr[ 'nocache' ] === true) {
+ $compiler->trigger_template_error('nocache option not allowed', $compiler->parser->lex->line - 1);
+ }
+ if (strpos($_attr[ 'file' ], '$_tmp') !== false) {
+ $compiler->trigger_template_error('illegal value for file attribute', $compiler->parser->lex->line - 1);
+ }
+ // add code to initialize inheritance
+ $this->registerInit($compiler, true);
+ $file = trim($_attr[ 'file' ], '\'"');
+ if (strlen($file) > 8 && substr($file, 0, 8) === 'extends:') {
+ // generate code for each template
+ $files = array_reverse(explode('|', substr($file, 8)));
+ $i = 0;
+ foreach ($files as $file) {
+ if ($file[ 0 ] === '"') {
+ $file = trim($file, '".');
+ } else {
+ $file = "'{$file}'";
+ }
+ $i++;
+ if ($i === count($files) && isset($_attr[ 'extends_resource' ])) {
+ $this->compileEndChild($compiler);
+ }
+ $this->compileInclude($compiler, $file);
+ }
+ if (!isset($_attr[ 'extends_resource' ])) {
+ $this->compileEndChild($compiler);
+ }
+ } else {
+ $this->compileEndChild($compiler, $_attr[ 'file' ]);
+ }
+ $compiler->has_code = false;
+ return '';
+ }
+
+ /**
+ * Add code for inheritance endChild() method to end of template
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ * @param null|string $template optional inheritance parent template
+ *
+ * @throws \SmartyCompilerException
+ * @throws \SmartyException
+ */
+ private function compileEndChild(Smarty_Internal_TemplateCompilerBase $compiler, $template = null)
+ {
+ $inlineUids = '';
+ if (isset($template) && $compiler->smarty->merge_compiled_includes) {
+ $code = $compiler->compileTag('include', array($template, array('scope' => 'parent')));
+ if (preg_match('/([,][\s]*[\'][a-z0-9]+[\'][,][\s]*[\']content.*[\'])[)]/', $code, $match)) {
+ $inlineUids = $match[ 1 ];
+ }
+ }
+ $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag(
+ $compiler->parser,
+ 'inheritance->endChild($_smarty_tpl' .
+ (isset($template) ?
+ ", {$template}{$inlineUids}" :
+ '') . ");\n?>"
+ );
+ }
+
+ /**
+ * Add code for including subtemplate to end of template
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ * @param string $template subtemplate name
+ *
+ * @throws \SmartyCompilerException
+ * @throws \SmartyException
+ */
+ private function compileInclude(Smarty_Internal_TemplateCompilerBase $compiler, $template)
+ {
+ $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag(
+ $compiler->parser,
+ $compiler->compileTag(
+ 'include',
+ array(
+ $template,
+ array('scope' => 'parent')
+ )
+ )
+ );
+ }
+
+ /**
+ * Create source code for {extends} from source components array
+ *
+ * @param \Smarty_Internal_Template $template
+ *
+ * @return string
+ */
+ public static function extendsSourceArrayCode(Smarty_Internal_Template $template)
+ {
+ $resources = array();
+ foreach ($template->source->components as $source) {
+ $resources[] = $source->resource;
+ }
+ return $template->smarty->left_delimiter . 'extends file=\'extends:' . join('|', $resources) .
+ '\' extends_resource=true' . $template->smarty->right_delimiter;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_for.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_for.php
new file mode 100644
index 0000000..3f113e5
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_for.php
@@ -0,0 +1,164 @@
+loopNesting++;
+ if ($parameter === 0) {
+ $this->required_attributes = array('start', 'to');
+ $this->optional_attributes = array('max', 'step');
+ } else {
+ $this->required_attributes = array('start', 'ifexp', 'var', 'step');
+ $this->optional_attributes = array();
+ }
+ $this->mapCache = array();
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $output = "tpl_vars[$var] = new Smarty_Variable(null, \$_smarty_tpl->isRenderingCache);\n";
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->value{$index} = {$_statement['value']};\n";
+ }
+ if (is_array($_attr[ 'var' ])) {
+ $var = $_attr[ 'var' ][ 'var' ];
+ $index = $_attr[ 'var' ][ 'smarty_internal_index' ];
+ } else {
+ $var = $_attr[ 'var' ];
+ $index = '';
+ }
+ $output .= "if ($_attr[ifexp]) {\nfor (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$var]->value{$index}$_attr[step]) {\n";
+ } else {
+ $_statement = $_attr[ 'start' ];
+ if (is_array($_statement[ 'var' ])) {
+ $var = $_statement[ 'var' ][ 'var' ];
+ $index = $_statement[ 'var' ][ 'smarty_internal_index' ];
+ } else {
+ $var = $_statement[ 'var' ];
+ $index = '';
+ }
+ $output .= "\$_smarty_tpl->tpl_vars[$var] = new Smarty_Variable(null, \$_smarty_tpl->isRenderingCache);";
+ if (isset($_attr[ 'step' ])) {
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->step = $_attr[step];";
+ } else {
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->step = 1;";
+ }
+ if (isset($_attr[ 'max' ])) {
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->total = (int) min(ceil((\$_smarty_tpl->tpl_vars[$var]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$var]->step)),$_attr[max]);\n";
+ } else {
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->total = (int) ceil((\$_smarty_tpl->tpl_vars[$var]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$var]->step));\n";
+ }
+ $output .= "if (\$_smarty_tpl->tpl_vars[$var]->total > 0) {\n";
+ $output .= "for (\$_smarty_tpl->tpl_vars[$var]->value{$index} = $_statement[value], \$_smarty_tpl->tpl_vars[$var]->iteration = 1;\$_smarty_tpl->tpl_vars[$var]->iteration <= \$_smarty_tpl->tpl_vars[$var]->total;\$_smarty_tpl->tpl_vars[$var]->value{$index} += \$_smarty_tpl->tpl_vars[$var]->step, \$_smarty_tpl->tpl_vars[$var]->iteration++) {\n";
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->first = \$_smarty_tpl->tpl_vars[$var]->iteration === 1;";
+ $output .= "\$_smarty_tpl->tpl_vars[$var]->last = \$_smarty_tpl->tpl_vars[$var]->iteration === \$_smarty_tpl->tpl_vars[$var]->total;";
+ }
+ $output .= '?>';
+ $this->openTag($compiler, 'for', array('for', $compiler->nocache));
+ // maybe nocache because of nocache variables
+ $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
+ // return compiled code
+ return $output;
+ }
+}
+
+/**
+ * Smarty Internal Plugin Compile Forelse Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase
+{
+ /**
+ * Compiles code for the {forelse} 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) = $this->closeTag($compiler, array('for'));
+ $this->openTag($compiler, 'forelse', array('forelse', $nocache));
+ return "";
+ }
+}
+
+/**
+ * Smarty Internal Plugin Compile Forclose Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase
+{
+ /**
+ * Compiles code for the {/for} 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)
+ {
+ $compiler->loopNesting--;
+ // 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('for', 'forelse'));
+ $output = "";
+ return $output;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_foreach.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_foreach.php
new file mode 100644
index 0000000..a68da54
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_foreach.php
@@ -0,0 +1,343 @@
+loopNesting++;
+ // init
+ $this->isNamed = false;
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $from = $_attr[ 'from' ];
+ $item = $compiler->getId($_attr[ 'item' ]);
+ if ($item === false) {
+ $item = $compiler->getVariableName($_attr[ 'item' ]);
+ }
+ $key = $name = null;
+ $attributes = array('item' => $item);
+ if (isset($_attr[ 'key' ])) {
+ $key = $compiler->getId($_attr[ 'key' ]);
+ if ($key === false) {
+ $key = $compiler->getVariableName($_attr[ 'key' ]);
+ }
+ $attributes[ 'key' ] = $key;
+ }
+ if (isset($_attr[ 'name' ])) {
+ $this->isNamed = true;
+ $name = $attributes[ 'name' ] = $compiler->getId($_attr[ 'name' ]);
+ }
+ foreach ($attributes as $a => $v) {
+ if ($v === false) {
+ $compiler->trigger_template_error("'{$a}' attribute/variable has illegal value", null, true);
+ }
+ }
+ $fromName = $compiler->getVariableName($_attr[ 'from' ]);
+ if ($fromName) {
+ foreach (array('item', 'key') as $a) {
+ if (isset($attributes[ $a ]) && $attributes[ $a ] === $fromName) {
+ $compiler->trigger_template_error(
+ "'{$a}' and 'from' may not have same variable name '{$fromName}'",
+ null,
+ true
+ );
+ }
+ }
+ }
+ $itemVar = "\$_smarty_tpl->tpl_vars['{$item}']";
+ $local = '$__foreach_' . $attributes[ 'item' ] . '_' . $this->counter++ . '_';
+ // search for used tag attributes
+ $itemAttr = array();
+ $namedAttr = array();
+ $this->scanForProperties($attributes, $compiler);
+ if (!empty($this->matchResults[ 'item' ])) {
+ $itemAttr = $this->matchResults[ 'item' ];
+ }
+ if (!empty($this->matchResults[ 'named' ])) {
+ $namedAttr = $this->matchResults[ 'named' ];
+ }
+ if (isset($_attr[ 'properties' ]) && preg_match_all('/[\'](.*?)[\']/', $_attr[ 'properties' ], $match)) {
+ foreach ($match[ 1 ] as $prop) {
+ if (in_array($prop, $this->itemProperties)) {
+ $itemAttr[ $prop ] = true;
+ } else {
+ $compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
+ }
+ }
+ if ($this->isNamed) {
+ foreach ($match[ 1 ] as $prop) {
+ if (in_array($prop, $this->nameProperties)) {
+ $nameAttr[ $prop ] = true;
+ } else {
+ $compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
+ }
+ }
+ }
+ }
+ if (isset($itemAttr[ 'first' ])) {
+ $itemAttr[ 'index' ] = true;
+ }
+ if (isset($namedAttr[ 'first' ])) {
+ $namedAttr[ 'index' ] = true;
+ }
+ if (isset($namedAttr[ 'last' ])) {
+ $namedAttr[ 'iteration' ] = true;
+ $namedAttr[ 'total' ] = true;
+ }
+ if (isset($itemAttr[ 'last' ])) {
+ $itemAttr[ 'iteration' ] = true;
+ $itemAttr[ 'total' ] = true;
+ }
+ if (isset($namedAttr[ 'show' ])) {
+ $namedAttr[ 'total' ] = true;
+ }
+ if (isset($itemAttr[ 'show' ])) {
+ $itemAttr[ 'total' ] = true;
+ }
+ $keyTerm = '';
+ if (isset($attributes[ 'key' ])) {
+ $keyTerm = "\$_smarty_tpl->tpl_vars['{$key}']->value => ";
+ }
+ if (isset($itemAttr[ 'key' ])) {
+ $keyTerm = "{$itemVar}->key => ";
+ }
+ if ($this->isNamed) {
+ $foreachVar = "\$_smarty_tpl->tpl_vars['__smarty_foreach_{$attributes['name']}']";
+ }
+ $needTotal = isset($itemAttr[ 'total' ]);
+ // Register tag
+ $this->openTag(
+ $compiler,
+ 'foreach',
+ array('foreach', $compiler->nocache, $local, $itemVar, empty($itemAttr) ? 1 : 2)
+ );
+ // maybe nocache because of nocache variables
+ $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
+ // generate output code
+ $output = "smarty->ext->_foreach->init(\$_smarty_tpl, $from, " .
+ var_export($item, true);
+ if ($name || $needTotal || $key) {
+ $output .= ', ' . var_export($needTotal, true);
+ }
+ if ($name || $key) {
+ $output .= ', ' . var_export($key, true);
+ }
+ if ($name) {
+ $output .= ', ' . var_export($name, true) . ', ' . var_export($namedAttr, true);
+ }
+ $output .= ");\n";
+ if (isset($itemAttr[ 'show' ])) {
+ $output .= "{$itemVar}->show = ({$itemVar}->total > 0);\n";
+ }
+ if (isset($itemAttr[ 'iteration' ])) {
+ $output .= "{$itemVar}->iteration = 0;\n";
+ }
+ if (isset($itemAttr[ 'index' ])) {
+ $output .= "{$itemVar}->index = -1;\n";
+ }
+ $output .= "{$itemVar}->do_else = true;\n";
+ $output .= "if (\$_from !== null) foreach (\$_from as {$keyTerm}{$itemVar}->value) {\n";
+ $output .= "{$itemVar}->do_else = false;\n";
+ if (isset($attributes[ 'key' ]) && isset($itemAttr[ 'key' ])) {
+ $output .= "\$_smarty_tpl->tpl_vars['{$key}']->value = {$itemVar}->key;\n";
+ }
+ if (isset($itemAttr[ 'iteration' ])) {
+ $output .= "{$itemVar}->iteration++;\n";
+ }
+ if (isset($itemAttr[ 'index' ])) {
+ $output .= "{$itemVar}->index++;\n";
+ }
+ if (isset($itemAttr[ 'first' ])) {
+ $output .= "{$itemVar}->first = !{$itemVar}->index;\n";
+ }
+ if (isset($itemAttr[ 'last' ])) {
+ $output .= "{$itemVar}->last = {$itemVar}->iteration === {$itemVar}->total;\n";
+ }
+ if (isset($foreachVar)) {
+ if (isset($namedAttr[ 'iteration' ])) {
+ $output .= "{$foreachVar}->value['iteration']++;\n";
+ }
+ if (isset($namedAttr[ 'index' ])) {
+ $output .= "{$foreachVar}->value['index']++;\n";
+ }
+ if (isset($namedAttr[ 'first' ])) {
+ $output .= "{$foreachVar}->value['first'] = !{$foreachVar}->value['index'];\n";
+ }
+ if (isset($namedAttr[ 'last' ])) {
+ $output .= "{$foreachVar}->value['last'] = {$foreachVar}->value['iteration'] === {$foreachVar}->value['total'];\n";
+ }
+ }
+ if (!empty($itemAttr)) {
+ $output .= "{$local}saved = {$itemVar};\n";
+ }
+ $output .= '?>';
+ return $output;
+ }
+
+ /**
+ * Compiles code for to restore saved template variables
+ *
+ * @param int $levels number of levels to restore
+ *
+ * @return string compiled code
+ */
+ public function compileRestore($levels)
+ {
+ return "\$_smarty_tpl->smarty->ext->_foreach->restore(\$_smarty_tpl, {$levels});";
+ }
+}
+
+/**
+ * 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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ list($openTag, $nocache, $local, $itemVar, $restore) = $this->closeTag($compiler, array('foreach'));
+ $this->openTag($compiler, 'foreachelse', array('foreachelse', $nocache, $local, $itemVar, 0));
+ $output = "do_else) {\n?>";
+ return $output;
+ }
+}
+
+/**
+ * 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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws \SmartyCompilerException
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ $compiler->loopNesting--;
+ // must endblock be nocache?
+ if ($compiler->nocache) {
+ $compiler->tag_nocache = true;
+ }
+ list(
+ $openTag, $compiler->nocache, $local, $itemVar, $restore
+ ) = $this->closeTag($compiler, array('foreach', 'foreachelse'));
+ $output = "getTagCompiler('foreach');
+ $output .= $foreachCompiler->compileRestore(1);
+ $output .= "?>";
+ return $output;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_function.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_function.php
new file mode 100644
index 0000000..1b73a6b
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_function.php
@@ -0,0 +1,236 @@
+getAttributes($compiler, $args);
+ if ($_attr[ 'nocache' ] === true) {
+ $compiler->trigger_template_error('nocache option not allowed', null, true);
+ }
+ unset($_attr[ 'nocache' ]);
+ $_name = trim($_attr[ 'name' ], '\'"');
+
+ if (!preg_match('/^[a-zA-Z0-9_\x80-\xff]+$/', $_name)) {
+ $compiler->trigger_template_error("Function name contains invalid characters: {$_name}", null, true);
+ }
+
+ $compiler->parent_compiler->tpl_function[ $_name ] = array();
+ $save = array(
+ $_attr, $compiler->parser->current_buffer, $compiler->template->compiled->has_nocache_code,
+ $compiler->template->caching
+ );
+ $this->openTag($compiler, 'function', $save);
+ // Init temporary context
+ $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
+ $compiler->template->compiled->has_nocache_code = false;
+ $compiler->saveRequiredPlugins(true);
+ return true;
+ }
+}
+
+/**
+ * Smarty Internal Plugin Compile Functionclose Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
+{
+ /**
+ * Compiler object
+ *
+ * @var object
+ */
+ private $compiler = null;
+
+ /**
+ * Compiles code for the {/function} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param object|\Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
+ * @return bool true
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ $this->compiler = $compiler;
+ $saved_data = $this->closeTag($compiler, array('function'));
+ $_attr = $saved_data[ 0 ];
+ $_name = trim($_attr[ 'name' ], '\'"');
+ $compiler->parent_compiler->tpl_function[ $_name ][ 'compiled_filepath' ] =
+ $compiler->parent_compiler->template->compiled->filepath;
+ $compiler->parent_compiler->tpl_function[ $_name ][ 'uid' ] = $compiler->template->source->uid;
+ $_parameter = $_attr;
+ unset($_parameter[ 'name' ]);
+ // default parameter
+ $_paramsArray = array();
+ foreach ($_parameter as $_key => $_value) {
+ if (is_int($_key)) {
+ $_paramsArray[] = "$_key=>$_value";
+ } else {
+ $_paramsArray[] = "'$_key'=>$_value";
+ }
+ }
+ if (!empty($_paramsArray)) {
+ $_params = 'array(' . implode(',', $_paramsArray) . ')';
+ $_paramsCode = "\$params = array_merge($_params, \$params);\n";
+ } else {
+ $_paramsCode = '';
+ }
+ $_functionCode = $compiler->parser->current_buffer;
+ // setup buffer for template function code
+ $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
+ $_funcName = "smarty_template_function_{$_name}_{$compiler->template->compiled->nocache_hash}";
+ $_funcNameCaching = $_funcName . '_nocache';
+ if ($compiler->template->compiled->has_nocache_code) {
+ $compiler->parent_compiler->tpl_function[ $_name ][ 'call_name_caching' ] = $_funcNameCaching;
+ $output = "cStyleComment(" {$_funcNameCaching} ") . "\n";
+ $output .= "if (!function_exists('{$_funcNameCaching}')) {\n";
+ $output .= "function {$_funcNameCaching} (Smarty_Internal_Template \$_smarty_tpl,\$params) {\n";
+ $output .= "ob_start();\n";
+ $output .= $compiler->compileRequiredPlugins();
+ $output .= "\$_smarty_tpl->compiled->has_nocache_code = true;\n";
+ $output .= $_paramsCode;
+ $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value, \$_smarty_tpl->isRenderingCache);\n}\n";
+ $output .= "\$params = var_export(\$params, true);\n";
+ $output .= "echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/smarty->ext->_tplFunction->saveTemplateVariables(\\\$_smarty_tpl, '{$_name}');\nforeach (\$params as \\\$key => \\\$value) {\n\\\$_smarty_tpl->tpl_vars[\\\$key] = new Smarty_Variable(\\\$value, \\\$_smarty_tpl->isRenderingCache);\n}\n?>";
+ $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\";?>";
+ $compiler->parser->current_buffer->append_subtree(
+ $compiler->parser,
+ new Smarty_Internal_ParseTree_Tag(
+ $compiler->parser,
+ $output
+ )
+ );
+ $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode);
+ $output = "template->compiled->nocache_hash}%%*/smarty->ext->_tplFunction->restoreTemplateVariables(\\\$_smarty_tpl, '{$_name}');?>\n";
+ $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\";\n?>";
+ $output .= "template->compiled->nocache_hash}', \$_smarty_tpl->compiled->nocache_hash, ob_get_clean());\n";
+ $output .= "}\n}\n";
+ $output .= $compiler->cStyleComment("/ {$_funcName}_nocache ") . "\n\n";
+ $output .= "?>\n";
+ $compiler->parser->current_buffer->append_subtree(
+ $compiler->parser,
+ new Smarty_Internal_ParseTree_Tag(
+ $compiler->parser,
+ $output
+ )
+ );
+ $_functionCode = new Smarty_Internal_ParseTree_Tag(
+ $compiler->parser,
+ preg_replace_callback(
+ "/((<\?php )?echo '\/\*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/([\S\s]*?)\/\*\/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/",
+ array($this, 'removeNocache'),
+ $_functionCode->to_smarty_php($compiler->parser)
+ )
+ );
+ }
+ $compiler->parent_compiler->tpl_function[ $_name ][ 'call_name' ] = $_funcName;
+ $output = "cStyleComment(" {$_funcName} ") . "\n";
+ $output .= "if (!function_exists('{$_funcName}')) {\n";
+ $output .= "function {$_funcName}(Smarty_Internal_Template \$_smarty_tpl,\$params) {\n";
+ $output .= $_paramsCode;
+ $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value, \$_smarty_tpl->isRenderingCache);\n}\n";
+ $output .= $compiler->compileCheckPlugins(array_merge($compiler->required_plugins[ 'compiled' ],
+ $compiler->required_plugins[ 'nocache' ]));
+ $output .= "?>\n";
+ $compiler->parser->current_buffer->append_subtree(
+ $compiler->parser,
+ new Smarty_Internal_ParseTree_Tag(
+ $compiler->parser,
+ $output
+ )
+ );
+ $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode);
+ $output = "cStyleComment("/ {$_funcName} ") . "\n\n";
+ $output .= "?>\n";
+ $compiler->parser->current_buffer->append_subtree(
+ $compiler->parser,
+ new Smarty_Internal_ParseTree_Tag(
+ $compiler->parser,
+ $output
+ )
+ );
+ $compiler->parent_compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser);
+ // restore old buffer
+ $compiler->parser->current_buffer = $saved_data[ 1 ];
+ // restore old status
+ $compiler->restoreRequiredPlugins();
+ $compiler->template->compiled->has_nocache_code = $saved_data[ 2 ];
+ $compiler->template->caching = $saved_data[ 3 ];
+ return true;
+ }
+
+ /**
+ * Remove nocache code
+ *
+ * @param $match
+ *
+ * @return string
+ */
+ public function removeNocache($match)
+ {
+ $code =
+ preg_replace(
+ "/((<\?php )?echo '\/\*%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/)|(\/\*\/%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/",
+ '',
+ $match[ 0 ]
+ );
+ $code = str_replace(array('\\\'', '\\\\\''), array('\'', '\\\''), $code);
+ return $code;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_if.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_if.php
new file mode 100644
index 0000000..df3dc3f
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_if.php
@@ -0,0 +1,207 @@
+getAttributes($compiler, $args);
+ $this->openTag($compiler, 'if', array(1, $compiler->nocache));
+ // must whole block be nocache ?
+ $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
+ if (!isset($parameter[ 'if condition' ])) {
+ $compiler->trigger_template_error('missing if condition', null, true);
+ }
+ if (is_array($parameter[ 'if condition' ])) {
+ if (is_array($parameter[ 'if condition' ][ 'var' ])) {
+ $var = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
+ } else {
+ $var = $parameter[ 'if condition' ][ 'var' ];
+ }
+ if ($compiler->nocache) {
+ // create nocache var to make it know for further compiling
+ $compiler->setNocacheInVariable($var);
+ }
+ $prefixVar = $compiler->getNewPrefixVariable();
+ $_output = "\n";
+ $assignAttr = array();
+ $assignAttr[][ 'value' ] = $prefixVar;
+ $assignCompiler = new Smarty_Internal_Compile_Assign();
+ if (is_array($parameter[ 'if condition' ][ 'var' ])) {
+ $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
+ $_output .= $assignCompiler->compile(
+ $assignAttr,
+ $compiler,
+ array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ])
+ );
+ } else {
+ $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ];
+ $_output .= $assignCompiler->compile($assignAttr, $compiler, array());
+ }
+ $_output .= "";
+ 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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ 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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws \SmartyCompilerException
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
+ if (!isset($parameter[ 'if condition' ])) {
+ $compiler->trigger_template_error('missing elseif condition', null, true);
+ }
+ $assignCode = '';
+ $var = '';
+ if (is_array($parameter[ 'if condition' ])) {
+ $condition_by_assign = true;
+ if (is_array($parameter[ 'if condition' ][ 'var' ])) {
+ $var = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
+ } else {
+ $var = $parameter[ 'if condition' ][ 'var' ];
+ }
+ if ($compiler->nocache) {
+ // create nocache var to make it know for further compiling
+ $compiler->setNocacheInVariable($var);
+ }
+ $prefixVar = $compiler->getNewPrefixVariable();
+ $assignCode = "\n";
+ $assignCompiler = new Smarty_Internal_Compile_Assign();
+ $assignAttr = array();
+ $assignAttr[][ 'value' ] = $prefixVar;
+ if (is_array($parameter[ 'if condition' ][ 'var' ])) {
+ $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
+ $assignCode .= $assignCompiler->compile(
+ $assignAttr,
+ $compiler,
+ array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ])
+ );
+ } else {
+ $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ];
+ $assignCode .= $assignCompiler->compile($assignAttr, $compiler, array());
+ }
+ } else {
+ $condition_by_assign = false;
+ }
+ $prefixCode = $compiler->getPrefixCode();
+ if (empty($prefixCode)) {
+ if ($condition_by_assign) {
+ $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache));
+ $_output = $compiler->appendCode("", $assignCode);
+ return $compiler->appendCode($_output, "");
+ } else {
+ $this->openTag($compiler, 'elseif', array($nesting, $compiler->tag_nocache));
+ return "";
+ }
+ } else {
+ $_output = $compiler->appendCode("", $prefixCode);
+ $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache));
+ if ($condition_by_assign) {
+ $_output = $compiler->appendCode($_output, $assignCode);
+ return $compiler->appendCode($_output, "");
+ } else {
+ return $compiler->appendCode($_output, "");
+ }
+ }
+ }
+}
+
+/**
+ * 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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ // 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/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_include.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_include.php
new file mode 100644
index 0000000..bf62461
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_include.php
@@ -0,0 +1,347 @@
+ Smarty::SCOPE_PARENT, 'root' => Smarty::SCOPE_ROOT,
+ 'global' => Smarty::SCOPE_GLOBAL, 'tpl_root' => Smarty::SCOPE_TPL_ROOT,
+ 'smarty' => Smarty::SCOPE_SMARTY
+ );
+
+ /**
+ * Compiles code for the {include} tag
+ *
+ * @param array $args array with attributes from parser
+ * @param Smarty_Internal_SmartyTemplateCompiler $compiler compiler object
+ *
+ * @return string
+ * @throws \Exception
+ * @throws \SmartyCompilerException
+ * @throws \SmartyException
+ */
+ public function compile($args, Smarty_Internal_SmartyTemplateCompiler $compiler)
+ {
+ $uid = $t_hash = null;
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $fullResourceName = $source_resource = $_attr[ 'file' ];
+ $variable_template = false;
+ $cache_tpl = false;
+ // parse resource_name
+ if (preg_match('/^([\'"])(([A-Za-z0-9_\-]{2,})[:])?(([^$()]+)|(.+))\1$/', $source_resource, $match)) {
+ $type = !empty($match[ 3 ]) ? $match[ 3 ] : $compiler->template->smarty->default_resource_type;
+ $name = !empty($match[ 5 ]) ? $match[ 5 ] : $match[ 6 ];
+ $handler = Smarty_Resource::load($compiler->smarty, $type);
+ if ($handler->recompiled || $handler->uncompiled) {
+ $variable_template = true;
+ }
+ if (!$variable_template) {
+ if ($type !== 'string') {
+ $fullResourceName = "{$type}:{$name}";
+ $compiled = $compiler->parent_compiler->template->compiled;
+ if (isset($compiled->includes[ $fullResourceName ])) {
+ $compiled->includes[ $fullResourceName ]++;
+ $cache_tpl = true;
+ } else {
+ if ("{$compiler->template->source->type}:{$compiler->template->source->name}" ==
+ $fullResourceName
+ ) {
+ // recursive call of current template
+ $compiled->includes[ $fullResourceName ] = 2;
+ $cache_tpl = true;
+ } else {
+ $compiled->includes[ $fullResourceName ] = 1;
+ }
+ }
+ $fullResourceName = $match[ 1 ] . $fullResourceName . $match[ 1 ];
+ }
+ }
+ if (empty($match[ 5 ])) {
+ $variable_template = true;
+ }
+ } else {
+ $variable_template = true;
+ }
+ // scope setup
+ $_scope = $compiler->convertScope($_attr, $this->valid_scopes);
+ // set flag to cache subtemplate object when called within loop or template name is variable.
+ if ($cache_tpl || $variable_template || $compiler->loopNesting > 0) {
+ $_cache_tpl = 'true';
+ } else {
+ $_cache_tpl = 'false';
+ }
+ // assume caching is off
+ $_caching = Smarty::CACHING_OFF;
+ $call_nocache = $compiler->tag_nocache || $compiler->nocache;
+ // caching was on and {include} is not in nocache mode
+ if ($compiler->template->caching && !$compiler->nocache && !$compiler->tag_nocache) {
+ $_caching = self::CACHING_NOCACHE_CODE;
+ }
+ // flag if included template code should be merged into caller
+ $merge_compiled_includes = ($compiler->smarty->merge_compiled_includes || $_attr[ 'inline' ] === true) &&
+ !$compiler->template->source->handler->recompiled;
+ if ($merge_compiled_includes) {
+ // variable template name ?
+ if ($variable_template) {
+ $merge_compiled_includes = false;
+ }
+ // variable compile_id?
+ if (isset($_attr[ 'compile_id' ]) && $compiler->isVariable($_attr[ 'compile_id' ])) {
+ $merge_compiled_includes = false;
+ }
+ }
+ /*
+ * if the {include} tag provides individual parameter for caching or compile_id
+ * the subtemplate must not be included into the common cache file and is treated like
+ * a call in nocache mode.
+ *
+ */
+ if ($_attr[ 'nocache' ] !== true && $_attr[ 'caching' ]) {
+ $_caching = $_new_caching = (int)$_attr[ 'caching' ];
+ $call_nocache = true;
+ } else {
+ $_new_caching = Smarty::CACHING_LIFETIME_CURRENT;
+ }
+ if (isset($_attr[ 'cache_lifetime' ])) {
+ $_cache_lifetime = $_attr[ 'cache_lifetime' ];
+ $call_nocache = true;
+ $_caching = $_new_caching;
+ } else {
+ $_cache_lifetime = '$_smarty_tpl->cache_lifetime';
+ }
+ if (isset($_attr[ 'cache_id' ])) {
+ $_cache_id = $_attr[ 'cache_id' ];
+ $call_nocache = true;
+ $_caching = $_new_caching;
+ } 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 subtemplate will be called in nocache mode do not merge
+ if ($compiler->template->caching && $call_nocache) {
+ $merge_compiled_includes = false;
+ }
+ // assign attribute
+ if (isset($_attr[ 'assign' ])) {
+ // output will be stored in a smarty variable instead of being displayed
+ if ($_assign = $compiler->getId($_attr[ 'assign' ])) {
+ $_assign = "'{$_assign}'";
+ if ($compiler->tag_nocache || $compiler->nocache || $call_nocache) {
+ // create nocache var to make it know for further compiling
+ $compiler->setNocacheInVariable($_attr[ 'assign' ]);
+ }
+ } else {
+ $_assign = $_attr[ 'assign' ];
+ }
+ }
+ $has_compiled_template = false;
+ if ($merge_compiled_includes) {
+ $c_id = isset($_attr[ 'compile_id' ]) ? $_attr[ 'compile_id' ] : $compiler->template->compile_id;
+ // we must observe different compile_id and caching
+ $t_hash = sha1($c_id . ($_caching ? '--caching' : '--nocaching'));
+ $compiler->smarty->allow_ambiguous_resources = true;
+ /* @var Smarty_Internal_Template $tpl */
+ $tpl = new $compiler->smarty->template_class(
+ trim($fullResourceName, '"\''),
+ $compiler->smarty,
+ $compiler->template,
+ $compiler->template->cache_id,
+ $c_id,
+ $_caching
+ );
+ $uid = $tpl->source->type . $tpl->source->uid;
+ if (!isset($compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $t_hash ])) {
+ $has_compiled_template = $this->compileInlineTemplate($compiler, $tpl, $t_hash);
+ } else {
+ $has_compiled_template = true;
+ }
+ unset($tpl);
+ }
+ // 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
+ $_vars = 'array()';
+ if (!empty($_attr)) {
+ $_pairs = array();
+ // create variables
+ foreach ($_attr as $key => $value) {
+ $_pairs[] = "'$key'=>$value";
+ }
+ $_vars = 'array(' . join(',', $_pairs) . ')';
+ }
+ $update_compile_id = $compiler->template->caching && !$compiler->tag_nocache && !$compiler->nocache &&
+ $_compile_id !== '$_smarty_tpl->compile_id';
+ if ($has_compiled_template && !$call_nocache) {
+ $_output = "makeNocacheCode("\$_compile_id_save[] = \$_smarty_tpl->compile_id;\n\$_smarty_tpl->compile_id = {$_compile_id};\n");
+ }
+ if (!empty($_attr) && $_caching === 9999 && $compiler->template->caching) {
+ $_vars_nc = "foreach ($_vars as \$ik => \$iv) {\n";
+ $_vars_nc .= "\$_smarty_tpl->tpl_vars[\$ik] = new Smarty_Variable(\$iv);\n";
+ $_vars_nc .= "}\n";
+ $_output .= substr($compiler->processNocacheCode('\n", true), 6, -3);
+ }
+ if (isset($_assign)) {
+ $_output .= "ob_start();\n";
+ }
+ $_output .= "\$_smarty_tpl->_subTemplateRender({$fullResourceName}, {$_cache_id}, {$_compile_id}, {$_caching}, {$_cache_lifetime}, {$_vars}, {$_scope}, {$_cache_tpl}, '{$compiler->parent_compiler->mergedSubTemplatesData[$uid][$t_hash]['uid']}', '{$compiler->parent_compiler->mergedSubTemplatesData[$uid][$t_hash]['func']}');\n";
+ if (isset($_assign)) {
+ $_output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n";
+ }
+ if ($update_compile_id) {
+ $_output .= $compiler->makeNocacheCode("\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n");
+ }
+ $_output .= "?>";
+ return $_output;
+ }
+ if ($call_nocache) {
+ $compiler->tag_nocache = true;
+ }
+ $_output = "compile_id;\n\$_smarty_tpl->compile_id = {$_compile_id};\n";
+ }
+ // was there an assign attribute
+ if (isset($_assign)) {
+ $_output .= "ob_start();\n";
+ }
+ $_output .= "\$_smarty_tpl->_subTemplateRender({$fullResourceName}, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_scope, {$_cache_tpl});\n";
+ if (isset($_assign)) {
+ $_output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n";
+ }
+ if ($update_compile_id) {
+ $_output .= "\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n";
+ }
+ $_output .= "?>";
+ return $_output;
+ }
+
+ /**
+ * Compile inline sub template
+ *
+ * @param \Smarty_Internal_SmartyTemplateCompiler $compiler
+ * @param \Smarty_Internal_Template $tpl
+ * @param string $t_hash
+ *
+ * @return bool
+ * @throws \Exception
+ * @throws \SmartyException
+ */
+ public function compileInlineTemplate(
+ Smarty_Internal_SmartyTemplateCompiler $compiler,
+ Smarty_Internal_Template $tpl,
+ $t_hash
+ ) {
+ $uid = $tpl->source->type . $tpl->source->uid;
+ if (!($tpl->source->handler->uncompiled) && $tpl->source->exists) {
+ $compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $t_hash ][ 'uid' ] = $tpl->source->uid;
+ if (isset($compiler->template->inheritance)) {
+ $tpl->inheritance = clone $compiler->template->inheritance;
+ }
+ $tpl->compiled = new Smarty_Template_Compiled();
+ $tpl->compiled->nocache_hash = $compiler->parent_compiler->template->compiled->nocache_hash;
+ $tpl->loadCompiler();
+ // save unique function name
+ $compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $t_hash ][ 'func' ] =
+ $tpl->compiled->unifunc = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
+ // make sure whole chain gets compiled
+ $tpl->mustCompile = true;
+ $compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $t_hash ][ 'nocache_hash' ] =
+ $tpl->compiled->nocache_hash;
+ if ($tpl->source->type === 'file') {
+ $sourceInfo = $tpl->source->filepath;
+ } else {
+ $basename = $tpl->source->handler->getBasename($tpl->source);
+ $sourceInfo = $tpl->source->type . ':' .
+ ($basename ? $basename : $tpl->source->name);
+ }
+ // get compiled code
+ $compiled_code = "cStyleComment(" Start inline template \"{$sourceInfo}\" =============================") . "\n";
+ $compiled_code .= "function {$tpl->compiled->unifunc} (Smarty_Internal_Template \$_smarty_tpl) {\n";
+ $compiled_code .= "?>\n" . $tpl->compiler->compileTemplateSource($tpl, null, $compiler->parent_compiler);
+ $compiled_code .= "\n";
+ $compiled_code .= $tpl->compiler->postFilter($tpl->compiler->blockOrFunctionCode);
+ $compiled_code .= "cStyleComment(" End inline template \"{$sourceInfo}\" =============================") . "\n";
+ $compiled_code .= '?>';
+ unset($tpl->compiler);
+ if ($tpl->compiled->has_nocache_code) {
+ // replace nocache_hash
+ $compiled_code =
+ str_replace(
+ "{$tpl->compiled->nocache_hash}",
+ $compiler->template->compiled->nocache_hash,
+ $compiled_code
+ );
+ $compiler->template->compiled->has_nocache_code = true;
+ }
+ $compiler->parent_compiler->mergedSubTemplatesCode[ $tpl->compiled->unifunc ] = $compiled_code;
+ return true;
+ } else {
+ return false;
+ }
+ }
+}
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_include_php.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_include_php.php
similarity index 61%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_include_php.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_include_php.php
index d527123..1b0fdaa 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_include_php.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_include_php.php
@@ -1,22 +1,21 @@
smarty instanceof SmartyBC)) {
throw new SmartyException("{include_php} is deprecated, use SmartyBC class to enable");
}
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
-
- $_output = 'template;
$_filepath = false;
- eval('$_file = ' . $_attr['file'] . ';');
+ $_file = null;
+ eval('$_file = @' . $_attr[ 'file' ] . ';');
if (!isset($compiler->smarty->security_policy) && file_exists($_file)) {
- $_filepath = $_file;
+ $_filepath = $compiler->smarty->_realpath($_file, true);
} else {
if (isset($compiler->smarty->security_policy)) {
$_dir = $compiler->smarty->security_policy->trusted_dir;
@@ -68,41 +76,35 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
$_dir = $compiler->smarty->trusted_dir;
}
if (!empty($_dir)) {
- foreach((array)$_dir as $_script_dir) {
- $_script_dir = rtrim($_script_dir, '/\\') . DS;
- if (file_exists($_script_dir . $_file)) {
- $_filepath = $_script_dir . $_file;
+ foreach ((array)$_dir as $_script_dir) {
+ $_path = $compiler->smarty->_realpath($_script_dir . DIRECTORY_SEPARATOR . $_file, true);
+ if (file_exists($_path)) {
+ $_filepath = $_path;
break;
}
}
}
}
- if ($_filepath == false) {
- $compiler->trigger_template_error("{include_php} file '{$_file}' is not readable", $compiler->lex->taglineno);
+ if ($_filepath === false) {
+ $compiler->trigger_template_error("{include_php} file '{$_file}' is not readable", null, true);
}
-
if (isset($compiler->smarty->security_policy)) {
$compiler->smarty->security_policy->isTrustedPHPDir($_filepath);
}
-
- if (isset($_attr['assign'])) {
+ if (isset($_attr[ 'assign' ])) {
// output will be stored in a smarty variable instead of being displayed
- $_assign = $_attr['assign'];
+ $_assign = $_attr[ 'assign' ];
}
$_once = '_once';
- if (isset($_attr['once'])) {
- if ($_attr['once'] == 'false') {
+ if (isset($_attr[ 'once' ])) {
+ if ($_attr[ 'once' ] === 'false') {
$_once = '';
}
}
-
if (isset($_assign)) {
- return "assign({$_assign},ob_get_contents()); ob_end_clean();?>";
+ return "assign({$_assign},ob_get_clean());\n?>";
} else {
return "\n";
}
}
-
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_insert.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_insert.php
similarity index 60%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_insert.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_insert.php
index e4d3f93..4bdc395 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_insert.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_insert.php
@@ -1,23 +1,21 @@
getAttributes($compiler, $args);
- // never compile as nocache code
- $compiler->suppressNocacheProcessing = true;
+ $nocacheParam = $compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache);
+ if (!$nocacheParam) {
+ // do not compile as nocache code
+ $compiler->suppressNocacheProcessing = true;
+ }
$compiler->tag_nocache = true;
$_smarty_tpl = $compiler->template;
$_name = null;
$_script = null;
-
$_output = 'template->tpl_vars[trim($_attr['assign'], "'")] = new Smarty_Variable(null, true);
+ $_assign = $_attr[ 'assign' ];
+ // create variable to make sure that the compiler knows about its nocache status
+ $var = trim($_attr[ 'assign' ], '\'');
+ if (isset($compiler->template->tpl_vars[ $var ])) {
+ $compiler->template->tpl_vars[ $var ]->nocache = true;
+ } else {
+ $compiler->template->tpl_vars[ $var ] = new Smarty_Variable(null, true);
+ }
}
- if (isset($_attr['script'])) {
+ if (isset($_attr[ 'script' ])) {
// script which must be included
$_function = "smarty_insert_{$_name}";
$_smarty_tpl = $compiler->template;
$_filepath = false;
- eval('$_script = ' . $_attr['script'] . ';');
+ eval('$_script = @' . $_attr[ 'script' ] . ';');
if (!isset($compiler->smarty->security_policy) && file_exists($_script)) {
$_filepath = $_script;
} else {
if (isset($compiler->smarty->security_policy)) {
$_dir = $compiler->smarty->security_policy->trusted_dir;
} else {
- $_dir = $compiler->smarty->trusted_dir;
+ $_dir = $compiler->smarty instanceof SmartyBC ? $compiler->smarty->trusted_dir : null;
}
if (!empty($_dir)) {
- foreach((array)$_dir as $_script_dir) {
- $_script_dir = rtrim($_script_dir, '/\\') . DS;
+ foreach ((array)$_dir as $_script_dir) {
+ $_script_dir = rtrim($_script_dir, '/\\') . DIRECTORY_SEPARATOR;
if (file_exists($_script_dir . $_script)) {
$_filepath = $_script_dir . $_script;
break;
@@ -91,14 +101,18 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
}
}
}
- if ($_filepath == false) {
- $compiler->trigger_template_error("{insert} missing script file '{$_script}'", $compiler->lex->taglineno);
+ if ($_filepath === false) {
+ $compiler->trigger_template_error("{insert} missing script file '{$_script}'", null, true);
}
// code for script file loading
$_output .= "require_once '{$_filepath}' ;";
- require_once $_filepath;
+ include_once $_filepath;
if (!is_callable($_function)) {
- $compiler->trigger_template_error(" {insert} function '{$_function}' is not callable in script file '{$_script}'", $compiler->lex->taglineno);
+ $compiler->trigger_template_error(
+ " {insert} function '{$_function}' is not callable in script file '{$_script}'",
+ null,
+ true
+ );
}
} else {
$_filepath = 'null';
@@ -107,12 +121,16 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
if (!is_callable($_function)) {
// try plugin
if (!$_function = $compiler->getPlugin($_name, 'insert')) {
- $compiler->trigger_template_error("{insert} no function or plugin found for '{$_name}'", $compiler->lex->taglineno);
+ $compiler->trigger_template_error(
+ "{insert} no function or plugin found for '{$_name}'",
+ null,
+ true
+ );
}
}
}
// delete {insert} standard attributes
- unset($_attr['name'], $_attr['assign'], $_attr['script'], $_attr['nocache']);
+ unset($_attr[ 'name' ], $_attr[ 'assign' ], $_attr[ 'script' ], $_attr[ 'nocache' ]);
// convert attributes into parameter array string
$_paramsArray = array();
foreach ($_attr as $_key => $_value) {
@@ -121,22 +139,19 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
$_params = 'array(' . implode(", ", $_paramsArray) . ')';
// call insert
if (isset($_assign)) {
- if ($_smarty_tpl->caching) {
+ if ($_smarty_tpl->caching && !$nocacheParam) {
$_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}',{$_assign});?>";
} else {
$_output .= "\$_smarty_tpl->assign({$_assign} , {$_function} ({$_params},\$_smarty_tpl), true);?>";
}
} else {
- $compiler->has_output = true;
- if ($_smarty_tpl->caching) {
+ if ($_smarty_tpl->caching && !$nocacheParam) {
$_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}');?>";
} else {
$_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>";
}
}
+ $compiler->template->compiled->has_nocache_code = true;
return $_output;
}
-
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_ldelim.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_ldelim.php
similarity index 57%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_ldelim.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_ldelim.php
index 9906325..5493d4e 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_ldelim.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_ldelim.php
@@ -1,41 +1,37 @@
getAttributes($compiler, $args);
- if ($_attr['nocache'] === true) {
- $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
+ if ($_attr[ 'nocache' ] === true) {
+ $compiler->trigger_template_error('nocache option not allowed', null, true);
}
- // this tag does not return compiled code
- $compiler->has_code = true;
return $compiler->smarty->left_delimiter;
}
-
}
-
-?>
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_make_nocache.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_make_nocache.php
new file mode 100644
index 0000000..8a34ccd
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_make_nocache.php
@@ -0,0 +1,62 @@
+getAttributes($compiler, $args);
+ if ($compiler->template->caching) {
+ $output = "smarty->ext->_make_nocache->save(\$_smarty_tpl, {$_attr[ 'var' ]});\n?>\n";
+ $compiler->template->compiled->has_nocache_code = true;
+ $compiler->suppressNocacheProcessing = true;
+ return $output;
+ } else {
+ return true;
+ }
+ }
+}
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_nocache.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_nocache.php
similarity index 55%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_nocache.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_nocache.php
index 5fb71b7..12f64ed 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_nocache.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_nocache.php
@@ -1,73 +1,73 @@
getAttributes($compiler, $args);
- if ($_attr['nocache'] === true) {
- $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
- }
+ $this->openTag($compiler, 'nocache', array($compiler->nocache));
// enter nocache mode
$compiler->nocache = true;
// this tag does not return compiled code
$compiler->has_code = false;
return true;
}
-
}
/**
* Smarty Internal Plugin Compile Nocacheclose Class
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase
+{
/**
* Compiles code for the {/nocache} tag
- *
* This tag does not generate compiled output. It only sets a compiler flag.
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
* @return bool
*/
- public function compile($args, $compiler)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
{
$_attr = $this->getAttributes($compiler, $args);
// leave nocache mode
- $compiler->nocache = false;
+ list($compiler->nocache) = $this->closeTag($compiler, array('nocache'));
// this tag does not return compiled code
$compiler->has_code = false;
return true;
}
-
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_parent.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_parent.php
new file mode 100644
index 0000000..ff23edf
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_parent.php
@@ -0,0 +1,31 @@
+
+ */
+class Smarty_Internal_Compile_Parent extends Smarty_Internal_Compile_Child
+{
+ /**
+ * Tag name
+ *
+ * @var string
+ */
+ public $tag = 'parent';
+
+ /**
+ * Block type
+ *
+ * @var string
+ */
+ public $blockType = 'Parent';
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_block_plugin.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_block_plugin.php
new file mode 100644
index 0000000..199a296
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_block_plugin.php
@@ -0,0 +1,124 @@
+getAttributes($compiler, $args);
+ $this->nesting++;
+ unset($_attr[ 'nocache' ]);
+ list($callback, $_paramsArray, $callable) = $this->setup($compiler, $_attr, $tag, $function);
+ $_params = 'array(' . implode(',', $_paramsArray) . ')';
+ // compile code
+ $output = "nesting} = isset({$callback[0]}) ? {$callback[0]} : null;\n";
+ $callback = "\$_block_plugin{$this->nesting}{$callback[1]}";
+ }
+ if (isset($callable)) {
+ $output .= "if (!is_callable({$callable})) {\nthrow new SmartyException('block tag \'{$tag}\' not callable or registered');\n}\n";
+ }
+ $output .= "\$_smarty_tpl->smarty->_cache['_tag_stack'][] = array('{$tag}', {$_params});\n";
+ $output .= "\$_block_repeat=true;\necho {$callback}({$_params}, null, \$_smarty_tpl, \$_block_repeat);\nwhile (\$_block_repeat) {\nob_start();?>";
+ $this->openTag($compiler, $tag, array($_params, $compiler->nocache, $callback));
+ // maybe nocache because of nocache variables or nocache plugin
+ $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
+ } else {
+ // must endblock be nocache?
+ if ($compiler->nocache) {
+ $compiler->tag_nocache = true;
+ }
+ // closing tag of block plugin, restore nocache
+ list($_params, $compiler->nocache, $callback) = $this->closeTag($compiler, substr($tag, 0, -5));
+ // compile code
+ if (!isset($parameter[ 'modifier_list' ])) {
+ $mod_pre = $mod_post = $mod_content = '';
+ $mod_content2 = 'ob_get_clean()';
+ } else {
+ $mod_content2 = "\$_block_content{$this->nesting}";
+ $mod_content = "\$_block_content{$this->nesting} = ob_get_clean();\n";
+ $mod_pre = "ob_start();\n";
+ $mod_post = 'echo ' . $compiler->compileTag(
+ 'private_modifier',
+ array(),
+ array(
+ 'modifierlist' => $parameter[ 'modifier_list' ],
+ 'value' => 'ob_get_clean()'
+ )
+ ) . ";\n";
+ }
+ $output =
+ "smarty->_cache[\'_tag_stack\']);?>';
+ }
+ return $output;
+ }
+
+ /**
+ * Setup callback and parameter array
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ * @param array $_attr attributes
+ * @param string $tag
+ * @param string $function
+ *
+ * @return array
+ */
+ public function setup(Smarty_Internal_TemplateCompilerBase $compiler, $_attr, $tag, $function)
+ {
+ $_paramsArray = array();
+ foreach ($_attr as $_key => $_value) {
+ if (is_int($_key)) {
+ $_paramsArray[] = "$_key=>$_value";
+ } else {
+ $_paramsArray[] = "'$_key'=>$_value";
+ }
+ }
+ return array($function, $_paramsArray, null);
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_foreachsection.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_foreachsection.php
new file mode 100644
index 0000000..d3aab24
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_foreachsection.php
@@ -0,0 +1,228 @@
+propertyPreg = '~(';
+ $this->startOffset = 1;
+ $this->resultOffsets = array();
+ $this->matchResults = array('named' => array(), 'item' => array());
+ if (isset($attributes[ 'name' ])) {
+ $this->buildPropertyPreg(true, $attributes);
+ }
+ if (isset($this->itemProperties)) {
+ if ($this->isNamed) {
+ $this->propertyPreg .= '|';
+ }
+ $this->buildPropertyPreg(false, $attributes);
+ }
+ $this->propertyPreg .= ')\W~i';
+ // Template source
+ $this->matchTemplateSource($compiler);
+ // Parent template source
+ $this->matchParentTemplateSource($compiler);
+ // {block} source
+ $this->matchBlockSource($compiler);
+ }
+
+ /**
+ * Build property preg string
+ *
+ * @param bool $named
+ * @param array $attributes
+ */
+ public function buildPropertyPreg($named, $attributes)
+ {
+ if ($named) {
+ $this->resultOffsets[ 'named' ] = $this->startOffset = $this->startOffset + 3;
+ $this->propertyPreg .= "(([\$]smarty[.]{$this->tagName}[.]" .
+ ($this->tagName === 'section' ? "|[\[]\s*" : '') .
+ "){$attributes['name']}[.](";
+ $properties = $this->nameProperties;
+ } else {
+ $this->resultOffsets[ 'item' ] = $this->startOffset = $this->startOffset + 2;
+ $this->propertyPreg .= "([\$]{$attributes['item']}[@](";
+ $properties = $this->itemProperties;
+ }
+ $propName = reset($properties);
+ while ($propName) {
+ $this->propertyPreg .= "{$propName}";
+ $propName = next($properties);
+ if ($propName) {
+ $this->propertyPreg .= '|';
+ }
+ }
+ $this->propertyPreg .= '))';
+ }
+
+ /**
+ * Find matches in source string
+ *
+ * @param string $source
+ */
+ public function matchProperty($source)
+ {
+ preg_match_all($this->propertyPreg, $source, $match);
+ foreach ($this->resultOffsets as $key => $offset) {
+ foreach ($match[ $offset ] as $m) {
+ if (!empty($m)) {
+ $this->matchResults[ $key ][ strtolower($m) ] = true;
+ }
+ }
+ }
+ }
+
+ /**
+ * Find matches in template source
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ */
+ public function matchTemplateSource(Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ $this->matchProperty($compiler->parser->lex->data);
+ }
+
+ /**
+ * Find matches in all parent template source
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ *
+ * @throws \SmartyException
+ */
+ public function matchParentTemplateSource(Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ // search parent compiler template source
+ $nextCompiler = $compiler;
+ while ($nextCompiler !== $nextCompiler->parent_compiler) {
+ $nextCompiler = $nextCompiler->parent_compiler;
+ if ($compiler !== $nextCompiler) {
+ // get template source
+ $_content = $nextCompiler->template->source->getContent();
+ if ($_content !== '') {
+ // run pre filter if required
+ if ((isset($nextCompiler->smarty->autoload_filters[ 'pre' ]) ||
+ isset($nextCompiler->smarty->registered_filters[ 'pre' ]))
+ ) {
+ $_content = $nextCompiler->smarty->ext->_filterHandler->runFilter(
+ 'pre',
+ $_content,
+ $nextCompiler->template
+ );
+ }
+ $this->matchProperty($_content);
+ }
+ }
+ }
+ }
+
+ /**
+ * Find matches in {block} tag source
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ */
+ public function matchBlockSource(Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ }
+
+ /**
+ * Compiles code for the {$smarty.foreach.xxx} or {$smarty.section.xxx}tag
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code
+ * @throws \SmartyCompilerException
+ */
+ public function compileSpecialVariable($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
+ {
+ $tag = strtolower(trim($parameter[ 0 ], '"\''));
+ $name = isset($parameter[ 1 ]) ? $compiler->getId($parameter[ 1 ]) : false;
+ if (!$name) {
+ $compiler->trigger_template_error("missing or illegal \$smarty.{$tag} name attribute", null, true);
+ }
+ $property = isset($parameter[ 2 ]) ? strtolower($compiler->getId($parameter[ 2 ])) : false;
+ if (!$property || !in_array($property, $this->nameProperties)) {
+ $compiler->trigger_template_error("missing or illegal \$smarty.{$tag} property attribute", null, true);
+ }
+ $tagVar = "'__smarty_{$tag}_{$name}'";
+ return "(isset(\$_smarty_tpl->tpl_vars[{$tagVar}]->value['{$property}']) ? \$_smarty_tpl->tpl_vars[{$tagVar}]->value['{$property}'] : null)";
+ }
+}
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_private_function_plugin.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
similarity index 50%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
index 70e7643..0558234 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
@@ -1,22 +1,21 @@
has_output = true;
-
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
- if ($_attr['nocache'] === true) {
- $compiler->tag_nocache = true;
- }
- unset($_attr['nocache']);
+ unset($_attr[ 'nocache' ]);
// convert attributes into parameter array string
$_paramsArray = array();
foreach ($_attr as $_key => $_value) {
@@ -62,12 +59,20 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
$_paramsArray[] = "'$_key'=>$_value";
}
}
- $_params = 'array(' . implode(",", $_paramsArray) . ')';
+ $_params = 'array(' . implode(',', $_paramsArray) . ')';
// compile code
- $output = "\n";
+ $output = "{$function}({$_params},\$_smarty_tpl)";
+ if (!empty($parameter[ 'modifierlist' ])) {
+ $output = $compiler->compileTag(
+ 'private_modifier',
+ array(),
+ array(
+ 'modifierlist' => $parameter[ 'modifierlist' ],
+ 'value' => $output
+ )
+ );
+ }
+ $output = "\n";
return $output;
}
-
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_modifier.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_modifier.php
new file mode 100644
index 0000000..72773ff
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_modifier.php
@@ -0,0 +1,158 @@
+getAttributes($compiler, $args);
+ $output = $parameter[ 'value' ];
+ // loop over list of modifiers
+ foreach ($parameter[ 'modifierlist' ] as $single_modifier) {
+ /* @var string $modifier */
+ $modifier = $single_modifier[ 0 ];
+ $single_modifier[ 0 ] = $output;
+ $params = implode(',', $single_modifier);
+ // check if we know already the type of modifier
+ if (isset($compiler->known_modifier_type[ $modifier ])) {
+ $modifier_types = array($compiler->known_modifier_type[ $modifier ]);
+ } else {
+ $modifier_types = array(1, 2, 3, 4, 5, 6);
+ }
+ foreach ($modifier_types as $type) {
+ switch ($type) {
+ case 1:
+ // registered modifier
+ if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ])) {
+ if (is_callable($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ][ 0 ])) {
+ $output =
+ sprintf(
+ 'call_user_func_array($_smarty_tpl->registered_plugins[ \'%s\' ][ %s ][ 0 ], array( %s ))',
+ Smarty::PLUGIN_MODIFIER,
+ var_export($modifier, true),
+ $params
+ );
+ $compiler->known_modifier_type[ $modifier ] = $type;
+ break 2;
+ }
+ }
+ break;
+ case 2:
+ // registered modifier compiler
+ if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIERCOMPILER ][ $modifier ][ 0 ])) {
+ $output =
+ call_user_func(
+ $compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIERCOMPILER ][ $modifier ][ 0 ],
+ $single_modifier,
+ $compiler->smarty
+ );
+ $compiler->known_modifier_type[ $modifier ] = $type;
+ break 2;
+ }
+ break;
+ case 3:
+ // modifiercompiler plugin
+ if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) {
+ // check if modifier allowed
+ if (!is_object($compiler->smarty->security_policy)
+ || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
+ ) {
+ $plugin = 'smarty_modifiercompiler_' . $modifier;
+ $output = $plugin($single_modifier, $compiler);
+ }
+ $compiler->known_modifier_type[ $modifier ] = $type;
+ break 2;
+ }
+ break;
+ case 4:
+ // modifier plugin
+ if ($function = $compiler->getPlugin($modifier, Smarty::PLUGIN_MODIFIER)) {
+ // check if modifier allowed
+ if (!is_object($compiler->smarty->security_policy)
+ || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
+ ) {
+ $output = "{$function}({$params})";
+ }
+ $compiler->known_modifier_type[ $modifier ] = $type;
+ break 2;
+ }
+ break;
+ case 5:
+ // PHP function
+ if (is_callable($modifier)) {
+ // check if modifier allowed
+ if (!is_object($compiler->smarty->security_policy)
+ || $compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler)
+ ) {
+ $output = "{$modifier}({$params})";
+ }
+ $compiler->known_modifier_type[ $modifier ] = $type;
+ break 2;
+ }
+ break;
+ case 6:
+ // default plugin handler
+ if (isset($compiler->default_handler_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ])
+ || (is_callable($compiler->smarty->default_plugin_handler_func)
+ && $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER))
+ ) {
+ $function = $compiler->default_handler_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ][ 0 ];
+ // check if modifier allowed
+ if (!is_object($compiler->smarty->security_policy)
+ || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
+ ) {
+ if (!is_array($function)) {
+ $output = "{$function}({$params})";
+ } else {
+ if (is_object($function[ 0 ])) {
+ $output = $function[ 0 ] . '->' . $function[ 1 ] . '(' . $params . ')';
+ } else {
+ $output = $function[ 0 ] . '::' . $function[ 1 ] . '(' . $params . ')';
+ }
+ }
+ }
+ if (isset($compiler->required_plugins[ 'nocache' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ])
+ ||
+ isset($compiler->required_plugins[ 'compiled' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ])
+ ) {
+ // was a plugin
+ $compiler->known_modifier_type[ $modifier ] = 4;
+ } else {
+ $compiler->known_modifier_type[ $modifier ] = $type;
+ }
+ break 2;
+ }
+ }
+ }
+ if (!isset($compiler->known_modifier_type[ $modifier ])) {
+ $compiler->trigger_template_error("unknown modifier '{$modifier}'", null, true);
+ }
+ }
+ return $output;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_object_block_function.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_object_block_function.php
new file mode 100644
index 0000000..baac51b
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_object_block_function.php
@@ -0,0 +1,42 @@
+ $_value) {
+ if (is_int($_key)) {
+ $_paramsArray[] = "$_key=>$_value";
+ } else {
+ $_paramsArray[] = "'$_key'=>$_value";
+ }
+ }
+ $callback = array("\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]", "->{$method}");
+ return array($callback, $_paramsArray, "array(\$_block_plugin{$this->nesting}, '{$method}')");
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_object_function.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_object_function.php
new file mode 100644
index 0000000..2a763c6
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_object_function.php
@@ -0,0 +1,85 @@
+getAttributes($compiler, $args);
+ unset($_attr[ 'nocache' ]);
+ $_assign = null;
+ if (isset($_attr[ 'assign' ])) {
+ $_assign = $_attr[ 'assign' ];
+ unset($_attr[ 'assign' ]);
+ }
+ // method or property ?
+ if (is_callable(array($compiler->smarty->registered_objects[ $tag ][ 0 ], $method))) {
+ // convert attributes into parameter array string
+ if ($compiler->smarty->registered_objects[ $tag ][ 2 ]) {
+ $_paramsArray = array();
+ foreach ($_attr as $_key => $_value) {
+ if (is_int($_key)) {
+ $_paramsArray[] = "$_key=>$_value";
+ } else {
+ $_paramsArray[] = "'$_key'=>$_value";
+ }
+ }
+ $_params = 'array(' . implode(',', $_paramsArray) . ')';
+ $output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)";
+ } else {
+ $_params = implode(',', $_attr);
+ $output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})";
+ }
+ } else {
+ // object property
+ $output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}";
+ }
+ if (!empty($parameter[ 'modifierlist' ])) {
+ $output = $compiler->compileTag(
+ 'private_modifier',
+ array(),
+ array('modifierlist' => $parameter[ 'modifierlist' ], 'value' => $output)
+ );
+ }
+ if (empty($_assign)) {
+ return "\n";
+ } else {
+ return "assign({$_assign},{$output});?>\n";
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_php.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_php.php
new file mode 100644
index 0000000..ff48c6f
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_php.php
@@ -0,0 +1,253 @@
+getAttributes($compiler, $args);
+ $compiler->has_code = false;
+ if ($_attr[ 'type' ] === 'xml') {
+ $compiler->tag_nocache = true;
+ $output = addcslashes($_attr[ 'code' ], "'\\");
+ $compiler->parser->current_buffer->append_subtree(
+ $compiler->parser,
+ new Smarty_Internal_ParseTree_Tag(
+ $compiler->parser,
+ $compiler->processNocacheCode(
+ "\n",
+ true
+ )
+ )
+ );
+ return '';
+ }
+ if ($_attr[ 'type' ] !== 'tag') {
+ if ($compiler->php_handling === Smarty::PHP_REMOVE) {
+ return '';
+ } elseif ($compiler->php_handling === Smarty::PHP_QUOTE) {
+ $output =
+ preg_replace_callback(
+ '#(<\?(?:php|=)?)|(<%)|(';
+ } elseif (strpos($lex->value, $lex->smarty->left_delimiter) === 0) {
+ if ($lex->isAutoLiteral()) {
+ $lex->token = Smarty_Internal_Templateparser::TP_TEXT;
+ return;
+ }
+ $closeTag = "{$lex->smarty->left_delimiter}/php{$lex->smarty->right_delimiter}";
+ if ($lex->value === $closeTag) {
+ $lex->compiler->trigger_template_error("unexpected closing tag '{$closeTag}'");
+ }
+ $lex->phpType = 'tag';
+ }
+ if ($lex->phpType === 'unmatched') {
+ return;
+ }
+ if (($lex->phpType === 'php' || $lex->phpType === 'asp')
+ &&
+ ($lex->compiler->php_handling === Smarty::PHP_PASSTHRU ||
+ $lex->compiler->php_handling === Smarty::PHP_QUOTE)
+ ) {
+ return;
+ }
+ $start = $lex->counter + strlen($lex->value);
+ $body = true;
+ if (preg_match('~' . preg_quote($closeTag, '~') . '~i', $lex->data, $match, PREG_OFFSET_CAPTURE, $start)) {
+ $close = $match[ 0 ][ 1 ];
+ } else {
+ $lex->compiler->trigger_template_error("missing closing tag '{$closeTag}'");
+ }
+ while ($body) {
+ if (preg_match(
+ '~([/][*])|([/][/][^\n]*)|(\'[^\'\\\\]*(?:\\.[^\'\\\\]*)*\')|("[^"\\\\]*(?:\\.[^"\\\\]*)*")~',
+ $lex->data,
+ $match,
+ PREG_OFFSET_CAPTURE,
+ $start
+ )
+ ) {
+ $value = $match[ 0 ][ 0 ];
+ $from = $pos = $match[ 0 ][ 1 ];
+ if ($pos > $close) {
+ $body = false;
+ } else {
+ $start = $pos + strlen($value);
+ $phpCommentStart = $value === '/*';
+ if ($phpCommentStart) {
+ $phpCommentEnd = preg_match('~([*][/])~', $lex->data, $match, PREG_OFFSET_CAPTURE, $start);
+ if ($phpCommentEnd) {
+ $pos2 = $match[ 0 ][ 1 ];
+ $start = $pos2 + strlen($match[ 0 ][ 0 ]);
+ }
+ }
+ while ($close > $pos && $close < $start) {
+ if (preg_match(
+ '~' . preg_quote($closeTag, '~') . '~i',
+ $lex->data,
+ $match,
+ PREG_OFFSET_CAPTURE,
+ $from
+ )
+ ) {
+ $close = $match[ 0 ][ 1 ];
+ $from = $close + strlen($match[ 0 ][ 0 ]);
+ } else {
+ $lex->compiler->trigger_template_error("missing closing tag '{$closeTag}'");
+ }
+ }
+ if ($phpCommentStart && (!$phpCommentEnd || $pos2 > $close)) {
+ $lex->taglineno = $lex->line + substr_count(substr($lex->data, $lex->counter, $start), "\n");
+ $lex->compiler->trigger_template_error("missing PHP comment closing tag '*/'");
+ }
+ }
+ } else {
+ $body = false;
+ }
+ }
+ $lex->value = substr($lex->data, $lex->counter, $close + strlen($closeTag) - $lex->counter);
+ }
+
+ /*
+ * Call back function for $php_handling = PHP_QUOTE
+ *
+ */
+ /**
+ * @param $match
+ *
+ * @return string
+ */
+ private function quote($match)
+ {
+ return htmlspecialchars($match[ 0 ], ENT_QUOTES);
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_print_expression.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_print_expression.php
new file mode 100644
index 0000000..23cae8a
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_print_expression.php
@@ -0,0 +1,161 @@
+getAttributes($compiler, $args);
+ $output = $parameter[ 'value' ];
+ // tag modifier
+ if (!empty($parameter[ 'modifierlist' ])) {
+ $output = $compiler->compileTag(
+ 'private_modifier',
+ array(),
+ array(
+ 'modifierlist' => $parameter[ 'modifierlist' ],
+ 'value' => $output
+ )
+ );
+ }
+ if (isset($_attr[ 'assign' ])) {
+ // assign output to variable
+ return "assign({$_attr['assign']},{$output});?>";
+ } else {
+ // display value
+ 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_variable_filter($compiler, $name, $output);
+ if ($result !== false) {
+ $output = $result;
+ } else {
+ // not found, throw exception
+ throw new SmartyException("Unable to load variable filter '{$name}'");
+ }
+ }
+ }
+ foreach ($compiler->variable_filters as $filter) {
+ if (count($filter) === 1
+ && ($result = $this->compile_variable_filter($compiler, $filter[ 0 ], $output)) !== false
+ ) {
+ $output = $result;
+ } else {
+ $output = $compiler->compileTag(
+ 'private_modifier',
+ array(),
+ array('modifierlist' => array($filter), 'value' => $output)
+ );
+ }
+ }
+ }
+ $output = "\n";
+ }
+ return $output;
+ }
+
+ /**
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param string $name name of variable filter
+ * @param string $output embedded output
+ *
+ * @return string
+ * @throws \SmartyException
+ */
+ private function compile_variable_filter(Smarty_Internal_TemplateCompilerBase $compiler, $name, $output)
+ {
+ $function = $compiler->getPlugin($name, 'variablefilter');
+ if ($function) {
+ return "{$function}({$output},\$_smarty_tpl)";
+ } else {
+ // not found
+ return false;
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_registered_block.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_registered_block.php
new file mode 100644
index 0000000..0f818d1
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_registered_block.php
@@ -0,0 +1,72 @@
+smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ])) {
+ $tag_info = $compiler->smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ];
+ $callback = $tag_info[ 0 ];
+ if (is_array($callback)) {
+ if (is_object($callback[ 0 ])) {
+ $callable = "array(\$_block_plugin{$this->nesting}, '{$callback[1]}')";
+ $callback =
+ array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]", "->{$callback[1]}");
+ } else {
+ $callable = "array(\$_block_plugin{$this->nesting}, '{$callback[1]}')";
+ $callback =
+ array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]", "::{$callback[1]}");
+ }
+ } else {
+ $callable = "\$_block_plugin{$this->nesting}";
+ $callback = array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0]", '');
+ }
+ } else {
+ $tag_info = $compiler->default_handler_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ];
+ $callback = $tag_info[ 0 ];
+ if (is_array($callback)) {
+ $callable = "array('{$callback[0]}', '{$callback[1]}')";
+ $callback = "{$callback[1]}::{$callback[1]}";
+ } else {
+ $callable = null;
+ }
+ }
+ $compiler->tag_nocache = !$tag_info[ 1 ] | $compiler->tag_nocache;
+ $_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";
+ }
+ }
+ return array($callback, $_paramsArray, $callable);
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_registered_function.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_registered_function.php
new file mode 100644
index 0000000..2591107
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_registered_function.php
@@ -0,0 +1,91 @@
+getAttributes($compiler, $args);
+ unset($_attr[ 'nocache' ]);
+ if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ])) {
+ $tag_info = $compiler->smarty->registered_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ];
+ $is_registered = true;
+ } else {
+ $tag_info = $compiler->default_handler_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ];
+ $is_registered = false;
+ }
+ // not cacheable?
+ $compiler->tag_nocache = $compiler->tag_nocache || !$tag_info[ 1 ];
+ // 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) . ')';
+ // compile code
+ if ($is_registered) {
+ $output =
+ "call_user_func_array( \$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0], array( {$_params},\$_smarty_tpl ) )";
+ } else {
+ $function = $tag_info[ 0 ];
+ if (!is_array($function)) {
+ $output = "{$function}({$_params},\$_smarty_tpl)";
+ } else {
+ $output = "{$function[0]}::{$function[1]}({$_params},\$_smarty_tpl)";
+ }
+ }
+ if (!empty($parameter[ 'modifierlist' ])) {
+ $output = $compiler->compileTag(
+ 'private_modifier',
+ array(),
+ array(
+ 'modifierlist' => $parameter[ 'modifierlist' ],
+ 'value' => $output
+ )
+ );
+ }
+ $output = "\n";
+ return $output;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_special_variable.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_special_variable.php
new file mode 100644
index 0000000..d53ef51
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_special_variable.php
@@ -0,0 +1,130 @@
+getId($_index[ 0 ]));
+ if ($variable === false) {
+ $compiler->trigger_template_error("special \$Smarty variable name index can not be variable", null, true);
+ }
+ if (!isset($compiler->smarty->security_policy)
+ || $compiler->smarty->security_policy->isTrustedSpecialSmartyVar($variable, $compiler)
+ ) {
+ switch ($variable) {
+ case 'foreach':
+ case 'section':
+ if (!isset(Smarty_Internal_TemplateCompilerBase::$_tag_objects[ $variable ])) {
+ $class = 'Smarty_Internal_Compile_' . ucfirst($variable);
+ Smarty_Internal_TemplateCompilerBase::$_tag_objects[ $variable ] = new $class;
+ }
+ return Smarty_Internal_TemplateCompilerBase::$_tag_objects[ $variable ]->compileSpecialVariable(
+ array(),
+ $compiler,
+ $_index
+ );
+ case 'capture':
+ if (class_exists('Smarty_Internal_Compile_Capture')) {
+ return Smarty_Internal_Compile_Capture::compileSpecialVariable(array(), $compiler, $_index);
+ }
+ return '';
+ 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':
+ if (isset($compiler->smarty->security_policy)) {
+ $compiler->trigger_template_error("(secure mode) template_object not permitted");
+ break;
+ }
+ return '$_smarty_tpl';
+ case 'current_dir':
+ return 'dirname($_smarty_tpl->source->filepath)';
+ case 'version':
+ return "Smarty::SMARTY_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;
+ }
+ if (strpos($_index[ 1 ], '$') === false && strpos($_index[ 1 ], '\'') === false) {
+ return "(defined('{$_index[1]}') ? constant('{$_index[1]}') : null)";
+ } else {
+ return "(defined({$_index[1]}) ? constant({$_index[1]}) : null)";
+ }
+ // no break
+ case 'config':
+ if (isset($_index[ 2 ])) {
+ return "(is_array(\$tmp = \$_smarty_tpl->smarty->ext->configload->_getConfigVariable(\$_smarty_tpl, $_index[1])) ? \$tmp[$_index[2]] : null)";
+ } else {
+ return "\$_smarty_tpl->smarty->ext->configload->_getConfigVariable(\$_smarty_tpl, $_index[1])";
+ }
+ // no break
+ case 'ldelim':
+ return "\$_smarty_tpl->smarty->left_delimiter";
+ case 'rdelim':
+ return "\$_smarty_tpl->smarty->right_delimiter";
+ default:
+ $compiler->trigger_template_error('$smarty.' . trim($_index[ 0 ], "'") . ' is not defined');
+ break;
+ }
+ if (isset($_index[ 1 ])) {
+ array_shift($_index);
+ foreach ($_index as $_ind) {
+ $compiled_ref = $compiled_ref . "[$_ind]";
+ }
+ }
+ return $compiled_ref;
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_rdelim.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_rdelim.php
new file mode 100644
index 0000000..1cc340c
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_rdelim.php
@@ -0,0 +1,34 @@
+smarty->right_delimiter;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_section.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_section.php
new file mode 100644
index 0000000..0dee208
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_section.php
@@ -0,0 +1,462 @@
+loopNesting++;
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $attributes = array('name' => $compiler->getId($_attr[ 'name' ]));
+ unset($_attr[ 'name' ]);
+ foreach ($attributes as $a => $v) {
+ if ($v === false) {
+ $compiler->trigger_template_error("'{$a}' attribute/variable has illegal value", null, true);
+ }
+ }
+ $local = "\$__section_{$attributes['name']}_" . $this->counter++ . '_';
+ $sectionVar = "\$_smarty_tpl->tpl_vars['__smarty_section_{$attributes['name']}']";
+ $this->openTag($compiler, 'section', array('section', $compiler->nocache, $local, $sectionVar));
+ // maybe nocache because of nocache variables
+ $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
+ $initLocal = array();
+ $initNamedProperty = array();
+ $initFor = array();
+ $incFor = array();
+ $cmpFor = array();
+ $propValue = array(
+ 'index' => "{$sectionVar}->value['index']", 'show' => 'true', 'step' => 1,
+ 'iteration' => "{$local}iteration",
+ );
+ $propType = array('index' => 2, 'iteration' => 2, 'show' => 0, 'step' => 0,);
+ // search for used tag attributes
+ $this->scanForProperties($attributes, $compiler);
+ if (!empty($this->matchResults[ 'named' ])) {
+ $namedAttr = $this->matchResults[ 'named' ];
+ }
+ if (isset($_attr[ 'properties' ]) && preg_match_all("/['](.*?)[']/", $_attr[ 'properties' ], $match)) {
+ foreach ($match[ 1 ] as $prop) {
+ if (in_array($prop, $this->nameProperties)) {
+ $namedAttr[ $prop ] = true;
+ } else {
+ $compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
+ }
+ }
+ }
+ $namedAttr[ 'index' ] = true;
+ $output = " $attr_value) {
+ switch ($attr_name) {
+ case 'loop':
+ if (is_numeric($attr_value)) {
+ $v = (int)$attr_value;
+ $t = 0;
+ } else {
+ $v = "(is_array(@\$_loop=$attr_value) ? count(\$_loop) : max(0, (int) \$_loop))";
+ $t = 1;
+ }
+ if ($t === 1) {
+ $initLocal[ 'loop' ] = $v;
+ $v = "{$local}loop";
+ }
+ break;
+ case 'show':
+ if (is_bool($attr_value)) {
+ $v = $attr_value ? 'true' : 'false';
+ $t = 0;
+ } else {
+ $v = "(bool) $attr_value";
+ $t = 3;
+ }
+ break;
+ case 'step':
+ if (is_numeric($attr_value)) {
+ $v = (int)$attr_value;
+ $v = ($v === 0) ? 1 : $v;
+ $t = 0;
+ break;
+ }
+ $initLocal[ 'step' ] = "((int)@$attr_value) === 0 ? 1 : (int)@$attr_value";
+ $v = "{$local}step";
+ $t = 2;
+ break;
+ case 'max':
+ case 'start':
+ if (is_numeric($attr_value)) {
+ $v = (int)$attr_value;
+ $t = 0;
+ break;
+ }
+ $v = "(int)@$attr_value";
+ $t = 3;
+ break;
+ }
+ if ($t === 3 && $compiler->getId($attr_value)) {
+ $t = 1;
+ }
+ $propValue[ $attr_name ] = $v;
+ $propType[ $attr_name ] = $t;
+ }
+ if (isset($namedAttr[ 'step' ])) {
+ $initNamedProperty[ 'step' ] = $propValue[ 'step' ];
+ }
+ if (isset($namedAttr[ 'iteration' ])) {
+ $propValue[ 'iteration' ] = "{$sectionVar}->value['iteration']";
+ }
+ $incFor[ 'iteration' ] = "{$propValue['iteration']}++";
+ $initFor[ 'iteration' ] = "{$propValue['iteration']} = 1";
+ if ($propType[ 'step' ] === 0) {
+ if ($propValue[ 'step' ] === 1) {
+ $incFor[ 'index' ] = "{$sectionVar}->value['index']++";
+ } elseif ($propValue[ 'step' ] > 1) {
+ $incFor[ 'index' ] = "{$sectionVar}->value['index'] += {$propValue['step']}";
+ } else {
+ $incFor[ 'index' ] = "{$sectionVar}->value['index'] -= " . -$propValue[ 'step' ];
+ }
+ } else {
+ $incFor[ 'index' ] = "{$sectionVar}->value['index'] += {$propValue['step']}";
+ }
+ if (!isset($propValue[ 'max' ])) {
+ $propValue[ 'max' ] = $propValue[ 'loop' ];
+ $propType[ 'max' ] = $propType[ 'loop' ];
+ } elseif ($propType[ 'max' ] !== 0) {
+ $propValue[ 'max' ] = "{$propValue['max']} < 0 ? {$propValue['loop']} : {$propValue['max']}";
+ $propType[ 'max' ] = 1;
+ } else {
+ if ($propValue[ 'max' ] < 0) {
+ $propValue[ 'max' ] = $propValue[ 'loop' ];
+ $propType[ 'max' ] = $propType[ 'loop' ];
+ }
+ }
+ if (!isset($propValue[ 'start' ])) {
+ $start_code =
+ array(1 => "{$propValue['step']} > 0 ? ", 2 => '0', 3 => ' : ', 4 => $propValue[ 'loop' ], 5 => ' - 1');
+ if ($propType[ 'loop' ] === 0) {
+ $start_code[ 5 ] = '';
+ $start_code[ 4 ] = $propValue[ 'loop' ] - 1;
+ }
+ if ($propType[ 'step' ] === 0) {
+ if ($propValue[ 'step' ] > 0) {
+ $start_code = array(1 => '0');
+ $propType[ 'start' ] = 0;
+ } else {
+ $start_code[ 1 ] = $start_code[ 2 ] = $start_code[ 3 ] = '';
+ $propType[ 'start' ] = $propType[ 'loop' ];
+ }
+ } else {
+ $propType[ 'start' ] = 1;
+ }
+ $propValue[ 'start' ] = join('', $start_code);
+ } else {
+ $start_code =
+ array(
+ 1 => "{$propValue['start']} < 0 ? ", 2 => 'max(', 3 => "{$propValue['step']} > 0 ? ", 4 => '0',
+ 5 => ' : ', 6 => '-1', 7 => ', ', 8 => "{$propValue['start']} + {$propValue['loop']}", 10 => ')',
+ 11 => ' : ', 12 => 'min(', 13 => $propValue[ 'start' ], 14 => ', ',
+ 15 => "{$propValue['step']} > 0 ? ", 16 => $propValue[ 'loop' ], 17 => ' : ',
+ 18 => $propType[ 'loop' ] === 0 ? $propValue[ 'loop' ] - 1 : "{$propValue['loop']} - 1",
+ 19 => ')'
+ );
+ if ($propType[ 'step' ] === 0) {
+ $start_code[ 3 ] = $start_code[ 5 ] = $start_code[ 15 ] = $start_code[ 17 ] = '';
+ if ($propValue[ 'step' ] > 0) {
+ $start_code[ 6 ] = $start_code[ 18 ] = '';
+ } else {
+ $start_code[ 4 ] = $start_code[ 16 ] = '';
+ }
+ }
+ if ($propType[ 'start' ] === 0) {
+ if ($propType[ 'loop' ] === 0) {
+ $start_code[ 8 ] = $propValue[ 'start' ] + $propValue[ 'loop' ];
+ }
+ $propType[ 'start' ] = $propType[ 'step' ] + $propType[ 'loop' ];
+ $start_code[ 1 ] = '';
+ if ($propValue[ 'start' ] < 0) {
+ for ($i = 11; $i <= 19; $i++) {
+ $start_code[ $i ] = '';
+ }
+ if ($propType[ 'start' ] === 0) {
+ $start_code = array(
+ max(
+ $propValue[ 'step' ] > 0 ? 0 : -1,
+ $propValue[ 'start' ] + $propValue[ 'loop' ]
+ )
+ );
+ }
+ } else {
+ for ($i = 1; $i <= 11; $i++) {
+ $start_code[ $i ] = '';
+ }
+ if ($propType[ 'start' ] === 0) {
+ $start_code =
+ array(
+ min(
+ $propValue[ 'step' ] > 0 ? $propValue[ 'loop' ] : $propValue[ 'loop' ] - 1,
+ $propValue[ 'start' ]
+ )
+ );
+ }
+ }
+ }
+ $propValue[ 'start' ] = join('', $start_code);
+ }
+ if ($propType[ 'start' ] !== 0) {
+ $initLocal[ 'start' ] = $propValue[ 'start' ];
+ $propValue[ 'start' ] = "{$local}start";
+ }
+ $initFor[ 'index' ] = "{$sectionVar}->value['index'] = {$propValue['start']}";
+ if (!isset($_attr[ 'start' ]) && !isset($_attr[ 'step' ]) && !isset($_attr[ 'max' ])) {
+ $propValue[ 'total' ] = $propValue[ 'loop' ];
+ $propType[ 'total' ] = $propType[ 'loop' ];
+ } else {
+ $propType[ 'total' ] =
+ $propType[ 'start' ] + $propType[ 'loop' ] + $propType[ 'step' ] + $propType[ 'max' ];
+ if ($propType[ 'total' ] === 0) {
+ $propValue[ 'total' ] =
+ min(
+ ceil(
+ ($propValue[ 'step' ] > 0 ? $propValue[ 'loop' ] - $propValue[ 'start' ] :
+ (int)$propValue[ 'start' ] + 1) / abs($propValue[ 'step' ])
+ ),
+ $propValue[ 'max' ]
+ );
+ } else {
+ $total_code = array(
+ 1 => 'min(', 2 => 'ceil(', 3 => '(', 4 => "{$propValue['step']} > 0 ? ",
+ 5 => $propValue[ 'loop' ], 6 => ' - ', 7 => $propValue[ 'start' ], 8 => ' : ',
+ 9 => $propValue[ 'start' ], 10 => '+ 1', 11 => ')', 12 => '/ ', 13 => 'abs(',
+ 14 => $propValue[ 'step' ], 15 => ')', 16 => ')', 17 => ", {$propValue['max']})",
+ );
+ if (!isset($propValue[ 'max' ])) {
+ $total_code[ 1 ] = $total_code[ 17 ] = '';
+ }
+ if ($propType[ 'loop' ] + $propType[ 'start' ] === 0) {
+ $total_code[ 5 ] = $propValue[ 'loop' ] - $propValue[ 'start' ];
+ $total_code[ 6 ] = $total_code[ 7 ] = '';
+ }
+ if ($propType[ 'start' ] === 0) {
+ $total_code[ 9 ] = (int)$propValue[ 'start' ] + 1;
+ $total_code[ 10 ] = '';
+ }
+ if ($propType[ 'step' ] === 0) {
+ $total_code[ 13 ] = $total_code[ 15 ] = '';
+ if ($propValue[ 'step' ] === 1 || $propValue[ 'step' ] === -1) {
+ $total_code[ 2 ] = $total_code[ 12 ] = $total_code[ 14 ] = $total_code[ 16 ] = '';
+ } elseif ($propValue[ 'step' ] < 0) {
+ $total_code[ 14 ] = -$propValue[ 'step' ];
+ }
+ $total_code[ 4 ] = '';
+ if ($propValue[ 'step' ] > 0) {
+ $total_code[ 8 ] = $total_code[ 9 ] = $total_code[ 10 ] = '';
+ } else {
+ $total_code[ 5 ] = $total_code[ 6 ] = $total_code[ 7 ] = $total_code[ 8 ] = '';
+ }
+ }
+ $propValue[ 'total' ] = join('', $total_code);
+ }
+ }
+ if (isset($namedAttr[ 'loop' ])) {
+ $initNamedProperty[ 'loop' ] = "'loop' => {$propValue['loop']}";
+ }
+ if (isset($namedAttr[ 'total' ])) {
+ $initNamedProperty[ 'total' ] = "'total' => {$propValue['total']}";
+ if ($propType[ 'total' ] > 0) {
+ $propValue[ 'total' ] = "{$sectionVar}->value['total']";
+ }
+ } elseif ($propType[ 'total' ] > 0) {
+ $initLocal[ 'total' ] = $propValue[ 'total' ];
+ $propValue[ 'total' ] = "{$local}total";
+ }
+ $cmpFor[ 'iteration' ] = "{$propValue['iteration']} <= {$propValue['total']}";
+ foreach ($initLocal as $key => $code) {
+ $output .= "{$local}{$key} = {$code};\n";
+ }
+ $_vars = 'array(' . join(', ', $initNamedProperty) . ')';
+ $output .= "{$sectionVar} = new Smarty_Variable({$_vars});\n";
+ $cond_code = "{$propValue['total']} !== 0";
+ if ($propType[ 'total' ] === 0) {
+ if ($propValue[ 'total' ] === 0) {
+ $cond_code = 'false';
+ } else {
+ $cond_code = 'true';
+ }
+ }
+ if ($propType[ 'show' ] > 0) {
+ $output .= "{$local}show = {$propValue['show']} ? {$cond_code} : false;\n";
+ $output .= "if ({$local}show) {\n";
+ } elseif ($propValue[ 'show' ] === 'true') {
+ $output .= "if ({$cond_code}) {\n";
+ } else {
+ $output .= "if (false) {\n";
+ }
+ $jinit = join(', ', $initFor);
+ $jcmp = join(', ', $cmpFor);
+ $jinc = join(', ', $incFor);
+ $output .= "for ({$jinit}; {$jcmp}; {$jinc}){\n";
+ if (isset($namedAttr[ 'rownum' ])) {
+ $output .= "{$sectionVar}->value['rownum'] = {$propValue['iteration']};\n";
+ }
+ if (isset($namedAttr[ 'index_prev' ])) {
+ $output .= "{$sectionVar}->value['index_prev'] = {$propValue['index']} - {$propValue['step']};\n";
+ }
+ if (isset($namedAttr[ 'index_next' ])) {
+ $output .= "{$sectionVar}->value['index_next'] = {$propValue['index']} + {$propValue['step']};\n";
+ }
+ if (isset($namedAttr[ 'first' ])) {
+ $output .= "{$sectionVar}->value['first'] = ({$propValue['iteration']} === 1);\n";
+ }
+ if (isset($namedAttr[ 'last' ])) {
+ $output .= "{$sectionVar}->value['last'] = ({$propValue['iteration']} === {$propValue['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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ list($openTag, $nocache, $local, $sectionVar) = $this->closeTag($compiler, array('section'));
+ $this->openTag($compiler, 'sectionelse', array('sectionelse', $nocache, $local, $sectionVar));
+ 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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ $compiler->loopNesting--;
+ // must endblock be nocache?
+ if ($compiler->nocache) {
+ $compiler->tag_nocache = true;
+ }
+ list($openTag, $compiler->nocache, $local, $sectionVar) =
+ $this->closeTag($compiler, array('section', 'sectionelse'));
+ $output = "';
+ return $output;
+ }
+}
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_setfilter.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_setfilter.php
similarity index 52%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_setfilter.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_setfilter.php
index d1dd90c..70e2e2f 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compile_setfilter.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_setfilter.php
@@ -1,72 +1,68 @@
-variable_filter_stack[] = $compiler->template->variable_filters;
- $compiler->template->variable_filters = $parameter['modifier_list'];
- // this tag does not return compiled code
- $compiler->has_code = false;
- return true;
- }
-
-}
-
-/**
- * Smarty Internal Plugin Compile Setfilterclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_CompileBase {
-
- /**
- * Compiles code for the {/setfilter} tag
- *
- * This tag does not generate compiled output. It resets variable filter.
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @return string compiled code
- */
- public function compile($args, $compiler)
- {
- $_attr = $this->getAttributes($compiler, $args);
- // reset variable filter to previous state
- if (count($compiler->variable_filter_stack)) {
- $compiler->template->variable_filters = array_pop($compiler->variable_filter_stack);
- } else {
- $compiler->template->variable_filters = array();
- }
- // this tag does not return compiled code
- $compiler->has_code = false;
- return true;
- }
-
-}
-
-?>
\ No newline at end of file
+variable_filter_stack[] = $compiler->variable_filters;
+ $compiler->variable_filters = $parameter[ 'modifier_list' ];
+ // this tag does not return compiled code
+ $compiler->has_code = false;
+ return true;
+ }
+}
+
+/**
+ * Smarty Internal Plugin Compile Setfilterclose Class
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_CompileBase
+{
+ /**
+ * Compiles code for the {/setfilter} tag
+ * This tag does not generate compiled output. It resets variable filter.
+ *
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ $_attr = $this->getAttributes($compiler, $args);
+ // reset variable filter to previous state
+ if (count($compiler->variable_filter_stack)) {
+ $compiler->variable_filters = array_pop($compiler->variable_filter_stack);
+ } else {
+ $compiler->variable_filters = array();
+ }
+ // this tag does not return compiled code
+ $compiler->has_code = false;
+ return true;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_shared_inheritance.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_shared_inheritance.php
new file mode 100644
index 0000000..d90262e
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_shared_inheritance.php
@@ -0,0 +1,49 @@
+prefixCompiledCode .= "_loadInheritance();\n\$_smarty_tpl->inheritance->init(\$_smarty_tpl, " .
+ var_export($initChildSequence, true) . ");\n?>\n";
+ }
+
+ /**
+ * Register post compile callback to compile inheritance initialization code
+ *
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler
+ * @param bool|false $initChildSequence if true force child template
+ */
+ public function registerInit(Smarty_Internal_TemplateCompilerBase $compiler, $initChildSequence = false)
+ {
+ if ($initChildSequence || !isset($compiler->_cache[ 'inheritanceInit' ])) {
+ $compiler->registerPostCompileCallback(
+ array('Smarty_Internal_Compile_Shared_Inheritance', 'postCompile'),
+ array($initChildSequence),
+ 'inheritanceInit',
+ $initChildSequence
+ );
+ $compiler->_cache[ 'inheritanceInit' ] = true;
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_while.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_while.php
new file mode 100644
index 0000000..5aa3a73
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_while.php
@@ -0,0 +1,100 @@
+loopNesting++;
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $this->openTag($compiler, 'while', $compiler->nocache);
+ if (!array_key_exists('if condition', $parameter)) {
+ $compiler->trigger_template_error('missing while condition', null, true);
+ }
+ // maybe nocache because of nocache variables
+ $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
+ if (is_array($parameter[ 'if condition' ])) {
+ if ($compiler->nocache) {
+ // create nocache var to make it know for further compiling
+ if (is_array($parameter[ 'if condition' ][ 'var' ])) {
+ $var = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
+ } else {
+ $var = $parameter[ 'if condition' ][ 'var' ];
+ }
+ $compiler->setNocacheInVariable($var);
+ }
+ $prefixVar = $compiler->getNewPrefixVariable();
+ $assignCompiler = new Smarty_Internal_Compile_Assign();
+ $assignAttr = array();
+ $assignAttr[][ 'value' ] = $prefixVar;
+ if (is_array($parameter[ 'if condition' ][ 'var' ])) {
+ $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
+ $_output = "";
+ $_output .= $assignCompiler->compile(
+ $assignAttr,
+ $compiler,
+ array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ])
+ );
+ } else {
+ $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ];
+ $_output = "";
+ $_output .= $assignCompiler->compile($assignAttr, $compiler, array());
+ }
+ 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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ *
+ * @return string compiled code
+ */
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ $compiler->loopNesting--;
+ // must endblock be nocache?
+ if ($compiler->nocache) {
+ $compiler->tag_nocache = true;
+ }
+ $compiler->nocache = $this->closeTag($compiler, array('while'));
+ return "\n";
+ }
+}
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compilebase.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compilebase.php
similarity index 50%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compilebase.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compilebase.php
index 5fb56f3..2a32e43 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_compilebase.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compilebase.php
@@ -2,25 +2,26 @@
/**
* Smarty Internal Plugin CompileBase
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
- * @author Uwe Tews
+ * @author Uwe Tews
*/
/**
* This class does extend all internal compile plugins
*
- * @package Smarty
+ * @package Smarty
* @subpackage Compiler
*/
-abstract class Smarty_Internal_CompileBase {
-
+abstract class Smarty_Internal_CompileBase
+{
/**
* Array of names of required attribute required by tag
*
* @var array
*/
public $required_attributes = array();
+
/**
* Array of names of optional attribute required by tag
* use array('_any') if there is no restriction of attributes names
@@ -28,12 +29,14 @@ abstract class Smarty_Internal_CompileBase {
* @var array
*/
public $optional_attributes = array();
+
/**
* Shorttag attribute order defined by its names
*
* @var array
*/
public $shorttag_order = array();
+
/**
* Array of names of valid option flags
*
@@ -42,8 +45,21 @@ abstract class Smarty_Internal_CompileBase {
public $option_flags = array('nocache');
/**
- * This function checks if the attributes passed are valid
+ * Mapping array for boolean option value
*
+ * @var array
+ */
+ public $optionMap = array(1 => true, 0 => false, 'true' => true, 'false' => false);
+
+ /**
+ * Mapping array with attributes as key
+ *
+ * @var array
+ */
+ public $mapCache = array();
+
+ /**
+ * This function checks if the attributes passed are valid
* The attributes passed for the tag to compile are checked against the list of required and
* optional attributes. Required attributes must be present. Optional attributes are check against
* the corresponding list. The keyword '_any' specifies that any attribute will be accepted
@@ -51,87 +67,101 @@ abstract class Smarty_Internal_CompileBase {
*
* @param object $compiler compiler object
* @param array $attributes attributes applied to the tag
- * @return array of mapped attributes for further processing
+ *
+ * @return array of mapped attributes for further processing
*/
public function getAttributes($compiler, $attributes)
{
$_indexed_attr = array();
- // loop over attributes
+ if (!isset($this->mapCache[ 'option' ])) {
+ $this->mapCache[ 'option' ] = array_fill_keys($this->option_flags, true);
+ }
foreach ($attributes as $key => $mixed) {
// shorthand ?
if (!is_array($mixed)) {
// option flag ?
- if (in_array(trim($mixed, '\'"'), $this->option_flags)) {
- $_indexed_attr[trim($mixed, '\'"')] = true;
+ if (isset($this->mapCache[ 'option' ][ trim($mixed, '\'"') ])) {
+ $_indexed_attr[ trim($mixed, '\'"') ] = true;
// shorthand attribute ?
- } else if (isset($this->shorttag_order[$key])) {
- $_indexed_attr[$this->shorttag_order[$key]] = $mixed;
+ } elseif (isset($this->shorttag_order[ $key ])) {
+ $_indexed_attr[ $this->shorttag_order[ $key ] ] = $mixed;
} else {
// too many shorthands
- $compiler->trigger_template_error('too many shorthand attributes', $compiler->lex->taglineno);
+ $compiler->trigger_template_error('too many shorthand attributes', null, true);
}
// named attribute
} else {
- $kv = each($mixed);
- // option flag?
- if (in_array($kv['key'], $this->option_flags)) {
- if (is_bool($kv['value'])) {
- $_indexed_attr[$kv['key']] = $kv['value'];
- } else if (is_string($kv['value']) && in_array(trim($kv['value'], '\'"'), array('true', 'false'))) {
- if (trim($kv['value']) == 'true') {
- $_indexed_attr[$kv['key']] = true;
+ foreach ($mixed as $k => $v) {
+ // option flag?
+ if (isset($this->mapCache[ 'option' ][ $k ])) {
+ if (is_bool($v)) {
+ $_indexed_attr[ $k ] = $v;
} else {
- $_indexed_attr[$kv['key']] = false;
- }
- } else if (is_numeric($kv['value']) && in_array($kv['value'], array(0, 1))) {
- if ($kv['value'] == 1) {
- $_indexed_attr[$kv['key']] = true;
- } else {
- $_indexed_attr[$kv['key']] = false;
+ if (is_string($v)) {
+ $v = trim($v, '\'" ');
+ }
+ if (isset($this->optionMap[ $v ])) {
+ $_indexed_attr[ $k ] = $this->optionMap[ $v ];
+ } else {
+ $compiler->trigger_template_error(
+ "illegal value '" . var_export($v, true) .
+ "' for option flag '{$k}'",
+ null,
+ true
+ );
+ }
}
+ // must be named attribute
} else {
- $compiler->trigger_template_error("illegal value of option flag \"{$kv['key']}\"", $compiler->lex->taglineno);
+ $_indexed_attr[ $k ] = $v;
}
- // must be named attribute
- } else {
- reset($mixed);
- $_indexed_attr[key($mixed)] = $mixed[key($mixed)];
}
}
}
// check if all required attributes present
foreach ($this->required_attributes as $attr) {
- if (!array_key_exists($attr, $_indexed_attr)) {
- $compiler->trigger_template_error("missing \"" . $attr . "\" attribute", $compiler->lex->taglineno);
+ if (!isset($_indexed_attr[ $attr ])) {
+ $compiler->trigger_template_error("missing '{$attr}' attribute", null, true);
}
}
- // check for unallowed attributes
- if ($this->optional_attributes != array('_any')) {
- $tmp_array = array_merge($this->required_attributes, $this->optional_attributes, $this->option_flags);
+ // check for not allowed attributes
+ if ($this->optional_attributes !== array('_any')) {
+ if (!isset($this->mapCache[ 'all' ])) {
+ $this->mapCache[ 'all' ] =
+ array_fill_keys(
+ array_merge(
+ $this->required_attributes,
+ $this->optional_attributes,
+ $this->option_flags
+ ),
+ true
+ );
+ }
foreach ($_indexed_attr as $key => $dummy) {
- if (!in_array($key, $tmp_array) && $key !== 0) {
- $compiler->trigger_template_error("unexpected \"" . $key . "\" attribute", $compiler->lex->taglineno);
+ if (!isset($this->mapCache[ 'all' ][ $key ]) && $key !== 0) {
+ $compiler->trigger_template_error("unexpected '{$key}' attribute", null, true);
}
}
}
// default 'false' for all option flags not set
foreach ($this->option_flags as $flag) {
- if (!isset($_indexed_attr[$flag])) {
- $_indexed_attr[$flag] = false;
+ if (!isset($_indexed_attr[ $flag ])) {
+ $_indexed_attr[ $flag ] = false;
}
}
-
+ if (isset($_indexed_attr[ 'nocache' ]) && $_indexed_attr[ 'nocache' ]) {
+ $compiler->tag_nocache = true;
+ }
return $_indexed_attr;
}
/**
* Push opening tag name on stack
- *
* Optionally additional data can be saved on stack
*
- * @param object $compiler compiler object
- * @param string $openTag the opening tag's name
- * @param mixed $data optional data saved
+ * @param object $compiler compiler object
+ * @param string $openTag the opening tag's name
+ * @param mixed $data optional data saved
*/
public function openTag($compiler, $openTag, $data = null)
{
@@ -140,12 +170,12 @@ abstract class Smarty_Internal_CompileBase {
/**
* Pop closing tag
- *
* Raise an error if this stack-top doesn't match with expected opening tags
*
* @param object $compiler compiler object
* @param array|string $expectedTag the expected opening tag names
- * @return mixed any type the opening tag's name or saved data
+ *
+ * @return mixed any type the opening tag's name or saved data
*/
public function closeTag($compiler, $expectedTag)
{
@@ -153,7 +183,7 @@ abstract class Smarty_Internal_CompileBase {
// get stacked info
list($_openTag, $_data) = array_pop($compiler->_tag_stack);
// open tag must match with the expected ones
- if (in_array($_openTag, (array) $expectedTag)) {
+ if (in_array($_openTag, (array)$expectedTag)) {
if (is_null($_data)) {
// return opening tag
return $_openTag;
@@ -163,14 +193,11 @@ abstract class Smarty_Internal_CompileBase {
}
}
// wrong nesting of tags
- $compiler->trigger_template_error("unclosed {" . $_openTag . "} tag");
+ $compiler->trigger_template_error("unclosed '{$compiler->smarty->left_delimiter}{$_openTag}{$compiler->smarty->right_delimiter}' tag");
return;
}
// wrong nesting of tags
- $compiler->trigger_template_error("unexpected closing tag", $compiler->lex->taglineno);
+ $compiler->trigger_template_error('unexpected closing tag', null, true);
return;
}
-
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_config_file_compiler.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_config_file_compiler.php
new file mode 100644
index 0000000..469b966
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_config_file_compiler.php
@@ -0,0 +1,211 @@
+smarty = $smarty;
+ // get required plugins
+ $this->lexer_class = $lexer_class;
+ $this->parser_class = $parser_class;
+ $this->smarty = $smarty;
+ $this->config_data[ 'sections' ] = array();
+ $this->config_data[ 'vars' ] = array();
+ }
+
+ /**
+ * Method to compile Smarty config source.
+ *
+ * @param Smarty_Internal_Template $template
+ *
+ * @return bool true if compiling succeeded, false if it failed
+ * @throws \SmartyException
+ */
+ public function compileTemplate(Smarty_Internal_Template $template)
+ {
+ $this->template = $template;
+ $this->template->compiled->file_dependency[ $this->template->source->uid ] =
+ array(
+ $this->template->source->filepath,
+ $this->template->source->getTimeStamp(),
+ $this->template->source->type
+ );
+ if ($this->smarty->debugging) {
+ if (!isset($this->smarty->_debug)) {
+ $this->smarty->_debug = new Smarty_Internal_Debug();
+ }
+ $this->smarty->_debug->start_compile($this->template);
+ }
+ // init the lexer/parser to compile the config file
+ /* @var Smarty_Internal_ConfigFileLexer $this->lex */
+ $this->lex = new $this->lexer_class(
+ str_replace(
+ array(
+ "\r\n",
+ "\r"
+ ),
+ "\n",
+ $template->source->getContent()
+ ) . "\n",
+ $this
+ );
+ /* @var Smarty_Internal_ConfigFileParser $this->parser */
+ $this->parser = new $this->parser_class($this->lex, $this);
+ if (function_exists('mb_internal_encoding')
+ && function_exists('ini_get')
+ && ((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();
+ }
+ // get tokens from lexer and parse them
+ while ($this->lex->yylex()) {
+ if ($this->smarty->_parserdebug) {
+ echo " Parsing {$this->parser->yyTokenName[$this->lex->token]} Token {$this->lex->value} Line {$this->lex->line} \n";
+ }
+ $this->parser->doParse($this->lex->token, $this->lex->value);
+ }
+ // finish parsing process
+ $this->parser->doParse(0, 0);
+ if ($mbEncoding) {
+ mb_internal_encoding($mbEncoding);
+ }
+ if ($this->smarty->debugging) {
+ $this->smarty->_debug->end_compile($this->template);
+ }
+ // template header code
+ $template_header = sprintf(
+ "\n",
+ Smarty::SMARTY_VERSION,
+ date("Y-m-d H:i:s"),
+ str_replace('*/', '* /' , $this->template->source->filepath)
+ );
+ $code = 'smarty->ext->configLoad->_loadConfigVars($_smarty_tpl, ' .
+ var_export($this->config_data, true) . '); ?>';
+ return $template_header . $this->template->smarty->ext->_codeFrame->create($this->template, $code);
+ }
+
+ /**
+ * 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)
+ {
+ // get config 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->template->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/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_configfilelexer.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_configfilelexer.php
new file mode 100644
index 0000000..afb3efc
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_configfilelexer.php
@@ -0,0 +1,739 @@
+ 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', 6 => 'TRIPPLE'
+ );
+
+ /**
+ * token names
+ *
+ * @var array
+ */
+ public $smarty_token_names = array( // Text for parser error messages
+ );
+
+ /**
+ * compiler object
+ *
+ * @var Smarty_Internal_Config_File_Compiler
+ */
+ private $compiler = null;
+
+ /**
+ * copy of config_booleanize
+ *
+ * @var bool
+ */
+ private $configBooleanize = false;
+
+ /**
+ * storage for assembled token patterns
+ *
+ * @var string
+ */
+ private $yy_global_pattern1 = null;
+
+ private $yy_global_pattern2 = null;
+
+ private $yy_global_pattern3 = null;
+
+ private $yy_global_pattern4 = null;
+
+ private $yy_global_pattern5 = null;
+
+ private $yy_global_pattern6 = null;
+
+ private $_yy_state = 1;
+
+ private $_yy_stack = array();
+
+ /**
+ * constructor
+ *
+ * @param string $data template source
+ * @param Smarty_Internal_Config_File_Compiler $compiler
+ */
+ public function __construct($data, Smarty_Internal_Config_File_Compiler $compiler)
+ {
+ $this->data = $data . "\n"; //now all lines are \n-terminated
+ $this->dataLength = strlen($data);
+ $this->counter = 0;
+ if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) {
+ $this->counter += strlen($match[ 0 ]);
+ }
+ $this->line = 1;
+ $this->compiler = $compiler;
+ $this->smarty = $compiler->smarty;
+ $this->configBooleanize = $this->smarty->config_booleanize;
+ }
+
+ public function replace($input)
+ {
+ return $input;
+ } // end function
+
+ public function PrintTrace()
+ {
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = ' ';
+ }
+
+ 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()
+ {
+ if (!isset($this->yy_global_pattern1)) {
+ $this->yy_global_pattern1 =
+ $this->replace("/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/isS");
+ }
+ if (!isset($this->dataLength)) {
+ $this->dataLength = strlen($this->data);
+ }
+ if ($this->counter >= $this->dataLength) {
+ return false; // end of input
+ }
+ do {
+ if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][ 1 ])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ } else {
+ $yymatches = array_filter($yymatches);
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' .
+ ' an empty string. Input "' . substr(
+ $this->data,
+ $this->counter,
+ 5
+ ) . '... state START');
+ }
+ next($yymatches); // skip global match
+ $this->token = key($yymatches); // token number
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r1_' . $this->token}();
+ 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 >= $this->dataLength) {
+ 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);
+ }
+
+ public function yy_r1_1()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART;
+ $this->yypushstate(self::COMMENT);
+ }
+
+ public function yy_r1_2()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_OPENB;
+ $this->yypushstate(self::SECTION);
+ }
+
+ public function yy_r1_3()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB;
+ }
+
+ public function yy_r1_4()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL;
+ $this->yypushstate(self::VALUE);
+ } // end function
+
+ public function yy_r1_5()
+ {
+ return false;
+ }
+
+ public function yy_r1_6()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
+ }
+
+ public function yy_r1_7()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_ID;
+ }
+
+ public function yy_r1_8()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_OTHER;
+ }
+
+ public function yylex2()
+ {
+ if (!isset($this->yy_global_pattern2)) {
+ $this->yy_global_pattern2 =
+ $this->replace("/\G([ \t\r]+)|\G(\\d+\\.\\d+(?=[ \t\r]*[\n#;]))|\G(\\d+(?=[ \t\r]*[\n#;]))|\G(\"\"\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#;]))|\G(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#;]))|\G([a-zA-Z]+(?=[ \t\r]*[\n#;]))|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS");
+ }
+ if (!isset($this->dataLength)) {
+ $this->dataLength = strlen($this->data);
+ }
+ if ($this->counter >= $this->dataLength) {
+ return false; // end of input
+ }
+ do {
+ if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][ 1 ])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ } else {
+ $yymatches = array_filter($yymatches);
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' .
+ ' an empty string. Input "' . substr(
+ $this->data,
+ $this->counter,
+ 5
+ ) . '... state VALUE');
+ }
+ next($yymatches); // skip global match
+ $this->token = key($yymatches); // token number
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r2_' . $this->token}();
+ 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 >= $this->dataLength) {
+ 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);
+ }
+
+ public function yy_r2_1()
+ {
+ return false;
+ }
+
+ public function yy_r2_2()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT;
+ $this->yypopstate();
+ }
+
+ public function yy_r2_3()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_INT;
+ $this->yypopstate();
+ }
+
+ public function yy_r2_4()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES;
+ $this->yypushstate(self::TRIPPLE);
+ }
+
+ public function yy_r2_5()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING;
+ $this->yypopstate();
+ }
+
+ public function yy_r2_6()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING;
+ $this->yypopstate();
+ } // end function
+
+ public function yy_r2_7()
+ {
+ if (!$this->configBooleanize ||
+ !in_array(strtolower($this->value), array('true', 'false', 'on', 'off', 'yes', 'no'))) {
+ $this->yypopstate();
+ $this->yypushstate(self::NAKED_STRING_VALUE);
+ return true; //reprocess in new state
+ } else {
+ $this->token = Smarty_Internal_Configfileparser::TPC_BOOL;
+ $this->yypopstate();
+ }
+ }
+
+ public function yy_r2_8()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->yypopstate();
+ }
+
+ public function yy_r2_9()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->value = '';
+ $this->yypopstate();
+ } // end function
+
+ public function yylex3()
+ {
+ if (!isset($this->yy_global_pattern3)) {
+ $this->yy_global_pattern3 = $this->replace("/\G([^\n]+?(?=[ \t\r]*\n))/isS");
+ }
+ if (!isset($this->dataLength)) {
+ $this->dataLength = strlen($this->data);
+ }
+ if ($this->counter >= $this->dataLength) {
+ return false; // end of input
+ }
+ do {
+ if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][ 1 ])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ } else {
+ $yymatches = array_filter($yymatches);
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' .
+ ' an empty string. Input "' . substr(
+ $this->data,
+ $this->counter,
+ 5
+ ) . '... state NAKED_STRING_VALUE');
+ }
+ next($yymatches); // skip global match
+ $this->token = key($yymatches); // token number
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r3_' . $this->token}();
+ 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 >= $this->dataLength) {
+ 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);
+ }
+
+ public function yy_r3_1()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->yypopstate();
+ }
+
+ public function yylex4()
+ {
+ if (!isset($this->yy_global_pattern4)) {
+ $this->yy_global_pattern4 = $this->replace("/\G([ \t\r]+)|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS");
+ }
+ if (!isset($this->dataLength)) {
+ $this->dataLength = strlen($this->data);
+ }
+ if ($this->counter >= $this->dataLength) {
+ return false; // end of input
+ }
+ do {
+ if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][ 1 ])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ } else {
+ $yymatches = array_filter($yymatches);
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' .
+ ' an empty string. Input "' . substr(
+ $this->data,
+ $this->counter,
+ 5
+ ) . '... state COMMENT');
+ }
+ next($yymatches); // skip global match
+ $this->token = key($yymatches); // token number
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r4_' . $this->token}();
+ 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 >= $this->dataLength) {
+ 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);
+ }
+
+ public function yy_r4_1()
+ {
+ return false;
+ }
+
+ public function yy_r4_2()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ } // end function
+
+ public function yy_r4_3()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
+ $this->yypopstate();
+ }
+
+ public function yylex5()
+ {
+ if (!isset($this->yy_global_pattern5)) {
+ $this->yy_global_pattern5 = $this->replace("/\G(\\.)|\G(.*?(?=[\.=[\]\r\n]))/isS");
+ }
+ if (!isset($this->dataLength)) {
+ $this->dataLength = strlen($this->data);
+ }
+ if ($this->counter >= $this->dataLength) {
+ return false; // end of input
+ }
+ do {
+ if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][ 1 ])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ } else {
+ $yymatches = array_filter($yymatches);
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' .
+ ' an empty string. Input "' . substr(
+ $this->data,
+ $this->counter,
+ 5
+ ) . '... state SECTION');
+ }
+ next($yymatches); // skip global match
+ $this->token = key($yymatches); // token number
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r5_' . $this->token}();
+ 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 >= $this->dataLength) {
+ 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);
+ }
+
+ public function yy_r5_1()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_DOT;
+ }
+
+ public function yy_r5_2()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_SECTION;
+ $this->yypopstate();
+ } // end function
+
+ public function yylex6()
+ {
+ if (!isset($this->yy_global_pattern6)) {
+ $this->yy_global_pattern6 = $this->replace("/\G(\"\"\"(?=[ \t\r]*[\n#;]))|\G([\S\s])/isS");
+ }
+ if (!isset($this->dataLength)) {
+ $this->dataLength = strlen($this->data);
+ }
+ if ($this->counter >= $this->dataLength) {
+ return false; // end of input
+ }
+ do {
+ if (preg_match($this->yy_global_pattern6, $this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][ 1 ])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ } else {
+ $yymatches = array_filter($yymatches);
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' .
+ ' an empty string. Input "' . substr(
+ $this->data,
+ $this->counter,
+ 5
+ ) . '... state TRIPPLE');
+ }
+ next($yymatches); // skip global match
+ $this->token = key($yymatches); // token number
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r6_' . $this->token}();
+ 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 >= $this->dataLength) {
+ 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);
+ }
+
+ public function yy_r6_1()
+ {
+ $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END;
+ $this->yypopstate();
+ $this->yypushstate(self::START);
+ }
+
+ public function yy_r6_2()
+ {
+ $to = strlen($this->data);
+ preg_match("/\"\"\"[ \t\r]*[\n#;]/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
+ if (isset($match[ 0 ][ 1 ])) {
+ $to = $match[ 0 ][ 1 ];
+ } else {
+ $this->compiler->trigger_config_file_error('missing or misspelled literal closing tag');
+ }
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_configfileparser.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_configfileparser.php
new file mode 100644
index 0000000..36fdb76
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_configfileparser.php
@@ -0,0 +1,1046 @@
+ 20, 1 => 2),
+ array(0 => 21, 1 => 1),
+ array(0 => 22, 1 => 2),
+ array(0 => 22, 1 => 0),
+ array(0 => 24, 1 => 5),
+ array(0 => 24, 1 => 6),
+ array(0 => 23, 1 => 2),
+ array(0 => 23, 1 => 2),
+ array(0 => 23, 1 => 0),
+ array(0 => 26, 1 => 3),
+ array(0 => 27, 1 => 1),
+ array(0 => 27, 1 => 1),
+ array(0 => 27, 1 => 1),
+ array(0 => 27, 1 => 1),
+ array(0 => 27, 1 => 1),
+ array(0 => 27, 1 => 3),
+ array(0 => 27, 1 => 2),
+ array(0 => 27, 1 => 1),
+ array(0 => 27, 1 => 1),
+ array(0 => 25, 1 => 1),
+ array(0 => 25, 1 => 2),
+ array(0 => 25, 1 => 3),
+ );
+
+ public static $yyReduceMap = array(
+ 0 => 0,
+ 2 => 0,
+ 3 => 0,
+ 19 => 0,
+ 20 => 0,
+ 21 => 0,
+ 1 => 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,
+ 18 => 17,
+ );
+
+ /**
+ * helper map
+ *
+ * @var array
+ */
+ private static $escapes_single = array(
+ '\\' => '\\',
+ '\'' => '\''
+ );
+
+ /**
+ * result status
+ *
+ * @var bool
+ */
+ public $successful = true;
+
+ /**
+ * return value
+ *
+ * @var mixed
+ */
+ public $retvalue = 0;
+
+ /**
+ * @var
+ */
+ public $yymajor;
+
+ /**
+ * compiler object
+ *
+ * @var Smarty_Internal_Config_File_Compiler
+ */
+ public $compiler = null;
+
+ /**
+ * smarty object
+ *
+ * @var Smarty
+ */
+ public $smarty = null;
+
+ public $yyTraceFILE;
+
+ public $yyTracePrompt;
+
+ public $yyidx;
+
+ public $yyerrcnt;
+
+ public $yystack = array();
+
+ public $yyTokenName = array(
+ '$', 'OPENB', 'SECTION', 'CLOSEB',
+ 'DOT', 'ID', 'EQUAL', 'FLOAT',
+ 'INT', 'BOOL', 'SINGLE_QUOTED_STRING', 'DOUBLE_QUOTED_STRING',
+ 'TRIPPLE_QUOTES', 'TRIPPLE_TEXT', 'TRIPPLE_QUOTES_END', 'NAKED_STRING',
+ 'OTHER', 'NEWLINE', 'COMMENTSTART', 'error',
+ 'start', 'global_vars', 'sections', 'var_list',
+ 'section', 'newline', 'var', 'value',
+ );
+
+ /**
+ * lexer object
+ *
+ * @var Smarty_Internal_Configfilelexer
+ */
+ private $lex;
+
+ /**
+ * internal error flag
+ *
+ * @var bool
+ */
+ private $internalError = false;
+
+ /**
+ * copy of config_overwrite property
+ *
+ * @var bool
+ */
+ private $configOverwrite = false;
+
+ /**
+ * copy of config_read_hidden property
+ *
+ * @var bool
+ */
+ private $configReadHidden = false;
+
+ private $_retvalue;
+
+ /**
+ * constructor
+ *
+ * @param Smarty_Internal_Configfilelexer $lex
+ * @param Smarty_Internal_Config_File_Compiler $compiler
+ */
+ public function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler)
+ {
+ $this->lex = $lex;
+ $this->smarty = $compiler->smarty;
+ $this->compiler = $compiler;
+ $this->configOverwrite = $this->smarty->config_overwrite;
+ $this->configReadHidden = $this->smarty->config_read_hidden;
+ }
+
+ public static function yy_destructor($yymajor, $yypminor)
+ {
+ switch ($yymajor) {
+ default:
+ break; /* If no destructor action specified: do nothing */
+ }
+ }
+
+ /**
+ * parse single quoted string
+ * remove outer quotes
+ * unescape inner quotes
+ *
+ * @param string $qstr
+ *
+ * @return string
+ */
+ private static function parse_single_quoted_string($qstr)
+ {
+ $escaped_string = substr($qstr, 1, strlen($qstr) - 2); //remove outer quotes
+ $ss = preg_split('/(\\\\.)/', $escaped_string, -1, PREG_SPLIT_DELIM_CAPTURE);
+ $str = '';
+ foreach ($ss as $s) {
+ if (strlen($s) === 2 && $s[ 0 ] === '\\') {
+ if (isset(self::$escapes_single[ $s[ 1 ] ])) {
+ $s = self::$escapes_single[ $s[ 1 ] ];
+ }
+ }
+ $str .= $s;
+ }
+ return $str;
+ } /* Index of top element in stack */
+ /**
+ * parse double quoted string
+ *
+ * @param string $qstr
+ *
+ * @return string
+ */
+ private static function parse_double_quoted_string($qstr)
+ {
+ $inner_str = substr($qstr, 1, strlen($qstr) - 2);
+ return stripcslashes($inner_str);
+ } /* Shifts left before out of the error */
+ /**
+ * parse triple quoted string
+ *
+ * @param string $qstr
+ *
+ * @return string
+ */
+ private static function parse_tripple_double_quoted_string($qstr)
+ {
+ return stripcslashes($qstr);
+ } /* The parser's stack */
+ 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 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 function yy_pop_parser_stack()
+ {
+ if (empty($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)
+ {
+ static $res3 = array();
+ static $res4 = array();
+ $state = $this->yystack[ $this->yyidx ]->stateno;
+ $expected = self::$yyExpectedTokens[ $state ];
+ if (isset($res3[ $state ][ $token ])) {
+ if ($res3[ $state ][ $token ]) {
+ return $expected;
+ }
+ } else {
+ if ($res3[ $state ][ $token ] = 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 ][ 1 ];
+ $nextstate = $this->yy_find_reduce_action(
+ $this->yystack[ $this->yyidx ]->stateno,
+ self::$yyRuleInfo[ $yyruleno ][ 0 ]
+ );
+ if (isset(self::$yyExpectedTokens[ $nextstate ])) {
+ $expected = array_merge($expected, self::$yyExpectedTokens[ $nextstate ]);
+ if (isset($res4[ $nextstate ][ $token ])) {
+ if ($res4[ $nextstate ][ $token ]) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return array_unique($expected);
+ }
+ } else {
+ if ($res4[ $nextstate ][ $token ] =
+ 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 TPC_yyStackEntry;
+ $x->stateno = $nextstate;
+ $x->major = self::$yyRuleInfo[ $yyruleno ][ 0 ];
+ $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)
+ {
+ static $res = array();
+ static $res2 = array();
+ if ($token === 0) {
+ return true; // 0 is not part of this
+ }
+ $state = $this->yystack[ $this->yyidx ]->stateno;
+ if (isset($res[ $state ][ $token ])) {
+ if ($res[ $state ][ $token ]) {
+ return true;
+ }
+ } else {
+ if ($res[ $state ][ $token ] = 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 ][ 1 ];
+ $nextstate = $this->yy_find_reduce_action(
+ $this->yystack[ $this->yyidx ]->stateno,
+ self::$yyRuleInfo[ $yyruleno ][ 0 ]
+ );
+ if (isset($res2[ $nextstate ][ $token ])) {
+ if ($res2[ $nextstate ][ $token ]) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return true;
+ }
+ } else {
+ if ($res2[ $nextstate ][ $token ] =
+ (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 TPC_yyStackEntry;
+ $x->stateno = $nextstate;
+ $x->major = self::$yyRuleInfo[ $yyruleno ][ 0 ];
+ $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 239 "../smarty/lexer/smarty_internal_configfileparser.y"
+ $this->internalError = true;
+ $this->compiler->trigger_config_file_error('Stack overflow in configfile parser');
+ return;
+ }
+ $yytos = new TPC_yyStackEntry;
+ $yytos->stateno = $yyNewState;
+ $yytos->major = $yyMajor;
+ $yytos->minor = $yypMinor;
+ $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 function yy_r0()
+ {
+ $this->_retvalue = null;
+ }
+
+ public function yy_r1()
+ {
+ $this->add_global_vars($this->yystack[ $this->yyidx + 0 ]->minor);
+ $this->_retvalue = null;
+ }
+
+ public function yy_r4()
+ {
+ $this->add_section_vars($this->yystack[ $this->yyidx + -3 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor);
+ $this->_retvalue = null;
+ }
+
+ // line 245 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_r5()
+ {
+ if ($this->configReadHidden) {
+ $this->add_section_vars(
+ $this->yystack[ $this->yyidx + -3 ]->minor,
+ $this->yystack[ $this->yyidx + 0 ]->minor
+ );
+ }
+ $this->_retvalue = null;
+ }
+
+ // line 250 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_r6()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor;
+ }
+
+ // line 264 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_r7()
+ {
+ $this->_retvalue =
+ array_merge($this->yystack[ $this->yyidx + -1 ]->minor, array($this->yystack[ $this->yyidx + 0 ]->minor));
+ }
+
+ // line 269 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_r8()
+ {
+ $this->_retvalue = array();
+ }
+
+ // line 277 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_r9()
+ {
+ $this->_retvalue =
+ array(
+ 'key' => $this->yystack[ $this->yyidx + -2 ]->minor,
+ 'value' => $this->yystack[ $this->yyidx + 0 ]->minor
+ );
+ }
+
+ // line 281 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_r10()
+ {
+ $this->_retvalue = (float)$this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 285 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_r11()
+ {
+ $this->_retvalue = (int)$this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 291 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_r12()
+ {
+ $this->_retvalue = $this->parse_bool($this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ // line 296 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_r13()
+ {
+ $this->_retvalue = self::parse_single_quoted_string($this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ // line 300 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_r14()
+ {
+ $this->_retvalue = self::parse_double_quoted_string($this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ // line 304 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_r15()
+ {
+ $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[ $this->yyidx + -1 ]->minor);
+ }
+
+ // line 308 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_r16()
+ {
+ $this->_retvalue = '';
+ }
+
+ // line 312 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_r17()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 316 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_reduce($yyruleno)
+ {
+ 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 (isset(self::$yyReduceMap[ $yyruleno ])) {
+ // call the action
+ $this->_retvalue = null;
+ $this->{'yy_r' . self::$yyReduceMap[ $yyruleno ]}();
+ $yy_lefthand_side = $this->_retvalue;
+ }
+ $yygoto = self::$yyRuleInfo[ $yyruleno ][ 0 ];
+ $yysize = self::$yyRuleInfo[ $yyruleno ][ 1 ];
+ $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 TPC_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();
+ }
+ }
+
+ // line 320 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_parse_failed()
+ {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
+ }
+ while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+ }
+
+ // line 324 "../smarty/lexer/smarty_internal_configfileparser.y"
+ public function yy_syntax_error($yymajor, $TOKEN)
+ {
+ // line 232 "../smarty/lexer/smarty_internal_configfileparser.y"
+ $this->internalError = true;
+ $this->yymajor = $yymajor;
+ $this->compiler->trigger_config_file_error();
+ }
+
+ public function yy_accept()
+ {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
+ }
+ while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+ // line 225 "../smarty/lexer/smarty_internal_configfileparser.y"
+ $this->successful = !$this->internalError;
+ $this->internalError = false;
+ $this->retvalue = $this->_retvalue;
+ }
+
+ 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 TPC_yyStackEntry;
+ $x->stateno = 0;
+ $x->major = 0;
+ $this->yystack = array();
+ $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);
+ }
+
+ /**
+ * parse optional boolean keywords
+ *
+ * @param string $str
+ *
+ * @return bool
+ */
+ private function parse_bool($str)
+ {
+ $str = strtolower($str);
+ if (in_array($str, array('on', 'yes', 'true'))) {
+ $res = true;
+ } else {
+ $res = false;
+ }
+ return $res;
+ }
+
+ /**
+ * set a config variable in target array
+ *
+ * @param array $var
+ * @param array $target_array
+ */
+ private function set_var(array $var, array &$target_array)
+ {
+ $key = $var[ 'key' ];
+ $value = $var[ 'value' ];
+ if ($this->configOverwrite || !isset($target_array[ 'vars' ][ $key ])) {
+ $target_array[ 'vars' ][ $key ] = $value;
+ } else {
+ settype($target_array[ 'vars' ][ $key ], 'array');
+ $target_array[ 'vars' ][ $key ][] = $value;
+ }
+ }
+
+ /**
+ * add config variable to global vars
+ *
+ * @param array $vars
+ */
+ private function add_global_vars(array $vars)
+ {
+ if (!isset($this->compiler->config_data[ 'vars' ])) {
+ $this->compiler->config_data[ 'vars' ] = array();
+ }
+ foreach ($vars as $var) {
+ $this->set_var($var, $this->compiler->config_data);
+ }
+ }
+
+ /**
+ * add config variable to section
+ *
+ * @param string $section_name
+ * @param array $vars
+ */
+ private function add_section_vars($section_name, array $vars)
+ {
+ if (!isset($this->compiler->config_data[ 'sections' ][ $section_name ][ 'vars' ])) {
+ $this->compiler->config_data[ 'sections' ][ $section_name ][ 'vars' ] = array();
+ }
+ foreach ($vars as $var) {
+ $this->set_var($var, $this->compiler->config_data[ 'sections' ][ $section_name ]);
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_data.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_data.php
new file mode 100644
index 0000000..98e3e57
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_data.php
@@ -0,0 +1,292 @@
+ext = new Smarty_Internal_Extension_Handler();
+ $this->ext->objType = $this->_objType;
+ }
+
+ /**
+ * assigns a Smarty variable
+ *
+ * @param array|string $tpl_var the template variable name(s)
+ * @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 assign($tpl_var, $value = null, $nocache = false)
+ {
+ if (is_array($tpl_var)) {
+ foreach ($tpl_var as $_key => $_val) {
+ $this->assign($_key, $_val, $nocache);
+ }
+ } else {
+ if ($tpl_var !== '') {
+ if ($this->_objType === 2) {
+ /**
+ *
+ *
+ * @var Smarty_Internal_Template $this
+ */
+ $this->_assignInScope($tpl_var, $value, $nocache);
+ } else {
+ $this->tpl_vars[ $tpl_var ] = new Smarty_Variable($value, $nocache);
+ }
+ }
+ }
+ return $this;
+ }
+
+ /**
+ * appends values to template variables
+ *
+ * @api Smarty::append()
+ * @link http://www.smarty.net/docs/en/api.append.tpl
+ *
+ * @param array|string $tpl_var the template variable name(s)
+ * @param mixed $value the value to append
+ * @param bool $merge flag if array elements shall be merged
+ * @param bool $nocache if true any output of this variable will
+ * be not cached
+ *
+ * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
+ */
+ public function append($tpl_var, $value = null, $merge = false, $nocache = false)
+ {
+ return $this->ext->append->append($this, $tpl_var, $value, $merge, $nocache);
+ }
+
+ /**
+ * 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|\Smarty_Internal_Template|\Smarty
+ */
+ public function assignGlobal($varName, $value = null, $nocache = false)
+ {
+ return $this->ext->assignGlobal->assignGlobal($this, $varName, $value, $nocache);
+ }
+
+ /**
+ * 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|\Smarty_Internal_Template|\Smarty
+ */
+ public function appendByRef($tpl_var, &$value, $merge = false)
+ {
+ return $this->ext->appendByRef->appendByRef($this, $tpl_var, $value, $merge);
+ }
+
+ /**
+ * 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|\Smarty_Internal_Template|\Smarty
+ */
+ public function assignByRef($tpl_var, &$value, $nocache = false)
+ {
+ return $this->ext->assignByRef->assignByRef($this, $tpl_var, $value, $nocache);
+ }
+
+ /**
+ * Returns a single or all template variables
+ *
+ * @api Smarty::getTemplateVars()
+ * @link http://www.smarty.net/docs/en/api.get.template.vars.tpl
+ *
+ * @param string $varName variable name or null
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $_ptr optional pointer to data object
+ * @param bool $searchParents include parent templates?
+ *
+ * @return mixed variable value or or array of variables
+ */
+ public function getTemplateVars($varName = null, Smarty_Internal_Data $_ptr = null, $searchParents = true)
+ {
+ return $this->ext->getTemplateVars->getTemplateVars($this, $varName, $_ptr, $searchParents);
+ }
+
+ /**
+ * gets the object of a Smarty variable
+ *
+ * @param string $variable the name of the Smarty variable
+ * @param Smarty_Internal_Data $_ptr optional pointer to data object
+ * @param boolean $searchParents search also in parent data
+ * @param bool $error_enable
+ *
+ * @return Smarty_Variable|Smarty_Undefined_Variable the object of the variable
+ * @deprecated since 3.1.28 please use Smarty_Internal_Data::getTemplateVars() instead.
+ */
+ public function getVariable(
+ $variable = null,
+ Smarty_Internal_Data $_ptr = null,
+ $searchParents = true,
+ $error_enable = true
+ ) {
+ return $this->ext->getTemplateVars->_getVariable($this, $variable, $_ptr, $searchParents, $error_enable);
+ }
+
+ /**
+ * Follow the parent chain an merge template and config variables
+ *
+ * @param \Smarty_Internal_Data|null $data
+ */
+ public function _mergeVars(Smarty_Internal_Data $data = null)
+ {
+ if (isset($data)) {
+ if (!empty($this->tpl_vars)) {
+ $data->tpl_vars = array_merge($this->tpl_vars, $data->tpl_vars);
+ }
+ if (!empty($this->config_vars)) {
+ $data->config_vars = array_merge($this->config_vars, $data->config_vars);
+ }
+ } else {
+ $data = $this;
+ }
+ if (isset($this->parent)) {
+ $this->parent->_mergeVars($data);
+ }
+ }
+
+ /**
+ * Return true if this instance is a Data obj
+ *
+ * @return bool
+ */
+ public function _isDataObj()
+ {
+ return $this->_objType === 4;
+ }
+
+ /**
+ * Return true if this instance is a template obj
+ *
+ * @return bool
+ */
+ public function _isTplObj()
+ {
+ return $this->_objType === 2;
+ }
+
+ /**
+ * Return true if this instance is a Smarty obj
+ *
+ * @return bool
+ */
+ public function _isSmartyObj()
+ {
+ return $this->_objType === 1;
+ }
+
+ /**
+ * Get Smarty object
+ *
+ * @return Smarty
+ */
+ public function _getSmartyObj()
+ {
+ return $this->smarty;
+ }
+
+ /**
+ * Handle unknown class methods
+ *
+ * @param string $name unknown method-name
+ * @param array $args argument array
+ *
+ * @return mixed
+ */
+ public function __call($name, $args)
+ {
+ return $this->ext->_callExternalMethod($this, $name, $args);
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_debug.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_debug.php
new file mode 100644
index 0000000..24b233e
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_debug.php
@@ -0,0 +1,425 @@
+_isSubTpl()) {
+ $this->index++;
+ $this->offset++;
+ $this->template_data[ $this->index ] = null;
+ }
+ $key = $this->get_key($template);
+ $this->template_data[ $this->index ][ $key ][ 'start_template_time' ] = microtime(true);
+ }
+
+ /**
+ * End logging of cache time
+ *
+ * @param \Smarty_Internal_Template $template cached template
+ */
+ public function end_template(Smarty_Internal_Template $template)
+ {
+ $key = $this->get_key($template);
+ $this->template_data[ $this->index ][ $key ][ 'total_time' ] +=
+ microtime(true) - $this->template_data[ $this->index ][ $key ][ 'start_template_time' ];
+ //$this->template_data[$this->index][$key]['properties'] = $template->properties;
+ }
+
+ /**
+ * Start logging of compile time
+ *
+ * @param \Smarty_Internal_Template $template
+ */
+ public function start_compile(Smarty_Internal_Template $template)
+ {
+ static $_is_stringy = array('string' => true, 'eval' => true);
+ if (!empty($template->compiler->trace_uid)) {
+ $key = $template->compiler->trace_uid;
+ if (!isset($this->template_data[ $this->index ][ $key ])) {
+ if (isset($_is_stringy[ $template->source->type ])) {
+ $this->template_data[ $this->index ][ $key ][ 'name' ] =
+ '\'' . substr($template->source->name, 0, 25) . '...\'';
+ } else {
+ $this->template_data[ $this->index ][ $key ][ 'name' ] = $template->source->filepath;
+ }
+ $this->template_data[ $this->index ][ $key ][ 'compile_time' ] = 0;
+ $this->template_data[ $this->index ][ $key ][ 'render_time' ] = 0;
+ $this->template_data[ $this->index ][ $key ][ 'cache_time' ] = 0;
+ }
+ } else {
+ if (isset($this->ignore_uid[ $template->source->uid ])) {
+ return;
+ }
+ $key = $this->get_key($template);
+ }
+ $this->template_data[ $this->index ][ $key ][ 'start_time' ] = microtime(true);
+ }
+
+ /**
+ * End logging of compile time
+ *
+ * @param \Smarty_Internal_Template $template
+ */
+ public function end_compile(Smarty_Internal_Template $template)
+ {
+ if (!empty($template->compiler->trace_uid)) {
+ $key = $template->compiler->trace_uid;
+ } else {
+ if (isset($this->ignore_uid[ $template->source->uid ])) {
+ return;
+ }
+ $key = $this->get_key($template);
+ }
+ $this->template_data[ $this->index ][ $key ][ 'compile_time' ] +=
+ microtime(true) - $this->template_data[ $this->index ][ $key ][ 'start_time' ];
+ }
+
+ /**
+ * Start logging of render time
+ *
+ * @param \Smarty_Internal_Template $template
+ */
+ public function start_render(Smarty_Internal_Template $template)
+ {
+ $key = $this->get_key($template);
+ $this->template_data[ $this->index ][ $key ][ 'start_time' ] = microtime(true);
+ }
+
+ /**
+ * End logging of compile time
+ *
+ * @param \Smarty_Internal_Template $template
+ */
+ public function end_render(Smarty_Internal_Template $template)
+ {
+ $key = $this->get_key($template);
+ $this->template_data[ $this->index ][ $key ][ 'render_time' ] +=
+ microtime(true) - $this->template_data[ $this->index ][ $key ][ 'start_time' ];
+ }
+
+ /**
+ * Start logging of cache time
+ *
+ * @param \Smarty_Internal_Template $template cached template
+ */
+ public function start_cache(Smarty_Internal_Template $template)
+ {
+ $key = $this->get_key($template);
+ $this->template_data[ $this->index ][ $key ][ 'start_time' ] = microtime(true);
+ }
+
+ /**
+ * End logging of cache time
+ *
+ * @param \Smarty_Internal_Template $template cached template
+ */
+ public function end_cache(Smarty_Internal_Template $template)
+ {
+ $key = $this->get_key($template);
+ $this->template_data[ $this->index ][ $key ][ 'cache_time' ] +=
+ microtime(true) - $this->template_data[ $this->index ][ $key ][ 'start_time' ];
+ }
+
+ /**
+ * Register template object
+ *
+ * @param \Smarty_Internal_Template $template cached template
+ */
+ public function register_template(Smarty_Internal_Template $template)
+ {
+ }
+
+ /**
+ * Register data object
+ *
+ * @param \Smarty_Data $data data object
+ */
+ public static function register_data(Smarty_Data $data)
+ {
+ }
+
+ /**
+ * Opens a window for the Smarty Debugging Console and display the data
+ *
+ * @param Smarty_Internal_Template|Smarty $obj object to debug
+ * @param bool $full
+ *
+ * @throws \Exception
+ * @throws \SmartyException
+ */
+ public function display_debug($obj, $full = false)
+ {
+ if (!$full) {
+ $this->offset++;
+ $savedIndex = $this->index;
+ $this->index = 9999;
+ }
+ $smarty = $obj->_getSmartyObj();
+ // create fresh instance of smarty for displaying the debug console
+ // to avoid problems if the application did overload the Smarty class
+ $debObj = new Smarty();
+ // copy the working dirs from application
+ $debObj->setCompileDir($smarty->getCompileDir());
+ // init properties by hand as user may have edited the original Smarty class
+ $debObj->setPluginsDir(is_dir(dirname(__FILE__) . '/../plugins') ? dirname(__FILE__) .
+ '/../plugins' : $smarty->getPluginsDir());
+ $debObj->force_compile = false;
+ $debObj->compile_check = Smarty::COMPILECHECK_ON;
+ $debObj->left_delimiter = '{';
+ $debObj->right_delimiter = '}';
+ $debObj->security_policy = null;
+ $debObj->debugging = false;
+ $debObj->debugging_ctrl = 'NONE';
+ $debObj->error_reporting = E_ALL & ~E_NOTICE;
+ $debObj->debug_tpl =
+ isset($smarty->debug_tpl) ? $smarty->debug_tpl : 'file:' . dirname(__FILE__) . '/../debug.tpl';
+ $debObj->registered_plugins = array();
+ $debObj->registered_resources = array();
+ $debObj->registered_filters = array();
+ $debObj->autoload_filters = array();
+ $debObj->default_modifiers = array();
+ $debObj->escape_html = true;
+ $debObj->caching = Smarty::CACHING_OFF;
+ $debObj->compile_id = null;
+ $debObj->cache_id = null;
+ // prepare information of assigned variables
+ $ptr = $this->get_debug_vars($obj);
+ $_assigned_vars = $ptr->tpl_vars;
+ ksort($_assigned_vars);
+ $_config_vars = $ptr->config_vars;
+ ksort($_config_vars);
+ $debugging = $smarty->debugging;
+ $_template = new Smarty_Internal_Template($debObj->debug_tpl, $debObj);
+ if ($obj->_isTplObj()) {
+ $_template->assign('template_name', $obj->source->type . ':' . $obj->source->name);
+ }
+ if ($obj->_objType === 1 || $full) {
+ $_template->assign('template_data', $this->template_data[ $this->index ]);
+ } 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);
+ $_template->assign('display_mode', $debugging === 2 || !$full);
+ $_template->assign('offset', $this->offset * 50);
+ echo $_template->fetch();
+ if (isset($full)) {
+ $this->index--;
+ }
+ if (!$full) {
+ $this->index = $savedIndex;
+ }
+ }
+
+ /**
+ * Recursively gets variables from all template/data scopes
+ *
+ * @param Smarty_Internal_Template|Smarty_Data $obj object to debug
+ *
+ * @return StdClass
+ */
+ public function get_debug_vars($obj)
+ {
+ $config_vars = array();
+ foreach ($obj->config_vars as $key => $var) {
+ $config_vars[ $key ][ 'value' ] = $var;
+ if ($obj->_isTplObj()) {
+ $config_vars[ $key ][ 'scope' ] = $obj->source->type . ':' . $obj->source->name;
+ } elseif ($obj->_isDataObj()) {
+ $tpl_vars[ $key ][ 'scope' ] = $obj->dataObjectName;
+ } else {
+ $config_vars[ $key ][ 'scope' ] = 'Smarty object';
+ }
+ }
+ $tpl_vars = array();
+ foreach ($obj->tpl_vars as $key => $var) {
+ foreach ($var as $varkey => $varvalue) {
+ if ($varkey === 'value') {
+ $tpl_vars[ $key ][ $varkey ] = $varvalue;
+ } else {
+ if ($varkey === 'nocache') {
+ if ($varvalue === true) {
+ $tpl_vars[ $key ][ $varkey ] = $varvalue;
+ }
+ } else {
+ if ($varkey !== 'scope' || $varvalue !== 0) {
+ $tpl_vars[ $key ][ 'attributes' ][ $varkey ] = $varvalue;
+ }
+ }
+ }
+ }
+ if ($obj->_isTplObj()) {
+ $tpl_vars[ $key ][ 'scope' ] = $obj->source->type . ':' . $obj->source->name;
+ } elseif ($obj->_isDataObj()) {
+ $tpl_vars[ $key ][ 'scope' ] = $obj->dataObjectName;
+ } else {
+ $tpl_vars[ $key ][ 'scope' ] = 'Smarty object';
+ }
+ }
+ if (isset($obj->parent)) {
+ $parent = $this->get_debug_vars($obj->parent);
+ foreach ($parent->tpl_vars as $name => $pvar) {
+ if (isset($tpl_vars[ $name ]) && $tpl_vars[ $name ][ 'value' ] === $pvar[ 'value' ]) {
+ $tpl_vars[ $name ][ 'scope' ] = $pvar[ 'scope' ];
+ }
+ }
+ $tpl_vars = array_merge($parent->tpl_vars, $tpl_vars);
+ foreach ($parent->config_vars as $name => $pvar) {
+ if (isset($config_vars[ $name ]) && $config_vars[ $name ][ 'value' ] === $pvar[ 'value' ]) {
+ $config_vars[ $name ][ 'scope' ] = $pvar[ 'scope' ];
+ }
+ }
+ $config_vars = array_merge($parent->config_vars, $config_vars);
+ } else {
+ foreach (Smarty::$global_tpl_vars as $key => $var) {
+ if (!array_key_exists($key, $tpl_vars)) {
+ foreach ($var as $varkey => $varvalue) {
+ if ($varkey === 'value') {
+ $tpl_vars[ $key ][ $varkey ] = $varvalue;
+ } else {
+ if ($varkey === 'nocache') {
+ if ($varvalue === true) {
+ $tpl_vars[ $key ][ $varkey ] = $varvalue;
+ }
+ } else {
+ if ($varkey !== 'scope' || $varvalue !== 0) {
+ $tpl_vars[ $key ][ 'attributes' ][ $varkey ] = $varvalue;
+ }
+ }
+ }
+ }
+ $tpl_vars[ $key ][ 'scope' ] = 'Global';
+ }
+ }
+ }
+ return (object)array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars);
+ }
+
+ /**
+ * Return key into $template_data for template
+ *
+ * @param \Smarty_Internal_Template $template template object
+ *
+ * @return string key into $template_data
+ */
+ private function get_key(Smarty_Internal_Template $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($this->template_data[ $this->index ][ $key ])) {
+ return $key;
+ } else {
+ if (isset($_is_stringy[ $template->source->type ])) {
+ $this->template_data[ $this->index ][ $key ][ 'name' ] =
+ '\'' . substr($template->source->name, 0, 25) . '...\'';
+ } else {
+ $this->template_data[ $this->index ][ $key ][ 'name' ] = $template->source->filepath;
+ }
+ $this->template_data[ $this->index ][ $key ][ 'compile_time' ] = 0;
+ $this->template_data[ $this->index ][ $key ][ 'render_time' ] = 0;
+ $this->template_data[ $this->index ][ $key ][ 'cache_time' ] = 0;
+ $this->template_data[ $this->index ][ $key ][ 'total_time' ] = 0;
+ return $key;
+ }
+ }
+
+ /**
+ * Ignore template
+ *
+ * @param \Smarty_Internal_Template $template
+ */
+ public function ignore(Smarty_Internal_Template $template)
+ {
+ // calculate Uid if not already done
+ if ($template->source->uid === '') {
+ $template->source->filepath;
+ }
+ $this->ignore_uid[ $template->source->uid ] = true;
+ }
+
+ /**
+ * handle 'URL' debugging mode
+ *
+ * @param Smarty $smarty
+ */
+ public function debugUrl(Smarty $smarty)
+ {
+ if (isset($_SERVER[ 'QUERY_STRING' ])) {
+ $_query_string = $_SERVER[ 'QUERY_STRING' ];
+ } else {
+ $_query_string = '';
+ }
+ if (false !== strpos($_query_string, $smarty->smarty_debug_id)) {
+ if (false !== strpos($_query_string, $smarty->smarty_debug_id . '=on')) {
+ // enable debugging for this browser session
+ setcookie('SMARTY_DEBUG', true);
+ $smarty->debugging = true;
+ } elseif (false !== strpos($_query_string, $smarty->smarty_debug_id . '=off')) {
+ // disable debugging for this browser session
+ setcookie('SMARTY_DEBUG', false);
+ $smarty->debugging = false;
+ } else {
+ // enable debugging for this page
+ $smarty->debugging = true;
+ }
+ } else {
+ if (isset($_COOKIE[ 'SMARTY_DEBUG' ])) {
+ $smarty->debugging = true;
+ }
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_errorhandler.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_errorhandler.php
new file mode 100644
index 0000000..56dca18
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_errorhandler.php
@@ -0,0 +1,113 @@
+ $smarty_dir, 'length' => strlen($smarty_dir),);
+ }
+ }
+ // walk the muted directories and test against $errfile
+ foreach (self::$mutedDirectories 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(self::$mutedDirectories[ $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 (self::$previousErrorHandler) {
+ return call_user_func(
+ self::$previousErrorHandler,
+ $errno,
+ $errstr,
+ $errfile,
+ $errline,
+ $errcontext
+ );
+ } else {
+ return false;
+ }
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_extension_handler.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_extension_handler.php
new file mode 100644
index 0000000..b076155
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_extension_handler.php
@@ -0,0 +1,197 @@
+ 0, 'DefaultModifiers' => 0, 'ConfigVars' => 0,
+ 'DebugTemplate' => 0, 'RegisteredObject' => 0, 'StreamVariable' => 0,
+ 'TemplateVars' => 0, 'Literals' => 'Literals',
+ );//
+
+ private $resolvedProperties = array();
+
+ /**
+ * Call external Method
+ *
+ * @param \Smarty_Internal_Data $data
+ * @param string $name external method names
+ * @param array $args argument array
+ *
+ * @return mixed
+ */
+ public function _callExternalMethod(Smarty_Internal_Data $data, $name, $args)
+ {
+ /* @var Smarty $data ->smarty */
+ $smarty = isset($data->smarty) ? $data->smarty : $data;
+ if (!isset($smarty->ext->$name)) {
+ if (preg_match('/^((set|get)|(.*?))([A-Z].*)$/', $name, $match)) {
+ $basename = $this->upperCase($match[ 4 ]);
+ if (!isset($smarty->ext->$basename) && isset($this->_property_info[ $basename ])
+ && is_string($this->_property_info[ $basename ])
+ ) {
+ $class = 'Smarty_Internal_Method_' . $this->_property_info[ $basename ];
+ if (class_exists($class)) {
+ $classObj = new $class();
+ $methodes = get_class_methods($classObj);
+ foreach ($methodes as $method) {
+ $smarty->ext->$method = $classObj;
+ }
+ }
+ }
+ if (!empty($match[ 2 ]) && !isset($smarty->ext->$name)) {
+ $class = 'Smarty_Internal_Method_' . $this->upperCase($name);
+ if (!class_exists($class)) {
+ $objType = $data->_objType;
+ $propertyType = false;
+ if (!isset($this->resolvedProperties[ $match[ 0 ] ][ $objType ])) {
+ $property = isset($this->resolvedProperties[ 'property' ][ $basename ]) ?
+ $this->resolvedProperties[ 'property' ][ $basename ] :
+ $property = $this->resolvedProperties[ 'property' ][ $basename ] = strtolower(
+ join(
+ '_',
+ preg_split(
+ '/([A-Z][^A-Z]*)/',
+ $basename,
+ -1,
+ PREG_SPLIT_NO_EMPTY |
+ PREG_SPLIT_DELIM_CAPTURE
+ )
+ )
+ );
+ if ($property !== false) {
+ if (property_exists($data, $property)) {
+ $propertyType = $this->resolvedProperties[ $match[ 0 ] ][ $objType ] = 1;
+ } elseif (property_exists($smarty, $property)) {
+ $propertyType = $this->resolvedProperties[ $match[ 0 ] ][ $objType ] = 2;
+ } else {
+ $this->resolvedProperties[ 'property' ][ $basename ] = $property = false;
+ }
+ }
+ } else {
+ $propertyType = $this->resolvedProperties[ $match[ 0 ] ][ $objType ];
+ $property = $this->resolvedProperties[ 'property' ][ $basename ];
+ }
+ if ($propertyType) {
+ $obj = $propertyType === 1 ? $data : $smarty;
+ if ($match[ 2 ] === 'get') {
+ return $obj->$property;
+ } elseif ($match[ 2 ] === 'set') {
+ return $obj->$property = $args[ 0 ];
+ }
+ }
+ }
+ }
+ }
+ }
+ $callback = array($smarty->ext->$name, $name);
+ array_unshift($args, $data);
+ if (isset($callback) && $callback[ 0 ]->objMap | $data->_objType) {
+ return call_user_func_array($callback, $args);
+ }
+ return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), $args);
+ }
+
+ /**
+ * Make first character of name parts upper case
+ *
+ * @param string $name
+ *
+ * @return string
+ */
+ public function upperCase($name)
+ {
+ $_name = explode('_', $name);
+ $_name = array_map('ucfirst', $_name);
+ return implode('_', $_name);
+ }
+
+ /**
+ * get extension object
+ *
+ * @param string $property_name property name
+ *
+ * @return mixed|Smarty_Template_Cached
+ */
+ public function __get($property_name)
+ {
+ // object properties of runtime template extensions will start with '_'
+ if ($property_name[ 0 ] === '_') {
+ $class = 'Smarty_Internal_Runtime' . $this->upperCase($property_name);
+ } else {
+ $class = 'Smarty_Internal_Method_' . $this->upperCase($property_name);
+ }
+ if (!class_exists($class)) {
+ return $this->$property_name = new Smarty_Internal_Undefined($class);
+ }
+ return $this->$property_name = new $class();
+ }
+
+ /**
+ * set extension property
+ *
+ * @param string $property_name property name
+ * @param mixed $value value
+ *
+ */
+ public function __set($property_name, $value)
+ {
+ $this->$property_name = $value;
+ }
+
+ /**
+ * Call error handler for undefined method
+ *
+ * @param string $name unknown method-name
+ * @param array $args argument array
+ *
+ * @return mixed
+ */
+ public function __call($name, $args)
+ {
+ return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), array($this));
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_addautoloadfilters.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_addautoloadfilters.php
new file mode 100644
index 0000000..a05f55a
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_addautoloadfilters.php
@@ -0,0 +1,53 @@
+_getSmartyObj();
+ if ($type !== null) {
+ $this->_checkFilterType($type);
+ if (!empty($smarty->autoload_filters[ $type ])) {
+ $smarty->autoload_filters[ $type ] = array_merge($smarty->autoload_filters[ $type ], (array)$filters);
+ } else {
+ $smarty->autoload_filters[ $type ] = (array)$filters;
+ }
+ } else {
+ foreach ((array)$filters as $type => $value) {
+ $this->_checkFilterType($type);
+ if (!empty($smarty->autoload_filters[ $type ])) {
+ $smarty->autoload_filters[ $type ] =
+ array_merge($smarty->autoload_filters[ $type ], (array)$value);
+ } else {
+ $smarty->autoload_filters[ $type ] = (array)$value;
+ }
+ }
+ }
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php
new file mode 100644
index 0000000..c3feb3d
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php
@@ -0,0 +1,42 @@
+_getSmartyObj();
+ if (is_array($modifiers)) {
+ $smarty->default_modifiers = array_merge($smarty->default_modifiers, $modifiers);
+ } else {
+ $smarty->default_modifiers[] = $modifiers;
+ }
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_append.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_append.php
new file mode 100644
index 0000000..881375e
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_append.php
@@ -0,0 +1,74 @@
+ $_val) {
+ if ($_key !== '') {
+ $this->append($data, $_key, $_val, $merge, $nocache);
+ }
+ }
+ } else {
+ if ($tpl_var !== '' && isset($value)) {
+ if (!isset($data->tpl_vars[ $tpl_var ])) {
+ $tpl_var_inst = $data->ext->getTemplateVars->_getVariable($data, $tpl_var, null, true, false);
+ if ($tpl_var_inst instanceof Smarty_Undefined_Variable) {
+ $data->tpl_vars[ $tpl_var ] = new Smarty_Variable(null, $nocache);
+ } else {
+ $data->tpl_vars[ $tpl_var ] = clone $tpl_var_inst;
+ }
+ }
+ if (!(is_array($data->tpl_vars[ $tpl_var ]->value)
+ || $data->tpl_vars[ $tpl_var ]->value instanceof ArrayAccess)
+ ) {
+ settype($data->tpl_vars[ $tpl_var ]->value, 'array');
+ }
+ if ($merge && is_array($value)) {
+ foreach ($value as $_mkey => $_mval) {
+ $data->tpl_vars[ $tpl_var ]->value[ $_mkey ] = $_mval;
+ }
+ } else {
+ $data->tpl_vars[ $tpl_var ]->value[] = $value;
+ }
+ }
+ if ($data->_isTplObj() && $data->scope) {
+ $data->ext->_updateScope->_updateScope($data, $tpl_var);
+ }
+ }
+ return $data;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_appendbyref.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_appendbyref.php
new file mode 100644
index 0000000..c959044
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_appendbyref.php
@@ -0,0 +1,49 @@
+tpl_vars[ $tpl_var ])) {
+ $data->tpl_vars[ $tpl_var ] = new Smarty_Variable();
+ }
+ if (!is_array($data->tpl_vars[ $tpl_var ]->value)) {
+ settype($data->tpl_vars[ $tpl_var ]->value, 'array');
+ }
+ if ($merge && is_array($value)) {
+ foreach ($value as $_key => $_val) {
+ $data->tpl_vars[ $tpl_var ]->value[ $_key ] = &$value[ $_key ];
+ }
+ } else {
+ $data->tpl_vars[ $tpl_var ]->value[] = &$value;
+ }
+ if ($data->_isTplObj() && $data->scope) {
+ $data->ext->_updateScope->_updateScope($data, $tpl_var);
+ }
+ }
+ return $data;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_assignbyref.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_assignbyref.php
new file mode 100644
index 0000000..fa705bb
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_assignbyref.php
@@ -0,0 +1,36 @@
+tpl_vars[ $tpl_var ] = new Smarty_Variable(null, $nocache);
+ $data->tpl_vars[ $tpl_var ]->value = &$value;
+ if ($data->_isTplObj() && $data->scope) {
+ $data->ext->_updateScope->_updateScope($data, $tpl_var);
+ }
+ }
+ return $data;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_assignglobal.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_assignglobal.php
new file mode 100644
index 0000000..08cfa46
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_assignglobal.php
@@ -0,0 +1,44 @@
+_isTplObj()) {
+ $ptr->tpl_vars[ $varName ] = clone Smarty::$global_tpl_vars[ $varName ];
+ $ptr = $ptr->parent;
+ }
+ }
+ return $data;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearallassign.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearallassign.php
new file mode 100644
index 0000000..29ff2ff
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearallassign.php
@@ -0,0 +1,36 @@
+tpl_vars = array();
+ return $data;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearallcache.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearallcache.php
new file mode 100644
index 0000000..30d55f7
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearallcache.php
@@ -0,0 +1,41 @@
+_clearTemplateCache();
+ // load cache resource and call clearAll
+ $_cache_resource = Smarty_CacheResource::load($smarty, $type);
+ return $_cache_resource->clearAll($smarty, $exp_time);
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearassign.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearassign.php
new file mode 100644
index 0000000..22bfa2d
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearassign.php
@@ -0,0 +1,43 @@
+tpl_vars[ $curr_var ]);
+ }
+ } else {
+ unset($data->tpl_vars[ $tpl_var ]);
+ }
+ return $data;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearcache.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearcache.php
new file mode 100644
index 0000000..a5dd4e2
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearcache.php
@@ -0,0 +1,50 @@
+_clearTemplateCache();
+ // load cache resource and call clear
+ $_cache_resource = Smarty_CacheResource::load($smarty, $type);
+ return $_cache_resource->clear($smarty, $template_name, $cache_id, $compile_id, $exp_time);
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php
new file mode 100644
index 0000000..bf49298
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php
@@ -0,0 +1,131 @@
+_clearTemplateCache();
+ $_compile_dir = $smarty->getCompileDir();
+ if ($_compile_dir === '/') { //We should never want to delete this!
+ return 0;
+ }
+ $_compile_id = isset($compile_id) ? preg_replace('![^\w]+!', '_', $compile_id) : null;
+ $_dir_sep = $smarty->use_sub_dirs ? DIRECTORY_SEPARATOR : '^';
+ if (isset($resource_name)) {
+ $_save_stat = $smarty->caching;
+ $smarty->caching = Smarty::CACHING_OFF;
+ /* @var Smarty_Internal_Template $tpl */
+ $tpl = $smarty->createTemplate($resource_name);
+ $smarty->caching = $_save_stat;
+ if (!$tpl->source->handler->uncompiled && !$tpl->source->handler->recompiled && $tpl->source->exists) {
+ $_resource_part_1 = basename(str_replace('^', DIRECTORY_SEPARATOR, $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 = $_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) === '.') {
+ continue;
+ }
+ $_filepath = (string)$_file;
+ if ($_file->isDir()) {
+ if (!$_compile->isDot()) {
+ // delete folder if empty
+ @rmdir($_file->getPathname());
+ }
+ } else {
+ // delete only php files
+ if (substr($_filepath, -4) !== '.php') {
+ continue;
+ }
+ $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 (is_file($_filepath) && time() - filemtime($_filepath) >= $exp_time) {
+ $unlink = true;
+ }
+ } else {
+ $unlink = true;
+ }
+ }
+ if ($unlink && is_file($_filepath) && @unlink($_filepath)) {
+ $_count++;
+ if (function_exists('opcache_invalidate')
+ && (!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api')) < 1)
+ ) {
+ opcache_invalidate($_filepath, true);
+ } elseif (function_exists('apc_delete_file')) {
+ apc_delete_file($_filepath);
+ }
+ }
+ }
+ }
+ return $_count;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearconfig.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearconfig.php
new file mode 100644
index 0000000..15bf492
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearconfig.php
@@ -0,0 +1,41 @@
+config_vars[ $name ]);
+ } else {
+ $data->config_vars = array();
+ }
+ return $data;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_compileallconfig.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_compileallconfig.php
new file mode 100644
index 0000000..3934ca0
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_compileallconfig.php
@@ -0,0 +1,36 @@
+compileAll($smarty, $extension, $force_compile, $time_limit, $max_errors, true);
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_compilealltemplates.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_compilealltemplates.php
new file mode 100644
index 0000000..5c046da
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_compilealltemplates.php
@@ -0,0 +1,130 @@
+compileAll($smarty, $extension, $force_compile, $time_limit, $max_errors);
+ }
+
+ /**
+ * Compile all template or config files
+ *
+ * @param \Smarty $smarty
+ * @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 bool $isConfig flag true if called for config files
+ *
+ * @return int number of template files compiled
+ */
+ protected function compileAll(
+ Smarty $smarty,
+ $extension,
+ $force_compile,
+ $time_limit,
+ $max_errors,
+ $isConfig = false
+ ) {
+ // switch off time limit
+ if (function_exists('set_time_limit')) {
+ @set_time_limit($time_limit);
+ }
+ $_count = 0;
+ $_error_count = 0;
+ $sourceDir = $isConfig ? $smarty->getConfigDir() : $smarty->getTemplateDir();
+ // loop over array of source directories
+ foreach ($sourceDir as $_dir) {
+ $_dir_1 = new RecursiveDirectoryIterator(
+ $_dir,
+ defined('FilesystemIterator::FOLLOW_SYMLINKS') ?
+ FilesystemIterator::FOLLOW_SYMLINKS : 0
+ );
+ $_dir_2 = new RecursiveIteratorIterator($_dir_1);
+ foreach ($_dir_2 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)) {
+ $_file = substr($_fileinfo->getPath(), strlen($_dir)) . DIRECTORY_SEPARATOR . $_file;
+ }
+ echo "\n ", $_dir, '---', $_file;
+ flush();
+ $_start_time = microtime(true);
+ $_smarty = clone $smarty;
+ //
+ $_smarty->_cache = array();
+ $_smarty->ext = new Smarty_Internal_Extension_Handler();
+ $_smarty->ext->objType = $_smarty->_objType;
+ $_smarty->force_compile = $force_compile;
+ try {
+ /* @var Smarty_Internal_Template $_tpl */
+ $_tpl = new $smarty->template_class($_file, $_smarty);
+ $_tpl->caching = Smarty::CACHING_OFF;
+ $_tpl->source =
+ $isConfig ? Smarty_Template_Config::load($_tpl) : Smarty_Template_Source::load($_tpl);
+ 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 "\n ------>Error: ", $e->getMessage(), " \n";
+ $_error_count++;
+ }
+ // free memory
+ unset($_tpl);
+ $_smarty->_clearTemplateCache();
+ if ($max_errors !== null && $_error_count === $max_errors) {
+ echo "\n too many errors\n";
+ exit(1);
+ }
+ }
+ }
+ echo "\n ";
+ return $_count;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_configload.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_configload.php
new file mode 100644
index 0000000..2e62548
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_configload.php
@@ -0,0 +1,182 @@
+_loadConfigFile($data, $config_file, $sections, null);
+ return $data;
+ }
+
+ /**
+ * load a config file, optionally load just selected sections
+ *
+ * @api Smarty::configLoad()
+ * @link http://www.smarty.net/docs/en/api.config.load.tpl
+ *
+ * @param \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template $data
+ * @param string $config_file filename
+ * @param mixed $sections array of section names, single
+ * section or null
+ * @param int $scope scope into which config variables
+ * shall be loaded
+ *
+ * @throws \Exception
+ */
+ public function _loadConfigFile(Smarty_Internal_Data $data, $config_file, $sections = null, $scope = 0)
+ {
+ /* @var \Smarty $smarty */
+ $smarty = $data->_getSmartyObj();
+ /* @var \Smarty_Internal_Template $confObj */
+ $confObj = new Smarty_Internal_Template($config_file, $smarty, $data, null, null, null, null, true);
+ $confObj->caching = Smarty::CACHING_OFF;
+ $confObj->source->config_sections = $sections;
+ $confObj->source->scope = $scope;
+ $confObj->compiled = Smarty_Template_Compiled::load($confObj);
+ $confObj->compiled->render($confObj);
+ if ($data->_isTplObj()) {
+ $data->compiled->file_dependency[ $confObj->source->uid ] =
+ array($confObj->source->filepath, $confObj->source->getTimeStamp(), $confObj->source->type);
+ }
+ }
+
+ /**
+ * load config variables into template object
+ *
+ * @param \Smarty_Internal_Template $tpl
+ * @param array $new_config_vars
+ */
+ public function _loadConfigVars(Smarty_Internal_Template $tpl, $new_config_vars)
+ {
+ $this->_assignConfigVars($tpl->parent->config_vars, $tpl, $new_config_vars);
+ $tagScope = $tpl->source->scope;
+ if ($tagScope >= 0) {
+ if ($tagScope === Smarty::SCOPE_LOCAL) {
+ $this->_updateVarStack($tpl, $new_config_vars);
+ $tagScope = 0;
+ if (!$tpl->scope) {
+ return;
+ }
+ }
+ if ($tpl->parent->_isTplObj() && ($tagScope || $tpl->parent->scope)) {
+ $mergedScope = $tagScope | $tpl->scope;
+ if ($mergedScope) {
+ // update scopes
+ /* @var \Smarty_Internal_Template|\Smarty|\Smarty_Internal_Data $ptr */
+ foreach ($tpl->smarty->ext->_updateScope->_getAffectedScopes($tpl->parent, $mergedScope) as $ptr) {
+ $this->_assignConfigVars($ptr->config_vars, $tpl, $new_config_vars);
+ if ($tagScope && $ptr->_isTplObj() && isset($tpl->_cache[ 'varStack' ])) {
+ $this->_updateVarStack($tpl, $new_config_vars);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Assign all config variables in given scope
+ *
+ * @param array $config_vars config variables in scope
+ * @param \Smarty_Internal_Template $tpl
+ * @param array $new_config_vars loaded config variables
+ */
+ public function _assignConfigVars(&$config_vars, Smarty_Internal_Template $tpl, $new_config_vars)
+ {
+ // copy global config vars
+ foreach ($new_config_vars[ 'vars' ] as $variable => $value) {
+ if ($tpl->smarty->config_overwrite || !isset($config_vars[ $variable ])) {
+ $config_vars[ $variable ] = $value;
+ } else {
+ $config_vars[ $variable ] = array_merge((array)$config_vars[ $variable ], (array)$value);
+ }
+ }
+ // scan sections
+ $sections = $tpl->source->config_sections;
+ if (!empty($sections)) {
+ foreach ((array)$sections as $tpl_section) {
+ if (isset($new_config_vars[ 'sections' ][ $tpl_section ])) {
+ foreach ($new_config_vars[ 'sections' ][ $tpl_section ][ 'vars' ] as $variable => $value) {
+ if ($tpl->smarty->config_overwrite || !isset($config_vars[ $variable ])) {
+ $config_vars[ $variable ] = $value;
+ } else {
+ $config_vars[ $variable ] = array_merge((array)$config_vars[ $variable ], (array)$value);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Update config variables in template local variable stack
+ *
+ * @param \Smarty_Internal_Template $tpl
+ * @param array $config_vars
+ */
+ public function _updateVarStack(Smarty_Internal_Template $tpl, $config_vars)
+ {
+ $i = 0;
+ while (isset($tpl->_cache[ 'varStack' ][ $i ])) {
+ $this->_assignConfigVars($tpl->_cache[ 'varStack' ][ $i ][ 'config' ], $tpl, $config_vars);
+ $i++;
+ }
+ }
+
+ /**
+ * gets a config variable value
+ *
+ * @param \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template $data
+ * @param string $varName the name of the config variable
+ * @param bool $errorEnable
+ *
+ * @return null|string the value of the config variable
+ */
+ public function _getConfigVariable(Smarty_Internal_Data $data, $varName, $errorEnable = true)
+ {
+ $_ptr = $data;
+ while ($_ptr !== null) {
+ if (isset($_ptr->config_vars[ $varName ])) {
+ // found it, return it
+ return $_ptr->config_vars[ $varName ];
+ }
+ // not found, try at parent
+ $_ptr = $_ptr->parent;
+ }
+ if ($data->smarty->error_unassigned && $errorEnable) {
+ // force a notice
+ $x = $$varName;
+ }
+ return null;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_createdata.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_createdata.php
new file mode 100644
index 0000000..f950975
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_createdata.php
@@ -0,0 +1,44 @@
+_getSmartyObj();
+ $dataObj = new Smarty_Data($parent, $smarty, $name);
+ if ($smarty->debugging) {
+ Smarty_Internal_Debug::register_data($dataObj);
+ }
+ return $dataObj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getautoloadfilters.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getautoloadfilters.php
new file mode 100644
index 0000000..4145db1
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getautoloadfilters.php
@@ -0,0 +1,37 @@
+ array( 'filter1', 'filter2', … ) ) or array( 'filter1', 'filter2', …) if $type
+ * was specified
+ * @throws \SmartyException
+ */
+ public function getAutoloadFilters(Smarty_Internal_TemplateBase $obj, $type = null)
+ {
+ $smarty = $obj->_getSmartyObj();
+ if ($type !== null) {
+ $this->_checkFilterType($type);
+ return isset($smarty->autoload_filters[ $type ]) ? $smarty->autoload_filters[ $type ] : array();
+ }
+ return $smarty->autoload_filters;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getconfigvariable.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getconfigvariable.php
new file mode 100644
index 0000000..b548151
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getconfigvariable.php
@@ -0,0 +1,34 @@
+ext->configLoad->_getConfigVariable($data, $varName, $errorEnable);
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getconfigvars.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getconfigvars.php
new file mode 100644
index 0000000..1d11e44
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getconfigvars.php
@@ -0,0 +1,58 @@
+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;
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getdebugtemplate.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getdebugtemplate.php
new file mode 100644
index 0000000..77d908c
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getdebugtemplate.php
@@ -0,0 +1,35 @@
+_getSmartyObj();
+ return $smarty->debug_tpl;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php
new file mode 100644
index 0000000..57da85c
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php
@@ -0,0 +1,35 @@
+_getSmartyObj();
+ return $smarty->default_modifiers;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getglobal.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getglobal.php
new file mode 100644
index 0000000..2be11d7
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getglobal.php
@@ -0,0 +1,47 @@
+value;
+ } else {
+ return '';
+ }
+ } else {
+ $_result = array();
+ foreach (Smarty::$global_tpl_vars as $key => $var) {
+ $_result[ $key ] = $var->value;
+ }
+ return $_result;
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getregisteredobject.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getregisteredobject.php
new file mode 100644
index 0000000..df6ede1
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getregisteredobject.php
@@ -0,0 +1,44 @@
+_getSmartyObj();
+ if (!isset($smarty->registered_objects[ $object_name ])) {
+ throw new SmartyException("'$object_name' is not a registered object");
+ }
+ if (!is_object($smarty->registered_objects[ $object_name ][ 0 ])) {
+ throw new SmartyException("registered '$object_name' is not an object");
+ }
+ return $smarty->registered_objects[ $object_name ][ 0 ];
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getstreamvariable.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getstreamvariable.php
new file mode 100644
index 0000000..8db39c5
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getstreamvariable.php
@@ -0,0 +1,50 @@
+smarty) ? $data->smarty : $data;
+ if ($smarty->error_unassigned) {
+ throw new SmartyException('Undefined stream variable "' . $variable . '"');
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_gettags.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_gettags.php
new file mode 100644
index 0000000..c07ae07
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_gettags.php
@@ -0,0 +1,63 @@
+_getSmartyObj();
+ if ($obj->_isTplObj() && !isset($template)) {
+ $tpl = clone $obj;
+ } elseif (isset($template) && $template->_isTplObj()) {
+ $tpl = clone $template;
+ } elseif (isset($template) && is_string($template)) {
+ /* @var Smarty_Internal_Template $tpl */
+ $tpl = new $smarty->template_class($template, $smarty);
+ // checks if template exists
+ if (!$tpl->source->exists) {
+ throw new SmartyException("Unable to load template {$tpl->source->type} '{$tpl->source->name}'");
+ }
+ }
+ if (isset($tpl)) {
+ $tpl->smarty = clone $tpl->smarty;
+ $tpl->smarty->_cache[ 'get_used_tags' ] = true;
+ $tpl->_cache[ 'used_tags' ] = array();
+ $tpl->smarty->merge_compiled_includes = false;
+ $tpl->smarty->disableSecurity();
+ $tpl->caching = Smarty::CACHING_OFF;
+ $tpl->loadCompiler();
+ $tpl->compiler->compileTemplate($tpl);
+ return $tpl->_cache[ 'used_tags' ];
+ }
+ throw new SmartyException('Missing template specification');
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_gettemplatevars.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_gettemplatevars.php
new file mode 100644
index 0000000..9ef7d46
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_gettemplatevars.php
@@ -0,0 +1,119 @@
+_getVariable($data, $varName, $_ptr, $searchParents, false);
+ if (is_object($_var)) {
+ return $_var->value;
+ } else {
+ return null;
+ }
+ } else {
+ $_result = array();
+ if ($_ptr === null) {
+ $_ptr = $data;
+ }
+ 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 ($searchParents && isset($_ptr->parent)) {
+ $_ptr = $_ptr->parent;
+ } else {
+ $_ptr = null;
+ }
+ }
+ if ($searchParents && 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;
+ }
+ }
+
+ /**
+ * gets the object of a Smarty variable
+ *
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
+ * @param string $varName the name of the Smarty variable
+ * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $_ptr optional pointer to data object
+ * @param bool $searchParents search also in parent data
+ * @param bool $errorEnable
+ *
+ * @return \Smarty_Variable
+ */
+ public function _getVariable(
+ Smarty_Internal_Data $data,
+ $varName,
+ Smarty_Internal_Data $_ptr = null,
+ $searchParents = true,
+ $errorEnable = true
+ ) {
+ if ($_ptr === null) {
+ $_ptr = $data;
+ }
+ while ($_ptr !== null) {
+ if (isset($_ptr->tpl_vars[ $varName ])) {
+ // found it, return it
+ return $_ptr->tpl_vars[ $varName ];
+ }
+ // not found, try at parent
+ if ($searchParents && isset($_ptr->parent)) {
+ $_ptr = $_ptr->parent;
+ } else {
+ $_ptr = null;
+ }
+ }
+ if (isset(Smarty::$global_tpl_vars[ $varName ])) {
+ // found it, return it
+ return Smarty::$global_tpl_vars[ $varName ];
+ }
+ if ($errorEnable && $data->_getSmartyObj()->error_unassigned) {
+ // force a notice
+ $x = $$varName;
+ }
+ return new Smarty_Undefined_Variable;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_literals.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_literals.php
new file mode 100644
index 0000000..bfa3f58
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_literals.php
@@ -0,0 +1,100 @@
+_getSmartyObj();
+ return (array)$smarty->literals;
+ }
+
+ /**
+ * Add literals
+ *
+ * @api Smarty::addLiterals()
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param array|string $literals literal or list of literals
+ * to addto add
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ * @throws \SmartyException
+ */
+ public function addLiterals(Smarty_Internal_TemplateBase $obj, $literals = null)
+ {
+ if (isset($literals)) {
+ $this->set($obj->_getSmartyObj(), (array)$literals);
+ }
+ return $obj;
+ }
+
+ /**
+ * Set literals
+ *
+ * @api Smarty::setLiterals()
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param array|string $literals literal or list of literals
+ * to setto set
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ * @throws \SmartyException
+ */
+ public function setLiterals(Smarty_Internal_TemplateBase $obj, $literals = null)
+ {
+ $smarty = $obj->_getSmartyObj();
+ $smarty->literals = array();
+ if (!empty($literals)) {
+ $this->set($smarty, (array)$literals);
+ }
+ return $obj;
+ }
+
+ /**
+ * common setter for literals for easier handling of duplicates the
+ * Smarty::$literals array gets filled with identical key values
+ *
+ * @param \Smarty $smarty
+ * @param array $literals
+ *
+ * @throws \SmartyException
+ */
+ private function set(Smarty $smarty, $literals)
+ {
+ $literals = array_combine($literals, $literals);
+ $error = isset($literals[ $smarty->left_delimiter ]) ? array($smarty->left_delimiter) : array();
+ $error = isset($literals[ $smarty->right_delimiter ]) ? $error[] = $smarty->right_delimiter : $error;
+ if (!empty($error)) {
+ throw new SmartyException(
+ 'User defined literal(s) "' . $error .
+ '" may not be identical with left or right delimiter'
+ );
+ }
+ $smarty->literals = array_merge((array)$smarty->literals, (array)$literals);
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_loadfilter.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_loadfilter.php
new file mode 100644
index 0000000..66d80d4
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_loadfilter.php
@@ -0,0 +1,77 @@
+ true, 'post' => true, 'output' => true, 'variable' => true);
+
+ /**
+ * load a filter of specified type and name
+ *
+ * @api Smarty::loadFilter()
+ *
+ * @link http://www.smarty.net/docs/en/api.load.filter.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $type filter type
+ * @param string $name filter name
+ *
+ * @return bool
+ * @throws SmartyException if filter could not be loaded
+ */
+ public function loadFilter(Smarty_Internal_TemplateBase $obj, $type, $name)
+ {
+ $smarty = $obj->_getSmartyObj();
+ $this->_checkFilterType($type);
+ $_plugin = "smarty_{$type}filter_{$name}";
+ $_filter_name = $_plugin;
+ if (is_callable($_plugin)) {
+ $smarty->registered_filters[ $type ][ $_filter_name ] = $_plugin;
+ return true;
+ }
+ if ($smarty->loadPlugin($_plugin)) {
+ if (class_exists($_plugin, false)) {
+ $_plugin = array($_plugin, 'execute');
+ }
+ if (is_callable($_plugin)) {
+ $smarty->registered_filters[ $type ][ $_filter_name ] = $_plugin;
+ return true;
+ }
+ }
+ throw new SmartyException("{$type}filter '{$name}' not found or callable");
+ }
+
+ /**
+ * Check if filter type is valid
+ *
+ * @param string $type
+ *
+ * @throws \SmartyException
+ */
+ public function _checkFilterType($type)
+ {
+ if (!isset($this->filterTypes[ $type ])) {
+ throw new SmartyException("Illegal filter type '{$type}'");
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_loadplugin.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_loadplugin.php
new file mode 100644
index 0000000..3bd659c
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_loadplugin.php
@@ -0,0 +1,111 @@
+loadPlugin() method
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews
+ */
+class Smarty_Internal_Method_LoadPlugin
+{
+ /**
+ * Cache of searched plugin files
+ *
+ * @var array
+ */
+ public $plugin_files = array();
+
+ /**
+ * Takes unknown classes and loads plugin files for them
+ * class name format: Smarty_PluginType_PluginName
+ * plugin filename format: plugintype.pluginname.php
+ *
+ * @param \Smarty $smarty
+ * @param string $plugin_name class plugin name to load
+ * @param bool $check check if already loaded
+ *
+ * @return bool|string
+ * @throws \SmartyException
+ */
+ public function loadPlugin(Smarty $smarty, $plugin_name, $check)
+ {
+ // if function or class exists, exit silently (already loaded)
+ if ($check && (is_callable($plugin_name) || class_exists($plugin_name, false))) {
+ return true;
+ }
+ if (!preg_match('#^smarty_((internal)|([^_]+))_(.+)$#i', $plugin_name, $match)) {
+ throw new SmartyException("plugin {$plugin_name} is not a valid name format");
+ }
+ if (!empty($match[ 2 ])) {
+ $file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php';
+ if (isset($this->plugin_files[ $file ])) {
+ if ($this->plugin_files[ $file ] !== false) {
+ return $this->plugin_files[ $file ];
+ } else {
+ return false;
+ }
+ } else {
+ if (is_file($file)) {
+ $this->plugin_files[ $file ] = $file;
+ include_once $file;
+ return $file;
+ } else {
+ $this->plugin_files[ $file ] = false;
+ return false;
+ }
+ }
+ }
+ // plugin filename is expected to be: [type].[name].php
+ $_plugin_filename = "{$match[1]}.{$match[4]}.php";
+ $_lower_filename = strtolower($_plugin_filename);
+ if (isset($this->plugin_files)) {
+ if (isset($this->plugin_files[ 'plugins_dir' ][ $_lower_filename ])) {
+ if (!$smarty->use_include_path || $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ] !== false) {
+ return $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ];
+ }
+ }
+ if (!$smarty->use_include_path || $smarty->ext->_getIncludePath->isNewIncludePath($smarty)) {
+ unset($this->plugin_files[ 'include_path' ]);
+ } else {
+ if (isset($this->plugin_files[ 'include_path' ][ $_lower_filename ])) {
+ return $this->plugin_files[ 'include_path' ][ $_lower_filename ];
+ }
+ }
+ }
+ $_file_names = array($_plugin_filename);
+ if ($_lower_filename !== $_plugin_filename) {
+ $_file_names[] = $_lower_filename;
+ }
+ $_p_dirs = $smarty->getPluginsDir();
+ if (!isset($this->plugin_files[ 'plugins_dir' ][ $_lower_filename ])) {
+ // loop through plugin dirs and find the plugin
+ foreach ($_p_dirs as $_plugin_dir) {
+ foreach ($_file_names as $name) {
+ $file = $_plugin_dir . $name;
+ if (is_file($file)) {
+ $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ] = $file;
+ include_once $file;
+ return $file;
+ }
+ $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ] = false;
+ }
+ }
+ }
+ if ($smarty->use_include_path) {
+ foreach ($_file_names as $_file_name) {
+ // try PHP include_path
+ $file = $smarty->ext->_getIncludePath->getIncludePath($_p_dirs, $_file_name, $smarty);
+ $this->plugin_files[ 'include_path' ][ $_lower_filename ] = $file;
+ if ($file !== false) {
+ include_once $file;
+ return $file;
+ }
+ }
+ }
+ // no plugin loaded
+ return false;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_mustcompile.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_mustcompile.php
new file mode 100644
index 0000000..3931883
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_mustcompile.php
@@ -0,0 +1,50 @@
+source->exists) {
+ if ($_template->_isSubTpl()) {
+ $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}");
+ }
+ if ($_template->mustCompile === null) {
+ $_template->mustCompile = (!$_template->source->handler->uncompiled &&
+ ($_template->smarty->force_compile || $_template->source->handler->recompiled ||
+ !$_template->compiled->exists || ($_template->compile_check &&
+ $_template->compiled->getTimeStamp() <
+ $_template->source->getTimeStamp())));
+ }
+ return $_template->mustCompile;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registercacheresource.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registercacheresource.php
new file mode 100644
index 0000000..6483656
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registercacheresource.php
@@ -0,0 +1,42 @@
+_getSmartyObj();
+ $smarty->registered_cache_resources[ $name ] = $resource_handler;
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerclass.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerclass.php
new file mode 100644
index 0000000..8d18547
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerclass.php
@@ -0,0 +1,46 @@
+_getSmartyObj();
+ // test if exists
+ if (!class_exists($class_impl)) {
+ throw new SmartyException("Undefined class '$class_impl' in register template class");
+ }
+ // register the class
+ $smarty->registered_classes[ $class_name ] = $class_impl;
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php
new file mode 100644
index 0000000..b340f17
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php
@@ -0,0 +1,42 @@
+_getSmartyObj();
+ if (is_callable($callback)) {
+ $smarty->default_config_handler_func = $callback;
+ } else {
+ throw new SmartyException('Default config handler not callable');
+ }
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php
new file mode 100644
index 0000000..a9fb78d
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php
@@ -0,0 +1,43 @@
+_getSmartyObj();
+ if (is_callable($callback)) {
+ $smarty->default_plugin_handler_func = $callback;
+ } else {
+ throw new SmartyException("Default plugin handler '$callback' not callable");
+ }
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php
new file mode 100644
index 0000000..cbc133c
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php
@@ -0,0 +1,88 @@
+_getSmartyObj();
+ if (is_callable($callback)) {
+ $smarty->default_template_handler_func = $callback;
+ } else {
+ throw new SmartyException('Default template handler not callable');
+ }
+ return $obj;
+ }
+
+ /**
+ * get default content from template or config resource handler
+ *
+ * @param Smarty_Template_Source $source
+ *
+ * @throws \SmartyException
+ */
+ public static function _getDefaultTemplate(Smarty_Template_Source $source)
+ {
+ if ($source->isConfig) {
+ $default_handler = $source->smarty->default_config_handler_func;
+ } else {
+ $default_handler = $source->smarty->default_template_handler_func;
+ }
+ $_content = $_timestamp = null;
+ $_return = call_user_func_array(
+ $default_handler,
+ array($source->type, $source->name, &$_content, &$_timestamp, $source->smarty)
+ );
+ if (is_string($_return)) {
+ $source->exists = is_file($_return);
+ if ($source->exists) {
+ $source->timestamp = filemtime($_return);
+ } else {
+ throw new SmartyException(
+ 'Default handler: Unable to load ' .
+ ($source->isConfig ? 'config' : 'template') .
+ " default file '{$_return}' for '{$source->type}:{$source->name}'"
+ );
+ }
+ $source->name = $source->filepath = $_return;
+ $source->uid = sha1($source->filepath);
+ } elseif ($_return === true) {
+ $source->content = $_content;
+ $source->exists = true;
+ $source->uid = $source->name = sha1($_content);
+ $source->handler = Smarty_Resource::load($source->smarty, 'eval');
+ } else {
+ $source->exists = false;
+ throw new SmartyException(
+ 'Default handler: No ' . ($source->isConfig ? 'config' : 'template') .
+ " default content for '{$source->type}:{$source->name}'"
+ );
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerfilter.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerfilter.php
new file mode 100644
index 0000000..c0f9fff
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerfilter.php
@@ -0,0 +1,87 @@
+ true, 'post' => true, 'output' => true, 'variable' => true);
+
+ /**
+ * Registers a filter function
+ *
+ * @api Smarty::registerFilter()
+ *
+ * @link http://www.smarty.net/docs/en/api.register.filter.tpl
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @param string $type filter type
+ * @param callback $callback
+ * @param string|null $name optional filter name
+ *
+ * @return \Smarty|\Smarty_Internal_Template
+ * @throws \SmartyException
+ */
+ public function registerFilter(Smarty_Internal_TemplateBase $obj, $type, $callback, $name = null)
+ {
+ $smarty = $obj->_getSmartyObj();
+ $this->_checkFilterType($type);
+ $name = isset($name) ? $name : $this->_getFilterName($callback);
+ if (!is_callable($callback)) {
+ throw new SmartyException("{$type}filter '{$name}' not callable");
+ }
+ $smarty->registered_filters[ $type ][ $name ] = $callback;
+ return $obj;
+ }
+
+ /**
+ * Return internal filter name
+ *
+ * @param callback $function_name
+ *
+ * @return string internal filter name
+ */
+ public function _getFilterName($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 ];
+ } elseif (is_string($function_name)) {
+ return $function_name;
+ } else {
+ return 'closure';
+ }
+ }
+
+ /**
+ * Check if filter type is valid
+ *
+ * @param string $type
+ *
+ * @throws \SmartyException
+ */
+ public function _checkFilterType($type)
+ {
+ if (!isset($this->filterTypes[ $type ])) {
+ throw new SmartyException("Illegal filter type '{$type}'");
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerobject.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerobject.php
new file mode 100644
index 0000000..4646e4f
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerobject.php
@@ -0,0 +1,84 @@
+_getSmartyObj();
+ // test if allowed methods callable
+ if (!empty($allowed_methods_properties)) {
+ foreach ((array)$allowed_methods_properties as $method) {
+ if (!is_callable(array($object, $method)) && !property_exists($object, $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, $method))) {
+ throw new SmartyException("Undefined method '$method' in registered object");
+ }
+ }
+ }
+ // register the object
+ $smarty->registered_objects[ $object_name ] =
+ array($object, (array)$allowed_methods_properties, (boolean)$format, (array)$block_methods);
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerplugin.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerplugin.php
new file mode 100644
index 0000000..ed18d84
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerplugin.php
@@ -0,0 +1,58 @@
+_getSmartyObj();
+ if (isset($smarty->registered_plugins[ $type ][ $name ])) {
+ throw new SmartyException("Plugin tag '{$name}' already registered");
+ } elseif (!is_callable($callback)) {
+ throw new SmartyException("Plugin '{$name}' not callable");
+ } elseif ($cacheable && $cache_attr) {
+ throw new SmartyException("Cannot set caching attributes for plugin '{$name}' when it is cacheable.");
+ } else {
+ $smarty->registered_plugins[ $type ][ $name ] = array($callback, (bool)$cacheable, (array)$cache_attr);
+ }
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerresource.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerresource.php
new file mode 100644
index 0000000..7c7d0f7
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerresource.php
@@ -0,0 +1,46 @@
+_getSmartyObj();
+ $smarty->registered_resources[ $name ] =
+ $resource_handler instanceof Smarty_Resource ? $resource_handler : array($resource_handler, false);
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_setautoloadfilters.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_setautoloadfilters.php
new file mode 100644
index 0000000..2972f3c
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_setautoloadfilters.php
@@ -0,0 +1,72 @@
+ true, 'post' => true, 'output' => true, 'variable' => true);
+
+ /**
+ * Set autoload filters
+ *
+ * @api Smarty::setAutoloadFilters()
+ *
+ * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
+ * @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|\Smarty_Internal_Template
+ * @throws \SmartyException
+ */
+ public function setAutoloadFilters(Smarty_Internal_TemplateBase $obj, $filters, $type = null)
+ {
+ $smarty = $obj->_getSmartyObj();
+ if ($type !== null) {
+ $this->_checkFilterType($type);
+ $smarty->autoload_filters[ $type ] = (array)$filters;
+ } else {
+ foreach ((array)$filters as $type => $value) {
+ $this->_checkFilterType($type);
+ }
+ $smarty->autoload_filters = (array)$filters;
+ }
+ return $obj;
+ }
+
+ /**
+ * Check if filter type is valid
+ *
+ * @param string $type
+ *
+ * @throws \SmartyException
+ */
+ public function _checkFilterType($type)
+ {
+ if (!isset($this->filterTypes[ $type ])) {
+ throw new SmartyException("Illegal filter type '{$type}'");
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_setdebugtemplate.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_setdebugtemplate.php
new file mode 100644
index 0000000..cc9d23e
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_setdebugtemplate.php
@@ -0,0 +1,41 @@
+_getSmartyObj();
+ if (!is_readable($tpl_name)) {
+ throw new SmartyException("Unknown file '{$tpl_name}'");
+ }
+ $smarty->debug_tpl = $tpl_name;
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php
new file mode 100644
index 0000000..eadc2de
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php
@@ -0,0 +1,38 @@
+_getSmartyObj();
+ $smarty->default_modifiers = (array)$modifiers;
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unloadfilter.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unloadfilter.php
new file mode 100644
index 0000000..55e1596
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unloadfilter.php
@@ -0,0 +1,43 @@
+_getSmartyObj();
+ $this->_checkFilterType($type);
+ if (isset($smarty->registered_filters[ $type ])) {
+ $_filter_name = "smarty_{$type}filter_{$name}";
+ if (isset($smarty->registered_filters[ $type ][ $_filter_name ])) {
+ unset($smarty->registered_filters[ $type ][ $_filter_name ]);
+ if (empty($smarty->registered_filters[ $type ])) {
+ unset($smarty->registered_filters[ $type ]);
+ }
+ }
+ }
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregistercacheresource.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregistercacheresource.php
new file mode 100644
index 0000000..b999038
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregistercacheresource.php
@@ -0,0 +1,40 @@
+_getSmartyObj();
+ if (isset($smarty->registered_cache_resources[ $name ])) {
+ unset($smarty->registered_cache_resources[ $name ]);
+ }
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterfilter.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterfilter.php
new file mode 100644
index 0000000..9cb494a
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterfilter.php
@@ -0,0 +1,43 @@
+_getSmartyObj();
+ $this->_checkFilterType($type);
+ if (isset($smarty->registered_filters[ $type ])) {
+ $name = is_string($callback) ? $callback : $this->_getFilterName($callback);
+ if (isset($smarty->registered_filters[ $type ][ $name ])) {
+ unset($smarty->registered_filters[ $type ][ $name ]);
+ if (empty($smarty->registered_filters[ $type ])) {
+ unset($smarty->registered_filters[ $type ]);
+ }
+ }
+ }
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterobject.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterobject.php
new file mode 100644
index 0000000..1e592b3
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterobject.php
@@ -0,0 +1,40 @@
+_getSmartyObj();
+ if (isset($smarty->registered_objects[ $object_name ])) {
+ unset($smarty->registered_objects[ $object_name ]);
+ }
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterplugin.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterplugin.php
new file mode 100644
index 0000000..f39e316
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterplugin.php
@@ -0,0 +1,41 @@
+_getSmartyObj();
+ if (isset($smarty->registered_plugins[ $type ][ $name ])) {
+ unset($smarty->registered_plugins[ $type ][ $name ]);
+ }
+ return $obj;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterresource.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterresource.php
new file mode 100644
index 0000000..a79db42
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterresource.php
@@ -0,0 +1,40 @@
+_getSmartyObj();
+ if (isset($smarty->registered_resources[ $type ])) {
+ unset($smarty->registered_resources[ $type ]);
+ }
+ return $obj;
+ }
+}
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_nocache_insert.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_nocache_insert.php
similarity index 69%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_nocache_insert.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_nocache_insert.php
index faae49a..88694dc 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_nocache_insert.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_nocache_insert.php
@@ -1,53 +1,51 @@
-assign('{$_assign}' , {$_function} (" . var_export($_attr, true) . ",\$_smarty_tpl), true);?>";
- } else {
- $_output .= "echo {$_function}(" . var_export($_attr, true) . ",\$_smarty_tpl);?>";
- }
- $_tpl = $_template;
- while ($_tpl->parent instanceof Smarty_Internal_Template) {
- $_tpl = $_tpl->parent;
- }
- return "/*%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/" . $_output . "/*/%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/";
- }
-
-}
-
-?>
+assign('{$_assign}' , {$_function} (" . var_export($_attr, true) .
+ ',\$_smarty_tpl), true);?>';
+ } else {
+ $_output .= "echo {$_function}(" . var_export($_attr, true) . ',$_smarty_tpl);?>';
+ }
+ $_tpl = $_template;
+ while ($_tpl->_isSubTpl()) {
+ $_tpl = $_tpl->parent;
+ }
+ return "/*%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/{$_output}/*/%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/";
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree.php
new file mode 100644
index 0000000..9f76785
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree.php
@@ -0,0 +1,50 @@
+data = null;
+ $this->subtrees = null;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_code.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_code.php
new file mode 100644
index 0000000..7bd0bc4
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_code.php
@@ -0,0 +1,42 @@
+data = $data;
+ }
+
+ /**
+ * Return buffer content in parentheses
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string content
+ */
+ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ {
+ return sprintf('(%s)', $this->data);
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_dq.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_dq.php
new file mode 100644
index 0000000..8655f58
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_dq.php
@@ -0,0 +1,95 @@
+subtrees[] = $subtree;
+ if ($subtree instanceof Smarty_Internal_ParseTree_Tag) {
+ $parser->block_nesting_level = count($parser->compiler->_tag_stack);
+ }
+ }
+
+ /**
+ * Append buffer to subtree
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ * @param Smarty_Internal_ParseTree $subtree parse tree buffer
+ */
+ public function append_subtree(Smarty_Internal_Templateparser $parser, Smarty_Internal_ParseTree $subtree)
+ {
+ $last_subtree = count($this->subtrees) - 1;
+ if ($last_subtree >= 0 && $this->subtrees[ $last_subtree ] instanceof Smarty_Internal_ParseTree_Tag
+ && $this->subtrees[ $last_subtree ]->saved_block_nesting < $parser->block_nesting_level
+ ) {
+ if ($subtree instanceof Smarty_Internal_ParseTree_Code) {
+ $this->subtrees[ $last_subtree ]->data =
+ $parser->compiler->appendCode(
+ $this->subtrees[ $last_subtree ]->data,
+ 'data . ';?>'
+ );
+ } elseif ($subtree instanceof Smarty_Internal_ParseTree_DqContent) {
+ $this->subtrees[ $last_subtree ]->data =
+ $parser->compiler->appendCode(
+ $this->subtrees[ $last_subtree ]->data,
+ 'data . '";?>'
+ );
+ } else {
+ $this->subtrees[ $last_subtree ]->data =
+ $parser->compiler->appendCode($this->subtrees[ $last_subtree ]->data, $subtree->data);
+ }
+ } else {
+ $this->subtrees[] = $subtree;
+ }
+ if ($subtree instanceof Smarty_Internal_ParseTree_Tag) {
+ $parser->block_nesting_level = count($parser->compiler->_tag_stack);
+ }
+ }
+
+ /**
+ * Merge subtree buffer content together
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string compiled template code
+ */
+ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ {
+ $code = '';
+ foreach ($this->subtrees as $subtree) {
+ if ($code !== '') {
+ $code .= '.';
+ }
+ if ($subtree instanceof Smarty_Internal_ParseTree_Tag) {
+ $more_php = $subtree->assign_to_var($parser);
+ } else {
+ $more_php = $subtree->to_smarty_php($parser);
+ }
+ $code .= $more_php;
+ if (!$subtree instanceof Smarty_Internal_ParseTree_DqContent) {
+ $parser->compiler->has_variable_string = true;
+ }
+ }
+ return $code;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_dqcontent.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_dqcontent.php
new file mode 100644
index 0000000..a8ca389
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_dqcontent.php
@@ -0,0 +1,42 @@
+data = $data;
+ }
+
+ /**
+ * Return content as double quoted string
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string doubled quoted string
+ */
+ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ {
+ return '"' . $this->data . '"';
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_tag.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_tag.php
new file mode 100644
index 0000000..e6c7556
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_tag.php
@@ -0,0 +1,67 @@
+data = $data;
+ $this->saved_block_nesting = $parser->block_nesting_level;
+ }
+
+ /**
+ * Return buffer content
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string content
+ */
+ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ {
+ return $this->data;
+ }
+
+ /**
+ * Return complied code that loads the evaluated output of buffer content into a temporary variable
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string template code
+ */
+ public function assign_to_var(Smarty_Internal_Templateparser $parser)
+ {
+ $var = $parser->compiler->getNewPrefixVariable();
+ $tmp = $parser->compiler->appendCode('', $this->data);
+ $tmp = $parser->compiler->appendCode($tmp, "");
+ $parser->compiler->prefix_code[] = sprintf('%s', $tmp);
+ return $var;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_template.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_template.php
new file mode 100644
index 0000000..ab4c3ec
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_template.php
@@ -0,0 +1,169 @@
+subtrees)) {
+ $this->subtrees = array_merge($this->subtrees, $subtree->subtrees);
+ } else {
+ if ($subtree->data !== '') {
+ $this->subtrees[] = $subtree;
+ }
+ }
+ }
+
+ /**
+ * Append array to subtree
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty_Internal_ParseTree[] $array
+ */
+ public function append_array(Smarty_Internal_Templateparser $parser, $array = array())
+ {
+ if (!empty($array)) {
+ $this->subtrees = array_merge($this->subtrees, (array)$array);
+ }
+ }
+
+ /**
+ * Prepend array to subtree
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty_Internal_ParseTree[] $array
+ */
+ public function prepend_array(Smarty_Internal_Templateparser $parser, $array = array())
+ {
+ if (!empty($array)) {
+ $this->subtrees = array_merge((array)$array, $this->subtrees);
+ }
+ }
+
+ /**
+ * Sanitize and merge subtree buffers together
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string template code content
+ */
+ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ {
+ $code = '';
+
+ foreach ($this->getChunkedSubtrees() as $chunk) {
+ $text = '';
+ switch ($chunk['mode']) {
+ case 'textstripped':
+ foreach ($chunk['subtrees'] as $subtree) {
+ $text .= $subtree->to_smarty_php($parser);
+ }
+ $code .= preg_replace(
+ '/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/',
+ "\n",
+ $parser->compiler->processText($text)
+ );
+ break;
+ case 'text':
+ foreach ($chunk['subtrees'] as $subtree) {
+ $text .= $subtree->to_smarty_php($parser);
+ }
+ $code .= preg_replace(
+ '/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/',
+ "\n",
+ $text
+ );
+ break;
+ case 'tag':
+ foreach ($chunk['subtrees'] as $subtree) {
+ $text = $parser->compiler->appendCode($text, $subtree->to_smarty_php($parser));
+ }
+ $code .= $text;
+ break;
+ default:
+ foreach ($chunk['subtrees'] as $subtree) {
+ $text = $subtree->to_smarty_php($parser);
+ }
+ $code .= $text;
+
+ }
+ }
+ return $code;
+ }
+
+ private function getChunkedSubtrees() {
+ $chunks = array();
+ $currentMode = null;
+ $currentChunk = array();
+ for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key++) {
+
+ if ($this->subtrees[ $key ]->data === '' && in_array($currentMode, array('textstripped', 'text', 'tag'))) {
+ continue;
+ }
+
+ if ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Text
+ && $this->subtrees[ $key ]->isToBeStripped()) {
+ $newMode = 'textstripped';
+ } elseif ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Text) {
+ $newMode = 'text';
+ } elseif ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Tag) {
+ $newMode = 'tag';
+ } else {
+ $newMode = 'other';
+ }
+
+ if ($newMode == $currentMode) {
+ $currentChunk[] = $this->subtrees[ $key ];
+ } else {
+ $chunks[] = array(
+ 'mode' => $currentMode,
+ 'subtrees' => $currentChunk
+ );
+ $currentMode = $newMode;
+ $currentChunk = array($this->subtrees[ $key ]);
+ }
+ }
+ if ($currentMode && $currentChunk) {
+ $chunks[] = array(
+ 'mode' => $currentMode,
+ 'subtrees' => $currentChunk
+ );
+ }
+ return $chunks;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_text.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_text.php
new file mode 100644
index 0000000..399e849
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_text.php
@@ -0,0 +1,57 @@
+data = $data;
+ $this->toBeStripped = $toBeStripped;
+ }
+
+ /**
+ * Wether this section should be stripped on output to smarty php
+ * @return bool
+ */
+ public function isToBeStripped() {
+ return $this->toBeStripped;
+ }
+
+ /**
+ * Return buffer content
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string text
+ */
+ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ {
+ return $this->data;
+ }
+}
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_resource_eval.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_eval.php
similarity index 72%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_resource_eval.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_eval.php
index cf2ec3e..3b552a5 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_resource_eval.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_eval.php
@@ -1,94 +1,94 @@
-uid = $source->filepath = sha1($source->name);
- $source->timestamp = false;
- $source->exists = true;
- }
-
- /**
- * Load template's source from $resource_name into current template object
- *
- * @uses decode() to decode base64 and urlencoded template_resources
- * @param Smarty_Template_Source $source source object
- * @return string template source
- */
- public function getContent(Smarty_Template_Source $source)
- {
- return $this->decode($source->name);
- }
-
- /**
- * decode base64 and urlencode
- *
- * @param string $string template_resource to decode
- * @return string decoded template_resource
- */
- protected function decode($string)
- {
- // decode if specified
- if (($pos = strpos($string, ':')) !== false) {
- if (!strncmp($string, 'base64', 6)) {
- return base64_decode(substr($string, 7));
- } elseif (!strncmp($string, 'urlencode', 9)) {
- return urldecode(substr($string, 10));
- }
- }
-
- return $string;
- }
-
- /**
- * 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
- */
- protected function buildUniqueResourceName(Smarty $smarty, $resource_name)
- {
- return get_class($this) . '#' .$this->decode($resource_name);
- }
-
- /**
- * 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 '';
- }
-
-}
-
-?>
\ No newline at end of file
+uid = $source->filepath = sha1($source->name);
+ $source->timestamp = $source->exists = true;
+ }
+
+ /**
+ * Load template's source from $resource_name into current template object
+ *
+ * @uses decode() to decode base64 and urlencoded template_resources
+ *
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string template source
+ */
+ public function getContent(Smarty_Template_Source $source)
+ {
+ return $this->decode($source->name);
+ }
+
+ /**
+ * decode base64 and urlencode
+ *
+ * @param string $string template_resource to decode
+ *
+ * @return string decoded template_resource
+ */
+ protected function decode($string)
+ {
+ // decode if specified
+ if (($pos = strpos($string, ':')) !== false) {
+ if (!strncmp($string, 'base64', 6)) {
+ return base64_decode(substr($string, 7));
+ } elseif (!strncmp($string, 'urlencode', 9)) {
+ return urldecode(substr($string, 10));
+ }
+ }
+ return $string;
+ }
+
+ /**
+ * modify resource_name according to resource handlers specifications
+ *
+ * @param Smarty $smarty Smarty instance
+ * @param string $resource_name resource_name to make unique
+ * @param boolean $isConfig flag for config resource
+ *
+ * @return string unique resource name
+ */
+ public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
+ {
+ return get_class($this) . '#' . $this->decode($resource_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)
+ {
+ return '';
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_extends.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_extends.php
new file mode 100644
index 0000000..8094693
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_extends.php
@@ -0,0 +1,126 @@
+name);
+ $smarty = &$source->smarty;
+ $exists = true;
+ foreach ($components as $component) {
+ /* @var \Smarty_Template_Source $_s */
+ $_s = Smarty_Template_Source::load(null, $smarty, $component);
+ if ($_s->type === 'php') {
+ throw new SmartyException("Resource type {$_s->type} cannot be used with the extends resource type");
+ }
+ $sources[ $_s->uid ] = $_s;
+ $uid .= $_s->filepath;
+ if ($_template) {
+ $exists = $exists && $_s->exists;
+ }
+ }
+ $source->components = $sources;
+ $source->filepath = $_s->filepath;
+ $source->uid = sha1($uid . $source->smarty->_joined_template_dir);
+ $source->exists = $exists;
+ if ($_template) {
+ $source->timestamp = $_s->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->exists = true;
+ /* @var \Smarty_Template_Source $_s */
+ foreach ($source->components as $_s) {
+ $source->exists = $source->exists && $_s->exists;
+ }
+ $source->timestamp = $source->exists ? $_s->getTimeStamp() : false;
+ }
+
+ /**
+ * Load template's source from files 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->exists) {
+ throw new SmartyException("Unable to load template '{$source->type}:{$source->name}'");
+ }
+ $_components = array_reverse($source->components);
+ $_content = '';
+ /* @var \Smarty_Template_Source $_s */
+ foreach ($_components as $_s) {
+ // read content
+ $_content .= $_s->getContent();
+ }
+ return $_content;
+ }
+
+ /**
+ * Determine basename for compiled filename
+ *
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
+ */
+ public function getBasename(Smarty_Template_Source $source)
+ {
+ return str_replace(':', '.', basename($source->filepath));
+ }
+
+ /*
+ * Disable timestamp checks for extends resource.
+ * The individual source components will be checked.
+ *
+ * @return bool
+ */
+ /**
+ * @return bool
+ */
+ public function checkTimestamps()
+ {
+ return false;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_file.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_file.php
new file mode 100644
index 0000000..ae20606
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_file.php
@@ -0,0 +1,180 @@
+filepath = $this->buildFilepath($source, $_template);
+ if ($source->filepath !== false) {
+ if (isset($source->smarty->security_policy) && is_object($source->smarty->security_policy)) {
+ $source->smarty->security_policy->isTrustedResourceDir($source->filepath, $source->isConfig);
+ }
+ $source->exists = true;
+ $source->uid = sha1(
+ $source->filepath . ($source->isConfig ? $source->smarty->_joined_config_dir :
+ $source->smarty->_joined_template_dir)
+ );
+ $source->timestamp = filemtime($source->filepath);
+ } else {
+ $source->timestamp = $source->exists = false;
+ }
+ }
+
+ /**
+ * populate Source Object with timestamp and exists from Resource
+ *
+ * @param Smarty_Template_Source $source source object
+ */
+ public function populateTimestamp(Smarty_Template_Source $source)
+ {
+ if (!$source->exists) {
+ $source->timestamp = $source->exists = is_file($source->filepath);
+ }
+ if ($source->exists) {
+ $source->timestamp = filemtime($source->filepath);
+ }
+ }
+
+ /**
+ * 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->exists) {
+ return file_get_contents($source->filepath);
+ }
+ throw new SmartyException(
+ 'Unable to read ' . ($source->isConfig ? 'config' : '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)
+ {
+ return basename($source->filepath);
+ }
+
+ /**
+ * 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
+ */
+ protected function buildFilepath(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
+ {
+ $file = $source->name;
+ // absolute file ?
+ if ($file[ 0 ] === '/' || $file[ 1 ] === ':') {
+ $file = $source->smarty->_realpath($file, true);
+ return is_file($file) ? $file : false;
+ }
+ // go relative to a given template?
+ if ($file[ 0 ] === '.' && $_template && $_template->_isSubTpl()
+ && preg_match('#^[.]{1,2}[\\\/]#', $file)
+ ) {
+ if ($_template->parent->source->type !== 'file' && $_template->parent->source->type !== 'extends'
+ && !isset($_template->parent->_cache[ 'allow_relative_path' ])
+ ) {
+ throw new SmartyException("Template '{$file}' cannot be relative to template of resource type '{$_template->parent->source->type}'");
+ }
+ // normalize path
+ $path =
+ $source->smarty->_realpath(dirname($_template->parent->source->filepath) . DIRECTORY_SEPARATOR . $file);
+ // files relative to a template only get one shot
+ return is_file($path) ? $path : false;
+ }
+ // normalize DIRECTORY_SEPARATOR
+ if (strpos($file, DIRECTORY_SEPARATOR === '/' ? '\\' : '/') !== false) {
+ $file = str_replace(DIRECTORY_SEPARATOR === '/' ? '\\' : '/', DIRECTORY_SEPARATOR, $file);
+ }
+ $_directories = $source->smarty->getTemplateDir(null, $source->isConfig);
+ // template_dir index?
+ if ($file[ 0 ] === '[' && preg_match('#^\[([^\]]+)\](.+)$#', $file, $fileMatch)) {
+ $file = $fileMatch[ 2 ];
+ $_indices = explode(',', $fileMatch[ 1 ]);
+ $_index_dirs = array();
+ foreach ($_indices as $index) {
+ $index = trim($index);
+ // try string indexes
+ if (isset($_directories[ $index ])) {
+ $_index_dirs[] = $_directories[ $index ];
+ } elseif (is_numeric($index)) {
+ // try numeric index
+ $index = (int)$index;
+ if (isset($_directories[ $index ])) {
+ $_index_dirs[] = $_directories[ $index ];
+ } else {
+ // try at location index
+ $keys = array_keys($_directories);
+ if (isset($_directories[ $keys[ $index ] ])) {
+ $_index_dirs[] = $_directories[ $keys[ $index ] ];
+ }
+ }
+ }
+ }
+ if (empty($_index_dirs)) {
+ // index not found
+ return false;
+ } else {
+ $_directories = $_index_dirs;
+ }
+ }
+ // relative file name?
+ foreach ($_directories as $_directory) {
+ $path = $_directory . $file;
+ if (is_file($path)) {
+ return (strpos($path, '.' . DIRECTORY_SEPARATOR) !== false) ? $source->smarty->_realpath($path) : $path;
+ }
+ }
+ if (!isset($_index_dirs)) {
+ // Could be relative to cwd
+ $path = $source->smarty->_realpath($file, true);
+ if (is_file($path)) {
+ return $path;
+ }
+ }
+ // Use include path ?
+ if ($source->smarty->use_include_path) {
+ return $source->smarty->ext->_getIncludePath->getIncludePath($_directories, $file, $source->smarty);
+ }
+ return false;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_php.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_php.php
new file mode 100644
index 0000000..9d98ae1
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_php.php
@@ -0,0 +1,116 @@
+short_open_tag = function_exists('ini_get') ? ini_get('short_open_tag') : 1;
+ }
+
+ /**
+ * 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->exists) {
+ return '';
+ }
+ throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
+ }
+
+ /**
+ * populate compiled object with compiled filepath
+ *
+ * @param Smarty_Template_Compiled $compiled compiled object
+ * @param Smarty_Internal_Template $_template template object (is ignored)
+ */
+ public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template)
+ {
+ $compiled->filepath = $_template->source->filepath;
+ $compiled->timestamp = $_template->source->timestamp;
+ $compiled->exists = $_template->source->exists;
+ $compiled->file_dependency[ $_template->source->uid ] =
+ array(
+ $compiled->filepath,
+ $compiled->timestamp,
+ $_template->source->type,
+ );
+ }
+
+ /**
+ * Render and output the template (without using the compiler)
+ *
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return void
+ * @throws SmartyException if template cannot be loaded or allow_php_templates is disabled
+ */
+ public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template)
+ {
+ if (!$source->smarty->allow_php_templates) {
+ throw new SmartyException('PHP templates are disabled');
+ }
+ if (!$source->exists) {
+ throw new SmartyException(
+ "Unable to load template '{$source->type}:{$source->name}'" .
+ ($_template->_isSubTpl() ? " in '{$_template->parent->template_resource}'" : '')
+ );
+ }
+ // prepare variables
+ extract($_template->getTemplateVars());
+ // include PHP template with short open tags enabled
+ if (function_exists('ini_set')) {
+ ini_set('short_open_tag', '1');
+ }
+ /**
+ *
+ *
+ * @var Smarty_Internal_Template $_smarty_template
+ * used in included file
+ */
+ $_smarty_template = $_template;
+ include $source->filepath;
+ if (function_exists('ini_set')) {
+ ini_set('short_open_tag', $this->short_open_tag);
+ }
+ }
+}
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_resource_registered.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_registered.php
similarity index 61%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_resource_registered.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_registered.php
index 44497b9..df52610 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_resource_registered.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_registered.php
@@ -2,44 +2,43 @@
/**
* Smarty Internal Plugin Resource Registered
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
/**
* Smarty Internal Plugin Resource Registered
- *
* Implements the registered resource for Smarty template
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
* @deprecated
*/
-class Smarty_Internal_Resource_Registered extends Smarty_Resource {
-
+class Smarty_Internal_Resource_Registered extends Smarty_Resource
+{
/**
* populate Source Object with meta data from Resource
*
* @param Smarty_Template_Source $source source object
* @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
$source->filepath = $source->type . ':' . $source->name;
- $source->uid = sha1($source->filepath);
- if ($source->smarty->compile_check) {
- $source->timestamp = $this->getTemplateTimestamp($source);
- $source->exists = !!$source->timestamp;
- }
+ $source->uid = sha1($source->filepath . $source->smarty->_joined_template_dir);
+ $source->timestamp = $this->getTemplateTimestamp($source);
+ $source->exists = !!$source->timestamp;
}
/**
* populate Source Object with timestamp and exists from Resource
*
* @param Smarty_Template_Source $source source object
+ *
* @return void
*/
public function populateTimestamp(Smarty_Template_Source $source)
@@ -52,44 +51,51 @@ class Smarty_Internal_Resource_Registered extends Smarty_Resource {
* Get timestamp (epoch) the template source was modified
*
* @param Smarty_Template_Source $source source object
- * @return integer|boolean timestamp (epoch) the template was modified, false if resources has no timestamp
+ *
+ * @return integer|boolean timestamp (epoch) the template was modified, false if resources has no timestamp
*/
public function getTemplateTimestamp(Smarty_Template_Source $source)
{
// return timestamp
$time_stamp = false;
- call_user_func_array($source->smarty->registered_resources[$source->type][0][1], array($source->name, &$time_stamp, $source->smarty));
- return is_numeric($time_stamp) ? (int) $time_stamp : $time_stamp;
+ call_user_func_array(
+ $source->smarty->registered_resources[ $source->type ][ 0 ][ 1 ],
+ array($source->name, &$time_stamp, $source->smarty)
+ );
+ return is_numeric($time_stamp) ? (int)$time_stamp : $time_stamp;
}
/**
* Load template's source by invoking the registered callback into current template object
*
* @param Smarty_Template_Source $source source object
- * @return string template source
- * @throws SmartyException if source cannot be loaded
+ *
+ * @return string template source
+ * @throws SmartyException if source cannot be loaded
*/
public function getContent(Smarty_Template_Source $source)
{
// return template string
- $t = call_user_func_array($source->smarty->registered_resources[$source->type][0][0], array($source->name, &$source->content, $source->smarty));
+ $content = null;
+ $t = call_user_func_array(
+ $source->smarty->registered_resources[ $source->type ][ 0 ][ 0 ],
+ array($source->name, &$content, $source->smarty)
+ );
if (is_bool($t) && !$t) {
throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
}
- return $source->content;
+ return $content;
}
/**
* Determine basename for compiled filename
*
* @param Smarty_Template_Source $source source object
- * @return string resource's basename
+ *
+ * @return string resource's basename
*/
- protected function getBasename(Smarty_Template_Source $source)
+ public function getBasename(Smarty_Template_Source $source)
{
return basename($source->name);
}
-
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_resource_stream.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_stream.php
similarity index 68%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_resource_stream.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_stream.php
index 85698c2..9956bd0 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_resource_stream.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_stream.php
@@ -1,48 +1,50 @@
filepath = str_replace(':', '://', $source->resource);
+ if (strpos($source->resource, '://') !== false) {
+ $source->filepath = $source->resource;
+ } else {
+ $source->filepath = str_replace(':', '://', $source->resource);
+ }
$source->uid = false;
$source->content = $this->getContent($source);
- $source->timestamp = false;
- $source->exists = !!$source->content;
+ $source->timestamp = $source->exists = !!$source->content;
}
/**
* Load template's source from stream 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)
{
@@ -59,18 +61,18 @@ class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled {
return false;
}
}
-
+
/**
* modify resource_name according to resource handlers specifications
*
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
+ * @param Smarty $smarty Smarty instance
+ * @param string $resource_name resource_name to make unique
+ * @param boolean $isConfig flag for config resource
+ *
* @return string unique resource name
*/
- protected function buildUniqueResourceName(Smarty $smarty, $resource_name)
+ public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
{
return get_class($this) . '#' . $resource_name;
}
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_resource_string.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_string.php
similarity index 63%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_resource_string.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_string.php
index 9571337..3fecbb7 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_internal_resource_string.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_string.php
@@ -2,54 +2,55 @@
/**
* Smarty Internal Plugin Resource String
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author Uwe Tews
+ * @author Rodney Rehm
*/
/**
* Smarty Internal Plugin Resource String
- *
* Implements the strings as resource for Smarty template
- *
* {@internal unlike eval-resources the compiled state of string-resources is saved for subsequent access}}
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-class Smarty_Internal_Resource_String extends Smarty_Resource {
-
+class Smarty_Internal_Resource_String extends Smarty_Resource
+{
/**
* populate Source Object with meta data from Resource
*
* @param Smarty_Template_Source $source source object
* @param Smarty_Internal_Template $_template template object
+ *
* @return void
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
- $source->uid = $source->filepath = sha1($source->name);
- $source->timestamp = 0;
- $source->exists = true;
+ $source->uid = $source->filepath = sha1($source->name . $source->smarty->_joined_template_dir);
+ $source->timestamp = $source->exists = true;
}
/**
* Load template's source from $resource_name into current template object
*
* @uses decode() to decode base64 and urlencoded template_resources
+ *
* @param Smarty_Template_Source $source source object
- * @return string template source
+ *
+ * @return string template source
*/
public function getContent(Smarty_Template_Source $source)
{
return $this->decode($source->name);
}
-
+
/**
* decode base64 and urlencode
*
* @param string $string template_resource to decode
+ *
* @return string decoded template_resource
*/
protected function decode($string)
@@ -62,35 +63,46 @@ class Smarty_Internal_Resource_String extends Smarty_Resource {
return urldecode(substr($string, 10));
}
}
-
return $string;
}
-
+
/**
* modify resource_name according to resource handlers specifications
*
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
+ * @param Smarty $smarty Smarty instance
+ * @param string $resource_name resource_name to make unique
+ * @param boolean $isConfig flag for config resource
+ *
* @return string unique resource name
*/
- protected function buildUniqueResourceName(Smarty $smarty, $resource_name)
+ public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
{
- return get_class($this) . '#' .$this->decode($resource_name);
+ return get_class($this) . '#' . $this->decode($resource_name);
}
/**
* Determine basename for compiled filename
- *
* Always returns an empty string.
*
* @param Smarty_Template_Source $source source object
- * @return string resource's basename
+ *
+ * @return string resource's basename
*/
- protected function getBasename(Smarty_Template_Source $source)
+ public function getBasename(Smarty_Template_Source $source)
{
return '';
}
+ /*
+ * Disable timestamp checks for string resource.
+ *
+ * @return bool
+ */
+ /**
+ * @return bool
+ */
+ public function checkTimestamps()
+ {
+ return false;
+ }
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_cachemodify.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_cachemodify.php
new file mode 100644
index 0000000..6e12d2a
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_cachemodify.php
@@ -0,0 +1,68 @@
+isCached() && !$_template->compiled->has_nocache_code;
+ $_last_modified_date =
+ @substr($_SERVER[ 'HTTP_IF_MODIFIED_SINCE' ], 0, strpos($_SERVER[ 'HTTP_IF_MODIFIED_SINCE' ], 'GMT') + 3);
+ if ($_isCached && $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:
+ if (/* ^phpunit */
+ !empty($_SERVER[ 'SMARTY_PHPUNIT_DISABLE_HEADERS' ]) /* phpunit$ */
+ ) {
+ $_SERVER[ 'SMARTY_PHPUNIT_HEADERS' ][] = '304 Not Modified';
+ } else {
+ 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', $cached->timestamp) . ' GMT';
+ }
+ break;
+ default:
+ header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $cached->timestamp) . ' GMT');
+ break;
+ }
+ echo $content;
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php
new file mode 100644
index 0000000..2870964
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php
@@ -0,0 +1,139 @@
+use_sub_dirs ? '/' : '^';
+ $_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0;
+ $_dir = $smarty->getCacheDir();
+ if ($_dir === '/') { //We should never want to delete this!
+ return 0;
+ }
+ $_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 . '/';
+ }
+ }
+ }
+ if (isset($resource_name)) {
+ $_save_stat = $smarty->caching;
+ $smarty->caching = Smarty::CACHING_LIFETIME_CURRENT;
+ $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 ($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) === '.') {
+ continue;
+ }
+ $_filepath = (string)$_file;
+ // directory ?
+ if ($_file->isDir()) {
+ if (!$_cache->isDot()) {
+ // delete folder if empty
+ @rmdir($_file->getPathname());
+ }
+ } else {
+ // delete only php files
+ if (substr($_filepath, -4) !== '.php') {
+ continue;
+ }
+ $_parts = explode($_dir_sep, str_replace('\\', '/', substr($_filepath, $_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;
+ }
+ }
+ }
+ if (is_file($_filepath)) {
+ // expired ?
+ if (isset($exp_time)) {
+ if ($exp_time < 0) {
+ preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_filepath), $match);
+ if ($_time < (filemtime($_filepath) + $match[ 1 ])) {
+ continue;
+ }
+ } else {
+ if ($_time - filemtime($_filepath) < $exp_time) {
+ continue;
+ }
+ }
+ }
+ $_count += @unlink($_filepath) ? 1 : 0;
+ if (function_exists('opcache_invalidate')
+ && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1)
+ ) {
+ opcache_invalidate($_filepath, true);
+ } elseif (function_exists('apc_delete_file')) {
+ apc_delete_file($_filepath);
+ }
+ }
+ }
+ }
+ }
+ return $_count;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_capture.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_capture.php
new file mode 100644
index 0000000..c9dca83
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_capture.php
@@ -0,0 +1,174 @@
+isRegistered) {
+ $this->register($_template);
+ }
+ $this->captureStack[] = array(
+ $buffer,
+ $assign,
+ $append
+ );
+ $this->captureCount++;
+ ob_start();
+ }
+
+ /**
+ * Register callbacks in template class
+ *
+ * @param \Smarty_Internal_Template $_template
+ */
+ private function register(Smarty_Internal_Template $_template)
+ {
+ $_template->startRenderCallbacks[] = array(
+ $this,
+ 'startRender'
+ );
+ $_template->endRenderCallbacks[] = array(
+ $this,
+ 'endRender'
+ );
+ $this->startRender($_template);
+ $this->isRegistered = true;
+ }
+
+ /**
+ * Start render callback
+ *
+ * @param \Smarty_Internal_Template $_template
+ */
+ public function startRender(Smarty_Internal_Template $_template)
+ {
+ $this->countStack[] = $this->captureCount;
+ $this->captureCount = 0;
+ }
+
+ /**
+ * Close capture section
+ *
+ * @param \Smarty_Internal_Template $_template
+ *
+ * @throws \SmartyException
+ */
+ public function close(Smarty_Internal_Template $_template)
+ {
+ if ($this->captureCount) {
+ list($buffer, $assign, $append) = array_pop($this->captureStack);
+ $this->captureCount--;
+ if (isset($assign)) {
+ $_template->assign($assign, ob_get_contents());
+ }
+ if (isset($append)) {
+ $_template->append($append, ob_get_contents());
+ }
+ $this->namedBuffer[ $buffer ] = ob_get_clean();
+ } else {
+ $this->error($_template);
+ }
+ }
+
+ /**
+ * Error exception on not matching {capture}{/capture}
+ *
+ * @param \Smarty_Internal_Template $_template
+ *
+ * @throws \SmartyException
+ */
+ public function error(Smarty_Internal_Template $_template)
+ {
+ throw new SmartyException("Not matching {capture}{/capture} in '{$_template->template_resource}'");
+ }
+
+ /**
+ * Return content of named capture buffer by key or as array
+ *
+ * @param \Smarty_Internal_Template $_template
+ * @param string|null $name
+ *
+ * @return string|string[]|null
+ */
+ public function getBuffer(Smarty_Internal_Template $_template, $name = null)
+ {
+ if (isset($name)) {
+ return isset($this->namedBuffer[ $name ]) ? $this->namedBuffer[ $name ] : null;
+ } else {
+ return $this->namedBuffer;
+ }
+ }
+
+ /**
+ * End render callback
+ *
+ * @param \Smarty_Internal_Template $_template
+ *
+ * @throws \SmartyException
+ */
+ public function endRender(Smarty_Internal_Template $_template)
+ {
+ if ($this->captureCount) {
+ $this->error($_template);
+ } else {
+ $this->captureCount = array_pop($this->countStack);
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_codeframe.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_codeframe.php
new file mode 100644
index 0000000..4a7781c
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_codeframe.php
@@ -0,0 +1,103 @@
+compiled->has_nocache_code;
+ $properties[ 'file_dependency' ] = $_template->compiled->file_dependency;
+ $properties[ 'includes' ] = $_template->compiled->includes;
+ } else {
+ $properties[ 'has_nocache_code' ] = $_template->cached->has_nocache_code;
+ $properties[ 'file_dependency' ] = $_template->cached->file_dependency;
+ $properties[ 'cache_lifetime' ] = $_template->cache_lifetime;
+ }
+ $output = sprintf(
+ "source->filepath)
+ );
+ $output .= "/* @var Smarty_Internal_Template \$_smarty_tpl */\n";
+ $dec = "\$_smarty_tpl->_decodeProperties(\$_smarty_tpl, " . var_export($properties, true) . ',' .
+ ($cache ? 'true' : 'false') . ')';
+ $output .= "if ({$dec}) {\n";
+ $output .= "function {$properties['unifunc']} (Smarty_Internal_Template \$_smarty_tpl) {\n";
+ if (!$cache && !empty($compiler->tpl_function)) {
+ $output .= '$_smarty_tpl->smarty->ext->_tplFunction->registerTplFunctions($_smarty_tpl, ';
+ $output .= var_export($compiler->tpl_function, true);
+ $output .= ");\n";
+ }
+ if ($cache && isset($_template->smarty->ext->_tplFunction)) {
+ $output .= "\$_smarty_tpl->smarty->ext->_tplFunction->registerTplFunctions(\$_smarty_tpl, " .
+ var_export($_template->smarty->ext->_tplFunction->getTplFunction($_template), true) . ");\n";
+ }
+ $output .= "?>";
+ $output .= $content;
+ $output .= "";
+ $output .= $functions;
+ $output .= "[\n]?<\?php\s*/', $output)) {
+ $curr_split = preg_split(
+ '/\s*\?>[\n]?<\?php\s*/',
+ $output
+ );
+ preg_match_all(
+ '/\s*\?>[\n]?<\?php\s*/',
+ $output,
+ $curr_parts
+ );
+ $output = '';
+ foreach ($curr_split as $idx => $curr_output) {
+ $output .= $curr_output;
+ if (isset($curr_parts[ 0 ][ $idx ])) {
+ $output .= "\n";
+ }
+ }
+ }
+ if (preg_match('/\?>\s*$/', $output)) {
+ $curr_split = preg_split(
+ '/\?>\s*$/',
+ $output
+ );
+ $output = '';
+ foreach ($curr_split as $idx => $curr_output) {
+ $output .= $curr_output;
+ }
+ }
+ return $output;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_filterhandler.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_filterhandler.php
new file mode 100644
index 0000000..9f868e1
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_filterhandler.php
@@ -0,0 +1,69 @@
+smarty->autoload_filters[ $type ])) {
+ foreach ((array)$template->smarty->autoload_filters[ $type ] as $name) {
+ $plugin_name = "Smarty_{$type}filter_{$name}";
+ if (function_exists($plugin_name)) {
+ $callback = $plugin_name;
+ } elseif (class_exists($plugin_name, false) && is_callable(array($plugin_name, 'execute'))) {
+ $callback = array($plugin_name, 'execute');
+ } elseif ($template->smarty->loadPlugin($plugin_name, false)) {
+ if (function_exists($plugin_name)) {
+ // use loaded Smarty2 style plugin
+ $callback = $plugin_name;
+ } elseif (class_exists($plugin_name, false) && is_callable(array($plugin_name, 'execute'))) {
+ // loaded class of filter plugin
+ $callback = array($plugin_name, 'execute');
+ } else {
+ throw new SmartyException("Auto load {$type}-filter plugin method '{$plugin_name}::execute' not callable");
+ }
+ } else {
+ // nothing found, throw exception
+ throw new SmartyException("Unable to auto load {$type}-filter plugin '{$plugin_name}'");
+ }
+ $content = call_user_func($callback, $content, $template);
+ }
+ }
+ // loop over registered filters of specified type
+ if (!empty($template->smarty->registered_filters[ $type ])) {
+ foreach ($template->smarty->registered_filters[ $type ] as $key => $name) {
+ $content = call_user_func($template->smarty->registered_filters[ $type ][ $key ], $content, $template);
+ }
+ }
+ // return filtered output
+ return $content;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_foreach.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_foreach.php
new file mode 100644
index 0000000..badead1
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_foreach.php
@@ -0,0 +1,162 @@
+count($from);
+ }
+ } else {
+ settype($from, 'array');
+ }
+ }
+ if (!isset($total)) {
+ $total = empty($from) ? 0 : ($needTotal ? count($from) : 1);
+ }
+ if (isset($tpl->tpl_vars[ $item ])) {
+ $saveVars[ 'item' ] = array(
+ $item,
+ $tpl->tpl_vars[ $item ]
+ );
+ }
+ $tpl->tpl_vars[ $item ] = new Smarty_Variable(null, $tpl->isRenderingCache);
+ if ($total === 0) {
+ $from = null;
+ } else {
+ if ($key) {
+ if (isset($tpl->tpl_vars[ $key ])) {
+ $saveVars[ 'key' ] = array(
+ $key,
+ $tpl->tpl_vars[ $key ]
+ );
+ }
+ $tpl->tpl_vars[ $key ] = new Smarty_Variable(null, $tpl->isRenderingCache);
+ }
+ }
+ if ($needTotal) {
+ $tpl->tpl_vars[ $item ]->total = $total;
+ }
+ if ($name) {
+ $namedVar = "__smarty_foreach_{$name}";
+ if (isset($tpl->tpl_vars[ $namedVar ])) {
+ $saveVars[ 'named' ] = array(
+ $namedVar,
+ $tpl->tpl_vars[ $namedVar ]
+ );
+ }
+ $namedProp = array();
+ if (isset($properties[ 'total' ])) {
+ $namedProp[ 'total' ] = $total;
+ }
+ if (isset($properties[ 'iteration' ])) {
+ $namedProp[ 'iteration' ] = 0;
+ }
+ if (isset($properties[ 'index' ])) {
+ $namedProp[ 'index' ] = -1;
+ }
+ if (isset($properties[ 'show' ])) {
+ $namedProp[ 'show' ] = ($total > 0);
+ }
+ $tpl->tpl_vars[ $namedVar ] = new Smarty_Variable($namedProp);
+ }
+ $this->stack[] = $saveVars;
+ return $from;
+ }
+
+ /**
+ * [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 ($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 $value instanceof Generator ? 1 : iterator_count($value);
+ } elseif ($value instanceof Countable) {
+ return count($value);
+ } elseif ($value instanceof PDOStatement) {
+ return $value->rowCount();
+ } elseif ($value instanceof Traversable) {
+ return iterator_count($value);
+ }
+ return count((array)$value);
+ }
+
+ /**
+ * Restore saved variables
+ *
+ * will be called by {break n} or {continue n} for the required number of levels
+ *
+ * @param \Smarty_Internal_Template $tpl
+ * @param int $levels number of levels
+ */
+ public function restore(Smarty_Internal_Template $tpl, $levels = 1)
+ {
+ while ($levels) {
+ $saveVars = array_pop($this->stack);
+ if (!empty($saveVars)) {
+ if (isset($saveVars[ 'item' ])) {
+ $item = &$saveVars[ 'item' ];
+ $tpl->tpl_vars[ $item[ 0 ] ]->value = $item[ 1 ]->value;
+ }
+ if (isset($saveVars[ 'key' ])) {
+ $tpl->tpl_vars[ $saveVars[ 'key' ][ 0 ] ] = $saveVars[ 'key' ][ 1 ];
+ }
+ if (isset($saveVars[ 'named' ])) {
+ $tpl->tpl_vars[ $saveVars[ 'named' ][ 0 ] ] = $saveVars[ 'named' ][ 1 ];
+ }
+ }
+ $levels--;
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_getincludepath.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_getincludepath.php
new file mode 100644
index 0000000..5ae9830
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_getincludepath.php
@@ -0,0 +1,181 @@
+_include_path !== $_i_path) {
+ $this->_include_dirs = array();
+ $this->_include_path = $_i_path;
+ $_dirs = (array)explode(PATH_SEPARATOR, $_i_path);
+ foreach ($_dirs as $_path) {
+ if (is_dir($_path)) {
+ $this->_include_dirs[] = $smarty->_realpath($_path . DIRECTORY_SEPARATOR, true);
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * return array with include path directories
+ *
+ * @param \Smarty $smarty
+ *
+ * @return array
+ */
+ public function getIncludePathDirs(Smarty $smarty)
+ {
+ $this->isNewIncludePath($smarty);
+ return $this->_include_dirs;
+ }
+
+ /**
+ * Return full file path from PHP include_path
+ *
+ * @param string[] $dirs
+ * @param string $file
+ * @param \Smarty $smarty
+ *
+ * @return bool|string full filepath or false
+ */
+ public function getIncludePath($dirs, $file, Smarty $smarty)
+ {
+ //if (!(isset($this->_has_stream_include) ? $this->_has_stream_include : $this->_has_stream_include = false)) {
+ if (!(isset($this->_has_stream_include) ? $this->_has_stream_include :
+ $this->_has_stream_include = function_exists('stream_resolve_include_path'))
+ ) {
+ $this->isNewIncludePath($smarty);
+ }
+ // try PHP include_path
+ foreach ($dirs as $dir) {
+ $dir_n = isset($this->number[ $dir ]) ? $this->number[ $dir ] : $this->number[ $dir ] = $this->counter++;
+ if (isset($this->isFile[ $dir_n ][ $file ])) {
+ if ($this->isFile[ $dir_n ][ $file ]) {
+ return $this->isFile[ $dir_n ][ $file ];
+ } else {
+ continue;
+ }
+ }
+ if (isset($this->_user_dirs[ $dir_n ])) {
+ if (false === $this->_user_dirs[ $dir_n ]) {
+ continue;
+ } else {
+ $dir = $this->_user_dirs[ $dir_n ];
+ }
+ } else {
+ if ($dir[ 0 ] === '/' || $dir[ 1 ] === ':') {
+ $dir = str_ireplace(getcwd(), '.', $dir);
+ if ($dir[ 0 ] === '/' || $dir[ 1 ] === ':') {
+ $this->_user_dirs[ $dir_n ] = false;
+ continue;
+ }
+ }
+ $dir = substr($dir, 2);
+ $this->_user_dirs[ $dir_n ] = $dir;
+ }
+ if ($this->_has_stream_include) {
+ $path = stream_resolve_include_path($dir . (isset($file) ? $file : ''));
+ if ($path) {
+ return $this->isFile[ $dir_n ][ $file ] = $path;
+ }
+ } else {
+ foreach ($this->_include_dirs as $key => $_i_path) {
+ $path = isset($this->isPath[ $key ][ $dir_n ]) ? $this->isPath[ $key ][ $dir_n ] :
+ $this->isPath[ $key ][ $dir_n ] = is_dir($_dir_path = $_i_path . $dir) ? $_dir_path : false;
+ if ($path === false) {
+ continue;
+ }
+ if (isset($file)) {
+ $_file = $this->isFile[ $dir_n ][ $file ] = (is_file($path . $file)) ? $path . $file : false;
+ if ($_file) {
+ return $_file;
+ }
+ } else {
+ // no file was given return directory path
+ return $path;
+ }
+ }
+ }
+ }
+ return false;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_inheritance.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_inheritance.php
new file mode 100644
index 0000000..8f7f02d
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_inheritance.php
@@ -0,0 +1,251 @@
+state === 3 && (strpos($tpl->template_resource, 'extendsall') === false)) {
+ $tpl->inheritance = new Smarty_Internal_Runtime_Inheritance();
+ $tpl->inheritance->init($tpl, $initChild, $blockNames);
+ return;
+ }
+ ++$this->tplIndex;
+ $this->sources[ $this->tplIndex ] = $tpl->source;
+ // start of child sub template(s)
+ if ($initChild) {
+ $this->state = 1;
+ if (!$this->inheritanceLevel) {
+ //grab any output of child templates
+ ob_start();
+ }
+ ++$this->inheritanceLevel;
+ // $tpl->startRenderCallbacks[ 'inheritance' ] = array($this, 'subTemplateStart');
+ // $tpl->endRenderCallbacks[ 'inheritance' ] = array($this, 'subTemplateEnd');
+ }
+ // if state was waiting for parent change state to parent
+ if ($this->state === 2) {
+ $this->state = 3;
+ }
+ }
+
+ /**
+ * End of child template(s)
+ * - if outer level is reached flush output buffer and switch to wait for parent template state
+ *
+ * @param \Smarty_Internal_Template $tpl
+ * @param null|string $template optional name of inheritance parent template
+ * @param null|string $uid uid of inline template
+ * @param null|string $func function call name of inline template
+ *
+ * @throws \Exception
+ * @throws \SmartyException
+ */
+ public function endChild(Smarty_Internal_Template $tpl, $template = null, $uid = null, $func = null)
+ {
+ --$this->inheritanceLevel;
+ if (!$this->inheritanceLevel) {
+ ob_end_clean();
+ $this->state = 2;
+ }
+ if (isset($template) && (($tpl->parent->_isTplObj() && $tpl->parent->source->type !== 'extends')
+ || $tpl->smarty->extends_recursion)
+ ) {
+ $tpl->_subTemplateRender(
+ $template,
+ $tpl->cache_id,
+ $tpl->compile_id,
+ $tpl->caching ? 9999 : 0,
+ $tpl->cache_lifetime,
+ array(),
+ 2,
+ false,
+ $uid,
+ $func
+ );
+ }
+ }
+
+ /**
+ * Smarty_Internal_Block constructor.
+ * - if outer level {block} of child template ($state === 1) save it as child root block
+ * - otherwise process inheritance and render
+ *
+ * @param \Smarty_Internal_Template $tpl
+ * @param $className
+ * @param string $name
+ * @param int|null $tplIndex index of outer level {block} if nested
+ *
+ * @throws \SmartyException
+ */
+ public function instanceBlock(Smarty_Internal_Template $tpl, $className, $name, $tplIndex = null)
+ {
+ $block = new $className($name, isset($tplIndex) ? $tplIndex : $this->tplIndex);
+ if (isset($this->childRoot[ $name ])) {
+ $block->child = $this->childRoot[ $name ];
+ }
+ if ($this->state === 1) {
+ $this->childRoot[ $name ] = $block;
+ return;
+ }
+ // make sure we got child block of child template of current block
+ while ($block->child && $block->child->child && $block->tplIndex <= $block->child->tplIndex) {
+ $block->child = $block->child->child;
+ }
+ $this->process($tpl, $block);
+ }
+
+ /**
+ * Goto child block or render this
+ *
+ * @param \Smarty_Internal_Template $tpl
+ * @param \Smarty_Internal_Block $block
+ * @param \Smarty_Internal_Block|null $parent
+ *
+ * @throws \SmartyException
+ */
+ public function process(
+ Smarty_Internal_Template $tpl,
+ Smarty_Internal_Block $block,
+ Smarty_Internal_Block $parent = null
+ ) {
+ if ($block->hide && !isset($block->child)) {
+ return;
+ }
+ if (isset($block->child) && $block->child->hide && !isset($block->child->child)) {
+ $block->child = null;
+ }
+ $block->parent = $parent;
+ if ($block->append && !$block->prepend && isset($parent)) {
+ $this->callParent($tpl, $block, '\'{block append}\'');
+ }
+ if ($block->callsChild || !isset($block->child) || ($block->child->hide && !isset($block->child->child))) {
+ $this->callBlock($block, $tpl);
+ } else {
+ $this->process($tpl, $block->child, $block);
+ }
+ if ($block->prepend && isset($parent)) {
+ $this->callParent($tpl, $block, '{block prepend}');
+ if ($block->append) {
+ if ($block->callsChild || !isset($block->child)
+ || ($block->child->hide && !isset($block->child->child))
+ ) {
+ $this->callBlock($block, $tpl);
+ } else {
+ $this->process($tpl, $block->child, $block);
+ }
+ }
+ }
+ $block->parent = null;
+ }
+
+ /**
+ * Render child on \$smarty.block.child
+ *
+ * @param \Smarty_Internal_Template $tpl
+ * @param \Smarty_Internal_Block $block
+ *
+ * @return null|string block content
+ * @throws \SmartyException
+ */
+ public function callChild(Smarty_Internal_Template $tpl, Smarty_Internal_Block $block)
+ {
+ if (isset($block->child)) {
+ $this->process($tpl, $block->child, $block);
+ }
+ }
+
+ /**
+ * Render parent block on \$smarty.block.parent or {block append/prepend}
+ *
+ * @param \Smarty_Internal_Template $tpl
+ * @param \Smarty_Internal_Block $block
+ * @param string $tag
+ *
+ * @return null|string block content
+ * @throws \SmartyException
+ */
+ public function callParent(Smarty_Internal_Template $tpl, Smarty_Internal_Block $block, $tag)
+ {
+ if (isset($block->parent)) {
+ $this->callBlock($block->parent, $tpl);
+ } else {
+ throw new SmartyException("inheritance: illegal '{$tag}' used in child template '{$tpl->inheritance->sources[$block->tplIndex]->filepath}' block '{$block->name}'");
+ }
+ }
+
+ /**
+ * render block
+ *
+ * @param \Smarty_Internal_Block $block
+ * @param \Smarty_Internal_Template $tpl
+ */
+ public function callBlock(Smarty_Internal_Block $block, Smarty_Internal_Template $tpl)
+ {
+ $this->sourceStack[] = $tpl->source;
+ $tpl->source = $this->sources[ $block->tplIndex ];
+ $block->callBlock($tpl);
+ $tpl->source = array_pop($this->sourceStack);
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_make_nocache.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_make_nocache.php
new file mode 100644
index 0000000..5306914
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_make_nocache.php
@@ -0,0 +1,54 @@
+tpl_vars[ $var ])) {
+ $export =
+ preg_replace('/^Smarty_Variable::__set_state[(]|[)]$/', '', var_export($tpl->tpl_vars[ $var ], true));
+ if (preg_match('/(\w+)::__set_state/', $export, $match)) {
+ throw new SmartyException("{make_nocache \${$var}} in template '{$tpl->source->name}': variable does contain object '{$match[1]}' not implementing method '__set_state'");
+ }
+ echo "/*%%SmartyNocache:{$tpl->compiled->nocache_hash}%%*/smarty->ext->_make_nocache->store(\$_smarty_tpl, '{$var}', ", '\\') .
+ $export . ");?>\n/*/%%SmartyNocache:{$tpl->compiled->nocache_hash}%%*/";
+ }
+ }
+
+ /**
+ * Store variable value saved while rendering compiled template in cached template context
+ *
+ * @param \Smarty_Internal_Template $tpl
+ * @param string $var variable name
+ * @param array $properties
+ */
+ public function store(Smarty_Internal_Template $tpl, $var, $properties)
+ {
+ // do not overwrite existing nocache variables
+ if (!isset($tpl->tpl_vars[ $var ]) || !$tpl->tpl_vars[ $var ]->nocache) {
+ $newVar = new Smarty_Variable();
+ unset($properties[ 'nocache' ]);
+ foreach ($properties as $k => $v) {
+ $newVar->$k = $v;
+ }
+ $tpl->tpl_vars[ $var ] = $newVar;
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_tplfunction.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_tplfunction.php
new file mode 100644
index 0000000..e5f8e48
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_tplfunction.php
@@ -0,0 +1,177 @@
+tplFunctions[ $name ]) ? $tpl->tplFunctions[ $name ] :
+ (isset($tpl->smarty->tplFunctions[ $name ]) ? $tpl->smarty->tplFunctions[ $name ] : null);
+ if (isset($funcParam)) {
+ if (!$tpl->caching || ($tpl->caching && $nocache)) {
+ $function = $funcParam[ 'call_name' ];
+ } else {
+ if (isset($funcParam[ 'call_name_caching' ])) {
+ $function = $funcParam[ 'call_name_caching' ];
+ } else {
+ $function = $funcParam[ 'call_name' ];
+ }
+ }
+ if (function_exists($function)) {
+ $this->saveTemplateVariables($tpl, $name);
+ $function($tpl, $params);
+ $this->restoreTemplateVariables($tpl, $name);
+ return;
+ }
+ // try to load template function dynamically
+ if ($this->addTplFuncToCache($tpl, $name, $function)) {
+ $this->saveTemplateVariables($tpl, $name);
+ $function($tpl, $params);
+ $this->restoreTemplateVariables($tpl, $name);
+ return;
+ }
+ }
+ throw new SmartyException("Unable to find template function '{$name}'");
+ }
+
+ /**
+ * Register template functions defined by template
+ *
+ * @param \Smarty|\Smarty_Internal_Template|\Smarty_Internal_TemplateBase $obj
+ * @param array $tplFunctions source information array of
+ * template functions defined
+ * in template
+ * @param bool $override if true replace existing
+ * functions with same name
+ */
+ public function registerTplFunctions(Smarty_Internal_TemplateBase $obj, $tplFunctions, $override = true)
+ {
+ $obj->tplFunctions =
+ $override ? array_merge($obj->tplFunctions, $tplFunctions) : array_merge($tplFunctions, $obj->tplFunctions);
+ // make sure that the template functions are known in parent templates
+ if ($obj->_isSubTpl()) {
+ $obj->smarty->ext->_tplFunction->registerTplFunctions($obj->parent, $tplFunctions, false);
+ } else {
+ $obj->smarty->tplFunctions = $override ? array_merge($obj->smarty->tplFunctions, $tplFunctions) :
+ array_merge($tplFunctions, $obj->smarty->tplFunctions);
+ }
+ }
+
+ /**
+ * Return source parameter array for single or all template functions
+ *
+ * @param \Smarty_Internal_Template $tpl template object
+ * @param null|string $name template function name
+ *
+ * @return array|bool|mixed
+ */
+ public function getTplFunction(Smarty_Internal_Template $tpl, $name = null)
+ {
+ if (isset($name)) {
+ return isset($tpl->tplFunctions[ $name ]) ? $tpl->tplFunctions[ $name ] :
+ (isset($tpl->smarty->tplFunctions[ $name ]) ? $tpl->smarty->tplFunctions[ $name ] : false);
+ } else {
+ return empty($tpl->tplFunctions) ? $tpl->smarty->tplFunctions : $tpl->tplFunctions;
+ }
+ }
+
+ /**
+ * Add template function to cache file for nocache calls
+ *
+ * @param Smarty_Internal_Template $tpl
+ * @param string $_name template function name
+ * @param string $_function PHP function name
+ *
+ * @return bool
+ */
+ public function addTplFuncToCache(Smarty_Internal_Template $tpl, $_name, $_function)
+ {
+ $funcParam = $tpl->tplFunctions[ $_name ];
+ if (is_file($funcParam[ 'compiled_filepath' ])) {
+ // read compiled file
+ $code = file_get_contents($funcParam[ 'compiled_filepath' ]);
+ // grab template function
+ if (preg_match("/\/\* {$_function} \*\/([\S\s]*?)\/\*\/ {$_function} \*\//", $code, $match)) {
+ // grab source info from file dependency
+ preg_match("/\s*'{$funcParam['uid']}'([\S\s]*?)\),/", $code, $match1);
+ unset($code);
+ // make PHP function known
+ eval($match[ 0 ]);
+ if (function_exists($_function)) {
+ // search cache file template
+ $tplPtr = $tpl;
+ while (!isset($tplPtr->cached) && isset($tplPtr->parent)) {
+ $tplPtr = $tplPtr->parent;
+ }
+ // add template function code to cache file
+ if (isset($tplPtr->cached)) {
+ $content = $tplPtr->cached->read($tplPtr);
+ if ($content) {
+ // check if we must update file dependency
+ if (!preg_match("/'{$funcParam['uid']}'(.*?)'nocache_hash'/", $content, $match2)) {
+ $content = preg_replace("/('file_dependency'(.*?)\()/", "\\1{$match1[0]}", $content);
+ }
+ $tplPtr->smarty->ext->_updateCache->write(
+ $tplPtr,
+ preg_replace('/\s*\?>\s*$/', "\n", $content) .
+ "\n" . preg_replace(
+ array(
+ '/^\s*<\?php\s+/',
+ '/\s*\?>\s*$/',
+ ),
+ "\n",
+ $match[ 0 ]
+ )
+ );
+ }
+ }
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Save current template variables on stack
+ *
+ * @param \Smarty_Internal_Template $tpl
+ * @param string $name stack name
+ */
+ public function saveTemplateVariables(Smarty_Internal_Template $tpl, $name)
+ {
+ $tpl->_cache[ 'varStack' ][] =
+ array('tpl' => $tpl->tpl_vars, 'config' => $tpl->config_vars, 'name' => "_tplFunction_{$name}");
+ }
+
+ /**
+ * Restore saved variables into template objects
+ *
+ * @param \Smarty_Internal_Template $tpl
+ * @param string $name stack name
+ */
+ public function restoreTemplateVariables(Smarty_Internal_Template $tpl, $name)
+ {
+ if (isset($tpl->_cache[ 'varStack' ])) {
+ $vars = array_pop($tpl->_cache[ 'varStack' ]);
+ $tpl->tpl_vars = $vars[ 'tpl' ];
+ $tpl->config_vars = $vars[ 'config' ];
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_updatecache.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_updatecache.php
new file mode 100644
index 0000000..c1abbb3
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_updatecache.php
@@ -0,0 +1,183 @@
+compiled)) {
+ $_template->loadCompiled();
+ }
+ $_template->compiled->render($_template);
+ if ($_template->smarty->debugging) {
+ $_template->smarty->_debug->start_cache($_template);
+ }
+ $this->removeNoCacheHash($cached, $_template, $no_output_filter);
+ $compile_check = (int)$_template->compile_check;
+ $_template->compile_check = Smarty::COMPILECHECK_OFF;
+ if ($_template->_isSubTpl()) {
+ $_template->compiled->unifunc = $_template->parent->compiled->unifunc;
+ }
+ if (!$_template->cached->processed) {
+ $_template->cached->process($_template, true);
+ }
+ $_template->compile_check = $compile_check;
+ $cached->getRenderedTemplateCode($_template);
+ if ($_template->smarty->debugging) {
+ $_template->smarty->_debug->end_cache($_template);
+ }
+ }
+
+ /**
+ * Sanitize content and write it to cache resource
+ *
+ * @param \Smarty_Template_Cached $cached
+ * @param Smarty_Internal_Template $_template
+ * @param bool $no_output_filter
+ *
+ * @throws \SmartyException
+ */
+ public function removeNoCacheHash(
+ Smarty_Template_Cached $cached,
+ Smarty_Internal_Template $_template,
+ $no_output_filter
+ ) {
+ $php_pattern = '/(<%|%>|<\?php|<\?|\?>|]*>)|(]*>)|(]*>.*? ]*>)#is',
+ $text,
+ $matches,
+ PREG_OFFSET_CAPTURE | PREG_SET_ORDER
+ )
+ ) {
+ foreach ($matches as $match) {
+ $store[] = $match[ 0 ][ 0 ];
+ $_length = strlen($match[ 0 ][ 0 ]);
+ $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
+ $text = substr_replace($text, $replace, $match[ 0 ][ 1 ] - $_offset, $_length);
+ $_offset += $_length - strlen($replace);
+ $_store++;
+ }
+ }
+ $expressions = array(// replace multiple spaces between tags by a single space
+ '#(:SMARTY@!@|>)[\040\011]+(?=@!@SMARTY:|<)#s' => '\1 \2',
+ // remove newline between tags
+ '#(:SMARTY@!@|>)[\040\011]*[\n]\s*(?=@!@SMARTY:|<)#s' => '\1\2',
+ // remove multiple spaces between attributes (but not in attribute values!)
+ '#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5',
+ '#>[\040\011]+$#Ss' => '> ',
+ '#>[\040\011]*[\n]\s*$#Ss' => '>',
+ $this->stripRegEx => '',
+ );
+ $text = preg_replace(array_keys($expressions), array_values($expressions), $text);
+ $_offset = 0;
+ if (preg_match_all(
+ '#@!@SMARTY:([0-9]+):SMARTY@!@#is',
+ $text,
+ $matches,
+ PREG_OFFSET_CAPTURE | PREG_SET_ORDER
+ )
+ ) {
+ foreach ($matches as $match) {
+ $_length = strlen($match[ 0 ][ 0 ]);
+ $replace = $store[ $match[ 1 ][ 0 ] ];
+ $text = substr_replace($text, $replace, $match[ 0 ][ 1 ] + $_offset, $_length);
+ $_offset += strlen($replace) - $_length;
+ $_store++;
+ }
+ }
+ return $text;
+ }
+
+ /**
+ * 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 bool|string compiled code or false
+ * @throws \SmartyCompilerException
+ */
+ public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null)
+ {
+ /* @var Smarty_Internal_CompileBase $tagCompiler */
+ $tagCompiler = $this->getTagCompiler($tag);
+ // compile this tag
+ return $tagCompiler === false ? false : $tagCompiler->compile($args, $this, $param1, $param2, $param3);
+ }
+
+ /**
+ * lazy loads internal compile plugin for tag compile objects cached for reuse.
+ *
+ * class name format: Smarty_Internal_Compile_TagName
+ * plugin filename format: Smarty_Internal_TagName.php
+ *
+ * @param string $tag tag name
+ *
+ * @return bool|\Smarty_Internal_CompileBase tag compiler object or false if not found
+ */
+ public function getTagCompiler($tag)
+ {
+ // re-use object if already exists
+ if (!isset(self::$_tag_objects[ $tag ])) {
+ // lazy load internal compiler plugin
+ $_tag = explode('_', $tag);
+ $_tag = array_map('ucfirst', $_tag);
+ $class_name = 'Smarty_Internal_Compile_' . implode('_', $_tag);
+ if (class_exists($class_name)
+ && (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))
+ ) {
+ self::$_tag_objects[ $tag ] = new $class_name;
+ } else {
+ self::$_tag_objects[ $tag ] = false;
+ }
+ }
+ return self::$_tag_objects[ $tag ];
+ }
+
+ /**
+ * Check for plugins and return function name
+ *
+ * @param $plugin_name
+ * @param string $plugin_type type of plugin
+ *
+ * @return string call name of function
+ * @throws \SmartyException
+ */
+ public function getPlugin($plugin_name, $plugin_type)
+ {
+ $function = null;
+ if ($this->caching && ($this->nocache || $this->tag_nocache)) {
+ if (isset($this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ])) {
+ $function =
+ $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ];
+ } elseif (isset($this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ])) {
+ $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ] =
+ $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ];
+ $function =
+ $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ];
+ }
+ } else {
+ if (isset($this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ])) {
+ $function =
+ $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ];
+ } elseif (isset($this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ])) {
+ $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ] =
+ $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ];
+ $function =
+ $this->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->caching && ($this->nocache || $this->tag_nocache)) {
+ $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'file' ] =
+ $file;
+ $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ] =
+ $function;
+ } else {
+ $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'file' ] =
+ $file;
+ $this->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 bool true if found
+ * @throws \SmartyCompilerException
+ */
+ 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->caching && ($this->nocache || $this->tag_nocache)) {
+ $this->required_plugins[ 'nocache' ][ $tag ][ $plugin_type ][ 'file' ] =
+ $script;
+ $this->required_plugins[ 'nocache' ][ $tag ][ $plugin_type ][ 'function' ] =
+ $callback;
+ } else {
+ $this->required_plugins[ 'compiled' ][ $tag ][ $plugin_type ][ 'file' ] =
+ $script;
+ $this->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_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;
+ }
+
+ /**
+ * Append code segments and remove unneeded ?> \s?$/D', $left) && preg_match('/^<\?php\s+/', $right)) {
+ $left = preg_replace('/\s*\?>\s?$/D', "\n", $left);
+ $left .= preg_replace('/^<\?php\s+/', '', $right);
+ } else {
+ $left .= $right;
+ }
+ return $left;
+ }
+
+ /**
+ * 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->handler->recompiled) || $this->forceNocache) && $this->caching
+ && !$this->suppressNocacheProcessing && ($this->nocache || $this->tag_nocache)
+ ) {
+ $this->template->compiled->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->required_plugins[ 'compiled' ][ $plugin_name ][ 'modifier' ])) {
+ $this->required_plugins[ 'nocache' ][ $plugin_name ][ 'modifier' ] =
+ $this->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;
+ }
+
+ /**
+ * Get Id
+ *
+ * @param string $input
+ *
+ * @return bool|string
+ */
+ public function getId($input)
+ {
+ if (preg_match('~^([\'"]*)([0-9]*[a-zA-Z_]\w*)\1$~', $input, $match)) {
+ return $match[ 2 ];
+ }
+ return false;
+ }
+
+ /**
+ * Get variable name from string
+ *
+ * @param string $input
+ *
+ * @return bool|string
+ */
+ public function getVariableName($input)
+ {
+ if (preg_match('~^[$]_smarty_tpl->tpl_vars\[[\'"]*([0-9]*[a-zA-Z_]\w*)[\'"]*\]->value$~', $input, $match)) {
+ return $match[ 1 ];
+ }
+ return false;
+ }
+
+ /**
+ * Set nocache flag in variable or create new variable
+ *
+ * @param string $varName
+ */
+ public function setNocacheInVariable($varName)
+ {
+ // create nocache var to make it know for further compiling
+ if ($_var = $this->getId($varName)) {
+ if (isset($this->template->tpl_vars[ $_var ])) {
+ $this->template->tpl_vars[ $_var ] = clone $this->template->tpl_vars[ $_var ];
+ $this->template->tpl_vars[ $_var ]->nocache = true;
+ } else {
+ $this->template->tpl_vars[ $_var ] = new Smarty_Variable(null, true);
+ }
+ }
+ }
+
+ /**
+ * @param array $_attr tag attributes
+ * @param array $validScopes
+ *
+ * @return int|string
+ * @throws \SmartyCompilerException
+ */
+ public function convertScope($_attr, $validScopes)
+ {
+ $_scope = 0;
+ if (isset($_attr[ 'scope' ])) {
+ $_scopeName = trim($_attr[ 'scope' ], '\'"');
+ if (is_numeric($_scopeName) && in_array($_scopeName, $validScopes)) {
+ $_scope = $_scopeName;
+ } elseif (is_string($_scopeName)) {
+ $_scopeName = trim($_scopeName, '\'"');
+ $_scope = isset($validScopes[ $_scopeName ]) ? $validScopes[ $_scopeName ] : false;
+ } else {
+ $_scope = false;
+ }
+ if ($_scope === false) {
+ $err = var_export($_scopeName, true);
+ $this->trigger_template_error("illegal value '{$err}' for \"scope\" attribute", null, true);
+ }
+ }
+ return $_scope;
+ }
+
+ /**
+ * Generate nocache code string
+ *
+ * @param string $code PHP code
+ *
+ * @return string
+ */
+ public function makeNocacheCode($code)
+ {
+ return "echo '/*%%SmartyNocache:{$this->nocache_hash}%%*//*/%%SmartyNocache:{$this->nocache_hash}%%*/';\n";
+ }
+
+ /**
+ * 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
+ * @param null|bool $tagline if true the line number of last tag
+ *
+ * @throws \SmartyCompilerException when an unexpected token is found
+ */
+ public function trigger_template_error($args = null, $line = null, $tagline = null)
+ {
+ $lex = $this->parser->lex;
+ if ($tagline === true) {
+ // get line number of Tag
+ $line = $lex->taglineno;
+ } elseif (!isset($line)) {
+ // get template source line which has error
+ $line = $lex->line;
+ } else {
+ $line = (int)$line;
+ }
+ if (in_array(
+ $this->template->source->type,
+ array(
+ 'eval',
+ 'string'
+ )
+ )
+ ) {
+ $templateName = $this->template->source->type . ':' . trim(
+ preg_replace(
+ '![\t\r\n]+!',
+ ' ',
+ strlen($lex->data) > 40 ?
+ substr($lex->data, 0, 40) .
+ '...' : $lex->data
+ )
+ );
+ } else {
+ $templateName = $this->template->source->type . ':' . $this->template->source->filepath;
+ }
+ // $line += $this->trace_line_offset;
+ $match = preg_split("/\n/", $lex->data);
+ $error_text =
+ 'Syntax error in template "' . (empty($this->trace_filepath) ? $templateName : $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 {
+ $expect = array();
+ // expected token from parser
+ $error_text .= ' - Unexpected "' . $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($lex->smarty_token_names[ $exp_token ])) {
+ // token type from lexer
+ $expect[] = '"' . $lex->smarty_token_names[ $exp_token ] . '"';
+ } else {
+ // otherwise internal token name
+ $expect[] = $this->parser->yyTokenName[ $token ];
+ }
+ }
+ $error_text .= ', expected one of: ' . implode(' , ', $expect);
+ }
+ }
+ if ($this->smarty->_parserdebug) {
+ $this->parser->errorRunDown();
+ echo ob_get_clean();
+ flush();
+ }
+ $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;
+ }
+
+ /**
+ * Return var_export() value with all white spaces removed
+ *
+ * @param mixed $value
+ *
+ * @return string
+ */
+ public function getVarExport($value)
+ {
+ return preg_replace('/\s/', '', var_export($value, true));
+ }
+
+ /**
+ * enter double quoted string
+ * - save tag stack count
+ */
+ public function enterDoubleQuote()
+ {
+ array_push($this->_tag_stack_count, $this->getTagStackCount());
+ }
+
+ /**
+ * Return tag stack count
+ *
+ * @return int
+ */
+ public function getTagStackCount()
+ {
+ return count($this->_tag_stack);
+ }
+
+ /**
+ * @param $lexerPreg
+ *
+ * @return mixed
+ */
+ public function replaceDelimiter($lexerPreg)
+ {
+ return str_replace(
+ array('SMARTYldel', 'SMARTYliteral', 'SMARTYrdel', 'SMARTYautoliteral', 'SMARTYal'),
+ array(
+ $this->ldelPreg, $this->literalPreg, $this->rdelPreg,
+ $this->smarty->getAutoLiteral() ? '{1,}' : '{9}',
+ $this->smarty->getAutoLiteral() ? '' : '\\s*'
+ ),
+ $lexerPreg
+ );
+ }
+
+ /**
+ * Build lexer regular expressions for left and right delimiter and user defined literals
+ */
+ public function initDelimiterPreg()
+ {
+ $ldel = $this->smarty->getLeftDelimiter();
+ $this->ldelLength = strlen($ldel);
+ $this->ldelPreg = '';
+ foreach (str_split($ldel, 1) as $chr) {
+ $this->ldelPreg .= '[' . preg_quote($chr,'/') . ']';
+ }
+ $rdel = $this->smarty->getRightDelimiter();
+ $this->rdelLength = strlen($rdel);
+ $this->rdelPreg = '';
+ foreach (str_split($rdel, 1) as $chr) {
+ $this->rdelPreg .= '[' . preg_quote($chr,'/') . ']';
+ }
+ $literals = $this->smarty->getLiterals();
+ if (!empty($literals)) {
+ foreach ($literals as $key => $literal) {
+ $literalPreg = '';
+ foreach (str_split($literal, 1) as $chr) {
+ $literalPreg .= '[' . preg_quote($chr,'/') . ']';
+ }
+ $literals[ $key ] = $literalPreg;
+ }
+ $this->literalPreg = '|' . implode('|', $literals);
+ } else {
+ $this->literalPreg = '';
+ }
+ }
+
+ /**
+ * leave double quoted string
+ * - throw exception if block in string was not closed
+ *
+ * @throws \SmartyCompilerException
+ */
+ public function leaveDoubleQuote()
+ {
+ if (array_pop($this->_tag_stack_count) !== $this->getTagStackCount()) {
+ $tag = $this->getOpenBlockTag();
+ $this->trigger_template_error(
+ "unclosed '{{$tag}}' in doubled quoted string",
+ null,
+ true
+ );
+ }
+ }
+
+ /**
+ * Get left delimiter preg
+ *
+ * @return string
+ */
+ public function getLdelPreg()
+ {
+ return $this->ldelPreg;
+ }
+
+ /**
+ * Get right delimiter preg
+ *
+ * @return string
+ */
+ public function getRdelPreg()
+ {
+ return $this->rdelPreg;
+ }
+
+ /**
+ * Get length of left delimiter
+ *
+ * @return int
+ */
+ public function getLdelLength()
+ {
+ return $this->ldelLength;
+ }
+
+ /**
+ * Get length of right delimiter
+ *
+ * @return int
+ */
+ public function getRdelLength()
+ {
+ return $this->rdelLength;
+ }
+
+ /**
+ * Get name of current open block tag
+ *
+ * @return string|boolean
+ */
+ public function getOpenBlockTag()
+ {
+ $tagCount = $this->getTagStackCount();
+ if ($tagCount) {
+ return $this->_tag_stack[ $tagCount - 1 ][ 0 ];
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Check if $value contains variable elements
+ *
+ * @param mixed $value
+ *
+ * @return bool|int
+ */
+ public function isVariable($value)
+ {
+ if (is_string($value)) {
+ return preg_match('/[$(]/', $value);
+ }
+ if (is_bool($value) || is_numeric($value)) {
+ return false;
+ }
+ if (is_array($value)) {
+ foreach ($value as $k => $v) {
+ if ($this->isVariable($k) || $this->isVariable($v)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ return false;
+ }
+
+ /**
+ * Get new prefix variable name
+ *
+ * @return string
+ */
+ public function getNewPrefixVariable()
+ {
+ ++self::$prefixVariableNumber;
+ return $this->getPrefixVariable();
+ }
+
+ /**
+ * Get current prefix variable name
+ *
+ * @return string
+ */
+ public function getPrefixVariable()
+ {
+ return '$_prefixVariable' . self::$prefixVariableNumber;
+ }
+
+ /**
+ * append code to prefix buffer
+ *
+ * @param string $code
+ */
+ public function appendPrefixCode($code)
+ {
+ $this->prefix_code[] = $code;
+ }
+
+ /**
+ * get prefix code string
+ *
+ * @return string
+ */
+ public function getPrefixCode()
+ {
+ $code = '';
+ $prefixArray = array_merge($this->prefix_code, array_pop($this->prefixCodeStack));
+ $this->prefixCodeStack[] = array();
+ foreach ($prefixArray as $c) {
+ $code = $this->appendCode($code, $c);
+ }
+ $this->prefix_code = array();
+ return $code;
+ }
+
+ /**
+ * Save current required plugins
+ *
+ * @param bool $init if true init required plugins
+ */
+ public function saveRequiredPlugins($init = false)
+ {
+ $this->required_plugins_stack[] = $this->required_plugins;
+ if ($init) {
+ $this->required_plugins = array('compiled' => array(), 'nocache' => array());
+ }
+ }
+
+ /**
+ * Restore required plugins
+ */
+ public function restoreRequiredPlugins()
+ {
+ $this->required_plugins = array_pop($this->required_plugins_stack);
+ }
+
+ /**
+ * Compile code to call Smarty_Internal_Template::_checkPlugins()
+ * for required plugins
+ *
+ * @return string
+ */
+ public function compileRequiredPlugins()
+ {
+ $code = $this->compileCheckPlugins($this->required_plugins[ 'compiled' ]);
+ if ($this->caching && !empty($this->required_plugins[ 'nocache' ])) {
+ $code .= $this->makeNocacheCode($this->compileCheckPlugins($this->required_plugins[ 'nocache' ]));
+ }
+ return $code;
+ }
+
+ /**
+ * Compile code to call Smarty_Internal_Template::_checkPlugins
+ * - checks if plugin is callable require otherwise
+ *
+ * @param $requiredPlugins
+ *
+ * @return string
+ */
+ public function compileCheckPlugins($requiredPlugins)
+ {
+ if (!empty($requiredPlugins)) {
+ $plugins = array();
+ foreach ($requiredPlugins as $plugin) {
+ foreach ($plugin as $data) {
+ $plugins[] = $data;
+ }
+ }
+ return '$_smarty_tpl->_checkPlugins(' . $this->getVarExport($plugins) . ');' . "\n";
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ * method to compile a Smarty template
+ *
+ * @param mixed $_content template source
+ * @param bool $isTemplateSource
+ *
+ * @return bool true if compiling succeeded, false if it failed
+ */
+ abstract protected function doCompile($_content, $isTemplateSource = false);
+
+ public function cStyleComment($string) {
+ return '/*' . str_replace('*/', '* /' , $string) . '*/';
+ }
+
+ /**
+ * Compile 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
+ */
+ private function compileTag2($tag, $args, $parameter)
+ {
+ $plugin_type = '';
+ // $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;
+ // log tag/attributes
+ if (isset($this->smarty->_cache[ 'get_used_tags' ])) {
+ $this->template->_cache[ 'used_tags' ][] = array(
+ $tag,
+ $args
+ );
+ }
+ // check nocache option flag
+ foreach ($args as $arg) {
+ if (!is_array($arg)) {
+ if ($arg === "'nocache'" || $arg === 'nocache') {
+ $this->tag_nocache = true;
+ }
+ } else {
+ foreach ($arg as $k => $v) {
+ if (($k === "'nocache'" || $k === 'nocache') && (trim($v, "'\" ") === 'true')) {
+ $this->tag_nocache = true;
+ }
+ }
+ }
+ }
+ // compile the smarty tag (required compile classes to compile the tag are auto loaded)
+ if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) {
+ if (isset($this->parent_compiler->tpl_function[ $tag ])
+ || (isset($this->template->smarty->ext->_tplFunction)
+ && $this->template->smarty->ext->_tplFunction->getTplFunction($this->template, $tag) !== false)
+ ) {
+ // 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) {
+ // 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 . '"',
+ null,
+ true
+ );
+ }
+ }
+ // 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;
+ }
+ return call_user_func_array(
+ $this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 0 ],
+ 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->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->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->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 $key => $mixed) {
+ if (is_array($mixed)) {
+ $new_args = array_merge($new_args, $mixed);
+ } else {
+ $new_args[ $key ] = $mixed;
+ }
+ }
+ return call_user_func_array(
+ $this->default_handler_plugins[ $plugin_type ][ $tag ][ 0 ],
+ 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 . '"',
+ null,
+ true
+ );
+ }
+ }
+ // 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);
+ }
+ // registered function tag ?
+ if (isset($this->smarty->registered_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ])) {
+ return $this->callTagCompiler('private_registered_function', $args, $parameter, $tag);
+ }
+ // block plugin?
+ if ($function = $this->getPlugin($base_tag, Smarty::PLUGIN_BLOCK)) {
+ return $this->callTagCompiler('private_block_plugin', $args, $parameter, $tag, $function);
+ }
+ // function plugin?
+ if ($function = $this->getPlugin($tag, Smarty::PLUGIN_FUNCTION)) {
+ if (!isset($this->smarty->security_policy)
+ || $this->smarty->security_policy->isTrustedTag($tag, $this)
+ ) {
+ return $this->callTagCompiler('private_function_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;
+ }
+ return call_user_func_array(
+ $this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 0 ],
+ 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}'", null, true);
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_templatelexer.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_templatelexer.php
new file mode 100644
index 0000000..867a31d
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_templatelexer.php
@@ -0,0 +1,1095 @@
+
+ */
+class Smarty_Internal_Templatelexer
+{
+ const TEXT = 1;
+ const TAG = 2;
+ const TAGBODY = 3;
+ const LITERAL = 4;
+ const DOUBLEQUOTEDSTRING = 5;
+
+ /**
+ * Source
+ *
+ * @var string
+ */
+ public $data;
+
+ /**
+ * Source length
+ *
+ * @var int
+ */
+ public $dataLength = null;
+
+ /**
+ * byte counter
+ *
+ * @var int
+ */
+ public $counter;
+
+ /**
+ * token number
+ *
+ * @var int
+ */
+ public $token;
+
+ /**
+ * token value
+ *
+ * @var string
+ */
+ public $value;
+
+ /**
+ * current line
+ *
+ * @var int
+ */
+ public $line;
+
+ /**
+ * tag start line
+ *
+ * @var
+ */
+ public $taglineno;
+
+ /**
+ * php code type
+ *
+ * @var string
+ */
+ public $phpType = '';
+
+ /**
+ * state number
+ *
+ * @var int
+ */
+ public $state = 1;
+
+ /**
+ * Smarty object
+ *
+ * @var Smarty
+ */
+ public $smarty = null;
+
+ /**
+ * compiler object
+ *
+ * @var Smarty_Internal_TemplateCompilerBase
+ */
+ public $compiler = null;
+
+ /**
+ * trace file
+ *
+ * @var resource
+ */
+ public $yyTraceFILE;
+
+ /**
+ * trace prompt
+ *
+ * @var string
+ */
+ public $yyTracePrompt;
+
+ /**
+ * XML flag true while processing xml
+ *
+ * @var bool
+ */
+ public $is_xml = false;
+
+ /**
+ * state names
+ *
+ * @var array
+ */
+ public $state_name = array(1 => 'TEXT', 2 => 'TAG', 3 => 'TAGBODY', 4 => 'LITERAL', 5 => 'DOUBLEQUOTEDSTRING',);
+
+ /**
+ * token names
+ *
+ * @var array
+ */
+ public $smarty_token_names = array( // Text for parser error messages
+ 'NOT' => '(!,not)',
+ 'OPENP' => '(',
+ 'CLOSEP' => ')',
+ 'OPENB' => '[',
+ 'CLOSEB' => ']',
+ 'PTR' => '->',
+ 'APTR' => '=>',
+ 'EQUAL' => '=',
+ 'NUMBER' => 'number',
+ 'UNIMATH' => '+" , "-',
+ 'MATH' => '*" , "/" , "%',
+ 'INCDEC' => '++" , "--',
+ 'SPACE' => ' ',
+ 'DOLLAR' => '$',
+ 'SEMICOLON' => ';',
+ 'COLON' => ':',
+ 'DOUBLECOLON' => '::',
+ 'AT' => '@',
+ 'HATCH' => '#',
+ 'QUOTE' => '"',
+ 'BACKTICK' => '`',
+ 'VERT' => '"|" modifier',
+ 'DOT' => '.',
+ 'COMMA' => '","',
+ 'QMARK' => '"?"',
+ 'ID' => 'id, name',
+ 'TEXT' => 'text',
+ 'LDELSLASH' => '{/..} closing tag',
+ 'LDEL' => '{...} Smarty tag',
+ 'COMMENT' => 'comment',
+ 'AS' => 'as',
+ 'TO' => 'to',
+ 'PHP' => '" '"<", "==" ... logical operator',
+ 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition',
+ 'SCOND' => '"is even" ... if condition',
+ );
+
+ /**
+ * literal tag nesting level
+ *
+ * @var int
+ */
+ private $literal_cnt = 0;
+
+ /**
+ * preg token pattern for state TEXT
+ *
+ * @var string
+ */
+ private $yy_global_pattern1 = null;
+
+ /**
+ * preg token pattern for state TAG
+ *
+ * @var string
+ */
+ private $yy_global_pattern2 = null;
+
+ /**
+ * preg token pattern for state TAGBODY
+ *
+ * @var string
+ */
+ private $yy_global_pattern3 = null;
+
+ /**
+ * preg token pattern for state LITERAL
+ *
+ * @var string
+ */
+ private $yy_global_pattern4 = null;
+
+ /**
+ * preg token pattern for state DOUBLEQUOTEDSTRING
+ *
+ * @var null
+ */
+ private $yy_global_pattern5 = null;
+
+ /**
+ * preg token pattern for text
+ *
+ * @var null
+ */
+ private $yy_global_text = null;
+
+ /**
+ * preg token pattern for literal
+ *
+ * @var null
+ */
+ private $yy_global_literal = null;
+
+ private $_yy_state = 1;
+
+ private $_yy_stack = array();
+
+ /**
+ * constructor
+ *
+ * @param string $source template source
+ * @param Smarty_Internal_TemplateCompilerBase $compiler
+ */
+ public function __construct($source, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ $this->data = $source;
+ $this->dataLength = strlen($this->data);
+ $this->counter = 0;
+ if (preg_match('/^\xEF\xBB\xBF/i', $this->data, $match)) {
+ $this->counter += strlen($match[ 0 ]);
+ }
+ $this->line = 1;
+ $this->smarty = $compiler->template->smarty;
+ $this->compiler = $compiler;
+ $this->compiler->initDelimiterPreg();
+ $this->smarty_token_names[ 'LDEL' ] = $this->smarty->getLeftDelimiter();
+ $this->smarty_token_names[ 'RDEL' ] = $this->smarty->getRightDelimiter();
+ }
+
+ /**
+ * open lexer/parser trace file
+ *
+ */
+ public function PrintTrace()
+ {
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = ' ';
+ }
+
+ /**
+ * replace placeholders with runtime preg code
+ *
+ * @param string $preg
+ *
+ * @return string
+ */
+ public function replace($preg)
+ {
+ return $this->compiler->replaceDelimiter($preg);
+ }
+
+ /**
+ * check if current value is an autoliteral left delimiter
+ *
+ * @return bool
+ */
+ public function isAutoLiteral()
+ {
+ return $this->smarty->getAutoLiteral() && isset($this->value[ $this->compiler->getLdelLength() ]) ?
+ strpos(" \n\t\r", $this->value[ $this->compiler->getLdelLength() ]) !== false : false;
+ } // end function
+
+ 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()
+ {
+ if (!isset($this->yy_global_pattern1)) {
+ $this->yy_global_pattern1 =
+ $this->replace("/\G([{][}])|\G((SMARTYldel)SMARTYal[*])|\G((SMARTYldel)SMARTYalphp([ ].*?)?SMARTYrdel|(SMARTYldel)SMARTYal[\/]phpSMARTYrdel)|\G((SMARTYldel)SMARTYautoliteral\\s+SMARTYliteral)|\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([<][?]((php\\s+|=)|\\s+)|[<][%]|[<][?]xml\\s+|[<]script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*[>]|[?][>]|[%][>])|\G([\S\s])/isS");
+ }
+ if (!isset($this->dataLength)) {
+ $this->dataLength = strlen($this->data);
+ }
+ if ($this->counter >= $this->dataLength) {
+ return false; // end of input
+ }
+ do {
+ if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][ 1 ])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ } else {
+ $yymatches = array_filter($yymatches);
+ }
+ if (empty($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
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r1_' . $this->token}();
+ 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 >= $this->dataLength) {
+ 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);
+ }
+
+ public function yy_r1_1()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ public function yy_r1_2()
+ {
+ $to = $this->dataLength;
+ preg_match("/[*]{$this->compiler->getRdelPreg()}[\n]?/", $this->data, $match, PREG_OFFSET_CAPTURE,
+ $this->counter);
+ if (isset($match[ 0 ][ 1 ])) {
+ $to = $match[ 0 ][ 1 ] + strlen($match[ 0 ][ 0 ]);
+ } else {
+ $this->compiler->trigger_template_error("missing or misspelled comment closing tag '{$this->smarty->getRightDelimiter()}'");
+ }
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ return false;
+ }
+
+ public function yy_r1_4()
+ {
+ $this->compiler->getTagCompiler('private_php')->parsePhp($this);
+ }
+
+ public function yy_r1_8()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ public function yy_r1_10()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
+ $this->yypushstate(self::LITERAL);
+ }
+
+ public function yy_r1_12()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+ $this->yypushstate(self::LITERAL);
+ } // end function
+
+ public function yy_r1_14()
+ {
+ $this->yypushstate(self::TAG);
+ return true;
+ }
+
+ public function yy_r1_16()
+ {
+ $this->compiler->getTagCompiler('private_php')->parsePhp($this);
+ }
+
+ public function yy_r1_19()
+ {
+ if (!isset($this->yy_global_text)) {
+ $this->yy_global_text =
+ $this->replace('/(SMARTYldel)SMARTYal|[<][?]((php\s+|=)|\s+)|[<][%]|[<][?]xml\s+|[<]script\s+language\s*=\s*["\']?\s*php\s*["\']?\s*[>]|[?][>]|[%][>]SMARTYliteral/isS');
+ }
+ $to = $this->dataLength;
+ preg_match($this->yy_global_text, $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()
+ {
+ if (!isset($this->yy_global_pattern2)) {
+ $this->yy_global_pattern2 =
+ $this->replace("/\G((SMARTYldel)SMARTYal(if|elseif|else if|while)\\s+)|\G((SMARTYldel)SMARTYalfor\\s+)|\G((SMARTYldel)SMARTYalforeach(?![^\s]))|\G((SMARTYldel)SMARTYalsetfilter\\s+)|\G((SMARTYldel)SMARTYalmake_nocache\\s+)|\G((SMARTYldel)SMARTYal[0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[$]smarty\\.block\\.(child|parent)\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/][0-9]*[a-zA-Z_]\\w*\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/])|\G((SMARTYldel)SMARTYal)/isS");
+ }
+ if (!isset($this->dataLength)) {
+ $this->dataLength = strlen($this->data);
+ }
+ if ($this->counter >= $this->dataLength) {
+ return false; // end of input
+ }
+ do {
+ if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][ 1 ])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ } else {
+ $yymatches = array_filter($yymatches);
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' .
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state TAG');
+ }
+ next($yymatches); // skip global match
+ $this->token = key($yymatches); // token number
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r2_' . $this->token}();
+ 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 >= $this->dataLength) {
+ 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);
+ }
+
+ public function yy_r2_1()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+
+ public function yy_r2_4()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+
+ public function yy_r2_6()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+
+ public function yy_r2_8()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+
+ public function yy_r2_10()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELMAKENOCACHE;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+
+ public function yy_r2_12()
+ {
+ $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG;
+ $this->taglineno = $this->line;
+ }
+
+ public function yy_r2_15()
+ {
+ $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT;
+ $this->taglineno = $this->line;
+ }
+
+ public function yy_r2_18()
+ {
+ $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_CLOSETAG;
+ $this->taglineno = $this->line;
+ }
+
+ public function yy_r2_20()
+ {
+ if ($this->_yy_stack[ count($this->_yy_stack) - 1 ] === self::TEXT) {
+ $this->yypopstate();
+ $this->token = Smarty_Internal_Templateparser::TP_SIMPELOUTPUT;
+ $this->taglineno = $this->line;
+ } else {
+ $this->value = $this->smarty->getLeftDelimiter();
+ $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+ } // end function
+
+ public function yy_r2_23()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+
+ public function yy_r2_25()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->yybegin(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+
+ public function yylex3()
+ {
+ if (!isset($this->yy_global_pattern3)) {
+ $this->yy_global_pattern3 =
+ $this->replace("/\G(\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*([!=][=]{1,2}|[<][=>]?|[>][=]?|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even|div)\\s+by\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G([!]\\s*|not\\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(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G(array\\s*[(]\\s*)|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|][@]?)|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS");
+ }
+ if (!isset($this->dataLength)) {
+ $this->dataLength = strlen($this->data);
+ }
+ if ($this->counter >= $this->dataLength) {
+ return false; // end of input
+ }
+ do {
+ if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][ 1 ])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ } else {
+ $yymatches = array_filter($yymatches);
+ }
+ if (empty($yymatches)) {
+ throw new Exception('Error: lexing failed because a rule matched' .
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state TAGBODY');
+ }
+ next($yymatches); // skip global match
+ $this->token = key($yymatches); // token number
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r3_' . $this->token}();
+ 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 >= $this->dataLength) {
+ 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);
+ }
+
+ public function yy_r3_1()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_RDEL;
+ $this->yypopstate();
+ }
+
+ public function yy_r3_2()
+ {
+ $this->yypushstate(self::TAG);
+ return true;
+ }
+
+ public function yy_r3_4()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->yypushstate(self::DOUBLEQUOTEDSTRING);
+ $this->compiler->enterDoubleQuote();
+ }
+
+ public function yy_r3_5()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING;
+ }
+
+ public function yy_r3_6()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
+ }
+
+ public function yy_r3_7()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_DOLLAR;
+ }
+
+ public function yy_r3_8()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_ISIN;
+ }
+
+ public function yy_r3_9()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_AS;
+ }
+
+ public function yy_r3_10()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_TO;
+ }
+
+ public function yy_r3_11()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_STEP;
+ }
+
+ public function yy_r3_12()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF;
+ }
+
+ public function yy_r3_13()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_LOGOP;
+ }
+
+ public function yy_r3_15()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_SLOGOP;
+ }
+
+ public function yy_r3_17()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_TLOGOP;
+ }
+
+ public function yy_r3_20()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND;
+ }
+
+ public function yy_r3_23()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_NOT;
+ }
+
+ public function yy_r3_24()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_TYPECAST;
+ }
+
+ public function yy_r3_28()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_OPENP;
+ }
+
+ public function yy_r3_29()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_CLOSEP;
+ }
+
+ public function yy_r3_30()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_OPENB;
+ }
+
+ public function yy_r3_31()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_CLOSEB;
+ }
+
+ public function yy_r3_32()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_PTR;
+ }
+
+ public function yy_r3_33()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_APTR;
+ }
+
+ public function yy_r3_34()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_EQUAL;
+ }
+
+ public function yy_r3_35()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_INCDEC;
+ }
+
+ public function yy_r3_37()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_UNIMATH;
+ }
+
+ public function yy_r3_39()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_MATH;
+ }
+
+ public function yy_r3_41()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_AT;
+ }
+
+ public function yy_r3_42()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_ARRAYOPEN;
+ }
+
+ public function yy_r3_43()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_HATCH;
+ }
+
+ public function yy_r3_44()
+ {
+ // resolve conflicts with shorttag and right_delimiter starting with '='
+ if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->compiler->getRdelLength()) ===
+ $this->smarty->getRightDelimiter()) {
+ 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;
+ }
+ }
+
+ public function yy_r3_45()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE;
+ }
+
+ public function yy_r3_48()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_ID;
+ }
+
+ public function yy_r3_49()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_INTEGER;
+ }
+
+ public function yy_r3_50()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+ $this->yypopstate();
+ }
+
+ public function yy_r3_51()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_VERT;
+ }
+
+ public function yy_r3_52()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_DOT;
+ }
+
+ public function yy_r3_53()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_COMMA;
+ }
+
+ public function yy_r3_54()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
+ }
+
+ public function yy_r3_55()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
+ }
+
+ public function yy_r3_56()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_COLON;
+ }
+
+ public function yy_r3_57()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_QMARK;
+ }
+
+ public function yy_r3_58()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_HEX;
+ }
+
+ public function yy_r3_59()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ } // end function
+
+ public function yy_r3_60()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ public function yylex4()
+ {
+ if (!isset($this->yy_global_pattern4)) {
+ $this->yy_global_pattern4 =
+ $this->replace("/\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G([\S\s])/isS");
+ }
+ if (!isset($this->dataLength)) {
+ $this->dataLength = strlen($this->data);
+ }
+ if ($this->counter >= $this->dataLength) {
+ return false; // end of input
+ }
+ do {
+ if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][ 1 ])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ } else {
+ $yymatches = array_filter($yymatches);
+ }
+ if (empty($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
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r4_' . $this->token}();
+ 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 >= $this->dataLength) {
+ 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);
+ }
+
+ public function yy_r4_1()
+ {
+ $this->literal_cnt++;
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ }
+
+ public function yy_r4_3()
+ {
+ if ($this->literal_cnt) {
+ $this->literal_cnt--;
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ } else {
+ $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+ $this->yypopstate();
+ }
+ }
+
+ public function yy_r4_5()
+ {
+ if (!isset($this->yy_global_literal)) {
+ $this->yy_global_literal = $this->replace('/(SMARTYldel)SMARTYal[\/]?literalSMARTYrdel/isS');
+ }
+ $to = $this->dataLength;
+ preg_match($this->yy_global_literal, $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;
+ } // end function
+
+ public function yylex5()
+ {
+ if (!isset($this->yy_global_pattern5)) {
+ $this->yy_global_pattern5 =
+ $this->replace("/\G((SMARTYldel)SMARTYautoliteral\\s+SMARTYliteral)|\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/])|\G((SMARTYldel)SMARTYal[0-9]*[a-zA-Z_]\\w*)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G([`][$])|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=((SMARTYldel)SMARTYal|\\$|`\\$|\"SMARTYliteral)))|\G([\S\s])/isS");
+ }
+ if (!isset($this->dataLength)) {
+ $this->dataLength = strlen($this->data);
+ }
+ if ($this->counter >= $this->dataLength) {
+ return false; // end of input
+ }
+ do {
+ if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][ 1 ])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ } else {
+ $yymatches = array_filter($yymatches);
+ }
+ if (empty($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
+ $this->value = current($yymatches); // token value
+ $r = $this->{'yy_r5_' . $this->token}();
+ 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 >= $this->dataLength) {
+ 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);
+ }
+
+ public function yy_r5_1()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ public function yy_r5_3()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ public function yy_r5_5()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ public function yy_r5_7()
+ {
+ $this->yypushstate(self::TAG);
+ return true;
+ }
+
+ public function yy_r5_9()
+ {
+ $this->yypushstate(self::TAG);
+ return true;
+ }
+
+ public function yy_r5_11()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->taglineno = $this->line;
+ $this->yypushstate(self::TAGBODY);
+ }
+
+ public function yy_r5_13()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->yypopstate();
+ }
+
+ public function yy_r5_14()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+ $this->value = substr($this->value, 0, -1);
+ $this->yypushstate(self::TAGBODY);
+ $this->taglineno = $this->line;
+ }
+
+ public function yy_r5_15()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
+ }
+
+ public function yy_r5_16()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ public function yy_r5_17()
+ {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ public function yy_r5_22()
+ {
+ $to = $this->dataLength;
+ $this->value = substr($this->data, $this->counter, $to - $this->counter);
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+}
+
+
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_templateparser.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_templateparser.php
new file mode 100644
index 0000000..7c8735c
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_templateparser.php
@@ -0,0 +1,3627 @@
+
+ */
+class Smarty_Internal_Templateparser
+{
+ // line 23 "../smarty/lexer/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';
+ const TP_VERT = 1;
+ const TP_COLON = 2;
+ const TP_PHP = 3;
+ const TP_TEXT = 4;
+ const TP_STRIPON = 5;
+ const TP_STRIPOFF = 6;
+ const TP_LITERALSTART = 7;
+ const TP_LITERALEND = 8;
+ const TP_LITERAL = 9;
+ const TP_SIMPELOUTPUT = 10;
+ const TP_SIMPLETAG = 11;
+ const TP_SMARTYBLOCKCHILDPARENT = 12;
+ const TP_LDEL = 13;
+ const TP_RDEL = 14;
+ const TP_DOLLARID = 15;
+ const TP_EQUAL = 16;
+ const TP_ID = 17;
+ const TP_PTR = 18;
+ const TP_LDELMAKENOCACHE = 19;
+ const TP_LDELIF = 20;
+ const TP_LDELFOR = 21;
+ const TP_SEMICOLON = 22;
+ const TP_INCDEC = 23;
+ const TP_TO = 24;
+ const TP_STEP = 25;
+ const TP_LDELFOREACH = 26;
+ const TP_SPACE = 27;
+ const TP_AS = 28;
+ const TP_APTR = 29;
+ const TP_LDELSETFILTER = 30;
+ const TP_CLOSETAG = 31;
+ const TP_LDELSLASH = 32;
+ const TP_ATTR = 33;
+ const TP_INTEGER = 34;
+ const TP_COMMA = 35;
+ const TP_OPENP = 36;
+ const TP_CLOSEP = 37;
+ const TP_MATH = 38;
+ const TP_UNIMATH = 39;
+ const TP_ISIN = 40;
+ const TP_QMARK = 41;
+ const TP_NOT = 42;
+ const TP_TYPECAST = 43;
+ const TP_HEX = 44;
+ const TP_DOT = 45;
+ const TP_INSTANCEOF = 46;
+ const TP_SINGLEQUOTESTRING = 47;
+ const TP_DOUBLECOLON = 48;
+ const TP_NAMESPACE = 49;
+ const TP_AT = 50;
+ const TP_HATCH = 51;
+ const TP_OPENB = 52;
+ const TP_CLOSEB = 53;
+ const TP_DOLLAR = 54;
+ const TP_LOGOP = 55;
+ const TP_SLOGOP = 56;
+ const TP_TLOGOP = 57;
+ const TP_SINGLECOND = 58;
+ const TP_ARRAYOPEN = 59;
+ const TP_QUOTE = 60;
+ const TP_BACKTICK = 61;
+ const YY_NO_ACTION = 516;
+ const YY_ACCEPT_ACTION = 515;
+ const YY_ERROR_ACTION = 514;
+ const YY_SZ_ACTTAB = 2071;
+ const YY_SHIFT_USE_DFLT = -31;
+ const YY_SHIFT_MAX = 230;
+ const YY_REDUCE_USE_DFLT = -91;
+ const YY_REDUCE_MAX = 178;
+ const YYNOCODE = 110;
+ const YYSTACKDEPTH = 500;
+ const YYNSTATE = 327;
+ const YYNRULE = 187;
+ const YYERRORSYMBOL = 62;
+ const YYERRSYMDT = 'yy0';
+ const YYFALLBACK = 0;
+
+ public static $yy_action = array(
+ 251, 234, 237, 1, 144, 127, 428, 184, 199, 212,
+ 10, 54, 19, 175, 282, 215, 109, 389, 428, 428,
+ 224, 321, 223, 303, 203, 389, 13, 389, 281, 43,
+ 389, 428, 41, 40, 266, 225, 389, 213, 389, 194,
+ 389, 52, 4, 308, 301, 383, 34, 209, 222, 3,
+ 50, 153, 251, 234, 237, 1, 199, 131, 383, 198,
+ 305, 212, 10, 54, 383, 16, 199, 428, 109, 385,
+ 132, 18, 224, 321, 223, 222, 221, 12, 32, 428,
+ 116, 43, 385, 262, 41, 40, 266, 225, 385, 233,
+ 95, 194, 16, 52, 4, 131, 301, 252, 18, 265,
+ 164, 3, 50, 324, 251, 234, 237, 1, 23, 130,
+ 229, 198, 150, 212, 10, 54, 326, 11, 170, 284,
+ 109, 42, 22, 239, 224, 321, 223, 193, 221, 261,
+ 13, 52, 157, 43, 301, 286, 41, 40, 266, 225,
+ 205, 233, 5, 194, 96, 52, 4, 263, 301, 301,
+ 99, 349, 96, 3, 50, 199, 251, 234, 237, 1,
+ 238, 130, 241, 181, 349, 212, 10, 54, 382, 240,
+ 349, 36, 109, 185, 104, 256, 224, 321, 223, 132,
+ 191, 382, 13, 49, 91, 43, 12, 382, 41, 40,
+ 266, 225, 257, 233, 152, 194, 457, 52, 4, 457,
+ 301, 301, 228, 457, 282, 3, 50, 285, 251, 234,
+ 237, 1, 301, 131, 441, 198, 238, 212, 10, 54,
+ 349, 441, 325, 175, 109, 30, 349, 273, 224, 321,
+ 223, 20, 221, 295, 32, 211, 457, 39, 166, 49,
+ 41, 40, 266, 225, 87, 233, 205, 194, 279, 52,
+ 4, 24, 301, 204, 200, 280, 99, 3, 50, 199,
+ 251, 234, 237, 1, 31, 130, 96, 198, 205, 212,
+ 10, 54, 350, 55, 293, 207, 109, 283, 99, 96,
+ 224, 321, 223, 199, 180, 350, 13, 134, 230, 43,
+ 222, 350, 41, 40, 266, 225, 104, 233, 316, 194,
+ 279, 52, 4, 24, 301, 165, 284, 280, 85, 3,
+ 50, 25, 251, 234, 237, 1, 131, 129, 210, 198,
+ 14, 212, 10, 54, 269, 270, 301, 116, 109, 295,
+ 216, 211, 224, 321, 223, 171, 221, 95, 13, 28,
+ 219, 43, 323, 9, 41, 40, 266, 225, 151, 233,
+ 324, 194, 52, 52, 4, 301, 301, 30, 282, 302,
+ 178, 3, 50, 7, 251, 234, 237, 1, 136, 130,
+ 304, 179, 238, 212, 10, 54, 279, 175, 282, 24,
+ 109, 238, 429, 280, 224, 321, 223, 177, 221, 270,
+ 13, 255, 281, 43, 429, 49, 41, 40, 266, 225,
+ 275, 233, 318, 194, 49, 52, 4, 276, 301, 163,
+ 26, 199, 8, 3, 50, 119, 251, 234, 237, 1,
+ 11, 93, 291, 51, 107, 212, 10, 54, 226, 428,
+ 206, 201, 109, 148, 178, 322, 224, 321, 223, 441,
+ 221, 428, 13, 282, 9, 43, 441, 115, 41, 40,
+ 266, 225, 167, 233, 227, 194, 457, 52, 4, 457,
+ 301, 96, 158, 457, 101, 3, 50, 271, 251, 234,
+ 237, 1, 282, 130, 235, 186, 135, 212, 10, 54,
+ 199, 37, 119, 315, 109, 165, 284, 176, 224, 321,
+ 223, 104, 221, 149, 13, 281, 146, 43, 281, 300,
+ 41, 40, 266, 225, 30, 233, 289, 194, 21, 52,
+ 4, 272, 301, 211, 18, 301, 161, 3, 50, 110,
+ 251, 234, 237, 1, 137, 128, 282, 198, 268, 212,
+ 10, 54, 222, 169, 515, 92, 109, 172, 284, 31,
+ 224, 321, 223, 29, 221, 238, 6, 260, 53, 43,
+ 232, 139, 41, 40, 266, 225, 154, 233, 178, 194,
+ 168, 52, 4, 214, 301, 145, 99, 33, 49, 3,
+ 50, 245, 208, 211, 320, 282, 90, 111, 311, 183,
+ 98, 70, 309, 297, 236, 178, 95, 319, 142, 258,
+ 247, 267, 249, 264, 250, 195, 231, 199, 246, 324,
+ 317, 253, 254, 259, 126, 137, 133, 251, 234, 237,
+ 1, 326, 290, 105, 143, 156, 212, 10, 54, 88,
+ 84, 83, 484, 109, 322, 282, 37, 224, 321, 223,
+ 245, 208, 211, 320, 281, 90, 111, 298, 182, 98,
+ 56, 245, 298, 211, 178, 95, 103, 147, 258, 197,
+ 102, 75, 141, 250, 195, 231, 95, 246, 324, 258,
+ 279, 242, 89, 24, 250, 195, 231, 280, 246, 324,
+ 298, 298, 298, 298, 298, 298, 298, 16, 298, 192,
+ 277, 298, 298, 18, 294, 44, 45, 38, 298, 298,
+ 251, 234, 237, 2, 298, 296, 298, 298, 298, 212,
+ 10, 54, 310, 312, 313, 314, 109, 162, 298, 298,
+ 224, 321, 223, 298, 298, 298, 294, 282, 298, 42,
+ 22, 239, 251, 234, 237, 2, 298, 296, 298, 298,
+ 298, 212, 10, 54, 298, 159, 298, 298, 109, 298,
+ 298, 17, 224, 321, 223, 282, 298, 42, 22, 239,
+ 298, 298, 245, 298, 211, 278, 298, 103, 111, 298,
+ 183, 98, 70, 298, 298, 298, 298, 95, 298, 298,
+ 258, 298, 292, 17, 298, 250, 195, 231, 279, 246,
+ 324, 24, 298, 395, 245, 280, 211, 298, 298, 103,
+ 298, 298, 197, 102, 75, 16, 298, 140, 298, 95,
+ 298, 18, 258, 298, 298, 298, 298, 250, 195, 231,
+ 298, 246, 324, 298, 298, 298, 298, 428, 298, 395,
+ 395, 395, 202, 277, 298, 245, 298, 211, 298, 428,
+ 103, 298, 298, 197, 120, 69, 395, 395, 395, 395,
+ 95, 298, 298, 258, 298, 298, 298, 160, 250, 195,
+ 231, 86, 246, 324, 245, 16, 211, 282, 298, 103,
+ 196, 18, 197, 120, 69, 298, 44, 45, 38, 95,
+ 298, 298, 258, 298, 298, 298, 178, 250, 195, 231,
+ 298, 246, 324, 310, 312, 313, 314, 298, 298, 190,
+ 245, 298, 211, 298, 298, 103, 298, 298, 197, 102,
+ 75, 298, 298, 298, 298, 95, 298, 298, 258, 298,
+ 298, 298, 298, 250, 195, 231, 298, 246, 324, 298,
+ 298, 298, 245, 298, 211, 298, 199, 100, 298, 288,
+ 197, 120, 47, 298, 106, 298, 298, 95, 298, 353,
+ 258, 155, 298, 218, 298, 250, 195, 231, 298, 246,
+ 324, 282, 16, 42, 22, 239, 298, 245, 18, 211,
+ 298, 428, 103, 298, 298, 197, 120, 69, 298, 298,
+ 298, 298, 95, 428, 298, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 245, 298, 211, 298,
+ 298, 100, 189, 298, 197, 120, 59, 245, 207, 211,
+ 298, 95, 103, 298, 258, 197, 120, 81, 298, 250,
+ 195, 231, 95, 246, 324, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 298, 245, 298, 211,
+ 298, 298, 103, 298, 298, 197, 120, 80, 298, 298,
+ 298, 298, 95, 298, 298, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 245, 298, 211, 298,
+ 298, 103, 298, 298, 197, 120, 67, 245, 298, 211,
+ 298, 95, 103, 298, 258, 197, 120, 57, 298, 250,
+ 195, 231, 95, 246, 324, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 298, 245, 298, 211,
+ 298, 298, 103, 298, 298, 197, 120, 58, 298, 298,
+ 298, 298, 95, 298, 298, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 245, 298, 211, 298,
+ 298, 103, 298, 298, 197, 120, 82, 245, 298, 211,
+ 298, 95, 103, 298, 258, 197, 97, 76, 298, 250,
+ 195, 231, 95, 246, 324, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 298, 245, 298, 211,
+ 298, 298, 103, 298, 298, 197, 120, 71, 298, 298,
+ 298, 298, 95, 298, 298, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 245, 298, 211, 298,
+ 298, 103, 298, 298, 187, 120, 61, 245, 298, 211,
+ 298, 95, 103, 298, 258, 197, 120, 63, 298, 250,
+ 195, 231, 95, 246, 324, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 298, 245, 298, 211,
+ 298, 298, 103, 298, 298, 197, 94, 79, 298, 298,
+ 298, 298, 95, 298, 298, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 245, 298, 211, 298,
+ 298, 103, 298, 298, 197, 120, 59, 245, 298, 211,
+ 298, 95, 103, 298, 258, 197, 120, 77, 298, 250,
+ 195, 231, 95, 246, 324, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 298, 245, 298, 211,
+ 298, 298, 103, 298, 298, 188, 108, 64, 298, 298,
+ 298, 298, 95, 298, 298, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 245, 298, 211, 298,
+ 298, 103, 298, 298, 197, 120, 65, 245, 298, 211,
+ 298, 95, 103, 298, 258, 197, 97, 66, 298, 250,
+ 195, 231, 95, 246, 324, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 298, 245, 298, 211,
+ 298, 298, 103, 298, 298, 197, 120, 68, 298, 298,
+ 298, 298, 95, 298, 298, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 245, 298, 211, 298,
+ 298, 103, 298, 298, 197, 120, 62, 245, 298, 211,
+ 298, 95, 103, 298, 258, 197, 120, 60, 298, 250,
+ 195, 231, 95, 246, 324, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 298, 245, 298, 211,
+ 298, 298, 103, 298, 298, 197, 120, 74, 298, 298,
+ 298, 298, 95, 298, 298, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 245, 298, 211, 298,
+ 298, 103, 298, 298, 197, 120, 72, 245, 298, 211,
+ 298, 95, 103, 298, 258, 197, 120, 48, 298, 250,
+ 195, 231, 95, 246, 324, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 298, 245, 298, 211,
+ 298, 298, 103, 298, 298, 197, 120, 46, 298, 298,
+ 298, 298, 95, 298, 298, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 245, 298, 211, 298,
+ 298, 103, 298, 298, 197, 120, 78, 245, 298, 211,
+ 298, 95, 103, 298, 258, 197, 120, 73, 298, 250,
+ 195, 231, 95, 246, 324, 258, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 298, 245, 298, 211,
+ 298, 298, 103, 298, 298, 197, 125, 298, 298, 298,
+ 298, 298, 95, 298, 298, 298, 298, 298, 298, 244,
+ 250, 195, 231, 298, 246, 324, 245, 298, 211, 298,
+ 298, 103, 298, 298, 197, 114, 298, 245, 298, 211,
+ 298, 95, 103, 298, 298, 197, 122, 298, 243, 250,
+ 195, 231, 95, 246, 324, 298, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 298, 245, 298, 211,
+ 298, 298, 103, 298, 298, 197, 117, 298, 298, 298,
+ 298, 298, 95, 298, 298, 298, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 245, 298, 211, 298,
+ 298, 103, 298, 298, 197, 121, 298, 245, 298, 211,
+ 298, 95, 103, 298, 298, 197, 124, 298, 298, 250,
+ 195, 231, 95, 246, 324, 298, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 298, 245, 298, 211,
+ 298, 298, 103, 298, 298, 197, 118, 298, 298, 298,
+ 298, 298, 95, 298, 298, 298, 298, 298, 298, 298,
+ 250, 195, 231, 298, 246, 324, 245, 298, 211, 298,
+ 298, 103, 298, 298, 197, 123, 298, 245, 298, 211,
+ 298, 95, 103, 298, 298, 197, 113, 298, 298, 250,
+ 195, 231, 95, 246, 324, 298, 298, 298, 298, 298,
+ 250, 195, 231, 220, 246, 324, 298, 27, 298, 16,
+ 298, 457, 298, 298, 457, 18, 298, 26, 457, 441,
+ 44, 45, 38, 217, 44, 45, 38, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 310, 312, 313,
+ 314, 310, 312, 313, 314, 298, 441, 298, 298, 441,
+ 298, 457, 220, 441, 457, 298, 298, 457, 298, 298,
+ 457, 457, 441, 457, 298, 298, 220, 457, 441, 298,
+ 298, 298, 298, 298, 457, 298, 298, 457, 298, 298,
+ 5, 457, 441, 298, 298, 298, 298, 298, 298, 441,
+ 298, 298, 441, 298, 457, 441, 441, 298, 441, 298,
+ 457, 298, 441, 306, 298, 298, 298, 298, 298, 441,
+ 298, 298, 441, 298, 457, 220, 441, 298, 298, 298,
+ 298, 298, 298, 457, 298, 298, 457, 298, 298, 15,
+ 457, 441, 35, 274, 44, 45, 38, 457, 298, 298,
+ 457, 298, 298, 298, 457, 441, 298, 298, 298, 298,
+ 298, 310, 312, 313, 314, 298, 298, 298, 441, 298,
+ 298, 441, 298, 457, 298, 441, 287, 298, 44, 45,
+ 38, 298, 441, 298, 298, 441, 298, 457, 298, 441,
+ 248, 298, 298, 298, 298, 310, 312, 313, 314, 298,
+ 44, 45, 38, 298, 298, 112, 298, 44, 45, 38,
+ 298, 173, 298, 298, 44, 45, 38, 310, 312, 313,
+ 314, 44, 45, 38, 310, 312, 313, 314, 298, 298,
+ 299, 310, 312, 313, 314, 44, 45, 38, 310, 312,
+ 313, 314, 174, 298, 298, 298, 138, 298, 298, 298,
+ 298, 298, 310, 312, 313, 314, 44, 45, 38, 298,
+ 298, 298, 44, 45, 38, 298, 44, 45, 38, 298,
+ 44, 45, 38, 310, 312, 313, 314, 307, 298, 310,
+ 312, 313, 314, 310, 312, 313, 314, 310, 312, 313,
+ 314,
+ );
+
+ public static $yy_lookahead = array(
+ 10, 11, 12, 13, 74, 15, 36, 17, 1, 19,
+ 20, 21, 29, 103, 84, 45, 26, 14, 48, 36,
+ 30, 31, 32, 53, 34, 22, 36, 24, 98, 39,
+ 27, 48, 42, 43, 44, 45, 33, 47, 35, 49,
+ 37, 51, 52, 53, 54, 14, 16, 16, 45, 59,
+ 60, 96, 10, 11, 12, 13, 1, 15, 27, 17,
+ 53, 19, 20, 21, 33, 27, 1, 36, 26, 14,
+ 45, 33, 30, 31, 32, 45, 34, 52, 36, 48,
+ 72, 39, 27, 75, 42, 43, 44, 45, 33, 47,
+ 82, 49, 27, 51, 52, 15, 54, 17, 33, 91,
+ 83, 59, 60, 95, 10, 11, 12, 13, 13, 15,
+ 15, 17, 17, 19, 20, 21, 97, 35, 99, 100,
+ 26, 86, 87, 88, 30, 31, 32, 66, 34, 49,
+ 36, 51, 96, 39, 54, 53, 42, 43, 44, 45,
+ 72, 47, 16, 49, 18, 51, 52, 79, 54, 54,
+ 82, 14, 18, 59, 60, 1, 10, 11, 12, 13,
+ 23, 15, 15, 17, 27, 19, 20, 21, 14, 17,
+ 33, 13, 26, 15, 48, 17, 30, 31, 32, 45,
+ 34, 27, 36, 46, 83, 39, 52, 33, 42, 43,
+ 44, 45, 34, 47, 74, 49, 10, 51, 52, 13,
+ 54, 54, 50, 17, 84, 59, 60, 14, 10, 11,
+ 12, 13, 54, 15, 45, 17, 23, 19, 20, 21,
+ 27, 52, 100, 103, 26, 35, 33, 37, 30, 31,
+ 32, 22, 34, 67, 36, 69, 50, 39, 83, 46,
+ 42, 43, 44, 45, 35, 47, 72, 49, 10, 51,
+ 52, 13, 54, 79, 80, 17, 82, 59, 60, 1,
+ 10, 11, 12, 13, 16, 15, 18, 17, 72, 19,
+ 20, 21, 14, 107, 108, 79, 26, 71, 82, 18,
+ 30, 31, 32, 1, 34, 27, 36, 15, 50, 39,
+ 45, 33, 42, 43, 44, 45, 48, 47, 53, 49,
+ 10, 51, 52, 13, 54, 99, 100, 17, 36, 59,
+ 60, 29, 10, 11, 12, 13, 15, 15, 17, 17,
+ 13, 19, 20, 21, 8, 9, 54, 72, 26, 67,
+ 75, 69, 30, 31, 32, 78, 34, 82, 36, 24,
+ 50, 39, 17, 36, 42, 43, 44, 45, 74, 47,
+ 95, 49, 51, 51, 52, 54, 54, 35, 84, 37,
+ 103, 59, 60, 36, 10, 11, 12, 13, 74, 15,
+ 108, 17, 23, 19, 20, 21, 10, 103, 84, 13,
+ 26, 23, 36, 17, 30, 31, 32, 7, 34, 9,
+ 36, 17, 98, 39, 48, 46, 42, 43, 44, 45,
+ 17, 47, 53, 49, 46, 51, 52, 93, 54, 78,
+ 16, 1, 36, 59, 60, 101, 10, 11, 12, 13,
+ 35, 15, 37, 17, 48, 19, 20, 21, 18, 36,
+ 65, 66, 26, 74, 103, 104, 30, 31, 32, 45,
+ 34, 48, 36, 84, 36, 39, 52, 17, 42, 43,
+ 44, 45, 15, 47, 17, 49, 10, 51, 52, 13,
+ 54, 18, 74, 17, 82, 59, 60, 34, 10, 11,
+ 12, 13, 84, 15, 93, 17, 15, 19, 20, 21,
+ 1, 2, 101, 101, 26, 99, 100, 17, 30, 31,
+ 32, 48, 34, 96, 36, 98, 96, 39, 98, 71,
+ 42, 43, 44, 45, 35, 47, 37, 49, 27, 51,
+ 52, 67, 54, 69, 33, 54, 74, 59, 60, 17,
+ 10, 11, 12, 13, 96, 15, 84, 17, 34, 19,
+ 20, 21, 45, 78, 63, 64, 26, 99, 100, 16,
+ 30, 31, 32, 16, 34, 23, 36, 17, 17, 39,
+ 23, 51, 42, 43, 44, 45, 72, 47, 103, 49,
+ 78, 51, 52, 17, 54, 74, 82, 41, 46, 59,
+ 60, 67, 68, 69, 70, 84, 72, 73, 53, 75,
+ 76, 77, 53, 61, 15, 103, 82, 14, 51, 85,
+ 14, 37, 17, 8, 90, 91, 92, 1, 94, 95,
+ 3, 4, 5, 6, 7, 96, 82, 10, 11, 12,
+ 13, 97, 84, 81, 96, 74, 19, 20, 21, 78,
+ 82, 82, 1, 26, 104, 84, 2, 30, 31, 32,
+ 67, 68, 69, 70, 98, 72, 73, 109, 75, 76,
+ 77, 67, 109, 69, 103, 82, 72, 96, 85, 75,
+ 76, 77, 96, 90, 91, 92, 82, 94, 95, 85,
+ 10, 14, 96, 13, 90, 91, 92, 17, 94, 95,
+ 109, 109, 109, 109, 109, 109, 109, 27, 109, 105,
+ 106, 109, 109, 33, 4, 38, 39, 40, 109, 109,
+ 10, 11, 12, 13, 109, 15, 109, 109, 109, 19,
+ 20, 21, 55, 56, 57, 58, 26, 74, 109, 109,
+ 30, 31, 32, 109, 109, 109, 4, 84, 109, 86,
+ 87, 88, 10, 11, 12, 13, 109, 15, 109, 109,
+ 109, 19, 20, 21, 109, 74, 109, 109, 26, 109,
+ 60, 61, 30, 31, 32, 84, 109, 86, 87, 88,
+ 109, 109, 67, 109, 69, 70, 109, 72, 73, 109,
+ 75, 76, 77, 109, 109, 109, 109, 82, 109, 109,
+ 85, 109, 60, 61, 109, 90, 91, 92, 10, 94,
+ 95, 13, 109, 2, 67, 17, 69, 109, 109, 72,
+ 109, 109, 75, 76, 77, 27, 109, 29, 109, 82,
+ 109, 33, 85, 109, 109, 109, 109, 90, 91, 92,
+ 109, 94, 95, 109, 109, 109, 109, 36, 109, 38,
+ 39, 40, 105, 106, 109, 67, 109, 69, 109, 48,
+ 72, 109, 109, 75, 76, 77, 55, 56, 57, 58,
+ 82, 109, 109, 85, 109, 109, 109, 74, 90, 91,
+ 92, 78, 94, 95, 67, 27, 69, 84, 109, 72,
+ 102, 33, 75, 76, 77, 109, 38, 39, 40, 82,
+ 109, 109, 85, 109, 109, 109, 103, 90, 91, 92,
+ 109, 94, 95, 55, 56, 57, 58, 109, 109, 102,
+ 67, 109, 69, 109, 109, 72, 109, 109, 75, 76,
+ 77, 109, 109, 109, 109, 82, 109, 109, 85, 109,
+ 109, 109, 109, 90, 91, 92, 109, 94, 95, 109,
+ 109, 109, 67, 109, 69, 109, 1, 72, 109, 106,
+ 75, 76, 77, 109, 79, 109, 109, 82, 109, 14,
+ 85, 74, 109, 18, 109, 90, 91, 92, 109, 94,
+ 95, 84, 27, 86, 87, 88, 109, 67, 33, 69,
+ 109, 36, 72, 109, 109, 75, 76, 77, 109, 109,
+ 109, 109, 82, 48, 109, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 67, 109, 69, 109,
+ 109, 72, 102, 109, 75, 76, 77, 67, 79, 69,
+ 109, 82, 72, 109, 85, 75, 76, 77, 109, 90,
+ 91, 92, 82, 94, 95, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 109, 67, 109, 69,
+ 109, 109, 72, 109, 109, 75, 76, 77, 109, 109,
+ 109, 109, 82, 109, 109, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 67, 109, 69, 109,
+ 109, 72, 109, 109, 75, 76, 77, 67, 109, 69,
+ 109, 82, 72, 109, 85, 75, 76, 77, 109, 90,
+ 91, 92, 82, 94, 95, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 109, 67, 109, 69,
+ 109, 109, 72, 109, 109, 75, 76, 77, 109, 109,
+ 109, 109, 82, 109, 109, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 67, 109, 69, 109,
+ 109, 72, 109, 109, 75, 76, 77, 67, 109, 69,
+ 109, 82, 72, 109, 85, 75, 76, 77, 109, 90,
+ 91, 92, 82, 94, 95, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 109, 67, 109, 69,
+ 109, 109, 72, 109, 109, 75, 76, 77, 109, 109,
+ 109, 109, 82, 109, 109, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 67, 109, 69, 109,
+ 109, 72, 109, 109, 75, 76, 77, 67, 109, 69,
+ 109, 82, 72, 109, 85, 75, 76, 77, 109, 90,
+ 91, 92, 82, 94, 95, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 109, 67, 109, 69,
+ 109, 109, 72, 109, 109, 75, 76, 77, 109, 109,
+ 109, 109, 82, 109, 109, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 67, 109, 69, 109,
+ 109, 72, 109, 109, 75, 76, 77, 67, 109, 69,
+ 109, 82, 72, 109, 85, 75, 76, 77, 109, 90,
+ 91, 92, 82, 94, 95, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 109, 67, 109, 69,
+ 109, 109, 72, 109, 109, 75, 76, 77, 109, 109,
+ 109, 109, 82, 109, 109, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 67, 109, 69, 109,
+ 109, 72, 109, 109, 75, 76, 77, 67, 109, 69,
+ 109, 82, 72, 109, 85, 75, 76, 77, 109, 90,
+ 91, 92, 82, 94, 95, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 109, 67, 109, 69,
+ 109, 109, 72, 109, 109, 75, 76, 77, 109, 109,
+ 109, 109, 82, 109, 109, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 67, 109, 69, 109,
+ 109, 72, 109, 109, 75, 76, 77, 67, 109, 69,
+ 109, 82, 72, 109, 85, 75, 76, 77, 109, 90,
+ 91, 92, 82, 94, 95, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 109, 67, 109, 69,
+ 109, 109, 72, 109, 109, 75, 76, 77, 109, 109,
+ 109, 109, 82, 109, 109, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 67, 109, 69, 109,
+ 109, 72, 109, 109, 75, 76, 77, 67, 109, 69,
+ 109, 82, 72, 109, 85, 75, 76, 77, 109, 90,
+ 91, 92, 82, 94, 95, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 109, 67, 109, 69,
+ 109, 109, 72, 109, 109, 75, 76, 77, 109, 109,
+ 109, 109, 82, 109, 109, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 67, 109, 69, 109,
+ 109, 72, 109, 109, 75, 76, 77, 67, 109, 69,
+ 109, 82, 72, 109, 85, 75, 76, 77, 109, 90,
+ 91, 92, 82, 94, 95, 85, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 109, 67, 109, 69,
+ 109, 109, 72, 109, 109, 75, 76, 109, 109, 109,
+ 109, 109, 82, 109, 109, 109, 109, 109, 109, 89,
+ 90, 91, 92, 109, 94, 95, 67, 109, 69, 109,
+ 109, 72, 109, 109, 75, 76, 109, 67, 109, 69,
+ 109, 82, 72, 109, 109, 75, 76, 109, 89, 90,
+ 91, 92, 82, 94, 95, 109, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 109, 67, 109, 69,
+ 109, 109, 72, 109, 109, 75, 76, 109, 109, 109,
+ 109, 109, 82, 109, 109, 109, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 67, 109, 69, 109,
+ 109, 72, 109, 109, 75, 76, 109, 67, 109, 69,
+ 109, 82, 72, 109, 109, 75, 76, 109, 109, 90,
+ 91, 92, 82, 94, 95, 109, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 109, 67, 109, 69,
+ 109, 109, 72, 109, 109, 75, 76, 109, 109, 109,
+ 109, 109, 82, 109, 109, 109, 109, 109, 109, 109,
+ 90, 91, 92, 109, 94, 95, 67, 109, 69, 109,
+ 109, 72, 109, 109, 75, 76, 109, 67, 109, 69,
+ 109, 82, 72, 109, 109, 75, 76, 109, 109, 90,
+ 91, 92, 82, 94, 95, 109, 109, 109, 109, 109,
+ 90, 91, 92, 2, 94, 95, 109, 25, 109, 27,
+ 109, 10, 109, 109, 13, 33, 109, 16, 17, 18,
+ 38, 39, 40, 37, 38, 39, 40, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 55, 56, 57,
+ 58, 55, 56, 57, 58, 109, 45, 109, 109, 48,
+ 109, 50, 2, 52, 10, 109, 109, 13, 109, 109,
+ 10, 17, 18, 13, 109, 109, 2, 17, 18, 109,
+ 109, 109, 109, 109, 10, 109, 109, 13, 109, 109,
+ 16, 17, 18, 109, 109, 109, 109, 109, 109, 45,
+ 109, 109, 48, 109, 50, 45, 52, 109, 48, 109,
+ 50, 109, 52, 53, 109, 109, 109, 109, 109, 45,
+ 109, 109, 48, 109, 50, 2, 52, 109, 109, 109,
+ 109, 109, 109, 10, 109, 109, 13, 109, 109, 2,
+ 17, 18, 2, 37, 38, 39, 40, 10, 109, 109,
+ 13, 109, 109, 109, 17, 18, 109, 109, 109, 109,
+ 109, 55, 56, 57, 58, 109, 109, 109, 45, 109,
+ 109, 48, 109, 50, 109, 52, 14, 109, 38, 39,
+ 40, 109, 45, 109, 109, 48, 109, 50, 109, 52,
+ 14, 109, 109, 109, 109, 55, 56, 57, 58, 109,
+ 38, 39, 40, 109, 109, 22, 109, 38, 39, 40,
+ 109, 14, 109, 109, 38, 39, 40, 55, 56, 57,
+ 58, 38, 39, 40, 55, 56, 57, 58, 109, 109,
+ 61, 55, 56, 57, 58, 38, 39, 40, 55, 56,
+ 57, 58, 14, 109, 109, 109, 28, 109, 109, 109,
+ 109, 109, 55, 56, 57, 58, 38, 39, 40, 109,
+ 109, 109, 38, 39, 40, 109, 38, 39, 40, 109,
+ 38, 39, 40, 55, 56, 57, 58, 53, 109, 55,
+ 56, 57, 58, 55, 56, 57, 58, 55, 56, 57,
+ 58,
+ );
+
+ public static $yy_shift_ofst = array(
+ -31, 406, 406, 458, 458, 94, 510, 94, 94, 94,
+ 510, 458, -10, 94, 94, 354, 146, 94, 94, 94,
+ 94, 146, 94, 94, 94, 94, 250, 94, 94, 94,
+ 94, 94, 94, 302, 94, 94, 94, 198, 42, 42,
+ 42, 42, 42, 42, 42, 42, 1772, 828, 828, 80,
+ 712, 925, 301, 65, 272, 680, 1942, 1920, 1886, 1776,
+ 647, 1949, 1977, 2008, 2004, 1963, 1998, 1956, 2012, 2012,
+ 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012,
+ 2012, 2012, 2012, 768, 650, 272, 65, 272, 65, 134,
+ 126, 479, 597, 1854, 154, 290, 95, 55, 258, 366,
+ 248, 366, 282, 443, 437, 38, 38, 437, 7, 481,
+ 410, 38, 461, 621, 596, 596, 261, 596, 596, 261,
+ 596, 596, 596, 596, 596, -31, -31, 1840, 1791, 1917,
+ 1903, 1834, 158, 238, 394, 446, 38, 25, 147, 169,
+ 147, 25, 169, 25, 38, 38, 25, 25, 38, 25,
+ 307, 38, 38, 25, 527, 38, 38, 25, 38, 38,
+ 38, 38, 38, 596, 624, 261, 624, 327, 596, 596,
+ 261, 596, 261, -31, -31, -31, -31, -31, -31, 781,
+ 3, 31, 193, 137, -30, 186, -17, 522, 349, 469,
+ 322, 30, 82, 316, 346, 376, 190, 358, 393, 152,
+ 209, 380, 385, 245, 315, 523, 585, 554, 576, 575,
+ 537, 573, 569, 529, 525, 546, 500, 526, 531, 325,
+ 530, 487, 494, 502, 470, 433, 430, 408, 383, 327,
+ 374,
+ );
+
+ public static $yy_reduce_ofst = array(
+ 471, 504, 563, 717, 574, 685, 919, 890, 787, 758,
+ 855, 823, 1240, 1199, 1140, 1100, 1070, 1129, 1170, 1210,
+ 1269, 1280, 1310, 1339, 1350, 1380, 1409, 1420, 1450, 1479,
+ 1490, 1059, 1030, 1000, 930, 960, 989, 1520, 1549, 1700,
+ 1619, 1689, 1660, 1630, 1590, 1560, 633, 661, 867, 8,
+ 166, 773, 255, 541, 174, 262, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 294, -70, 196, 120, 68, 274, 19,
+ 206, 331, 444, 428, 257, 400, 382, 257, 257, 400,
+ 386, 397, 257, 386, 381, 388, 359, 314, 257, 442,
+ 482, 491, 484, 257, 257, 455, 386, 257, 257, 438,
+ 257, 257, 257, 257, 257, 257, 365, 509, 509, 509,
+ 509, 509, 524, 536, 509, 509, 528, 514, 539, 551,
+ 538, 514, 556, 514, 528, 528, 514, 514, 528, 514,
+ 518, 528, 528, 514, 532, 528, 528, 514, 528, 528,
+ 528, 528, 528, -90, 520, 122, 520, 566, -90, -90,
+ 122, -90, 122, -45, 36, 155, 101, 61, 17,
+ );
+
+ public static $yyExpectedTokens = array(
+ array(),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 53, 54, 59,
+ 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(
+ 10, 11, 12, 13, 15, 17, 19, 20, 21, 26, 30, 31, 32, 34, 36, 39, 42, 43, 44, 45, 47, 49, 51, 52, 54, 59, 60,
+ ),
+ array(25, 27, 33, 38, 39, 40, 55, 56, 57, 58,),
+ array(27, 33, 38, 39, 40, 55, 56, 57, 58,),
+ array(27, 33, 38, 39, 40, 55, 56, 57, 58,),
+ array(15, 17, 49, 51, 54,),
+ array(4, 10, 11, 12, 13, 15, 19, 20, 21, 26, 30, 31, 32, 60, 61,),
+ array(1, 14, 18, 27, 33, 36, 48,),
+ array(15, 17, 51, 54,),
+ array(1, 27, 33,),
+ array(15, 36, 54,),
+ array(4, 10, 11, 12, 13, 15, 19, 20, 21, 26, 30, 31, 32, 60, 61,),
+ array(14, 38, 39, 40, 55, 56, 57, 58,),
+ array(2, 38, 39, 40, 55, 56, 57, 58,),
+ array(37, 38, 39, 40, 55, 56, 57, 58,),
+ array(37, 38, 39, 40, 55, 56, 57, 58,),
+ array(14, 38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58, 61,),
+ array(14, 38, 39, 40, 55, 56, 57, 58,),
+ array(14, 38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 53, 55, 56, 57, 58,),
+ array(22, 38, 39, 40, 55, 56, 57, 58,),
+ array(28, 38, 39, 40, 55, 56, 57, 58,),
+ array(14, 38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(38, 39, 40, 55, 56, 57, 58,),
+ array(10, 13, 17, 27, 29, 33,),
+ array(10, 13, 17, 27, 33,),
+ array(15, 36, 54,),
+ array(1, 27, 33,),
+ array(15, 36, 54,),
+ array(1, 27, 33,),
+ array(18, 45, 52,),
+ array(16, 18, 48,),
+ array(1, 2,),
+ array(3, 4, 5, 6, 7, 10, 11, 12, 13, 19, 20, 21, 26, 30, 31, 32,),
+ array(2, 10, 13, 16, 17, 18, 45, 48, 50, 52,),
+ array(1, 14, 27, 33,),
+ array(10, 13, 17, 50,),
+ array(13, 15, 17, 54,),
+ array(1, 14, 27, 33,),
+ array(1, 14, 27, 33,),
+ array(10, 13, 17,),
+ array(16, 18, 48,),
+ array(10, 13, 17,),
+ array(1, 29,),
+ array(18, 48,),
+ array(15, 17,),
+ array(27, 33,),
+ array(27, 33,),
+ array(15, 17,),
+ array(1, 53,),
+ array(27, 33,),
+ array(1, 18,),
+ array(27, 33,),
+ array(15, 54,),
+ array(1,),
+ array(1,),
+ array(1,),
+ array(18,),
+ array(1,),
+ array(1,),
+ array(18,),
+ array(1,),
+ array(1,),
+ array(1,),
+ array(1,),
+ array(1,),
+ array(),
+ array(),
+ array(2, 10, 13, 17, 18, 45, 48, 50, 52, 53,),
+ array(2, 10, 13, 16, 17, 18, 45, 48, 50, 52,),
+ array(2, 10, 13, 17, 18, 45, 48, 50, 52,),
+ array(2, 10, 13, 17, 18, 45, 48, 50, 52,),
+ array(10, 13, 17, 18, 45, 48, 50, 52,),
+ array(13, 15, 17, 34, 54,),
+ array(10, 13, 17, 50,),
+ array(16, 45, 52,),
+ array(10, 13, 17,),
+ array(27, 33,),
+ array(45, 52,),
+ array(15, 54,),
+ array(45, 52,),
+ array(15, 54,),
+ array(45, 52,),
+ array(45, 52,),
+ array(45, 52,),
+ array(27, 33,),
+ array(27, 33,),
+ array(45, 52,),
+ array(45, 52,),
+ array(27, 33,),
+ array(45, 52,),
+ array(13, 36,),
+ array(27, 33,),
+ array(27, 33,),
+ array(45, 52,),
+ array(16, 23,),
+ array(27, 33,),
+ array(27, 33,),
+ array(45, 52,),
+ array(27, 33,),
+ array(27, 33,),
+ array(27, 33,),
+ array(27, 33,),
+ array(27, 33,),
+ array(1,),
+ array(2,),
+ array(18,),
+ array(2,),
+ array(36,),
+ array(1,),
+ array(1,),
+ array(18,),
+ array(1,),
+ array(18,),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(2, 36, 38, 39, 40, 48, 55, 56, 57, 58,),
+ array(14, 22, 24, 27, 33, 35, 37, 45,),
+ array(14, 16, 27, 33, 36, 48,),
+ array(14, 23, 27, 33, 46,),
+ array(14, 23, 27, 33, 46,),
+ array(36, 45, 48, 53,),
+ array(10, 13, 17, 50,),
+ array(29, 36, 48,),
+ array(23, 46, 61,),
+ array(23, 46, 53,),
+ array(35, 37,),
+ array(35, 37,),
+ array(16, 45,),
+ array(35, 53,),
+ array(8, 9,),
+ array(36, 48,),
+ array(36, 48,),
+ array(35, 37,),
+ array(23, 46,),
+ array(36, 48,),
+ array(17, 50,),
+ array(22, 35,),
+ array(7, 9,),
+ array(35, 37,),
+ array(45, 53,),
+ array(24,),
+ array(16,),
+ array(8,),
+ array(37,),
+ array(14,),
+ array(17,),
+ array(51,),
+ array(14,),
+ array(15,),
+ array(53,),
+ array(53,),
+ array(17,),
+ array(51,),
+ array(41,),
+ array(17,),
+ array(17,),
+ array(17,),
+ array(45,),
+ array(34,),
+ array(17,),
+ array(17,),
+ array(34,),
+ array(17,),
+ array(36,),
+ array(17,),
+ array(36,),
+ array(17,),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ );
+
+ public static $yy_default = array(
+ 338, 514, 514, 499, 499, 514, 514, 476, 476, 476,
+ 514, 514, 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 514, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 379, 358, 379, 514,
+ 514, 415, 514, 379, 514, 514, 351, 514, 514, 514,
+ 514, 514, 514, 514, 514, 514, 384, 514, 399, 475,
+ 351, 403, 390, 474, 500, 502, 384, 501, 363, 381,
+ 404, 386, 391, 379, 379, 514, 379, 514, 379, 489,
+ 431, 370, 327, 430, 393, 441, 514, 393, 393, 441,
+ 431, 441, 393, 431, 514, 379, 360, 514, 393, 379,
+ 373, 379, 514, 406, 402, 375, 431, 396, 398, 486,
+ 393, 408, 397, 407, 406, 483, 336, 430, 430, 430,
+ 430, 430, 514, 443, 457, 441, 367, 438, 514, 436,
+ 514, 435, 434, 466, 368, 348, 439, 437, 361, 467,
+ 441, 356, 354, 468, 514, 366, 355, 469, 362, 359,
+ 352, 369, 365, 371, 478, 463, 477, 441, 374, 376,
+ 490, 424, 487, 441, 441, 482, 482, 336, 482, 415,
+ 411, 415, 405, 405, 415, 442, 415, 405, 405, 514,
+ 514, 411, 514, 514, 425, 514, 514, 405, 415, 514,
+ 514, 334, 514, 411, 387, 514, 514, 514, 514, 514,
+ 514, 514, 514, 420, 514, 514, 514, 417, 514, 514,
+ 514, 411, 413, 514, 514, 514, 514, 488, 514, 457,
+ 514, 421, 364, 420, 340, 422, 357, 341, 409, 400,
+ 480, 457, 462, 401, 485, 423, 426, 342, 447, 380,
+ 416, 339, 428, 329, 330, 444, 445, 446, 394, 331,
+ 395, 429, 419, 388, 332, 418, 410, 392, 412, 333,
+ 335, 414, 337, 472, 417, 479, 427, 497, 347, 461,
+ 460, 459, 378, 346, 464, 510, 495, 511, 498, 473,
+ 377, 496, 503, 506, 513, 512, 509, 507, 504, 508,
+ 345, 458, 471, 448, 505, 454, 452, 455, 456, 450,
+ 491, 449, 492, 493, 494, 470, 451, 328, 453, 343,
+ 344, 372, 481, 432, 433, 465, 440,
+ );
+
+ public static $yyFallback = array();
+
+ public static $yyRuleName = array(
+ 'start ::= template',
+ 'template ::= template PHP',
+ 'template ::= template TEXT',
+ 'template ::= template STRIPON',
+ 'template ::= template STRIPOFF',
+ 'template ::= template LITERALSTART literal_e2 LITERALEND',
+ 'literal_e2 ::= literal_e1 LITERALSTART literal_e1 LITERALEND',
+ 'literal_e2 ::= literal_e1',
+ 'literal_e1 ::= literal_e1 LITERAL',
+ 'literal_e1 ::=',
+ 'template ::= template smartytag',
+ 'template ::=',
+ 'smartytag ::= SIMPELOUTPUT',
+ 'smartytag ::= SIMPLETAG',
+ 'smartytag ::= SMARTYBLOCKCHILDPARENT',
+ 'smartytag ::= LDEL tagbody RDEL',
+ 'smartytag ::= tag RDEL',
+ 'tagbody ::= outattr',
+ 'tagbody ::= DOLLARID eqoutattr',
+ 'tagbody ::= varindexed eqoutattr',
+ 'eqoutattr ::= EQUAL outattr',
+ 'outattr ::= output attributes',
+ 'output ::= variable',
+ 'output ::= value',
+ 'output ::= expr',
+ 'tag ::= LDEL ID attributes',
+ 'tag ::= LDEL ID',
+ 'tag ::= LDEL ID modifierlist attributes',
+ 'tag ::= LDEL ID PTR ID attributes',
+ 'tag ::= LDEL ID PTR ID modifierlist attributes',
+ 'tag ::= LDELMAKENOCACHE DOLLARID',
+ 'tag ::= LDELIF expr',
+ 'tag ::= LDELIF expr attributes',
+ 'tag ::= LDELIF statement',
+ 'tag ::= LDELIF statement attributes',
+ 'tag ::= LDELFOR statements SEMICOLON expr SEMICOLON varindexed foraction attributes',
+ 'foraction ::= EQUAL expr',
+ 'foraction ::= INCDEC',
+ 'tag ::= LDELFOR statement TO expr attributes',
+ 'tag ::= LDELFOR statement TO expr STEP expr attributes',
+ 'tag ::= LDELFOREACH SPACE expr AS varvar attributes',
+ 'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes',
+ 'tag ::= LDELFOREACH attributes',
+ 'tag ::= LDELSETFILTER ID modparameters',
+ 'tag ::= LDELSETFILTER ID modparameters modifierlist',
+ 'smartytag ::= CLOSETAG',
+ 'tag ::= LDELSLASH ID',
+ 'tag ::= LDELSLASH ID modifierlist',
+ 'tag ::= LDELSLASH ID PTR ID',
+ 'tag ::= LDELSLASH ID PTR ID modifierlist',
+ 'attributes ::= attributes attribute',
+ 'attributes ::= attribute',
+ 'attributes ::=',
+ 'attribute ::= SPACE ID EQUAL ID',
+ 'attribute ::= ATTR expr',
+ 'attribute ::= ATTR value',
+ 'attribute ::= SPACE ID',
+ 'attribute ::= SPACE expr',
+ 'attribute ::= SPACE value',
+ 'attribute ::= SPACE INTEGER EQUAL expr',
+ 'statements ::= statement',
+ 'statements ::= statements COMMA statement',
+ 'statement ::= DOLLARID EQUAL INTEGER',
+ 'statement ::= DOLLARID EQUAL expr',
+ 'statement ::= varindexed EQUAL expr',
+ 'statement ::= OPENP statement CLOSEP',
+ 'expr ::= value',
+ 'expr ::= ternary',
+ 'expr ::= DOLLARID COLON ID',
+ 'expr ::= expr MATH value',
+ 'expr ::= expr UNIMATH value',
+ 'expr ::= expr tlop value',
+ 'expr ::= expr lop expr',
+ 'expr ::= expr scond',
+ 'expr ::= expr ISIN array',
+ 'expr ::= expr ISIN value',
+ 'ternary ::= OPENP expr CLOSEP QMARK DOLLARID COLON expr',
+ 'ternary ::= OPENP expr CLOSEP QMARK expr COLON expr',
+ 'value ::= variable',
+ 'value ::= UNIMATH value',
+ 'value ::= NOT value',
+ 'value ::= TYPECAST value',
+ 'value ::= variable INCDEC',
+ 'value ::= HEX',
+ 'value ::= INTEGER',
+ 'value ::= INTEGER DOT INTEGER',
+ 'value ::= INTEGER DOT',
+ 'value ::= DOT INTEGER',
+ 'value ::= ID',
+ 'value ::= function',
+ 'value ::= OPENP expr CLOSEP',
+ 'value ::= variable INSTANCEOF ns1',
+ 'value ::= variable INSTANCEOF variable',
+ 'value ::= SINGLEQUOTESTRING',
+ 'value ::= doublequoted_with_quotes',
+ 'value ::= varindexed DOUBLECOLON static_class_access',
+ 'value ::= smartytag',
+ 'value ::= value modifierlist',
+ 'value ::= NAMESPACE',
+ 'value ::= arraydef',
+ 'value ::= ns1 DOUBLECOLON static_class_access',
+ 'ns1 ::= ID',
+ 'ns1 ::= NAMESPACE',
+ 'variable ::= DOLLARID',
+ 'variable ::= varindexed',
+ 'variable ::= varvar AT ID',
+ 'variable ::= object',
+ 'variable ::= HATCH ID HATCH',
+ 'variable ::= HATCH ID HATCH arrayindex',
+ 'variable ::= HATCH variable HATCH',
+ 'variable ::= HATCH variable HATCH arrayindex',
+ 'varindexed ::= DOLLARID arrayindex',
+ 'varindexed ::= varvar arrayindex',
+ 'arrayindex ::= arrayindex indexdef',
+ 'arrayindex ::=',
+ 'indexdef ::= DOT DOLLARID',
+ 'indexdef ::= DOT varvar',
+ 'indexdef ::= DOT varvar AT ID',
+ 'indexdef ::= DOT ID',
+ 'indexdef ::= DOT INTEGER',
+ 'indexdef ::= DOT LDEL expr RDEL',
+ 'indexdef ::= OPENB ID CLOSEB',
+ 'indexdef ::= OPENB ID DOT ID CLOSEB',
+ 'indexdef ::= OPENB SINGLEQUOTESTRING CLOSEB',
+ 'indexdef ::= OPENB INTEGER CLOSEB',
+ 'indexdef ::= OPENB DOLLARID CLOSEB',
+ 'indexdef ::= OPENB variable CLOSEB',
+ 'indexdef ::= OPENB value CLOSEB',
+ 'indexdef ::= OPENB expr CLOSEB',
+ 'indexdef ::= OPENB CLOSEB',
+ 'varvar ::= DOLLARID',
+ 'varvar ::= DOLLAR',
+ 'varvar ::= varvar varvarele',
+ 'varvarele ::= ID',
+ 'varvarele ::= SIMPELOUTPUT',
+ 'varvarele ::= LDEL expr RDEL',
+ 'object ::= varindexed objectchain',
+ 'objectchain ::= objectelement',
+ 'objectchain ::= objectchain objectelement',
+ 'objectelement ::= PTR ID arrayindex',
+ 'objectelement ::= PTR varvar arrayindex',
+ 'objectelement ::= PTR LDEL expr RDEL arrayindex',
+ 'objectelement ::= PTR ID LDEL expr RDEL arrayindex',
+ 'objectelement ::= PTR method',
+ 'function ::= ns1 OPENP params CLOSEP',
+ 'method ::= ID OPENP params CLOSEP',
+ 'method ::= DOLLARID OPENP params CLOSEP',
+ 'params ::= params COMMA expr',
+ 'params ::= expr',
+ 'params ::=',
+ 'modifierlist ::= modifierlist modifier modparameters',
+ 'modifierlist ::= modifier modparameters',
+ 'modifier ::= VERT AT ID',
+ 'modifier ::= VERT ID',
+ 'modparameters ::= modparameters modparameter',
+ 'modparameters ::=',
+ 'modparameter ::= COLON value',
+ 'modparameter ::= COLON UNIMATH value',
+ 'modparameter ::= COLON array',
+ 'static_class_access ::= method',
+ 'static_class_access ::= method objectchain',
+ 'static_class_access ::= ID',
+ 'static_class_access ::= DOLLARID arrayindex',
+ 'static_class_access ::= DOLLARID arrayindex objectchain',
+ 'lop ::= LOGOP',
+ 'lop ::= SLOGOP',
+ 'tlop ::= TLOGOP',
+ 'scond ::= SINGLECOND',
+ 'arraydef ::= OPENB arrayelements CLOSEB',
+ 'arraydef ::= ARRAYOPEN arrayelements CLOSEP',
+ 'arrayelements ::= arrayelement',
+ 'arrayelements ::= arrayelements COMMA arrayelement',
+ 'arrayelements ::=',
+ 'arrayelement ::= value APTR expr',
+ 'arrayelement ::= ID APTR expr',
+ 'arrayelement ::= expr',
+ 'doublequoted_with_quotes ::= QUOTE QUOTE',
+ 'doublequoted_with_quotes ::= QUOTE doublequoted QUOTE',
+ 'doublequoted ::= doublequoted doublequotedcontent',
+ 'doublequoted ::= doublequotedcontent',
+ 'doublequotedcontent ::= BACKTICK variable BACKTICK',
+ 'doublequotedcontent ::= BACKTICK expr BACKTICK',
+ 'doublequotedcontent ::= DOLLARID',
+ 'doublequotedcontent ::= LDEL variable RDEL',
+ 'doublequotedcontent ::= LDEL expr RDEL',
+ 'doublequotedcontent ::= smartytag',
+ 'doublequotedcontent ::= TEXT',
+ );
+
+ public static $yyRuleInfo = array(
+ array(0 => 63, 1 => 1),
+ array(0 => 64, 1 => 2),
+ array(0 => 64, 1 => 2),
+ array(0 => 64, 1 => 2),
+ array(0 => 64, 1 => 2),
+ array(0 => 64, 1 => 4),
+ array(0 => 65, 1 => 4),
+ array(0 => 65, 1 => 1),
+ array(0 => 66, 1 => 2),
+ array(0 => 66, 1 => 0),
+ array(0 => 64, 1 => 2),
+ array(0 => 64, 1 => 0),
+ array(0 => 67, 1 => 1),
+ array(0 => 67, 1 => 1),
+ array(0 => 67, 1 => 1),
+ array(0 => 67, 1 => 3),
+ array(0 => 67, 1 => 2),
+ array(0 => 68, 1 => 1),
+ array(0 => 68, 1 => 2),
+ array(0 => 68, 1 => 2),
+ array(0 => 71, 1 => 2),
+ array(0 => 70, 1 => 2),
+ array(0 => 73, 1 => 1),
+ array(0 => 73, 1 => 1),
+ array(0 => 73, 1 => 1),
+ array(0 => 69, 1 => 3),
+ array(0 => 69, 1 => 2),
+ array(0 => 69, 1 => 4),
+ array(0 => 69, 1 => 5),
+ array(0 => 69, 1 => 6),
+ array(0 => 69, 1 => 2),
+ array(0 => 69, 1 => 2),
+ array(0 => 69, 1 => 3),
+ array(0 => 69, 1 => 2),
+ array(0 => 69, 1 => 3),
+ array(0 => 69, 1 => 8),
+ array(0 => 81, 1 => 2),
+ array(0 => 81, 1 => 1),
+ array(0 => 69, 1 => 5),
+ array(0 => 69, 1 => 7),
+ array(0 => 69, 1 => 6),
+ array(0 => 69, 1 => 8),
+ array(0 => 69, 1 => 2),
+ array(0 => 69, 1 => 3),
+ array(0 => 69, 1 => 4),
+ array(0 => 67, 1 => 1),
+ array(0 => 69, 1 => 2),
+ array(0 => 69, 1 => 3),
+ array(0 => 69, 1 => 4),
+ array(0 => 69, 1 => 5),
+ array(0 => 74, 1 => 2),
+ array(0 => 74, 1 => 1),
+ array(0 => 74, 1 => 0),
+ array(0 => 84, 1 => 4),
+ array(0 => 84, 1 => 2),
+ array(0 => 84, 1 => 2),
+ array(0 => 84, 1 => 2),
+ array(0 => 84, 1 => 2),
+ array(0 => 84, 1 => 2),
+ array(0 => 84, 1 => 4),
+ array(0 => 80, 1 => 1),
+ array(0 => 80, 1 => 3),
+ array(0 => 79, 1 => 3),
+ array(0 => 79, 1 => 3),
+ array(0 => 79, 1 => 3),
+ array(0 => 79, 1 => 3),
+ array(0 => 77, 1 => 1),
+ array(0 => 77, 1 => 1),
+ array(0 => 77, 1 => 3),
+ array(0 => 77, 1 => 3),
+ array(0 => 77, 1 => 3),
+ array(0 => 77, 1 => 3),
+ array(0 => 77, 1 => 3),
+ array(0 => 77, 1 => 2),
+ array(0 => 77, 1 => 3),
+ array(0 => 77, 1 => 3),
+ array(0 => 85, 1 => 7),
+ array(0 => 85, 1 => 7),
+ array(0 => 76, 1 => 1),
+ array(0 => 76, 1 => 2),
+ array(0 => 76, 1 => 2),
+ array(0 => 76, 1 => 2),
+ array(0 => 76, 1 => 2),
+ array(0 => 76, 1 => 1),
+ array(0 => 76, 1 => 1),
+ array(0 => 76, 1 => 3),
+ array(0 => 76, 1 => 2),
+ array(0 => 76, 1 => 2),
+ array(0 => 76, 1 => 1),
+ array(0 => 76, 1 => 1),
+ array(0 => 76, 1 => 3),
+ array(0 => 76, 1 => 3),
+ array(0 => 76, 1 => 3),
+ array(0 => 76, 1 => 1),
+ array(0 => 76, 1 => 1),
+ array(0 => 76, 1 => 3),
+ array(0 => 76, 1 => 1),
+ array(0 => 76, 1 => 2),
+ array(0 => 76, 1 => 1),
+ array(0 => 76, 1 => 1),
+ array(0 => 76, 1 => 3),
+ array(0 => 91, 1 => 1),
+ array(0 => 91, 1 => 1),
+ array(0 => 75, 1 => 1),
+ array(0 => 75, 1 => 1),
+ array(0 => 75, 1 => 3),
+ array(0 => 75, 1 => 1),
+ array(0 => 75, 1 => 3),
+ array(0 => 75, 1 => 4),
+ array(0 => 75, 1 => 3),
+ array(0 => 75, 1 => 4),
+ array(0 => 72, 1 => 2),
+ array(0 => 72, 1 => 2),
+ array(0 => 96, 1 => 2),
+ array(0 => 96, 1 => 0),
+ array(0 => 97, 1 => 2),
+ array(0 => 97, 1 => 2),
+ array(0 => 97, 1 => 4),
+ array(0 => 97, 1 => 2),
+ array(0 => 97, 1 => 2),
+ array(0 => 97, 1 => 4),
+ array(0 => 97, 1 => 3),
+ array(0 => 97, 1 => 5),
+ array(0 => 97, 1 => 3),
+ array(0 => 97, 1 => 3),
+ array(0 => 97, 1 => 3),
+ array(0 => 97, 1 => 3),
+ array(0 => 97, 1 => 3),
+ array(0 => 97, 1 => 3),
+ array(0 => 97, 1 => 2),
+ array(0 => 82, 1 => 1),
+ array(0 => 82, 1 => 1),
+ array(0 => 82, 1 => 2),
+ array(0 => 98, 1 => 1),
+ array(0 => 98, 1 => 1),
+ array(0 => 98, 1 => 3),
+ array(0 => 95, 1 => 2),
+ array(0 => 99, 1 => 1),
+ array(0 => 99, 1 => 2),
+ array(0 => 100, 1 => 3),
+ array(0 => 100, 1 => 3),
+ array(0 => 100, 1 => 5),
+ array(0 => 100, 1 => 6),
+ array(0 => 100, 1 => 2),
+ array(0 => 90, 1 => 4),
+ array(0 => 101, 1 => 4),
+ array(0 => 101, 1 => 4),
+ array(0 => 102, 1 => 3),
+ array(0 => 102, 1 => 1),
+ array(0 => 102, 1 => 0),
+ array(0 => 78, 1 => 3),
+ array(0 => 78, 1 => 2),
+ array(0 => 103, 1 => 3),
+ array(0 => 103, 1 => 2),
+ array(0 => 83, 1 => 2),
+ array(0 => 83, 1 => 0),
+ array(0 => 104, 1 => 2),
+ array(0 => 104, 1 => 3),
+ array(0 => 104, 1 => 2),
+ array(0 => 93, 1 => 1),
+ array(0 => 93, 1 => 2),
+ array(0 => 93, 1 => 1),
+ array(0 => 93, 1 => 2),
+ array(0 => 93, 1 => 3),
+ array(0 => 87, 1 => 1),
+ array(0 => 87, 1 => 1),
+ array(0 => 86, 1 => 1),
+ array(0 => 88, 1 => 1),
+ array(0 => 94, 1 => 3),
+ array(0 => 94, 1 => 3),
+ array(0 => 105, 1 => 1),
+ array(0 => 105, 1 => 3),
+ array(0 => 105, 1 => 0),
+ array(0 => 106, 1 => 3),
+ array(0 => 106, 1 => 3),
+ array(0 => 106, 1 => 1),
+ array(0 => 92, 1 => 2),
+ array(0 => 92, 1 => 3),
+ array(0 => 107, 1 => 2),
+ array(0 => 107, 1 => 1),
+ array(0 => 108, 1 => 3),
+ array(0 => 108, 1 => 3),
+ array(0 => 108, 1 => 1),
+ array(0 => 108, 1 => 3),
+ array(0 => 108, 1 => 3),
+ array(0 => 108, 1 => 1),
+ array(0 => 108, 1 => 1),
+ );
+
+ public static $yyReduceMap = array(
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => 5,
+ 6 => 6,
+ 7 => 7,
+ 22 => 7,
+ 23 => 7,
+ 24 => 7,
+ 37 => 7,
+ 57 => 7,
+ 58 => 7,
+ 66 => 7,
+ 67 => 7,
+ 78 => 7,
+ 83 => 7,
+ 84 => 7,
+ 89 => 7,
+ 93 => 7,
+ 94 => 7,
+ 98 => 7,
+ 99 => 7,
+ 101 => 7,
+ 106 => 7,
+ 170 => 7,
+ 175 => 7,
+ 8 => 8,
+ 9 => 9,
+ 10 => 10,
+ 12 => 12,
+ 13 => 13,
+ 14 => 14,
+ 15 => 15,
+ 16 => 16,
+ 17 => 17,
+ 18 => 18,
+ 19 => 19,
+ 20 => 20,
+ 21 => 21,
+ 25 => 25,
+ 26 => 26,
+ 27 => 27,
+ 28 => 28,
+ 29 => 29,
+ 30 => 30,
+ 31 => 31,
+ 32 => 32,
+ 34 => 32,
+ 33 => 33,
+ 35 => 35,
+ 36 => 36,
+ 38 => 38,
+ 39 => 39,
+ 40 => 40,
+ 41 => 41,
+ 42 => 42,
+ 43 => 43,
+ 44 => 44,
+ 45 => 45,
+ 46 => 46,
+ 47 => 47,
+ 48 => 48,
+ 49 => 49,
+ 50 => 50,
+ 51 => 51,
+ 60 => 51,
+ 148 => 51,
+ 152 => 51,
+ 156 => 51,
+ 158 => 51,
+ 52 => 52,
+ 149 => 52,
+ 155 => 52,
+ 53 => 53,
+ 54 => 54,
+ 55 => 54,
+ 56 => 56,
+ 133 => 56,
+ 59 => 59,
+ 61 => 61,
+ 62 => 62,
+ 63 => 62,
+ 64 => 64,
+ 65 => 65,
+ 68 => 68,
+ 69 => 69,
+ 70 => 69,
+ 71 => 71,
+ 72 => 72,
+ 73 => 73,
+ 74 => 74,
+ 75 => 75,
+ 76 => 76,
+ 77 => 77,
+ 79 => 79,
+ 81 => 79,
+ 82 => 79,
+ 113 => 79,
+ 80 => 80,
+ 85 => 85,
+ 86 => 86,
+ 87 => 87,
+ 88 => 88,
+ 90 => 90,
+ 91 => 91,
+ 92 => 91,
+ 95 => 95,
+ 96 => 96,
+ 97 => 97,
+ 100 => 100,
+ 102 => 102,
+ 103 => 103,
+ 104 => 104,
+ 105 => 105,
+ 107 => 107,
+ 108 => 108,
+ 109 => 109,
+ 110 => 110,
+ 111 => 111,
+ 112 => 112,
+ 114 => 114,
+ 172 => 114,
+ 115 => 115,
+ 116 => 116,
+ 117 => 117,
+ 118 => 118,
+ 119 => 119,
+ 120 => 120,
+ 128 => 120,
+ 121 => 121,
+ 122 => 122,
+ 123 => 123,
+ 124 => 123,
+ 126 => 123,
+ 127 => 123,
+ 125 => 125,
+ 129 => 129,
+ 130 => 130,
+ 131 => 131,
+ 176 => 131,
+ 132 => 132,
+ 134 => 134,
+ 135 => 135,
+ 136 => 136,
+ 137 => 137,
+ 138 => 138,
+ 139 => 139,
+ 140 => 140,
+ 141 => 141,
+ 142 => 142,
+ 143 => 143,
+ 144 => 144,
+ 145 => 145,
+ 146 => 146,
+ 147 => 147,
+ 150 => 150,
+ 151 => 151,
+ 153 => 153,
+ 154 => 154,
+ 157 => 157,
+ 159 => 159,
+ 160 => 160,
+ 161 => 161,
+ 162 => 162,
+ 163 => 163,
+ 164 => 164,
+ 165 => 165,
+ 166 => 166,
+ 167 => 167,
+ 168 => 168,
+ 169 => 168,
+ 171 => 171,
+ 173 => 173,
+ 174 => 174,
+ 177 => 177,
+ 178 => 178,
+ 179 => 179,
+ 180 => 180,
+ 183 => 180,
+ 181 => 181,
+ 184 => 181,
+ 182 => 182,
+ 185 => 185,
+ 186 => 186,
+ );
+
+ /**
+ * result status
+ *
+ * @var bool
+ */
+ public $successful = true;
+
+ /**
+ * return value
+ *
+ * @var mixed
+ */
+ public $retvalue = 0;
+
+ /**
+ * @var
+ */
+ public $yymajor;
+
+ /**
+ * last index of array variable
+ *
+ * @var mixed
+ */
+ public $last_index;
+
+ /**
+ * last variable name
+ *
+ * @var string
+ */
+ public $last_variable;
+
+ /**
+ * root parse tree buffer
+ *
+ * @var Smarty_Internal_ParseTree_Template
+ */
+ public $root_buffer;
+
+ /**
+ * current parse tree object
+ *
+ * @var Smarty_Internal_ParseTree
+ */
+ public $current_buffer;
+
+ /**
+ * lexer object
+ *
+ * @var Smarty_Internal_Templatelexer
+ */
+ public $lex;
+
+ /**
+ * {strip} status
+ *
+ * @var bool
+ */
+ public $strip = false;
+
+ /**
+ * compiler object
+ *
+ * @var Smarty_Internal_TemplateCompilerBase
+ */
+ public $compiler = null;
+
+ /**
+ * smarty object
+ *
+ * @var Smarty
+ */
+ public $smarty = null;
+
+ /**
+ * template object
+ *
+ * @var Smarty_Internal_Template
+ */
+ public $template = null;
+
+ /**
+ * block nesting level
+ *
+ * @var int
+ */
+ public $block_nesting_level = 0;
+
+ /**
+ * security object
+ *
+ * @var Smarty_Security
+ */
+ public $security = null;
+
+ /**
+ * template prefix array
+ *
+ * @var \Smarty_Internal_ParseTree[]
+ */
+ public $template_prefix = array();
+
+ /**
+ * template prefix array
+ *
+ * @var \Smarty_Internal_ParseTree[]
+ */
+ public $template_postfix = array();
+
+ public $yyTraceFILE;
+
+ public $yyTracePrompt;
+
+ public $yyidx;
+
+ public $yyerrcnt;
+
+ public $yystack = array();
+
+ public $yyTokenName = array(
+ '$', 'VERT', 'COLON', 'PHP',
+ 'TEXT', 'STRIPON', 'STRIPOFF', 'LITERALSTART',
+ 'LITERALEND', 'LITERAL', 'SIMPELOUTPUT', 'SIMPLETAG',
+ 'SMARTYBLOCKCHILDPARENT', 'LDEL', 'RDEL', 'DOLLARID',
+ 'EQUAL', 'ID', 'PTR', 'LDELMAKENOCACHE',
+ 'LDELIF', 'LDELFOR', 'SEMICOLON', 'INCDEC',
+ 'TO', 'STEP', 'LDELFOREACH', 'SPACE',
+ 'AS', 'APTR', 'LDELSETFILTER', 'CLOSETAG',
+ 'LDELSLASH', 'ATTR', 'INTEGER', 'COMMA',
+ 'OPENP', 'CLOSEP', 'MATH', 'UNIMATH',
+ 'ISIN', 'QMARK', 'NOT', 'TYPECAST',
+ 'HEX', 'DOT', 'INSTANCEOF', 'SINGLEQUOTESTRING',
+ 'DOUBLECOLON', 'NAMESPACE', 'AT', 'HATCH',
+ 'OPENB', 'CLOSEB', 'DOLLAR', 'LOGOP',
+ 'SLOGOP', 'TLOGOP', 'SINGLECOND', 'ARRAYOPEN',
+ 'QUOTE', 'BACKTICK', 'error', 'start',
+ 'template', 'literal_e2', 'literal_e1', 'smartytag',
+ 'tagbody', 'tag', 'outattr', 'eqoutattr',
+ 'varindexed', 'output', 'attributes', 'variable',
+ 'value', 'expr', 'modifierlist', 'statement',
+ 'statements', 'foraction', 'varvar', 'modparameters',
+ 'attribute', 'ternary', 'tlop', 'lop',
+ 'scond', 'array', 'function', 'ns1',
+ 'doublequoted_with_quotes', 'static_class_access', 'arraydef', 'object',
+ 'arrayindex', 'indexdef', 'varvarele', 'objectchain',
+ 'objectelement', 'method', 'params', 'modifier',
+ 'modparameter', 'arrayelements', 'arrayelement', 'doublequoted',
+ 'doublequotedcontent',
+ );
+
+ /**
+ * internal error flag
+ *
+ * @var bool
+ */
+ private $internalError = false; /* Index of top element in stack */
+ private $_retvalue; /* Shifts left before out of the error */
+ /**
+ * constructor
+ *
+ * @param Smarty_Internal_Templatelexer $lex
+ * @param Smarty_Internal_TemplateCompilerBase $compiler
+ */
+ public function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler)
+ {
+ $this->lex = $lex;
+ $this->compiler = $compiler;
+ $this->template = $this->compiler->template;
+ $this->smarty = $this->template->smarty;
+ $this->security = isset($this->smarty->security_policy) ? $this->smarty->security_policy : false;
+ $this->current_buffer = $this->root_buffer = new Smarty_Internal_ParseTree_Template();
+ } /* The parser's stack */
+ public static function yy_destructor($yymajor, $yypminor)
+ {
+ switch ($yymajor) {
+ default:
+ break; /* If no destructor action specified: do nothing */
+ }
+ }
+
+ /**
+ * insert PHP code in current buffer
+ *
+ * @param string $code
+ */
+ public function insertPhpCode($code)
+ {
+ $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Tag($this, $code));
+ }
+
+ /**
+ * error rundown
+ *
+ */
+ public function errorRunDown()
+ {
+ while ($this->yystack !== array()) {
+ $this->yy_pop_parser_stack();
+ }
+ if (is_resource($this->yyTraceFILE)) {
+ fclose($this->yyTraceFILE);
+ }
+ }
+
+ /**
+ * merge PHP code with prefix code and return parse tree tag object
+ *
+ * @param string $code
+ *
+ * @return Smarty_Internal_ParseTree_Tag
+ */
+ public function mergePrefixCode($code)
+ {
+ $tmp = '';
+ foreach ($this->compiler->prefix_code as $preCode) {
+ $tmp .= $preCode;
+ }
+ $this->compiler->prefix_code = array();
+ $tmp .= $code;
+ return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp, true));
+ }
+
+ 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 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 function yy_pop_parser_stack()
+ {
+ if (empty($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)
+ {
+ static $res3 = array();
+ static $res4 = array();
+ $state = $this->yystack[ $this->yyidx ]->stateno;
+ $expected = self::$yyExpectedTokens[ $state ];
+ if (isset($res3[ $state ][ $token ])) {
+ if ($res3[ $state ][ $token ]) {
+ return $expected;
+ }
+ } else {
+ if ($res3[ $state ][ $token ] = 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 ][ 1 ];
+ $nextstate = $this->yy_find_reduce_action(
+ $this->yystack[ $this->yyidx ]->stateno,
+ self::$yyRuleInfo[ $yyruleno ][ 0 ]);
+ if (isset(self::$yyExpectedTokens[ $nextstate ])) {
+ $expected = array_merge($expected, self::$yyExpectedTokens[ $nextstate ]);
+ if (isset($res4[ $nextstate ][ $token ])) {
+ if ($res4[ $nextstate ][ $token ]) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return array_unique($expected);
+ }
+ } else {
+ if ($res4[ $nextstate ][ $token ] =
+ 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 ][ 0 ];
+ $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)
+ {
+ static $res = array();
+ static $res2 = array();
+ if ($token === 0) {
+ return true; // 0 is not part of this
+ }
+ $state = $this->yystack[ $this->yyidx ]->stateno;
+ if (isset($res[ $state ][ $token ])) {
+ if ($res[ $state ][ $token ]) {
+ return true;
+ }
+ } else {
+ if ($res[ $state ][ $token ] = 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 ][ 1 ];
+ $nextstate = $this->yy_find_reduce_action(
+ $this->yystack[ $this->yyidx ]->stateno,
+ self::$yyRuleInfo[ $yyruleno ][ 0 ]);
+ if (isset($res2[ $nextstate ][ $token ])) {
+ if ($res2[ $nextstate ][ $token ]) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return true;
+ }
+ } else {
+ if ($res2[ $nextstate ][ $token ] =
+ (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 ][ 0 ];
+ $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 ];
+ }
+ }
+
+ // line 234 "../smarty/lexer/smarty_internal_templateparser.y"
+ 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 221 "../smarty/lexer/smarty_internal_templateparser.y"
+ $this->internalError = true;
+ $this->compiler->trigger_template_error('Stack overflow in template parser');
+ return;
+ }
+ $yytos = new TP_yyStackEntry;
+ $yytos->stateno = $yyNewState;
+ $yytos->major = $yyMajor;
+ $yytos->minor = $yypMinor;
+ $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");
+ }
+ }
+
+ // line 242 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r0()
+ {
+ $this->root_buffer->prepend_array($this, $this->template_prefix);
+ $this->root_buffer->append_array($this, $this->template_postfix);
+ $this->_retvalue = $this->root_buffer->to_smarty_php($this);
+ }
+
+ // line 251 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r1()
+ {
+ $code =
+ $this->compiler->compileTag('private_php',
+ array(array('code' => $this->yystack[ $this->yyidx + 0 ]->minor), array('type' => $this->lex->phpType)),
+ array());
+ if ($this->compiler->has_code && !empty($code)) {
+ $tmp = '';
+ foreach ($this->compiler->prefix_code as $code) {
+ $tmp .= $code;
+ }
+ $this->compiler->prefix_code = array();
+ $this->current_buffer->append_subtree($this,
+ new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp . $code, true)));
+ }
+ }
+
+ // line 255 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r2()
+ {
+ $text = $this->yystack[ $this->yyidx + 0 ]->minor;
+
+ if ((string)$text == '') {
+ $this->current_buffer->append_subtree($this, null);
+ }
+
+ $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text($text, $this->strip));
+ }
+
+ // line 259 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r3()
+ {
+ $this->strip = true;
+ }
+
+ // line 264 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r4()
+ {
+ $this->strip = false;
+ }
+
+ // line 269 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r5()
+ {
+ $this->current_buffer->append_subtree($this,
+ new Smarty_Internal_ParseTree_Text($this->yystack[ $this->yyidx + -1 ]->minor));
+ }
+
+ // line 272 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r6()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + -3 ]->minor . $this->yystack[ $this->yyidx + -1 ]->minor;
+ }
+
+ // line 276 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r7()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 281 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r8()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 285 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r9()
+ {
+ $this->_retvalue = '';
+ }
+
+ // line 297 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r10()
+ {
+ if ($this->compiler->has_code) {
+ $this->current_buffer->append_subtree($this,
+ $this->mergePrefixCode($this->yystack[ $this->yyidx + 0 ]->minor));
+ }
+ $this->compiler->has_variable_string = false;
+ $this->block_nesting_level = count($this->compiler->_tag_stack);
+ }
+
+ // line 307 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r12()
+ {
+ $var =
+ trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler->getLdelLength(),
+ -$this->compiler->getRdelLength()), ' $');
+ if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) {
+ $this->_retvalue =
+ $this->compiler->compileTag('private_print_expression', array('nocache'),
+ array('value' => $this->compiler->compileVariable('\'' . $match[ 1 ] . '\'')));
+ } else {
+ $this->_retvalue =
+ $this->compiler->compileTag('private_print_expression', array(),
+ array('value' => $this->compiler->compileVariable('\'' . $var . '\'')));
+ }
+ }
+
+ // line 328 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r13()
+ {
+ $tag =
+ trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler->getLdelLength(),
+ -$this->compiler->getRdelLength()));
+ if ($tag == 'strip') {
+ $this->strip = true;
+ $this->_retvalue = null;
+ } else {
+ if (defined($tag)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($tag, $this->compiler);
+ }
+ $this->_retvalue =
+ $this->compiler->compileTag('private_print_expression', array(), array('value' => $tag));
+ } else {
+ if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) {
+ $this->_retvalue = $this->compiler->compileTag($match[ 1 ], array('\'nocache\''));
+ } else {
+ $this->_retvalue = $this->compiler->compileTag($tag, array());
+ }
+ }
+ }
+ }
+
+ // line 339 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r14()
+ {
+ $j = strrpos($this->yystack[ $this->yyidx + 0 ]->minor, '.');
+ if ($this->yystack[ $this->yyidx + 0 ]->minor[ $j + 1 ] == 'c') {
+ // {$smarty.block.child}
+ $this->_retvalue =
+ $this->compiler->compileTag('child', array(), array($this->yystack[ $this->yyidx + 0 ]->minor));
+ } else {
+ // {$smarty.block.parent}
+ $this->_retvalue =
+ $this->compiler->compileTag('parent', array(), array($this->yystack[ $this->yyidx + 0 ]->minor));
+ }
+ }
+
+ // line 343 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r15()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor;
+ }
+
+ // line 347 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r16()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor;
+ }
+
+ // line 356 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r17()
+ {
+ $this->_retvalue =
+ $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ],
+ array('value' => $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ]));
+ }
+
+ // line 360 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r18()
+ {
+ $this->_retvalue =
+ $this->compiler->compileTag('assign', array_merge(array(
+ array('value' => $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ]),
+ array('var' => '\'' . substr($this->yystack[ $this->yyidx + -1 ]->minor, 1) . '\'')
+ ), $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ]));
+ }
+
+ // line 364 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r19()
+ {
+ $this->_retvalue =
+ $this->compiler->compileTag('assign', array_merge(array(
+ array('value' => $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ]),
+ array('var' => $this->yystack[ $this->yyidx + -1 ]->minor[ 'var' ])
+ ), $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ]), array(
+ 'smarty_internal_index' => $this->yystack[ $this->yyidx +
+ -1 ]->minor[ 'smarty_internal_index' ]
+ ));
+ }
+
+ // line 368 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r20()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 383 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r21()
+ {
+ $this->_retvalue = array($this->yystack[ $this->yyidx + -1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ // line 393 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r25()
+ {
+ if (defined($this->yystack[ $this->yyidx + -1 ]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[ $this->yyidx + -1 ]->minor, $this->compiler);
+ }
+ $this->_retvalue =
+ $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor,
+ array('value' => $this->yystack[ $this->yyidx + -1 ]->minor));
+ } else {
+ $this->_retvalue =
+ $this->compiler->compileTag($this->yystack[ $this->yyidx + -1 ]->minor,
+ $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+ }
+
+ // line 406 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r26()
+ {
+ if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler);
+ }
+ $this->_retvalue =
+ $this->compiler->compileTag('private_print_expression', array(),
+ array('value' => $this->yystack[ $this->yyidx + 0 ]->minor));
+ } else {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + 0 ]->minor, array());
+ }
+ }
+
+ // line 418 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r27()
+ {
+ if (defined($this->yystack[ $this->yyidx + -2 ]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[ $this->yyidx + -2 ]->minor, $this->compiler);
+ }
+ $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
+ ));
+ } else {
+ $this->_retvalue =
+ $this->compiler->compileTag($this->yystack[ $this->yyidx + -2 ]->minor,
+ $this->yystack[ $this->yyidx + 0 ]->minor,
+ array('modifierlist' => $this->yystack[ $this->yyidx + -1 ]->minor));
+ }
+ }
+
+ // line 423 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r28()
+ {
+ $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 428 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r29()
+ {
+ $this->_retvalue =
+ $this->compiler->compileTag($this->yystack[ $this->yyidx + -4 ]->minor,
+ $this->yystack[ $this->yyidx + 0 ]->minor, array(
+ 'modifierlist' => $this->yystack[ $this->yyidx + -1 ]->minor,
+ 'object_method' => $this->yystack[ $this->yyidx + -2 ]->minor
+ ));
+ }
+
+ // line 433 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r30()
+ {
+ $this->_retvalue =
+ $this->compiler->compileTag('make_nocache',
+ array(array('var' => '\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'')));
+ }
+
+ // line 438 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r31()
+ {
+ $tag = trim(substr($this->yystack[ $this->yyidx + -1 ]->minor, $this->compiler->getLdelLength()));
+ $this->_retvalue =
+ $this->compiler->compileTag(($tag === 'else if') ? 'elseif' : $tag, array(),
+ array('if condition' => $this->yystack[ $this->yyidx + 0 ]->minor));
+ }
+
+ // line 443 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r32()
+ {
+ $tag = trim(substr($this->yystack[ $this->yyidx + -2 ]->minor, $this->compiler->getLdelLength()));
+ $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 454 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r33()
+ {
+ $tag = trim(substr($this->yystack[ $this->yyidx + -1 ]->minor, $this->compiler->getLdelLength()));
+ $this->_retvalue =
+ $this->compiler->compileTag(($tag === 'else if') ? 'elseif' : $tag, array(),
+ array('if condition' => $this->yystack[ $this->yyidx + 0 ]->minor));
+ }
+
+ // line 458 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r35()
+ {
+ $this->_retvalue =
+ $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, array(
+ array('start' => $this->yystack[ $this->yyidx + -6 ]->minor),
+ array('ifexp' => $this->yystack[ $this->yyidx + -4 ]->minor),
+ array('var' => $this->yystack[ $this->yyidx + -2 ]->minor),
+ array('step' => $this->yystack[ $this->yyidx + -1 ]->minor)
+ )), 1);
+ }
+
+ // line 466 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r36()
+ {
+ $this->_retvalue = '=' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 470 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r38()
+ {
+ $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 475 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r39()
+ {
+ $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 479 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r40()
+ {
+ $this->_retvalue =
+ $this->compiler->compileTag('foreach', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, array(
+ array('from' => $this->yystack[ $this->yyidx + -3 ]->minor),
+ array('item' => $this->yystack[ $this->yyidx + -1 ]->minor)
+ )));
+ }
+
+ // line 482 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r41()
+ {
+ $this->_retvalue =
+ $this->compiler->compileTag('foreach', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, array(
+ array('from' => $this->yystack[ $this->yyidx + -5 ]->minor),
+ array('item' => $this->yystack[ $this->yyidx + -1 ]->minor),
+ array('key' => $this->yystack[ $this->yyidx + -3 ]->minor)
+ )));
+ }
+
+ // line 487 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r42()
+ {
+ $this->_retvalue = $this->compiler->compileTag('foreach', $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ // line 491 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r43()
+ {
+ $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 497 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r44()
+ {
+ $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 506 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r45()
+ {
+ $tag =
+ trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler->getLdelLength(),
+ -$this->compiler->getRdelLength()), ' /');
+ if ($tag === 'strip') {
+ $this->strip = false;
+ $this->_retvalue = null;
+ } else {
+ $this->_retvalue = $this->compiler->compileTag($tag . 'close', array());
+ }
+ }
+
+ // line 510 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r46()
+ {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + 0 ]->minor . 'close', array());
+ }
+
+ // line 515 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r47()
+ {
+ $this->_retvalue =
+ $this->compiler->compileTag($this->yystack[ $this->yyidx + -1 ]->minor . 'close', array(),
+ array('modifier_list' => $this->yystack[ $this->yyidx + 0 ]->minor));
+ }
+
+ // line 519 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r48()
+ {
+ $this->_retvalue =
+ $this->compiler->compileTag($this->yystack[ $this->yyidx + -2 ]->minor . 'close', array(),
+ array('object_method' => $this->yystack[ $this->yyidx + 0 ]->minor));
+ }
+
+ // line 527 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r49()
+ {
+ $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 533 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r50()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor;
+ $this->_retvalue[] = $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 538 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r51()
+ {
+ $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ // line 543 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r52()
+ {
+ $this->_retvalue = array();
+ }
+
+ // line 554 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r53()
+ {
+ if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler);
+ }
+ $this->_retvalue =
+ array($this->yystack[ $this->yyidx + -2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor);
+ } else {
+ $this->_retvalue =
+ array(
+ $this->yystack[ $this->yyidx + -2 ]->minor => '\'' .
+ $this->yystack[ $this->yyidx + 0 ]->minor .
+ '\''
+ );
+ }
+ }
+
+ // line 562 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r54()
+ {
+ $this->_retvalue =
+ array(
+ trim($this->yystack[ $this->yyidx + -1 ]->minor, " =\n\r\t") => $this->yystack[ $this->yyidx +
+ 0 ]->minor
+ );
+ }
+
+ // line 574 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r56()
+ {
+ $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\'';
+ }
+
+ // line 587 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r59()
+ {
+ $this->_retvalue =
+ array($this->yystack[ $this->yyidx + -2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ // line 592 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r61()
+ {
+ $this->yystack[ $this->yyidx + -2 ]->minor[] = $this->yystack[ $this->yyidx + 0 ]->minor;
+ $this->_retvalue = $this->yystack[ $this->yyidx + -2 ]->minor;
+ }
+
+ // line 599 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r62()
+ {
+ $this->_retvalue =
+ array(
+ 'var' => '\'' . substr($this->yystack[ $this->yyidx + -2 ]->minor, 1) . '\'',
+ 'value' => $this->yystack[ $this->yyidx + 0 ]->minor
+ );
+ }
+
+ // line 603 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r64()
+ {
+ $this->_retvalue =
+ array(
+ 'var' => $this->yystack[ $this->yyidx + -2 ]->minor,
+ 'value' => $this->yystack[ $this->yyidx + 0 ]->minor
+ );
+ }
+
+ // line 623 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r65()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor;
+ }
+
+ // line 628 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r68()
+ {
+ $this->_retvalue =
+ '$_smarty_tpl->getStreamVariable(\'' .
+ substr($this->yystack[ $this->yyidx + -2 ]->minor, 1) .
+ '://' .
+ $this->yystack[ $this->yyidx + 0 ]->minor .
+ '\')';
+ }
+
+ // line 638 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r69()
+ {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + -2 ]->minor .
+ trim($this->yystack[ $this->yyidx + -1 ]->minor) .
+ $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 642 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r71()
+ {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + -1 ]->minor[ 'pre' ] .
+ $this->yystack[ $this->yyidx + -2 ]->minor .
+ $this->yystack[ $this->yyidx + -1 ]->minor[ 'op' ] .
+ $this->yystack[ $this->yyidx + 0 ]->minor .
+ ')';
+ }
+
+ // line 646 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r72()
+ {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + -2 ]->minor .
+ $this->yystack[ $this->yyidx + -1 ]->minor .
+ $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 650 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r73()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor . $this->yystack[ $this->yyidx + -1 ]->minor . ')';
+ }
+
+ // line 654 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r74()
+ {
+ $this->_retvalue =
+ 'in_array(' .
+ $this->yystack[ $this->yyidx + -2 ]->minor .
+ ',' .
+ $this->yystack[ $this->yyidx + 0 ]->minor .
+ ')';
+ }
+
+ // line 662 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r75()
+ {
+ $this->_retvalue =
+ 'in_array(' .
+ $this->yystack[ $this->yyidx + -2 ]->minor .
+ ',(array)' .
+ $this->yystack[ $this->yyidx + 0 ]->minor .
+ ')';
+ }
+
+ // line 666 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r76()
+ {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + -5 ]->minor .
+ ' ? ' .
+ $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + -2 ]->minor, 1) . '\'') .
+ ' : ' .
+ $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 676 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r77()
+ {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + -5 ]->minor .
+ ' ? ' .
+ $this->yystack[ $this->yyidx + -2 ]->minor .
+ ' : ' .
+ $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 681 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r79()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 702 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r80()
+ {
+ $this->_retvalue = '!' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 706 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r85()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + -2 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 710 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r86()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor . '.';
+ }
+
+ // line 715 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r87()
+ {
+ $this->_retvalue = '.' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 732 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r88()
+ {
+ if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler);
+ }
+ $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
+ } else {
+ $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\'';
+ }
+ }
+
+ // line 736 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r90()
+ {
+ $this->_retvalue = '(' . $this->yystack[ $this->yyidx + -1 ]->minor . ')';
+ }
+
+ // line 754 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r91()
+ {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + -2 ]->minor .
+ $this->yystack[ $this->yyidx + -1 ]->minor .
+ $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 765 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r95()
+ {
+ if ($this->security && $this->security->static_classes !== array()) {
+ $this->compiler->trigger_template_error('dynamic static class not allowed by security setting');
+ }
+
+ $prefixVar = $this->compiler->getNewPrefixVariable();
+ if ($this->yystack[ $this->yyidx + -2 ]->minor[ 'var' ] === '\'smarty\'') {
+ $this->compiler->appendPrefixCode("compiler->compileTag('private_special_variable', array(),
+ $this->yystack[ $this->yyidx +
+ -2 ]->minor[ 'smarty_internal_index' ]) .
+ ';?>');
+ } else {
+ $this->compiler->appendPrefixCode("compiler->compileVariable($this->yystack[ $this->yyidx +
+ -2 ]->minor[ 'var' ]) .
+ $this->yystack[ $this->yyidx + -2 ]->minor[ 'smarty_internal_index' ] .
+ ';?>');
+ }
+ $this->_retvalue =
+ $prefixVar .
+ '::' .
+ $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] .
+ $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ];
+ }
+
+ // line 772 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r96()
+ {
+ $prefixVar = $this->compiler->getNewPrefixVariable();
+ $tmp = $this->compiler->appendCode('', $this->yystack[ $this->yyidx + 0 ]->minor);
+ $this->compiler->appendPrefixCode($this->compiler->appendCode($tmp, ""));
+ $this->_retvalue = $prefixVar;
+ }
+
+ // line 785 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r97()
+ {
+ $this->_retvalue =
+ $this->compiler->compileTag('private_modifier', array(), array(
+ 'value' => $this->yystack[ $this->yyidx + -1 ]->minor,
+ 'modifierlist' => $this->yystack[ $this->yyidx + 0 ]->minor
+ ));
+ }
+
+ // line 804 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r100()
+ {
+ if (!in_array(strtolower($this->yystack[ $this->yyidx + -2 ]->minor), array('self', 'parent')) &&
+ (!$this->security ||
+ $this->security->isTrustedStaticClassAccess($this->yystack[ $this->yyidx + -2 ]->minor,
+ $this->yystack[ $this->yyidx + 0 ]->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[ 0 ] .
+ $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ];
+ } else {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + -2 ]->minor .
+ '::' .
+ $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] .
+ $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ];
+ }
+ } else {
+ $this->compiler->trigger_template_error('static class \'' .
+ $this->yystack[ $this->yyidx + -2 ]->minor .
+ '\' is undefined or not allowed by security setting');
+ }
+ }
+
+ // line 815 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r102()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 818 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r103()
+ {
+ $this->_retvalue =
+ $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'');
+ }
+
+ // line 831 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r104()
+ {
+ 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->compiler->compileVariable($this->yystack[ $this->yyidx + 0 ]->minor[ 'var' ]) .
+ $this->yystack[ $this->yyidx + 0 ]->minor[ 'smarty_internal_index' ];
+ }
+ }
+
+ // line 841 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r105()
+ {
+ $this->_retvalue =
+ '$_smarty_tpl->tpl_vars[' .
+ $this->yystack[ $this->yyidx + -2 ]->minor .
+ ']->' .
+ $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 845 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r107()
+ {
+ $this->_retvalue =
+ $this->compiler->compileConfigVariable('\'' . $this->yystack[ $this->yyidx + -1 ]->minor . '\'');
+ }
+
+ // line 849 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r108()
+ {
+ $this->_retvalue =
+ '(is_array($tmp = ' .
+ $this->compiler->compileConfigVariable('\'' . $this->yystack[ $this->yyidx + -2 ]->minor . '\'') .
+ ') ? $tmp' .
+ $this->yystack[ $this->yyidx + 0 ]->minor .
+ ' :null)';
+ }
+
+ // line 853 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r109()
+ {
+ $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + -1 ]->minor);
+ }
+
+ // line 857 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r110()
+ {
+ $this->_retvalue =
+ '(is_array($tmp = ' .
+ $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + -2 ]->minor) .
+ ') ? $tmp' .
+ $this->yystack[ $this->yyidx + 0 ]->minor .
+ ' : null)';
+ }
+
+ // line 860 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r111()
+ {
+ $this->_retvalue =
+ array(
+ 'var' => '\'' . substr($this->yystack[ $this->yyidx + -1 ]->minor, 1) . '\'',
+ 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor
+ );
+ }
+
+ // line 873 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r112()
+ {
+ $this->_retvalue =
+ array(
+ 'var' => $this->yystack[ $this->yyidx + -1 ]->minor,
+ 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor
+ );
+ }
+
+ // line 879 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r114()
+ {
+ return;
+ }
+
+ // line 882 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r115()
+ {
+ $this->_retvalue =
+ '[' .
+ $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'') .
+ ']';
+ }
+
+ // line 886 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r116()
+ {
+ $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + 0 ]->minor) . ']';
+ }
+
+ // line 890 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r117()
+ {
+ $this->_retvalue =
+ '[' .
+ $this->compiler->compileVariable($this->yystack[ $this->yyidx + -2 ]->minor) .
+ '->' .
+ $this->yystack[ $this->yyidx + 0 ]->minor .
+ ']';
+ }
+
+ // line 894 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r118()
+ {
+ $this->_retvalue = '[\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\']';
+ }
+
+ // line 899 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r119()
+ {
+ $this->_retvalue = '[' . $this->yystack[ $this->yyidx + 0 ]->minor . ']';
+ }
+
+ // line 904 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r120()
+ {
+ $this->_retvalue = '[' . $this->yystack[ $this->yyidx + -1 ]->minor . ']';
+ }
+
+ // line 908 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r121()
+ {
+ $this->_retvalue =
+ '[' .
+ $this->compiler->compileTag('private_special_variable', array(),
+ '[\'section\'][\'' . $this->yystack[ $this->yyidx + -1 ]->minor . '\'][\'index\']') .
+ ']';
+ }
+
+ // line 911 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r122()
+ {
+ $this->_retvalue =
+ '[' .
+ $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' .
+ $this->yystack[ $this->yyidx +
+ -3 ]->minor .
+ '\'][\'' .
+ $this->yystack[ $this->yyidx +
+ -1 ]->minor .
+ '\']') .
+ ']';
+ }
+
+ // line 917 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r123()
+ {
+ $this->_retvalue = '[' . $this->yystack[ $this->yyidx + -1 ]->minor . ']';
+ }
+
+ // line 933 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r125()
+ {
+ $this->_retvalue =
+ '[' .
+ $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + -1 ]->minor, 1) . '\'') .
+ ']';
+ }
+
+ // line 943 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r129()
+ {
+ $this->_retvalue = '[]';
+ }
+
+ // line 947 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r130()
+ {
+ $this->_retvalue = '\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'';
+ }
+
+ // line 952 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r131()
+ {
+ $this->_retvalue = '\'\'';
+ }
+
+ // line 960 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r132()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 966 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r134()
+ {
+ $var =
+ trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler->getLdelLength(),
+ -$this->compiler->getRdelLength()), ' $');
+ $this->_retvalue = $this->compiler->compileVariable('\'' . $var . '\'');
+ }
+
+ // line 973 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r135()
+ {
+ $this->_retvalue = '(' . $this->yystack[ $this->yyidx + -1 ]->minor . ')';
+ }
+
+ // line 982 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r136()
+ {
+ 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->compiler->compileVariable($this->yystack[ $this->yyidx + -1 ]->minor[ 'var' ]) .
+ $this->yystack[ $this->yyidx + -1 ]->minor[ 'smarty_internal_index' ] .
+ $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+ }
+
+ // line 987 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r137()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 992 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r138()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 999 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r139()
+ {
+ 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 1006 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r140()
+ {
+ if ($this->security) {
+ $this->compiler->trigger_template_error(self::ERR2);
+ }
+ $this->_retvalue =
+ '->{' .
+ $this->compiler->compileVariable($this->yystack[ $this->yyidx + -1 ]->minor) .
+ $this->yystack[ $this->yyidx + 0 ]->minor .
+ '}';
+ }
+
+ // line 1013 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r141()
+ {
+ 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 1021 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r142()
+ {
+ 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 1029 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r143()
+ {
+ $this->_retvalue = '->' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 1037 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r144()
+ {
+ $this->_retvalue =
+ $this->compiler->compilePHPFunctionCall($this->yystack[ $this->yyidx + -3 ]->minor,
+ $this->yystack[ $this->yyidx + -1 ]->minor);
+ }
+
+ // line 1044 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r145()
+ {
+ 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 1055 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r146()
+ {
+ if ($this->security) {
+ $this->compiler->trigger_template_error(self::ERR2);
+ }
+ $prefixVar = $this->compiler->getNewPrefixVariable();
+ $this->compiler->appendPrefixCode("compiler->compileVariable('\'' .
+ substr($this->yystack[ $this->yyidx +
+ -3 ]->minor, 1) .
+ '\'') .
+ ';?>');
+ $this->_retvalue = $prefixVar . '(' . implode(',', $this->yystack[ $this->yyidx + -1 ]->minor) . ')';
+ }
+
+ // line 1072 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r147()
+ {
+ $this->_retvalue =
+ array_merge($this->yystack[ $this->yyidx + -2 ]->minor, array($this->yystack[ $this->yyidx + 0 ]->minor));
+ }
+
+ // line 1076 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r150()
+ {
+ $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 1084 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r151()
+ {
+ $this->_retvalue =
+ array(array_merge($this->yystack[ $this->yyidx + -1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor));
+ }
+
+ // line 1092 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r153()
+ {
+ $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ // line 1105 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r154()
+ {
+ $this->_retvalue =
+ array_merge($this->yystack[ $this->yyidx + -1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ // line 1114 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r157()
+ {
+ $this->_retvalue =
+ array(trim($this->yystack[ $this->yyidx + -1 ]->minor) . $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ // line 1119 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r159()
+ {
+ $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, '', 'method');
+ }
+
+ // line 1124 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r160()
+ {
+ $this->_retvalue =
+ array($this->yystack[ $this->yyidx + -1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'method');
+ }
+
+ // line 1129 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r161()
+ {
+ $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, '');
+ }
+
+ // line 1134 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r162()
+ {
+ $this->_retvalue =
+ array($this->yystack[ $this->yyidx + -1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'property');
+ }
+
+ // line 1140 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r163()
+ {
+ $this->_retvalue =
+ array(
+ $this->yystack[ $this->yyidx + -2 ]->minor,
+ $this->yystack[ $this->yyidx + -1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor, 'property'
+ );
+ }
+
+ // line 1144 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r164()
+ {
+ $this->_retvalue = ' ' . trim($this->yystack[ $this->yyidx + 0 ]->minor) . ' ';
+ }
+
+ // line 1163 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r165()
+ {
+ static $lops = array(
+ 'eq' => ' == ',
+ 'ne' => ' != ',
+ 'neq' => ' != ',
+ 'gt' => ' > ',
+ 'ge' => ' >= ',
+ 'gte' => ' >= ',
+ 'lt' => ' < ',
+ 'le' => ' <= ',
+ 'lte' => ' <= ',
+ 'mod' => ' % ',
+ 'and' => ' && ',
+ 'or' => ' || ',
+ 'xor' => ' xor ',
+ );
+ $op = strtolower(preg_replace('/\s*/', '', $this->yystack[ $this->yyidx + 0 ]->minor));
+ $this->_retvalue = $lops[ $op ];
+ }
+
+ // line 1176 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r166()
+ {
+ static $tlops = array(
+ 'isdivby' => array('op' => ' % ', 'pre' => '!('),
+ 'isnotdivby' => array('op' => ' % ', 'pre' => '('),
+ 'isevenby' => array('op' => ' / ', 'pre' => '!(1 & '),
+ 'isnotevenby' => array('op' => ' / ', 'pre' => '(1 & '),
+ 'isoddby' => array('op' => ' / ', 'pre' => '(1 & '),
+ 'isnotoddby' => array('op' => ' / ', 'pre' => '!(1 & '),
+ );
+ $op = strtolower(preg_replace('/\s*/', '', $this->yystack[ $this->yyidx + 0 ]->minor));
+ $this->_retvalue = $tlops[ $op ];
+ }
+
+ // line 1190 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r167()
+ {
+ static $scond = array(
+ 'iseven' => '!(1 & ',
+ 'isnoteven' => '(1 & ',
+ 'isodd' => '(1 & ',
+ 'isnotodd' => '!(1 & ',
+ );
+ $op = strtolower(str_replace(' ', '', $this->yystack[ $this->yyidx + 0 ]->minor));
+ $this->_retvalue = $scond[ $op ];
+ }
+
+ // line 1201 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r168()
+ {
+ $this->_retvalue = 'array(' . $this->yystack[ $this->yyidx + -1 ]->minor . ')';
+ }
+
+ // line 1209 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r171()
+ {
+ $this->_retvalue = $this->yystack[ $this->yyidx + -2 ]->minor . ',' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 1213 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r173()
+ {
+ $this->_retvalue =
+ $this->yystack[ $this->yyidx + -2 ]->minor . '=>' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 1229 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r174()
+ {
+ $this->_retvalue =
+ '\'' . $this->yystack[ $this->yyidx + -2 ]->minor . '\'=>' . $this->yystack[ $this->yyidx + 0 ]->minor;
+ }
+
+ // line 1235 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r177()
+ {
+ $this->compiler->leaveDoubleQuote();
+ $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor->to_smarty_php($this);
+ }
+
+ // line 1240 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r178()
+ {
+ $this->yystack[ $this->yyidx + -1 ]->minor->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor);
+ $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor;
+ }
+
+ // line 1244 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r179()
+ {
+ $this->_retvalue = new Smarty_Internal_ParseTree_Dq($this, $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ // line 1248 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r180()
+ {
+ $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)' . $this->yystack[ $this->yyidx + -1 ]->minor);
+ }
+
+ // line 1252 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r181()
+ {
+ $this->_retvalue =
+ new Smarty_Internal_ParseTree_Code('(string)(' . $this->yystack[ $this->yyidx + -1 ]->minor . ')');
+ }
+
+ // line 1264 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r182()
+ {
+ $this->_retvalue =
+ new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\'' .
+ substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) .
+ '\']->value');
+ }
+
+ // line 1268 "../smarty/lexer/smarty_internal_templateparser.y"
+ public function yy_r185()
+ {
+ $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ public function yy_r186()
+ {
+ $this->_retvalue = new Smarty_Internal_ParseTree_DqContent($this->yystack[ $this->yyidx + 0 ]->minor);
+ }
+
+ public function yy_reduce($yyruleno)
+ {
+ 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 (isset(self::$yyReduceMap[ $yyruleno ])) {
+ // call the action
+ $this->_retvalue = null;
+ $this->{'yy_r' . self::$yyReduceMap[ $yyruleno ]}();
+ $yy_lefthand_side = $this->_retvalue;
+ }
+ $yygoto = self::$yyRuleInfo[ $yyruleno ][ 0 ];
+ $yysize = self::$yyRuleInfo[ $yyruleno ][ 1 ];
+ $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 214 "../smarty/lexer/smarty_internal_templateparser.y"
+ $this->internalError = true;
+ $this->yymajor = $yymajor;
+ $this->compiler->trigger_template_error();
+ }
+
+ public function yy_accept()
+ {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
+ }
+ while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+ // line 207 "../smarty/lexer/smarty_internal_templateparser.y"
+ $this->successful = !$this->internalError;
+ $this->internalError = false;
+ $this->retvalue = $this->_retvalue;
+ }
+
+ 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();
+ $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/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_testinstall.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_testinstall.php
new file mode 100644
index 0000000..504a458
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_testinstall.php
@@ -0,0 +1,609 @@
+\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->ext->_getIncludePath->getIncludePath($_template_dir, null, $smarty);
+ }
+ 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->ext->_getIncludePath->getIncludePath($_plugin_dir, null, $smarty);
+ }
+ 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;
+ // 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->ext->_getIncludePath->getIncludePath($_config_dir, null, $smarty);
+ }
+ 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)) {
+ $expectedSysplugins = array(
+ 'smartycompilerexception.php' => true,
+ 'smartyexception.php' => true,
+ 'smarty_cacheresource.php' => true,
+ 'smarty_cacheresource_custom.php' => true,
+ 'smarty_cacheresource_keyvaluestore.php' => true,
+ 'smarty_data.php' => true,
+ 'smarty_internal_block.php' => true,
+ 'smarty_internal_cacheresource_file.php' => true,
+ 'smarty_internal_compilebase.php' => true,
+ 'smarty_internal_compile_append.php' => true,
+ 'smarty_internal_compile_assign.php' => true,
+ 'smarty_internal_compile_block.php' => true,
+ 'smarty_internal_compile_block_child.php' => true,
+ 'smarty_internal_compile_block_parent.php' => true,
+ 'smarty_internal_compile_child.php' => true,
+ 'smarty_internal_compile_parent.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_make_nocache.php' => true,
+ 'smarty_internal_compile_nocache.php' => true,
+ 'smarty_internal_compile_private_block_plugin.php' => true,
+ 'smarty_internal_compile_private_foreachsection.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_php.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_shared_inheritance.php' => true,
+ 'smarty_internal_compile_while.php' => true,
+ 'smarty_internal_configfilelexer.php' => true,
+ 'smarty_internal_configfileparser.php' => true,
+ 'smarty_internal_config_file_compiler.php' => true,
+ 'smarty_internal_data.php' => true,
+ 'smarty_internal_debug.php' => true,
+ 'smarty_internal_errorhandler.php' => true,
+ 'smarty_internal_extension_handler.php' => true,
+ 'smarty_internal_method_addautoloadfilters.php' => true,
+ 'smarty_internal_method_adddefaultmodifiers.php' => true,
+ 'smarty_internal_method_append.php' => true,
+ 'smarty_internal_method_appendbyref.php' => true,
+ 'smarty_internal_method_assignbyref.php' => true,
+ 'smarty_internal_method_assignglobal.php' => true,
+ 'smarty_internal_method_clearallassign.php' => true,
+ 'smarty_internal_method_clearallcache.php' => true,
+ 'smarty_internal_method_clearassign.php' => true,
+ 'smarty_internal_method_clearcache.php' => true,
+ 'smarty_internal_method_clearcompiledtemplate.php' => true,
+ 'smarty_internal_method_clearconfig.php' => true,
+ 'smarty_internal_method_compileallconfig.php' => true,
+ 'smarty_internal_method_compilealltemplates.php' => true,
+ 'smarty_internal_method_configload.php' => true,
+ 'smarty_internal_method_createdata.php' => true,
+ 'smarty_internal_method_getautoloadfilters.php' => true,
+ 'smarty_internal_method_getconfigvariable.php' => true,
+ 'smarty_internal_method_getconfigvars.php' => true,
+ 'smarty_internal_method_getdebugtemplate.php' => true,
+ 'smarty_internal_method_getdefaultmodifiers.php' => true,
+ 'smarty_internal_method_getglobal.php' => true,
+ 'smarty_internal_method_getregisteredobject.php' => true,
+ 'smarty_internal_method_getstreamvariable.php' => true,
+ 'smarty_internal_method_gettags.php' => true,
+ 'smarty_internal_method_gettemplatevars.php' => true,
+ 'smarty_internal_method_literals.php' => true,
+ 'smarty_internal_method_loadfilter.php' => true,
+ 'smarty_internal_method_loadplugin.php' => true,
+ 'smarty_internal_method_mustcompile.php' => true,
+ 'smarty_internal_method_registercacheresource.php' => true,
+ 'smarty_internal_method_registerclass.php' => true,
+ 'smarty_internal_method_registerdefaultconfighandler.php' => true,
+ 'smarty_internal_method_registerdefaultpluginhandler.php' => true,
+ 'smarty_internal_method_registerdefaulttemplatehandler.php' => true,
+ 'smarty_internal_method_registerfilter.php' => true,
+ 'smarty_internal_method_registerobject.php' => true,
+ 'smarty_internal_method_registerplugin.php' => true,
+ 'smarty_internal_method_registerresource.php' => true,
+ 'smarty_internal_method_setautoloadfilters.php' => true,
+ 'smarty_internal_method_setdebugtemplate.php' => true,
+ 'smarty_internal_method_setdefaultmodifiers.php' => true,
+ 'smarty_internal_method_unloadfilter.php' => true,
+ 'smarty_internal_method_unregistercacheresource.php' => true,
+ 'smarty_internal_method_unregisterfilter.php' => true,
+ 'smarty_internal_method_unregisterobject.php' => true,
+ 'smarty_internal_method_unregisterplugin.php' => true,
+ 'smarty_internal_method_unregisterresource.php' => true,
+ 'smarty_internal_nocache_insert.php' => true,
+ 'smarty_internal_parsetree.php' => true,
+ 'smarty_internal_parsetree_code.php' => true,
+ 'smarty_internal_parsetree_dq.php' => true,
+ 'smarty_internal_parsetree_dqcontent.php' => true,
+ 'smarty_internal_parsetree_tag.php' => true,
+ 'smarty_internal_parsetree_template.php' => true,
+ 'smarty_internal_parsetree_text.php' => true,
+ 'smarty_internal_resource_eval.php' => true,
+ 'smarty_internal_resource_extends.php' => true,
+ 'smarty_internal_resource_file.php' => true,
+ 'smarty_internal_resource_php.php' => true,
+ 'smarty_internal_resource_registered.php' => true,
+ 'smarty_internal_resource_stream.php' => true,
+ 'smarty_internal_resource_string.php' => true,
+ 'smarty_internal_runtime_cachemodify.php' => true,
+ 'smarty_internal_runtime_cacheresourcefile.php' => true,
+ 'smarty_internal_runtime_capture.php' => true,
+ 'smarty_internal_runtime_codeframe.php' => true,
+ 'smarty_internal_runtime_filterhandler.php' => true,
+ 'smarty_internal_runtime_foreach.php' => true,
+ 'smarty_internal_runtime_getincludepath.php' => true,
+ 'smarty_internal_runtime_inheritance.php' => true,
+ 'smarty_internal_runtime_make_nocache.php' => true,
+ 'smarty_internal_runtime_tplfunction.php' => true,
+ 'smarty_internal_runtime_updatecache.php' => true,
+ 'smarty_internal_runtime_updatescope.php' => true,
+ 'smarty_internal_runtime_writefile.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_testinstall.php' => true,
+ 'smarty_internal_undefined.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,
+ 'smarty_template_cached.php' => true,
+ 'smarty_template_compiled.php' => true,
+ 'smarty_template_config.php' => true,
+ 'smarty_template_resource_base.php' => true,
+ 'smarty_template_source.php' => true,
+ 'smarty_undefined_variable.php' => true,
+ 'smarty_variable.php' => true,
+ );
+ $iterator = new DirectoryIterator($source);
+ foreach ($iterator as $file) {
+ if (!$file->isDot()) {
+ $filename = $file->getFilename();
+ if (isset($expectedSysplugins[ $filename ])) {
+ unset($expectedSysplugins[ $filename ]);
+ }
+ }
+ }
+ if ($expectedSysplugins) {
+ $status = false;
+ $message = "FAILED: files missing from libs/sysplugins: " . join(', ', array_keys($expectedSysplugins));
+ 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)) {
+ $expectedPlugins = 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.mb_wordwrap.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,
+ 'variablefilter.htmlspecialchars.php' => true,
+ );
+ $iterator = new DirectoryIterator($source);
+ foreach ($iterator as $file) {
+ if (!$file->isDot()) {
+ $filename = $file->getFilename();
+ if (isset($expectedPlugins[ $filename ])) {
+ unset($expectedPlugins[ $filename ]);
+ }
+ }
+ }
+ if ($expectedPlugins) {
+ $status = false;
+ $message = "FAILED: files missing from libs/plugins: " . join(', ', array_keys($expectedPlugins));
+ 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/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_undefined.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_undefined.php
new file mode 100644
index 0000000..7df0acc
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_undefined.php
@@ -0,0 +1,67 @@
+class = $class;
+ }
+
+ /**
+ * Wrapper for obsolete class Smarty_Internal_Runtime_ValidateCompiled
+ *
+ * @param \Smarty_Internal_Template $tpl
+ * @param array $properties special template properties
+ * @param bool $cache flag if called from cache file
+ *
+ * @return bool false
+ */
+ public function decodeProperties(Smarty_Internal_Template $tpl, $properties, $cache = false)
+ {
+ if ($cache) {
+ $tpl->cached->valid = false;
+ } else {
+ $tpl->mustCompile = true;
+ }
+ return false;
+ }
+
+ /**
+ * Call error handler for undefined method
+ *
+ * @param string $name unknown method-name
+ * @param array $args argument array
+ *
+ * @return mixed
+ * @throws SmartyException
+ */
+ public function __call($name, $args)
+ {
+ if (isset($this->class)) {
+ throw new SmartyException("undefined extension class '{$this->class}'");
+ } else {
+ throw new SmartyException(get_class($args[ 0 ]) . "->{$name}() undefined method");
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource.php
new file mode 100644
index 0000000..aae7e42
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource.php
@@ -0,0 +1,262 @@
+ 'smarty_internal_resource_file.php',
+ 'string' => 'smarty_internal_resource_string.php',
+ 'extends' => 'smarty_internal_resource_extends.php',
+ 'stream' => 'smarty_internal_resource_stream.php',
+ 'eval' => 'smarty_internal_resource_eval.php',
+ 'php' => 'smarty_internal_resource_php.php'
+ );
+
+ /**
+ * Source is bypassing compiler
+ *
+ * @var boolean
+ */
+ public $uncompiled = false;
+
+ /**
+ * Source must be recompiled on every occasion
+ *
+ * @var boolean
+ */
+ public $recompiled = false;
+
+ /**
+ * Flag if resource does implement populateCompiledFilepath() method
+ *
+ * @var bool
+ */
+ public $hasCompiledHandler = false;
+
+ /**
+ * 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->_cache[ 'resource_handlers' ][ $type ])) {
+ return $smarty->_cache[ 'resource_handlers' ][ $type ];
+ }
+ // try registered resource
+ if (isset($smarty->registered_resources[ $type ])) {
+ return $smarty->_cache[ 'resource_handlers' ][ $type ] =
+ $smarty->registered_resources[ $type ] instanceof Smarty_Resource ?
+ $smarty->registered_resources[ $type ] : new Smarty_Internal_Resource_Registered();
+ }
+ // try sysplugins dir
+ if (isset(self::$sysplugins[ $type ])) {
+ $_resource_class = 'Smarty_Internal_Resource_' . ucfirst($type);
+ return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class();
+ }
+ // try plugins dir
+ $_resource_class = 'Smarty_Resource_' . ucfirst($type);
+ if ($smarty->loadPlugin($_resource_class)) {
+ if (class_exists($_resource_class, false)) {
+ return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class();
+ } 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);
+ }
+ return $smarty->_cache[ 'resource_handlers' ][ $type ] = new Smarty_Internal_Resource_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
+ *
+ * @return array with parsed resource name and type
+ */
+ public static function parseResourceName($resource_name, $default_resource)
+ {
+ if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]/', $resource_name, $match)) {
+ $type = $match[ 1 ];
+ $name = substr($resource_name, strlen($match[ 0 ]));
+ } else {
+ // 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;
+ }
+ return array($name, $type);
+ }
+
+ /**
+ * modify template_resource according to resource handlers specifications
+ *
+ * @param \Smarty_Internal_Template|\Smarty $obj Smarty instance
+ * @param string $template_resource template_resource to extract resource handler and
+ * name of
+ *
+ * @return string unique resource name
+ * @throws \SmartyException
+ */
+ public static function getUniqueTemplateName($obj, $template_resource)
+ {
+ $smarty = $obj->_getSmartyObj();
+ list($name, $type) = self::parseResourceName($template_resource, $smarty->default_resource_type);
+ // TODO: optimize for Smarty's internal resource types
+ $resource = Smarty_Resource::load($smarty, $type);
+ // go relative to a given template?
+ $_file_is_dotted = $name[ 0 ] === '.' && ($name[ 1 ] === '.' || $name[ 1 ] === '/');
+ if ($obj->_isTplObj() && $_file_is_dotted
+ && ($obj->source->type === 'file' || $obj->parent->source->type === 'extends')
+ ) {
+ $name = $smarty->_realpath(dirname($obj->parent->source->filepath) . DIRECTORY_SEPARATOR . $name);
+ }
+ return $resource->buildUniqueResourceName($smarty, $name);
+ }
+
+ /**
+ * initialize Source Object for given resource
+ * wrapper for backward compatibility to versions < 3.1.22
+ * 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
+ * @throws \SmartyException
+ */
+ public static function source(
+ Smarty_Internal_Template $_template = null,
+ Smarty $smarty = null,
+ $template_resource = null
+ ) {
+ return Smarty_Template_Source::load($_template, $smarty, $template_resource);
+ }
+
+ /**
+ * Load template's source into current template object
+ *
+ * @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 $isConfig flag for config resource
+ *
+ * @return string unique resource name
+ */
+ public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
+ {
+ if ($isConfig) {
+ if (!isset($smarty->_joined_config_dir)) {
+ $smarty->getTemplateDir(null, true);
+ }
+ return get_class($this) . '#' . $smarty->_joined_config_dir . '#' . $resource_name;
+ } else {
+ if (!isset($smarty->_joined_template_dir)) {
+ $smarty->getTemplateDir();
+ }
+ return get_class($this) . '#' . $smarty->_joined_template_dir . '#' . $resource_name;
+ }
+ }
+
+ /*
+ * Check if resource must check time stamps when when loading complied or cached templates.
+ * Resources like 'extends' which use source components my disable timestamp checks on own resource.
+ *
+ * @return bool
+ */
+ /**
+ * Determine basename for compiled filename
+ *
+ * @param Smarty_Template_Source $source source object
+ *
+ * @return string resource's basename
+ */
+ public function getBasename(Smarty_Template_Source $source)
+ {
+ return basename(preg_replace('![^\w]+!', '_', $source->name));
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkTimestamps()
+ {
+ return true;
+ }
+}
diff --git a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_resource_custom.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource_custom.php
similarity index 75%
rename from src/includes/Smarty-3.1.12/libs/sysplugins/smarty_resource_custom.php
rename to src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource_custom.php
index 9ec1f35..8d66be3 100644
--- a/src/includes/Smarty-3.1.12/libs/sysplugins/smarty_resource_custom.php
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource_custom.php
@@ -2,21 +2,20 @@
/**
* Smarty Resource Plugin
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
- * @author Rodney Rehm
+ * @author Rodney Rehm
*/
/**
* Smarty Resource Plugin
- *
* Wrapper Implementation for custom resource plugins
*
- * @package Smarty
+ * @package Smarty
* @subpackage TemplateResources
*/
-abstract class Smarty_Resource_Custom extends Smarty_Resource {
-
+abstract class Smarty_Resource_Custom extends Smarty_Resource
+{
/**
* fetch template and its modification time from data source
*
@@ -24,15 +23,15 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
* @param string &$source template source
* @param integer &$mtime template modification timestamp (epoch)
*/
- protected abstract function fetch($name, &$source, &$mtime);
+ abstract protected function fetch($name, &$source, &$mtime);
/**
* Fetch template's modification timestamp from data source
- *
* {@internal implementing this method is optional.
* Only implement it if modification times can be accessed faster than loading the complete template source.}}
*
* @param string $name template name
+ *
* @return integer|boolean timestamp (epoch) the template was modified, or false if not found
*/
protected function fetchTimestamp($name)
@@ -46,19 +45,19 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
* @param Smarty_Template_Source $source source object
* @param Smarty_Internal_Template $_template template object
*/
- public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
- $source->filepath = strtolower($source->type . ':' . $source->name);
+ $source->filepath = $source->type . ':' . substr(preg_replace('/[^A-Za-z0-9.]/', '', $source->name), 0, 25);
$source->uid = sha1($source->type . ':' . $source->name);
-
$mtime = $this->fetchTimestamp($source->name);
if ($mtime !== null) {
$source->timestamp = $mtime;
} else {
$this->fetch($source->name, $content, $timestamp);
$source->timestamp = isset($timestamp) ? $timestamp : false;
- if( isset($content) )
+ if (isset($content)) {
$source->content = $content;
+ }
}
$source->exists = !!$source->timestamp;
}
@@ -67,8 +66,9 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
* Load template's source into current template object
*
* @param Smarty_Template_Source $source source object
- * @return string template source
- * @throws SmartyException if source cannot be loaded
+ *
+ * @return string template source
+ * @throws SmartyException if source cannot be loaded
*/
public function getContent(Smarty_Template_Source $source)
{
@@ -76,7 +76,6 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
if (isset($content)) {
return $content;
}
-
throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
}
@@ -84,13 +83,11 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
* Determine basename for compiled filename
*
* @param Smarty_Template_Source $source source object
- * @return string resource's basename
+ *
+ * @return string resource's basename
*/
- protected function getBasename(Smarty_Template_Source $source)
+ public function getBasename(Smarty_Template_Source $source)
{
- return basename($source->name);
+ return basename(substr(preg_replace('/[^A-Za-z0-9.]/', '', $source->name), 0, 25));
}
-
}
-
-?>
\ No newline at end of file
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource_recompiled.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource_recompiled.php
new file mode 100644
index 0000000..760c4dd
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource_recompiled.php
@@ -0,0 +1,94 @@
+compiled;
+ $compiled->file_dependency = array();
+ $compiled->includes = array();
+ $compiled->nocache_hash = null;
+ $compiled->unifunc = null;
+ $level = ob_get_level();
+ ob_start();
+ $_smarty_tpl->loadCompiler();
+ // call compiler
+ try {
+ eval('?>' . $_smarty_tpl->compiler->compileTemplate($_smarty_tpl));
+ } catch (Exception $e) {
+ unset($_smarty_tpl->compiler);
+ while (ob_get_level() > $level) {
+ ob_end_clean();
+ }
+ throw $e;
+ }
+ // release compiler object to free memory
+ unset($_smarty_tpl->compiler);
+ ob_get_clean();
+ $compiled->timestamp = time();
+ $compiled->exists = true;
+ }
+
+ /**
+ * populate Compiled Object with compiled filepath
+ *
+ * @param Smarty_Template_Compiled $compiled compiled object
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return void
+ */
+ public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template)
+ {
+ $compiled->filepath = false;
+ $compiled->timestamp = false;
+ $compiled->exists = false;
+ }
+
+ /*
+ * Disable timestamp checks for recompiled resource.
+ *
+ * @return bool
+ */
+ /**
+ * @return bool
+ */
+ public function checkTimestamps()
+ {
+ return false;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource_uncompiled.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource_uncompiled.php
new file mode 100644
index 0000000..a11e2c1
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource_uncompiled.php
@@ -0,0 +1,49 @@
+filepath = $_template->source->filepath;
+ $compiled->timestamp = $_template->source->timestamp;
+ $compiled->exists = $_template->source->exists;
+ if ($_template->smarty->merge_compiled_includes || $_template->source->handler->checkTimestamps()) {
+ $compiled->file_dependency[ $_template->source->uid ] =
+ array($compiled->filepath, $compiled->timestamp, $_template->source->type,);
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_security.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_security.php
new file mode 100644
index 0000000..441a7e2
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_security.php
@@ -0,0 +1,721 @@
+" 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();
+
+ /**
+ * List of trusted constants names
+ *
+ * @var array
+ */
+ public $trusted_constants = 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 nested array of trusted classes and static methods.
+ * If empty access to all static classes and methods is allowed.
+ * Format:
+ * array (
+ * 'class_1' => array('method_1', 'method_2'), // allowed methods listed
+ * 'class_2' => array(), // all methods of class allowed
+ * )
+ * If set to null none is allowed.
+ *
+ * @var array
+ */
+ public $trusted_static_methods = array();
+
+ /**
+ * This is an array of trusted static properties.
+ * If empty access to all static classes and properties is allowed.
+ * Format:
+ * array (
+ * 'class_1' => array('prop_1', 'prop_2'), // allowed properties listed
+ * 'class_2' => array(), // all properties of class allowed
+ * )
+ * If set to null none is allowed.
+ *
+ * @var array
+ */
+ public $trusted_static_properties = 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',);
+
+ /**
+ * This is an array of trusted PHP modifiers.
+ * If empty all modifiers are allowed.
+ * To disable all modifier set $php_modifiers = null.
+ *
+ * @var array
+ */
+ public $php_modifiers = array('escape', 'count', 'nl2br',);
+
+ /**
+ * 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 disabled special $smarty variables.
+ *
+ * @var array
+ */
+ public $disabled_special_smarty_vars = 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;
+
+ /**
+ * max template nesting level
+ *
+ * @var int
+ */
+ public $max_template_nesting = 0;
+
+ /**
+ * current template nesting level
+ *
+ * @var int
+ */
+ private $_current_template_nesting = 0;
+
+ /**
+ * Cache for $resource_dir lookup
+ *
+ * @var array
+ */
+ protected $_resource_dir = array();
+
+ /**
+ * Cache for $template_dir lookup
+ *
+ * @var array
+ */
+ protected $_template_dir = array();
+
+ /**
+ * Cache for $config_dir lookup
+ *
+ * @var array
+ */
+ protected $_config_dir = array();
+
+ /**
+ * Cache for $secure_dir lookup
+ *
+ * @var array
+ */
+ protected $_secure_dir = array();
+
+ /**
+ * Cache for $php_resource_dir lookup
+ *
+ * @var array
+ */
+ protected $_php_resource_dir = null;
+
+ /**
+ * Cache for $trusted_dir lookup
+ *
+ * @var array
+ */
+ protected $_trusted_dir = null;
+
+ /**
+ * Cache for include path status
+ *
+ * @var bool
+ */
+ protected $_include_path_status = false;
+
+ /**
+ * Cache for $_include_array lookup
+ *
+ * @var array
+ */
+ protected $_include_dir = array();
+
+ /**
+ * @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
+ */
+ 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
+ */
+ 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 static class method/property is trusted.
+ *
+ * @param string $class_name
+ * @param string $params
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if class method is trusted
+ */
+ public function isTrustedStaticClassAccess($class_name, $params, $compiler)
+ {
+ if (!isset($params[ 2 ])) {
+ // fall back
+ return $this->isTrustedStaticClass($class_name, $compiler);
+ }
+ if ($params[ 2 ] === 'method') {
+ $allowed = $this->trusted_static_methods;
+ $name = substr($params[ 0 ], 0, strpos($params[ 0 ], '('));
+ } else {
+ $allowed = $this->trusted_static_properties;
+ // strip '$'
+ $name = substr($params[ 0 ], 1);
+ }
+ if (isset($allowed)) {
+ if (empty($allowed)) {
+ // fall back
+ return $this->isTrustedStaticClass($class_name, $compiler);
+ }
+ if (isset($allowed[ $class_name ])
+ && (empty($allowed[ $class_name ]) || in_array($name, $allowed[ $class_name ]))
+ ) {
+ return true;
+ }
+ }
+ $compiler->trigger_template_error("access to static class '{$class_name}' {$params[2]} '{$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
+ */
+ 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
+ */
+ 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", null, true);
+ }
+ } 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", null, true);
+ }
+ return false; // should not, but who knows what happens to the compiler in the future?
+ }
+
+ /**
+ * Check if special $smarty variable is trusted.
+ *
+ * @param string $var_name
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if tag is trusted
+ */
+ public function isTrustedSpecialSmartyVar($var_name, $compiler)
+ {
+ if (!in_array($var_name, $this->disabled_special_smarty_vars)) {
+ return true;
+ } else {
+ $compiler->trigger_template_error(
+ "special variable '\$smarty.{$var_name}' not allowed by security setting",
+ null,
+ true
+ );
+ }
+ 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
+ */
+ 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",
+ null,
+ true
+ );
+ }
+ } 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",
+ null,
+ true
+ );
+ }
+ return false; // should not, but who knows what happens to the compiler in the future?
+ }
+
+ /**
+ * Check if constants are enabled or trusted
+ *
+ * @param string $const constant name
+ * @param object $compiler compiler object
+ *
+ * @return bool
+ */
+ public function isTrustedConstant($const, $compiler)
+ {
+ if (in_array($const, array('true', 'false', 'null'))) {
+ return true;
+ }
+ if (!empty($this->trusted_constants)) {
+ if (!in_array(strtolower($const), $this->trusted_constants)) {
+ $compiler->trigger_template_error("Security: access to constant '{$const}' not permitted");
+ return false;
+ }
+ return true;
+ }
+ if ($this->allow_constants) {
+ return true;
+ }
+ $compiler->trigger_template_error("Security: access to constants not permitted");
+ return false;
+ }
+
+ /**
+ * 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
+ * @param null|bool $isConfig
+ *
+ * @return bool true if directory is trusted
+ * @throws \SmartyException if directory is not trusted
+ */
+ public function isTrustedResourceDir($filepath, $isConfig = null)
+ {
+ if ($this->_include_path_status !== $this->smarty->use_include_path) {
+ $_dir =
+ $this->smarty->use_include_path ? $this->smarty->ext->_getIncludePath->getIncludePathDirs($this->smarty) : array();
+ if ($this->_include_dir !== $_dir) {
+ $this->_updateResourceDir($this->_include_dir, $_dir);
+ $this->_include_dir = $_dir;
+ }
+ $this->_include_path_status = $this->smarty->use_include_path;
+ }
+ $_dir = $this->smarty->getTemplateDir();
+ if ($this->_template_dir !== $_dir) {
+ $this->_updateResourceDir($this->_template_dir, $_dir);
+ $this->_template_dir = $_dir;
+ }
+ $_dir = $this->smarty->getConfigDir();
+ if ($this->_config_dir !== $_dir) {
+ $this->_updateResourceDir($this->_config_dir, $_dir);
+ $this->_config_dir = $_dir;
+ }
+ if ($this->_secure_dir !== $this->secure_dir) {
+ $this->secure_dir = (array)$this->secure_dir;
+ foreach ($this->secure_dir as $k => $d) {
+ $this->secure_dir[ $k ] = $this->smarty->_realpath($d . DIRECTORY_SEPARATOR, true);
+ }
+ $this->_updateResourceDir($this->_secure_dir, $this->secure_dir);
+ $this->_secure_dir = $this->secure_dir;
+ }
+ $addPath = $this->_checkDir($filepath, $this->_resource_dir);
+ if ($addPath !== false) {
+ $this->_resource_dir = array_merge($this->_resource_dir, $addPath);
+ }
+ return true;
+ }
+
+ /**
+ * 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 = $this->smarty->_realpath($directory . '/', true);
+ $this->_php_resource_dir[ $directory ] = true;
+ }
+ }
+ $addPath = $this->_checkDir($filepath, $this->_php_resource_dir);
+ if ($addPath !== false) {
+ $this->_php_resource_dir = array_merge($this->_php_resource_dir, $addPath);
+ }
+ return true;
+ }
+
+ /**
+ * Remove old directories and its sub folders, add new directories
+ *
+ * @param array $oldDir
+ * @param array $newDir
+ */
+ private function _updateResourceDir($oldDir, $newDir)
+ {
+ foreach ($oldDir as $directory) {
+ // $directory = $this->smarty->_realpath($directory, true);
+ $length = strlen($directory);
+ foreach ($this->_resource_dir as $dir) {
+ if (substr($dir, 0, $length) === $directory) {
+ unset($this->_resource_dir[ $dir ]);
+ }
+ }
+ }
+ foreach ($newDir as $directory) {
+ // $directory = $this->smarty->_realpath($directory, true);
+ $this->_resource_dir[ $directory ] = true;
+ }
+ }
+
+ /**
+ * Check if file is inside a valid directory
+ *
+ * @param string $filepath
+ * @param array $dirs valid directories
+ *
+ * @return array|bool
+ * @throws \SmartyException
+ */
+ private function _checkDir($filepath, $dirs)
+ {
+ $directory = dirname($this->smarty->_realpath($filepath, true)) . DIRECTORY_SEPARATOR;
+ $_directory = array();
+ if (!preg_match('#[\\\\/][.][.][\\\\/]#', $directory)) {
+ while (true) {
+ // test if the directory is trusted
+ if (isset($dirs[ $directory ])) {
+ return $_directory;
+ }
+ // abort if we've reached root
+ if (!preg_match('#[\\\\/][^\\\\/]+[\\\\/]$#', $directory)) {
+ // give up
+ break;
+ }
+ // remember the directory to add it to _resource_dir in case we're successful
+ $_directory[ $directory ] = true;
+ // bubble up one level
+ $directory = preg_replace('#[\\\\/][^\\\\/]+[\\\\/]$#', DIRECTORY_SEPARATOR, $directory);
+ }
+ }
+ // give up
+ throw new SmartyException(sprintf('Smarty Security: not trusted file path \'%s\' ', $filepath));
+ }
+
+ /**
+ * Loads security class and enables security
+ *
+ * @param \Smarty $smarty
+ * @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 static function enableSecurity(Smarty $smarty, $security_class)
+ {
+ if ($security_class instanceof Smarty_Security) {
+ $smarty->security_policy = $security_class;
+ return $smarty;
+ } elseif (is_object($security_class)) {
+ throw new SmartyException("Class '" . get_class($security_class) . "' must extend Smarty_Security.");
+ }
+ if ($security_class === null) {
+ $security_class = $smarty->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 {
+ $smarty->security_policy = new $security_class($smarty);
+ }
+ return $smarty;
+ }
+
+ /**
+ * Start template processing
+ *
+ * @param $template
+ *
+ * @throws SmartyException
+ */
+ public function startTemplate($template)
+ {
+ if ($this->max_template_nesting > 0 && $this->_current_template_nesting++ >= $this->max_template_nesting) {
+ throw new SmartyException("maximum template nesting level of '{$this->max_template_nesting}' exceeded when calling '{$template->template_resource}'");
+ }
+ }
+
+ /**
+ * Exit template processing
+ */
+ public function endTemplate()
+ {
+ if ($this->max_template_nesting > 0) {
+ $this->_current_template_nesting--;
+ }
+ }
+
+ /**
+ * Register callback functions call at start/end of template rendering
+ *
+ * @param \Smarty_Internal_Template $template
+ */
+ public function registerCallBacks(Smarty_Internal_Template $template)
+ {
+ $template->startRenderCallbacks[] = array($this, 'startTemplate');
+ $template->endRenderCallbacks[] = array($this, 'endTemplate');
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_cached.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_cached.php
new file mode 100644
index 0000000..508d27f
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_cached.php
@@ -0,0 +1,257 @@
+compile_id = $_template->compile_id;
+ $this->cache_id = $_template->cache_id;
+ $this->source = $_template->source;
+ if (!class_exists('Smarty_CacheResource', false)) {
+ include SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php';
+ }
+ $this->handler = Smarty_CacheResource::load($_template->smarty);
+ }
+
+ /**
+ * @param Smarty_Internal_Template $_template
+ *
+ * @return Smarty_Template_Cached
+ */
+ public static function load(Smarty_Internal_Template $_template)
+ {
+ $_template->cached = new Smarty_Template_Cached($_template);
+ $_template->cached->handler->populate($_template->cached, $_template);
+ // caching enabled ?
+ if (!$_template->caching || $_template->source->handler->recompiled
+ ) {
+ $_template->cached->valid = false;
+ }
+ return $_template->cached;
+ }
+
+ /**
+ * Render cache template
+ *
+ * @param \Smarty_Internal_Template $_template
+ * @param bool $no_output_filter
+ *
+ * @throws \Exception
+ */
+ public function render(Smarty_Internal_Template $_template, $no_output_filter = true)
+ {
+ if ($this->isCached($_template)) {
+ if ($_template->smarty->debugging) {
+ if (!isset($_template->smarty->_debug)) {
+ $_template->smarty->_debug = new Smarty_Internal_Debug();
+ }
+ $_template->smarty->_debug->start_cache($_template);
+ }
+ if (!$this->processed) {
+ $this->process($_template);
+ }
+ $this->getRenderedTemplateCode($_template);
+ if ($_template->smarty->debugging) {
+ $_template->smarty->_debug->end_cache($_template);
+ }
+ return;
+ } else {
+ $_template->smarty->ext->_updateCache->updateCache($this, $_template, $no_output_filter);
+ }
+ }
+
+ /**
+ * Check if cache is valid, lock cache if required
+ *
+ * @param \Smarty_Internal_Template $_template
+ *
+ * @return bool flag true if cache is valid
+ */
+ public function isCached(Smarty_Internal_Template $_template)
+ {
+ if ($this->valid !== null) {
+ return $this->valid;
+ }
+ while (true) {
+ while (true) {
+ if ($this->exists === false || $_template->smarty->force_compile || $_template->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->compile_check === Smarty::COMPILECHECK_ON
+ && $_template->source->getTimeStamp() > $this->timestamp
+ ) {
+ $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;
+ }
+ $this->handler->populate($this, $_template);
+ }
+ if ($this->valid) {
+ if (!$_template->smarty->cache_locking || $this->handler->locked($_template->smarty, $this) === null) {
+ // load cache file for the following checks
+ if ($_template->smarty->debugging) {
+ $_template->smarty->_debug->start_cache($_template);
+ }
+ if ($this->handler->process($_template, $this) === false) {
+ $this->valid = false;
+ } else {
+ $this->processed = true;
+ }
+ if ($_template->smarty->debugging) {
+ $_template->smarty->_debug->end_cache($_template);
+ }
+ } else {
+ $this->is_locked = true;
+ continue;
+ }
+ } else {
+ return $this->valid;
+ }
+ if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_SAVED
+ && $_template->cached->cache_lifetime >= 0
+ && (time() > ($_template->cached->timestamp + $_template->cached->cache_lifetime))
+ ) {
+ $this->valid = false;
+ }
+ if ($_template->smarty->cache_locking) {
+ if (!$this->valid) {
+ $this->handler->acquireLock($_template->smarty, $this);
+ } elseif ($this->is_locked) {
+ $this->handler->releaseLock($_template->smarty, $this);
+ }
+ }
+ return $this->valid;
+ }
+ return $this->valid;
+ }
+
+ /**
+ * Process cached template
+ *
+ * @param Smarty_Internal_Template $_template template object
+ * @param bool $update flag if called because cache update
+ */
+ public function process(Smarty_Internal_Template $_template, $update = false)
+ {
+ if ($this->handler->process($_template, $this, $update) === false) {
+ $this->valid = false;
+ }
+ if ($this->valid) {
+ $this->processed = true;
+ } else {
+ $this->processed = false;
+ }
+ }
+
+ /**
+ * Read cache content from handler
+ *
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return string|false content
+ */
+ public function read(Smarty_Internal_Template $_template)
+ {
+ if (!$_template->source->handler->recompiled) {
+ return $this->handler->readCachedContent($_template);
+ }
+ return false;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_compiled.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_compiled.php
new file mode 100644
index 0000000..37d8f0a
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_compiled.php
@@ -0,0 +1,257 @@
+source->handler->hasCompiledHandler) {
+ $_template->source->handler->populateCompiledFilepath($compiled, $_template);
+ } else {
+ $compiled->populateCompiledFilepath($_template);
+ }
+ return $compiled;
+ }
+
+ /**
+ * populate Compiled Object with compiled filepath
+ *
+ * @param Smarty_Internal_Template $_template template object
+ **/
+ public function populateCompiledFilepath(Smarty_Internal_Template $_template)
+ {
+ $source = &$_template->source;
+ $smarty = &$_template->smarty;
+ $this->filepath = $smarty->getCompileDir();
+ if (isset($_template->compile_id)) {
+ $this->filepath .= preg_replace('![^\w]+!', '_', $_template->compile_id) .
+ ($smarty->use_sub_dirs ? DIRECTORY_SEPARATOR : '^');
+ }
+ // if use_sub_dirs, break file into directories
+ if ($smarty->use_sub_dirs) {
+ $this->filepath .= $source->uid[ 0 ] . $source->uid[ 1 ] . DIRECTORY_SEPARATOR . $source->uid[ 2 ] .
+ $source->uid[ 3 ] . DIRECTORY_SEPARATOR . $source->uid[ 4 ] . $source->uid[ 5 ] .
+ DIRECTORY_SEPARATOR;
+ }
+ $this->filepath .= $source->uid . '_';
+ if ($source->isConfig) {
+ $this->filepath .= (int)$smarty->config_read_hidden + (int)$smarty->config_booleanize * 2 +
+ (int)$smarty->config_overwrite * 4;
+ } else {
+ $this->filepath .= (int)$smarty->merge_compiled_includes + (int)$smarty->escape_html * 2 +
+ (($smarty->merge_compiled_includes && $source->type === 'extends') ?
+ (int)$smarty->extends_recursion * 4 : 0);
+ }
+ $this->filepath .= '.' . $source->type;
+ $basename = $source->handler->getBasename($source);
+ if (!empty($basename)) {
+ $this->filepath .= '.' . $basename;
+ }
+ if ($_template->caching) {
+ $this->filepath .= '.cache';
+ }
+ $this->filepath .= '.php';
+ $this->timestamp = $this->exists = is_file($this->filepath);
+ if ($this->exists) {
+ $this->timestamp = filemtime($this->filepath);
+ }
+ }
+
+ /**
+ * render compiled template code
+ *
+ * @param Smarty_Internal_Template $_template
+ *
+ * @return string
+ * @throws Exception
+ */
+ public function render(Smarty_Internal_Template $_template)
+ {
+ // checks if template exists
+ if (!$_template->source->exists) {
+ $type = $_template->source->isConfig ? 'config' : 'template';
+ throw new SmartyException("Unable to load {$type} '{$_template->source->type}:{$_template->source->name}'");
+ }
+ if ($_template->smarty->debugging) {
+ if (!isset($_template->smarty->_debug)) {
+ $_template->smarty->_debug = new Smarty_Internal_Debug();
+ }
+ $_template->smarty->_debug->start_render($_template);
+ }
+ if (!$this->processed) {
+ $this->process($_template);
+ }
+ if (isset($_template->cached)) {
+ $_template->cached->file_dependency =
+ array_merge($_template->cached->file_dependency, $this->file_dependency);
+ }
+ if ($_template->source->handler->uncompiled) {
+ $_template->source->handler->renderUncompiled($_template->source, $_template);
+ } else {
+ $this->getRenderedTemplateCode($_template);
+ }
+ if ($_template->caching && $this->has_nocache_code) {
+ $_template->cached->hashes[ $this->nocache_hash ] = true;
+ }
+ if ($_template->smarty->debugging) {
+ $_template->smarty->_debug->end_render($_template);
+ }
+ }
+
+ /**
+ * load compiled template or compile from source
+ *
+ * @param Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
+ *
+ * @throws Exception
+ */
+ public function process(Smarty_Internal_Template $_smarty_tpl)
+ {
+ $source = &$_smarty_tpl->source;
+ $smarty = &$_smarty_tpl->smarty;
+ if ($source->handler->recompiled) {
+ $source->handler->process($_smarty_tpl);
+ } elseif (!$source->handler->uncompiled) {
+ if (!$this->exists || $smarty->force_compile
+ || ($_smarty_tpl->compile_check && $source->getTimeStamp() > $this->getTimeStamp())
+ ) {
+ $this->compileTemplateSource($_smarty_tpl);
+ $compileCheck = $_smarty_tpl->compile_check;
+ $_smarty_tpl->compile_check = Smarty::COMPILECHECK_OFF;
+ $this->loadCompiledTemplate($_smarty_tpl);
+ $_smarty_tpl->compile_check = $compileCheck;
+ } else {
+ $_smarty_tpl->mustCompile = true;
+ @include $this->filepath;
+ if ($_smarty_tpl->mustCompile) {
+ $this->compileTemplateSource($_smarty_tpl);
+ $compileCheck = $_smarty_tpl->compile_check;
+ $_smarty_tpl->compile_check = Smarty::COMPILECHECK_OFF;
+ $this->loadCompiledTemplate($_smarty_tpl);
+ $_smarty_tpl->compile_check = $compileCheck;
+ }
+ }
+ $_smarty_tpl->_subTemplateRegister();
+ $this->processed = true;
+ }
+ }
+
+ /**
+ * compile template from source
+ *
+ * @param Smarty_Internal_Template $_template
+ *
+ * @throws Exception
+ */
+ public function compileTemplateSource(Smarty_Internal_Template $_template)
+ {
+ $this->file_dependency = array();
+ $this->includes = array();
+ $this->nocache_hash = null;
+ $this->unifunc = null;
+ // compile locking
+ if ($saved_timestamp = (!$_template->source->handler->recompiled && is_file($this->filepath))) {
+ $saved_timestamp = $this->getTimeStamp();
+ touch($this->filepath);
+ }
+ // compile locking
+ try {
+ // call compiler
+ $_template->loadCompiler();
+ $this->write($_template, $_template->compiler->compileTemplate($_template));
+ } catch (Exception $e) {
+ // restore old timestamp in case of error
+ if ($saved_timestamp && is_file($this->filepath)) {
+ touch($this->filepath, $saved_timestamp);
+ }
+ unset($_template->compiler);
+ throw $e;
+ }
+ // release compiler object to free memory
+ unset($_template->compiler);
+ }
+
+ /**
+ * Write compiled code by handler
+ *
+ * @param Smarty_Internal_Template $_template template object
+ * @param string $code compiled code
+ *
+ * @return bool success
+ * @throws \SmartyException
+ */
+ public function write(Smarty_Internal_Template $_template, $code)
+ {
+ if (!$_template->source->handler->recompiled) {
+ if ($_template->smarty->ext->_writeFile->writeFile($this->filepath, $code, $_template->smarty) === true) {
+ $this->timestamp = $this->exists = is_file($this->filepath);
+ if ($this->exists) {
+ $this->timestamp = filemtime($this->filepath);
+ return true;
+ }
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Read compiled content from handler
+ *
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return string content
+ */
+ public function read(Smarty_Internal_Template $_template)
+ {
+ if (!$_template->source->handler->recompiled) {
+ return file_get_contents($this->filepath);
+ }
+ return isset($this->content) ? $this->content : false;
+ }
+
+ /**
+ * Load fresh compiled template by including the PHP file
+ * HHVM requires a work around because of a PHP incompatibility
+ *
+ * @param \Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
+ */
+ private function loadCompiledTemplate(Smarty_Internal_Template $_smarty_tpl)
+ {
+ if (function_exists('opcache_invalidate')
+ && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1)
+ ) {
+ opcache_invalidate($this->filepath, true);
+ } elseif (function_exists('apc_compile_file')) {
+ apc_compile_file($this->filepath);
+ }
+ if (defined('HHVM_VERSION')) {
+ eval('?>' . file_get_contents($this->filepath));
+ } else {
+ include $this->filepath;
+ }
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_config.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_config.php
new file mode 100644
index 0000000..850ae32
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_config.php
@@ -0,0 +1,100 @@
+ true, 'php' => true);
+ if ($_template) {
+ $smarty = $_template->smarty;
+ $template_resource = $_template->template_resource;
+ }
+ if (empty($template_resource)) {
+ throw new SmartyException('Source: Missing name');
+ }
+ // parse resource_name, load resource handler
+ list($name, $type) = Smarty_Resource::parseResourceName($template_resource, $smarty->default_config_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");
+ }
+ $source = new Smarty_Template_Config($smarty, $template_resource, $type, $name);
+ $source->handler->populate($source, $_template);
+ if (!$source->exists && isset($smarty->default_config_handler_func)) {
+ Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source);
+ $source->handler->populate($source, $_template);
+ }
+ return $source;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_resource_base.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_resource_base.php
new file mode 100644
index 0000000..52bfba2
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_resource_base.php
@@ -0,0 +1,152 @@
+smarty;
+ $_template->isRenderingCache = $this->isCache;
+ $level = ob_get_level();
+ try {
+ if (!isset($unifunc)) {
+ $unifunc = $this->unifunc;
+ }
+ if (empty($unifunc) || !function_exists($unifunc)) {
+ throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'");
+ }
+ if ($_template->startRenderCallbacks) {
+ foreach ($_template->startRenderCallbacks as $callback) {
+ call_user_func($callback, $_template);
+ }
+ }
+ $unifunc($_template);
+ foreach ($_template->endRenderCallbacks as $callback) {
+ call_user_func($callback, $_template);
+ }
+ $_template->isRenderingCache = false;
+ } catch (Exception $e) {
+ $_template->isRenderingCache = false;
+ while (ob_get_level() > $level) {
+ ob_end_clean();
+ }
+ if (isset($smarty->security_policy)) {
+ $smarty->security_policy->endTemplate();
+ }
+ throw $e;
+ }
+ }
+
+ /**
+ * Get compiled time stamp
+ *
+ * @return int
+ */
+ public function getTimeStamp()
+ {
+ if ($this->exists && !$this->timestamp) {
+ $this->timestamp = filemtime($this->filepath);
+ }
+ return $this->timestamp;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_source.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_source.php
new file mode 100644
index 0000000..16b47f2
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_source.php
@@ -0,0 +1,213 @@
+handler =
+ isset($smarty->_cache[ 'resource_handlers' ][ $type ]) ? $smarty->_cache[ 'resource_handlers' ][ $type ] :
+ Smarty_Resource::load($smarty, $type);
+ $this->smarty = $smarty;
+ $this->resource = $resource;
+ $this->type = $type;
+ $this->name = $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
+ * @throws SmartyException
+ */
+ public static function load(
+ Smarty_Internal_Template $_template = null,
+ Smarty $smarty = null,
+ $template_resource = null
+ ) {
+ if ($_template) {
+ $smarty = $_template->smarty;
+ $template_resource = $_template->template_resource;
+ }
+ if (empty($template_resource)) {
+ throw new SmartyException('Source: Missing name');
+ }
+ // parse resource_name, load resource handler, identify unique resource name
+ if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]([\s\S]*)$/', $template_resource, $match)) {
+ $type = $match[ 1 ];
+ $name = $match[ 2 ];
+ } else {
+ // no resource given, use default
+ // or single character before the colon is not a resource type, but part of the filepath
+ $type = $smarty->default_resource_type;
+ $name = $template_resource;
+ }
+ // create new source object
+ $source = new Smarty_Template_Source($smarty, $template_resource, $type, $name);
+ $source->handler->populate($source, $_template);
+ if (!$source->exists && isset($_template->smarty->default_template_handler_func)) {
+ Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source);
+ $source->handler->populate($source, $_template);
+ }
+ return $source;
+ }
+
+ /**
+ * Get source time stamp
+ *
+ * @return int
+ */
+ public function getTimeStamp()
+ {
+ if (!isset($this->timestamp)) {
+ $this->handler->populateTimestamp($this);
+ }
+ return $this->timestamp;
+ }
+
+ /**
+ * Get source content
+ *
+ * @return string
+ * @throws \SmartyException
+ */
+ public function getContent()
+ {
+ return isset($this->content) ? $this->content : $this->handler->getContent($this);
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smarty_undefined_variable.php b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_undefined_variable.php
new file mode 100644
index 0000000..6d31a8a
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smarty_undefined_variable.php
@@ -0,0 +1,33 @@
+value = $value;
+ $this->nocache = $nocache;
+ }
+
+ /**
+ * <> String conversion
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return (string)$this->value;
+ }
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smartycompilerexception.php b/src/includes/smarty-3.1.48/libs/sysplugins/smartycompilerexception.php
new file mode 100644
index 0000000..f7ad39b
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smartycompilerexception.php
@@ -0,0 +1,45 @@
+ 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;
+}
diff --git a/src/includes/smarty-3.1.48/libs/sysplugins/smartyexception.php b/src/includes/smarty-3.1.48/libs/sysplugins/smartyexception.php
new file mode 100644
index 0000000..7f7b9aa
--- /dev/null
+++ b/src/includes/smarty-3.1.48/libs/sysplugins/smartyexception.php
@@ -0,0 +1,19 @@
+ Smarty: ' . (self::$escape ? htmlentities($this->message) : $this->message) . ' <-- ';
+ }
+}
diff --git a/src/includes/smarty-3.1.48/run-tests-for-all-php-versions.sh b/src/includes/smarty-3.1.48/run-tests-for-all-php-versions.sh
new file mode 100755
index 0000000..196f0db
--- /dev/null
+++ b/src/includes/smarty-3.1.48/run-tests-for-all-php-versions.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+Help()
+{
+ # Display Help
+ echo "Runs PHPUnit tests for all PHP versions supported by this version of Smarty."
+ echo
+ echo "Syntax: $0 [-e|h]"
+ echo "options:"
+ echo "e Exclude a group of unit tests, e.g. -e 'slow'"
+ echo "h Print this Help."
+ echo
+}
+
+Exclude=""
+
+# Get the options
+while getopts ":he:" option; do
+ case $option in
+ e) # Exclude
+ echo $OPTARG
+ Exclude=$OPTARG;;
+ h) # display Help
+ Help
+ exit;;
+ \?) # Invalid option
+ echo "Error: Invalid option"
+ exit;;
+ esac
+done
+
+if [ -z $Exclude ];
+then
+ Entrypoint="./run-tests.sh"
+else
+ Entrypoint="./run-tests.sh $Exclude"
+fi
+
+# Runs tests for all supported PHP versions
+docker-compose run --entrypoint "$Entrypoint" php54 && \
+docker-compose run --entrypoint "$Entrypoint" php55 && \
+docker-compose run --entrypoint "$Entrypoint" php56 && \
+docker-compose run --entrypoint "$Entrypoint" php70 && \
+docker-compose run --entrypoint "$Entrypoint" php71 && \
+docker-compose run --entrypoint "$Entrypoint" php72 && \
+docker-compose run --entrypoint "$Entrypoint" php73 && \
+docker-compose run --entrypoint "$Entrypoint" php74
diff --git a/src/includes/smarty-3.1.48/run-tests.sh b/src/includes/smarty-3.1.48/run-tests.sh
new file mode 100755
index 0000000..eac36de
--- /dev/null
+++ b/src/includes/smarty-3.1.48/run-tests.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+composer update
+
+php -r 'echo "\nPHP version " . phpversion() . ". ";';
+
+if [ -z $1 ];
+then
+ echo "Running all unit tests.\n"
+ php ./vendor/phpunit/phpunit/phpunit tests
+else
+ echo "Running all unit tests, except tests marked with @group $1.\n"
+ php ./vendor/phpunit/phpunit/phpunit --exclude-group $1 tests
+fi
\ No newline at end of file