diff options
author | Mario <mario@mariovavti.com> | 2018-03-09 11:12:18 +0100 |
---|---|---|
committer | Mario <mario@mariovavti.com> | 2018-03-09 11:12:18 +0100 |
commit | 4baf5eab16d809977a44e7911ddcab0ff8383897 (patch) | |
tree | 393f618c4cfc20f53264ecd8a26a08de0823d35d /library/Smarty | |
parent | 577da0eb9eb1f90a4cf7a70cfb3582cfb49007ac (diff) | |
parent | 7361af85b5488fc8bd1744389a3a332dc74276b0 (diff) | |
download | volse-hubzilla-3.2.tar.gz volse-hubzilla-3.2.tar.bz2 volse-hubzilla-3.2.zip |
Merge branch '3.2RC'3.2
Diffstat (limited to 'library/Smarty')
200 files changed, 0 insertions, 33906 deletions
diff --git a/library/Smarty/COPYING.lib b/library/Smarty/COPYING.lib deleted file mode 100644 index 02bbb60bc..000000000 --- a/library/Smarty/COPYING.lib +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library.
\ No newline at end of file diff --git a/library/Smarty/NEW_FEATURES.txt b/library/Smarty/NEW_FEATURES.txt deleted file mode 100644 index 1a51c71d9..000000000 --- a/library/Smarty/NEW_FEATURES.txt +++ /dev/null @@ -1,133 +0,0 @@ - - -This file contains a brief description of new features which have been added to Smarty 3.1 - -Smarty 3.1.28 - - OPCACHE - ======= - Smarty does now invalidate automatically updated and cleared compiled or cached template files in OPCACHE. - Correct operation is no longer dependent on OPCACHE configuration settings. - - Template inheritance - ==================== - Template inheritance is now processed in run time. - See the INHERITANCE_RELEASE_NOTES - - Modifier regex_replace - ====================== - An optional limit parameter was added - - fetch() and display() - ===================== - The fetch() and display() methods of the template object accept now optionally the same parameter - as the corresponding Smarty methods to get the content of another template. - Example: - $template->display(); Does display template of template object - $template->display('foo.tpl'); Does display template 'foo.bar' - - File: resource - ============== - Multiple template_dir entries can now be selected by a comma separated list of indices. - The template_dir array is searched in the order of the indices. (Could be used to change the default search order) - Example: - $smarty->display('[1],[0]foo.bar'); - - Filter support - ============== - Optional filter names - An optional filter name was added to $smarty->registerFilter(). It can be used to unregister a filter by name. - - $smarty->registerFilter('output', $callback, 'name'); - $smarty->unregister('output', 'name'); - - Closures - $smarty->registerFilter() does now accept closures. - - $smarty->registerFilter('pre', function($source) {return $source;}); - If no optional filter name was specified it gets the default name 'closure'. - If you register multiple closures register each with a unique filter name. - - $smarty->registerFilter('pre', function($source) {return $source;}, 'closure_1'); - - $smarty->registerFilter('pre', function($source) {return $source;}, 'closure_2'); - - -Smarty 3.1.22 - - Namespace support within templates - ================================== - Within templates you can now use namespace specifications on: - - Constants like foo\bar\FOO - - Class names like foo\bar\Baz::FOO, foo\bar\Baz::$foo, foo\bar\Baz::foo() - - PHP function names like foo\bar\baz() - - Security - ======== - - disable special $smarty variable - - The Smarty_Security class has the new property $disabled_special_smarty_vars. - It's an array which can be loaded with the $smarty special variable names like - 'template_object', 'template', 'current_dir' and others which will be disabled. - Note: That this security check is performed at compile time. - - - limit template nesting - - Property $max_template_nesting of Smarty_Security does set the maximum template nesting level. - The main template is level 1. The nesting level is checked at run time. When the maximum will be exceeded - an Exception will be thrown. The default setting is 0 which does disable this check. - - - trusted static methods - - The Smarty_Security class has the new property $trusted_static_methods to restrict access to static methods. - It's an nested array of trusted class and method names. - Format: - array ( - 'class_1' => array('method_1', 'method_2'), // allowed methods - 'class_2' => array(), // all methods of class allowed - ) - To disable access for all methods of all classes set $trusted_static_methods = null; - The default value is an empty array() which does enables all methods of all classes, but for backward compatibility - the setting of $static_classes will be checked. - Note: That this security check is performed at compile time. - - - trusted static properties - - The Smarty_Security class has the new property $trusted_static_properties to restrict access to static properties. - It's an nested array of trusted class and property names. - Format: - array ( - 'class_1' => array('prop_1', 'prop_2'), // allowed properties listed - 'class_2' => array(), // all properties of class allowed - } - To disable access for all properties of all classes set $trusted_static_properties = null; - The default value is an empty array() which does enables all properties of all classes, but for backward compatibility - the setting of $static_classes will be checked. - Note: That this security check is performed at compile time. - - - trusted constants . - The Smarty_Security class has the new property $trusted_constants to restrict access to constants. - It's an array of trusted constant names. - Format: - array ( - 'SMARTY_DIR' , // allowed constant - } - If the array is empty (default) the usage of constants can be controlled with the - Smarty_Security::$allow_constants property (default true) - - - - Compiled Templates - ================== - Smarty does now automatically detects a change of the $merge_compiled_includes and $escape_html - property and creates different compiled templates files depending on the setting. - - Same applies to config files and the $config_overwrite, $config_booleanize and - $config_read_hidden properties. - - Debugging - ========= - The layout of the debug window has been changed for better readability - - New class constants - Smarty::DEBUG_OFF - Smarty::DEBUG_ON - Smarty::DEBUG_INDIVIDUAL - have been introduced for setting the $debugging property. - - Smarty::DEBUG_INDIVIDUAL will create for each display() and fetch() call an individual debug window. - - . - diff --git a/library/Smarty/README b/library/Smarty/README deleted file mode 100644 index 08b397c3f..000000000 --- a/library/Smarty/README +++ /dev/null @@ -1,575 +0,0 @@ -Smarty 3.x - -Author: Monte Ohrt <monte at ohrt dot com > -Author: Uwe Tews - -AN INTRODUCTION TO SMARTY 3 - -NOTICE FOR 3.1 release: - -Please see the SMARTY_3.1_NOTES.txt file that comes with the distribution. - -NOTICE for 3.0.5 release: - -Smarty now follows the PHP error_reporting level by default. If PHP does not mask E_NOTICE and you try to access an unset template variable, you will now get an E_NOTICE warning. To revert to the old behavior: - -$smarty->error_reporting = E_ALL & ~E_NOTICE; - -NOTICE for 3.0 release: - -IMPORTANT: Some API adjustments have been made between the RC4 and 3.0 release. -We felt it is better to make these now instead of after a 3.0 release, then have to -immediately deprecate APIs in 3.1. Online documentation has been updated -to reflect these changes. Specifically: - ----- API CHANGES RC4 -> 3.0 ---- - -$smarty->register->* -$smarty->unregister->* -$smarty->utility->* -$samrty->cache->* - -Have all been changed to local method calls such as: - -$smarty->clearAllCache() -$smarty->registerFoo() -$smarty->unregisterFoo() -$smarty->testInstall() -etc. - -Registration of function, block, compiler, and modifier plugins have been -consolidated under two API calls: - -$smarty->registerPlugin(...) -$smarty->unregisterPlugin(...) - -Registration of pre, post, output and variable filters have been -consolidated under two API calls: - -$smarty->registerFilter(...) -$smarty->unregisterFilter(...) - -Please refer to the online documentation for all specific changes: - -http://www.smarty.net/documentation - ----- - -The Smarty 3 API has been refactored to a syntax geared -for consistency and modularity. The Smarty 2 API syntax is still supported, but -will throw a deprecation notice. You can disable the notices, but it is highly -recommended to adjust your syntax to Smarty 3, as the Smarty 2 syntax must run -through an extra rerouting wrapper. - -Basically, all Smarty methods now follow the "fooBarBaz" camel case syntax. Also, -all Smarty properties now have getters and setters. So for example, the property -$smarty->cache_dir can be set with $smarty->setCacheDir('foo/') and can be -retrieved with $smarty->getCacheDir(). - -Some of the Smarty 3 APIs have been revoked such as the "is*" methods that were -just duplicate functions of the now available "get*" methods. - -Here is a rundown of the Smarty 3 API: - -$smarty->fetch($template, $cache_id = null, $compile_id = null, $parent = null) -$smarty->display($template, $cache_id = null, $compile_id = null, $parent = null) -$smarty->isCached($template, $cache_id = null, $compile_id = null) -$smarty->createData($parent = null) -$smarty->createTemplate($template, $cache_id = null, $compile_id = null, $parent = null) -$smarty->enableSecurity() -$smarty->disableSecurity() -$smarty->setTemplateDir($template_dir) -$smarty->addTemplateDir($template_dir) -$smarty->templateExists($resource_name) -$smarty->loadPlugin($plugin_name, $check = true) -$smarty->loadFilter($type, $name) -$smarty->setExceptionHandler($handler) -$smarty->addPluginsDir($plugins_dir) -$smarty->getGlobal($varname = null) -$smarty->getRegisteredObject($name) -$smarty->getDebugTemplate() -$smarty->setDebugTemplate($tpl_name) -$smarty->assign($tpl_var, $value = null, $nocache = false) -$smarty->assignGlobal($varname, $value = null, $nocache = false) -$smarty->assignByRef($tpl_var, &$value, $nocache = false) -$smarty->append($tpl_var, $value = null, $merge = false, $nocache = false) -$smarty->appendByRef($tpl_var, &$value, $merge = false) -$smarty->clearAssign($tpl_var) -$smarty->clearAllAssign() -$smarty->configLoad($config_file, $sections = null) -$smarty->getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true) -$smarty->getConfigVariable($variable) -$smarty->getStreamVariable($variable) -$smarty->getConfigVars($varname = null) -$smarty->clearConfig($varname = null) -$smarty->getTemplateVars($varname = null, $_ptr = null, $search_parents = true) -$smarty->clearAllCache($exp_time = null, $type = null) -$smarty->clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) - -$smarty->registerPlugin($type, $tag, $callback, $cacheable = true, $cache_attr = array()) - -$smarty->registerObject($object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) - -$smarty->registerFilter($type, $function_name) -$smarty->registerResource($resource_type, $function_names) -$smarty->registerDefaultPluginHandler($function_name) -$smarty->registerDefaultTemplateHandler($function_name) - -$smarty->unregisterPlugin($type, $tag) -$smarty->unregisterObject($object_name) -$smarty->unregisterFilter($type, $function_name) -$smarty->unregisterResource($resource_type) - -$smarty->compileAllTemplates($extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null) -$smarty->clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) -$smarty->testInstall() - -// then all the getters/setters, available for all properties. Here are a few: - -$caching = $smarty->getCaching(); // get $smarty->caching -$smarty->setCaching(true); // set $smarty->caching -$smarty->setDeprecationNotices(false); // set $smarty->deprecation_notices -$smarty->setCacheId($id); // set $smarty->cache_id -$debugging = $smarty->getDebugging(); // get $smarty->debugging - - -FILE STRUCTURE - -The Smarty 3 file structure is similar to Smarty 2: - -/libs/ - Smarty.class.php -/libs/sysplugins/ - internal.* -/libs/plugins/ - function.mailto.php - modifier.escape.php - ... - -A lot of Smarty 3 core functionality lies in the sysplugins directory; you do -not need to change any files here. The /libs/plugins/ folder is where Smarty -plugins are located. You can add your own here, or create a separate plugin -directory, just the same as Smarty 2. You will still need to create your own -/cache/, /templates/, /templates_c/, /configs/ folders. Be sure /cache/ and -/templates_c/ are writable. - -The typical way to use Smarty 3 should also look familiar: - -require('Smarty.class.php'); -$smarty = new Smarty; -$smarty->assign('foo','bar'); -$smarty->display('index.tpl'); - - -However, Smarty 3 works completely different on the inside. Smarty 3 is mostly -backward compatible with Smarty 2, except for the following items: - -*) Smarty 3 is PHP 5 only. It will not work with PHP 4. -*) The {php} tag is disabled by default. Enable with $smarty->allow_php_tag=true. -*) Delimiters surrounded by whitespace are no longer treated as Smarty tags. - Therefore, { foo } will not compile as a tag, you must use {foo}. This change - Makes Javascript/CSS easier to work with, eliminating the need for {literal}. - This can be disabled by setting $smarty->auto_literal = false; -*) The Smarty 3 API is a bit different. Many Smarty 2 API calls are deprecated - but still work. You will want to update your calls to Smarty 3 for maximum - efficiency. - - -There are many things that are new to Smarty 3. Here are the notable items: - -LEXER/PARSER -============ - -Smarty 3 now uses a lexing tokenizer for its parser/compiler. Basically, this -means Smarty has some syntax additions that make life easier such as in-template -math, shorter/intuitive function parameter options, infinite function recursion, -more accurate error handling, etc. - - -WHAT IS NEW IN SMARTY TEMPLATE SYNTAX -===================================== - -Smarty 3 allows expressions almost anywhere. Expressions can include PHP -functions as long as they are not disabled by the security policy, object -methods and properties, etc. The {math} plugin is no longer necessary but -is still supported for BC. - -Examples: -{$x+$y} will output the sum of x and y. -{$foo = strlen($bar)} function in assignment -{assign var=foo value= $x+$y} in attributes -{$foo = myfunct( ($x+$y)*3 )} as function parameter -{$foo[$x+3]} as array index - -Smarty tags can be used as values within other tags. -Example: {$foo={counter}+3} - -Smarty tags can also be used inside double quoted strings. -Example: {$foo="this is message {counter}"} - -You can define arrays within templates. -Examples: -{assign var=foo value=[1,2,3]} -{assign var=foo value=['y'=>'yellow','b'=>'blue']} -Arrays can be nested. -{assign var=foo value=[1,[9,8],3]} - -There is a new short syntax supported for assigning variables. -Example: {$foo=$bar+2} - -You can assign a value to a specific array element. If the variable exists but -is not an array, it is converted to an array before the new values are assigned. -Examples: -{$foo['bar']=1} -{$foo['bar']['blar']=1} - -You can append values to an array. If the variable exists but is not an array, -it is converted to an array before the new values are assigned. -Example: {$foo[]=1} - -You can use a PHP-like syntax for accessing array elements, as well as the -original "dot" notation. -Examples: -{$foo[1]} normal access -{$foo['bar']} -{$foo['bar'][1]} -{$foo[$x+$x]} index may contain any expression -{$foo[$bar[1]]} nested index -{$foo[section_name]} smarty section access, not array access! - -The original "dot" notation stays, and with improvements. -Examples: -{$foo.a.b.c} => $foo['a']['b']['c'] -{$foo.a.$b.c} => $foo['a'][$b]['c'] with variable index -{$foo.a.{$b+4}.c} => $foo['a'][$b+4]['c'] with expression as index -{$foo.a.{$b.c}} => $foo['a'][$b['c']] with nested index - -note that { and } are used to address ambiguties when nesting the dot syntax. - -Variable names themselves can be variable and contain expressions. -Examples: -$foo normal variable -$foo_{$bar} variable name containing other variable -$foo_{$x+$y} variable name containing expressions -$foo_{$bar}_buh_{$blar} variable name with multiple segments -{$foo_{$x}} will output the variable $foo_1 if $x has a value of 1. - -Object method chaining is implemented. -Example: {$object->method1($x)->method2($y)} - -{for} tag added for looping (replacement for {section} tag): -{for $x=0, $y=count($foo); $x<$y; $x++} .... {/for} -Any number of statements can be used separated by comma as the first -inital expression at {for}. - -{for $x = $start to $end step $step} ... {/for}is in the SVN now . -You can use also -{for $x = $start to $end} ... {/for} -In this case the step value will be automaticall 1 or -1 depending on the start and end values. -Instead of $start and $end you can use any valid expression. -Inside the loop the following special vars can be accessed: -$x@iteration = number of iteration -$x@total = total number of iterations -$x@first = true on first iteration -$x@last = true on last iteration - - -The Smarty 2 {section} syntax is still supported. - -New shorter {foreach} syntax to loop over an array. -Example: {foreach $myarray as $var}...{/foreach} - -Within the foreach loop, properties are access via: - -$var@key foreach $var array key -$var@iteration foreach current iteration count (1,2,3...) -$var@index foreach current index count (0,1,2...) -$var@total foreach $var array total -$var@first true on first iteration -$var@last true on last iteration - -The Smarty 2 {foreach} tag syntax is still supported. - -NOTE: {$bar[foo]} still indicates a variable inside of a {section} named foo. -If you want to access an array element with index foo, you must use quotes -such as {$bar['foo']}, or use the dot syntax {$bar.foo}. - -while block tag is now implemented: -{while $foo}...{/while} -{while $x lt 10}...{/while} - -Direct access to PHP functions: -Just as you can use PHP functions as modifiers directly, you can now access -PHP functions directly, provided they are permitted by security settings: -{time()} - -There is a new {function}...{/function} block tag to implement a template function. -This enables reuse of code sequences like a plugin function. It can call itself recursively. -Template function must be called with the new {call name=foo...} tag. - -Example: - -Template file: -{function name=menu level=0} - <ul class="level{$level}"> - {foreach $data as $entry} - {if is_array($entry)} - <li>{$entry@key}</li> - {call name=menu data=$entry level=$level+1} - {else} - <li>{$entry}</li> - {/if} - {/foreach} - </ul> -{/function} - -{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' => - ['item3-3-1','item3-3-2']],'item4']} - -{call name=menu data=$menu} - - -Generated output: - * item1 - * item2 - * item3 - o item3-1 - o item3-2 - o item3-3 - + item3-3-1 - + item3-3-2 - * item4 - -The function tag itself must have the "name" attribute. This name is the tag -name when calling the function. The function tag may have any number of -additional attributes. These will be default settings for local variables. - -New {nocache} block function: -{nocache}...{/nocache} will declare a section of the template to be non-cached -when template caching is enabled. - -New nocache attribute: -You can declare variable/function output as non-cached with the nocache attribute. -Examples: - -{$foo nocache=true} -{$foo nocache} /* same */ - -{foo bar="baz" nocache=true} -{foo bar="baz" nocache} /* same */ - -{time() nocache=true} -{time() nocache} /* same */ - -Or you can also assign the variable in your script as nocache: -$smarty->assign('foo',$something,true); // third param is nocache setting -{$foo} /* non-cached */ - -$smarty.current_dir returns the directory name of the current template. - -You can use strings directly as templates with the "string" resource type. -Examples: -$smarty->display('string:This is my template, {$foo}!'); // php -{include file="string:This is my template, {$foo}!"} // template - - - -VARIABLE SCOPE / VARIABLE STORAGE -================================= - -In Smarty 2, all assigned variables were stored within the Smarty object. -Therefore, all variables assigned in PHP were accessible by all subsequent -fetch and display template calls. - -In Smarty 3, we have the choice to assign variables to the main Smarty object, -to user-created data objects, and to user-created template objects. -These objects can be chained. The object at the end of a chain can access all -variables belonging to that template and all variables within the parent objects. -The Smarty object can only be the root of a chain, but a chain can be isolated -from the Smarty object. - -All known Smarty assignment interfaces will work on the data and template objects. - -Besides the above mentioned objects, there is also a special storage area for -global variables. - -A Smarty data object can be created as follows: -$data = $smarty->createData(); // create root data object -$data->assign('foo','bar'); // assign variables as usual -$data->config_load('my.conf'); // load config file - -$data= $smarty->createData($smarty); // create data object having a parent link to -the Smarty object - -$data2= $smarty->createData($data); // create data object having a parent link to -the $data data object - -A template object can be created by using the createTemplate method. It has the -same parameter assignments as the fetch() or display() method. -Function definition: -function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null) - -The first parameter can be a template name, a smarty object or a data object. - -Examples: -$tpl = $smarty->createTemplate('mytpl.tpl'); // create template object not linked to any parent -$tpl->assign('foo','bar'); // directly assign variables -$tpl->config_load('my.conf'); // load config file - -$tpl = $smarty->createTemplate('mytpl.tpl',$smarty); // create template having a parent link to the Smarty object -$tpl = $smarty->createTemplate('mytpl.tpl',$data); // create template having a parent link to the $data object - -The standard fetch() and display() methods will implicitly create a template object. -If the $parent parameter is not specified in these method calls, the template object -is will link back to the Smarty object as it's parent. - -If a template is called by an {include...} tag from another template, the -subtemplate links back to the calling template as it's parent. - -All variables assigned locally or from a parent template are accessible. If the -template creates or modifies a variable by using the {assign var=foo...} or -{$foo=...} tags, these new values are only known locally (local scope). When the -template exits, none of the new variables or modifications can be seen in the -parent template(s). This is same behavior as in Smarty 2. - -With Smarty 3, we can assign variables with a scope attribute which allows the -availablility of these new variables or modifications globally (ie in the parent -templates.) - -Possible scopes are local, parent, root and global. -Examples: -{assign var=foo value='bar'} // no scope is specified, the default 'local' -{$foo='bar'} // same, local scope -{assign var=foo value='bar' scope='local'} // same, local scope - -{assign var=foo value='bar' scope='parent'} // Values will be available to the parent object -{$foo='bar' scope='parent'} // (normally the calling template) - -{assign var=foo value='bar' scope='root'} // Values will be exported up to the root object, so they can -{$foo='bar' scope='root'} // be seen from all templates using the same root. - -{assign var=foo value='bar' scope='global'} // Values will be exported to global variable storage, -{$foo='bar' scope='global'} // they are available to any and all templates. - - -The scope attribute can also be attached to the {include...} tag. In this case, -the specified scope will be the default scope for all assignments within the -included template. - - -PLUGINS -======= - -Smarty 3 plugins follow the same coding rules as in Smarty 2. -The main difference is that the template object is now passed in place of the smarty object. -The smarty object can be still be accessed through $template->smarty. - -smarty_plugintype_name (array $params, Smarty_Internal_Template $template) - -The Smarty 2 plugins are still compatible as long as they do not make use of specific Smarty 2 internals. - - -TEMPLATE INHERITANCE: -===================== - -With template inheritance you can define blocks, which are areas that can be -overriden by child templates, so your templates could look like this: - -parent.tpl: -<html> - <head> - <title>{block name='title'}My site name{/block}</title> - </head> - <body> - <h1>{block name='page-title'}Default page title{/block}</h1> - <div id="content"> - {block name='content'} - Default content - {/block} - </div> - </body> -</html> - -child.tpl: -{extends file='parent.tpl'} -{block name='title'} -Child title -{/block} - -grandchild.tpl: -{extends file='child.tpl'} -{block name='title'}Home - {$smarty.block.parent}{/block} -{block name='page-title'}My home{/block} -{block name='content'} - {foreach $images as $img} - <img src="{$img.url}" alt="{$img.description}" /> - {/foreach} -{/block} - -We redefined all the blocks here, however in the title block we used {$smarty.block.parent}, -which tells Smarty to insert the default content from the parent template in its place. -The content block was overriden to display the image files, and page-title has also be -overriden to display a completely different title. - -If we render grandchild.tpl we will get this: -<html> - <head> - <title>Home - Child title</title> - </head> - <body> - <h1>My home</h1> - <div id="content"> - <img src="/example.jpg" alt="image" /> - <img src="/example2.jpg" alt="image" /> - <img src="/example3.jpg" alt="image" /> - </div> - </body> -</html> - -NOTE: In the child templates everything outside the {extends} or {block} tag sections -is ignored. - -The inheritance tree can be as big as you want (meaning you can extend a file that -extends another one that extends another one and so on..), but be aware that all files -have to be checked for modifications at runtime so the more inheritance the more overhead you add. - -Instead of defining the parent/child relationships with the {extends} tag in the child template you -can use the resource as follow: - -$smarty->display('extends:parent.tpl|child.tpl|grandchild.tpl'); - -Child {block} tags may optionally have a append or prepend attribute. In this case the parent block content -is appended or prepended to the child block content. - -{block name='title' append} My title {/block} - - -PHP STREAMS: -============ - -(see online documentation) - -VARIBLE FILTERS: -================ - -(see online documentation) - - -STATIC CLASS ACCESS AND NAMESPACE SUPPORT -========================================= - -You can register a class with optional namespace for the use in the template like: - -$smarty->register->templateClass('foo','name\name2\myclass'); - -In the template you can use it like this: -{foo::method()} etc. - - -======================= - -Please look through it and send any questions/suggestions/etc to the forums. - -http://www.phpinsider.com/smarty-forum/viewtopic.php?t=14168 - -Monte and Uwe diff --git a/library/Smarty/change_log.txt b/library/Smarty/change_log.txt deleted file mode 100644 index dadc5d17d..000000000 --- a/library/Smarty/change_log.txt +++ /dev/null @@ -1,2864 +0,0 @@ - ===== 3.1.29 ===== (21.12.2015) - 21.12.2015 - - optimization improve speed of filetime checks on extends and extendsall resource - - 20.12.2015 - - bugfix failure when the default resource type was set to 'extendsall' https://github.com/smarty-php/smarty/issues/123 - - update compilation of Smarty special variables - - bugfix add addition check for OS type on normalizaition of file path https://github.com/smarty-php/smarty/issues/134 - - bugfix the source uid of the extendsall resource must contain $template_dir settings https://github.com/smarty-php/smarty/issues/123 - - 19.12.2015 - - bugfix using $smarty.capture.foo in expressions could fail https://github.com/smarty-php/smarty/pull/138 - - bugfix broken PHP 5.2 compatibility https://github.com/smarty-php/smarty/issues/139 - - remove no longer used code - - improvement make sure that compiled and cache templates never can contain a trailing '?>? - - 18.12.2015 - - bugfix regression when modifier parameter was follow by math https://github.com/smarty-php/smarty/issues/132 - - 17.12.2015 - - bugfix {$smarty.capture.nameFail} did lowercase capture name https://github.com/smarty-php/smarty/issues/135 - - bugfix using {block append/prepend} on same block in multiple levels of inheritance templates could fail (forum topic 25827) - - bugfix text content consisting of just a single '0' like in {if true}0{/if} was suppressed (forum topic 25834) - - 16.12.2015 - - bugfix {foreach} did fail if from atrribute is a Generator class https://github.com/smarty-php/smarty/issues/128 - - bugfix direct access $smarty->template_dir = 'foo'; should call Smarty::setTemplateDir() https://github.com/smarty-php/smarty/issues/121 - - 15.12.2015 - - bugfix {$smarty.cookies.foo} did return the $_COOKIE array not the 'foo' value https://github.com/smarty-php/smarty/issues/122 - - bugfix a call to clearAllCache() and other should clear all internal template object caches (forum topic 25828) - - 14.12.2015 - - bugfix {$smarty.config.foo} broken in 3.1.28 https://github.com/smarty-php/smarty/issues/120 - - bugfix multiple calls of {section} with same name droped E_NOTICE error https://github.com/smarty-php/smarty/issues/118 - - ===== 3.1.28 ===== (13.12.2015) - 13.12.2015 - - bugfix {foreach} and {section} with uppercase characters in name attribute did not work (forum topic 25819) - - bugfix $smarty->debugging_ctrl = 'URL' did not work (forum topic 25811) - - bugfix Debug Console could display incorrect data when using subtemplates - - 09.12.2015 - - bugfix Smarty did fail under PHP 7.0.0 with use_include_path = true; - - 09.12.2015 - - bugfix {strip} should exclude some html tags from stripping, related to fix for https://github.com/smarty-php/smarty/issues/111 - - 08.12.2015 - - bugfix internal template function data got stored in wrong compiled file https://github.com/smarty-php/smarty/issues/114 - - 05.12.2015 - -bugfix {strip} should insert a single space https://github.com/smarty-php/smarty/issues/111 - - 25.11.2015 - -bugfix a left delimter like '[%' did fail on [%$var_[%$variable%]%] (forum topic 25798) - - 02.11.2015 - - bugfix {include} with variable file name like {include file="foo_`$bar`.tpl"} did fail in 3.1.28-dev https://github.com/smarty-php/smarty/issues/102 - - 01.11.2015 - - update config file processing - - 31.10.2015 - - bugfix add missing $trusted_dir property to SmartyBC class (forum topic 25751) - - 29.10.2015 - - improve template scope handling - - 24.10.2015 - - more optimizations of template processing - - bugfix Error when using {include} within {capture} https://github.com/smarty-php/smarty/issues/100 - - 21.10.2015 - - move some code into runtime extensions - - 18.10.2015 - - optimize filepath normalization - - rework of template inheritance - - speed and size optimizations - - bugfix under HHVM temporary cache file must only be created when caches template was updated - - fix compiled code for new {block} assign attribute - - update code generated by template function call handler - - 18.09.2015 - - bugfix {if $foo instanceof $bar} failed to compile if 2nd value is a variable https://github.com/smarty-php/smarty/issues/92 - - 17.09.2015 - - bugfix {foreach} first attribute was not correctly reset since commit 05a8fa2 of 02.08.2015 https://github.com/smarty-php/smarty/issues/90 - - 16.09.2015 - - update compiler by moving no longer needed properties, code optimizations and other - - 14.09.2015 - - optimize autoloader - - optimize subtemplate handling - - update template inheritance processing - - move code of {call} processing back into Smarty_Internal_Template class - - improvement invalidate OPCACHE for cleared compiled and cached template files (forum topic 25557) - - bugfix unintended multiple debug windows (forum topic 25699) - - 30.08.2015 - - size optimization move some runtime functions into extension - - optimize inline template processing - - optimization merge inheritance child and parent templates into one compiled template file - - 29.08.2015 - - improvement convert template inheritance into runtime processing - - bugfix {$smarty.block.parent} did always reference the root parent block https://github.com/smarty-php/smarty/issues/68 - - 23.08.2015 - - introduce Smarty::$resource_cache_mode and cache template object of {include} inside loop - - load seldom used Smarty API methods dynamically to reduce memory footprint - - cache template object of {include} if same template is included several times - - convert debug console processing to object - - use output buffers for better performance and less memory usage - - optimize nocache hash processing - - remove not really needed properties - - optimize rendering - - move caching to Smarty::_cache - - remove properties with redundant content - - optimize Smarty::templateExists() - - optimize use_include_path processing - - relocate properties for size optimization - - remove redundant code - - bugfix compiling super globals like {$smarty.get.foo} did fail in the master branch https://github.com/smarty-php/smarty/issues/77 - - 06.08.2015 - - avoid possible circular object references caused by parser/lexer objects - - rewrite compileAll... utility methods - - commit several internal improvements - - bugfix Smarty failed when compile_id did contain "|" - - 03.08.2015 - - rework clear cache methods - - bugfix compileAllConfig() was broken since 3.1.22 because of the changes in config file processing - - improve getIncludePath() to return directory if no file was given - - 02.08.2015 - - optimization and code cleanup of {foreach} and {section} compiler - - rework {capture} compiler - - 01.08.2015 - - update DateTime object can be instance of DateTimeImmutable since PHP5.5 https://github.com/smarty-php/smarty/pull/75 - - improvement show resource type and start of template source instead of uid on eval: and string: resource (forum topic 25630) - - 31.07.2015 - - optimize {foreach} and {section} compiler - - 29.07.2015 - - optimize {section} compiler for speed and size of compiled code - - 28.07.2015 - - update for PHP 7 compatibility - - 26.07.2015 - - improvement impement workaround for HHVM PHP incompatibillity https://github.com/facebook/hhvm/issues/4797 - - 25.07.2015 - - bugfix parser did hang on text starting <?something https://github.com/smarty-php/smarty/issues/74 - - 20.07.2015 - - bugfix config files got recompiled on each request - - improvement invalidate PHP 5.5 opcache for recompiled and cached templates https://github.com/smarty-php/smarty/issues/72 - - 12.07.2015 - - optimize {extends} compilation - - 10.07.2015 - - bugfix force file: resource in demo resource.extendsall.php - - 08.07.2015 - - bugfix convert each word of class names to ucfirst in in compiler. (forum topic 25588) - - 07.07.2015 - - improvement allow fetch() or display() called on a template object to get output from other template - like $template->fetch('foo.tpl') https://github.com/smarty-php/smarty/issues/70 - - improvement Added $limit parameter to regex_replace modifier #71 - - new feature multiple indices on file: resource - - 06.07.2015 - - optimize {block} compilation - - optimization get rid of __get and __set in source object - - 01.07.2015 - - optimize compile check handling - - update {foreach} compiler - - bugfix debugging console did not display string values containing \n, \r or \t correctly https://github.com/smarty-php/smarty/issues/66 - - optimize source resources - - 28.06.2015 - - move $smarty->enableSecurity() into Smarty_Security class - - optimize security isTrustedResourceDir() - - move auto load filter methods into extension - - move $smarty->getTemplateVars() into extension - - move getStreamVariable() into extension - - move $smarty->append() and $smarty->appendByRef() into extension - - optimize autoloader - - optimize file path normalization - - bugfix PATH_SEPARATOR was replaced by mistake in autoloader - - remove redundant code - - 27.06.2015 - - bugfix resolve naming conflict between custom Smarty delimiter '<%' and PHP ASP tags https://github.com/smarty-php/smarty/issues/64 - - update $smarty->_realpath for relative path not starting with './' - - update Smarty security with new realpath handling - - update {include_php} with new realpath handling - - move $smarty->loadPlugin() into extension - - minor compiler optimizations - - bugfix allow function plugins with name ending with 'close' https://github.com/smarty-php/smarty/issues/52 - - rework of $smarty->clearCompiledTemplate() and move it to its own extension - - 19.06.2015 - - improvement allow closures as callback at $smarty->registerFilter() https://github.com/smarty-php/smarty/issues/59 - - ===== 3.1.27===== (18.06.2015) - 18.06.2015 - - bugfix another update on file path normalization failed on path containing something like "/.foo/" https://github.com/smarty-php/smarty/issues/56 - - ===== 3.1.26===== (18.06.2015) - 18.06.2015 - - bugfix file path normalization failed on path containing something like "/.foo/" https://github.com/smarty-php/smarty/issues/56 - - 17.06.2015 - - bugfix calling a plugin with nocache option but no other attributes like {foo nocache} caused call to undefined function https://github.com/smarty-php/smarty/issues/55 - - ===== 3.1.25===== (15.06.2015) - 15.06.2015 - - optimization of smarty_cachereource_keyvaluestore.php code - - 14.06.2015 - - bugfix a relative sub template path could fail if template_dir path did contain /../ https://github.com/smarty-php/smarty/issues/50 - - optimization rework of path normalization - - bugfix an output tag with variable, modifier followed by an operator like {$foo|modifier+1} did fail https://github.com/smarty-php/smarty/issues/53 - - 13.06.2015 - - bugfix a custom cache resource using smarty_cachereource_keyvaluestore.php did fail if php.ini mbstring.func_overload = 2 (forum topic 25568) - - 11.06.2015 - - bugfix the lexer could hang on very large quoted strings (forum topic 25570) - - 08.06.2015 - - bugfix using {$foo} as array index like $bar.{$foo} or in double quoted string like "some {$foo} thing" failed https://github.com/smarty-php/smarty/issues/49 - - 04.06.2015 - - bugfix possible error message on unset() while compiling {block} tags https://github.com/smarty-php/smarty/issues/46 - - 01.06.2015 - - bugfix <?xml ... ?> including template variables broken since 3.1.22 https://github.com/smarty-php/smarty/issues/47 - - 27.05.2015 - - bugfix {include} with variable file name must not create by default individual cache file (since 3.1.22) https://github.com/smarty-php/smarty/issues/43 - - 24.05.2015 - - bugfix if condition string 'neq' broken due to a typo https://github.com/smarty-php/smarty/issues/42 - - ===== 3.1.24===== (23.05.2015) - 23.05.2015 - - improvement on php_handling to allow very large PHP sections, better error handling - - improvement allow extreme large comment sections (forum 25538) - - 21.05.2015 - - bugfix broken PHP 5.2 compatibility when compiling <?php tags https://github.com/smarty-php/smarty/issues/40 - - bugfix named {foreach} comparison like $smarty.foreach.foobar.index > 1 did compile into wrong code https://github.com/smarty-php/smarty/issues/41 - - 19.05.2015 - - bugfix compiler did overwrite existing variable value when setting the nocache attribute https://github.com/smarty-php/smarty/issues/39 - - bugfix output filter trimwhitespace could run into the pcre.backtrack_limit on large output (code.google issue 220) - - bugfix compiler could run into the pcre.backtrack_limit on larger comment or {php} tag sections (forum 25538) - - 18.05.2015 - - improvement introduce shortcuts in lexer/parser rules for most frequent terms for higher - compilation speed - - 16.05.2015 - - bugfix {php}{/php} did work just for single lines https://github.com/smarty-php/smarty/issues/33 - - improvement remove not needed ?><?php transitions from compiled code - - improvement reduce number of lexer tokens on operators and if conditions - - improvement higher compilation speed by modified lexer/parser generator at "smarty/smarty-lexer" - - 13.05.2015 - - improvement remove not needed ?><?php transitions from compiled code - - improvement of debugging: - - use fresh Smarty object to display the debug console because of possible problems when the Smarty - was extended or Smarty properties had been modified in the class source - - display Smarty version number - - Truncate lenght of Origin display and extend strin value display to 80 character - - bugfix in Smarty_Security 'nl2br' should be a trusted modifier, not PHP function (code.google issue 223) - - 12.05.2015 - - bugfix {$smarty.constant.TEST} did fail on undefined constant https://github.com/smarty-php/smarty/issues/28 - - bugfix access to undefined config variable like {#undef#} did fail https://github.com/smarty-php/smarty/issues/29 - - bugfix in nested {foreach} saved item attributes got overwritten https://github.com/smarty-php/smarty/issues/33 - - ===== 3.1.23 ===== (12.05.2015) - 12.05.2015 - - bugfix of smaller performance issue introduce in 3.1.22 when caching is enabled - - bugfix missig entry for smarty-temmplate-config in autoloader - - ===== 3.1.22 ===== tag was deleted because 3.1.22 did fail caused by the missing entry for smarty-temmplate-config in autoloader - 10.05.2015 - - bugfix custom cache resource did not observe compile_id and cache_id when $cache_locking == true - - bugfix cache lock was not handled correctly after timeout when $cache_locking == true - - improvement added constants for $debugging - - 07.05.2015 - - improvement of the debugging console. Read NEW_FEATURES.txt - - optimization of resource class loading - - 06.05.2015 - - bugfix in 3.1.22-dev cache resource must not be loaded for subtemplates - - bugfix/improvement in 3.1.22-dev cache locking did not work as expected - - 05.05.2015 - - optimization on cache update when main template is modified - - optimization move <?php ?> handling from parser to new compiler module - - 05.05.2015 - - bugfix code could be messed up when {tags} are used in multiple attributes https://github.com/smarty-php/smarty/issues/23 - - 04.05.2015 - - bugfix Smarty_Resource::parseResourceName incompatible with Google AppEngine (https://github.com/smarty-php/smarty/issues/22) - - improvement use is_file() checks to avoid errors suppressed by @ which could still cause problems (https://github.com/smarty-php/smarty/issues/24) - - 28.04.2015 - - bugfix plugins of merged subtemplates not loaded in 3.1.22-dev (forum topic 25508) 2nd fix - - 28.04.2015 - - bugfix plugins of merged subtemplates not loaded in 3.1.22-dev (forum topic 25508) - - 23.04.2015 - - bugfix a nocache template variable used as parameter at {insert} was by mistake cached - - 20.04.2015 - - bugfix at a template function containing nocache code a parmeter could overwrite a template variable of same name - - 27.03.2015 - - bugfix Smarty_Security->allow_constants=false; did also disable true, false and null (change of 16.03.2015) - - improvement added a whitelist for trusted constants to security Smarty_Security::$trusted_constants (forum topic 25471) - - 20.03.2015 - - bugfix make sure that function properties get saved only in compiled files containing the fuction definition {forum topic 25452} - - bugfix correct update of global variable values on exit of template functions. (reported under Smarty Developers) - - 16.03.2015 - - bugfix problems with {function}{/function} and {call} tags in different subtemplate cache files {forum topic 25452} - - bugfix Smarty_Security->allow_constants=false; did not disallow direct usage of defined constants like {SMARTY_DIR} {forum topic 25457} - - bugfix {block}{/block} tags did not work inside double quoted strings https://github.com/smarty-php/smarty/issues/18 - - - 15.03.2015 - - bugfix $smarty->compile_check must be restored before rendering of a just updated cache file {forum 25452} - - 14.03.2015 - - bugfix {nocache} {/nocache} tags corrupted code when used within a nocache section caused by a nocache template variable. - - - bugfix template functions defined with {function} in an included subtemplate could not be called in nocache - mode with {call... nocache} if the subtemplate had it's own cache file {forum 25452} - - 10.03.2015 - - bugfix {include ... nocache} whith variable file or compile_id attribute was not executed in nocache mode. - - 12.02.2015 - - bugfix multiple Smarty::fetch() of same template when $smarty->merge_compiled_includes = true; could cause function already defined error - - 11.02.2015 - - bugfix recursive {includes} did create E_NOTICE message when $smarty->merge_compiled_includes = true; (github issue #16) - - 22.01.2015 - - new feature security can now control access to static methods and properties - see also NEW_FEATURES.txt - - 21.01.2015 - - bugfix clearCompiledTemplates(), clearAll() and clear() could try to delete whole drive at wrong path permissions because realpath() fail (forum 25397) - - bugfix 'self::' and 'parent::' was interpreted in template syntax as static class - - 04.01.2015 - - push last weeks changes to github - - - different optimizations - - improvement automatically create different versions of compiled templates and config files depending - on property settings. - - optimization restructure template processing by moving code into classes it better belongs to - - optimization restructure config file processing - - 31.12.2014 - - bugfix use function_exists('mb_get_info') for setting Smarty::$_MBSTRING. - Function mb_split could be overloaded depending on php.ini mbstring.func_overload - - - 29.12.2014 - - new feature security can now limit the template nesting level by property $max_template_nesting - see also NEW_FEATURES.txt (forum 25370) - - 29.12.2014 - - new feature security can now disable special $smarty variables listed in property $disabled_special_smarty_vars - see also NEW_FEATURES.txt (forum 25370) - - 27.12.2014 - - bugfix clear internal _is_file_cache when plugins_dir was modified - - 13.12.2014 - - improvement optimization of lexer and parser resulting in a up to 30% higher compiling speed - - 11.12.2014 - - bugfix resolve parser ambiguity between constant print tag {CONST} and other smarty tags after change of 09.12.2014 - - 09.12.2014 - - bugfix variables $null, $true and $false did not work after the change of 12.11.2014 (forum 25342) - - bugfix call of template function by a variable name did not work after latest changes (forum 25342) - - 23.11.2014 - - bugfix a plugin with attached modifier could fail if the tag was immediately followed by another Smarty tag (since 3.1.21) (forum 25326) - - 13.11.2014 - - improvement move autoload code into Autoloader.php. Use Composer autoloader when possible - - 12.11.2014 - - new feature added support of namespaces to template code - - 08.11.2014 - 10.11.2014 - - bugfix subtemplate called in nocache mode could be called with wrong compile_id when it did change on one of the calling templates - - improvement add code of template functions called in nocache mode dynamically to cache file (related to bugfix of 01.11.2014) - - bugfix Debug Console did not include all data from merged compiled subtemplates - - 04.11.2014 - - new feature $smarty->debugging = true; => overwrite existing Debug Console window (old behaviour) - $smarty->debugging = 2; => individual Debug Console window by template name - - 03.11.2014 - - bugfix Debug Console did not show included subtemplates since 3.1.17 (forum 25301) - - bugfix Modifier debug_print_var did not limit recursion or prevent recursive object display at Debug Console - (ATTENTION: parameter order has changed to be able to specify maximum recursion) - - bugfix Debug consol did not include subtemplate information with $smarty->merge_compiled_includes = true - - improvement The template variables are no longer displayed as objects on the Debug Console - - improvement $smarty->createData($parent = null, $name = null) new optional name parameter for display at Debug Console - - addition of some hooks for future extension of Debug Console - - 01.11.2014 - - bugfix and enhancement on subtemplate {include} and template {function} tags. - * Calling a template which has a nocache section could fail if it was called from a cached and a not cached subtemplate. - * Calling the same subtemplate cached and not cached with the $smarty->merge_compiled_includes enabled could cause problems - * Many smaller related changes - - 30.10.2014 - - bugfix access to class constant by object like {$object::CONST} or variable class name {$class::CONST} did not work (forum 25301) - - 26.10.2014 - - bugfix E_NOTICE message was created during compilation when ASP tags '<%' or '%>' are in template source text - - bugfix merge_compiled_includes option failed when caching enables and same subtemplate was included cached and not cached - - ===== 3.1.21 ===== (18.10.2014) - 18.10.2014 - - composer moved to github - - 17.10.2014 - - bugfix on $php_handling security and optimization of smarty_internal_parsetree (Thue Kristensen) - - 16.10.2014 - - bugfix composer.json update - - 15.10.2014 - - bugfix calling a new created cache file with fetch() and Smarty::CACHING_LIFETIME_SAVED multiple times did fail (forum 22350) - - 14.10.2014 - - bugfix any tag placed within "<script language=php>" will throw a security exception to close all thinkable holes - - bugfix classmap in root composer.json should start at "libs/..." - - improvement cache is_file(file_exists) results of loadPlugin() to avoid unnecessary calls during compilation (Issue 201} - - 12.10.2014 - - bugfix a comment like "<script{*foo*} language=php>" bypassed $php_handling checking (Thue Kristensen) - - bugfix change of 08.10.2014 could create E_NOTICE meassage when using "<?php" tags - - bugfix "<script language=php>" with $php_handling PHP_PASSTHRU was executed in {nocache} sections - - ===== 3.1.20 ===== (09.10.2014) - 08.10.2014 - - bugfix security mode of "<script language=php>" must be controlled by $php_handling property (Thue Kristensen) - - 01.10.2014 - - bugfix template resource of inheritance blocks could get invalid if the default resource type is not 'file'(Issue 202) - - bugfix existing child {block} tag must override parent {block} tag append / prepend setting (topic 25259) - - 02.08.2014 - - bugfix modifier wordwrap did output break string wrong if first word was exceeding length with cut = true (topic 25193) - - 24.07.2014 - - bugfix cache clear when cache folder does not exist - - 16.07.2014 - - enhancement remove BOM automatically from template source (topic 25161) - - 04.07.2014 - - bugfix the bufix of 02.06.2014 broke correct handling of child templates with same name but different template folders in extends resource (issue 194 and topic 25099) - - ===== 3.1.19 ===== (30.06.2014) - 20.06.2014 - - bugfix template variables could not be passed as parameter in {include} when the include was in a {nocache} section (topic 25131) - - 17.06.2014 - - bugfix large template text of some charsets could cause parsing errors (topic 24630) - - 08.06.2014 - - bugfix registered objects did not work after spelling fixes of 06.06.2014 - - bugfix {block} tags within {literal} .. {/literal} got not displayed correctly (topic 25024) - - bugfix UNC WINDOWS PATH like "\\psf\path\to\dir" did not work as template directory (Issue 192) - - bugfix {html_image} security check did fail on files relative to basedir (Issue 191) - - 06.06.2014 - - fixed PHPUnit outputFilterTrimWhitespaceTests.php assertion of test result - - fixed spelling, PHPDoc , minor errors, code cleanup - - 02.06.2014 - - using multiple cwd with relative template dirs could result in identical compiled file names. (issue 194 and topic 25099) - - 19.04.2014 - - bugfix calling createTemplate(template, data) with empty data array caused notice of array to string conversion (Issue 189) - - bugfix clearCompiledTemplate() did not delete files on WINDOWS when a compile_id was specified - - 18.04.2014 - - revert bugfix of 5.4.2014 because %-e date format is not supported on all operating systems - - ===== 3.1.18 ===== (07.04.2014) - 06.04.2014 - - bugfix template inheritance fail when using custom resource after patch of 8.3.2014 (Issue 187) - - bugfix update of composer file (Issue 168 and 184) - - 05.04.2014 - - bugfix default date format leads to extra spaces when displaying dates with single digit days (Issue 165) - - 26.03.2014 - - bugfix Smart_Resource_Custom should not lowercase the resource name (Issue 183) - - 24.03.2014 - - bugfix using a {foreach} property like @iteration could fail when used in inheritance parent templates (Issue 182) - - 20.03.2014 - - bugfix $smarty->auto_literal and mbsting.func_overload 2, 6 or 7 did fail (forum topic 24899) - - 18.03.2014 - - revert change of 17.03.2014 - -17.03.2014 - - bugfix $smarty->auto_literal and mbsting.func_overload 2, 6 or 7 did fail (forum topic 24899) - - 15.03.2014 - - bugfix Smarty_CacheResource_Keyvaluestore did use different keys on read/writes and clearCache() calls (Issue 169) - - 13.03.2014 - - bugfix clearXxx() change of 27.1.2014 did not work when specifing cache_id or compile_id (forum topic 24868 and 24867) - - ===== 3.1.17 ===== - 08.03.2014 - - bugfix relative file path {include} within {block} of child templates did throw exception on first call (Issue 177) - - 17.02.2014 - - bugfix Smarty failed when executing PHP on HHVM (Hip Hop 2.4) because uniqid('',true) does return string with ',' (forum topic 20343) - - 16.02.2014 - - bugfix a '//' or '\\' in template_dir path could produce wrong path on relative filepath in {include} (Issue 175) - - 05.02.2014 - - bugfix shared.literal_compiler_param.php did throw an exception when literal did contain a '-' (smarty-developers group) - - 27.01.2014 - - bugfix $smarty->debugging = true; did show the variable of the $smarty object not the variables used in display() call (forum topic 24764) - - bugfix clearCompiledTemplate(), clearAll() and clear() should use realpath to avoid possible exception from RecursiveDirectoryIterator (Issue 171) - - 26.01.2014 - - bugfix undo block nesting checks for {nocache} for reasons like forum topic 23280 (forum topic 24762) - - 18.01.2014 - - bugfix the compiler did fail when using template inheritance and recursive {include} (smarty-developers group) - - 11.01.2014 - - bugfix "* }" (spaces before right delimiter) was interpreted by mistake as comment end tag (Issue 170) - - internals content cache should be clear when updating cache file - - 08.01.2014 - - bugfix Smarty_CacheResource_Custom did not handle template resource type specifications on clearCache() calls (Issue 169) - - bugfix SmartyBC.class.php should use require_once to load Smarty.class.php (forum topic 24683) - - ===== 3.1.16 ===== - 15.12.2013 - - bugfix {include} with {block} tag handling (forum topic 24599, 24594, 24682) (Issue 161) - Read 3.1.16_RELEASE_NOTES for more details - - enhancement additional debug output at $smarty->_parserdebug = true; - - 07.11.2013 - - bugfix too restrictive handling of {include} within {block} tags. 3.1.15 did throw errors where 3.1.14 did not (forum topic 24599) - - bugfix compiler could fail if PHP mbstring.func_overload is enabled (Issue 164) - - 28.10.2013 - - bugfix variable resource name at custom resource plugin did not work within {block} tags (Issue 163) - - bugfix notice "Trying to get property of non-object" removed (Issue 163) - - bugfix correction of modifier capitalize fix from 3.10.2013 (issue 159) - - bugfix multiple {block}s with same name in parent did not work (forum topic 24631) - - 20.10.2013 - - bugfix a variable file name at {extends} tag did fail (forum topic 24618) - - 14.10.2013 - - bugfix yesterdays fix could result in an undefined variable - - 13.10.2013 - - bugfix variable names on {include} in template inheritance did unextepted error message (forum topic 24594) (Issue 161) -.- bugfix relative includes with same name like {include './foo.tpl'} from different folder failed (forum topic 24590)(Issue 161) - - 04.10.2013 - - bugfix variable file names at {extends} had been disbabled by mistake with the rewrite of - template inheritance of 24.08.2013 (forum topic 24585) - -03.10.2013 - - bugfix loops using modifier capitalize did eat up memory (issue 159) - - ===== Smarty 3.1.15 ===== -01.10.2013 - - use current delimiters in compiler error messages (issue 157) - - improvement on performance when using error handler and multiple template folders (issue 152) - -17.09.2013 - - improvement added patch for additional SmartyCompilerException properties for better access to scource information (forum topic 24559) - -16.09.2013 - - bugfix recompiled templates did not show on first request with zend opcache cache (forum topic 24320) - -13.09.2013 - - bugfix html_select_time defaulting error for the Meridian dropdown (forum topic 24549) - -09.09.2012 -- bugfix incorrect compiled code with array(object,method) callback at registered Variable Filter (forum topic 24542) - -27.08.2013 -- bugfix delimiter followed by linebreak did not work as auto literal after update from 24.08.2013 (forum topic 24518) - -24.08.2013 -- bugfix and enhancement - Because several recent problems with template inheritance the {block} tag compiler has been rewriten - - Error messages shown now the correct child template file and line number - - The compiler could fail on some larger UTF-8 text block (forum topic 24455) - - The {strip} tag can now be placed outside {block} tags in child templates (forum topic 24289) -- change SmartyException::$escape is now false by default -- change PHP traceback has been remove for SmartyException and SmartyCompilerException - -14.08.2013 -- bugfix compiled filepath of config file did not observe different config_dir (forum topic 24493) - -13.08.2013 -- bugfix the internal resource cache did not observe config_dir changes (forum topic 24493) - -12.08.2013 -- bugfix internal $tmpx variables must be unique over all inheritance templates (Issue 149) - -10.08.2013 -- bugfix a newline was eaten when a <?xml ... ?> was passed by a Smarty variable and caching was enabled (forum topic 24482) - -29.07.2013 -- bugfix headers already send warning thrown when using 'SMARTY_DEBUG=on' from URL (Issue 148) - -27.07.2013 -- enhancement allow access to properties of registered opjects for Smarty2 BC (forum topic 24344) - -26.07.2013 -- bugfix template inheritance nesting problem (forum topic 24387) - -15.7.2013 -- update code generated by PSR-2 standards fixer which introduced PHP 5.4 incompatibilities of 14.7.2013 - -14.7.2013 -- bugfix increase of internal maximum parser stacksize to allow more complex tag code {forum topic 24426} -- update for PHP 5.4 compatibility -- reformat source to PSR-2 standard - -12.7.2013 -- bugfix Do not remove '//' from file path at normalization (Issue 142) - -2.7.2013 -- bugfix trimwhitespace would replace captured items in wrong order (forum topic 24387) - -===== Smarty-3.1.14 ===== -27.06.2013 -- bugfix removed PHP 5.5 deprecated preg_replace /e option in modifier capitalize (forum topic 24389) - -17.06.2013 -- fixed spelling in sources and documentation (from smarty-developers forum Veres Lajos) -- enhancement added constant SMARTY::CLEAR_EXPIRED for the change of 26.05.2013 (forum topic 24310) -- bugfix added smarty_security.php to composer.json (Issue 135) - -26.05.2013 -- enhancement an expire_time of -1 in clearCache() and clearAllCache() will delete outdated cache files - by their individual cache_lifetime used at creation (forum topic 24310) - -21.05.2013 -- bugfix modifier strip_tags:true was compiled into wrong code (Forum Topic 24287) -- bugfix /n after ?> in Smarty.class.php did start output buffering (Issue 138) - -25.04.2013 -- bugfix escape and wordrap modifier could be compiled into wrong code when used in {nocache}{/nocache} - section but caching is disabled (Forum Topic 24260) - -05.04.2013 -- bugfix post filter must not run when compiling inheritance child blocks (Forum Topic 24094) -- bugfix after the fix for Issue #130 compiler exceptions got double escaped (Forum Topic 24199) - -28.02.2013 -- bugfix nocache blocks could be lost when using CACHING_LIFETIME_SAVED (Issue #133) -- bugfix Compile ID gets nulled when compiling child blocks (Issue #134) - - -24.01.2013 -- bugfix wrong tag type in smarty_internal_templatecompilerbase.php could cause wrong plugin search order (Forum Topic 24028) - -===== Smarty-3.1.13 ===== -13.01.2013 -- enhancement allow to disable exception message escaping by SmartyException::$escape = false; (Issue #130) - -09.01.2013 -- bugfix compilation did fail when a prefilter did modify an {extends} tag c -- bugfix template inheritance could fail if nested {block} tags in childs did contain {$smarty.block.child} (Issue #127) -- bugfix template inheritance could fail if {block} tags in childs did have similar name as used plugins (Issue #128) -- added abstract method declaration doCompile() in Smarty_Internal_TemplateCompilerBase (Forum Topic 23969) - -06.01.2013 -- Allow '://' URL syntax in template names of stream resources (Issue #129) - -27.11.2012 -- bugfix wrong variable usage in smarty_internal_utility.php (Issue #125) - -26.11.2012 -- bugfix global variable assigned within template function are not seen after template function exit (Forum Topic 23800) - -24.11.2012 -- made SmartyBC loadable via composer (Issue #124) - -20.11.2012 -- bugfix assignGlobal() called from plugins did not work (Forum Topic 23771) - -13.11.2012 -- adding attribute "strict" to html_options, html_checkboxes, html_radios to only print disabled/readonly attributes if their values are true or "disabled"/"readonly" (Issue #120) - -01.11.2012 -- bugfix muteExcpetedErrors() would screw up for non-readable paths (Issue #118) - -===== Smarty-3.1.12 ===== -14.09.2012 -- bugfix template inheritance failed to compile with delimiters {/ and /} (Forum Topic 23008) - -11.09.2012 -- bugfix escape Smarty exception messages to avoid possible script execution - -10.09.2012 -- bugfix tag option flags and shorttag attributes did not work when rdel started with '=' (Forum Topic 22979) - -31.08.2012 -- bugfix resolving relative paths broke in some circumstances (Issue #114) - -22.08.2012 -- bugfix test MBString availability through mb_split, as it could've been compiled without regex support (--enable-mbregex). - Either we get MBstring's full package, or we pretend it's not there at all. - -21.08.2012 -- bugfix $auto_literal = false did not work with { block} tags in child templates - (problem was reintroduced after fix in 3.1.7)(Forum Topic 20581) - -17.08.2012 -- bugfix compiled code of nocache sections could contain wrong escaping (Forum Topic 22810) - -15.08.2012 -- bugfix template inheritance did produce wrong code if subtemplates with {block} was - included several times (from smarty-developers forum) - -14.08.2012 -- bugfix PHP5.2 compatibility compromised by SplFileInfo::getBasename() (Issue 110) - -01.08.2012 -- bugfix avoid PHP error on $smarty->configLoad(...) with invalid section specification (Forum Topic 22608) - -30.07.2012 --bugfix {assign} in a nocache section should not overwrite existing variable values - during compilation (issue 109) - -28.07.2012 -- bugfix array access of config variables did not work (Forum Topic 22527) - -19.07.2012 -- bugfix the default plugin handler did create wrong compiled code for static class methods - from external script files (issue 108) - -===== Smarty-3.1.11 ===== -30.06.2012 -- bugfix {block.. hide} did not work as nested child (Forum Topic 22216) - -25.06.2012 -- bugfix the default plugin handler did not allow static class methods for modifier (issue 85) - -24.06.2012 -- bugfix escape modifier support for PHP < 5.2.3 (Forum Topic 21176) - -11.06.2012 -- bugfix the patch for Topic 21856 did break tabs between tag attributes (Forum Topic 22124) - -===== Smarty-3.1.10 ===== -09.06.2012 -- bugfix the compiler did ignore registered compiler plugins for closing tags (Forum Topic 22094) -- bugfix the patch for Topic 21856 did break multiline tags (Forum Topic 22124) - -===== Smarty-3.1.9 ===== -07.06.2012 -- bugfix fetch() and display() with relative paths (Issue 104) -- bugfix treat "0000-00-00" as 0 in modifier.date_format (Issue 103) - -24.05.2012 -- bugfix Smarty_Internal_Write_File::writeFile() could cause race-conditions on linux systems (Issue 101) -- bugfix attribute parameter names of plugins may now contain also "-" and ":" (Forum Topic 21856) -- bugfix add compile_id to cache key of of source (Issue 97) - -22.05.2012 -- bugfix recursive {include} within {section} did fail (Smarty developer group) - -12.05.2012 -- bugfix {html_options} did not properly escape values (Issue 98) - -03.05.2012 -- bugfix make HTTP protocall version variable (issue 96) - -02.05.2012 -- bugfix {nocache}{block}{plugin}... did produce wrong compiled code when caching is disabled (Forum Topic 21572, issue 95) - -12.04.2012 -- bugfix Smarty did eat the linebreak after the <?xml...?> closing tag (Issue 93) -- bugfix concurrent cache updates could create a warning (Forum Topic 21403) - -08.04.2012 -- bugfix "\\" was not escaped correctly when generating nocache code (Forum Topic 21364) - -30.03.2012 -- bugfix template inheritance did not throw exception when a parent template was deleted (issue 90) - -27.03.2012 -- bugfix prefilter did run multiple times on inline subtemplates compiled into several main templates (Forum Topic 21325) -- bugfix implement Smarty2's behaviour of variables assigned by reference in SmartyBC. {assign} will affect all references. - (issue 88) - -21.03.2012 -- bugfix compileAllTemplates() and compileAllConfig() did not return the number of compiled files (Forum Topic 21286) - -13.03.2012 -- correction of yesterdays bugfix (Forum Topic 21175 and 21182) - -12.03.2012 -- bugfix a double quoted string of "$foo" did not compile into PHP "$foo" (Forum Topic 21175) -- bugfix template inheritance did set $merge_compiled_includes globally true - -03.03.2012 -- optimization of compiling speed when same modifier was used several times - -02.03.2012 -- enhancement the default plugin handler can now also resolve undefined modifier (Smarty::PLUGIN_MODIFIER) - (Issue 85) - -===== Smarty-3.1.8 ===== -19.02.2012 -- bugfix {include} could result in a fatal error if used in appended or prepended nested {block} tags - (reported by mh and Issue 83) -- enhancement added Smarty special variable $smarty.template_object to return the current template object (Forum Topic 20289) - - -07.02.2012 -- bugfix increase entropy of internal function names in compiled and cached template files (Forum Topic 20996) -- enhancement cacheable parameter added to default plugin handler, same functionality as in registerPlugin (request by calguy1000) - -06.02.2012 -- improvement stream_resolve_include_path() added to Smarty_Internal_Get_Include_Path (Forum Topic 20980) -- bugfix fetch('extends:foo.tpl') always yielded $source->exists == true (Forum Topic 20980) -- added modifier unescape:"url", fix (Forum Topic 20980) -- improvement replaced some calls of preg_replace with str_replace (Issue 73) - -30.01.2012 -- bugfix Smarty_Security internal $_resource_dir cache wasn't properly propagated - -27.01.2012 -- bugfix Smarty did not a template name of "0" (Forum Topic 20895) - -20.01.2012 -- bugfix typo in Smarty_Internal_Get_IncludePath did cause runtime overhead (Issue 74) -- improvment remove unneeded assigments (Issue 75 and 76) -- fixed typo in template parser -- bugfix output filter must not run before writing cache when template does contain nocache code (Issue 71) - -02.01.2012 -- bugfix {block foo nocache} did not load plugins within child {block} in nocache mode (Forum Topic 20753) - -29.12.2011 -- bugfix enable more entropy in Smarty_Internal_Write_File for "more uniqueness" and Cygwin compatibility (Forum Topic 20724) -- bugfix embedded quotes in single quoted strings did not compile correctly in {nocache} sections (Forum Topic 20730) - -28.12.2011 -- bugfix Smarty's internal header code must be excluded from postfilters (issue 71) - -22.12.2011 -- bugfix the new lexer of 17.12.2011 did fail if mbstring.func_overload != 0 (issue 70) (Forum Topic 20680) -- bugfix template inheritace did fail if mbstring.func_overload != 0 (issue 70) (Forum Topic 20680) - -20.12.2011 -- bugfix template inheritance: {$smarty.block.child} in nested child {block} tags did not return - content after {$smarty.block.child} (Forum Topic 20564) - -===== Smarty-3.1.7 ===== -18.12.2011 -- bugfix strings ending with " in multiline strings of config files failed to compile (issue #67) -- added chaining to Smarty_Internal_Templatebase -- changed unloadFilter() to not return a boolean in favor of chaining and API conformity -- bugfix unregisterObject() raised notice when object to unregister did not exist -- changed internals to use Smarty::$_MBSTRING ($_CHARSET, $_DATE_FORMAT) for better unit testing -- added Smarty::$_UTF8_MODIFIER for proper PCRE charset handling (Forum Topic 20452) -- added Smarty_Security::isTrustedUri() and Smarty_Security::$trusted_uri to validate - remote resource calls through {fetch} and {html_image} (Forum Topic 20627) - -17.12.2011 -- improvement of compiling speed by new handling of plain text blocks in the lexer/parser (issue #68) - -16.12.2011 -- bugfix the source exits flag and timestamp was not setup when template was in php include path (issue #69) - -9.12.2011 -- bugfix {capture} tags around recursive {include} calls did throw exception (Forum Topic 20549) -- bugfix $auto_literal = false did not work with { block} tags in child templates (Forum Topic 20581) -- bugfix template inheritance: do not include code of {include} in overloaded {block} into compiled - parent template (Issue #66} -- bugfix template inheritance: {$smarty.block.child} in nested child {block} tags did not return expected - result (Forum Topic 20564) - -===== Smarty-3.1.6 ===== -30.11.2011 -- bugfix is_cache() for individual cached subtemplates with $smarty->caching = CACHING_OFF did produce - an exception (Forum Topic 20531) - -29.11.2011 -- bugfix added exception if the default plugin handler did return a not static callback (Forum Topic 20512) - -25.11.2011 -- bugfix {html_select_date} and {html_slecet_time} did not default to current time if "time" was not specified - since r4432 (issue 60) - -24.11.2011 -- bugfix a subtemplate later used as main template did use old variable values - -21.11.2011 -- bugfix cache file could include unneeded modifier plugins under certain condition - -18.11.2011 -- bugfix declare all directory properties private to map direct access to getter/setter also on extended Smarty class - -16.11.2011 -- bugfix Smarty_Resource::load() did not always return a proper resource handler (Forum Topic 20414) -- added escape argument to html_checkboxes and html_radios (Forum Topic 20425) - -===== Smarty-3.1.5 ===== -14.11.2011 -- bugfix allow space between function name and open bracket (forum topic 20375) - -09.11.2011 -- bugfix different behaviour of uniqid() on cygwin. See https://bugs.php.net/bug.php?id=34908 - (forum topic 20343) - -01.11.2011 -- bugfix {if} and {while} tags without condition did not throw a SmartyCompilerException (Issue #57) -- bugfix multiline strings in config files could fail on longer strings (reopened Issue #55) - -22.10.2011 -- bugfix smarty_mb_from_unicode() would not decode unicode-points properly -- bugfix use catch Exception instead UnexpectedValueException in - clearCompiledTemplate to be PHP 5.2 compatible - -21.10.2011 -- bugfix apostrophe in plugins_dir path name failed (forum topic 20199) -- improvement sha1() for array keys longer than 150 characters -- add Smarty::$allow_ambiguous_resources to activate unique resource handling (Forum Topic 20128) - -20.10.2011 -- @silenced unlink() in Smarty_Internal_Write_File since debuggers go haywire without it. -- bugfix Smarty::clearCompiledTemplate() threw an Exception if $cache_id was not present in $compile_dir when $use_sub_dirs = true. -- bugfix {html_select_date} and {html_select_time} did not properly handle empty time arguments (Forum Topic 20190) -- improvement removed unnecessary sha1() - -19.10.2011 -- revert PHP4 constructor message -- fixed PHP4 constructor message - -===== Smarty-3.1.4 ===== -19.10.2011 -- added exception when using PHP4 style constructor - -16.10.2011 -- bugfix testInstall() did not propery check cache_dir and compile_dir - -15.10.2011 -- bugfix Smarty_Resource and Smarty_CacheResource runtime caching (Forum Post 75264) - -14.10.2011 -- bugfix unique_resource did not properly apply to compiled resources (Forum Topic 20128) -- add locking to custom resources (Forum Post 75252) -- add Smarty_Internal_Template::clearCache() to accompany isCached() fetch() etc. - -13.10.2011 -- add caching for config files in Smarty_Resource -- bugfix disable of caching after isCached() call did not work (Forum Topic 20131) -- add concept unique_resource to combat potentially ambiguous template_resource values when custom resource handlers are used (Forum Topic 20128) -- bugfix multiline strings in config files could fail on longer strings (Issue #55) - -11.10.2011 -- add runtime checks for not matching {capture}/{/capture} calls (Forum Topic 20120) - -10.10.2011 -- bugfix variable name typo in {html_options} and {html_checkboxes} (Issue #54) -- bugfix <?xml> tag did create wrong output when caching enabled and the tag was in included subtemplate -- bugfix Smarty_CacheResource_mysql example was missing strtotime() calls - -===== Smarty-3.1.3 ===== -07.10.2011 -- improvement removed html comments from {mailto} (Forum Topic 20092) -- bugfix testInstall() would not show path to internal plugins_dir (Forum Post 74627) -- improvement testInstall() now showing resolved paths and checking the include_path if necessary -- bugfix html_options plugin did not handle object values properly (Issue #49, Forum Topic 20049) -- improvement html_checkboxes and html_radios to accept null- and object values, and label_ids attribute -- improvement removed some unnecessary count()s -- bugfix parent pointer was not set when fetch() for other template was called on template object - -06.10.2011 -- bugfix switch lexer internals depending on mbstring.func_overload -- bugfix start_year and end_year of {html_select_date} did not use current year as offset base (Issue #53) - -05.10.2011 -- bugfix of problem introduced with r4342 by replacing strlen() with isset() -- add environment configuration issue with mbstring.func_overload Smarty cannot compensate for (Issue #45) -- bugfix nofilter tag option did not disable default modifier -- bugfix html_options plugin did not handle null- and object values properly (Issue #49, Forum Topic 20049) - -04.10.2011 -- bugfix assign() in plugins called in subtemplates did change value also in parent template -- bugfix of problem introduced with r4342 on math plugin -- bugfix output filter should not run on individually cached subtemplates -- add unloadFilter() method -- bugfix has_nocache_code flag was not reset before compilation - -===== Smarty-3.1.2 ===== -03.10.2011 -- improvement add internal $joined_template_dir property instead computing it on the fly several times - -01.10.2011 -- improvement replaced most in_array() calls by more efficient isset() on array_flip()ed haystacks -- improvement replaced some strlen($foo) > 3 calls by isset($foo[3]) -- improvement Smarty_Internal_Utility::clearCompiledTemplate() removed redundant strlen()s - -29.09.2011 -- improvement of Smarty_Internal_Config::loadConfigVars() dropped the in_array for index look up - -28.09.2011 -- bugfix on template functions called nocache calling other template functions - -27.09.2011 -- bugfix possible warning "attempt to modify property of non-object" in {section} (issue #34) -- added chaining to Smarty_Internal_Data so $smarty->assign('a',1)->assign('b',2); is possible now -- bugfix remove race condition when a custom resource did change timestamp during compilation -- bugfix variable property did not work on objects variable in template -- bugfix smarty_make_timestamp() failed to process DateTime objects properly -- bugfix wrong resource could be used on compile check of custom resource - -26.09.2011 -- bugfix repeated calls to same subtemplate did not make use of cached template object - -24.09.2011 -- removed internal muteExpectedErrors() calls in favor of having the implementor call this once from his application -- optimized muteExpectedErrors() to pass errors to the latest registered error handler, if appliccable -- added compile_dir and cache_dir to list of muted directories -- improvment better error message for undefined templates at {include} - -23.09.2011 -- remove unused properties -- optimization use real function instead anonymous function for preg_replace_callback -- bugfix a relative {include} in child template blocks failed -- bugfix direct setting of $template_dir, $config_dir, $plugins_dir in __construct() of an - extended Smarty class created problems -- bugfix error muting was not implemented for cache locking - -===== Smarty 3.1.1 ===== -22.09.2011 -- bugfix {foreachelse} does fail if {section} was nested inside {foreach} -- bugfix debug.tpl did not display correctly when it was compiled with escape_html = true - -21.09.2011 -- bugfix look for mixed case plugin file names as in 3.0 if not found try all lowercase -- added $error_muting to suppress error messages even for badly implemented error_handlers -- optimized autoloader -- reverted ./ and ../ handling in fetch() and display() - they're allowed again - -20.09.2011 -- bugfix removed debug echo output while compiling template inheritance -- bugfix relative paths in $template_dir broke relative path resolving in {include "../foo.tpl"} -- bugfix {include} did not work inside nested {block} tags -- bugfix {assign} with scope root and global did not work in all cases - -19.09.2011 -- bugfix regression in Smarty_CacheReource_KeyValueStore introduced by r4261 -- bugfix output filter shall not run on included subtemplates - -18.09.2011 -- bugfix template caching did not care about file.tpl in different template_dir -- bugfix {include $file} was broken when merge_compiled_incluges = true -- bugfix {include} was broken when merge_compiled_incluges = true and same indluded template - was used in different main templates in one compilation run -- bugfix for Smarty2 style compiler plugins on unnamed attribute passing like {tag $foo $bar} -- bugfix debug.tpl did not display correctly when it was compiled with escape_html = true - -17.09.2011 -- bugfix lock_id for file resource would create invalid filepath -- bugfix resource caching did not care about file.tpl in different template_dir - -===== Smarty 3.1.0 ===== -15/09/2011 -- optimization of {foreach}; call internal _count() method only when "total" or "last" {foreach} properties are used - -11/09/2011 -- added unregisterObject() method - -06/09/2011 -- bugfix isset() did not work in templates on config variables - -03/09/2011 -- bugfix createTemplate() must default to cache_id and compile_id of Smarty object -- bugfix Smarty_CacheResource_KeyValueStore must include $source->uid in cache filepath to keep templates with same - name but different folders separated -- added cacheresource.apc.php example in demo folder - -02/09/2011 -- bugfix cache lock file must use absolute filepath - -01/09/2011 -- update of cache locking - -30/08/2011 -- added locking mechanism to CacheResource API (implemented with File and KeyValueStores) - -28/08/2011 -- bugfix clearCompileTemplate() did not work for specific template subfolder or resource - -27/08/2011 -- bugfix {$foo|bar+1} did create syntax error - -26/08/2011 -- bugfix when generating nocache code which contains double \ -- bugfix handle race condition if cache file was deleted between filemtime and include - -17/08/2011 -- bugfix CacheResource_Custom bad internal fetch() call - -15/08/2011 -- bugfix CacheResource would load content twice for KeyValueStore and Custom handlers - -06/08/2011 -- bugfix {include} with scope attribute could execute in wrong scope -- optimization of compile_check processing - -03/08/2011 -- allow comment tags to comment {block} tags out in child templates - -26/07/2011 -- bugfix experimental getTags() method did not work - -24/07/2011 -- sure opened output buffers are closed on exception -- bugfix {foreach} did not work on IteratorAggregate - -22/07/2011 -- clear internal caches on clearAllCache(), clearCache(), clearCompiledTemplate() - -21/07/2011 -- bugfix value changes of variable values assigned to Smarty object could not be seen on repeated $smarty->fetch() calls - -17/07/2011 -- bugfix {$smarty.block.child} did drop a notice at undefined child - -15/07/2011 -- bugfix individual cache_lifetime of {include} did not work correctly inside {block} tags -- added caches for Smarty_Internal_TemplateSource and Smarty_Internal_TemplateCompiled to reduce I/O for multiple cache_id rendering - -14/07/2011 -- made Smarty::loadPlugin() respect the include_path if required - -13/07/2011 -- optimized internal file write functionality -- bugfix PHP did eat line break on nocache sections -- fixed typo of Smarty_Security properties $allowed_modifiers and $disabled_modifiers - -06/07/2011 -- bugfix variable modifier must run befor gereral filtering/escaping - -04/07/2011 -- bugfix use (?P<name>) syntax at preg_match as some pcre libraries failed on (?<name>) -- some performance improvement when using generic getter/setter on template objects - -30/06/2011 -- bugfix generic getter/setter of Smarty properties used on template objects did throw exception -- removed is_dir and is_readable checks from directory setters for better performance - -28/06/2011 -- added back support of php template resource as undocumented feature -- bugfix automatic recompilation on version change could drop undefined index notice on old 3.0 cache and compiled files -- update of README_3_1_DEV.txt and moved into the distribution folder -- improvement show first characters of eval and string templates instead sha1 Uid in debug window - -===== Smarty 3.1-RC1 ===== -25/06/2011 -- revert change of 17/06/2011. $_smarty varibale removed. call loadPlugin() from inside plugin code if required -- code cleanup, remove no longer used properties and methods -- update of PHPdoc comments - -23/06/2011 -- bugfix {html_select_date} would not respect current time zone - -19/06/2011 -- added $errors argument to testInstall() functions to suppress output. -- added plugin-file checks to testInstall() - -18/06/2011 -- bugfix mixed use of same subtemplate inline and not inline in same script could cause a warning during compilation - -17/06/2011 -- bugfix/change use $_smarty->loadPlugin() when loading nested depending plugins via loadPlugin -- bugfix {include ... inline} within {block}...{/block} did fail - -16/06/2011 -- bugfix do not overwrite '$smarty' template variable when {include ... scope=parent} is called -- bugfix complete empty inline subtemplates did fail - -15/06/2011 -- bugfix template variables where not accessable within inline subtemplates - -12/06/2011 -- bugfix removed unneeded merging of template variable when fetching includled subtemplates - -10/06/2011 -- made protected properties $template_dir, $plugins_dir, $cache_dir, $compile_dir, $config_dir accessible via magic methods - -09/06/2011 -- fix smarty security_policy issue in plugins {html_image} and {fetch} - -05/06/2011 -- update of SMARTY_VERSION -- bugfix made getTags() working again - -04/06/2011 -- allow extends resource in file attribute of {extends} tag - -03/06/2011 -- added {setfilter} tag to set filters for variable output -- added escape_html property to control autoescaping of variable output - -27/05/2011 -- added allowed/disabled tags and modifiers in security for sandboxing - -23/05/2011 -- added base64: and urlencode: arguments to eval and string resource types - -22/05/2011 -- made time-attribute of {html_select_date} and {html_select_time} accept arrays as defined by attributes prefix and field_array - -13/05/2011 -- remove setOption / getOption calls from SamrtyBC class - -02/05/2011 -- removed experimental setOption() getOption() methods -- output returned content also on opening tag calls of block plugins -- rewrite of default plugin handler -- compile code of variable filters for better performance - -20/04/2011 -- allow {php} {include_php} tags and PHP_ALLOW handling only with the SmartyBC class -- removed support of php template resource - -20/04/2011 -- added extendsall resource example -- optimization of template variable access -- optimization of subtemplate handling {include} -- optimization of template class - -01/04/2011 -- bugfix quote handling in capitalize modifier - -28/03/2011 -- bugfix stripslashes() requried when using PCRE e-modifier - -04/03/2011 -- upgrade to new PHP_LexerGenerator version 0.4.0 for better performance - -27/02/2011 -- ignore .svn folders when clearing cache and compiled files -- string resources do not need a modify check - -26/02/2011 -- replaced smarty_internal_wrapper by SmartyBC class -- load utility functions as static methods instead through __call() -- bugfix in extends resource when subresources are used -- optimization of modify checks - -25/02/2011 -- use $smarty->error_unassigned to control NOTICE handling on unassigned variables - -21/02/2011 -- added new new compile_check mode COMPILECHECK_CACHEMISS -- corrected new cloning behaviour of createTemplate() -- do no longer store the compiler object as property in the compile_tag classes to avoid possible memory leaks - during compilation - -19/02/2011 -- optimizations on merge_compiled_includes handling -- a couple of optimizations and bugfixes related to new resource structure - -17/02/2011 -- changed ./ and ../ behaviour - -14/02/2011 -- added {block ... hide} option to suppress block if no child is defined - -13/02/2011 -- update handling of recursive subtemplate calls -- bugfix replace $smarty->triggerError() by exception in smarty_internal_resource_extends.php - -12/02/2011 -- new class Smarty_Internal_TemplateBase with shared methods of Smarty and Template objects -- optimizations of template processing -- made register... methods permanet -- code for default_plugin_handler -- add automatic recompilation at version change - -04/02/2011 -- change in Smarty_CacheResource_Custom -- bugfix cache_lifetime did not compile correctly at {include} after last update -- moved isCached processing into CacheResource class -- bugfix new CacheResource API did not work with disabled compile_check - -03/02/2011 -- handle template content as function to improve speed on multiple calls of same subtemplate and isCached()/display() calls -- bugfixes and improvents in the new resource API -- optimizations of template class code - -25/01/2011 -- optimized function html_select_time - -22/01/2011 -- added Smarty::$use_include_path configuration directive for Resource API - -21/01/2011 -- optimized function html_select_date - -19/01/2011 -- optimized outputfilter trimwhitespace - -18/01/2011 -- bugfix Config to use Smarty_Resource to fetch sources -- optimized Smarty_Security's isTrustedDir() and isTrustedPHPDir() - -17/01/2011 -- bugfix HTTP headers for CGI SAPIs - -16/01/2011 -- optimized internals of Smarty_Resource and Smarty_CacheResource - -14/01/2011 -- added modifiercompiler escape to improve performance of escaping html, htmlall, url, urlpathinfo, quotes, javascript -- added support to choose template_dir to load from: [index]filename.tpl - -12/01/2011 -- added unencode modifier to revert results of encode modifier -- added to_charset and from_charset modifier for character encoding - -11/01/2011 -- added SMARTY_MBSTRING to generalize MBString detection -- added argument $lc_rest to modifier.capitalize to lower-case anything but the first character of a word -- changed strip modifier to consider unicode white-space, too -- changed wordwrap modifier to accept UTF-8 strings -- changed count_sentences modifier to consider unicode characters and treat sequences delimited by ? and ! as sentences, too -- added argument $double_encode to modifier.escape (applies to html and htmlall only) -- changed escape modifier to be UTF-8 compliant -- changed textformat block to be UTF-8 compliant -- optimized performance of mailto function -- fixed spacify modifier so characters are not prepended and appended, made it unicode compatible -- fixed truncate modifier to properly use mb_string if possible -- removed UTF-8 frenzy from count_characters modifier -- fixed count_words modifier to treat "hello-world" as a single word like str_count_words() does -- removed UTF-8 frenzy from upper modifier -- removed UTF-8 frenzy from lower modifier - -01/01/2011 -- optimize smarty_modified_escape for hex, hexentity, decentity. - -28/12/2010 -- changed $tpl_vars, $config_vars and $parent to belong to Smarty_Internal_Data -- added Smarty::registerCacheResource() for dynamic cache resource object registration - -27/12/2010 -- added Smarty_CacheResource API and refactored existing cache resources accordingly -- added Smarty_CacheResource_Custom and Smarty_CacheResource_Mysql - -26/12/2010 -- added Smarty_Resource API and refactored existing resources accordingly -- added Smarty_Resource_Custom and Smarty_Resource_Mysql -- bugfix Smarty::createTemplate() to return properly cloned template instances - -24/12/2010 -- optimize smarty_function_escape_special_chars() for PHP >= 5.2.3 - -===== SVN 3.0 trunk ===== -14/05/2011 -- bugfix error handling at stream resources - -13/05/2011 -- bugfix condition starting with "-" did fail at {if} and {while} tags - -22/04/2011 -- bugfix allow only fixed string as file attribute at {extends} tag - -01/04/2011 -- bugfix do not run filters and default modifier when displaying the debug template -- bugfix of embedded double quotes within multi line strings (""") - -29/03/2011 -- bugfix on error message in smarty_internal_compile_block.php -- bugfix mb handling in strip modifier -- bugfix for Smarty2 style registered compiler function on unnamed attribute passing like {tag $foo $bar} - -17/03/2011 -- bugfix on default {function} parameters when {function} was used in nocache sections -- bugfix on compiler object destruction. compiler_object property was by mistake unset. - -09/03/2011 --bugfix a variable filter should run before modifiers on an output tag (see change of 23/07/2010) - -08/03/2011 -- bugfix loading config file without section should load only defaults - -03/03/2011 -- bugfix "smarty" template variable was not recreated when cached templated had expired -- bugfix internal rendered_content must be cleared after subtemplate was included - -01/03/2011 -- bugfix replace modifier did not work in 3.0.7 on systems without multibyte support -- bugfix {$smarty.template} could return in 3.0.7 parent template name instead of - child name when it needed to compile - -25/02/2011 -- bugfix for Smarty2 style compiler plugins on unnamed attribute passing like {tag $foo $bar} - -24/02/2011 -- bugfix $smarty->clearCache('some.tpl') did by mistake cache the template object - -18/02/2011 -- bugfix removed possible race condition when isCached() was called for an individually cached subtemplate -- bugfix force default debug.tpl to be loaded by the file resource - -17/02/2011 --improvement not to delete files starting with '.' from cache and template_c folders on clearCompiledTemplate() and clearCache() - -16/02/2011 --fixed typo in exception message of Smarty_Internal_Template --improvement allow leading spaces on } tag closing if auto_literal is enabled - -13/02/2011 -- bufix replace $smarty->triggerError() by exception -- removed obsolete {popup_init..} plugin from demo templates -- bugfix replace $smarty->triggerError() by exception in smarty_internal_resource_extends.php - -===== Smarty 3.0.7 ===== -09/02/2011 -- patched vulnerability when using {$smarty.template} - -01/02/2011 -- removed assert() from config and template parser - -31/01/2011 -- bugfix the lexer/parser did fail on special characters like VT - -16/01/2011 --bugfix of ArrayAccess object handling in internal _count() method --bugfix of Iterator object handling in internal _count() method - -14/01/2011 --bugfix removed memory leak while processing compileAllTemplates - -12/01/2011 -- bugfix in {if} and {while} tag compiler when using assignments as condition and nocache mode - -10/01/2011 -- bugfix when using {$smarty.block.child} and name of {block} was in double quoted string -- bugfix updateParentVariables() was called twice when leaving {include} processing - -- bugfix mb_str_replace in replace and escape modifiers work with utf8 - -31/12/2010 -- bugfix dynamic configuration of $debugging_crtl did not work -- bugfix default value of $config_read_hidden changed to false -- bugfix format of attribute array on compiler plugins -- bugfix getTemplateVars() could return value from wrong scope - -28/12/2010 -- bugfix multiple {append} tags failed to compile. - -22/12/2010 -- update do not clone the Smarty object an internal createTemplate() calls to increase performance - -21/12/2010 -- update html_options to support class and id attrs - -17/12/2010 -- bugfix added missing support of $cache_attrs for registered plugins - -15/12/2010 -- bugfix assignment as condition in {while} did drop an E_NOTICE - -14/12/2010 -- bugfix when passing an array as default parameter at {function} tag - -13/12/2010 -- bugfix {$smarty.template} in child template did not return right content -- bugfix Smarty3 did not search the PHP include_path for template files - -===== Smarty 3.0.6 ===== - -12/12/2010 -- bugfix fixed typo regarding yesterdays change to allow streamWrapper - -11/12/2010 -- bugfix nested block tags in template inheritance child templates did not work correctly -- bugfix {$smarty.current_dir} in child template did not point to dir of child template -- bugfix changed code when writing temporary compiled files to allow stream_wrapper - -06/12/2010 -- bugfix getTemplateVars() should return 'null' instead dropping E_NOTICE on an unassigned variable - -05/12/2010 -- bugfix missing declaration of $smarty in Smarty class -- bugfix empty($foo) in {if} did drop a notice when $foo was not assigned - -01/12/2010 -- improvement of {debug} tag output - -27/11/2010 --change run output filter before cache file is written. (same as in Smarty2) - -24/11/2011 --bugfix on parser at !$foo|modifier --change parser logic when assignments used as condition in {if] and {while} to allow assign to array element - -23/11/2011 --bugfix allow integer as attribute name in plugin calls --change trimm whitespace from error message, removed long list of expected tokens - -22/11/2010 -- bugfix on template inheritance when an {extends} tag was inserted by a prefilter -- added error message for illegal variable file attributes at {extends...} tags - -===== Smarty 3.0.5 ===== - - -19/11/2010 -- bugfix on block plugins with modifiers - -18/11/2010 -- change on handling of unassigned template variable -- default will drop E_NOTICE -- bugfix on Smarty2 wrapper load_filter() did not work - -17/11/2010 -- bugfix on {call} with variable function name -- bugfix on {block} if name did contain '-' -- bugfix in function.fetch.php , referece to undefined $smarty - -16/11/2010 -- bugfix whitespace in front of "<?php" in smarty_internal_compile_private_block_plugin.php -- bugfix {$smarty.now} did compile incorrectly -- bugfix on reset(),end(),next(),prev(),current() within templates -- bugfix on default parameter for {function} - -15/11/2010 -- bugfix when using {$smarty.session} as object -- bugfix scoping problem on $smarty object passed to filters -- bugfix captured content could not be accessed globally -- bugfix Smarty2 wrapper functions could not be call from within plugins - -===== Smarty 3.0.4 ===== - -14/11/2010 -- bugfix isset() did not allow multiple parameter -- improvment of some error messages -- bugfix html_image did use removed property $request_use_auto_globals -- small performace patch in Smarty class - -13/11/2010 -- bugfix overloading problem when $smarty->fetch()/display() have been used in plugins - (introduced with 3.0.2) -- code cleanup - -===== Smarty 3.0.3 ===== - -13/11/2010 -- bugfix on {debug} -- reverted location of loadPlugin() to Smarty class -- fixed comments in plugins -- fixed internal_config (removed unwanted code line) -- improvement remove last linebreak from {function} definition - -===== Smarty 3.0.2 ===== - -12/11/2010 -- reactivated $error_reporting property handling -- fixed typo in compile_continue -- fixed security in {fetch} plugin -- changed back plugin parameters to two. second is template object - with transparent access to Smarty object -- fixed {config_load} scoping form compile time to run time - -===== Smarty 3.0.0 ===== - - - -11/11/2010 -- major update including some API changes - -10/11/2010 -- observe compile_id also for config files - -09/11/2010 --bugfix on complex expressions as start value for {for} tag -request_use_auto_globals -04/11/2010 -- bugfix do not allow access of dynamic and private object members of assigned objects when - security is enabled. - -01/11/2010 -- bugfix related to E_NOTICE change. {if empty($foo)} did fail when $foo contained a string - -28/10/2010 -- bugfix on compiling modifiers within $smarty special vars like {$smarty.post.{$foo|lower}} - -27/10/2010 -- bugfix default parameter values did not work for template functions included with {include} - -25/10/2010 -- bugfix for E_NOTICE change, array elements did not work as modifier parameter - -20/10/2010 -- bugfix for the E_NOTICE change - -19/10/2010 -- change Smarty does no longer mask out E_NOTICE by default during template processing - -13/10/2010 -- bugfix removed ambiguity between ternary and stream variable in template syntax -- bugfix use caching properties of template instead of smarty object when compiling child {block} -- bugfix {*block}...{/block*} did throw an exception in template inheritance -- bugfix on template inheritance using nested eval or string resource in {extends} tags -- bugfix on output buffer handling in isCached() method - -===== RC4 ===== - -01/10/2010 -- added {break} and {continue} tags for flow control of {foreach},{section},{for} and {while} loops -- change of 'string' resource. It's no longer evaluated and compiled files are now stored -- new 'eval' resource which evaluates a template without saving the compiled file -- change in isCached() method to allow multiple calls for the same template - -25/09/2010 -- bugfix on some compiling modifiers - -24/09/2010 -- bugfix merge_compiled_includes flag was not restored correctly in {block} tag - -22/09/2010 -- bugfix on default modifier - -18/09/2010 -- bugfix untility compileAllConfig() did not create sha1 code for compiled template file names if template_dir was defined with no trailing DS -- bugfix on templateExists() for extends resource - -17/09/2010 -- bugfix {$smarty.template} and {$smarty.current_dir} did not compile correctly within {block} tags -- bugfix corrected error message on missing template files in extends resource -- bugfix untility compileAllTemplates() did not create sha1 code for compiled template file names if template_dir was defined with no trailing DS - -16/09/2010 -- bugfix when a doublequoted modifier parameter did contain Smarty tags and ':' - -15/09/2010 -- bugfix resolving conflict between '<%'/'%>' as custom Smarty delimiter and ASP tags -- use ucfirst for resource name on internal resource class names - -12/09/2010 -- bugfix for change of 08/09/2010 (final {block} tags in subtemplates did not produce correct results) - -10/09/2010 -- bugfix for change of 08/09/2010 (final {block} tags in subtemplates did not produce correct results) - -08/09/2010 -- allow multiple template inheritance branches starting in subtemplates - -07/09/2010 -- bugfix {counter} and {cycle} plugin assigned result to smarty variable not in local(template) scope -- bugfix templates containing just {strip} {/strip} tags did produce an error - - -23/08/2010 -- fixed E_STRICT errors for uninitialized variables - -22/08/2010 -- added attribute cache_id to {include} tag - -13/08/2010 -- remove exception_handler property from Smarty class -- added Smarty's own exceptions SmartyException and SmartyCompilerException - -09/08/2010 -- bugfix on modifier with doublequoted strings as parameter containing embedded tags - -06/08/2010 -- bugfix when cascading some modifier like |strip|strip_tags modifier - -05/08/2010 -- added plugin type modifiercompiler to produce compiled modifier code -- changed standard modifier plugins to the compiling versions whenever possible -- bugfix in nocache sections {include} must not cache the subtemplate - -02/08/2010 -- bugfix strip did not work correctly in conjunction with comment lines - -31/07/2010 -- bugfix on nocache attribute at {assign} and {append} - -30/07/2010 -- bugfix passing scope attributes in doublequoted strings did not work at {include} {assign} and {append} - -25/07/2010 -- another bugfix of change from 23/07/2010 when compiling modifier - -24/07/2010 -- bugfix of change from 23/07/2010 when compiling modifier - -23/07/2010 -- changed execution order. A variable filter does now run before modifiers on output of variables -- bugfix use always { and } as delimiter for debug.tpl - - -22/07/2010 -- bugfix in templateExists() method - -20/07/2010 -- fixed handling of { strip } tag with whitespaces - -15/07/2010 -- bufix {$smarty.template} does include now the relative path, not just filename - -===== RC3 ===== - - - - -15/07/2010 -- make the date_format modifier work also on objects of the DateTime class -- implementation of parsetrees in the parser to close security holes and remove unwanted empty line in HTML output - -08/07/2010 -- bugfix on assigning multidimensional arrays within templates -- corrected bugfix for truncate modifier - -07/07/2010 -- bugfix the truncate modifier needs to check if the string is utf-8 encoded or not -- bugfix support of script files relative to trusted_dir - -06/07/2010 -- create exception on recursive {extends} calls -- fixed reported line number at "unexpected closing tag " exception -- bugfix on escape:'mail' modifier -- drop exception if 'item' variable is equal 'from' variable in {foreach} tag - -01/07/2010 -- removed call_user_func_array calls for optimization of compiled code when using registered modifiers and plugins - -25/06/2010 -- bugfix escaping " when block tags are used within doublequoted strings - -24/06/2010 -- replace internal get_time() calls with standard PHP5 microtime(true) calls in Smarty_Internal_Utility -- added $smarty->register->templateClass() and $smarty->unregister->templateClass() methods for supporting static classes with namespace - - -22/06/2010 -- allow spaces between typecast and value in template syntax -- bugfix get correct count of traversables in {foreach} tag - -21/06/2010 -- removed use of PHP shortags SMARTY_PHP_PASSTHRU mode -- improved speed of cache->clear() when a compile_id was specified and use_sub_dirs is true - -20/06/2010 -- replace internal get_time() calls with standard PHP5 microtime(true) calls -- closed security hole when php.ini asp_tags = on - -18/06/2010 -- added __toString method to the Smarty_Variable class - - -14/06/2010 -- make handling of Smarty comments followed by newline BC to Smarty2 - - -===== RC2 ===== - - - -13/06/2010 -- bugfix Smarty3 did not handle hexadecimals like 0x0F as numerical value -- bugifx Smarty3 did not accept numerical constants like .1 or 2. (without a leading or trailing digit) - -11/06/2010 -- bugfix the lexer did fail on larger {literal} ... {/literal} sections - -03/06/2010 -- bugfix on calling template functions like Smarty tags - -01/06/2010 -- bugfix on template functions used with template inheritance -- removed /* vim: set expandtab: */ comments -- bugfix of auto literal problem introduce with fix of 31/05/2010 - -31/05/2010 -- bugfix the parser did not allow some smarty variables with special name like $for, $if, $else and others. - -27/05/2010 -- bugfix on object chaining using variable properties -- make scope of {counter} and {cycle} tags again global as in Smarty2 - -26/05/2010 -- bugfix removed decrepated register_resource call in smarty_internal_template.php - -25/05/2010 -- rewrite of template function handling to improve speed -- bugfix on file dependency when merge_compiled_includes = true - - -16/05/2010 -- bugfix when passing parameter with numeric name like {foo 1='bar' 2='blar'} - -14/05/2010 -- bugfix compile new config files if compile_check and force_compile = false -- added variable static classes names to template syntax - -11/05/2010 -- bugfix make sure that the cache resource is loaded in all conditions when template methods getCached... are called externally -- reverted the change 0f 30/04/2010. With the exception of forward references template functions can be again called by a standard tag. - -10/05/2010 -- bugfix on {foreach} and {for} optimizations of 27/04/2010 - -09/05/2010 -- update of template and config file parser because of minor parser generator bugs - -07/05/2010 -- bugfix on {insert} - -06/05/2010 -- bugfix when merging compiled templates and objects are passed as parameter of the {include} tag - -05/05/2010 -- bugfix on {insert} to cache parameter -- implementation of $smarty->default_modifiers as in Smarty2 -- bugfix on getTemplateVars method - -01/05/2010 -- bugfix on handling of variable method names at object chaning - -30/04/2010 -- bugfix when comparing timestamps in sysplugins/smarty_internal_config.php -- work around of a substr_compare bug in older PHP5 versions -- bugfix on template inheritance for tag names starting with "block" -- bugfix on {function} tag with name attribute in doublequoted strings -- fix to make calling of template functions unambiguously by madatory usage of the {call} tag - -===== RC1 ===== - -27/04/2010 -- change default of $debugging_ctrl to 'NONE' -- optimization of compiled code of {foreach} and {for} loops -- change of compiler for config variables - -27/04/2010 -- bugfix in $smarty->cache->clear() method. (do not cache template object) - - -17/04/2010 -- security fix in {math} plugin - - -12/04/2010 -- bugfix in smarty_internal_templatecompilerbase (overloaded property) -- removed parser restrictions in using true,false and null as ID - -07/04/2010 -- bugfix typo in smarty_internal_templatecompilerbase - -31/03/2010 -- compile locking by touching old compiled files to avoid concurrent compilations - -29/03/2010 -- bugfix allow array definitions as modifier parameter -- bugfix observe compile_check property when loading config files -- added the template object as third filter parameter - -25/03/2010 -- change of utility->compileAllTemplates() log messages -- bugfix on nocache code in {function} tags -- new method utility->compileAllConfig() to compile all config files - -24/03/2010 -- bugfix on register->modifier() error messages - -23/03/2010 -- bugfix on template inheritance when calling multiple child/parent relations -- bugfix on caching mode SMARTY_CACHING_LIFETIME_SAVED and cache_lifetime = 0 - -22/03/2010 -- bugfix make directory separator operating system independend in compileAllTemplates() - -21/03/2010 -- removed unused code in compileAllTemplates() - -19/03/2010 -- bugfix for multiple {/block} tags on same line - -17/03/2010 -- bugfix make $smarty->cache->clear() function independent from caching status - -16/03/2010 -- bugfix on assign attribute at registered template objects -- make handling of modifiers on expression BC to Smarty2 - -15/03/2010 -- bugfix on block plugin calls - -11/03/2010 -- changed parsing of <?php and ?> back to Smarty2 behaviour - -08/03/2010 -- bugfix on uninitialized properties in smarty_internal_template -- bugfix on $smarty->disableSecurity() - -04/03/2010 -- bugfix allow uppercase chars in registered resource names -- bugfix on accessing chained objects of static classes - -01/03/2010 -- bugfix on nocache code in {block} tags if child template was included by {include} - -27/02/2010 -- allow block tags inside double quoted string - -26/02/2010 -- cache modified check implemented -- support of access to a class constant from an object (since PHP 5.3) - -24/02/2010 -- bugfix on expressions in doublequoted string enclosed in backticks -- added security property $static_classes for static class security - -18/02/2010 -- bugfix on parsing Smarty tags inside <?xml ... ?> -- bugfix on truncate modifier - -17/02/2010 -- removed restriction that modifiers did require surrounding parenthesis in some cases -- added {$smarty.block.child} special variable for template inheritance - -16/02/2010 -- bugfix on <?xml ... ?> tags for all php_handling modes -- bugfix on parameter of variablefilter.htmlspecialchars.php plugin - -14/02/2010 -- added missing _plugins property in smarty.class.php -- bugfix $smarty.const... inside doublequoted strings and backticks was compiled into wrong PHP code - -12/02/2010 -- bugfix on nested {block} tags -- changed Smarty special variable $smarty.parent to $smarty.block.parent -- added support of nested {bock} tags - -10/02/2010 -- avoid possible notice on $smarty->cache->clear(...), $smarty->clear_cache(....) -- allow Smarty tags inside <? ... ?> tags in SMARTY_PHP_QUOTE and SMARTY_PHP_PASSTHRU mode -- bugfix at new "for" syntax like {for $x=1 to 10 step 2} - -09/02/2010 -- added $smarty->_tag_stack for tracing block tag hierarchy - -08/02/2010 -- bugfix use template fullpath at §smarty->cache->clear(...), $smarty->clear_cache(....) -- bugfix of cache filename on extended templates when force_compile=true - -07/02/2010 -- bugfix on changes of 05/02/2010 -- preserve line endings type form template source -- API changes (see README file) - -05/02/2010 -- bugfix on modifier and block plugins with same name - -02/02/2010 -- retaining newlines at registered functions and function plugins - -01/25/2010 -- bugfix cache resource was not loaded when caching was globally off but enabled at a template object -- added test that $_SERVER['SCRIPT_NAME'] does exist in Smarty.class.php - -01/22/2010 -- new method $smarty->createData([$parent]) for creating a data object (required for bugfixes below) -- bugfix config_load() method now works also on a data object -- bugfix get_config_vars() method now works also on a data and template objects -- bugfix clear_config() method now works also on a data and template objects - -01/19/2010 -- bugfix on plugins if same plugin was called from a nocache section first and later from a cached section - - -###beta 7### - - -01/17/2010 -- bugfix on $smarty.const... in double quoted strings - -01/16/2010 -- internal change of config file lexer/parser on handling of section names -- bugfix on registered objects (format parameter of register_object was not handled correctly) - -01/14/2010 -- bugfix on backslash within single quoted strings -- bugfix allow absolute filepath for config files -- bugfix on special Smarty variable $smarty.cookies -- revert handling of newline on no output tags like {if...} -- allow special characters in config file section names for Smarty2 BC - -01/13/2010 -- bugfix on {if} tags - -01/12/2010 -- changed back modifier handling in parser. Some restrictions still apply: - if modifiers are used in side {if...} expression or in mathematical expressions - parentheses must be used. -- bugfix the {function..} tag did not accept the name attribute in double quotes -- closed possible security hole at <?php ... ?> tags -- bugfix of config file parser on large config files - - -###beta 6#### - -01/11/2010 -- added \n to the compiled code of the {if},{else},{elseif},{/if} tags to get output of newlines as expected by the template source -- added missing support of insert plugins -- added optional nocache attribute to {block} tags in parent template -- updated <?php...?> handling supporting now heredocs and newdocs. (thanks to Thue Jnaus Kristensen) - -01/09/2010 -- bugfix on nocache {block} tags in parent templates - -01/08/2010 -- bugfix on variable filters. filter/nofilter attributes did not work on output statements - -01/07/2010 -- bugfix on file dependency at template inheritance -- bugfix on nocache code at template inheritance - -01/06/2010 -- fixed typo in smarty_internal_resource_registered -- bugfix for custom delimiter at extends resource and {extends} tag - -01/05/2010 -- bugfix sha1() calculations at extends resource and some general improvments on sha1() handling - - -01/03/2010 -- internal change on building cache files - -01/02/2010 -- update cached_timestamp at the template object after cache file is written to avoid possible side effects -- use internally always SMARTY_CACHING_LIFETIME_* constants - -01/01/2010 -- bugfix for obtaining plugins which must be included (related to change of 12/30/2009) -- bugfix for {php} tag (trow an exception if allow_php_tag = false) - -12/31/2009 -- optimization of generated code for doublequoted strings containing variables -- rewrite of {function} tag handling - - can now be declared in an external subtemplate - - can contain nocache sections (nocache_hash handling) - - can be called in noccache sections (nocache_hash handling) - - new {call..} tag to call template functions with a variable name {call name=$foo} -- fixed nocache_hash handling in merged compiled templates - -12/30/2009 -- bugfix for plugins defined in the script as smarty_function_foo - -12/29/2009 -- use sha1() for filepath encoding -- updates on nocache_hash handling -- internal change on merging some data -- fixed cache filename for custom resources - -12/28/2009 -- update for security fixes -- make modifier plugins always trusted -- fixed bug loading modifiers in child template at template inheritance - -12/27/2009 ---- this is a major update with a couple of internal changes --- -- new config file lexer/parser (thanks to Thue Jnaus Kristensen) -- template lexer/parser fixes for PHP and {literal} handing (thanks to Thue Jnaus Kristensen) -- fix on registered plugins with different type but same name -- rewrite of plugin handling (optimized execution speed) -- closed a security hole regarding PHP code injection into cache files -- fixed bug in clear cache handling -- Renamed a couple of internal classes -- code cleanup for merging compiled templates -- couple of runtime optimizations (still not all done) -- update of getCachedTimestamp() -- fixed bug on modifier plugins at nocache output - -12/19/2009 -- bugfix on comment lines in config files - -12/17/2009 -- bugfix of parent/global variable update at included/merged subtemplates -- encode final template filepath into filename of compiled and cached files -- fixed {strip} handling in auto literals - -12/16/2009 -- update of changelog -- added {include file='foo.tpl' inline} inline option to merge compiled code of subtemplate into the calling template - -12/14/2009 -- fixed sideefect of last modification (objects in array index did not work anymore) - -12/13/2009 -- allow boolean negation ("!") as operator on variables outside {if} tag - -12/12/2009 -- bugfix on single quotes inside {function} tag -- fix short append/prepend attributes in {block} tags - -12/11/2009 -- bugfix on clear_compiled_tpl (avoid possible warning) - -12/10/2009 -- bugfix on {function} tags and template inheritance - -12/05/2009 -- fixed problem when a cached file was fetched several times -- removed unneeded lexer code - -12/04/2009 -- added max attribute to for loop -- added security mode allow_super_globals - -12/03/2009 -- template inheritance: child templates can now call functions defined by the {function} tag in the parent template -- added {for $foo = 1 to 5 step 2} syntax -- bugfix for {$foo.$x.$y.$z} - -12/01/2009 -- fixed parsing of names of special formated tags like if,elseif,while,for,foreach -- removed direct access to constants in templates because of some syntax problems -- removed cache resource plugin for mysql from the distribution -- replaced most hard errors (exceptions) by softerrors(trigger_error) in plugins -- use $template_class property for template class name when compiling {include},{eval} and {extends} tags - -11/30/2009 -- map 'true' to SMARTY_CACHING_LIFETIME_CURRENT for the $smarty->caching parameter -- allow {function} tags within {block} tags - -11/28/2009 -- ignore compile_id at debug template -- added direct access to constants in templates -- some lexer/parser optimizations - -11/27/2009 -- added cache resource MYSQL plugin - -11/26/2009 -- bugfix on nested doublequoted strings -- correct line number on unknown tag error message -- changed {include} compiled code -- fix on checking dynamic varibales with error_unassigned = true - -11/25/2009 -- allow the following writing for boolean: true, TRUE, True, false, FALSE, False -- {strip} tag functionality rewritten - -11/24/2009 -- bugfix for $smarty->config_overwrite = false - -11/23/2009 -- suppress warnings on unlink caused by race conditions -- correct line number on unknown tag error message - -------- beta 5 -11/23/2009 -- fixed configfile parser for text starting with a numeric char -- the default_template_handler_func may now return a filepath to a template source - -11/20/2009 -- bugfix for empty config files -- convert timestamps of registered resources to integer - -11/19/2009 -- compiled templates are no longer touched with the filemtime of template source - -11/18/2009 -- allow integer as attribute name in plugin calls - -------- beta 4 -11/18/2009 -- observe umask settings when setting file permissions -- avoide unneeded cache file creation for subtemplates which did occur in some situations -- make $smarty->_current_file available during compilation for Smarty2 BC - -11/17/2009 -- sanitize compile_id and cache_id (replace illegal chars with _) -- use _dir_perms and _file_perms properties at file creation -- new constant SMARTY_RESOURCE_DATE_FORMAT (default '%b %e, %Y') which is used as default format in modifier date_format -- added {foreach $array as $key=>$value} syntax -- renamed extend tag and resource to extends: {extends file='foo.tol'} , $smarty->display('extends:foo.tpl|bar.tpl); -- bugfix cycle plugin - -11/15/2009 -- lexer/parser optimizations on quoted strings - -11/14/2009 -- bugfix on merging compiled templates when source files got removed or renamed. -- bugfix modifiers on registered object tags -- fixed locaion where outputfilters are running -- fixed config file definitions at EOF -- fix on merging compiled templates with nocache sections in nocache includes -- parser could run into a PHP error on wrong file attribute - -11/12/2009 -- fixed variable filenames in {include_php} and {insert} -- added scope to Smarty variables in the {block} tag compiler -- fix on nocache code in child {block} tags - -11/11/2009 -- fixed {foreachelse}, {forelse}, {sectionelse} compiled code at nocache variables -- removed checking for reserved variables -- changed debugging handling - -11/10/2009 -- fixed preg_qoute on delimiters - -11/09/2009 -- lexer/parser bugfix -- new SMARTY_SPL_AUTOLOAD constant to control the autoloader option -- bugfix for {function} block tags in included templates - -11/08/2009 -- fixed alphanumeric array index -- bugfix on complex double quoted strings - -11/05/2009 -- config_load method can now be called on data and template objects - -11/04/2009 -- added typecasting support for template variables -- bugfix on complex indexed special Smarty variables - -11/03/2009 -- fixed parser error on objects with special smarty vars -- fixed file dependency for {incude} inside {block} tag -- fixed not compiling on non existing compiled templates when compile_check = false -- renamed function names of autoloaded Smarty methods to Smarty_Method_.... -- new security_class property (default is Smarty_Security) - -11/02/2009 -- added neq,lte,gte,mod as aliases to if conditions -- throw exception on illegal Smarty() constructor calls - -10/31/2009 -- change of filenames in sysplugins folder for internal spl_autoload function -- lexer/parser changed for increased compilation speed - -10/27/2009 -- fixed missing quotes in include_php.php - -10/27/2009 -- fixed typo in method.register_resource -- pass {} through as literal - -10/26/2009 -- merge only compiled subtemplates into the compiled code of the main template - -10/24/2009 -- fixed nocache vars at internal block tags -- fixed merging of recursive includes - -10/23/2009 -- fixed nocache var problem - -10/22/2009 -- fix trimwhitespace outputfilter parameter - -10/21/2009 -- added {$foo++}{$foo--} syntax -- buxfix changed PHP "if (..):" to "if (..){" because of possible bad code when concenating PHP tags -- autoload Smarty internal classes -- fixed file dependency for config files -- some code optimizations -- fixed function definitions on some autoloaded methods -- fixed nocache variable inside if condition of {if} tag - -10/20/2009 -- check at compile time for variable filter to improve rendering speed if no filter is used -- fixed bug at combination of {elseif} tag and {...} in double quoted strings of static class parameter - -10/19/2009 -- fixed compiled template merging on variable double quoted strings as name -- fixed bug in caching mode 2 and cache_lifetime -1 -- fixed modifier support on block tags - -10/17/2009 -- remove ?>\n<?php and ?><?php sequences from compiled template - -10/15/2009 -- buxfix on assigning array elements inside templates -- parser bugfix on array access - -10/15/2009 -- allow bit operator '&' inside {if} tag -- implementation of ternary operator - -10/13/2009 -- do not recompile evaluated templates if reused just with other data -- recompile config files when config properties did change -- some lexer/parser otimizations - -10/11/2009 -- allow {block} tags inside included templates -- bugfix for resource plugins in Smarty2 format -- some optimizations of internal.template.php - -10/11/2009 -- fixed bug when template with same name is used with different data objects -- fixed bug with double quoted name attribute at {insert} tag -- reenabled assign_by_ref and append_by_ref methods - -10/07/2009 -- removed block nesting checks for {capture} - -10/05/2009 -- added support of "isinstance" to {if} tag - -10/03/2009 -- internal changes to improve performance -- fix registering of filters for classes - -10/01/2009 -- removed default timezone setting -- reactivated PHP resource for simple PHP templates. Must set allow_php_templates = true to enable -- {PHP} tag can be enabled by allow_php_tag = true - -09/30/2009 -- fixed handling template_exits method for all resource types -- bugfix for other cache resources than file -- the methods assign_by_ref is now wrapped to assign, append_by_ref to append -- allow arrays of variables pass in display, fetch and createTemplate calls - $data = array('foo'=>'bar','foo2'=>'blar'); - $smarty->display('my.tpl',$data); - -09/29/2009 -- changed {php} tag handling -- removed support of Smarty::instance() -- removed support of PHP resource type -- improved execution speed of {foreach} tags -- fixed bug in {section} tag - -09/23/2009 -- improvements and bugfix on {include} tag handling -NOTICE: existing compiled template and cache files must be deleted - -09/19/2009 -- replace internal "eval()" calls by "include" during rendering process -- speed improvment for templates which have included subtemplates - the compiled code of included templates is merged into the compiled code of the parent template -- added logical operator "xor" for {if} tag -- changed parameter ordering for Smarty2 BC - fetch($template, $cache_id = null, $compile_id = null, $parent = null) - display($template, $cache_id = null, $compile_id = null, $parent = null) - createTemplate($template, $cache_id = null, $compile_id = null, $parent = null) -- property resource_char_set is now replaced by constant SMARTY_RESOURCE_CHAR_SET -- fixed handling of classes in registered blocks -- speed improvement of lexer on text sections - -09/01/2009 -- dropped nl2br as plugin -- added '<>' as comparission operator in {if} tags -- cached caching_lifetime property to cache_liftime for backward compatibility with Smarty2. - {include} optional attribute is also now cache_lifetime -- fixed trigger_error method (moved into Smarty class) -- version is now Beta!!! - - -08/30/2009 -- some speed optimizations on loading internal plugins - - -08/29/2009 -- implemented caching of registered Resources -- new property 'auto_literal'. if true(default) '{ ' and ' }' interpreted as literal, not as Smarty delimiter - - -08/28/2009 -- Fix on line breaks inside {if} tags - -08/26/2009 -- implemented registered resources as in Smarty2. NOTE: caching does not work yet -- new property 'force_cache'. if true it forces the creation of a new cache file -- fixed modifiers on arrays -- some speed optimization on loading internal classes - - -08/24/2009 -- fixed typo in lexer definition for '!==' operator -- bugfix - the ouput of plugins was not cached -- added global variable SCRIPT_NAME - -08/21/2009 -- fixed problems whitespace in conjuction with custom delimiters -- Smarty tags can now be used as value anywhere - -08/18/2009 -- definition of template class name moded in internal.templatebase.php -- whitespace parser changes - -08/12/2009 -- fixed parser problems - -08/11/2009 -- fixed parser problems with custom delimiter - -08/10/2009 -- update of mb support in plugins - - -08/09/2009 -- fixed problems with doublequoted strings at name attribute of {block} tag -- bugfix at scope attribute of {append} tag - -08/08/2009 -- removed all internal calls of Smarty::instance() -- fixed code in double quoted strings - -08/05/2009 -- bugfix mb_string support -- bugfix of \n.\t etc in double quoted strings - -07/29/2009 -- added syntax for variable config vars like #$foo# - -07/28/2009 -- fixed parsing of $smarty.session vars containing objects - -07/22/2009 -- fix of "$" handling in double quoted strings - -07/21/2009 -- fix that {$smarty.current_dir} return correct value within {block} tags. - -07/20/2009 -- drop error message on unmatched {block} {/block} pairs - -07/01/2009 -- fixed smarty_function_html_options call in plugin function.html_select_date.php (missing ,) - -06/24/2009 -- fixed smarty_function_html_options call in plugin function.html_select_date.php - -06/22/2009 -- fix on \n and spaces inside smarty tags -- removed request_use_auto_globals propert as it is no longer needed because Smarty 3 will always run under PHP 5 - - -06/18/2009 -- fixed compilation of block plugins when caching enabled -- added $smarty.current_dir which returns the current working directory - -06/14/2009 -- fixed array access on super globals -- allow smarty tags within xml tags - -06/13/2009 -- bugfix at extend resource: create unique files for compiled template and cache for each combination of template files -- update extend resource to handle appen and prepend block attributes -- instantiate classes of plugins instead of calling them static - -06/03/2009 -- fixed repeat at block plugins - -05/25/2009 -- fixed problem with caching of compiler plugins - -05/14/2009 -- fixed directory separator handling - -05/09/2009 -- syntax change for stream variables -- fixed bug when using absolute template filepath and caching - -05/08/2009 -- fixed bug of {nocache} tag in included templates - -05/06/2009 -- allow that plugins_dir folder names can end without directory separator - -05/05/2009 -- fixed E_STRICT incompabilities -- {function} tag bug fix -- security policy definitions have been moved from plugins folder to file Security.class.php in libs folder -- added allow_super_global configuration to security - -04/30/2009 -- functions defined with the {function} tag now always have global scope - -04/29/2009 -- fixed problem with directory setter methods -- allow that cache_dir can end without directory separator - -04/28/2009 -- the {function} tag can no longer overwrite standard smarty tags -- inherit functions defined by the {fuction} tag into subtemplates -- added {while <statement>} sytax to while tag - -04/26/2009 -- added trusted stream checking to security -- internal changes at file dependency check for caching - -04/24/2009 -- changed name of {template} tag to {function} -- added new {template} tag - -04/23/2009 -- fixed access of special smarty variables from included template - -04/22/2009 -- unified template stream syntax with standard Smarty resource syntax $smarty->display('mystream:mytemplate') - -04/21/2009 -- change of new style syntax for forach. Now: {foreach $array as $var} like in PHP - -04/20/2009 -- fixed "$foo.bar ..." variable replacement in double quoted strings -- fixed error in {include} tag with variable file attribute - -04/18/2009 -- added stream resources ($smarty->display('mystream://mytemplate')) -- added stream variables {$mystream:myvar} - -04/14/2009 -- fixed compile_id handling on {include} tags -- fixed append/prepend attributes in {block} tag -- added {if 'expression' is in 'array'} syntax -- use crc32 as hash for compiled config files. - -04/13/2009 -- fixed scope problem with parent variables when appending variables within templates. -- fixed code for {block} without childs (possible sources for notice errors removed) - -04/12/2009 -- added append and prepend attribute to {block} tag - -04/11/2009 -- fixed variables in 'file' attribute of {extend} tag -- fixed problems in modifiers (if mb string functions not present) - -04/10/2009 -- check if mb string functions available otherwise fallback to normal string functions -- added global variable scope SMARTY_GLOBAL_SCOPE -- enable 'variable' filter by default -- fixed {$smarty.block.parent.foo} -- implementation of a 'variable' filter as replacement for default modifier - -04/09/2009 -- fixed execution of filters defined by classes -- compile the always the content of {block} tags to make shure that the filters are running over it -- syntax corrections on variable object property -- syntax corrections on array access in dot syntax - -04/08/2009 -- allow variable object property - -04/07/2009 -- changed variable scopes to SMARTY_LOCAL_SCOPE, SMARTY_PARENT_SCOPE, SMARTY_ROOT_SCOPE to avoid possible conflicts with user constants -- Smarty variable global attribute replaced with scope attribute - -04/06/2009 -- variable scopes LOCAL_SCOPE, PARENT_SCOPE, ROOT_SCOPE -- more getter/setter methods - -04/05/2009 -- replaced new array looping syntax {for $foo in $array} with {foreach $foo in $array} to avoid confusion -- added append array for short form of assign {$foo[]='bar'} and allow assignments to nested arrays {$foo['bla']['blue']='bar'} - -04/04/2009 -- make output of template default handlers cachable and save compiled source -- some fixes on yesterdays update - -04/03/2006 -- added registerDefaultTemplateHandler method and functionallity -- added registerDefaultPluginHandler method and functionallity -- added {append} tag to extend Smarty array variabled - -04/02/2009 -- added setter/getter methods -- added $foo@first and $foo@last properties at {for} tag -- added $set_timezone (true/false) property to setup optionally the default time zone - -03/31/2009 -- bugfix smarty.class and internal.security_handler -- added compile_check configuration -- added setter/getter methods - -03/30/2009 -- added all major setter/getter methods - -03/28/2009 -- {block} tags can be nested now -- md5 hash function replace with crc32 for speed optimization -- file order for exted resource inverted -- clear_compiled_tpl and clear_cache_all will not touch .svn folder any longer - -03/27/2009 -- added extend resource - -03/26/2009 -- fixed parser not to create error on `word` in double quoted strings -- allow PHP array(...) -- implemented $smarty.block.name.parent to access parent block content -- fixed smarty.class - - -03/23/2009 -- fixed {foreachelse} and {forelse} tags - -03/22/2009 -- fixed possible sources for notice errors -- rearrange SVN into distribution and development folders - -03/21/2009 -- fixed exceptions in function plugins -- fixed notice error in Smarty.class.php -- allow chained objects to span multiple lines -- fixed error in modifiers - -03/20/2009 -- moved /plugins folder into /libs folder -- added noprint modifier -- autoappend a directory separator if the xxxxx_dir definition have no trailing one - -03/19/2009 -- allow array definition as modifier parameter -- changed modifier to use multi byte string funktions. - -03/17/2009 -- bugfix - -03/15/2009 -- added {include_php} tag for BC -- removed @ error suppression -- bugfix fetch did always repeat output of first call when calling same template several times -- PHPunit tests extended - -03/13/2009 -- changed block syntax to be Smarty like {block:titel} -> {block name=titel} -- compiling of {block} and {extend} tags rewriten for better performance -- added special Smarty variable block ($smarty.block.foo} returns the parent definition of block foo -- optimization of {block} tag compiled code. -- fixed problem with escaped double quotes in double quoted strings - -03/12/2009 -- added support of template inheritance by {extend } and {block } tags. -- bugfix comments within literals -- added scope attribuie to {include} tag - -03/10/2009 -- couple of bugfixes and improvements -- PHPunit tests extended - -03/09/2009 -- added support for global template vars. {assign_global...} $smarty->assign_global(...) -- added direct_access_security -- PHPunit tests extended -- added missing {if} tag conditions like "is div by" etc. - -03/08/2009 -- splitted up the Compiler class to make it easier to use a coustom compiler -- made default plugins_dir relative to Smarty root and not current working directory -- some changes to make the lexer parser better configurable -- implemented {section} tag for Smarty2 BC - -03/07/2009 -- fixed problem with comment tags -- fixed problem with #xxxx in double quoted string -- new {while} tag implemented -- made lexer and paser class configurable as $smarty property -- Smarty method get_template_vars implemented -- Smarty method get_registered_object implemented -- Smarty method trigger_error implemented -- PHPunit tests extended - -03/06/2009 -- final changes on config variable handling -- parser change - unquoted strings will by be converted into single quoted strings -- PHPunit tests extended -- some code cleanup -- fixed problem on catenate strings with expression -- update of count_words modifier -- bugfix on comment tags - - -03/05/2009 -- bugfix on <?xml...> tag with caching enabled -- changes on exception handling (by Monte) - -03/04/2009 -- added support for config variables -- bugfix on <?xml...> tag - -03/02/2009 -- fixed unqouted strings within modifier parameter -- bugfix parsing of mofifier parameter - -03/01/2009 -- modifier chaining works now as in Smarty2 - -02/28/2009 -- changed handling of unqouted strings - -02/26/2009 -- bugfix -- changed $smarty.capture.foo to be global for Smarty2 BC. - -02/24/2009 -- bugfix {php} {/php} tags for backward compatibility -- bugfix for expressions on arrays -- fixed usage of "null" value -- added $smarty.foreach.foo.first and $smarty.foreach.foo.last - -02/06/2009 -- bugfix for request variables without index for example $smarty.get -- experimental solution for variable functions in static class - -02/05/2009 -- update of popup plugin -- added config variables to template parser (load config functions still missing) -- parser bugfix for empty quoted strings - -02/03/2009 -- allow array of objects as static class variabales. -- use htmlentities at source output at template errors. - -02/02/2009 -- changed search order on modifiers to look at plugins folder first -- parser bug fix for modifier on array elements $foo.bar|modifier -- parser bug fix on single quoted srings -- internal: splitted up compiler plugin files - -02/01/2009 -- allow method chaining on static classes -- special Smarty variables $smarty.... implemented -- added {PHP} {/PHP} tags for backward compatibility - -01/31/2009 -- added {math} plugin for Smarty2 BC -- added template_exists method -- changed Smarty3 method enable_security() to enableSecurity() to follow camelCase standards - -01/30/2009 -- bugfix in single quoted strings -- changed syntax for variable property access from $foo:property to $foo@property because of ambiguous syntax at modifiers - -01/29/2009 -- syntax for array definition changed from (1,2,3) to [1,2,3] to remove ambiguous syntax -- allow {for $foo in [1,2,3]} syntax -- bugfix in double quoted strings -- allow <?xml...?> tags in template even if short_tags are enabled - -01/28/2009 -- fixed '!==' if condition. - -01/28/2009 -- added support of {strip} {/strip} tag. - -01/27/2009 -- bug fix on backticks in double quoted strings at objects - -01/25/2009 -- Smarty2 modfiers added to SVN - -01/25/2009 -- bugfix allow arrays at object properties in Smarty syntax -- the template object is now passed as additional parameter at plugin calls -- clear_compiled_tpl method completed - -01/20/2009 -- access to class constants implemented ( class::CONSTANT ) -- access to static class variables implemented ( class::$variable ) -- call of static class methods implemented ( class::method() ) - -01/16/2009 -- reallow leading _ in variable names {$_var} -- allow array of objects {$array.index->method()} syntax -- finished work on clear_cache and clear_cache_all methods - -01/11/2009 -- added support of {literal} tag -- added support of {ldelim} and {rdelim} tags -- make code compatible to run with E_STRICT error setting - -01/08/2009 -- moved clear_assign and clear_all_assign to internal.templatebase.php -- added assign_by_ref, append and append_by_ref methods - -01/02/2009 -- added load_filter method -- fished work on filter handling -- optimization of plugin loading - -12/30/2008 -- added compiler support of registered object -- added backtick support in doubled quoted strings for backward compatibility -- some minor bug fixes and improvments - -12/23/2008 -- fixed problem of not working "not" operator in if-expressions -- added handling of compiler function plugins -- finished work on (un)register_compiler_function method -- finished work on (un)register_modifier method -- plugin handling from plugins folder changed for modifier plugins - deleted - internal.modifier.php -- added modifier chaining to parser - -12/17/2008 -- finished (un)register_function method -- finished (un)register_block method -- added security checking for PHP functions in PHP templates -- plugin handling from plugins folder rewritten - new - internal.plugin_handler.php - deleted - internal.block.php - deleted - internal.function.php -- removed plugin checking from security handler - -12/16/2008 - -- new start of this change_log file diff --git a/library/Smarty/libs/Autoloader.php b/library/Smarty/libs/Autoloader.php deleted file mode 100644 index 7d0c388a6..000000000 --- a/library/Smarty/libs/Autoloader.php +++ /dev/null @@ -1,124 +0,0 @@ -<?php -/** - * Smarty Autoloader - * - * @package Smarty - */ - -/** - * Smarty Autoloader - * - * @package Smarty - * @author Uwe Tews - * Usage: - * require_once '...path/Autoloader.php'; - * Smarty_Autoloader::register(); - * $smarty = new Smarty(); - * Note: This autoloader is not needed if you use Composer. - * Composer will automatically add the classes of the Smarty package to it common autoloader. - */ -class Smarty_Autoloader -{ - /** - * Filepath to Smarty root - * - * @var string - */ - public static $SMARTY_DIR = ''; - - /** - * Filepath to Smarty internal plugins - * - * @var string - */ - public static $SMARTY_SYSPLUGINS_DIR = ''; - - /** - * Array with Smarty core classes and their filename - * - * @var array - */ - public static $rootClasses = array('smarty' => 'Smarty.class.php', 'smartybc' => 'SmartyBC.class.php',); - - /** - * Registers Smarty_Autoloader backward compatible to older installations. - * - * @param bool $prepend Whether to prepend the autoloader or not. - */ - public static function registerBC($prepend = false) - { - /** - * 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 { - self::register($prepend); - } - } - - /** - * Registers Smarty_Autoloader as an SPL autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not. - */ - public static function register($prepend = false) - { - self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : dirname(__FILE__) . DIRECTORY_SEPARATOR; - self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR : - self::$SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR; - if (version_compare(phpversion(), '5.3.0', '>=')) { - spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend); - } else { - spl_autoload_register(array(__CLASS__, 'autoload')); - } - } - - /** - * Handles auto loading of classes. - * - * @param string $class A class name. - */ - public static function autoload($class) - { - $_class = strtolower($class); - $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php'; - if (strpos($_class, 'smarty_internal_') === 0) { - if (strpos($_class, 'smarty_internal_compile_') === 0) { - if (is_file($file)) { - require $file; - } - return; - } - @include $file; - return; - } - if (preg_match('/^(smarty_(((template_(source|config|cache|compiled|resource_base))|((cached|compiled)?resource)|(variable|security)))|(smarty(bc)?)$)/', - $_class, $match)) { - if (!empty($match[3])) { - @include $file; - return; - } elseif (!empty($match[9]) && isset(self::$rootClasses[$_class])) { - $file = self::$rootClasses[$_class]; - require $file; - return; - } - } - if (0 !== strpos($_class, 'smarty')) { - return; - } - if (is_file($file)) { - require $file; - return; - } - return; - } -} diff --git a/library/Smarty/libs/Smarty.class.php b/library/Smarty/libs/Smarty.class.php deleted file mode 100644 index a029f942e..000000000 --- a/library/Smarty/libs/Smarty.class.php +++ /dev/null @@ -1,1482 +0,0 @@ -<?php -/** - * Project: Smarty: the PHP compiling template engine - * File: Smarty.class.php - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * For questions, help, comments, discussion, etc., please join the - * Smarty mailing list. Send a blank e-mail to - * smarty-discussion-subscribe@googlegroups.com - * - * @link http://www.smarty.net/ - * @copyright 2015 New Digital Group, Inc. - * @copyright 2015 Uwe Tews - * @author Monte Ohrt <monte at ohrt dot com> - * @author Uwe Tews - * @author Rodney Rehm - * @package Smarty - * @version 3.1.29 - */ - -/** - * 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_get_info')); -} -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'); -} - -/** - * Try loading the Smarty_Internal_Data class - * If we fail we must load Smarty's autoloader. - * Otherwise we may have a global autoloader like Composer - */ -if (!class_exists('Smarty_Autoloader', false)) { - if (!class_exists('Smarty_Internal_Data', true)) { - require_once dirname(__FILE__) . '/Autoloader.php'; - Smarty_Autoloader::registerBC(); - } -} - -/** - * Load always needed external class files - */ -if (!class_exists('Smarty_Internal_Data', false)) { - require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_data.php'; -} -require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_extension_handler.php'; -require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_templatebase.php'; -require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_template.php'; -require_once SMARTY_SYSPLUGINS_DIR . 'smarty_resource.php'; -require_once SMARTY_SYSPLUGINS_DIR . 'smarty_variable.php'; -require_once SMARTY_SYSPLUGINS_DIR . 'smarty_template_source.php'; -require_once SMARTY_SYSPLUGINS_DIR . 'smarty_template_resource_base.php'; - -/** - * This is the main Smarty class - * - * @package Smarty - * - * @method int clearAllCache(int $exp_time = null, string $type = null) - * @method int clearCache(string $template_name, string $cache_id = null, string $compile_id = null, int $exp_time = null, string $type = null) - * @method int compileAllTemplates(Smarty $smarty, string $extension = '.tpl', bool $force_compile = false, int $time_limit = 0, int $max_errors = null) - * @method int compileAllConfig(Smarty $smarty, string $extension = '.conf', bool $force_compile = false, int $time_limit = 0, int $max_errors = null) - * - */ -class Smarty extends Smarty_Internal_TemplateBase -{ - /**#@+ - * constant definitions - */ - - /** - * smarty version - */ - const SMARTY_VERSION = '3.1.29'; - - /** - * define variable scopes - */ - const SCOPE_LOCAL = 0; - - const SCOPE_PARENT = 2; - - const SCOPE_TPL_ROOT = 4; - - const SCOPE_ROOT = 8; - - const SCOPE_SMARTY = 16; - - const SCOPE_GLOBAL = 32; - - const SCOPE_BUBBLE_UP = 64; - - /** - * define caching modes - */ - const CACHING_OFF = 0; - - const CACHING_LIFETIME_CURRENT = 1; - - const CACHING_LIFETIME_SAVED = 2; - - /** - * define constant for clearing cache files be saved expiration dates - */ - const CLEAR_EXPIRED = - 1; - - /** - * define compile check modes - */ - const COMPILECHECK_OFF = 0; - - const COMPILECHECK_ON = 1; - - const COMPILECHECK_CACHEMISS = 2; - - /** - * define debug modes - */ - const DEBUG_OFF = 0; - - const DEBUG_ON = 1; - - const DEBUG_INDIVIDUAL = 2; - - /** - * modes for handling of "<?php ... ?>" 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'; - - /** - * Resource caching modes - */ - const RESOURCE_CACHE_OFF = 0; - - const RESOURCE_CACHE_AUTOMATIC = 1; // cache template objects by rules - - const RESOURCE_CACHE_TEMPLATE = 2; // cache all template objects - - const RESOURCE_CACHE_ON = 4; // cache source and compiled resources - - /**#@-*/ - - /** - * assigned global tpl vars - */ - public static $global_tpl_vars = array(); - - /** - * error handler returned by set_error_handler() 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 whitespace - * - * @var boolean - */ - public $auto_literal = true; - - /** - * display error on not assigned variables - * - * @var boolean - */ - public $error_unassigned = false; - - /** - * look up relative file path in include_path - * - * @var boolean - */ - public $use_include_path = false; - - /** - * template directory - * - * @var array - */ - private $template_dir = array('./templates/'); - - /** - * 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 = './templates_c/'; - - /** - * plugins directory - * - * @var array - */ - private $plugins_dir = null; - - /** - * cache directory - * - * @var string - */ - private $cache_dir = './cache/'; - - /** - * config directory - * - * @var array - */ - private $config_dir = array('./configs/'); - - /** - * 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; - - /** - * merge compiled includes - * - * @var boolean - */ - public $merge_compiled_includes = false; - - /** - * force cache file creation - * - * @var boolean - */ - public $force_cache = false; - - /** - * 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; - - /**#@-*/ - /** - * 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. - * <ul> - * <li>NONE => no debugging control allowed</li> - * <li>URL => enable debugging when SMARTY_DEBUG is found in the URL.</li> - * </ul> - * - * @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 string - */ - 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; - - /**#@+ - * 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 use 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; - - /**#@-*/ - - /** - * 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'; - - /** - * config type - * - * @var string - */ - public $default_config_type = 'file'; - - /** - * enable resource caching - * - * @var bool - */ - public $resource_cache_mode = 1; - - /** - * check If-Modified-Since headers - * - * @var boolean - */ - public $cache_modified_check = false; - - /** - * registered plugins - * - * @var array - */ - public $registered_plugins = array(); - - /** - * 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(); - - /** - * registered cache resources - * - * @var array - */ - public $registered_cache_resources = 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; - - /** - * start time for execution time calculation - * - * @var int - */ - public $start_time = 0; - - /** - * required by the compiler for BC - * - * @var string - */ - public $_current_file = null; - - /** - * internal flag to enable parser debugging - * - * @var bool - */ - public $_parserdebug = false; - - /** - * This object type (Smarty = 1, template = 2, data = 4) - * - * @var int - */ - public $_objType = 1; - - /** - * Debug object - * - * @var Smarty_Internal_Debug - */ - public $_debug = null; - - /** - * removed properties - * - * @var string[] - */ - private static $obsoleteProperties = array('resource_caching', 'template_resource_caching', - 'direct_access_security', '_dir_perms', '_file_perms', - 'plugin_search_order', 'inheritance_merge_compiled_includes'); - - /** - * List of private properties which will call getter/setter ona direct access - * - * @var array - */ - private static $accessMap = array('template_dir' => 'TemplateDir', 'config_dir' => 'ConfigDir', - 'plugins_dir' => 'PluginsDir', 'compile_dir' => 'CompileDir', - 'cache_dir' => 'CacheDir',); - - /**#@-*/ - - /** - * Initialize new Smarty object - */ - public function __construct() - { - parent::__construct(); - if (is_callable('mb_internal_encoding')) { - mb_internal_encoding(Smarty::$_CHARSET); - } - $this->start_time = microtime(true); - - if (isset($_SERVER['SCRIPT_NAME'])) { - Smarty::$global_tpl_vars['SCRIPT_NAME'] = new Smarty_Variable($_SERVER['SCRIPT_NAME']); - } - - // 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 = ''; - } - } - - /** - * Check if a template resource exists - * - * @param string $resource_name template name - * - * @return boolean status - */ - public function templateExists($resource_name) - { - // create source object - $source = Smarty_Template_Source::load(null, $this, $resource_name); - return $source->exists; - } - - /** - * Returns a single or all global variables - * - * @param string $varname variable name or null - * - * @return string variable value or or array of variables - */ - public function getGlobal($varname = null) - { - if (isset($varname)) { - if (isset(self::$global_tpl_vars[$varname])) { - return self::$global_tpl_vars[$varname]->value; - } else { - return ''; - } - } else { - $_result = array(); - foreach (self::$global_tpl_vars AS $key => $var) { - $_result[$key] = $var->value; - } - - return $_result; - } - } - - /** - * 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) - { - Smarty_Security::enableSecurity($this, $security_class); - 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 - * @param bool $isConfig true for config_dir - * - * @return \Smarty current Smarty instance for chaining - */ - public function setTemplateDir($template_dir, $isConfig = false) - { - $type = $isConfig ? 'config_dir' : 'template_dir'; - $joined = '_joined_' . $type; - $this->{$type} = (array) $template_dir; - $this->{$joined} = join(' # ', $this->{$type}); - $this->_cache[$type . '_new'] = true; - $this->_cache[$type] = false; - 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 - * @param bool $isConfig true for config_dir - * - * @return Smarty current Smarty instance for chaining - */ - public function addTemplateDir($template_dir, $key = null, $isConfig = false) - { - $type = $isConfig ? 'config_dir' : 'template_dir'; - $joined = '_joined_' . $type; - if (!isset($this->_cache[$type])) { - $this->{$type} = (array) $this->{$type}; - $this->{$joined} = join(' # ', $this->{$type}); - $this->_cache[$type . '_new'] = true; - $this->_cache[$type] = false; - } - $this->{$joined} .= ' # ' . join(' # ', (array) $template_dir); - $this->_addDir($type, $template_dir, $key); - return $this; - } - - /** - * Get template directories - * - * @param mixed $index index of directory to get, null to get all - * @param bool $isConfig true for config_dir - * - * @return array list of template directories, or directory of $index - */ - public function getTemplateDir($index = null, $isConfig = false) - { - $type = $isConfig ? 'config_dir' : 'template_dir'; - if (!isset($this->_cache[$type])) { - $joined = '_joined_' . $type; - $this->{$type} = (array) $this->{$type}; - $this->{$joined} = join(' # ', $this->{$type}); - $this->_cache[$type] = false; - } - if ($this->_cache[$type] == false) { - foreach ($this->{$type} as $k => $v) { - $this->{$type}[$k] = $this->_realpath($v . DS, true); - } - $this->_cache[$type . '_new'] = true; - $this->_cache[$type] = true; - } - if ($index !== null) { - return isset($this->{$type}[$index]) ? $this->{$type}[$index] : null; - } - return $this->{$type}; - } - - /** - * Set config directory - * - * @param $config_dir - * - * @return Smarty current Smarty instance for chaining - */ - public function setConfigDir($config_dir) - { - return $this->setTemplateDir($config_dir, true); - } - - /** - * Add config directory(s) - * - * @param string|array $config_dir directory(s) of config sources - * @param mixed $key key of the array element to assign the config dir to - * - * @return Smarty current Smarty instance for chaining - */ - public function addConfigDir($config_dir, $key = null) - { - return $this->addTemplateDir($config_dir, $key, true); - } - - /** - * Get config directory - * - * @param mixed $index index of directory to get, null to get all - * - * @return array configuration directory - */ - public function getConfigDir($index = null) - { - return $this->getTemplateDir($index, true); - } - - /** - * 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) $plugins_dir; - if (isset($this->_cache['plugins_dir'])) { - unset($this->_cache['plugins_dir']); - } - return $this; - } - - /** - * Adds directory of plugin files - * - * @param $plugins_dir - * - * @return Smarty current Smarty instance for chaining - */ - public function addPluginsDir($plugins_dir) - { - if (!isset($this->plugins_dir)) { - $this->plugins_dir = array(SMARTY_PLUGINS_DIR); - } - $this->plugins_dir = array_merge((array) $this->plugins_dir, (array) $plugins_dir); - if (isset($this->_cache['plugins_dir'])) { - unset($this->_cache['plugins_dir']); - } - return $this; - } - - /** - * Get plugin directories - * - * @return array list of plugin directories - */ - public function getPluginsDir() - { - if (!isset($this->_cache['plugins_dir'])) { - if (!isset($this->plugins_dir)) { - $this->plugins_dir = array(SMARTY_PLUGINS_DIR); - } else { - $plugins_dir = (array) $this->plugins_dir; - $this->plugins_dir = array(); - foreach ($plugins_dir as $v) { - $this->plugins_dir[] = $this->_realpath($v . DS, true); - } - $this->plugins_dir = array_unique($this->plugins_dir); - } - $this->_cache['plugin_files'] = array(); - $this->_cache['plugins_dir'] = true; - } - return $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 = $this->_realpath($compile_dir . DS, true); - if (!isset(Smarty::$_muted_directories[$this->compile_dir])) { - Smarty::$_muted_directories[$this->compile_dir] = null; - } - $this->_cache['compile_dir'] = true; - return $this; - } - - /** - * Get compiled directory - * - * @return string path to compiled templates - */ - public function getCompileDir() - { - if (!isset($this->_cache['compile_dir'])) { - $this->compile_dir = $this->_realpath($this->compile_dir . DS, true); - if (!isset(Smarty::$_muted_directories[$this->compile_dir])) { - Smarty::$_muted_directories[$this->compile_dir] = null; - } - $this->_cache['compile_dir'] = true; - } - 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 = $this->_realpath($cache_dir . DS, true); - if (!isset(Smarty::$_muted_directories[$this->cache_dir])) { - Smarty::$_muted_directories[$this->cache_dir] = null; - } - $this->_cache['cache_dir'] = true; - return $this; - } - - /** - * Get cache directory - * - * @return string path of cache directory - */ - public function getCacheDir() - { - if (!isset($this->_cache['cache_dir'])) { - $this->cache_dir = $this->_realpath($this->cache_dir . DS, true); - if (!isset(Smarty::$_muted_directories[$this->cache_dir])) { - Smarty::$_muted_directories[$this->cache_dir] = null; - } - $this->_cache['cache_dir'] = true; - } - return $this->cache_dir; - } - - /** - * add directories to given property name - * - * @param string $dirName directory property name - * @param string|array $dir directory string or array of strings - * @param mixed $key optional key - */ - private function _addDir($dirName, $dir, $key = null) - { - $rp = $this->_cache[$dirName]; - if (is_array($dir)) { - foreach ($dir as $k => $v) { - $path = $rp ? $this->_realpath($v . DS, true) : $v; - if (is_int($k)) { - // indexes are not merged but appended - $this->{$dirName}[] = $path; - } else { - // string indexes are overridden - $this->{$dirName}[$k] = $path; - } - } - } else { - $path = $rp ? $this->_realpath($dir . DS, true) : $dir; - if ($key !== null) { - // override directory at specified index - $this->{$dirName}[$key] = $path; - } else { - // append new directory - $this->{$dirName}[] = $path; - } - } - } - - /** - * creates a template object - * - * @param string $template the resource handle of the template file - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param object $parent next higher level of Smarty variables - * @param boolean $do_clone flag is Smarty object shall be cloned - * - * @return object template object - */ - public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true) - { - if ($cache_id !== null && (is_object($cache_id) || is_array($cache_id))) { - $parent = $cache_id; - $cache_id = null; - } - if ($parent !== null && is_array($parent)) { - $data = $parent; - $parent = null; - } else { - $data = null; - } - if ($this->caching && - isset($this->_cache['isCached'][$_templateId = $this->_getTemplateId($template, $cache_id, $compile_id)]) - ) { - $tpl = $do_clone ? clone $this->_cache['isCached'][$_templateId] : $this->_cache['isCached'][$_templateId]; - $tpl->parent = $parent; - $tpl->tpl_vars = array(); - $tpl->config_vars = array(); - } else { - /* @var Smarty_Internal_Template $tpl */ - $tpl = new $this->template_class($template, $this, $parent, $cache_id, $compile_id, null, null); - } - if ($do_clone) { - $tpl->smarty = clone $tpl->smarty; - } elseif ($parent === null) { - $tpl->parent = $this; - } - // 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); - } - } - if ($this->debugging || $this->debugging_ctrl == 'URL') { - $tpl->smarty->_debug = new Smarty_Internal_Debug(); - // check URL debugging control - if (!$this->debugging && $this->debugging_ctrl == 'URL') { - $tpl->smarty->_debug->debugUrl($tpl->smarty); - } - } - return $tpl; - } - - /** - * Takes unknown classes and loads plugin files for them - * class name format: Smarty_PluginType_PluginName - * plugin filename format: plugintype.pluginname.php - * - * @param string $plugin_name class plugin name to load - * @param bool $check check if already loaded - * - * @throws SmartyException - * @return string |boolean filepath of loaded file or false - */ - public function loadPlugin($plugin_name, $check = true) - { - return $this->ext->loadPlugin->loadPlugin($this, $plugin_name, $check); - } - - /** - * Get unique template id - * - * @param string $template_name - * @param null|mixed $cache_id - * @param null|mixed $compile_id - * @param null $caching - * - * @return string - */ - public function _getTemplateId($template_name, $cache_id = null, $compile_id = null, $caching = null) - { - $cache_id = $cache_id === null ? $this->cache_id : $cache_id; - $compile_id = $compile_id === null ? $this->compile_id : $compile_id; - $caching = (int) ($caching === null ? $this->caching : $caching); - - if ($this->allow_ambiguous_resources) { - $_templateId = - Smarty_Resource::getUniqueTemplateName($this, $template_name) . "#{$cache_id}#{$compile_id}#{$caching}"; - } else { - $_templateId = $this->_joined_template_dir . "#{$template_name}#{$cache_id}#{$compile_id}#{$caching}"; - } - if (isset($_templateId[150])) { - $_templateId = sha1($_templateId); - } - return $_templateId; - } - - /** - * Normalize path - * - remove /./ and /../ - * - make it absolute if required - * - * @param string $path file path - * @param bool $realpath leave $path relative - * - * @return string - */ - public function _realpath($path, $realpath = null) - { - static $pattern = null; - static $nds = null; - if ($pattern == null) { - $nds = DS == '/' ? '\\' : '/'; - $ds = '\\' . DS; - $pattern = - "#([{$ds}]+[^{$ds}]+[{$ds}]+[.]([{$ds}]+[.])*[.][{$ds}]+([.][{$ds}]+)*)|([{$ds}]+([.][{$ds}]+)+)|[{$ds}]{2,}#"; - } - // normalize DS - if (strpos($path, $nds) !== false) { - $path = str_replace($nds, DS, $path); - } - - if ($realpath === true && (($path[0] !== '/' && DS == '/') || ($path[1] !== ':' && DS != '/'))) { - $path = getcwd() . DS . $path; - } - while ((strpos($path, '.' . DS) !== false) || (strpos($path, DS . DS) !== false)) { - $path = preg_replace($pattern, DS, $path); - } - if ($realpath === false && ($path[0] == '/' || $path[1] == ':')) { - $path = str_ireplace(getcwd(), '.', $path); - } - return $path; - } - - /** - * @param boolean $compile_check - */ - public function setCompileCheck($compile_check) - { - $this->compile_check = $compile_check; - } - - /** - * @param boolean $use_sub_dirs - */ - public function setUseSubDirs($use_sub_dirs) - { - $this->use_sub_dirs = $use_sub_dirs; - } - - /** - * @param int $error_reporting - */ - public function setErrorReporting($error_reporting) - { - $this->error_reporting = $error_reporting; - } - - /** - * @param boolean $escape_html - */ - public function setEscapeHtml($escape_html) - { - $this->escape_html = $escape_html; - } - - /** - * @param boolean $auto_literal - */ - public function setAutoLiteral($auto_literal) - { - $this->auto_literal = $auto_literal; - } - - /** - * @param boolean $force_compile - */ - public function setForceCompile($force_compile) - { - $this->force_compile = $force_compile; - } - - /** - * @param boolean $merge_compiled_includes - */ - public function setMergeCompiledIncludes($merge_compiled_includes) - { - $this->merge_compiled_includes = $merge_compiled_includes; - } - - /** - * @param string $left_delimiter - */ - public function setLeftDelimiter($left_delimiter) - { - $this->left_delimiter = $left_delimiter; - } - - /** - * @param string $right_delimiter - */ - public function setRightDelimiter($right_delimiter) - { - $this->right_delimiter = $right_delimiter; - } - - /** - * @param boolean $debugging - */ - public function setDebugging($debugging) - { - $this->debugging = $debugging; - } - - /** - * @param boolean $config_overwrite - */ - public function setConfigOverwrite($config_overwrite) - { - $this->config_overwrite = $config_overwrite; - } - - /** - * @param boolean $config_booleanize - */ - public function setConfigBooleanize($config_booleanize) - { - $this->config_booleanize = $config_booleanize; - } - - /** - * @param boolean $config_read_hidden - */ - public function setConfigReadHidden($config_read_hidden) - { - $this->config_read_hidden = $config_read_hidden; - } - - /** - * @param boolean $compile_locking - */ - public function setCompileLocking($compile_locking) - { - $this->compile_locking = $compile_locking; - } - - /** - * @param string $default_resource_type - */ - public function setDefaultResourceType($default_resource_type) - { - $this->default_resource_type = $default_resource_type; - } - - /** - * @param string $caching_type - */ - public function setCachingType($caching_type) - { - $this->caching_type = $caching_type; - } - - /** - * Test install - * - * @param null $errors - */ - public function testInstall(&$errors = null) - { - Smarty_Internal_TestInstall::testInstall($this, $errors); - } - - /** - * Class destructor - */ - public function __destruct() - { - $i = 0;// intentionally left blank - } - - /** - * <<magic>> 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) - { - - if (isset(self::$accessMap[$name])) { - $method = 'get' . self::$accessMap[$name]; - return $this->{$method}(); - } elseif (in_array($name, self::$obsoleteProperties)) { - return null; - } else { - trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE); - } - } - - /** - * <<magic>> 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) - { - if (isset(self::$accessMap[$name])) { - $method = 'set' . self::$accessMap[$name]; - $this->{$method}($value); - } elseif (in_array($name, self::$obsoleteProperties)) { - return; - } else { - if (is_object($value) && method_exists($value, $name)) { - $this->$name = $value; - } else { - trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE); - } - } - } - - /** - * Error Handler to mute expected messages - * - * @link http://php.net/set_error_handler - * - * @param integer $errno Error level - * @param $errstr - * @param $errfile - * @param $errline - * @param $errcontext - * - * @return boolean - */ - public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) - { - $_is_muted_directory = false; - - // add the SMARTY_DIR to the list of muted directories - if (!isset(Smarty::$_muted_directories[SMARTY_DIR])) { - $smarty_dir = realpath(SMARTY_DIR); - if ($smarty_dir !== false) { - Smarty::$_muted_directories[SMARTY_DIR] = - array('file' => $smarty_dir, 'length' => strlen($smarty_dir),); - } - } - - // walk the muted directories and test against $errfile - foreach (Smarty::$_muted_directories as $key => &$dir) { - if (!$dir) { - // resolve directory and length for speedy comparisons - $file = realpath($key); - if ($file === false) { - // this directory does not exist, remove and skip it - unset(Smarty::$_muted_directories[$key]); - continue; - } - $dir = array('file' => $file, 'length' => strlen($file),); - } - if (!strncmp($errfile, $dir['file'], $dir['length'])) { - $_is_muted_directory = true; - break; - } - } - - // pass to next error handler if this error did not occur inside SMARTY_DIR - // or the error was within smarty but masked to be ignored - if (!$_is_muted_directory || ($errno && $errno & error_reporting())) { - if (Smarty::$_previous_error_handler) { - return call_user_func(Smarty::$_previous_error_handler, $errno, $errstr, $errfile, $errline, - $errcontext); - } else { - return false; - } - } - } - - /** - * Enable error handler to mute expected messages - * - * @return void - */ - public static function muteExpectedErrors() - { - /* - error muting is done because some people implemented custom error_handlers using - http://php.net/set_error_handler and for some reason did not understand the following paragraph: - - It is important to remember that the standard PHP error handler is completely bypassed for the - error types specified by error_types unless the callback function returns FALSE. - error_reporting() settings will have no effect and your error handler will be called regardless - - however you are still able to read the current value of error_reporting and act appropriately. - Of particular note is that this value will be 0 if the statement that caused the error was - prepended by the @ error-control operator. - - Smarty deliberately uses @filemtime() over file_exists() and filemtime() in some places. Reasons include - - @filemtime() is almost twice as fast as using an additional file_exists() - - between file_exists() and filemtime() a possible race condition is opened, - which does not exist using the simple @filemtime() approach. - */ - $error_handler = array('Smarty', 'mutingErrorHandler'); - $previous = set_error_handler($error_handler); - - // avoid dead loops - if ($previous !== $error_handler) { - Smarty::$_previous_error_handler = $previous; - } - } - - /** - * Disable error handler muting expected messages - * - * @return void - */ - public static function unmuteExpectedErrors() - { - restore_error_handler(); - } -} diff --git a/library/Smarty/libs/SmartyBC.class.php b/library/Smarty/libs/SmartyBC.class.php deleted file mode 100644 index 1dd529c9c..000000000 --- a/library/Smarty/libs/SmartyBC.class.php +++ /dev/null @@ -1,455 +0,0 @@ -<?php -/** - * Project: Smarty: the PHP compiling template engine - * File: SmartyBC.class.php - * SVN: $Id: $ - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * For questions, help, comments, discussion, etc., please join the - * Smarty mailing list. Send a blank e-mail to - * smarty-discussion-subscribe@googlegroups.com - * - * @link http://www.smarty.net/ - * @copyright 2008 New Digital Group, Inc. - * @author Monte Ohrt <monte at ohrt dot com> - * @author Uwe Tews - * @author Rodney Rehm - * @package Smarty - */ -/** - * @ignore - */ -require_once(dirname(__FILE__) . '/Smarty.class.php'); - -/** - * Smarty Backward Compatability Wrapper Class - * - * @package Smarty - */ -class SmartyBC extends Smarty -{ - /** - * Smarty 2 BC - * - * @var string - */ - public $_version = self::SMARTY_VERSION; - - /** - * This is an array of directories where trusted php scripts reside. - * - * @var array - */ - public $trusted_dir = array(); - - /** - * Initialize new SmartyBC object - * - * @param array $options options to set during initialization, e.g. array( 'forceCompile' => false ) - */ - public function __construct(array $options = array()) - { - parent::__construct($options); - } - - /** - * wrapper for assign_by_ref - * - * @param string $tpl_var the template variable name - * @param mixed &$value the referenced value to assign - */ - public function assign_by_ref($tpl_var, &$value) - { - $this->assignByRef($tpl_var, $value); - } - - /** - * wrapper for append_by_ref - * - * @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 - */ - public function append_by_ref($tpl_var, &$value, $merge = false) - { - $this->appendByRef($tpl_var, $value, $merge); - } - - /** - * clear the given assigned template variable. - * - * @param string $tpl_var the template variable to clear - */ - public function clear_assign($tpl_var) - { - $this->clearAssign($tpl_var); - } - - /** - * Registers custom function to be used in templates - * - * @param string $function the name of the template function - * @param string $function_impl the name of the PHP function to register - * @param bool $cacheable - * @param mixed $cache_attrs - */ - public function register_function($function, $function_impl, $cacheable = true, $cache_attrs = null) - { - $this->registerPlugin('function', $function, $function_impl, $cacheable, $cache_attrs); - } - - /** - * Unregisters custom function - * - * @param string $function name of template function - */ - public function unregister_function($function) - { - $this->unregisterPlugin('function', $function); - } - - /** - * Registers object to be used in templates - * - * @param string $object name of template object - * @param object $object_impl the referenced PHP object to register - * @param array $allowed list of allowed methods (empty = all) - * @param boolean $smarty_args smarty argument format, else traditional - * @param array $block_methods list of methods that are block format - * - * @throws SmartyException - * @internal param array $block_functs list of methods that are block format - */ - public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) - { - settype($allowed, 'array'); - settype($smarty_args, 'boolean'); - $this->registerObject($object, $object_impl, $allowed, $smarty_args, $block_methods); - } - - /** - * Unregisters object - * - * @param string $object name of template object - */ - public function unregister_object($object) - { - $this->unregisterObject($object); - } - - /** - * Registers block function to be used in templates - * - * @param string $block name of template block - * @param string $block_impl PHP function to register - * @param bool $cacheable - * @param mixed $cache_attrs - */ - public function register_block($block, $block_impl, $cacheable = true, $cache_attrs = null) - { - $this->registerPlugin('block', $block, $block_impl, $cacheable, $cache_attrs); - } - - /** - * Unregisters block function - * - * @param string $block name of template function - */ - public function unregister_block($block) - { - $this->unregisterPlugin('block', $block); - } - - /** - * Registers compiler function - * - * @param string $function name of template function - * @param string $function_impl name of PHP function to register - * @param bool $cacheable - */ - public function register_compiler_function($function, $function_impl, $cacheable = true) - { - $this->registerPlugin('compiler', $function, $function_impl, $cacheable); - } - - /** - * Unregisters compiler function - * - * @param string $function name of template function - */ - public function unregister_compiler_function($function) - { - $this->unregisterPlugin('compiler', $function); - } - - /** - * Registers modifier to be used in templates - * - * @param string $modifier name of template modifier - * @param string $modifier_impl name of PHP function to register - */ - public function register_modifier($modifier, $modifier_impl) - { - $this->registerPlugin('modifier', $modifier, $modifier_impl); - } - - /** - * Unregisters modifier - * - * @param string $modifier name of template modifier - */ - public function unregister_modifier($modifier) - { - $this->unregisterPlugin('modifier', $modifier); - } - - /** - * Registers a resource to fetch a template - * - * @param string $type name of resource - * @param array $functions array of functions to handle resource - */ - public function register_resource($type, $functions) - { - $this->registerResource($type, $functions); - } - - /** - * Unregisters a resource - * - * @param string $type name of resource - */ - public function unregister_resource($type) - { - $this->unregisterResource($type); - } - - /** - * Registers a prefilter function to apply - * to a template before compiling - * - * @param callable $function - */ - public function register_prefilter($function) - { - $this->registerFilter('pre', $function); - } - - /** - * Unregisters a prefilter function - * - * @param callable $function - */ - public function unregister_prefilter($function) - { - $this->unregisterFilter('pre', $function); - } - - /** - * Registers a postfilter function to apply - * to a compiled template after compilation - * - * @param callable $function - */ - public function register_postfilter($function) - { - $this->registerFilter('post', $function); - } - - /** - * Unregisters a postfilter function - * - * @param callable $function - */ - public function unregister_postfilter($function) - { - $this->unregisterFilter('post', $function); - } - - /** - * Registers an output filter function to apply - * to a template output - * - * @param callable $function - */ - public function register_outputfilter($function) - { - $this->registerFilter('output', $function); - } - - /** - * Unregisters an outputfilter function - * - * @param callable $function - */ - public function unregister_outputfilter($function) - { - $this->unregisterFilter('output', $function); - } - - /** - * load a filter of specified type and name - * - * @param string $type filter type - * @param string $name filter name - */ - public function load_filter($type, $name) - { - $this->loadFilter($type, $name); - } - - /** - * clear cached content for the given template and cache id - * - * @param string $tpl_file name of template file - * @param string $cache_id name of cache_id - * @param string $compile_id name of compile_id - * @param string $exp_time expiration time - * - * @return boolean - */ - public function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null) - { - return $this->clearCache($tpl_file, $cache_id, $compile_id, $exp_time); - } - - /** - * clear the entire contents of cache (all templates) - * - * @param string $exp_time expire time - * - * @return boolean - */ - public function clear_all_cache($exp_time = null) - { - return $this->clearCache(null, null, null, $exp_time); - } - - /** - * test to see if valid cache exists for this template - * - * @param string $tpl_file name of template file - * @param string $cache_id - * @param string $compile_id - * - * @return boolean - */ - public function is_cached($tpl_file, $cache_id = null, $compile_id = null) - { - return $this->isCached($tpl_file, $cache_id, $compile_id); - } - - /** - * clear all the assigned template variables. - */ - public function clear_all_assign() - { - $this->clearAllAssign(); - } - - /** - * clears compiled version of specified template resource, - * or all compiled template files if one is not specified. - * This function is for advanced use only, not normally needed. - * - * @param string $tpl_file - * @param string $compile_id - * @param string $exp_time - * - * @return boolean results of {@link smarty_core_rm_auto()} - */ - public function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null) - { - return $this->clearCompiledTemplate($tpl_file, $compile_id, $exp_time); - } - - /** - * Checks whether requested template exists. - * - * @param string $tpl_file - * - * @return boolean - */ - public function template_exists($tpl_file) - { - return $this->templateExists($tpl_file); - } - - /** - * Returns an array containing template variables - * - * @param string $name - * - * @return array - */ - public function get_template_vars($name = null) - { - return $this->getTemplateVars($name); - } - - /** - * Returns an array containing config variables - * - * @param string $name - * - * @return array - */ - public function get_config_vars($name = null) - { - return $this->getConfigVars($name); - } - - /** - * load configuration values - * - * @param string $file - * @param string $section - * @param string $scope - */ - public function config_load($file, $section = null, $scope = 'global') - { - $this->ConfigLoad($file, $section, $scope); - } - - /** - * return a reference to a registered object - * - * @param string $name - * - * @return object - */ - public function get_registered_object($name) - { - return $this->getRegisteredObject($name); - } - - /** - * clear configuration values - * - * @param string $var - */ - public function clear_config($var = null) - { - $this->clearConfig($var); - } - - /** - * trigger Smarty error - * - * @param string $error_msg - * @param integer $error_type - */ - public function trigger_error($error_msg, $error_type = E_USER_WARNING) - { - trigger_error("Smarty error: $error_msg", $error_type); - } -} diff --git a/library/Smarty/libs/debug.tpl b/library/Smarty/libs/debug.tpl deleted file mode 100644 index 5526cbca8..000000000 --- a/library/Smarty/libs/debug.tpl +++ /dev/null @@ -1,160 +0,0 @@ -{capture name='_smarty_debug' assign=debug_output} - <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> - <head> - <title>Smarty Debug Console</title> - <style type="text/css"> - {literal} - body, h1, h2, h3, td, th, p { - font-family: sans-serif; - font-weight: normal; - font-size: 0.9em; - margin: 1px; - padding: 0; - } - - h1 { - margin: 0; - text-align: left; - padding: 2px; - background-color: #f0c040; - color: black; - font-weight: bold; - font-size: 1.2em; - } - - h2 { - background-color: #9B410E; - color: white; - text-align: left; - font-weight: bold; - padding: 2px; - border-top: 1px solid black; - } - h3 { - text-align: left; - font-weight: bold; - color: black; - font-size: 0.7em; - padding: 2px; - } - - body { - background: black; - } - - p, table, div { - background: #f0ead8; - } - - p { - margin: 0; - font-style: italic; - text-align: center; - } - - table { - width: 100%; - } - - th, td { - font-family: monospace; - vertical-align: top; - text-align: left; - } - - td { - color: green; - } - - .odd { - background-color: #eeeeee; - } - - .even { - background-color: #fafafa; - } - - .exectime { - font-size: 0.8em; - font-style: italic; - } - - #bold div { - color: black; - font-weight: bold; - } - #blue h3 { - color: blue; - } - #normal div { - color: black; - font-weight: normal; - } - #table_assigned_vars th { - color: blue; - font-weight: bold; - } - - #table_config_vars th { - color: maroon; - } - - {/literal} - </style> - </head> - <body> - - <h1>Smarty {Smarty::SMARTY_VERSION} Debug Console - - {if isset($template_name)}{$template_name|debug_print_var nofilter} {/if}{if !empty($template_data)}Total Time {$execution_time|string_format:"%.5f"}{/if}</h1> - - {if !empty($template_data)} - <h2>included templates & config files (load time in seconds)</h2> - <div> - {foreach $template_data as $template} - <font color=brown>{$template.name}</font> - <br> <span class="exectime"> - (compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"}) - </span> - <br> - {/foreach} - </div> - {/if} - - <h2>assigned template variables</h2> - - <table id="table_assigned_vars"> - {foreach $assigned_vars as $vars} - <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}"> - <td><h3><font color=blue>${$vars@key}</font></h3> - {if isset($vars['nocache'])}<b>Nocache</b></br>{/if} - {if isset($vars['scope'])}<b>Origin:</b> {$vars['scope']|debug_print_var nofilter}{/if} - </td> - <td><h3>Value</h3>{$vars['value']|debug_print_var:10:80 nofilter}</td> - <td>{if isset($vars['attributes'])}<h3>Attributes</h3>{$vars['attributes']|debug_print_var nofilter} {/if}</td> - {/foreach} - </table> - - <h2>assigned config file variables</h2> - - <table id="table_config_vars"> - {foreach $config_vars as $vars} - <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}"> - <td><h3><font color=blue>#{$vars@key}#</font></h3> - {if isset($vars['scope'])}<b>Origin:</b> {$vars['scope']|debug_print_var nofilter}{/if} - </td> - <td>{$vars['value']|debug_print_var:10:80 nofilter}</td> - </tr> - {/foreach} - - </table> - </body> - </html> -{/capture} -<script type="text/javascript"> - {$id = '__Smarty__'} - {if $display_mode}{$id = "$offset$template_name"|md5}{/if} - _smarty_console = window.open("", "console{$id}", "width=1024,height=600,left={$offset},top={$offset},resizable,scrollbars=yes"); - _smarty_console.document.write("{$debug_output|escape:'javascript' nofilter}"); - _smarty_console.document.close(); -</script> diff --git a/library/Smarty/libs/plugins/block.textformat.php b/library/Smarty/libs/plugins/block.textformat.php deleted file mode 100644 index abf544939..000000000 --- a/library/Smarty/libs/plugins/block.textformat.php +++ /dev/null @@ -1,110 +0,0 @@ -<?php -/** - * Smarty plugin to format text blocks - * - * @package Smarty - * @subpackage PluginsBlock - */ - -/** - * Smarty {textformat}{/textformat} block plugin - * Type: block function<br> - * Name: textformat<br> - * Purpose: format text a certain way with preset styles - * or custom wrap/indent settings<br> - * Params: - * <pre> - * - style - string (email) - * - indent - integer (0) - * - wrap - integer (80) - * - wrap_char - string ("\n") - * - indent_char - string (" ") - * - wrap_boundary - boolean (true) - * </pre> - * - * @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 <monte at ohrt dot com> - */ -function smarty_block_textformat($params, $content, $template, &$repeat) -{ - if (is_null($content)) { - return; - } - - $style = null; - $indent = 0; - $indent_first = 0; - $indent_char = ' '; - $wrap = 80; - $wrap_char = "\n"; - $wrap_cut = false; - $assign = null; - - foreach ($params as $_key => $_val) { - switch ($_key) { - case 'style': - case 'indent_char': - case 'wrap_char': - 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'"); - } - } - - if ($style == 'email') { - $wrap = 72; - } - // split into paragraphs - $_paragraphs = preg_split('![\r\n]{2}!', $content); - - 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); - // indent first line - if ($indent_first > 0) { - $_paragraph = str_repeat($indent_char, $indent_first) . $_paragraph; - } - // wordwrap sentences - if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'); - $_paragraph = smarty_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); - } else { - $_paragraph = wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); - } - // indent lines - if ($indent > 0) { - $_paragraph = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraph); - } - } - $_output = implode($wrap_char . $wrap_char, $_paragraphs); - - if ($assign) { - $template->assign($assign, $_output); - } else { - return $_output; - } -} diff --git a/library/Smarty/libs/plugins/function.counter.php b/library/Smarty/libs/plugins/function.counter.php deleted file mode 100644 index 4da85a14e..000000000 --- a/library/Smarty/libs/plugins/function.counter.php +++ /dev/null @@ -1,78 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {counter} function plugin - * Type: function<br> - * Name: counter<br> - * Purpose: print out a counter value - * - * @author Monte Ohrt <monte at ohrt dot com> - * @link http://www.smarty.net/manual/en/language.function.counter.php {counter} - * (Smarty online manual) - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @return string|null - */ -function smarty_function_counter($params, $template) -{ - static $counters = array(); - - $name = (isset($params['name'])) ? $params['name'] : 'default'; - if (!isset($counters[$name])) { - $counters[$name] = array( - 'start' => 1, - 'skip' => 1, - 'direction' => 'up', - 'count' => 1 - ); - } - $counter =& $counters[$name]; - - if (isset($params['start'])) { - $counter['start'] = $counter['count'] = (int) $params['start']; - } - - if (!empty($params['assign'])) { - $counter['assign'] = $params['assign']; - } - - if (isset($counter['assign'])) { - $template->assign($counter['assign'], $counter['count']); - } - - if (isset($params['print'])) { - $print = (bool) $params['print']; - } else { - $print = empty($counter['assign']); - } - - if ($print) { - $retval = $counter['count']; - } else { - $retval = null; - } - - if (isset($params['skip'])) { - $counter['skip'] = $params['skip']; - } - - if (isset($params['direction'])) { - $counter['direction'] = $params['direction']; - } - - if ($counter['direction'] == "down") { - $counter['count'] -= $counter['skip']; - } else { - $counter['count'] += $counter['skip']; - } - - return $retval; -} diff --git a/library/Smarty/libs/plugins/function.cycle.php b/library/Smarty/libs/plugins/function.cycle.php deleted file mode 100644 index 8dc5cd9d5..000000000 --- a/library/Smarty/libs/plugins/function.cycle.php +++ /dev/null @@ -1,107 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {cycle} function plugin - * Type: function<br> - * Name: cycle<br> - * Date: May 3, 2002<br> - * Purpose: cycle through given values<br> - * Params: - * <pre> - * - 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. - * </pre> - * Examples:<br> - * <pre> - * {cycle values="#eeeeee,#d0d0d0d"} - * {cycle name=row values="one,two,three" reset=true} - * {cycle name=row} - * </pre> - * - * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle} - * (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * @author credit to Mark Priatel <mpriatel@rogers.com> - * @author credit to Gerard <gerard@interfold.com> - * @author credit to Jason Sweat <jsweat_php@yahoo.com> - * @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/library/Smarty/libs/plugins/function.fetch.php b/library/Smarty/libs/plugins/function.fetch.php deleted file mode 100644 index 3506d4a8d..000000000 --- a/library/Smarty/libs/plugins/function.fetch.php +++ /dev/null @@ -1,221 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {fetch} plugin - * Type: function<br> - * Name: fetch<br> - * 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 <monte at ohrt dot com> - * - * @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/library/Smarty/libs/plugins/function.html_checkboxes.php b/library/Smarty/libs/plugins/function.html_checkboxes.php deleted file mode 100644 index d78680368..000000000 --- a/library/Smarty/libs/plugins/function.html_checkboxes.php +++ /dev/null @@ -1,237 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {html_checkboxes} function plugin - * File: function.html_checkboxes.php<br> - * Type: function<br> - * Name: html_checkboxes<br> - * Date: 24.Feb.2003<br> - * Purpose: Prints out a list of checkbox input types<br> - * Examples: - * <pre> - * {html_checkboxes values=$ids output=$names} - * {html_checkboxes values=$ids name='box' separator='<br>' output=$names} - * {html_checkboxes values=$ids checked=$checked separator='<br>' output=$names} - * </pre> - * Params: - * <pre> - * - name (optional) - string default "checkbox" - * - values (required) - array - * - options (optional) - associative array - * - checked (optional) - array default not set - * - separator (optional) - ie <br> 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 - * </pre> - * - * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} - * (Smarty online manual) - * @author Christopher Kvarme <christopher.kvarme@flashjab.com> - * @author credits to Monte Ohrt <monte at ohrt dot com> - * @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; - - 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! - - 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 .= '<label for="' . $_id . '">'; - } else { - $_output .= '<label>'; - } - } - - $name = smarty_function_escape_special_chars($name); - $value = smarty_function_escape_special_chars($value); - if ($escape) { - $output = smarty_function_escape_special_chars($output); - } - - $_output .= '<input type="checkbox" name="' . $name . '[]" value="' . $value . '"'; - - if ($labels && $label_ids) { - $_output .= ' id="' . $_id . '"'; - } - - if (is_array($selected)) { - if (isset($selected[$value])) { - $_output .= ' checked="checked"'; - } - } elseif ($value === $selected) { - $_output .= ' checked="checked"'; - } - - $_output .= $extra . ' />' . $output; - if ($labels) { - $_output .= '</label>'; - } - - $_output .= $separator; - - return $_output; -} diff --git a/library/Smarty/libs/plugins/function.html_image.php b/library/Smarty/libs/plugins/function.html_image.php deleted file mode 100644 index 5037e8bd1..000000000 --- a/library/Smarty/libs/plugins/function.html_image.php +++ /dev/null @@ -1,163 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {html_image} function plugin - * Type: function<br> - * Name: html_image<br> - * Date: Feb 24, 2003<br> - * Purpose: format HTML tags for the image<br> - * Examples: {html_image file="/images/masthead.gif"}<br> - * Output: <img src="/images/masthead.gif" width=400 height=23><br> - * Params: - * <pre> - * - 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) - * </pre> - * - * @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image} - * (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * @author credits to Duda <duda@big.hu> - * @version 1.0 - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @throws SmartyException - * @return string - * @uses smarty_function_escape_special_chars() - */ -function smarty_function_html_image($params, $template) -{ - require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); - - $alt = ''; - $file = ''; - $height = ''; - $width = ''; - $extra = ''; - $prefix = ''; - $suffix = ''; - $path_prefix = ''; - $basedir = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : ''; - foreach ($params as $_key => $_val) { - switch ($_key) { - case 'file': - case 'height': - case 'width': - case 'dpi': - case 'path_prefix': - 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); - } - break; - - case 'link': - case 'href': - $prefix = '<a href="' . $_val . '">'; - $suffix = '</a>'; - 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); - } - break; - } - } - - if (empty($file)) { - trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE); - - return; - } - - 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); - } - - $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($_image_path)) { - return; - } - } - } - - 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); - - return; - } 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); - - 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')) { - // 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']; - $width = round($width * $_resize); - $height = round($height * $_resize); - } - - return $prefix . '<img src="' . $path_prefix . $file . '" alt="' . $alt . '" width="' . $width . '" height="' . $height . '"' . $extra . ' />' . $suffix; -} diff --git a/library/Smarty/libs/plugins/function.html_options.php b/library/Smarty/libs/plugins/function.html_options.php deleted file mode 100644 index 7ec3e065c..000000000 --- a/library/Smarty/libs/plugins/function.html_options.php +++ /dev/null @@ -1,196 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {html_options} function plugin - * Type: function<br> - * Name: html_options<br> - * Purpose: Prints the list of <option> tags generated from - * the passed parameters<br> - * Params: - * <pre> - * - 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 - * </pre> - * - * @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image} - * (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * @author Ralf Strehle (minor optimization) <ralf dot strehle at yahoo dot de> - * - * @param array $params parameters - * - * @return string - * @uses smarty_function_escape_special_chars() - */ -function smarty_function_html_options($params) -{ - 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; - - 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! - - 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 = '<select name="' . $name . '"' . $_html_class . $_html_id . $extra . '>' . "\n" . $_html_result . '</select>' . "\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 = '<option value="' . $_key . '"'; - if (is_array($selected)) { - if (isset($selected[$_key])) { - $_html_result .= ' selected="selected"'; - } - } elseif ($_key === $selected) { - $_html_result .= ' selected="selected"'; - } - $_html_class = !empty($class) ? ' class="' . $class . ' option"' : ''; - $_html_id = !empty($id) ? ' id="' . $id . '-' . $idx . '"' : ''; - if (is_object($value)) { - if (method_exists($value, "__toString")) { - $value = smarty_function_escape_special_chars((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 = smarty_function_escape_special_chars((string) $value); - } - $_html_result .= $_html_class . $_html_id . '>' . $value . '</option>' . "\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 = '<optgroup label="' . smarty_function_escape_special_chars($key) . '">' . "\n"; - foreach ($values as $key => $value) { - $optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, $idx); - } - $optgroup_html .= "</optgroup>\n"; - - return $optgroup_html; -} diff --git a/library/Smarty/libs/plugins/function.html_radios.php b/library/Smarty/libs/plugins/function.html_radios.php deleted file mode 100644 index f121d5eae..000000000 --- a/library/Smarty/libs/plugins/function.html_radios.php +++ /dev/null @@ -1,221 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {html_radios} function plugin - * File: function.html_radios.php<br> - * Type: function<br> - * Name: html_radios<br> - * Date: 24.Feb.2003<br> - * Purpose: Prints out a list of radio input types<br> - * Params: - * <pre> - * - name (optional) - string default "radio" - * - values (required) - array - * - options (required) - associative array - * - checked (optional) - array default not set - * - separator (optional) - ie <br> 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 - * </pre> - * Examples: - * <pre> - * {html_radios values=$ids output=$names} - * {html_radios values=$ids name='box' separator='<br>' output=$names} - * {html_radios values=$ids checked=$checked separator='<br>' output=$names} - * </pre> - * - * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios} - * (Smarty online manual) - * @author Christopher Kvarme <christopher.kvarme@flashjab.com> - * @author credits to Monte Ohrt <monte at ohrt dot com> - * @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; - - 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! - - 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 .= '<label for="' . $_id . '">'; - } else { - $_output .= '<label>'; - } - } - - $name = smarty_function_escape_special_chars($name); - $value = smarty_function_escape_special_chars($value); - if ($escape) { - $output = smarty_function_escape_special_chars($output); - } - - $_output .= '<input type="radio" name="' . $name . '" value="' . $value . '"'; - - if ($labels && $label_ids) { - $_output .= ' id="' . $_id . '"'; - } - - if ($value === $selected) { - $_output .= ' checked="checked"'; - } - - $_output .= $extra . ' />' . $output; - if ($labels) { - $_output .= '</label>'; - } - - $_output .= $separator; - - return $_output; -} diff --git a/library/Smarty/libs/plugins/function.html_select_date.php b/library/Smarty/libs/plugins/function.html_select_date.php deleted file mode 100644 index d66256651..000000000 --- a/library/Smarty/libs/plugins/function.html_select_date.php +++ /dev/null @@ -1,387 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @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_date} plugin - * Type: function<br> - * Name: html_select_date<br> - * Purpose: Prints the dropdowns for date selection. - * ChangeLog: - * <pre> - * - 1.0 initial release - * - 1.1 added support for +/- N syntax for begin - * and end year values. (Monte) - * - 1.2 added support for yyyy-mm-dd syntax for - * time value. (Jan Rosier) - * - 1.3 added support for choosing format for - * month values (Gary Loescher) - * - 1.3.1 added support for choosing format for - * day values (Marcus Bointon) - * - 1.3.2 support negative timestamps, force year - * 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, - * added attributes month_names, *_id - * </pre> - * - * @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 <monte at ohrt dot com> - * @author Rodney Rehm - * - * @param array $params parameters - * - * @return string - */ -function smarty_function_html_select_date($params) -{ - // generate timestamps used for month names only - static $_month_timestamps = null; - static $_current_year = null; - if ($_month_timestamps === null) { - $_current_year = date('Y'); - $_month_timestamps = array(); - for ($i = 1; $i <= 12; $i ++) { - $_month_timestamps[$i] = mktime(0, 0, 0, $i, 1, 2000); - } - } - - /* Default values. */ - $prefix = "Date_"; - $start_year = null; - $end_year = null; - $display_days = true; - $display_months = true; - $display_years = true; - $month_format = "%B"; - /* Write months as numbers by default GL */ - $month_value_format = "%m"; - $day_format = "%02d"; - /* Write day values using this format MB */ - $day_value_format = "%d"; - $year_as_text = false; - /* Display years in reverse order? Ie. 2000,1999,.... */ - $reverse_years = false; - /* Should the select boxes be part of an array when returned from PHP? - e.g. setting it to "birthday", would create "birthday[Day]", - "birthday[Month]" & "birthday[Year]". Can be combined with prefix */ - $field_array = null; - /* <select size>'s of the different <select> tags. - If not set, uses default dropdown. */ - $day_size = null; - $month_size = null; - $year_size = null; - /* Unparsed attributes common to *ALL* the <select>/<input> tags. - An example might be in the template: all_extra ='class ="foo"'. */ - $all_extra = null; - /* Separate attributes for the tags. */ - $day_extra = null; - $month_extra = null; - $year_extra = null; - /* Order in which to display the fields. - "D" -> day, "M" -> month, "Y" -> year. */ - $field_order = 'MDY'; - /* String printed between the different fields. */ - $field_separator = "\n"; - $option_separator = "\n"; - $time = null; - // $all_empty = null; - // $day_empty = null; - // $month_empty = null; - // $year_empty = null; - $extra_attrs = ''; - $all_id = null; - $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); - } - break; - - case 'month_names': - 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); - } - break; - - case 'prefix': - case 'field_array': - case 'start_year': - case 'end_year': - case 'day_format': - case 'day_value_format': - case 'month_format': - case 'month_value_format': - case 'day_size': - case 'month_size': - case 'year_size': - case 'all_extra': - case 'day_extra': - case 'month_extra': - case 'year_extra': - case 'field_order': - case 'field_separator': - case 'option_separator': - case 'all_empty': - case 'month_empty': - case 'day_empty': - case 'year_empty': - case 'all_id': - case 'month_id': - case 'day_id': - case 'year_id': - $$_key = (string) $_value; - break; - - case 'display_days': - case 'display_months': - case 'display_years': - case 'year_as_text': - 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); - } - 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'])) { - // $_REQUEST[$field_array] given - 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); - } - } elseif (isset($params['time'][$field_array][$prefix . 'Year'])) { - // $_REQUEST given - 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); - } - } else { - // no date found, use NOW - list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d')); - } - } elseif ($time === null) { - if (array_key_exists('time', $params)) { - $_year = $_month = $_day = $time = null; - } else { - list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d')); - } - } else { - list($_year, $_month, $_day) = $time = 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) { - $key .= '_year'; - $t = $$key; - if ($t === null) { - $$key = (int) $_current_year; - } 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 <select> or <input> - if ($display_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 = '<input type="text" name="' . $_name . '" value="' . $_year . '" size="4" maxlength="4"' . $_extra . $extra_attrs . ' />'; - } else { - $_html_years = '<select name="' . $_name . '"'; - if ($year_id !== null || $all_id !== null) { - $_html_years .= ' id="' . smarty_function_escape_special_chars( - $year_id !== null ? ($year_id ? $year_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; - } - if ($year_size) { - $_html_years .= ' size="' . $year_size . '"'; - } - $_html_years .= $_extra . $extra_attrs . '>' . $option_separator; - - if (isset($year_empty) || isset($all_empty)) { - $_html_years .= '<option value="">' . (isset($year_empty) ? $year_empty : $all_empty) . '</option>' . $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 .= '<option value="' . $i . '"' - . ($_year == $i ? ' selected="selected"' : '') - . '>' . $i . '</option>' . $option_separator; - } - - $_html_years .= '</select>'; - } - } - - // generate month <select> or <input> - if ($display_months) { - $_extra = ''; - $_name = $field_array ? ($field_array . '[' . $prefix . 'Month]') : ($prefix . 'Month'); - if ($all_extra) { - $_extra .= ' ' . $all_extra; - } - if ($month_extra) { - $_extra .= ' ' . $month_extra; - } - - $_html_months = '<select name="' . $_name . '"'; - if ($month_id !== null || $all_id !== null) { - $_html_months .= ' id="' . smarty_function_escape_special_chars( - $month_id !== null ? ($month_id ? $month_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; - } - if ($month_size) { - $_html_months .= ' size="' . $month_size . '"'; - } - $_html_months .= $_extra . $extra_attrs . '>' . $option_separator; - - if (isset($month_empty) || isset($all_empty)) { - $_html_months .= '<option value="">' . (isset($month_empty) ? $month_empty : $all_empty) . '</option>' . $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 .= '<option value="' . $_value . '"' - . ($_val == $_month ? ' selected="selected"' : '') - . '>' . $_text . '</option>' . $option_separator; - } - - $_html_months .= '</select>'; - } - - // generate day <select> or <input> - if ($display_days) { - $_extra = ''; - $_name = $field_array ? ($field_array . '[' . $prefix . 'Day]') : ($prefix . 'Day'); - if ($all_extra) { - $_extra .= ' ' . $all_extra; - } - if ($day_extra) { - $_extra .= ' ' . $day_extra; - } - - $_html_days = '<select name="' . $_name . '"'; - if ($day_id !== null || $all_id !== null) { - $_html_days .= ' id="' . smarty_function_escape_special_chars( - $day_id !== null ? ($day_id ? $day_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; - } - if ($day_size) { - $_html_days .= ' size="' . $day_size . '"'; - } - $_html_days .= $_extra . $extra_attrs . '>' . $option_separator; - - if (isset($day_empty) || isset($all_empty)) { - $_html_days .= '<option value="">' . (isset($day_empty) ? $day_empty : $all_empty) . '</option>' . $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 .= '<option value="' . $_value . '"' - . ($_val == $_day ? ' selected="selected"' : '') - . '>' . $_text . '</option>' . $option_separator; - } - - $_html_days .= '</select>'; - } - - // order the fields for output - $_html = ''; - for ($i = 0; $i <= 2; $i ++) { - switch ($field_order[$i]) { - case 'Y': - case 'y': - if (isset($_html_years)) { - if ($_html) { - $_html .= $field_separator; - } - $_html .= $_html_years; - } - break; - - case 'm': - case 'M': - if (isset($_html_months)) { - if ($_html) { - $_html .= $field_separator; - } - $_html .= $_html_months; - } - break; - - case 'd': - case 'D': - if (isset($_html_days)) { - if ($_html) { - $_html .= $field_separator; - } - $_html .= $_html_days; - } - break; - } - } - - return $_html; -} diff --git a/library/Smarty/libs/plugins/function.html_select_time.php b/library/Smarty/libs/plugins/function.html_select_time.php deleted file mode 100644 index 9af6aad5b..000000000 --- a/library/Smarty/libs/plugins/function.html_select_time.php +++ /dev/null @@ -1,364 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @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<br> - * Name: html_select_time<br> - * 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) - * @author Roberto Berto <roberto@berto.net> - * @author Monte Ohrt <monte AT ohrt DOT com> - * - * @param array $params parameters - * - * @return string - * @uses smarty_make_timestamp() - */ -function smarty_function_html_select_time($params) -{ - $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) { - $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': - case 'minute_value_format': - case 'second_format': - case 'second_value_format': - $$_key = (string) $_value; - break; - - case 'display_hours': - case 'display_minutes': - case 'display_seconds': - case 'display_meridian': - 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); - } - break; - } - } - - 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) { - $_variableName = '_' . strtolower($_elementName); - $$_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); - list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time)); - } elseif (isset($params['time'][$field_array][$prefix . 'Hour'])) { - // $_REQUEST given - 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); - } - $_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 - list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d')); - } - } elseif ($time === null) { - if (array_key_exists('time', $params)) { - $_hour = $_minute = $_second = $time = null; - } else { - list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s')); - } - } else { - list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time)); - } - - // generate hour <select> - if ($display_hours) { - $_html_hours = ''; - $_extra = ''; - $_name = $field_array ? ($field_array . '[' . $prefix . 'Hour]') : ($prefix . 'Hour'); - if ($all_extra) { - $_extra .= ' ' . $all_extra; - } - if ($hour_extra) { - $_extra .= ' ' . $hour_extra; - } - - $_html_hours = '<select name="' . $_name . '"'; - if ($hour_id !== null || $all_id !== null) { - $_html_hours .= ' id="' . smarty_function_escape_special_chars( - $hour_id !== null ? ($hour_id ? $hour_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; - } - if ($hour_size) { - $_html_hours .= ' size="' . $hour_size . '"'; - } - $_html_hours .= $_extra . $extra_attrs . '>' . $option_separator; - - if (isset($hour_empty) || isset($all_empty)) { - $_html_hours .= '<option value="">' . (isset($hour_empty) ? $hour_empty : $all_empty) . '</option>' . $option_separator; - } - - $start = $use_24_hours ? 0 : 1; - $end = $use_24_hours ? 23 : 12; - 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); - - if (!$use_24_hours) { - $_hour12 = $_hour == 0 - ? 12 - : ($_hour <= 12 ? $_hour : $_hour - 12); - } - - $selected = $_hour !== null ? ($use_24_hours ? $_hour == $_val : $_hour12 == $_val) : null; - $_html_hours .= '<option value="' . $_value . '"' - . ($selected ? ' selected="selected"' : '') - . '>' . $_text . '</option>' . $option_separator; - } - - $_html_hours .= '</select>'; - } - - // generate minute <select> - if ($display_minutes) { - $_html_minutes = ''; - $_extra = ''; - $_name = $field_array ? ($field_array . '[' . $prefix . 'Minute]') : ($prefix . 'Minute'); - if ($all_extra) { - $_extra .= ' ' . $all_extra; - } - if ($minute_extra) { - $_extra .= ' ' . $minute_extra; - } - - $_html_minutes = '<select name="' . $_name . '"'; - if ($minute_id !== null || $all_id !== null) { - $_html_minutes .= ' id="' . smarty_function_escape_special_chars( - $minute_id !== null ? ($minute_id ? $minute_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; - } - if ($minute_size) { - $_html_minutes .= ' size="' . $minute_size . '"'; - } - $_html_minutes .= $_extra . $extra_attrs . '>' . $option_separator; - - if (isset($minute_empty) || isset($all_empty)) { - $_html_minutes .= '<option value="">' . (isset($minute_empty) ? $minute_empty : $all_empty) . '</option>' . $option_separator; - } - - $selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null; - 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 .= '<option value="' . $_value . '"' - . ($selected === $i ? ' selected="selected"' : '') - . '>' . $_text . '</option>' . $option_separator; - } - - $_html_minutes .= '</select>'; - } - - // generate second <select> - if ($display_seconds) { - $_html_seconds = ''; - $_extra = ''; - $_name = $field_array ? ($field_array . '[' . $prefix . 'Second]') : ($prefix . 'Second'); - if ($all_extra) { - $_extra .= ' ' . $all_extra; - } - if ($second_extra) { - $_extra .= ' ' . $second_extra; - } - - $_html_seconds = '<select name="' . $_name . '"'; - if ($second_id !== null || $all_id !== null) { - $_html_seconds .= ' id="' . smarty_function_escape_special_chars( - $second_id !== null ? ($second_id ? $second_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; - } - if ($second_size) { - $_html_seconds .= ' size="' . $second_size . '"'; - } - $_html_seconds .= $_extra . $extra_attrs . '>' . $option_separator; - - if (isset($second_empty) || isset($all_empty)) { - $_html_seconds .= '<option value="">' . (isset($second_empty) ? $second_empty : $all_empty) . '</option>' . $option_separator; - } - - $selected = $_second !== null ? ($_second - $_second % $second_interval) : null; - 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 .= '<option value="' . $_value . '"' - . ($selected === $i ? ' selected="selected"' : '') - . '>' . $_text . '</option>' . $option_separator; - } - - $_html_seconds .= '</select>'; - } - - // generate meridian <select> - if ($display_meridian && !$use_24_hours) { - $_html_meridian = ''; - $_extra = ''; - $_name = $field_array ? ($field_array . '[' . $prefix . 'Meridian]') : ($prefix . 'Meridian'); - if ($all_extra) { - $_extra .= ' ' . $all_extra; - } - if ($meridian_extra) { - $_extra .= ' ' . $meridian_extra; - } - - $_html_meridian = '<select name="' . $_name . '"'; - if ($meridian_id !== null || $all_id !== null) { - $_html_meridian .= ' id="' . smarty_function_escape_special_chars( - $meridian_id !== null ? ($meridian_id ? $meridian_id : $_name) : ($all_id ? ($all_id . $_name) : $_name) - ) . '"'; - } - if ($meridian_size) { - $_html_meridian .= ' size="' . $meridian_size . '"'; - } - $_html_meridian .= $_extra . $extra_attrs . '>' . $option_separator; - - if (isset($meridian_empty) || isset($all_empty)) { - $_html_meridian .= '<option value="">' . (isset($meridian_empty) ? $meridian_empty : $all_empty) . '</option>' . $option_separator; - } - - $_html_meridian .= '<option value="am"' . ($_hour > 0 && $_hour < 12 ? ' selected="selected"' : '') . '>AM</option>' . $option_separator - . '<option value="pm"' . ($_hour < 12 ? '' : ' selected="selected"') . '>PM</option>' . $option_separator - . '</select>'; - } - - $_html = ''; - foreach (array('_html_hours', '_html_minutes', '_html_seconds', '_html_meridian') as $k) { - if (isset($$k)) { - if ($_html) { - $_html .= $field_separator; - } - $_html .= $$k; - } - } - - return $_html; -} diff --git a/library/Smarty/libs/plugins/function.html_table.php b/library/Smarty/libs/plugins/function.html_table.php deleted file mode 100644 index ec7ba48a4..000000000 --- a/library/Smarty/libs/plugins/function.html_table.php +++ /dev/null @@ -1,176 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {html_table} function plugin - * Type: function<br> - * Name: html_table<br> - * Date: Feb 17, 2003<br> - * Purpose: make an html table from an array of data<br> - * Params: - * <pre> - * - loop - array to loop through - * - cols - number of columns, comma separated list of column names - * or array of column names - * - rows - number of rows - * - table_attr - table attributes - * - th_attr - table heading attributes (arrays are cycled) - * - tr_attr - table row attributes (arrays are cycled) - * - td_attr - table cell attributes (arrays are cycled) - * - trailpad - value to pad trailing cells with - * - caption - text for caption element - * - vdir - vertical direction (default: "down", means top-to-bottom) - * - 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) - * </pre> - * Examples: - * <pre> - * {table loop=$data} - * {table loop=$data cols=4 tr_attr='"bgcolor=red"'} - * {table loop=$data cols="first,second,third" tr_attr=$colors} - * </pre> - * - * @author Monte Ohrt <monte at ohrt dot com> - * @author credit to Messju Mohr <messju at lammfellpuschen dot de> - * @author credit to boots <boots dot smarty at yahoo dot com> - * @version 1.1 - * @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) -{ - $table_attr = 'border="1"'; - $tr_attr = ''; - $th_attr = ''; - $td_attr = ''; - $cols = $cols_count = 3; - $rows = 3; - $trailpad = ' '; - $vdir = 'down'; - $hdir = 'right'; - $inner = 'cols'; - $caption = ''; - $loop = null; - - 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; - $cols_count = count($_value); - } elseif (!is_numeric($_value) && is_string($_value) && !empty($_value)) { - $cols = explode(',', $_value); - $cols_count = count($cols); - } elseif (!empty($_value)) { - $cols_count = (int) $_value; - } else { - $cols_count = $cols; - } - break; - - case 'rows': - $$_key = (int) $_value; - break; - - case 'table_attr': - case 'trailpad': - case 'hdir': - case 'vdir': - case 'inner': - case 'caption': - $$_key = (string) $_value; - break; - - case 'tr_attr': - case 'td_attr': - case 'th_attr': - $$_key = $_value; - break; - } - } - - $loop_count = count($loop); - if (empty($params['rows'])) { - /* no rows specified */ - $rows = ceil($loop_count / $cols_count); - } elseif (empty($params['cols'])) { - if (!empty($params['rows'])) { - /* no cols specified, but rows */ - $cols_count = ceil($loop_count / $rows); - } - } - - $output = "<table $table_attr>\n"; - - if (!empty($caption)) { - $output .= '<caption>' . $caption . "</caption>\n"; - } - - if (is_array($cols)) { - $cols = ($hdir == 'right') ? $cols : array_reverse($cols); - $output .= "<thead><tr>\n"; - - for ($r = 0; $r < $cols_count; $r ++) { - $output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>'; - $output .= $cols[$r]; - $output .= "</th>\n"; - } - $output .= "</tr></thead>\n"; - } - - $output .= "<tbody>\n"; - for ($r = 0; $r < $rows; $r ++) { - $output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n"; - $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') { - /* shuffle x to loop over rows*/ - $x = floor($x / $cols_count) + ($x % $cols_count) * $rows; - } - - if ($x < $loop_count) { - $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">" . $loop[$x] . "</td>\n"; - } else { - $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">$trailpad</td>\n"; - } - } - $output .= "</tr>\n"; - } - $output .= "</tbody>\n"; - $output .= "</table>\n"; - - return $output; -} - -function smarty_function_html_table_cycle($name, $var, $no) -{ - if (!is_array($var)) { - $ret = $var; - } else { - $ret = $var[$no % count($var)]; - } - - return ($ret) ? ' ' . $ret : ''; -} diff --git a/library/Smarty/libs/plugins/function.mailto.php b/library/Smarty/libs/plugins/function.mailto.php deleted file mode 100644 index 520fb7aa6..000000000 --- a/library/Smarty/libs/plugins/function.mailto.php +++ /dev/null @@ -1,155 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {mailto} function plugin - * Type: function<br> - * Name: mailto<br> - * Date: May 21, 2002 - * Purpose: automate mailto address link creation, and optionally encode them.<br> - * Params: - * <pre> - * - 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) - * - 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 - * </pre> - * Examples: - * <pre> - * {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"'} - * </pre> - * - * @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto} - * (Smarty online manual) - * @version 1.2 - * @author Monte Ohrt <monte at ohrt dot com> - * @author credits to Jason Sweat (added cc, bcc and subject functionality) - * - * @param array $params parameters - * - * @return string - */ -function smarty_function_mailto($params) -{ - static $_allowed_encoding = array('javascript' => true, 'javascript_charcode' => true, 'hex' => true, 'none' => true); - $extra = ''; - - if (empty($params['address'])) { - trigger_error("mailto: missing 'address' parameter", E_USER_WARNING); - - return; - } else { - $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)); - } - break; - - case 'subject': - case 'newsgroups': - $mail_parms[] = $var . '=' . rawurlencode($value); - break; - - case 'extra': - case 'text': - $$var = $value; - - default: - } - } - - 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); - - return; - } - // FIXME: (rodneyrehm) document.write() excues me what? 1998 has passed! - if ($encode == 'javascript') { - $string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');'; - - $js_encode = ''; - for ($x = 0, $_length = strlen($string); $x < $_length; $x ++) { - $js_encode .= '%' . bin2hex($string[$x]); - } - - return '<script type="text/javascript">eval(unescape(\'' . $js_encode . '\'))</script>'; - } elseif ($encode == 'javascript_charcode') { - $string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>'; - - for ($x = 0, $y = strlen($string); $x < $y; $x ++) { - $ord[] = ord($string[$x]); - } - - $_ret = "<script type=\"text/javascript\" language=\"javascript\">\n" - . "{document.write(String.fromCharCode(" - . implode(',', $ord) - . "))" - . "}\n" - . "</script>\n"; - - return $_ret; - } 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); - - 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]); - } else { - $address_encode .= $address[$x]; - } - } - $text_encode = ''; - for ($x = 0, $_length = strlen($text); $x < $_length; $x ++) { - $text_encode .= '&#x' . bin2hex($text[$x]) . ';'; - } - - $mailto = "mailto:"; - - return '<a href="' . $mailto . $address_encode . '" ' . $extra . '>' . $text_encode . '</a>'; - } else { - // no encoding - return '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>'; - } -} diff --git a/library/Smarty/libs/plugins/function.math.php b/library/Smarty/libs/plugins/function.math.php deleted file mode 100644 index aba76e825..000000000 --- a/library/Smarty/libs/plugins/function.math.php +++ /dev/null @@ -1,91 +0,0 @@ -<?php -/** - * Smarty plugin - * This plugin is only for Smarty2 BC - * - * @package Smarty - * @subpackage PluginsFunction - */ - -/** - * Smarty {math} function plugin - * Type: function<br> - * Name: math<br> - * Purpose: handle math computations in template - * - * @link http://www.smarty.net/manual/en/language.function.math.php {math} - * (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @return string|null - */ -function smarty_function_math($params, $template) -{ - static $_allowed_funcs = array( - 'int' => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => true, - 'log' => true, 'log10' => true, 'max' => true, 'min' => true, 'pi' => true, 'pow' => true, - 'rand' => true, 'round' => true, 'sin' => true, 'sqrt' => true, 'srand' => true, 'tan' => true - ); - // be sure equation parameter is present - if (empty($params['equation'])) { - trigger_error("math: missing equation parameter", E_USER_WARNING); - - return; - } - - $equation = $params['equation']; - - // make sure parenthesis are balanced - if (substr_count($equation, "(") != substr_count($equation, ")")) { - trigger_error("math: unbalanced parenthesis", E_USER_WARNING); - - return; - } - - // match all vars in equation, make sure all are passed - preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]*)!", $equation, $match); - - foreach ($match[1] as $curr_var) { - if ($curr_var && !isset($params[$curr_var]) && !isset($_allowed_funcs[$curr_var])) { - trigger_error("math: function call $curr_var not allowed", E_USER_WARNING); - - return; - } - } - - foreach ($params as $key => $val) { - if ($key != "equation" && $key != "format" && $key != "assign") { - // make sure value is not empty - if (strlen($val) == 0) { - trigger_error("math: parameter $key is empty", E_USER_WARNING); - - return; - } - if (!is_numeric($val)) { - trigger_error("math: parameter $key: is not numeric", E_USER_WARNING); - - return; - } - $equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation); - } - } - $smarty_math_result = null; - eval("\$smarty_math_result = " . $equation . ";"); - - if (empty($params['format'])) { - if (empty($params['assign'])) { - return $smarty_math_result; - } else { - $template->assign($params['assign'], $smarty_math_result); - } - } else { - if (empty($params['assign'])) { - printf($params['format'], $smarty_math_result); - } else { - $template->assign($params['assign'], sprintf($params['format'], $smarty_math_result)); - } - } -} diff --git a/library/Smarty/libs/plugins/modifier.capitalize.php b/library/Smarty/libs/plugins/modifier.capitalize.php deleted file mode 100644 index a8ad76370..000000000 --- a/library/Smarty/libs/plugins/modifier.capitalize.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifier - */ - -/** - * Smarty capitalize modifier plugin - * Type: modifier<br> - * Name: capitalize<br> - * 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 <monte at ohrt dot com> - * @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 - */ -function smarty_mod_cap_mbconvert_cb($matches) -{ - return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[2]), MB_CASE_UPPER, Smarty::$_CHARSET); -} - -function smarty_mod_cap_mbconvert2_cb($matches) -{ - return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[3]), MB_CASE_UPPER, Smarty::$_CHARSET); -} - -function smarty_mod_cap_ucfirst_cb($matches) -{ - return stripslashes($matches[1]) . ucfirst(stripslashes($matches[2])); -} - -function smarty_mod_cap_ucfirst2_cb($matches) -{ - return stripslashes($matches[1]) . ucfirst(stripslashes($matches[3])); -} diff --git a/library/Smarty/libs/plugins/modifier.date_format.php b/library/Smarty/libs/plugins/modifier.date_format.php deleted file mode 100644 index 28d6ff021..000000000 --- a/library/Smarty/libs/plugins/modifier.date_format.php +++ /dev/null @@ -1,65 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifier - */ - -/** - * Smarty date_format modifier plugin - * Type: modifier<br> - * Name: date_format<br> - * Purpose: format datestamps via strftime<br> - * Input:<br> - * - 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 <monte at ohrt dot com> - * - * @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 - */ - 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); - } -} diff --git a/library/Smarty/libs/plugins/modifier.debug_print_var.php b/library/Smarty/libs/plugins/modifier.debug_print_var.php deleted file mode 100644 index 4ff8213ce..000000000 --- a/library/Smarty/libs/plugins/modifier.debug_print_var.php +++ /dev/null @@ -1,116 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage Debug - */ - -/** - * Smarty debug_print_var modifier plugin - * Type: modifier<br> - * Name: debug_print_var<br> - * Purpose: formats variable contents for display in the console - * - * @author Monte Ohrt <monte at ohrt dot com> - * - * @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 = '<b>Array (' . count($var) . ')</b>'; - if ($depth == $max) { - break; - } - foreach ($var as $curr_key => $curr_val) { - $results .= '<br>' . str_repeat(' ', $depth * 2) - . '<b>' . strtr($curr_key, $_replace) . '</b> => ' - . smarty_modifier_debug_print_var($curr_val, $max, $length, ++ $depth, $objects); - $depth --; - } - break; - - case 'object' : - $object_vars = get_object_vars($var); - $results = '<b>' . get_class($var) . ' Object (' . count($object_vars) . ')</b>'; - if (in_array($var, $objects)) { - $results .= ' called recursive'; - break; - } - if ($depth == $max) { - break; - } - $objects[] = $var; - foreach ($object_vars as $curr_key => $curr_val) { - $results .= '<br>' . str_repeat(' ', $depth * 2) - . '<b> ->' . strtr($curr_key, $_replace) . '</b> = ' - . 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 = '<i>' . $results . '</i>'; - 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; -} diff --git a/library/Smarty/libs/plugins/modifier.escape.php b/library/Smarty/libs/plugins/modifier.escape.php deleted file mode 100644 index 9fdb0702f..000000000 --- a/library/Smarty/libs/plugins/modifier.escape.php +++ /dev/null @@ -1,198 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifier - */ - -/** - * Smarty escape modifier plugin - * Type: modifier<br> - * Name: escape<br> - * Purpose: escape string for output - * - * @link http://www.smarty.net/docs/en/language.modifier.escape - * @author Monte Ohrt <monte at ohrt dot com> - * - * @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; - 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) { - // php >=5.3.2 - go native - return htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode); - } else { - if ($double_encode) { - // php <5.2.3 - only handle double encoding - return htmlspecialchars($string, ENT_QUOTES, $char_set); - } else { - // 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); - - return $string; - } - } - - case 'htmlall': - if (Smarty::$_MBSTRING) { - // mb_convert_encoding ignores htmlspecialchars() - if ($_double_encode) { - // php >=5.3.2 - go native - $string = htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode); - } else { - if ($double_encode) { - // php <5.2.3 - only handle double encoding - $string = htmlspecialchars($string, ENT_QUOTES, $char_set); - } else { - // 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); - - 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); - } else { - if ($double_encode) { - return htmlentities($string, ENT_QUOTES, $char_set); - } 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); - - return $string; - } - } - - case 'url': - return rawurlencode($string); - - case 'urlpathinfo': - return str_replace('%2F', '/', rawurlencode($string)); - - case 'quotes': - // escape unescaped single quotes - return preg_replace("%(?<!\\\\)'%", "\\'", $string); - - case 'hex': - // escape every byte into hex - // Note that the UTF-8 encoded character ä will be represented as %c3%a4 - $return = ''; - $_length = strlen($string); - for ($x = 0; $x < $_length; $x ++) { - $return .= '%' . bin2hex($string[$x]); - } - - return $return; - - case 'hexentity': - $return = ''; - if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); - $return = ''; - foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) { - $return .= '&#x' . strtoupper(dechex($unicode)) . ';'; - } - - return $return; - } - // no MBString fallback - $_length = strlen($string); - for ($x = 0; $x < $_length; $x ++) { - $return .= '&#x' . bin2hex($string[$x]) . ';'; - } - - return $return; - - case 'decentity': - $return = ''; - if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); - $return = ''; - foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) { - $return .= '&#' . $unicode . ';'; - } - - return $return; - } - // no MBString fallback - $_length = strlen($string); - for ($x = 0; $x < $_length; $x ++) { - $return .= '&#' . ord($string[$x]) . ';'; - } - - return $return; - - case 'javascript': - // escape quotes and backslashes, newlines, etc. - return strtr($string, array('\\' => '\\\\', "'" => "\\'", '"' => '\\"', "\r" => '\\r', "\n" => '\\n', '</' => '<\/')); - - case 'mail': - if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php'); - - return smarty_mb_str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string); - } - // no MBString fallback - return str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string); - - case 'nonstd': - // escape non-standard chars, such as ms document quotes - $return = ''; - if (Smarty::$_MBSTRING) { - require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); - foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) { - if ($unicode >= 126) { - $return .= '&#' . $unicode . ';'; - } else { - $return .= chr($unicode); - } - } - - return $return; - } - - $_length = strlen($string); - for ($_i = 0; $_i < $_length; $_i ++) { - $_ord = ord(substr($string, $_i, 1)); - // non-standard char, escape it - if ($_ord >= 126) { - $return .= '&#' . $_ord . ';'; - } else { - $return .= substr($string, $_i, 1); - } - } - - return $return; - - default: - return $string; - } -} diff --git a/library/Smarty/libs/plugins/modifier.regex_replace.php b/library/Smarty/libs/plugins/modifier.regex_replace.php deleted file mode 100644 index ffea16755..000000000 --- a/library/Smarty/libs/plugins/modifier.regex_replace.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifier - */ - -/** - * Smarty regex_replace modifier plugin - * Type: modifier<br> - * Name: regex_replace<br> - * 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 <monte at ohrt dot com> - * - * @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 - * @param int $limit the maximum number of replacements - * - * @return string - */ -function smarty_modifier_regex_replace($string, $search, $replace, $limit = -1) -{ - 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, $limit); -} - -/** - * @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; -} diff --git a/library/Smarty/libs/plugins/modifier.replace.php b/library/Smarty/libs/plugins/modifier.replace.php deleted file mode 100644 index aa5e8570b..000000000 --- a/library/Smarty/libs/plugins/modifier.replace.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifier - */ - -/** - * Smarty replace modifier plugin - * Type: modifier<br> - * Name: replace<br> - * Purpose: simple search/replace - * - * @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * @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); -} diff --git a/library/Smarty/libs/plugins/modifier.spacify.php b/library/Smarty/libs/plugins/modifier.spacify.php deleted file mode 100644 index e5c41ad8b..000000000 --- a/library/Smarty/libs/plugins/modifier.spacify.php +++ /dev/null @@ -1,27 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifier - */ - -/** - * Smarty spacify modifier plugin - * Type: modifier<br> - * Name: spacify<br> - * Purpose: add spaces between characters in a string - * - * @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param string $string input string - * @param string $spacify_char string to insert between characters. - * - * @return string - */ -function smarty_modifier_spacify($string, $spacify_char = ' ') -{ - // well… what about charsets besides latin and UTF-8? - return implode($spacify_char, preg_split('//' . Smarty::$_UTF8_MODIFIER, $string, - 1, PREG_SPLIT_NO_EMPTY)); -} diff --git a/library/Smarty/libs/plugins/modifier.truncate.php b/library/Smarty/libs/plugins/modifier.truncate.php deleted file mode 100644 index fbe62e823..000000000 --- a/library/Smarty/libs/plugins/modifier.truncate.php +++ /dev/null @@ -1,64 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifier - */ - -/** - * Smarty truncate modifier plugin - * Type: modifier<br> - * Name: truncate<br> - * Purpose: Truncate a string to a certain length if necessary, - * optionally splitting in the middle of a word, and - * appending the $etc string or inserting $etc into the middle. - * - * @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param string $string input string - * @param integer $length length of truncated text - * @param string $etc end string - * @param boolean $break_words truncate at word boundary - * @param boolean $middle truncate in the middle of text - * - * @return string truncated string - */ -function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) -{ - if ($length == 0) { - return ''; - } - - if (Smarty::$_MBSTRING) { - if (mb_strlen($string, Smarty::$_CHARSET) > $length) { - $length -= min($length, mb_strlen($etc, Smarty::$_CHARSET)); - if (!$break_words && !$middle) { - $string = preg_replace('/\s+?(\S+)?$/' . Smarty::$_UTF8_MODIFIER, '', mb_substr($string, 0, $length + 1, Smarty::$_CHARSET)); - } - if (!$middle) { - return mb_substr($string, 0, $length, Smarty::$_CHARSET) . $etc; - } - - return mb_substr($string, 0, $length / 2, Smarty::$_CHARSET) . $etc . mb_substr($string, - $length / 2, $length, Smarty::$_CHARSET); - } - - return $string; - } - - // no MBString fallback - if (isset($string[$length])) { - $length -= min($length, strlen($etc)); - if (!$break_words && !$middle) { - $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1)); - } - if (!$middle) { - return substr($string, 0, $length) . $etc; - } - - return substr($string, 0, $length / 2) . $etc . substr($string, - $length / 2); - } - - return $string; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.cat.php b/library/Smarty/libs/plugins/modifiercompiler.cat.php deleted file mode 100644 index db9d81fbf..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.cat.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty cat modifier plugin - * Type: modifier<br> - * Name: cat<br> - * Date: Feb 24, 2003<br> - * Purpose: catenate a value to a variable<br> - * Input: string to catenate<br> - * 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) -{ - return '(' . implode(').(', $params) . ')'; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.count_characters.php b/library/Smarty/libs/plugins/modifiercompiler.count_characters.php deleted file mode 100644 index f8463d80a..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.count_characters.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty count_characters modifier plugin - * Type: modifier<br> - * Name: count_characteres<br> - * 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) -{ - 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] . ')'; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.count_paragraphs.php b/library/Smarty/libs/plugins/modifiercompiler.count_paragraphs.php deleted file mode 100644 index 34f0bbb8a..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.count_paragraphs.php +++ /dev/null @@ -1,27 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty count_paragraphs modifier plugin - * Type: modifier<br> - * Name: count_paragraphs<br> - * Purpose: count the number of paragraphs in a text - * - * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php - * count_paragraphs (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_count_paragraphs($params) -{ - // count \r or \n characters - return '(preg_match_all(\'#[\r\n]+#\', ' . $params[0] . ', $tmp)+1)'; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.count_sentences.php b/library/Smarty/libs/plugins/modifiercompiler.count_sentences.php deleted file mode 100644 index f1ec56007..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.count_sentences.php +++ /dev/null @@ -1,27 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty count_sentences modifier plugin - * Type: modifier<br> - * Name: count_sentences - * Purpose: count the number of sentences in a text - * - * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php - * count_sentences (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_count_sentences($params) -{ - // find periods, question marks, exclamation marks with a word before but not after. - return 'preg_match_all("#\w[\.\?\!](\W|$)#S' . Smarty::$_UTF8_MODIFIER . '", ' . $params[0] . ', $tmp)'; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.count_words.php b/library/Smarty/libs/plugins/modifiercompiler.count_words.php deleted file mode 100644 index 8b4330f1e..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.count_words.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty count_words modifier plugin - * Type: modifier<br> - * Name: count_words<br> - * Purpose: count the number of words in a text - * - * @link http://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_count_words($params) -{ - if (Smarty::$_MBSTRING) { - // return 'preg_match_all(\'#[\w\pL]+#' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)'; - // expression taken from http://de.php.net/manual/en/function.str-word-count.php#85592 - return 'preg_match_all(\'/\p{L}[\p{L}\p{Mn}\p{Pd}\\\'\x{2019}]*/' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)'; - } - // no MBString fallback - return 'str_word_count(' . $params[0] . ')'; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.default.php b/library/Smarty/libs/plugins/modifiercompiler.default.php deleted file mode 100644 index fe777623e..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.default.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty default modifier plugin - * Type: modifier<br> - * Name: default<br> - * Purpose: designate default value for empty variables - * - * @link http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_default($params) -{ - $output = $params[0]; - if (!isset($params[1])) { - $params[1] = "''"; - } - - array_shift($params); - foreach ($params as $param) { - $output = '(($tmp = @' . $output . ')===null||$tmp===\'\' ? ' . $param . ' : $tmp)'; - } - - return $output; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.escape.php b/library/Smarty/libs/plugins/modifiercompiler.escape.php deleted file mode 100644 index 0b29220ef..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.escape.php +++ /dev/null @@ -1,126 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * @ignore - */ -require_once(SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php'); - -/** - * Smarty escape modifier plugin - * Type: modifier<br> - * Name: escape<br> - * 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 - * @param $compiler - * - * @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) . ')'; - } elseif ($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) . ')'; - } elseif ($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) . ')'; - } elseif ($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("%(?<!\\\\\\\\)\'%", "\\\'",' . $params[0] . ')'; - - case 'javascript': - // escape quotes and backslashes, newlines, etc. - return 'strtr(' . $params[0] . ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\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->template->caching && ($compiler->tag_nocache | $compiler->nocache)) { - $compiler->parent_compiler->template->compiled->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php'; - $compiler->parent_compiler->template->compiled->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape'; - } else { - $compiler->parent_compiler->template->compiled->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php'; - $compiler->parent_compiler->template->compiled->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape'; - } - - return 'smarty_modifier_escape(' . join(', ', $params) . ')'; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.from_charset.php b/library/Smarty/libs/plugins/modifiercompiler.from_charset.php deleted file mode 100644 index dab43e9c3..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.from_charset.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty from_charset modifier plugin - * Type: modifier<br> - * Name: from_charset<br> - * Purpose: convert character encoding from $charset to internal encoding - * - * @author Rodney Rehm - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_from_charset($params) -{ - if (!Smarty::$_MBSTRING) { - // FIXME: (rodneyrehm) shouldn't this throw an error? - return $params[0]; - } - - if (!isset($params[1])) { - $params[1] = '"ISO-8859-1"'; - } - - return 'mb_convert_encoding(' . $params[0] . ', "' . addslashes(Smarty::$_CHARSET) . '", ' . $params[1] . ')'; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.indent.php b/library/Smarty/libs/plugins/modifiercompiler.indent.php deleted file mode 100644 index e3ca20821..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.indent.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty indent modifier plugin - * Type: modifier<br> - * Name: indent<br> - * 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) -{ - 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] . ')'; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.lower.php b/library/Smarty/libs/plugins/modifiercompiler.lower.php deleted file mode 100644 index 1d255f371..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.lower.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty lower modifier plugin - * Type: modifier<br> - * Name: lower<br> - * Purpose: convert string to lowercase - * - * @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual) - * @author Monte Ohrt <monte at ohrt dot com> - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ - -function smarty_modifiercompiler_lower($params) -{ - if (Smarty::$_MBSTRING) { - return 'mb_strtolower(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')'; - } - // no MBString fallback - return 'strtolower(' . $params[0] . ')'; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.noprint.php b/library/Smarty/libs/plugins/modifiercompiler.noprint.php deleted file mode 100644 index 4906908b4..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.noprint.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty noprint modifier plugin - * Type: modifier<br> - * Name: noprint<br> - * Purpose: return an empty string - * - * @author Uwe Tews - * @return string with compiled code - */ -function smarty_modifiercompiler_noprint() -{ - return "''"; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.string_format.php b/library/Smarty/libs/plugins/modifiercompiler.string_format.php deleted file mode 100644 index 71cdf2819..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.string_format.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty string_format modifier plugin - * Type: modifier<br> - * Name: string_format<br> - * 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) -{ - return 'sprintf(' . $params[1] . ',' . $params[0] . ')'; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.strip.php b/library/Smarty/libs/plugins/modifiercompiler.strip.php deleted file mode 100644 index fcd6cbaea..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.strip.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty strip modifier plugin - * Type: modifier<br> - * Name: strip<br> - * Purpose: Replace all repeated spaces, newlines, tabs - * with a single space or supplied replacement string.<br> - * Example: {$var|strip} {$var|strip:" "}<br> - * Date: September 25th, 2002 - * - * @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ - -function smarty_modifiercompiler_strip($params) -{ - if (!isset($params[1])) { - $params[1] = "' '"; - } - - return "preg_replace('!\s+!" . Smarty::$_UTF8_MODIFIER . "', {$params[1]},{$params[0]})"; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.strip_tags.php b/library/Smarty/libs/plugins/modifiercompiler.strip_tags.php deleted file mode 100644 index da5d364cb..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.strip_tags.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty strip_tags modifier plugin - * Type: modifier<br> - * Name: strip_tags<br> - * Purpose: strip html tags from text - * - * @link http://www.smarty.net/docs/en/language.modifier.strip.tags.tpl strip_tags (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_strip_tags($params) -{ - if (!isset($params[1]) || $params[1] === true || trim($params[1], '"') == 'true') { - return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})"; - } else { - return 'strip_tags(' . $params[0] . ')'; - } -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.to_charset.php b/library/Smarty/libs/plugins/modifiercompiler.to_charset.php deleted file mode 100644 index 9122d8bbb..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.to_charset.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty to_charset modifier plugin - * Type: modifier<br> - * Name: to_charset<br> - * Purpose: convert character encoding from internal encoding to $charset - * - * @author Rodney Rehm - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_to_charset($params) -{ - if (!Smarty::$_MBSTRING) { - // FIXME: (rodneyrehm) shouldn't this throw an error? - return $params[0]; - } - - if (!isset($params[1])) { - $params[1] = '"ISO-8859-1"'; - } - - return 'mb_convert_encoding(' . $params[0] . ', ' . $params[1] . ', "' . addslashes(Smarty::$_CHARSET) . '")'; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.unescape.php b/library/Smarty/libs/plugins/modifiercompiler.unescape.php deleted file mode 100644 index 3b17ea2e1..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.unescape.php +++ /dev/null @@ -1,50 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty unescape modifier plugin - * Type: modifier<br> - * Name: unescape<br> - * Purpose: unescape html entities - * - * @author Rodney Rehm - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_unescape($params) -{ - if (!isset($params[1])) { - $params[1] = 'html'; - } - if (!isset($params[2])) { - $params[2] = '\'' . addslashes(Smarty::$_CHARSET) . '\''; - } else { - $params[2] = "'" . $params[2] . "'"; - } - - switch (trim($params[1], '"\'')) { - case 'entity': - case 'htmlall': - if (Smarty::$_MBSTRING) { - return 'mb_convert_encoding(' . $params[0] . ', ' . $params[2] . ', \'HTML-ENTITIES\')'; - } - - return 'html_entity_decode(' . $params[0] . ', ENT_NOQUOTES, ' . $params[2] . ')'; - - case 'html': - return 'htmlspecialchars_decode(' . $params[0] . ', ENT_QUOTES)'; - - case 'url': - return 'rawurldecode(' . $params[0] . ')'; - - default: - return $params[0]; - } -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.upper.php b/library/Smarty/libs/plugins/modifiercompiler.upper.php deleted file mode 100644 index 52ca4e8ff..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.upper.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty upper modifier plugin - * Type: modifier<br> - * Name: lower<br> - * 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) -{ - if (Smarty::$_MBSTRING) { - return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')'; - } - // no MBString fallback - return 'strtoupper(' . $params[0] . ')'; -} diff --git a/library/Smarty/libs/plugins/modifiercompiler.wordwrap.php b/library/Smarty/libs/plugins/modifiercompiler.wordwrap.php deleted file mode 100644 index 6bb63247d..000000000 --- a/library/Smarty/libs/plugins/modifiercompiler.wordwrap.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsModifierCompiler - */ - -/** - * Smarty wordwrap modifier plugin - * Type: modifier<br> - * Name: wordwrap<br> - * Purpose: wrap a string of text at a given length - * - * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * @param $compiler - * - * @return string with compiled code - */ -function smarty_modifiercompiler_wordwrap($params, $compiler) -{ - if (!isset($params[1])) { - $params[1] = 80; - } - if (!isset($params[2])) { - $params[2] = '"\n"'; - } - if (!isset($params[3])) { - $params[3] = 'false'; - } - $function = 'wordwrap'; - if (Smarty::$_MBSTRING) { - if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) { - $compiler->parent_compiler->template->compiled->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->parent_compiler->template->compiled->required_plugins['compiled']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'; - $compiler->parent_compiler->template->compiled->required_plugins['compiled']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap'; - } - $function = 'smarty_mb_wordwrap'; - } - - return $function . '(' . $params[0] . ',' . $params[1] . ',' . $params[2] . ',' . $params[3] . ')'; -} diff --git a/library/Smarty/libs/plugins/outputfilter.trimwhitespace.php b/library/Smarty/libs/plugins/outputfilter.trimwhitespace.php deleted file mode 100644 index ad35d11a2..000000000 --- a/library/Smarty/libs/plugins/outputfilter.trimwhitespace.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFilter - */ - -/** - * Smarty trimwhitespace outputfilter plugin - * Trim unnecessary whitespace from HTML markup. - * - * @author Rodney Rehm - * - * @param string $source input string - * - * @return string filtered output - * @todo substr_replace() is not overloaded by mbstring.func_overload - so this function might fail! - */ -function smarty_outputfilter_trimwhitespace($source) -{ - $store = array(); - $_store = 0; - $_offset = 0; - - // Unify Line-Breaks to \n - $source = preg_replace("/\015\012|\015|\012/", "\n", $source); - - // capture Internet Explorer Conditional Comments - if (preg_match_all('#<!--\[[^\]]+\]>.*?<!\[[^\]]+\]-->#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 <script> - see http://stackoverflow.com/a/808850/515124 - $source = preg_replace('#<!--.*?-->#ms', '', $source); - - // capture html elements not to be messed with - $_offset = 0; - if (preg_match_all('#(<script[^>]*>.*?</script[^>]*>)|(<textarea[^>]*>.*?</textarea[^>]*>)|(<pre[^>]*>.*?</pre[^>]*>)#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/library/Smarty/libs/plugins/shared.escape_special_chars.php b/library/Smarty/libs/plugins/shared.escape_special_chars.php deleted file mode 100644 index d3bd756b1..000000000 --- a/library/Smarty/libs/plugins/shared.escape_special_chars.php +++ /dev/null @@ -1,53 +0,0 @@ -<?php -/** - * Smarty shared plugin - * - * @package Smarty - * @subpackage PluginsShared - */ - -if (version_compare(PHP_VERSION, '5.2.3', '>=')) { - /** - * escape_special_chars common function - * Function: smarty_function_escape_special_chars<br> - * Purpose: used by other smarty functions to escape - * special chars except for already escaped ones - * - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param string $string text that should by escaped - * - * @return string - */ - function smarty_function_escape_special_chars($string) - { - if (!is_array($string)) { - $string = htmlspecialchars($string, ENT_COMPAT, Smarty::$_CHARSET, false); - } - - return $string; - } -} else { - /** - * escape_special_chars common function - * Function: smarty_function_escape_special_chars<br> - * Purpose: used by other smarty functions to escape - * special chars except for already escaped ones - * - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param string $string text that should by escaped - * - * @return string - */ - function smarty_function_escape_special_chars($string) - { - if (!is_array($string)) { - $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); - $string = htmlspecialchars($string); - $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); - } - - return $string; - } -} diff --git a/library/Smarty/libs/plugins/shared.literal_compiler_param.php b/library/Smarty/libs/plugins/shared.literal_compiler_param.php deleted file mode 100644 index 47d728a76..000000000 --- a/library/Smarty/libs/plugins/shared.literal_compiler_param.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @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) -{ - // not set, go default - 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'); - } - - $t = null; - eval("\$t = " . $params[$index] . ";"); - - return $t; -} diff --git a/library/Smarty/libs/plugins/shared.make_timestamp.php b/library/Smarty/libs/plugins/shared.make_timestamp.php deleted file mode 100644 index f87d40c7e..000000000 --- a/library/Smarty/libs/plugins/shared.make_timestamp.php +++ /dev/null @@ -1,43 +0,0 @@ -<?php -/** - * Smarty shared plugin - * - * @package Smarty - * @subpackage PluginsShared - */ - -/** - * Function: smarty_make_timestamp<br> - * Purpose: used by other smarty functions to make a timestamp from a string. - * - * @author Monte Ohrt <monte at ohrt dot com> - * - * @param 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/library/Smarty/libs/plugins/shared.mb_str_replace.php b/library/Smarty/libs/plugins/shared.mb_str_replace.php deleted file mode 100644 index a5682ed30..000000000 --- a/library/Smarty/libs/plugins/shared.mb_str_replace.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php -/** - * Smarty shared plugin - * - * @package Smarty - * @subpackage PluginsShared - */ -if (!function_exists('smarty_mb_str_replace')) { - - /** - * Multibyte string replace - * - * @param string $search the string to be searched - * @param string $replace the replacement string - * @param string $subject the source string - * @param int &$count number of matches found - * - * @return string replaced string - * @author Rodney Rehm - */ - function smarty_mb_str_replace($search, $replace, $subject, &$count = 0) - { - if (!is_array($search) && is_array($replace)) { - return false; - } - if (is_array($subject)) { - // call mb_replace for each single string in $subject - foreach ($subject as &$string) { - $string = & smarty_mb_str_replace($search, $replace, $string, $c); - $count += $c; - } - } elseif (is_array($search)) { - if (!is_array($replace)) { - foreach ($search as &$string) { - $subject = smarty_mb_str_replace($string, $replace, $subject, $c); - $count += $c; - } - } else { - $n = max(count($search), count($replace)); - while ($n --) { - $subject = smarty_mb_str_replace(current($search), current($replace), $subject, $c); - $count += $c; - next($search); - next($replace); - } - } - } else { - $parts = mb_split(preg_quote($search), $subject); - $count = count($parts) - 1; - $subject = implode($replace, $parts); - } - - return $subject; - } -} diff --git a/library/Smarty/libs/plugins/shared.mb_unicode.php b/library/Smarty/libs/plugins/shared.mb_unicode.php deleted file mode 100644 index 0f790b56a..000000000 --- a/library/Smarty/libs/plugins/shared.mb_unicode.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php -/** - * Smarty shared plugin - * - * @package Smarty - * @subpackage PluginsShared - */ - -/** - * convert characters to their decimal unicode equivalents - * - * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration - * - * @param string $string characters to calculate unicode of - * @param string $encoding encoding of $string, if null mb_internal_encoding() is used - * - * @return array sequence of unicodes - * @author Rodney Rehm - */ -function smarty_mb_to_unicode($string, $encoding = null) -{ - if ($encoding) { - $expanded = mb_convert_encoding($string, "UTF-32BE", $encoding); - } else { - $expanded = mb_convert_encoding($string, "UTF-32BE"); - } - - return unpack("N*", $expanded); -} - -/** - * convert unicodes to the character of given encoding - * - * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration - * - * @param integer|array $unicode single unicode or list of unicodes to convert - * @param string $encoding encoding of returned string, if null mb_internal_encoding() is used - * - * @return string unicode as character sequence in given $encoding - * @author Rodney Rehm - */ -function smarty_mb_from_unicode($unicode, $encoding = null) -{ - $t = ''; - if (!$encoding) { - $encoding = mb_internal_encoding(); - } - foreach ((array) $unicode as $utf32be) { - $character = pack("N*", $utf32be); - $t .= mb_convert_encoding($character, $encoding, "UTF-32BE"); - } - - return $t; -} diff --git a/library/Smarty/libs/plugins/shared.mb_wordwrap.php b/library/Smarty/libs/plugins/shared.mb_wordwrap.php deleted file mode 100644 index 31f4acf01..000000000 --- a/library/Smarty/libs/plugins/shared.mb_wordwrap.php +++ /dev/null @@ -1,73 +0,0 @@ -<?php -/** - * Smarty shared plugin - * - * @package Smarty - * @subpackage PluginsShared - */ - -if (!function_exists('smarty_mb_wordwrap')) { - - /** - * Wrap a string to a given number of characters - * - * @link http://php.net/manual/en/function.wordwrap.php for similarity - * - * @param string $str the string to wrap - * @param int $width the width of the output - * @param string $break the character used to break the line - * @param boolean $cut ignored parameter, just for the sake of - * - * @return string wrapped string - * @author Rodney Rehm - */ - function smarty_mb_wordwrap($str, $width = 75, $break = "\n", $cut = false) - { - // break words into tokens using white space as a delimiter - $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE); - $length = 0; - $t = ''; - $_previous = false; - $_space = false; - - foreach ($tokens as $_token) { - $token_length = mb_strlen($_token, Smarty::$_CHARSET); - $_tokens = array($_token); - if ($token_length > $width) { - if ($cut) { - $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE); - } - } - - foreach ($_tokens as $token) { - $_space = !!preg_match('!^\s$!S' . Smarty::$_UTF8_MODIFIER, $token); - $token_length = mb_strlen($token, Smarty::$_CHARSET); - $length += $token_length; - - if ($length > $width) { - // remove space before inserted break - if ($_previous) { - $t = mb_substr($t, 0, - 1, Smarty::$_CHARSET); - } - - if (!$_space) { - // add the break before the token - if (!empty($t)) { - $t .= $break; - } - $length = $token_length; - } - } elseif ($token == "\n") { - // hard break must reset counters - $_previous = 0; - $length = 0; - } - $_previous = $_space; - // add the token - $t .= $token; - } - } - - return $t; - } -} diff --git a/library/Smarty/libs/plugins/variablefilter.htmlspecialchars.php b/library/Smarty/libs/plugins/variablefilter.htmlspecialchars.php deleted file mode 100644 index aecd1e7e7..000000000 --- a/library/Smarty/libs/plugins/variablefilter.htmlspecialchars.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage PluginsFilter - */ - -/** - * Smarty htmlspecialchars variablefilter plugin - * - * @param string $source input string - * - * @return string filtered output - */ -function smarty_variablefilter_htmlspecialchars($source) -{ - return htmlspecialchars($source, ENT_QUOTES, Smarty::$_CHARSET); -} diff --git a/library/Smarty/libs/sysplugins/smarty_cacheresource.php b/library/Smarty/libs/sysplugins/smarty_cacheresource.php deleted file mode 100644 index 14ab62fd9..000000000 --- a/library/Smarty/libs/sysplugins/smarty_cacheresource.php +++ /dev/null @@ -1,223 +0,0 @@ -<?php -/** - * Smarty Internal Plugin - * - * @package Smarty - * @subpackage Cacher - */ - -/** - * Cache Handler API - * - * @package Smarty - * @subpackage Cacher - * @author Rodney Rehm - */ -abstract class Smarty_CacheResource -{ - /** - * resource types provided by the core - * - * @var array - */ - protected static $sysplugins = array('file' => '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 bool $update flag if called because cache update - * - * @return bool 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); - - /** - * 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}'"); - } - - /** - * Invalid Loaded Cache Files - * - * @param Smarty $smarty Smarty object - */ - public function invalidLoadedCache(Smarty $smarty) - { - $smarty->_cache['isCached'] = array(); - if (isset($smarty->ext->_subtemplate)) { - $smarty->ext->_subtemplate->tplObjects = array(); - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_cacheresource_custom.php b/library/Smarty/libs/sysplugins/smarty_cacheresource_custom.php deleted file mode 100644 index 4e9606ef1..000000000 --- a/library/Smarty/libs/sysplugins/smarty_cacheresource_custom.php +++ /dev/null @@ -1,281 +0,0 @@ -<?php -/** - * Smarty Internal Plugin - * - * @package Smarty - * @subpackage Cacher - */ - -/** - * Cache Handler API - * - * @package Smarty - * @subpackage Cacher - * @author Rodney Rehm - */ -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) - * - * @return void - */ - 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.}} - * - * @param string $id unique cache content identifier - * @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; - } - - /** - * Save content to cache - * - * @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 integer|null $exp_time seconds till expiration or null - * @param string $content content to cache - * - * @return boolean success - */ - 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 integer|null $exp_time seconds till expiration time in seconds or null - * - * @return integer number of deleted caches - */ - 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; - $path = $cached->source->filepath . $_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 $cached - * - * @return void - */ - public function populateTimestamp(Smarty_Template_Cached $cached) - { - $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); - $cached->timestamp = isset($timestamp) ? $timestamp : false; - $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 - * @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 $_template, Smarty_Template_Cached $cached = null, $update = false) - { - if (!$cached) { - $cached = $_template->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, $content, $timestamp); - } - if (isset($content)) { - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $_template; - eval("?>" . $content); - $cached->content = null; - return true; - } - - return false; - } - - /** - * Write the rendered template output to cache - * - * @param Smarty_Internal_Template $_template template object - * @param string $content content to cache - * - * @return boolean success - */ - public function writeCachedContent(Smarty_Internal_Template $_template, $content) - { - return $this->save($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $_template->cache_lifetime, $content); - } - - /** - * Read cached template from cache - * - * @param Smarty_Internal_Template $_template template object - * - * @return string 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) - { - return $this->delete(null, null, null, $exp_time); - } - - /** - * 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 - */ - public function clear(Smarty $smarty, $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; - } - // remove from template cache - if (isset($smarty->_cache['template_objects'])) { - foreach ($smarty->_cache['template_objects'] as $key => $_tpl) { - if (isset($_tpl->cached) && $_tpl->source->uid == $source->uid) { - unset($smarty->_cache['template_objects'][$key]); - } - } - } - } - - 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_Template_Cached $cached cached object - * - * @return boolean true or false if cache is locked - */ - public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) - { - $id = $cached->lock_id; - $name = $cached->source->name . '.lock'; - - $mtime = $this->fetchTimestamp($id, $name, $cached->cache_id, $cached->compile_id); - if ($mtime === null) { - $this->fetch($id, $name, $cached->cache_id, $cached->compile_id, $content, $mtime); - } - return $mtime && ($t = time()) - $mtime < $smarty->locking_timeout; - } - - /** - * Lock cache for this template - * - * @param Smarty $smarty Smarty object - * @param Smarty_Template_Cached $cached cached object - * - * @return bool|void - */ - public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) - { - $cached->is_locked = true; - $id = $cached->lock_id; - $name = $cached->source->name . '.lock'; - $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_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, $cached->cache_id, $cached->compile_id, null); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php b/library/Smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php deleted file mode 100644 index ee4021a19..000000000 --- a/library/Smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php +++ /dev/null @@ -1,513 +0,0 @@ -<?php -/** - * Smarty Internal Plugin - * - * @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 - * @subpackage Cacher - * @author Rodney Rehm - */ -abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource -{ - /** - * cache for contents - * - * @var array - */ - protected $contents = array(); - - /** - * cache for timestamps - * - * @var array - */ - protected $timestamps = array(); - - /** - * 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) - { - $cached->filepath = $_template->source->uid . '#' . $this->sanitize($cached->source->resource) . '#' . - $this->sanitize($cached->cache_id) . '#' . $this->sanitize($cached->compile_id); - - $this->populateTimestamp($cached); - } - - /** - * 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)) { - return; - } - $cached->content = $content; - $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 - * @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 $_template, Smarty_Template_Cached $cached = null, $update = false) - { - if (!$cached) { - $cached = $_template->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)) { - return false; - } - } - if (isset($content)) { - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $_template; - eval("?>" . $content); - - return true; - } - - return false; - } - - /** - * Write the rendered template output to cache - * - * @param Smarty_Internal_Template $_template template object - * @param string $content content to cache - * - * @return boolean success - */ - public function writeCachedContent(Smarty_Internal_Template $_template, $content) - { - $this->addMetaTimestamp($content); - - 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 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 - */ - public function clearAll(Smarty $smarty, $exp_time = null) - { - if (!$this->purge()) { - $this->invalidate(null); - } - // remove from template cache - if (isset($smarty->_cache['template_objects'])) { - foreach ($smarty->_cache['template_objects'] as $key => $tpl) { - if (isset($tpl->cached)) { - unset($smarty->_cache['template_objects'][$key]); - } - } - } - return - 1; - } - - /** - * Empty cache for a specific template - * {@internal the $exp_time argument is ignored altogether}} - * - * @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 [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 - */ - public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) - { - $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); - // remove from template cache - if (isset($resource_name) && isset($smarty->_cache['template_objects'])) { - if (isset($smarty->_cache['template_objects'])) { - foreach ($smarty->_cache['template_objects'] as $key => $tpl) { - if ($tpl->source->uid == $uid && isset($tpl->cached)) { - unset($smarty->_cache['template_objects'][$key]); - } - } - } - } - return - 1; - } - - /** - * Get template's unique ID - * - * @param Smarty $smarty Smarty object - * @param string $resource_name template name - * - * @return string filepath of cache file - * @throws \SmartyException - * - */ - protected function getTemplateUid(Smarty $smarty, $resource_name) - { - if (isset($resource_name)) { - $source = Smarty_Template_Source::load(null, $smarty, $resource_name); - if ($source->exists) { - return $source->uid; - } - } - return ''; - } - - /** - * Sanitize CacheID components - * - * @param string $string CacheID component to sanitize - * - * @return string sanitized CacheID component - */ - protected function sanitize($string) - { - $string = trim($string, '|'); - if (!$string) { - return null; - } - return preg_replace('#[^\w\|]+#S', '_', $string); - } - - /** - * Fetch and prepare a cache object. - * - * @param string $cid CacheID to fetch - * @param string $resource_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @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) - { - $t = $this->read(array($cid)); - $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); - 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)); - $content = $ts . $content; - } - - /** - * Extract the timestamp the $content was cached - * - * @param string &$content the cached content - * - * @return float the microtime the content was cached - */ - protected function getMetaTimestamp(&$content) - { - extract(unpack('N1s/N1m/a*content', $content)); - return $s + ($m / 100000000); - } - - /** - * Invalidate CacheID - * - * @param string $cid CacheID - * @param string $resource_name template name - * @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) - { - $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 - else { - $key = 'IVK#CID#' . $cid; - } - } - } - } - $this->write(array($key => $now)); - } - - /** - * Determine the latest timestamp known to the invalidation chain - * - * @param string $cid CacheID to determine latest invalidation timestamp of - * @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 float the microtime the CacheID was invalidated - */ - 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; - } - // abort if there are no InvalidationKeys to check - 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; - } - // make sure we're dealing with floats - $values = array_map('floatval', $values); - - return max($values); - } - - /** - * Translate a CacheID into the list of applicable InvalidationKeys. - * 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 - */ - 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) { - $_name .= $resource_uid . '#' . $this->sanitize($resource_name); - $t[] = 'IVK#TEMPLATE' . $_name; - } - if ($compile_id) { - $_compile .= $this->sanitize($compile_id); - $t[] = 'IVK#COMPILE' . $_compile; - } - $_name .= '#'; - $cid = trim($cache_id, '|'); - if (!$cid) { - return $t; - } - $i = 0; - while (true) { - // determine next delimiter position - $i = strpos($cid, '|', $i); - // add complete CacheID if there are no more delimiters - if ($i === false) { - $t[] = 'IVK#CACHE#' . $cid; - $t[] = 'IVK#CID' . $_name . $cid . $_compile; - $t[] = 'IVK#CID' . $_name . $_compile; - break; - } - $part = substr($cid, 0, $i); - // add slice to list - $t[] = 'IVK#CACHE#' . $part; - $t[] = 'IVK#CID' . $_name . $part . $_compile; - // skip past delimiter position - $i ++; - } - - return $t; - } - - /** - * 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) - { - $key = 'LOCK#' . $cached->filepath; - $data = $this->read(array($key)); - - return $data && time() - $data[$key] < $smarty->locking_timeout; - } - - /** - * Lock cache for this template - * - * @param Smarty $smarty Smarty object - * @param Smarty_Template_Cached $cached cached object - * - * @return bool|void - */ - public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) - { - $cached->is_locked = true; - $key = 'LOCK#' . $cached->filepath; - $this->write(array($key => time()), $smarty->locking_timeout); - } - - /** - * 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; - $key = 'LOCK#' . $cached->filepath; - $this->delete(array($key)); - } - - /** - * 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 - */ - 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 - */ - 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 - */ - abstract protected function delete(array $keys); - - /** - * Remove *all* values from cache - * - * @return boolean true on success, false on failure - */ - protected function purge() - { - return false; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_data.php b/library/Smarty/libs/sysplugins/smarty_data.php deleted file mode 100644 index 7cf18a43e..000000000 --- a/library/Smarty/libs/sysplugins/smarty_data.php +++ /dev/null @@ -1,68 +0,0 @@ -<?php -/** - * Smarty Plugin Data - * This file contains the data object - * - * @package Smarty - * @subpackage Template - * @author Uwe Tews - */ - -/** - * class for the Smarty data object - * The Smarty data object will hold Smarty variables in the current scope - * - * @package Smarty - * @subpackage Template - */ -class Smarty_Data extends Smarty_Internal_Data -{ - /** - * Counter - * - * @var int - */ - static $count = 0; - - /** - * Data block name - * - * @var string - */ - public $dataObjectName = ''; - - /** - * Smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * create Smarty data object - * - * @param Smarty|array $_parent parent template - * @param Smarty|Smarty_Internal_Template $smarty global smarty instance - * @param string $name optional data block name - * - * @throws SmartyException - */ - public function __construct($_parent = null, $smarty = null, $name = null) - { - parent::__construct(); - self::$count ++; - $this->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/library/Smarty/libs/sysplugins/smarty_internal_cacheresource_file.php b/library/Smarty/libs/sysplugins/smarty_internal_cacheresource_file.php deleted file mode 100644 index 64d02dfe5..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_cacheresource_file.php +++ /dev/null @@ -1,225 +0,0 @@ -<?php -/** - * Smarty Internal Plugin CacheResource File - * - * @package Smarty - * @subpackage Cacher - * @author Uwe Tews - * @author Rodney Rehm - */ - -/** - * This class does contain all necessary methods for the HTML cache on file system - * Implements the file system as resource for the HTML cache Version ussing nocache inserts. - * - * @package Smarty - * @subpackage Cacher - */ -class Smarty_Internal_CacheResource_File extends Smarty_CacheResource -{ - /** - * 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) - { - $_source_file_path = str_replace(':', '.', $_template->source->filepath); - $_cache_id = isset($_template->cache_id) ? preg_replace('![^\w\|]+!', '_', $_template->cache_id) : null; - $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w]+!', '_', $_template->compile_id) : null; - $_filepath = $_template->source->uid; - // if use_sub_dirs, break file into directories - if ($_template->smarty->use_sub_dirs) { - $_filepath = substr($_filepath, 0, 2) . DS . substr($_filepath, 2, 2) . DS . substr($_filepath, 4, 2) . DS . - $_filepath; - } - $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^'; - if (isset($_cache_id)) { - $_cache_id = str_replace('|', $_compile_dir_sep, $_cache_id) . $_compile_dir_sep; - } else { - $_cache_id = ''; - } - if (isset($_compile_id)) { - $_compile_id = $_compile_id . $_compile_dir_sep; - } else { - $_compile_id = ''; - } - $_cache_dir = $_template->smarty->getCacheDir(); - if ($_template->smarty->cache_locking) { - // create locking file name - // relative file name? - if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_cache_dir)) { - $_lock_dir = rtrim(getcwd(), '/\\') . DS . $_cache_dir; - } else { - $_lock_dir = $_cache_dir; - } - $cached->lock_id = $_lock_dir . sha1($_cache_id . $_compile_id . $_template->source->uid) . '.lock'; - } - $cached->filepath = $_cache_dir . $_cache_id . $_compile_id . $_filepath . '.' . basename($_source_file_path) . - '.php'; - $cached->timestamp = $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 $_template template object - * @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 $_template, Smarty_Template_Cached $cached = null, $update = false) - { - /** @var Smarty_Internal_Template $_smarty_tpl - * used in included file - */ - $_smarty_tpl = $_template; - $_template->cached->valid = false; - if ($update && defined('HHVM_VERSION')) { - return $_template->smarty->ext->_hhvm->includeHhvm($_template, $_template->cached->filepath); - } else { - return @include $_template->cached->filepath; - } - } - - /** - * Write the rendered template output to cache - * - * @param Smarty_Internal_Template $_template template object - * @param string $content content to cache - * - * @return boolean success - */ - public function writeCachedContent(Smarty_Internal_Template $_template, $content) - { - if ($_template->smarty->ext->_writeFile->writeFile($_template->cached->filepath, $content, $_template->smarty) === true) { - if (function_exists('opcache_invalidate')) { - opcache_invalidate($_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_Internal_Extension_Clear::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_Internal_Extension_Clear::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/library/Smarty/libs/sysplugins/smarty_internal_compile_append.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_append.php deleted file mode 100644 index bd2ffe474..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_append.php +++ /dev/null @@ -1,50 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Append - * Compiles the {append} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Append Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign -{ - /** - * Compiles code for the {append} 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 - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - // the following must be assigned at runtime because it will be overwritten in parent class - $this->required_attributes = array('var', 'value'); - $this->shorttag_order = array('var', 'value'); - $this->optional_attributes = array('scope', 'index'); - // 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']); - } else { - $_params['smarty_internal_index'] = '[]'; - } - $_new_attr = array(); - foreach ($_attr as $key => $value) { - $_new_attr[] = array($key => $value); - } - // call compile assign - return parent::compile($_new_attr, $compiler, $_params); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php deleted file mode 100644 index 5e3fce3cc..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php +++ /dev/null @@ -1,98 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Assign - * Compiles the {assign} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Assign Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase -{ - /** - * Valid scope names - * - * @var array - */ - public $valid_scopes = array('local' => true, 'parent' => true, 'root' => true, 'global' => true, - 'smarty' => true, 'tpl_root' => true); - - /** - * 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', 'bubble_up'); - $_nocache = 'null'; - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // nocache ? - if ($compiler->tag_nocache || $compiler->nocache) { - $_nocache = 'true'; - // create nocache var to make it know for further compiling - if (isset($compiler->template->tpl_vars[trim($_attr['var'], "'")])) { - $compiler->template->tpl_vars[trim($_attr['var'], "'")]->nocache = true; - } else { - $compiler->template->tpl_vars[trim($_attr['var'], "'")] = new Smarty_Variable(null, true); - } - } - // scope setup - $_scope = Smarty::SCOPE_LOCAL; - if (isset($_attr['scope'])) { - $_attr['scope'] = trim($_attr['scope'], "'\""); - if (!isset($this->valid_scopes[$_attr['scope']])) { - $compiler->trigger_template_error("illegal value '{$_attr['scope']}' for \"scope\" attribute", null, true); - } - if ($_attr['scope'] != 'local') { - if ($_attr['scope'] == 'parent') { - $_scope = Smarty::SCOPE_PARENT; - } elseif ($_attr['scope'] == 'root') { - $_scope = Smarty::SCOPE_ROOT; - } elseif ($_attr['scope'] == 'global') { - $_scope = Smarty::SCOPE_GLOBAL; - } elseif ($_attr['scope'] == 'smarty') { - $_scope = Smarty::SCOPE_SMARTY; - } elseif ($_attr['scope'] == 'tpl_root') { - $_scope = Smarty::SCOPE_TPL_ROOT; - } - $_scope += (isset($_attr['bubble_up']) && $_attr['bubble_up'] == 'false') ? 0 : Smarty::SCOPE_BUBBLE_UP; - } - } - // compiled output - if (isset($parameter['smarty_internal_index'])) { - $output = - "<?php \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, $_attr[var], $_nocache);\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value$parameter[smarty_internal_index] = $_attr[value];"; - } else { - // implement Smarty2's behaviour of variables assigned by reference - if ($compiler->template->smarty instanceof SmartyBC) { - $output = - "<?php if (isset(\$_smarty_tpl->tpl_vars[$_attr[var]])) {\$_smarty_tpl->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];"; - $output .= "\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value = $_attr[value]; \$_smarty_tpl->tpl_vars[$_attr[var]]->nocache = $_nocache;"; - $output .= "\n} else \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_Variable($_attr[value], $_nocache);"; - } else { - $output = "<?php \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_Variable($_attr[value], $_nocache);"; - } - } - $output .= "\n\$_smarty_tpl->ext->_updateScope->updateScope(\$_smarty_tpl, $_attr[var], $_scope);"; - $output .= '?>'; - - return $output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_block.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_block.php deleted file mode 100644 index ab1fc6e00..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_block.php +++ /dev/null @@ -1,292 +0,0 @@ -<?php -/* - * This file is part of Smarty. - * - * (c) 2015 Uwe Tews - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Smarty Internal Plugin Compile Block Class - * - * @author Uwe Tews <uwe.tews@googlemail.com> - */ -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'); - - /** - * nesting level of block tags - * - * @var int - */ - public static $blockTagNestingLevel = 0; - - /** - * Saved compiler object - * - * @var Smarty_Internal_TemplateCompilerBase - */ - public $compiler = null; - - /** - * 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) - { - 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'] ++; - $compiler->_cache['blockName'][$compiler->_cache['blockNesting']] = $_attr['name']; - $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']][0] = 'block_' . preg_replace('![^\w]+!', '_', uniqid(rand(), true)); - $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']][1] = false; - $this->openTag($compiler, 'block', array($_attr, $compiler->nocache, $compiler->parser->current_buffer, - $compiler->template->compiled->has_nocache_code, - $compiler->template->caching)); - // must whole block be nocache ? - if ($compiler->tag_nocache) { - $i = 0; - } - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - // $compiler->suppressNocacheProcessing = true; - if ($_attr['nocache'] === true) { - //$compiler->trigger_template_error('nocache option not allowed', $compiler->parser->lex->taglineno); - } - $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); - $compiler->template->compiled->has_nocache_code = false; - $compiler->suppressNocacheProcessing = true; - } - - /** - * Compile saved child block source - * - * @param \Smarty_Internal_TemplateCompilerBase compiler object - * @param string $_name optional name of child block - * - * @return string compiled code of child block - */ - static function compileChildBlock(Smarty_Internal_TemplateCompilerBase $compiler, $_name = null) - { - if (!isset($compiler->_cache['blockNesting'])) { - $compiler->trigger_template_error(' tag {$smarty.block.child} used outside {block} tags ', - $compiler->parser->lex->taglineno); - } - $compiler->has_code = true; - $compiler->suppressNocacheProcessing = true; - $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']][1] = true; - $output = "<?php \n\$_smarty_tpl->ext->_inheritance->processBlock(\$_smarty_tpl, 2, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, null, \$_blockParentStack);\n?>\n"; - return $output; - } - - /** - * Compile $smarty.block.parent - * - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param string $_name optional name of child block - * - * @return string compiled code of child block - */ - static function compileParentBlock(Smarty_Internal_TemplateCompilerBase $compiler, $_name = null) - { - if (!isset($compiler->_cache['blockNesting'])) { - $compiler->trigger_template_error(' tag {$smarty.block.parent} used outside {block} tags ', - $compiler->parser->lex->taglineno); - } - $compiler->suppressNocacheProcessing = true; - $compiler->has_code = true; - $output = "<?php \n\$_smarty_tpl->ext->_inheritance->processBlock(\$_smarty_tpl, 4, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, null, \$_blockParentStack);\n?>\n"; - return $output; - } -} - -/** - * 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']]); - $_block[2] = $_block[3] = 0; - $_name = trim($_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] = is_string($stat) ? trim($stat, "'\"") : $stat; - } - } - $_funcName = $_block[0]; - // get compiled block code - $_functionCode = $compiler->parser->current_buffer; - // setup buffer for template function code - $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); - - if ($compiler->template->compiled->has_nocache_code) { - // $compiler->parent_compiler->template->tpl_function[$_name]['call_name_caching'] = $_funcNameCaching; - $_block[6] = $_funcNameCaching = $_funcName . '_nocache'; - $output = "<?php\n"; - $output .= "/* {block '{$_name}'} {$compiler->template->source->type}:{$compiler->template->source->name} */\n"; - $output .= "function {$_funcNameCaching} (\$_smarty_tpl, \$_blockParentStack) {\n"; - $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\n"; - $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 = "<?php\n"; - if (isset($_assign)) { - $output .= "\$_smarty_tpl->tpl_vars[{$_assign}] = new Smarty_Variable(ob_get_clean());\n"; - } - $output .= "/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\n"; - $output .= "}\n"; - $output .= "/* {/block '{$_name}'} */\n\n"; - $output .= "?>\n"; - $compiler->parser->current_buffer->append_subtree($compiler->parser, - new Smarty_Internal_ParseTree_Tag($compiler->parser, - $output)); - $compiler->blockOrFunctionCode .= $f = $compiler->parser->current_buffer->to_smarty_php($compiler->parser); - $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); - $this->compiler = $compiler; - $_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))); - $this->compiler = null; - } - $output = "<?php\n"; - $output .= "/* {block '{$_name}'} {$compiler->template->source->type}:{$compiler->template->source->name} */\n"; - $output .= "function {$_funcName}(\$_smarty_tpl, \$_blockParentStack) {\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 = "<?php\n"; - if (isset($_assign)) { - $output .= "\$_smarty_tpl->tpl_vars[{$_assign}] = new Smarty_Variable(ob_get_clean());\n"; - } - $output .= "}\n"; - $output .= "/* {/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); - // nocache plugins must be copied - if (!empty($compiler->template->compiled->required_plugins['nocache'])) { - foreach ($compiler->template->compiled->required_plugins['nocache'] as $plugin => $tmp) { - foreach ($tmp as $type => $data) { - $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$plugin][$type] = - $data; - } - } - } - - - // 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 = "<?php \n"; - if ($compiler->_cache['blockNesting'] == 1) { - $output .= "\$_smarty_tpl->ext->_inheritance->processBlock(\$_smarty_tpl, 0, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, " . - var_export($_block, true) . ");\n"; - } else { - $output .= "\$_smarty_tpl->ext->_inheritance->processBlock(\$_smarty_tpl, 0, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, " . - var_export($_block, true) . ", \$_blockParentStack);\n"; - - } - $output .= "?>\n"; - $compiler->_cache['blockNesting'] --; - if ($compiler->_cache['blockNesting'] == 0) { - unset($compiler->_cache['blockNesting']); - } - $compiler->has_code = true; - $compiler->suppressNocacheProcessing = true; - return $output; - } - - /** - * @param $match - * - * @return mixed - */ - 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/library/Smarty/libs/sysplugins/smarty_internal_compile_break.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_break.php deleted file mode 100644 index cbc73d36a..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_break.php +++ /dev/null @@ -1,77 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Break - * Compiles the {break} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Break Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('levels'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('levels'); - - /** - * Compiles code for the {break} 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) - { - 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; - while ($level_count > 0 && $stack_count >= 0) { - if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) { - $level_count --; - } - $stack_count --; - } - if ($level_count != 0) { - $compiler->trigger_template_error("cannot break {$_levels} level(s)", null, true); - } - - return "<?php break {$_levels};?>"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_call.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_call.php deleted file mode 100644 index b7204bec0..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_call.php +++ /dev/null @@ -1,89 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Function_Call - * Compiles the calls of user defined tags defined by {function} - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Function_Call Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase -{ - /** - * 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 $optional_attributes = array('_any'); - - /** - * Compiles the calls of user defined tags defined by {function} - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // 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 = - "<?php ob_start();\n\$_smarty_tpl->smarty->ext->_tplFunction->callTemplateFunction(\$_smarty_tpl, {$_name}, {$_params}, {$_nocache});\n\$_smarty_tpl->assign({$_assign}, ob_get_clean());?>\n"; - } else { - $_output = - "<?php \$_smarty_tpl->smarty->ext->_tplFunction->callTemplateFunction(\$_smarty_tpl, {$_name}, {$_params}, {$_nocache});?>\n"; - } - return $_output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_capture.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_capture.php deleted file mode 100644 index be45f3e94..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_capture.php +++ /dev/null @@ -1,117 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Capture - * Compiles the {capture} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Capture Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase -{ - /** - * 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 $optional_attributes = array('name', 'assign', 'append'); - - /** - * Compiles code for the {capture} 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); - - $buffer = isset($_attr['name']) ? $_attr['name'] : "'default'"; - $assign = isset($_attr['assign']) ? $_attr['assign'] : 'null'; - $append = isset($_attr['append']) ? $_attr['append'] : 'null'; - - $compiler->_capture_stack[0][] = array($buffer, $assign, $append, $compiler->nocache); - // maybe nocache because of nocache variables - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - $_output = "<?php \$_smarty_tpl->_cache['capture_stack'][] = array($buffer, $assign, $append); ob_start(); ?>"; - - return $_output; - } - - /** - * Compiles code for the {$smarty.capture.xxx} - * - * @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 static 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); - } - return "(isset(\$_smarty_tpl->_cache['__smarty_capture']['{$name}']) ? \$_smarty_tpl->_cache['__smarty_capture']['{$name}'] : null)"; - } -} - -/** - * 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 - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - - list($buffer, $assign, $append, $compiler->nocache) = array_pop($compiler->_capture_stack[0]); - - $_output = "<?php list(\$_capture_buffer, \$_capture_assign, \$_capture_append) = array_pop(\$_smarty_tpl->_cache['capture_stack']);\n"; - $_output .= "if (!empty(\$_capture_buffer)) {\n"; - $_output .= " if (isset(\$_capture_assign)) \$_smarty_tpl->assign(\$_capture_assign, ob_get_contents());\n"; - $_output .= " if (isset( \$_capture_append)) \$_smarty_tpl->append( \$_capture_append, ob_get_contents());\n"; - $_output .= "\$_smarty_tpl->_cache['__smarty_capture'][\$_capture_buffer]=ob_get_clean();\n"; - $_output .= "} else \$_smarty_tpl->capture_error();?>"; - - return $_output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_config_load.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_config_load.php deleted file mode 100644 index d2e50a08f..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_config_load.php +++ /dev/null @@ -1,104 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Config Load - * Compiles the {config load} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Config Load Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('file'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('file', 'section'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('section', 'scope', 'bubble_up'); - - /** - * Valid scope names - * - * @var array - */ - public $valid_scopes = array('local' => true, 'parent' => true, 'root' => true, 'global' => true, - 'smarty' => true, 'tpl_root' => true); - - /** - * 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 = Smarty::SCOPE_LOCAL; - if (isset($_attr['scope'])) { - $_attr['scope'] = trim($_attr['scope'], "'\""); - if (!isset($this->valid_scopes[$_attr['scope']])) { - $compiler->trigger_template_error("illegal value '{$_attr['scope']}' for \"scope\" attribute", null, true); - } - if ($_attr['scope'] != 'local') { - if ($_attr['scope'] == 'parent') { - $_scope = Smarty::SCOPE_PARENT; - } elseif ($_attr['scope'] == 'root') { - $_scope = Smarty::SCOPE_ROOT; - } elseif ($_attr['scope'] == 'global') { - $_scope = Smarty::SCOPE_GLOBAL; - } elseif ($_attr['scope'] == 'smarty') { - $_scope = Smarty::SCOPE_SMARTY; - } elseif ($_attr['scope'] == 'tpl_root') { - $_scope = Smarty::SCOPE_TPL_ROOT; - } - $_scope += (isset($_attr['bubble_up']) && $_attr['bubble_up'] == 'false') ? 0 : Smarty::SCOPE_BUBBLE_UP; - } - } - - // create config object - $_output = - "<?php\n\$_smarty_tpl->smarty->ext->configLoad->_loadConfigFile(\$_smarty_tpl, {$conf_file}, {$section}, {$_scope});\n?>\n"; - - return $_output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php deleted file mode 100644 index 2ee04c94e..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php +++ /dev/null @@ -1,77 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Continue - * Compiles the {continue} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Continue Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('levels'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('levels'); - - /** - * Compiles code for the {continue} 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) - { - 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; - while ($level_count > 0 && $stack_count >= 0) { - if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) { - $level_count --; - } - $stack_count --; - } - if ($level_count != 0) { - $compiler->trigger_template_error("cannot continue {$_levels} level(s)", null, true); - } - - return "<?php continue {$_levels};?>"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_debug.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_debug.php deleted file mode 100644 index d73c81a10..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_debug.php +++ /dev/null @@ -1,41 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Debug - * Compiles the {debug} tag. - * It opens a window the the Smarty Debugging Console. - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Debug Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {debug} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - // compile always as nocache - $compiler->tag_nocache = true; - - // display debug template - $_output = "<?php \$_smarty_debug = new Smarty_Internal_Debug;\n \$_smarty_debug->display_debug(\$_smarty_tpl);\n"; - $_output .= "unset(\$_smarty_debug);\n?>"; - return $_output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_eval.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_eval.php deleted file mode 100644 index 407482f07..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_eval.php +++ /dev/null @@ -1,71 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Eval - * Compiles the {eval} tag. - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Eval Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('var'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('assign'); - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('var', 'assign'); - - /** - * Compiles code for the {eval} tag - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, $compiler) - { - $this->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 being displayed - $_assign = $_attr['assign']; - } - - // create template object - $_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();"; - } - - return "<?php $_output ?>"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_extends.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_extends.php deleted file mode 100644 index 7ce3dcf6f..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_extends.php +++ /dev/null @@ -1,134 +0,0 @@ -<?php - -/** - * Smarty Internal Plugin Compile extend - * Compiles the {extends} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile extend Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Extends extends Smarty_Internal_Compile_Shared_Inheritance -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('file'); - - /** - * Array of names of optional attribute required by tag - * use array('_any') if there is no restriction of attributes names - * - * @var array - */ - public $optional_attributes = array('extends_resource'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('file'); - - /** - * Compiles code for the {extends} tag extends: resource - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * - * @return string compiled code - * @throws \SmartyCompilerException - * @throws \SmartyException - */ - 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', $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); - $this->compileInclude($compiler, $_attr['file']); - } - $compiler->has_code = false; - return ''; - } - - /** - * Add code for inheritance endChild() method to end of template - * - * @param \Smarty_Internal_TemplateCompilerBase $compiler - */ - private function compileEndChild(Smarty_Internal_TemplateCompilerBase $compiler) - { - $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser, - "<?php \$_smarty_tpl->ext->_inheritance->endChild(\$_smarty_tpl);\n?>\n"); - } - - /** - * Add code for including subtemplate to end of template - * - * @param \Smarty_Internal_TemplateCompilerBase $compiler - * @param string $file subtemplate name - */ - private function compileInclude(Smarty_Internal_TemplateCompilerBase $compiler, $file) - { - $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser, - $compiler->compileTag('include', - array($file, - array('scope' => 'parent')))); - } - - /** - * Create source code for {extends} from source components array - * - * @param []\Smarty_Internal_Template_Source $components - * - * @return string - */ - public static function extendsSourceArrayCode($components) - { - $resources = array(); - foreach ($components as $source) { - $resources[] = $source->resource; - } - return '{extends file=\'extends:' . join('|', $resources) . '\' extends_resource=true}'; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_for.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_for.php deleted file mode 100644 index 7b86d4859..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_for.php +++ /dev/null @@ -1,169 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile For - * Compiles the {for} {forelse} {/for} tags - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile For Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {for} tag - * Smarty 3 does implement two different syntax's: - * - {for $var in $array} - * For looping over arrays or iterators - * - {for $x=0; $x<$y; $x++} - * For general loops - * The parser is generating different sets of attribute by which this compiler can - * determine which syntax is used. - * - * @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++; - 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(); - } - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - $output = "<?php\n"; - if ($parameter == 1) { - foreach ($_attr['start'] as $_statement) { - 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;\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;"; - 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 "<?php }} else { ?>"; - } -} - -/** - * 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 = "<?php }\n"; - if ($openTag != 'forelse') { - $output .= "}\n"; - } - $output .= "?>\n"; - return $output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_foreach.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_foreach.php deleted file mode 100644 index 178a0a52c..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_foreach.php +++ /dev/null @@ -1,347 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Foreach - * Compiles the {foreach} {foreachelse} {/foreach} tags - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Foreach Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_ForeachSection -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('from', 'item'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('name', 'key'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('from', 'item', 'key', 'name'); - - /** - * counter - * - * @var int - */ - public $counter = 0; - - /** - * Name of this tag - * - * @var string - */ - public $tagName = 'foreach'; - - /** - * Valid properties of $smarty.foreach.name.xxx variable - * - * @var array - */ - public $nameProperties = array('first', 'last', 'index', 'iteration', 'show', 'total'); - - /** - * Valid properties of $item@xxx variable - * - * @var array - */ - public $itemProperties = array('first', 'last', 'index', 'iteration', 'show', 'total', 'key'); - - /** - * Flag if tag had name attribute - * - * @var bool - */ - public $isNamed = false; - - /** - * Compiles code for the {foreach} 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) - { - $compiler->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']); - } - $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; - $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_' . (isset($attributes['name']) ? $attributes['name'] : $attributes['item']) . '_' . - $this->counter ++ . '_'; - $needIteration = false; - // 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($itemAttr['last'])) { - $needIteration = true; - } - if (isset($namedAttr['last'])) { - $needIteration = true; - } - - $keyTerm = ''; - if (isset($itemAttr['key'])) { - $keyTerm = "{$itemVar}->key => "; - } elseif (isset($attributes['key'])) { - $keyTerm = "\$_smarty_tpl->tpl_vars['{$key}']->value => "; - } - - $saveVars = array(); - $restoreVars = array(); - if ($this->isNamed) { - $foreachVar = "\$_smarty_tpl->tpl_vars['__smarty_foreach_{$attributes['name']}']"; - if (!empty($namedAttr)) { - $saveVars['saved'] = "isset({$foreachVar}) ? {$foreachVar} : false;"; - $restoreVars[] = "if ({$local}saved) {\n{$foreachVar} = {$local}saved;\n}\n"; - } - } - foreach (array('item', 'key') as $a) { - if (isset($attributes[$a])) { - $saveVars['saved_' . $a] = - "isset(\$_smarty_tpl->tpl_vars['{$attributes[$a]}']) ? \$_smarty_tpl->tpl_vars['{$attributes[$a]}'] : false;"; - $restoreVars[] = - "if ({$local}saved_{$a}) {\n\$_smarty_tpl->tpl_vars['{$attributes[$a]}'] = {$local}saved_{$a};\n}\n"; - } - } - $this->openTag($compiler, 'foreach', - array('foreach', $compiler->nocache, $local, $restoreVars, $itemVar, true)); - // maybe nocache because of nocache variables - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - - // generate output code - $output = "<?php\n"; - $output .= "\$_from = $from;\n"; - $output .= "if (!is_array(\$_from) && !is_object(\$_from)) {\n"; - $output .= "settype(\$_from, 'array');\n"; - $output .= "}\n"; - foreach ($saveVars as $k => $code) { - $output .= "{$local}{$k} = {$code}\n"; - } - if (isset($itemAttr['show']) || isset($itemAttr['total']) || isset($namedAttr['total']) || isset($namedAttr['show']) || isset($itemAttr['last']) || isset($namedAttr['last'])) { - $output .= "{$local}total = \$_smarty_tpl->smarty->ext->_foreach->count(\$_from);\n"; - } - $output .= "{$itemVar} = new Smarty_Variable();\n"; - if (isset($itemAttr['show'])) { - $output .= "{$itemVar}->show = ({$local}total > 0);\n"; - } - if (isset($itemAttr['total'])) { - $output .= "{$itemVar}->total= {$local}total;\n"; - } - if ($this->isNamed) { - $prop = array(); - if (isset($namedAttr['total'])) { - $prop['total'] = "'total' => {$local}total"; - } - if (isset($namedAttr['iteration'])) { - $prop['iteration'] = "'iteration' => 0"; - } - if (isset($namedAttr['index'])) { - $prop['index'] = "'index' => -1"; - } - if (isset($namedAttr['show'])) { - $prop['show'] = "'show' => ({$local}total > 0)"; - } - if (!empty($namedAttr)) { - $_vars = 'array(' . join(', ', $prop) . ')'; - $output .= "{$foreachVar} = new Smarty_Variable({$_vars});\n"; - } - } - if (isset($attributes['key'])) { - $output .= "\$_smarty_tpl->tpl_vars['{$key}'] = new Smarty_Variable();\n"; - } - if (isset($namedAttr['first']) || isset($itemAttr['first'])) { - $output .= "{$local}first = true;\n"; - } - if (isset($itemAttr['iteration'])) { - $output .= "{$itemVar}->iteration=0;\n"; - } - if (isset($itemAttr['index'])) { - $output .= "{$itemVar}->index=-1;\n"; - } - if ($needIteration) { - $output .= "{$local}iteration=0;\n"; - } - $output .= "{$itemVar}->_loop = false;\n"; - $output .= "foreach (\$_from as {$keyTerm}{$itemVar}->value) {\n"; - $output .= "{$itemVar}->_loop = true;\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 ($needIteration) { - $output .= "{$local}iteration++;\n"; - } - if (isset($itemAttr['first'])) { - $output .= "{$itemVar}->first = {$local}first;\n"; - } - if (isset($itemAttr['last'])) { - $output .= "{$itemVar}->last = {$local}iteration == {$local}total;\n"; - } - if ($this->isNamed) { - 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'] = {$local}first;\n"; - } - if (isset($namedAttr['last'])) { - $output .= "{$foreachVar}->value['last'] = {$local}iteration == {$local}total;\n"; - } - } - if (isset($namedAttr['first']) || isset($itemAttr['first'])) { - $output .= "{$local}first = false;\n"; - } - $output .= "{$local}saved_local_item = {$itemVar};\n"; - $output .= "?>"; - - return $output; - } -} - -/** - * Smarty Internal Plugin Compile Foreachelse Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {foreachelse} tag - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - list($openTag, $nocache, $local, $restoreVars, $itemVar, $foo) = $this->closeTag($compiler, array('foreach')); - $this->openTag($compiler, 'foreachelse', array('foreachelse', $nocache, $local, $restoreVars, $itemVar, false)); - $output = "<?php\n"; - $output .= "{$itemVar} = {$local}saved_local_item;\n"; - $output .= "}\n"; - $output .= "if (!{$itemVar}->_loop) {\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 - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - $compiler->loopNesting --; - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - - list($openTag, $compiler->nocache, $local, $restoreVars, $itemVar, $restore) = - $this->closeTag($compiler, array('foreach', 'foreachelse')); - $output = "<?php\n"; - - if ($restore) { - $output .= "{$itemVar} = {$local}saved_local_item;\n"; - } - $output .= "}\n"; - foreach ($restoreVars as $restore) { - $output .= $restore; - } - $output .= "?>"; - - return $output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_function.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_function.php deleted file mode 100644 index 28f335949..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_function.php +++ /dev/null @@ -1,210 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Function - * Compiles the {function} {/function} tags - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Function Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase -{ - - /** - * 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 $optional_attributes = array('_any'); - - /** - * Compiles code for the {function} 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 - * @throws \SmartyCompilerException - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - $compiler->loopNesting++; - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - if ($_attr['nocache'] === true) { - $compiler->trigger_template_error('nocache option not allowed', null, true); - } - unset($_attr['nocache']); - $_name = trim($_attr['name'], "'\""); - $compiler->parent_compiler->tpl_function[$_name] = $compiler->parent_compiler->template->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; - 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 - * @param array $parameter array with compilation parameter - * - * @return bool true - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - $compiler->loopNesting--; - $this->compiler = $compiler; - $saved_data = $this->closeTag($compiler, array('function')); - $_attr = $saved_data[0]; - $_name = trim($_attr['name'], "'\""); - $compiler->parent_compiler->tpl_function[$_name]['called_functions'] = $compiler->parent_compiler->template->tpl_function[$_name]['called_functions'] = $compiler->called_functions; - $compiler->parent_compiler->tpl_function[$_name]['compiled_filepath'] = $compiler->parent_compiler->template->tpl_function[$_name]['compiled_filepath'] = $compiler->parent_compiler->template->compiled->filepath; - $compiler->parent_compiler->tpl_function[$_name]['uid'] = $compiler->parent_compiler->template->tpl_function[$_name]['uid'] = $compiler->template->source->uid; - $compiler->called_functions = array(); - $_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'] = $compiler->parent_compiler->template->tpl_function[$_name]['call_name_caching'] = $_funcNameCaching; - $output = "<?php\n"; - $output .= "/* {$_funcNameCaching} */\n"; - $output .= "if (!function_exists('{$_funcNameCaching}')) {\n"; - $output .= "function {$_funcNameCaching} (\$_smarty_tpl,\$params) {\n"; - $output .= "ob_start();\n"; - $output .= "\$_smarty_tpl->compiled->has_nocache_code = true;\n"; - $output .= $_paramsCode; - $output .= "\$_smarty_tpl->_cache['saved_tpl_vars'][] = \$_smarty_tpl->tpl_vars;\n"; - $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value);\n}"; - $output .= "\$params = var_export(\$params, true);\n"; - $output .= "echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/<?php "; - $output .= "\\\$saved_tpl_vars = \\\$_smarty_tpl->tpl_vars;\nforeach (\$params as \\\$key => \\\$value) {\n\\\$_smarty_tpl->tpl_vars[\\\$key] = new Smarty_Variable(\\\$value);\n}\n?>"; - $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\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 = "<?php echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/<?php "; - $output .= "foreach (Smarty::\\\$global_tpl_vars as \\\$key => \\\$value){\n"; - $output .= "if (!isset(\\\$_smarty_tpl->tpl_vars[\\\$key]) || \\\$_smarty_tpl->tpl_vars[\\\$key] === \\\$value) \\\$saved_tpl_vars[\\\$key] = \\\$value;\n}\n"; - $output .= "\\\$_smarty_tpl->tpl_vars = \\\$saved_tpl_vars;?>\n"; - $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\";\n?>"; - $output .= "<?php echo str_replace('{$compiler->template->compiled->nocache_hash}', \$_smarty_tpl->compiled->nocache_hash, ob_get_clean());\n"; - $output .= "\$_smarty_tpl->tpl_vars = array_pop(\$_smarty_tpl->_cache['saved_tpl_vars']);\n}\n}\n"; - $output .= "/*/ {$_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'] = $compiler->parent_compiler->template->tpl_function[$_name]['call_name'] = $_funcName; - $output = "<?php\n"; - $output .= "/* {$_funcName} */\n"; - $output .= "if (!function_exists('{$_funcName}')) {\n"; - $output .= "function {$_funcName}(\$_smarty_tpl,\$params) {\n"; - $output .= "\$saved_tpl_vars = \$_smarty_tpl->tpl_vars;\n"; - $output .= $_paramsCode; - $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value);\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 = "<?php foreach (Smarty::\$global_tpl_vars as \$key => \$value){\n"; - $output .= "if (!isset(\$_smarty_tpl->tpl_vars[\$key]) || \$_smarty_tpl->tpl_vars[\$key] === \$value) \$saved_tpl_vars[\$key] = \$value;\n}\n"; - $output .= "\$_smarty_tpl->tpl_vars = \$saved_tpl_vars;\n}\n}\n"; - $output .= "/*/ {$_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); - // nocache plugins must be copied - if (!empty($compiler->template->compiled->required_plugins['nocache'])) { - foreach ($compiler->template->compiled->required_plugins['nocache'] as $plugin => $tmp) { - foreach ($tmp as $type => $data) { - $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$plugin][$type] = $data; - } - } - } - // restore old buffer - - $compiler->parser->current_buffer = $saved_data[1]; - // restore old status - $compiler->template->compiled->has_nocache_code = $saved_data[2]; - $compiler->template->caching = $saved_data[3]; - return true; - } - - /** - * @param $match - * - * @return mixed - */ - 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/library/Smarty/libs/sysplugins/smarty_internal_compile_if.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_if.php deleted file mode 100644 index 541e21816..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_if.php +++ /dev/null @@ -1,252 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile If - * Compiles the {if} {else} {elseif} {/if} tags - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile If Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_If 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 - * @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); - $this->openTag($compiler, 'if', array(1, $compiler->nocache)); - // must whole block be nocache ? - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - - if (!array_key_exists("if condition", $parameter)) { - $compiler->trigger_template_error("missing if condition", null, true); - } - - if (is_array($parameter['if condition'])) { - if ($compiler->nocache) { - $_nocache = ',true'; - // create nocache var to make it know for further compiling - if (is_array($parameter['if condition']['var'])) { - $var = trim($parameter['if condition']['var']['var'], "'"); - } else { - $var = trim($parameter['if condition']['var'], "'"); - } - 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); - } - } else { - $_nocache = ''; - } - if (is_array($parameter['if condition']['var'])) { - $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . - "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . - "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . $parameter['if condition']['var']['var'] . - "$_nocache);\n"; - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . - $parameter['if condition']['var']['smarty_internal_index'] . " = " . - $parameter['if condition']['value'] . ") {?>"; - } else { - $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . - "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . - "] = new Smarty_Variable(null{$_nocache});"; - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . - $parameter['if condition']['value'] . ") {?>"; - } - - return $_output; - } else { - return "<?php if ({$parameter['if condition']}) {?>"; - } - } -} - -/** - * 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 - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif')); - $this->openTag($compiler, 'else', array($nesting, $compiler->tag_nocache)); - - return "<?php } else { ?>"; - } -} - -/** - * 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 (!array_key_exists("if condition", $parameter)) { - $compiler->trigger_template_error("missing elseif condition", null, true); - } - - if (is_array($parameter['if condition'])) { - $condition_by_assign = true; - if ($compiler->nocache) { - $_nocache = ',true'; - // create nocache var to make it know for further compiling - if (is_array($parameter['if condition']['var'])) { - $var = trim($parameter['if condition']['var']['var'], "'"); - } else { - $var = trim($parameter['if condition']['var'], "'"); - } - 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); - } - } else { - $_nocache = ''; - } - } else { - $condition_by_assign = false; - } - - if (empty($compiler->prefix_code)) { - if ($condition_by_assign) { - $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache)); - if (is_array($parameter['if condition']['var'])) { - $_output = "<?php } else { if (!isset(\$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var']['var'] . - "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . - $parameter['if condition']['var']['var'] . "$_nocache);\n"; - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . - $parameter['if condition']['var']['smarty_internal_index'] . " = " . - $parameter['if condition']['value'] . ") {?>"; - } else { - $_output = "<?php } else { if (!isset(\$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});"; - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . - $parameter['if condition']['value'] . ") {?>"; - } - - return $_output; - } else { - $this->openTag($compiler, 'elseif', array($nesting, $compiler->tag_nocache)); - - return "<?php } elseif ({$parameter['if condition']}) {?>"; - } - } else { - $tmp = ''; - foreach ($compiler->prefix_code as $code) { - $tmp = $compiler->appendCode($tmp, $code); - } - $compiler->prefix_code = array(); - $tmp = $compiler->appendCode("<?php } else {?>", $tmp); - $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache)); - if ($condition_by_assign) { - if (is_array($parameter['if condition']['var'])) { - $_output = $compiler->appendCode($tmp, "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var']['var'] . - "]) || !is_array(\$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var']['var'] . - "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . - $parameter['if condition']['var']['var'] . "$_nocache);\n"); - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . - $parameter['if condition']['var']['smarty_internal_index'] . " = " . - $parameter['if condition']['value'] . ") {?>"; - } else { - $_output = $compiler->appendCode($tmp, "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var'] . - "])) \$_smarty_tpl->tpl_vars[" . - $parameter['if condition']['var'] . - "] = new Smarty_Variable(null{$_nocache});"); - $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . - $parameter['if condition']['value'] . ") {?>"; - } - - return $_output; - } else { - return $compiler->appendCode($tmp, "<?php if ({$parameter['if condition']}) {?>"); - } - } - } -} - -/** - * 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 - * @param array $parameter array with compilation parameter - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - list($nesting, $compiler->nocache) = $this->closeTag($compiler, array('if', 'else', 'elseif')); - $tmp = ''; - for ($i = 0; $i < $nesting; $i ++) { - $tmp .= '}'; - } - - return "<?php {$tmp}?>"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_include.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_include.php deleted file mode 100644 index 09fa11d6c..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_include.php +++ /dev/null @@ -1,366 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Include - * Compiles the {include} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Include Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase -{ - /** - * caching mode to create nocache code but no cache file - */ - const CACHING_NOCACHE_CODE = 9999; - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('file'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('file'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $option_flags = array('nocache', 'inline', 'caching', 'bubble_up'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Valid scope names - * - * @var array - */ - public $valid_scopes = array('local' => true, 'parent' => true, 'root' => true, 'global' => true, - 'smarty' => true, 'tpl_root' => true); - - /** - * Compiles code for the {include} tag - * - * @param array $args array with attributes from parser - * @param Smarty_Internal_SmartyTemplateCompiler $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @throws SmartyCompilerException - * @return string compiled code - */ - public function compile($args, Smarty_Internal_SmartyTemplateCompiler $compiler, $parameter) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - $hashResourceName = $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 { - $compiled->includes[$fullResourceName] = 1; - } - $fullResourceName = '"' . $fullResourceName . '"'; - } - } - if (empty($match[5])) { - $variable_template = true; - } - } else { - $variable_template = true; - } - - if (isset($_attr['assign'])) { - // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr['assign']; - } - - // scope setup - $_scope = Smarty::SCOPE_LOCAL; - if (isset($_attr['scope'])) { - $_attr['scope'] = trim($_attr['scope'], "'\""); - if (!isset($this->valid_scopes[$_attr['scope']])) { - $compiler->trigger_template_error("illegal value '{$_attr['scope']}' for \"scope\" attribute", null, true); - } - if ($_attr['scope'] != 'local') { - if ($_attr['scope'] == 'parent') { - $_scope = Smarty::SCOPE_PARENT; - } elseif ($_attr['scope'] == 'root') { - $_scope = Smarty::SCOPE_ROOT; - } elseif ($_attr['scope'] == 'global') { - $_scope = Smarty::SCOPE_GLOBAL; - } elseif ($_attr['scope'] == 'smarty') { - $_scope = Smarty::SCOPE_SMARTY; - } elseif ($_attr['scope'] == 'tpl_root') { - $_scope = Smarty::SCOPE_TPL_ROOT; - } - if ($_attr['bubble_up'] === true) { - $_scope = $_scope + Smarty::SCOPE_BUBBLE_UP; - } - } - } - - // 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; - - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - - $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 && $_attr['inline'] !== true) { - // variable template name ? - if ($variable_template) { - $merge_compiled_includes = false; - if ($compiler->template->caching) { - // must use individual cache file - //$_attr['caching'] = 1; - } - } - // variable compile_id? - if (isset($_attr['compile_id'])) { - if (!((substr_count($_attr['compile_id'], '"') == 2 || substr_count($_attr['compile_id'], "'") == 2 || - is_numeric($_attr['compile_id']))) || substr_count($_attr['compile_id'], '(') != 0 || - substr_count($_attr['compile_id'], '$_smarty_tpl->') != 0 - ) { - $merge_compiled_includes = false; - if ($compiler->template->caching) { - // must use individual cache file - //$_attr['caching'] = 1; - } - } - } - } - - /* - * 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; - } - - $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')); - if (!isset($compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash])) { - $has_compiled_template = - $this->compileInlineTemplate($compiler, $fullResourceName, $_caching, $hashResourceName, $t_hash, - $c_id); - } else { - $has_compiled_template = true; - } - } - // delete {include} standard attributes - unset($_attr['file'], $_attr['assign'], $_attr['cache_id'], $_attr['compile_id'], $_attr['cache_lifetime'], $_attr['nocache'], $_attr['caching'], $_attr['scope'], $_attr['inline'], $_attr['bubble_up']); - // remaining attributes must be assigned as smarty variable - $_vars_nc = ''; - if (!empty($_attr)) { - if ($_scope == Smarty::SCOPE_LOCAL) { - $_pairs = array(); - // create variables - foreach ($_attr as $key => $value) { - $_pairs[] = "'$key'=>$value"; - $_vars_nc .= "\$_smarty_tpl->tpl_vars['$key'] = new Smarty_Variable($value);\n"; - } - $_vars = 'array(' . join(',', $_pairs) . ')'; - } else { - $compiler->trigger_template_error('variable passing not allowed in parent/global scope', null, true); - } - } else { - $_vars = 'array()'; - } - $update_compile_id = $compiler->template->caching && !$compiler->tag_nocache && !$compiler->nocache && - $_compile_id != '$_smarty_tpl->compile_id'; - if ($has_compiled_template && !$call_nocache) { - $_output = "<?php\n"; - if ($update_compile_id) { - $_output .= $compiler->makeNocacheCode("\$_compile_id_save[] = \$_smarty_tpl->compile_id;\n\$_smarty_tpl->compile_id = {$_compile_id};\n"); - } - if (!empty($_vars_nc) && $_caching == 9999 && $compiler->template->caching) { - //$compiler->suppressNocacheProcessing = false; - $_output .= substr($compiler->processNocacheCode('<?php ' . $_vars_nc . "?>\n", true), 6, - 3); - //$compiler->suppressNocacheProcessing = true; - } - if (isset($_assign)) { - $_output .= "ob_start();\n"; - } - $_output .= "\$_smarty_tpl->smarty->ext->_subtemplate->render(\$_smarty_tpl, {$fullResourceName}, {$_cache_id}, {$_compile_id}, {$_caching}, {$_cache_lifetime}, {$_vars}, {$_scope}, {$_cache_tpl}, '{$compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash]['uid']}', '{$compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$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 .= "?>\n"; - - return $_output; - } - - if ($call_nocache) { - $compiler->tag_nocache = true; - } - $_output = "<?php "; - if ($update_compile_id) { - $_output .= "\$_compile_id_save[] = \$_smarty_tpl->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->smarty->ext->_subtemplate->render(\$_smarty_tpl, {$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 .= "?>\n"; - return $_output; - } - - /** - * Compile inline sub template - * - * @param \Smarty_Internal_SmartyTemplateCompiler $compiler - * @param $fullResourceName - * @param $_caching - * @param $hashResourceName - * @param $t_hash - * @param $c_id - * - * @return bool - */ - public function compileInlineTemplate(Smarty_Internal_SmartyTemplateCompiler $compiler, $fullResourceName, - $_caching, $hashResourceName, $t_hash, $c_id) - { - $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); - if (!($tpl->source->handler->uncompiled) && $tpl->source->exists) { - $compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$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[$hashResourceName][$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[$hashResourceName][$t_hash]['nocache_hash'] = - $tpl->compiled->nocache_hash; - // get compiled code - $compiled_code = "<?php\n\n"; - $compiled_code .= "/* Start inline template \"{$tpl->source->type}:{$tpl->source->name}\" =============================*/\n"; - $compiled_code .= "function {$tpl->compiled->unifunc} (\$_smarty_tpl) {\n"; - $compiled_code .= "?>\n" . $tpl->compiler->compileTemplateSource($tpl, null, $compiler->parent_compiler); - $compiled_code .= "<?php\n"; - $compiled_code .= "}\n?>\n"; - $compiled_code .= $tpl->compiler->postFilter($tpl->compiler->blockOrFunctionCode); - $compiled_code .= "<?php\n\n"; - $compiled_code .= "/* End inline template \"{$tpl->source->type}:{$tpl->source->name}\" =============================*/\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/library/Smarty/libs/sysplugins/smarty_internal_compile_include_php.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_include_php.php deleted file mode 100644 index e7e62997c..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_include_php.php +++ /dev/null @@ -1,111 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Include PHP - * Compiles the {include_php} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Insert Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('file'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('file'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('once', 'assign'); - - /** - * Compiles code for the {include_php} tag - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * - * @return string - * @throws \SmartyCompilerException - * @throws \SmartyException - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) - { - if (!($compiler->smarty instanceof SmartyBC)) { - throw new SmartyException("{include_php} is deprecated, use SmartyBC class to enable"); - } - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - - /** @var Smarty_Internal_Template $_smarty_tpl - * used in evaluated code - */ - $_smarty_tpl = $compiler->template; - $_filepath = false; - $_file = null; - eval('$_file = @' . $_attr['file'] . ';'); - if (!isset($compiler->smarty->security_policy) && file_exists($_file)) { - $_filepath = $compiler->smarty->_realpath($_file, true); - } else { - if (isset($compiler->smarty->security_policy)) { - $_dir = $compiler->smarty->security_policy->trusted_dir; - } else { - $_dir = $compiler->smarty->trusted_dir; - } - if (!empty($_dir)) { - foreach ((array) $_dir as $_script_dir) { - $_path = $compiler->smarty->_realpath($_script_dir . DS . $_file, true); - if (file_exists($_path)) { - $_filepath = $_path; - break; - } - } - } - } - 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'])) { - // output will be stored in a smarty variable instead of being displayed - $_assign = $_attr['assign']; - } - $_once = '_once'; - if (isset($_attr['once'])) { - if ($_attr['once'] == 'false') { - $_once = ''; - } - } - - if (isset($_assign)) { - return "<?php ob_start();\ninclude{$_once} ('{$_filepath}');\n\$_smarty_tpl->assign({$_assign},ob_get_clean());\n?>"; - } else { - return "<?php include{$_once} ('{$_filepath}');?>\n"; - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_insert.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_insert.php deleted file mode 100644 index 2ebde1661..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_insert.php +++ /dev/null @@ -1,151 +0,0 @@ -<?php - -/** - * Smarty Internal Plugin Compile Insert - * Compiles the {insert} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Insert Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase -{ - /** - * 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 $optional_attributes = array('_any'); - - /** - * Compiles code for the {insert} 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); - $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 = '<?php '; - // save possible attributes - eval('$_name = @' . $_attr['name'] . ';'); - if (isset($_attr['assign'])) { - // output will be stored in a smarty variable instead of being displayed - $_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'])) { - // script which must be included - $_function = "smarty_insert_{$_name}"; - $_smarty_tpl = $compiler->template; - $_filepath = false; - 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; - } - if (!empty($_dir)) { - foreach ((array) $_dir as $_script_dir) { - $_script_dir = rtrim($_script_dir, '/\\') . DS; - if (file_exists($_script_dir . $_script)) { - $_filepath = $_script_dir . $_script; - break; - } - } - } - } - 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; - if (!is_callable($_function)) { - $compiler->trigger_template_error(" {insert} function '{$_function}' is not callable in script file '{$_script}'", null, true); - } - } else { - $_filepath = 'null'; - $_function = "insert_{$_name}"; - // function in PHP script ? - if (!is_callable($_function)) { - // try plugin - if (!$_function = $compiler->getPlugin($_name, 'insert')) { - $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']); - // convert attributes into parameter array string - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - $_paramsArray[] = "'$_key' => $_value"; - } - $_params = 'array(' . implode(", ", $_paramsArray) . ')'; - // call insert - if (isset($_assign)) { - 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 && !$nocacheParam) { - $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}');?>"; - } else { - $_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>"; - } - } - - return $_output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_ldelim.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_ldelim.php deleted file mode 100644 index 8c6b701e1..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_ldelim.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Ldelim - * Compiles the {ldelim} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Ldelim Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {ldelim} tag - * This tag does output the left delimiter - * - * @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) - { - $_attr = $this->getAttributes($compiler, $args); - 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/library/Smarty/libs/sysplugins/smarty_internal_compile_nocache.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_nocache.php deleted file mode 100644 index b29a993aa..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_nocache.php +++ /dev/null @@ -1,75 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Nocache - * Compiles the {nocache} {/nocache} tags. - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Nocache Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase -{ - /** - * Array of names of valid option flags - * - * @var array - */ - public $option_flags = array(); - - /** - * 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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * - * @return bool - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) - { - $_attr = $this->getAttributes($compiler, $args); - $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 - * @subpackage Compiler - */ -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 \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * - * @return bool - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) - { - $_attr = $this->getAttributes($compiler, $args); - // leave nocache mode - list($compiler->nocache) = $this->closeTag($compiler, array('nocache')); - // this tag does not return compiled code - $compiler->has_code = false; - - return true; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php deleted file mode 100644 index 9e2eea233..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php +++ /dev/null @@ -1,89 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Block Plugin - * Compiles code for the execution of block plugin - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Block Plugin Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the execution of block plugin - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * @param string $tag name of block plugin - * @param string $function PHP function name - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $function) - { - if (!isset($tag[5]) || substr($tag, - 5) != 'close') { - // opening tag of block plugin - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - // convert attributes into parameter array string - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - - $this->openTag($compiler, $tag, array($_params, $compiler->nocache)); - // maybe nocache because of nocache variables or nocache plugin - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - // compile code - $output = "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } else { - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - // closing tag of block plugin, restore nocache - list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, - 5)); - // This tag does create output - $compiler->has_output = true; - // compile code - if (!isset($parameter['modifier_list'])) { - $mod_pre = $mod_post = ''; - } else { - $mod_pre = ' ob_start(); '; - $mod_post = 'echo ' . - $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], - 'value' => 'ob_get_clean()')) . ';'; - } - $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . - " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . - " } array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>"; - } - - return $output . "\n"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php deleted file mode 100644 index 16f233359..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php +++ /dev/null @@ -1,220 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile ForeachSection - * Shared methods for {foreach} {section} tags - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile ForeachSection Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_ForeachSection extends Smarty_Internal_CompileBase -{ - - /** - * Preg search pattern - * - * @var string - */ - private $propertyPreg = ''; - - /** - * Offsets in preg match result - * - * @var array - */ - private $resultOffsets = array(); - - /** - * Start offset - * - * @var int - */ - private $startOffset = 0; - - /** - * Name of this tag - * - * @var string - */ - public $tagName = ''; - - /** - * Valid properties of $smarty.xxx variable - * - * @var array - */ - public $nameProperties = array(); - - /** - * {section} tag has no item properties - * - * @var array - */ - public $itemProperties = null; - - /** - * {section} tag has always name attribute - * - * @var bool - */ - public $isNamed = true; - - /** - * @var array - */ - public $matchResults = array(); - - /** - * Scan sources for used tag attributes - * - * @param array $attributes - * @param \Smarty_Internal_TemplateCompilerBase $compiler - */ - public function scanForProperties($attributes, Smarty_Internal_TemplateCompilerBase $compiler) - { - $this->propertyPreg = '~('; - $this->startOffset = 0; - $this->resultOffsets = array(); - $this->matchResults = array('named' => array(), 'item' => array()); - if ($this->isNamed) { - $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 + 3; - $this->propertyPreg .= "([\$]smarty[.]{$this->tagName}[.]{$attributes['name']}[.]("; - $properties = $this->nameProperties; - } else { - $this->resultOffsets['item'] = $this->startOffset + 3; - $this->propertyPreg .= "([\$]{$attributes['item']}[@]("; - $properties = $this->itemProperties; - } - $this->startOffset += count($properties) + 2; - $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, PREG_SET_ORDER); - foreach ($this->resultOffsets as $key => $offset) { - foreach ($match as $m) { - if (isset($m[$offset]) && !empty($m[$offset])) { - $this->matchResults[$key][strtolower($m[$offset])] = 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 - */ - 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->_filter_Handler->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)"; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php deleted file mode 100644 index 0d0ab8138..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php +++ /dev/null @@ -1,72 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Function Plugin - * Compiles code for the execution of function plugin - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Function Plugin Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array(); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the execution of function plugin - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * @param string $tag name of function plugin - * @param string $function PHP function name - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $function) - { - // This tag does create output - $compiler->has_output = true; - - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - // convert attributes into parameter array string - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - // compile code - $output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n"; - - return $output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php deleted file mode 100644 index 9594d2ae7..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php +++ /dev/null @@ -1,155 +0,0 @@ -<?php - -/** - * Smarty Internal Plugin Compile Modifier - * Compiles code for modifier execution - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Modifier Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for modifier execution - * - * @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); - $output = $parameter['value']; - // loop over list of modifiers - foreach ($parameter['modifierlist'] as $single_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])) { - $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0]; - if (!is_array($function)) { - $output = "{$function}({$params})"; - } else { - if (is_object($function[0])) { - $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . - $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')'; - } else { - $output = $function[0] . '::' . $function[1] . '(' . $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 = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . - $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')'; - } else { - $output = $function[0] . '::' . $function[1] . '(' . $params . ')'; - } - } - } - if (isset($compiler->parent_compiler->template->compiled->required_plugins['nocache'][$modifier][Smarty::PLUGIN_MODIFIER]['file']) || - isset($compiler->parent_compiler->template->compiled->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/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php deleted file mode 100644 index d2bc5d60c..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php +++ /dev/null @@ -1,91 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Object Block Function - * Compiles code for registered objects as block function - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Object Block Function Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Internal_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the execution of block plugin - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * @param string $tag name of block object - * @param string $method name of method to call - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $method) - { - if (!isset($tag[5]) || substr($tag, - 5) != 'close') { - // opening tag of block plugin - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - // convert attributes into parameter array string - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - - $this->openTag($compiler, $tag . '->' . $method, array($_params, $compiler->nocache)); - // maybe nocache because of nocache variables or nocache plugin - $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; - // compile code - $output = - "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}->{$method}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } else { - $base_tag = substr($tag, 0, - 5); - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - // closing tag of block plugin, restore nocache - list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag . '->' . $method); - // This tag does create output - $compiler->has_output = true; - // compile code - if (!isset($parameter['modifier_list'])) { - $mod_pre = $mod_post = ''; - } else { - $mod_pre = ' ob_start(); '; - $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), - array('modifierlist' => $parameter['modifier_list'], - 'value' => 'ob_get_clean()')) . ';'; - } - $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . - " echo \$_smarty_tpl->smarty->registered_objects['{$base_tag}'][0]->{$method}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . - $mod_post . " } array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>"; - } - - return $output . "\n"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php deleted file mode 100644 index e306e0f6d..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php +++ /dev/null @@ -1,84 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Object Function - * Compiles code for registered objects as function - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Object Function Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the execution of function plugin - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * @param string $tag name of function - * @param string $method name of method to call - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $method) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - $_assign = null; - if (isset($_attr['assign'])) { - $_assign = $_attr['assign']; - unset($_attr['assign']); - } - // method or property ? - if (method_exists($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) . ')'; - $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)"; - } else { - $_params = implode(",", $_attr); - $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})"; - } - } else { - // object property - $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}"; - } - - if (empty($_assign)) { - // This tag does create output - $compiler->has_output = true; - $output = "<?php echo {$return};?>\n"; - } else { - $output = "<?php \$_smarty_tpl->assign({$_assign},{$return});?>\n"; - } - - return $output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_php.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_php.php deleted file mode 100644 index 3ca63a548..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_php.php +++ /dev/null @@ -1,209 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile PHP Expression - * Compiles any tag which will output an expression or variable - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile PHP Expression Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase -{ - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('code', 'type'); - - /** - * Compiles code for generating output from any expression - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string - * @throws \SmartyException - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - $compiler->has_code = false; - if ($_attr['type'] == 'xml') { - $compiler->tag_nocache = true; - $save = $compiler->template->compiled->has_nocache_code; - $output = addcslashes($_attr['code'], "'\\"); - $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $compiler->processNocacheCode("<?php echo '" . - $output . - "';?>", $compiler, true))); - $compiler->template->compiled->has_nocache_code = $save; - 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|=)?)|(<%)|(<script\s+language\s*=\s*["\']?\s*php\s*["\']?\s*>)|(\?>)|(%>)|(<\/script>)#i', array($this, - 'quote'), $_attr['code']); - $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Text($output)); - return ''; - } elseif ($compiler->php_handling == Smarty::PHP_PASSTHRU || $_attr['type'] == 'unmatched') { - $compiler->tag_nocache = true; - $save = $compiler->template->compiled->has_nocache_code; - $output = addcslashes($_attr['code'], "'\\"); - $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $compiler->processNocacheCode("<?php echo '" . - $output . - "';?>", $compiler, true))); - $compiler->template->compiled->has_nocache_code = $save; - return ''; - } elseif ($compiler->php_handling == Smarty::PHP_ALLOW) { - if (!($compiler->smarty instanceof SmartyBC)) { - $compiler->trigger_template_error('$smarty->php_handling PHP_ALLOW not allowed. Use SmartyBC to enable it', null, true); - } - $compiler->has_code = true; - return $_attr['code']; - } else { - $compiler->trigger_template_error('Illegal $smarty->php_handling value', null, true); - } - } else { - $compiler->has_code = true; - if (!($compiler->smarty instanceof SmartyBC)) { - $compiler->trigger_template_error('{php}{/php} tags not allowed. Use SmartyBC to enable them', null, true); - } - $ldel = preg_quote($compiler->smarty->left_delimiter, '#'); - $rdel = preg_quote($compiler->smarty->right_delimiter, '#'); - preg_match("#^({$ldel}php\\s*)((.)*?)({$rdel})#", $_attr['code'], $match); - if (!empty($match[2])) { - if ('nocache' == trim($match[2])) { - $compiler->tag_nocache = true; - } else { - $compiler->trigger_template_error("illegal value of option flag \"{$match[2]}\"", null, true); - } - } - return preg_replace(array("#^{$ldel}\\s*php\\s*(.)*?{$rdel}#", - "#{$ldel}\\s*/\\s*php\\s*{$rdel}$#"), array('<?php ', '?>'), $_attr['code']); - } - } - - /** - * Lexer code for PHP tags - * - * This code has been moved from lexer here fo easier debugging and maintenance - * - * @param $lex - */ - public function parsePhp($lex) - { - $lex->token = Smarty_Internal_Templateparser::TP_PHP; - $close = 0; - $lex->taglineno = $lex->line; - $closeTag = '?>'; - if (strpos($lex->value, '<?xml') === 0) { - $lex->is_xml = true; - $lex->token = Smarty_Internal_Templateparser::TP_NOCACHE; - return; - } elseif (strpos($lex->value, '<?') === 0) { - $lex->phpType = 'php'; - } elseif (strpos($lex->value, '<%') === 0) { - $lex->phpType = 'asp'; - $closeTag = '%>'; - } elseif (strpos($lex->value, '%>') === 0) { - $lex->phpType = 'unmatched'; - } elseif (strpos($lex->value, '?>') === 0) { - if ($lex->is_xml) { - $lex->is_xml = false; - $lex->token = Smarty_Internal_Templateparser::TP_NOCACHE; - return; - } - $lex->phpType = 'unmatched'; - } elseif (strpos($lex->value, '<s') === 0) { - $lex->phpType = 'script'; - $closeTag = '</script>'; - } 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/library/Smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php deleted file mode 100644 index c0c089bff..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php +++ /dev/null @@ -1,156 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Print Expression - * Compiles any tag which will output an expression or variable - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Print Expression Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('assign'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $option_flags = array('nocache', 'nofilter'); - - /** - * Compiles code for generating output from any expression - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * - * @return string - * @throws \SmartyException - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - // nocache option - if ($_attr['nocache'] === true) { - $compiler->tag_nocache = true; - } - if (isset($_attr['assign'])) { - // assign output to variable - $output = "<?php \$_smarty_tpl->assign({$_attr['assign']},{$parameter['value']});?>"; - } else { - // display value - $output = $parameter['value']; - // tag modifier - if (!empty($parameter['modifierlist'])) { - $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifierlist'], - 'value' => $output)); - } - if (!$_attr['nofilter']) { - // default modifier - if (!empty($compiler->smarty->default_modifiers)) { - if (empty($compiler->default_modifier_list)) { - $modifierlist = array(); - foreach ($compiler->smarty->default_modifiers as $key => $single_default_modifier) { - preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array); - for ($i = 0, $count = count($mod_array[0]); $i < $count; $i ++) { - if ($mod_array[0][$i] != ':') { - $modifierlist[$key][] = $mod_array[0][$i]; - } - } - } - $compiler->default_modifier_list = $modifierlist; - } - $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $compiler->default_modifier_list, - 'value' => $output)); - } - // autoescape html - if ($compiler->template->smarty->escape_html) { - $output = "htmlspecialchars({$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')"; - } - // loop over registered filters - if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) { - foreach ($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => - $function) { - if (!is_array($function)) { - $output = "{$function}({$output},\$_smarty_tpl)"; - } elseif (is_object($function[0])) { - $output = "\$_smarty_tpl->smarty->registered_filters[Smarty::FILTER_VARIABLE]['{$key}'][0]->{$function[1]}({$output},\$_smarty_tpl)"; - } else { - $output = "{$function[0]}::{$function[1]}({$output},\$_smarty_tpl)"; - } - } - } - // auto loaded filters - if (isset($compiler->smarty->autoload_filters[Smarty::FILTER_VARIABLE])) { - foreach ((array) $compiler->template->smarty->autoload_filters[Smarty::FILTER_VARIABLE] as $name) { - $result = $this->compile_output_filter($compiler, $name, $output); - if ($result !== false) { - $output = $result; - } else { - // not found, throw exception - throw new SmartyException("Unable to load filter '{$name}'"); - } - } - } - foreach ($compiler->variable_filters as $filter) { - if (count($filter) == 1 && - ($result = $this->compile_output_filter($compiler, $filter[0], $output)) !== false - ) { - $output = $result; - } else { - $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => array($filter), - 'value' => $output)); - } - } - } - - $compiler->has_output = true; - $output = "<?php echo {$output};?>"; - } - - return $output; - } - - /** - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param string $name name of variable filter - * @param string $output embedded output - * - * @return string - */ - private function compile_output_filter(Smarty_Internal_TemplateCompilerBase $compiler, $name, $output) - { - $plugin_name = "smarty_variablefilter_{$name}"; - $path = $compiler->smarty->loadPlugin($plugin_name, false); - if ($path) { - if ($compiler->template->caching) { - $compiler->parent_compiler->template->compiled->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['file'] = $path; - $compiler->parent_compiler->template->compiled->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name; - } else { - $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['file'] = $path; - $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name; - } - } else { - // not found - return false; - } - - return "{$plugin_name}({$output},\$_smarty_tpl)"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php deleted file mode 100644 index 78d95f720..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php +++ /dev/null @@ -1,119 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Registered Block - * Compiles code for the execution of a registered block function - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Registered Block Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the execution of a block function - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * @param string $tag name of block function - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag) - { - if (!isset($tag[5]) || substr($tag, - 5) != 'close') { - // opening tag of block plugin - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache']) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag])) { - $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag]; - } else { - $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$tag]; - } - // convert attributes into parameter array string - $_paramsArray = array(); - foreach ($_attr as $_key => $_value) { - if (is_int($_key)) { - $_paramsArray[] = "$_key=>$_value"; - } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) { - $_value = str_replace("'", "^#^", $_value); - $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^"; - } else { - $_paramsArray[] = "'$_key'=>$_value"; - } - } - $_params = 'array(' . implode(",", $_paramsArray) . ')'; - - $this->openTag($compiler, $tag, array($_params, $compiler->nocache)); - // maybe nocache because of nocache variables or nocache plugin - $compiler->nocache = !$tag_info[1] | $compiler->nocache | $compiler->tag_nocache; - $function = $tag_info[0]; - // compile code - if (!is_array($function)) { - $output = "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } elseif (is_object($function[0])) { - $output = "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } else { - $output = "<?php \$_smarty_tpl->smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function[0]}::{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; - } - } else { - // must endblock be nocache? - if ($compiler->nocache) { - $compiler->tag_nocache = true; - } - $base_tag = substr($tag, 0, - 5); - // closing tag of block plugin, restore nocache - list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag); - // This tag does create output - $compiler->has_output = true; - if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) { - $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0]; - } else { - $function = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0]; - } - // compile code - if (!isset($parameter['modifier_list'])) { - $mod_pre = $mod_post = ''; - } else { - $mod_pre = ' ob_start(); '; - $mod_post = 'echo ' . - $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], - 'value' => 'ob_get_clean()')) . ';'; - } - if (!is_array($function)) { - $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . - " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat);" . $mod_post . - " } array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>"; - } elseif (is_object($function[0])) { - $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . - " echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . - $mod_post . "} array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>"; - } else { - $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . - " echo {$function[0]}::{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . - $mod_post . "} array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>"; - } - } - - return $output . "\n"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php deleted file mode 100644 index 6bddc7529..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php +++ /dev/null @@ -1,79 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Registered Function - * Compiles code for the execution of a registered function - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Registered Function Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Internal_CompileBase -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('_any'); - - /** - * Compiles code for the execution of a registered function - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param array $parameter array with compilation parameter - * @param string $tag name of function - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag) - { - // This tag does create output - $compiler->has_output = true; - // check and get attributes - $_attr = $this->getAttributes($compiler, $args); - if ($_attr['nocache']) { - $compiler->tag_nocache = true; - } - unset($_attr['nocache']); - if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag])) { - $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag]; - } else { - $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_FUNCTION][$tag]; - } - // not cachable? - $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) . ')'; - $function = $tag_info[0]; - // compile code - if (!is_array($function)) { - $output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n"; - } elseif (is_object($function[0])) { - $output = "<?php echo \$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0][0]->{$function[1]}({$_params},\$_smarty_tpl);?>\n"; - } else { - $output = "<?php echo {$function[0]}::{$function[1]}({$_params},\$_smarty_tpl);?>\n"; - } - - return $output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php deleted file mode 100644 index b83e824af..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php +++ /dev/null @@ -1,126 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Special Smarty Variable - * Compiles the special $smarty variables - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile special Smarty Variable Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the special $smarty variables - * - * @param array $args array with attributes from parser - * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object - * @param $parameter - * - * @return string compiled code - * @throws \SmartyCompilerException - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - $_index = preg_split("/\]\[/", substr($parameter, 1, strlen($parameter) - 2)); - $variable = strtolower($compiler->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($compiler->_tag_objects[ $variable ])) { - $class = 'Smarty_Internal_Compile_' . ucfirst($variable); - $compiler->_tag_objects[ $variable ] = new $class; - } - return $compiler->_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': - 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 "@constant('{$_index[1]}')"; - } else { - return "@constant({$_index[1]})"; - } - - 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])"; - } - 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/library/Smarty/libs/sysplugins/smarty_internal_compile_rdelim.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_rdelim.php deleted file mode 100644 index 22b33eaa2..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_rdelim.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Rdelim - * Compiles the {rdelim} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Rdelim Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for the {rdelim} tag - * This tag does output the right delimiter. - * - * @param array $args array with attributes from parser - * @param object $compiler compiler object - * - * @return string compiled code - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) - { - $_attr = $this->getAttributes($compiler, $args); - 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->right_delimiter; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_section.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_section.php deleted file mode 100644 index 40b297a64..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_section.php +++ /dev/null @@ -1,454 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Section - * Compiles the {section} {sectionelse} {/section} tags - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Section Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_ForeachSection -{ - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $required_attributes = array('name', 'loop'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $shorttag_order = array('name', 'loop'); - - /** - * Attribute definition: Overwrites base class. - * - * @var array - * @see Smarty_Internal_CompileBase - */ - public $optional_attributes = array('start', 'step', 'max', 'show'); - - /** - * counter - * - * @var int - */ - public $counter = 0; - - /** - * Name of this tag - * - * @var string - */ - public $tagName = 'section'; - - /** - * Valid properties of $smarty.section.name.xxx variable - * - * @var array - */ - public $nameProperties = array('first', 'last', 'index', 'iteration', 'show', 'total', 'rownum', - 'index_prev', 'index_next'); - - /** - * {section} tag has no item properties - * - * @var array - */ - public $itemProperties = null; - - /** - * {section} tag has always name attribute - * - * @var bool - */ - public $isNamed = true; - - /** - * 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 - * @throws \SmartyCompilerException - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) - { - $compiler->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('saved' => "isset(\$_smarty_tpl->tpl_vars['__smarty_section_{$attributes['name']}']) ? \$_smarty_tpl->tpl_vars['__smarty_section_{$attributes['name']}'] : false",); - $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']; - } - $namedAttr['index'] = true; - $output = "<?php\n"; - foreach ($_attr as $attr_name => $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 (isset($namedAttr['loop'])) { - $initNamedProperty['loop'] = "'loop' => {$v}"; - if ($t == 1) { - $v = "{$sectionVar}->value['loop']"; - } - } elseif ($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['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 "<?php }} else {\n ?>"; - } -} - -/** - * 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 = "<?php\n"; - if ($openTag == 'sectionelse') { - $output .= "}\n"; - } else { - $output .= "}\n}\n"; - } - $output .= "if ({$local}saved) {\n"; - $output .= "{$sectionVar} = {$local}saved;\n"; - $output .= "}\n"; - $output .= "?>"; - - return $output; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_setfilter.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_setfilter.php deleted file mode 100644 index b4932c1e1..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_setfilter.php +++ /dev/null @@ -1,70 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Setfilter - * Compiles code for setfilter tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Setfilter Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileBase -{ - /** - * Compiles code for setfilter 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, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - $compiler->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 object $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/library/Smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php deleted file mode 100644 index c7bf1f8fb..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php +++ /dev/null @@ -1,46 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile Shared Inheritance - * Shared methods for {extends} and {block} tags - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Shared Inheritance Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_Shared_Inheritance extends Smarty_Internal_CompileBase -{ - /** - * 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; - } - } - - /** - * Compile inheritance initialization code as prefix - * - * @param \Smarty_Internal_TemplateCompilerBase $compiler - * @param bool|false $initChildSequence if true force child template - */ - static function postCompile(Smarty_Internal_TemplateCompilerBase $compiler, $initChildSequence = false) - { - $compiler->prefixCompiledCode .= "<?php \$_smarty_tpl->ext->_inheritance->init(\$_smarty_tpl, " . - var_export($initChildSequence, true) . ");\n?>\n"; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_while.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_while.php deleted file mode 100644 index bd31f6671..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compile_while.php +++ /dev/null @@ -1,108 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Compile While - * Compiles the {while} tag - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile While Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Compile_While 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 - * @param array $parameter array with compilation parameter - * - * @return string compiled code - * @throws \SmartyCompilerException - */ - public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) - { - $compiler->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; - $_output = "<?php\n"; - if (is_array($parameter['if condition'])) { - if ($compiler->nocache) { - $_nocache = ',true'; - // create nocache var to make it know for further compiling - if (is_array($parameter['if condition']['var'])) { - $var = trim($parameter['if condition']['var']['var'], "'"); - } else { - $var = trim($parameter['if condition']['var'], "'"); - } - 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); - } - } else { - $_nocache = ''; - } - if (is_array($parameter['if condition']['var'])) { - $_output .= "if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . - "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . - "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . $parameter['if condition']['var']['var'] . - "$_nocache);\n"; - $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . - $parameter['if condition']['var']['smarty_internal_index'] . " = " . - $parameter['if condition']['value'] . ") {?>"; - } else { - $_output .= "if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . - "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . - "] = new Smarty_Variable(null{$_nocache});"; - $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . - $parameter['if condition']['value'] . ") {?>"; - } - } else { - $_output .= "while ({$parameter['if condition']}) {?>"; - } - return $_output; - } -} - -/** - * 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 "<?php }?>\n"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compilebase.php b/library/Smarty/libs/sysplugins/smarty_internal_compilebase.php deleted file mode 100644 index 0803f27a6..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_compilebase.php +++ /dev/null @@ -1,178 +0,0 @@ -<?php -/** - * Smarty Internal Plugin CompileBase - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * This class does extend all internal compile plugins - * - * @package Smarty - * @subpackage Compiler - */ -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 - * - * @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 - * - * @var array - */ - public $option_flags = array('nocache'); - - /** - * 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 - * as valid - * - * @param object $compiler compiler object - * @param array $attributes attributes applied to the tag - * - * @return array of mapped attributes for further processing - */ - public function getAttributes($compiler, $attributes) - { - $_indexed_attr = array(); - // loop over attributes - 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; - // shorthand attribute ? - } 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', 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']; - } elseif (is_string($kv['value']) && in_array(trim($kv['value'], '\'"'), array('true', 'false'))) { - if (trim($kv['value']) == 'true') { - $_indexed_attr[$kv['key']] = true; - } else { - $_indexed_attr[$kv['key']] = false; - } - } elseif (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; - } - } else { - $compiler->trigger_template_error("illegal value of option flag \"{$kv['key']}\"", null, true); - } - // 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", null, true); - } - } - // check for not allowed attributes - if ($this->optional_attributes != array('_any')) { - $tmp_array = array_merge($this->required_attributes, $this->optional_attributes, $this->option_flags); - foreach ($_indexed_attr as $key => $dummy) { - if (!in_array($key, $tmp_array) && $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; - } - } - - 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 - */ - public function openTag($compiler, $openTag, $data = null) - { - array_push($compiler->_tag_stack, array($openTag, $data)); - } - - /** - * 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 - */ - public function closeTag($compiler, $expectedTag) - { - if (count($compiler->_tag_stack) > 0) { - // 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 (is_null($_data)) { - // return opening tag - return $_openTag; - } else { - // return restored data - return $_data; - } - } - // wrong nesting of tags - $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", null, true); - - return; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php b/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php deleted file mode 100644 index 56d3b0665..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php +++ /dev/null @@ -1,194 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Config File Compiler - * This is the config file compiler class. It calls the lexer and parser to - * perform the compiling. - * - * @package Smarty - * @subpackage Config - * @author Uwe Tews - */ - -/** - * Main config file compiler class - * - * @package Smarty - * @subpackage Config - */ -class Smarty_Internal_Config_File_Compiler -{ - /** - * Lexer class name - * - * @var string - */ - public $lexer_class; - - /** - * Parser class name - * - * @var string - */ - public $parser_class; - - /** - * Lexer object - * - * @var object - */ - public $lex; - - /** - * Parser object - * - * @var object - */ - public $parser; - - /** - * Smarty object - * - * @var Smarty object - */ - public $smarty; - - /** - * Smarty object - * - * @var Smarty_Internal_Template object - */ - public $template; - - /** - * Compiled config data sections and variables - * - * @var array - */ - public $config_data = array(); - - /** - * compiled config data must always be written - * - * @var bool - */ - public $write_compiled_code = true; - - /** - * Initialize compiler - * - * @param string $lexer_class class name - * @param string $parser_class class name - * @param Smarty $smarty global instance - */ - public function __construct($lexer_class, $parser_class, Smarty $smarty) - { - $this->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 - */ - 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) { - $this->smarty->_debug->start_compile($this->template); - } - // init the lexer/parser to compile the config file - /* @var Smarty_Internal_ConfigFileLexer $lex */ - $lex = new $this->lexer_class(str_replace(array("\r\n", "\r"), "\n", $template->source->getContent()) . - "\n", $this); - /* @var Smarty_Internal_ConfigFileParser $parser */ - $parser = new $this->parser_class($lex, $this); - - if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) { - $mbEncoding = mb_internal_encoding(); - mb_internal_encoding('ASCII'); - } else { - $mbEncoding = null; - } - - if ($this->smarty->_parserdebug) { - $parser->PrintTrace(); - } - // get tokens from lexer and parse them - while ($lex->yylex()) { - if ($this->smarty->_parserdebug) { - echo "<br>Parsing {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n"; - } - $parser->doParse($lex->token, $lex->value); - } - // finish parsing process - $parser->doParse(0, 0); - - if ($mbEncoding) { - mb_internal_encoding($mbEncoding); - } - if ($this->smarty->debugging) { - $this->smarty->_debug->end_compile($this->template); - } - // template header code - $template_header = "<?php /* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . - strftime("%Y-%m-%d %H:%M:%S") . "\n"; - $template_header .= " compiled from \"" . $this->template->source->filepath . "\" */ ?>\n"; - - $code = '<?php $_smarty_tpl->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) - { - $this->lex = Smarty_Internal_Configfilelexer::instance(); - $this->parser = Smarty_Internal_Configfileparser::instance(); - // 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/library/Smarty/libs/sysplugins/smarty_internal_configfilelexer.php b/library/Smarty/libs/sysplugins/smarty_internal_configfilelexer.php deleted file mode 100644 index e62728c2c..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_configfilelexer.php +++ /dev/null @@ -1,699 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Configfilelexer - * - * This is the lexer to break the config file source into tokens - * - * @package Smarty - * @subpackage Config - * @author Uwe Tews - */ - -/** - * Smarty_Internal_Configfilelexer - * - * This is the config file lexer. - * It is generated from the smarty_internal_configfilelexer.plex file - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ -class Smarty_Internal_Configfilelexer -{ - /** - * Source - * - * @var string - */ - public $data; - - /** - * byte counter - * - * @var int - */ - public $counter; - - /** - * token number - * - * @var int - */ - public $token; - - /** - * token value - * - * @var string - */ - public $value; - - /** - * current line - * - * @var int - */ - public $line; - - /** - * state number - * - * @var int - */ - public $state = 1; - - /** - * Smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * compiler object - * - * @var Smarty_Internal_Config_File_Compiler - */ - private $compiler = null; - - /** - * copy of config_booleanize - * - * @var bool - */ - private $configBooleanize = false; - - /** - * trace file - * - * @var resource - */ - public $yyTraceFILE; - - /** - * trace prompt - * - * @var string - */ - public $yyTracePrompt; - - /** - * state names - * - * @var array - */ - public $state_name = array(1 => 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', - 6 => 'TRIPPLE'); - - /** - * storage for assembled token patterns - * - * @var sring - */ - 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; - - /** - * token names - * - * @var array - */ - public $smarty_token_names = array( // Text for parser error messages - ); - - /** - * constructor - * - * @param string $data template source - * @param Smarty_Internal_Config_File_Compiler $compiler - */ - function __construct($data, Smarty_Internal_Config_File_Compiler $compiler) - { - // set instance object - self::instance($this); - $this->data = $data . "\n"; //now all lines are \n-terminated - $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 static function &instance($new_instance = null) - { - static $instance = null; - if (isset($new_instance) && is_object($new_instance)) { - $instance = $new_instance; - } - return $instance; - } - - public function PrintTrace() - { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '<br>'; - } - - private $_yy_state = 1; - - private $_yy_stack = array(); - - public function yylex() - { - return $this->{'yylex' . $this->_yy_state}(); - } - - public function yypushstate($state) - { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - array_push($this->_yy_stack, $this->_yy_state); - $this->_yy_state = $state; - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - } - - public function yypopstate() - { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - $this->_yy_state = array_pop($this->_yy_stack); - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - } - - public function yybegin($state) - { - $this->_yy_state = $state; - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } - } - - public function yylex1() - { - if (!isset($this->yy_global_pattern1)) { - $this->yy_global_pattern1 = "/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - 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 >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const START = 1; - - function yy_r1_1() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART; - $this->yypushstate(self::COMMENT); - } - - function yy_r1_2() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_OPENB; - $this->yypushstate(self::SECTION); - } - - function yy_r1_3() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB; - } - - function yy_r1_4() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL; - $this->yypushstate(self::VALUE); - } - - function yy_r1_5() - { - - return false; - } - - function yy_r1_6() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; - } - - function yy_r1_7() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_ID; - } - - function yy_r1_8() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_OTHER; - } - - public function yylex2() - { - if (!isset($this->yy_global_pattern2)) { - $this->yy_global_pattern2 = "/\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 ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - 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 >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const VALUE = 2; - - function yy_r2_1() - { - - return false; - } - - function yy_r2_2() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT; - $this->yypopstate(); - } - - function yy_r2_3() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_INT; - $this->yypopstate(); - } - - function yy_r2_4() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES; - $this->yypushstate(self::TRIPPLE); - } - - function yy_r2_5() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING; - $this->yypopstate(); - } - - function yy_r2_6() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING; - $this->yypopstate(); - } - - 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(); - } - } - - function yy_r2_8() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - $this->yypopstate(); - } - - function yy_r2_9() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - $this->value = ""; - $this->yypopstate(); - } - - public function yylex3() - { - if (!isset($this->yy_global_pattern3)) { - $this->yy_global_pattern3 = "/\G([^\n]+?(?=[ \t\r]*\n))/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - 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 >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const NAKED_STRING_VALUE = 3; - - 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 = "/\G([ \t\r]+)|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - 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 >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const COMMENT = 4; - - function yy_r4_1() - { - - return false; - } - - function yy_r4_2() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - } - - 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 = "/\G(\\.)|\G(.*?(?=[\.=[\]\r\n]))/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - 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 >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const SECTION = 5; - - function yy_r5_1() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_DOT; - } - - function yy_r5_2() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_SECTION; - $this->yypopstate(); - } - - public function yylex6() - { - if (!isset($this->yy_global_pattern6)) { - $this->yy_global_pattern6 = "/\G(\"\"\"(?=[ \t\r]*[\n#;]))|\G([\S\s])/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern6, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[0]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - 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 >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); - } - break; - } while (true); - } // end function - - const TRIPPLE = 6; - - function yy_r6_1() - { - - $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END; - $this->yypopstate(); - $this->yypushstate(self::START); - } - - 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_template_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/library/Smarty/libs/sysplugins/smarty_internal_configfileparser.php b/library/Smarty/libs/sysplugins/smarty_internal_configfileparser.php deleted file mode 100644 index 69aaf990f..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_configfileparser.php +++ /dev/null @@ -1,1010 +0,0 @@ -<?php - -class TPC_yyToken implements ArrayAccess -{ - public $string = ''; - - public $metadata = array(); - - public function __construct($s, $m = array()) - { - if ($s instanceof TPC_yyToken) { - $this->string = $s->string; - $this->metadata = $s->metadata; - } else { - $this->string = (string) $s; - if ($m instanceof TPC_yyToken) { - $this->metadata = $m->metadata; - } elseif (is_array($m)) { - $this->metadata = $m; - } - } - } - - public function __toString() - { - return $this->string; - } - - public function offsetExists($offset) - { - return isset($this->metadata[$offset]); - } - - public function offsetGet($offset) - { - return $this->metadata[$offset]; - } - - public function offsetSet($offset, $value) - { - if ($offset === null) { - if (isset($value[0])) { - $x = ($value instanceof TPC_yyToken) ? $value->metadata : $value; - $this->metadata = array_merge($this->metadata, $x); - - return; - } - $offset = count($this->metadata); - } - if ($value === null) { - return; - } - if ($value instanceof TPC_yyToken) { - if ($value->metadata) { - $this->metadata[$offset] = $value->metadata; - } - } elseif ($value) { - $this->metadata[$offset] = $value; - } - } - - public function offsetUnset($offset) - { - unset($this->metadata[$offset]); - } -} - -class TPC_yyStackEntry -{ - public $stateno; /* The state-number */ - public $major; /* The major token value. This is the code - ** number for the token at this stack level */ - public $minor; /* The user-supplied minor token value. This - ** is the value of the token */ -} - -; - -#line 12 "../smarty/lexer/smarty_internal_configfileparser.y" - -/** - * Smarty Internal Plugin Configfileparse - * - * This is the config file parser. - * It is generated from the smarty_internal_configfileparser.y file - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ -class Smarty_Internal_Configfileparser -{ - #line 25 "../smarty/lexer/smarty_internal_configfileparser.y" - - /** - * result status - * - * @var bool - */ - public $successful = true; - - /** - * return value - * - * @var mixed - */ - public $retvalue = 0; - - /** - * @var - */ - public $yymajor; - - /** - * lexer object - * - * @var Smarty_Internal_Configfilelexer - */ - private $lex; - - /** - * internal error flag - * - * @var bool - */ - private $internalError = false; - - /** - * compiler object - * - * @var Smarty_Internal_Config_File_Compiler - */ - public $compiler = null; - - /** - * smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * copy of config_overwrite property - * - * @var bool - */ - private $configOverwrite = false; - - /** - * copy of config_read_hidden property - * - * @var bool - */ - private $configReadHidden = false; - - /** - * helper map - * - * @var array - */ - private static $escapes_single = Array('\\' => '\\', '\'' => '\''); - - /** - * constructor - * - * @param Smarty_Internal_Configfilelexer $lex - * @param Smarty_Internal_Config_File_Compiler $compiler - */ - function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler) - { - // set instance object - self::instance($this); - $this->lex = $lex; - $this->smarty = $compiler->smarty; - $this->compiler = $compiler; - $this->configOverwrite = $this->smarty->config_overwrite; - $this->configReadHidden = $this->smarty->config_read_hidden; - } - - /** - * @param null $new_instance - * - * @return null - */ - public static function &instance($new_instance = null) - { - static $instance = null; - if (isset($new_instance) && is_object($new_instance)) { - $instance = $new_instance; - } - return $instance; - } - - /** - * 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; - } - - /** - * 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; - } - - /** - * 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); - } - - /** - * parse triple quoted string - * - * @param string $qstr - * - * @return string - */ - private static function parse_tripple_double_quoted_string($qstr) - { - return stripcslashes($qstr); - } - - /** - * 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]); - } - } - - const TPC_OPENB = 1; - - const TPC_SECTION = 2; - - const TPC_CLOSEB = 3; - - const TPC_DOT = 4; - - const TPC_ID = 5; - - const TPC_EQUAL = 6; - - const TPC_FLOAT = 7; - - const TPC_INT = 8; - - const TPC_BOOL = 9; - - const TPC_SINGLE_QUOTED_STRING = 10; - - const TPC_DOUBLE_QUOTED_STRING = 11; - - const TPC_TRIPPLE_QUOTES = 12; - - const TPC_TRIPPLE_TEXT = 13; - - const TPC_TRIPPLE_QUOTES_END = 14; - - const TPC_NAKED_STRING = 15; - - const TPC_OTHER = 16; - - const TPC_NEWLINE = 17; - - const TPC_COMMENTSTART = 18; - - const YY_NO_ACTION = 60; - - const YY_ACCEPT_ACTION = 59; - - const YY_ERROR_ACTION = 58; - - const YY_SZ_ACTTAB = 38; - - static public $yy_action = array(29, 30, 34, 33, 24, 13, 19, 25, 35, 21, 59, 8, 3, 1, 20, 12, 14, 31, 20, 12, 15, - 17, 23, 18, 27, 26, 4, 5, 6, 32, 2, 11, 28, 22, 16, 9, 7, 10,); - - static public $yy_lookahead = array(7, 8, 9, 10, 11, 12, 5, 27, 15, 16, 20, 21, 23, 23, 17, 18, 13, 14, 17, 18, 15, - 2, 17, 4, 25, 26, 6, 3, 3, 14, 23, 1, 24, 17, 2, 25, 22, 25,); - - const YY_SHIFT_USE_DFLT = - 8; - - const YY_SHIFT_MAX = 19; - - static public $yy_shift_ofst = array(- 8, 1, 1, 1, - 7, - 3, - 3, 30, - 8, - 8, - 8, 19, 5, 3, 15, 16, 24, 25, 32, - 20,); - - const YY_REDUCE_USE_DFLT = - 21; - - const YY_REDUCE_MAX = 10; - - static public $yy_reduce_ofst = array(- 10, - 1, - 1, - 1, - 20, 10, 12, 8, 14, 7, - 11,); - - static public $yyExpectedTokens = array(array(), array(5, 17, 18,), array(5, 17, 18,), array(5, 17, 18,), - array(7, 8, 9, 10, 11, 12, 15, 16,), array(17, 18,), array(17, 18,), array(1,), array(), array(), array(), - array(2, 4,), array(15, 17,), array(13, 14,), array(14,), array(17,), array(3,), array(3,), array(2,), - array(6,), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), - array(), array(), array(), array(), array(),); - - static public $yy_default = array(44, 37, 41, 40, 58, 58, 58, 36, 39, 44, 44, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 55, 54, 57, 56, 50, 45, 43, 42, 38, 46, 47, 52, 51, 49, 48, 53,); - - const YYNOCODE = 29; - - const YYSTACKDEPTH = 100; - - const YYNSTATE = 36; - - const YYNRULE = 22; - - const YYERRORSYMBOL = 19; - - const YYERRSYMDT = 'yy0'; - - const YYFALLBACK = 0; - - public static $yyFallback = array(); - - public function Trace($TraceFILE, $zTracePrompt) - { - if (!$TraceFILE) { - $zTracePrompt = 0; - } elseif (!$zTracePrompt) { - $TraceFILE = 0; - } - $this->yyTraceFILE = $TraceFILE; - $this->yyTracePrompt = $zTracePrompt; - } - - public function PrintTrace() - { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '<br>'; - } - - public $yyTraceFILE; - - public $yyTracePrompt; - - public $yyidx; /* Index of top element in stack */ - public $yyerrcnt; /* Shifts left before out of the error */ - public $yystack = array(); /* The parser's stack */ - - public $yyTokenName = array('$', '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',); - - public static $yyRuleName = array('start ::= global_vars sections', 'global_vars ::= var_list', - 'sections ::= sections section', 'sections ::=', 'section ::= OPENB SECTION CLOSEB newline var_list', - 'section ::= OPENB DOT SECTION CLOSEB newline var_list', 'var_list ::= var_list newline', - 'var_list ::= var_list var', 'var_list ::=', 'var ::= ID EQUAL value', 'value ::= FLOAT', 'value ::= INT', - 'value ::= BOOL', 'value ::= SINGLE_QUOTED_STRING', 'value ::= DOUBLE_QUOTED_STRING', - 'value ::= TRIPPLE_QUOTES TRIPPLE_TEXT TRIPPLE_QUOTES_END', 'value ::= TRIPPLE_QUOTES TRIPPLE_QUOTES_END', - 'value ::= NAKED_STRING', 'value ::= OTHER', 'newline ::= NEWLINE', 'newline ::= COMMENTSTART NEWLINE', - 'newline ::= COMMENTSTART NAKED_STRING NEWLINE',); - - public function tokenName($tokenType) - { - if ($tokenType === 0) { - return 'End of Input'; - } - if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) { - return $this->yyTokenName[$tokenType]; - } else { - return "Unknown"; - } - } - - public static function yy_destructor($yymajor, $yypminor) - { - switch ($yymajor) { - default: - break; /* If no destructor action specified: do nothing */ - } - } - - public function yy_pop_parser_stack() - { - if (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 255 "../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 static $yyRuleInfo = array(array(0 => 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,); - - #line 261 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r0() - { - $this->_retvalue = null; - } - - #line 266 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r1() - { - $this->add_global_vars($this->yystack[$this->yyidx + 0]->minor); - $this->_retvalue = null; - } - - #line 280 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r4() - { - $this->add_section_vars($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor); - $this->_retvalue = null; - } - - #line 285 "../smarty/lexer/smarty_internal_configfileparser.y" - 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 293 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r6() - { - $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor; - } - - #line 297 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r7() - { - $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 1]->minor, Array($this->yystack[$this->yyidx + 0]->minor)); - } - - #line 301 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r8() - { - $this->_retvalue = Array(); - } - - #line 307 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r9() - { - $this->_retvalue = Array("key" => $this->yystack[$this->yyidx + - 2]->minor, - "value" => $this->yystack[$this->yyidx + 0]->minor); - } - - #line 312 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r10() - { - $this->_retvalue = (float) $this->yystack[$this->yyidx + 0]->minor; - } - - #line 316 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r11() - { - $this->_retvalue = (int) $this->yystack[$this->yyidx + 0]->minor; - } - - #line 320 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r12() - { - $this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor); - } - - #line 324 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r13() - { - $this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor); - } - - #line 328 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r14() - { - $this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor); - } - - #line 332 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r15() - { - $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + - 1]->minor); - } - - #line 336 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r16() - { - $this->_retvalue = ''; - } - - #line 340 "../smarty/lexer/smarty_internal_configfileparser.y" - function yy_r17() - { - $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; - } - - private $_retvalue; - - 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(); - } - } - - 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 248 "../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 241 "../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); - } -} - diff --git a/library/Smarty/libs/sysplugins/smarty_internal_data.php b/library/Smarty/libs/sysplugins/smarty_internal_data.php deleted file mode 100644 index bba95d303..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_data.php +++ /dev/null @@ -1,240 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Data - * This file contains the basic classes and methods for template and variable creation - * - * @package Smarty - * @subpackage Template - * @author Uwe Tews - */ - -/** - * Base class with template and variable methods - * - * @package Smarty - * @subpackage Template - * - * @method mixed getConfigVars(string $varName = null, bool $searchParents = true) - * @method mixed getStreamVariable(string $variable) - * @method Smarty_Internal_Data clearAssign(mixed $tpl_var) - * @method Smarty_Internal_Data clearAllAssign() - * @method Smarty_Internal_Data clearConfig(string $varName = null) - * @method Smarty_Internal_Data configLoad(string $config_file, mixed $sections = null, string $scope = 'local') - * @property int $scope - */ -class Smarty_Internal_Data -{ - /** - * This object type (Smarty = 1, template = 2, data = 4) - * - * @var int - */ - public $_objType = 4; - - /** - * name of class used for templates - * - * @var string - */ - public $template_class = 'Smarty_Internal_Template'; - - /** - * template variables - * - * @var Smarty_Variable[] - */ - public $tpl_vars = array(); - - /** - * parent template (if any) - * - * @var Smarty|Smarty_Internal_Template|Smarty_Internal_Data - */ - public $parent = null; - - /** - * configuration settings - * - * @var string[] - */ - public $config_vars = array(); - - /** - * extension handler - * - * @var Smarty_Internal_Extension_Handler - */ - public $ext = null; - - /** - * Smarty_Internal_Data constructor. - * - * Install extension handler - */ - public function __construct() - { - $this->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) { - if ($_key != '') { - $this->tpl_vars[$_key] = new Smarty_Variable($_val, $nocache); - if ($this->_objType == 2 && $this->scope) { - $this->ext->_updateScope->updateScope($this, $_key); - } - } - } - } else { - if ($tpl_var != '') { - $this->tpl_vars[$tpl_var] = new Smarty_Variable($value, $nocache); - if ($this->_objType == 2 && $this->scope) { - $this->ext->_updateScope->updateScope($this, $tpl_var); - } - } - } - 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); - } - } - - /** - * Handle unknown class methods - * - * @param string $name unknown method-name - * @param array $args argument array - * - * @return mixed - * @throws SmartyException - */ - public function __call($name, $args) - { - return $this->ext->_callExternalMethod($this, $name, $args); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_debug.php b/library/Smarty/libs/sysplugins/smarty_internal_debug.php deleted file mode 100644 index 0cbd54955..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_debug.php +++ /dev/null @@ -1,430 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Debug - * Class to collect data for the Smarty Debugging Console - * - * @package Smarty - * @subpackage Debug - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Debug Class - * - * @package Smarty - * @subpackage Debug - */ -class Smarty_Internal_Debug extends Smarty_Internal_Data -{ - /** - * template data - * - * @var array - */ - public $template_data = array(); - - /** - * List of uid's which shall be ignored - * - * @var array - */ - public $ignore_uid = array(); - - /** - * Index of display() and fetch() calls - * - * @var int - */ - public $index = 0; - - /** - * Counter for window offset - * - * @var int - */ - public $offset = 0; - - /** - * Start logging template - * - * @param \Smarty_Internal_Template $template template - * @param null $mode true: display false: fetch null: subtemplate - */ - public function start_template(Smarty_Internal_Template $template, $mode = null) - { - if (isset($mode)) { - $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 - */ - public function display_debug($obj, $full = false) - { - if (!$full) { - $this->offset ++; - $savedIndex = $this->index; - $this->index = 9999; - } - if ($obj->_objType == 1) { - $smarty = $obj; - } else { - $smarty = $obj->smarty; - } - // 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(__DIR__ . '/../plugins') ? __DIR__ . '/../plugins' : $smarty->getPluginsDir()); - $debObj->force_compile = false; - $debObj->compile_check = true; - $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:' . __DIR__ . '/../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 = false; - $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->_objType == 2) { - $_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->_objType == 2) { - $config_vars[$key]['scope'] = $obj->source->type . ':' . $obj->source->name; - } elseif ($obj->_objType == 4) { - $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->_objType == 2) { - $tpl_vars[$key]['scope'] = $obj->source->type . ':' . $obj->source->name; - } elseif ($obj->_objType == 4) { - $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/library/Smarty/libs/sysplugins/smarty_internal_extension_clear.php b/library/Smarty/libs/sysplugins/smarty_internal_extension_clear.php deleted file mode 100644 index 00edc5abf..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_extension_clear.php +++ /dev/null @@ -1,126 +0,0 @@ -<?php - -/** - * Smarty Extension Clear - * - * $smarty->clear() method file cache file resource - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Extension_Clear -{ - /** - * 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 static function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) - { - $_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null; - $_compile_id = isset($compile_id) ? preg_replace('![^\w]+!', '_', $compile_id) : null; - $_dir_sep = $smarty->use_sub_dirs ? '/' : '^'; - $_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0; - $_dir = $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 . DS; - } - } - } - if (isset($resource_name)) { - $_save_stat = $smarty->caching; - $smarty->caching = true; - $tpl = new $smarty->template_class($resource_name, $smarty); - $smarty->caching = $_save_stat; - - // remove from template cache - $tpl->source; // have the template registered before unset() - - if ($tpl->source->exists) { - $_resourcename_parts = basename(str_replace('^', '/', $tpl->cached->filepath)); - } else { - return 0; - } - } - $_count = 0; - $_time = time(); - if (file_exists($_dir)) { - $_cacheDirs = new RecursiveDirectoryIterator($_dir); - $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST); - foreach ($_cache as $_file) { - if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { - continue; - } - // directory ? - if ($_file->isDir()) { - if (!$_cache->isDot()) { - // delete folder if empty - @rmdir($_file->getPathname()); - } - } else { - $_parts = explode($_dir_sep, str_replace('\\', '/', substr((string) $_file, $_dir_length))); - $_parts_count = count($_parts); - // check name - if (isset($resource_name)) { - if ($_parts[$_parts_count - 1] != $_resourcename_parts) { - continue; - } - } - // check compile id - if (isset($_compile_id) && (!isset($_parts[$_parts_count - 2 - $_compile_id_offset]) || - $_parts[$_parts_count - 2 - $_compile_id_offset] != $_compile_id) - ) { - continue; - } - // check cache id - if (isset($_cache_id)) { - // count of cache id parts - $_parts_count = (isset($_compile_id)) ? $_parts_count - 2 - $_compile_id_offset : - $_parts_count - 1 - $_compile_id_offset; - if ($_parts_count < $_cache_id_parts_count) { - continue; - } - for ($i = 0; $i < $_cache_id_parts_count; $i ++) { - if ($_parts[$i] != $_cache_id_parts[$i]) { - continue 2; - } - } - } - // expired ? - if (isset($exp_time)) { - if ($exp_time < 0) { - preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_file), $match); - if ($_time < (@filemtime($_file) + $match[1])) { - continue; - } - } else { - if ($_time - @filemtime($_file) < $exp_time) { - continue; - } - } - } - $_count += @unlink((string) $_file) ? 1 : 0; - if (function_exists('opcache_invalidate')) { - opcache_invalidate((string) $_file); - } - } - } - } - return $_count; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_extension_handler.php b/library/Smarty/libs/sysplugins/smarty_internal_extension_handler.php deleted file mode 100644 index 68012d86f..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_extension_handler.php +++ /dev/null @@ -1,157 +0,0 @@ -<?php - -/** - * Smarty Extension handler - * - * Load extensions dynamically - * - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - * @property Smarty_Internal_Runtime_Inheritance $_inheritance - * @property Smarty_Internal_Runtime_SubTemplate $_subTemplate - * @property Smarty_Internal_Runtime_TplFunction $_tplFunction - * @property Smarty_Internal_Runtime_Var $_var - * @property Smarty_Internal_Runtime_Config $_config - * @property Smarty_Internal_Runtime_Foreach $_foreach - * @property Smarty_Internal_Runtime_Hhvm $_hhvm - * @property Smarty_Internal_Runtime_WriteFile $_writeFile - * @property Smarty_Internal_Runtime_ValidateCompiled $_validateCompiled - * @property Smarty_Internal_Runtime_CodeFrame $_codeFrame - * @property Smarty_Internal_Runtime_FilterHandler $_filterHandler - * @property Smarty_Internal_Runtime_GetIncludePath $_getIncludePath - * @property Smarty_Internal_Runtime_UpdateScope $_updateScope - * @property Smarty_Internal_Runtime_IsCached $_isCached - * @property Smarty_Internal_Runtime_CacheModify $_cacheModify - * @property Smarty_Internal_Runtime_UpdateCache $_updateCache - * @property Smarty_Internal_Method_GetTemplateVars $getTemplateVars - * @property Smarty_Internal_Method_Append $append - * @property Smarty_Internal_Method_AppendByRef $appendByRef - * @property Smarty_Internal_Method_AssignGlobal $assignGlobal - * @property Smarty_Internal_Method_AssignByRef $assignByRef - * @property Smarty_Internal_Method_LoadFilter $loadFilter - * @property Smarty_Internal_Method_LoadPlugin $loadPlugin - * @property Smarty_Internal_Method_RegisterFilter $registerFilter - * @property Smarty_Internal_Method_RegisterObject $registerObject - * @property Smarty_Internal_Method_RegisterPlugin $registerPlugin - */ -class Smarty_Internal_Extension_Handler -{ - - public $objType = null; - - /** - * Cache for property information from generic getter/setter - * Preloaded with names which should not use with generic getter/setter - * - * @var array - */ - private $_property_info = array('AutoloadFilters' => 0, 'DefaultModifiers' => 0, 'ConfigVars' => 0, - 'DebugTemplate' => 0, 'RegisteredObject' => 0, 'StreamVariable' => 0, - 'TemplateVars' => 0,);# - - private $resolvedProperties = array(); - - /** - * Call external Method - * - * @param \Smarty_Internal_Data $data - * @param string $name external method names - * @param array $args argument array - * - * @return mixed - * @throws SmartyException - */ - 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)) { - $class = 'Smarty_Internal_Method_' . ucfirst($name); - if (preg_match('/^(set|get)([A-Z].*)$/', $name, $match)) { - if (!isset($this->_property_info[$prop = $match[2]])) { - // convert camel case to underscored name - $this->resolvedProperties[$prop] = $pn = strtolower(join('_', - preg_split('/([A-Z][^A-Z]*)/', $prop, - 1, - PREG_SPLIT_NO_EMPTY | - PREG_SPLIT_DELIM_CAPTURE))); - $this->_property_info[$prop] = property_exists($data, $pn) ? 1 : - ($data->_objType == 2 && property_exists($smarty, $pn) ? 2 : 0); - } - if ($this->_property_info[$prop]) { - $pn = $this->resolvedProperties[$prop]; - if ($match[1] == 'get') { - return $this->_property_info[$prop] == 1 ? $data->$pn : $data->smarty->$pn; - } else { - return $this->_property_info[$prop] == 1 ? $data->$pn = $args[0] : - $data->smarty->$pn = $args[0]; - } - } elseif (!class_exists($class)) { - throw new SmartyException("property '$pn' does not exist."); - } - } - if (class_exists($class)) { - $callback = array($smarty->ext->$name = new $class(), $name); - } - } else { - $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); - } - - /** - * set extension property - * - * @param string $property_name property name - * @param mixed $value value - * - * @throws SmartyException - */ - public function __set($property_name, $value) - { - $this->$property_name = $value; - } - - /** - * get extension object - * - * @param string $property_name property name - * - * @return mixed|Smarty_Template_Cached - * @throws SmartyException - */ - public function __get($property_name) - { - // object properties of runtime template extensions will start with '_' - if ($property_name[0] == '_') { - $class = 'Smarty_Internal_Runtime_' . ucfirst(substr($property_name, 1)); - } else { - $class = 'Smarty_Internal_Method_' . ucfirst($property_name); - } - if (class_exists($class)) { - return $this->$property_name = new $class(); - } - return $this; - } - - /** - * 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) - { - return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), $args); - } - -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php b/library/Smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php deleted file mode 100644 index b739f0e3e..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php +++ /dev/null @@ -1,51 +0,0 @@ -<?php - -/** - * Smarty Method AddAutoloadFilters - * - * Smarty::addAutoloadFilters() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_AddAutoloadFilters extends Smarty_Internal_Method_SetAutoloadFilters -{ - - /** - * Add 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 - */ - public function addAutoloadFilters(Smarty_Internal_TemplateBase $obj, $filters, $type = null) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - 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; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php b/library/Smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php deleted file mode 100644 index 55d2c9e71..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php - -/** - * Smarty Method AddDefaultModifiers - * - * Smarty::addDefaultModifiers() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_AddDefaultModifiers -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Add default modifiers - * - * @api Smarty::addDefaultModifiers() - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param array|string $modifiers modifier or list of modifiers - * to add - * - * @return \Smarty|\Smarty_Internal_Template - */ - public function addDefaultModifiers(Smarty_Internal_TemplateBase $obj, $modifiers) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if (is_array($modifiers)) { - $this->default_modifiers = array_merge($smarty->default_modifiers, $modifiers); - } else { - $smarty->default_modifiers[] = $modifiers; - } - return $obj; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_append.php b/library/Smarty/libs/sysplugins/smarty_internal_method_append.php deleted file mode 100644 index 43df8803f..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_append.php +++ /dev/null @@ -1,74 +0,0 @@ -<?php - -/** - * Smarty Method Append - * - * Smarty::append() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_Append -{ - /** - * Valid for all objects - * - * @var int - */ - public $objMap = 7; - - /** - * appends values to template variables - * - * @api Smarty::append() - * @link http://www.smarty.net/docs/en/api.append.tpl - * - * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data - * @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(Smarty_Internal_Data $data, $tpl_var, $value = null, $merge = false, $nocache = false) - { - if (is_array($tpl_var)) { - // $tpl_var is an array, ignore $value - foreach ($tpl_var as $_key => $_val) { - if ($_key != '') { - $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->_objType == 2 && $data->scope) { - $data->ext->_updateScope->updateScope($data, $tpl_var); - } - } - return $data; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_appendbyref.php b/library/Smarty/libs/sysplugins/smarty_internal_method_appendbyref.php deleted file mode 100644 index 124bb803a..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_appendbyref.php +++ /dev/null @@ -1,50 +0,0 @@ -<?php - -/** - * Smarty Method AppendByRef - * - * Smarty::appendByRef() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_AppendByRef -{ - - /** - * appends values to template variables by reference - * - * @api Smarty::appendByRef() - * @link http://www.smarty.net/docs/en/api.append.by.ref.tpl - * - * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data - * @param string $tpl_var the template variable name - * @param mixed &$value the referenced value to append - * @param bool $merge flag if array elements shall be merged - * - * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty - */ - public static function appendByRef(Smarty_Internal_Data $data, $tpl_var, &$value, $merge = false) - { - if ($tpl_var != '' && isset($value)) { - if (!isset($data->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->_objType == 2 && $data->scope) { - $data->ext->_updateScope->updateScope($data, $tpl_var); - } - } - return $data; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_assignbyref.php b/library/Smarty/libs/sysplugins/smarty_internal_method_assignbyref.php deleted file mode 100644 index a97125e30..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_assignbyref.php +++ /dev/null @@ -1,36 +0,0 @@ -<?php - -/** - * Smarty Method AssignByRef - * - * Smarty::assignByRef() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_AssignByRef -{ - - /** - * assigns values to template variables by reference - * - * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data - * @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(Smarty_Internal_Data $data, $tpl_var, &$value, $nocache) - { - if ($tpl_var != '') { - $data->tpl_vars[$tpl_var] = new Smarty_Variable(null, $nocache); - $data->tpl_vars[$tpl_var]->value = &$value; - if ($data->_objType == 2 && $data->scope) { - $data->ext->_updateScope->updateScope($data, $tpl_var); - } - } - return $data; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_assignglobal.php b/library/Smarty/libs/sysplugins/smarty_internal_method_assignglobal.php deleted file mode 100644 index 23b13b3a2..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_assignglobal.php +++ /dev/null @@ -1,43 +0,0 @@ -<?php - -/** - * Smarty Method AssignGlobal - * - * Smarty::assignGlobal() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_AssignGlobal -{ - /** - * Valid for all objects - * - * @var int - */ - public $objMap = 7; - - /** - * assigns a global Smarty variable - * - * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data - * @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(Smarty_Internal_Data $data, $varName, $value = null, $nocache = false) - { - if ($varName != '') { - Smarty::$global_tpl_vars[$varName] = new Smarty_Variable($value, $nocache); - $ptr = $data; - while ($ptr->_objType == 2) { - $ptr->tpl_vars[$varName] = clone Smarty::$global_tpl_vars[$varName]; - $ptr = $ptr->parent; - } - } - return $data; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_clearallassign.php b/library/Smarty/libs/sysplugins/smarty_internal_method_clearallassign.php deleted file mode 100644 index 1e5fec4bd..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_clearallassign.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -/** - * Smarty Method ClearAllAssign - * - * Smarty::clearAllAssign() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_ClearAllAssign -{ - /** - * Valid for all objects - * - * @var int - */ - public $objMap = 7; - - /** - * clear all the assigned template variables. - * - * @api Smarty::clearAllAssign() - * @link http://www.smarty.net/docs/en/api.clear.all.assign.tpl - * - * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data - * - * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty - */ - public function clearAllAssign(Smarty_Internal_Data $data) - { - $data->tpl_vars = array(); - - return $data; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_clearallcache.php b/library/Smarty/libs/sysplugins/smarty_internal_method_clearallcache.php deleted file mode 100644 index 6ae0af15f..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_clearallcache.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php - -/** - * Smarty Method ClearAllCache - * - * Smarty::clearAllCache() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_ClearAllCache -{ - /** - * Valid for Smarty object - * - * @var int - */ - public $objMap = 1; - - /** - * Empty cache folder - * - * @api Smarty::clearAllCache() - * @link http://www.smarty.net/docs/en/api.clear.all.cache.tpl - * - * @param \Smarty $smarty - * @param integer $exp_time expiration time - * @param string $type resource type - * - * @return integer number of cache files deleted - */ - public function clearAllCache(Smarty $smarty, $exp_time = null, $type = null) - { - // load cache resource and call clearAll - $_cache_resource = Smarty_CacheResource::load($smarty, $type); - $_cache_resource->invalidLoadedCache($smarty); - return $_cache_resource->clearAll($smarty, $exp_time); - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_clearassign.php b/library/Smarty/libs/sysplugins/smarty_internal_method_clearassign.php deleted file mode 100644 index 3a7bd1e47..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_clearassign.php +++ /dev/null @@ -1,44 +0,0 @@ -<?php - -/** - * Smarty Method ClearAssign - * - * Smarty::clearAssign() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_ClearAssign -{ - /** - * Valid for all objects - * - * @var int - */ - public $objMap = 7; - - /** - * clear the given assigned template variable(s). - * - * @api Smarty::clearAssign() - * @link http://www.smarty.net/docs/en/api.clear.assign.tpl - * - * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data - * @param string|array $tpl_var the template variable(s) to clear - * - * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty - */ - public function clearAssign(Smarty_Internal_Data $data, $tpl_var) - { - if (is_array($tpl_var)) { - foreach ($tpl_var as $curr_var) { - unset($data->tpl_vars[$curr_var]); - } - } else { - unset($data->tpl_vars[$tpl_var]); - } - - return $data; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_clearcache.php b/library/Smarty/libs/sysplugins/smarty_internal_method_clearcache.php deleted file mode 100644 index 063c57cde..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_clearcache.php +++ /dev/null @@ -1,43 +0,0 @@ -<?php - -/** - * Smarty Method ClearCache - * - * Smarty::clearCache() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_ClearCache -{ - /** - * Valid for Smarty object - * - * @var int - */ - public $objMap = 1; - - /** - * Empty cache for a specific template - * - * @api Smarty::clearCache() - * @link http://www.smarty.net/docs/en/api.clear.cache.tpl - * - * @param \Smarty $smarty - * @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(Smarty $smarty, $template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) - { - // load cache resource and call clear - $_cache_resource = Smarty_CacheResource::load($smarty, $type); - $_cache_resource->invalidLoadedCache($smarty); - return $_cache_resource->clear($smarty, $template_name, $cache_id, $compile_id, $exp_time); - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php b/library/Smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php deleted file mode 100644 index cce8553f5..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php +++ /dev/null @@ -1,124 +0,0 @@ -<?php - -/** - * Smarty Method ClearCompiledTemplate - * - * Smarty::clearCompiledTemplate() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_ClearCompiledTemplate -{ - /** - * Valid for Smarty object - * - * @var int - */ - public $objMap = 1; - - /** - * Delete compiled template file - * - * @api Smarty::clearCompiledTemplate() - * @link http://www.smarty.net/docs/en/api.clear.compiled.template.tpl - * - * @param \Smarty $smarty - * @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(Smarty $smarty, $resource_name = null, $compile_id = null, $exp_time = null) - { - - $_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 ? DS : '^'; - if (isset($resource_name)) { - $_save_stat = $smarty->caching; - $smarty->caching = false; - /* @var Smarty_Internal_Template $tpl */ - $tpl = new $smarty->template_class($resource_name, $smarty); - $smarty->caching = $_save_stat; - if ($tpl->source->exists) { - // remove from compileds cache - $tpl->source->compileds = array(); - $_resource_part_1 = basename(str_replace('^', DS, $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) == '.' || strpos($_file, '.svn') !== false) { - continue; - } - - $_filepath = (string) $_file; - - if ($_file->isDir()) { - if (!$_compile->isDot()) { - // delete folder if empty - @rmdir($_file->getPathname()); - } - } else { - $unlink = false; - if ((!isset($_compile_id) || (isset($_filepath[$_compile_id_part_length]) && - $a = !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length))) && - (!isset($resource_name) || (isset($_filepath[$_resource_part_1_length]) && - substr_compare($_filepath, $_resource_part_1, - $_resource_part_1_length, - $_resource_part_1_length) == 0) || - (isset($_filepath[$_resource_part_2_length]) && - substr_compare($_filepath, $_resource_part_2, - $_resource_part_2_length, - $_resource_part_2_length) == 0)) - ) { - if (isset($exp_time)) { - if (time() - @filemtime($_filepath) >= $exp_time) { - $unlink = true; - } - } else { - $unlink = true; - } - } - - if ($unlink && @unlink($_filepath)) { - $_count ++; - if (function_exists('opcache_invalidate')) { - opcache_invalidate($_filepath); - } - } - } - } - // clear template objects cache - $smarty->_cache['isCached'] = array(); - if (isset($smarty->ext->_subtemplate)) { - $smarty->ext->_subtemplate->tplObjects = array(); - } - return $_count; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_clearconfig.php b/library/Smarty/libs/sysplugins/smarty_internal_method_clearconfig.php deleted file mode 100644 index 9c6167f4d..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_clearconfig.php +++ /dev/null @@ -1,41 +0,0 @@ -<?php - -/** - * Smarty Method ClearConfig - * - * Smarty::clearConfig() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_ClearConfig -{ - /** - * Valid for all objects - * - * @var int - */ - public $objMap = 7; - - /** - * clear a single or all config variables - * - * @api Smarty::clearConfig() - * @link http://www.smarty.net/docs/en/api.clear.config.tpl - * - * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data - * @param string|null $name variable name or null - * - * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty - */ - public function clearConfig(Smarty_Internal_Data $data, $name = null) - { - if (isset($name)) { - unset($data->config_vars[$name]); - } else { - $data->config_vars = array(); - } - return $data; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php b/library/Smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php deleted file mode 100644 index 4d6be65c4..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php - -/** - * Smarty Method CompileAllConfig - * - * Smarty::compileAllConfig() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_CompileAllConfig extends Smarty_Internal_Method_CompileAllTemplates -{ - - /** - * Compile all config files - * - * @api Smarty::compileAllConfig() - * - * @param \Smarty $smarty - * @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(Smarty $smarty, $extension = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null) - { - return $this->compileAll($smarty, $extension, $force_compile, $time_limit, $max_errors, true); - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php b/library/Smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php deleted file mode 100644 index 685fc0c0d..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php +++ /dev/null @@ -1,111 +0,0 @@ -<?php - -/** - * Smarty Method CompileAllTemplates - * - * Smarty::compileAllTemplates() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_CompileAllTemplates -{ - /** - * Valid for Smarty object - * - * @var int - */ - public $objMap = 1; - - /** - * Compile all template files - * - * @api Smarty::compileAllTemplates() - * - * @param \Smarty $smarty - * @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(Smarty $smarty, $extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null) - { - return $this->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); - $_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)) . DS . $_file; - } - echo "\n<br>", $_dir, '---', $_file; - flush(); - $_start_time = microtime(true); - $_smarty = clone $smarty; - $_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<br> ------>Error: ", $e->getMessage(), "<br><br>\n"; - $_error_count ++; - } - // free memory - unset($_tpl); - $_smarty->_cache['template_objects'] = array(); - if ($max_errors !== null && $_error_count == $max_errors) { - echo "\n<br><br>too many errors\n"; - exit(); - } - } - } - echo "\n<br>"; - return $_count; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_configload.php b/library/Smarty/libs/sysplugins/smarty_internal_method_configload.php deleted file mode 100644 index 7b99e35c6..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_configload.php +++ /dev/null @@ -1,182 +0,0 @@ -<?php - -/** - * Smarty Method ConfigLoad - * - * Smarty::configLoad() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_ConfigLoad -{ - /** - * Valid for all objects - * - * @var int - */ - public $objMap = 7; - - /** - * 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_Internal_Data|\Smarty_Internal_Template|\Smarty $data - * @param string $config_file filename - * @param mixed $sections array of section names, single - * section or null - * - * @return \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template - * @throws \SmartyException - */ - public function configLoad(Smarty_Internal_Data $data, $config_file, $sections = null) - { - $this->_loadConfigFile($data, $config_file, $sections, 0); - 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 - * - * @return \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template - * @throws \SmartyException - */ - public function _loadConfigFile(Smarty_Internal_Data $data, $config_file, $sections = null, $scope = 0) - { - /* @var \Smarty $smarty */ - $smarty = isset($data->smarty) ? $data->smarty : $data; - /* @var \Smarty_Internal_Template $confObj */ - $confObj = new Smarty_Internal_Template($config_file, $smarty, $data); - $confObj->caching = Smarty::CACHING_OFF; - $confObj->source = Smarty_Template_Config::load($confObj); - $confObj->source->config_sections = $sections; - $confObj->source->scope = $scope; - $confObj->compiled = Smarty_Template_Compiled::load($confObj); - $confObj->compiled->render($confObj); - if ($data->_objType == 2) { - $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 $_config_vars - * - */ - public function _loadConfigVars(Smarty_Internal_Template $tpl, $_config_vars) - { - $this->_assignConfigVars($tpl->parent, $tpl, $_config_vars); - $scope = $tpl->source->scope; - if (!$scope && !$tpl->scope) { - return; - } - foreach (array($scope, $tpl->scope) as $s) { - $s = ($bubble_up = $s >= Smarty::SCOPE_BUBBLE_UP) ? $s - Smarty::SCOPE_BUBBLE_UP : $s; - if ($bubble_up && $s) { - $ptr = $tpl->parent->parent; - if (isset($ptr)) { - $this->_assignConfigVars($ptr, $tpl, $_config_vars); - $ptr = $ptr->parent; - } - if ($s == Smarty::SCOPE_PARENT) { - continue; - } - while (isset($ptr) && $ptr->_objType == 2) { - $this->_assignConfigVars($ptr, $tpl, $_config_vars); - $ptr = $ptr->parent; - } - if ($s == Smarty::SCOPE_TPL_ROOT) { - continue; - } elseif ($s == Smarty::SCOPE_SMARTY) { - $this->_assignConfigVars($tpl->smarty, $tpl, $_config_vars); - } elseif ($s == Smarty::SCOPE_GLOBAL) { - $this->_assignConfigVars($tpl->smarty, $tpl, $_config_vars); - } elseif ($s == Smarty::SCOPE_ROOT) { - while (isset($ptr->parent)) { - $ptr = $ptr->parent; - } - $this->_assignConfigVars($ptr, $tpl, $_config_vars); - } - } - } - } - - /** - * Assign all config variables in given scope - * - * @param \Smarty_Internal_Data $scope_ptr - * @param \Smarty_Internal_Template $tpl - * @param array $_config_vars - */ - public function _assignConfigVars(Smarty_Internal_Data $scope_ptr, Smarty_Internal_Template $tpl, $_config_vars) - { - // copy global config vars - foreach ($_config_vars['vars'] as $variable => $value) { - if ($tpl->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) { - $scope_ptr->config_vars[$variable] = $value; - } else { - $scope_ptr->config_vars[$variable] = - array_merge((array) $scope_ptr->config_vars[$variable], (array) $value); - } - } - // scan sections - $sections = $tpl->source->config_sections; - if (!empty($sections)) { - foreach ((array) $sections as $tpl_section) { - if (isset($_config_vars['sections'][$tpl_section])) { - foreach ($_config_vars['sections'][$tpl_section]['vars'] as $variable => $value) { - if ($tpl->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) { - $scope_ptr->config_vars[$variable] = $value; - } else { - $scope_ptr->config_vars[$variable] = - array_merge((array) $scope_ptr->config_vars[$variable], (array) $value); - } - } - } - } - } - } - - /** - * gets a config variable value - * - * @param \Smarty_Internal_Template $tpl template object - * @param string $varName the name of the config variable - * @param bool $errorEnable - * - * @return mixed the value of the config variable - */ - public function _getConfigVariable(Smarty_Internal_Template $tpl, $varName, $errorEnable = true) - { - $_ptr = $tpl; - 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 ($tpl->smarty->error_unassigned && $errorEnable) { - // force a notice - $x = $$varName; - } - return null; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_createdata.php b/library/Smarty/libs/sysplugins/smarty_internal_method_createdata.php deleted file mode 100644 index 600bc777c..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_createdata.php +++ /dev/null @@ -1,44 +0,0 @@ -<?php - -/** - * Smarty Method CreateData - * - * Smarty::createData() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_CreateData -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * creates a data object - * - * @api Smarty::createData() - * @link http://www.smarty.net/docs/en/api.create.data.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param \Smarty_Internal_Template|\Smarty_Internal_Data|\Smarty_Data|\Smarty $parent next higher level of Smarty - * variables - * @param string $name optional data block name - * - * @returns Smarty_Data data object - */ - public function createData(Smarty_Internal_TemplateBase $obj, Smarty_Internal_Data $parent = null, $name = null) - { - /* @var Smarty $smarty */ - $smarty = isset($this->smarty) ? $this->smarty : $obj; - $dataObj = new Smarty_Data($parent, $smarty, $name); - if ($smarty->debugging) { - Smarty_Internal_Debug::register_data($dataObj); - } - return $dataObj; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php b/library/Smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php deleted file mode 100644 index e1a7801f7..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -/** - * Smarty Method GetAutoloadFilters - * - * Smarty::getAutoloadFilters() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_GetAutoloadFilters extends Smarty_Internal_Method_SetAutoloadFilters -{ - - /** - * Get autoload filters - * - * @api Smarty::getAutoloadFilters() - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $type type of filter to get auto loads - * for. Defaults to all autoload - * filters - * - * @return array array( 'type1' => array( 'filter1', 'filter2', … ) ) or array( 'filter1', 'filter2', …) if $type - * was specified - */ - public function getAutoloadFilters(Smarty_Internal_TemplateBase $obj, $type = null) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if ($type !== null) { - $this->_checkFilterType($type); - return isset($smarty->autoload_filters[$type]) ? $smarty->autoload_filters[$type] : array(); - } - return $smarty->autoload_filters; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php b/library/Smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php deleted file mode 100644 index b15672168..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php - -/** - * Smarty Method GetConfigVars - * - * Smarty::getConfigVars() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_GetConfigVars -{ - /** - * Valid for all objects - * - * @var int - */ - public $objMap = 7; - - /** - * Returns a single or all config variables - * - * @api Smarty::getConfigVars() - * @link http://www.smarty.net/docs/en/api.get.config.vars.tpl - * - * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data - * @param string $varname variable name or null - * @param bool $search_parents include parent templates? - * - * @return mixed variable value or or array of variables - */ - public function getConfigVars(Smarty_Internal_Data $data, $varname = null, $search_parents = true) - { - $_ptr = $data; - $var_array = array(); - while ($_ptr !== null) { - if (isset($varname)) { - if (isset($_ptr->config_vars[$varname])) { - return $_ptr->config_vars[$varname]; - } - } else { - $var_array = array_merge($_ptr->config_vars, $var_array); - } - // not found, try at parent - if ($search_parents) { - $_ptr = $_ptr->parent; - } else { - $_ptr = null; - } - } - if (isset($varname)) { - return ''; - } else { - return $var_array; - } - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php b/library/Smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php deleted file mode 100644 index 3c3432ce1..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php - -/** - * Smarty Method GetDebugTemplate - * - * Smarty::getDebugTemplate() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_GetDebugTemplate -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * return name of debugging template - * - * @api Smarty::getDebugTemplate() - - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * - * @return string - */ - public function getDebugTemplate(Smarty_Internal_TemplateBase $obj) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - return $smarty->debug_tpl; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php b/library/Smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php deleted file mode 100644 index 32e0cc413..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php - -/** - * Smarty Method GetDefaultModifiers - * - * Smarty::getDefaultModifiers() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_GetDefaultModifiers -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Get default modifiers - * - * @api Smarty::getDefaultModifiers() - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * - * @return array list of default modifiers - */ - public function getDefaultModifiers(Smarty_Internal_TemplateBase $obj) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - return $smarty->default_modifiers; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php b/library/Smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php deleted file mode 100644 index be0c0dba2..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php +++ /dev/null @@ -1,44 +0,0 @@ -<?php - -/** - * Smarty Method GetRegisteredObject - * - * Smarty::getRegisteredObject() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_GetRegisteredObject -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * return a reference to a registered object - * - * @api Smarty::getRegisteredObject() - * @link http://www.smarty.net/docs/en/api.get.registered.object.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $object_name object name - * - * @return object - * @throws \SmartyException if no such object is found - */ - public function getRegisteredObject(Smarty_Internal_TemplateBase $obj, $object_name) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - 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]; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php b/library/Smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php deleted file mode 100644 index b922fd088..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php +++ /dev/null @@ -1,51 +0,0 @@ -<?php - -/** - * Smarty Method GetStreamVariable - * - * Smarty::getStreamVariable() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_GetStreamVariable -{ - /** - * Valid for all objects - * - * @var int - */ - public $objMap = 7; - - /** - * gets a stream variable - * - * @api Smarty::getStreamVariable() - * - * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data - * @param string $variable the stream of the variable - * - * @return mixed - * @throws \SmartyException - */ - public function getStreamVariable(Smarty_Internal_Data $data, $variable) - { - $_result = ''; - $fp = fopen($variable, 'r+'); - if ($fp) { - while (!feof($fp) && ($current_line = fgets($fp)) !== false) { - $_result .= $current_line; - } - fclose($fp); - - return $_result; - } - $smarty = isset($data->smarty) ? $data->smarty : $data; - if ($smarty->error_unassigned) { - throw new SmartyException('Undefined stream variable "' . $variable . '"'); - } else { - return null; - } - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_gettags.php b/library/Smarty/libs/sysplugins/smarty_internal_method_gettags.php deleted file mode 100644 index dd9e8d1ca..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_gettags.php +++ /dev/null @@ -1,62 +0,0 @@ -<?php - -/** - * Smarty Method GetTags - * - * Smarty::getTags() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_GetTags -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Return array of tag/attributes of all tags used by an template - * - * @api Smarty::getTags() - * @link http://www.smarty.net/docs/en/api.get.tags.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param null|string|Smarty_Internal_Template $template - * - * @return array of tag/attributes - * @throws \SmartyException - */ - public function getTags(Smarty_Internal_TemplateBase $obj, $template = null) - { - /* @var Smarty $smarty */ - $smarty = isset($this->smarty) ? $this->smarty : $obj; - if ($obj->_objType == 2 && !isset($template)) { - $tpl = clone $obj; - } elseif (isset($template) && $template->_objType == 2) { - $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 = false; - $tpl->loadCompiler(); - $tpl->compiler->compileTemplate($tpl); - return $tpl->_cache['used_tags']; - } - throw new SmartyException("Missing template specification"); - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php b/library/Smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php deleted file mode 100644 index 235bece46..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php +++ /dev/null @@ -1,114 +0,0 @@ -<?php - -/** - * Smarty Method GetTemplateVars - * - * Smarty::getTemplateVars() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_GetTemplateVars -{ - /** - * Valid for all objects - * - * @var int - */ - public $objMap = 7; - - /** - * Returns a single or all template variables - * - * @api Smarty::getTemplateVars() - * @link http://www.smarty.net/docs/en/api.get.template.vars.tpl - * - * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data - * @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(Smarty_Internal_Data $data, $varName = null, Smarty_Internal_Data $_ptr = null, $searchParents = true) - { - if (isset($varName)) { - $_var = $this->_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) { - $_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) { - $_ptr = $_ptr->parent; - } else { - $_ptr = null; - } - } - if (isset(Smarty::$global_tpl_vars[$varName])) { - // found it, return it - return Smarty::$global_tpl_vars[$varName]; - } - /* @var \Smarty $smarty */ - $smarty = isset($data->smarty) ? $data->smarty : $data; - if ($smarty->error_unassigned && $errorEnable) { - // force a notice - $x = $$varName; - } - - return new Smarty_Undefined_Variable; - } - -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_loadfilter.php b/library/Smarty/libs/sysplugins/smarty_internal_method_loadfilter.php deleted file mode 100644 index 7fb11179f..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_loadfilter.php +++ /dev/null @@ -1,77 +0,0 @@ -<?php - -/** - * Smarty Method LoadFilter - * - * Smarty::loadFilter() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_LoadFilter -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Valid filter types - * - * @var array - */ - private $filterTypes = array('pre' => 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 = isset($obj->smarty) ? $obj->smarty : $obj; - $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}\""); - } - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_loadplugin.php b/library/Smarty/libs/sysplugins/smarty_internal_method_loadplugin.php deleted file mode 100644 index c153f55f0..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_loadplugin.php +++ /dev/null @@ -1,111 +0,0 @@ -<?php - -/** - * Smarty Extension Loadplugin - * - * $smarty->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; - require_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; - require_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) { - require_once($file); - return $file; - } - } - } - // no plugin loaded - return false; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_mustcompile.php b/library/Smarty/libs/sysplugins/smarty_internal_method_mustcompile.php deleted file mode 100644 index f28a68e6d..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_mustcompile.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php - -/** - * Smarty Method UnloadFilter - * - * Smarty_Internal_Template::mustCompile() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_MustCompile -{ - /** - * Valid for template object - * - * @var int - */ - public $objMap = 2; - - /** - * Returns if the current template must be compiled by the Smarty compiler - * It does compare the timestamps of template source and the compiled templates and checks the force compile - * configuration - * - * @param \Smarty_Internal_Template $_template - * - * @return bool - * @throws \SmartyException - */ - public function mustCompile(Smarty_Internal_Template $_template) - { - if (!$_template->source->exists) { - if (isset($_template->parent) && $_template->parent->_objType == 2) { - $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->smarty->compile_check && $_template->compiled->getTimeStamp() < $_template->source->getTimeStamp()))); - } - - return $_template->mustCompile; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php b/library/Smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php deleted file mode 100644 index 55c5090ac..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php - -/** - * Smarty Method RegisterCacheResource - * - * Smarty::registerCacheResource() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_RegisterCacheResource -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Registers a resource to fetch a template - * - * @api Smarty::registerCacheResource() - * @link http://www.smarty.net/docs/en/api.register.cacheresource.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $name name of resource type - * @param \Smarty_CacheResource $resource_handler - * - * @return \Smarty|\Smarty_Internal_Template - */ - public function registerCacheResource(Smarty_Internal_TemplateBase $obj, $name, Smarty_CacheResource $resource_handler) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - $smarty->registered_cache_resources[$name] = $resource_handler; - return $obj; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerclass.php b/library/Smarty/libs/sysplugins/smarty_internal_method_registerclass.php deleted file mode 100644 index d2e5e20bb..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerclass.php +++ /dev/null @@ -1,46 +0,0 @@ -<?php - -/** - * Smarty Method RegisterClass - * - * Smarty::registerClass() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_RegisterClass -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Registers static classes to be used in templates - * - * @api Smarty::registerClass() - * @link http://www.smarty.net/docs/en/api.register.class.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $class_name - * @param string $class_impl the referenced PHP class to - * register - * - * @return \Smarty|\Smarty_Internal_Template - * @throws \SmartyException - */ - public function registerClass(Smarty_Internal_TemplateBase $obj, $class_name, $class_impl) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - // 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; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php b/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php deleted file mode 100644 index 370aa38dc..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php - -/** - * Smarty Method RegisterDefaultConfigHandler - * - * Smarty::registerDefaultConfigHandler() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_RegisterDefaultConfigHandler -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Register config default handler - * - * @api Smarty::registerDefaultConfigHandler() - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param callable $callback class/method name - * - * @return \Smarty|\Smarty_Internal_Template - * @throws SmartyException if $callback is not callable - */ - public function registerDefaultConfigHandler(Smarty_Internal_TemplateBase $obj, $callback) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if (is_callable($callback)) { - $smarty->default_config_handler_func = $callback; - } else { - throw new SmartyException("Default config handler not callable"); - } - return $obj; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php b/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php deleted file mode 100644 index 80b801ce5..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php +++ /dev/null @@ -1,43 +0,0 @@ -<?php - -/** - * Smarty Method RegisterDefaultPluginHandler - * - * Smarty::registerDefaultPluginHandler() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_RegisterDefaultPluginHandler -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Registers a default plugin handler - * - * @api Smarty::registerDefaultPluginHandler() - * @link http://www.smarty.net/docs/en/api.register.default.plugin.handler.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param callable $callback class/method name - * - * @return \Smarty|\Smarty_Internal_Template - * @throws SmartyException if $callback is not callable - */ - public function registerDefaultPluginHandler(Smarty_Internal_TemplateBase $obj, $callback) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if (is_callable($callback)) { - $smarty->default_plugin_handler_func = $callback; - } else { - throw new SmartyException("Default plugin handler '$callback' not callable"); - } - return $obj; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php b/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php deleted file mode 100644 index 40979e7a6..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php +++ /dev/null @@ -1,72 +0,0 @@ -<?php - -/** - * Smarty Method RegisterDefaultTemplateHandler - * - * Smarty::registerDefaultTemplateHandler() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_RegisterDefaultTemplateHandler -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Register template default handler - * - * @api Smarty::registerDefaultTemplateHandler() - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param callable $callback class/method name - * - * @return \Smarty|\Smarty_Internal_Template - * @throws SmartyException if $callback is not callable - */ - public function registerDefaultTemplateHandler(Smarty_Internal_TemplateBase $obj, $callback) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - 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 - */ - 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); - } - $source->filepath = $_return; - } elseif ($_return === true) { - $source->content = $_content; - $source->timestamp = $_timestamp; - $source->exists = true; - $source->handler->recompiled = true; - $source->filepath = false; - } - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerfilter.php b/library/Smarty/libs/sysplugins/smarty_internal_method_registerfilter.php deleted file mode 100644 index 84b2c2630..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerfilter.php +++ /dev/null @@ -1,88 +0,0 @@ -<?php - -/** - * Smarty Method RegisterFilter - * - * Smarty::registerFilter() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_RegisterFilter -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Valid filter types - * - * @var array - */ - private $filterTypes = array('pre' => 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 = isset($obj->smarty) ? $obj->smarty : $obj; - $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}\""); - } - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerobject.php b/library/Smarty/libs/sysplugins/smarty_internal_method_registerobject.php deleted file mode 100644 index f27f1720b..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerobject.php +++ /dev/null @@ -1,71 +0,0 @@ -<?php - -/** - * Smarty Method RegisterObject - * - * Smarty::registerObject() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_RegisterObject -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Registers object to be used in templates - * - * @api Smarty::registerObject() - * @link http://www.smarty.net/docs/en/api.register.object.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $object_name - * @param object $object the - * referenced - * PHP object to - * register - * @param array $allowed_methods_properties list of - * allowed - * methods - * (empty = all) - * @param bool $format smarty - * argument - * format, else - * traditional - * @param array $block_methods list of - * block-methods - * - * @return \Smarty|\Smarty_Internal_Template - * @throws \SmartyException - */ - public function registerObject(Smarty_Internal_TemplateBase $obj, $object_name, $object, $allowed_methods_properties = array(), $format = true, $block_methods = array()) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - // 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; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerplugin.php b/library/Smarty/libs/sysplugins/smarty_internal_method_registerplugin.php deleted file mode 100644 index 95814581d..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerplugin.php +++ /dev/null @@ -1,50 +0,0 @@ -<?php - -/** - * Smarty Method RegisterPlugin - * - * Smarty::registerPlugin() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_RegisterPlugin -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Registers plugin to be used in templates - * - * @api Smarty::registerPlugin() - * @link http://www.smarty.net/docs/en/api.register.plugin.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $type plugin type - * @param string $name name of template tag - * @param callback $callback PHP callback to register - * @param bool $cacheable if true (default) this - * function is cache able - * @param mixed $cache_attr caching attributes if any - * - * @return \Smarty|\Smarty_Internal_Template - * @throws SmartyException when the plugin tag is invalid - */ - public function registerPlugin(Smarty_Internal_TemplateBase $obj, $type, $name, $callback, $cacheable = true, $cache_attr = null) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - 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"); - } else { - $smarty->registered_plugins[$type][$name] = array($callback, (bool) $cacheable, (array) $cache_attr); - } - return $obj; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_registerresource.php b/library/Smarty/libs/sysplugins/smarty_internal_method_registerresource.php deleted file mode 100644 index 43246ee9b..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_registerresource.php +++ /dev/null @@ -1,44 +0,0 @@ -<?php - -/** - * Smarty Method RegisterResource - * - * Smarty::registerResource() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_RegisterResource -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Registers a resource to fetch a template - * - * @api Smarty::registerResource() - * @link http://www.smarty.net/docs/en/api.register.resource.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $name name of resource type - * @param Smarty_Resource|array $resource_handler or instance of - * Smarty_Resource, or - * array of callbacks to - * handle resource - * (deprecated) - * - * @return \Smarty|\Smarty_Internal_Template - */ - public function registerResource(Smarty_Internal_TemplateBase $obj, $name, $resource_handler) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - $smarty->registered_resources[$name] = $resource_handler instanceof - Smarty_Resource ? $resource_handler : array($resource_handler, false); - return $obj; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php b/library/Smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php deleted file mode 100644 index b1f965cd9..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php +++ /dev/null @@ -1,70 +0,0 @@ -<?php - -/** - * Smarty Method SetAutoloadFilters - * - * Smarty::setAutoloadFilters() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_SetAutoloadFilters -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Valid filter types - * - * @var array - */ - private $filterTypes = array('pre' => 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 - */ - public function setAutoloadFilters(Smarty_Internal_TemplateBase $obj, $filters, $type = null) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - 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}\""); - } - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php b/library/Smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php deleted file mode 100644 index 4ff5d7f82..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php +++ /dev/null @@ -1,41 +0,0 @@ -<?php - -/** - * Smarty Method SetDebugTemplate - * - * Smarty::setDebugTemplate() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_SetDebugTemplate -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * set the debug template - * - * @api Smarty::setDebugTemplate() - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $tpl_name - * - * @return \Smarty|\Smarty_Internal_Template - * @throws SmartyException if file is not readable - */ - public function setDebugTemplate(Smarty_Internal_TemplateBase $obj, $tpl_name) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if (!is_readable($tpl_name)) { - throw new SmartyException("Unknown file '{$tpl_name}'"); - } - $smarty->debug_tpl = $tpl_name; - return $obj; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php b/library/Smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php deleted file mode 100644 index 5a707287a..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php - -/** - * Smarty Method SetDefaultModifiers - * - * Smarty::setDefaultModifiers() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_SetDefaultModifiers -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Set default modifiers - * - * @api Smarty::setDefaultModifiers() - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param array|string $modifiers modifier or list of modifiers - * to set - * - * @return \Smarty|\Smarty_Internal_Template - */ - public function setDefaultModifiers(Smarty_Internal_TemplateBase $obj, $modifiers) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - $smarty->default_modifiers = (array) $modifiers; - return $obj; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php b/library/Smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php deleted file mode 100644 index e3d966e1c..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php - -/** - * Smarty Method UnloadFilter - * - * Smarty::unloadFilter() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_UnloadFilter extends Smarty_Internal_Method_LoadFilter -{ - /** - * load a filter of specified type and name - * - * @api Smarty::unloadFilter() - * - * @link http://www.smarty.net/docs/en/api.unload.filter.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $type filter type - * @param string $name filter name - * - * @return bool - */ - public function unloadFilter(Smarty_Internal_TemplateBase $obj, $type, $name) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - $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; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php b/library/Smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php deleted file mode 100644 index 80381015a..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php - -/** - * Smarty Method UnregisterCacheResource - * - * Smarty::unregisterCacheResource() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_UnregisterCacheResource -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Registers a resource to fetch a template - * - * @api Smarty::unregisterCacheResource() - * @link http://www.smarty.net/docs/en/api.unregister.cacheresource.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $type name of cache resource type - * - * @return \Smarty|\Smarty_Internal_Template - */ - public function unregisterCacheResource(Smarty_Internal_TemplateBase $obj, $name) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if (isset($smarty->registered_cache_resources[$name])) { - unset($smarty->registered_cache_resources[$name]); - } - return $obj; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php b/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php deleted file mode 100644 index c80ae9a65..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php - -/** - * Smarty Method UnregisterFilter - * - * Smarty::unregisterFilter() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_UnregisterFilter extends Smarty_Internal_Method_RegisterFilter -{ - /** - * Unregisters a filter function - * - * @api Smarty::unregisterFilter() - * - * @link http://www.smarty.net/docs/en/api.unregister.filter.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $type filter type - * @param callback|string $callback - * - * @return \Smarty|\Smarty_Internal_Template - */ - public function unregisterFilter(Smarty_Internal_TemplateBase $obj, $type, $callback) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - $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; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php b/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php deleted file mode 100644 index a94331683..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php - -/** - * Smarty Method UnregisterObject - * - * Smarty::unregisterObject() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_UnregisterObject -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Registers plugin to be used in templates - * - * @api Smarty::unregisterObject() - * @link http://www.smarty.net/docs/en/api.unregister.object.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $object_name name of object - * - * @return \Smarty|\Smarty_Internal_Template - */ - public function unregisterObject(Smarty_Internal_TemplateBase $obj, $object_name) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if (isset($smarty->registered_objects[$object_name])) { - unset($smarty->registered_objects[$object_name]); - } - return $obj; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php b/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php deleted file mode 100644 index 06cb2d354..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php +++ /dev/null @@ -1,41 +0,0 @@ -<?php - -/** - * Smarty Method UnregisterPlugin - * - * Smarty::unregisterPlugin() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_UnregisterPlugin -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Registers plugin to be used in templates - * - * @api Smarty::unregisterPlugin() - * @link http://www.smarty.net/docs/en/api.unregister.plugin.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $type plugin type - * @param string $name name of template tag - * - * @return \Smarty|\Smarty_Internal_Template - */ - public function unregisterPlugin(Smarty_Internal_TemplateBase $obj, $type, $name) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if (isset($smarty->registered_plugins[$type][$name])) { - unset($smarty->registered_plugins[$type][$name]); - } - return $obj; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php b/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php deleted file mode 100644 index 767bd74ab..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php - -/** - * Smarty Method UnregisterResource - * - * Smarty::unregisterResource() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Method_UnregisterResource -{ - /** - * Valid for Smarty and template object - * - * @var int - */ - public $objMap = 3; - - /** - * Registers a resource to fetch a template - * - * @api Smarty::unregisterResource() - * @link http://www.smarty.net/docs/en/api.unregister.resource.tpl - * - * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj - * @param string $type name of resource type - * - * @return \Smarty|\Smarty_Internal_Template - */ - public function unregisterResource(Smarty_Internal_TemplateBase $obj, $type) - { - $smarty = isset($obj->smarty) ? $obj->smarty : $obj; - if (isset($smarty->registered_resources[$type])) { - unset($smarty->registered_resources[$type]); - } - return $obj; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_nocache_insert.php b/library/Smarty/libs/sysplugins/smarty_internal_nocache_insert.php deleted file mode 100644 index b3d5fa86a..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_nocache_insert.php +++ /dev/null @@ -1,51 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Nocache Insert - * Compiles the {insert} tag into the cache file - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Smarty Internal Plugin Compile Insert Class - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_Nocache_Insert -{ - /** - * Compiles code for the {insert} tag into cache file - * - * @param string $_function insert function name - * @param array $_attr array with parameter - * @param Smarty_Internal_Template $_template template object - * @param string $_script script name to load or 'null' - * @param string $_assign optional variable name - * - * @return string compiled code - */ - public static function compile($_function, $_attr, $_template, $_script, $_assign = null) - { - $_output = '<?php '; - if ($_script != 'null') { - // script which must be included - // code for script file loading - $_output .= "require_once '{$_script}';"; - } - // call insert - if (isset($_assign)) { - $_output .= "\$_smarty_tpl->assign('{$_assign}' , {$_function} (" . var_export($_attr, true) . ",\$_smarty_tpl), true);?>"; - } else { - $_output .= "echo {$_function}(" . var_export($_attr, true) . ",\$_smarty_tpl);?>"; - } - $_tpl = $_template; - while (isset($_tpl->parent) && $_tpl->parent->_objType == 2) { - $_tpl = $_tpl->parent; - } - - return "/*%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/"; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_parsetree.php b/library/Smarty/libs/sysplugins/smarty_internal_parsetree.php deleted file mode 100644 index 32c9df094..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Templateparser Parsetrees - * These are classes to build parsetrees in the template parser - * - * @package Smarty - * @subpackage Compiler - * @author Thue Kristensen - * @author Uwe Tews - */ - -/** - * @package Smarty - * @subpackage Compiler - * @ignore - */ -abstract class Smarty_Internal_ParseTree -{ - - /** - * Buffer content - * - * @var mixed - */ - public $data; - - /** - * Subtree array - * - * @var array - */ - public $subtrees = array(); - - /** - * Return buffer - * - * @param \Smarty_Internal_Templateparser $parser - * - * @return string buffer content - */ - abstract public function to_smarty_php(Smarty_Internal_Templateparser $parser); - - /** - * Template data object destructor - */ - public function __destruct() - { - $this->data = null; - $this->subtrees = null; - } - -} - - diff --git a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_code.php b/library/Smarty/libs/sysplugins/smarty_internal_parsetree_code.php deleted file mode 100644 index d0f0b3fd9..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_code.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Templateparser Parse Tree - * These are classes to build parse trees in the template parser - * - * @package Smarty - * @subpackage Compiler - * @author Thue Kristensen - * @author Uwe Tews - */ - -/** - * Code fragment inside a tag . - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class Smarty_Internal_ParseTree_Code extends Smarty_Internal_ParseTree -{ - /** - * Create parse tree buffer for code fragment - * - * @param string $data content - */ - public function __construct($data) - { - $this->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/library/Smarty/libs/sysplugins/smarty_internal_parsetree_dq.php b/library/Smarty/libs/sysplugins/smarty_internal_parsetree_dq.php deleted file mode 100644 index 607389cb5..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_dq.php +++ /dev/null @@ -1,88 +0,0 @@ -<?php - -/** - * Double quoted string inside a tag. - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ - -/** - * Double quoted string inside a tag. - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class Smarty_Internal_ParseTree_Dq extends Smarty_Internal_ParseTree -{ - /** - * Create parse tree buffer for double quoted string subtrees - * - * @param object $parser parser object - * @param Smarty_Internal_ParseTree $subtree parse tree buffer - */ - public function __construct($parser, Smarty_Internal_ParseTree $subtree) - { - $this->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, '<?php echo ' . $subtree->data . ';?>'); - } elseif ($subtree instanceof Smarty_Internal_ParseTree_DqContent) { - $this->subtrees[$last_subtree]->data = $parser->compiler->appendCode($this->subtrees[$last_subtree]->data, '<?php echo "' . $subtree->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/library/Smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php b/library/Smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php deleted file mode 100644 index a8ca389d9..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Templateparser Parse Tree - * These are classes to build parse tree in the template parser - * - * @package Smarty - * @subpackage Compiler - * @author Thue Kristensen - * @author Uwe Tews - */ - -/** - * Raw chars as part of a double quoted string. - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class Smarty_Internal_ParseTree_DqContent extends Smarty_Internal_ParseTree -{ - /** - * Create parse tree buffer with string content - * - * @param string $data string section - */ - public function __construct($data) - { - $this->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/library/Smarty/libs/sysplugins/smarty_internal_parsetree_tag.php b/library/Smarty/libs/sysplugins/smarty_internal_parsetree_tag.php deleted file mode 100644 index 575c8c9e8..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_tag.php +++ /dev/null @@ -1,69 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Templateparser Parse Tree - * These are classes to build parse tree in the template parser - * - * @package Smarty - * @subpackage Compiler - * @author Thue Kristensen - * @author Uwe Tews - */ - -/** - * A complete smarty tag. - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class Smarty_Internal_ParseTree_Tag extends Smarty_Internal_ParseTree -{ - - /** - * Saved block nesting level - * - * @var int - */ - public $saved_block_nesting; - - /** - * Create parse tree buffer for Smarty tag - * - * @param \Smarty_Internal_Templateparser $parser parser object - * @param string $data content - */ - public function __construct(Smarty_Internal_Templateparser $parser, $data) - { - $this->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 = sprintf('$_tmp%d', ++ Smarty_Internal_Templateparser::$prefix_number); - $tmp = $parser->compiler->appendCode('<?php ob_start();?>', $this->data); - $tmp = $parser->compiler->appendCode($tmp, "<?php {$var}=ob_get_clean();?>"); - $parser->compiler->prefix_code[] = sprintf("%s", $tmp); - - return $var; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_template.php b/library/Smarty/libs/sysplugins/smarty_internal_parsetree_template.php deleted file mode 100644 index 623ae51a3..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_template.php +++ /dev/null @@ -1,128 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Templateparser Parse Tree - * These are classes to build parse tree in the template parser - * - * @package Smarty - * @subpackage Compiler - * @author Thue Kristensen - * @author Uwe Tews - */ - -/** - * Template element - * - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree -{ - - /** - * Array of template elements - * - * @var array - */ - public $subtrees = Array(); - - /** - * Create root of parse tree for template elements - * - */ - public function __construct() - { - } - - /** - * Append buffer to subtree - * - * @param \Smarty_Internal_Templateparser $parser - * @param Smarty_Internal_ParseTree $subtree - */ - public function append_subtree(Smarty_Internal_Templateparser $parser, Smarty_Internal_ParseTree $subtree) - { - if (!empty($subtree->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 = ''; - for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key ++) { - if ($this->subtrees[$key] instanceof Smarty_Internal_ParseTree_Text) { - $subtree = $this->subtrees[$key]->to_smarty_php($parser); - while ($key + 1 < $cnt && ($this->subtrees[$key + 1] instanceof Smarty_Internal_ParseTree_Text || - $this->subtrees[$key + 1]->data == '')) { - $key ++; - if ($this->subtrees[$key]->data == '') { - continue; - } - $subtree .= $this->subtrees[$key]->to_smarty_php($parser); - } - if ($subtree == '') { - continue; - } - $code .= preg_replace('/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/', "<?php echo '\$1'; ?>\n", - $subtree); - continue; - } - if ($this->subtrees[$key] instanceof Smarty_Internal_ParseTree_Tag) { - $subtree = $this->subtrees[$key]->to_smarty_php($parser); - while ($key + 1 < $cnt && ($this->subtrees[$key + 1] instanceof Smarty_Internal_ParseTree_Tag || - $this->subtrees[$key + 1]->data == '')) { - $key ++; - if ($this->subtrees[$key]->data == '') { - continue; - } - $subtree = $parser->compiler->appendCode($subtree, $this->subtrees[$key]->to_smarty_php($parser)); - } - if ($subtree == '') { - continue; - } - $code .= $subtree; - continue; - } - $code .= $this->subtrees[$key]->to_smarty_php($parser); - } - return $code; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_text.php b/library/Smarty/libs/sysplugins/smarty_internal_parsetree_text.php deleted file mode 100644 index b3100fa09..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_parsetree_text.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php - -/** - * Smarty Internal Plugin Templateparser Parse Tree - * These are classes to build parse tree in the template parser - * - * @package Smarty - * @subpackage Compiler - * @author Thue Kristensen - * @author Uwe Tews - * * - * template text - * @package Smarty - * @subpackage Compiler - * @ignore - */ -class Smarty_Internal_ParseTree_Text extends Smarty_Internal_ParseTree -{ - /** - * Create template text buffer - * - * @param string $data text - */ - public function __construct($data) - { - $this->data = $data; - } - - /** - * 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/library/Smarty/libs/sysplugins/smarty_internal_resource_eval.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_eval.php deleted file mode 100644 index aca710350..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_eval.php +++ /dev/null @@ -1,96 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Resource Eval - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @author Rodney Rehm - */ - -/** - * Smarty Internal Plugin Resource Eval - * Implements the strings as resource for Smarty template - * {@internal unlike string-resources the compiled state of eval-resources is NOT saved for subsequent access}} - * - * @package Smarty - * @subpackage TemplateResources - */ -class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled -{ - /** - * 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) - { - $source->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 - * @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/library/Smarty/libs/sysplugins/smarty_internal_resource_extends.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_extends.php deleted file mode 100644 index 3d687dca8..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_extends.php +++ /dev/null @@ -1,124 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Resource Extends - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @author Rodney Rehm - */ - -/** - * Smarty Internal Plugin Resource Extends - * Implements the file system as resource for Smarty which {extend}s a chain of template files templates - * - * @package Smarty - * @subpackage TemplateResources - */ -class Smarty_Internal_Resource_Extends extends Smarty_Resource -{ - /** - * mbstring.overload flag - * - * @var int - */ - public $mbstring_overload = 0; - - /** - * populate Source Object with meta data from Resource - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - * - * @throws SmartyException - */ - public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) - { - $uid = ''; - $sources = array(); - $components = explode('|', $source->name); - $exists = true; - foreach ($components as $component) { - /* @var \Smarty_Template_Source $_s */ - $_s = Smarty_Template_Source::load(null, $source->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->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 read 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 - */ - public function checkTimestamps() - { - return false; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_file.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_file.php deleted file mode 100644 index b15e3cc6a..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_file.php +++ /dev/null @@ -1,179 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Resource File - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @author Rodney Rehm - */ - -/** - * Smarty Internal Plugin Resource File - * Implements the file system as resource for Smarty templates - * - * @package Smarty - * @subpackage TemplateResources - */ -class Smarty_Internal_Resource_File extends Smarty_Resource -{ - /** - * 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 && isset($_template->parent) && $_template->parent->_objType == 2 && - 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}'"); - } - $path = dirname($_template->parent->source->filepath) . DS . $file; - // normalize path - $path = $source->smarty->_realpath($path); - // files relative to a template only get one shot - return is_file($path) ? $path : false; - } - // normalize DS - if (strpos($file, DS == '/' ? '\\' : '/') !== false) { - $file = str_replace(DS == '/' ? '\\' : '/', DS, $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, '.' . DS) !== 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; - } - - /** - * populate Source Object with meta data from 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) - { - $source->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); - if ($source->smarty->compile_check == 1) { - $source->timestamp = filemtime($source->filepath); - } - } else { - $source->timestamp = false; - $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); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_php.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_php.php deleted file mode 100644 index 62680625c..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_php.php +++ /dev/null @@ -1,108 +0,0 @@ -<?php - -/** - * Smarty Internal Plugin Resource PHP - * Implements the file system as resource for PHP templates - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @author Rodney Rehm - */ -class Smarty_Internal_Resource_Php extends Smarty_Internal_Resource_File -{ - /** - * Flag that it's an uncompiled resource - * - * @var bool - */ - public $uncompiled = true; - /** - * container for short_open_tag directive's value before executing PHP templates - * - * @var string - */ - protected $short_open_tag; - - /** - * Resource does implement populateCompiledFilepath() method - * - * @var bool - */ - public $hasCompiledHandler = true; - - - /** - * Create a new PHP Resource - - */ - public function __construct() - { - $this->short_open_tag = ini_get('short_open_tag'); - } - - /** - * 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}'"); - } - - /** - * 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) { - if (isset($_template->parent) && $_template->parent->_objType == 2) { - $parent_resource = " in '{$_template->parent->template_resource}'"; - } else { - $parent_resource = ''; - } - throw new SmartyException("Unable to load template {$source->type} '{$source->name}'{$parent_resource}"); - } - - // prepare variables - extract($_template->getTemplateVars()); - - // include PHP template with short open tags enabled - ini_set('short_open_tag', '1'); - /** @var Smarty_Internal_Template $_smarty_template - * used in included file - */ - $_smarty_template = $_template; - include($source->filepath); - ini_set('short_open_tag', $this->short_open_tag); - } - - /** - * 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 = false; - $compiled->timestamp = false; - $compiled->exists = false; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_registered.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_registered.php deleted file mode 100644 index 69b396b6a..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_registered.php +++ /dev/null @@ -1,99 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Resource Registered - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @author Rodney Rehm - */ - -/** - * Smarty Internal Plugin Resource Registered - * Implements the registered resource for Smarty template - * - * @package Smarty - * @subpackage TemplateResources - * @deprecated - */ -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) - { - $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; - } - } - - /** - * 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) - { - $source->timestamp = $this->getTemplateTimestamp($source); - $source->exists = !!$source->timestamp; - } - - /** - * 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 - */ - 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; - } - - /** - * 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 - */ - public function getContent(Smarty_Template_Source $source) - { - // return template string - $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 $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 basename($source->name); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_stream.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_stream.php deleted file mode 100644 index 8a902268c..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_stream.php +++ /dev/null @@ -1,81 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Resource Stream - * Implements the streams as resource for Smarty template - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * @author Rodney Rehm - */ - -/** - * Smarty Internal Plugin Resource Stream - * Implements the streams as resource for Smarty template - * - * @link http://php.net/streams - * @package Smarty - * @subpackage TemplateResources - */ -class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled -{ - /** - * 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) - { - 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; - } - - /** - * 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) - { - $t = ''; - // the availability of the stream has already been checked in Smarty_Resource::fetch() - $fp = fopen($source->filepath, 'r+'); - if ($fp) { - while (!feof($fp) && ($current_line = fgets($fp)) !== false) { - $t .= $current_line; - } - fclose($fp); - - return $t; - } else { - 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 boolean $isConfig flag for config resource - * - * @return string unique resource name - */ - public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false) - { - return get_class($this) . '#' . $resource_name; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_resource_string.php b/library/Smarty/libs/sysplugins/smarty_internal_resource_string.php deleted file mode 100644 index 75e99e6fb..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_resource_string.php +++ /dev/null @@ -1,97 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Resource String - * - * @package Smarty - * @subpackage TemplateResources - * @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 - * @subpackage TemplateResources - */ -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) - { - $source->uid = $source->filepath = sha1($source->name); - $source->timestamp = 0; - $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 - * Always returns an empty string. - * - * @param Smarty_Template_Source $source source object - * - * @return string resource's basename - */ - public function getBasename(Smarty_Template_Source $source) - { - return ''; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php deleted file mode 100644 index 4e2fb83e6..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php +++ /dev/null @@ -1,67 +0,0 @@ -<?php - -/** - * Inline Runtime Methods render, setSourceByUid, setupSubTemplate - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_CacheModify -{ - /** - * check client side cache - * - * @param Smarty_Internal_Template $_template - * @param string $content - */ - public function cacheModifiedCheck(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $content) - { - $_isCached = $_template->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/library/Smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php deleted file mode 100644 index ce6749770..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php +++ /dev/null @@ -1,94 +0,0 @@ -<?php -/** - * Smarty Internal Extension - * This file contains the Smarty template extension to create a code frame - * - * @package Smarty - * @subpackage Template - * @author Uwe Tews - */ - -/** - * Class Smarty_Internal_Extension_CodeFrame - * Create code frame for compiled and cached templates - */ -class Smarty_Internal_Runtime_CodeFrame -{ - /** - * Create code frame for compiled and cached templates - * - * @param Smarty_Internal_Template $_template - * @param string $content optional template content - * @param string $functions compiled template function and block code - * @param bool $cache flag for cache file - * @param \Smarty_Internal_TemplateCompilerBase $compiler - * - * @return string - */ - public function create(Smarty_Internal_Template $_template, $content = '', $functions = '', $cache = false, - Smarty_Internal_TemplateCompilerBase $compiler = null) - { - // build property code - $properties[ 'has_nocache_code' ] = $_template->compiled->has_nocache_code; - $properties[ 'version' ] = Smarty::SMARTY_VERSION; - $properties[ 'unifunc' ] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true)); - if (!$cache) { - $properties[ 'file_dependency' ] = $_template->compiled->file_dependency; - $properties[ 'includes' ] = $_template->compiled->includes; - if (!empty($compiler->tpl_function)) { - $properties[ 'tpl_function' ] = $compiler->tpl_function; - } - } else { - $properties[ 'file_dependency' ] = $_template->cached->file_dependency; - $properties[ 'cache_lifetime' ] = $_template->cache_lifetime; - if (!empty($_template->tpl_function)) { - $properties[ 'tpl_function' ] = $_template->tpl_function; - } - } - $output = "<?php\n"; - $output .= "/* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . strftime("%Y-%m-%d %H:%M:%S") . - "\n from \"" . $_template->source->filepath . "\" */\n\n"; - - $dec = "\$_smarty_tpl->smarty->ext->_validateCompiled->decodeProperties(\$_smarty_tpl, " . - var_export($properties, true) . ',' . ($cache ? 'true' : 'false') . ")"; - $output .= "if ({$dec}) {\n"; - $output .= "function {$properties['unifunc']} (\$_smarty_tpl) {\n"; - // include code for plugins - if (!$cache) { - if (!empty($_template->compiled->required_plugins[ 'compiled' ])) { - foreach ($_template->compiled->required_plugins[ 'compiled' ] as $tmp) { - foreach ($tmp as $data) { - $file = addslashes($data[ 'file' ]); - if (is_array($data[ 'function' ])) { - $output .= "if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) require_once '{$file}';\n"; - } else { - $output .= "if (!is_callable('{$data['function']}')) require_once '{$file}';\n"; - } - } - } - } - if ($_template->caching && !empty($_template->compiled->required_plugins[ 'nocache' ])) { - $_template->compiled->has_nocache_code = true; - $output .= "echo '/*%%SmartyNocache:{$_template->compiled->nocache_hash}%%*/<?php \$_smarty = \$_smarty_tpl->smarty; "; - foreach ($_template->compiled->required_plugins[ 'nocache' ] as $tmp) { - foreach ($tmp as $data) { - $file = addslashes($data[ 'file' ]); - if (is_Array($data[ 'function' ])) { - $output .= addslashes("if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) require_once '{$file}';\n"); - } else { - $output .= addslashes("if (!is_callable('{$data['function']}')) require_once '{$file}';\n"); - } - } - } - $output .= "?>/*/%%SmartyNocache:{$_template->compiled->nocache_hash}%%*/';\n"; - } - } - $output .= "?>\n"; - $output .= $content; - $output .= "<?php }\n?>"; - $output .= $functions; - $output .= "<?php }\n"; - // remove unneeded PHP tags - return preg_replace(array('/\s*\?>[\n]?<\?php\s*/', '/\?>\s*$/'), array("\n", ''), $output); - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php deleted file mode 100644 index 9af266758..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php +++ /dev/null @@ -1,69 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Filter Handler - * Smarty filter handler class - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ - -/** - * Class for filter processing - * - * @package Smarty - * @subpackage PluginsInternal - */ -class Smarty_Internal_Runtime_FilterHandler -{ - /** - * Run filters over content - * The filters will be lazy loaded if required - * class name format: Smarty_FilterType_FilterName - * plugin filename format: filtertype.filtername.php - * Smarty2 filter plugins could be used - * - * @param string $type the type of filter ('pre','post','output') which shall run - * @param string $content the content which shall be processed by the filters - * @param Smarty_Internal_Template $template template object - * - * @throws SmartyException - * @return string the filtered content - */ - public function runFilter($type, $content, Smarty_Internal_Template $template) - { - // loop over autoload filters of specified type - if (!empty($template->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/library/Smarty/libs/sysplugins/smarty_internal_runtime_foreach.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_foreach.php deleted file mode 100644 index 689636adb..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_foreach.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php - -/** - * Foreach Runtime Methods count - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_Foreach -{ - /** - * [util function] counts an array, arrayAccess/traversable or PDOStatement object - * - * @param mixed $value - * - * @return int the count for arrays and objects that implement countable, 1 for other objects that don't, and 0 - * for empty elements - */ - public function count($value) - { - if (is_array($value) === true || $value instanceof Countable) { - return count($value); - } elseif ($value instanceof IteratorAggregate) { - // Note: getIterator() returns a Traversable, not an Iterator - // thus rewind() and valid() methods may not be present - return iterator_count($value->getIterator()); - } elseif ($value instanceof Iterator) { - if ($value instanceof Generator) { - return 1; - } - return iterator_count($value); - } elseif ($value instanceof PDOStatement) { - return $value->rowCount(); - } elseif ($value instanceof Traversable) { - return iterator_count($value); - } elseif ($value instanceof ArrayAccess) { - if ($value->offsetExists(0)) { - return 1; - } - } elseif (is_object($value)) { - return count($value); - } - return 0; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php deleted file mode 100644 index 72149cd35..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php +++ /dev/null @@ -1,180 +0,0 @@ -<?php -/** - * Smarty read include path plugin - * - * @package Smarty - * @subpackage PluginsInternal - * @author Monte Ohrt - */ - -/** - * Smarty Internal Read Include Path Class - * - * @package Smarty - * @subpackage PluginsInternal - */ -class Smarty_Internal_Runtime_GetIncludePath -{ - /** - * include path cache - * - * @var string - */ - public $_include_path = ''; - - /** - * include path directory cache - * - * @var array - */ - public $_include_dirs = array(); - - /** - * include path directory cache - * - * @var array - */ - public $_user_dirs = array(); - - /** - * stream cache - * - * @var string[] - */ - public $isFile = array(); - - /** - * stream cache - * - * @var string[] - */ - public $isPath = array(); - - /** - * stream cache - * - * @var int[] - */ - public $number = array(); - - /** - * status cache - * - * @var bool - */ - public $_has_stream_include = null; - - /** - * Number for array index - * - * @var int - */ - public $counter = 0; - - /** - * Check if include path was updated - * - * @param \Smarty $smarty - * - * @return bool - */ - public function isNewIncludePath(Smarty $smarty) - { - $_i_path = get_include_path(); - if ($this->_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 . DS, 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/library/Smarty/libs/sysplugins/smarty_internal_runtime_hhvm.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_hhvm.php deleted file mode 100644 index 117cd8166..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_hhvm.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php - -/** - * Runtime Extension Hhvm - * - * include patch for modified compiled or cached templates - * HHVM does not check if file was modified when including same file multiple times - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Runtime_Hhvm -{ - /** - * @param \Smarty_Internal_Template $_template - * @param string $file file name - * - * @return mixed - */ - static function includeHhvm(Smarty_Internal_Template $_template, $file) - { - $_smarty_tpl = $_template; - $tmp_file = $file . preg_replace('![^\w]+!', '_', uniqid(rand(), true)) . '.php'; - file_put_contents($tmp_file, file_get_contents($file)); - $result = @include $tmp_file; - @unlink($tmp_file); - return $result; - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php deleted file mode 100644 index 08a560606..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php +++ /dev/null @@ -1,233 +0,0 @@ -<?php - -/** - * Inheritance Runtime Methods processBlock, endChild, init - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_Inheritance -{ - - /** - * State machine - * - 0 idle next extends will create a new inheritance tree - * - 1 processing child template - * - 2 wait for next inheritance template - * - 3 assume parent template, if child will loaded goto state 1 - * a call to a sub template resets the state to 0 - * - * @var int - */ - public $state = 0; - - /** - * Array of block parameter of known {block} tags - * - * @var array - */ - public $blockParameter = array(); - - /** - * inheritance template nesting level - * - * @var int - */ - public $inheritanceLevel = 0; - - /** - * inheritance template index - * - * @var int - */ - public $tplIndex = - 1; - - /** - * Array of compiled template file path - * - key template index - * only used when caching is enabled - * - * @var []string - */ - public $compiledFilePath = array(); - - /** - * Current {block} nesting level - * - * @var int - */ - public $blockNesting = 0; - - /** - * Initialize inheritance - * - * @param \Smarty_Internal_Template $tpl template object of caller - * @param bool $initChild if true init for child template - * @param array $blockNames outer level block name - * - */ - public function init(Smarty_Internal_Template $tpl, $initChild, $blockNames = array()) - { - // if template was from an inner block or template is a parent template create new inheritance root - if ($initChild && ($this->blockNesting || $this->state == 3)) { - $tpl->ext->_inheritance = new Smarty_Internal_Runtime_Inheritance(); - $tpl->ext->_inheritance->init($tpl, $initChild, $blockNames); - return; - } - // start of child sub template(s) - if ($initChild) { - $this->state = 1; - if (!$this->inheritanceLevel) { - //grab any output of child templates - ob_start(); - } - $this->inheritanceLevel ++; - } - // in parent state {include} will not increment template index - if ($this->state != 3) { - $this->tplIndex ++; - } - // 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 template object of caller - */ - public function endChild(Smarty_Internal_Template $tpl) - { - $this->inheritanceLevel --; - if (!$this->inheritanceLevel) { - ob_end_clean(); - $this->state = 2; - } - } - - /** - * Process inheritance {block} tag - * - * $type 0 = {block}: - * - search in inheritance template hierarchy for child blocks - * if found call it, otherwise call current block - * - ignored for outer level blocks in child templates - * - * $type 1 = {block}: - * - nested {block} - * - search in inheritance template hierarchy for child blocks - * if found call it, otherwise call current block - * - * $type 2 = {$smarty.block.child}: - * - search in inheritance template hierarchy for child blocks - * if found call it, otherwise ignore - * - * $type 3 = {block append} {block prepend}: - * - call parent block - * - * $type 4 = {$smarty.block.parent}: - * - call parent block - * - * @param \Smarty_Internal_Template $tpl template object of caller - * @param int $type call type see above - * @param string $name block name - * @param array $block block parameter - * @param array $callStack call stack with block parameters - * - * @throws \SmartyException - */ - public function processBlock(Smarty_Internal_Template $tpl, $type = 0, $name, $block, $callStack = array()) - { - if (!isset($this->blockParameter[ $name ])) { - $this->blockParameter[ $name ] = array(); - } - if ($this->state == 1) { - $block[ 2 ] = count($this->blockParameter[ $name ]); - $block[ 3 ] = $this->tplIndex; - $this->blockParameter[ $name ][] = $block; - return; - } - if ($type == 3) { - if (!empty($callStack)) { - $block = array_shift($callStack); - } else { - return; - } - } elseif ($type == 4) { - if (!empty($callStack)) { - array_shift($callStack); - if (empty($callStack)) { - throw new SmartyException("inheritance: tag {\$smarty.block.parent} used in parent template block '{$name}'"); - } - $block = array_shift($callStack); - } else { - return; - } - } else { - $index = 0; - $blockParameter = &$this->blockParameter[ $name ]; - if ($type == 0) { - $index = $block[ 2 ] = count($blockParameter); - $block[ 3 ] = $this->tplIndex; - $callStack = array(&$block); - } elseif ($type == 1) { - $block[ 3 ] = $callStack[ 0 ][ 3 ]; - for ($i = 0; $i < count($blockParameter); $i ++) { - if ($blockParameter[ $i ][ 3 ] <= $block[ 3 ]) { - $index = $blockParameter[ $i ][ 2 ]; - } - } - $block[ 2 ] = $index; - $callStack = array(&$block); - } elseif ($type == 2) { - $index = $callStack[ 0 ][ 2 ]; - if ($index == 0) { - return; - } - $callStack = $block = array(1 => false); - } - $index --; - // find lowest level child block - while ($index >= 0 && ($type || !$block[ 1 ])) { - $block = &$blockParameter[ $index ]; - array_unshift($callStack, $block); - if ($block[ 1 ]) { - break; - } - $index --; - } - if (isset($block[ 'hide' ]) && $index <= 0) { - return; - } - } - $this->blockNesting ++; - // {block append} ? - if (isset($block[ 'append' ])) { - $appendStack = $callStack; - if ($type == 0) { - array_shift($appendStack); - } - $this->processBlock($tpl, 3, $name, null, $appendStack); - } - // call block of current stack level - if (isset($block[6])) { - $block[6]($tpl, $callStack); - } else { - $block[0]($tpl, $callStack); - } - // {block prepend} ? - if (isset($block[ 'prepend' ])) { - $prependStack = $callStack; - if ($type == 0) { - array_shift($prependStack); - } - $this->processBlock($tpl, 3, $name, null, $prependStack); - } - $this->blockNesting --; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_subtemplate.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_subtemplate.php deleted file mode 100644 index 2c7623f93..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_subtemplate.php +++ /dev/null @@ -1,203 +0,0 @@ -<?php - -/** - * Sub Template Runtime Methods render, setupSubTemplate - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_SubTemplate -{ - - /** - * Subtemplate template object cache - * - * @var Smarty_Internal_Template[] - */ - public $tplObjects = array(); - - /** - * Subtemplate call count - * - * @var int[] - */ - public $subTplInfo = array(); - - /** - * Runtime function to render subtemplate - * - * @param \Smarty_Internal_Template $parent - * @param string $template template name - * @param mixed $cache_id cache id - * @param mixed $compile_id compile id - * @param integer $caching cache mode - * @param integer $cache_lifetime life time of cache data - * @param array $data passed parameter template variables - * @param int $scope scope in which {include} should execute - * @param bool $forceTplCache cache template object - * @param string $uid file dependency uid - * @param string $content_func function name - * - */ - public function render(Smarty_Internal_Template $parent, $template, $cache_id, $compile_id, $caching, - $cache_lifetime, $data, $scope, $forceTplCache, $uid = null, $content_func = null) - { - // if there are cached template objects calculate $templateID - $_templateId = - !empty($this->tplObjects) ? $parent->smarty->_getTemplateId($template, $cache_id, $compile_id, $caching) : - null; - // already in template cache? - /* @var Smarty_Internal_Template $tpl */ - if (isset($_templateId) && isset($this->tplObjects[$_templateId])) { - // clone cached template object because of possible recursive call - $tpl = clone $this->tplObjects[$_templateId]; - $tpl->parent = $parent; - // if $caching mode changed the compiled resource is invalid - if ((bool) $tpl->caching !== (bool) $caching) { - unset($tpl->compiled); - } - // get variables from calling scope - $tpl->tpl_vars = $parent->tpl_vars; - $tpl->config_vars = $parent->config_vars; - // get template functions - $tpl->tpl_function = $parent->tpl_function; - // copy inheritance object? - if (isset($parent->ext->_inheritance)) { - $tpl->ext->_inheritance = $parent->ext->_inheritance; - } else { - unset($tpl->ext->_inheritance); - } - } else { - $tpl = clone $parent; - $tpl->parent = $parent; - if (!isset($tpl->templateId) || $tpl->templateId !== $_templateId) { - $tpl->templateId = $_templateId; - $tpl->template_resource = $template; - $tpl->cache_id = $cache_id; - $tpl->compile_id = $compile_id; - if (isset($uid)) { - // for inline templates we can get all resource information from file dependency - if (isset($tpl->compiled->file_dependency[$uid])) { - list($filepath, $timestamp, $resource) = $tpl->compiled->file_dependency[$uid]; - $tpl->source = - new Smarty_Template_Source(isset($tpl->smarty->_cache['resource_handlers'][$resource]) ? - $tpl->smarty->_cache['resource_handlers'][$resource] : - Smarty_Resource::load($tpl->smarty, $resource), $tpl->smarty, - $filepath, $resource, $filepath); - $tpl->source->filepath = $filepath; - $tpl->source->timestamp = $timestamp; - $tpl->source->exists = true; - $tpl->source->uid = $uid; - } else { - $tpl->source = null; - } - } else { - $tpl->source = null; - } - if (!isset($tpl->source)) { - $tpl->source = Smarty_Template_Source::load($tpl); - unset($tpl->compiled); - } - unset($tpl->cached); - } - } - $tpl->caching = $caching; - $tpl->cache_lifetime = $cache_lifetime; - if ($caching == 9999) { - $tpl->cached = $parent->cached; - } - // set template scope - $tpl->scope = $scope; - $scopePtr = false; - if ($scope & ~Smarty::SCOPE_BUBBLE_UP) { - if ($scope == Smarty::SCOPE_GLOBAL) { - $tpl->tpl_vars = Smarty::$global_tpl_vars; - $tpl->config_vars = $tpl->smarty->config_vars; - $scopePtr = true; - } else { - if ($scope == Smarty::SCOPE_PARENT) { - $scopePtr = $parent; - } elseif ($scope == Smarty::SCOPE_SMARTY) { - $scopePtr = $tpl->smarty; - } else { - $scopePtr = $tpl; - while (isset($scopePtr->parent)) { - if ($scopePtr->parent->_objType != 2 && $scope & Smarty::SCOPE_TPL_ROOT) { - break; - } - $scopePtr = $scopePtr->parent; - } - } - $tpl->tpl_vars = $scopePtr->tpl_vars; - $tpl->config_vars = $scopePtr->config_vars; - } - } - - if (!isset($this->tplObjects[$tpl->_getTemplateId()]) && !$tpl->source->handler->recompiled) { - // if template is called multiple times set flag to to cache template objects - $forceTplCache = $forceTplCache || - (isset($this->subTplInfo[$tpl->template_resource]) && $this->subTplInfo[$tpl->template_resource] > 1); - // check if template object should be cached - if ($tpl->parent->_objType == 2 && isset($this->tplObjects[$tpl->parent->templateId]) || - ($forceTplCache && $tpl->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_AUTOMATIC) || - ($tpl->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) - ) { - $this->tplObjects[$tpl->_getTemplateId()] = $tpl; - } - } - - if (!empty($data)) { - // set up variable values - foreach ($data as $_key => $_val) { - $tpl->tpl_vars[$_key] = new Smarty_Variable($_val); - } - } - if (isset($uid)) { - if ($parent->smarty->debugging) { - $parent->smarty->_debug->start_template($tpl); - $parent->smarty->_debug->start_render($tpl); - } - $tpl->compiled->getRenderedTemplateCode($tpl, $content_func); - if ($parent->smarty->debugging) { - $parent->smarty->_debug->end_template($tpl); - $parent->smarty->_debug->end_render($tpl); - } - if ($tpl->caching == 9999 && $tpl->compiled->has_nocache_code) { - $parent->cached->hashes[$tpl->compiled->nocache_hash] = true; - } - } else { - if (isset($tpl->compiled)) { - $tpl->compiled->render($tpl); - } else { - $tpl->render(); - } - } - if ($scopePtr) { - if ($scope == Smarty::SCOPE_GLOBAL) { - Smarty::$global_tpl_vars = $tpl->tpl_vars; - $tpl->smarty->config_vars = $tpl->config_vars; - } else { - $scopePtr->tpl_vars = $tpl->tpl_vars; - $scopePtr->config_vars = $tpl->config_vars; - } - } - } - - /** - * Get called subtemplates from compiled template and save call count - * - * @param \Smarty_Internal_Template $tpl - */ - public function registerSubTemplates(Smarty_Internal_Template $tpl) - { - foreach ($tpl->compiled->includes as $name => $count) { - if (isset($this->subTplInfo[$name])) { - $this->subTplInfo[$name] += $count; - } else { - $this->subTplInfo[$name] = $count; - } - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php deleted file mode 100644 index 634ed5dc6..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php +++ /dev/null @@ -1,97 +0,0 @@ -<?php - -/** - * Tplfunc Runtime Methods callTemplateFunction - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_TplFunction -{ - /** - * Call template function - * - * @param \Smarty_Internal_Template $tpl template object - * @param string $name template function name - * @param array $params parameter array - * @param bool $nocache true if called nocache - * - * @throws \SmartyException - */ - public function callTemplateFunction(Smarty_Internal_Template $tpl, $name, $params, $nocache) - { - if (isset($tpl->tpl_function[$name])) { - if (!$tpl->caching || ($tpl->caching && $nocache)) { - $function = $tpl->tpl_function[$name]['call_name']; - } else { - if (isset($tpl->tpl_function[$name]['call_name_caching'])) { - $function = $tpl->tpl_function[$name]['call_name_caching']; - } else { - $function = $tpl->tpl_function[$name]['call_name']; - } - } - if (function_exists($function)) { - $function ($tpl, $params); - return; - } - // try to load template function dynamically - if ($this->addTplFuncToCache($tpl, $name, $function)) { - $function ($tpl, $params); - return; - } - } - throw new SmartyException("Unable to find template function '{$name}'"); - } - - /** - * - * 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->tpl_function[$_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)) { - $cache = $tplPtr->cached; - $content = $cache->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($cache, $tplPtr, preg_replace('/\s*\?>\s*$/', "\n", $content) . "\n" . - preg_replace(array('/^\s*<\?php\s+/', '/\s*\?>\s*$/'), "\n", - $match[0])); - } - } - return true; - } - } - } - return false; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php deleted file mode 100644 index a895a3070..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php +++ /dev/null @@ -1,170 +0,0 @@ -<?php - -/** - * Inline Runtime Methods render, setSourceByUid, setupSubTemplate - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_UpdateCache -{ - /** - * check client side cache - * - * @param \Smarty_Template_Cached $cached - * @param Smarty_Internal_Template $_template - * @param string $content - */ - public function cacheModifiedCheck(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $content) - { - } - - /** - * 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) - { - $content = ob_get_clean(); - unset($cached->hashes[$_template->compiled->nocache_hash]); - if (!empty($cached->hashes)) { - $hash_array = array(); - foreach ($cached->hashes as $hash => $foo) { - $hash_array[] = "/{$hash}/"; - } - $content = preg_replace($hash_array, $_template->compiled->nocache_hash, $content); - } - $_template->cached->has_nocache_code = false; - // get text between non-cached items - $cache_split = - preg_split("!/\*%%SmartyNocache:{$_template->compiled->nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$_template->compiled->nocache_hash}%%\*/!s", - $content); - // get non-cached items - preg_match_all("!/\*%%SmartyNocache:{$_template->compiled->nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$_template->compiled->nocache_hash}%%\*/!s", - $content, $cache_parts); - $content = ''; - // loop over items, stitch back together - foreach ($cache_split as $curr_idx => $curr_split) { - // escape PHP tags in template content - $content .= preg_replace('/(<%|%>|<\?php|<\?|\?>|<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>)/', - "<?php echo '\$1'; ?>\n", $curr_split); - if (isset($cache_parts[0][$curr_idx])) { - $_template->cached->has_nocache_code = true; - $content .= $cache_parts[1][$curr_idx]; - } - } - if (!$no_output_filter && !$_template->compiled->has_nocache_code && - (isset($_template->smarty->autoload_filters['output']) || - isset($_template->smarty->registered_filters['output'])) - ) { - $content = $_template->smarty->ext->_filterHandler->runFilter('output', $content, $_template); - } - // write cache file content - $this->writeCachedContent($cached, $_template, $content); - } - - /** - * Cache was invalid , so render from compiled and write to cache - * - * @param \Smarty_Template_Cached $cached - * @param \Smarty_Internal_Template $_template - * @param $no_output_filter - * - * @throws \Exception - */ - public function updateCache(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $no_output_filter) - { - if ($_template->source->handler->uncompiled) { - ob_start(); - $_template->source->render($_template); - } else { - ob_start(); - if (!isset($_template->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 = $_template->smarty->compile_check; - $_template->smarty->compile_check = false; - if (isset($_template->parent) && $_template->parent->_objType == 2) { - $_template->compiled->unifunc = $_template->parent->compiled->unifunc; - } - if (!$_template->cached->processed) { - $_template->cached->process($_template, true); - } - $_template->smarty->compile_check = $compile_check; - $cached->getRenderedTemplateCode($_template); - if ($_template->smarty->debugging) { - $_template->smarty->_debug->end_cache($_template); - } - } - - /** - * Writes the content to cache resource - * - * @param \Smarty_Template_Cached $cached - * @param Smarty_Internal_Template $_template - * @param string $content - * - * @return bool - */ - public function writeCachedContent(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $content) - { - if ($_template->source->handler->recompiled || !($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || - $_template->caching == Smarty::CACHING_LIFETIME_SAVED) - ) { - // don't write cache file - return false; - } - $content = $_template->smarty->ext->_codeFrame->create($_template, $content, '', true); - return $this->write($cached, $_template, $content); - } - - /** - * Write this cache object to handler - * - * @param \Smarty_Template_Cached $cached - * @param Smarty_Internal_Template $_template template object - * @param string $content content to cache - * - * @return bool success - */ - public function write(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $content) - { - if (!$_template->source->handler->recompiled) { - if ($cached->handler->writeCachedContent($_template, $content)) { - $cached->content = null; - $cached->timestamp = time(); - $cached->exists = true; - $cached->valid = true; - $cached->cache_lifetime = $_template->cache_lifetime; - $cached->processed = false; - if ($_template->smarty->cache_locking) { - $cached->handler->releaseLock($_template->smarty, $cached); - } - - return true; - } - $cached->content = null; - $cached->timestamp = false; - $cached->exists = false; - $cached->valid = false; - $cached->processed = false; - } - - return false; - } - -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php deleted file mode 100644 index 5a125a4a7..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php - -/** - * Runtime Methods updateScope - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_UpdateScope -{ - /** - * Update new assigned template variable in other effected scopes - * - * @param \Smarty_Internal_Template $tpl template object - * @param string $varName variable name - * @param int $scope scope to which bubble up variable value - */ - public function updateScope(Smarty_Internal_Template $tpl, $varName, $scope = Smarty::SCOPE_LOCAL) - { - if (!$scope && !$tpl->scope) { - return; - } - foreach (array($scope, $tpl->scope) as $s) { - $s = ($bubble_up = $s >= Smarty::SCOPE_BUBBLE_UP) ? $s - Smarty::SCOPE_BUBBLE_UP : $s; - if ($bubble_up && $s) { - $ptr = $tpl->parent; - if (isset($ptr)) { - $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName]; - $ptr = $ptr->parent; - } - if ($s == Smarty::SCOPE_PARENT) { - continue; - } - while (isset($ptr) && $ptr->_objType == 2) { - $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName]; - $ptr = $ptr->parent; - } - if ($s == Smarty::SCOPE_TPL_ROOT) { - continue; - } elseif ($s == Smarty::SCOPE_SMARTY) { - $tpl->smarty->tpl_vars[$varName] = $tpl->tpl_vars[$varName]; - } elseif ($s == Smarty::SCOPE_GLOBAL) { - Smarty::$global_tpl_vars[$varName] = $tpl->tpl_vars[$varName]; - } elseif ($s == Smarty::SCOPE_ROOT) { - while (isset($ptr->parent)) { - $ptr = $ptr->parent; - } - $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName]; - } - } - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_validatecompiled.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_validatecompiled.php deleted file mode 100644 index 7defd6c92..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_validatecompiled.php +++ /dev/null @@ -1,86 +0,0 @@ -<?php - -/** - * Runtime Methods decodeProperties - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_ValidateCompiled -{ - /** - * This function is executed automatically when a compiled or cached template file is included - * - Decode saved properties from compiled template and cache files - * - Check if compiled or cache file is valid - * - * @param array $properties special template properties - * @param bool $cache flag if called from cache file - * - * @return bool flag if compiled or cache file is valid - */ - public function decodeProperties(Smarty_Internal_Template $tpl, $properties, $cache = false) - { - $is_valid = true; - if (Smarty::SMARTY_VERSION != $properties['version']) { - // new version must rebuild - $is_valid = false; - } elseif ($is_valid && !empty($properties['file_dependency']) && - ((!$cache && $tpl->smarty->compile_check) || $tpl->smarty->compile_check == 1) - ) { - // check file dependencies at compiled code - foreach ($properties['file_dependency'] as $_file_to_check) { - if ($_file_to_check[2] == 'file' || $_file_to_check[2] == 'extends' || $_file_to_check[2] == 'php') { - if ($tpl->source->filepath == $_file_to_check[0]) { - // do not recheck current template - continue; - //$mtime = $tpl->source->getTimeStamp(); - } else { - // file and php types can be checked without loading the respective resource handlers - $mtime = is_file($_file_to_check[0]) ? filemtime($_file_to_check[0]) : false; - } - } elseif ($_file_to_check[2] == 'string') { - continue; - } else { - $handler = Smarty_Resource::load($tpl->smarty, $_file_to_check[2]); - if ($handler->checkTimestamps()) { - $source = Smarty_Template_Source::load($tpl, $tpl->smarty, $_file_to_check[ 0 ]); - $mtime = $source->getTimeStamp(); - } else { - continue; - } - } - if (!$mtime || $mtime > $_file_to_check[1]) { - $is_valid = false; - break; - } - } - } - if ($cache) { - // CACHING_LIFETIME_SAVED cache expiry has to be validated here since otherwise we'd define the unifunc - if ($tpl->caching === Smarty::CACHING_LIFETIME_SAVED && $properties['cache_lifetime'] >= 0 && - (time() > ($tpl->cached->timestamp + $properties['cache_lifetime'])) - ) { - $is_valid = false; - } - $tpl->cached->cache_lifetime = $properties['cache_lifetime']; - $tpl->cached->valid = $is_valid; - $resource = $tpl->cached; - } else { - $tpl->mustCompile = !$is_valid; - $resource = $tpl->compiled; - $resource->includes = isset($properties['includes']) ? $properties['includes'] : array(); - } - if ($is_valid) { - $resource->unifunc = $properties['unifunc']; - $resource->has_nocache_code = $properties['has_nocache_code']; - // $tpl->compiled->nocache_hash = $properties['nocache_hash']; - $resource->file_dependency = $properties['file_dependency']; - if (isset($properties['tpl_function'])) { - $tpl->tpl_function = $properties['tpl_function']; - } - } - return $is_valid && !function_exists($properties['unifunc']); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_var.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_var.php deleted file mode 100644 index 8e09108fe..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_var.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -/** - * Runtime Methods createLocalArrayVariable - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - * - **/ -class Smarty_Internal_Runtime_Var -{ - /** - * Template code runtime function to create a local Smarty variable for array assignments - * - * @param \Smarty_Internal_Template $tpl template object - * @param string $varName template variable name - * @param bool $nocache cache mode of variable - */ - public function createLocalArrayVariable(Smarty_Internal_Template $tpl, $varName, $nocache = false) - { - if (!isset($tpl->tpl_vars[$varName])) { - $tpl->tpl_vars[$varName] = new Smarty_Variable(array(), $nocache); - } else { - $tpl->tpl_vars[$varName] = clone $tpl->tpl_vars[$varName]; - if (!(is_array($tpl->tpl_vars[$varName]->value) || - $tpl->tpl_vars[$varName]->value instanceof ArrayAccess) - ) { - settype($tpl->tpl_vars[$varName]->value, 'array'); - } - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_runtime_writefile.php b/library/Smarty/libs/sysplugins/smarty_internal_runtime_writefile.php deleted file mode 100644 index 05c973783..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_runtime_writefile.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php -/** - * Smarty write file plugin - * - * @package Smarty - * @subpackage PluginsInternal - * @author Monte Ohrt - */ - -/** - * Smarty Internal Write File Class - * - * @package Smarty - * @subpackage PluginsInternal - */ -class Smarty_Internal_Runtime_WriteFile -{ - /** - * Writes file in a safe way to disk - * - * @param string $_filepath complete filepath - * @param string $_contents file content - * @param Smarty $smarty smarty instance - * - * @throws SmartyException - * @return boolean true - */ - public function writeFile($_filepath, $_contents, Smarty $smarty) - { - $_error_reporting = error_reporting(); - error_reporting($_error_reporting & ~E_NOTICE & ~E_WARNING); - $_file_perms = property_exists($smarty, '_file_perms') ? $smarty->_file_perms : 0644; - $_dir_perms = property_exists($smarty, '_dir_perms') ? (isset($smarty->_dir_perms) ? $smarty->_dir_perms : 0777) : 0771; - if ($_file_perms !== null) { - $old_umask = umask(0); - } - - $_dirpath = dirname($_filepath); - // if subdirs, create dir structure - if ($_dirpath !== '.' && !file_exists($_dirpath)) { - mkdir($_dirpath, $_dir_perms, true); - } - - // write to tmp file, then move to overt file lock race condition - $_tmp_file = $_dirpath . DS . str_replace(array('.', ','), '_', uniqid('wrt', true)); - if (!file_put_contents($_tmp_file, $_contents)) { - error_reporting($_error_reporting); - throw new SmartyException("unable to write file {$_tmp_file}"); - } - - /* - * Windows' rename() fails if the destination exists, - * Linux' rename() properly handles the overwrite. - * Simply unlink()ing a file might cause other processes - * currently reading that file to fail, but linux' rename() - * seems to be smart enough to handle that for us. - */ - if (Smarty::$_IS_WINDOWS) { - // remove original file - if (is_file($_filepath)) { - @unlink($_filepath); - } - // rename tmp file - $success = @rename($_tmp_file, $_filepath); - } else { - // rename tmp file - $success = @rename($_tmp_file, $_filepath); - if (!$success) { - // remove original file - if (is_file($_filepath)) { - @unlink($_filepath); - } - // rename tmp file - $success = @rename($_tmp_file, $_filepath); - } - } - if (!$success) { - error_reporting($_error_reporting); - throw new SmartyException("unable to write file {$_filepath}"); - } - if ($_file_perms !== null) { - // set file permissions - chmod($_filepath, $_file_perms); - umask($old_umask); - } - error_reporting($_error_reporting); - - return true; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php b/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php deleted file mode 100644 index 116bbea7b..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php +++ /dev/null @@ -1,169 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Smarty Template Compiler Base - * This file contains the basic classes and methods for compiling Smarty templates with lexer/parser - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Class SmartyTemplateCompiler - * - * @package Smarty - * @subpackage Compiler - */ -class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCompilerBase -{ - /** - * Lexer class name - * - * @var string - */ - public $lexer_class; - - /** - * Parser class name - * - * @var string - */ - public $parser_class; - - /** - * array of vars which can be compiled in local scope - * - * @var array - */ - public $local_var = array(); - - /** - * array of callbacks called when the normal compile process of template is finished - * - * @var array - */ - public $postCompileCallbacks = array(); - - /** - * prefix code - * - * @var string - */ - public $prefixCompiledCode = ''; - - /** - * postfix code - * - * @var string - */ - public $postfixCompiledCode = ''; - - /** - * Initialize compiler - * - * @param string $lexer_class class name - * @param string $parser_class class name - * @param Smarty $smarty global instance - */ - public function __construct($lexer_class, $parser_class, Smarty $smarty) - { - parent::__construct($smarty); - // get required plugins - $this->lexer_class = $lexer_class; - $this->parser_class = $parser_class; - } - - /** - * method to compile a Smarty template - * - * @param mixed $_content template source - * @param bool $isTemplateSource - * - * @return bool true if compiling succeeded, false if it failed - * @throws \SmartyCompilerException - */ - protected function doCompile($_content, $isTemplateSource = false) - { - /* here is where the compiling takes place. Smarty - tags in the templates are replaces with PHP code, - then written to compiled files. */ - // init the lexer/parser to compile the template - $this->parser = - new $this->parser_class(new $this->lexer_class(str_replace(array("\r\n", "\r"), "\n", $_content), $this), - $this); - if ($isTemplateSource && $this->template->caching) { - $this->parser->insertPhpCode("<?php\n\$_smarty_tpl->compiled->nocache_hash = '{$this->nocache_hash}';\n?>\n"); - } - if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) { - $mbEncoding = mb_internal_encoding(); - mb_internal_encoding('ASCII'); - } else { - $mbEncoding = null; - } - - if ($this->smarty->_parserdebug) { - $this->parser->PrintTrace(); - $this->parser->lex->PrintTrace(); - } - // get tokens from lexer and parse them - while ($this->parser->lex->yylex()) { - if ($this->smarty->_parserdebug) { - echo "<pre>Line {$this->parser->lex->line} Parsing {$this->parser->yyTokenName[$this->parser->lex->token]} Token " . - htmlentities($this->parser->lex->value) . "</pre>"; - } - $this->parser->doParse($this->parser->lex->token, $this->parser->lex->value); - } - - // finish parsing process - $this->parser->doParse(0, 0); - if ($mbEncoding) { - mb_internal_encoding($mbEncoding); - } - // check for unclosed tags - if (count($this->_tag_stack) > 0) { - // get stacked info - list($openTag, $_data) = array_pop($this->_tag_stack); - $this->trigger_template_error("unclosed {$this->smarty->left_delimiter}" . $openTag . - "{$this->smarty->right_delimiter} tag"); - } - // call post compile callbacks - foreach ($this->postCompileCallbacks as $cb) { - $parameter = $cb; - $parameter[0] = $this; - call_user_func_array($cb[0], $parameter); - } - // return compiled code - return $this->prefixCompiledCode . $this->parser->retvalue . $this->postfixCompiledCode; - } - - /** - * Register a post compile callback - * - when the callback is called after template compiling the compiler object will be inserted as first parameter - * - * @param callback $callback - * @param array $parameter optional parameter array - * @param string $key optional key for callback - * @param bool $replace if true replace existing keyed callback - */ - public function registerPostCompileCallback($callback, $parameter = array(), $key = null, $replace = false) - { - array_unshift($parameter, $callback); - if (isset($key)) { - if ($replace || !isset($this->postCompileCallbacks[$key])) { - $this->postCompileCallbacks[$key] = $parameter; - } - } else { - $this->postCompileCallbacks[] = $parameter; - } - } - - /** - * Remove a post compile callback - * - * @param string $key callback key - */ - public function unregisterPostCompileCallback($key) - { - unset($this->postCompileCallbacks[$key]); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_template.php b/library/Smarty/libs/sysplugins/smarty_internal_template.php deleted file mode 100644 index 7c16a53db..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_template.php +++ /dev/null @@ -1,376 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Template - * This file contains the Smarty template engine - * - * @package Smarty - * @subpackage Template - * @author Uwe Tews - */ - -/** - * Main class with template data structures and methods - * - * @package Smarty - * @subpackage Template - * - * @property Smarty_Template_Source|Smarty_Template_Config $source - * @property Smarty_Template_Compiled $compiled - * @property Smarty_Template_Cached $cached - * @method bool mustCompile() - */ -class Smarty_Internal_Template extends Smarty_Internal_TemplateBase -{ - /** - * This object type (Smarty = 1, template = 2, data = 4) - * - * @var int - */ - public $_objType = 2; - - /** - * Global smarty instance - * - * @var Smarty - */ - public $smarty = null; - - /** - * Source instance - * - * @var Smarty_Template_Source|Smarty_Template_Config - */ - public $source = null; - - /** - * Template resource - * - * @var string - */ - public $template_resource = null; - - /** - * flag if compiled template is invalid and must be (re)compiled - * - * @var bool - */ - public $mustCompile = null; - - /** - * Template Id - * - * @var null|string - */ - public $templateId = null; - - /** - * Known template functions - * - * @var array - */ - public $tpl_function = array(); - - /** - * Scope in which template is rendered - * - * @var int - */ - public $scope = 0; - - /** - * Create template data object - * Some of the global Smarty settings copied to template scope - * It load the required template resources and caching plugins - * - * @param string $template_resource template resource string - * @param Smarty $smarty Smarty instance - * @param \Smarty_Internal_Template|\Smarty|\Smarty_Internal_Data $_parent back pointer to parent object - * with variables or null - * @param mixed $_cache_id cache id or null - * @param mixed $_compile_id compile id or null - * @param bool $_caching use caching? - * @param int $_cache_lifetime cache life-time in seconds - * - * @throws \SmartyException - */ - public function __construct($template_resource, Smarty $smarty, Smarty_Internal_Data $_parent = null, - $_cache_id = null, $_compile_id = null, $_caching = null, $_cache_lifetime = null) - { - $this->smarty = &$smarty; - // Smarty parameter - $this->cache_id = $_cache_id === null ? $this->smarty->cache_id : $_cache_id; - $this->compile_id = $_compile_id === null ? $this->smarty->compile_id : $_compile_id; - $this->caching = $_caching === null ? $this->smarty->caching : $_caching; - if ($this->caching === true) { - $this->caching = Smarty::CACHING_LIFETIME_CURRENT; - } - $this->cache_lifetime = $_cache_lifetime === null ? $this->smarty->cache_lifetime : $_cache_lifetime; - $this->parent = $_parent; - // Template resource - $this->template_resource = $template_resource; - $this->source = Smarty_Template_Source::load($this); - parent::__construct(); - } - - /** - * render template - * - * @param bool $merge_tpl_vars if true parent template variables merged in to local scope - * @param bool $no_output_filter if true do not run output filter - * @param bool $display true: display, false: fetch null: subtemplate - * - * @throws Exception - * @throws SmartyException - * @return string rendered template output - */ - public function render($no_output_filter = true, $display = null) - { - $parentIsTpl = isset($this->parent) && $this->parent->_objType == 2; - if ($this->smarty->debugging) { - $this->smarty->_debug->start_template($this, $display); - } - // checks if template exists - if (!$this->source->exists) { - if ($parentIsTpl) { - $parent_resource = " in '{$this->parent->template_resource}'"; - } else { - $parent_resource = ''; - } - throw new SmartyException("Unable to load template {$this->source->type} '{$this->source->name}'{$parent_resource}"); - } - // disable caching for evaluated code - if ($this->source->handler->recompiled) { - $this->caching = false; - } - // read from cache or render - $isCacheTpl = - $this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED; - if ($isCacheTpl) { - if (!isset($this->cached)) { - $this->loadCached(); - } - $this->cached->render($this, $no_output_filter); - } elseif ($this->source->handler->uncompiled) { - $this->source->render($this); - } else { - if (!isset($this->compiled)) { - $this->loadCompiled(); - } - $this->compiled->render($this); - } - - // display or fetch - if ($display) { - if ($this->caching && $this->smarty->cache_modified_check) { - $this->smarty->ext->_cachemodify->cacheModifiedCheck($this->cached, $this, - isset($content) ? $content : ob_get_clean()); - } else { - if ((!$this->caching || $this->cached->has_nocache_code || $this->source->handler->recompiled) && - !$no_output_filter && (isset($this->smarty->autoload_filters['output']) || - isset($this->smarty->registered_filters['output'])) - ) { - echo $this->smarty->ext->_filterHandler->runFilter('output', ob_get_clean(), $this); - } else { - ob_end_flush(); - flush(); - } - } - if ($this->smarty->debugging) { - $this->smarty->_debug->end_template($this); - // debug output - $this->smarty->_debug->display_debug($this, true); - } - return ''; - } else { - if ($this->smarty->debugging) { - $this->smarty->_debug->end_template($this); - if ($this->smarty->debugging === 2 && $display === false) { - $this->smarty->_debug->display_debug($this, true); - } - } - if ($parentIsTpl) { - if (!empty($this->tpl_function)) { - $this->parent->tpl_function = array_merge($this->parent->tpl_function, $this->tpl_function); - } - foreach ($this->compiled->required_plugins as $code => $tmp1) { - foreach ($tmp1 as $name => $tmp) { - foreach ($tmp as $type => $data) { - $this->parent->compiled->required_plugins[$code][$name][$type] = $data; - } - } - } - } - if (!$no_output_filter && - (!$this->caching || $this->cached->has_nocache_code || $this->source->handler->recompiled) && - (isset($this->smarty->autoload_filters['output']) || isset($this->smarty->registered_filters['output'])) - ) { - return $this->smarty->ext->_filterHandler->runFilter('output', ob_get_clean(), $this); - } - // return cache content - return null; - } - } - - /** - * Compiles the template - * If the template is not evaluated the compiled template is saved on disk - */ - public function compileTemplateSource() - { - return $this->compiled->compileTemplateSource($this); - } - - /** - * Writes the content to cache resource - * - * @param string $content - * - * @return bool - */ - public function writeCachedContent($content) - { - return $this->smarty->ext->_updateCache->writeCachedContent($this->cached, $this, $content); - } - - /** - * Get unique template id - * - * @return string - */ - public function _getTemplateId() - { - return isset($this->templateId) ? $this->templateId : $this->templateId = - $this->smarty->_getTemplateId($this->template_resource, $this->cache_id, $this->compile_id); - } - - /** - * runtime error not matching capture tags - */ - public function capture_error() - { - throw new SmartyException("Not matching {capture} open/close in \"{$this->template_resource}\""); - } - - /** - * Load compiled object - * - */ - public function loadCompiled() - { - if (!isset($this->compiled)) { - $this->compiled = Smarty_Template_Compiled::load($this); - } - } - - /** - * Load cached object - * - */ - public function loadCached() - { - if (!isset($this->cached)) { - $this->cached = Smarty_Template_Cached::load($this); - } - } - - /** - * Load compiler object - * - * @throws \SmartyException - */ - public function loadCompiler() - { - if (!class_exists($this->source->handler->compiler_class)) { - $this->smarty->loadPlugin($this->source->handler->compiler_class); - } - $this->compiler = new $this->source->handler->compiler_class($this->source->handler->template_lexer_class, - $this->source->handler->template_parser_class, - $this->smarty); - } - - /** - * Handle unknown class methods - * - * @param string $name unknown method-name - * @param array $args argument array - * - * @return mixed - * @throws SmartyException - */ - public function __call($name, $args) - { - // method of Smarty object? - if (method_exists($this->smarty, $name)) { - return call_user_func_array(array($this->smarty, $name), $args); - } - // parent - return parent::__call($name, $args); - } - - /** - * set Smarty property in template context - * - * @param string $property_name property name - * @param mixed $value value - * - * @throws SmartyException - */ - public function __set($property_name, $value) - { - switch ($property_name) { - case 'compiled': - case 'cached': - case 'compiler': - $this->$property_name = $value; - return; - default: - // Smarty property ? - if (property_exists($this->smarty, $property_name)) { - $this->smarty->$property_name = $value; - return; - } - } - throw new SmartyException("invalid template property '$property_name'."); - } - - /** - * get Smarty property in template context - * - * @param string $property_name property name - * - * @return mixed|Smarty_Template_Cached - * @throws SmartyException - */ - public function __get($property_name) - { - switch ($property_name) { - case 'compiled': - $this->loadCompiled(); - return $this->compiled; - - case 'cached': - $this->loadCached(); - return $this->cached; - - case 'compiler': - $this->loadCompiler(); - return $this->compiler; - default: - // Smarty property ? - if (property_exists($this->smarty, $property_name)) { - return $this->smarty->$property_name; - } - } - throw new SmartyException("template property '$property_name' does not exist."); - } - - /** - * Template data object destructor - */ - public function __destruct() - { - if ($this->smarty->cache_locking && isset($this->cached) && $this->cached->is_locked) { - $this->cached->handler->releaseLock($this->smarty, $this->cached); - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_templatebase.php b/library/Smarty/libs/sysplugins/smarty_internal_templatebase.php deleted file mode 100644 index 9b4953dee..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_templatebase.php +++ /dev/null @@ -1,316 +0,0 @@ -<?php -/** - * Smarty Internal Plugin Smarty Template Base - * This file contains the basic shared methods for template handling - * - * @package Smarty - * @subpackage Template - * @author Uwe Tews - */ - -/** - * Class with shared template methods - * - * @package Smarty - * @subpackage Template - * - * @property Smarty $smarty - * @method Smarty_Internal_TemplateBase setAutoloadFilters(mixed $filters, string $type = null) - * @method Smarty_Internal_TemplateBase addAutoloadFilters(mixed $filters, string $type = null) - * @method array getAutoloadFilters(string $type = null) - * @local_method Smarty_Internal_TemplateBase registerFilter(string $type, callback $callback, string $name = null) - * @method Smarty_Internal_TemplateBase unregisterFilter(string $type, mixed $callback) - * @method Smarty_Internal_TemplateBase unloadFilter(string $type, string $name) - * @method string getDebugTemplate() - * @method Smarty_Internal_TemplateBase setDebugTemplate(string $tpl_name) - * @method Smarty_Internal_TemplateBase setDefaultModifier(mixed $modifiers) - * @method Smarty_Internal_TemplateBase addDefaultModifier(mixed $modifiers) - * @method array getDefaultModifier() - * @method Smarty_Internal_TemplateBase registerDefaultPluginHandler(callback $callback) - * @method Smarty_Internal_TemplateBase registerResource(string $name, Smarty_Resource $resource_handler) - * @method Smarty_Internal_TemplateBase unregisterResource(string $name) - * @method Smarty_Internal_TemplateBase registerCacheResource(string $name, Smarty_CacheResource $resource_handler) - * @method Smarty_Internal_TemplateBase unregisterCacheResource(string $name) - * @method Smarty_Internal_TemplateBase unregisterPlugin(string $type, string $name) - * @method Smarty_Internal_TemplateBase unregisterObject(string $object_name) - * @method object getRegisteredObject(string $object_name) - * @method Smarty_Internal_TemplateBase registerClass(string $class_name, string $class_impl) - * @method Smarty_Internal_TemplateBase createData(Smarty_Internal_Data $parent = null, string $name = null) - * @method array getTags(mixed $template = null) - */ -abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data -{ - /** - * 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; - - /** - * caching enabled - * - * @var boolean - */ - public $caching = false; - - /** - * cache lifetime in seconds - * - * @var integer - */ - public $cache_lifetime = 3600; - - /** - * universal cache - * - * @var array() - */ - public $_cache = array(); - - /** - * fetches a rendered Smarty template - * - * @param string $template the resource handle of the template file or template object - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param object $parent next higher level of Smarty variables - * - * @throws Exception - * @throws SmartyException - * @return string rendered template output - */ - public function fetch($template = null, $cache_id = null, $compile_id = null, $parent = null) - { - $result = $this->_execute($template, $cache_id, $compile_id, $parent, 0); - return $result === null ? ob_get_clean() : $result; - } - - /** - * displays a Smarty template - * - * @param string $template the resource handle of the template file or template object - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param object $parent next higher level of Smarty variables - */ - public function display($template = null, $cache_id = null, $compile_id = null, $parent = null) - { - // display template - $this->_execute($template, $cache_id, $compile_id, $parent, 1); - } - - /** - * test if cache is valid - * - * @api Smarty::isCached() - * @link http://www.smarty.net/docs/en/api.is.cached.tpl - * - * @param null|string|\Smarty_Internal_Template $template the resource handle of the template file or template object - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param object $parent next higher level of Smarty variables - * - * @return boolean cache status - */ - public function isCached($template = null, $cache_id = null, $compile_id = null, $parent = null) - { - return $this->_execute($template, $cache_id, $compile_id, $parent, 2); - } - - /** - * fetches a rendered Smarty template - * - * @param string $template the resource handle of the template file or template object - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param object $parent next higher level of Smarty variables - * @param string $function function type 0 = fetch, 1 = display, 2 = isCache - * - * @return mixed - * @throws \Exception - * @throws \SmartyException - */ - private function _execute($template, $cache_id, $compile_id, $parent, $function) - { - $smarty = $this->_objType == 1 ? $this : $this->smarty; - if ($template === null) { - if ($this->_objType != 2) { - throw new SmartyException($function . '():Missing \'$template\' parameter'); - } else { - $template = clone $this; - } - } elseif (is_object($template)) { - if (!isset($template->_objType) || $template->_objType != 2) { - throw new SmartyException($function . '():Template object expected'); - } else { - /* @var Smarty_Internal_Template $template */ - $template = clone $template; - } - } else { - // get template object - /* @var Smarty_Internal_Template $template */ - $template = $smarty->createTemplate($template, $cache_id, $compile_id, $parent, false); - if ($this->_objType == 1) { - // set caching in template object - $template->caching = $this->caching; - } - } - // fetch template content - $level = ob_get_level(); - try { - $_smarty_old_error_level = - ($this->_objType == 1 && isset($smarty->error_reporting)) ? error_reporting($smarty->error_reporting) : - null; - if ($function == 2) { - if ($template->caching) { - // return cache status of template - if (!isset($template->cached)) { - $template->loadCached(); - } - $result = $template->cached->isCached($template); - $template->smarty->_cache['isCached'][$template->_getTemplateId()] = $template; - } else { - return false; - } - } else { - ob_start(); - $template->_mergeVars(); - if (!empty(Smarty::$global_tpl_vars)) { - $template->tpl_vars = array_merge(Smarty::$global_tpl_vars, $template->tpl_vars); - } - $result = $template->render(false, $function); - } - if (isset($_smarty_old_error_level)) { - error_reporting($_smarty_old_error_level); - } - return $result; - } - catch (Exception $e) { - while (ob_get_level() > $level) { - ob_end_clean(); - } - throw $e; - } - } - - /** - * Registers plugin to be used in templates - * - * @api Smarty::registerPlugin() - * @link http://www.smarty.net/docs/en/api.register.plugin.tpl - * - * @param string $type plugin type - * @param string $name name of template tag - * @param callback $callback PHP callback to register - * @param bool $cacheable if true (default) this function is cache able - * @param mixed $cache_attr caching attributes if any - * - * @return \Smarty|\Smarty_Internal_Template - * @throws SmartyException when the plugin tag is invalid - */ - public function registerPlugin($type, $name, $callback, $cacheable = true, $cache_attr = null) - { - return $this->ext->registerPlugin->registerPlugin($this, $type, $name, $callback, $cacheable, $cache_attr); - } - - /** - * load a filter of specified type and name - * - * @api Smarty::loadFilter() - * @link http://www.smarty.net/docs/en/api.load.filter.tpl - * - * @param string $type filter type - * @param string $name filter name - * - * @return bool - * @throws SmartyException if filter could not be loaded - */ - public function loadFilter($type, $name) - { - return $this->ext->loadFilter->loadFilter($this, $type, $name); - } - - /** - * Registers a filter function - * - * @api Smarty::registerFilter() - * @link http://www.smarty.net/docs/en/api.register.filter.tpl - * - * @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($type, $callback, $name = null) - { - return $this->ext->registerFilter->registerFilter($this, $type, $callback, $name); - } - - /** - * Registers object to be used in templates - * - * @api Smarty::registerObject() - * @link http://www.smarty.net/docs/en/api.register.object.tpl - * - * @param string $object_name - * @param object $object the referenced PHP object to register - * @param array $allowed_methods_properties list of allowed methods (empty = all) - * @param bool $format smarty argument format, else traditional - * @param array $block_methods list of block-methods - * - * @return \Smarty|\Smarty_Internal_Template - * @throws \SmartyException - */ - public function registerObject($object_name, $object, $allowed_methods_properties = array(), $format = true, - $block_methods = array()) - { - return $this->ext->registerObject->registerObject($this, $object_name, $object, $allowed_methods_properties, - $format, $block_methods); - } - - /** - * @param boolean $caching - */ - public function setCaching($caching) - { - $this->caching = $caching; - } - - /** - * @param int $cache_lifetime - */ - public function setCacheLifetime($cache_lifetime) - { - $this->cache_lifetime = $cache_lifetime; - } - - /** - * @param string $compile_id - */ - public function setCompileId($compile_id) - { - $this->compile_id = $compile_id; - } - - /** - * @param string $cache_id - */ - public function setCacheId($cache_id) - { - $this->cache_id = $cache_id; - } - -} - diff --git a/library/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php b/library/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php deleted file mode 100644 index 6c3ea5f5d..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php +++ /dev/null @@ -1,1170 +0,0 @@ -<?php - -/** - * Smarty Internal Plugin Smarty Template Compiler Base - * This file contains the basic classes and methods for compiling Smarty templates with lexer/parser - * - * @package Smarty - * @subpackage Compiler - * @author Uwe Tews - */ - -/** - * Main abstract compiler class - * - * @package Smarty - * @subpackage Compiler - * - * @property Smarty_Internal_SmartyTemplateCompiler $prefixCompiledCode = '' - * @property Smarty_Internal_SmartyTemplateCompiler $postfixCompiledCode = '' - * @method Smarty_Internal_SmartyTemplateCompiler registerPostCompileCallback($callback, $parameter = array(), $key = null, $replace = false) - * @method Smarty_Internal_SmartyTemplateCompiler unregisterPostCompileCallback($key) - */ -abstract class Smarty_Internal_TemplateCompilerBase -{ - - /** - * Smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * Parser object - * - * @var Smarty_Internal_Templateparser - */ - public $parser = null; - - /** - * hash for nocache sections - * - * @var mixed - */ - public $nocache_hash = null; - - /** - * suppress generation of nocache code - * - * @var bool - */ - public $suppressNocacheProcessing = false; - - /** - * compile tag objects cache - * - * @var array - */ - public $_tag_objects = array(); - - /** - * tag stack - * - * @var array - */ - public $_tag_stack = array(); - - /** - * current template - * - * @var Smarty_Internal_Template - */ - public $template = null; - - /** - * merged included sub template data - * - * @var array - */ - public $mergedSubTemplatesData = array(); - - /** - * merged sub template code - * - * @var array - */ - public $mergedSubTemplatesCode = array(); - - /** - * collected template properties during compilation - * - * @var array - */ - public $templateProperties = array(); - - /** - * source line offset for error messages - * - * @var int - */ - public $trace_line_offset = 0; - - /** - * trace uid - * - * @var string - */ - public $trace_uid = ''; - - /** - * trace file path - * - * @var string - */ - public $trace_filepath = ''; - - /** - * stack for tracing file and line of nested {block} tags - * - * @var array - */ - public $trace_stack = array(); - - /** - * plugins loaded by default plugin handler - * - * @var array - */ - public $default_handler_plugins = array(); - - /** - * saved preprocessed modifier list - * - * @var mixed - */ - public $default_modifier_list = null; - - /** - * force compilation of complete template as nocache - * - * @var boolean - */ - public $forceNocache = false; - - /** - * flag if compiled template file shall we written - * - * @var bool - */ - public $write_compiled_code = true; - - /** - * Template functions - * - * @var array - */ - public $tpl_function = array(); - - /** - * called sub functions from template function - * - * @var array - */ - public $called_functions = array(); - - /** - * compiled template or block function code - * - * @var string - */ - public $blockOrFunctionCode = ''; - - /** - * php_handling setting either from Smarty or security - * - * @var int - */ - public $php_handling = 0; - - /** - * flags for used modifier plugins - * - * @var array - */ - public $modifier_plugins = array(); - - /** - * type of already compiled modifier - * - * @var array - */ - public $known_modifier_type = array(); - - /** - * parent compiler object for merged subtemplates and template functions - * - * @var Smarty_Internal_TemplateCompilerBase - */ - public $parent_compiler = null; - - /** - * Flag true when compiling nocache section - * - * @var bool - */ - public $nocache = false; - - /** - * Flag true when tag is compiled as nocache - * - * @var bool - */ - public $tag_nocache = false; - - /** - * Compiled tag prefix code - * - * @var array - */ - public $prefix_code = array(); - - /** - * Prefix code stack - * - * @var array - */ - public $prefixCodeStack = array(); - - /** - * Tag has compiled code - * - * @var bool - */ - public $has_code = false; - - /** - * A variable string was compiled - * - * @var bool - */ - public $has_variable_string = false; - - /** - * Tag creates output - * - * @var bool - */ - public $has_output = false; - - /** - * Stack for {setfilter} {/setfilter} - * - * @var array - */ - public $variable_filter_stack = array(); - - /** - * variable filters for {setfilter} {/setfilter} - * - * @var array - */ - public $variable_filters = array(); - - /** - * Nesting count of looping tags like {foreach}, {for}, {section}, {while} - * - * @var int - */ - public $loopNesting = 0; - - /** - * Strip preg pattern - * - * @var string - */ - public $stripRegEx = '![\t ]*[\r\n]+[\t ]*!'; - - /** - * plugin search order - * - * @var array - */ - public $plugin_search_order = array('function', 'block', 'compiler', 'class'); - - /** - * General storage area for tag compiler plugins - * - * @var array - */ - public $_cache = array(); - - /** - * 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); - - /** - * Initialize compiler - * - * @param Smarty $smarty global instance - */ - public function __construct(Smarty $smarty) - { - $this->smarty = $smarty; - $this->nocache_hash = str_replace(array('.', ','), '_', uniqid(rand(), true)); - } - - /** - * Method to compile a Smarty template - * - * @param Smarty_Internal_Template $template template object to compile - * @param bool $nocache true is shall be compiled in nocache mode - * @param null|Smarty_Internal_TemplateCompilerBase $parent_compiler - * - * @return bool true if compiling succeeded, false if it failed - * @throws \Exception - */ - public function compileTemplate(Smarty_Internal_Template $template, $nocache = null, - Smarty_Internal_TemplateCompilerBase $parent_compiler = null) - { - // get code frame of compiled template - $_compiled_code = $template->smarty->ext->_codeFrame->create($template, - $this->compileTemplateSource($template, $nocache, - $parent_compiler), - $this->postFilter($this->blockOrFunctionCode) . - join('', $this->mergedSubTemplatesCode), false, - $this); - return $_compiled_code; - } - - /** - * Compile template source and run optional post filter - * - * @param \Smarty_Internal_Template $template - * @param null|bool $nocache flag if template must be compiled in nocache mode - * @param \Smarty_Internal_TemplateCompilerBase $parent_compiler - * - * @return string - * @throws \Exception - */ - public function compileTemplateSource(Smarty_Internal_Template $template, $nocache = null, - Smarty_Internal_TemplateCompilerBase $parent_compiler = null) - { - try { - // save template object in compiler class - $this->template = $template; - if (property_exists($this->template->smarty, 'plugin_search_order')) { - $this->plugin_search_order = $this->template->smarty->plugin_search_order; - } - if ($this->smarty->debugging) { - $this->smarty->_debug->start_compile($this->template); - } - if (isset($this->template->smarty->security_policy)) { - $this->php_handling = $this->template->smarty->security_policy->php_handling; - } else { - $this->php_handling = $this->template->smarty->php_handling; - } - $this->parent_compiler = $parent_compiler ? $parent_compiler : $this; - $nocache = isset($nocache) ? $nocache : false; - if (empty($template->compiled->nocache_hash)) { - $template->compiled->nocache_hash = $this->nocache_hash; - } else { - $this->nocache_hash = $template->compiled->nocache_hash; - } - // flag for nocache sections - $this->nocache = $nocache; - $this->tag_nocache = false; - // reset has nocache code flag - $this->template->compiled->has_nocache_code = false; - $this->has_variable_string = false; - $this->prefix_code = array(); - // add file dependency - $this->parent_compiler->template->compiled->file_dependency[ $this->template->source->uid ] = - array($this->template->source->filepath, $this->template->source->getTimeStamp(), - $this->template->source->type); - $this->smarty->_current_file = $this->template->source->filepath; - // get template source - if (!empty($this->template->source->components)) { - // we have array of inheritance templates by extends: resource - // generate corresponding source code sequence - $_content = - Smarty_Internal_Compile_Extends::extendsSourceArrayCode($this->template->source->components); - } else { - // get template source - $_content = $this->template->source->getContent(); - } - $_compiled_code = $this->postFilter($this->doCompile($this->preFilter($_content), true)); - } - catch (Exception $e) { - if ($this->smarty->debugging) { - $this->smarty->_debug->end_compile($this->template); - } - $this->_tag_stack = array(); - $this->_tag_objects = array(); - // free memory - $this->parent_compiler = null; - $this->template = null; - $this->parser = null; - throw $e; - } - if ($this->smarty->debugging) { - $this->smarty->_debug->end_compile($this->template); - } - $this->parent_compiler = null; - $this->template = null; - $this->parser = null; - return $_compiled_code; - } - - /** - * Optionally process compiled code by post filter - * - * @param string $code compiled code - * - * @return string - * @throws \SmartyException - */ - public function postFilter($code) - { - // run post filter if on code - if (!empty($code) && - (isset($this->smarty->autoload_filters[ 'post' ]) || isset($this->smarty->registered_filters[ 'post' ])) - ) { - return $this->smarty->ext->_filterHandler->runFilter('post', $code, $this->template); - } else { - return $code; - } - } - - /** - * Run optional prefilter - * - * @param string $_content template source - * - * @return string - * @throws \SmartyException - */ - public function preFilter($_content) - { - // run pre filter if required - if ($_content != '' && - ((isset($this->smarty->autoload_filters[ 'pre' ]) || isset($this->smarty->registered_filters[ 'pre' ]))) - ) { - return $this->smarty->ext->_filterHandler->runFilter('pre', $_content, $this->template); - } else { - return $_content; - } - } - - /** - * Compile Tag - * This is a call back from the lexer/parser - * - * Save current prefix code - * Compile tag - * Merge tag prefix code with saved one - * (required nested tags in attributes) - * - * @param string $tag tag name - * @param array $args array with tag attributes - * @param array $parameter array with compilation parameter - * - * @throws SmartyCompilerException - * @throws SmartyException - * @return string compiled code - */ - public function compileTag($tag, $args, $parameter = array()) - { - $this->prefixCodeStack[] = $this->prefix_code; - $this->prefix_code = array(); - $result = $this->compileTag2($tag, $args, $parameter); - $this->prefix_code = array_merge($this->prefix_code, array_pop($this->prefixCodeStack)); - return $result; - } - - /** - * 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; - $this->has_output = false; - // log tag/attributes - if (isset($this->smarty->_cache[ 'get_used_tags' ])) { - $this->template->_cache[ 'used_tags' ][] = array($tag, $args); - } - // check nocache option flag - if (in_array("'nocache'", $args) || in_array(array('nocache' => 'true'), $args) || - in_array(array('nocache' => '"true"'), $args) || in_array(array('nocache' => "'true'"), $args) - ) { - $this->tag_nocache = true; - } - // compile the smarty tag (required compile classes to compile the tag are auto loaded) - if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) { - if (isset($this->parent_compiler->template->tpl_function[ $tag ])) { - // template defined by {template} tag - $args[ '_attr' ][ 'name' ] = "'" . $tag . "'"; - $_output = $this->callTagCompiler('call', $args, $parameter); - } - } - if ($_output !== false) { - if ($_output !== true) { - // did we get compiled code - if ($this->has_code) { - // Does it create output? - if ($this->has_output) { - $_output .= "\n"; - } - // return compiled code - return $_output; - } - } - // tag did not produce compiled code - return null; - } else { - // map_named attributes - if (isset($args[ '_attr' ])) { - foreach ($args[ '_attr' ] as $key => $attribute) { - if (is_array($attribute)) { - $args = array_merge($args, $attribute); - } - } - } - // not an internal compiler tag - if (strlen($tag) < 6 || substr($tag, - 5) != 'close') { - // check if tag is a registered object - if (isset($this->smarty->registered_objects[ $tag ]) && isset($parameter[ 'object_method' ])) { - $method = $parameter[ 'object_method' ]; - if (!in_array($method, $this->smarty->registered_objects[ $tag ][ 3 ]) && - (empty($this->smarty->registered_objects[ $tag ][ 1 ]) || - in_array($method, $this->smarty->registered_objects[ $tag ][ 1 ])) - ) { - return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $method); - } elseif (in_array($method, $this->smarty->registered_objects[ $tag ][ 3 ])) { - return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, - $method); - } else { - // throw exception - $this->trigger_template_error('not allowed method "' . $method . '" in registered object "' . - $tag . '"', 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; - } - $function = $this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 0 ]; - if (!is_array($function)) { - return $function($new_args, $this); - } elseif (is_object($function[ 0 ])) { - return $this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 0 ][ 0 ]->{$function[ 1 ]}($new_args, - $this); - } else { - return call_user_func_array($function, array($new_args, $this)); - } - } - // compile registered function or block function - if ($plugin_type == Smarty::PLUGIN_FUNCTION || $plugin_type == Smarty::PLUGIN_BLOCK) { - return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, - $tag); - } - } - } - // check plugins from plugins folder - foreach ($this->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 $mixed) { - $new_args = array_merge($new_args, $mixed); - } - $function = $this->default_handler_plugins[ $plugin_type ][ $tag ][ 0 ]; - if (!is_array($function)) { - return $function($new_args, $this); - } elseif (is_object($function[ 0 ])) { - return $this->default_handler_plugins[ $plugin_type ][ $tag ][ 0 ][ 0 ]->$function[ 1 ]($new_args, - $this); - } else { - return call_user_func_array($function, array($new_args, $this)); - } - } else { - return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, - $tag); - } - } - } - } else { - // compile closing tag of block function - $base_tag = substr($tag, 0, - 5); - // check if closing tag is a registered object - if (isset($this->smarty->registered_objects[ $base_tag ]) && isset($parameter[ 'object_method' ])) { - $method = $parameter[ 'object_method' ]; - if (in_array($method, $this->smarty->registered_objects[ $base_tag ][ 3 ])) { - return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, - $method); - } else { - // throw exception - $this->trigger_template_error('not allowed closing tag method "' . $method . - '" in registered object "' . $base_tag . '"', 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; - } - $function = $this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 0 ]; - if (!is_array($function)) { - return $function($args, $this); - } elseif (is_object($function[ 0 ])) { - return $this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 0 ][ 0 ]->$function[ 1 ]($args, - $this); - } else { - return call_user_func_array($function, array($args, $this)); - } - } - if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) { - $plugin = 'smarty_compiler_' . $tag; - if (is_callable($plugin)) { - return $plugin($args, $this->smarty); - } - if (class_exists($plugin, false)) { - $plugin_object = new $plugin; - if (method_exists($plugin_object, 'compile')) { - return $plugin_object->compile($args, $this); - } - } - throw new SmartyException("Plugin \"{$tag}\" not callable"); - } - } - $this->trigger_template_error("unknown tag \"" . $tag . "\"", null, true); - } - } - - /** - * compile variable - * - * @param string $variable - * - * @return string - */ - public function compileVariable($variable) - { - if (strpos($variable, '(') == 0) { - // not a variable variable - $var = trim($variable, '\''); - $this->tag_nocache = $this->tag_nocache | - $this->template->ext->getTemplateVars->_getVariable($this->template, $var, null, true, false)->nocache; - // todo $this->template->compiled->properties['variables'][$var] = $this->tag_nocache | $this->nocache; - } - return '$_smarty_tpl->tpl_vars[' . $variable . ']->value'; - } - - /** - * compile config variable - * - * @param string $variable - * - * @return string - */ - public function compileConfigVariable($variable) - { - // return '$_smarty_tpl->config_vars[' . $variable . ']'; - return '$_smarty_tpl->smarty->ext->configLoad->_getConfigVariable($_smarty_tpl, ' . $variable . ')'; - } - - /** - * This method is called from parser to process a text content section - * - remove text from inheritance child templates as they may generate output - * - strip text if strip is enabled - * - * @param string $text - * - * @return null|\Smarty_Internal_ParseTree_Text - */ - public function processText($text) - { - if ((string) $text != '') { - $store = array(); - $_store = 0; - $_offset = 0; - if ($this->parser->strip) { - if (strpos($text, '<') !== false) { - // capture html elements not to be messed with - $_offset = 0; - if (preg_match_all('#(<script[^>]*>.*?</script[^>]*>)|(<textarea[^>]*>.*?</textarea[^>]*>)|(<pre[^>]*>.*?</pre[^>]*>)#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 - // 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', - '#^\s+<#Ss' => '<', - '#>\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 ++; - } - } - } else { - $text = preg_replace($this->stripRegEx, '', $text); - } - } - return new Smarty_Internal_ParseTree_Text($text); - } - return null; - } - - /** - * lazy loads internal compile plugin for tag and calls the compile method - * compile objects cached for reuse. - * class name format: Smarty_Internal_Compile_TagName - * plugin filename format: Smarty_Internal_TagName.php - * - * @param string $tag tag name - * @param array $args list of tag attributes - * @param mixed $param1 optional parameter - * @param mixed $param2 optional parameter - * @param mixed $param3 optional parameter - * - * @return string compiled code - */ - public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null) - { - // re-use object if already exists - if (!isset($this->_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)) - ) { - $this->_tag_objects[ $tag ] = new $class_name; - } else { - $this->_tag_objects[ $tag ] = false; - return false; - } - } - // compile this tag - return $this->_tag_objects[ $tag ] === false ? false : - $this->_tag_objects[ $tag ]->compile($args, $this, $param1, $param2, $param3); - } - - /** - * Check for plugins and return function name - * - * @param $plugin_name - * @param string $plugin_type type of plugin - * - * @return string call name of function - */ - public function getPlugin($plugin_name, $plugin_type) - { - $function = null; - if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { - if (isset($this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ])) { - $function = - $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ]; - } elseif (isset($this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ])) { - $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ] = - $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ]; - $function = - $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ]; - } - } else { - if (isset($this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ])) { - $function = - $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ]; - } elseif (isset($this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ])) { - $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ] = - $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ]; - $function = - $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ]; - } - } - if (isset($function)) { - if ($plugin_type == 'modifier') { - $this->modifier_plugins[ $plugin_name ] = true; - } - - return $function; - } - // loop through plugin dirs and find the plugin - $function = 'smarty_' . $plugin_type . '_' . $plugin_name; - $file = $this->smarty->loadPlugin($function, false); - - if (is_string($file)) { - if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { - $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'file' ] = - $file; - $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ] = - $function; - } else { - $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'file' ] = - $file; - $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ] = - $function; - } - if ($plugin_type == 'modifier') { - $this->modifier_plugins[ $plugin_name ] = true; - } - - return $function; - } - if (is_callable($function)) { - // plugin function is defined in the script - return $function; - } - - return false; - } - - /** - * Check for plugins by default plugin handler - * - * @param string $tag name of tag - * @param string $plugin_type type of plugin - * - * @return boolean true if found - */ - public function getPluginFromDefaultHandler($tag, $plugin_type) - { - $callback = null; - $script = null; - $cacheable = true; - $result = call_user_func_array($this->smarty->default_plugin_handler_func, - array($tag, $plugin_type, $this->template, &$callback, &$script, &$cacheable)); - if ($result) { - $this->tag_nocache = $this->tag_nocache || !$cacheable; - if ($script !== null) { - if (is_file($script)) { - if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { - $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $tag ][ $plugin_type ][ 'file' ] = - $script; - $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $tag ][ $plugin_type ][ 'function' ] = - $callback; - } else { - $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $tag ][ $plugin_type ][ 'file' ] = - $script; - $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $tag ][ $plugin_type ][ 'function' ] = - $callback; - } - require_once $script; - } else { - $this->trigger_template_error("Default plugin handler: Returned script file \"{$script}\" for \"{$tag}\" not found"); - } - } - if (!is_string($callback) && - !(is_array($callback) && is_string($callback[ 0 ]) && is_string($callback[ 1 ])) - ) { - $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" must be a static function name or array of class and function name"); - } - if (is_callable($callback)) { - $this->default_handler_plugins[ $plugin_type ][ $tag ] = array($callback, true, array()); - - return true; - } else { - $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" not callable"); - } - } - - return false; - } - - /** - * Append code segments and remove unneeded ?> <?php transitions - * - * @param string $left - * @param string $right - * - * @return string - */ - public function appendCode($left, $right) - { - if (preg_match('/\s*\?>\s*$/', $left) && preg_match('/^\s*<\?php\s+/', $right)) { - $left = preg_replace('/\s*\?>\s*$/', "\n", $left); - $left .= preg_replace('/^\s*<\?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->template->caching && - !$this->suppressNocacheProcessing && ($this->nocache || $this->tag_nocache) - ) { - $this->template->compiled->has_nocache_code = true; - $_output = addcslashes($content, '\'\\'); - $_output = str_replace("^#^", "'", $_output); - $_output = "<?php echo '/*%%SmartyNocache:{$this->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->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ 'modifier' ])) { - $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ 'modifier' ] = - $this->parent_compiler->template->compiled->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*)[\'"]*$~', $input, $match)) { - return $match[ 1 ]; - } - 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; - } - - /** - * Generate nocache code string - * - * @param string $code PHP code - * - * @return string - */ - public function makeNocacheCode($code) - { - return "echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/<?php " . - str_replace("^#^", "'", addcslashes($code, '\'\\')) . "?>/*/%%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); - } - } - $e = new SmartyCompilerException($error_text); - $e->line = $line; - $e->source = trim(preg_replace('![\t\r\n]+!', ' ', $match[ $line - 1 ])); - $e->desc = $args; - $e->template = $this->template->source->filepath; - throw $e; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_templatelexer.php b/library/Smarty/libs/sysplugins/smarty_internal_templatelexer.php deleted file mode 100644 index 993b7be62..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_templatelexer.php +++ /dev/null @@ -1,1135 +0,0 @@ -<?php -/* - * This file is part of Smarty. - * - * (c) 2015 Uwe Tews - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Smarty_Internal_Templatelexer - * This is the template file lexer. - * It is generated from the smarty_internal_templatelexer.plex file - * - * - * @author Uwe Tews <uwe.tews@googlemail.com> - */ -class Smarty_Internal_Templatelexer -{ - /** - * Source - * - * @var string - */ - public $data; - - /** - * 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 = ''; - - /** - * escaped left delimiter - * - * @var string - */ - public $ldel = ''; - - /** - * escaped left delimiter length - * - * @var int - */ - public $ldel_length = 0; - - /** - * escaped right delimiter - * - * @var string - */ - public $rdel = ''; - - /** - * escaped right delimiter length - * - * @var int - */ - public $rdel_length = 0; - - /** - * state number - * - * @var int - */ - public $state = 1; - - /** - * Smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * compiler object - * - * @var Smarty_Internal_TemplateCompilerBase - */ - public $compiler = null; - - /** - * literal tag nesting level - * - * @var int - */ - private $literal_cnt = 0; - - /** - * PHP start tag string - * - * @var string - */ - - /** - * 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',); - - /** - * 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; - - /** - * 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' => '"<?php", "<%", "{php}" tag', - 'LOGOP' => '"<", "==" ... logical operator', - 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition', - 'SCOND' => '"is even" ... if condition',); - - /** - * constructor - * - * @param string $data template source - * @param Smarty_Internal_TemplateCompilerBase $compiler - */ - function __construct($data, Smarty_Internal_TemplateCompilerBase $compiler) - { - $this->data = $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->smarty; - $this->compiler = $compiler; - $this->ldel = preg_quote($this->smarty->left_delimiter, '~'); - $this->ldel_length = strlen($this->smarty->left_delimiter); - $this->rdel = preg_quote($this->smarty->right_delimiter, '~'); - $this->rdel_length = strlen($this->smarty->right_delimiter); - $this->smarty_token_names[ 'LDEL' ] = $this->smarty->left_delimiter; - $this->smarty_token_names[ 'RDEL' ] = $this->smarty->right_delimiter; - } - - public function PrintTrace() - { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '<br>'; - } - - /* - * Check if this tag is autoliteral - */ - public function isAutoLiteral() - { - return $this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? - strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false; - } - - private $_yy_state = 1; - - private $_yy_stack = array(); - - public function yylex() - { - return $this->{'yylex' . $this->_yy_state}(); - } - - public function yypushstate($state) - { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, - isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : - $this->_yy_state); - } - array_push($this->_yy_stack, $this->_yy_state); - $this->_yy_state = $state; - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, - isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : - $this->_yy_state); - } - } - - public function yypopstate() - { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, - isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : - $this->_yy_state); - } - $this->_yy_state = array_pop($this->_yy_stack); - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, - isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : - $this->_yy_state); - } - } - - public function yybegin($state) - { - $this->_yy_state = $state; - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, - isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : - $this->_yy_state); - } - } - - public function yylex1() - { - if (!isset($this->yy_global_pattern1)) { - $this->yy_global_pattern1 = - "/\G([{][}])|\G(" . $this->ldel . "[*])|\G((" . $this->ldel . "\\s*php(.*?)" . $this->rdel . ")|(" . - $this->ldel . "\\s*[\/]php" . $this->rdel . "))|\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . - ")|\G(" . $this->ldel . "\\s*)|\G(\\s*" . $this->rdel . - ")|\G((<[?]((php\\s+|=)|\\s+))|(<[%])|(<[?]xml\\s+)|(<script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*>)|([?][>])|([%][>]))|\G([\S\s])/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[ 0 ]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - 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 >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); - } - break; - } while (true); - } // end function - - const TEXT = 1; - - function yy_r1_1() - { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r1_2() - { - - preg_match("~[*]{$this->rdel}~", $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->right_delimiter}'"); - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - return false; - } - - function yy_r1_3() - { - - $obj = new Smarty_Internal_Compile_Private_Php(); - $obj->parsePhp($this); - } - - function yy_r1_7() - { - - if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? - strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false - ) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; - $this->yypushstate(self::LITERAL); - } - } - - function yy_r1_8() - { - - if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? - strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false - ) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->yypushstate(self::TAG); - return true; - } - } - - function yy_r1_9() - { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r1_10() - { - - $obj = new Smarty_Internal_Compile_Private_Php(); - $obj->parsePhp($this); - } - - function yy_r1_19() - { - - $to = strlen($this->data); - preg_match("~($this->ldel)|(<[?]((php\s+|=)|\s+))|(<[%])|(<[?]xml\s+)|(<script\s+language\s*=\s*[\"']?\s*php\s*[\"']?\s*>)|([?][>])|([%][>])~i", - $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 = - "/\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" . - $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*setfilter\\s+)|\G(" . $this->ldel . - "\\s*[0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*" . $this->rdel . ")|\G(" . $this->ldel . - "\\s*[\/](?:(?!block)[0-9]*[a-zA-Z_]\\w*)\\s*" . $this->rdel . ")|\G(" . $this->ldel . - "\\s*[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/])|\G(" . - $this->ldel . "\\s*)/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[ 0 ]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - 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 >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); - } - break; - } while (true); - } // end function - - const TAG = 2; - - function yy_r2_1() - { - - $this->token = Smarty_Internal_Templateparser::TP_LDELIF; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - - function yy_r2_3() - { - - $this->token = Smarty_Internal_Templateparser::TP_LDELFOR; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - - function yy_r2_4() - { - - $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - - function yy_r2_5() - { - - $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - - function yy_r2_6() - { - - $this->yypopstate(); - $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG; - $this->taglineno = $this->line; - } - - function yy_r2_8() - { - - $this->yypopstate(); - $this->token = Smarty_Internal_Templateparser::TP_CLOSETAG; - $this->taglineno = $this->line; - } - - function yy_r2_9() - { - - 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->left_delimiter; - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - } - - function yy_r2_11() - { - - $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - - function yy_r2_12() - { - - $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 = "/\G(\\s*" . $this->rdel . ")|\G(" . $this->ldel . - "\\s*)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$]smarty\\.block\\.(child|parent))|\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|(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([#])|\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 ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[ 0 ]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - 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 >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); - } - break; - } while (true); - } // end function - - const TAGBODY = 3; - - function yy_r3_1() - { - - $this->token = Smarty_Internal_Templateparser::TP_RDEL; - $this->yypopstate(); - } - - function yy_r3_2() - { - - if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? - strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false - ) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->yypushstate(self::TAG); - return true; - } - } - - function yy_r3_3() - { - - $this->token = Smarty_Internal_Templateparser::TP_QUOTE; - $this->yypushstate(self::DOUBLEQUOTEDSTRING); - } - - function yy_r3_4() - { - - $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING; - } - - function yy_r3_5() - { - - $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT; - $this->taglineno = $this->line; - } - - function yy_r3_7() - { - - $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; - } - - function yy_r3_8() - { - - $this->token = Smarty_Internal_Templateparser::TP_DOLLAR; - } - - function yy_r3_9() - { - - $this->token = Smarty_Internal_Templateparser::TP_ISIN; - } - - function yy_r3_10() - { - - $this->token = Smarty_Internal_Templateparser::TP_AS; - } - - function yy_r3_11() - { - - $this->token = Smarty_Internal_Templateparser::TP_TO; - } - - function yy_r3_12() - { - - $this->token = Smarty_Internal_Templateparser::TP_STEP; - } - - function yy_r3_13() - { - - $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF; - } - - function yy_r3_14() - { - - $this->token = Smarty_Internal_Templateparser::TP_LOGOP; - } - - function yy_r3_19() - { - - $this->token = Smarty_Internal_Templateparser::TP_TLOGOP; - } - - function yy_r3_24() - { - - $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND; - } - - function yy_r3_27() - { - - $this->token = Smarty_Internal_Templateparser::TP_NOT; - } - - function yy_r3_30() - { - - $this->token = Smarty_Internal_Templateparser::TP_TYPECAST; - } - - function yy_r3_34() - { - - $this->token = Smarty_Internal_Templateparser::TP_OPENP; - } - - function yy_r3_35() - { - - $this->token = Smarty_Internal_Templateparser::TP_CLOSEP; - } - - function yy_r3_36() - { - - $this->token = Smarty_Internal_Templateparser::TP_OPENB; - } - - function yy_r3_37() - { - - $this->token = Smarty_Internal_Templateparser::TP_CLOSEB; - } - - function yy_r3_38() - { - - $this->token = Smarty_Internal_Templateparser::TP_PTR; - } - - function yy_r3_39() - { - - $this->token = Smarty_Internal_Templateparser::TP_APTR; - } - - function yy_r3_40() - { - - $this->token = Smarty_Internal_Templateparser::TP_EQUAL; - } - - function yy_r3_41() - { - - $this->token = Smarty_Internal_Templateparser::TP_INCDEC; - } - - function yy_r3_43() - { - - $this->token = Smarty_Internal_Templateparser::TP_UNIMATH; - } - - function yy_r3_45() - { - - $this->token = Smarty_Internal_Templateparser::TP_MATH; - } - - function yy_r3_47() - { - - $this->token = Smarty_Internal_Templateparser::TP_AT; - } - - function yy_r3_48() - { - - $this->token = Smarty_Internal_Templateparser::TP_HATCH; - } - - function yy_r3_49() - { - - // resolve conflicts with shorttag and right_delimiter starting with '=' - if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->rdel_length) == - $this->smarty->right_delimiter - ) { - preg_match("~\s+~", $this->value, $match); - $this->value = $match[ 0 ]; - $this->token = Smarty_Internal_Templateparser::TP_SPACE; - } else { - $this->token = Smarty_Internal_Templateparser::TP_ATTR; - } - } - - function yy_r3_50() - { - - $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE; - } - - function yy_r3_53() - { - - $this->token = Smarty_Internal_Templateparser::TP_ID; - } - - function yy_r3_54() - { - - $this->token = Smarty_Internal_Templateparser::TP_INTEGER; - } - - function yy_r3_55() - { - - $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; - $this->yypopstate(); - } - - function yy_r3_56() - { - - $this->token = Smarty_Internal_Templateparser::TP_VERT; - } - - function yy_r3_57() - { - - $this->token = Smarty_Internal_Templateparser::TP_DOT; - } - - function yy_r3_58() - { - - $this->token = Smarty_Internal_Templateparser::TP_COMMA; - } - - function yy_r3_59() - { - - $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON; - } - - function yy_r3_60() - { - - $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON; - } - - function yy_r3_61() - { - - $this->token = Smarty_Internal_Templateparser::TP_COLON; - } - - function yy_r3_62() - { - - $this->token = Smarty_Internal_Templateparser::TP_QMARK; - } - - function yy_r3_63() - { - - $this->token = Smarty_Internal_Templateparser::TP_HEX; - } - - function yy_r3_64() - { - - $this->token = Smarty_Internal_Templateparser::TP_SPACE; - } - - function yy_r3_65() - { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - public function yylex4() - { - if (!isset($this->yy_global_pattern4)) { - $this->yy_global_pattern4 = - "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/]literal\\s*" . - $this->rdel . ")|\G([\S\s])/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[ 0 ]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - 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 >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); - } - break; - } while (true); - } // end function - - const LITERAL = 4; - - function yy_r4_1() - { - - $this->literal_cnt ++; - $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } - - function yy_r4_2() - { - - if ($this->literal_cnt) { - $this->literal_cnt --; - $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LITERALEND; - $this->yypopstate(); - } - } - - function yy_r4_3() - { - - $to = strlen($this->data); - preg_match("~{$this->ldel}[/]?literal{$this->rdel}~i", $this->data, $match, PREG_OFFSET_CAPTURE, - $this->counter); - if (isset($match[ 0 ][ 1 ])) { - $to = $match[ 0 ][ 1 ]; - } else { - $this->compiler->trigger_template_error("missing or misspelled literal closing tag"); - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } - - public function yylex5() - { - if (!isset($this->yy_global_pattern5)) { - $this->yy_global_pattern5 = - "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/]literal\\s*" . - $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/])|\G(" . $this->ldel . "\\s*[0-9]*[a-zA-Z_]\\w*)|\G(" . - $this->ldel . - "\\s*)|\G([\"])|\G([`][$])|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(" . - $this->ldel . "|\\$|`\\$|\")))|\G([\S\s])/isS"; - } - if ($this->counter >= strlen($this->data)) { - return false; // end of input - } - - do { - if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, null, $this->counter)) { - $yysubmatches = $yymatches; - if (strlen($yysubmatches[ 0 ]) < 200) { - $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); - } else { - $yymatches = array_filter($yymatches, 'strlen'); - } - 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 >= strlen($this->data)) { - return false; // end of input - } - // skip this token - continue; - } - } else { - throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); - } - break; - } while (true); - } // end function - - const DOUBLEQUOTEDSTRING = 5; - - function yy_r5_1() - { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r5_2() - { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r5_3() - { - - if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? - strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false - ) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->yypushstate(self::TAG); - return true; - } - } - - function yy_r5_4() - { - - if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? - strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false - ) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->yypushstate(self::TAG); - return true; - } - } - - function yy_r5_5() - { - - if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? - strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false - ) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->taglineno = $this->line; - $this->yypushstate(self::TAGBODY); - } - } - - function yy_r5_6() - { - - $this->token = Smarty_Internal_Templateparser::TP_QUOTE; - $this->yypopstate(); - } - - function yy_r5_7() - { - - $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; - $this->value = substr($this->value, 0, - 1); - $this->yypushstate(self::TAGBODY); - $this->taglineno = $this->line; - } - - function yy_r5_8() - { - - $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; - } - - function yy_r5_9() - { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r5_10() - { - - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - - function yy_r5_14() - { - - $to = strlen($this->data); - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - -} - -
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_internal_templateparser.php b/library/Smarty/libs/sysplugins/smarty_internal_templateparser.php deleted file mode 100644 index a745d1dc2..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_templateparser.php +++ /dev/null @@ -1,2833 +0,0 @@ -<?php - -class TP_yyToken implements ArrayAccess -{ - public $string = ''; - - public $metadata = array(); - - public function __construct($s, $m = array()) - { - if ($s instanceof TP_yyToken) { - $this->string = $s->string; - $this->metadata = $s->metadata; - } else { - $this->string = (string) $s; - if ($m instanceof TP_yyToken) { - $this->metadata = $m->metadata; - } elseif (is_array($m)) { - $this->metadata = $m; - } - } - } - - public function __toString() - { - return $this->string; - } - - public function offsetExists($offset) - { - return isset($this->metadata[ $offset ]); - } - - public function offsetGet($offset) - { - return $this->metadata[ $offset ]; - } - - public function offsetSet($offset, $value) - { - if ($offset === null) { - if (isset($value[ 0 ])) { - $x = ($value instanceof TP_yyToken) ? $value->metadata : $value; - $this->metadata = array_merge($this->metadata, $x); - - return; - } - $offset = count($this->metadata); - } - if ($value === null) { - return; - } - if ($value instanceof TP_yyToken) { - if ($value->metadata) { - $this->metadata[ $offset ] = $value->metadata; - } - } elseif ($value) { - $this->metadata[ $offset ] = $value; - } - } - - public function offsetUnset($offset) - { - unset($this->metadata[ $offset ]); - } -} - -class TP_yyStackEntry -{ - public $stateno; /* The state-number */ - public $major; /* The major token value. This is the code - ** number for the token at this stack level */ - public $minor; /* The user-supplied minor token value. This - ** is the value of the token */ -} - -; - -#line 11 "../smarty/lexer/smarty_internal_templateparser.y" - -/** - * Smarty Template Parser Class - * - * This is the template parser. - * It is generated from the smarty_internal_templateparser.y file - * - * @author Uwe Tews <uwe.tews@googlemail.com> - */ -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"; - - /** - * result status - * - * @var bool - */ - public $successful = true; - - /** - * return value - * - * @var mixed - */ - public $retvalue = 0; - - /** - * counter for prefix code - * - * @var int - */ - public static $prefix_number = 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 - */ - public $root_buffer; - - /** - * current parse tree object - * - * @var Smarty_Internal_ParseTree - */ - public $current_buffer; - - /** - * lexer object - * - * @var Smarty_Internal_Templatelexer - */ - public $lex; - - /** - * internal error flag - * - * @var bool - */ - private $internalError = false; - - /** - * {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(); - - /** - * security object - * - * @var \Smarty_Internal_ParseTree[] - */ - public $template_postfix = array(); - - /** - * constructor - * - * @param Smarty_Internal_Templatelexer $lex - * @param Smarty_Internal_TemplateCompilerBase $compiler - */ - 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(); - } - - /** - * 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)); - } - - /** - * 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)); - } - - const TP_VERT = 1; - - const TP_COLON = 2; - - const TP_PHP = 3; - - const TP_NOCACHE = 4; - - const TP_TEXT = 5; - - const TP_STRIPON = 6; - - const TP_STRIPOFF = 7; - - const TP_LITERALSTART = 8; - - const TP_LITERALEND = 9; - - const TP_LITERAL = 10; - - const TP_RDEL = 11; - - const TP_SIMPELOUTPUT = 12; - - const TP_LDEL = 13; - - const TP_DOLLARID = 14; - - const TP_EQUAL = 15; - - const TP_SIMPLETAG = 16; - - const TP_ID = 17; - - const TP_PTR = 18; - - const TP_LDELIF = 19; - - const TP_LDELFOR = 20; - - const TP_SEMICOLON = 21; - - const TP_INCDEC = 22; - - const TP_TO = 23; - - const TP_STEP = 24; - - const TP_LDELFOREACH = 25; - - const TP_SPACE = 26; - - const TP_AS = 27; - - const TP_APTR = 28; - - const TP_LDELSETFILTER = 29; - - const TP_SMARTYBLOCKCHILDPARENT = 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_INSTANCEOF = 41; - - const TP_QMARK = 42; - - const TP_NOT = 43; - - const TP_TYPECAST = 44; - - const TP_HEX = 45; - - const TP_DOT = 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_TLOGOP = 56; - - const TP_SINGLECOND = 57; - - const TP_QUOTE = 58; - - const TP_BACKTICK = 59; - - const YY_NO_ACTION = 527; - - const YY_ACCEPT_ACTION = 526; - - const YY_ERROR_ACTION = 525; - - const YY_SZ_ACTTAB = 2021; - - static public $yy_action = array(242, 10, 131, 178, 255, 76, 157, 5, 83, 293, 12, 149, 152, 116, 292, 93, 331, 217, - 284, 295, 221, 331, 226, 36, 21, 169, 35, 43, 308, 99, 26, 42, 39, 294, 235, 244, - 30, 200, 187, 80, 1, 251, 320, 206, 442, 123, 53, 242, 10, 130, 98, 255, 194, 399, - 5, 83, 442, 240, 298, 107, 116, 310, 174, 220, 217, 36, 295, 221, 399, 208, 135, - 21, 26, 161, 43, 399, 8, 174, 42, 39, 294, 235, 218, 331, 200, 187, 80, 1, 312, - 320, 11, 290, 313, 53, 242, 10, 133, 306, 255, 205, 187, 5, 83, 264, 266, 267, 211, - 116, 353, 220, 52, 217, 298, 295, 221, 206, 226, 220, 21, 290, 290, 43, 321, 36, - 249, 42, 39, 294, 235, 244, 26, 200, 206, 80, 1, 11, 320, 283, 52, 52, 53, 242, 10, - 132, 248, 255, 205, 455, 5, 83, 84, 301, 151, 455, 116, 323, 92, 36, 217, 2, 295, - 221, 331, 226, 26, 21, 290, 304, 43, 137, 36, 111, 42, 39, 294, 235, 244, 26, 200, - 187, 80, 1, 225, 320, 320, 52, 123, 53, 242, 10, 133, 98, 255, 193, 175, 5, 83, - 177, 280, 273, 234, 116, 310, 23, 278, 217, 13, 295, 221, 320, 203, 223, 21, 290, - 442, 43, 138, 187, 326, 42, 39, 294, 235, 244, 216, 200, 442, 80, 1, 4, 320, 329, - 52, 15, 53, 242, 10, 134, 91, 255, 205, 176, 5, 83, 293, 12, 16, 90, 116, 292, 300, - 99, 217, 241, 295, 221, 320, 226, 215, 28, 213, 201, 43, 105, 187, 286, 42, 39, - 294, 235, 244, 215, 200, 214, 80, 1, 105, 320, 11, 135, 285, 53, 242, 10, 133, 8, - 255, 205, 164, 5, 83, 442, 215, 19, 239, 116, 99, 105, 331, 217, 6, 295, 221, 442, - 192, 311, 21, 182, 289, 43, 308, 443, 32, 42, 39, 294, 235, 244, 296, 200, 17, 80, - 1, 443, 320, 262, 107, 26, 53, 242, 10, 133, 122, 255, 191, 172, 5, 83, 183, 188, - 148, 231, 116, 223, 168, 331, 217, 181, 295, 221, 331, 226, 206, 21, 331, 141, 43, - 308, 206, 38, 42, 39, 294, 235, 244, 331, 200, 188, 80, 1, 187, 320, 155, 206, 308, - 53, 242, 10, 133, 25, 255, 198, 188, 5, 83, 206, 145, 160, 308, 116, 228, 146, 206, - 217, 180, 295, 221, 331, 226, 286, 21, 331, 359, 43, 179, 289, 38, 42, 39, 294, - 235, 244, 250, 200, 271, 80, 1, 272, 320, 122, 94, 103, 53, 242, 10, 129, 3, 255, - 205, 144, 5, 83, 185, 289, 170, 99, 116, 270, 322, 331, 217, 184, 295, 221, 331, - 226, 99, 7, 171, 35, 43, 308, 89, 105, 42, 39, 294, 235, 244, 120, 200, 328, 80, 1, - 187, 320, 82, 223, 4, 53, 242, 10, 134, 142, 255, 205, 107, 5, 83, 309, 324, 302, - 20, 116, 316, 206, 291, 217, 290, 295, 221, 33, 226, 277, 28, 399, 243, 43, 257, - 219, 189, 42, 39, 294, 235, 244, 110, 200, 140, 80, 399, 147, 320, 253, 327, 258, - 53, 399, 14, 236, 220, 207, 154, 113, 65, 108, 319, 159, 238, 311, 98, 471, 471, - 330, 237, 279, 471, 210, 325, 245, 299, 310, 86, 308, 143, 268, 263, 259, 260, 269, - 177, 204, 287, 136, 242, 10, 150, 87, 255, 320, 139, 5, 83, 293, 12, 22, 195, 116, - 292, 247, 258, 217, 153, 295, 221, 220, 207, 36, 126, 50, 104, 109, 112, 88, 26, - 98, 246, 397, 330, 237, 85, 212, 210, 325, 245, 258, 310, 102, 299, 299, 220, 207, - 397, 113, 65, 108, 320, 299, 134, 397, 98, 222, 442, 330, 237, 299, 299, 210, 325, - 245, 258, 310, 299, 299, 442, 220, 207, 299, 126, 69, 108, 299, 288, 31, 299, 98, - 299, 299, 330, 237, 299, 299, 210, 325, 245, 80, 310, 299, 320, 299, 258, 299, 299, - 209, 299, 220, 207, 299, 126, 69, 108, 206, 299, 299, 455, 98, 299, 206, 330, 237, - 455, 365, 210, 325, 245, 299, 310, 355, 227, 258, 299, 299, 299, 199, 220, 207, 36, - 126, 64, 104, 299, 214, 36, 26, 98, 299, 442, 330, 237, 26, 299, 210, 325, 245, - 258, 310, 471, 471, 442, 220, 207, 471, 126, 69, 108, 293, 12, 299, 299, 98, 292, - 299, 330, 237, 299, 299, 210, 325, 245, 36, 310, 163, 299, 258, 299, 299, 26, 202, - 220, 207, 299, 126, 44, 108, 471, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, - 210, 325, 245, 299, 310, 299, 299, 258, 134, 299, 299, 252, 220, 207, 206, 126, 72, - 108, 299, 299, 299, 299, 98, 299, 396, 330, 237, 299, 299, 210, 325, 245, 258, 310, - 299, 299, 299, 220, 207, 396, 126, 74, 108, 254, 299, 80, 396, 98, 320, 299, 330, - 237, 299, 297, 210, 325, 245, 299, 310, 299, 242, 9, 299, 299, 255, 299, 258, 5, - 83, 299, 299, 220, 207, 116, 126, 68, 108, 217, 299, 295, 221, 98, 299, 299, 330, - 237, 299, 299, 210, 325, 245, 299, 310, 299, 258, 299, 299, 299, 299, 220, 207, - 299, 100, 70, 108, 299, 303, 29, 299, 98, 299, 299, 330, 237, 299, 297, 210, 325, - 245, 299, 310, 299, 242, 9, 299, 299, 255, 299, 299, 5, 83, 299, 299, 299, 299, - 116, 299, 299, 258, 217, 299, 295, 221, 220, 207, 299, 126, 66, 108, 299, 299, 299, - 299, 98, 293, 12, 330, 237, 299, 292, 210, 325, 245, 299, 310, 258, 299, 299, 305, - 29, 220, 207, 299, 126, 60, 108, 299, 293, 12, 299, 98, 299, 292, 330, 237, 299, - 299, 210, 325, 245, 299, 310, 232, 299, 258, 299, 206, 299, 299, 220, 207, 299, - 126, 49, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 230, 210, 325, 245, - 299, 310, 258, 167, 299, 299, 299, 220, 207, 299, 126, 58, 108, 299, 41, 40, 37, - 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, - 220, 97, 299, 81, 45, 106, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, - 210, 325, 245, 299, 310, 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 63, - 108, 299, 186, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, - 258, 299, 299, 299, 299, 220, 197, 299, 114, 59, 108, 299, 41, 40, 37, 98, 299, - 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, - 207, 299, 126, 55, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, - 325, 245, 299, 310, 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 57, 108, - 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, - 299, 256, 275, 282, 220, 95, 299, 81, 48, 106, 233, 41, 40, 37, 98, 299, 299, 330, - 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, - 126, 78, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, - 299, 310, 299, 299, 258, 299, 206, 18, 299, 220, 207, 299, 96, 61, 108, 299, 299, - 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, - 299, 299, 220, 207, 299, 126, 47, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237, - 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, 126, 75, - 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, - 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 64, 108, 299, 299, 299, 299, - 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, - 220, 207, 299, 126, 56, 108, 317, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, - 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, 115, 46, 108, 299, - 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, - 258, 299, 206, 299, 299, 220, 207, 299, 126, 79, 108, 299, 190, 299, 299, 98, 299, - 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220, - 207, 299, 126, 62, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, - 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, 126, 71, 108, 299, 299, - 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, 258, - 299, 206, 299, 299, 220, 207, 299, 101, 67, 108, 299, 318, 299, 299, 98, 299, 299, - 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220, 207, - 299, 126, 77, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, 325, - 245, 299, 310, 258, 299, 256, 275, 282, 220, 196, 299, 126, 54, 108, 299, 299, 299, - 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, 258, 299, - 206, 299, 299, 220, 207, 299, 126, 73, 108, 299, 274, 299, 299, 98, 299, 299, 330, - 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220, 224, 299, - 118, 299, 108, 299, 41, 40, 37, 98, 299, 299, 299, 261, 299, 299, 210, 325, 245, - 299, 310, 258, 299, 256, 275, 282, 220, 224, 299, 128, 299, 108, 299, 299, 299, - 299, 98, 299, 299, 229, 315, 206, 299, 210, 325, 245, 299, 310, 299, 471, 471, 307, - 27, 299, 471, 455, 526, 51, 265, 266, 267, 211, 299, 299, 220, 299, 36, 299, 409, - 409, 299, 299, 299, 26, 299, 299, 299, 299, 41, 40, 37, 206, 299, 455, 299, 455, - 299, 471, 299, 455, 299, 299, 299, 299, 299, 256, 275, 282, 229, 299, 299, 117, - 299, 442, 299, 409, 409, 409, 471, 471, 299, 299, 299, 471, 455, 442, 299, 299, 41, - 40, 37, 299, 409, 409, 409, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 256, - 275, 282, 299, 299, 299, 299, 455, 299, 455, 258, 471, 299, 455, 281, 220, 224, - 299, 127, 299, 108, 299, 299, 299, 299, 98, 299, 299, 299, 299, 299, 299, 210, 325, - 245, 258, 310, 206, 156, 299, 220, 224, 175, 121, 299, 108, 299, 299, 331, 299, 98, - 23, 278, 299, 299, 299, 299, 210, 325, 245, 34, 310, 36, 299, 299, 187, 299, 299, - 299, 26, 299, 299, 258, 299, 41, 40, 37, 220, 224, 299, 125, 299, 108, 299, 299, - 299, 299, 98, 299, 299, 229, 256, 275, 282, 210, 325, 245, 299, 310, 299, 471, 471, - 258, 31, 299, 471, 455, 220, 224, 299, 124, 299, 108, 299, 299, 299, 299, 98, 299, - 299, 299, 299, 299, 299, 210, 325, 245, 258, 310, 206, 299, 299, 220, 224, 455, - 119, 455, 108, 471, 299, 455, 299, 98, 299, 299, 229, 299, 299, 24, 210, 325, 245, - 299, 310, 299, 471, 471, 299, 471, 471, 471, 455, 299, 471, 455, 206, 41, 40, 37, - 299, 299, 299, 471, 471, 299, 299, 299, 471, 455, 299, 299, 276, 299, 256, 275, - 282, 299, 299, 299, 455, 36, 455, 455, 471, 455, 455, 471, 26, 455, 299, 206, 403, - 41, 40, 37, 206, 455, 299, 455, 299, 471, 403, 455, 403, 299, 299, 403, 299, 299, - 256, 275, 282, 299, 403, 299, 403, 299, 403, 299, 299, 299, 299, 299, 299, 299, - 299, 223, 41, 40, 37, 299, 299, 41, 40, 37, 299, 299, 299, 299, 299, 299, 299, 299, - 173, 256, 275, 282, 175, 314, 256, 275, 282, 299, 331, 166, 299, 23, 278, 175, 162, - 299, 299, 299, 175, 331, 299, 299, 23, 278, 331, 187, 299, 23, 278, 158, 299, 299, - 299, 175, 299, 299, 187, 299, 299, 331, 165, 187, 23, 278, 175, 299, 299, 299, 299, - 299, 331, 299, 299, 23, 278, 299, 187, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 187,); - - static public $yy_lookahead = array(12, 13, 14, 80, 16, 17, 71, 19, 20, 12, 13, 71, 91, 25, 17, 75, 81, 29, 30, 31, - 32, 81, 34, 26, 36, 28, 15, 39, 93, 18, 33, 43, 44, 45, 46, 47, 28, 49, 98, 51, - 52, 70, 54, 1, 36, 74, 58, 12, 13, 14, 79, 16, 17, 11, 19, 20, 48, 86, 64, 48, - 25, 90, 75, 69, 29, 26, 31, 32, 26, 34, 46, 36, 33, 71, 39, 33, 52, 75, 43, 44, - 45, 46, 47, 81, 49, 98, 51, 52, 53, 54, 35, 22, 37, 58, 12, 13, 14, 103, 16, 17, - 98, 19, 20, 63, 64, 65, 66, 25, 11, 69, 41, 29, 64, 31, 32, 1, 34, 69, 36, 22, - 22, 39, 53, 26, 95, 43, 44, 45, 46, 47, 33, 49, 1, 51, 52, 35, 54, 37, 41, 41, - 58, 12, 13, 14, 14, 16, 17, 46, 19, 20, 102, 103, 71, 52, 25, 11, 75, 26, 29, - 36, 31, 32, 81, 34, 33, 36, 22, 17, 39, 14, 26, 48, 43, 44, 45, 46, 47, 33, 49, - 98, 51, 52, 70, 54, 54, 41, 74, 58, 12, 13, 14, 79, 16, 17, 75, 19, 20, 8, 9, - 10, 50, 25, 90, 84, 85, 29, 13, 31, 32, 54, 34, 46, 36, 22, 36, 39, 14, 98, 53, - 43, 44, 45, 46, 47, 46, 49, 48, 51, 52, 36, 54, 53, 41, 21, 58, 12, 13, 14, 36, - 16, 17, 75, 19, 20, 12, 13, 15, 35, 25, 17, 59, 18, 29, 22, 31, 32, 54, 34, 74, - 36, 76, 77, 39, 79, 98, 99, 43, 44, 45, 46, 47, 74, 49, 76, 51, 52, 79, 54, 35, - 46, 37, 58, 12, 13, 14, 52, 16, 17, 71, 19, 20, 36, 74, 15, 76, 25, 18, 79, 81, - 29, 35, 31, 32, 48, 34, 92, 36, 94, 95, 39, 93, 36, 15, 43, 44, 45, 46, 47, 53, - 49, 26, 51, 52, 48, 54, 89, 48, 33, 58, 12, 13, 14, 96, 16, 17, 71, 19, 20, 14, - 98, 71, 17, 25, 46, 71, 81, 29, 75, 31, 32, 81, 34, 1, 36, 81, 71, 39, 93, 1, 2, - 43, 44, 45, 46, 47, 81, 49, 98, 51, 52, 98, 54, 91, 1, 93, 58, 12, 13, 14, 28, - 16, 17, 98, 19, 20, 1, 91, 71, 93, 25, 18, 71, 1, 29, 80, 31, 32, 81, 34, 99, - 36, 81, 11, 39, 94, 95, 2, 43, 44, 45, 46, 47, 89, 49, 65, 51, 52, 68, 54, 96, - 80, 79, 58, 12, 13, 14, 36, 16, 17, 71, 19, 20, 94, 95, 71, 18, 25, 53, 96, 81, - 29, 75, 31, 32, 81, 34, 18, 36, 74, 15, 39, 93, 91, 79, 43, 44, 45, 46, 47, 17, - 49, 17, 51, 52, 98, 54, 17, 46, 36, 58, 12, 13, 14, 51, 16, 17, 48, 19, 20, 17, - 34, 17, 42, 25, 17, 1, 34, 29, 22, 31, 32, 23, 34, 37, 36, 11, 17, 39, 5, 17, - 17, 43, 44, 45, 46, 47, 17, 49, 51, 51, 26, 27, 54, 11, 53, 64, 58, 33, 13, 14, - 69, 70, 17, 72, 73, 74, 53, 91, 81, 92, 79, 12, 13, 82, 83, 9, 17, 86, 87, 88, - 104, 90, 79, 93, 91, 3, 4, 5, 6, 7, 8, 100, 101, 79, 12, 13, 91, 79, 16, 54, 91, - 19, 20, 12, 13, 13, 14, 25, 17, 17, 64, 29, 91, 31, 32, 69, 70, 26, 72, 73, 74, - 78, 76, 79, 33, 79, 34, 11, 82, 83, 79, 15, 86, 87, 88, 64, 90, 67, 104, 104, - 69, 70, 26, 72, 73, 74, 54, 104, 14, 33, 79, 17, 36, 82, 83, 104, 104, 86, 87, - 88, 64, 90, 104, 104, 48, 69, 70, 104, 72, 73, 74, 104, 101, 15, 104, 79, 104, - 104, 82, 83, 104, 104, 86, 87, 88, 51, 90, 104, 54, 104, 64, 104, 104, 97, 104, - 69, 70, 104, 72, 73, 74, 1, 104, 104, 46, 79, 104, 1, 82, 83, 52, 11, 86, 87, - 88, 104, 90, 11, 18, 64, 104, 104, 104, 97, 69, 70, 26, 72, 73, 74, 104, 76, 26, - 33, 79, 104, 36, 82, 83, 33, 104, 86, 87, 88, 64, 90, 12, 13, 48, 69, 70, 17, - 72, 73, 74, 12, 13, 104, 104, 79, 17, 104, 82, 83, 104, 104, 86, 87, 88, 26, 90, - 28, 104, 64, 104, 104, 33, 97, 69, 70, 104, 72, 73, 74, 50, 104, 104, 104, 79, - 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 14, 104, 104, 17, - 69, 70, 1, 72, 73, 74, 104, 104, 104, 104, 79, 104, 11, 82, 83, 104, 104, 86, - 87, 88, 64, 90, 104, 104, 104, 69, 70, 26, 72, 73, 74, 49, 104, 51, 33, 79, 54, - 104, 82, 83, 104, 5, 86, 87, 88, 104, 90, 104, 12, 13, 14, 104, 16, 104, 64, 19, - 20, 104, 104, 69, 70, 25, 72, 73, 74, 29, 104, 31, 32, 79, 104, 104, 82, 83, - 104, 104, 86, 87, 88, 104, 90, 104, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, - 74, 104, 58, 59, 104, 79, 104, 104, 82, 83, 104, 5, 86, 87, 88, 104, 90, 104, - 12, 13, 14, 104, 16, 104, 104, 19, 20, 104, 104, 104, 104, 25, 104, 104, 64, 29, - 104, 31, 32, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 12, 13, 82, 83, - 104, 17, 86, 87, 88, 104, 90, 64, 104, 104, 58, 59, 69, 70, 104, 72, 73, 74, - 104, 12, 13, 104, 79, 104, 17, 82, 83, 104, 104, 86, 87, 88, 104, 90, 50, 104, - 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, - 82, 83, 104, 50, 86, 87, 88, 104, 90, 64, 27, 104, 104, 104, 69, 70, 104, 72, - 73, 74, 104, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, - 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, - 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, - 104, 72, 73, 74, 104, 11, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, - 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39, 40, 79, - 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, - 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, - 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39, - 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, - 69, 70, 104, 72, 73, 74, 37, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, - 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, - 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 2, - 104, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, - 104, 86, 87, 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104, - 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, - 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, - 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, - 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, - 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 37, 38, 39, 40, 79, 104, 104, 82, - 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, - 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, - 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 11, 104, 104, 79, 104, - 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, - 72, 73, 74, 104, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, - 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, - 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, - 70, 104, 72, 73, 74, 104, 11, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, - 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39, 40, - 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, - 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, - 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 11, - 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 104, - 104, 104, 69, 70, 104, 72, 104, 74, 104, 38, 39, 40, 79, 104, 104, 104, 83, 104, - 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 104, 74, 104, - 104, 104, 104, 79, 104, 104, 2, 83, 1, 104, 86, 87, 88, 104, 90, 104, 12, 13, - 11, 15, 104, 17, 18, 61, 62, 63, 64, 65, 66, 104, 104, 69, 104, 26, 104, 1, 2, - 104, 104, 104, 33, 104, 104, 104, 104, 38, 39, 40, 1, 104, 46, 104, 48, 104, 50, - 104, 52, 104, 104, 104, 104, 104, 55, 56, 57, 2, 104, 104, 21, 104, 36, 104, 38, - 39, 40, 12, 13, 104, 104, 104, 17, 18, 48, 104, 104, 38, 39, 40, 104, 55, 56, - 57, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 55, 56, 57, 104, 104, 104, - 104, 46, 104, 48, 64, 50, 104, 52, 53, 69, 70, 104, 72, 104, 74, 104, 104, 104, - 104, 79, 104, 104, 104, 104, 104, 104, 86, 87, 88, 64, 90, 1, 71, 104, 69, 70, - 75, 72, 104, 74, 104, 104, 81, 104, 79, 84, 85, 104, 104, 104, 104, 86, 87, 88, - 24, 90, 26, 104, 104, 98, 104, 104, 104, 33, 104, 104, 64, 104, 38, 39, 40, 69, - 70, 104, 72, 104, 74, 104, 104, 104, 104, 79, 104, 104, 2, 55, 56, 57, 86, 87, - 88, 104, 90, 104, 12, 13, 64, 15, 104, 17, 18, 69, 70, 104, 72, 104, 74, 104, - 104, 104, 104, 79, 104, 104, 104, 104, 104, 104, 86, 87, 88, 64, 90, 1, 104, - 104, 69, 70, 46, 72, 48, 74, 50, 104, 52, 104, 79, 104, 104, 2, 104, 104, 2, 86, - 87, 88, 104, 90, 104, 12, 13, 104, 12, 13, 17, 18, 104, 17, 18, 1, 38, 39, 40, - 104, 104, 104, 12, 13, 104, 104, 104, 17, 18, 104, 104, 53, 104, 55, 56, 57, - 104, 104, 104, 46, 26, 48, 46, 50, 48, 52, 50, 33, 52, 104, 1, 11, 38, 39, 40, - 1, 46, 104, 48, 104, 50, 21, 52, 23, 104, 104, 26, 104, 104, 55, 56, 57, 104, - 33, 104, 35, 104, 37, 104, 104, 104, 104, 104, 104, 104, 104, 46, 38, 39, 40, - 104, 104, 38, 39, 40, 104, 104, 104, 104, 104, 104, 104, 104, 71, 55, 56, 57, - 75, 59, 55, 56, 57, 104, 81, 71, 104, 84, 85, 75, 71, 104, 104, 104, 75, 81, - 104, 104, 84, 85, 81, 98, 104, 84, 85, 71, 104, 104, 104, 75, 104, 104, 98, 104, - 104, 81, 71, 98, 84, 85, 75, 104, 104, 104, 104, 104, 81, 104, 104, 84, 85, 104, - 98, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 98,); - - const YY_SHIFT_USE_DFLT = - 13; - - const YY_SHIFT_MAX = 236; - - static public $yy_shift_ofst = array(542, 364, 82, 82, 82, 411, 364, 411, 35, - 12, - 12, 82, 82, 82, 82, 82, 82, - 176, 82, 82, 129, 82, 82, 82, 317, 82, 82, 82, 82, 82, 82, 270, 82, 82, 82, 82, - 176, 223, 223, 458, 458, 458, 458, 458, 1734, 1603, 1862, 1862, 1862, 1862, - 1862, 542, 749, 803, 1897, 1448, 1531, 1199, 1643, 1826, 1365, 950, 1282, 1033, - 1116, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 660, - 1902, 1089, 1089, 594, 666, 131, 202, 865, - 3, 703, 551, 551, 233, 202, 202, - 131, 131, 357, 97, 484, 144, 920, 505, 42, 768, 189, 232, 11, 232, 278, 324, - 428, 39, 372, 324, 39, 351, 384, 391, 294, 155, 114, 114, 114, 114, 417, 417, - 114, 114, 114, 114, - 13, 1786, 1659, 1600, 1844, 1841, 1858, 552, 897, 519, - 618, 24, 101, 39, 101, 24, 39, 24, 39, 130, 39, 39, 24, 39, 24, 24, 193, 24, - 39, 39, 39, 24, 39, 39, 39, 130, 39, 39, 39, 130, 39, 130, 39, 231, 39, 39, - 114, 114, 114, 526, 404, 417, 404, 114, 417, 390, 114, 417, - 13, - 13, - 13, - - 13, - 13, 1630, 1888, 576, 178, 694, 191, 69, 8, 100, 275, 212, 243, 297, - 265, 255, 150, 98, 165, 55, 123, 493, 479, 468, 456, 434, 482, 483, 473, 461, - 502, 489, 457, 452, 466, 422, 421, 449, 442, 444, 462, 432, 467, 440, 464, 446, - 390,); - - const YY_REDUCE_USE_DFLT = - 80; - - const YY_REDUCE_MAX = 190; - - static public $yy_reduce_ofst = array(1558, 451, 556, 640, 586, 506, 531, 615, 995, 939, 1078, 723, 1244, 968, 856, - 912, 1354, 1134, 1105, 1161, 1051, 1217, 1022, 1188, 1300, 1466, 1383, 1271, - 1327, 1437, 1410, 757, 698, 669, 885, 829, 785, 1493, 1520, 1761, 1706, 1669, - 1644, 1736, 1880, 1665, 1896, 1911, 1665, 1891, 1922, 40, - 29, 48, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 81, 119, 119, 119, 112, 2, - 60, 184, - 6, 264, 358, - - 65, 217, 213, 218, 197, 284, 269, 166, 363, - 13, 363, 295, 342, - 13, - 13, - 349, 281, 310, 295, 310, 323, 310, 316, 272, 236, 273, - 13, - 13, - 13, 320, - 374, - 13, - 13, 366, - 13, 338, 310, - 13, - 13, - 13, - 13, - 13, 465, 465, - 465, 465, 465, 465, 474, 450, 465, 465, 437, 469, 447, 453, 437, 447, 437, - 447, 463, 447, 447, 437, 447, 437, 437, 481, 437, 447, 447, 447, 437, 447, - 447, 447, 478, 447, 447, 447, 511, 447, 504, 447, 503, 447, 447, 241, 241, - 241, 530, 300, 29, 300, 241, 29, 361, 241, 29, - 79, - 77, 314, 340, 436,); - - static public $yyExpectedTokens = array(array(3, 4, 5, 6, 7, 8, 12, 13, 16, 19, 20, 25, 29, 31, 32,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 53, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 30, 31, 32, 34, 36, 39, 43, 44, - 45, 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 30, 31, 32, 34, 36, 39, 43, 44, - 45, 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 52, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 54, 58,), - array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, - 46, 47, 49, 51, 54, 58,), - array(1, 24, 26, 33, 38, 39, 40, 55, 56, 57,), - array(1, 11, 26, 33, 38, 39, 40, 55, 56, 57,), - array(1, 26, 33, 38, 39, 40, 55, 56, 57,), - array(1, 26, 33, 38, 39, 40, 55, 56, 57,), - array(1, 26, 33, 38, 39, 40, 55, 56, 57,), - array(1, 26, 33, 38, 39, 40, 55, 56, 57,), - array(1, 26, 33, 38, 39, 40, 55, 56, 57,), - array(3, 4, 5, 6, 7, 8, 12, 13, 16, 19, 20, 25, 29, 31, 32,), - array(14, 17, 49, 51, 54,), - array(5, 12, 13, 14, 16, 19, 20, 25, 29, 31, 32, 58, 59,), - array(1, 38, 39, 40, 55, 56, 57, 59,), - array(1, 11, 38, 39, 40, 55, 56, 57,), - array(1, 11, 38, 39, 40, 55, 56, 57,), array(1, 2, 38, 39, 40, 55, 56, 57,), - array(1, 21, 38, 39, 40, 55, 56, 57,), - array(1, 38, 39, 40, 53, 55, 56, 57,), - array(1, 11, 38, 39, 40, 55, 56, 57,), - array(1, 27, 38, 39, 40, 55, 56, 57,), - array(1, 37, 38, 39, 40, 55, 56, 57,), - array(1, 11, 38, 39, 40, 55, 56, 57,), - array(1, 37, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), - array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), - array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), - array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), - array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), - array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), - array(1, 11, 18, 26, 33, 36, 48,), array(1, 38, 39, 40, 55, 56, 57,), - array(38, 39, 40, 55, 56, 57,), array(38, 39, 40, 55, 56, 57,), - array(14, 17, 51, 54,), array(1, 11, 26, 33,), array(1, 26, 33,), - array(14, 36, 54,), - array(5, 12, 13, 14, 16, 19, 20, 25, 29, 31, 32, 58, 59,), - array(12, 13, 17, 26, 28, 33,), array(12, 13, 17, 26, 28, 33,), - array(12, 13, 17, 26, 33,), array(12, 13, 17, 26, 33,), array(18, 46, 52,), - array(14, 36, 54,), array(14, 36, 54,), array(1, 26, 33,), - array(1, 26, 33,), array(1, 2,), array(11, 22, 26, 33, 41,), - array(1, 11, 26, 27, 33,), array(11, 22, 26, 33, 41,), - array(12, 13, 17, 50,), array(13, 14, 17, 54,), array(1, 11, 26, 33,), - array(1, 11, 26, 33,), array(8, 9, 10,), array(12, 13, 17,), - array(15, 18, 48,), array(12, 13, 17,), array(15, 18, 48,), array(14, 17,), - array(18, 48,), array(26, 33,), array(1, 18,), array(14, 17,), - array(26, 33,), array(1, 28,), array(1, 53,), array(1, 11,), array(26, 33,), - array(14, 54,), array(1,), array(1,), array(1,), array(1,), array(18,), - array(18,), array(1,), array(1,), array(1,), array(1,), array(), - array(2, 12, 13, 15, 17, 18, 46, 48, 50, 52,), - array(2, 12, 13, 17, 18, 46, 48, 50, 52, 53,), - array(2, 12, 13, 15, 17, 18, 46, 48, 50, 52,), - array(2, 12, 13, 17, 18, 46, 48, 50, 52,), - array(2, 12, 13, 17, 18, 46, 48, 50, 52,), - array(12, 13, 17, 18, 46, 48, 50, 52,), array(13, 14, 17, 34, 54,), - array(12, 13, 17, 50,), array(12, 13, 17,), array(15, 46, 52,), - array(46, 52,), array(46, 52,), array(26, 33,), array(46, 52,), - array(46, 52,), array(26, 33,), array(46, 52,), array(26, 33,), - array(14, 54,), array(26, 33,), array(26, 33,), array(46, 52,), - array(26, 33,), array(46, 52,), array(46, 52,), array(13, 36,), - array(46, 52,), array(26, 33,), array(26, 33,), array(26, 33,), - array(46, 52,), array(26, 33,), array(26, 33,), array(26, 33,), - array(14, 54,), array(26, 33,), array(26, 33,), array(26, 33,), - array(14, 54,), array(26, 33,), array(14, 54,), array(26, 33,), - array(15, 22,), array(26, 33,), array(26, 33,), array(1,), array(1,), - array(1,), array(9,), array(2,), array(18,), array(2,), array(1,), - array(18,), array(36,), array(1,), array(18,), array(), array(), array(), - array(), array(), array(1, 2, 36, 38, 39, 40, 48, 55, 56, 57,), - array(11, 21, 23, 26, 33, 35, 37, 46,), array(11, 15, 26, 33, 36, 48,), - array(36, 46, 48, 53,), array(12, 13, 17, 50,), array(22, 41, 59,), - array(22, 41, 53,), array(28, 36, 48,), array(35, 37,), array(36, 48,), - array(21, 35,), array(35, 37,), array(15, 46,), array(35, 53,), - array(36, 48,), array(17, 50,), array(22, 41,), array(46, 53,), - array(35, 37,), array(36, 48,), array(5,), array(17,), array(23,), - array(37,), array(15,), array(17,), array(17,), array(53,), array(53,), - array(11,), array(17,), array(51,), array(34,), array(22,), array(51,), - array(46,), array(17,), array(17,), array(17,), array(17,), array(36,), - array(17,), array(42,), array(17,), array(34,), array(36,), 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(),); - - static public $yy_default = array(335, 510, 490, 490, 490, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, - 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, - 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 393, 525, 360, 393, - 357, 393, 369, 332, 525, 525, 525, 525, 525, 525, 525, 525, 525, 398, 525, 525, - 525, 513, 405, 395, 404, 489, 398, 374, 400, 511, 488, 414, 432, 512, 421, 420, - 525, 407, 393, 525, 525, 393, 393, 393, 393, 502, 525, 525, 393, 393, 383, 422, - 407, 422, 455, 525, 407, 407, 525, 455, 445, 455, 445, 525, 445, 393, 387, 525, - 371, 407, 407, 407, 393, 525, 417, 425, 389, 410, 499, 445, 423, 411, 407, 424, - 497, 444, 444, 444, 444, 444, 444, 525, 457, 455, 471, 449, 448, 366, 450, 451, - 379, 453, 378, 525, 368, 367, 452, 364, 483, 480, 455, 481, 358, 380, 362, 482, - 373, 356, 361, 525, 382, 370, 377, 525, 372, 525, 354, 525, 381, 376, 439, 413, - 384, 348, 492, 477, 491, 388, 503, 455, 390, 500, 455, 496, 496, 496, 455, 432, - 428, 432, 432, 456, 422, 422, 432, 525, 440, 525, 525, 428, 525, 432, 525, 422, - 428, 525, 525, 340, 525, 401, 525, 525, 525, 525, 435, 525, 525, 525, 525, 430, - 422, 525, 428, 525, 525, 525, 525, 501, 525, 434, 525, 525, 471, 412, 391, 402, - 418, 375, 352, 394, 435, 436, 460, 459, 471, 479, 437, 419, 442, 351, 443, 363, - 504, 342, 438, 341, 343, 416, 441, 339, 334, 333, 336, 337, 338, 344, 468, 349, - 347, 350, 476, 505, 469, 406, 415, 345, 346, 466, 506, 486, 385, 487, 495, 508, - 509, 478, 426, 429, 474, 475, 427, 386, 507, 524, 523, 520, 518, 517, 493, 514, - 494, 515, 516, 522, 473, 446, 447, 454, 470, 485, 519, 498, 458, 434, 461, 464, - 472, 467, 484, 521, 431, 433, 465, 463, 409, 462, 408, 392,); - - const YYNOCODE = 105; - - const YYSTACKDEPTH = 500; - - const YYNSTATE = 332; - - const YYNRULE = 193; - - const YYERRORSYMBOL = 60; - - const YYERRSYMDT = 'yy0'; - - const YYFALLBACK = 0; - - public static $yyFallback = array(); - - public function Trace($TraceFILE, $zTracePrompt) - { - if (!$TraceFILE) { - $zTracePrompt = 0; - } elseif (!$zTracePrompt) { - $TraceFILE = 0; - } - $this->yyTraceFILE = $TraceFILE; - $this->yyTracePrompt = $zTracePrompt; - } - - public function PrintTrace() - { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '<br>'; - } - - public $yyTraceFILE; - - public $yyTracePrompt; - - public $yyidx; /* Index of top element in stack */ - public $yyerrcnt; /* Shifts left before out of the error */ - public $yystack = array(); /* The parser's stack */ - - public $yyTokenName = array('$', 'VERT', 'COLON', 'PHP', 'NOCACHE', 'TEXT', 'STRIPON', 'STRIPOFF', 'LITERALSTART', - 'LITERALEND', 'LITERAL', 'RDEL', 'SIMPELOUTPUT', 'LDEL', 'DOLLARID', 'EQUAL', - 'SIMPLETAG', 'ID', 'PTR', 'LDELIF', 'LDELFOR', 'SEMICOLON', 'INCDEC', 'TO', 'STEP', - 'LDELFOREACH', 'SPACE', 'AS', 'APTR', 'LDELSETFILTER', 'SMARTYBLOCKCHILDPARENT', - 'CLOSETAG', 'LDELSLASH', 'ATTR', 'INTEGER', 'COMMA', 'OPENP', 'CLOSEP', 'MATH', - 'UNIMATH', 'ISIN', 'INSTANCEOF', 'QMARK', 'NOT', 'TYPECAST', 'HEX', 'DOT', - 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'NAMESPACE', 'AT', 'HATCH', 'OPENB', 'CLOSEB', - 'DOLLAR', 'LOGOP', 'TLOGOP', 'SINGLECOND', 'QUOTE', 'BACKTICK', 'error', 'start', - 'template', 'template_element', 'smartytag', 'literal', 'text_content', - 'literal_elements', 'literal_element', 'tag', 'variable', 'attributes', 'value', 'expr', - 'varindexed', 'modifierlist', 'statement', 'statements', 'foraction', 'varvar', - 'modparameters', 'attribute', 'ternary', 'array', 'lop', 'scond', 'ns1', 'function', - 'doublequoted_with_quotes', 'static_class_access', 'object', 'arrayindex', 'indexdef', - 'varvarele', 'objectchain', 'objectelement', 'method', 'params', 'modifier', - 'modparameter', 'arrayelements', 'arrayelement', 'doublequoted', - 'doublequotedcontent',); - - public static $yyRuleName = array('start ::= template', 'template ::= template_element', - 'template ::= template template_element', 'template ::=', - 'template_element ::= smartytag', 'template_element ::= literal', - 'template_element ::= PHP', 'template_element ::= NOCACHE', - 'template_element ::= text_content', 'text_content ::= TEXT', - 'text_content ::= text_content TEXT', 'template_element ::= STRIPON', - 'template_element ::= STRIPOFF', 'literal ::= LITERALSTART LITERALEND', - 'literal ::= LITERALSTART literal_elements LITERALEND', - 'literal_elements ::= literal_elements literal_element', 'literal_elements ::=', - 'literal_element ::= literal', 'literal_element ::= LITERAL', - 'smartytag ::= tag RDEL', 'smartytag ::= SIMPELOUTPUT', 'tag ::= LDEL variable', - 'tag ::= LDEL variable attributes', 'tag ::= LDEL value', - 'tag ::= LDEL value attributes', 'tag ::= LDEL expr', - 'tag ::= LDEL expr attributes', 'tag ::= LDEL DOLLARID EQUAL value', - 'tag ::= LDEL DOLLARID EQUAL expr', 'tag ::= LDEL DOLLARID EQUAL expr attributes', - 'tag ::= LDEL varindexed EQUAL expr attributes', 'smartytag ::= SIMPLETAG', - '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 ::= 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 attributes', - 'tag ::= LDELFOREACH SPACE value AS varvar attributes', - 'tag ::= LDELFOREACH SPACE value AS varvar APTR varvar attributes', - 'tag ::= LDELFOREACH SPACE expr AS varvar attributes', - 'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes', - 'tag ::= LDELSETFILTER ID modparameters', - 'tag ::= LDELSETFILTER ID modparameters modifierlist', - 'tag ::= LDEL SMARTYBLOCKCHILDPARENT', '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 ::= array', - 'expr ::= expr modifierlist', 'expr ::= expr lop expr', 'expr ::= expr scond', - 'expr ::= expr ISIN array', 'expr ::= expr ISIN value', - 'expr ::= variable INSTANCEOF ns1', 'expr ::= variable INSTANCEOF variable', - '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 ::= SINGLEQUOTESTRING', 'value ::= doublequoted_with_quotes', - 'value ::= varindexed DOUBLECOLON static_class_access', 'value ::= smartytag', - 'value ::= value modifierlist', 'value ::= NAMESPACE', - '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 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 ::= TLOGOP', 'scond ::= SINGLECOND', 'array ::= OPENB arrayelements CLOSEB', - '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 function tokenName($tokenType) - { - if ($tokenType === 0) { - return 'End of Input'; - } - if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) { - return $this->yyTokenName[ $tokenType ]; - } else { - return "Unknown"; - } - } - - public static function yy_destructor($yymajor, $yypminor) - { - switch ($yymajor) { - default: - break; /* If no destructor action specified: do nothing */ - } - } - - public function yy_pop_parser_stack() - { - if (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 ]; - } - } - - 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 214 "../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"); - } - } - - public static $yyRuleInfo = array(array(0 => 61, 1 => 1), array(0 => 62, 1 => 1), array(0 => 62, 1 => 2), - array(0 => 62, 1 => 0), array(0 => 63, 1 => 1), array(0 => 63, 1 => 1), - array(0 => 63, 1 => 1), array(0 => 63, 1 => 1), array(0 => 63, 1 => 1), - array(0 => 66, 1 => 1), array(0 => 66, 1 => 2), array(0 => 63, 1 => 1), - array(0 => 63, 1 => 1), array(0 => 65, 1 => 2), array(0 => 65, 1 => 3), - array(0 => 67, 1 => 2), array(0 => 67, 1 => 0), array(0 => 68, 1 => 1), - array(0 => 68, 1 => 1), array(0 => 64, 1 => 2), array(0 => 64, 1 => 1), - array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), array(0 => 69, 1 => 2), - array(0 => 69, 1 => 3), array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), - array(0 => 69, 1 => 4), array(0 => 69, 1 => 4), array(0 => 69, 1 => 5), - array(0 => 69, 1 => 5), array(0 => 64, 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 => 3), - array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), array(0 => 69, 1 => 8), - array(0 => 78, 1 => 2), array(0 => 78, 1 => 1), array(0 => 69, 1 => 5), - array(0 => 69, 1 => 7), array(0 => 69, 1 => 2), array(0 => 69, 1 => 6), - array(0 => 69, 1 => 8), array(0 => 69, 1 => 6), array(0 => 69, 1 => 8), - array(0 => 69, 1 => 3), array(0 => 69, 1 => 4), array(0 => 69, 1 => 2), - array(0 => 64, 1 => 1), array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), - array(0 => 69, 1 => 4), array(0 => 69, 1 => 5), array(0 => 71, 1 => 2), - array(0 => 71, 1 => 1), array(0 => 71, 1 => 0), array(0 => 81, 1 => 4), - array(0 => 81, 1 => 2), array(0 => 81, 1 => 2), array(0 => 81, 1 => 2), - array(0 => 81, 1 => 2), array(0 => 81, 1 => 2), array(0 => 81, 1 => 4), - array(0 => 77, 1 => 1), array(0 => 77, 1 => 3), array(0 => 76, 1 => 3), - array(0 => 76, 1 => 3), array(0 => 76, 1 => 3), array(0 => 76, 1 => 3), - array(0 => 73, 1 => 1), array(0 => 73, 1 => 1), array(0 => 73, 1 => 3), - array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), array(0 => 73, 1 => 1), - array(0 => 73, 1 => 2), array(0 => 73, 1 => 3), array(0 => 73, 1 => 2), - array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), - array(0 => 73, 1 => 3), array(0 => 82, 1 => 7), array(0 => 82, 1 => 7), - array(0 => 72, 1 => 1), array(0 => 72, 1 => 2), array(0 => 72, 1 => 2), - array(0 => 72, 1 => 2), array(0 => 72, 1 => 2), array(0 => 72, 1 => 1), - array(0 => 72, 1 => 1), array(0 => 72, 1 => 3), array(0 => 72, 1 => 2), - array(0 => 72, 1 => 2), array(0 => 72, 1 => 1), array(0 => 72, 1 => 1), - array(0 => 72, 1 => 3), array(0 => 72, 1 => 1), array(0 => 72, 1 => 1), - array(0 => 72, 1 => 3), array(0 => 72, 1 => 1), array(0 => 72, 1 => 2), - array(0 => 72, 1 => 1), array(0 => 72, 1 => 3), array(0 => 86, 1 => 1), - array(0 => 86, 1 => 1), array(0 => 70, 1 => 1), array(0 => 70, 1 => 1), - array(0 => 70, 1 => 3), array(0 => 70, 1 => 1), array(0 => 70, 1 => 3), - array(0 => 70, 1 => 4), array(0 => 70, 1 => 3), array(0 => 70, 1 => 4), - array(0 => 74, 1 => 2), array(0 => 74, 1 => 2), array(0 => 91, 1 => 2), - array(0 => 91, 1 => 0), array(0 => 92, 1 => 2), array(0 => 92, 1 => 2), - array(0 => 92, 1 => 4), array(0 => 92, 1 => 2), array(0 => 92, 1 => 2), - array(0 => 92, 1 => 4), array(0 => 92, 1 => 3), array(0 => 92, 1 => 5), - array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), - array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), - array(0 => 92, 1 => 2), array(0 => 79, 1 => 1), array(0 => 79, 1 => 1), - array(0 => 79, 1 => 2), array(0 => 93, 1 => 1), array(0 => 93, 1 => 1), - array(0 => 93, 1 => 3), array(0 => 90, 1 => 2), array(0 => 94, 1 => 1), - array(0 => 94, 1 => 2), array(0 => 95, 1 => 3), array(0 => 95, 1 => 3), - array(0 => 95, 1 => 5), array(0 => 95, 1 => 6), array(0 => 95, 1 => 2), - array(0 => 87, 1 => 4), array(0 => 96, 1 => 4), array(0 => 96, 1 => 4), - array(0 => 97, 1 => 3), array(0 => 97, 1 => 1), array(0 => 97, 1 => 0), - array(0 => 75, 1 => 3), array(0 => 75, 1 => 2), array(0 => 98, 1 => 3), - array(0 => 98, 1 => 2), array(0 => 80, 1 => 2), array(0 => 80, 1 => 0), - array(0 => 99, 1 => 2), array(0 => 99, 1 => 2), array(0 => 89, 1 => 1), - array(0 => 89, 1 => 2), array(0 => 89, 1 => 1), array(0 => 89, 1 => 2), - array(0 => 89, 1 => 3), array(0 => 84, 1 => 1), array(0 => 84, 1 => 1), - array(0 => 85, 1 => 1), array(0 => 83, 1 => 3), array(0 => 100, 1 => 1), - array(0 => 100, 1 => 3), array(0 => 100, 1 => 0), array(0 => 101, 1 => 3), - array(0 => 101, 1 => 3), array(0 => 101, 1 => 1), array(0 => 88, 1 => 2), - array(0 => 88, 1 => 3), array(0 => 102, 1 => 2), array(0 => 102, 1 => 1), - array(0 => 103, 1 => 3), array(0 => 103, 1 => 3), array(0 => 103, 1 => 1), - array(0 => 103, 1 => 3), array(0 => 103, 1 => 3), array(0 => 103, 1 => 1), - array(0 => 103, 1 => 1),); - - public static $yyReduceMap = array(0 => 0, 1 => 1, 2 => 2, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, - 17 => 9, 18 => 9, 43 => 9, 66 => 9, 67 => 9, 75 => 9, 76 => 9, 80 => 9, 90 => 9, - 95 => 9, 96 => 9, 101 => 9, 103 => 9, 104 => 9, 108 => 9, 110 => 9, 115 => 9, - 176 => 9, 181 => 9, 10 => 10, 11 => 11, 12 => 12, 13 => 13, 16 => 13, 14 => 14, - 74 => 14, 15 => 15, 91 => 15, 93 => 15, 94 => 15, 122 => 15, 19 => 19, 20 => 20, - 21 => 21, 23 => 21, 25 => 21, 22 => 22, 24 => 22, 26 => 22, 27 => 27, 28 => 27, - 29 => 29, 30 => 30, 31 => 31, 32 => 32, 33 => 33, 34 => 34, 35 => 35, 36 => 36, - 37 => 37, 38 => 38, 40 => 38, 39 => 39, 41 => 41, 42 => 42, 44 => 44, 45 => 45, - 46 => 46, 47 => 47, 49 => 47, 48 => 48, 50 => 48, 51 => 51, 52 => 52, 53 => 53, - 54 => 54, 55 => 55, 56 => 56, 57 => 57, 58 => 58, 59 => 59, 60 => 60, 69 => 60, - 157 => 60, 161 => 60, 165 => 60, 166 => 60, 61 => 61, 158 => 61, 164 => 61, - 62 => 62, 63 => 63, 64 => 63, 65 => 65, 142 => 65, 68 => 68, 70 => 70, 71 => 71, - 72 => 71, 73 => 73, 77 => 77, 78 => 78, 79 => 78, 81 => 81, 107 => 81, 82 => 82, - 83 => 83, 84 => 84, 85 => 85, 86 => 86, 87 => 86, 88 => 88, 89 => 89, 92 => 92, - 97 => 97, 98 => 98, 99 => 99, 100 => 100, 102 => 102, 105 => 105, 106 => 106, - 109 => 109, 111 => 111, 112 => 112, 113 => 113, 114 => 114, 116 => 116, - 117 => 117, 118 => 118, 119 => 119, 120 => 120, 121 => 121, 123 => 123, - 178 => 123, 124 => 124, 125 => 125, 126 => 126, 127 => 127, 128 => 128, - 129 => 129, 137 => 129, 130 => 130, 131 => 131, 132 => 132, 133 => 132, - 135 => 132, 136 => 132, 134 => 134, 138 => 138, 139 => 139, 140 => 140, - 182 => 140, 141 => 141, 143 => 143, 144 => 144, 145 => 145, 146 => 146, - 147 => 147, 148 => 148, 149 => 149, 150 => 150, 151 => 151, 152 => 152, - 153 => 153, 154 => 154, 155 => 155, 156 => 156, 159 => 159, 160 => 160, - 162 => 162, 163 => 163, 167 => 167, 168 => 168, 169 => 169, 170 => 170, - 171 => 171, 172 => 172, 173 => 173, 174 => 174, 175 => 175, 177 => 177, - 179 => 179, 180 => 180, 183 => 183, 184 => 184, 185 => 185, 186 => 186, - 187 => 186, 189 => 186, 188 => 188, 190 => 190, 191 => 191, 192 => 192,); - - #line 225 "../smarty/lexer/smarty_internal_templateparser.y" - 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 235 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r1() - { - if ($this->yystack[ $this->yyidx + 0 ]->minor != null) { - $this->current_buffer->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor); - } - } - - #line 242 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r2() - { - if ($this->yystack[ $this->yyidx + 0 ]->minor != null) { - // because of possible code injection - $this->current_buffer->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor); - } - } - - #line 256 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r4() - { - if ($this->compiler->has_code) { - $this->_retvalue = $this->mergePrefixCode($this->yystack[ $this->yyidx + 0 ]->minor); - } else { - $this->_retvalue = null; - } - $this->compiler->has_variable_string = false; - $this->block_nesting_level = count($this->compiler->_tag_stack); - } - - #line 267 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r5() - { - $this->_retvalue = new Smarty_Internal_ParseTree_Text($this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 271 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r6() - { - $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->_retvalue = - new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp . $code, true)); - } else { - $this->_retvalue = null; - } - } - - #line 282 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r7() - { - $this->compiler->tag_nocache = true; - $save = $this->template->compiled->has_nocache_code; - $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, - $this->compiler->processNocacheCode("<?php echo '{$this->yystack[$this->yyidx + 0]->minor}';?>\n", - $this->compiler, - true)); - $this->template->compiled->has_nocache_code = $save; - } - - #line 289 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r8() - { - $this->_retvalue = $this->compiler->processText($this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 293 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r9() - { - $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 297 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r10() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 302 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r11() - { - $this->strip = true; - } - - #line 306 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r12() - { - $this->strip = false; - } - - #line 311 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r13() - { - $this->_retvalue = ''; - } - - #line 315 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r14() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; - } - - #line 319 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r15() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 335 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r19() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; - } - - #line 341 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r20() - { - $var = - trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length), - ' $'); - 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 351 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r21() - { - $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), - array('value' => $this->yystack[ $this->yyidx + 0 ]->minor)); - } - - #line 355 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r22() - { - $this->_retvalue = - $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor, - array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor)); - } - - #line 378 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r27() - { - $this->_retvalue = $this->compiler->compileTag('assign', array(array('value' => $this->yystack[ $this->yyidx + - 0 ]->minor), array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '\''))); - } - - #line 386 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r29() - { - $this->_retvalue = $this->compiler->compileTag('assign', - array_merge(array(array('value' => $this->yystack[ $this->yyidx + - - 1 ]->minor), array('var' => '\'' . - substr($this->yystack[ $this->yyidx + - 3 ]->minor, 1) . - '\'')), $this->yystack[ $this->yyidx + 0 ]->minor)); - } - - #line 390 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r30() - { - $this->_retvalue = $this->compiler->compileTag('assign', - array_merge(array(array('value' => $this->yystack[ $this->yyidx + - - 1 ]->minor), array('var' => $this->yystack[ $this->yyidx + - - 3 ]->minor[ 'var' ])), - $this->yystack[ $this->yyidx + 0 ]->minor), - array('smarty_internal_index' => $this->yystack[ $this->yyidx + - - 3 ]->minor[ 'smarty_internal_index' ])); - } - - #line 395 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r31() - { - $tag = - trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length)); - 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 417 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r32() - { - 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 427 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r33() - { - 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 440 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r34() - { - 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 = '<?php ob_start();?>' . - $this->compiler->compileTag($this->yystack[ $this->yyidx + - 2 ]->minor, - $this->yystack[ $this->yyidx + 0 ]->minor) . '<?php echo '; - $this->_retvalue .= $this->compiler->compileTag('private_modifier', array(), - array('modifierlist' => $this->yystack[ $this->yyidx + - - 1 ]->minor, 'value' => 'ob_get_clean()')) . ';?>'; - } - } - - #line 453 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r35() - { - $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 458 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r36() - { - $this->_retvalue = '<?php ob_start();?>' . - $this->compiler->compileTag($this->yystack[ $this->yyidx + - 4 ]->minor, - $this->yystack[ $this->yyidx + 0 ]->minor, - array('object_method' => $this->yystack[ $this->yyidx + - 2 ]->minor)) . - '<?php echo '; - $this->_retvalue .= $this->compiler->compileTag('private_modifier', array(), - array('modifierlist' => $this->yystack[ $this->yyidx + - - 1 ]->minor, 'value' => 'ob_get_clean()')) . ';?>'; - } - - #line 464 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r37() - { - $tag = trim(substr($this->yystack[ $this->yyidx + - 1 ]->minor, $this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), - array('if condition' => $this->yystack[ $this->yyidx + - 0 ]->minor)); - } - - #line 469 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r38() - { - $tag = trim(substr($this->yystack[ $this->yyidx + - 2 ]->minor, $this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, - $this->yystack[ $this->yyidx + 0 ]->minor, - array('if condition' => $this->yystack[ $this->yyidx + - - 1 ]->minor)); - } - - #line 474 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r39() - { - $tag = trim(substr($this->yystack[ $this->yyidx + - 1 ]->minor, $this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), - array('if condition' => $this->yystack[ $this->yyidx + - 0 ]->minor)); - } - - #line 485 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r41() - { - $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 489 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r42() - { - $this->_retvalue = '=' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 497 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r44() - { - $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 501 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r45() - { - $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 506 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r46() - { - $this->_retvalue = $this->compiler->compileTag('foreach', $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 511 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r47() - { - $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 515 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r48() - { - $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 528 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r51() - { - $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 532 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r52() - { - $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 537 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r53() - { - $j = strrpos($this->yystack[ $this->yyidx + 0 ]->minor, '.'); - if ($this->yystack[ $this->yyidx + 0 ]->minor[ $j + 1 ] == 'c') { - // {$smarty.block.child} - $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler); - } else { - // {$smarty.block.parent} - $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileParentBlock($this->compiler); - } - } - - #line 550 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r54() - { - $tag = - trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length), - ' /'); - if ($tag == 'strip') { - $this->strip = false; - $this->_retvalue = null; - } else { - $this->_retvalue = $this->compiler->compileTag($tag . 'close', array()); - } - } - - #line 559 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r55() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + 0 ]->minor . 'close', array()); - } - - #line 563 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r56() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 1 ]->minor . 'close', array(), - array('modifier_list' => $this->yystack[ $this->yyidx + - 0 ]->minor)); - } - - #line 568 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r57() - { - $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 2 ]->minor . 'close', array(), - array('object_method' => $this->yystack[ $this->yyidx + - 0 ]->minor)); - } - - #line 572 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r58() - { - $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 580 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r59() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; - $this->_retvalue[] = $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 586 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r60() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 591 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r61() - { - $this->_retvalue = array(); - } - - #line 596 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r62() - { - 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 607 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r63() - { - $this->_retvalue = - array(trim($this->yystack[ $this->yyidx + - 1 ]->minor, " =\n\r\t") => $this->yystack[ $this->yyidx + - 0 ]->minor); - } - - #line 615 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r65() - { - $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\''; - } - - #line 627 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r68() - { - $this->_retvalue = - array($this->yystack[ $this->yyidx + - 2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 640 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r70() - { - $this->yystack[ $this->yyidx + - 2 ]->minor[] = $this->yystack[ $this->yyidx + 0 ]->minor; - $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor; - } - - #line 645 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r71() - { - $this->_retvalue = array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '\'', - 'value' => $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 652 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r73() - { - $this->_retvalue = array('var' => $this->yystack[ $this->yyidx + - 2 ]->minor, - 'value' => $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 676 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r77() - { - $this->_retvalue = - '$_smarty_tpl->getStreamVariable(\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '://' . - $this->yystack[ $this->yyidx + 0 ]->minor . '\')'; - } - - #line 681 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r78() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + - 2 ]->minor . trim($this->yystack[ $this->yyidx + - 1 ]->minor) . - $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 695 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r81() - { - $this->_retvalue = $this->compiler->compileTag('private_modifier', array(), - array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor, - 'modifierlist' => $this->yystack[ $this->yyidx + - 0 ]->minor)); - } - - #line 701 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r82() - { - $this->_retvalue = (isset($this->yystack[ $this->yyidx + - 1 ]->minor[ 'pre' ]) ? - $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 . - (isset($this->yystack[ $this->yyidx + - 1 ]->minor[ 'pre' ]) ? ')' : ''); - } - - #line 704 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r83() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + 0 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'; - } - - #line 708 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r84() - { - $this->_retvalue = 'in_array(' . $this->yystack[ $this->yyidx + - 2 ]->minor . ',' . - $this->yystack[ $this->yyidx + 0 ]->minor . ')'; - } - - #line 712 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r85() - { - $this->_retvalue = 'in_array(' . $this->yystack[ $this->yyidx + - 2 ]->minor . ',(array)' . - $this->yystack[ $this->yyidx + 0 ]->minor . ')'; - } - - #line 716 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r86() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor . - $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 728 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r88() - { - $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 732 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r89() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + - 5 ]->minor . ' ? ' . $this->yystack[ $this->yyidx + - 2 ]->minor . ' : ' . - $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 747 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r92() - { - $this->_retvalue = '!' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 768 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r97() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + - 2 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 772 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r98() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . '.'; - } - - #line 776 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r99() - { - $this->_retvalue = '.' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 781 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r100() - { - 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 798 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r102() - { - $this->_retvalue = "(" . $this->yystack[ $this->yyidx + - 1 ]->minor . ")"; - } - - #line 813 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r105() - { - self::$prefix_number ++; - if ($this->yystack[ $this->yyidx + - 2 ]->minor[ 'var' ] == '\'smarty\'') { - $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . ' = ' . - $this->compiler->compileTag('private_special_variable', array(), - $this->yystack[ $this->yyidx + - 2 ]->minor[ 'smarty_internal_index' ]) . - ';?>'; - } else { - $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . ' = ' . - $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 2 ]->minor[ 'var' ]) . - $this->yystack[ $this->yyidx + - 2 ]->minor[ 'smarty_internal_index' ] . ';?>'; - } - $this->_retvalue = '$_tmp' . self::$prefix_number . '::' . $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] . - $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ]; - } - - #line 824 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r106() - { - self::$prefix_number ++; - $tmp = $this->compiler->appendCode('<?php ob_start();?>', $this->yystack[ $this->yyidx + 0 ]->minor); - $this->compiler->prefix_code[] = - $this->compiler->appendCode($tmp, '<?php $_tmp' . self::$prefix_number . '=ob_get_clean();?>'); - $this->_retvalue = '$_tmp' . self::$prefix_number; - } - - #line 841 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r109() - { - 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 860 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r111() - { - $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 871 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r112() - { - $this->_retvalue = - $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\''); - } - - #line 874 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r113() - { - 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 887 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r114() - { - $this->_retvalue = '$_smarty_tpl->tpl_vars[' . $this->yystack[ $this->yyidx + - 2 ]->minor . ']->' . - $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 897 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r116() - { - $this->_retvalue = - $this->compiler->compileConfigVariable("'" . $this->yystack[ $this->yyidx + - 1 ]->minor . "'"); - } - - #line 901 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r117() - { - $this->_retvalue = '(is_array($tmp = ' . - $this->compiler->compileConfigVariable("'" . $this->yystack[ $this->yyidx + - 2 ]->minor . "'") . - ') ? $tmp' . $this->yystack[ $this->yyidx + 0 ]->minor . ' :null)'; - } - - #line 905 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r118() - { - $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + - 1 ]->minor); - } - - #line 909 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r119() - { - $this->_retvalue = - '(is_array($tmp = ' . $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + - 2 ]->minor) . - ') ? $tmp' . $this->yystack[ $this->yyidx + 0 ]->minor . ' : null)'; - } - - #line 913 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r120() - { - $this->_retvalue = array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 1 ]->minor, 1) . '\'', - 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 916 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r121() - { - $this->_retvalue = array('var' => $this->yystack[ $this->yyidx + - 1 ]->minor, - 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 929 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r123() - { - return; - } - - #line 935 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r124() - { - $this->_retvalue = - '[' . $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'') . - ']'; - } - - #line 938 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r125() - { - $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + 0 ]->minor) . ']'; - } - - #line 942 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r126() - { - $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 2 ]->minor) . '->' . - $this->yystack[ $this->yyidx + 0 ]->minor . ']'; - } - - #line 946 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r127() - { - 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 957 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r128() - { - $this->_retvalue = '[' . $this->yystack[ $this->yyidx + 0 ]->minor . ']'; - } - - #line 962 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r129() - { - $this->_retvalue = '[' . $this->yystack[ $this->yyidx + - 1 ]->minor . ']'; - } - - #line 967 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r130() - { - $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . - $this->yystack[ $this->yyidx + - - 1 ]->minor . - '\'][\'index\']') . ']'; - } - - #line 971 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r131() - { - $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . - $this->yystack[ $this->yyidx + - - 3 ]->minor . '\'][\'' . - $this->yystack[ $this->yyidx + - - 1 ]->minor . '\']') . ']'; - } - - #line 974 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r132() - { - $this->_retvalue = '[' . $this->yystack[ $this->yyidx + - 1 ]->minor . ']'; - } - - #line 980 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r134() - { - $this->_retvalue = '[' . - $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + - 1 ]->minor, 1) . '\'') . - ']';; - } - - #line 996 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r138() - { - $this->_retvalue = '[]'; - } - - #line 1006 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r139() - { - $this->_retvalue = '\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\''; - } - - #line 1010 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r140() - { - $this->_retvalue = "''"; - } - - #line 1015 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r141() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + - 1 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1023 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r143() - { - $var = - trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length), - ' $'); - $this->_retvalue = $this->compiler->compileVariable('\'' . $var . '\''); - } - - #line 1029 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r144() - { - $this->_retvalue = '(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'; - } - - #line 1036 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r145() - { - 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 1045 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r146() - { - $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1050 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r147() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1055 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r148() - { - 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 1062 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r149() - { - 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 1069 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r150() - { - 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 1076 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r151() - { - 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 1084 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r152() - { - $this->_retvalue = '->' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1092 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r153() - { - if (!$this->security || - $this->security->isTrustedPhpFunction($this->yystack[ $this->yyidx + - 3 ]->minor, $this->compiler) - ) { - if (strcasecmp($this->yystack[ $this->yyidx + - 3 ]->minor, 'isset') === 0 || - strcasecmp($this->yystack[ $this->yyidx + - 3 ]->minor, 'empty') === 0 || - strcasecmp($this->yystack[ $this->yyidx + - 3 ]->minor, 'array') === 0 || - is_callable($this->yystack[ $this->yyidx + - 3 ]->minor) - ) { - $func_name = strtolower($this->yystack[ $this->yyidx + - 3 ]->minor); - if ($func_name == 'isset') { - if (count($this->yystack[ $this->yyidx + - 1 ]->minor) == 0) { - $this->compiler->trigger_template_error('Illegal number of paramer in "isset()"'); - } - $par = implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor); - if (strncasecmp($par, '$_smarty_tpl->smarty->ext->_config->_getConfigVariable', - strlen('$_smarty_tpl->smarty->ext->_config->_getConfigVariable')) === 0 - ) { - self::$prefix_number ++; - $this->compiler->prefix_code[] = - '<?php $_tmp' . self::$prefix_number . '=' . str_replace(')', ', false)', $par) . ';?>'; - $isset_par = '$_tmp' . self::$prefix_number; - } else { - $isset_par = str_replace("')->value", "',null,true,false)->value", $par); - } - $this->_retvalue = $this->yystack[ $this->yyidx + - 3 ]->minor . "(" . $isset_par . ")"; - } elseif (in_array($func_name, array('empty', 'reset', 'current', 'end', 'prev', 'next'))) { - if (count($this->yystack[ $this->yyidx + - 1 ]->minor) != 1) { - $this->compiler->trigger_template_error('Illegal number of paramer in "empty()"'); - } - if ($func_name == 'empty') { - $this->_retvalue = $func_name . '(' . str_replace("')->value", "',null,true,false)->value", - $this->yystack[ $this->yyidx + - - 1 ]->minor[ 0 ]) . ')'; - } else { - $this->_retvalue = $func_name . '(' . $this->yystack[ $this->yyidx + - 1 ]->minor[ 0 ] . ')'; - } - } else { - $this->_retvalue = $this->yystack[ $this->yyidx + - 3 ]->minor . "(" . - implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor) . ")"; - } - } else { - $this->compiler->trigger_template_error("unknown function \"" . - $this->yystack[ $this->yyidx + - 3 ]->minor . "\""); - } - } - } - - #line 1131 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r154() - { - 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 1138 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r155() - { - if ($this->security) { - $this->compiler->trigger_template_error(self::Err2); - } - self::$prefix_number ++; - $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . '=' . - $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + - 3 ]->minor, 1) . '\'') . - ';?>'; - $this->_retvalue = - '$_tmp' . self::$prefix_number . '(' . implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor) . ')'; - } - - #line 1149 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r156() - { - $this->_retvalue = - array_merge($this->yystack[ $this->yyidx + - 2 ]->minor, array($this->yystack[ $this->yyidx + 0 ]->minor)); - } - - #line 1166 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r159() - { - $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 1170 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r160() - { - $this->_retvalue = - array(array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor)); - } - - #line 1178 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r162() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 1186 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r163() - { - $this->_retvalue = - array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 1205 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r167() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, '', 'method'); - } - - #line 1210 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r168() - { - $this->_retvalue = - array($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'method'); - } - - #line 1215 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r169() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, ''); - } - - #line 1220 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r170() - { - $this->_retvalue = - array($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'property'); - } - - #line 1225 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r171() - { - $this->_retvalue = array($this->yystack[ $this->yyidx + - 2 ]->minor, - $this->yystack[ $this->yyidx + - 1 ]->minor . - $this->yystack[ $this->yyidx + 0 ]->minor, 'property'); - } - - #line 1231 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r172() - { - $this->_retvalue[ 'op' ] = ' ' . trim($this->yystack[ $this->yyidx + 0 ]->minor) . ' '; - } - - #line 1235 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r173() - { - static $lops = array('eq' => array('op' => ' == ', 'pre' => null), - 'ne' => array('op' => ' != ', 'pre' => null), - 'neq' => array('op' => ' != ', 'pre' => null), - 'gt' => array('op' => ' > ', 'pre' => null), - 'ge' => array('op' => ' >= ', 'pre' => null), - 'gte' => array('op' => ' >= ', 'pre' => null), - 'lt' => array('op' => ' < ', 'pre' => null), - 'le' => array('op' => ' <= ', 'pre' => null), - 'lte' => array('op' => ' <= ', 'pre' => null), - 'mod' => array('op' => ' % ', 'pre' => null), - 'and' => array('op' => ' && ', 'pre' => null), - 'or' => array('op' => ' || ', 'pre' => null), - 'xor' => array('op' => ' xor ', 'pre' => null), - '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 = $lops[ $op ]; - } - - #line 1261 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r174() - { - 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 1275 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r175() - { - $this->_retvalue = 'array(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'; - } - - #line 1283 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r177() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + - 2 ]->minor . ',' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1291 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r179() - { - $this->_retvalue = - $this->yystack[ $this->yyidx + - 2 ]->minor . '=>' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1295 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r180() - { - $this->_retvalue = - '\'' . $this->yystack[ $this->yyidx + - 2 ]->minor . '\'=>' . $this->yystack[ $this->yyidx + 0 ]->minor; - } - - #line 1311 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r183() - { - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor->to_smarty_php($this); - } - - #line 1316 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r184() - { - $this->yystack[ $this->yyidx + - 1 ]->minor->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor); - $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; - } - - #line 1321 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r185() - { - $this->_retvalue = new Smarty_Internal_ParseTree_Dq($this, $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 1325 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r186() - { - $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)' . $this->yystack[ $this->yyidx + - 1 ]->minor); - } - - #line 1333 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r188() - { - $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\'' . - substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . - '\']->value'); - } - - #line 1341 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r190() - { - $this->_retvalue = - new Smarty_Internal_ParseTree_Code('(string)(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'); - } - - #line 1345 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r191() - { - $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->yystack[ $this->yyidx + 0 ]->minor); - } - - #line 1349 "../smarty/lexer/smarty_internal_templateparser.y" - function yy_r192() - { - $this->_retvalue = new Smarty_Internal_ParseTree_DqContent($this->yystack[ $this->yyidx + 0 ]->minor); - } - - private $_retvalue; - - 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 207 "../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 200 "../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/library/Smarty/libs/sysplugins/smarty_internal_testinstall.php b/library/Smarty/libs/sysplugins/smarty_internal_testinstall.php deleted file mode 100644 index 72d9a5211..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_testinstall.php +++ /dev/null @@ -1,604 +0,0 @@ -<?php -/** - * Smarty Internal TestInstall - * Test Smarty installation - * - * @package Smarty - * @subpackage Utilities - * @author Uwe Tews - */ - -/** - * TestInstall class - * - * @package Smarty - * @subpackage Utilities - */ -class Smarty_Internal_TestInstall -{ - /** - * diagnose Smarty setup - * If $errors is secified, the diagnostic report will be appended to the array, rather than being output. - * - * @param array $errors array to push results into rather than outputting them - * - * @return bool status, true if everything is fine, false else - */ - public static function testInstall(Smarty $smarty, &$errors = null) - { - $status = true; - - if ($errors === null) { - echo "<PRE>\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_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_break.php' => true, - 'smarty_internal_compile_call.php' => true, - 'smarty_internal_compile_capture.php' => true, - 'smarty_internal_compile_config_load.php' => true, - 'smarty_internal_compile_continue.php' => true, - 'smarty_internal_compile_debug.php' => true, - 'smarty_internal_compile_eval.php' => true, - 'smarty_internal_compile_extends.php' => true, - 'smarty_internal_compile_for.php' => true, - 'smarty_internal_compile_foreach.php' => true, - 'smarty_internal_compile_function.php' => true, - 'smarty_internal_compile_if.php' => true, - 'smarty_internal_compile_include.php' => true, - 'smarty_internal_compile_include_php.php' => true, - 'smarty_internal_compile_insert.php' => true, - 'smarty_internal_compile_ldelim.php' => true, - 'smarty_internal_compile_nocache.php' => true, - 'smarty_internal_compile_private_block_plugin.php' => true, - 'smarty_internal_compile_private_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_extension_clear.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_getconfigvars.php' => true, - 'smarty_internal_method_getdebugtemplate.php' => true, - 'smarty_internal_method_getdefaultmodifiers.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_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_codeframe.php' => true, - 'smarty_internal_runtime_filterhandler.php' => true, - 'smarty_internal_runtime_foreach.php' => true, - 'smarty_internal_runtime_getincludepath.php' => true, - 'smarty_internal_runtime_hhvm.php' => true, - 'smarty_internal_runtime_inheritance.php' => true, - 'smarty_internal_runtime_subtemplate.php' => true, - 'smarty_internal_runtime_tplfunction.php' => true, - 'smarty_internal_runtime_updatecache.php' => true, - 'smarty_internal_runtime_updatescope.php' => true, - 'smarty_internal_runtime_validatecompiled.php' => true, - 'smarty_internal_runtime_var.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.regex_replace.php' => true, - 'modifier.replace.php' => true, 'modifier.spacify.php' => true, - 'modifier.truncate.php' => true, 'modifiercompiler.cat.php' => true, - 'modifiercompiler.count_characters.php' => true, 'modifiercompiler.count_paragraphs.php' => true, - 'modifiercompiler.count_sentences.php' => true, 'modifiercompiler.count_words.php' => true, - 'modifiercompiler.default.php' => true, 'modifiercompiler.escape.php' => true, - 'modifiercompiler.from_charset.php' => true, 'modifiercompiler.indent.php' => true, - 'modifiercompiler.lower.php' => true, 'modifiercompiler.noprint.php' => true, - 'modifiercompiler.string_format.php' => true, 'modifiercompiler.strip.php' => true, - 'modifiercompiler.strip_tags.php' => true, 'modifiercompiler.to_charset.php' => true, - 'modifiercompiler.unescape.php' => true, 'modifiercompiler.upper.php' => true, - 'modifiercompiler.wordwrap.php' => true, 'outputfilter.trimwhitespace.php' => true, - 'shared.escape_special_chars.php' => true, 'shared.literal_compiler_param.php' => true, - 'shared.make_timestamp.php' => true, 'shared.mb_str_replace.php' => true, - 'shared.mb_unicode.php' => true, 'shared.mb_wordwrap.php' => true, - 'variablefilter.htmlspecialchars.php' => true,); - $iterator = new DirectoryIterator($source); - foreach ($iterator as $file) { - if (!$file->isDot()) { - $filename = $file->getFilename(); - if (isset($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 "</PRE>\n"; - } - - return $status; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_internal_undefined.php b/library/Smarty/libs/sysplugins/smarty_internal_undefined.php deleted file mode 100644 index 93fca8ec1..000000000 --- a/library/Smarty/libs/sysplugins/smarty_internal_undefined.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php - -/** - * Smarty Method AppendByRef - * - * Smarty::appendByRef() method - * - * @package Smarty - * @subpackage PluginsInternal - * @author Uwe Tews - */ -class Smarty_Internal_Undefined -{ - - /** - * This function is executed automatically when a compiled or cached template file is included - * - Decode saved properties from compiled template and cache files - * - Check if compiled or cache file is valid - * - * @param array $properties special template properties - * @param bool $cache flag if called from cache file - * - * @return bool flag if compiled or cache file is valid - */ - public function decodeProperties($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) - { - throw new SmartyException(get_class($args[0]) . "->{$name}() undefined method"); - } -}
\ No newline at end of file diff --git a/library/Smarty/libs/sysplugins/smarty_resource.php b/library/Smarty/libs/sysplugins/smarty_resource.php deleted file mode 100644 index 93d9fa7a3..000000000 --- a/library/Smarty/libs/sysplugins/smarty_resource.php +++ /dev/null @@ -1,270 +0,0 @@ -<?php -/** - * Smarty Resource Plugin - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - */ - -/** - * Smarty Resource Plugin - * Base implementation for resource plugins - * - * @package Smarty - * @subpackage TemplateResources - */ -abstract class Smarty_Resource -{ - /** - * Source is bypassing compiler - * - * @var boolean - */ - public $uncompiled = false; - - /** - * Source must be recompiled on every occasion - * - * @var boolean - */ - public $recompiled = false; - - /** - * resource types provided by the core - * - * @var array - */ - public static $sysplugins = array('file' => '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'); - - /** - * Flag if resource does implement populateCompiledFilepath() method - * - * @var bool - */ - public $hasCompiledHandler = false; - - /** - * Name of the Class to compile this resource's contents with - * - * @var string - */ - public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler'; - - /** - * Name of the Class to tokenize this resource's contents with - * - * @var string - */ - public $template_lexer_class = 'Smarty_Internal_Templatelexer'; - - /** - * Name of the Class to parse this resource's contents with - * - * @var string - */ - public $template_parser_class = 'Smarty_Internal_Templateparser'; - - /** - * Load template's source into current template object - * - * @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; - } - } - - /** - * 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 null; - } - - /** - * Load Resource Handler - * - * @param Smarty $smarty smarty object - * @param string $type name of the resource - * - * @throws SmartyException - * @return Smarty_Resource Resource Handler - */ - public static function load(Smarty $smarty, $type) - { - // try smarty's cache - if (isset($smarty->_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 - */ - public static function getUniqueTemplateName($obj, $template_resource) - { - $smarty = $obj->_objType == 2 ? $obj->smarty : $obj; - 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->_objType == 2 && $_file_is_dotted && - ($obj->source->type == 'file' || $obj->parent->source->type == 'extends') - ) { - $name = dirname($obj->source->filepath) . DS . $name; - } - return $resource->buildUniqueResourceName($smarty, $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 - */ - public function checkTimestamps() { - return true; - } - - /** - * 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 - */ - public static function source(Smarty_Internal_Template $_template = null, Smarty $smarty = null, - $template_resource = null) - { - return Smarty_Template_Source::load($_template, $smarty, $template_resource); - } -} - diff --git a/library/Smarty/libs/sysplugins/smarty_resource_custom.php b/library/Smarty/libs/sysplugins/smarty_resource_custom.php deleted file mode 100644 index 619f2d6f0..000000000 --- a/library/Smarty/libs/sysplugins/smarty_resource_custom.php +++ /dev/null @@ -1,95 +0,0 @@ -<?php -/** - * Smarty Resource Plugin - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - */ - -/** - * Smarty Resource Plugin - * Wrapper Implementation for custom resource plugins - * - * @package Smarty - * @subpackage TemplateResources - */ -abstract class Smarty_Resource_Custom extends Smarty_Resource -{ - /** - * fetch template and its modification time from data source - * - * @param string $name template name - * @param string &$source template source - * @param integer &$mtime template modification timestamp (epoch) - */ - 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) - { - return null; - } - - /** - * populate Source Object with meta data from 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) - { - $source->filepath = $source->type . ':' . $source->name; - $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)) { - $source->content = $content; - } - } - $source->exists = !!$source->timestamp; - } - - /** - * 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 - */ - public function getContent(Smarty_Template_Source $source) - { - $this->fetch($source->name, $content, $timestamp); - if (isset($content)) { - return $content; - } - - throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); - } - - /** - * Determine basename for compiled filename - * - * @param Smarty_Template_Source $source source object - * - * @return string resource's basename - */ - public function getBasename(Smarty_Template_Source $source) - { - return basename($source->name); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_resource_recompiled.php b/library/Smarty/libs/sysplugins/smarty_resource_recompiled.php deleted file mode 100644 index cfd73401b..000000000 --- a/library/Smarty/libs/sysplugins/smarty_resource_recompiled.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php -/** - * Smarty Resource Plugin - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - */ - -/** - * Smarty Resource Plugin - * Base implementation for resource plugins that don't compile cache - * - * @package Smarty - * @subpackage TemplateResources - */ -abstract class Smarty_Resource_Recompiled extends Smarty_Resource -{ - /** - * Flag that it's an recompiled resource - * - * @var bool - */ - public $recompiled = true; - - /** - * Resource does implement populateCompiledFilepath() method - * - * @var bool - */ - public $hasCompiledHandler = 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; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_resource_uncompiled.php b/library/Smarty/libs/sysplugins/smarty_resource_uncompiled.php deleted file mode 100644 index 88d2bba81..000000000 --- a/library/Smarty/libs/sysplugins/smarty_resource_uncompiled.php +++ /dev/null @@ -1,79 +0,0 @@ -<?php -/** - * Smarty Resource Plugin - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - */ - -/** - * Smarty Resource Plugin - * Base implementation for resource plugins that don't use the compiler - * - * @package Smarty - * @subpackage TemplateResources - */ -abstract class Smarty_Resource_Uncompiled extends Smarty_Resource -{ - /** - * Flag that it's an uncompiled resource - * - * @var bool - */ - public $uncompiled = true; - - /** - * Resource does implement populateCompiledFilepath() method - * - * @var bool - */ - public $hasCompiledHandler = true; - - /** - * Render and output the template (without using the compiler) - * - * @param Smarty_Template_Source $source source object - * @param Smarty_Internal_Template $_template template object - * - * @throws SmartyException on failure - */ - abstract public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template); - - /** - * 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 = false; - $compiled->timestamp = false; - $compiled->exists = false; - } - - /** - * render compiled template code - * - * @param Smarty_Internal_Template $_template - * - * @return string - * @throws Exception - */ - public function render($_template) - { - $level = ob_get_level(); - ob_start(); - try { - $this->renderUncompiled($_template->source, $_template); - return ob_get_clean(); - } - catch (Exception $e) { - while (ob_get_level() > $level) { - ob_end_clean(); - } - throw $e; - } - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_security.php b/library/Smarty/libs/sysplugins/smarty_security.php deleted file mode 100644 index 9d48bcb21..000000000 --- a/library/Smarty/libs/sysplugins/smarty_security.php +++ /dev/null @@ -1,715 +0,0 @@ -<?php -/** - * Smarty plugin - * - * @package Smarty - * @subpackage Security - * @author Uwe Tews - */ - -/* - * FIXME: Smarty_Security API - * - getter and setter instead of public properties would allow cultivating an internal cache properly - * - current implementation of isTrustedResourceDir() assumes that Smarty::$template_dir and Smarty::$config_dir are immutable - * the cache is killed every time either of the variables change. That means that two distinct Smarty objects with differing - * $template_dir or $config_dir should NOT share the same Smarty_Security instance, - * as this would lead to (severe) performance penalty! how should this be handled? - */ - -/** - * This class does contain the security settings - */ -class Smarty_Security -{ - /** - * This determines how Smarty handles "<?php ... ?>" tags in templates. - * possible values: - * <ul> - * <li>Smarty::PHP_PASSTHRU -> echo PHP tags as they are</li> - * <li>Smarty::PHP_QUOTE -> escape tags as entities</li> - * <li>Smarty::PHP_REMOVE -> remove php tags</li> - * <li>Smarty::PHP_ALLOW -> execute php tags</li> - * </ul> - * - * @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 - * @throws SmartyCompilerException if php function is not trusted - */ - public function isTrustedPhpFunction($function_name, $compiler) - { - if (isset($this->php_functions) && - (empty($this->php_functions) || in_array($function_name, $this->php_functions)) - ) { - return true; - } - - $compiler->trigger_template_error("PHP function '{$function_name}' not allowed by security setting"); - - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if static class is trusted. - * - * @param string $class_name - * @param object $compiler compiler object - * - * @return boolean true if class is trusted - * @throws SmartyCompilerException if static class is not trusted - */ - public function isTrustedStaticClass($class_name, $compiler) - { - if (isset($this->static_classes) && - (empty($this->static_classes) || in_array($class_name, $this->static_classes)) - ) { - return true; - } - - $compiler->trigger_template_error("access to static class '{$class_name}' not allowed by security setting"); - - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if 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 - * @throws SmartyCompilerException if static class method is not 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 - * @throws SmartyCompilerException if modifier is not trusted - */ - public function isTrustedPhpModifier($modifier_name, $compiler) - { - if (isset($this->php_modifiers) && - (empty($this->php_modifiers) || in_array($modifier_name, $this->php_modifiers)) - ) { - return true; - } - - $compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting"); - - return false; // should not, but who knows what happens to the compiler in the future? - } - - /** - * Check if tag is trusted. - * - * @param string $tag_name - * @param object $compiler compiler object - * - * @return boolean true if tag is trusted - * @throws SmartyCompilerException if modifier is not trusted - */ - public function isTrustedTag($tag_name, $compiler) - { - // check for internal always required tags - if (in_array($tag_name, array('assign', 'call', 'private_filter', 'private_block_plugin', - 'private_function_plugin', 'private_object_block_function', - 'private_object_function', 'private_registered_function', - 'private_registered_block', 'private_special_variable', - 'private_print_expression', 'private_modifier'))) { - return true; - } - // check security settings - if (empty($this->allowed_tags)) { - if (empty($this->disabled_tags) || !in_array($tag_name, $this->disabled_tags)) { - return true; - } else { - $compiler->trigger_template_error("tag '{$tag_name}' disabled by security setting", 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 - * @throws SmartyCompilerException if modifier is not 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 - * @throws SmartyCompilerException if modifier is not trusted - */ - public function isTrustedModifier($modifier_name, $compiler) - { - // check for internal always allowed modifier - if (in_array($modifier_name, array('default'))) { - return true; - } - // check security settings - if (empty($this->allowed_modifiers)) { - if (empty($this->disabled_modifiers) || !in_array($modifier_name, $this->disabled_modifiers)) { - return true; - } else { - $compiler->trigger_template_error("modifier '{$modifier_name}' disabled by security setting", 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($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) { - foreach ($this->_include_dir as $directory) { - unset($this->_resource_dir[$directory]); - } - if ($this->smarty->use_include_path) { - $this->_include_dir = array(); - $_dirs = $this->smarty->ext->_getIncludePath->getIncludePathDirs($this->smarty); - foreach ($_dirs as $directory) { - $this->_include_dir[] = $directory; - $this->_resource_dir[$directory] = true; - } - } - $this->_include_path_status = $this->smarty->use_include_path; - } - if ($isConfig !== true && - (!isset($this->smarty->_cache['template_dir_new']) || $this->smarty->_cache['template_dir_new']) - ) { - $_dir = $this->smarty->getTemplateDir(); - if ($this->_template_dir !== $_dir) { - foreach ($this->_template_dir as $directory) { - unset($this->_resource_dir[$directory]); - } - foreach ($_dir as $directory) { - $this->_resource_dir[$directory] = true; - } - $this->_template_dir = $_dir; - } - $this->smarty->_cache['template_dir_new'] = false; - } - if ($isConfig !== false && - (!isset($this->smarty->_cache['config_dir_new']) || $this->smarty->_cache['config_dir_new']) - ) { - $_dir = $this->smarty->getConfigDir(); - if ($this->_config_dir !== $_dir) { - foreach ($this->_config_dir as $directory) { - unset($this->_resource_dir[$directory]); - } - foreach ($_dir as $directory) { - $this->_resource_dir[$directory] = true; - } - $this->_config_dir = $_dir; - } - $this->smarty->_cache['config_dir_new'] = false; - } - if ($this->_secure_dir !== (array) $this->secure_dir) { - foreach ($this->_secure_dir as $directory) { - unset($this->_resource_dir[$directory]); - } - foreach ((array) $this->secure_dir as $directory) { - $directory = $this->smarty->_realpath($directory . DS, true); - $this->_resource_dir[$directory] = true; - } - $this->_secure_dir = (array) $this->secure_dir; - } - $this->_resource_dir = $this->_checkDir($filepath, $this->_resource_dir); - 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 . DS, true); - $this->_php_resource_dir[$directory] = true; - } - } - - $this->_php_resource_dir = $this->_checkDir($this->smarty->_realpath($filepath, true), $this->_php_resource_dir); - return true; - } - - /** - * 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 - * - * @internal param $template - */ - public function exitTemplate() - { - if ($this->max_template_nesting > 0) { - $this->_current_template_nesting --; - } - } - - /** - * Check if file is inside a valid directory - * - * @param string $filepath - * @param array $dirs valid directories - * - * @return array - * @throws \SmartyException - */ - private function _checkDir($filepath, $dirs) - { - $directory = dirname($filepath) . DS; - $_directory = array(); - while (true) { - // remember the directory to add it to _resource_dir in case we're successful - $_directory[$directory] = true; - // test if the directory is trusted - if (isset($dirs[$directory])) { - // merge sub directories of current $directory into _resource_dir to speed up subsequent lookup - $dirs = array_merge($dirs, $_directory); - - return $dirs; - } - // abort if we've reached root - if (!preg_match('#[\\\/][^\\\/]+[\\\/]$#', $directory)) { - break; - } - // bubble up one level - $directory = preg_replace('#[\\\/][^\\\/]+[\\\/]$#', DS, $directory); - } - - // give up - throw new SmartyException("directory '{$filepath}' not allowed by security setting"); - } - - /** - * 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; - } 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; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_template_cached.php b/library/Smarty/libs/sysplugins/smarty_template_cached.php deleted file mode 100644 index cecf42986..000000000 --- a/library/Smarty/libs/sysplugins/smarty_template_cached.php +++ /dev/null @@ -1,246 +0,0 @@ -<?php -/** - * Created by PhpStorm. - * User: Uwe Tews - * Date: 04.12.2014 - * Time: 06:08 - */ - -/** - * Smarty Resource Data Object - * Cache Data Container for Template Files - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - */ -class Smarty_Template_Cached extends Smarty_Template_Resource_Base -{ - /** - * Cache Is Valid - * - * @var boolean - */ - public $valid = null; - - /** - * CacheResource Handler - * - * @var Smarty_CacheResource - */ - public $handler = null; - - /** - * Template Cache Id (Smarty_Internal_Template::$cache_id) - * - * @var string - */ - public $cache_id = null; - - /** - * saved cache lifetime in seconds - * - * @var integer - */ - public $cache_lifetime = 0; - - /** - * Id for cache locking - * - * @var string - */ - public $lock_id = null; - - /** - * flag that cache is locked by this instance - * - * @var bool - */ - public $is_locked = false; - - /** - * Source Object - * - * @var Smarty_Template_Source - */ - public $source = null; - - /** - * Nocache hash codes of processed compiled templates - * - * @var array - */ - public $hashes = array(); - - /** - * create Cached Object container - * - * @param Smarty_Internal_Template $_template template object - */ - public function __construct(Smarty_Internal_Template $_template) - { - $this->compile_id = $_template->compile_id; - $this->cache_id = $_template->cache_id; - $this->source = $_template->source; - if (!class_exists('Smarty_CacheResource', false)) { - require SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php'; - } - $this->handler = Smarty_CacheResource::load($_template->smarty); - } - - /** - * @param Smarty_Internal_Template $_template - * - * @return Smarty_Template_Cached - */ - 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 == Smarty::CACHING_LIFETIME_CURRENT || - $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || $_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) { - $_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->smarty->compile_check == 1 && - $_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 content - */ - public function read(Smarty_Internal_Template $_template) - { - if (!$_template->source->handler->recompiled) { - return $this->handler->readCachedContent($_template); - } - return false; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_template_compiled.php b/library/Smarty/libs/sysplugins/smarty_template_compiled.php deleted file mode 100644 index e7710f85e..000000000 --- a/library/Smarty/libs/sysplugins/smarty_template_compiled.php +++ /dev/null @@ -1,297 +0,0 @@ -<?php - -/** - * Smarty Resource Data Object - * Meta Data Container for Template Files - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - * @property string $content compiled content - */ -class Smarty_Template_Compiled extends Smarty_Template_Resource_Base -{ - - /** - * nocache hash - * - * @var string|null - */ - public $nocache_hash = null; - - /** - * get a Compiled Object of this source - * - * @param Smarty_Internal_Template $_template template object - * - * @return Smarty_Template_Compiled compiled object - */ - static function load($_template) - { - // check runtime cache - if (!$_template->source->handler->recompiled && - ($_template->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) - ) { - $_cache_key = $_template->source->unique_resource . '#'; - if ($_template->caching) { - $_cache_key .= 'caching#'; - } - $_cache_key .= $_template->compile_id; - if (isset($_template->source->compileds[$_cache_key])) { - return $_template->source->compileds[$_cache_key]; - } - } - $compiled = new Smarty_Template_Compiled(); - if ($_template->source->handler->hasCompiledHandler) { - $_template->source->handler->populateCompiledFilepath($compiled, $_template); - } else { - $compiled->populateCompiledFilepath($_template); - } - // runtime cache - if (!$_template->source->handler->recompiled && - ($_template->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) - ) { - $_template->source->compileds[$_cache_key] = $compiled; - } - return $compiled; - } - - /** - * populate Compiled Object with compiled filepath - * - * @param Smarty_Internal_Template $_template template object - **/ - public function populateCompiledFilepath(Smarty_Internal_Template $_template) - { - $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w]+!', '_', $_template->compile_id) : null; - if ($_template->source->isConfig) { - $_flag = '_' . - ((int) $_template->smarty->config_read_hidden + (int) $_template->smarty->config_booleanize * 2 + - (int) $_template->smarty->config_overwrite * 4); - } else { - $_flag = - '_' . ((int) $_template->smarty->merge_compiled_includes + (int) $_template->smarty->escape_html * 2); - } - $_filepath = $_template->source->uid . $_flag; - // if use_sub_dirs, break file into directories - if ($_template->smarty->use_sub_dirs) { - $_filepath = substr($_filepath, 0, 2) . DS . substr($_filepath, 2, 2) . DS . substr($_filepath, 4, 2) . DS . - $_filepath; - } - $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^'; - if (isset($_compile_id)) { - $_filepath = $_compile_id . $_compile_dir_sep . $_filepath; - } - // caching token - if ($_template->caching) { - $_cache = '.cache'; - } else { - $_cache = ''; - } - $_compile_dir = $_template->smarty->getCompileDir(); - // set basename if not specified - $_basename = $_template->source->handler->getBasename($_template->source); - if ($_basename === null) { - $_basename = basename(preg_replace('![^\w]+!', '_', $_template->source->name)); - } - // separate (optional) basename by dot - if ($_basename) { - $_basename = '.' . $_basename; - } - - $this->filepath = $_compile_dir . $_filepath . '.' . $_template->source->type . $_basename . $_cache . '.php'; - $this->exists = is_file($this->filepath); - if (!$this->exists) { - $this->timestamp = false; - } - } - - /** - * load compiled template or compile from source - * - * @param Smarty_Internal_Template $_template - * - * @throws Exception - */ - public function process(Smarty_Internal_Template $_template) - { - $_smarty_tpl = $_template; - if ($_template->source->handler->recompiled || !$_template->compiled->exists || - $_template->smarty->force_compile || ($_template->smarty->compile_check && - $_template->source->getTimeStamp() > $_template->compiled->getTimeStamp()) - ) { - $this->compileTemplateSource($_template); - $compileCheck = $_template->smarty->compile_check; - $_template->smarty->compile_check = false; - if ($_template->source->handler->recompiled) { - $level = ob_get_level(); - ob_start(); - try { - eval("?>" . $this->content); - } - catch (Exception $e) { - while (ob_get_level() > $level) { - ob_end_clean(); - } - throw $e; - } - ob_get_clean(); - $this->content = null; - } else { - $this->loadCompiledTemplate($_template); - } - $_template->smarty->compile_check = $compileCheck; - } else { - $_template->mustCompile = true; - @include($_template->compiled->filepath); - if ($_template->mustCompile) { - $this->compileTemplateSource($_template); - $compileCheck = $_template->smarty->compile_check; - $_template->smarty->compile_check = false; - $this->loadCompiledTemplate($_template); - $_template->smarty->compile_check = $compileCheck; - } - } - $_template->smarty->ext->_subTemplate->registerSubTemplates($_template); - - $this->processed = true; - } - - /** - * Load fresh compiled template by including the PHP file - * HHVM requires a work around because of a PHP incompatibility - * - * @param \Smarty_Internal_Template $_template - */ - private function loadCompiledTemplate(Smarty_Internal_Template $_template) - { - if (function_exists('opcache_invalidate')) { - opcache_invalidate($_template->compiled->filepath); - } - $_smarty_tpl = $_template; - if (defined('HHVM_VERSION')) { - $_template->smarty->ext->_hhvm->includeHhvm($_template, $_template->compiled->filepath); - } else { - include($_template->compiled->filepath); - } - } - - /** - * render compiled template code - * - * @param Smarty_Internal_Template $_template - * - * @return string - * @throws Exception - */ - public function render(Smarty_Internal_Template $_template) - { - if ($_template->smarty->debugging) { - $_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); - } - $this->getRenderedTemplateCode($_template); - if ($_template->caching && $this->has_nocache_code) { - $_template->cached->hashes[$this->nocache_hash] = true; - } - if (isset($_template->parent) && $_template->parent->_objType == 2 && !empty($_template->tpl_function)) { - $_template->parent->tpl_function = array_merge($_template->parent->tpl_function, $_template->tpl_function); - } - if ($_template->smarty->debugging) { - $_template->smarty->_debug->end_render($_template); - } - } - - /** - * compile template from source - * - * @param Smarty_Internal_Template $_template - * - * @return string - * @throws Exception - */ - public function compileTemplateSource(Smarty_Internal_Template $_template) - { - $_template->source->compileds = array(); - $this->file_dependency = array(); - $this->tpl_function = array(); - $this->includes = array(); - $this->nocache_hash = null; - $this->unifunc = null; - // compile locking - if (!$_template->source->handler->recompiled) { - if ($saved_timestamp = $_template->compiled->getTimeStamp()) { - touch($_template->compiled->filepath); - } - } - // call compiler - try { - $_template->loadCompiler(); - $code = $_template->compiler->compileTemplate($_template); - } - catch (Exception $e) { - // restore old timestamp in case of error - if (!$_template->source->handler->recompiled && $saved_timestamp) { - touch($_template->compiled->filepath, $saved_timestamp); - } - throw $e; - } - // compiling succeeded - if ($_template->compiler->write_compiled_code) { - // write compiled template - $this->write($_template, $code); - $code = ''; - } - // release compiler object to free memory - unset($_template->compiler); - return $code; - } - - /** - * Write compiled code by handler - * - * @param Smarty_Internal_Template $_template template object - * @param string $code compiled code - * - * @return boolean success - */ - 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; - } else { - $this->content = $code; - } - $this->timestamp = time(); - $this->exists = true; - 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; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_template_config.php b/library/Smarty/libs/sysplugins/smarty_template_config.php deleted file mode 100644 index f0fff5080..000000000 --- a/library/Smarty/libs/sysplugins/smarty_template_config.php +++ /dev/null @@ -1,97 +0,0 @@ -<?php -/** - * Smarty Config Source Plugin - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - */ - -/** - * Smarty Connfig Resource Data Object - * Meta Data Container for Template Files - * - * @package Smarty - * @subpackage TemplateResources - * @author Uwe Tews - * - */ -class Smarty_Template_Config extends Smarty_Template_Source -{ - /** - * array of section names, single section or null - * - * @var null|string|array - */ - public $config_sections = null; - - /** - * scope into which the config variables shall be loaded - * - * @var string - */ - public $scope = 'local'; - - /** - * Flag that source is a config file - * - * @var bool - */ - public $isConfig = true; - - /** - * create Source Object container - * - * @param Smarty_Resource $handler Resource Handler this source object communicates with - * @param Smarty $smarty Smarty instance this source object belongs to - * @param string $resource full template_resource - * @param string $type type of resource - * @param string $name resource name - */ - public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name) - { - // must clone handler as we change class names - $this->handler = clone $handler; // Note: prone to circular references - $this->handler->compiler_class = 'Smarty_Internal_Config_File_Compiler'; - $this->handler->template_lexer_class = 'Smarty_Internal_Configfilelexer'; - $this->handler->template_parser_class = 'Smarty_Internal_Configfileparser'; - $this->resource = $resource; - $this->type = $type; - $this->name = $name; - $this->smarty = $smarty; - } - - /** - * 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_Config Source Object - * @throws SmartyException - */ - public static function load(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null) - { - static $_incompatible_resources = array('extends' => true, 'php' => true); - $template_resource = $_template->template_resource; - if (empty($template_resource)) { - throw new SmartyException('Missing config name'); - } - // parse resource_name, load resource handler - list($name, $type) = Smarty_Resource::parseResourceName($template_resource, $_template->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"); - } - $resource = Smarty_Resource::load($_template->smarty, $type); - $source = new Smarty_Template_Config($resource, $_template->smarty, $template_resource, $type, $name); - $resource->populate($source, $_template); - if (!$source->exists && isset($_template->smarty->default_config_handler_func)) { - Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source); - } - $source->unique_resource = $resource->buildUniqueResourceName($_template->smarty, $name, true); - return $source; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_template_resource_base.php b/library/Smarty/libs/sysplugins/smarty_template_resource_base.php deleted file mode 100644 index 0911feb8d..000000000 --- a/library/Smarty/libs/sysplugins/smarty_template_resource_base.php +++ /dev/null @@ -1,155 +0,0 @@ -<?php - -/** - * Smarty Template Resource Base Object - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - */ -abstract class Smarty_Template_Resource_Base -{ - /** - * Compiled Filepath - * - * @var string - */ - public $filepath = null; - - /** - * Compiled Timestamp - * - * @var integer - */ - public $timestamp = null; - - /** - * Compiled Existence - * - * @var boolean - */ - public $exists = false; - - /** - * Template Compile Id (Smarty_Internal_Template::$compile_id) - * - * @var string - */ - public $compile_id = null; - - /** - * Compiled Content Loaded - * - * @var boolean - */ - public $processed = false; - - /** - * unique function name for compiled template code - * - * @var string - */ - public $unifunc = ''; - - /** - * flag if template does contain nocache code sections - * - * @var bool - */ - public $has_nocache_code = false; - - /** - * resource file dependency - * - * @var array - */ - public $file_dependency = array(); - - /** - * Content buffer - * - * @var string - */ - public $content = null; - - /** - * required plugins - * - * @var array - */ - public $required_plugins = array(); - - /** - * Included subtemplates - * - * @var array - */ - public $includes = array(); - - /** - * Process resource - * - * @param Smarty_Internal_Template $_template template object - */ - abstract public function process(Smarty_Internal_Template $_template); - - /** - * get rendered template content by calling compiled or cached template code - * - * @param string $unifunc function with template code - * - * @return string - * @throws \Exception - */ - public function getRenderedTemplateCode(Smarty_Internal_Template $_template, $unifunc = null) - { - $unifunc = isset($unifunc) ? $unifunc : $this->unifunc; - $level = ob_get_level(); - try { - if (empty($unifunc) || !is_callable($unifunc)) { - throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'"); - } - if (isset($_template->smarty->security_policy)) { - $_template->smarty->security_policy->startTemplate($_template); - } - // - // render compiled or saved template code - // - if (!isset($_template->_cache['capture_stack'])) { - $_template->_cache['capture_stack'] = array(); - } - $_saved_capture_level = count($_template->_cache['capture_stack']); - $unifunc($_template); - // any unclosed {capture} tags ? - if ($_saved_capture_level != count($_template->_cache['capture_stack'])) { - $_template->capture_error(); - } - if (isset($_template->smarty->security_policy)) { - $_template->smarty->security_policy->exitTemplate(); - } - return null; - } - catch (Exception $e) { - while (ob_get_level() > $level) { - ob_end_clean(); - } - if (isset($_template->smarty->security_policy)) { - $_template->smarty->security_policy->exitTemplate(); - } - throw $e; - } - } - - /** - * Get compiled time stamp - * - * @return int - */ - public function getTimeStamp() - { - if ($this->exists && !isset($this->timestamp)) { - $this->timestamp = @filemtime($this->filepath); - } - return $this->timestamp; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_template_source.php b/library/Smarty/libs/sysplugins/smarty_template_source.php deleted file mode 100644 index be5b62809..000000000 --- a/library/Smarty/libs/sysplugins/smarty_template_source.php +++ /dev/null @@ -1,267 +0,0 @@ -<?php - -/** - * Smarty Resource Data Object - * Meta Data Container for Template Files - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - * - */ -class Smarty_Template_Source -{ - /** - * Unique Template ID - * - * @var string - */ - public $uid = null; - - /** - * Template Resource (Smarty_Internal_Template::$template_resource) - * - * @var string - */ - public $resource = null; - - /** - * Resource Type - * - * @var string - */ - public $type = null; - - /** - * Resource Name - * - * @var string - */ - public $name = null; - - /** - * Unique Resource Name - * - * @var string - */ - public $unique_resource = null; - - /** - * Source Filepath - * - * @var string - */ - public $filepath = null; - - /** - * Source Timestamp - * - * @var integer - */ - public $timestamp = null; - - /** - * Source Existence - * - * @var boolean - */ - public $exists = false; - - /** - * Source File Base name - * - * @var string - */ - public $basename = null; - - /** - * The Components an extended template is made of - * - * @var \Smarty_Template_Source[] - */ - public $components = null; - - /** - * Resource Handler - * - * @var \Smarty_Resource - */ - public $handler = null; - - /** - * Smarty instance - * - * @var Smarty - */ - public $smarty = null; - - /** - * Resource is source - * - * @var bool - */ - public $isConfig = false; - - /** - * cache for Smarty_Template_Compiled instances - * - * @var Smarty_Template_Compiled[] - */ - public $compileds = array(); - - /** - * Template source content eventually set by default handler - * - * @var string - */ - public $content = null; - - /** - * create Source Object container - * - * @param Smarty_Resource $handler Resource Handler this source object communicates with - * @param Smarty $smarty Smarty instance this source object belongs to - * @param string $resource full template_resource - * @param string $type type of resource - * @param string $name resource name - * - */ - public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name) - { - $this->handler = $handler; // Note: prone to circular references - $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('Missing template 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; - } - - $handler = isset($smarty->_cache['resource_handlers'][$type]) ? - $smarty->_cache['resource_handlers'][$type] : - Smarty_Resource::load($smarty, $type); - // if resource is not recompiling and resource name is not dotted we can check the source cache - if (($smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) && !$handler->recompiled && - !(isset($name[1]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/')) - ) { - $unique_resource = $handler->buildUniqueResourceName($smarty, $name); - if (isset($smarty->_cache['source_objects'][$unique_resource])) { - return $smarty->_cache['source_objects'][$unique_resource]; - } - } else { - $unique_resource = null; - } - // create new source object - $source = new Smarty_Template_Source($handler, $smarty, $template_resource, $type, $name); - $handler->populate($source, $_template); - if (!$source->exists && isset($_template->smarty->default_template_handler_func)) { - Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source); - } - // on recompiling resources we are done - if (($smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) && !$handler->recompiled) { - // may by we have already $unique_resource - $is_relative = false; - if (!isset($unique_resource)) { - $is_relative = isset($name[1]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/') && - ($type == 'file' || - (isset($_template->parent->source) && $_template->parent->source->type == 'extends')); - $unique_resource = - $handler->buildUniqueResourceName($smarty, $is_relative ? $source->filepath . $name : $name); - } - $source->unique_resource = $unique_resource; - // save in runtime cache if not relative - if (!$is_relative) { - $smarty->_cache['source_objects'][$unique_resource] = $source; - } - } - return $source; - } - - /** - * render the uncompiled source - * - * @param Smarty_Internal_Template $_template template object - * - * @return string - * @throws \Exception - */ - public function renderUncompiled(Smarty_Internal_Template $_template) - { - $this->handler->renderUncompiled($_template->source, $_template); - } - - /** - * Render uncompiled source - * - * @param \Smarty_Internal_Template $_template - */ - public function render(Smarty_Internal_Template $_template) - { - if ($_template->source->handler->uncompiled) { - if ($_template->smarty->debugging) { - $_template->smarty->_debug->start_render($_template); - } - $this->handler->renderUncompiled($_template->source, $_template); - if (isset($_template->parent) && $_template->parent->_objType == 2 && !empty($_template->tpl_function)) { - $_template->parent->tpl_function = - array_merge($_template->parent->tpl_function, $_template->tpl_function); - } - if ($_template->smarty->debugging) { - $_template->smarty->_debug->end_render($_template); - } - } - } - - /** - * 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 - */ - public function getContent() - { - return isset($this->content) ? $this->content : $this->handler->getContent($this); - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_undefined_variable.php b/library/Smarty/libs/sysplugins/smarty_undefined_variable.php deleted file mode 100644 index 88bc6f68c..000000000 --- a/library/Smarty/libs/sysplugins/smarty_undefined_variable.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -/** - * class for undefined variable object - * This class defines an object for undefined variable handling - * - * @package Smarty - * @subpackage Template - */ -class Smarty_Undefined_Variable -{ - /** - * Returns FALSE for 'nocache' and NULL otherwise. - * - * @param string $name - * - * @return bool - */ - public function __get($name) - { - if ($name == 'nocache') { - return false; - } else { - return null; - } - } - - /** - * Always returns an empty string. - * - * @return string - */ - public function __toString() - { - return ""; - } -} diff --git a/library/Smarty/libs/sysplugins/smarty_variable.php b/library/Smarty/libs/sysplugins/smarty_variable.php deleted file mode 100644 index a6504b18f..000000000 --- a/library/Smarty/libs/sysplugins/smarty_variable.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php - -/** - * class for the Smarty variable object - * This class defines the Smarty variable object - * - * @package Smarty - * @subpackage Template - */ -class Smarty_Variable -{ - /** - * template variable - * - * @var mixed - */ - public $value = null; - /** - * if true any output of this variable will be not cached - * - * @var boolean - */ - public $nocache = false; - - /** - * create Smarty variable object - * - * @param mixed $value the value to assign - * @param boolean $nocache if true any output of this variable will be not cached - */ - public function __construct($value = null, $nocache = false) - { - $this->value = $value; - $this->nocache = $nocache; - } - - /** - * <<magic>> String conversion - * - * @return string - */ - public function __toString() - { - return (string) $this->value; - } -} - diff --git a/library/Smarty/libs/sysplugins/smartycompilerexception.php b/library/Smarty/libs/sysplugins/smartycompilerexception.php deleted file mode 100644 index 4d5d77875..000000000 --- a/library/Smarty/libs/sysplugins/smartycompilerexception.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php - -/** - * Smarty compiler exception class - * - * @package Smarty - */ -class SmartyCompilerException extends SmartyException -{ - public function __toString() - { - return ' --> Smarty Compiler: ' . $this->message . ' <-- '; - } - - /** - * The line number of the template error - * - * @type int|null - */ - public $line = null; - /** - * The template source snippet relating to the error - * - * @type string|null - */ - public $source = null; - /** - * The raw text of the error message - * - * @type string|null - */ - public $desc = null; - /** - * The resource identifier or template name - * - * @type string|null - */ - public $template = null; -} diff --git a/library/Smarty/libs/sysplugins/smartyexception.php b/library/Smarty/libs/sysplugins/smartyexception.php deleted file mode 100644 index 3da16c276..000000000 --- a/library/Smarty/libs/sysplugins/smartyexception.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -/** - * Smarty exception class - * - * @package Smarty - */ -class SmartyException extends Exception -{ - public static $escape = false; - - public function __toString() - { - return ' --> Smarty: ' . (self::$escape ? htmlentities($this->message) : $this->message) . ' <-- '; - } -} |