vishwamano

source of vishwamano.com
git clone git://git.ricketyspace.net/vishwamano.git
Log | Files | Refs

commit d0ed887649d0567201d28474f2b242383b2db975
parent bb888ac4425c3e0b5afb09f6a0f35de7574151ba
Author: rsiddharth <s@ricketyspace.net>
Date:   Mon, 19 Nov 2018 21:18:37 -0500

Remove smarty/

Diffstat:
smarty/Smarty-3.1.21/COPYING.lib | 166-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/README | 574-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/SMARTY_2_BC_NOTES.txt | 109-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/SMARTY_3.0_BC_NOTES.txt | 25-------------------------
smarty/Smarty-3.1.21/SMARTY_3.1_NOTES.txt | 306-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/change_log.txt | 2415-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/demo/configs/test.conf | 5-----
smarty/Smarty-3.1.21/demo/index.php | 30------------------------------
smarty/Smarty-3.1.21/demo/plugins/cacheresource.apc.php | 83-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/demo/plugins/cacheresource.memcache.php | 97-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/demo/plugins/cacheresource.mysql.php | 162-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/demo/plugins/resource.extendsall.php | 60------------------------------------------------------------
smarty/Smarty-3.1.21/demo/plugins/resource.mysql.php | 81-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/demo/plugins/resource.mysqls.php | 62--------------------------------------------------------------
smarty/Smarty-3.1.21/demo/templates/footer.tpl | 2--
smarty/Smarty-3.1.21/demo/templates/header.tpl | 5-----
smarty/Smarty-3.1.21/demo/templates/index.tpl | 87-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/Smarty.class.php | 1680-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/SmartyBC.class.php | 467-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/debug.tpl | 137-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/block.textformat.php | 110-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/function.counter.php | 78------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/function.cycle.php | 107-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/function.fetch.php | 221-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/function.html_checkboxes.php | 237-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/function.html_image.php | 163-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/function.html_options.php | 196-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/function.html_radios.php | 221-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/function.html_select_date.php | 387-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/function.html_select_time.php | 364-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/function.html_table.php | 176-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/function.mailto.php | 155-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/function.math.php | 91-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifier.capitalize.php | 90-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifier.date_format.php | 65-----------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifier.debug_print_var.php | 104-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifier.escape.php | 198-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifier.regex_replace.php | 57---------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifier.replace.php | 34----------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifier.spacify.php | 27---------------------------
smarty/Smarty-3.1.21/libs/plugins/modifier.truncate.php | 64----------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.cat.php | 29-----------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.count_characters.php | 32--------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.count_paragraphs.php | 27---------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.count_sentences.php | 27---------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.count_words.php | 31-------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.default.php | 35-----------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.escape.php | 126-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.from_charset.php | 33---------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.indent.php | 33---------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.lower.php | 31-------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.noprint.php | 21---------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.string_format.php | 25-------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.strip.php | 33---------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.strip_tags.php | 29-----------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.to_charset.php | 33---------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.unescape.php | 50--------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.upper.php | 29-----------------------------
smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.wordwrap.php | 47-----------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/outputfilter.trimwhitespace.php | 90-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/shared.escape_special_chars.php | 53-----------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/shared.literal_compiler_param.php | 35-----------------------------------
smarty/Smarty-3.1.21/libs/plugins/shared.make_timestamp.php | 43-------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/shared.mb_str_replace.php | 55-------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/shared.mb_unicode.php | 54------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/shared.mb_wordwrap.php | 73-------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/plugins/variablefilter.htmlspecialchars.php | 19-------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_cacheresource.php | 442-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_cacheresource_custom.php | 284-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_cacheresource_keyvaluestore.php | 493-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_config_source.php | 94-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_cacheresource_file.php | 297-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_append.php | 50--------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_assign.php | 86-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_block.php | 444-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_break.php | 75---------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_call.php | 127-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_capture.php | 96-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_config_load.php | 82-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_continue.php | 75---------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_debug.php | 41-----------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_eval.php | 71-----------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_extends.php | 85-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_for.php | 145-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_foreach.php | 229-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_function.php | 162-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_if.php | 210-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_include.php | 265-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_include_php.php | 107-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_insert.php | 140-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_ldelim.php | 39---------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_nocache.php | 70----------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_private_block_plugin.php | 85-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_private_function_plugin.php | 71-----------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_private_modifier.php | 139-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_private_object_block_function.php | 86-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_private_object_function.php | 84-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_private_print_expression.php | 151------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_private_registered_block.php | 111-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_private_registered_function.php | 79-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_private_special_variable.php | 114-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_rdelim.php | 39---------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_section.php | 206-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_setfilter.php | 70----------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compile_while.php | 93-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_compilebase.php | 174-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_config.php | 306-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_config_file_compiler.php | 159-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_configfilelexer.php | 646-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_configfileparser.php | 1042-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_data.php | 576-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_debug.php | 254-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_filter_handler.php | 67-------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_function_call_handler.php | 52----------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_get_include_path.php | 46----------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_nocache_insert.php | 51---------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_parsetree.php | 361-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_resource_eval.php | 96-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_resource_extends.php | 112-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_resource_file.php | 89-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_resource_php.php | 119-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_resource_registered.php | 98-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_resource_stream.php | 81-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_resource_string.php | 97-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_smartytemplatecompiler.php | 140-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_template.php | 738-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_templatebase.php | 860-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_templatecompilerbase.php | 823-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_templatelexer.php | 1553-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_templateparser.php | 4568-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_utility.php | 837-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_internal_write_file.php | 86-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_resource.php | 912-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_resource_custom.php | 95-------------------------------------------------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_resource_recompiled.php | 33---------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_resource_uncompiled.php | 41-----------------------------------------
smarty/Smarty-3.1.21/libs/sysplugins/smarty_security.php | 480-------------------------------------------------------------------------------
137 files changed, 0 insertions(+), 31920 deletions(-)

diff --git a/smarty/Smarty-3.1.21/COPYING.lib b/smarty/Smarty-3.1.21/COPYING.lib @@ -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/smarty/Smarty-3.1.21/README b/smarty/Smarty-3.1.21/README @@ -1,574 +0,0 @@ -Smarty 3.1.21 - -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 -======= - -Smarty3 are following the same coding rules as in Smarty2. -The only difference is that the template object is passed as additional third parameter. - -smarty_plugintype_name (array $params, object $smarty, object $template) - -The Smarty 2 plugins are still compatible as long as they do not make use of specific Smarty2 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/smarty/Smarty-3.1.21/SMARTY_2_BC_NOTES.txt b/smarty/Smarty-3.1.21/SMARTY_2_BC_NOTES.txt @@ -1,109 +0,0 @@ -= Known incompatibilities with Smarty 2 = - -== Syntax == - -Smarty 3 API has a new syntax. Much of the Smarty 2 syntax is supported -by a wrapper but deprecated. See the README that comes with Smarty 3 for more -information. - -The {$array|@mod} syntax has always been a bit confusing, where an "@" is required -to apply a modifier to an array instead of the individual elements. Normally you -always want the modifier to apply to the variable regardless of its type. In Smarty 3, -{$array|mod} and {$array|@mod} behave identical. It is safe to drop the "@" and the -modifier will still apply to the array. If you really want the modifier to apply to -each array element, you must loop the array in-template, or use a custom modifier that -supports array iteration. Most smarty functions already escape values where necessary -such as {html_options} - -== PHP Version == -Smarty 3 is PHP 5 only. It will not work with PHP 4. - -== {php} Tag == -The {php} tag is disabled by default. The use of {php} tags is -deprecated. It can be enabled with $smarty->allow_php_tag=true. - -But if you scatter PHP code which belongs together into several -{php} tags it may not work any longer. - -== Delimiters and whitespace == -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; - -== Unquoted Strings == -Smarty 2 was a bit more forgiving (and ambiguous) when it comes to unquoted strings -in parameters. Smarty3 is more restrictive. You can still pass strings without quotes -so long as they contain no special characters. (anything outside of A-Za-z0-9_) - -For example filename strings must be quoted -<source lang="smarty"> -{include file='path/foo.tpl'} -</source> - -== Extending the Smarty class == -Smarty 3 makes use of the __construct method for initialization. If you are extending -the Smarty class, its constructor is not called implicitly if the your child class defines -its own constructor. In order to run Smarty's constructor, a call to parent::__construct() -within your child constructor is required. - -<source lang="php"> -class MySmarty extends Smarty { - function __construct() { - parent::__construct(); - - // your initialization code goes here - - } -} -</source> - -== Autoloader == -Smarty 3 does register its own autoloader with spl_autoload_register. If your code has -an existing __autoload function then this function must be explicitly registered on -the __autoload stack. See http://us3.php.net/manual/en/function.spl-autoload-register.php -for further details. - -== Plugin Filenames == -Smarty 3 optionally supports the PHP spl_autoloader. The autoloader requires filenames -to be lower case. Because of this, Smarty plugin file names must also be lowercase. -In Smarty 2, mixed case file names did work. - -== Scope of Special Smarty Variables == -In Smarty 2 the special Smarty variables $smarty.section... and $smarty.foreach... -had global scope. If you had loops with the same name in subtemplates you could accidentally -overwrite values of parent template. - -In Smarty 3 these special Smarty variable have only local scope in the template which -is defining the loop. If you need their value in a subtemplate you have to pass them -as parameter. -<source lang="smarty"> -{include file='path/foo.tpl' index=$smarty.section.foo.index} -</source> - -== SMARTY_RESOURCE_CHAR_SET == -Smarty 3 sets the constant SMARTY_RESOURCE_CHAR_SET to utf-8 as default template charset. -This is now used also on modifiers like escape as default charset. If your templates use -other charsets make sure that you define the constant accordingly. Otherwise you may not -get any output. - -== newline at {if} tags == -A \n was added to the compiled code of the {if},{else},{elseif},{/if} tags to get output of newlines as expected by the template source. -If one of the {if} tags is at the line end you will now get a newline in the HTML output. - -== trigger_error() == -The API function trigger_error() has been removed because it did just map to PHP trigger_error. -However it's still included in the Smarty2 API wrapper. - -== Smarty constants == -The constants -SMARTY_PHP_PASSTHRU -SMARTY_PHP_QUOTE -SMARTY_PHP_REMOVE -SMARTY_PHP_ALLOW -have been replaced with class constants -Smarty::PHP_PASSTHRU -Smarty::PHP_QUOTE -Smarty::PHP_REMOVE -Smarty::PHP_ALLOW - diff --git a/smarty/Smarty-3.1.21/SMARTY_3.0_BC_NOTES.txt b/smarty/Smarty-3.1.21/SMARTY_3.0_BC_NOTES.txt @@ -1,24 +0,0 @@ -== Smarty2 backward compatibility == -All Smarty2 specific API functions and deprecated functionallity has been moved -to the SmartyBC class. - -== {php} Tag == -The {php} tag is no longer available in the standard Smarty calls. -The use of {php} tags is deprecated and only available in the SmartyBC class. - -== {include_php} Tag == -The {include_php} tag is no longer available in the standard Smarty calls. -The use of {include_php} tags is deprecated and only available in the SmartyBC class. - -== php template resource == -The support of the php template resource is removed. - -== $cache_dir, $compile_dir, $config_dir, $template_dir access == -The mentioned properties can't be accessed directly any longer. You must use -corresponding getter/setters like addConfigDir(), setConfigDir(), getConfigDir() - -== obsolete Smarty class properties == -The following no longer used properties are removed: -$allow_php_tag -$allow_php_template -$deprecation_notices- \ No newline at end of file diff --git a/smarty/Smarty-3.1.21/SMARTY_3.1_NOTES.txt b/smarty/Smarty-3.1.21/SMARTY_3.1_NOTES.txt @@ -1,306 +0,0 @@ -Smarty 3.1 Notes -================ - -Smarty 3.1 is a departure from 2.0 compatibility. Most notably, all -backward compatibility has been moved to a separate class file named -SmartyBC.class.php. If you require compatibility with 2.0, you will -need to use this class. - -Some differences from 3.0 are also present. 3.1 begins the journey of -requiring setters/getters for property access. So far this is only -implemented on the five directory properties: template_dir, -plugins_dir, configs_dir, compile_dir and cache_dir. These properties -are now protected, it is required to use the setters/getters instead. -That said, direct property access will still work, however slightly -slower since they will now fall through __set() and __get() and in -turn passed through the setter/getter methods. 3.2 will exhibit a full -list of setter/getter methods for all (currently) public properties, -so code-completion in your IDE will work as expected. - -There is absolutely no PHP allowed in templates any more. All -deprecated features of Smarty 2.0 are gone. Again, use the SmartyBC -class if you need any backward compatibility. - -Internal Changes - - Full UTF-8 Compatibility - -The plugins shipped with Smarty 3.1 have been rewritten to fully -support UTF-8 strings if Multibyte String is available. Without -MBString UTF-8 cannot be handled properly. For those rare cases where -templates themselves have to juggle encodings, the new modifiers -to_charset and from_charset may come in handy. - - Plugin API and Performance - -All Plugins (modifiers, functions, blocks, resources, -default_template_handlers, etc) are now receiving the -Smarty_Internal_Template instance, where they were supplied with the -Smarty instance in Smarty 3.0. *. As The Smarty_Internal_Template -mimics the behavior of Smarty, this API simplification should not -require any changes to custom plugins. - -The plugins shipped with Smarty 3.1 have been rewritten for better -performance. Most notably {html_select_date} and {html_select_time} -have been improved vastly. Performance aside, plugins have also been -reviewed and generalized in their API. {html_select_date} and -{html_select_time} now share almost all available options. - -The escape modifier now knows the $double_encode option, which will -prevent entities from being encoded again. - -The capitalize modifier now know the $lc_rest option, which makes sure -all letters following a captial letter are lower-cased. - -The count_sentences modifier now accepts (.?!) as -legitimate endings of a sentence - previously only (.) was -accepted - -The new unescape modifier is there to reverse the effects of the -escape modifier. This applies to the escape formats html, htmlall and -entity. - - default_template_handler_func - -The invocation of $smarty->$default_template_handler_func had to be -altered. Instead of a Smarty_Internal_Template, the fifth argument is -now provided with the Smarty instance. New footprint: - - -/** - * Default Template Handler - * - * called when Smarty's file: resource is unable to load a requested file - * - * @param string $type resource type (e.g. "file", "string", "eval", "resource") - * @param string $name resource name (e.g. "foo/bar.tpl") - * @param string &$content template's content - * @param integer &$modified template's modification time - * @param Smarty $smarty Smarty instance - * @return string|boolean path to file or boolean true if $content and $modified - * have been filled, boolean false if no default template - * could be loaded - */ -function default_template_handler_func($type, $name, &$content, &$modified, Smarty $smarty) { - if (false) { - // return corrected filepath - return "/tmp/some/foobar.tpl"; - } elseif (false) { - // return a template directly - $content = "the template source"; - $modified = time(); - return true; - } else { - // tell smarty that we failed - return false; - } -} - - Stuff done to the compiler - -Many performance improvements have happened internally. One notable -improvement is that all compiled templates are now handled as PHP -functions. This speeds up repeated templates tremendously, as each one -calls an (in-memory) PHP function instead of performing another file -include/scan. - -New Features - - Template syntax - - {block}..{/block} - -The {block} tag has a new hide option flag. It does suppress the block -content if no corresponding child block exists. -EXAMPLE: -parent.tpl -{block name=body hide} child content "{$smarty.block.child}" was -inserted {block} -In the above example the whole block will be suppressed if no child -block "body" is existing. - - {setfilter}..{/setfilter} - -The new {setfilter} block tag allows the definition of filters which -run on variable output. -SYNTAX: -{setfilter filter1|filter2|filter3....} -Smarty3 will lookup up matching filters in the following search order: -1. varibale filter plugin in plugins_dir. -2. a valid modifier. A modifier specification will also accept -additional parameter like filter2:'foo' -3. a PHP function -{/setfilter} will turn previous filter setting off again. -{setfilter} tags can be nested. -EXAMPLE: -{setfilter filter1} - {$foo} - {setfilter filter2} - {$bar} - {/setfilter} - {$buh} -{/setfilter} -{$blar} -In the above example filter1 will run on the output of $foo, filter2 -on $bar, filter1 again on $buh and no filter on $blar. -NOTES: -- {$foo nofilter} will suppress the filters -- These filters will run in addition to filters defined by -registerFilter('variable',...), autoLoadFilter('variable',...) and -defined default modifier. -- {setfilter} will effect only the current template, not included -subtemplates. - - Resource API - -Smarty 3.1 features a new approach to resource management. The -Smarty_Resource API allows simple, yet powerful integration of custom -resources for templates and configuration files. It offers simple -functions for loading data from a custom resource (e.g. database) as -well as define new template types adhering to the special -non-compiling (e,g, plain php) and non-compile-caching (e.g. eval: -resource type) resources. - -See demo/plugins/resource.mysql.php for an example custom database -resource. - -Note that old-fashioned registration of callbacks for resource -management has been deprecated but is still possible with SmartyBC. - - CacheResource API - -In line with the Resource API, the CacheResource API offers a more -comfortable handling of output-cache data. With the -Smarty_CacheResource_Custom accessing databases is made simple. With -the introduction of Smarty_CacheResource_KeyValueStore the -implementation of resources like memcache or APC became a no-brainer; -simple hash-based storage systems are now supporting hierarchical -output-caches. - -See demo/plugins/cacheresource.mysql.php for an example custom -database CacheResource. -See demo/plugins/cacheresource.memcache.php for an example custom -memcache CacheResource using the KeyValueStore helper. - -Note that old-fashioned registration of $cache_handler is not possible -anymore. As the functionality had not been ported to Smarty 3.0.x -properly, it has been dropped from 3.1 completely. - -Locking facilities have been implemented to avoid concurrent cache -generation. Enable cache locking by setting -$smarty->cache_locking = true; - - Relative Paths in Templates (File-Resource) - -As of Smarty 3.1 {include file="../foo.tpl"} and {include -file="./foo.tpl"} will resolve relative to the template they're in. -Relative paths are available with {include file="..."} and -{extends file="..."}. As $smarty->fetch('../foo.tpl') and -$smarty->fetch('./foo.tpl') cannot be relative to a template, an -exception is thrown. - - Addressing a specific $template_dir - -Smarty 3.1 introduces the $template_dir index notation. -$smarty->fetch('[foo]bar.tpl') and {include file="[foo]bar.tpl"} -require the template bar.tpl to be loaded from $template_dir['foo']; -Smarty::setTemplateDir() and Smarty::addTemplateDir() offer ways to -define indexes along with the actual directories. - - Mixing Resources in extends-Resource - -Taking the php extends: template resource one step further, it is now -possible to mix resources within an extends: call like -$smarty->fetch("extends:file:foo.tpl|db:bar.tpl"); - -To make eval: and string: resources available to the inheritance -chain, eval:base64:TPL_STRING and eval:urlencode:TPL_STRING have been -introduced. Supplying the base64 or urlencode flags will trigger -decoding the TPL_STRING in with either base64_decode() or urldecode(). - - extends-Resource in template inheritance - -Template based inheritance may now inherit from php's extends: -resource like {extends file="extends:foo.tpl|db:bar.tpl"}. - - New Smarty property escape_html - -$smarty->escape_html = true will autoescape all template variable -output by calling htmlspecialchars({$output}, ENT_QUOTES, -SMARTY_RESOURCE_CHAR_SET). -NOTE: -This is a compile time option. If you change the setting you must make -sure that the templates get recompiled. - - New option at Smarty property compile_check - -The automatic recompilation of modified templates can now be -controlled by the following settings: -$smarty->compile_check = COMPILECHECK_OFF (false) - template files -will not be checked -$smarty->compile_check = COMPILECHECK_ON (true) - template files will -always be checked -$smarty->compile_check = COMPILECHECK_CACHEMISS - template files will -be checked if caching is enabled and there is no existing cache file -or it has expired - - Automatic recompilation on Smarty version change - -Templates will now be automatically recompiled on Smarty version -changes to avoide incompatibillities in the compiled code. Compiled -template checked against the current setting of the SMARTY_VERSION -constant. - - default_config_handler_func() - -Analogous to the default_template_handler_func() -default_config_handler_func() has been introduced. - - default_plugin_handler_func() - -An optional default_plugin_handler_func() can be defined which gets called -by the compiler on tags which can't be resolved internally or by plugins. -The default_plugin_handler() can map tags to plugins on the fly. - -New getters/setters - -The following setters/getters will be part of the official -documentation, and will be strongly recommended. Direct property -access will still work for the foreseeable future... it will be -transparently routed through the setters/getters, and consequently a -bit slower. - -array|string getTemplateDir( [string $index] ) -replaces $smarty->template_dir; and $smarty->template_dir[$index]; -Smarty setTemplateDir( array|string $path ) -replaces $smarty->template_dir = "foo"; and $smarty->template_dir = -array("foo", "bar"); -Smarty addTemplateDir( array|string $path, [string $index]) -replaces $smarty->template_dir[] = "bar"; and -$smarty->template_dir[$index] = "bar"; - -array|string getConfigDir( [string $index] ) -replaces $smarty->config_dir; and $smarty->config_dir[$index]; -Smarty setConfigDir( array|string $path ) -replaces $smarty->config_dir = "foo"; and $smarty->config_dir = -array("foo", "bar"); -Smarty addConfigDir( array|string $path, [string $index]) -replaces $smarty->config_dir[] = "bar"; and -$smarty->config_dir[$index] = "bar"; - -array getPluginsDir() -replaces $smarty->plugins_dir; -Smarty setPluginsDir( array|string $path ) -replaces $smarty->plugins_dir = "foo"; -Smarty addPluginsDir( array|string $path ) -replaces $smarty->plugins_dir[] = "bar"; - -string getCompileDir() -replaces $smarty->compile_dir; -Smarty setCompileDir( string $path ) -replaces $smarty->compile_dir = "foo"; - -string getCacheDir() -replaces $smarty->cache_dir; -Smarty setCacheDir( string $path ) -replaces $smarty->cache_dir; diff --git a/smarty/Smarty-3.1.21/change_log.txt b/smarty/Smarty-3.1.21/change_log.txt @@ -1,2415 +0,0 @@ - ===== 3.1.22-dev ===== (xx.xx.2014) - ===== 3.1.21 ===== (18.10.2014) - 18.10.2014 - - composer moved to github - - add COMPOSER_RELEASE_NOTES - - 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 ===== (06.30.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_Template_Source and Smarty_Template_Compiled 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/smarty/Smarty-3.1.21/demo/configs/test.conf b/smarty/Smarty-3.1.21/demo/configs/test.conf @@ -1,5 +0,0 @@ -title = Welcome to Smarty! -cutoff_size = 40 - -[setup] -bold = true diff --git a/smarty/Smarty-3.1.21/demo/index.php b/smarty/Smarty-3.1.21/demo/index.php @@ -1,30 +0,0 @@ -<?php -/** - * Example Application - * - * @package Example-application - */ - -require '../libs/Smarty.class.php'; - -$smarty = new Smarty; - -//$smarty->force_compile = true; -$smarty->debugging = true; -$smarty->caching = true; -$smarty->cache_lifetime = 120; - -$smarty->assign("Name", "Fred Irving Johnathan Bradley Peppergill", true); -$smarty->assign("FirstName", array("John", "Mary", "James", "Henry")); -$smarty->assign("LastName", array("Doe", "Smith", "Johnson", "Case")); -$smarty->assign("Class", array(array("A", "B", "C", "D"), array("E", "F", "G", "H"), - array("I", "J", "K", "L"), array("M", "N", "O", "P"))); - -$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"), - array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234"))); - -$smarty->assign("option_values", array("NY", "NE", "KS", "IA", "OK", "TX")); -$smarty->assign("option_output", array("New York", "Nebraska", "Kansas", "Iowa", "Oklahoma", "Texas")); -$smarty->assign("option_selected", "NE"); - -$smarty->display('index.tpl'); diff --git a/smarty/Smarty-3.1.21/demo/plugins/cacheresource.apc.php b/smarty/Smarty-3.1.21/demo/plugins/cacheresource.apc.php @@ -1,83 +0,0 @@ -<?php - -/** - * APC CacheResource - * CacheResource Implementation based on the KeyValueStore API to use - * memcache as the storage resource for Smarty's output caching. - * * - * - * @package CacheResource-examples - * @author Uwe Tews - */ -class Smarty_CacheResource_Apc extends Smarty_CacheResource_KeyValueStore -{ - public function __construct() - { - // test if APC is present - if (!function_exists('apc_cache_info')) { - throw new Exception('APC Template Caching Error: APC is not installed'); - } - } - - /** - * 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 - * @return boolean true on success, false on failure - */ - protected function read(array $keys) - { - $_res = array(); - $res = apc_fetch($keys); - foreach ($res as $k => $v) { - $_res[$k] = $v; - } - - return $_res; - } - - /** - * Save values for a set of keys to cache - * - * @param array $keys list of values to save - * @param int $expire expiration time - * - * @return boolean true on success, false on failure - */ - protected function write(array $keys, $expire = null) - { - foreach ($keys as $k => $v) { - apc_store($k, $v, $expire); - } - - return true; - } - - /** - * Remove values from cache - * - * @param array $keys list of keys to delete - * - * @return boolean true on success, false on failure - */ - protected function delete(array $keys) - { - foreach ($keys as $k) { - apc_delete($k); - } - - return true; - } - - /** - * Remove *all* values from cache - * - * @return boolean true on success, false on failure - */ - protected function purge() - { - return apc_clear_cache('user'); - } -} diff --git a/smarty/Smarty-3.1.21/demo/plugins/cacheresource.memcache.php b/smarty/Smarty-3.1.21/demo/plugins/cacheresource.memcache.php @@ -1,97 +0,0 @@ -<?php - -/** - * Memcache CacheResource - * CacheResource Implementation based on the KeyValueStore API to use - * memcache as the storage resource for Smarty's output caching. - * Note that memcache has a limitation of 256 characters per cache-key. - * To avoid complications all cache-keys are translated to a sha1 hash. - * - * @package CacheResource-examples - * @author Rodney Rehm - */ -class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore -{ - /** - * memcache instance - * - * @var Memcache - */ - protected $memcache = null; - - public function __construct() - { - $this->memcache = new Memcache(); - $this->memcache->addServer('127.0.0.1', 11211); - } - - /** - * 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 - * @return boolean true on success, false on failure - */ - protected function read(array $keys) - { - $_keys = $lookup = array(); - foreach ($keys as $k) { - $_k = sha1($k); - $_keys[] = $_k; - $lookup[$_k] = $k; - } - $_res = array(); - $res = $this->memcache->get($_keys); - foreach ($res as $k => $v) { - $_res[$lookup[$k]] = $v; - } - - return $_res; - } - - /** - * Save values for a set of keys to cache - * - * @param array $keys list of values to save - * @param int $expire expiration time - * - * @return boolean true on success, false on failure - */ - protected function write(array $keys, $expire = null) - { - foreach ($keys as $k => $v) { - $k = sha1($k); - $this->memcache->set($k, $v, 0, $expire); - } - - return true; - } - - /** - * Remove values from cache - * - * @param array $keys list of keys to delete - * - * @return boolean true on success, false on failure - */ - protected function delete(array $keys) - { - foreach ($keys as $k) { - $k = sha1($k); - $this->memcache->delete($k); - } - - return true; - } - - /** - * Remove *all* values from cache - * - * @return boolean true on success, false on failure - */ - protected function purge() - { - $this->memcache->flush(); - } -} diff --git a/smarty/Smarty-3.1.21/demo/plugins/cacheresource.mysql.php b/smarty/Smarty-3.1.21/demo/plugins/cacheresource.mysql.php @@ -1,162 +0,0 @@ -<?php - -/** - * MySQL CacheResource - * CacheResource Implementation based on the Custom API to use - * MySQL as the storage resource for Smarty's output caching. - * Table definition: - * <pre>CREATE TABLE IF NOT EXISTS `output_cache` ( - * `id` CHAR(40) NOT NULL COMMENT 'sha1 hash', - * `name` VARCHAR(250) NOT NULL, - * `cache_id` VARCHAR(250) NULL DEFAULT NULL, - * `compile_id` VARCHAR(250) NULL DEFAULT NULL, - * `modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - * `content` LONGTEXT NOT NULL, - * PRIMARY KEY (`id`), - * INDEX(`name`), - * INDEX(`cache_id`), - * INDEX(`compile_id`), - * INDEX(`modified`) - * ) ENGINE = InnoDB;</pre> - * - * @package CacheResource-examples - * @author Rodney Rehm - */ -class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom -{ - // PDO instance - protected $db; - protected $fetch; - protected $fetchTimestamp; - protected $save; - - public function __construct() - { - try { - $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty"); - } - catch (PDOException $e) { - throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); - } - $this->fetch = $this->db->prepare('SELECT modified, content FROM output_cache WHERE id = :id'); - $this->fetchTimestamp = $this->db->prepare('SELECT modified FROM output_cache WHERE id = :id'); - $this->save = $this->db->prepare('REPLACE INTO output_cache (id, name, cache_id, compile_id, content) - VALUES (:id, :name, :cache_id, :compile_id, :content)'); - } - - /** - * 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 - */ - protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime) - { - $this->fetch->execute(array('id' => $id)); - $row = $this->fetch->fetch(); - $this->fetch->closeCursor(); - if ($row) { - $content = $row['content']; - $mtime = strtotime($row['modified']); - } else { - $content = null; - $mtime = null; - } - } - - /** - * Fetch cached content's modification timestamp from data source - * - * @note 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) - { - $this->fetchTimestamp->execute(array('id' => $id)); - $mtime = strtotime($this->fetchTimestamp->fetchColumn()); - $this->fetchTimestamp->closeCursor(); - - return $mtime; - } - - /** - * 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 time in seconds or null - * @param string $content content to cache - * - * @return boolean success - */ - protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content) - { - $this->save->execute(array( - 'id' => $id, - 'name' => $name, - 'cache_id' => $cache_id, - 'compile_id' => $compile_id, - 'content' => $content, - )); - - return !!$this->save->rowCount(); - } - - /** - * 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 or null - * - * @return integer number of deleted caches - */ - protected function delete($name, $cache_id, $compile_id, $exp_time) - { - // delete the whole cache - if ($name === null && $cache_id === null && $compile_id === null && $exp_time === null) { - // returning the number of deleted caches would require a second query to count them - $query = $this->db->query('TRUNCATE TABLE output_cache'); - - return - 1; - } - // build the filter - $where = array(); - // equal test name - if ($name !== null) { - $where[] = 'name = ' . $this->db->quote($name); - } - // equal test compile_id - if ($compile_id !== null) { - $where[] = 'compile_id = ' . $this->db->quote($compile_id); - } - // range test expiration time - if ($exp_time !== null) { - $where[] = 'modified < DATE_SUB(NOW(), INTERVAL ' . intval($exp_time) . ' SECOND)'; - } - // equal test cache_id and match sub-groups - if ($cache_id !== null) { - $where[] = '(cache_id = ' . $this->db->quote($cache_id) - . ' OR cache_id LIKE ' . $this->db->quote($cache_id . '|%') . ')'; - } - // run delete query - $query = $this->db->query('DELETE FROM output_cache WHERE ' . join(' AND ', $where)); - - return $query->rowCount(); - } -} diff --git a/smarty/Smarty-3.1.21/demo/plugins/resource.extendsall.php b/smarty/Smarty-3.1.21/demo/plugins/resource.extendsall.php @@ -1,60 +0,0 @@ -<?php - -/** - * Extends All Resource - * Resource Implementation modifying the extends-Resource to walk - * through the template_dirs and inherit all templates of the same name - * - * @package Resource-examples - * @author Rodney Rehm - */ -class Smarty_Resource_Extendsall extends Smarty_Internal_Resource_Extends -{ - /** - * 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) - { - $uid = ''; - $sources = array(); - $exists = true; - foreach ($_template->smarty->getTemplateDir() as $key => $directory) { - try { - $s = Smarty_Resource::source(null, $source->smarty, '[' . $key . ']' . $source->name); - if (!$s->exists) { - continue; - } - $sources[$s->uid] = $s; - $uid .= $s->filepath; - } - catch (SmartyException $e) { - } - } - - if (!$sources) { - $source->exists = false; - $source->template = $_template; - - return; - } - - $sources = array_reverse($sources, true); - reset($sources); - $s = current($sources); - - $source->components = $sources; - $source->filepath = $s->filepath; - $source->uid = sha1($uid); - $source->exists = $exists; - if ($_template && $_template->smarty->compile_check) { - $source->timestamp = $s->timestamp; - } - // need the template at getContent() - $source->template = $_template; - } -} diff --git a/smarty/Smarty-3.1.21/demo/plugins/resource.mysql.php b/smarty/Smarty-3.1.21/demo/plugins/resource.mysql.php @@ -1,81 +0,0 @@ -<?php - -/** - * MySQL Resource - * Resource Implementation based on the Custom API to use - * MySQL as the storage resource for Smarty's templates and configs. - * Table definition: - * <pre>CREATE TABLE IF NOT EXISTS `templates` ( - * `name` varchar(100) NOT NULL, - * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - * `source` text, - * PRIMARY KEY (`name`) - * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre> - * Demo data: - * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre> - * - * @package Resource-examples - * @author Rodney Rehm - */ -class Smarty_Resource_Mysql extends Smarty_Resource_Custom -{ - // PDO instance - protected $db; - // prepared fetch() statement - protected $fetch; - // prepared fetchTimestamp() statement - protected $mtime; - - public function __construct() - { - try { - $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty"); - } - catch (PDOException $e) { - throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); - } - $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name'); - $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name'); - } - - /** - * Fetch a template and its modification time from database - * - * @param string $name template name - * @param string $source template source - * @param integer $mtime template modification timestamp (epoch) - * - * @return void - */ - protected function fetch($name, &$source, &$mtime) - { - $this->fetch->execute(array('name' => $name)); - $row = $this->fetch->fetch(); - $this->fetch->closeCursor(); - if ($row) { - $source = $row['source']; - $mtime = strtotime($row['modified']); - } else { - $source = null; - $mtime = null; - } - } - - /** - * Fetch a template's modification time from database - * - * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the comple template source. - * - * @param string $name template name - * - * @return integer timestamp (epoch) the template was modified - */ - protected function fetchTimestamp($name) - { - $this->mtime->execute(array('name' => $name)); - $mtime = $this->mtime->fetchColumn(); - $this->mtime->closeCursor(); - - return strtotime($mtime); - } -} diff --git a/smarty/Smarty-3.1.21/demo/plugins/resource.mysqls.php b/smarty/Smarty-3.1.21/demo/plugins/resource.mysqls.php @@ -1,62 +0,0 @@ -<?php - -/** - * MySQL Resource - * Resource Implementation based on the Custom API to use - * MySQL as the storage resource for Smarty's templates and configs. - * Note that this MySQL implementation fetches the source and timestamps in - * a single database query, instead of two separate like resource.mysql.php does. - * Table definition: - * <pre>CREATE TABLE IF NOT EXISTS `templates` ( - * `name` varchar(100) NOT NULL, - * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - * `source` text, - * PRIMARY KEY (`name`) - * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre> - * Demo data: - * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre> - * - * @package Resource-examples - * @author Rodney Rehm - */ -class Smarty_Resource_Mysqls extends Smarty_Resource_Custom -{ - // PDO instance - protected $db; - // prepared fetch() statement - protected $fetch; - - public function __construct() - { - try { - $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty"); - } - catch (PDOException $e) { - throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); - } - $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name'); - } - - /** - * Fetch a template and its modification time from database - * - * @param string $name template name - * @param string $source template source - * @param integer $mtime template modification timestamp (epoch) - * - * @return void - */ - protected function fetch($name, &$source, &$mtime) - { - $this->fetch->execute(array('name' => $name)); - $row = $this->fetch->fetch(); - $this->fetch->closeCursor(); - if ($row) { - $source = $row['source']; - $mtime = strtotime($row['modified']); - } else { - $source = null; - $mtime = null; - } - } -} diff --git a/smarty/Smarty-3.1.21/demo/templates/footer.tpl b/smarty/Smarty-3.1.21/demo/templates/footer.tpl @@ -1,2 +0,0 @@ -</BODY> -</HTML> diff --git a/smarty/Smarty-3.1.21/demo/templates/header.tpl b/smarty/Smarty-3.1.21/demo/templates/header.tpl @@ -1,5 +0,0 @@ -<HTML> -<HEAD> - <TITLE>{$title} - {$Name}</TITLE> -</HEAD> -<BODY bgcolor="#ffffff"> diff --git a/smarty/Smarty-3.1.21/demo/templates/index.tpl b/smarty/Smarty-3.1.21/demo/templates/index.tpl @@ -1,87 +0,0 @@ -{config_load file="test.conf" section="setup"} -{include file="header.tpl" title=foo} - -<PRE> - -{* bold and title are read from the config file *} - {if #bold#}<b>{/if} - {* capitalize the first letters of each word of the title *} - Title: {#title#|capitalize} - {if #bold#}</b>{/if} - - The current date and time is {$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"} - - The value of global assigned variable $SCRIPT_NAME is {$SCRIPT_NAME} - - Example of accessing server environment variable SERVER_NAME: {$smarty.server.SERVER_NAME} - - The value of {ldelim}$Name{rdelim} is <b>{$Name}</b> - -variable modifier example of {ldelim}$Name|upper{rdelim} - -<b>{$Name|upper}</b> - - -An example of a section loop: - - {section name=outer - loop=$FirstName} - {if $smarty.section.outer.index is odd by 2} - {$smarty.section.outer.rownum} . {$FirstName[outer]} {$LastName[outer]} - {else} - {$smarty.section.outer.rownum} * {$FirstName[outer]} {$LastName[outer]} - {/if} - {sectionelse} - none - {/section} - - An example of section looped key values: - - {section name=sec1 loop=$contacts} - phone: {$contacts[sec1].phone} - <br> - - fax: {$contacts[sec1].fax} - <br> - - cell: {$contacts[sec1].cell} - <br> - {/section} - <p> - - testing strip tags - {strip} -<table border=0> - <tr> - <td> - <A HREF="{$SCRIPT_NAME}"> - <font color="red">This is a test </font> - </A> - </td> - </tr> -</table> - {/strip} - -</PRE> - -This is an example of the html_select_date function: - -<form> - {html_select_date start_year=1998 end_year=2010} -</form> - -This is an example of the html_select_time function: - -<form> - {html_select_time use_24_hours=false} -</form> - -This is an example of the html_options function: - -<form> - <select name=states> - {html_options values=$option_values selected=$option_selected output=$option_output} - </select> -</form> - -{include file="footer.tpl"} diff --git a/smarty/Smarty-3.1.21/libs/Smarty.class.php b/smarty/Smarty-3.1.21/libs/Smarty.class.php @@ -1,1680 +0,0 @@ -<?php -/** - * Project: Smarty: the PHP compiling template engine - * File: Smarty.class.php - * SVN: $Id: Smarty.class.php 4897 2014-10-14 22:29:58Z Uwe.Tews@googlemail.com $ - * This library is free software; you can redistribute it and/or - * 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 - * @version 3.1.21 - */ - -/** - * define shorthand directory separator constant - */ -if (!defined('DS')) { - define('DS', DIRECTORY_SEPARATOR); -} - -/** - * set SMARTY_DIR to absolute path to Smarty library files. - * Sets SMARTY_DIR only if user application has not already defined it. - */ -if (!defined('SMARTY_DIR')) { - define('SMARTY_DIR', dirname(__FILE__) . DS); -} - -/** - * set SMARTY_SYSPLUGINS_DIR to absolute path to Smarty internal plugins. - * Sets SMARTY_SYSPLUGINS_DIR only if user application has not already defined it. - */ -if (!defined('SMARTY_SYSPLUGINS_DIR')) { - define('SMARTY_SYSPLUGINS_DIR', SMARTY_DIR . 'sysplugins' . DS); -} -if (!defined('SMARTY_PLUGINS_DIR')) { - define('SMARTY_PLUGINS_DIR', SMARTY_DIR . 'plugins' . DS); -} -if (!defined('SMARTY_MBSTRING')) { - define('SMARTY_MBSTRING', function_exists('mb_split')); -} -if (!defined('SMARTY_RESOURCE_CHAR_SET')) { - // UTF-8 can only be done properly when mbstring is available! - /** - * @deprecated in favor of Smarty::$_CHARSET - */ - define('SMARTY_RESOURCE_CHAR_SET', SMARTY_MBSTRING ? 'UTF-8' : 'ISO-8859-1'); -} -if (!defined('SMARTY_RESOURCE_DATE_FORMAT')) { - /** - * @deprecated in favor of Smarty::$_DATE_FORMAT - */ - define('SMARTY_RESOURCE_DATE_FORMAT', '%b %e, %Y'); -} - -/** - * register the class autoloader - */ -if (!defined('SMARTY_SPL_AUTOLOAD')) { - define('SMARTY_SPL_AUTOLOAD', 0); -} - -if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false) { - $registeredAutoLoadFunctions = spl_autoload_functions(); - if (!isset($registeredAutoLoadFunctions['spl_autoload'])) { - spl_autoload_register(); - } -} else { - spl_autoload_register('smartyAutoload'); -} - -/** - * Load always needed external class files - */ -include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_data.php'; -include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_templatebase.php'; -include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_template.php'; -include_once SMARTY_SYSPLUGINS_DIR . 'smarty_resource.php'; -include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_resource_file.php'; -include_once SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php'; -include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_cacheresource_file.php'; - -/** - * This is the main Smarty class - * - * @package Smarty - */ -class Smarty extends Smarty_Internal_TemplateBase -{ - /**#@+ - * constant definitions - */ - - /** - * smarty version - */ - const SMARTY_VERSION = 'Smarty-3.1.21-dev'; - - /** - * define variable scopes - */ - const SCOPE_LOCAL = 0; - const SCOPE_PARENT = 1; - const SCOPE_ROOT = 2; - const SCOPE_GLOBAL = 3; - /** - * define caching modes - */ - const CACHING_OFF = 0; - const CACHING_LIFETIME_CURRENT = 1; - const CACHING_LIFETIME_SAVED = 2; - /** - * define constant for clearing cache files be saved expiration datees - */ - const CLEAR_EXPIRED = - 1; - - /** - * define compile check modes - */ - const COMPILECHECK_OFF = 0; - const COMPILECHECK_ON = 1; - const COMPILECHECK_CACHEMISS = 2; - /** - * modes for handling of "<?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'; - - /**#@-*/ - - /** - * assigned global tpl vars - */ - public static $global_tpl_vars = array(); - - /** - * error handler returned by set_error_hanlder() in Smarty::muteExpectedErrors() - */ - public static $_previous_error_handler = null; - /** - * contains directories outside of SMARTY_DIR that are to be muted by muteExpectedErrors() - */ - public static $_muted_directories = array(); - /** - * Flag denoting if Multibyte String functions are available - */ - public static $_MBSTRING = SMARTY_MBSTRING; - /** - * The character set to adhere to (e.g. "UTF-8") - */ - public static $_CHARSET = SMARTY_RESOURCE_CHAR_SET; - /** - * The date format to be used internally - * (accepts date() and strftime()) - */ - public static $_DATE_FORMAT = SMARTY_RESOURCE_DATE_FORMAT; - /** - * Flag denoting if PCRE should run in UTF-8 mode - */ - public static $_UTF8_MODIFIER = 'u'; - - /** - * Flag denoting if operating system is windows - */ - public static $_IS_WINDOWS = false; - - /**#@+ - * variables - */ - - /** - * auto literal on delimiters with whitspace - * - * @var boolean - */ - public $auto_literal = true; - /** - * display error on not assigned variables - * - * @var boolean - */ - public $error_unassigned = false; - /** - * look up relative filepaths in include_path - * - * @var boolean - */ - public $use_include_path = false; - /** - * template directory - * - * @var array - */ - private $template_dir = array(); - /** - * joined template directory string used in cache keys - * - * @var string - */ - public $joined_template_dir = null; - /** - * joined config directory string used in cache keys - * - * @var string - */ - public $joined_config_dir = null; - /** - * default template handler - * - * @var callable - */ - public $default_template_handler_func = null; - /** - * default config handler - * - * @var callable - */ - public $default_config_handler_func = null; - /** - * default plugin handler - * - * @var callable - */ - public $default_plugin_handler_func = null; - /** - * compile directory - * - * @var string - */ - private $compile_dir = null; - /** - * plugins directory - * - * @var array - */ - private $plugins_dir = array(); - /** - * cache directory - * - * @var string - */ - private $cache_dir = null; - /** - * config directory - * - * @var array - */ - private $config_dir = array(); - /** - * force template compiling? - * - * @var boolean - */ - public $force_compile = false; - /** - * check template for modifications? - * - * @var boolean - */ - public $compile_check = true; - /** - * use sub dirs for compiled/cached files? - * - * @var boolean - */ - public $use_sub_dirs = false; - /** - * allow ambiguous resources (that are made unique by the resource handler) - * - * @var boolean - */ - public $allow_ambiguous_resources = false; - /** - * caching enabled - * - * @var boolean - */ - public $caching = false; - /** - * merge compiled includes - * - * @var boolean - */ - public $merge_compiled_includes = false; - /** - * template inheritance merge compiled includes - * - * @var boolean - */ - public $inheritance_merge_compiled_includes = true; - /** - * cache lifetime in seconds - * - * @var integer - */ - public $cache_lifetime = 3600; - /** - * force cache file creation - * - * @var boolean - */ - public $force_cache = false; - /** - * Set this if you want different sets of cache files for the same - * templates. - * - * @var string - */ - public $cache_id = null; - /** - * Set this if you want different sets of compiled files for the same - * templates. - * - * @var string - */ - public $compile_id = null; - /** - * template left-delimiter - * - * @var string - */ - public $left_delimiter = "{"; - /** - * template right-delimiter - * - * @var string - */ - public $right_delimiter = "}"; - /**#@+ - * security - */ - /** - * class name - * This should be instance of Smarty_Security. - * - * @var string - * @see Smarty_Security - */ - public $security_class = 'Smarty_Security'; - /** - * implementation of security class - * - * @var Smarty_Security - */ - public $security_policy = null; - /** - * controls handling of PHP-blocks - * - * @var integer - */ - public $php_handling = self::PHP_PASSTHRU; - /** - * controls if the php template file resource is allowed - * - * @var bool - */ - public $allow_php_templates = false; - /** - * Should compiled-templates be prevented from being called directly? - * {@internal - * Currently used by Smarty_Internal_Template only. - * }} - * - * @var boolean - */ - public $direct_access_security = true; - /**#@-*/ - /** - * debug mode - * Setting this to true enables the debug-console. - * - * @var boolean - */ - public $debugging = false; - /** - * This determines if debugging is enable-able from the browser. - * <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 type - */ - public $smarty_debug_id = 'SMARTY_DEBUG'; - /** - * Path of debug template. - * - * @var string - */ - public $debug_tpl = null; - /** - * When set, smarty uses this value as error_reporting-level. - * - * @var int - */ - public $error_reporting = null; - /** - * Internal flag for getTags() - * - * @var boolean - */ - public $get_used_tags = false; - - /**#@+ - * config var settings - */ - - /** - * Controls whether variables with the same name overwrite each other. - * - * @var boolean - */ - public $config_overwrite = true; - /** - * Controls whether config values of on/true/yes and off/false/no get converted to boolean. - * - * @var boolean - */ - public $config_booleanize = true; - /** - * Controls whether hidden config sections/vars are read from the file. - * - * @var boolean - */ - public $config_read_hidden = false; - - /**#@-*/ - - /**#@+ - * resource locking - */ - - /** - * locking concurrent compiles - * - * @var boolean - */ - public $compile_locking = true; - /** - * Controls whether cache resources should emply locking mechanism - * - * @var boolean - */ - public $cache_locking = false; - /** - * seconds to wait for acquiring a lock before ignoring the write lock - * - * @var float - */ - public $locking_timeout = 10; - - /**#@-*/ - - /** - * global template functions - * - * @var array - */ - public $template_functions = array(); - /** - * resource type used if none given - * Must be an valid key of $registered_resources. - * - * @var string - */ - public $default_resource_type = 'file'; - /** - * caching type - * Must be an element of $cache_resource_types. - * - * @var string - */ - public $caching_type = 'file'; - /** - * internal config properties - * - * @var array - */ - public $properties = array(); - /** - * config type - * - * @var string - */ - public $default_config_type = 'file'; - /** - * cached template objects - * - * @var array - */ - public $template_objects = array(); - /** - * check If-Modified-Since headers - * - * @var boolean - */ - public $cache_modified_check = false; - /** - * registered plugins - * - * @var array - */ - public $registered_plugins = array(); - /** - * plugin search order - * - * @var array - */ - public $plugin_search_order = array('function', 'block', 'compiler', 'class'); - /** - * registered objects - * - * @var array - */ - public $registered_objects = array(); - /** - * registered classes - * - * @var array - */ - public $registered_classes = array(); - /** - * registered filters - * - * @var array - */ - public $registered_filters = array(); - /** - * registered resources - * - * @var array - */ - public $registered_resources = array(); - /** - * resource handler cache - * - * @var array - */ - public $_resource_handlers = array(); - /** - * registered cache resources - * - * @var array - */ - public $registered_cache_resources = array(); - /** - * cache resource handler cache - * - * @var array - */ - public $_cacheresource_handlers = array(); - /** - * autoload filter - * - * @var array - */ - public $autoload_filters = array(); - /** - * default modifier - * - * @var array - */ - public $default_modifiers = array(); - /** - * autoescape variable output - * - * @var boolean - */ - public $escape_html = false; - /** - * global internal smarty vars - * - * @var array - */ - public static $_smarty_vars = array(); - /** - * start time for execution time calculation - * - * @var int - */ - public $start_time = 0; - /** - * default file permissions - * - * @var int - */ - public $_file_perms = 0644; - /** - * default dir permissions - * - * @var int - */ - public $_dir_perms = 0771; - /** - * block tag hierarchy - * - * @var array - */ - public $_tag_stack = array(); - /** - * self pointer to Smarty object - * - * @var Smarty - */ - public $smarty; - /** - * required by the compiler for BC - * - * @var string - */ - public $_current_file = null; - /** - * internal flag to enable parser debugging - * - * @var bool - */ - public $_parserdebug = false; - /** - * Saved parameter of merged templates during compilation - * - * @var array - */ - public $merged_templates_func = array(); - - /** - * Cache of is_file results of loadPlugin() - * - * @var array - */ - public static $_is_file_cache= array(); - - /**#@-*/ - - /** - * Initialize new Smarty object - - */ - public function __construct() - { - // selfpointer needed by some other class methods - $this->smarty = $this; - if (is_callable('mb_internal_encoding')) { - mb_internal_encoding(Smarty::$_CHARSET); - } - $this->start_time = microtime(true); - // set default dirs - $this->setTemplateDir('.' . DS . 'templates' . DS) - ->setCompileDir('.' . DS . 'templates_c' . DS) - ->setPluginsDir(SMARTY_PLUGINS_DIR) - ->setCacheDir('.' . DS . 'cache' . DS) - ->setConfigDir('.' . DS . 'configs' . DS); - - $this->debug_tpl = 'file:' . dirname(__FILE__) . '/debug.tpl'; - if (isset($_SERVER['SCRIPT_NAME'])) { - $this->assignGlobal('SCRIPT_NAME', $_SERVER['SCRIPT_NAME']); - } - } - - /** - * Class destructor - */ - public function __destruct() - { - // intentionally left blank - } - - /** - * <<magic>> set selfpointer on cloned object - */ - public function __clone() - { - $this->smarty = $this; - } - - /** - * <<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) - { - $allowed = array( - 'template_dir' => 'getTemplateDir', - 'config_dir' => 'getConfigDir', - 'plugins_dir' => 'getPluginsDir', - 'compile_dir' => 'getCompileDir', - 'cache_dir' => 'getCacheDir', - ); - - if (isset($allowed[$name])) { - return $this->{$allowed[$name]}(); - } else { - trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE); - } - } - - /** - * <<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) - { - $allowed = array( - 'template_dir' => 'setTemplateDir', - 'config_dir' => 'setConfigDir', - 'plugins_dir' => 'setPluginsDir', - 'compile_dir' => 'setCompileDir', - 'cache_dir' => 'setCacheDir', - ); - - if (isset($allowed[$name])) { - $this->{$allowed[$name]}($value); - } else { - trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE); - } - } - - /** - * Check if a template resource exists - * - * @param string $resource_name template name - * - * @return boolean status - */ - public function templateExists($resource_name) - { - // create template object - $save = $this->template_objects; - $tpl = new $this->template_class($resource_name, $this); - // check if it does exists - $result = $tpl->source->exists; - $this->template_objects = $save; - - return $result; - } - - /** - * Returns a single or all global variables - * - * @param string $varname variable name or null - * - * @return string variable value or or array of variables - */ - public function getGlobal($varname = null) - { - if (isset($varname)) { - if (isset(self::$global_tpl_vars[$varname])) { - return self::$global_tpl_vars[$varname]->value; - } else { - return ''; - } - } else { - $_result = array(); - foreach (self::$global_tpl_vars AS $key => $var) { - $_result[$key] = $var->value; - } - - return $_result; - } - } - - /** - * Empty cache folder - * - * @param integer $exp_time expiration time - * @param string $type resource type - * - * @return integer number of cache files deleted - */ - public function clearAllCache($exp_time = null, $type = null) - { - // load cache resource and call clearAll - $_cache_resource = Smarty_CacheResource::load($this, $type); - Smarty_CacheResource::invalidLoadedCache($this); - - return $_cache_resource->clearAll($this, $exp_time); - } - - /** - * Empty cache for a specific template - * - * @param string $template_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer $exp_time expiration time - * @param string $type resource type - * - * @return integer number of cache files deleted - */ - public function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) - { - // load cache resource and call clear - $_cache_resource = Smarty_CacheResource::load($this, $type); - Smarty_CacheResource::invalidLoadedCache($this); - - return $_cache_resource->clear($this, $template_name, $cache_id, $compile_id, $exp_time); - } - - /** - * Loads security class and enables security - * - * @param string|Smarty_Security $security_class if a string is used, it must be class-name - * - * @return Smarty current Smarty instance for chaining - * @throws SmartyException when an invalid class name is provided - */ - public function enableSecurity($security_class = null) - { - if ($security_class instanceof Smarty_Security) { - $this->security_policy = $security_class; - - return $this; - } elseif (is_object($security_class)) { - throw new SmartyException("Class '" . get_class($security_class) . "' must extend Smarty_Security."); - } - if ($security_class == null) { - $security_class = $this->security_class; - } - if (!class_exists($security_class)) { - throw new SmartyException("Security class '$security_class' is not defined"); - } elseif ($security_class !== 'Smarty_Security' && !is_subclass_of($security_class, 'Smarty_Security')) { - throw new SmartyException("Class '$security_class' must extend Smarty_Security."); - } else { - $this->security_policy = new $security_class($this); - } - - return $this; - } - - /** - * Disable security - * - * @return Smarty current Smarty instance for chaining - */ - public function disableSecurity() - { - $this->security_policy = null; - - return $this; - } - - /** - * Set template directory - * - * @param string|array $template_dir directory(s) of template sources - * - * @return Smarty current Smarty instance for chaining - */ - public function setTemplateDir($template_dir) - { - $this->template_dir = array(); - foreach ((array) $template_dir as $k => $v) { - $this->template_dir[$k] = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS; - } - - $this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir); - - return $this; - } - - /** - * Add template directory(s) - * - * @param string|array $template_dir directory(s) of template sources - * @param string $key of the array element to assign the template dir to - * - * @return Smarty current Smarty instance for chaining - * @throws SmartyException when the given template directory is not valid - */ - public function addTemplateDir($template_dir, $key = null) - { - // make sure we're dealing with an array - $this->template_dir = (array) $this->template_dir; - - if (is_array($template_dir)) { - foreach ($template_dir as $k => $v) { - $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS; - if (is_int($k)) { - // indexes are not merged but appended - $this->template_dir[] = $v; - } else { - // string indexes are overridden - $this->template_dir[$k] = $v; - } - } - } else { - $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($template_dir, '/\\')) . DS; - if ($key !== null) { - // override directory at specified index - $this->template_dir[$key] = $v; - } else { - // append new directory - $this->template_dir[] = $v; - } - } - $this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir); - - return $this; - } - - /** - * Get template directories - * - * @param mixed $index index of directory to get, null to get all - * - * @return array|string list of template directories, or directory of $index - */ - public function getTemplateDir($index = null) - { - if ($index !== null) { - return isset($this->template_dir[$index]) ? $this->template_dir[$index] : null; - } - - return (array) $this->template_dir; - } - - /** - * Set config directory - * - * @param $config_dir - * - * @return Smarty current Smarty instance for chaining - */ - public function setConfigDir($config_dir) - { - $this->config_dir = array(); - foreach ((array) $config_dir as $k => $v) { - $this->config_dir[$k] = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS; - } - - $this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir); - - return $this; - } - - /** - * Add config directory(s) - * - * @param string|array $config_dir directory(s) of config sources - * @param mixed $key key of the array element to assign the config dir to - * - * @return Smarty current Smarty instance for chaining - */ - public function addConfigDir($config_dir, $key = null) - { - // make sure we're dealing with an array - $this->config_dir = (array) $this->config_dir; - - if (is_array($config_dir)) { - foreach ($config_dir as $k => $v) { - $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS; - if (is_int($k)) { - // indexes are not merged but appended - $this->config_dir[] = $v; - } else { - // string indexes are overridden - $this->config_dir[$k] = $v; - } - } - } else { - $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($config_dir, '/\\')) . DS; - if ($key !== null) { - // override directory at specified index - $this->config_dir[$key] = rtrim($v, '/\\') . DS; - } else { - // append new directory - $this->config_dir[] = rtrim($v, '/\\') . DS; - } - } - - $this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir); - - return $this; - } - - /** - * Get config directory - * - * @param mixed $index index of directory to get, null to get all - * - * @return array|string configuration directory - */ - public function getConfigDir($index = null) - { - if ($index !== null) { - return isset($this->config_dir[$index]) ? $this->config_dir[$index] : null; - } - - return (array) $this->config_dir; - } - - /** - * Set plugins directory - * - * @param string|array $plugins_dir directory(s) of plugins - * - * @return Smarty current Smarty instance for chaining - */ - public function setPluginsDir($plugins_dir) - { - $this->plugins_dir = array(); - foreach ((array) $plugins_dir as $k => $v) { - $this->plugins_dir[$k] = rtrim($v, '/\\') . DS; - } - - return $this; - } - - /** - * Adds directory of plugin files - * - * @param $plugins_dir - * - * @return Smarty current Smarty instance for chaining - */ - public function addPluginsDir($plugins_dir) - { - // make sure we're dealing with an array - $this->plugins_dir = (array) $this->plugins_dir; - - if (is_array($plugins_dir)) { - foreach ($plugins_dir as $k => $v) { - if (is_int($k)) { - // indexes are not merged but appended - $this->plugins_dir[] = rtrim($v, '/\\') . DS; - } else { - // string indexes are overridden - $this->plugins_dir[$k] = rtrim($v, '/\\') . DS; - } - } - } else { - // append new directory - $this->plugins_dir[] = rtrim($plugins_dir, '/\\') . DS; - } - - $this->plugins_dir = array_unique($this->plugins_dir); - - return $this; - } - - /** - * Get plugin directories - * - * @return array list of plugin directories - */ - public function getPluginsDir() - { - return (array) $this->plugins_dir; - } - - /** - * Set compile directory - * - * @param string $compile_dir directory to store compiled templates in - * - * @return Smarty current Smarty instance for chaining - */ - public function setCompileDir($compile_dir) - { - $this->compile_dir = rtrim($compile_dir, '/\\') . DS; - if (!isset(Smarty::$_muted_directories[$this->compile_dir])) { - Smarty::$_muted_directories[$this->compile_dir] = null; - } - - return $this; - } - - /** - * Get compiled directory - * - * @return string path to compiled templates - */ - public function getCompileDir() - { - return $this->compile_dir; - } - - /** - * Set cache directory - * - * @param string $cache_dir directory to store cached templates in - * - * @return Smarty current Smarty instance for chaining - */ - public function setCacheDir($cache_dir) - { - $this->cache_dir = rtrim($cache_dir, '/\\') . DS; - if (!isset(Smarty::$_muted_directories[$this->cache_dir])) { - Smarty::$_muted_directories[$this->cache_dir] = null; - } - - return $this; - } - - /** - * Get cache directory - * - * @return string path of cache directory - */ - public function getCacheDir() - { - return $this->cache_dir; - } - - /** - * Set default modifiers - * - * @param array|string $modifiers modifier or list of modifiers to set - * - * @return Smarty current Smarty instance for chaining - */ - public function setDefaultModifiers($modifiers) - { - $this->default_modifiers = (array) $modifiers; - - return $this; - } - - /** - * Add default modifiers - * - * @param array|string $modifiers modifier or list of modifiers to add - * - * @return Smarty current Smarty instance for chaining - */ - public function addDefaultModifiers($modifiers) - { - if (is_array($modifiers)) { - $this->default_modifiers = array_merge($this->default_modifiers, $modifiers); - } else { - $this->default_modifiers[] = $modifiers; - } - - return $this; - } - - /** - * Get default modifiers - * - * @return array list of default modifiers - */ - public function getDefaultModifiers() - { - return $this->default_modifiers; - } - - /** - * Set autoload filters - * - * @param array $filters filters to load automatically - * @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types - * - * @return Smarty current Smarty instance for chaining - */ - public function setAutoloadFilters($filters, $type = null) - { - if ($type !== null) { - $this->autoload_filters[$type] = (array) $filters; - } else { - $this->autoload_filters = (array) $filters; - } - - return $this; - } - - /** - * Add autoload filters - * - * @param array $filters filters to load automatically - * @param string $type "pre", "output", … specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types - * - * @return Smarty current Smarty instance for chaining - */ - public function addAutoloadFilters($filters, $type = null) - { - if ($type !== null) { - if (!empty($this->autoload_filters[$type])) { - $this->autoload_filters[$type] = array_merge($this->autoload_filters[$type], (array) $filters); - } else { - $this->autoload_filters[$type] = (array) $filters; - } - } else { - foreach ((array) $filters as $key => $value) { - if (!empty($this->autoload_filters[$key])) { - $this->autoload_filters[$key] = array_merge($this->autoload_filters[$key], (array) $value); - } else { - $this->autoload_filters[$key] = (array) $value; - } - } - } - - return $this; - } - - /** - * Get autoload filters - * - * @param string $type type of filter to get autoloads for. Defaults to all autoload filters - * - * @return array array( 'type1' => array( 'filter1', 'filter2', … ) ) or array( 'filter1', 'filter2', …) if $type was specified - */ - public function getAutoloadFilters($type = null) - { - if ($type !== null) { - return isset($this->autoload_filters[$type]) ? $this->autoload_filters[$type] : array(); - } - - return $this->autoload_filters; - } - - /** - * return name of debugging template - * - * @return string - */ - public function getDebugTemplate() - { - return $this->debug_tpl; - } - - /** - * set the debug template - * - * @param string $tpl_name - * - * @return Smarty current Smarty instance for chaining - * @throws SmartyException if file is not readable - */ - public function setDebugTemplate($tpl_name) - { - if (!is_readable($tpl_name)) { - throw new SmartyException("Unknown file '{$tpl_name}'"); - } - $this->debug_tpl = $tpl_name; - - return $this; - } - - /** - * creates a template object - * - * @param string $template the resource handle of the template file - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param object $parent next higher level of Smarty variables - * @param boolean $do_clone flag is Smarty object shall be cloned - * - * @return object template object - */ - public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true) - { - if ($cache_id !== null && (is_object($cache_id) || is_array($cache_id))) { - $parent = $cache_id; - $cache_id = null; - } - if ($parent !== null && is_array($parent)) { - $data = $parent; - $parent = null; - } else { - $data = null; - } - // default to cache_id and compile_id of Smarty object - $cache_id = $cache_id === null ? $this->cache_id : $cache_id; - $compile_id = $compile_id === null ? $this->compile_id : $compile_id; - // already in template cache? - if ($this->allow_ambiguous_resources) { - $_templateId = Smarty_Resource::getUniqueTemplateName($this, $template) . $cache_id . $compile_id; - } else { - $_templateId = $this->joined_template_dir . '#' . $template . $cache_id . $compile_id; - } - if (isset($_templateId[150])) { - $_templateId = sha1($_templateId); - } - if ($do_clone) { - if (isset($this->template_objects[$_templateId])) { - // return cached template object - $tpl = clone $this->template_objects[$_templateId]; - $tpl->smarty = clone $tpl->smarty; - $tpl->parent = $parent; - $tpl->tpl_vars = array(); - $tpl->config_vars = array(); - } else { - $tpl = new $this->template_class($template, clone $this, $parent, $cache_id, $compile_id); - } - } else { - if (isset($this->template_objects[$_templateId])) { - // return cached template object - $tpl = $this->template_objects[$_templateId]; - $tpl->parent = $parent; - $tpl->tpl_vars = array(); - $tpl->config_vars = array(); - } else { - $tpl = new $this->template_class($template, $this, $parent, $cache_id, $compile_id); - } - } - // fill data if present - if (!empty($data) && is_array($data)) { - // set up variable values - foreach ($data as $_key => $_val) { - $tpl->tpl_vars[$_key] = new Smarty_variable($_val); - } - } - - return $tpl; - } - - /** - * Takes unknown classes and loads plugin files for them - * class name format: Smarty_PluginType_PluginName - * plugin filename format: plugintype.pluginname.php - * - * @param string $plugin_name class plugin name to load - * @param bool $check check if already loaded - * - * @throws SmartyException - * @return string |boolean filepath of loaded file or false - */ - public function loadPlugin($plugin_name, $check = true) - { - // if function or class exists, exit silently (already loaded) - if ($check && (is_callable($plugin_name) || class_exists($plugin_name, false))) { - return true; - } - // Plugin name is expected to be: Smarty_[Type]_[Name] - $_name_parts = explode('_', $plugin_name, 3); - // class name must have three parts to be valid plugin - // count($_name_parts) < 3 === !isset($_name_parts[2]) - if (!isset($_name_parts[2]) || strtolower($_name_parts[0]) !== 'smarty') { - throw new SmartyException("plugin {$plugin_name} is not a valid name format"); - } - // if type is "internal", get plugin from sysplugins - if (strtolower($_name_parts[1]) == 'internal') { - $file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php'; - if (isset(self::$_is_file_cache[$file]) ? self::$_is_file_cache[$file] : self::$_is_file_cache[$file] = is_file($file)) { - require_once($file); - return $file; - } else { - return false; - } - } - // plugin filename is expected to be: [type].[name].php - $_plugin_filename = "{$_name_parts[1]}.{$_name_parts[2]}.php"; - - $_stream_resolve_include_path = function_exists('stream_resolve_include_path'); - - // loop through plugin dirs and find the plugin - foreach ($this->getPluginsDir() as $_plugin_dir) { - $names = array( - $_plugin_dir . $_plugin_filename, - $_plugin_dir . strtolower($_plugin_filename), - ); - foreach ($names as $file) { - if (isset(self::$_is_file_cache[$file]) ? self::$_is_file_cache[$file] : self::$_is_file_cache[$file] = is_file($file)) { - require_once($file); - return $file; - } - if ($this->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) { - // try PHP include_path - if ($_stream_resolve_include_path) { - $file = stream_resolve_include_path($file); - } else { - $file = Smarty_Internal_Get_Include_Path::getIncludePath($file); - } - - if ($file !== false) { - require_once($file); - - return $file; - } - } - } - } - // no plugin loaded - return false; - } - - /** - * Compile all template files - * - * @param string $extension file extension - * @param bool $force_compile force all to recompile - * @param int $time_limit - * @param int $max_errors - * - * @return integer number of template files recompiled - */ - public function compileAllTemplates($extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null) - { - return Smarty_Internal_Utility::compileAllTemplates($extension, $force_compile, $time_limit, $max_errors, $this); - } - - /** - * Compile all config files - * - * @param string $extension file extension - * @param bool $force_compile force all to recompile - * @param int $time_limit - * @param int $max_errors - * - * @return integer number of template files recompiled - */ - public function compileAllConfig($extension = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null) - { - return Smarty_Internal_Utility::compileAllConfig($extension, $force_compile, $time_limit, $max_errors, $this); - } - - /** - * Delete compiled template file - * - * @param string $resource_name template name - * @param string $compile_id compile id - * @param integer $exp_time expiration time - * - * @return integer number of template files deleted - */ - public function clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) - { - return Smarty_Internal_Utility::clearCompiledTemplate($resource_name, $compile_id, $exp_time, $this); - } - - /** - * Return array of tag/attributes of all tags used by an template - * - * @param Smarty_Internal_Template $template - * - * @return array of tag/attributes - */ - public function getTags(Smarty_Internal_Template $template) - { - return Smarty_Internal_Utility::getTags($template); - } - - /** - * Run installation test - * - * @param array $errors Array to write errors into, rather than outputting them - * - * @return boolean true if setup is fine, false if something is wrong - */ - public function testInstall(&$errors = null) - { - return Smarty_Internal_Utility::testInstall($this, $errors); - } - - /** - * Error Handler to mute expected messages - * - * @link http://php.net/set_error_handler - * - * @param integer $errno Error level - * @param $errstr - * @param $errfile - * @param $errline - * @param $errcontext - * - * @return boolean - */ - public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) - { - $_is_muted_directory = false; - - // add the SMARTY_DIR to the list of muted directories - if (!isset(Smarty::$_muted_directories[SMARTY_DIR])) { - $smarty_dir = realpath(SMARTY_DIR); - if ($smarty_dir !== false) { - Smarty::$_muted_directories[SMARTY_DIR] = array( - 'file' => $smarty_dir, - 'length' => strlen($smarty_dir), - ); - } - } - - // walk the muted directories and test against $errfile - foreach (Smarty::$_muted_directories as $key => &$dir) { - if (!$dir) { - // resolve directory and length for speedy comparisons - $file = realpath($key); - if ($file === false) { - // this directory does not exist, remove and skip it - unset(Smarty::$_muted_directories[$key]); - continue; - } - $dir = array( - 'file' => $file, - 'length' => strlen($file), - ); - } - if (!strncmp($errfile, $dir['file'], $dir['length'])) { - $_is_muted_directory = true; - break; - } - } - - // pass to next error handler if this error did not occur inside SMARTY_DIR - // or the error was within smarty but masked to be ignored - if (!$_is_muted_directory || ($errno && $errno & error_reporting())) { - if (Smarty::$_previous_error_handler) { - return call_user_func(Smarty::$_previous_error_handler, $errno, $errstr, $errfile, $errline, $errcontext); - } else { - return false; - } - } - } - - /** - * Enable error handler to mute expected messages - * - * @return void - */ - public static function muteExpectedErrors() - { - /* - error muting is done because some people implemented custom error_handlers using - http://php.net/set_error_handler and for some reason did not understand the following paragraph: - - It is important to remember that the standard PHP error handler is completely bypassed for the - error types specified by error_types unless the callback function returns FALSE. - error_reporting() settings will have no effect and your error handler will be called regardless - - however you are still able to read the current value of error_reporting and act appropriately. - Of particular note is that this value will be 0 if the statement that caused the error was - prepended by the @ error-control operator. - - Smarty deliberately uses @filemtime() over file_exists() and filemtime() in some places. Reasons include - - @filemtime() is almost twice as fast as using an additional file_exists() - - between file_exists() and filemtime() a possible race condition is opened, - which does not exist using the simple @filemtime() approach. - */ - $error_handler = array('Smarty', 'mutingErrorHandler'); - $previous = set_error_handler($error_handler); - - // avoid dead loops - if ($previous !== $error_handler) { - Smarty::$_previous_error_handler = $previous; - } - } - - /** - * Disable error handler muting expected messages - * - * @return void - */ - public static function unmuteExpectedErrors() - { - restore_error_handler(); - } -} - -// Check if we're running on windows -Smarty::$_IS_WINDOWS = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'; - -// let PCRE (preg_*) treat strings as ISO-8859-1 if we're not dealing with UTF-8 -if (Smarty::$_CHARSET !== 'UTF-8') { - Smarty::$_UTF8_MODIFIER = ''; -} - -/** - * Smarty exception class - * - * @package Smarty - */ -class SmartyException extends Exception -{ - public static $escape = false; - - public function __toString() - { - return ' --> Smarty: ' . (self::$escape ? htmlentities($this->message) : $this->message) . ' <-- '; - } -} - -/** - * Smarty compiler exception class - * - * @package Smarty - */ -class SmartyCompilerException extends SmartyException -{ - public function __toString() - { - return ' --> Smarty Compiler: ' . $this->message . ' <-- '; - } - - /** - * The line number of the template error - * - * @type int|null - */ - public $line = null; - /** - * The template source snippet relating to the error - * - * @type string|null - */ - public $source = null; - /** - * The raw text of the error message - * - * @type string|null - */ - public $desc = null; - /** - * The resource identifier or template name - * - * @type string|null - */ - public $template = null; -} - -/** - * Autoloader - */ -function smartyAutoload($class) -{ - $_class = strtolower($class); - static $_classes = array( - 'smarty_config_source' => true, - 'smarty_config_compiled' => true, - 'smarty_security' => true, - 'smarty_cacheresource' => true, - 'smarty_cacheresource_custom' => true, - 'smarty_cacheresource_keyvaluestore' => true, - 'smarty_resource' => true, - 'smarty_resource_custom' => true, - 'smarty_resource_uncompiled' => true, - 'smarty_resource_recompiled' => true, - ); - - if (!strncmp($_class, 'smarty_internal_', 16) || isset($_classes[$_class])) { - include SMARTY_SYSPLUGINS_DIR . $_class . '.php'; - } -} diff --git a/smarty/Smarty-3.1.21/libs/SmartyBC.class.php b/smarty/Smarty-3.1.21/libs/SmartyBC.class.php @@ -1,467 +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; - - /** - * 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); - // register {php} tag - $this->registerPlugin('block', 'php', 'smarty_php_tag'); - } - - /** - * 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); - } -} - -/** - * Smarty {php}{/php} block function - * - * @param array $params parameter list - * @param string $content contents of the block - * @param object $template template object - * @param boolean &$repeat repeat flag - * - * @return string content re-formatted - */ -function smarty_php_tag($params, $content, $template, &$repeat) -{ - eval($content); - - return ''; -} diff --git a/smarty/Smarty-3.1.21/libs/debug.tpl b/smarty/Smarty-3.1.21/libs/debug.tpl @@ -1,137 +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, 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; - } - - 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; - width: 50%; - } - - td { - color: green; - } - - .odd { - background-color: #eeeeee; - } - - .even { - background-color: #fafafa; - } - - .exectime { - font-size: 0.8em; - font-style: italic; - } - - #table_assigned_vars th { - color: blue; - } - - #table_config_vars th { - color: maroon; - } - - {/literal} - </style> - </head> - <body> - - <h1>Smarty Debug Console - - {if isset($template_name)}{$template_name|debug_print_var nofilter}{else}Total Time {$execution_time|string_format:"%.5f"}{/if}</h1> - - {if !empty($template_data)} - <h2>included templates &amp; config files (load time in seconds)</h2> - <div> - {foreach $template_data as $template} - <font color=brown>{$template.name}</font> - <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}"> - <th>${$vars@key|escape:'html'}</th> - <td>{$vars|debug_print_var nofilter}</td> - </tr> - {/foreach} - </table> - - <h2>assigned config file variables (outer template scope)</h2> - - <table id="table_config_vars"> - {foreach $config_vars as $vars} - <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}"> - <th>{$vars@key|escape:'html'}</th> - <td>{$vars|debug_print_var nofilter}</td> - </tr> - {/foreach} - - </table> - </body> - </html> -{/capture} -<script type="text/javascript"> - {$id = $template_name|default:''|md5} - _smarty_console = window.open("", "console{$id}", "width=680,height=600,resizable,scrollbars=yes"); - _smarty_console.document.write("{$debug_output|escape:'javascript' nofilter}"); - _smarty_console.document.close(); -</script> diff --git a/smarty/Smarty-3.1.21/libs/plugins/block.textformat.php b/smarty/Smarty-3.1.21/libs/plugins/block.textformat.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/function.counter.php b/smarty/Smarty-3.1.21/libs/plugins/function.counter.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/function.cycle.php b/smarty/Smarty-3.1.21/libs/plugins/function.cycle.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/function.fetch.php b/smarty/Smarty-3.1.21/libs/plugins/function.fetch.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/function.html_checkboxes.php b/smarty/Smarty-3.1.21/libs/plugins/function.html_checkboxes.php @@ -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 &nbsp; - * - 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/smarty/Smarty-3.1.21/libs/plugins/function.html_image.php b/smarty/Smarty-3.1.21/libs/plugins/function.html_image.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/function.html_options.php b/smarty/Smarty-3.1.21/libs/plugins/function.html_options.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/function.html_radios.php b/smarty/Smarty-3.1.21/libs/plugins/function.html_radios.php @@ -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 &nbsp; - * - 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/smarty/Smarty-3.1.21/libs/plugins/function.html_select_date.php b/smarty/Smarty-3.1.21/libs/plugins/function.html_select_date.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/function.html_select_time.php b/smarty/Smarty-3.1.21/libs/plugins/function.html_select_time.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/function.html_table.php b/smarty/Smarty-3.1.21/libs/plugins/function.html_table.php @@ -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 = '&nbsp;'; - $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/smarty/Smarty-3.1.21/libs/plugins/function.mailto.php b/smarty/Smarty-3.1.21/libs/plugins/function.mailto.php @@ -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 = "&#109;&#97;&#105;&#108;&#116;&#111;&#58;"; - - return '<a href="' . $mailto . $address_encode . '" ' . $extra . '>' . $text_encode . '</a>'; - } else { - // no encoding - return '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>'; - } -} diff --git a/smarty/Smarty-3.1.21/libs/plugins/function.math.php b/smarty/Smarty-3.1.21/libs/plugins/function.math.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifier.capitalize.php b/smarty/Smarty-3.1.21/libs/plugins/modifier.capitalize.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifier.date_format.php b/smarty/Smarty-3.1.21/libs/plugins/modifier.date_format.php @@ -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; - } - /** - * Include the {@link shared.make_timestamp.php} plugin - */ - require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); - if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') { - $timestamp = smarty_make_timestamp($string); - } elseif ($default_date != '') { - $timestamp = smarty_make_timestamp($default_date); - } else { - return; - } - if ($formatter == 'strftime' || ($formatter == 'auto' && strpos($format, '%') !== false)) { - if (DS == '\\') { - $_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T'); - $_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S'); - if (strpos($format, '%e') !== false) { - $_win_from[] = '%e'; - $_win_to[] = sprintf('%\' 2d', date('j', $timestamp)); - } - if (strpos($format, '%l') !== false) { - $_win_from[] = '%l'; - $_win_to[] = sprintf('%\' 2d', date('h', $timestamp)); - } - $format = str_replace($_win_from, $_win_to, $format); - } - - return strftime($format, $timestamp); - } else { - return date($format, $timestamp); - } -} diff --git a/smarty/Smarty-3.1.21/libs/plugins/modifier.debug_print_var.php b/smarty/Smarty-3.1.21/libs/plugins/modifier.debug_print_var.php @@ -1,104 +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 integer $depth maximum recursion depth if $var is an array - * @param integer $length maximum string length if $var is a string - * - * @return string - */ -function smarty_modifier_debug_print_var($var, $depth = 0, $length = 40) -{ - $_replace = array("\n" => '<i>\n</i>', - "\r" => '<i>\r</i>', - "\t" => '<i>\t</i>' - ); - - switch (gettype($var)) { - case 'array' : - $results = '<b>Array (' . count($var) . ')</b>'; - foreach ($var as $curr_key => $curr_val) { - $results .= '<br>' . str_repeat('&nbsp;', $depth * 2) - . '<b>' . strtr($curr_key, $_replace) . '</b> =&gt; ' - . smarty_modifier_debug_print_var($curr_val, ++$depth, $length); - $depth --; - } - break; - - case 'object' : - $object_vars = get_object_vars($var); - $results = '<b>' . get_class($var) . ' Object (' . count($object_vars) . ')</b>'; - foreach ($object_vars as $curr_key => $curr_val) { - $results .= '<br>' . str_repeat('&nbsp;', $depth * 2) - . '<b> -&gt;' . strtr($curr_key, $_replace) . '</b> = ' - . smarty_modifier_debug_print_var($curr_val, ++$depth, $length); - $depth --; - } - break; - - case 'boolean' : - case 'NULL' : - case 'resource' : - if (true === $var) { - $results = 'true'; - } elseif (false === $var) { - $results = 'false'; - } elseif (null === $var) { - $results = 'null'; - } else { - $results = htmlspecialchars((string) $var); - } - $results = '<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/smarty/Smarty-3.1.21/libs/plugins/modifier.escape.php b/smarty/Smarty-3.1.21/libs/plugins/modifier.escape.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifier.regex_replace.php b/smarty/Smarty-3.1.21/libs/plugins/modifier.regex_replace.php @@ -1,57 +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 - * - * @return string - */ -function smarty_modifier_regex_replace($string, $search, $replace) -{ - if (is_array($search)) { - foreach ($search as $idx => $s) { - $search[$idx] = _smarty_regex_replace_check($s); - } - } else { - $search = _smarty_regex_replace_check($search); - } - - return preg_replace($search, $replace, $string); -} - -/** - * @param string $search string(s) that should be replaced - * - * @return string - * @ignore - */ -function _smarty_regex_replace_check($search) -{ - // null-byte injection detection - // anything behind the first null-byte is ignored - if (($pos = strpos($search, "\0")) !== false) { - $search = substr($search, 0, $pos); - } - // remove eval-modifier from $search - if (preg_match('!([a-zA-Z\s]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) { - $search = substr($search, 0, - strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]); - } - - return $search; -} diff --git a/smarty/Smarty-3.1.21/libs/plugins/modifier.replace.php b/smarty/Smarty-3.1.21/libs/plugins/modifier.replace.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifier.spacify.php b/smarty/Smarty-3.1.21/libs/plugins/modifier.spacify.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifier.truncate.php b/smarty/Smarty-3.1.21/libs/plugins/modifier.truncate.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.cat.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.cat.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.count_characters.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.count_characters.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.count_paragraphs.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.count_paragraphs.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.count_sentences.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.count_sentences.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.count_words.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.count_words.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.default.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.default.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.escape.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.escape.php @@ -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->template->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php'; - $compiler->template->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape'; - } else { - $compiler->template->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php'; - $compiler->template->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape'; - } - - return 'smarty_modifier_escape(' . join(', ', $params) . ')'; -} diff --git a/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.from_charset.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.from_charset.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.indent.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.indent.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.lower.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.lower.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.noprint.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.noprint.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.string_format.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.string_format.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.strip.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.strip.php @@ -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:"&nbsp;"}<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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.strip_tags.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.strip_tags.php @@ -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/manual/en/language.modifier.strip.tags.php strip_tags (Smarty online manual) - * @author Uwe Tews - * - * @param array $params parameters - * - * @return string with compiled code - */ -function smarty_modifiercompiler_strip_tags($params) -{ - 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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.to_charset.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.to_charset.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.unescape.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.unescape.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.upper.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.upper.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.wordwrap.php b/smarty/Smarty-3.1.21/libs/plugins/modifiercompiler.wordwrap.php @@ -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->template->required_plugins['nocache']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'; - $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap'; - } else { - $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'; - $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap'; - } - $function = 'smarty_mb_wordwrap'; - } - - return $function . '(' . $params[0] . ',' . $params[1] . ',' . $params[2] . ',' . $params[3] . ')'; -} diff --git a/smarty/Smarty-3.1.21/libs/plugins/outputfilter.trimwhitespace.php b/smarty/Smarty-3.1.21/libs/plugins/outputfilter.trimwhitespace.php @@ -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|pre|textarea)[^>]*>.*?</\\1>#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*(["\'])[^\3]*?\3)|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \4', - // 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/smarty/Smarty-3.1.21/libs/plugins/shared.escape_special_chars.php b/smarty/Smarty-3.1.21/libs/plugins/shared.escape_special_chars.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/shared.literal_compiler_param.php b/smarty/Smarty-3.1.21/libs/plugins/shared.literal_compiler_param.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/shared.make_timestamp.php b/smarty/Smarty-3.1.21/libs/plugins/shared.make_timestamp.php @@ -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) { - return $string->getTimestamp(); - } 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/smarty/Smarty-3.1.21/libs/plugins/shared.mb_str_replace.php b/smarty/Smarty-3.1.21/libs/plugins/shared.mb_str_replace.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/shared.mb_unicode.php b/smarty/Smarty-3.1.21/libs/plugins/shared.mb_unicode.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/shared.mb_wordwrap.php b/smarty/Smarty-3.1.21/libs/plugins/shared.mb_wordwrap.php @@ -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/smarty/Smarty-3.1.21/libs/plugins/variablefilter.htmlspecialchars.php b/smarty/Smarty-3.1.21/libs/plugins/variablefilter.htmlspecialchars.php @@ -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/smarty/Smarty-3.1.21/libs/sysplugins/smarty_cacheresource.php b/smarty/Smarty-3.1.21/libs/sysplugins/smarty_cacheresource.php @@ -1,442 +0,0 @@ -<?php -/** - * Smarty Internal Plugin - * - * @package Smarty - * @subpackage Cacher - */ - -/** - * Cache Handler API - * - * @package Smarty - * @subpackage Cacher - * @author Rodney Rehm - */ -abstract class Smarty_CacheResource -{ - /** - * cache for Smarty_CacheResource instances - * - * @var array - */ - public static $resources = array(); - - /** - * resource types provided by the core - * - * @var array - */ - protected static $sysplugins = array( - 'file' => true, - ); - - /** - * populate Cached Object with meta data from Resource - * - * @param Smarty_Template_Cached $cached cached object - * @param Smarty_Internal_Template $_template template object - * - * @return void - */ - abstract public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template); - - /** - * populate Cached Object with timestamp and exists from Resource - * - * @param Smarty_Template_Cached $cached - * - * @return void - */ - abstract public function populateTimestamp(Smarty_Template_Cached $cached); - - /** - * Read the cached template and process header - * - * @param Smarty_Internal_Template $_template template object - * @param Smarty_Template_Cached $cached cached object - * - * @return boolean true or false if the cached content does not exist - */ - abstract public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null); - - /** - * Write the rendered template output to cache - * - * @param Smarty_Internal_Template $_template template object - * @param string $content content to cache - * - * @return boolean success - */ - abstract public function writeCachedContent(Smarty_Internal_Template $_template, $content); - - /** - * Return cached content - * - * @param Smarty_Internal_Template $_template template object - * - * @return null|string - */ - public function getCachedContent(Smarty_Internal_Template $_template) - { - if ($_template->cached->handler->process($_template)) { - ob_start(); - $_template->properties['unifunc']($_template); - - return ob_get_clean(); - } - - return null; - } - - /** - * Empty cache - * - * @param Smarty $smarty Smarty object - * @param integer $exp_time expiration time (number of seconds, not timestamp) - * - * @return integer number of cache files deleted - */ - abstract public function clearAll(Smarty $smarty, $exp_time = null); - - /** - * Empty cache for a specific template - * - * @param Smarty $smarty Smarty object - * @param string $resource_name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer $exp_time expiration time (number of seconds, not timestamp) - * - * @return integer number of cache files deleted - */ - abstract public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time); - - /** - * @param Smarty $smarty - * @param Smarty_Template_Cached $cached - * - * @return bool|null - */ - public function locked(Smarty $smarty, Smarty_Template_Cached $cached) - { - // theoretically locking_timeout should be checked against time_limit (max_execution_time) - $start = microtime(true); - $hadLock = null; - while ($this->hasLock($smarty, $cached)) { - $hadLock = true; - if (microtime(true) - $start > $smarty->locking_timeout) { - // abort waiting for lock release - return false; - } - sleep(1); - } - - return $hadLock; - } - - /** - * Check is cache is locked for this template - * - * @param Smarty $smarty - * @param Smarty_Template_Cached $cached - * - * @return bool - */ - public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) - { - // check if lock exists - return false; - } - - /** - * Lock cache for this template - * - * @param Smarty $smarty - * @param Smarty_Template_Cached $cached - * - * @return bool - */ - public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) - { - // create lock - return true; - } - - /** - * Unlock cache for this template - * - * @param Smarty $smarty - * @param Smarty_Template_Cached $cached - * - * @return bool - */ - public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) - { - // release lock - return true; - } - - /** - * Load Cache Resource Handler - * - * @param Smarty $smarty Smarty object - * @param string $type name of the cache resource - * - * @throws SmartyException - * @return Smarty_CacheResource Cache Resource Handler - */ - public static function load(Smarty $smarty, $type = null) - { - if (!isset($type)) { - $type = $smarty->caching_type; - } - - // try smarty's cache - if (isset($smarty->_cacheresource_handlers[$type])) { - return $smarty->_cacheresource_handlers[$type]; - } - - // try registered resource - if (isset($smarty->registered_cache_resources[$type])) { - // do not cache these instances as they may vary from instance to instance - return $smarty->_cacheresource_handlers[$type] = $smarty->registered_cache_resources[$type]; - } - // try sysplugins dir - if (isset(self::$sysplugins[$type])) { - if (!isset(self::$resources[$type])) { - $cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type); - self::$resources[$type] = new $cache_resource_class(); - } - - return $smarty->_cacheresource_handlers[$type] = self::$resources[$type]; - } - // try plugins dir - $cache_resource_class = 'Smarty_CacheResource_' . ucfirst($type); - if ($smarty->loadPlugin($cache_resource_class)) { - if (!isset(self::$resources[$type])) { - self::$resources[$type] = new $cache_resource_class(); - } - - return $smarty->_cacheresource_handlers[$type] = self::$resources[$type]; - } - // give up - throw new SmartyException("Unable to load cache resource '{$type}'"); - } - - /** - * Invalid Loaded Cache Files - * - * @param Smarty $smarty Smarty object - */ - public static function invalidLoadedCache(Smarty $smarty) - { - foreach ($smarty->template_objects as $tpl) { - if (isset($tpl->cached)) { - $tpl->cached->valid = false; - $tpl->cached->processed = false; - } - } - } -} - -/** - * Smarty Resource Data Object - * Cache Data Container for Template Files - * - * @package Smarty - * @subpackage TemplateResources - * @author Rodney Rehm - */ -class Smarty_Template_Cached -{ - /** - * Source Filepath - * - * @var string - */ - public $filepath = false; - - /** - * Source Content - * - * @var string - */ - public $content = null; - - /** - * Source Timestamp - * - * @var integer - */ - public $timestamp = false; - - /** - * Source Existence - * - * @var boolean - */ - public $exists = false; - - /** - * Cache Is Valid - * - * @var boolean - */ - public $valid = false; - - /** - * Cache was processed - * - * @var boolean - */ - public $processed = false; - - /** - * CacheResource Handler - * - * @var Smarty_CacheResource - */ - public $handler = null; - - /** - * Template Compile Id (Smarty_Internal_Template::$compile_id) - * - * @var string - */ - public $compile_id = null; - - /** - * Template Cache Id (Smarty_Internal_Template::$cache_id) - * - * @var string - */ - public $cache_id = null; - - /** - * Id for cache locking - * - * @var string - */ - public $lock_id = null; - - /** - * flag that cache is locked by this instance - * - * @var bool - */ - public $is_locked = false; - - /** - * Source Object - * - * @var Smarty_Template_Source - */ - public $source = null; - - /** - * create Cached Object container - * - * @param Smarty_Internal_Template $_template template object - */ - public function __construct(Smarty_Internal_Template $_template) - { - $this->compile_id = $_template->compile_id; - $this->cache_id = $_template->cache_id; - $this->source = $_template->source; - $_template->cached = $this; - $smarty = $_template->smarty; - - // - // load resource handler - // - $this->handler = $handler = Smarty_CacheResource::load($smarty); // Note: prone to circular references - - // - // check if cache is valid - // - if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || $_template->source->recompiled) { - $handler->populate($this, $_template); - - return; - } - while (true) { - while (true) { - $handler->populate($this, $_template); - if ($this->timestamp === false || $smarty->force_compile || $smarty->force_cache) { - $this->valid = false; - } else { - $this->valid = true; - } - if ($this->valid && $_template->caching == Smarty::CACHING_LIFETIME_CURRENT && $_template->cache_lifetime >= 0 && time() > ($this->timestamp + $_template->cache_lifetime)) { - // lifetime expired - $this->valid = false; - } - if ($this->valid || !$_template->smarty->cache_locking) { - break; - } - if (!$this->handler->locked($_template->smarty, $this)) { - $this->handler->acquireLock($_template->smarty, $this); - break 2; - } - } - if ($this->valid) { - if (!$_template->smarty->cache_locking || $this->handler->locked($_template->smarty, $this) === null) { - // load cache file for the following checks - if ($smarty->debugging) { - Smarty_Internal_Debug::start_cache($_template); - } - if ($handler->process($_template, $this) === false) { - $this->valid = false; - } else { - $this->processed = true; - } - if ($smarty->debugging) { - Smarty_Internal_Debug::end_cache($_template); - } - } else { - continue; - } - } else { - return; - } - if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_SAVED && $_template->properties['cache_lifetime'] >= 0 && (time() > ($_template->cached->timestamp + $_template->properties['cache_lifetime']))) { - $this->valid = false; - } - if (!$this->valid && $_template->smarty->cache_locking) { - $this->handler->acquireLock($_template->smarty, $this); - - return; - } else { - return; - } - } - } - - /** - * Write this cache object to handler - * - * @param Smarty_Internal_Template $_template template object - * @param string $content content to cache - * - * @return boolean success - */ - public function write(Smarty_Internal_Template $_template, $content) - { - if (!$_template->source->recompiled) { - if ($this->handler->writeCachedContent($_template, $content)) { - $this->content = null; - $this->timestamp = time(); - $this->exists = true; - $this->valid = true; - if ($_template->smarty->cache_locking) { - $this->handler->releaseLock($_template->smarty, $this); - } - - return true; - } - } - - return false; - } -} diff --git a/smarty/Smarty-3.1.21/libs/sysplugins/smarty_cacheresource_custom.php b/smarty/Smarty-3.1.21/libs/sysplugins/smarty_cacheresource_custom.php @@ -1,284 +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; - - $cached->filepath = sha1($cached->source->filepath . $_cache_id . $_compile_id); - $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 - * - * @return boolean true or false if the cached content does not exist - */ - public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null) - { - 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); - - 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->properties['cache_lifetime'], - $content - ); - } - - /** - * 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) - { - $this->cache = array(); - - 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) - { - $this->cache = array(); - $cache_name = null; - - if (isset($resource_name)) { - $_save_stat = $smarty->caching; - $smarty->caching = true; - $tpl = new $smarty->template_class($resource_name, $smarty); - $smarty->caching = $_save_stat; - - if ($tpl->source->exists) { - $cache_name = $tpl->source->name; - } else { - return 0; - } - // remove from template cache - if ($smarty->allow_ambiguous_resources) { - $_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id; - } else { - $_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id; - } - if (isset($_templateId[150])) { - $_templateId = sha1($_templateId); - } - unset($smarty->template_objects[$_templateId]); - // template object no longer needed - unset($tpl); - } - - return $this->delete($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->filepath; - $name = $cached->source->name . '.lock'; - - $mtime = $this->fetchTimestamp($id, $name, null, null); - if ($mtime === null) { - $this->fetch($id, $name, null, null, $content, $mtime); - } - - return $mtime && 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->filepath; - $name = $cached->source->name . '.lock'; - $this->save($id, $name, null, null, $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, null, null, null); - } -} diff --git a/smarty/Smarty-3.1.21/libs/sysplugins/smarty_cacheresource_keyvaluestore.php b/smarty/Smarty-3.1.21/libs/sysplugins/smarty_cacheresource_keyvaluestore.php @@ -1,493 +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;