diff --git a/bundled-libs/composer/autoload_classmap.php b/bundled-libs/composer/autoload_classmap.php
index 055f69f06..1b4740197 100644
--- a/bundled-libs/composer/autoload_classmap.php
+++ b/bundled-libs/composer/autoload_classmap.php
@@ -143,175 +143,169 @@
'Psr\\SimpleCache\\CacheException' => $vendorDir . '/psr/simple-cache/src/CacheException.php',
'Psr\\SimpleCache\\CacheInterface' => $vendorDir . '/psr/simple-cache/src/CacheInterface.php',
'Psr\\SimpleCache\\InvalidArgumentException' => $vendorDir . '/psr/simple-cache/src/InvalidArgumentException.php',
- 'Smarty' => $vendorDir . '/smarty/smarty/libs/Smarty.class.php',
- 'SmartyCompilerException' => $vendorDir . '/smarty/smarty/libs/sysplugins/smartycompilerexception.php',
- 'SmartyException' => $vendorDir . '/smarty/smarty/libs/sysplugins/smartyexception.php',
- 'Smarty_Autoloader' => $vendorDir . '/smarty/smarty/libs/Autoloader.php',
- 'Smarty_CacheResource' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_cacheresource.php',
- 'Smarty_CacheResource_Custom' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_cacheresource_custom.php',
- 'Smarty_CacheResource_KeyValueStore' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php',
- 'Smarty_Data' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_data.php',
- 'Smarty_Internal_Block' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_block.php',
- 'Smarty_Internal_CacheResource_File' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php',
- 'Smarty_Internal_CompileBase' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compilebase.php',
- 'Smarty_Internal_Compile_Append' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_append.php',
- 'Smarty_Internal_Compile_Assign' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_assign.php',
- 'Smarty_Internal_Compile_Block' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php',
- 'Smarty_Internal_Compile_Block_Child' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_child.php',
- 'Smarty_Internal_Compile_Block_Parent' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_parent.php',
- 'Smarty_Internal_Compile_Blockclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php',
- 'Smarty_Internal_Compile_Break' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_break.php',
- 'Smarty_Internal_Compile_Call' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_call.php',
- 'Smarty_Internal_Compile_Capture' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php',
- 'Smarty_Internal_Compile_CaptureClose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php',
- 'Smarty_Internal_Compile_Child' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_child.php',
- 'Smarty_Internal_Compile_Config_Load' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_config_load.php',
- 'Smarty_Internal_Compile_Continue' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_continue.php',
- 'Smarty_Internal_Compile_Debug' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_debug.php',
- 'Smarty_Internal_Compile_Else' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Elseif' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Eval' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_eval.php',
- 'Smarty_Internal_Compile_Extends' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_extends.php',
- 'Smarty_Internal_Compile_For' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php',
- 'Smarty_Internal_Compile_Forclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php',
- 'Smarty_Internal_Compile_Foreach' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php',
- 'Smarty_Internal_Compile_Foreachclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php',
- 'Smarty_Internal_Compile_Foreachelse' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php',
- 'Smarty_Internal_Compile_Forelse' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php',
- 'Smarty_Internal_Compile_Function' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php',
- 'Smarty_Internal_Compile_Functionclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php',
- 'Smarty_Internal_Compile_If' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Ifclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Include' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php',
- 'Smarty_Internal_Compile_Insert' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php',
- 'Smarty_Internal_Compile_Ldelim' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php',
- 'Smarty_Internal_Compile_Make_Nocache' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php',
- 'Smarty_Internal_Compile_Nocache' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php',
- 'Smarty_Internal_Compile_Nocacheclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php',
- 'Smarty_Internal_Compile_Parent' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_parent.php',
- 'Smarty_Internal_Compile_Private_Block_Plugin' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php',
- 'Smarty_Internal_Compile_Private_ForeachSection' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php',
- 'Smarty_Internal_Compile_Private_Function_Plugin' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php',
- 'Smarty_Internal_Compile_Private_Modifier' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php',
- 'Smarty_Internal_Compile_Private_Object_Block_Function' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php',
- 'Smarty_Internal_Compile_Private_Object_Function' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php',
- 'Smarty_Internal_Compile_Private_Print_Expression' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php',
- 'Smarty_Internal_Compile_Private_Registered_Block' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php',
- 'Smarty_Internal_Compile_Private_Registered_Function' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php',
- 'Smarty_Internal_Compile_Private_Special_Variable' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php',
- 'Smarty_Internal_Compile_Rdelim' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php',
- 'Smarty_Internal_Compile_Section' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php',
- 'Smarty_Internal_Compile_Sectionclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php',
- 'Smarty_Internal_Compile_Sectionelse' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php',
- 'Smarty_Internal_Compile_Setfilter' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php',
- 'Smarty_Internal_Compile_Setfilterclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php',
- 'Smarty_Internal_Compile_Shared_Inheritance' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php',
- 'Smarty_Internal_Compile_While' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php',
- 'Smarty_Internal_Compile_Whileclose' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php',
- 'Smarty_Internal_Config_File_Compiler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php',
- 'Smarty_Internal_Configfilelexer' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_configfilelexer.php',
- 'Smarty_Internal_Configfileparser' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php',
- 'Smarty_Internal_Data' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_data.php',
- 'Smarty_Internal_Debug' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_debug.php',
- 'Smarty_Internal_ErrorHandler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php',
- 'Smarty_Internal_Extension_Handler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php',
- 'Smarty_Internal_Method_AddAutoloadFilters' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php',
- 'Smarty_Internal_Method_AddDefaultModifiers' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php',
- 'Smarty_Internal_Method_Append' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php',
- 'Smarty_Internal_Method_AppendByRef' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php',
- 'Smarty_Internal_Method_AssignByRef' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php',
- 'Smarty_Internal_Method_AssignGlobal' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php',
- 'Smarty_Internal_Method_ClearAllAssign' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php',
- 'Smarty_Internal_Method_ClearAllCache' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php',
- 'Smarty_Internal_Method_ClearAssign' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php',
- 'Smarty_Internal_Method_ClearCache' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php',
- 'Smarty_Internal_Method_ClearCompiledTemplate' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php',
- 'Smarty_Internal_Method_ClearConfig' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php',
- 'Smarty_Internal_Method_CompileAllConfig' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php',
- 'Smarty_Internal_Method_CompileAllTemplates' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php',
- 'Smarty_Internal_Method_ConfigLoad' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php',
- 'Smarty_Internal_Method_CreateData' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php',
- 'Smarty_Internal_Method_GetAutoloadFilters' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php',
- 'Smarty_Internal_Method_GetConfigVariable' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvariable.php',
- 'Smarty_Internal_Method_GetConfigVars' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php',
- 'Smarty_Internal_Method_GetDebugTemplate' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php',
- 'Smarty_Internal_Method_GetDefaultModifiers' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php',
- 'Smarty_Internal_Method_GetGlobal' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getglobal.php',
- 'Smarty_Internal_Method_GetRegisteredObject' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php',
- 'Smarty_Internal_Method_GetStreamVariable' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php',
- 'Smarty_Internal_Method_GetTags' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php',
- 'Smarty_Internal_Method_GetTemplateVars' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php',
- 'Smarty_Internal_Method_Literals' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_literals.php',
- 'Smarty_Internal_Method_LoadFilter' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php',
- 'Smarty_Internal_Method_LoadPlugin' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php',
- 'Smarty_Internal_Method_MustCompile' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php',
- 'Smarty_Internal_Method_RegisterCacheResource' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php',
- 'Smarty_Internal_Method_RegisterClass' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php',
- 'Smarty_Internal_Method_RegisterDefaultConfigHandler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php',
- 'Smarty_Internal_Method_RegisterDefaultPluginHandler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php',
- 'Smarty_Internal_Method_RegisterDefaultTemplateHandler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php',
- 'Smarty_Internal_Method_RegisterFilter' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php',
- 'Smarty_Internal_Method_RegisterObject' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php',
- 'Smarty_Internal_Method_RegisterPlugin' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php',
- 'Smarty_Internal_Method_RegisterResource' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php',
- 'Smarty_Internal_Method_SetAutoloadFilters' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php',
- 'Smarty_Internal_Method_SetDebugTemplate' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php',
- 'Smarty_Internal_Method_SetDefaultModifiers' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php',
- 'Smarty_Internal_Method_UnloadFilter' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php',
- 'Smarty_Internal_Method_UnregisterCacheResource' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php',
- 'Smarty_Internal_Method_UnregisterFilter' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php',
- 'Smarty_Internal_Method_UnregisterObject' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php',
- 'Smarty_Internal_Method_UnregisterPlugin' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php',
- 'Smarty_Internal_Method_UnregisterResource' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php',
- 'Smarty_Internal_Nocache_Insert' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_nocache_insert.php',
- 'Smarty_Internal_ParseTree' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree.php',
- 'Smarty_Internal_ParseTree_Code' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_code.php',
- 'Smarty_Internal_ParseTree_Dq' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php',
- 'Smarty_Internal_ParseTree_DqContent' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php',
- 'Smarty_Internal_ParseTree_Tag' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php',
- 'Smarty_Internal_ParseTree_Template' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php',
- 'Smarty_Internal_ParseTree_Text' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php',
- 'Smarty_Internal_Resource_Eval' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_eval.php',
- 'Smarty_Internal_Resource_Extends' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_extends.php',
- 'Smarty_Internal_Resource_File' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php',
- 'Smarty_Internal_Resource_Php' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php',
- 'Smarty_Internal_Resource_Stream' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php',
- 'Smarty_Internal_Resource_String' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php',
- 'Smarty_Internal_Runtime_CacheModify' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php',
- 'Smarty_Internal_Runtime_CacheResourceFile' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php',
- 'Smarty_Internal_Runtime_Capture' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_capture.php',
- 'Smarty_Internal_Runtime_CodeFrame' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php',
- 'Smarty_Internal_Runtime_FilterHandler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php',
- 'Smarty_Internal_Runtime_Foreach' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php',
- 'Smarty_Internal_Runtime_GetIncludePath' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php',
- 'Smarty_Internal_Runtime_Inheritance' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php',
- 'Smarty_Internal_Runtime_Make_Nocache' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php',
- 'Smarty_Internal_Runtime_TplFunction' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php',
- 'Smarty_Internal_Runtime_UpdateCache' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php',
- 'Smarty_Internal_Runtime_UpdateScope' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php',
- 'Smarty_Internal_Runtime_WriteFile' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php',
- 'Smarty_Internal_SmartyTemplateCompiler' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php',
- 'Smarty_Internal_Template' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_template.php',
- 'Smarty_Internal_TemplateBase' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php',
- 'Smarty_Internal_TemplateCompilerBase' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php',
- 'Smarty_Internal_Templatelexer' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php',
- 'Smarty_Internal_Templateparser' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php',
- 'Smarty_Internal_TestInstall' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php',
- 'Smarty_Internal_Undefined' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_undefined.php',
- 'Smarty_Resource' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_resource.php',
- 'Smarty_Resource_Custom' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_resource_custom.php',
- 'Smarty_Resource_Recompiled' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_resource_recompiled.php',
- 'Smarty_Resource_Uncompiled' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_resource_uncompiled.php',
- 'Smarty_Security' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_security.php',
- 'Smarty_Template_Cached' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_template_cached.php',
- 'Smarty_Template_Compiled' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_template_compiled.php',
- 'Smarty_Template_Config' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_template_config.php',
- 'Smarty_Template_Resource_Base' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php',
- 'Smarty_Template_Source' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_template_source.php',
- 'Smarty_Undefined_Variable' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_undefined_variable.php',
- 'Smarty_Variable' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_variable.php',
- 'TPC_yyStackEntry' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php',
- 'TP_yyStackEntry' => $vendorDir . '/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php',
+ 'Smarty\\BlockHandler\\Base' => $vendorDir . '/smarty/smarty/src/BlockHandler/Base.php',
+ 'Smarty\\BlockHandler\\BlockHandlerInterface' => $vendorDir . '/smarty/smarty/src/BlockHandler/BlockHandlerInterface.php',
+ 'Smarty\\BlockHandler\\BlockPluginWrapper' => $vendorDir . '/smarty/smarty/src/BlockHandler/BlockPluginWrapper.php',
+ 'Smarty\\BlockHandler\\TextFormat' => $vendorDir . '/smarty/smarty/src/BlockHandler/TextFormat.php',
+ 'Smarty\\Cacheresource\\Base' => $vendorDir . '/smarty/smarty/src/Cacheresource/Base.php',
+ 'Smarty\\Cacheresource\\Custom' => $vendorDir . '/smarty/smarty/src/Cacheresource/Custom.php',
+ 'Smarty\\Cacheresource\\File' => $vendorDir . '/smarty/smarty/src/Cacheresource/File.php',
+ 'Smarty\\Cacheresource\\KeyValueStore' => $vendorDir . '/smarty/smarty/src/Cacheresource/KeyValueStore.php',
+ 'Smarty\\Compile\\Base' => $vendorDir . '/smarty/smarty/src/Compile/Base.php',
+ 'Smarty\\Compile\\BlockCompiler' => $vendorDir . '/smarty/smarty/src/Compile/BlockCompiler.php',
+ 'Smarty\\Compile\\CompilerInterface' => $vendorDir . '/smarty/smarty/src/Compile/CompilerInterface.php',
+ 'Smarty\\Compile\\DefaultHandlerBlockCompiler' => $vendorDir . '/smarty/smarty/src/Compile/DefaultHandlerBlockCompiler.php',
+ 'Smarty\\Compile\\DefaultHandlerFunctionCallCompiler' => $vendorDir . '/smarty/smarty/src/Compile/DefaultHandlerFunctionCallCompiler.php',
+ 'Smarty\\Compile\\FunctionCallCompiler' => $vendorDir . '/smarty/smarty/src/Compile/FunctionCallCompiler.php',
+ 'Smarty\\Compile\\ModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/ModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\BCPluginWrapper' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/BCPluginWrapper.php',
+ 'Smarty\\Compile\\Modifier\\Base' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/Base.php',
+ 'Smarty\\Compile\\Modifier\\CatModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/CatModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountCharactersModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/CountCharactersModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountParagraphsModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/CountParagraphsModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountSentencesModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/CountSentencesModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountWordsModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/CountWordsModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\DefaultModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/DefaultModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\EmptyModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/EmptyModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\EscapeModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/EscapeModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\FromCharsetModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/FromCharsetModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\IndentModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/IndentModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\IsArrayModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/IsArrayModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\IssetModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/IssetModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\JsonEncodeModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/JsonEncodeModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\LowerModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/LowerModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\ModifierCompilerInterface' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/ModifierCompilerInterface.php',
+ 'Smarty\\Compile\\Modifier\\Nl2brModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/Nl2brModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\NoPrintModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/NoPrintModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\RawModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/RawModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\RoundModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/RoundModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StrRepeatModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/StrRepeatModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StringFormatModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/StringFormatModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StripModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/StripModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StripTagsModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/StripTagsModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StrlenModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/StrlenModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\SubstrModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/SubstrModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\ToCharsetModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/ToCharsetModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\UnescapeModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/UnescapeModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\UpperModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/UpperModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\WordWrapModifierCompiler' => $vendorDir . '/smarty/smarty/src/Compile/Modifier/WordWrapModifierCompiler.php',
+ 'Smarty\\Compile\\ObjectMethodBlockCompiler' => $vendorDir . '/smarty/smarty/src/Compile/ObjectMethodBlockCompiler.php',
+ 'Smarty\\Compile\\ObjectMethodCallCompiler' => $vendorDir . '/smarty/smarty/src/Compile/ObjectMethodCallCompiler.php',
+ 'Smarty\\Compile\\PrintExpressionCompiler' => $vendorDir . '/smarty/smarty/src/Compile/PrintExpressionCompiler.php',
+ 'Smarty\\Compile\\SpecialVariableCompiler' => $vendorDir . '/smarty/smarty/src/Compile/SpecialVariableCompiler.php',
+ 'Smarty\\Compile\\Tag\\Append' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Append.php',
+ 'Smarty\\Compile\\Tag\\Assign' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Assign.php',
+ 'Smarty\\Compile\\Tag\\BCPluginWrapper' => $vendorDir . '/smarty/smarty/src/Compile/Tag/BCPluginWrapper.php',
+ 'Smarty\\Compile\\Tag\\Block' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Block.php',
+ 'Smarty\\Compile\\Tag\\BlockClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/BlockClose.php',
+ 'Smarty\\Compile\\Tag\\BreakTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/BreakTag.php',
+ 'Smarty\\Compile\\Tag\\Call' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Call.php',
+ 'Smarty\\Compile\\Tag\\Capture' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Capture.php',
+ 'Smarty\\Compile\\Tag\\CaptureClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/CaptureClose.php',
+ 'Smarty\\Compile\\Tag\\ConfigLoad' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ConfigLoad.php',
+ 'Smarty\\Compile\\Tag\\ContinueTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ContinueTag.php',
+ 'Smarty\\Compile\\Tag\\Debug' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Debug.php',
+ 'Smarty\\Compile\\Tag\\ElseIfTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ElseIfTag.php',
+ 'Smarty\\Compile\\Tag\\ElseTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ElseTag.php',
+ 'Smarty\\Compile\\Tag\\EvalTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/EvalTag.php',
+ 'Smarty\\Compile\\Tag\\ExtendsTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ExtendsTag.php',
+ 'Smarty\\Compile\\Tag\\ForClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ForClose.php',
+ 'Smarty\\Compile\\Tag\\ForElse' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ForElse.php',
+ 'Smarty\\Compile\\Tag\\ForTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ForTag.php',
+ 'Smarty\\Compile\\Tag\\ForeachClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ForeachClose.php',
+ 'Smarty\\Compile\\Tag\\ForeachElse' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ForeachElse.php',
+ 'Smarty\\Compile\\Tag\\ForeachSection' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ForeachSection.php',
+ 'Smarty\\Compile\\Tag\\ForeachTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/ForeachTag.php',
+ 'Smarty\\Compile\\Tag\\FunctionClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/FunctionClose.php',
+ 'Smarty\\Compile\\Tag\\FunctionTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/FunctionTag.php',
+ 'Smarty\\Compile\\Tag\\IfClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/IfClose.php',
+ 'Smarty\\Compile\\Tag\\IfTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/IfTag.php',
+ 'Smarty\\Compile\\Tag\\IncludeTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/IncludeTag.php',
+ 'Smarty\\Compile\\Tag\\Inheritance' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Inheritance.php',
+ 'Smarty\\Compile\\Tag\\Ldelim' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Ldelim.php',
+ 'Smarty\\Compile\\Tag\\Nocache' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Nocache.php',
+ 'Smarty\\Compile\\Tag\\NocacheClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/NocacheClose.php',
+ 'Smarty\\Compile\\Tag\\Rdelim' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Rdelim.php',
+ 'Smarty\\Compile\\Tag\\Section' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Section.php',
+ 'Smarty\\Compile\\Tag\\SectionClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/SectionClose.php',
+ 'Smarty\\Compile\\Tag\\SectionElse' => $vendorDir . '/smarty/smarty/src/Compile/Tag/SectionElse.php',
+ 'Smarty\\Compile\\Tag\\Setfilter' => $vendorDir . '/smarty/smarty/src/Compile/Tag/Setfilter.php',
+ 'Smarty\\Compile\\Tag\\SetfilterClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/SetfilterClose.php',
+ 'Smarty\\Compile\\Tag\\WhileClose' => $vendorDir . '/smarty/smarty/src/Compile/Tag/WhileClose.php',
+ 'Smarty\\Compile\\Tag\\WhileTag' => $vendorDir . '/smarty/smarty/src/Compile/Tag/WhileTag.php',
+ 'Smarty\\CompilerException' => $vendorDir . '/smarty/smarty/src/CompilerException.php',
+ 'Smarty\\Compiler\\BaseCompiler' => $vendorDir . '/smarty/smarty/src/Compiler/BaseCompiler.php',
+ 'Smarty\\Compiler\\CodeFrame' => $vendorDir . '/smarty/smarty/src/Compiler/CodeFrame.php',
+ 'Smarty\\Compiler\\Configfile' => $vendorDir . '/smarty/smarty/src/Compiler/Configfile.php',
+ 'Smarty\\Compiler\\Template' => $vendorDir . '/smarty/smarty/src/Compiler/Template.php',
+ 'Smarty\\Data' => $vendorDir . '/smarty/smarty/src/Data.php',
+ 'Smarty\\Debug' => $vendorDir . '/smarty/smarty/src/Debug.php',
+ 'Smarty\\ErrorHandler' => $vendorDir . '/smarty/smarty/src/ErrorHandler.php',
+ 'Smarty\\Exception' => $vendorDir . '/smarty/smarty/src/Exception.php',
+ 'Smarty\\Extension\\BCPluginsAdapter' => $vendorDir . '/smarty/smarty/src/Extension/BCPluginsAdapter.php',
+ 'Smarty\\Extension\\Base' => $vendorDir . '/smarty/smarty/src/Extension/Base.php',
+ 'Smarty\\Extension\\CallbackWrapper' => $vendorDir . '/smarty/smarty/src/Extension/CallbackWrapper.php',
+ 'Smarty\\Extension\\CoreExtension' => $vendorDir . '/smarty/smarty/src/Extension/CoreExtension.php',
+ 'Smarty\\Extension\\DefaultExtension' => $vendorDir . '/smarty/smarty/src/Extension/DefaultExtension.php',
+ 'Smarty\\Extension\\ExtensionInterface' => $vendorDir . '/smarty/smarty/src/Extension/ExtensionInterface.php',
+ 'Smarty\\Filter\\FilterInterface' => $vendorDir . '/smarty/smarty/src/Filter/FilterInterface.php',
+ 'Smarty\\Filter\\FilterPluginWrapper' => $vendorDir . '/smarty/smarty/src/Filter/FilterPluginWrapper.php',
+ 'Smarty\\Filter\\Output\\TrimWhitespace' => $vendorDir . '/smarty/smarty/src/Filter/Output/TrimWhitespace.php',
+ 'Smarty\\FunctionHandler\\BCPluginWrapper' => $vendorDir . '/smarty/smarty/src/FunctionHandler/BCPluginWrapper.php',
+ 'Smarty\\FunctionHandler\\Base' => $vendorDir . '/smarty/smarty/src/FunctionHandler/Base.php',
+ 'Smarty\\FunctionHandler\\Count' => $vendorDir . '/smarty/smarty/src/FunctionHandler/Count.php',
+ 'Smarty\\FunctionHandler\\Counter' => $vendorDir . '/smarty/smarty/src/FunctionHandler/Counter.php',
+ 'Smarty\\FunctionHandler\\Cycle' => $vendorDir . '/smarty/smarty/src/FunctionHandler/Cycle.php',
+ 'Smarty\\FunctionHandler\\Fetch' => $vendorDir . '/smarty/smarty/src/FunctionHandler/Fetch.php',
+ 'Smarty\\FunctionHandler\\FunctionHandlerInterface' => $vendorDir . '/smarty/smarty/src/FunctionHandler/FunctionHandlerInterface.php',
+ 'Smarty\\FunctionHandler\\HtmlBase' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlBase.php',
+ 'Smarty\\FunctionHandler\\HtmlCheckboxes' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlCheckboxes.php',
+ 'Smarty\\FunctionHandler\\HtmlImage' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlImage.php',
+ 'Smarty\\FunctionHandler\\HtmlOptions' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlOptions.php',
+ 'Smarty\\FunctionHandler\\HtmlRadios' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlRadios.php',
+ 'Smarty\\FunctionHandler\\HtmlSelectDate' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlSelectDate.php',
+ 'Smarty\\FunctionHandler\\HtmlSelectTime' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlSelectTime.php',
+ 'Smarty\\FunctionHandler\\HtmlTable' => $vendorDir . '/smarty/smarty/src/FunctionHandler/HtmlTable.php',
+ 'Smarty\\FunctionHandler\\Mailto' => $vendorDir . '/smarty/smarty/src/FunctionHandler/Mailto.php',
+ 'Smarty\\FunctionHandler\\Math' => $vendorDir . '/smarty/smarty/src/FunctionHandler/Math.php',
+ 'Smarty\\Lexer\\ConfigfileLexer' => $vendorDir . '/smarty/smarty/src/Lexer/ConfigfileLexer.php',
+ 'Smarty\\Lexer\\TemplateLexer' => $vendorDir . '/smarty/smarty/src/Lexer/TemplateLexer.php',
+ 'Smarty\\ParseTree\\Base' => $vendorDir . '/smarty/smarty/src/ParseTree/Base.php',
+ 'Smarty\\ParseTree\\Code' => $vendorDir . '/smarty/smarty/src/ParseTree/Code.php',
+ 'Smarty\\ParseTree\\Dq' => $vendorDir . '/smarty/smarty/src/ParseTree/Dq.php',
+ 'Smarty\\ParseTree\\DqContent' => $vendorDir . '/smarty/smarty/src/ParseTree/DqContent.php',
+ 'Smarty\\ParseTree\\Tag' => $vendorDir . '/smarty/smarty/src/ParseTree/Tag.php',
+ 'Smarty\\ParseTree\\Template' => $vendorDir . '/smarty/smarty/src/ParseTree/Template.php',
+ 'Smarty\\ParseTree\\Text' => $vendorDir . '/smarty/smarty/src/ParseTree/Text.php',
+ 'Smarty\\Parser\\ConfigfileParser' => $vendorDir . '/smarty/smarty/src/Parser/ConfigfileParser.php',
+ 'Smarty\\Parser\\TemplateParser' => $vendorDir . '/smarty/smarty/src/Parser/TemplateParser.php',
+ 'Smarty\\Resource\\BasePlugin' => $vendorDir . '/smarty/smarty/src/Resource/BasePlugin.php',
+ 'Smarty\\Resource\\CustomPlugin' => $vendorDir . '/smarty/smarty/src/Resource/CustomPlugin.php',
+ 'Smarty\\Resource\\ExtendsPlugin' => $vendorDir . '/smarty/smarty/src/Resource/ExtendsPlugin.php',
+ 'Smarty\\Resource\\FilePlugin' => $vendorDir . '/smarty/smarty/src/Resource/FilePlugin.php',
+ 'Smarty\\Resource\\RecompiledPlugin' => $vendorDir . '/smarty/smarty/src/Resource/RecompiledPlugin.php',
+ 'Smarty\\Resource\\StreamPlugin' => $vendorDir . '/smarty/smarty/src/Resource/StreamPlugin.php',
+ 'Smarty\\Resource\\StringEval' => $vendorDir . '/smarty/smarty/src/Resource/StringEval.php',
+ 'Smarty\\Resource\\StringPlugin' => $vendorDir . '/smarty/smarty/src/Resource/StringPlugin.php',
+ 'Smarty\\Runtime\\Block' => $vendorDir . '/smarty/smarty/src/Runtime/Block.php',
+ 'Smarty\\Runtime\\CaptureRuntime' => $vendorDir . '/smarty/smarty/src/Runtime/CaptureRuntime.php',
+ 'Smarty\\Runtime\\DefaultPluginHandlerRuntime' => $vendorDir . '/smarty/smarty/src/Runtime/DefaultPluginHandlerRuntime.php',
+ 'Smarty\\Runtime\\ForeachRuntime' => $vendorDir . '/smarty/smarty/src/Runtime/ForeachRuntime.php',
+ 'Smarty\\Runtime\\InheritanceRuntime' => $vendorDir . '/smarty/smarty/src/Runtime/InheritanceRuntime.php',
+ 'Smarty\\Runtime\\TplFunctionRuntime' => $vendorDir . '/smarty/smarty/src/Runtime/TplFunctionRuntime.php',
+ 'Smarty\\Security' => $vendorDir . '/smarty/smarty/src/Security.php',
+ 'Smarty\\Smarty' => $vendorDir . '/smarty/smarty/src/Smarty.php',
+ 'Smarty\\Template' => $vendorDir . '/smarty/smarty/src/Template.php',
+ 'Smarty\\TemplateBase' => $vendorDir . '/smarty/smarty/src/TemplateBase.php',
+ 'Smarty\\Template\\Cached' => $vendorDir . '/smarty/smarty/src/Template/Cached.php',
+ 'Smarty\\Template\\Compiled' => $vendorDir . '/smarty/smarty/src/Template/Compiled.php',
+ 'Smarty\\Template\\Config' => $vendorDir . '/smarty/smarty/src/Template/Config.php',
+ 'Smarty\\Template\\GeneratedPhpFile' => $vendorDir . '/smarty/smarty/src/Template/GeneratedPhpFile.php',
+ 'Smarty\\Template\\Source' => $vendorDir . '/smarty/smarty/src/Template/Source.php',
+ 'Smarty\\TestInstall' => $vendorDir . '/smarty/smarty/src/TestInstall.php',
+ 'Smarty\\UndefinedVariable' => $vendorDir . '/smarty/smarty/src/UndefinedVariable.php',
+ 'Smarty\\Variable' => $vendorDir . '/smarty/smarty/src/Variable.php',
+ 'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php',
'voku\\cache\\AdapterApc' => $vendorDir . '/voku/simple-cache/src/voku/cache/AdapterApc.php',
'voku\\cache\\AdapterApcu' => $vendorDir . '/voku/simple-cache/src/voku/cache/AdapterApcu.php',
'voku\\cache\\AdapterArray' => $vendorDir . '/voku/simple-cache/src/voku/cache/AdapterArray.php',
diff --git a/bundled-libs/composer/autoload_files.php b/bundled-libs/composer/autoload_files.php
index b1c12eb13..284c7c926 100644
--- a/bundled-libs/composer/autoload_files.php
+++ b/bundled-libs/composer/autoload_files.php
@@ -6,6 +6,8 @@
$baseDir = dirname($vendorDir);
return array(
+ '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
'757772e28a0943a9afe83def8db95bdf' => $vendorDir . '/mf2/mf2/Mf2/Parser.php',
'9e71c1459ef1226520e4b26dac3a180d' => $vendorDir . '/php81_bc/strftime/src/php-8.1-strftime.php',
+ 'c15d4a1253e33e055d05e547c61dcb71' => $vendorDir . '/smarty/smarty/src/functions.php',
);
diff --git a/bundled-libs/composer/autoload_psr4.php b/bundled-libs/composer/autoload_psr4.php
index c92b4af63..66d1da4d9 100644
--- a/bundled-libs/composer/autoload_psr4.php
+++ b/bundled-libs/composer/autoload_psr4.php
@@ -7,6 +7,8 @@
return array(
'voku\\cache\\' => array($vendorDir . '/voku/simple-cache/src/voku/cache'),
+ 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
+ 'Smarty\\' => array($vendorDir . '/smarty/smarty/src'),
'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
'Masterminds\\' => array($vendorDir . '/masterminds/html5/src'),
diff --git a/bundled-libs/composer/autoload_real.php b/bundled-libs/composer/autoload_real.php
index 930907654..9ed219ab4 100644
--- a/bundled-libs/composer/autoload_real.php
+++ b/bundled-libs/composer/autoload_real.php
@@ -35,7 +35,7 @@ public static function getLoader()
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitcbda25b16bb8365467298ce193f0f30c::getInitializer($loader));
- $loader->setApcuPrefix('r2+EHEPg0eh7Zqg6S7lL2');
+ $loader->setApcuPrefix('dbdd5152a690720408f5');
$loader->register(true);
$filesToLoad = \Composer\Autoload\ComposerStaticInitcbda25b16bb8365467298ce193f0f30c::$files;
diff --git a/bundled-libs/composer/autoload_static.php b/bundled-libs/composer/autoload_static.php
index 7d34b3739..4260a17f8 100644
--- a/bundled-libs/composer/autoload_static.php
+++ b/bundled-libs/composer/autoload_static.php
@@ -7,8 +7,10 @@
class ComposerStaticInitcbda25b16bb8365467298ce193f0f30c
{
public static $files = array (
+ '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
'757772e28a0943a9afe83def8db95bdf' => __DIR__ . '/..' . '/mf2/mf2/Mf2/Parser.php',
'9e71c1459ef1226520e4b26dac3a180d' => __DIR__ . '/..' . '/php81_bc/strftime/src/php-8.1-strftime.php',
+ 'c15d4a1253e33e055d05e547c61dcb71' => __DIR__ . '/..' . '/smarty/smarty/src/functions.php',
);
public static $prefixLengthsPsr4 = array (
@@ -16,6 +18,11 @@ class ComposerStaticInitcbda25b16bb8365467298ce193f0f30c
array (
'voku\\cache\\' => 11,
),
+ 'S' =>
+ array (
+ 'Symfony\\Polyfill\\Mbstring\\' => 26,
+ 'Smarty\\' => 7,
+ ),
'P' =>
array (
'Psr\\SimpleCache\\' => 16,
@@ -36,6 +43,14 @@ class ComposerStaticInitcbda25b16bb8365467298ce193f0f30c
array (
0 => __DIR__ . '/..' . '/voku/simple-cache/src/voku/cache',
),
+ 'Symfony\\Polyfill\\Mbstring\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
+ ),
+ 'Smarty\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/smarty/smarty/src',
+ ),
'Psr\\SimpleCache\\' =>
array (
0 => __DIR__ . '/..' . '/psr/simple-cache/src',
@@ -209,175 +224,169 @@ class ComposerStaticInitcbda25b16bb8365467298ce193f0f30c
'Psr\\SimpleCache\\CacheException' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheException.php',
'Psr\\SimpleCache\\CacheInterface' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheInterface.php',
'Psr\\SimpleCache\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/simple-cache/src/InvalidArgumentException.php',
- 'Smarty' => __DIR__ . '/..' . '/smarty/smarty/libs/Smarty.class.php',
- 'SmartyCompilerException' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smartycompilerexception.php',
- 'SmartyException' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smartyexception.php',
- 'Smarty_Autoloader' => __DIR__ . '/..' . '/smarty/smarty/libs/Autoloader.php',
- 'Smarty_CacheResource' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_cacheresource.php',
- 'Smarty_CacheResource_Custom' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_cacheresource_custom.php',
- 'Smarty_CacheResource_KeyValueStore' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php',
- 'Smarty_Data' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_data.php',
- 'Smarty_Internal_Block' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_block.php',
- 'Smarty_Internal_CacheResource_File' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php',
- 'Smarty_Internal_CompileBase' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compilebase.php',
- 'Smarty_Internal_Compile_Append' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_append.php',
- 'Smarty_Internal_Compile_Assign' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_assign.php',
- 'Smarty_Internal_Compile_Block' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php',
- 'Smarty_Internal_Compile_Block_Child' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_child.php',
- 'Smarty_Internal_Compile_Block_Parent' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_parent.php',
- 'Smarty_Internal_Compile_Blockclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php',
- 'Smarty_Internal_Compile_Break' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_break.php',
- 'Smarty_Internal_Compile_Call' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_call.php',
- 'Smarty_Internal_Compile_Capture' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php',
- 'Smarty_Internal_Compile_CaptureClose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php',
- 'Smarty_Internal_Compile_Child' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_child.php',
- 'Smarty_Internal_Compile_Config_Load' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_config_load.php',
- 'Smarty_Internal_Compile_Continue' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_continue.php',
- 'Smarty_Internal_Compile_Debug' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_debug.php',
- 'Smarty_Internal_Compile_Else' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Elseif' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Eval' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_eval.php',
- 'Smarty_Internal_Compile_Extends' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_extends.php',
- 'Smarty_Internal_Compile_For' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php',
- 'Smarty_Internal_Compile_Forclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php',
- 'Smarty_Internal_Compile_Foreach' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php',
- 'Smarty_Internal_Compile_Foreachclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php',
- 'Smarty_Internal_Compile_Foreachelse' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php',
- 'Smarty_Internal_Compile_Forelse' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php',
- 'Smarty_Internal_Compile_Function' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php',
- 'Smarty_Internal_Compile_Functionclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php',
- 'Smarty_Internal_Compile_If' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Ifclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php',
- 'Smarty_Internal_Compile_Include' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php',
- 'Smarty_Internal_Compile_Insert' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php',
- 'Smarty_Internal_Compile_Ldelim' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php',
- 'Smarty_Internal_Compile_Make_Nocache' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php',
- 'Smarty_Internal_Compile_Nocache' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php',
- 'Smarty_Internal_Compile_Nocacheclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php',
- 'Smarty_Internal_Compile_Parent' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_parent.php',
- 'Smarty_Internal_Compile_Private_Block_Plugin' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php',
- 'Smarty_Internal_Compile_Private_ForeachSection' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php',
- 'Smarty_Internal_Compile_Private_Function_Plugin' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php',
- 'Smarty_Internal_Compile_Private_Modifier' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php',
- 'Smarty_Internal_Compile_Private_Object_Block_Function' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php',
- 'Smarty_Internal_Compile_Private_Object_Function' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php',
- 'Smarty_Internal_Compile_Private_Print_Expression' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php',
- 'Smarty_Internal_Compile_Private_Registered_Block' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php',
- 'Smarty_Internal_Compile_Private_Registered_Function' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php',
- 'Smarty_Internal_Compile_Private_Special_Variable' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php',
- 'Smarty_Internal_Compile_Rdelim' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php',
- 'Smarty_Internal_Compile_Section' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php',
- 'Smarty_Internal_Compile_Sectionclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php',
- 'Smarty_Internal_Compile_Sectionelse' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php',
- 'Smarty_Internal_Compile_Setfilter' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php',
- 'Smarty_Internal_Compile_Setfilterclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php',
- 'Smarty_Internal_Compile_Shared_Inheritance' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php',
- 'Smarty_Internal_Compile_While' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php',
- 'Smarty_Internal_Compile_Whileclose' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php',
- 'Smarty_Internal_Config_File_Compiler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php',
- 'Smarty_Internal_Configfilelexer' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_configfilelexer.php',
- 'Smarty_Internal_Configfileparser' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php',
- 'Smarty_Internal_Data' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_data.php',
- 'Smarty_Internal_Debug' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_debug.php',
- 'Smarty_Internal_ErrorHandler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php',
- 'Smarty_Internal_Extension_Handler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php',
- 'Smarty_Internal_Method_AddAutoloadFilters' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php',
- 'Smarty_Internal_Method_AddDefaultModifiers' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php',
- 'Smarty_Internal_Method_Append' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php',
- 'Smarty_Internal_Method_AppendByRef' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php',
- 'Smarty_Internal_Method_AssignByRef' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php',
- 'Smarty_Internal_Method_AssignGlobal' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php',
- 'Smarty_Internal_Method_ClearAllAssign' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php',
- 'Smarty_Internal_Method_ClearAllCache' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php',
- 'Smarty_Internal_Method_ClearAssign' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php',
- 'Smarty_Internal_Method_ClearCache' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php',
- 'Smarty_Internal_Method_ClearCompiledTemplate' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php',
- 'Smarty_Internal_Method_ClearConfig' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php',
- 'Smarty_Internal_Method_CompileAllConfig' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php',
- 'Smarty_Internal_Method_CompileAllTemplates' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php',
- 'Smarty_Internal_Method_ConfigLoad' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php',
- 'Smarty_Internal_Method_CreateData' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php',
- 'Smarty_Internal_Method_GetAutoloadFilters' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php',
- 'Smarty_Internal_Method_GetConfigVariable' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvariable.php',
- 'Smarty_Internal_Method_GetConfigVars' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php',
- 'Smarty_Internal_Method_GetDebugTemplate' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php',
- 'Smarty_Internal_Method_GetDefaultModifiers' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php',
- 'Smarty_Internal_Method_GetGlobal' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getglobal.php',
- 'Smarty_Internal_Method_GetRegisteredObject' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php',
- 'Smarty_Internal_Method_GetStreamVariable' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php',
- 'Smarty_Internal_Method_GetTags' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php',
- 'Smarty_Internal_Method_GetTemplateVars' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php',
- 'Smarty_Internal_Method_Literals' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_literals.php',
- 'Smarty_Internal_Method_LoadFilter' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php',
- 'Smarty_Internal_Method_LoadPlugin' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php',
- 'Smarty_Internal_Method_MustCompile' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php',
- 'Smarty_Internal_Method_RegisterCacheResource' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php',
- 'Smarty_Internal_Method_RegisterClass' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php',
- 'Smarty_Internal_Method_RegisterDefaultConfigHandler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php',
- 'Smarty_Internal_Method_RegisterDefaultPluginHandler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php',
- 'Smarty_Internal_Method_RegisterDefaultTemplateHandler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php',
- 'Smarty_Internal_Method_RegisterFilter' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php',
- 'Smarty_Internal_Method_RegisterObject' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php',
- 'Smarty_Internal_Method_RegisterPlugin' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php',
- 'Smarty_Internal_Method_RegisterResource' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php',
- 'Smarty_Internal_Method_SetAutoloadFilters' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php',
- 'Smarty_Internal_Method_SetDebugTemplate' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php',
- 'Smarty_Internal_Method_SetDefaultModifiers' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php',
- 'Smarty_Internal_Method_UnloadFilter' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php',
- 'Smarty_Internal_Method_UnregisterCacheResource' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php',
- 'Smarty_Internal_Method_UnregisterFilter' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php',
- 'Smarty_Internal_Method_UnregisterObject' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php',
- 'Smarty_Internal_Method_UnregisterPlugin' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php',
- 'Smarty_Internal_Method_UnregisterResource' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php',
- 'Smarty_Internal_Nocache_Insert' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_nocache_insert.php',
- 'Smarty_Internal_ParseTree' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree.php',
- 'Smarty_Internal_ParseTree_Code' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_code.php',
- 'Smarty_Internal_ParseTree_Dq' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php',
- 'Smarty_Internal_ParseTree_DqContent' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php',
- 'Smarty_Internal_ParseTree_Tag' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php',
- 'Smarty_Internal_ParseTree_Template' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php',
- 'Smarty_Internal_ParseTree_Text' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php',
- 'Smarty_Internal_Resource_Eval' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_eval.php',
- 'Smarty_Internal_Resource_Extends' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_extends.php',
- 'Smarty_Internal_Resource_File' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php',
- 'Smarty_Internal_Resource_Php' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php',
- 'Smarty_Internal_Resource_Stream' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php',
- 'Smarty_Internal_Resource_String' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php',
- 'Smarty_Internal_Runtime_CacheModify' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php',
- 'Smarty_Internal_Runtime_CacheResourceFile' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php',
- 'Smarty_Internal_Runtime_Capture' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_capture.php',
- 'Smarty_Internal_Runtime_CodeFrame' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php',
- 'Smarty_Internal_Runtime_FilterHandler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php',
- 'Smarty_Internal_Runtime_Foreach' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php',
- 'Smarty_Internal_Runtime_GetIncludePath' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php',
- 'Smarty_Internal_Runtime_Inheritance' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php',
- 'Smarty_Internal_Runtime_Make_Nocache' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php',
- 'Smarty_Internal_Runtime_TplFunction' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php',
- 'Smarty_Internal_Runtime_UpdateCache' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php',
- 'Smarty_Internal_Runtime_UpdateScope' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php',
- 'Smarty_Internal_Runtime_WriteFile' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php',
- 'Smarty_Internal_SmartyTemplateCompiler' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php',
- 'Smarty_Internal_Template' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_template.php',
- 'Smarty_Internal_TemplateBase' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php',
- 'Smarty_Internal_TemplateCompilerBase' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php',
- 'Smarty_Internal_Templatelexer' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php',
- 'Smarty_Internal_Templateparser' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php',
- 'Smarty_Internal_TestInstall' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php',
- 'Smarty_Internal_Undefined' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_undefined.php',
- 'Smarty_Resource' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_resource.php',
- 'Smarty_Resource_Custom' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_resource_custom.php',
- 'Smarty_Resource_Recompiled' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_resource_recompiled.php',
- 'Smarty_Resource_Uncompiled' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_resource_uncompiled.php',
- 'Smarty_Security' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_security.php',
- 'Smarty_Template_Cached' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_template_cached.php',
- 'Smarty_Template_Compiled' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_template_compiled.php',
- 'Smarty_Template_Config' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_template_config.php',
- 'Smarty_Template_Resource_Base' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php',
- 'Smarty_Template_Source' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_template_source.php',
- 'Smarty_Undefined_Variable' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_undefined_variable.php',
- 'Smarty_Variable' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_variable.php',
- 'TPC_yyStackEntry' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php',
- 'TP_yyStackEntry' => __DIR__ . '/..' . '/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php',
+ 'Smarty\\BlockHandler\\Base' => __DIR__ . '/..' . '/smarty/smarty/src/BlockHandler/Base.php',
+ 'Smarty\\BlockHandler\\BlockHandlerInterface' => __DIR__ . '/..' . '/smarty/smarty/src/BlockHandler/BlockHandlerInterface.php',
+ 'Smarty\\BlockHandler\\BlockPluginWrapper' => __DIR__ . '/..' . '/smarty/smarty/src/BlockHandler/BlockPluginWrapper.php',
+ 'Smarty\\BlockHandler\\TextFormat' => __DIR__ . '/..' . '/smarty/smarty/src/BlockHandler/TextFormat.php',
+ 'Smarty\\Cacheresource\\Base' => __DIR__ . '/..' . '/smarty/smarty/src/Cacheresource/Base.php',
+ 'Smarty\\Cacheresource\\Custom' => __DIR__ . '/..' . '/smarty/smarty/src/Cacheresource/Custom.php',
+ 'Smarty\\Cacheresource\\File' => __DIR__ . '/..' . '/smarty/smarty/src/Cacheresource/File.php',
+ 'Smarty\\Cacheresource\\KeyValueStore' => __DIR__ . '/..' . '/smarty/smarty/src/Cacheresource/KeyValueStore.php',
+ 'Smarty\\Compile\\Base' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Base.php',
+ 'Smarty\\Compile\\BlockCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/BlockCompiler.php',
+ 'Smarty\\Compile\\CompilerInterface' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/CompilerInterface.php',
+ 'Smarty\\Compile\\DefaultHandlerBlockCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/DefaultHandlerBlockCompiler.php',
+ 'Smarty\\Compile\\DefaultHandlerFunctionCallCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/DefaultHandlerFunctionCallCompiler.php',
+ 'Smarty\\Compile\\FunctionCallCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/FunctionCallCompiler.php',
+ 'Smarty\\Compile\\ModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/ModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\BCPluginWrapper' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/BCPluginWrapper.php',
+ 'Smarty\\Compile\\Modifier\\Base' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/Base.php',
+ 'Smarty\\Compile\\Modifier\\CatModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/CatModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountCharactersModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/CountCharactersModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountParagraphsModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/CountParagraphsModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountSentencesModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/CountSentencesModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\CountWordsModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/CountWordsModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\DefaultModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/DefaultModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\EmptyModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/EmptyModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\EscapeModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/EscapeModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\FromCharsetModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/FromCharsetModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\IndentModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/IndentModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\IsArrayModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/IsArrayModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\IssetModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/IssetModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\JsonEncodeModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/JsonEncodeModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\LowerModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/LowerModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\ModifierCompilerInterface' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/ModifierCompilerInterface.php',
+ 'Smarty\\Compile\\Modifier\\Nl2brModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/Nl2brModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\NoPrintModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/NoPrintModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\RawModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/RawModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\RoundModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/RoundModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StrRepeatModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/StrRepeatModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StringFormatModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/StringFormatModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StripModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/StripModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StripTagsModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/StripTagsModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\StrlenModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/StrlenModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\SubstrModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/SubstrModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\ToCharsetModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/ToCharsetModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\UnescapeModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/UnescapeModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\UpperModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/UpperModifierCompiler.php',
+ 'Smarty\\Compile\\Modifier\\WordWrapModifierCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Modifier/WordWrapModifierCompiler.php',
+ 'Smarty\\Compile\\ObjectMethodBlockCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/ObjectMethodBlockCompiler.php',
+ 'Smarty\\Compile\\ObjectMethodCallCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/ObjectMethodCallCompiler.php',
+ 'Smarty\\Compile\\PrintExpressionCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/PrintExpressionCompiler.php',
+ 'Smarty\\Compile\\SpecialVariableCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/SpecialVariableCompiler.php',
+ 'Smarty\\Compile\\Tag\\Append' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Append.php',
+ 'Smarty\\Compile\\Tag\\Assign' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Assign.php',
+ 'Smarty\\Compile\\Tag\\BCPluginWrapper' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/BCPluginWrapper.php',
+ 'Smarty\\Compile\\Tag\\Block' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Block.php',
+ 'Smarty\\Compile\\Tag\\BlockClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/BlockClose.php',
+ 'Smarty\\Compile\\Tag\\BreakTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/BreakTag.php',
+ 'Smarty\\Compile\\Tag\\Call' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Call.php',
+ 'Smarty\\Compile\\Tag\\Capture' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Capture.php',
+ 'Smarty\\Compile\\Tag\\CaptureClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/CaptureClose.php',
+ 'Smarty\\Compile\\Tag\\ConfigLoad' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ConfigLoad.php',
+ 'Smarty\\Compile\\Tag\\ContinueTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ContinueTag.php',
+ 'Smarty\\Compile\\Tag\\Debug' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Debug.php',
+ 'Smarty\\Compile\\Tag\\ElseIfTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ElseIfTag.php',
+ 'Smarty\\Compile\\Tag\\ElseTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ElseTag.php',
+ 'Smarty\\Compile\\Tag\\EvalTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/EvalTag.php',
+ 'Smarty\\Compile\\Tag\\ExtendsTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ExtendsTag.php',
+ 'Smarty\\Compile\\Tag\\ForClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ForClose.php',
+ 'Smarty\\Compile\\Tag\\ForElse' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ForElse.php',
+ 'Smarty\\Compile\\Tag\\ForTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ForTag.php',
+ 'Smarty\\Compile\\Tag\\ForeachClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ForeachClose.php',
+ 'Smarty\\Compile\\Tag\\ForeachElse' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ForeachElse.php',
+ 'Smarty\\Compile\\Tag\\ForeachSection' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ForeachSection.php',
+ 'Smarty\\Compile\\Tag\\ForeachTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/ForeachTag.php',
+ 'Smarty\\Compile\\Tag\\FunctionClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/FunctionClose.php',
+ 'Smarty\\Compile\\Tag\\FunctionTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/FunctionTag.php',
+ 'Smarty\\Compile\\Tag\\IfClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/IfClose.php',
+ 'Smarty\\Compile\\Tag\\IfTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/IfTag.php',
+ 'Smarty\\Compile\\Tag\\IncludeTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/IncludeTag.php',
+ 'Smarty\\Compile\\Tag\\Inheritance' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Inheritance.php',
+ 'Smarty\\Compile\\Tag\\Ldelim' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Ldelim.php',
+ 'Smarty\\Compile\\Tag\\Nocache' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Nocache.php',
+ 'Smarty\\Compile\\Tag\\NocacheClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/NocacheClose.php',
+ 'Smarty\\Compile\\Tag\\Rdelim' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Rdelim.php',
+ 'Smarty\\Compile\\Tag\\Section' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Section.php',
+ 'Smarty\\Compile\\Tag\\SectionClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/SectionClose.php',
+ 'Smarty\\Compile\\Tag\\SectionElse' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/SectionElse.php',
+ 'Smarty\\Compile\\Tag\\Setfilter' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/Setfilter.php',
+ 'Smarty\\Compile\\Tag\\SetfilterClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/SetfilterClose.php',
+ 'Smarty\\Compile\\Tag\\WhileClose' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/WhileClose.php',
+ 'Smarty\\Compile\\Tag\\WhileTag' => __DIR__ . '/..' . '/smarty/smarty/src/Compile/Tag/WhileTag.php',
+ 'Smarty\\CompilerException' => __DIR__ . '/..' . '/smarty/smarty/src/CompilerException.php',
+ 'Smarty\\Compiler\\BaseCompiler' => __DIR__ . '/..' . '/smarty/smarty/src/Compiler/BaseCompiler.php',
+ 'Smarty\\Compiler\\CodeFrame' => __DIR__ . '/..' . '/smarty/smarty/src/Compiler/CodeFrame.php',
+ 'Smarty\\Compiler\\Configfile' => __DIR__ . '/..' . '/smarty/smarty/src/Compiler/Configfile.php',
+ 'Smarty\\Compiler\\Template' => __DIR__ . '/..' . '/smarty/smarty/src/Compiler/Template.php',
+ 'Smarty\\Data' => __DIR__ . '/..' . '/smarty/smarty/src/Data.php',
+ 'Smarty\\Debug' => __DIR__ . '/..' . '/smarty/smarty/src/Debug.php',
+ 'Smarty\\ErrorHandler' => __DIR__ . '/..' . '/smarty/smarty/src/ErrorHandler.php',
+ 'Smarty\\Exception' => __DIR__ . '/..' . '/smarty/smarty/src/Exception.php',
+ 'Smarty\\Extension\\BCPluginsAdapter' => __DIR__ . '/..' . '/smarty/smarty/src/Extension/BCPluginsAdapter.php',
+ 'Smarty\\Extension\\Base' => __DIR__ . '/..' . '/smarty/smarty/src/Extension/Base.php',
+ 'Smarty\\Extension\\CallbackWrapper' => __DIR__ . '/..' . '/smarty/smarty/src/Extension/CallbackWrapper.php',
+ 'Smarty\\Extension\\CoreExtension' => __DIR__ . '/..' . '/smarty/smarty/src/Extension/CoreExtension.php',
+ 'Smarty\\Extension\\DefaultExtension' => __DIR__ . '/..' . '/smarty/smarty/src/Extension/DefaultExtension.php',
+ 'Smarty\\Extension\\ExtensionInterface' => __DIR__ . '/..' . '/smarty/smarty/src/Extension/ExtensionInterface.php',
+ 'Smarty\\Filter\\FilterInterface' => __DIR__ . '/..' . '/smarty/smarty/src/Filter/FilterInterface.php',
+ 'Smarty\\Filter\\FilterPluginWrapper' => __DIR__ . '/..' . '/smarty/smarty/src/Filter/FilterPluginWrapper.php',
+ 'Smarty\\Filter\\Output\\TrimWhitespace' => __DIR__ . '/..' . '/smarty/smarty/src/Filter/Output/TrimWhitespace.php',
+ 'Smarty\\FunctionHandler\\BCPluginWrapper' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/BCPluginWrapper.php',
+ 'Smarty\\FunctionHandler\\Base' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/Base.php',
+ 'Smarty\\FunctionHandler\\Count' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/Count.php',
+ 'Smarty\\FunctionHandler\\Counter' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/Counter.php',
+ 'Smarty\\FunctionHandler\\Cycle' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/Cycle.php',
+ 'Smarty\\FunctionHandler\\Fetch' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/Fetch.php',
+ 'Smarty\\FunctionHandler\\FunctionHandlerInterface' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/FunctionHandlerInterface.php',
+ 'Smarty\\FunctionHandler\\HtmlBase' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlBase.php',
+ 'Smarty\\FunctionHandler\\HtmlCheckboxes' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlCheckboxes.php',
+ 'Smarty\\FunctionHandler\\HtmlImage' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlImage.php',
+ 'Smarty\\FunctionHandler\\HtmlOptions' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlOptions.php',
+ 'Smarty\\FunctionHandler\\HtmlRadios' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlRadios.php',
+ 'Smarty\\FunctionHandler\\HtmlSelectDate' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlSelectDate.php',
+ 'Smarty\\FunctionHandler\\HtmlSelectTime' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlSelectTime.php',
+ 'Smarty\\FunctionHandler\\HtmlTable' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/HtmlTable.php',
+ 'Smarty\\FunctionHandler\\Mailto' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/Mailto.php',
+ 'Smarty\\FunctionHandler\\Math' => __DIR__ . '/..' . '/smarty/smarty/src/FunctionHandler/Math.php',
+ 'Smarty\\Lexer\\ConfigfileLexer' => __DIR__ . '/..' . '/smarty/smarty/src/Lexer/ConfigfileLexer.php',
+ 'Smarty\\Lexer\\TemplateLexer' => __DIR__ . '/..' . '/smarty/smarty/src/Lexer/TemplateLexer.php',
+ 'Smarty\\ParseTree\\Base' => __DIR__ . '/..' . '/smarty/smarty/src/ParseTree/Base.php',
+ 'Smarty\\ParseTree\\Code' => __DIR__ . '/..' . '/smarty/smarty/src/ParseTree/Code.php',
+ 'Smarty\\ParseTree\\Dq' => __DIR__ . '/..' . '/smarty/smarty/src/ParseTree/Dq.php',
+ 'Smarty\\ParseTree\\DqContent' => __DIR__ . '/..' . '/smarty/smarty/src/ParseTree/DqContent.php',
+ 'Smarty\\ParseTree\\Tag' => __DIR__ . '/..' . '/smarty/smarty/src/ParseTree/Tag.php',
+ 'Smarty\\ParseTree\\Template' => __DIR__ . '/..' . '/smarty/smarty/src/ParseTree/Template.php',
+ 'Smarty\\ParseTree\\Text' => __DIR__ . '/..' . '/smarty/smarty/src/ParseTree/Text.php',
+ 'Smarty\\Parser\\ConfigfileParser' => __DIR__ . '/..' . '/smarty/smarty/src/Parser/ConfigfileParser.php',
+ 'Smarty\\Parser\\TemplateParser' => __DIR__ . '/..' . '/smarty/smarty/src/Parser/TemplateParser.php',
+ 'Smarty\\Resource\\BasePlugin' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/BasePlugin.php',
+ 'Smarty\\Resource\\CustomPlugin' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/CustomPlugin.php',
+ 'Smarty\\Resource\\ExtendsPlugin' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/ExtendsPlugin.php',
+ 'Smarty\\Resource\\FilePlugin' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/FilePlugin.php',
+ 'Smarty\\Resource\\RecompiledPlugin' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/RecompiledPlugin.php',
+ 'Smarty\\Resource\\StreamPlugin' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/StreamPlugin.php',
+ 'Smarty\\Resource\\StringEval' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/StringEval.php',
+ 'Smarty\\Resource\\StringPlugin' => __DIR__ . '/..' . '/smarty/smarty/src/Resource/StringPlugin.php',
+ 'Smarty\\Runtime\\Block' => __DIR__ . '/..' . '/smarty/smarty/src/Runtime/Block.php',
+ 'Smarty\\Runtime\\CaptureRuntime' => __DIR__ . '/..' . '/smarty/smarty/src/Runtime/CaptureRuntime.php',
+ 'Smarty\\Runtime\\DefaultPluginHandlerRuntime' => __DIR__ . '/..' . '/smarty/smarty/src/Runtime/DefaultPluginHandlerRuntime.php',
+ 'Smarty\\Runtime\\ForeachRuntime' => __DIR__ . '/..' . '/smarty/smarty/src/Runtime/ForeachRuntime.php',
+ 'Smarty\\Runtime\\InheritanceRuntime' => __DIR__ . '/..' . '/smarty/smarty/src/Runtime/InheritanceRuntime.php',
+ 'Smarty\\Runtime\\TplFunctionRuntime' => __DIR__ . '/..' . '/smarty/smarty/src/Runtime/TplFunctionRuntime.php',
+ 'Smarty\\Security' => __DIR__ . '/..' . '/smarty/smarty/src/Security.php',
+ 'Smarty\\Smarty' => __DIR__ . '/..' . '/smarty/smarty/src/Smarty.php',
+ 'Smarty\\Template' => __DIR__ . '/..' . '/smarty/smarty/src/Template.php',
+ 'Smarty\\TemplateBase' => __DIR__ . '/..' . '/smarty/smarty/src/TemplateBase.php',
+ 'Smarty\\Template\\Cached' => __DIR__ . '/..' . '/smarty/smarty/src/Template/Cached.php',
+ 'Smarty\\Template\\Compiled' => __DIR__ . '/..' . '/smarty/smarty/src/Template/Compiled.php',
+ 'Smarty\\Template\\Config' => __DIR__ . '/..' . '/smarty/smarty/src/Template/Config.php',
+ 'Smarty\\Template\\GeneratedPhpFile' => __DIR__ . '/..' . '/smarty/smarty/src/Template/GeneratedPhpFile.php',
+ 'Smarty\\Template\\Source' => __DIR__ . '/..' . '/smarty/smarty/src/Template/Source.php',
+ 'Smarty\\TestInstall' => __DIR__ . '/..' . '/smarty/smarty/src/TestInstall.php',
+ 'Smarty\\UndefinedVariable' => __DIR__ . '/..' . '/smarty/smarty/src/UndefinedVariable.php',
+ 'Smarty\\Variable' => __DIR__ . '/..' . '/smarty/smarty/src/Variable.php',
+ 'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php',
'voku\\cache\\AdapterApc' => __DIR__ . '/..' . '/voku/simple-cache/src/voku/cache/AdapterApc.php',
'voku\\cache\\AdapterApcu' => __DIR__ . '/..' . '/voku/simple-cache/src/voku/cache/AdapterApcu.php',
'voku\\cache\\AdapterArray' => __DIR__ . '/..' . '/voku/simple-cache/src/voku/cache/AdapterArray.php',
diff --git a/bundled-libs/composer/installed.json b/bundled-libs/composer/installed.json
index d8208bd54..67eaa7260 100644
--- a/bundled-libs/composer/installed.json
+++ b/bundled-libs/composer/installed.json
@@ -597,38 +597,42 @@
},
{
"name": "smarty/smarty",
- "version": "v4.3.5",
- "version_normalized": "4.3.5.0",
+ "version": "v5.4.3",
+ "version_normalized": "5.4.3.0",
"source": {
"type": "git",
"url": "https://github.com/smarty-php/smarty.git",
- "reference": "e0cbbdf6ea21768d0194e59d2f8c2e20d5f0868c"
+ "reference": "c6bff5795081ca5e60aabda59fb87daa511acd1e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/smarty-php/smarty/zipball/e0cbbdf6ea21768d0194e59d2f8c2e20d5f0868c",
- "reference": "e0cbbdf6ea21768d0194e59d2f8c2e20d5f0868c",
+ "url": "https://api.github.com/repos/smarty-php/smarty/zipball/c6bff5795081ca5e60aabda59fb87daa511acd1e",
+ "reference": "c6bff5795081ca5e60aabda59fb87daa511acd1e",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0"
+ "php": "^7.2 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.27"
},
"require-dev": {
"phpunit/phpunit": "^8.5 || ^7.5",
- "smarty/smarty-lexer": "^3.1"
+ "smarty/smarty-lexer": "^4.0.2"
},
- "time": "2024-01-23T10:47:54+00:00",
+ "time": "2024-12-23T00:38:44+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0.x-dev"
+ "dev-master": "5.0.x-dev"
}
},
"installation-source": "dist",
"autoload": {
- "classmap": [
- "libs/"
- ]
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Smarty\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -660,10 +664,93 @@
"support": {
"forum": "https://github.com/smarty-php/smarty/discussions",
"issues": "https://github.com/smarty-php/smarty/issues",
- "source": "https://github.com/smarty-php/smarty/tree/v4.3.5"
+ "source": "https://github.com/smarty-php/smarty/tree/v5.4.3"
},
"install-path": "../smarty/smarty"
},
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.31.0",
+ "version_normalized": "1.31.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
+ "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "time": "2024-09-09T11:45:10+00:00",
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "install-path": "../symfony/polyfill-mbstring"
+ },
{
"name": "voku/simple-cache",
"version": "4.1.0",
diff --git a/bundled-libs/composer/installed.php b/bundled-libs/composer/installed.php
index 3b2ed16d5..0f023d51e 100644
--- a/bundled-libs/composer/installed.php
+++ b/bundled-libs/composer/installed.php
@@ -3,7 +3,7 @@
'name' => 's9y/serendipity',
'pretty_version' => 'dev-master',
'version' => 'dev-master',
- 'reference' => '1c75f6692d9e6c69e2152dc4e9348759a3db8daf',
+ 'reference' => '3734df1293d92a06d20881f12018113eae617005',
'type' => 's9y-core',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -109,21 +109,30 @@
's9y/serendipity' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
- 'reference' => '1c75f6692d9e6c69e2152dc4e9348759a3db8daf',
+ 'reference' => '3734df1293d92a06d20881f12018113eae617005',
'type' => 's9y-core',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'dev_requirement' => false,
),
'smarty/smarty' => array(
- 'pretty_version' => 'v4.3.5',
- 'version' => '4.3.5.0',
- 'reference' => 'e0cbbdf6ea21768d0194e59d2f8c2e20d5f0868c',
+ 'pretty_version' => 'v5.4.3',
+ 'version' => '5.4.3.0',
+ 'reference' => 'c6bff5795081ca5e60aabda59fb87daa511acd1e',
'type' => 'library',
'install_path' => __DIR__ . '/../smarty/smarty',
'aliases' => array(),
'dev_requirement' => false,
),
+ 'symfony/polyfill-mbstring' => array(
+ 'pretty_version' => 'v1.31.0',
+ 'version' => '1.31.0.0',
+ 'reference' => '85181ba99b2345b0ef10ce42ecac37612d9fd341',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
'voku/simple-cache' => array(
'pretty_version' => '4.1.0',
'version' => '4.1.0.0',
diff --git a/bundled-libs/composer/platform_check.php b/bundled-libs/composer/platform_check.php
index 6d3407dbb..589e9e770 100644
--- a/bundled-libs/composer/platform_check.php
+++ b/bundled-libs/composer/platform_check.php
@@ -4,8 +4,8 @@
$issues = array();
-if (!(PHP_VERSION_ID >= 70100)) {
- $issues[] = 'Your Composer dependencies require a PHP version ">= 7.1.0". You are running ' . PHP_VERSION . '.';
+if (!(PHP_VERSION_ID >= 70200)) {
+ $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.0". You are running ' . PHP_VERSION . '.';
}
if ($issues) {
diff --git a/bundled-libs/smarty/smarty/CHANGELOG.md b/bundled-libs/smarty/smarty/CHANGELOG.md
index d08653d81..1483be86e 100644
--- a/bundled-libs/smarty/smarty/CHANGELOG.md
+++ b/bundled-libs/smarty/smarty/CHANGELOG.md
@@ -6,16 +6,155 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
+## [5.4.3] - 2024-12-23
+- Fix PHP backtraces by qualifying/replacing `call_user_func_array` calls [#1074](https://github.com/smarty-php/smarty/issues/1074)
+
+
+## [5.4.2] - 2024-11-20
+
+
+- Support the deprecations introduced in PHP 8.4 and added tests for PHP 8.4 [#1043](https://github.com/smarty-php/smarty/pull/1043)
+
+## [5.4.1] - 2024-08-29
+
+
+- Enable (and fix) unit tests for Windows [#1046](https://github.com/smarty-php/smarty/pull/1046)
+- Fix the use of "extends:" to define the inheritance tree on Windows [#1018](https://github.com/smarty-php/smarty/issues/1018)
+
+## [5.4.0] - 2024-08-14
+- Fixing forced OpCache invalidation on every template include, which is resulting in fast raising wasted OpCache memory [#1007](https://github.com/smarty-php/smarty/issues/1007)
+- Improvement of auto-escaping [#1030](https://github.com/smarty-php/smarty/pull/1030)
+
+
+## [5.3.1] - 2024-06-16
+- Fixed error when using section with nocache [#1034](https://github.com/smarty-php/smarty/issues/1034)
+
+
+## [5.3.0] - 2024-05-30
+- Fix warning when calling hasVariable for an undefined variable [#977](https://github.com/smarty-php/smarty/issues/977)
+- Added `$smarty->prependTemplateDir()` method [#1022](https://github.com/smarty-php/smarty/issues/1022)
+
+
+## [5.2.0] - 2024-05-28
+- Fixed a code injection vulnerability in extends-tag. This addresses CVE-2024-35226.
+- Added `$smarty->setCacheModifiedCheck()` setter for cache_modified_check
+- Added a PSR-4 loading script to allow Smarty to be used without Composer [#1017](https://github.com/smarty-php/smarty/pull/1017)
+
+
+## [5.1.0] - 2024-04-22
+- Prevent deprecation notices during compilation in PHP8.3 [#996](https://github.com/smarty-php/smarty/issues/996)
+- Fix that getTemplateVars would return an array of objects instead of the assigned variables values [#994](https://github.com/smarty-php/smarty/issues/994)
+- Fix Smarty::assign() not returning $this when called with an array as first parameter [#972](https://github.com/smarty-php/smarty/pull/972)
+- Documented support for `{if $element is in $array}` syntax [#937](https://github.com/smarty-php/smarty/issues/937)
+- Added support for `{if $element is not in $array}` syntax [#937](https://github.com/smarty-php/smarty/issues/937)
+- Using stream variables in templates now throws a deprecation notice [#933](https://github.com/smarty-php/smarty/pull/933)
+- Internal compiler classes always return a string (the internal has_code flag has been removed for simplicity) [#918](https://github.com/smarty-php/smarty/pull/918)
+- Fix invalid classnames in Runtime code for foreach [#1000](https://github.com/smarty-php/smarty/issues/1000)
+
+## [5.0.2] - 2024-03-28
+- Fix Smarty::assign() not returning $this when called with an array as first parameter [#972](https://github.com/smarty-php/smarty/pull/972)
+
+## [5.0.1] - 2024-03-27
+- Fix error in Smarty\Smarty::compileAllTemplates() by including missing FilesystemIterator class [#966](https://github.com/smarty-php/smarty/issues/966)
+
+## [5.0.0] - 2024-03-25
+- Fixed that scoped variables would overwrite parent scope [#952](https://github.com/smarty-php/smarty/issues/952)
+- Removed publicly accessible `$tpl->_var_stack` variable
+
+### Fixed
+- Too many shorthand attributes error when using a modifier as a function with more than 3 parameters in an expression [#949](https://github.com/smarty-php/smarty/issues/949)
+
+### Removed
+- Dropped support for undocumented `{time()}` added in v5.0.0 since we already have the documented `{$smarty.now}`
+
+## [5.0.0-rc3] - 2024-02-26
+
### Added
- PHP8.3 support [#925](https://github.com/smarty-php/smarty/issues/925)
+- Backlink to GitHub in docs
+- Explain how to do escaping and set-up auto-escaping in docs [#865](https://github.com/smarty-php/smarty/issues/865)
+- Link to variable scope page in the documentation for the assign tag [#878](https://github.com/smarty-php/smarty/issues/878)
+- Add support for implode, substr and json_encode as modifiers/functions in templates [#939](https://github.com/smarty-php/smarty/issues/939)
+- Add template path to CompilerException to enable rich debug features [#935](https://github.com/smarty-php/smarty/issues/935)
-## [4.3.4] - 2023-09-14
+### Fixed
+- The {debug} tag was broken in v5 [#922](https://github.com/smarty-php/smarty/issues/922)
+- Documentation on `{if $x is even by $y}` syntax
+- Fix incorrect compilation of expressions when escape_html=true [#930](https://github.com/smarty-php/smarty/pull/930)
-## [4.3.3] - 2023-09-14
+## [5.0.0-rc2] - 2023-11-11
### Fixed
-- `|strip_tags` does not work if the input is 0 [#890](https://github.com/smarty-php/smarty/issues/890)
+- Registered output filters wouldn't run [#899](https://github.com/smarty-php/smarty/issues/899)
- Use of negative numbers in {math} equations [#895](https://github.com/smarty-php/smarty/issues/895)
+- Do not auto-html-escape custom function results [#906](https://github.com/smarty-php/smarty/issues/906)
+- Fix case-sensitive tag names [#907](https://github.com/smarty-php/smarty/issues/907)
+
+### Removed
+- Removed `$smarty->registered_filters` array
+
+## [5.0.0-rc1] - 2023-08-08
+
+### Added
+- Added support for PHP8.2
+- Added a new way to extend Smarty functionality using `Smarty::addExtension()` or `Smarty::setExtensions()`. Please see the docs for more information.
+- Custom tags can accept positional parameters, so you can write a block compiler that support this: `{trans "Jack" "dull boy"}All work and no play makes %s a %s.{/trans}` [#164](https://github.com/smarty-php/smarty/issues/164)
+- Full support for ternary operator: `{$test ? $a : $b}` and `{$var ?: $value_if_falsy}` [#881](https://github.com/smarty-php/smarty/issues/881)
+- Full support for null coalescing operator: `{$var ?? $value_if_null}` [#882](https://github.com/smarty-php/smarty/issues/882)
+
+### Changed
+- All Smarty code is now in the \Smarty namespace. For simple use-cases, you only need to add
+ `use \Smarty\Smarty;` to your script and everything will work. If you extend Smarty or use
+ Smarty plug-ins, please review your code to see if they assume specific class or method names.
+ E.g.: `Smarty_Internal_Template` is now `\Smarty\Template\`, `SmartyException` is now `\Smarty\Exception`.
+- Template variable scope bubbling has been simplified and made more consistent.
+ The global scope now equals the Smarty scope in order to avoid global state side effects. Please read
+ the documentation for more details.
+- Lexers and Parsers PHP files are reliably generated from sources (.y and .plex) using the make file
+- Smarty now always runs in multibyte mode, using `symfony/polyfill-mbstring` if required. Please use the
+ multibyte extension for optimal performance.
+- Smarty no longer calls `mb_internal_encoding()` and doesn't check for deprecated `mbstring.func_overload` ini directive [#480](https://github.com/smarty-php/smarty/issues/480)
+- Generated `
+{/block}
+```
+
+mypage.tpl (grandchild)
+
+```smarty
+{extends file='myproject.tpl'}
+{block name=title}My Page Title{/block}
+{block name=head}
+
+
+{/block}
+{block name=body}My HTML Page Body goes here{/block}
+```
+
+
+To render the above, you would use:
+
+```php
+display('mypage.tpl');
+```
+
+The resulting output is:
+
+```html
+
+
+ My Page Title
+
+
+
+
+ My HTML Page Body goes here
+
+
+```
+
+> **Note**
+>
+> When [compile-check](./configuring.md#disabling-compile-check) is enabled, all files
+> in the inheritance tree
+> are checked for modifications upon each invocation. You may want to
+> disable compile-check on production servers for this reason.
+
+> **Note**
+>
+> If you have a subtemplate which is included with
+> [`{include}`](../designers/language-builtin-functions/language-function-include.md) and it contains
+> [`{block}`](../designers/language-builtin-functions/language-function-block.md) areas it works only if the
+> [`{include}`](../designers/language-builtin-functions/language-function-include.md) itself is called from within
+> a surrounding [`{block}`](../designers/language-builtin-functions/language-function-block.md). In the final
+> parent template you may need a dummy
+> [`{block}`](../designers/language-builtin-functions/language-function-block.md) for it.
+
+
+## Using append and prepend
+The content of [`{block}`](../designers/language-builtin-functions/language-function-block.md) tags from child
+and parent templates can be merged by the `append` or `prepend`
+[`{block}`](../designers/language-builtin-functions/language-function-block.md) tag option flags and
+`{$smarty.block.parent}` or `{$smarty.block.child}` placeholders.
+
+## Extends resource type
+Instead of using [`{extends}`](../designers/language-builtin-functions/language-function-extends.md) tags in the
+template files you can define the inheritance tree in your PHP script by
+using the [`extends:` resource](resources.md#the-extends-resource) type.
+
+The code below will return same result as the example above.
+
+```php
+display('extends:layout.tpl|myproject.tpl|mypage.tpl');
+```
diff --git a/bundled-libs/smarty/smarty/docs/api/rendering.md b/bundled-libs/smarty/smarty/docs/api/rendering.md
new file mode 100644
index 000000000..a66b61269
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/api/rendering.md
@@ -0,0 +1,86 @@
+# Rendering templates
+
+## Fetching or rendering templates directly
+As explained in [basics](basics.md), you can use `$smarty->fetch()` or `$smarty->display()`
+to render a template directly.
+
+```php
+display('homepage.tpl');
+
+// or
+
+$output = $smarty->fetch('homepage.tpl');
+```
+
+When you use `display()`, Smarty renders the template to the standard output stream.
+`fetch()` returns the output instead of echoing it.
+
+The example above uses simple filenames to load the template. Smarty also supports
+[loading templates from resources](resources.md).
+
+## Creating a template object
+You can also create a template object which later can be prepared first,
+and rendered later. This can be useful, for example if you plan to re-use several
+templates.
+
+```php
+createTemplate('index.tpl');
+
+// assign a variable (available only to this template)
+$tpl->assign('title', 'My Homepage!');
+
+// display the template
+$tpl->display();
+```
+
+More on assigning variables in [using data in templates](variables/assigning.md).
+
+
+## Testing if a template exists
+You can use `templateExists()` to check whether a template exists before you attempt to use it.
+
+It accepts either a path to the template on the filesystem or a
+resource string specifying the template.
+
+This example uses `$_GET['page']` to
+[`{include}`](../designers/language-builtin-functions/language-function-include.md) a content template. If the
+template does not exist then an error page is displayed instead. First,
+the `page_container.tpl`
+
+```smarty
+
+
+ {$title|escape}
+
+
+ {* include middle content page *}
+ {include file=$content_template}
+
+
+```
+
+And the php script:
+
+```php
+templateExists($mid_template)){
+ $mid_template = 'page_not_found.tpl';
+}
+$smarty->assign('content_template', $mid_template);
+
+$smarty->display('page_container.tpl');
+```
diff --git a/bundled-libs/smarty/smarty/docs/api/resources.md b/bundled-libs/smarty/smarty/docs/api/resources.md
new file mode 100644
index 000000000..5ca52b12d
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/api/resources.md
@@ -0,0 +1,322 @@
+# Template resources
+
+## The filesystem resource
+
+So far in our examples, we have used simple filenames or paths when loading a template.
+
+For example, to load a template file called `homepage.tpl`, from the filesystem, you could write:
+```php
+display('homepage.tpl');
+```
+
+The filesystem is the default resource. Templates, however, may come
+from a variety of sources. When you render a template, or
+when you include a template from within another template, you supply a
+resource type, followed by `:` and the appropriate path and template name.
+
+If a resource is not explicitly given, the default resource type is assumed.
+The resource type for the filesystem is `file`, which means that the previous example
+can be rewritten as follows:
+```php
+display('file:homepage.tpl');
+```
+
+The file resource pulls templates source files from the directories
+specified using `Smarty::setTemplateDir()` (see [Configuring Smarty](configuring.md)).
+
+`setTemplateDir` accepts a single path, but can also ben called with an array of paths.
+In that case, the list of directories is traversed in the order they appear in the array. The
+first template found is the one to process.
+
+### Templates from a specific directory
+
+Smarty 3.1 introduced the bracket-syntax for specifying an element from
+`Smarty::setTemplateDir()`. This allows websites
+employing multiple sets of templates better control over which template
+to access.
+
+The bracket-syntax can be used as follows:
+```php
+setTemplateDir([
+ './templates', // element: 0, index: 0
+ './templates_2', // element: 1, index: 1
+ '10' => 'templates_10', // element: 2, index: '10'
+ 'foo' => 'templates_foo', // element: 3, index: 'foo'
+]);
+
+/*
+ assume the template structure
+ ./templates/foo.tpl
+ ./templates_2/foo.tpl
+ ./templates_2/bar.tpl
+ ./templates_10/foo.tpl
+ ./templates_10/bar.tpl
+ ./templates_foo/foo.tpl
+*/
+
+// regular access
+$smarty->display('file:foo.tpl');
+// will load ./templates/foo.tpl
+
+// using numeric index
+$smarty->display('file:[1]foo.tpl');
+// will load ./templates_2/foo.tpl
+
+// using numeric string index
+$smarty->display('file:[10]foo.tpl');
+// will load ./templates_10/foo.tpl
+
+// using string index
+$smarty->display('file:[foo]foo.tpl');
+// will load ./templates_foo/foo.tpl
+
+// using "unknown" numeric index (using element number)
+$smarty->display('file:[2]foo.tpl');
+// will load ./templates_10/foo.tpl
+```
+
+And, from within a Smarty template:
+
+```smarty
+{include file="file:foo.tpl"}
+{* will load ./templates/foo.tpl *}
+
+{include file="file:[1]foo.tpl"}
+{* will load ./templates_2/foo.tpl *}
+
+{include file="file:[foo]foo.tpl"}
+{* will load ./templates_foo/foo.tpl *}
+```
+
+### Using absolute paths
+
+Templates outside the specified template directories
+require the `file:` template resource type, followed by the absolute
+path to the template (with leading slash).
+
+```php
+display('file:/export/templates/index.tpl');
+$smarty->display('file:/path/to/my/templates/menu.tpl');
+````
+
+And from within a Smarty template:
+```smarty
+{include file='file:/usr/local/share/templates/navigation.tpl'}
+```
+
+> **Note**
+>
+> With [`Security`](security.md) enabled, access to
+> templates outside of the specified templates directories is
+> not allowed unless you whitelist those directories.
+
+### Windows file paths
+If you are running on Windows, file paths usually include a drive
+letter (such as `C:`) at the beginning of the pathname. Be sure to use `file:` in
+the path to avoid namespace conflicts and get the desired results.
+```php
+display('file:C:/export/templates/index.tpl');
+$smarty->display('file:F:/path/to/my/templates/menu.tpl');
+```
+
+And from within Smarty template:
+```smarty
+{include file='file:D:/usr/local/share/templates/navigation.tpl'}
+```
+
+### Handling missing templates
+If the file resource cannot find the requested template, it will check if there is
+a default template handler to call. By default, there is none, and Smarty will return an error,
+but you can register a default template handler calling `Smarty::registerDefaultTemplateHandler`
+with any [callable](https://www.php.net/manual/en/language.types.callable.php).
+
+```php
+registerDefaultTemplateHandler([$this, 'handleMissingTemplate']);
+
+// ...
+
+public function handleMissingTemplate($type, $name, &$content, &$modified, Smarty $smarty) {
+ if (/* ... */) {
+ // return corrected filepath
+ return "/tmp/some/foobar.tpl";
+ } elseif (/* ... */) {
+ // return a template directly
+ $content = "the template source";
+ $modified = time();
+ return true;
+ } else {
+ // tell smarty that we failed
+ return false;
+ }
+}
+
+```
+
+## The string and eval resources
+
+Smarty can render templates from a string by using the `string:` or
+`eval:` resource.
+
+- The `string:` resource behaves much the same as a template file. The
+ template source is compiled from a string and stores the compiled
+ template code for later reuse. Each unique template string will
+ create a new compiled template file. If your template strings are
+ accessed frequently, this is a good choice. If you have frequently
+ changing template strings (or strings with low reuse value), the
+ `eval:` resource may be a better choice, as it doesn\'t save
+ compiled templates to disk.
+
+- The `eval:` resource evaluates the template source every time a page
+ is rendered. This is a good choice for strings with low reuse value.
+ If the same string is accessed frequently, the `string:` resource
+ may be a better choice.
+
+> **Note**
+>
+> With a `string:` resource type, each unique string generates a
+> compiled file. Smarty cannot detect a string that has changed, and
+> therefore will generate a new compiled file for each unique string. It
+> is important to choose the correct resource so that you do not fill
+> your disk space with wasted compiled strings.
+
+```php
+assign('foo', 'value');
+$template_string = 'display {$foo} here';
+$smarty->display('string:' . $template_string); // compiles for later reuse
+$smarty->display('eval:' . $template_string); // compiles every time
+```
+From within a Smarty template:
+```smarty
+{include file="string:$template_string"} {* compiles for later reuse *}
+{include file="eval:$template_string"} {* compiles every time *}
+```
+
+Both `string:` and `eval:` resources may be encoded with
+[`urlencode()`](https://www.php.net/urlencode) or
+[`base64_encode()`](https://www.php.net/urlencode). This is not necessary
+for the usual use of `string:` and `eval:`, but is required when using
+either of them in conjunction with the [`extends resource`](#the-extends-resource).
+
+```php
+ assign('foo','value');
+ $template_string_urlencode = urlencode('display {$foo} here');
+ $template_string_base64 = base64_encode('display {$foo} here');
+ $smarty->display('eval:urlencode:' . $template_string_urlencode); // will decode string using urldecode()
+ $smarty->display('eval:base64:' . $template_string_base64); // will decode string using base64_decode()
+```
+
+From within a Smarty template:
+```smarty
+ {include file="string:urlencode:$template_string_urlencode"} {* will decode string using urldecode() *}
+ {include file="eval:base64:$template_string_base64"} {* will decode string using base64_decode() *}
+```
+
+## The extends resource
+
+The `extends:` resource is used to define child/parent relationships. For details see section of
+[Template inheritance](inheritance.md).
+
+> **Note**
+>
+> Using the extends resource is usually not necessary. If you have a choice, it is normally more flexible and
+> intuitive to handle inheritance chains from within the templates using the [{extends} tag](inheritance.md).
+
+When `string:` and `eval:` templates are used, make sure they are properly url or base64 encoded.
+
+The templates within an inheritance chain are not compiled separately. Only a single compiled template will be generated.
+(If an `eval:` resource is found within an inheritance chain, its "don't save a compile file" property is superseded by
+the `extends:` resource.)
+
+Example:
+```php
+display('extends:parent.tpl|child.tpl|grandchild.tpl');
+
+// inheritance from multiple template sources
+$smarty->display('extends:db:parent.tpl|file:child.tpl|grandchild.tpl|eval:{block name="fooBazVar_"}hello world{/block}');
+```
+
+## The stream resource
+
+Smarty allow you to use [PHP streams](https://www.php.net/manual/en/function.stream-wrapper-register.php)
+as a template resource. Smarty will first look for a registered template resource. If nothing is
+found, it will check if a PHP stream is available. If a stream is available, Smarty will use it
+to fetch the template.
+
+For example,
+```php
+display('myresource:bar.tpl');
+```
+
+Or, from within a template:
+```smarty
+ {include file="myresource:bar.tpl"}
+```
+
+## Adding your own resource type
+You can create a class that extends `Smarty\Resource\CustomPlugin` to add your own resource type,
+for example to load template from a database.
+
+For example:
+```php
+registerResource('helloworld', new HelloWorldResource());
+```
+
+If a Resource's templates should not be run through the Smarty
+compiler, the Custom Resource may extend `\Smarty\Resource\UncompiledPlugin`.
+The Resource Handler must then implement the function
+`renderUncompiled(\Smarty\Template $_template)`. `$_template` is
+a reference to the current template and contains all assigned variables
+which the implementor can access via
+`$_template->getSmarty()->getTemplateVars()`. These Resources simply echo
+their rendered content to the output stream. The rendered output will be
+output-cached if the Smarty instance was configured accordingly. See
+`src/Resource/PhpPlugin.php` for an example.
+
+If the Resource's compiled templates should not be cached on disk, the
+Custom Resource may extend `\Smarty\Resource\RecompiledPlugin`. These Resources
+are compiled every time they are accessed. This may be an expensive
+overhead. See `src/Resource/StringEval.php` for an
+example.
+
+## Changing the default resource type
+The default resource type is `file`. If you want to change it, use `Smarty::setDefaultResourceType`.
+
+The following example will change the default resource type to `mysql`:
+```php
+setDefaultResourceType('mysql');
+```
diff --git a/bundled-libs/smarty/smarty/docs/api/security.md b/bundled-libs/smarty/smarty/docs/api/security.md
new file mode 100644
index 000000000..07120afdb
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/api/security.md
@@ -0,0 +1,119 @@
+# Security
+
+Security is good for situations when you have untrusted parties editing
+the templates, and you want to reduce the risk of system
+security compromises through the template language.
+
+The settings of the security policy are defined by overriding public properties of an
+instance of the \Smarty\Security class. These are the possible settings:
+
+- `$secure_dir` is an array of template directories that are
+ considered secure. A directory configured using `$smarty->setTemplateDir()` is
+ considered secure implicitly. The default is an empty array.
+- `$trusted_uri` is an array of regular expressions matching URIs that
+ are considered trusted. This security directive is used by
+ [`{fetch}`](../designers/language-custom-functions/language-function-fetch.md) and
+ [`{html_image}`](../designers/language-custom-functions/language-function-html-image.md). URIs passed to
+ these functions are reduced to `{$PROTOCOL}://{$HOSTNAME}` to allow
+ simple regular expressions (without having to deal with edge cases
+ like authentication-tokens).
+
+ The expression `'#https?://.*smarty.net$#i'` would allow accessing
+ the following URIs:
+
+ - `http://smarty.net/foo`
+ - `http://smarty.net/foo`
+ - `http://www.smarty.net/foo`
+ - `http://smarty.net/foo`
+ - `https://foo.bar.www.smarty.net/foo/bla?blubb=1`
+
+ but deny access to these URIs:
+
+ - `http://smarty.com/foo` (not matching top-level domain \"com\")
+ - `ftp://www.smarty.net/foo` (not matching protocol \"ftp\")
+ - `http://www.smarty.net.otherdomain.com/foo` (not matching end of
+ domain \"smarty.net\")
+
+- `$static_classes` is an array of classes that are considered
+ trusted. The default is an empty array which allows access to all
+ static classes. To disable access to all static classes set
+ $static_classes = null.
+
+- `$streams` is an array of streams that are considered trusted and
+ can be used from within template. To disable access to all streams
+ set $streams = null. An empty array ( $streams = [] ) will
+ allow all streams. The default is array('file').
+
+- `$allowed_modifiers` is an array of (registered / autoloaded)
+ modifiers that should be accessible to the template. If this array
+ is non-empty, only the herein listed modifiers may be used. This is
+ a whitelist.
+
+- `$disabled_modifiers` is an array of (registered / autoloaded)
+ modifiers that may not be accessible to the template.
+
+- `$allowed_tags` is a boolean flag which controls if constants can
+ function-, block and filter plugins that should be accessible to the
+ template. If this array is non-empty, only the herein listed
+ modifiers may be used. This is a whitelist.
+
+- `$disabled_tags` is an array of (registered / autoloaded) function-,
+ block and filter plugins that may not be accessible to the template.
+
+- `$allow_constants` is a boolean flag which controls if constants can
+ be accessed by the template. The default is "true".
+
+- `$allow_super_globals` is a boolean flag which controls if the PHP
+ super globals can be accessed by the template. The default is
+ "true".
+
+If security is enabled, no private methods, functions or properties of
+static classes or assigned objects can be accessed (beginning with
+'_') by the template.
+
+To customize the security policy settings you can extend the
+\Smarty\Security class or create an instance of it.
+
+```php
+enableSecurity('My_Security_Policy');
+```
+
+```php
+allow_constants = false;
+
+$smarty->enableSecurity($my_security_policy);
+```
+
+```php
+enableSecurity();
+```
+
+> **Note**
+>
+> Most security policy settings are only checked when the template gets
+> compiled. For that reason you should delete all cached and compiled
+> template files when you change your security settings.
diff --git a/bundled-libs/smarty/smarty/docs/api/variables/assigning.md b/bundled-libs/smarty/smarty/docs/api/variables/assigning.md
new file mode 100644
index 000000000..40a02c13b
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/api/variables/assigning.md
@@ -0,0 +1,139 @@
+# Assigning variables
+
+Templates start to become really useful once you know how to use variables.
+
+## Basic assigning
+Let's revisit the example from the [basics section](../basics.md). The following script assigns a value to
+the 'companyName' variable and renders the template:
+
+```php
+assign('companyName', 'AC & ME Corp.');
+
+$smarty->display('footer.tpl');
+```
+
+footer.tpl:
+```smarty
+Copyright {$companyName|escape}
+```
+
+Smarty will apply the [escape modifier](../../designers/language-modifiers/language-modifier-escape.md)
+to the value assigned to the variable
+`companyName` and replace `{$companyName|escape}` with the result.
+
+```html
+Copyright AC & ME Corp.
+```
+
+Using `$smarty->assign()` is the most common way of assigning data to templates, but there are several other methods.
+
+## Appending data to an existing variable
+Using `append()`, you can add data to an existing variable, usually an array.
+
+If you append to a string value, it is converted to an array value and
+then appended to. You can explicitly pass name/value pairs, or
+associative arrays containing the name/value pairs. If you pass the
+optional third parameter of TRUE, the value will be merged with the
+current array instead of appended.
+
+Examples:
+
+```php
+append('foo', 'Fred');
+// After this line, foo will now be seen as an array in the template
+$smarty->append('foo', 'Albert');
+
+$array = [1 => 'one', 2 => 'two'];
+$smarty->append('X', $array);
+$array2 = [3 => 'three', 4 => 'four'];
+// The following line will add a second element to the X array
+$smarty->append('X', $array2);
+
+// passing an associative array
+$smarty->append(['city' => 'Lincoln', 'state' => 'Nebraska']);
+```
+
+## Assigning to template objects
+When you use a template objects, as explained in [rendering a template](../rendering.md#creating-a-template-object),
+you can assign data to the template objects directly instead of assigning it to Smarty. This way, you can use different
+sets of data for different templates.
+
+For example:
+```php
+createTemplate('blue.tpl');
+$tplBlue->assign('name', 'The one');
+$tplBlue->display();
+
+$tplRed = $smarty->createTemplate('red.tpl');
+$tplRed->assign('name', 'Neo');
+$tplRed->display();
+```
+
+## Using data objects
+For more complex use cases, Smarty supports the concept of data objects.
+Data objects are containers to hold data. Data objects can be attached to templates when creating them.
+This allows for fine-grained re-use of data.
+
+For example:
+```php
+createData();
+
+// assign variable to the data object
+$data->assign('name', 'Neo');
+
+// create template object which will use variables from the data object
+$tpl = $smarty->createTemplate('index.tpl', $data);
+
+// display the template
+$tpl->display();
+```
+
+## Clearing assigned data
+When re-using templates, you may need to clear data assigned in a previous run. Use `clearAllAssign()` to
+clear the values of all assigned variables on data objects, template objects or the Smarty object.
+
+Examples:
+```php
+assign('Name', 'Fred');
+// ...
+$smarty->clearAllAssign();
+
+// using a data object
+$data = $smarty->createData();
+$data->assign('name', 'Neo');
+// ...
+$data->clearAllAssign();
+
+// using a template
+$tplBlue = $smarty->createTemplate('blue.tpl');
+$tplBlue->assign('name', 'The one');
+// ...
+$tplBlue->clearAllAssign();
+```
+
+Note that there it's only useful to clear assigned data if you:
+
+1. repeatedly re-use templates, and
+2. the variables used may change on each repetition
+
+If your script simply runs once and then ends, or you always assign the same variables, clearing assigned data
+is of no use.
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/docs/api/variables/config-files.md b/bundled-libs/smarty/smarty/docs/api/variables/config-files.md
new file mode 100644
index 000000000..107353bb7
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/api/variables/config-files.md
@@ -0,0 +1,88 @@
+# Loading data from config files
+
+Instead of [assigning data to templates from PHP](assigning.md), you can also
+use a config file.
+
+## Example config file
+Config files are best suited to manage template settings
+from one file. One example is a multi-language application.
+Instead of writing multiple templates to support different languages,
+you can write a single template file and load your language dependent strings
+from config files.
+
+Example `lang.en.ini`:
+```ini
+# global variables
+pageTitle = "Main Menu"
+
+[Customer]
+pageTitle = "Customer Info"
+
+[Login]
+pageTitle = "Login"
+focus = "username"
+Intro = """This is a value that spans more
+ than one line. you must enclose
+ it in triple quotes."""
+
+```
+
+Values of [config file variables](../../designers/language-variables/language-config-variables.md) can be in
+quotes, but not necessary. You can use either single or double quotes.
+If you have a value that spans more than one line, enclose the entire
+value with triple quotes \("""\). You can put comments into config
+files by any syntax that is not a valid config file syntax. We recommend
+using a `#` (hash) at the beginning of the line.
+
+The example config file above has two sections. Section names are
+enclosed in \[brackets\]. Section names can be arbitrary strings not
+containing `[` or `]` symbols. The variable at the top is a global
+variable. Global variables are always
+loaded from the config file. If a particular section is loaded, then the
+global variables and the variables from that section are also loaded. If
+a variable exists both as a global and in a section, the section
+variable is used.
+
+## Loading a config file
+
+Config files are loaded into templates with the built-in template
+function [`{config_load}`](../../designers/language-builtin-functions/language-function-config-load.md) or by calling
+`configLoad()` from PHP:
+
+```php
+configLoad('lang.en.ini');
+```
+
+Load a specific section with:
+
+```php
+configLoad('lang.en.ini', 'Customer');
+```
+
+Note that the global section will always be loaded.
+
+## Retrieving config variables in PHP
+
+
+## Loading from a resource
+Config files (or resources) are loaded by the same resource facilities
+as templates. That means that a config file can also be loaded from a db. See [resources](../resources.md)
+for more information.
+
+## Config overwrite
+If you name two variables the same within a section,
+the last one will be used unless you call:
+```php
+setConfigOverwrite(false);
+```
+When config overwrite is disabled, Smarty will create arrays of config file variables when it encounters
+multiple entries with the same name.
+
+See also [`{config_load}`](../../designers/language-builtin-functions/language-function-config-load.md),
+[`$default_config_handler_func`](../../programmers/api-variables/variable-default-config-handler-func.md),
+[`getConfigVars()`](../../programmers/api-functions/api-get-config-vars.md),
+[`clearConfig()`](../../programmers/api-functions/api-clear-config.md) and
+[`configLoad()`](../../programmers/api-functions/api-config-load.md)
diff --git a/bundled-libs/smarty/smarty/docs/api/variables/objects.md b/bundled-libs/smarty/smarty/docs/api/variables/objects.md
new file mode 100644
index 000000000..9befcb18e
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/api/variables/objects.md
@@ -0,0 +1,106 @@
+# Objects
+
+Smarty allows access to PHP [objects](https://www.php.net/object) through
+the templates.
+
+> **Note**
+>
+> When you assign/register objects to templates, be sure that all
+> properties and methods accessed from the template are for presentation
+> purposes only. It is very easy to inject application logic through
+> objects, and this leads to poor designs that are difficult to manage.
+> See the Best Practices section of the Smarty website.
+
+There are two ways to access them.
+
+## Assign the object
+You can assign objects to a template and access them much like any other assigned variable.
+
+Example:
+```php
+assign('myobj', new My_Object());
+
+$smarty->display('index.tpl');
+```
+
+And here's how to access your object in `index.tpl`:
+
+```smarty
+{$myobj->meth1('foo',$bar)}
+```
+
+
+
+## Register the object
+Registerd objects use a different template syntax. Also, a registered object
+can be restricted to certain methods or
+properties. However, **a registered object cannot be looped over or
+assigned in arrays of objects**, etc.
+
+If security is enabled, no private methods or functions can be accessed
+(beginning with '_'). If a method and property of the same name exist,
+the method will be used.
+
+You can restrict the methods and properties that can be accessed by
+listing them in an array as the third registration parameter.
+
+By default, parameters passed to objects through the templates are
+passed the same way [custom tags](../../designers/language-custom-functions/index.md) get
+them. An associative array is passed as the first parameter, and the
+smarty object as the second. If you want the parameters passed one at a
+time for each argument like traditional object parameter passing, set
+the fourth registration parameter to FALSE.
+
+The optional fifth parameter has only effect with `format` being TRUE
+and contains a list of methods that should be treated as blocks. That
+means these methods have a closing tag in the template
+(`{foobar->meth2}...{/foobar->meth2}`) and the parameters to the methods
+have the same synopsis as the parameters for
+[`block tags`](../extending/block-tags.md): They get the four
+parameters `$params`, `$content`, `$smarty` and `&$repeat` and they also
+behave like block tags.
+
+```php
+registerObject('foobar', $myobj);
+
+// if we want to restrict access to certain methods or properties, list them
+$smarty->registerObject('foobar', $myobj, array('meth1','meth2','prop1'));
+
+// if you want to use the traditional object parameter format, pass a boolean of false
+$smarty->registerObject('foobar', $myobj, null, false);
+
+$smarty->display('index.tpl');
+```
+
+And here's how to access your objects in `index.tpl`:
+
+```smarty
+{* access our registered object *}
+{foobar->meth1 p1='foo' p2=$bar}
+
+{* you can also assign the output *}
+{foobar->meth1 p1='foo' p2=$bar assign='output'}
+the output was {$output}
+```
diff --git a/bundled-libs/smarty/smarty/docs/api/variables/static-class-methods.md b/bundled-libs/smarty/smarty/docs/api/variables/static-class-methods.md
new file mode 100644
index 000000000..fd3fea4c8
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/api/variables/static-class-methods.md
@@ -0,0 +1,39 @@
+# Static Classes
+
+You can directly access static classes. The syntax is roughly the same as in
+PHP.
+
+> **Note**
+>
+> Direct access to PHP classes is not recommended. This ties the
+> underlying application code structure directly to the presentation,
+> and also complicates template syntax. It is recommended to register
+> plugins which insulate templates from PHP classes/objects. Use at your
+> own discretion.
+
+## Examples
+
+**class constant BAR**
+```smarty
+{assign var=foo value=myclass::BAR}
+```
+
+**method result**
+```smarty
+{assign var=foo value=myclass::method()}
+```
+
+**method chaining**
+```smarty
+{assign var=foo value=myclass::method1()->method2}
+```
+
+**property bar of class myclass**
+```smarty
+{assign var=foo value=myclass::$bar}
+```
+
+**using Smarty variable bar as class name**
+```smarty
+{assign var=foo value=$bar::method}
+```
diff --git a/bundled-libs/smarty/smarty/docs/api/variables/streams.md b/bundled-libs/smarty/smarty/docs/api/variables/streams.md
new file mode 100644
index 000000000..c872cf8bb
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/api/variables/streams.md
@@ -0,0 +1,16 @@
+# Streams
+
+You can also use streams to call variables. *{$foo:bar}* will use the
+*foo://bar* stream to get the template variable.
+
+Using a PHP stream for a template variable resource from within a
+template.
+
+```smarty
+{$foo:bar}
+```
+
+NB. Support for using streams to call variables is deprecated since Smarty v5.1 and will be removed
+in a future version.
+
+See also [`Template Resources`](../resources.md)
diff --git a/bundled-libs/smarty/smarty/docs/appendixes/tips.md b/bundled-libs/smarty/smarty/docs/appendixes/tips.md
index 3c6e6b96f..e4e38d4be 100644
--- a/bundled-libs/smarty/smarty/docs/appendixes/tips.md
+++ b/bundled-libs/smarty/smarty/docs/appendixes/tips.md
@@ -209,8 +209,7 @@ fetching the data up front?
You can do this by writing a custom plugin for fetching the content and
assigning it to a template variable.
-`function.load_ticker.php` - drop file in
-[`$plugins directory`](../programmers/api-variables/variable-plugins-dir.md)
+`function.load_ticker.php`
```php
diff --git a/bundled-libs/smarty/smarty/docs/designers/chapter-debugging-console.md b/bundled-libs/smarty/smarty/docs/designers/chapter-debugging-console.md
index 6704fce2f..50acd1950 100644
--- a/bundled-libs/smarty/smarty/docs/designers/chapter-debugging-console.md
+++ b/bundled-libs/smarty/smarty/docs/designers/chapter-debugging-console.md
@@ -10,8 +10,7 @@ of the console.
Set [`$debugging`](../programmers/api-variables/variable-debugging.md) to TRUE in Smarty, and if needed
set [`$debug_tpl`](../programmers/api-variables/variable-debug-template.md) to the template resource
-path to `debug.tpl` (this is in [`SMARTY_DIR`](../programmers/smarty-constants.md) by
-default). When you load the page, a Javascript console window will pop
+path to `debug.tpl`. When you load the page, a Javascript console window will pop
up and give you the names of all the included templates and assigned
variables for the current page.
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-basic-syntax/index.md b/bundled-libs/smarty/smarty/docs/designers/language-basic-syntax/index.md
index c0a12a9be..e054d143c 100644
--- a/bundled-libs/smarty/smarty/docs/designers/language-basic-syntax/index.md
+++ b/bundled-libs/smarty/smarty/docs/designers/language-basic-syntax/index.md
@@ -14,7 +14,7 @@ A simple Smarty template could look like this:
All Smarty template tags are enclosed within delimiters. By default
these are `{` and `}`, but they can be
-[changed](../../programmers/api-variables/variable-left-delimiter.md).
+[changed](../../designers/language-basic-syntax/language-escaping.md).
For the examples in this manual, we will assume that you are using the
default delimiters. In Smarty, all content outside of delimiters is
@@ -22,12 +22,12 @@ displayed as static content, or unchanged. When Smarty encounters
template tags, it attempts to interpret them, and displays the
appropriate output in their place.
-The basis components of the Smarty syntax are:
+The basic components of the Smarty syntax are:
- [Comments](language-syntax-comments.md)
- [Variables](language-syntax-variables.md)
-- [Functions](language-syntax-functions.md)
+- [Operators](language-syntax-operators.md)
+- [Tags](language-syntax-tags.md)
- [Attributes](language-syntax-attributes.md)
- [Quotes](language-syntax-quotes.md)
-- [Math](language-math.md)
- [Escaping](language-escaping.md)
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md b/bundled-libs/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md
index 4c75e09e6..9132b8c02 100644
--- a/bundled-libs/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md
+++ b/bundled-libs/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md
@@ -45,8 +45,7 @@ variables.
Smarty's default delimiters { and } cleanly represent presentational
content. However, if another set of delimiters suit your needs better,
you can change them with Smarty's
-[`$left_delimiter`](../../programmers/api-variables/variable-left-delimiter.md) and
-[`$right_delimiter`](../../programmers/api-variables/variable-right-delimiter.md) values.
+`setLeftDelimiter()` and `setRightDelimiter()` methods.
> **Note**
>
@@ -57,8 +56,8 @@ you can change them with Smarty's
```php
left_delimiter = '';
+$smarty->setLeftDelimiter('');
$smarty->assign('foo', 'bar');
$smarty->assign('name', 'Albert');
@@ -69,7 +68,7 @@ Where the template is:
```smarty
Welcome to Smarty
-
@@ -51,7 +51,7 @@ spiders to lift email addresses off of a site.
me@example.com
{mailto address="me@example.com" encode="javascript_charcode"}
-
```
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md b/bundled-libs/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md
index 4089fdb33..cb2a8d708 100644
--- a/bundled-libs/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md
+++ b/bundled-libs/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md
@@ -1,6 +1,6 @@
# {textformat}
-`{textformat}` is a [block function](../../programmers/plugins/plugins-block-functions.md) used to
+`{textformat}` is a block tag used to
format text. It basically cleans up spaces and special characters, and
formats paragraphs by wrapping at a boundary and indenting lines.
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/index.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/index.md
index c9aeef887..3f52c2e77 100644
--- a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/index.md
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/index.md
@@ -1,39 +1,15 @@
# Variable Modifiers
Variable modifiers can be applied to
-[variables](../language-variables/index.md), [custom functions](../language-custom-functions/index.md)
+[variables](../language-variables/index.md), [custom tags](../language-custom-functions/index.md)
or strings. To apply a modifier,
specify the value followed by a `|` (pipe) and the modifier name. A
modifier may accept additional parameters that affect its behavior.
These parameters follow the modifier name and are separated by a `:`
-(colon). Also, *all php-functions can be used as modifiers implicitly*
-(more below) and modifiers can be
-[combined](../language-combining-modifiers.md).
-
-- [capitalize](language-modifier-capitalize.md)
-- [cat](language-modifier-cat.md)
-- [count_characters](language-modifier-count-characters.md)
-- [count_paragraphs](language-modifier-count-paragraphs.md)
-- [count_sentences](language-modifier-count-sentences.md)
-- [count_words](language-modifier-count-words.md)
-- [date_format](language-modifier-date-format.md)
-- [default](language-modifier-default.md)
-- [escape](language-modifier-escape.md)
-- [from_charset](language-modifier-from-charset.md)
-- [indent](language-modifier-indent.md)
-- [lower](language-modifier-lower.md)
-- [nl2br](language-modifier-nl2br.md)
-- [regex_replace](language-modifier-regex-replace.md)
-- [replace](language-modifier-replace.md)
-- [spacify](language-modifier-spacify.md)
-- [string_format](language-modifier-string-format.md)
-- [strip](language-modifier-strip.md)
-- [strip_tags](language-modifier-strip-tags.md)
-- [to_charset](language-modifier-to-charset.md)
-- [truncate](language-modifier-truncate.md)
-- [unescape](language-modifier-unescape.md)
-- [upper](language-modifier-upper.md)
-- [wordwrap](language-modifier-wordwrap.md)
+(colon).
+
+Modifiers can be applied to any type of variables, including arrays
+and objects.
## Examples
@@ -65,58 +41,64 @@ These parameters follow the modifier name and are separated by a `:`
{* php's count *}
{$myArray|@count}
-{* this will uppercase and truncate the whole array *}
+{* this will uppercase the whole array *}
-{html_options output=$my_array|upper|truncate:20}
+{html_options output=$my_array|upper}
+```
+
+## Combining Modifiers
+
+You can apply any number of modifiers to a variable. They will be
+applied in the order they are combined, from left to right. They must be
+separated with a `|` (pipe) character.
+
+```php
+assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.');
+```
+
+where template is:
+
+```smarty
+{$articleTitle}
+{$articleTitle|upper|spacify}
+{$articleTitle|lower|spacify|truncate}
+{$articleTitle|lower|truncate:30|spacify}
+{$articleTitle|lower|spacify|truncate:30:". . ."}
+```
+
+
+The above example will output:
+
+```
+Smokers are Productive, but Death Cuts Efficiency.
+S M O K E R S A R ....snip.... H C U T S E F F I C I E N C Y .
+s m o k e r s a r ....snip.... b u t d e a t h c u t s...
+s m o k e r s a r e p r o d u c t i v e , b u t . . .
+s m o k e r s a r e p. . .
+```
+
+## Using modifiers in expressions
+
+Modifiers can also be used in expressions. For example, you can use the [isset modifier](./language-modifier-isset.md)
+to test if a variable holds a value different from null.
+
+```smarty
+{if $varA|isset}
+ variable A is set
+{/if}
+```
+
+You can also use modifiers in expressions in a PHP-style syntax:
+
+```smarty
+{if isset($varA)}
+ variable A is set
+{/if}
```
-
-- Modifiers can be applied to any type of variables, including arrays
- and objects.
-
- > **Note**
- >
- > The default behavior was changed with Smarty 3. In Smarty 2.x, you
- > had to use an "`@`" symbol to apply a modifier to an array, such
- > as `{$articleTitle|@count}`. With Smarty 3, the "`@`" is no
- > longer necessary, and is ignored.
- >
- > If you want a modifier to apply to each individual item of an
- > array, you will either need to loop the array in the template, or
- > provide for this functionality inside your modifier function.
-
- > **Note**
- >
- > Second, in Smarty 2.x, modifiers were applied to the result of
- > math expressions like `{8+2}`, meaning that
- > `{8+2|count_characters}` would give `2`, as 8+2=10 and 10 is two
- > characters long. With Smarty 3, modifiers are applied to the
- > variables or atomic expressions before executing the calculations,
- > so since 2 is one character long, `{8+2|count_characters}`
- > gives 9. To get the old result use parentheses like
- > `{(8+2)|count_characters}`.
-
-- Modifiers are autoloaded from the
- [`$plugins_dir`](../../programmers/api-variables/variable-plugins-dir.md) or can be registered
- explicitly with the [`registerPlugin()`](../../programmers/api-functions/api-register-plugin.md)
- function. The later is useful for sharing a function between php
- scripts and smarty templates.
-
-- All php-functions can be used as modifiers implicitly, as
- demonstrated in the example above. However, using php-functions as
- modifiers has two little pitfalls:
-
- - First - sometimes the order of the function-parameters is not
- the desirable one. Formatting `$foo` with
- `{"%2.f"|sprintf:$foo}` actually works, but asks for the more
- intuitive, like `{$foo|string_format:"%2.f"}` that is provided
- by the Smarty distribution.
-
- - Secondly - if security is enabled, all php-functions that are to
- be used as modifiers have to be declared trusted in the
- `$modifiers` property of the security policy. See the
- [Security](../../programmers/advanced-features/advanced-features-security.md) section for details.
See also [`registerPlugin()`](../../programmers/api-functions/api-register-plugin.md), [combining
modifiers](../language-combining-modifiers.md). and [extending smarty with
-plugins](../../programmers/plugins.md)
+plugins](../../api/extending/introduction.md)
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-count.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-count.md
new file mode 100644
index 000000000..36436a398
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-count.md
@@ -0,0 +1,21 @@
+# count
+
+Returns the number of elements in an array (or Countable object). Will return 0 for null.
+Returns 1 for any other type (such as a string).
+
+If the optional mode parameter is set to 1, count() will recursively count the array.
+This is particularly useful for counting all the elements of a multidimensional array.
+
+## Basic usage
+```smarty
+{if $myVar|count > 3}4 or more{/if}
+{if count($myVar) > 3}4 or more{/if}
+```
+
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|--------------------------------------------------------|
+| 1 | int | No | If set to 1, count() will recursively count the array. |
+
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-debug-print-var.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-debug-print-var.md
new file mode 100644
index 000000000..ce3f86a73
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-debug-print-var.md
@@ -0,0 +1,26 @@
+# debug_print_var
+
+
+
+Returns the value of the given variable in a human-readable format in HTML.
+Used in the [debug console](../chapter-debugging-console.md), but you can also use it in your template
+while developing to see what is going on under the hood.
+
+> **Note**
+>
+> Use for debugging only! Since you may accidentally reveal sensitive information or introduce vulnerabilities such as XSS using this
+method never use it in production.
+
+## Basic usage
+```smarty
+{$myVar|debug_print_var}
+```
+
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|------------------------------------------------------------------------|
+| 1 | int | No | maximum recursion depth if $var is an array or object (defaults to 10) |
+| 2 | int | No | maximum string length if $var is a string (defaults to 40) |
+
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md
index 6fd5dd2b4..18c98f1cb 100644
--- a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md
@@ -73,6 +73,6 @@ This snippet is useful for emails, but see also
{$EmailAddress|escape:'mail'}
```
-See also [escaping smarty parsing](../language-basic-syntax/language-escaping.md),
+See also [auto-escaping](../../api/configuring.md#enabling-auto-escaping), [escaping smarty parsing](../language-basic-syntax/language-escaping.md),
[`{mailto}`](../language-custom-functions/language-function-mailto.md) and the [obfuscating email
-addresses](../../appendixes/tips.md#obfuscating-e-mail-addresses) page.
+addresses](../../appendixes/tips.md#obfuscating-e-mail-addresses) pages.
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md
index bf4b4769e..25c4d2d9e 100644
--- a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md
@@ -16,5 +16,5 @@ modifier](language-modifier-to-charset.md).
> modifier should only be used in cases where the application cannot
> anticipate that a certain string is required in another encoding.
-See also [Charset Encoding](../../programmers/charset.md), [to_charset
+See also [Configuring Smarty](../../api/configuring.md), [to_charset
modifier](language-modifier-to-charset.md).
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-is_array.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-is_array.md
new file mode 100644
index 000000000..f6cfffcd1
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-is_array.md
@@ -0,0 +1,9 @@
+# is_array
+
+Return true if the variable passed to it is an array.
+
+## Basic usage
+
+```smarty
+{if $myVar|is_array}it's an array{/if}
+```
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-isset.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-isset.md
new file mode 100644
index 000000000..83e31dfa9
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-isset.md
@@ -0,0 +1,11 @@
+# isset
+
+Returns true if the variable(s) passed to it are different from null.
+
+If multiple parameters are supplied then isset() will return true only if all of the parameters are
+not null.
+
+## Basic usage
+```smarty
+{if $myVar|isset}all set!{/if}
+```
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-join.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-join.md
new file mode 100644
index 000000000..9a044714d
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-join.md
@@ -0,0 +1,26 @@
+# join
+
+Returns a string containing all the element of the given array
+with the separator string between each.
+
+## Basic usage
+
+For `$myArray` populated with `['a','b','c']`, the following will return the string `abc`.
+```smarty
+{$myArray|join}
+```
+
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|--------|----------|-------------------------------------------------------------|
+| 1 | string | No | glue used between array elements. Defaults to empty string. |
+
+## Examples
+
+
+For `$myArray` populated with `[1,2,3]`, the following will return the string `1-2-3`.
+```smarty
+{$myArray|join:"-"}
+```
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-json-encode.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-json-encode.md
new file mode 100644
index 000000000..4e70f0c26
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-json-encode.md
@@ -0,0 +1,27 @@
+# json_encode
+
+Transforms a value into a valid JSON string.
+
+## Basic usage
+```smarty
+{$user|json_encode}
+```
+Depending on the value of `$user` this would return a string in JSON-format, e.g. `{"username":"my_username","email":"my_username@smarty.net"}`.
+
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-------------------------------------------------------------------------------------------|
+| 1 | int | No | bitmask of flags, directly passed to [PHP's json_encode](https://www.php.net/json_encode) |
+
+
+## Examples
+
+By passing `16` as the second parameter, you can force json_encode to always format the JSON-string as an object.
+Without it, an array `$myArray = ["a","b"]` would be formatted as a javascript array:
+
+```smarty
+{$myArray|json_encode} # renders: ["a","b"]
+{$myArray|json_encode:16} # renders: {"0":"a","1":"b"}
+```
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-noprint.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-noprint.md
new file mode 100644
index 000000000..5dbfaa30d
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-noprint.md
@@ -0,0 +1,9 @@
+# noprint
+
+Always returns an empty string. This can be used to call a function or a method on an object that
+returns output, and suppress the output.
+
+## Basic usage
+```smarty
+{$controller->sendEmail()|noprint}
+```
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-number-format.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-number-format.md
new file mode 100644
index 000000000..44c3acf44
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-number-format.md
@@ -0,0 +1,32 @@
+# number_format
+
+Allows you to format a number using decimals and a thousands-separator. By default, the number of decimals is 0
+and the number is rounded.
+
+## Basic usage
+```smarty
+{$num = 2000.151}
+{$num|number_format} # renders: 2,000
+```
+
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|--------|----------|---------------------------------------|
+| 1 | int | No | number of decimals (defaults to 0) |
+| 2 | string | No | decimal separator (defaults to ".") |
+| 3 | string | No | thousands-separator (defaults to ",") |
+
+
+## Examples
+
+```smarty
+{$num = 2000.151}
+{$num|number_format:2} # renders: 2,000.15
+```
+
+```smarty
+{$num = 2000.151}
+{$num|number_format:2:".":""} # renders: 2000.15
+```
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-raw.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-raw.md
new file mode 100644
index 000000000..e9cce97d3
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-raw.md
@@ -0,0 +1,8 @@
+# raw
+
+Prevents variable escaping when [auto-escaping](../../api/configuring.md#enabling-auto-escaping) is activated.
+
+## Basic usage
+```smarty
+{$myVar|raw}
+```
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-round.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-round.md
new file mode 100644
index 000000000..c05b899a9
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-round.md
@@ -0,0 +1,35 @@
+# round
+
+Rounds a number to the specified precision.
+
+## Basic usage
+```smarty
+{3.14|round} # renders: 3
+```
+
+```smarty
+{3.141592|round:2} # renders: 3.14
+```
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|---------------------------|
+| 1 | int | No | precision (defaults to 0) |
+| 2 | int | No | mode (defaults to 1) |
+
+If 'precision' is negative, the number is rounded to the nearest power of 10. See examples below.
+
+The parameter 'mode' defines how the rounding is done. By default, 2.5 is rounded to 3, whereas 2.45 is rounded to 2.
+You usually don't need to change this. For more details on rounding modes,
+see [PHP's documentation on round](https://www.php.net/manual/en/function.round).
+
+## Examples
+
+By passing `16` as the second parameter, you can force json_encode to always format the JSON-string as an object.
+Without it, an array `$myArray = ["a","b"]` would be formatted as a javascript array:
+
+```smarty
+{$myArray|json_encode} # renders: ["a","b"]
+{$myArray|json_encode:16} # renders: {"0":"a","1":"b"}
+```
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-split.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-split.md
new file mode 100644
index 000000000..caef884f5
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-split.md
@@ -0,0 +1,32 @@
+# split
+
+Splits a string into an array, using the optional second parameter as the separator.
+
+## Basic usage
+
+For `$chars` populated with `'abc'`, the following will produce a html list with 3 elements (a, b and c).
+```smarty
+
+ {foreach $chars|split as $char}
+ {$char|escape}
+ {/foreach}
+
+```
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|--------|----------|------------------------------------------------------------------------------------------------------------------------------|
+| 1 | string | No | separator used to split the string on. Defaults to empty string, causing each character in the source string to be separate. |
+
+## Examples
+
+
+For `$ids` populated with `'1,2,3'`, the following will produce a html list with 3 elements (1, 2 and 3).
+```smarty
+
+ {foreach $ids|split:',' as $id}
+ {$id|escape}
+ {/foreach}
+
+```
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-str-repeat.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-str-repeat.md
new file mode 100644
index 000000000..1ae1824d6
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-str-repeat.md
@@ -0,0 +1,14 @@
+# str_repeat
+
+Repeats the given value n times.
+
+## Basic usage
+```smarty
+{"hi"|str_repeat:2} # renders: hihi
+```
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-----------------------|
+| 1 | int | yes | number of repetitions |
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-strlen.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-strlen.md
new file mode 100644
index 000000000..4c1f37ab7
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-strlen.md
@@ -0,0 +1,9 @@
+# strlen
+
+Returns the length (number of characters) in the given string, including spaces.
+
+## Basic usage
+```smarty
+{"Smarty"|strlen} # renders: 6
+{156|strlen} # renders: 3
+```
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-substr.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-substr.md
new file mode 100644
index 000000000..a79d8a4d1
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-substr.md
@@ -0,0 +1,25 @@
+# substr
+
+Returns a part (substring) of the given string starting at a given offset.
+
+## Basic usage
+```smarty
+{"Smarty"|substr:2} # renders: arty
+{"Smarty"|substr:2:3} # renders: art
+```
+
+## Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-----------------------------------------------------|
+| 1 | int | yes | offset (zero based, can be negative) |
+| 2 | int | no | length of substring returned (unlimited of omitted) |
+
+
+## Examples
+
+When used with a negative offset, the substring starts n characters from the end of the string counting backwards.
+```smarty
+{"Smarty"|substr:-2} # renders: ty
+{"Smarty"|substr:-2:1} # renders: t
+```
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md
index c0b003842..aa8cfd53f 100644
--- a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md
@@ -16,5 +16,5 @@ modifier](#language.modifier.from_charset).
> modifier should only be used in cases where the application cannot
> anticipate that a certain string is required in another encoding.
-See also [Charset Encoding](../../programmers/charset.md), [from_charset
+See also [Configuring Smarty](../../api/configuring.md), [from_charset
modifier](language-modifier-from-charset.md).
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md
index 3173059c9..edce96381 100644
--- a/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md
+++ b/bundled-libs/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md
@@ -29,5 +29,5 @@ If Strike isn't Settled Quickly it may Last a While.
IF STRIKE ISN'T SETTLED QUICKLY IT MAY LAST A WHILE.
```
-See also [`lower`](lower) and
+See also [`lower`](./language-modifier-lower.md) and
[`capitalize`](language-modifier-capitalize.md).
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-variables/index.md b/bundled-libs/smarty/smarty/docs/designers/language-variables/index.md
index 58ae6eb95..0278c9170 100644
--- a/bundled-libs/smarty/smarty/docs/designers/language-variables/index.md
+++ b/bundled-libs/smarty/smarty/docs/designers/language-variables/index.md
@@ -8,11 +8,11 @@ variable depends on what symbol it is prefixed or enclosed within.
- [{$smarty} reserved variable](language-variables-smarty.md)
Variables in Smarty can be either displayed directly or used as
-arguments for [functions](../language-basic-syntax/language-syntax-functions.md),
+arguments for [tags](../language-basic-syntax/language-syntax-tags.md),
[attributes](../language-basic-syntax/language-syntax-attributes.md) and
[modifiers](../language-modifiers/index.md), inside conditional expressions, etc.
To print a variable, simply enclose it in the
-[delimiters](../../programmers/api-variables/variable-left-delimiter.md) so that it is the only thing
+[delimiters](../../designers/language-basic-syntax/language-escaping.md) so that it is the only thing
contained between them.
```smarty
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md b/bundled-libs/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md
index bd356a2b0..9465a89c5 100644
--- a/bundled-libs/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md
+++ b/bundled-libs/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md
@@ -7,7 +7,7 @@ Variables assigned from PHP are referenced by preceding them with a dollar
```php
assign('firstname', 'Doug');
@@ -110,7 +110,7 @@ zaphod@slartibartfast.example.com
## Objects
-Properties of [objects](../../programmers/advanced-features/advanced-features-objects.md) assigned from PHP
+Properties of [objects](../../api/variables/objects.md) assigned from PHP
can be referenced by specifying the property name after the `->` symbol.
```smarty
diff --git a/bundled-libs/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md b/bundled-libs/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md
index da543fb62..cbeb66874 100644
--- a/bundled-libs/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md
+++ b/bundled-libs/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md
@@ -66,8 +66,7 @@ difference.
## {$smarty.const}
-You can access PHP constant values directly. See also [smarty
-constants](../../programmers/smarty-constants.md).
+You can access PHP constant values directly.
```php
`, etc.
-- The [`{if}..{elseif}..{else}..{/if}`](#language.function.if)
+- The [`{if}..{elseif}..{else}..{/if}`](designers/language-builtin-functions/language-function-if.md)
constructs are passed to the PHP parser, so the `{if...}` expression
syntax can be as simple or as complex an evaluation as you like.
- Allows unlimited nesting of
- [`sections`](#language.function.section), `if's` etc.
-- Built-in [caching](#caching) support
-- Arbitrary [template](#resources) sources
-- [Template Inheritance](#advanced.features.template.inheritance) for
+ [`sections`](designers/language-builtin-functions/language-function-section.md), `if's` etc.
+- Built-in [caching](api/caching/basics.md) support
+- Arbitrary [template](api/resources.md) sources
+- [Template Inheritance](api/inheritance.md) for
easy management of template content.
-- [Plugin](#plugins) architecture
+- [Plugin](api/extending/introduction.md) architecture
## Separation of presentation from application code
- This means templates can certainly contain logic under the condition
that it is for presentation only. Things such as
- [including](./designers/language-builtin-functions/language-function-include.md) other templates,
- [alternating](./designers/language-custom-functions/language-function-cycle.md) table row colors,
- [upper-casing](./designers/language-modifiers/language-modifier-upper.md) a variable,
- [looping](./designers/language-builtin-functions/language-function-foreach.md) over an array of data and
+ [including](designers/language-builtin-functions/language-function-include.md) other templates,
+ [alternating](designers/language-custom-functions/language-function-cycle.md) table row colors,
+ [upper-casing](designers/language-modifiers/language-modifier-upper.md) a variable,
+ [looping](designers/language-builtin-functions/language-function-foreach.md) over an array of data and
rendering it are examples of presentation logic.
- This does not mean however that Smarty forces a separation of
business and presentation logic. Smarty has no knowledge of which is
@@ -61,7 +60,7 @@ inheritance, instead of including other templates we maintain our
templates as single pages. We can then manipulate blocks of content
within by inheriting them. This makes templates intuitive, efficient and
easy to manage. See
-[Template Inheritance](./programmers/advanced-features/advanced-features-template-inheritance.md)
+[Template Inheritance](api/inheritance.md)
for more info.
## Why not use XML/XSLT syntax?
@@ -135,8 +134,8 @@ that would be needed otherwise? Does the codebase or framework you plan
on using have the features you need for the presentation component?
## Sites using Smarty
-Many well-known PHP projects make use of Smarty such as XOOPS CMS, CMS Made Simple, Tiki
-CMS/Groupware and X-Cart to name a few.
+Many well-known PHP projects make use of Smarty such as XOOPS CMS, CMS Made Simple,
+Tiki Wiki CMS Groupware and X-Cart to name a few.
## Summary
Whether you are using Smarty for a small website or massive enterprise
diff --git a/bundled-libs/smarty/smarty/docs/getting-started.md b/bundled-libs/smarty/smarty/docs/getting-started.md
index f549e50e7..3628fd203 100644
--- a/bundled-libs/smarty/smarty/docs/getting-started.md
+++ b/bundled-libs/smarty/smarty/docs/getting-started.md
@@ -1,7 +1,7 @@
# Getting started
## Requirements
-Smarty can be run with PHP 7.1 to PHP 8.3.
+Smarty can be run with PHP 7.2 to PHP 8.3.
## Installation
Smarty can be installed with [Composer](https://getcomposer.org/).
@@ -16,32 +16,39 @@ To get the latest, unreleased version, use:
composer require smarty/smarty:dev-master
```
-To get the previous stable version of Smarty, Smarty 3, use:
+To get the previous stable version of Smarty, Smarty 4, use:
```shell
-composer require smarty/smarty:^3
+composer require smarty/smarty:^4
```
Here's how you create an instance of Smarty in your PHP scripts:
```php
setTemplateDir('/some/template/dir');
$smarty->setConfigDir('/some/config/dir');
@@ -70,6 +77,8 @@ You can verify if your system has the correct access rights for
these directories with [`testInstall()`](./programmers/api-functions/api-test-install.md):
```php
+setTemplateDir('/some/template/dir');
$smarty->setConfigDir('/some/config/dir');
@@ -78,12 +87,14 @@ $smarty->setCacheDir('/some/cache/dir');
$smarty->testInstall();
```
+## Basic usage
+
Now, let's create the `index.tpl` file that Smarty will display. This
needs to be located in the [`$template_dir`](./programmers/api-variables/variable-template-dir.md).
```smarty
{* Smarty *}
-Hello {$name}, welcome to Smarty!
+Hello {$name|escape}, welcome to Smarty!
```
> **Note**
@@ -103,6 +114,7 @@ Now lets edit our php file. We'll create an instance of Smarty,
require 'vendor/autoload.php';
+use Smarty\Smarty;
$smarty = new Smarty();
$smarty->setTemplateDir('/web/www.example.com/guestbook/templates/');
@@ -128,6 +140,20 @@ Now, run your PHP file. You should see *"Hello Ned, welcome to Smarty!"*
You have completed the basic setup for Smarty!
+## Escaping
+You may have noticed that the example template above renders the `$name` variable using
+the [escape modifier](./designers/language-modifiers/language-modifier-escape.md). This
+modifier makes string 'safe' to use in the context of an HTML page.
+
+If you are primarily using Smarty for HTML-pages, it is recommended to enable automatic
+escaping. This way, you don't have to add `|escape` to every variable you use on a web page.
+Smarty will handle it automatically for you!
+
+Enable auto-escaping for HTML as follows:
+```php
+$smarty->setEscapeHtml(true);
+```
+
## Extended Setup
This is a continuation of the [basic installation](#installation), please read that first!
@@ -140,7 +166,9 @@ the same vars, etc., we can do that in one place.
```php
setCompileDir('/web/www.example.com/guestbook/templates_c/');
$this->setConfigDir('/web/www.example.com/guestbook/configs/');
$this->setCacheDir('/web/www.example.com/guestbook/cache/');
+
+ $this->setEscapeHtml(true);
$this->caching = Smarty::CACHING_LIFETIME_CURRENT;
$this->assign('app_name', 'Guest Book');
@@ -158,10 +188,10 @@ class Smarty_GuestBook extends Smarty {
}
```
-Now, we can use `Smarty_GuestBook` instead of `Smarty` in our scripts:
+Now, we can use `My_GuestBook` instead of `Smarty` in our scripts:
```php
assign('name', 'Ned');
$smarty->display('index.tpl');
```
diff --git a/bundled-libs/smarty/smarty/docs/img/favicon.ico b/bundled-libs/smarty/smarty/docs/img/favicon.ico
new file mode 100644
index 000000000..aec1d8e3d
Binary files /dev/null and b/bundled-libs/smarty/smarty/docs/img/favicon.ico differ
diff --git a/bundled-libs/smarty/smarty/docs/img/smarty.svg b/bundled-libs/smarty/smarty/docs/img/smarty.svg
new file mode 100644
index 000000000..cd8c86639
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/img/smarty.svg
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/docs/index.md b/bundled-libs/smarty/smarty/docs/index.md
index cff5e490e..5c788f9ba 100644
--- a/bundled-libs/smarty/smarty/docs/index.md
+++ b/bundled-libs/smarty/smarty/docs/index.md
@@ -1,8 +1,8 @@
-# Smarty 4 Documentation
+# Smarty Documentation
Smarty is a template engine for PHP, facilitating the separation of presentation (HTML/CSS) from application logic.
It allows you to write **templates**, using **variables**, **modifiers**, **functions** and **comments**, like this:
-```html
+```smarty
{$title|escape}
@@ -20,31 +20,16 @@ and 480 for $height, the result is:
```
-## Introduction
+## Getting Started
+- [Getting Started](./getting-started.md)
- [Philosophy](./philosophy.md) - or "Why do I need a template engine?"
- [Features](./features.md) - or "Why do I want Smarty?"
-- [Getting Started](./getting-started.md)
-## Smarty for template designers
-- [Basic Syntax](designers/language-basic-syntax/index.md)
-- [Variables](designers/language-variables/index.md)
-- [Variable Modifiers](designers/language-modifiers/index.md)
-- [Combining Modifiers](./designers/language-combining-modifiers.md)
-- [Built-in Functions](designers/language-builtin-functions/index.md)
-- [Custom Functions](designers/language-custom-functions/index.md)
-- [Config Files](./designers/config-files.md)
-- [Debugging Console](./designers/chapter-debugging-console.md)
-
-## Smarty for php developers
-- [Charset Encoding](./programmers/charset.md)
-- [Constants](./programmers/smarty-constants.md)
-- [Smarty Class Variables](./programmers/api-variables.md)
-- [Smarty Class Methods](./programmers/api-functions.md)
-- [Caching](./programmers/caching.md)
-- [Resources](./programmers/resources.md)
-- [Advanced Features](./programmers/advanced-features.md)
-- [Extending Smarty With Plugins](./programmers/plugins.md)
-
-## Other
+## Help
+- [Search or create an issue](https://github.com/smarty-php/smarty/issues)
+- [Upgrading from an older version](upgrading.md)
- [Some random tips & tricks](./appendixes/tips.md)
- [Troubleshooting](./appendixes/troubleshooting.md)
+
+## Source code
+- [Smarty repository at GitHub](https://github.com/smarty-php/smarty)
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/docs/philosophy.md b/bundled-libs/smarty/smarty/docs/philosophy.md
index 34555c288..c5edd3980 100644
--- a/bundled-libs/smarty/smarty/docs/philosophy.md
+++ b/bundled-libs/smarty/smarty/docs/philosophy.md
@@ -8,18 +8,18 @@ presentation. This is best described in a situation where the
application programmer and the template designer play different roles,
or in most cases are not the same person.
-For example, let\'s say you are creating a web page that is displaying a
+For example, let's say you are creating a web page that is displaying a
newspaper article.
- The article `$headline`, `$tagline`, `$author` and `$body` are
content elements, they contain no information about how they will be
- presented. They are [passed](#api.assign) into Smarty by the
+ presented. They are [passed](getting-started.md#basic-usage) into Smarty by the
application.
- Then the template designer edits the templates and uses a
- combination of HTML tags and [template tags](#language.basic.syntax)
+ combination of HTML tags and [template tags](designers/language-basic-syntax/language-syntax-tags.md)
to format the presentation of these
- [variables](#language.syntax.variables) with elements such as
+ [variables](designers/language-basic-syntax/language-syntax-variables.md) with elements such as
tables, div\'s, background colors, font sizes, style sheets, svg
etc.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/advanced-features.md b/bundled-libs/smarty/smarty/docs/programmers/advanced-features.md
deleted file mode 100644
index 60d4416b5..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/advanced-features.md
+++ /dev/null
@@ -1,14 +0,0 @@
-Advanced Features {#advanced.features}
-=================
-
-## Table of contents
-
-- [Security](./advanced-features/advanced-features-security.md)
-- [Changing settings by template](./advanced-features/advanced-features-template-settings.md)
-- [Template Inheritance](./advanced-features/advanced-features-template-inheritance.md)
-- [Streams](./advanced-features/advanced-features-streams.md)
-- [Objects](./advanced-features/advanced-features-objects.md)
-- [Static Classes](./advanced-features/advanced-features-static-classes.md)
-- [Prefilters](./advanced-features/advanced-features-prefilters.md)
-- [Postfilters](./advanced-features/advanced-features-postfilters.md)
-- [Output Filters](./advanced-features/advanced-features-outputfilters.md)
diff --git a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-objects.md b/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-objects.md
deleted file mode 100644
index b681945e1..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-objects.md
+++ /dev/null
@@ -1,99 +0,0 @@
-Objects {#advanced.features.objects}
-=======
-
-Smarty allows access to PHP [objects](https://www.php.net/object) through
-the templates.
-
-> **Note**
->
-> When you assign/register objects to templates, be sure that all
-> properties and methods accessed from the template are for presentation
-> purposes only. It is very easy to inject application logic through
-> objects, and this leads to poor designs that are difficult to manage.
-> See the Best Practices section of the Smarty website.
-
-There are two ways to access them.
-
-- One way is to [register objects](#api.register.object) to the
- template, then use access them via syntax similar to [custom
- functions](#language.custom.functions).
-
-- The other way is to [`assign()`](#api.assign) objects to the
- templates and access them much like any other assigned variable.
-
-The first method has a much nicer template syntax. It is also more
-secure, as a registered object can be restricted to certain methods or
-properties. However, **a registered object cannot be looped over or
-assigned in arrays of objects**, etc. The method you choose will be
-determined by your needs, but use the first method whenever possible to
-keep template syntax to a minimum.
-
-If security is enabled, no private methods or functions can be accessed
-(beginning with \'\_\'). If a method and property of the same name exist,
-the method will be used.
-
-You can restrict the methods and properties that can be accessed by
-listing them in an array as the third registration parameter.
-
-By default, parameters passed to objects through the templates are
-passed the same way [custom functions](#language.custom.functions) get
-them. An associative array is passed as the first parameter, and the
-smarty object as the second. If you want the parameters passed one at a
-time for each argument like traditional object parameter passing, set
-the fourth registration parameter to FALSE.
-
-The optional fifth parameter has only effect with `format` being TRUE
-and contains a list of methods that should be treated as blocks. That
-means these methods have a closing tag in the template
-(`{foobar->meth2}...{/foobar->meth2}`) and the parameters to the methods
-have the same synopsis as the parameters for
-[`block-function-plugins`](#plugins.block.functions): They get the four
-parameters `$params`, `$content`, `$smarty` and `&$repeat` and they also
-behave like block-function-plugins.
-
-
- registerObject('foobar',$myobj);
-
- // if we want to restrict access to certain methods or properties, list them
- $smarty->registerObject('foobar',$myobj,array('meth1','meth2','prop1'));
-
- // if you want to use the traditional object parameter format, pass a boolean of false
- $smarty->registerObject('foobar',$myobj,null,false);
-
- // We can also assign objects. assign_by_ref when possible.
- $smarty->assign_by_ref('myobj', $myobj);
-
- $smarty->display('index.tpl');
- ?>
-
-
-
-And here\'s how to access your objects in `index.tpl`:
-
-
- {* access our registered object *}
- {foobar->meth1 p1='foo' p2=$bar}
-
- {* you can also assign the output *}
- {foobar->meth1 p1='foo' p2=$bar assign='output'}
- the output was {$output}
-
- {* access our assigned object *}
- {$myobj->meth1('foo',$bar)}
-
-
-
-See also [`registerObject()`](#api.register.object) and
-[`assign()`](#api.assign).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-outputfilters.md b/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-outputfilters.md
deleted file mode 100644
index 393d7da23..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-outputfilters.md
+++ /dev/null
@@ -1,43 +0,0 @@
-Output Filters {#advanced.features.outputfilters}
-==============
-
-When the template is invoked via [`display()`](#api.display) or
-[`fetch()`](#api.fetch), its output can be sent through one or more
-output filters. This differs from
-[`postfilters`](#advanced.features.postfilters) because postfilters
-operate on compiled templates before they are saved to the disk, whereas
-output filters operate on the template output when it is executed.
-
-Output filters can be either [registered](#api.register.filter) or
-loaded from the [plugins directory](#variable.plugins.dir) by using the
-[`loadFilter()`](#api.load.filter) method or by setting the
-[`$autoload_filters`](#variable.autoload.filters) variable. Smarty will
-pass the template output as the first argument, and expect the function
-to return the result of the processing.
-
-
- registerFilter("output","protect_email");
- $smarty->display("index.tpl');
-
- // now any occurrence of an email address in the template output will have
- // a simple protection against spambots
- ?>
-
-
-
-See also [`registerFilter()`](#api.register.filter),
-[`loadFilter()`](#api.load.filter),
-[`$autoload_filters`](#variable.autoload.filters),
-[postfilters](#advanced.features.postfilters) and
-[`$plugins_dir`](#variable.plugins.dir).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-postfilters.md b/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-postfilters.md
deleted file mode 100644
index d3bad546a..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-postfilters.md
+++ /dev/null
@@ -1,40 +0,0 @@
-Postfilters {#advanced.features.postfilters}
-===========
-
-Template postfilters are PHP functions that your templates are ran
-through *after they are compiled*. Postfilters can be either
-[registered](#api.register.filter) or loaded from the [plugins
-directory](#variable.plugins.dir) by using the
-[`loadFilter()`](#api.load.filter) function or by setting the
-[`$autoload_filters`](#variable.autoload.filters) variable. Smarty will
-pass the compiled template code as the first argument, and expect the
-function to return the result of the processing.
-
-
- \n\"; ?>\n".$tpl_source;
- }
-
- // register the postfilter
- $smarty->registerFilter('post','add_header_comment');
- $smarty->display('index.tpl');
- ?>
-
-
-
-The postfilter above will make the compiled Smarty template `index.tpl`
-look like:
-
-
-
- {* rest of template content... *}
-
-
-
-See also [`registerFilter()`](#api.register.filter),
-[prefilters](#advanced.features.prefilters),
-[outputfilters](#advanced.features.outputfilters), and
-[`loadFilter()`](#api.load.filter).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-prefilters.md b/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-prefilters.md
deleted file mode 100644
index 76229e633..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-prefilters.md
+++ /dev/null
@@ -1,36 +0,0 @@
-Prefilters {#advanced.features.prefilters}
-==========
-
-Template prefilters are PHP functions that your templates are ran
-through *before they are compiled*. This is good for preprocessing your
-templates to remove unwanted comments, keeping an eye on what people are
-putting in their templates, etc.
-
-Prefilters can be either [registered](#api.register.filter) or loaded
-from the [plugins directory](#variable.plugins.dir) by using
-[`loadFilter()`](#api.load.filter) function or by setting the
-[`$autoload_filters`](#variable.autoload.filters) variable.
-
-Smarty will pass the template source code as the first argument, and
-expect the function to return the resulting template source code.
-
-This will remove all the html comments in the template source.
-
-
- /U",'',$tpl_source);
- }
-
- // register the prefilter
- $smarty->registerFilter('pre','remove_dw_comments');
- $smarty->display('index.tpl');
- ?>
-
-
-
-See also [`registerFilter()`](#api.register.filter),
-[postfilters](#advanced.features.postfilters) and
-[`loadFilter()`](#api.load.filter).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-security.md b/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-security.md
deleted file mode 100644
index 730915f14..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-security.md
+++ /dev/null
@@ -1,144 +0,0 @@
-Security {#advanced.features.security}
-========
-
-Security is good for situations when you have untrusted parties editing
-the templates e.g. via ftp, and you want to reduce the risk of system
-security compromises through the template language.
-
-The settings of the security policy are defined by properties of an
-instance of the Smarty\_Security class. These are the possible settings:
-
-- `$secure_dir` is an array of template directories that are
- considered secure. [`$template_dir`](#variable.template.dir)
- considered secure implicitly. The default is an empty array.
-
-- `$trusted_dir` is an array of all directories that are considered
- trusted. Trusted directories are where you keep php scripts that are
- executed directly from the templates with
- [`{insert}`](#language.function.insert.php). The default is an
- empty array.
-
-- `$trusted_uri` is an array of regular expressions matching URIs that
- are considered trusted. This security directive used by
- [`{fetch}`](#language.function.fetch) and
- [`{html_image}`](#language.function.html.image). URIs passed to
- these functions are reduced to `{$PROTOCOL}://{$HOSTNAME}` to allow
- simple regular expressions (without having to deal with edge cases
- like authentication-tokens).
-
- The expression `'#https?://.*smarty.net$#i'` would allow accessing
- the following URIs:
-
- - `http://smarty.net/foo`
-
- - `http://smarty.net/foo`
-
- - `http://www.smarty.net/foo`
-
- - `http://smarty.net/foo`
-
- - `https://foo.bar.www.smarty.net/foo/bla?blubb=1`
-
- but deny access to these URIs:
-
- - `http://smarty.com/foo` (not matching top-level domain \"com\")
-
- - `ftp://www.smarty.net/foo` (not matching protocol \"ftp\")
-
- - `http://www.smarty.net.otherdomain.com/foo` (not matching end of
- domain \"smarty.net\")
-
-- `$static_classes` is an array of classes that are considered
- trusted. The default is an empty array which allows access to all
- static classes. To disable access to all static classes set
- \$static\_classes = null.
-
-- `$php_functions` is an array of PHP functions that are considered
- trusted and can be used from within template. To disable access to
- all PHP functions set \$php\_functions = null. An empty array (
- \$php\_functions = array() ) will allow all PHP functions. The
- default is array(\'isset\', \'empty\', \'count\', \'sizeof\',
- \'in\_array\', \'is\_array\',\'time\',\'nl2br\').
-
-- `$php_modifiers` is an array of PHP functions that are considered
- trusted and can be used from within template as modifier. To disable
- access to all PHP modifier set \$php\_modifier = null. An empty
- array ( \$php\_modifier = array() ) will allow all PHP functions.
- The default is array(\'escape\',\'count\').
-
-- `$streams` is an array of streams that are considered trusted and
- can be used from within template. To disable access to all streams
- set \$streams = null. An empty array ( \$streams = array() ) will
- allow all streams. The default is array(\'file\').
-
-- `$allowed_modifiers` is an array of (registered / autoloaded)
- modifiers that should be accessible to the template. If this array
- is non-empty, only the herein listed modifiers may be used. This is
- a whitelist.
-
-- `$disabled_modifiers` is an array of (registered / autoloaded)
- modifiers that may not be accessible to the template.
-
-- `$allowed_tags` is a boolean flag which controls if constants can
- function-, block and filter plugins that should be accessible to the
- template. If this array is non-empty, only the herein listed
- modifiers may be used. This is a whitelist.
-
-- `$disabled_tags` is an array of (registered / autoloaded) function-,
- block and filter plugins that may not be accessible to the template.
-
-- `$allow_constants` is a boolean flag which controls if constants can
- be accessed by the template. The default is \"true\".
-
-- `$allow_super_globals` is a boolean flag which controls if the PHP
- super globals can be accessed by the template. The default is
- \"true\".
-
-If security is enabled, no private methods, functions or properties of
-static classes or assigned objects can be accessed (beginning with
-\'\_\') by the template.
-
-To customize the security policy settings you can extend the
-Smarty\_Security class or create an instance of it.
-
-
- enableSecurity('My_Security_Policy');
- ?>
-
-
- php_functions = null;
- // allow everthing as modifier
- $my_security_policy->php_modifiers = array();
- // enable security
- $smarty->enableSecurity($my_security_policy);
- ?>
-
-
- enableSecurity();
- ?>
-
-> **Note**
->
-> Most security policy settings are only checked when the template gets
-> compiled. For that reason you should delete all cached and compiled
-> template files when you change your security settings.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-static-classes.md b/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-static-classes.md
deleted file mode 100644
index 8ef79113c..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-static-classes.md
+++ /dev/null
@@ -1,27 +0,0 @@
-Static Classes {#advanced.features.static.classes}
-==============
-
-You can directly access static classes. The syntax is the same as in
-PHP.
-
-> **Note**
->
-> Direct access to PHP classes is not recommended. This ties the
-> underlying application code structure directly to the presentation,
-> and also complicates template syntax. It is recommended to register
-> plugins which insulate templates from PHP classes/objects. Use at your
-> own discretion. See the Best Practices section of the Smarty website.
-
-
- {assign var=foo value=myclass::BAR} <--- class constant BAR
-
- {assign var=foo value=myclass::method()} <--- method result
-
- {assign var=foo value=myclass::method1()->method2} <--- method chaining
-
- {assign var=foo value=myclass::$bar} <--- property bar of class myclass
-
- {assign var=foo value=$bar::method} <--- using Smarty variable bar as class name
-
-
-
diff --git a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-streams.md b/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-streams.md
deleted file mode 100644
index d6f7a0de5..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-streams.md
+++ /dev/null
@@ -1,15 +0,0 @@
-Streams {#advanced.features.streams}
-=======
-
-You can also use streams to call variables. *{\$foo:bar}* will use the
-*foo://bar* stream to get the template variable.
-
-Using a PHP stream for a template variable resource from within a
-template.
-
-
- {$foo:bar}
-
-
-
-See also [`Template Resources`](#resources)
diff --git a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-inheritance.md b/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-inheritance.md
deleted file mode 100644
index ce47310ca..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-inheritance.md
+++ /dev/null
@@ -1,128 +0,0 @@
-Template Inheritance {#advanced.features.template.inheritance}
-====================
-
-Inheritance brings the concept of Object Oriented Programming to
-templates, allowing you to define one (or more) base templates that can
-be extended by child templates. Extending means that the child template
-can override all or some of the parent named block areas.
-
-- The inheritance tree can be as deep as you want, meaning you can
- extend a file that extends another one that extends another one and
- so on.
-
-- The child templates can not define any content besides what\'s
- inside [`{block}`](#language.function.block) tags they override.
- Anything outside of [`{block}`](#language.function.block) tags will
- be removed.
-
-- The content of [`{block}`](#language.function.block) tags from child
- and parent templates can be merged by the `append` or `prepend`
- [`{block}`](#language.function.block) tag option flags and
- `{$smarty.block.parent}` or `{$smarty.block.child}` placeholders.
-
-- Template inheritance is a compile time process which creates a
- single compiled template file. Compared to corresponding solutions
- based on subtemplates included with the
- [`{include}`](#language.function.include) tag it does have much
- better performance when rendering.
-
-- The child template extends its parent defined with the
- [`{extends}`](#language.function.extends) tag, which must be the
- first line in the child template. Instead of using the
- [`{extends}`](#language.function.extends) tags in the template files
- you can define the whole template inheritance tree in the PHP script
- when you are calling [`fetch()`](#api.fetch) or
- [`display()`](#api.display) with the `extends:` template resource
- type. The later provides even more flexibility.
-
-> **Note**
->
-> When `$compile_check` is enabled, all files in the inheritance tree
-> are checked for modifications upon each invocation. You may want to
-> disable `$compile_check` on production servers for this reason.
-
-> **Note**
->
-> If you have a subtemplate which is included with
-> [`{include}`](#language.function.include) and it contains
-> [`{block}`](#language.function.block) areas it works only if the
-> [`{include}`](#language.function.include) itself is called from within
-> a surrounding [`{block}`](#language.function.block). In the final
-> parent template you may need a dummy
-> [`{block}`](#language.function.block) for it.
-
-layout.tpl (parent)
-
-
-
-
- {block name=title}Default Page Title{/block}
- {block name=head}{/block}
-
-
- {block name=body}{/block}
-
-
-
-
-
-myproject.tpl (child)
-
-
- {extends file='layout.tpl'}
- {block name=head}
-
-
- {/block}
-
-
-
-
-mypage.tpl (grandchild)
-
-
- {extends file='myproject.tpl'}
- {block name=title}My Page Title{/block}
- {block name=head}
-
-
- {/block}
- {block name=body}My HTML Page Body goes here{/block}
-
-
-
-To render the above use
-
-
- $smarty->display('mypage.tpl');
-
-The resulting output is
-
-
-
-
- My Page Title
-
-
-
-
- My HTML Page Body goes here
-
-
-
-Instead of using [`{extends}`](#language.function.extends) tags in the
-template files you can define the inheritance tree in your PHP script by
-using the [`extends:` resource](#resources.extends) type.
-
-The code below will return same result as the example above.
-
-
- display('extends:layout.tpl|myproject.tpl|mypage.tpl');
- ?>
-
-
-
-See also [`{block}`](#language.function.block),
-[`{extends}`](#language.function.extends) and [`extends:`
-resource](#resources.extends)
diff --git a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-settings.md b/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-settings.md
deleted file mode 100644
index b06430ff0..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-settings.md
+++ /dev/null
@@ -1,32 +0,0 @@
-Changing settings by template {#advanced.features.template.settings}
-=============================
-
-Normally you configure the Smarty settings by modifying the
-[`Smarty class variables`](#api.variables). Furthermore you can register
-plugins, filters etc. with [`Smarty functions`](#api.functions).
-Modifications done to the Smarty object will be global for all
-templates.
-
-However the Smarty class variables and functions can be accessed or
-called by individual template objects. Modification done to a template
-object will apply only for that template and its included subtemplates.
-
-
- createTemplate('index.tpl);
- $tpl->cache_lifetime = 600;
- //or
- $tpl->setCacheLifetime(600);
- $smarty->display($tpl);
- ?>
-
-
-
-
- createTemplate('index.tpl);
- $tpl->registerPlugin('modifier','mymodifier');
- $smarty->display($tpl);
- ?>
-
-
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions.md
deleted file mode 100644
index 6f120fa9a..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions.md
+++ /dev/null
@@ -1,64 +0,0 @@
-Smarty Class Methods {#api.functions}
-====================
-
-## Table of contents
-
-- [addConfigDir()](./api-functions/api-add-config-dir.md) — add a directory to the list of directories where config files are stored
-- [addPluginsDir()](./api-functions/api-add-plugins-dir.md) — add a directory to the list of directories where plugins are stored
-- [addTemplateDir()](./api-functions/api-add-template-dir.md) — add a directory to the list of directories where templates are stored
-- [append()](./api-functions/api-append.md) — append an element to an assigned array
-- [appendByRef()](./api-functions/api-append-by-ref.md) — append values by reference
-- [assign()](./api-functions/api-assign.md) — assign variables/objects to the templates
-- [assignByRef()](./api-functions/api-assign-by-ref.md) — assign values by reference
-- [clearAllAssign()](./api-functions/api-clear-all-assign.md) — clears the values of all assigned variables
-- [clearAllCache()](./api-functions/api-clear-all-cache.md) — clears the entire template cache
-- [clearAssign()](./api-functions/api-clear-assign.md) — clears the value of an assigned variable
-- [clearCache()](./api-functions/api-clear-cache.md) — clears the cache for a specific template
-- [clearCompiledTemplate()](./api-functions/api-clear-compiled-tpl.md) — clears the compiled version of the specified template resource
-- [clearConfig()](./api-functions/api-clear-config.md) — clears assigned config variables
-- [compileAllConfig()](./api-functions/api-compile-all-config.md) — compiles all known config files
-- [compileAllTemplates()](./api-functions/api-compile-all-templates.md) — compiles all known templates
-- [configLoad()](./api-functions/api-config-load.md) — loads config file data and assigns it to the template
-- [createData()](./api-functions/api-create-data.md) — creates a data object
-- [createTemplate()](./api-functions/api-create-template.md) — returns a template object
-- [disableSecurity()](./api-functions/api-disable-security.md) — disables template security
-- [display()](./api-functions/api-display.md) — displays the template
-- [enableSecurity()](./api-functions/api-enable-security.md) — enables template security
-- [fetch()](./api-functions/api-fetch.md) — returns the template output
-- [getCacheDir()](./api-functions/api-get-cache-dir.md) — return the directory where the rendered template's output is stored
-- [getCompileDir()](./api-functions/api-get-compile-dir.md) — returns the directory where compiled templates are stored
-- [getConfigDir()](./api-functions/api-get-config-dir.md) — return the directory where config files are stored
-- [getConfigVars()](./api-functions/api-get-config-vars.md) — returns the given loaded config variable value
-- [getPluginsDir()](./api-functions/api-get-plugins-dir.md) — return the directory where plugins are stored
-- [getRegisteredObject()](./api-functions/api-get-registered-object.md) — returns a reference to a registered object
-- [getTags()](./api-functions/api-get-tags.md) — return tags used by template
-- [getTemplateDir()](./api-functions/api-get-template-dir.md) — return the directory where templates are stored
-- [getTemplateVars()](./api-functions/api-get-template-vars.md) — returns assigned variable value(s)
-- [isCached()](./api-functions/api-is-cached.md) — returns true if there is a valid cache for this template
-- [loadFilter()](./api-functions/api-load-filter.md) — load a filter plugin
-- [muteExpectedErrors()](./api-functions/api-mute-expected-errors.md) — mutes expected warnings and notices deliberately generated by Smarty
-- [registerCacheResource()](./api-functions/api-register-cacheresource.md) — dynamically register CacheResources
-- [registerClass()](./api-functions/api-register-class.md) — register a class for use in the templates
-- [registerDefaultPluginHandler()](./api-functions/api-register-default-plugin-handler.md) — register a function which gets called on undefined tags
-- [registerFilter()](./api-functions/api-register-filter.md) — dynamically register filters
-- [registerPlugin()](./api-functions/api-register-plugin.md) — dynamically register plugins
-- [registerObject()](./api-functions/api-register-object.md) — register an object for use in the templates
-- [registerResource()](./api-functions/api-register-resource.md) — dynamically register resources
-- [setCacheDir()](./api-functions/api-set-cache-dir.md) — set the directory where the rendered template's output is stored
-- [setCompileDir()](./api-functions/api-set-compile-dir.md) — set the directory where compiled templates are stored
-- [setConfigDir()](./api-functions/api-set-config-dir.md) — set the directories where config files are stored
-- [setPluginsDir()](./api-functions/api-set-plugins-dir.md) — set the directories where plugins are stored
-- [setTemplateDir()](./api-functions/api-set-template-dir.md) — set the directories where templates are stored
-- [templateExists()](./api-functions/api-template-exists.md) — checks whether the specified template exists
-- [unregisterCacheResource()](./api-functions/api-unregister-cacheresource.md) — dynamically unregister a CacheResource plugin
-- [unregisterFilter()](./api-functions/api-unregister-filter.md) — dynamically unregister a filter
-- [unregisterPlugin()](./api-functions/api-unregister-plugin.md) — dynamically unregister plugins
-- [unregisterObject()](./api-functions/api-unregister-object.md) — dynamically unregister an object
-- [unregisterResource()](./api-functions/api-unregister-resource.md) — dynamically unregister a resource plugin
-- [testInstall()](./api-functions/api-test-install.md) — checks Smarty installation
-
-> **Note**
->
-> See
-> [`Changing settings by template`](./advanced-features/advanced-features-template-settings.md)
-> section for how to use the functions for individual templates.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/add-extension.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/add-extension.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-add-config-dir.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-add-config-dir.md
deleted file mode 100644
index c3a052289..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-add-config-dir.md
+++ /dev/null
@@ -1,49 +0,0 @@
-addConfigDir()
-
-add a directory to the list of directories where config files are stored
-
-Description
-===========
-
-Smarty
-
-addConfigDir
-
-string\|array
-
-config\_dir
-
-string
-
-key
-
-
- addConfigDir('./config_1');
-
- // add directory where config files are stored and specify array-key
- $smarty->addConfigDir('./config_1', 'one');
-
- // add multiple directories where config files are stored and specify array-keys
- $smarty->addTemplateDir(array(
- 'two' => './config_2',
- 'three' => './config_3',
- ));
-
- // view the template dir chain
- var_dump($smarty->getConfigDir());
-
- // chaining of method calls
- $smarty->setConfigDir('./config')
- ->addConfigDir('./config_1', 'one')
- ->addConfigDir('./config_2', 'two');
-
- ?>
-
-
-
-See also [`getConfigDir()`](#api.get.config.dir),
-[`setConfigDir()`](#api.set.config.dir) and
-[`$config_dir`](#variable.config.dir).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-add-template-dir.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-add-template-dir.md
deleted file mode 100644
index e0d24564c..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-add-template-dir.md
+++ /dev/null
@@ -1,49 +0,0 @@
-addTemplateDir()
-
-add a directory to the list of directories where templates are stored
-
-Description
-===========
-
-Smarty
-
-addTemplateDir
-
-string\|array
-
-template\_dir
-
-string
-
-key
-
-
- addTemplateDir('./templates_1');
-
- // add directory where templates are stored and specify array-key
- $smarty->addTemplateDir('./templates_1', 'one');
-
- // add multiple directories where templates are stored and specify array-keys
- $smarty->addTemplateDir(array(
- 'two' => './templates_2',
- 'three' => './templates_3',
- ));
-
- // view the template dir chain
- var_dump($smarty->getTemplateDir());
-
- // chaining of method calls
- $smarty->setTemplateDir('./templates')
- ->addTemplateDir('./templates_1', 'one')
- ->addTemplateDir('./templates_2', 'two');
-
- ?>
-
-
-
-See also [`getTemplateDir()`](#api.get.template.dir),
-[`setTemplateDir()`](#api.set.template.dir) and
-[`$template_dir`](#variable.template.dir).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-append-by-ref.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-append-by-ref.md
deleted file mode 100644
index cd396d9cc..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-append-by-ref.md
+++ /dev/null
@@ -1,46 +0,0 @@
-appendByRef()
-
-append values by reference
-
-Description
-===========
-
-void
-
-appendByRef
-
-string
-
-varname
-
-mixed
-
-var
-
-bool
-
-merge
-
-This is used to [`append()`](#api.append) values to the templates by
-reference.
-
-> **Note**
->
-> With the introduction of PHP5, `appendByRef()` is not necessary for
-> most intents and purposes. `appendByRef()` is useful if you want a PHP
-> array index value to be affected by its reassignment from a template.
-> Assigned object properties behave this way by default.
-
-NOTE.PARAMETER.MERGE
-
-
- appendByRef('Name', $myname);
- $smarty->appendByRef('Address', $address);
- ?>
-
-
-
-See also [`append()`](#api.append), [`assign()`](#api.assign) and
-[`getTemplateVars()`](#api.get.template.vars).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-append.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-append.md
index b94586417..d9acff84a 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-append.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-append.md
@@ -56,6 +56,5 @@ NOTE.PARAMETER.MERGE
-See also [`appendByRef()`](#api.append.by.ref),
-[`assign()`](#api.assign) and
+See also [`assign()`](#api.assign) and
[`getTemplateVars()`](#api.get.template.vars)
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-assign-by-ref.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-assign-by-ref.md
deleted file mode 100644
index 7c42b4836..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-assign-by-ref.md
+++ /dev/null
@@ -1,42 +0,0 @@
-assignByRef()
-
-assign values by reference
-
-Description
-===========
-
-void
-
-assignByRef
-
-string
-
-varname
-
-mixed
-
-var
-
-This is used to [`assign()`](#api.assign) values to the templates by
-reference.
-
-> **Note**
->
-> With the introduction of PHP5, `assignByRef()` is not necessary for
-> most intents and purposes. `assignByRef()` is useful if you want a PHP
-> array index value to be affected by its reassignment from a template.
-> Assigned object properties behave this way by default.
-
-
- assignByRef('Name', $myname);
- $smarty->assignByRef('Address', $address);
- ?>
-
-
-
-See also [`assign()`](#api.assign),
-[`clearAllAssign()`](#api.clear.all.assign), [`append()`](#api.append),
-[`{assign}`](#language.function.assign) and
-[`getTemplateVars()`](#api.get.template.vars).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-assign.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-assign.md
index c3b9985d4..31f6a1508 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-assign.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-assign.md
@@ -78,7 +78,6 @@ To access more complex array assignments see
[`{foreach}`](#language.function.foreach) and
[`{section}`](#language.function.section)
-See also [`assignByRef()`](#api.assign.by.ref),
-[`getTemplateVars()`](#api.get.template.vars),
+See also [`getTemplateVars()`](#api.get.template.vars),
[`clearAssign()`](#api.clear.assign), [`append()`](#api.append) and
[`{assign}`](#language.function.assign)
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md
index a102fc97e..35497d9ad 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md
@@ -50,7 +50,7 @@ parameters:
setCaching(true);
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-fetch.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-fetch.md
index 6da05bd0e..491c28d4d 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-fetch.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-fetch.md
@@ -30,7 +30,7 @@ PARAMETER.COMPILEID
setCaching(true);
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-get-cache-dir.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-get-cache-dir.md
deleted file mode 100644
index 9e55d8d0b..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-get-cache-dir.md
+++ /dev/null
@@ -1,23 +0,0 @@
-getCacheDir()
-
-return the directory where the rendered template\'s output is stored
-
-Description
-===========
-
-string
-
-getCacheDir
-
-
- getCacheDir();
-
- ?>
-
-
-
-See also [`setCacheDir()`](#api.set.cache.dir) and
-[`$cache_dir`](#variable.cache.dir).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-get-compile-dir.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-get-compile-dir.md
deleted file mode 100644
index 3bfae7306..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-get-compile-dir.md
+++ /dev/null
@@ -1,23 +0,0 @@
-getCompileDir()
-
-returns the directory where compiled templates are stored
-
-Description
-===========
-
-string
-
-getCompileDir
-
-
- getCompileDir();
-
- ?>
-
-
-
-See also [`setCompileDir()`](#api.set.compile.dir) and
-[`$compile_dir`](#variable.compile.dir).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-get-tags.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-get-tags.md
deleted file mode 100644
index 7729b468b..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-get-tags.md
+++ /dev/null
@@ -1,40 +0,0 @@
-getTags()
-
-return tags used by template
-
-Description
-===========
-
-string
-
-getTags
-
-object
-
-template
-
-This function returns an array of tagname/attribute pairs for all tags
-used by the template. It uses the following parameters:
-
-- `template` is the template object.
-
-> **Note**
->
-> This function is experimental.
-
-
- createTemplate('index.tpl');
-
- // get tags
- $tags = $smarty->getTags($tpl);
-
- print_r($tags);
-
- ?>
-
-
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-get-template-dir.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-get-template-dir.md
deleted file mode 100644
index 42c75908b..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-get-template-dir.md
+++ /dev/null
@@ -1,40 +0,0 @@
-getTemplateDir()
-
-return the directory where templates are stored
-
-Description
-===========
-
-string\|array
-
-getTemplateDir
-
-string
-
-key
-
-
- setTemplateDir(array(
- 'one' => './templates',
- 'two' => './templates_2',
- 'three' => './templates_3',
- ));
-
- // get all directories where templates are stored
- $template_dir = $smarty->getTemplateDir();
- var_dump($template_dir); // array
-
- // get directory identified by key
- $template_dir = $smarty->getTemplateDir('one');
- var_dump($template_dir); // string
-
- ?>
-
-
-
-See also [`setTemplateDir()`](#api.set.template.dir),
-[`addTemplateDir()`](#api.add.template.dir) and
-[`$template_dir`](#variable.template.dir).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-is-cached.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-is-cached.md
index 0c41bf04a..d9d3057fb 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-is-cached.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-is-cached.md
@@ -22,8 +22,8 @@ string
compile\_id
- This only works if [`$caching`](#variable.caching) is set to one of
- `Smarty::CACHING_LIFETIME_CURRENT` or
- `Smarty::CACHING_LIFETIME_SAVED` to enable caching. See the [caching
+ `\Smarty\Smarty::CACHING_LIFETIME_CURRENT` or
+ `\Smarty\Smarty::CACHING_LIFETIME_SAVED` to enable caching. See the [caching
section](#caching) for more info.
- You can also pass a `$cache_id` as an optional second parameter in
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-load-filter.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-load-filter.md
index 19286ee33..e2738b0c8 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-load-filter.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-load-filter.md
@@ -18,7 +18,7 @@ string
name
The first argument specifies the type of the filter to load and can be
-one of the following: `pre`, `post` or `output`. The second argument
+one of the following: `variable`, `pre`, `post` or `output`. The second argument
specifies the `name` of the filter plugin.
@@ -37,6 +37,5 @@ specifies the `name` of the filter plugin.
-See also [`registerFilter()`](#api.register.filter),
-[`$autoload_filters`](#variable.autoload.filters) and [advanced
+See also [`registerFilter()`](#api.register.filter) and [advanced
features](#advanced.features).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md
index 626288ea6..ac84a6435 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md
@@ -15,7 +15,7 @@ handler merely inspects `$errno` and `$errfile` to determine if the
given error was produced deliberately and must be ignored, or should be
passed on to the next error handler.
-`Smarty::unmuteExpectedErrors()` removes the current error handler.
+`\Smarty\Smarty::unmuteExpectedErrors()` removes the current error handler.
Please note, that if you\'ve registered any custom error handlers after
the muteExpectedErrors() call, the unmute will not remove Smarty\'s
muting error handler, but the one registered last.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md
index 60ae60308..626091496 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md
@@ -31,7 +31,7 @@ how to create custom CacheResources.
registerCacheResource('mysql', new Smarty_CacheResource_Mysql());
+ $smarty->registerCacheResource('mysql', new My_CacheResource_Mysql());
?>
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-class.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-class.md
index ee339cadb..d0156d512 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-class.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-class.md
@@ -24,6 +24,7 @@ otherwise. If security is enabled, classes registered with
registerClass("Foo", "\my\php\application\Bar");
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md
index 03547df71..61ac47612 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md
@@ -25,7 +25,7 @@ plugin types.
registerDefaultPluginHandler('my_plugin_handler');
@@ -37,7 +37,7 @@ plugin types.
* @param string $name name of the undefined tag
* @param string $type tag type (e.g. Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK,
Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_MODIFIER, Smarty::PLUGIN_MODIFIERCOMPILER)
- * @param Smarty_Internal_Template $template template object
+ * @param \Smarty\Template\ $template template object
* @param string &$callback returned function name
* @param string &$script optional returned script filepath if function is external
* @param bool &$cacheable true by default, set to false if plugin is not cachable (Smarty >= 3.1.8)
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-filter.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-filter.md
index fd91d2661..4a2aa4b02 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-filter.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-filter.md
@@ -38,8 +38,7 @@ filters](#advanced.features.outputfilters) for more information on how
to set up an output filter function.
See also [`unregisterFilter()`](#api.unregister.filter),
-[`loadFilter()`](#api.load.filter),
-[`$autoload_filters`](#variable.autoload.filters), [template pre
+[`loadFilter()`](#api.load.filter), [template pre
filters](#advanced.features.prefilters) [template post
filters](#advanced.features.postfilters) [template output
filters](#advanced.features.outputfilters) section.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md
index 6eb433810..51342b8e1 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md
@@ -32,9 +32,9 @@ cache\_attrs
This method registers functions or methods defined in your script as
plugin. It uses the following parameters:
-- `cacheable` and `cache_attrs` can be omitted in most cases. See
+- `cacheable` can be omitted in most cases. See
[controlling cacheability of plugins output](#caching.cacheable) on
- how to use them properly.
+ how to use this properly.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-resource.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-resource.md
index ca4005460..774452bff 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-resource.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-register-resource.md
@@ -37,7 +37,7 @@ information on how to setup a function for fetching templates.
registerResource('mysql', new Smarty_Resource_Mysql());
+ $smarty->registerResource('mysql', new My_Resource_Mysql());
?>
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-set-cache-dir.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-set-cache-dir.md
deleted file mode 100644
index 7f7c4b60d..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-set-cache-dir.md
+++ /dev/null
@@ -1,32 +0,0 @@
-setCacheDir()
-
-set the directory where the rendered template\'s output is stored
-
-Description
-===========
-
-Smarty
-
-setCacheDir
-
-string
-
-cache\_dir
-
-
- setCacheDir('./cache');
-
- // chaining of method calls
- $smarty->setTemplateDir('./templates')
- ->setCompileDir('./templates_c')
- ->setCacheDir('./cache');
-
- ?>
-
-
-
-See also [`getCacheDir()`](#api.get.cache.dir) and
-[`$cache_dir`](#variable.cache.dir).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-set-compile-dir.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-set-compile-dir.md
deleted file mode 100644
index bfeb55a53..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-set-compile-dir.md
+++ /dev/null
@@ -1,32 +0,0 @@
-setCompileDir()
-
-set the directory where compiled templates are stored
-
-Description
-===========
-
-Smarty
-
-setCompileDir
-
-string
-
-compile\_dir
-
-
- setCompileDir('./templates_c');
-
- // chaining of method calls
- $smarty->setTemplateDir('./templates')
- ->setCompileDir('./templates_c')
- ->setCacheDir('./cache');
-
- ?>
-
-
-
-See also [`getCompileDir()`](#api.get.compile.dir) and
-[`$compile_dir`](#variable.compile.dir).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-set-config-dir.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-set-config-dir.md
deleted file mode 100644
index 97a6ae977..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-set-config-dir.md
+++ /dev/null
@@ -1,47 +0,0 @@
-setConfigDir()
-
-set the directories where config files are stored
-
-Description
-===========
-
-Smarty
-
-setConfigDir
-
-string\|array
-
-config\_dir
-
-
- setConfigDir('./config');
-
- // view the config dir chain
- var_dump($smarty->getConfigDir());
-
- // set multiple directoríes where config files are stored
- $smarty->setConfigDir(array(
- 'one' => './config',
- 'two' => './config_2',
- 'three' => './config_3',
- ));
-
- // view the config dir chain
- var_dump($smarty->getConfigDir());
-
- // chaining of method calls
- $smarty->setTemplateDir('./templates')
- ->setConfigDir('./config')
- ->setCompileDir('./templates_c')
- ->setCacheDir('./cache');
-
- ?>
-
-
-
-See also [`getConfigDir()`](#api.get.config.dir),
-[`addConfigDir()`](#api.add.config.dir) and
-[`$config_dir`](#variable.config.dir).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-set-template-dir.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-set-template-dir.md
deleted file mode 100644
index 2de23309b..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-set-template-dir.md
+++ /dev/null
@@ -1,46 +0,0 @@
-setTemplateDir()
-
-set the directories where templates are stored
-
-Description
-===========
-
-Smarty
-
-setTemplateDir
-
-string\|array
-
-template\_dir
-
-
- setTemplateDir('./cache');
-
- // view the template dir chain
- var_dump($smarty->getTemplateDir());
-
- // set multiple directoríes where templates are stored
- $smarty->setTemplateDir(array(
- 'one' => './templates',
- 'two' => './templates_2',
- 'three' => './templates_3',
- ));
-
- // view the template dir chain
- var_dump($smarty->getTemplateDir());
-
- // chaining of method calls
- $smarty->setTemplateDir('./templates')
- ->setCompileDir('./templates_c')
- ->setCacheDir('./cache');
-
- ?>
-
-
-
-See also [`getTemplateDir()`](#api.get.template.dir),
-[`addTemplateDir()`](#api.add.template.dir) and
-[`$template_dir`](#variable.template.dir).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-template-exists.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-template-exists.md
deleted file mode 100644
index 07f61b12e..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-template-exists.md
+++ /dev/null
@@ -1,59 +0,0 @@
-templateExists()
-
-checks whether the specified template exists
-
-Description
-===========
-
-bool
-
-templateExists
-
-string
-
-template
-
-It can accept either a path to the template on the filesystem or a
-resource string specifying the template.
-
-This example uses `$_GET['page']` to
-[`{include}`](#language.function.include) a content template. If the
-template does not exist then an error page is displayed instead. First
-the `page_container.tpl`
-
-
-
- {$title}
-
- {include file='page_top.tpl'}
-
- {* include middle content page *}
- {include file=$content_template}
-
- {include file='page_footer.tpl'}
-
-
-
-
-And the php script
-
-
- templateExists($mid_template) ){
- $mid_template = 'page_not_found.tpl';
- }
- $smarty->assign('content_template', $mid_template);
-
- $smarty->display('page_container.tpl');
-
- ?>
-
-
-
-See also [`display()`](#api.display), [`fetch()`](#api.fetch),
-[`{include}`](#language.function.include) and
-[`{insert}`](#language.function.insert)
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-test-install.md b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-test-install.md
index 918bd220a..bba64a19c 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-test-install.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-functions/api-test-install.md
@@ -14,7 +14,7 @@ installation can be accessed. It does output a corresponding protocol.
testInstall();
?>
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables.md
deleted file mode 100644
index ee9c07611..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables.md
+++ /dev/null
@@ -1,63 +0,0 @@
-Smarty Class Variables {#api.variables}
-======================
-
-These are all of the available Smarty class variables. You can access
-them directly, or use the corresponding setter/getter methods.
-
-- [$allow_php_templates](./api-variables/variable-allow-php-templates.md)
-- [$auto_literal](./api-variables/variable-auto-literal.md)
-- [$autoload_filters](./api-variables/variable-autoload-filters.md)
-- [$cache_dir](./api-variables/variable-cache-dir.md)
-- [$cache_id](./api-variables/variable-cache-id.md)
-- [$cache_lifetime](./api-variables/variable-cache-lifetime.md)
-- [$cache_locking](./api-variables/variable-cache-locking.md)
-- [$cache_modified_check](./api-variables/variable-cache-modified-check.md)
-- [$caching](./api-variables/variable-caching.md)
-- [$caching_type](./api-variables/variable-caching-type.md)
-- [$compile_check](./api-variables/variable-compile-check.md)
-- [$compile_dir](./api-variables/variable-compile-dir.md)
-- [$compile_id](./api-variables/variable-compile-id.md)
-- [$compile_locking](./api-variables/variable-compile-locking.md)
-- [$compiler_class](./api-variables/variable-compiler-class.md)
-- [$config_booleanize](./api-variables/variable-config-booleanize.md)
-- [$config_dir](./api-variables/variable-config-dir.md)
-- [$config_overwrite](./api-variables/variable-config-overwrite.md)
-- [$config_read_hidden](./api-variables/variable-config-read-hidden.md)
-- [$debug_tpl](./api-variables/variable-debug-template.md)
-- [$debugging](./api-variables/variable-debugging.md)
-- [$debugging_ctrl](./api-variables/variable-debugging-ctrl.md)
-- [$default_config_type](./api-variables/variable-default-config-type.md)
-- [$default_modifiers](./api-variables/variable-default-modifiers.md)
-- [$default_resource_type](./api-variables/variable-default-resource-type.md)
-- [$default_config_handler_func](./api-variables/variable-default-config-handler-func.md)
-- [$default_template_handler_func](./api-variables/variable-default-template-handler-func.md)
-- [$direct_access_security](./api-variables/variable-direct-access-security.md)
-- [$error_reporting](./api-variables/variable-error-reporting.md)
-- [$escape_html](./api-variables/variable-escape-html.md)
-- [$force_cache](./api-variables/variable-force-cache.md)
-- [$force_compile](./api-variables/variable-force-compile.md)
-- [$left_delimiter](./api-variables/variable-left-delimiter.md)
-- [$locking_timeout](./api-variables/variable-locking-timeout.md)
-- [$merge_compiled_includes](./api-variables/variable-merge-compiled-includes.md)
-- [$plugins_dir](./api-variables/variable-plugins-dir.md)
-- [$right_delimiter](./api-variables/variable-right-delimiter.md)
-- [$smarty_debug_id](./api-variables/variable-smarty-debug-id.md)
-- [$template_dir](./api-variables/variable-template-dir.md)
-- [$trusted_dir](./api-variables/variable-trusted-dir.md)
-- [$use_include_path](./api-variables/variable-use-include-path.md)
-- [$use_sub_dirs](./api-variables/variable-use-sub-dirs.md)
-
-> **Note**
->
-> All class variables have magic setter/getter methods available.
-> setter/getter methods are camelCaseFormat, unlike the variable itself.
-> So for example, you can set and get the \$smarty-\>template\_dir
-> variable with \$smarty-\>setTemplateDir(\$dir) and \$dir =
-> \$smarty-\>getTemplateDir() respectively.
-
-> **Note**
->
-> See
-> [`Changing settings by template`](./advanced-features/advanced-features-template-settings.md)
-> section for how to change Smarty class variables for individual
-> templates.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-allow-php-templates.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-allow-php-templates.md
deleted file mode 100644
index e15520e2d..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-allow-php-templates.md
+++ /dev/null
@@ -1,18 +0,0 @@
-\$allow\_php\_templates {#variable.allow.php.templates}
-=======================
-
-By default the PHP template file resource is disabled. Setting
-`$allow_php_templates` to TRUE will enable PHP template files.
-
-::: {.informalexample}
-
- allow_php_templates = true;
- ?>
-
-
-:::
-
-> **Note**
->
-> The PHP template file resource is an undocumented deprecated feature.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-autoload-filters.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-autoload-filters.md
deleted file mode 100644
index 8a300b065..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-autoload-filters.md
+++ /dev/null
@@ -1,21 +0,0 @@
-\$autoload\_filters {#variable.autoload.filters}
-===================
-
-If there are some filters that you wish to load on every template
-invocation, you can specify them using this variable and Smarty will
-automatically load them for you. The variable is an associative array
-where keys are filter types and values are arrays of the filter names.
-For example:
-
-::: {.informalexample}
-
- autoload_filters = array('pre' => array('trim', 'stamp'),
- 'output' => array('convert'));
- ?>
-
-
-:::
-
-See also [`registerFilter()`](#api.register.filter) and
-[`loadFilter()`](#api.load.filter)
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md
index c9624b556..481fbee8e 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md
@@ -5,8 +5,8 @@ This is the length of time in seconds that a template cache is valid.
Once this time has expired, the cache will be regenerated.
- `$caching` must be turned on (either
- Smarty::CACHING\_LIFETIME\_CURRENT or
- Smarty::CACHING\_LIFETIME\_SAVED) for `$cache_lifetime` to have any
+ \Smarty\Smarty::CACHING\_LIFETIME\_CURRENT or
+ \Smarty\Smarty::CACHING\_LIFETIME\_SAVED) for `$cache_lifetime` to have any
purpose.
- A `$cache_lifetime` value of -1 will force the cache to never
@@ -14,11 +14,11 @@ Once this time has expired, the cache will be regenerated.
- A value of 0 will cause the cache to always regenerate (good for
testing only, to disable caching a more efficient method is to set
- [`$caching`](#variable.caching) = Smarty::CACHING\_OFF).
+ [`$caching`](#variable.caching) = \Smarty\Smarty::CACHING\_OFF).
- If you want to give certain templates their own cache lifetime, you
could do this by setting [`$caching`](#variable.caching) =
- Smarty::CACHING\_LIFETIME\_SAVED, then set `$cache_lifetime` to a
+ \Smarty\Smarty::CACHING\_LIFETIME\_SAVED, then set `$cache_lifetime` to a
unique value just before calling [`display()`](#api.display) or
[`fetch()`](#api.fetch).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md
index 05e00bb91..815be2556 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md
@@ -4,8 +4,7 @@
If set to TRUE, Smarty will respect the If-Modified-Since header sent
from the client. If the cached file timestamp has not changed since the
last visit, then a `'304: Not Modified'` header will be sent instead of
-the content. This works only on cached content without
-[`{insert}`](#language.function.insert) tags.
+the content.
See also [`$caching`](#variable.caching),
[`$cache_lifetime`](#variable.cache.lifetime), and the [caching
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-caching.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-caching.md
index 9377e3b6d..7304e41d6 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-caching.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-caching.md
@@ -3,21 +3,21 @@
This tells Smarty whether or not to cache the output of the templates to
the [`$cache_dir`](#variable.cache.dir). By default this is set to the
-constant Smarty::CACHING\_OFF. If your templates consistently generate
+constant \Smarty\Smarty::CACHING\_OFF. If your templates consistently generate
the same content, it is advisable to turn on `$caching`, as this may
result in significant performance gains.
You can also have [multiple](#caching.multiple.caches) caches for the
same template.
-- A constant value of Smarty::CACHING\_LIFETIME\_CURRENT or
- Smarty::CACHING\_LIFETIME\_SAVED enables caching.
+- A constant value of \Smarty\Smarty::CACHING\_LIFETIME\_CURRENT or
+ \Smarty\Smarty ::CACHING\_LIFETIME\_SAVED enables caching.
-- A value of Smarty::CACHING\_LIFETIME\_CURRENT tells Smarty to use
+- A value of \Smarty\Smarty::CACHING\_LIFETIME\_CURRENT tells Smarty to use
the current [`$cache_lifetime`](#variable.cache.lifetime) variable
to determine if the cache has expired.
-- A value of Smarty::CACHING\_LIFETIME\_SAVED tells Smarty to use the
+- A value of \Smarty\Smarty::CACHING\_LIFETIME\_SAVED tells Smarty to use the
[`$cache_lifetime`](#variable.cache.lifetime) value at the time the
cache was generated. This way you can set the
[`$cache_lifetime`](#variable.cache.lifetime) just before
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-compile-check.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-compile-check.md
deleted file mode 100644
index 075e7f17a..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-compile-check.md
+++ /dev/null
@@ -1,30 +0,0 @@
-\$compile\_check {#variable.compile.check}
-================
-
-Upon each invocation of the PHP application, Smarty tests to see if the
-current template has changed (different timestamp) since the last time
-it was compiled. If it has changed, it recompiles that template. If the
-template has yet not been compiled at all, it will compile regardless of
-this setting. By default this variable is set to TRUE.
-
-Once an application is put into production (ie the templates won\'t be
-changing), the compile check step is no longer needed. Be sure to set
-`$compile_check` to FALSE for maximum performance. Note that if you
-change this to FALSE and a template file is changed, you will \*not\*
-see the change since the template will not get recompiled.
-
-Note that up to Smarty 4.x, Smarty will check for the existence of
-the source template even if `$compile_check` is disabled.
-
-If [`$caching`](#variable.caching) is enabled and `$compile_check` is
-enabled, then the cache files will get regenerated if an involved
-template file or config file was updated.
-
-As of Smarty 3.1 `$compile_check` can be set to the value
-`Smarty::COMPILECHECK_CACHEMISS`. This enables Smarty to revalidate the
-compiled template, once a cache file is regenerated. So if there was a
-cached template, but it\'s expired, Smarty will run a single
-compile\_check before regenerating the cache.
-
-See [`$force_compile`](#variable.force.compile) and
-[`clearCompiledTemplate()`](#api.clear.compiled.tpl).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md
index faec0e171..11a805292 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md
@@ -2,8 +2,7 @@
============
This is the name of the template file used for the debugging console. By
-default, it is named `debug.tpl` and is located in the
-[`SMARTY_DIR`](#constant.smarty.dir).
+default, it is named `debug.tpl` and is located in `src/debug.tpl`.
See also [`$debugging`](#variable.debugging) and the [debugging
console](#chapter.debugging.console) section.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md
index 0d6ec5e0d..50eb65bb5 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md
@@ -8,11 +8,11 @@ resource.
>
> The default handler is currently only invoked for file resources. It
> is not triggered when the resource itself cannot be found, in which
-> case a SmartyException is thrown.
+> case a \Smarty\Exception is thrown.
default_config_handler_func = 'my_default_config_handler_func';
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md
index d8fcbb1ad..96c8190d7 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md
@@ -8,11 +8,11 @@ resource.
>
> The default handler is currently only invoked for file resources. It
> is not triggered when the resource itself cannot be found, in which
-> case a SmartyException is thrown.
+> case a \Smarty\Exception is thrown.
default_template_handler_func = 'my_default_template_handler_func';
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-direct-access-security.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-direct-access-security.md
deleted file mode 100644
index f471f5de0..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-direct-access-security.md
+++ /dev/null
@@ -1,13 +0,0 @@
-\$direct\_access\_security {#variable.direct.access.security}
-==========================
-
-Direct access security inhibits direct browser access to compiled or
-cached template files.
-
-Direct access security is enabled by default. To disable it set
-`$direct_access_security` to FALSE.
-
-> **Note**
->
-> This is a compile time option. If you change the setting you must make
-> sure that the templates get recompiled.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md
index c0aa9cedb..ee28d47ab 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md
@@ -7,7 +7,7 @@ When this value is set to a non-null-value it\'s value is used as php\'s
Smarty 3.1.2 introduced the
[`muteExpectedErrors()`](#api.mute.expected.errors) function. Calling
-`Smarty::muteExpectedErrors();` after setting up custom error handling
+`\Smarty\Smarty::muteExpectedErrors();` after setting up custom error handling
will ensure that warnings and notices (deliberately) produced by Smarty
will not be passed to other custom error handlers. If your error logs
are filling up with warnings regarding `filemtime()` or `unlink()`
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-left-delimiter.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-left-delimiter.md
deleted file mode 100644
index bcc13f0e5..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-left-delimiter.md
+++ /dev/null
@@ -1,8 +0,0 @@
-\$left\_delimiter {#variable.left.delimiter}
-=================
-
-This is the left delimiter used by the template language. Default is
-`{`.
-
-See also [`$right_delimiter`](#variable.right.delimiter) and [escaping
-smarty parsing](#language.escaping) .
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-plugins-dir.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-plugins-dir.md
deleted file mode 100644
index 8a7cfcdb2..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-plugins-dir.md
+++ /dev/null
@@ -1,28 +0,0 @@
-\$plugins\_dir {#variable.plugins.dir}
-==============
-
-This is the directory or directories where Smarty will look for the
-plugins that it needs. Default is `plugins/` under the
-[`SMARTY_DIR`](#constant.smarty.dir). If you supply a relative path,
-Smarty will first look under the [`SMARTY_DIR`](#constant.smarty.dir),
-then relative to the current working directory, then relative to the PHP
-include\_path. If `$plugins_dir` is an array of directories, Smarty will
-search for your plugin in each plugin directory **in the order they are
-given**.
-
-> **Note**
->
-> For best performance, do not setup your `$plugins_dir` to have to use
-> the PHP include path. Use an absolute pathname, or a path relative to
-> `SMARTY_DIR` or the current working directory.
-
-> **Note**
->
-> As of Smarty 3.1 the attribute \$plugins\_dir is no longer accessible
-> directly. Use [`getPluginsDir()`](#api.get.plugins.dir),
-> [`setPluginsDir()`](#api.set.plugins.dir) and
-> [`addPluginsDir()`](#api.add.plugins.dir) instead.
-
-See also [`getPluginsDir()`](#api.get.plugins.dir),
-[`setPluginsDir()`](#api.set.plugins.dir) and
-[`addPluginsDir()`](#api.add.plugins.dir).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-right-delimiter.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-right-delimiter.md
deleted file mode 100644
index 14a9b568e..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-right-delimiter.md
+++ /dev/null
@@ -1,8 +0,0 @@
-\$right\_delimiter {#variable.right.delimiter}
-==================
-
-This is the right delimiter used by the template language. Default is
-`}`.
-
-See also [`$left_delimiter`](#variable.left.delimiter) and [escaping
-smarty parsing](#language.escaping).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md
index 1db9c4139..eb91d2c24 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md
@@ -15,22 +15,12 @@ found.
> document root.
> **Note**
->
-> If the directories known to `$template_dir` are relative to
-> directories known to the
-> [include\_path](https://www.php.net/ini.core.php#ini.include-path) you
-> need to activate the [`$use_include_path`](#variable.use.include.path)
-> option.
-
-> **Note**
->
> As of Smarty 3.1 the attribute \$template\_dir is no longer accessible
> directly. Use [`getTemplateDir()`](#api.get.template.dir),
> [`setTemplateDir()`](#api.set.template.dir) and
> [`addTemplateDir()`](#api.add.template.dir) instead.
See also [`Template Resources`](#resources),
-[`$use_include_path`](#variable.use.include.path),
[`getTemplateDir()`](#api.get.template.dir),
[`setTemplateDir()`](#api.set.template.dir) and
[`addTemplateDir()`](#api.add.template.dir).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-trusted-dir.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-trusted-dir.md
deleted file mode 100644
index 9720ae8a6..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-trusted-dir.md
+++ /dev/null
@@ -1,8 +0,0 @@
-\$trusted\_dir {#variable.trusted.dir}
-==============
-
-`$trusted_dir` is only for use when security is enabled. This is an
-array of all directories that are considered trusted. Trusted
-directories are where you keep php scripts that are executed directly
-from the templates with
-[`{insert}`](#language.function.insert.php).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md
index 90f55f073..e69de29bb 100644
--- a/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md
+++ b/bundled-libs/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md
@@ -1,49 +0,0 @@
-\$use\_include\_path {#variable.use.include.path}
-====================
-
-This tells smarty to respect the
-[include\_path](https://www.php.net/ini.core.php#ini.include-path) within
-the [`File Template Resource`](#resources.file) handler and the plugin
-loader to resolve the directories known to
-[`$template_dir`](#variable.template.dir). The flag also makes the
-plugin loader check the include\_path for
-[`$plugins_dir`](#variable.plugins.dir).
-
-> **Note**
->
-> You should not design your applications to rely on the include\_path,
-> as this may - depending on your implementation - slow down your system
-> (and Smarty) considerably.
-
-If use\_include\_path is enabled, file discovery for
-[`$template_dir`](#variable.template.dir) and
-[`$plugins_dir`](#variable.plugins.dir) work as follows.
-
-- For each element `$directory` in array (\$template\_dir or
- \$plugins\_dir) do
-
-- Test if requested file is in `$directory` relative to the [current
- working directory](https://www.php.net/function.getcwd.php). If file
- found, return it.
-
-- For each `$path` in include\_path do
-
-- Test if requested file is in `$directory` relative to the `$path`
- (possibly relative to the [current working
- directory](https://www.php.net/function.getcwd.php)). If file found,
- return it.
-
-- Try default\_handler or fail.
-
-This means that whenever a directory/file relative to the current
-working directory is encountered, it is preferred over anything
-potentially accessible through the include\_path.
-
-> **Note**
->
-> Smarty does not filter elements of the include\_path. That means a
-> \".:\" within your include path will trigger the current working
-> directory lookup twice.
-
-See also [`Template Resources`](#resources) and
-[`$template_dir`](#variable.template.dir)
diff --git a/bundled-libs/smarty/smarty/docs/programmers/caching.md b/bundled-libs/smarty/smarty/docs/programmers/caching.md
deleted file mode 100644
index 5656b71b5..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/caching.md
+++ /dev/null
@@ -1,24 +0,0 @@
-Caching
-=======
-
-Caching is used to speed up a call to [`display()`](./api-functions/api-display.md) or
-[`fetch()`](./api-functions/api-fetch.md) by saving its output to a file. If a cached
-version of the call is available, that is displayed instead of
-regenerating the output. Caching can speed things up tremendously,
-especially templates with longer computation times. Since the output of
-[`display()`](./api-functions/api-display.md) or [`fetch()`](./api-functions/api-fetch.md) is cached, one
-cache file could conceivably be made up of several template files,
-config files, etc.
-
-Since templates are dynamic, it is important to be careful what you are
-caching and for how long. For instance, if you are displaying the front
-page of your website that does not change its content very often, it
-might work well to cache this page for an hour or more. On the other
-hand, if you are displaying a page with a timetable containing new
-information by the minute, it would not make sense to cache this page.
-
-## Table of contents
-- [Setting Up Caching](./caching/caching-setting-up.md)
-- [Multiple Caches Per Page](./caching/caching-multiple-caches.md)
-- [Controlling Cacheability of Output](./caching/caching-groups.md)
-- [Custom Cache Implementation](./caching/caching-custom.md)
diff --git a/bundled-libs/smarty/smarty/docs/programmers/caching/caching-cacheable.md b/bundled-libs/smarty/smarty/docs/programmers/caching/caching-cacheable.md
deleted file mode 100644
index ee9b60090..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/caching/caching-cacheable.md
+++ /dev/null
@@ -1,176 +0,0 @@
-Controlling Cacheability of Output {#caching.cacheable}
-==================================
-
-If caching is enabled normally the whole final output of the page gets
-cached. However Smarty3 offers several options how to exclude sections
-of your output from caching.
-
-> **Note**
->
-> Be sure any variables used within a non-cached section are also
-> assigned from PHP when the page is loaded from the cache.
-
-Cacheability of Template Section {#cacheability.sections}
---------------------------------
-
-A larger section of your template can easily excluded from caching by
-using the [`{nocache}`](#language.function.nocache) and
-[`{/nocache}`](#language.function.nocache) tags.
-
-
-
- Today's date is
- {nocache}
- {$smarty.now|date_format}
- {/nocache}
-
-
-
-The above code will output the current date on a cached page.
-
-Cacheability of Tags {#cacheability.tags}
---------------------
-
-Caching for an individual tag can be disabled by adding the \"nocache\"
-option flag to the tag.
-
-
- Today's date is
- {$smarty.now|date_format nocache}
-
-
-
-Cacheability of Variables {#cacheability.variables}
--------------------------
-
-You can [`assign()`](#api.assign) variables as not cachable. Any tag
-which uses such variable will be automatically executed in nocache mode.
-
-> **Note**
->
-> If a tag is executed in nocache mode you must make sure that all other
-> variables used by that tag are also assigned from PHP when the page is
-> loaded from the cache.
-
-> **Note**
->
-> The nocache status of an assigned variable will effect the compiled
-> template code. If you change the status you must manually delete
-> existing compiled and cached template files to force a recompile.
-
-
- // assign $foo as nocahe variable
- $smarty->assign('foo',time(),true);
-
-
- Dynamic time value is {$foo}
-
-
-
-Cacheability of Plugins {#cacheability.plugins}
------------------------
-
-The cacheability of plugins can be declared when registering them. The
-third parameter to [`registerPlugin()`](#api.register.plugin) is called
-`$cacheable` and defaults to TRUE.
-
-When registering a plugin with `$cacheable=false` the plugin is called
-everytime the page is displayed, even if the page comes from the cache.
-The plugin function behaves a little like an
-[`{insert}`](#plugins.inserts) function.
-
-> **Note**
->
-> The `$cacheable` status will effect the compiled template code. If you
-> change the status you must manually delete existing compiled and
-> cached template files to force a recompile.
-
-In contrast to [`{insert}`](#plugins.inserts) the attributes to the
-plugins are not cached by default. They can be declared to be cached
-with the fourth parameter `$cache_attrs`. `$cache_attrs` is an array of
-attribute-names that should be cached, so the plugin-function get value
-as it was the time the page was written to cache everytime it is fetched
-from the cache.
-
-
- setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- function remaining_seconds($params, $smarty) {
- $remain = $params['endtime'] - time();
- if($remain >= 0){
- return $remain . ' second(s)';
- }else{
- return 'done';
- }
- }
-
- $smarty->registerPlugin('function','remaining', 'remaining_seconds', false, array('endtime'));
-
- if (!$smarty->isCached('index.tpl')) {
- // fetch $obj from db and assign...
- $smarty->assignByRef('obj', $obj);
- }
-
- $smarty->display('index.tpl');
- ?>
-
-
-
-where `index.tpl` is:
-
-
- Time Remaining: {remaining endtime=$obj->endtime}
-
-
-
-The number of seconds till the endtime of `$obj` is reached changes on
-each display of the page, even if the page is cached. Since the endtime
-attribute is cached the object only has to be pulled from the database
-when page is written to the cache but not on subsequent requests of the
-page.
-
-
- index.php:
-
- setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- function smarty_block_dynamic($param, $content, $smarty) {
- return $content;
- }
- $smarty->registerPlugin('block','dynamic', 'smarty_block_dynamic', false);
-
- $smarty->display('index.tpl');
- ?>
-
-
-
-where `index.tpl` is:
-
-
- Page created: {'0'|date_format:'%D %H:%M:%S'}
-
- {dynamic}
-
- Now is: {'0'|date_format:'%D %H:%M:%S'}
-
- ... do other stuff ...
-
- {/dynamic}
-
-
-
-When reloading the page you will notice that both dates differ. One is
-"dynamic" one is "static". You can do everything between
-`{dynamic}...{/dynamic}` and be sure it will not be cached like the rest
-of the page.
-
-> **Note**
->
-> The above example shall just demonstrate how a dynamic block plugins
-> works. See
-> [`Cacheability of Template Section`](#cacheability.sections) on how to
-> disable caching of a template section by the built-in
-> [`{nocache}`](#language.function.nocache) and
-> [`{/nocache}`](#language.function.nocache) tags.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/caching/caching-custom.md b/bundled-libs/smarty/smarty/docs/programmers/caching/caching-custom.md
deleted file mode 100644
index 77d2ce7b3..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/caching/caching-custom.md
+++ /dev/null
@@ -1,296 +0,0 @@
-Custom Cache Implementation {#caching.custom}
-===========================
-
-As an alternative to using the default file-based caching mechanism, you
-can specify a custom cache implementation that will be used to read,
-write and clear cached files.
-
-> **Note**
->
-> In Smarty2 this used to be a callback function called
-> `$cache_handler_func`. Smarty3 replaced this callback by the
-> `Smarty_CacheResource` module.
-
-With a custom cache implementation you\'re likely trying to achieve at
-least one of the following goals: replace the slow filesystem by a
-faster storage engine, centralize the cache to be accessible to multiple
-servers.
-
-Smarty allows CacheResource implementations to use one of the APIs
-`Smarty_CacheResource_Custom` or `Smarty_CacheResource_KeyValueStore`.
-`Smarty_CacheResource_Custom` is a simple API directing all read, write,
-clear calls to your implementation. This API allows you to store
-wherever and however you deem fit. The
-`Smarty_CacheResource_KeyValueStore` API allows you to turn any \"dumb\"
-KeyValue-Store (like APC, Memcache, ...) into a full-featured
-CacheResource implementation. That is, everything around deep
-cache-groups like \"a\|b\|c\" is being handled for you in way that
-allows clearing the cache-group \"a\" and all nested groups are cleared
-as well - even though KeyValue-Stores don\'t allow this kind of
-hierarchy by nature.
-
-Custom CacheResources may be put in a file `cacheresource.foobarxyz.php`
-within your [`$plugins_dir`](#variable.plugins.dir), or registered on
-runtime with [`registerCacheResource()`](#api.register.cacheresource).
-In either case you need to set [`$caching_type`](#variable.caching.type)
-to invoke your custom CacheResource implementation.
-
-
- caching_type = 'mysql';
-
- /**
- * MySQL CacheResource
- *
- * CacheResource Implementation based on the Custom API to use
- * MySQL as the storage resource for Smarty's output caching.
- *
- * Table definition:
- * 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;
- *
- * @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", "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();
- }
- }
-
-
-
-
- caching_type = 'memcache';
-
- /**
- * 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()
- {
- return $this->memcache->flush();
- }
- }
-
-
-
diff --git a/bundled-libs/smarty/smarty/docs/programmers/caching/caching-groups.md b/bundled-libs/smarty/smarty/docs/programmers/caching/caching-groups.md
deleted file mode 100644
index 7e248b2f3..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/caching/caching-groups.md
+++ /dev/null
@@ -1,60 +0,0 @@
-Cache Groups {#caching.groups}
-============
-
-You can do more elaborate grouping by setting up `$cache_id` groups.
-This is accomplished by separating each sub-group with a vertical bar
-`|` in the `$cache_id` value. You can have as many sub-groups as you
-like.
-
-- You can think of cache groups like a directory hierarchy. For
- instance, a cache group of `'a|b|c'` could be thought of as the
- directory structure `'/a/b/c/'`.
-
-- `clearCache(null,'a|b|c')` would be like removing the files
- `'/a/b/c/*'`. `clearCache(null,'a|b')` would be like removing the
- files `'/a/b/*'`.
-
-- If you specify a [`$compile_id`](#variable.compile.id) such as
- `clearCache(null,'a|b','foo')` it is treated as an appended cache
- group `'/a/b/c/foo/'`.
-
-- If you specify a template name such as
- `clearCache('foo.tpl','a|b|c')` then Smarty will attempt to remove
- `'/a/b/c/foo.tpl'`.
-
-- You CANNOT remove a specified template name under multiple cache
- groups such as `'/a/b/*/foo.tpl'`, the cache grouping works
- left-to-right ONLY. You will need to group your templates under a
- single cache group hierarchy to be able to clear them as a group.
-
-Cache grouping should not be confused with your template directory
-hierarchy, the cache grouping has no knowledge of how your templates are
-structured. So for example, if you have a template structure like
-`themes/blue/index.tpl` and you want to be able to clear all the cache
-files for the "blue" theme, you will need to create a cache group
-structure that mimics your template file structure, such as
-`display('themes/blue/index.tpl','themes|blue')`, then clear them with
-`clearCache(null,'themes|blue')`.
-
-
- setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- // clear all caches with 'sports|basketball' as the first two cache_id groups
- $smarty->clearCache(null,'sports|basketball');
-
- // clear all caches with "sports" as the first cache_id group. This would
- // include "sports|basketball", or "sports|(anything)|(anything)|(anything)|..."
- $smarty->clearCache(null,'sports');
-
- // clear the foo.tpl cache file with "sports|basketball" as the cache_id
- $smarty->clearCache('foo.tpl','sports|basketball');
-
-
- $smarty->display('index.tpl','sports|basketball');
- ?>
-
-
diff --git a/bundled-libs/smarty/smarty/docs/programmers/caching/caching-multiple-caches.md b/bundled-libs/smarty/smarty/docs/programmers/caching/caching-multiple-caches.md
deleted file mode 100644
index 40fffc3d7..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/caching/caching-multiple-caches.md
+++ /dev/null
@@ -1,87 +0,0 @@
-Multiple Caches Per Page {#caching.multiple.caches}
-========================
-
-You can have multiple cache files for a single call to
-[`display()`](#api.display) or [`fetch()`](#api.fetch). Let\'s say that
-a call to `display('index.tpl')` may have several different output
-contents depending on some condition, and you want separate caches for
-each one. You can do this by passing a `$cache_id` as the second
-parameter to the function call.
-
-
- setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- $my_cache_id = $_GET['article_id'];
-
- $smarty->display('index.tpl', $my_cache_id);
- ?>
-
-
-
-Above, we are passing the variable `$my_cache_id` to
-[`display()`](#api.display) as the `$cache_id`. For each unique value of
-`$my_cache_id`, a separate cache will be generated for `index.tpl`. In
-this example, `article_id` was passed in the URL and is used as the
-`$cache_id`.
-
-> **Note**
->
-> Be very cautious when passing values from a client (web browser) into
-> Smarty or any PHP application. Although the above example of using the
-> article\_id from the URL looks handy, it could have bad consequences.
-> The `$cache_id` is used to create a directory on the file system, so
-> if the user decided to pass an extremely large value for article\_id,
-> or write a script that sends random article\_id\'s at a rapid pace,
-> this could possibly cause problems at the server level. Be sure to
-> sanitize any data passed in before using it. In this instance, maybe
-> you know the article\_id has a length of ten characters and is made up
-> of alpha-numerics only, and must be a valid article\_id in the
-> database. Check for this!
-
-Be sure to pass the same `$cache_id` as the second parameter to
-[`isCached()`](#api.is.cached) and [`clearCache()`](#api.clear.cache).
-
-
- setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- $my_cache_id = $_GET['article_id'];
-
- if(!$smarty->isCached('index.tpl',$my_cache_id)) {
- // No cache available, do variable assignments here.
- $contents = get_database_contents();
- $smarty->assign($contents);
- }
-
- $smarty->display('index.tpl',$my_cache_id);
- ?>
-
-
-
-You can clear all caches for a particular `$cache_id` by passing NULL as
-the first parameter to [`clearCache()`](#api.clear.cache).
-
-
- setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- // clear all caches with "sports" as the $cache_id
- $smarty->clearCache(null,'sports');
-
- $smarty->display('index.tpl','sports');
- ?>
-
-
-
-In this manner, you can "group" your caches together by giving them the
-same `$cache_id`.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/caching/caching-setting-up.md b/bundled-libs/smarty/smarty/docs/programmers/caching/caching-setting-up.md
deleted file mode 100644
index bc9d2ad9e..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/caching/caching-setting-up.md
+++ /dev/null
@@ -1,153 +0,0 @@
-Setting Up Caching {#caching.setting.up}
-==================
-
-The first thing to do is enable caching by setting
-[`$caching`](#variable.caching) to one of
-`Smarty::CACHING_LIFETIME_CURRENT` or `Smarty::CACHING_LIFETIME_SAVED`.
-
-
- cacheLifetime() to determine
- // the number of seconds a cache is good for
- $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- $smarty->display('index.tpl');
- ?>
-
-
-
-With caching enabled, the function call to `display('index.tpl')` will
-render the template as usual, but also saves a copy of its output to a
-file (a cached copy) in the [`$cache_dir`](#variable.cache.dir). On the
-next call to `display('index.tpl')`, the cached copy will be used
-instead of rendering the template again.
-
-> **Note**
->
-> The files in the [`$cache_dir`](#variable.cache.dir) are named similar
-> to the template name. Although they end in the `.php` extension, they
-> are not intended to be directly executable. Do not edit these files!
-
-Each cached page has a limited lifetime determined by
-[`$cache_lifetime`](#variable.cache.lifetime). The default value is 3600
-seconds, or one hour. After that time expires, the cache is regenerated.
-It is possible to give individual caches their own expiration time by
-setting [`$caching`](#variable.caching) to
-`Smarty::CACHING_LIFETIME_SAVED`. See
-[`$cache_lifetime`](#variable.cache.lifetime) for more details.
-
-
- setCaching(Smarty::CACHING_LIFETIME_SAVED);
-
- // set the cache_lifetime for index.tpl to 5 minutes
- $smarty->setCacheLifetime(300);
- $smarty->display('index.tpl');
-
- // set the cache_lifetime for home.tpl to 1 hour
- $smarty->setCacheLifetime(3600);
- $smarty->display('home.tpl');
-
- // NOTE: the following $cache_lifetime setting will not work when $caching
- // is set to Smarty::CACHING_LIFETIME_SAVED.
- // The cache lifetime for home.tpl has already been set
- // to 1 hour, and will no longer respect the value of $cache_lifetime.
- // The home.tpl cache will still expire after 1 hour.
- $smarty->setCacheLifetime(30); // 30 seconds
- $smarty->display('home.tpl');
- ?>
-
-
-
-If [`$compile_check`](#variable.compile.check) is enabled (default),
-every template file and config file that is involved with the cache file
-is checked for modification. If any of the files have been modified
-since the cache was generated, the cache is immediately regenerated.
-This is a computational overhead, so for optimum performance set
-[`$compile_check`](#variable.compile.check) to FALSE.
-
-
- setCaching(Smarty::CACHING_LIFETIME_CURRENT);
- $smarty->setCompileCheck(false);
-
- $smarty->display('index.tpl');
- ?>
-
-
-
-If [`$force_compile`](#variable.force.compile) is enabled, the cache
-files will always be regenerated. This effectively disables caching,
-however this also seriously degrades performance.
-[`$force_compile`](#variable.force.compile) is meant to be used for
-[debugging](#chapter.debugging.console) purposes. The appropriate way to
-disable caching is to set [`$caching`](#variable.caching) to
-Smarty::CACHING\_OFF.
-
-The [`isCached()`](#api.is.cached) function can be used to test if a
-template has a valid cache or not. If you have a cached template that
-requires something like a database fetch, you can use this to skip that
-process.
-
-
- setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- if(!$smarty->isCached('index.tpl')) {
- // No cache available, do variable assignments here.
- $contents = get_database_contents();
- $smarty->assign($contents);
- }
-
- $smarty->display('index.tpl');
- ?>
-
-
-
-You can keep parts of a page dynamic (disable caching) with the
-[`{nocache}{/nocache}`](#language.function.nocache) block function, the
-[`{insert}`](#language.function.insert) function, or by using the
-`nocache` parameter for most template functions.
-
-Let\'s say the whole page can be cached except for a banner that is
-displayed down the side of the page. By using the
-[`{insert}`](#language.function.insert) function for the banner, you can
-keep this element dynamic within the cached content. See the
-documentation on [`{insert}`](#language.function.insert) for more
-details and examples.
-
-You can clear all the cache files with the
-[`clearAllCache()`](#api.clear.all.cache) function, or individual cache
-files [and groups](#caching.groups) with the
-[`clearCache()`](#api.clear.cache) function.
-
-
- setCaching(Smarty::CACHING_LIFETIME_CURRENT);
-
- // clear only cache for index.tpl
- $smarty->clearCache('index.tpl');
-
- // clear out all cache files
- $smarty->clearAllCache();
-
- $smarty->display('index.tpl');
- ?>
-
-
diff --git a/bundled-libs/smarty/smarty/docs/programmers/charset.md b/bundled-libs/smarty/smarty/docs/programmers/charset.md
deleted file mode 100644
index 9dedf4dcd..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/charset.md
+++ /dev/null
@@ -1,44 +0,0 @@
-Charset Encoding {#charset}
-================
-
-Charset Encoding {#charset.encoding}
-================
-
-There are a variety of encodings for textual data, ISO-8859-1 (Latin1)
-and UTF-8 being the most popular. Unless you change `Smarty::$_CHARSET`,
-Smarty recognizes `UTF-8` as the internal charset if
-[Multibyte String](https://www.php.net/mbstring) is available,
-`ISO-8859-1` if not.
-
-> **Note**
->
-> `ISO-8859-1` has been PHP\'s default internal charset since the
-> beginning. Unicode has been evolving since 1991. Since then it has
-> become the one charset to conquer them all, as it is capable of
-> encoding most of the known characters even across different character
-> systems (latin, cyrillic, japanese, ...). `UTF-8` is unicode\'s most
-> used encoding, as it allows referencing the thousands of character
-> with the smallest size overhead possible.
->
-> Since unicode and UTF-8 are very wide spread nowadays, their use is
-> strongly encouraged.
-
-> **Note**
->
-> Smarty\'s internals and core plugins are truly UTF-8 compatible since
-> Smarty 3.1. To achieve unicode compatibility, the [Multibyte
-> String](https://www.php.net/mbstring) PECL is required. Unless your PHP
-> environment offers this package, Smarty will not be able to offer
-> full-scale UTF-8 compatibility.
-
-
- // use japanese character encoding
- if (function_exists('mb_internal_charset')) {
- mb_internal_charset('EUC-JP');
- }
-
- require_once 'libs/Smarty.class.php';
- Smarty::$_CHARSET = 'EUC-JP';
- $smarty = new Smarty();
-
-
diff --git a/bundled-libs/smarty/smarty/docs/programmers/plugins.md b/bundled-libs/smarty/smarty/docs/programmers/plugins.md
deleted file mode 100644
index 41a7ea0c4..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/plugins.md
+++ /dev/null
@@ -1,44 +0,0 @@
-Extending Smarty With Plugins {#plugins}
-=============================
-
-## Table of contents
-
-- [How Plugins Work](./plugins/plugins-howto.md)
-- [Naming Conventions](./plugins/plugins-naming-conventions.md)
-- [Writing Plugins](./plugins/plugins-writing.md)
-- [Template Functions](./plugins/plugins-functions.md)
-- [Modifiers](./plugins/plugins-modifiers.md)
-- [Block Functions](./plugins/plugins-block-functions.md)
-- [Compiler Functions](./plugins/plugins-compiler-functions.md)
-- [Prefilters/Postfilters](./plugins/plugins-prefilters-postfilters.md)
-- [Output Filters](./plugins/plugins-outputfilters.md)
-- [Resources](./plugins/plugins-resources.md)
-- [Inserts](./plugins/plugins-inserts.md)
-
-Version 2.0 introduced the plugin architecture that is used for almost
-all the customizable functionality of Smarty. This includes:
-
-- functions
-
-- modifiers
-
-- block functions
-
-- compiler functions
-
-- prefilters
-
-- postfilters
-
-- outputfilters
-
-- resources
-
-- inserts
-
-With the exception of resources, backwards compatibility with the old
-way of registering handler functions via register\_\* API is preserved.
-If you did not use the API but instead modified the class variables
-`$custom_funcs`, `$custom_mods`, and other ones directly, then you will
-need to adjust your scripts to either use the API or convert your custom
-functionality into plugins.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-block-functions.md b/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-block-functions.md
deleted file mode 100644
index 0e11c0782..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-block-functions.md
+++ /dev/null
@@ -1,95 +0,0 @@
-Block Functions {#plugins.block.functions}
-===============
-
-void
-
-smarty\_block\_
-
-name
-
-array
-
-\$params
-
-mixed
-
-\$content
-
-object
-
-\$template
-
-boolean
-
-&\$repeat
-
-Block functions are functions of the form: `{func} .. {/func}`. In other
-words, they enclose a template block and operate on the contents of this
-block. Block functions take precedence over [custom
-functions](#language.custom.functions) of the same name, that is, you
-cannot have both custom function `{func}` and block function
-`{func}..{/func}`.
-
-- By default your function implementation is called twice by Smarty:
- once for the opening tag, and once for the closing tag. (See
- `$repeat` below on how to change this.)
-
-- Starting with Smarty 3.1 the returned value of the opening tag call
- is displayed as well.
-
-- Only the opening tag of the block function may have
- [attributes](#language.syntax.attributes). All attributes passed to
- template functions from the template are contained in the `$params`
- variable as an associative array. The opening tag attributes are
- also accessible to your function when processing the closing tag.
-
-- The value of the `$content` variable depends on whether your
- function is called for the opening or closing tag. In case of the
- opening tag, it will be NULL, and in case of the closing tag it will
- be the contents of the template block. Note that the template block
- will have already been processed by Smarty, so all you will receive
- is the template output, not the template source.
-
-- The parameter `$repeat` is passed by reference to the function
- implementation and provides a possibility for it to control how many
- times the block is displayed. By default `$repeat` is TRUE at the
- first call of the block-function (the opening tag) and FALSE on all
- subsequent calls to the block function (the block\'s closing tag).
- Each time the function implementation returns with `$repeat` being
- TRUE, the contents between `{func}...{/func}` are evaluated and the
- function implementation is called again with the new block contents
- in the parameter `$content`.
-
-If you have nested block functions, it\'s possible to find out what the
-parent block function is by accessing `$smarty->_tag_stack` variable.
-Just do a [`var_dump()`](https://www.php.net/var_dump) on it and the
-structure should be apparent.
-
-
-
-
-
-
-See also: [`registerPlugin()`](#api.register.plugin),
-[`unregisterPlugin()`](#api.unregister.plugin).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-compiler-functions.md b/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-compiler-functions.md
deleted file mode 100644
index ef2454e8a..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-compiler-functions.md
+++ /dev/null
@@ -1,66 +0,0 @@
-Compiler Functions {#plugins.compiler.functions}
-==================
-
-Compiler functions are called only during compilation of the template.
-They are useful for injecting PHP code or time-sensitive static content
-into the template. If there is both a compiler function and a [custom
-function](#language.custom.functions) registered under the same name,
-the compiler function has precedence.
-
-mixed
-
-smarty\_compiler\_
-
-name
-
-array
-
-\$params
-
-object
-
-\$smarty
-
-The compiler function is passed two parameters: the params array which
-contains precompiled strings for the attribute values and the Smarty
-object. It\'s supposed to return the code to be injected into the
-compiled template including the surrounding PHP tags.
-
-
- _current_file . " compiled at " . date('Y-m-d H:M'). "';\n?>";
- }
- ?>
-
-This function can be called from the template as:
-
-
- {* this function gets executed at compile time only *}
- {tplheader}
-
-
-
-The resulting PHP code in the compiled template would be something like
-this:
-
-
-
-
-
-
-See also [`registerPlugin()`](#api.register.plugin),
-[`unregisterPlugin()`](#api.unregister.plugin).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-functions.md b/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-functions.md
deleted file mode 100644
index 067b93826..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-functions.md
+++ /dev/null
@@ -1,94 +0,0 @@
-Template Functions {#plugins.functions}
-==================
-
-void
-
-smarty\_function\_
-
-name
-
-array
-
-\$params
-
-object
-
-\$template
-
-All [attributes](#language.syntax.attributes) passed to template
-functions from the template are contained in the `$params` as an
-associative array.
-
-The output (return value) of the function will be substituted in place
-of the function tag in the template, eg the
-[`{fetch}`](#language.function.fetch) function. Alternatively, the
-function can simply perform some other task without any output, eg the
-[`{assign}`](#language.function.assign) function.
-
-If the function needs to assign some variables to the template or use
-some other Smarty-provided functionality, it can use the supplied
-`$template` object to do so eg `$template->foo()`.
-
-
-
-
-which can be used in the template as:
-
- Question: Will we ever have time travel?
- Answer: {eightball}.
-
-
-
- assign($params['var'], $params['value']);
-
- }
- ?>
-
-
-
-See also: [`registerPlugin()`](#api.register.plugin),
-[`unregisterPlugin()`](#api.unregister.plugin).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-howto.md b/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-howto.md
deleted file mode 100644
index 5738c3fcb..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-howto.md
+++ /dev/null
@@ -1,18 +0,0 @@
-How Plugins Work {#plugins.howto}
-================
-
-Plugins are always loaded on demand. Only the specific modifiers,
-functions, resources, etc invoked in the templates scripts will be
-loaded. Moreover, each plugin is loaded only once, even if you have
-several different instances of Smarty running within the same request.
-
-Pre/postfilters and output filters are a bit of a special case. Since
-they are not mentioned in the templates, they must be registered or
-loaded explicitly via API functions before the template is processed.
-The order in which multiple filters of the same type are executed
-depends on the order in which they are registered or loaded.
-
-The [plugins directory](#variable.plugins.dir) can be a string
-containing a path or an array containing multiple paths. To install a
-plugin, simply place it in one of the directories and Smarty will use it
-automatically.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-inserts.md b/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-inserts.md
deleted file mode 100644
index 370a97bd0..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-inserts.md
+++ /dev/null
@@ -1,48 +0,0 @@
-Inserts {#plugins.inserts}
-=======
-
-Insert plugins are used to implement functions that are invoked by
-[`{insert}`](#language.function.insert) tags in the template.
-
-string
-
-smarty\_insert\_
-
-name
-
-array
-
-\$params
-
-object
-
-\$template
-
-The first parameter to the function is an associative array of
-attributes passed to the insert.
-
-The insert function is supposed to return the result which will be
-substituted in place of the `{insert}` tag in the template.
-
-
-
-
-
diff --git a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-modifiers.md b/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-modifiers.md
deleted file mode 100644
index a4e99daa3..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-modifiers.md
+++ /dev/null
@@ -1,86 +0,0 @@
-Modifiers {#plugins.modifiers}
-=========
-
-[Modifiers](#language.modifiers) are little functions that are applied
-to a variable in the template before it is displayed or used in some
-other context. Modifiers can be chained together.
-
-mixed
-
-smarty\_modifier\_
-
-name
-
-mixed
-
-\$value
-
-\[mixed
-
-\$param1
-
-, \...\]
-
-The first parameter to the modifier plugin is the value on which the
-modifier is to operate. The rest of the parameters are optional,
-depending on what kind of operation is to be performed.
-
-The modifier has to [return](https://www.php.net/return) the result of its
-processing.
-
-This plugin basically aliases one of the built-in PHP functions. It does
-not have any additional parameters.
-
-
-
-
-
- $length) {
- $length -= strlen($etc);
- $fragment = substr($string, 0, $length+1);
- if ($break_words)
- $fragment = substr($fragment, 0, -1);
- else
- $fragment = preg_replace('/\s+(\S+)?$/', '', $fragment);
- return $fragment.$etc;
- } else
- return $string;
- }
- ?>
-
-
-
-See also [`registerPlugin()`](#api.register.plugin),
-[`unregisterPlugin()`](#api.unregister.plugin).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-naming-conventions.md b/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-naming-conventions.md
deleted file mode 100644
index 15bc26015..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-naming-conventions.md
+++ /dev/null
@@ -1,51 +0,0 @@
-Naming Conventions {#plugins.naming.conventions}
-==================
-
-Plugin files and functions must follow a very specific naming convention
-in order to be located by Smarty.
-
-**plugin files** must be named as follows:
-
-> `
-> type.name.php
-> `
-
-- Where `type` is one of these plugin types:
-
- - function
-
- - modifier
-
- - block
-
- - compiler
-
- - prefilter
-
- - postfilter
-
- - outputfilter
-
- - resource
-
- - insert
-
-- And `name` should be a valid identifier; letters, numbers, and
- underscores only, see [php
- variables](https://www.php.net/language.variables).
-
-- Some examples: `function.html_select_date.php`, `resource.db.php`,
- `modifier.spacify.php`.
-
-**plugin functions** inside the PHP files must be named as follows:
-
-> `smarty_type_name`
-
-- The meanings of `type` and `name` are the same as above.
-
-- An example modifier name `foo` would be
- `function smarty_modifier_foo()`.
-
-Smarty will output appropriate error messages if the plugin file it
-needs is not found, or if the file or the plugin function are named
-improperly.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-outputfilters.md b/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-outputfilters.md
deleted file mode 100644
index 4e34ab7eb..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-outputfilters.md
+++ /dev/null
@@ -1,48 +0,0 @@
-Output Filters {#plugins.outputfilters}
-==============
-
-Output filter plugins operate on a template\'s output, after the
-template is loaded and executed, but before the output is displayed.
-
-string
-
-smarty\_outputfilter\_
-
-name
-
-string
-
-\$template\_output
-
-object
-
-\$template
-
-The first parameter to the output filter function is the template output
-that needs to be processed, and the second parameter is the instance of
-Smarty invoking the plugin. The plugin is supposed to do the processing
-and return the results.
-
-
-
-
-
-
-See also [`registerFilter()`](#api.register.filter),
-[`unregisterFilter()`](#api.unregister.filter).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-prefilters-postfilters.md b/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-prefilters-postfilters.md
deleted file mode 100644
index 39467cbcb..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-prefilters-postfilters.md
+++ /dev/null
@@ -1,89 +0,0 @@
-Prefilters/Postfilters {#plugins.prefilters.postfilters}
-======================
-
-Prefilter and postfilter plugins are very similar in concept; where they
-differ is in the execution \-- more precisely the time of their
-execution.
-
-string
-
-smarty\_prefilter\_
-
-name
-
-string
-
-\$source
-
-object
-
-\$template
-
-Prefilters are used to process the source of the template immediately
-before compilation. The first parameter to the prefilter function is the
-template source, possibly modified by some other prefilters. The plugin
-is supposed to return the modified source. Note that this source is not
-saved anywhere, it is only used for compilation.
-
-string
-
-smarty\_postfilter\_
-
-name
-
-string
-
-\$compiled
-
-object
-
-\$template
-
-Postfilters are used to process the compiled output of the template (the
-PHP code) immediately after the compilation is done but before the
-compiled template is saved to the filesystem. The first parameter to the
-postfilter function is the compiled template code, possibly modified by
-other postfilters. The plugin is supposed to return the modified version
-of this code.
-
-
- ]+>!e', 'strtolower("$1")', $source);
- }
- ?>
-
-
-
-
- \ngetTemplateVars()); ?>\n" . $compiled;
- return $compiled;
- }
- ?>
-
-
-
-See also [`registerFilter()`](#api.register.filter) and
-[`unregisterFilter()`](#api.unregister.filter).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-resources.md b/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-resources.md
deleted file mode 100644
index 1b1fdf0ab..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-resources.md
+++ /dev/null
@@ -1,128 +0,0 @@
-Resources {#plugins.resources}
-=========
-
-Resource plugins are meant as a generic way of providing template
-sources or PHP script components to Smarty. Some examples of resources:
-databases, LDAP, shared memory, sockets, and so on.
-
-Custom Resources may be put in a file `resource.foobarxyz.php` within
-your [`$plugins_dir`](#variable.plugins.dir), or registered on runtime
-with [`registerResource()`](#api.register.resource). In either case you
-will be able to access that resource by prepending its name to the
-template you\'re addressing: `foobarxyz:yourtemplate.tpl`.
-
-If a Resource\'s templates should not be run through the Smarty
-compiler, the Custom Resource may extend `Smarty_Resource_Uncompiled`.
-The Resource Handler must then implement the function
-`renderUncompiled(Smarty_Internal_Template $_template)`. `$_template` is
-a reference to the current template and contains all assigned variables
-which the implementor can access via
-`$_template->smarty->getTemplateVars()`. These Resources simply echo
-their rendered content to the output stream. The rendered output will be
-output-cached if the Smarty instance was configured accordingly. See
-`libs/sysplugins/smarty_internal_resource_php.php` for an example.
-
-If the Resource\'s compiled templates should not be cached on disk, the
-Custom Resource may extend `Smarty_Resource_Recompiled`. These Resources
-are compiled every time they are accessed. This may be an expensive
-overhead. See `libs/sysplugins/smarty_internal_resource_eval.php` for an
-example.
-
-
- 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;
- *
- * Demo data:
- * INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');
- *
- * @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", "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);
- }
- }
-
-
- require_once 'libs/Smarty.class.php';
- $smarty = new Smarty();
- $smarty->registerResource('mysql', new Smarty_Resource_Mysql());
-
- // using resource from php script
- $smarty->display("mysql:index.tpl");
- ?>
-
-
-
-And from within Smarty template:
-
-
- {include file='mysql:extras/navigation.tpl'}
-
-
-
-See also [`registerResource()`](#api.register.resource),
-[`unregisterResource()`](#api.unregister.resource).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-writing.md b/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-writing.md
deleted file mode 100644
index 972911d97..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/plugins/plugins-writing.md
+++ /dev/null
@@ -1,36 +0,0 @@
-Writing Plugins {#plugins.writing}
-===============
-
-Plugins can be either loaded by Smarty automatically from the filesystem
-or they can be registered at runtime via one of the register\_\* API
-functions. They can also be unregistered by using unregister\_\* API
-functions.
-
-For the plugins that are registered at runtime, the name of the plugin
-function(s) does not have to follow the naming convention.
-
-If a plugin depends on some functionality provided by another plugin (as
-is the case with some plugins bundled with Smarty), then the proper way
-to load the needed plugin is this:
-
-
- smarty->loadPlugin('smarty_shared_make_timestamp');
- // plugin code
- }
- ?>
-
-
-
-As a general rule, the currently evaluated template\'s
-Smarty\_Internal\_Template object is always passed to the plugins as the
-last parameter with two exceptions:
-
-- modifiers do not get passed the Smarty\_Internal\_Template object at
- all
-
-- blocks get passed `$repeat` after the Smarty\_Internal\_Template
- object to keep backwards compatibility to older versions of Smarty.
diff --git a/bundled-libs/smarty/smarty/docs/programmers/resources.md b/bundled-libs/smarty/smarty/docs/programmers/resources.md
deleted file mode 100644
index 239690061..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/resources.md
+++ /dev/null
@@ -1,19 +0,0 @@
-Resources
-=========
-
-The templates may come from a variety of sources. When you
-[`display()`](./api-functions/api-display.md) or [`fetch()`](./api-functions/api-fetch.md) a template, or
-when you include a template from within another template, you supply a
-resource type, followed by the appropriate path and template name. If a
-resource is not explicitly given, the value of
-[`$default_resource_type`](./api-variables/variable-default-resource-type.md) (default:
-\"file\") is assumed.
-
-## Table of contents
-
-- [File Template Resources](./resources/resources-file.md)
-- [String Template Resources](./resources/resources-string.md)
-- [Stream Template Resources](./resources/resources-streams.md)
-- [Extends Template Resources](./resources/resources-extends.md)
-- [Custom Template Resources](./resources/resources-custom.md)
-
diff --git a/bundled-libs/smarty/smarty/docs/programmers/resources/resources-custom.md b/bundled-libs/smarty/smarty/docs/programmers/resources/resources-custom.md
deleted file mode 100644
index d679afcb1..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/resources/resources-custom.md
+++ /dev/null
@@ -1,111 +0,0 @@
-Custom Template Resources {#resources.custom}
-=========================
-
-You can retrieve templates using whatever possible source you can access
-with PHP: databases, sockets, files, etc. You do this by writing
-resource plugin functions and registering them with Smarty.
-
-See [resource plugins](#plugins.resources) section for more information
-on the functions you are supposed to provide.
-
-> **Note**
->
-> Note that you cannot override the built-in `file:` resource, but you
-> can provide a resource that fetches templates from the file system in
-> some other way by registering under another resource name.
-
-
- 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;
- *
- * Demo data:
- * INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');
- *
- * @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", "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);
- }
- }
-
-
- require_once 'libs/Smarty.class.php';
- $smarty = new Smarty();
- $smarty->registerResource('mysql', new Smarty_Resource_Mysql());
-
- // using resource from php script
- $smarty->display("mysql:index.tpl");
- ?>
-
-
-
-And from within Smarty template:
-
-
- {include file='mysql:extras/navigation.tpl'}
-
-
diff --git a/bundled-libs/smarty/smarty/docs/programmers/resources/resources-extends.md b/bundled-libs/smarty/smarty/docs/programmers/resources/resources-extends.md
deleted file mode 100644
index d7213d894..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/resources/resources-extends.md
+++ /dev/null
@@ -1,36 +0,0 @@
-Extends Template Resources {#resources.extends}
-==========================
-
-The `extends:` resource is used to define child/parent relationships for
-template inheritance from the PHP script. For details see section of
-[Template Inheritance](#advanced.features.template.inheritance).
-
-As of Smarty 3.1 the `extends:` resource may use any available [template
-resource](#resources), including `string:` and `eval:`. When [templates
-from strings](#resources.string) are used, make sure they are properly
-(url or base64) encoded. Is an `eval:` resource found within an
-inheritance chain, its \"don\'t save a compile file\" property is
-superseded by the `extends:` resource. The templates within an
-inheritance chain are not compiled separately, though. Only a single
-compiled template will be generated.
-
-> **Note**
->
-> Use this when inheritance is required programmatically. When inheriting
-> within PHP, it is not obvious from the child template what inheritance
-> took place. If you have a choice, it is normally more flexible and
-> intuitive to handle inheritance chains from within the templates.
-
-
- display('extends:parent.tpl|child.tpl|grandchild.tpl');
-
- // inheritance from multiple template sources
- $smarty->display('extends:db:parent.tpl|file:child.tpl|grandchild.tpl|eval:{block name="fooBazVar_"}hello world{/block}');
- ?>
-
-
-
-See also [Template Inheritance](#advanced.features.template.inheritance)
-[`{block}`](#language.function.block) and
-[`{extends}`](#language.function.extends).
diff --git a/bundled-libs/smarty/smarty/docs/programmers/resources/resources-file.md b/bundled-libs/smarty/smarty/docs/programmers/resources/resources-file.md
deleted file mode 100644
index 9a89af183..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/resources/resources-file.md
+++ /dev/null
@@ -1,160 +0,0 @@
-File Template Resources {#resources.file}
-=======================
-
-Smarty ships with a built-in template resource for the filesystem. The
-`file:` is the default resource. The resource key `file:` must only be
-specified, if the
-[`$default_resource_type`](#variable.default.resource.type) has been
-changed.
-
-If the file resource cannot find the requested template, the
-[`$default_template_handler_func`](#variable.default.template.handler.func)
-is invoked.
-
-> **Note**
->
-> As of Smarty 3.1 the file resource no longer walks through the
-> [include\_path](https://www.php.net/ini.core.php#ini.include-path) unless
-> [`$use_include_path` is activated](#variable.use.include.path)
-
-Templates from \$template\_dir {#templates.from.template.dir}
-------------------------------
-
-The file resource pulls templates source files from the directories
-specified in [`$template_dir`](#variable.template.dir). The list of
-directories is traversed in the order they appear in the array. The
-first template found is the one to process.
-
-
- display('index.tpl');
- $smarty->display('file:index.tpl'); // same as above
- ?>
-
-
-
-From within a Smarty template
-
-
- {include file='index.tpl'}
- {include file='file:index.tpl'} {* same as above *}
-
-
-
-Templates from a specific \$template\_dir {#templates.from.specified.template.dir}
------------------------------------------
-
-Smarty 3.1 introduced the bracket-syntax for specifying an element from
-[`$template_dir`](#variable.template.dir). This allows websites
-employing multiple sets of templates better control over which template
-to access.
-
-The bracket-syntax can be used from anywhere you can specify the `file:`
-resource type.
-
-
- setTemplateDir(array(
- './templates', // element: 0, index: 0
- './templates_2', // element: 1, index: 1
- '10' => 'templates_10', // element: 2, index: '10'
- 'foo' => 'templates_foo', // element: 3, index: 'foo'
- ));
-
- /*
- assume the template structure
- ./templates/foo.tpl
- ./templates_2/foo.tpl
- ./templates_2/bar.tpl
- ./templates_10/foo.tpl
- ./templates_10/bar.tpl
- ./templates_foo/foo.tpl
- */
-
- // regular access
- $smarty->display('file:foo.tpl');
- // will load ./templates/foo.tpl
-
- // using numeric index
- $smarty->display('file:[1]foo.tpl');
- // will load ./templates_2/foo.tpl
-
- // using numeric string index
- $smarty->display('file:[10]foo.tpl');
- // will load ./templates_10/foo.tpl
-
- // using string index
- $smarty->display('file:[foo]foo.tpl');
- // will load ./templates_foo/foo.tpl
-
- // using "unknown" numeric index (using element number)
- $smarty->display('file:[2]foo.tpl');
- // will load ./templates_10/foo.tpl
-
- ?>
-
-
-
-From within a Smarty template
-
-
- {include file="file:foo.tpl"}
- {* will load ./templates/foo.tpl *}
-
- {include file="file:[1]foo.tpl"}
- {* will load ./templates_2/foo.tpl *}
-
- {include file="file:[foo]foo.tpl"}
- {* will load ./templates_foo/foo.tpl *}
-
-
-
-Templates from any directory {#templates.from.any.dir}
-----------------------------
-
-Templates outside of the [`$template_dir`](#variable.template.dir)
-require the `file:` template resource type, followed by the absolute
-path to the template (with leading slash.)
-
-> **Note**
->
-> With [`Security`](#advanced.features.security) enabled, access to
-> templates outside of the [`$template_dir`](#variable.template.dir) is
-> not allowed unless you list those directories in `$secure_dir`.
-
-
- display('file:/export/templates/index.tpl');
- $smarty->display('file:/path/to/my/templates/menu.tpl');
- ?>
-
-
-
-And from within a Smarty template:
-
-
- {include file='file:/usr/local/share/templates/navigation.tpl'}
-
-
-
-Windows Filepaths {#templates.windows.filepath}
------------------
-
-If you are using a Windows machine, filepaths usually include a drive
-letter (C:) at the beginning of the pathname. Be sure to use `file:` in
-the path to avoid namespace conflicts and get the desired results.
-
-
- display('file:C:/export/templates/index.tpl');
- $smarty->display('file:F:/path/to/my/templates/menu.tpl');
- ?>
-
-
-
-And from within Smarty template:
-
-
- {include file='file:D:/usr/local/share/templates/navigation.tpl'}
diff --git a/bundled-libs/smarty/smarty/docs/programmers/resources/resources-streams.md b/bundled-libs/smarty/smarty/docs/programmers/resources/resources-streams.md
deleted file mode 100644
index e0596f591..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/resources/resources-streams.md
+++ /dev/null
@@ -1,27 +0,0 @@
-Stream Template Resources {#resources.streams}
-=========================
-
-Streams allow you to use PHP streams as a template resource. The syntax
-is much the same a traditional template resource names.
-
-Smarty will first look for a registered template resource. If nothing is
-found, it will check if a PHP stream is available. If a stream is
-available, Smarty will use it to fetch the template.
-
-> **Note**
->
-> You can further define allowed streams with security enabled.
-
-Using a PHP stream for a template resource from the display() function.
-
-
- $smarty->display('foo:bar.tpl');
-
-
-
-Using a PHP stream for a template resource from within a template.
-
-
- {include file="foo:bar.tpl"}
-
-
diff --git a/bundled-libs/smarty/smarty/docs/programmers/resources/resources-string.md b/bundled-libs/smarty/smarty/docs/programmers/resources/resources-string.md
deleted file mode 100644
index d3f6d4155..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/resources/resources-string.md
+++ /dev/null
@@ -1,73 +0,0 @@
-String Template Resources {#resources.string}
-=========================
-
-Smarty can render templates from a string by using the `string:` or
-`eval:` resource.
-
-- The `string:` resource behaves much the same as a template file. The
- template source is compiled from a string and stores the compiled
- template code for later reuse. Each unique template string will
- create a new compiled template file. If your template strings are
- accessed frequently, this is a good choice. If you have frequently
- changing template strings (or strings with low reuse value), the
- `eval:` resource may be a better choice, as it doesn\'t save
- compiled templates to disk.
-
-- The `eval:` resource evaluates the template source every time a page
- is rendered. This is a good choice for strings with low reuse value.
- If the same string is accessed frequently, the `string:` resource
- may be a better choice.
-
-> **Note**
->
-> With a `string:` resource type, each unique string generates a
-> compiled file. Smarty cannot detect a string that has changed, and
-> therefore will generate a new compiled file for each unique string. It
-> is important to choose the correct resource so that you do not fill
-> your disk space with wasted compiled strings.
-
-
- assign('foo','value');
- $template_string = 'display {$foo} here';
- $smarty->display('string:'.$template_string); // compiles for later reuse
- $smarty->display('eval:'.$template_string); // compiles every time
- ?>
-
-
-
-From within a Smarty template
-
-
- {include file="string:$template_string"} {* compiles for later reuse *}
- {include file="eval:$template_string"} {* compiles every time *}
-
-
-
-
-Both `string:` and `eval:` resources may be encoded with
-[`urlencode()`](https://www.php.net/urlencode) or
-[`base64_encode()`](https://www.php.net/urlencode). This is not necessary
-for the usual use of `string:` and `eval:`, but is required when using
-either of them in conjunction with
-[`Extends Template Resource`](#resources.extends)
-
-
- assign('foo','value');
- $template_string_urlencode = urlencode('display {$foo} here');
- $template_string_base64 = base64_encode('display {$foo} here');
- $smarty->display('eval:urlencode:'.$template_string_urlencode); // will decode string using urldecode()
- $smarty->display('eval:base64:'.$template_string_base64); // will decode string using base64_decode()
- ?>
-
-
-
-From within a Smarty template
-
-
- {include file="string:urlencode:$template_string_urlencode"} {* will decode string using urldecode() *}
- {include file="eval:base64:$template_string_base64"} {* will decode string using base64_decode() *}
-
-
-
diff --git a/bundled-libs/smarty/smarty/docs/programmers/resources/template-resources.md b/bundled-libs/smarty/smarty/docs/programmers/resources/template-resources.md
deleted file mode 100644
index 7bb5d752e..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/resources/template-resources.md
+++ /dev/null
@@ -1,130 +0,0 @@
-Resources {#resasdources}
-=========
-
-The templates may come from a variety of sources. When you
-[`display()`](#api.display) or [`fetch()`](#api.fetch) a template, or
-when you include a template from within another template, you supply a
-resource type, followed by the appropriate path and template name. If a
-resource is not explicitly given, the value of
-[`$default_resource_type`](#variable.default.resource.type) is assumed.
-
-Templates from other sources {#templates.from.elsewhere}
-----------------------------
-
-You can retrieve templates using whatever possible source you can access
-with PHP: databases, sockets, files, etc. You do this by writing
-resource plugin functions and registering them with Smarty.
-
-See [resource plugins](#plugins.resources) section for more information
-on the functions you are supposed to provide.
-
-> **Note**
->
-> Note that you cannot override the built-in `file:` resource, but you
-> can provide a resource that fetches templates from the file system in
-> some other way by registering under another resource name.
-
-
- 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;
- *
- * Demo data:
- * INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');
- *
- * @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", "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);
- }
- }
-
-
- require_once 'libs/Smarty.class.php';
- $smarty = new Smarty();
- $smarty->registerResource('mysql', new Smarty_Resource_Mysql());
-
- // using resource from php script
- $smarty->display("mysql:index.tpl");
- ?>
-
-
-
-And from within Smarty template:
-
-
- {include file='mysql:extras/navigation.tpl'}
-
-
-
-Default template handler function {#default.template.handler.function}
----------------------------------
-
-You can specify a function that is used to retrieve template contents in
-the event the template cannot be retrieved from its resource. One use of
-this is to create templates that do not exist on-the-fly.
-
-See also [`Streams`](#advanced.features.streams)
diff --git a/bundled-libs/smarty/smarty/docs/programmers/smarty-constants.md b/bundled-libs/smarty/smarty/docs/programmers/smarty-constants.md
deleted file mode 100644
index de04e1b59..000000000
--- a/bundled-libs/smarty/smarty/docs/programmers/smarty-constants.md
+++ /dev/null
@@ -1,26 +0,0 @@
-Constants {#smarty.constants}
-=========
-
-SMARTY\_DIR {#constant.smarty.dir}
-===========
-
-This is the **full system path** to the location of the Smarty class
-files. If this is not defined in your script, then Smarty will attempt
-to determine the appropriate value automatically. If defined, the path
-**must end with a trailing slash/**.
-
-
-
-
-
-
-See also [`$smarty.const`](../designers/language-variables/language-variables-smarty.md).
diff --git a/bundled-libs/smarty/smarty/docs/upgrading.md b/bundled-libs/smarty/smarty/docs/upgrading.md
new file mode 100644
index 000000000..ef9cc4c99
--- /dev/null
+++ b/bundled-libs/smarty/smarty/docs/upgrading.md
@@ -0,0 +1,157 @@
+# Upgrading from an older version
+
+## Upgrading from v4 to v5
+
+Smarty 5 adds support for PHP8.2 and drops support for PHP7.1. Smarty also adds support for new features
+such as the ternary operator (`{$test ? $a : $b}` and `{$var ?: $value_if_falsy}`), the null coalescing operator (`{$var ?? $value_if_null}`)
+and positional parameters for custom tags.
+Smarty 5 also has a brand-new extension architecture that allows you to write neat extension packs.
+
+### Namespaces
+All Smarty code has been moved into the `\Smarty` namespace. This reduces
+the chance of conflicts with other (your) code.
+
+For simple use-cases, you only need to add `use Smarty\Smarty;` to your script and everything will work.
+
+```php
+display('homepage.tpl');
+```
+For more information, see [getting started](getting-started.md).
+
+If you extend Smarty or use Smarty plug-ins, please review your code to see if they assume specific class or method names.
+E.g.: `Smarty_Internal_Template` is now `\Smarty\Template\`, `SmartyException` is now `\Smarty\Exception`.
+
+### Variable scope bubbling
+Template variable scope bubbling has been simplified and made more consistent. The global scope now equals the Smarty
+scope in order to avoid global state side effects. Please read the [documentation on language variable scope](designers/language-variables/language-variable-scopes.md)
+for more details.
+
+Also, `{config_load}` no longer has a `scope` parameter, which means you can no longer load config
+from inside your template into the global scope (again, to avoid global state side effects). If you
+need to set global config, use the [configLoad API method](api/variables/config-files.md) from your PHP code.
+
+### Using native PHP-functions or userland functions in your templates
+You can no longer use native PHP-functions or userland functions in your templates without registering them.
+If you need a function in your templates, register it first.
+
+The easiest way to do so is as follows:
+```php
+// native PHP functions used as modifiers need to be registered
+$smarty->registerPlugin('modifier', 'substr', 'substr');
+
+// userland PHP functions used as modifiers need to be registered
+$smarty->registerPlugin('modifier', 'my_special_func', 'my_special_func');
+```
+
+But you may want to consider writing a proper [extension](api/extending/extensions.md).
+
+### Removed undocumented tags
+
+Smarty 4 still supported some tags that have been carried over from previous version, but have never been documented.
+
+- `{block_parent}` should be replaced with `{$smarty.block.parent}`
+- `{parent}` should be replaced with `{$smarty.block.parent}`
+- `{block_child}` should be replaced with `{$smarty.block.child}`
+- `{child}` should be replaced with `{$smarty.block.child}`
+
+- `{make_nocache}` is no longer supported
+- `{insert}` is no longer supported
+
+### Removed Smarty API properties
+
+In Smarty 4, you could make many configuration changes by directly accessing public properties on the Smarty object in PHP.
+In many cases, these properties have been made private, and you should now use the appropriate setter method:
+
+- `$smarty->left_delimiter` should be replaced with `$smarty->getLeftDelimiter()`/`$smarty->setLeftDelimiter()`
+- `$smarty->right_delimiter` should be replaced with `$smarty->getRightDelimiter()`/`$smarty->setRightDelimiter()`
+- `$smarty->autoload_filters` should be replaced with `$smarty->registerFilter()`
+- `$smarty->template_dir` should be replaced with `$smarty->setTemplateDir()`
+- `$smarty->cache_dir` should be replaced with `$smarty->setCacheDir()`
+- `$smarty->compile_dir` should be replaced with `$smarty->setCompileDir()`
+
+Other public properties have been removed altogether, and you should no longer access them:
+
+- `$smarty->_current_file`
+- `$smarty->allow_ambiguous_resources` (ambiguous resources handlers should still work)
+- `$smarty->registered_filters`
+- `$smarty->direct_access_security`
+- `$smarty->trusted_dir`
+- `$smarty->allow_php_templates`
+- `$smarty->php_functions`
+- `$smarty->php_modifiers`
+
+### Backwards incompatible changes to custom plugins
+
+We have dropped support for `$smarty->plugins_dir` and `$smarty->use_include_path`.
+Use `$smarty->addPluginsDir()` or consider writing a proper [extension](api/extending/extensions.md).
+
+The 'insert' plugin type is no longer supported.
+
+The `$cache_attrs` parameter for registered plugins is no longer supported.
+
+### Removed Smarty API methods
+
+Search your code for the following changes:
+
+- `$smarty->getTags()` is no longer supported
+- `$smarty->appendByRef()` should be replaced with `$smarty->append()`
+- `$smarty->assignByRef()` should be replaced with `$smarty->assign()`
+- `$smarty->loadPlugin()` should be replaced with `$smarty->registerPlugin()`
+
+### Removed PHP constants
+
+The following constants have been removed to prevent global side effects.
+
+- `SMARTY_DIR`
+- `SMARTY_SYSPLUGINS_DIR`
+- `SMARTY_PLUGINS_DIR`
+- `SMARTY_MBSTRING`
+- `SMARTY_HELPER_FUNCTIONS_LOADED`
+
+### Other changes
+
+- Smarty now always runs in multibyte mode. Make sure you use the [PHP multibyte extension](https://www.php.net/manual/en/book.mbstring.php) in production for optimal performance.
+- Generated `';
- } elseif ($encode === 'javascript_charcode') {
- for ($x = 0, $_length = strlen($string); $x < $_length; $x++) {
- $ord[] = ord($string[ $x ]);
- }
- return '';
- } elseif ($encode === 'hex') {
- preg_match('!^(.*)(\?.*)$!', $address, $match);
- if (!empty($match[ 2 ])) {
- trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.", E_USER_WARNING);
- 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 .= '' . bin2hex($text[ $x ]) . ';';
- }
- $mailto = "mailto:";
- return '' . $text_encode . ' ';
- } else {
- // no encoding
- return $string;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/plugins/function.math.php b/bundled-libs/smarty/smarty/libs/plugins/function.math.php
deleted file mode 100644
index 34912d239..000000000
--- a/bundled-libs/smarty/smarty/libs/plugins/function.math.php
+++ /dev/null
@@ -1,142 +0,0 @@
-
- *
- * @param array $params parameters
- * @param Smarty_Internal_Template $template template object
- *
- * @return string|null
- */
-function smarty_function_math($params, $template)
-{
- static $_allowed_funcs =
- array(
- 'int' => true,
- 'abs' => true,
- 'ceil' => true,
- 'acos' => true,
- 'acosh' => true,
- 'cos' => true,
- 'cosh' => true,
- 'deg2rad' => true,
- 'rad2deg' => true,
- 'exp' => true,
- 'floor' => true,
- 'log' => true,
- 'log10' => true,
- 'max' => true,
- 'min' => true,
- 'pi' => true,
- 'pow' => true,
- 'rand' => true,
- 'round' => true,
- 'asin' => true,
- 'asinh' => true,
- 'sin' => true,
- 'sinh' => true,
- 'sqrt' => true,
- 'srand' => true,
- 'atan' => true,
- 'atanh' => true,
- 'tan' => true,
- 'tanh' => true
- );
-
- // be sure equation parameter is present
- if (empty($params[ 'equation' ])) {
- trigger_error("math: missing equation parameter", E_USER_WARNING);
- return;
- }
- $equation = $params[ 'equation' ];
-
- // Remove whitespaces
- $equation = preg_replace('/\s+/', '', $equation);
-
- // Adapted from https://www.php.net/manual/en/function.eval.php#107377
- $number = '-?(?:\d+(?:[,.]\d+)?|pi|π)'; // What is a number
- $functionsOrVars = '((?:0x[a-fA-F0-9]+)|([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*))';
- $operators = '[,+\/*\^%-]'; // Allowed math operators
- $regexp = '/^(('.$number.'|'.$functionsOrVars.'|('.$functionsOrVars.'\s*\((?1)*\)|\((?1)*\)))(?:'.$operators.'(?1))?)+$/';
-
- if (!preg_match($regexp, $equation)) {
- trigger_error("math: illegal characters", E_USER_WARNING);
- return;
- }
-
- // make sure parenthesis are balanced
- if (substr_count($equation, '(') !== substr_count($equation, ')')) {
- trigger_error("math: unbalanced parenthesis", E_USER_WARNING);
- return;
- }
-
- // disallow backticks
- if (strpos($equation, '`') !== false) {
- trigger_error("math: backtick character not allowed in equation", E_USER_WARNING);
- return;
- }
-
- // also disallow dollar signs
- if (strpos($equation, '$') !== false) {
- trigger_error("math: dollar signs not allowed in equation", E_USER_WARNING);
- return;
- }
- foreach ($params as $key => $val) {
- if ($key !== 'equation' && $key !== 'format' && $key !== 'assign') {
- // make sure value is not empty
- if (strlen($val) === 0) {
- trigger_error("math: parameter '{$key}' is empty", E_USER_WARNING);
- return;
- }
- if (!is_numeric($val)) {
- trigger_error("math: parameter '{$key}' is not numeric", E_USER_WARNING);
- return;
- }
- }
- }
- // match all vars in equation, make sure all are passed
- preg_match_all('!(?:0x[a-fA-F0-9]+)|([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)!', $equation, $match);
- foreach ($match[ 1 ] as $curr_var) {
- if ($curr_var && !isset($params[ $curr_var ]) && !isset($_allowed_funcs[ $curr_var ])) {
- trigger_error(
- "math: function call '{$curr_var}' not allowed, or missing parameter '{$curr_var}'",
- E_USER_WARNING
- );
- return;
- }
- }
- foreach ($params as $key => $val) {
- if ($key !== 'equation' && $key !== 'format' && $key !== 'assign') {
- $equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation);
- }
- }
- $smarty_math_result = null;
- eval("\$smarty_math_result = " . $equation . ";");
-
- if (empty($params[ 'format' ])) {
- if (empty($params[ 'assign' ])) {
- return $smarty_math_result;
- } else {
- $template->assign($params[ 'assign' ], $smarty_math_result);
- }
- } else {
- if (empty($params[ 'assign' ])) {
- printf($params[ 'format' ], $smarty_math_result);
- } else {
- $template->assign($params[ 'assign' ], sprintf($params[ 'format' ], $smarty_math_result));
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/plugins/modifier.capitalize.php b/bundled-libs/smarty/smarty/libs/plugins/modifier.capitalize.php
deleted file mode 100644
index 2903d61d7..000000000
--- a/bundled-libs/smarty/smarty/libs/plugins/modifier.capitalize.php
+++ /dev/null
@@ -1,147 +0,0 @@
-
- * @author Rodney Rehm
- */
-function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = false)
-{
- $string = (string) $string;
-
- if (Smarty::$_MBSTRING) {
- if ($lc_rest) {
- // uppercase (including hyphenated words)
- $upper_string = mb_convert_case($string, MB_CASE_TITLE, Smarty::$_CHARSET);
- } else {
- // uppercase word breaks
- $upper_string = preg_replace_callback(
- "!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER,
- 'smarty_mod_cap_mbconvert_cb',
- $string
- );
- }
- // check uc_digits case
- if (!$uc_digits) {
- if (preg_match_all(
- "!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER,
- $string,
- $matches,
- PREG_OFFSET_CAPTURE
- )
- ) {
- foreach ($matches[ 1 ] as $match) {
- $upper_string =
- substr_replace(
- $upper_string,
- mb_strtolower($match[ 0 ], Smarty::$_CHARSET),
- $match[ 1 ],
- strlen($match[ 0 ])
- );
- }
- }
- }
- $upper_string =
- preg_replace_callback(
- "!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER,
- 'smarty_mod_cap_mbconvert2_cb',
- $upper_string
- );
- return $upper_string;
- }
- // lowercase first
- if ($lc_rest) {
- $string = strtolower($string);
- }
- // uppercase (including hyphenated words)
- $upper_string =
- preg_replace_callback(
- "!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER,
- 'smarty_mod_cap_ucfirst_cb',
- $string
- );
- // check uc_digits case
- if (!$uc_digits) {
- if (preg_match_all(
- "!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER,
- $string,
- $matches,
- PREG_OFFSET_CAPTURE
- )
- ) {
- foreach ($matches[ 1 ] as $match) {
- $upper_string =
- substr_replace($upper_string, strtolower($match[ 0 ]), $match[ 1 ], strlen($match[ 0 ]));
- }
- }
- }
- $upper_string = preg_replace_callback(
- "!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER,
- 'smarty_mod_cap_ucfirst2_cb',
- $upper_string
- );
- return $upper_string;
-}
-
-/**
- *
- * Bug: create_function() use exhausts memory when used in long loops
- * Fix: use declared functions for callbacks instead of using create_function()
- * Note: This can be fixed using anonymous functions instead, but that requires PHP >= 5.3
- *
- * @author Kyle Renfrow
- */
-/**
- * @param $matches
- *
- * @return string
- */
-function smarty_mod_cap_mbconvert_cb($matches)
-{
- return stripslashes($matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 2 ]), MB_CASE_UPPER, Smarty::$_CHARSET);
-}
-
-/**
- * @param $matches
- *
- * @return string
- */
-function smarty_mod_cap_mbconvert2_cb($matches)
-{
- return stripslashes($matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 3 ]), MB_CASE_UPPER, Smarty::$_CHARSET);
-}
-
-/**
- * @param $matches
- *
- * @return string
- */
-function smarty_mod_cap_ucfirst_cb($matches)
-{
- return stripslashes($matches[ 1 ]) . ucfirst(stripslashes($matches[ 2 ]));
-}
-
-/**
- * @param $matches
- *
- * @return string
- */
-function smarty_mod_cap_ucfirst2_cb($matches)
-{
- return stripslashes($matches[ 1 ]) . ucfirst(stripslashes($matches[ 3 ]));
-}
diff --git a/bundled-libs/smarty/smarty/libs/plugins/modifier.count.php b/bundled-libs/smarty/smarty/libs/plugins/modifier.count.php
deleted file mode 100644
index ca35fc115..000000000
--- a/bundled-libs/smarty/smarty/libs/plugins/modifier.count.php
+++ /dev/null
@@ -1,36 +0,0 @@
- Prior to PHP 8.0.0, if the parameter was neither an array nor an object that implements the Countable interface,
- * > 1 would be returned, unless value was null, in which case 0 would be returned.
- */
-
- if ($arrayOrObject instanceof Countable || is_array($arrayOrObject)) {
- return count($arrayOrObject, (int) $mode);
- } elseif ($arrayOrObject === null) {
- return 0;
- }
- return 1;
-}
diff --git a/bundled-libs/smarty/smarty/libs/plugins/modifier.date_format.php b/bundled-libs/smarty/smarty/libs/plugins/modifier.date_format.php
deleted file mode 100644
index e3589fd07..000000000
--- a/bundled-libs/smarty/smarty/libs/plugins/modifier.date_format.php
+++ /dev/null
@@ -1,86 +0,0 @@
-
- *
- * @param string $string input date string
- * @param string $format strftime format for output
- * @param string $default_date default date if $string is empty
- * @param string $formatter either 'strftime' or 'auto'
- *
- * @return string |void
- * @uses smarty_make_timestamp()
- */
-function smarty_modifier_date_format($string, $format = null, $default_date = '', $formatter = 'auto')
-{
- if ($format === null) {
- $format = Smarty::$_DATE_FORMAT;
- }
- /**
- * require_once the {@link shared.make_timestamp.php} plugin
- */
- static $is_loaded = false;
- if (!$is_loaded) {
- if (!is_callable('smarty_make_timestamp')) {
- include_once SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php';
- }
- $is_loaded = true;
- }
- if (!empty($string) && $string !== '0000-00-00' && $string !== '0000-00-00 00:00:00') {
- $timestamp = smarty_make_timestamp($string);
- } elseif (!empty($default_date)) {
- $timestamp = smarty_make_timestamp($default_date);
- } else {
- return;
- }
- if ($formatter === 'strftime' || ($formatter === 'auto' && strpos($format, '%') !== false)) {
- if (Smarty::$_IS_WINDOWS) {
- $_win_from = array(
- '%D',
- '%h',
- '%n',
- '%r',
- '%R',
- '%t',
- '%T'
- );
- $_win_to = array(
- '%m/%d/%y',
- '%b',
- "\n",
- '%I:%M:%S %p',
- '%H:%M',
- "\t",
- '%H:%M:%S'
- );
- if (strpos($format, '%e') !== false) {
- $_win_from[] = '%e';
- $_win_to[] = sprintf('%\' 2d', date('j', $timestamp));
- }
- if (strpos($format, '%l') !== false) {
- $_win_from[] = '%l';
- $_win_to[] = sprintf('%\' 2d', date('h', $timestamp));
- }
- $format = str_replace($_win_from, $_win_to, $format);
- }
- // @ to suppress deprecation errors when running in PHP8.1 or higher.
- return @strftime($format, $timestamp);
- } else {
- return date($format, $timestamp);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/plugins/modifier.debug_print_var.php b/bundled-libs/smarty/smarty/libs/plugins/modifier.debug_print_var.php
deleted file mode 100644
index 78397d017..000000000
--- a/bundled-libs/smarty/smarty/libs/plugins/modifier.debug_print_var.php
+++ /dev/null
@@ -1,103 +0,0 @@
-
- *
- * @param array|object $var variable to be formatted
- * @param int $max maximum recursion depth if $var is an array or object
- * @param int $length maximum string length if $var is a string
- * @param int $depth actual recursion depth
- * @param array $objects processed objects in actual depth to prevent recursive object processing
- *
- * @return string
- */
-function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, $depth = 0, $objects = array())
-{
- $_replace = array("\n" => '\n', "\r" => '\r', "\t" => '\t');
- switch (gettype($var)) {
- case 'array':
- $results = 'Array (' . count($var) . ') ';
- if ($depth === $max) {
- break;
- }
- foreach ($var as $curr_key => $curr_val) {
- $results .= ' ' . str_repeat(' ', $depth * 2) . '' . strtr($curr_key, $_replace) .
- ' => ' .
- smarty_modifier_debug_print_var($curr_val, $max, $length, ++$depth, $objects);
- $depth--;
- }
- break;
- case 'object':
- $object_vars = get_object_vars($var);
- $results = '' . get_class($var) . ' Object (' . count($object_vars) . ') ';
- if (in_array($var, $objects)) {
- $results .= ' called recursive';
- break;
- }
- if ($depth === $max) {
- break;
- }
- $objects[] = $var;
- foreach ($object_vars as $curr_key => $curr_val) {
- $results .= ' ' . str_repeat(' ', $depth * 2) . ' ->' . strtr($curr_key, $_replace) .
- ' = ' . smarty_modifier_debug_print_var($curr_val, $max, $length, ++$depth, $objects);
- $depth--;
- }
- break;
- case 'boolean':
- case 'NULL':
- case 'resource':
- if (true === $var) {
- $results = 'true';
- } elseif (false === $var) {
- $results = 'false';
- } elseif (null === $var) {
- $results = 'null';
- } else {
- $results = htmlspecialchars((string)$var);
- }
- $results = '' . $results . ' ';
- break;
- case 'integer':
- case 'float':
- $results = htmlspecialchars((string)$var);
- break;
- case 'string':
- $results = strtr($var, $_replace);
- if (Smarty::$_MBSTRING) {
- if (mb_strlen($var, Smarty::$_CHARSET) > $length) {
- $results = mb_substr($var, 0, $length - 3, Smarty::$_CHARSET) . '...';
- }
- } else {
- if (isset($var[ $length ])) {
- $results = substr($var, 0, $length - 3) . '...';
- }
- }
- $results = htmlspecialchars('"' . $results . '"', ENT_QUOTES, Smarty::$_CHARSET);
- break;
- case 'unknown type':
- default:
- $results = strtr((string)$var, $_replace);
- if (Smarty::$_MBSTRING) {
- if (mb_strlen($results, Smarty::$_CHARSET) > $length) {
- $results = mb_substr($results, 0, $length - 3, Smarty::$_CHARSET) . '...';
- }
- } else {
- if (strlen($results) > $length) {
- $results = substr($results, 0, $length - 3) . '...';
- }
- }
- $results = htmlspecialchars($results, ENT_QUOTES, Smarty::$_CHARSET);
- }
- return $results;
-}
diff --git a/bundled-libs/smarty/smarty/libs/plugins/modifier.escape.php b/bundled-libs/smarty/smarty/libs/plugins/modifier.escape.php
deleted file mode 100644
index e168679c3..000000000
--- a/bundled-libs/smarty/smarty/libs/plugins/modifier.escape.php
+++ /dev/null
@@ -1,189 +0,0 @@
-
- *
- * @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 $is_loaded_1 = false;
- static $is_loaded_2 = false;
- if (!$char_set) {
- $char_set = Smarty::$_CHARSET;
- }
-
- $string = (string)$string;
-
- switch ($esc_type) {
- case 'html':
- return htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode);
- // no break
- case 'htmlall':
- if (Smarty::$_MBSTRING) {
- $string = mb_convert_encoding($string, 'UTF-8', $char_set);
- return htmlentities($string, ENT_QUOTES, 'UTF-8', $double_encode);
- }
- // no MBString fallback
- return htmlentities($string, ENT_QUOTES, $char_set, $double_encode);
- // no break
- case 'url':
- return rawurlencode($string);
- case 'urlpathinfo':
- return str_replace('%2F', '/', rawurlencode($string));
- case 'quotes':
- // escape unescaped single quotes
- return preg_replace("%(? '\\\\',
- "'" => "\\'",
- '"' => '\\"',
- "\r" => '\\r',
- "\n" => '\\n',
- '' => '<\/',
- // see https://html.spec.whatwg.org/multipage/scripting.html#restrictions-for-contents-of-script-elements
- '#is',
- $source,
- $matches,
- PREG_OFFSET_CAPTURE | PREG_SET_ORDER
- )
- ) {
- foreach ($matches as $match) {
- $store[] = $match[ 0 ][ 0 ];
- $_length = strlen($match[ 0 ][ 0 ]);
- $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
- $source = substr_replace($source, $replace, $match[ 0 ][ 1 ] - $_offset, $_length);
- $_offset += $_length - strlen($replace);
- $_store++;
- }
- }
- // Strip all HTML-Comments
- // yes, even the ones in ]*>)|(]*>)|(]*>.*? ]*>)#is',
- $source,
- $matches,
- PREG_OFFSET_CAPTURE | PREG_SET_ORDER
- )
- ) {
- foreach ($matches as $match) {
- $store[] = $match[ 0 ][ 0 ];
- $_length = strlen($match[ 0 ][ 0 ]);
- $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
- $source = substr_replace($source, $replace, $match[ 0 ][ 1 ] - $_offset, $_length);
- $_offset += $_length - strlen($replace);
- $_store++;
- }
- }
- $expressions = array(// replace multiple spaces between tags by a single space
- // can't remove them entirely, because that might break poorly implemented CSS display:inline-block elements
- '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',
- // remove spaces between attributes (but not in attribute values!)
- '#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5',
- // note: for some very weird reason trim() seems to remove spaces inside attributes.
- // maybe a \0 byte or something is interfering?
- '#^\s+<#Ss' => '<',
- '#>\s+$#Ss' => '>',
- );
- $source = preg_replace(array_keys($expressions), array_values($expressions), $source);
- // note: for some very weird reason trim() seems to remove spaces inside attributes.
- // maybe a \0 byte or something is interfering?
- // $source = trim( $source );
- $_offset = 0;
- if (preg_match_all('#@!@SMARTY:([0-9]+):SMARTY@!@#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
- foreach ($matches as $match) {
- $_length = strlen($match[ 0 ][ 0 ]);
- $replace = $store[ $match[ 1 ][ 0 ] ];
- $source = substr_replace($source, $replace, $match[ 0 ][ 1 ] + $_offset, $_length);
- $_offset += strlen($replace) - $_length;
- $_store++;
- }
- }
- return $source;
-}
diff --git a/bundled-libs/smarty/smarty/libs/plugins/shared.escape_special_chars.php b/bundled-libs/smarty/smarty/libs/plugins/shared.escape_special_chars.php
deleted file mode 100644
index 355b02b57..000000000
--- a/bundled-libs/smarty/smarty/libs/plugins/shared.escape_special_chars.php
+++ /dev/null
@@ -1,26 +0,0 @@
-
- *
- * @param string $string text that should by escaped
- *
- * @return string
- */
-function smarty_function_escape_special_chars($string)
-{
- if (!is_array($string)) {
- $string = htmlspecialchars((string) $string, ENT_COMPAT, Smarty::$_CHARSET, false);
- }
- return $string;
-}
diff --git a/bundled-libs/smarty/smarty/libs/plugins/shared.literal_compiler_param.php b/bundled-libs/smarty/smarty/libs/plugins/shared.literal_compiler_param.php
deleted file mode 100644
index 65caf03c8..000000000
--- a/bundled-libs/smarty/smarty/libs/plugins/shared.literal_compiler_param.php
+++ /dev/null
@@ -1,35 +0,0 @@
-
- *
- * @param DateTime|int|string $string date object, timestamp or string that can be converted using strtotime()
- *
- * @return int
- */
-function smarty_make_timestamp($string)
-{
- if (empty($string)) {
- // use "now":
- return time();
- } elseif ($string instanceof DateTime
- || (interface_exists('DateTimeInterface', false) && $string instanceof DateTimeInterface)
- ) {
- return (int)$string->format('U'); // PHP 5.2 BC
- } elseif (strlen($string) === 14 && ctype_digit($string)) {
- // it is mysql timestamp format of YYYYMMDDHHMMSS?
- return mktime(
- substr($string, 8, 2),
- substr($string, 10, 2),
- substr($string, 12, 2),
- substr($string, 4, 2),
- substr($string, 6, 2),
- substr($string, 0, 4)
- );
- } elseif (is_numeric($string)) {
- // it is a numeric string, we handle it as timestamp
- return (int)$string;
- } else {
- // strtotime should handle it
- $time = strtotime($string);
- if ($time === -1 || $time === false) {
- // strtotime() was not able to parse $string, use "now":
- return time();
- }
- return $time;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/plugins/shared.mb_str_replace.php b/bundled-libs/smarty/smarty/libs/plugins/shared.mb_str_replace.php
deleted file mode 100644
index 7e85f7aae..000000000
--- a/bundled-libs/smarty/smarty/libs/plugins/shared.mb_str_replace.php
+++ /dev/null
@@ -1,87 +0,0 @@
- 'smarty_internal_cacheresource_file.php',);
-
- /**
- * populate Cached Object with meta data from Resource
- *
- * @param \Smarty_Template_Cached $cached cached object
- * @param Smarty_Internal_Template $_template template object
- *
- * @return void
- */
- abstract public function populate(\Smarty_Template_Cached $cached, Smarty_Internal_Template $_template);
-
- /**
- * populate Cached Object with timestamp and exists from Resource
- *
- * @param Smarty_Template_Cached $cached
- *
- * @return void
- */
- abstract public function populateTimestamp(Smarty_Template_Cached $cached);
-
- /**
- * Read the cached template and process header
- *
- * @param Smarty_Internal_Template $_template template object
- * @param Smarty_Template_Cached $cached cached object
- * @param boolean $update flag if called because cache update
- *
- * @return boolean true or false if the cached content does not exist
- */
- abstract public function process(
- Smarty_Internal_Template $_template,
- Smarty_Template_Cached $cached = null,
- $update = false
- );
-
- /**
- * Write the rendered template output to cache
- *
- * @param Smarty_Internal_Template $_template template object
- * @param string $content content to cache
- *
- * @return boolean success
- */
- abstract public function writeCachedContent(Smarty_Internal_Template $_template, $content);
-
- /**
- * Read cached template from cache
- *
- * @param Smarty_Internal_Template $_template template object
- *
- * @return string content
- */
- abstract public function readCachedContent(Smarty_Internal_Template $_template);
-
- /**
- * Return cached content
- *
- * @param Smarty_Internal_Template $_template template object
- *
- * @return null|string
- */
- public function getCachedContent(Smarty_Internal_Template $_template)
- {
- if ($_template->cached->handler->process($_template)) {
- ob_start();
- $unifunc = $_template->cached->unifunc;
- $unifunc($_template);
- return ob_get_clean();
- }
- return null;
- }
-
- /**
- * Empty cache
- *
- * @param Smarty $smarty Smarty object
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
- *
- * @return integer number of cache files deleted
- */
- abstract public function clearAll(Smarty $smarty, $exp_time = null);
-
- /**
- * Empty cache for a specific template
- *
- * @param Smarty $smarty Smarty object
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
- *
- * @return integer number of cache files deleted
- */
- abstract public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time);
-
- /**
- * @param Smarty $smarty
- * @param Smarty_Template_Cached $cached
- *
- * @return bool|null
- */
- public function locked(Smarty $smarty, Smarty_Template_Cached $cached)
- {
- // theoretically locking_timeout should be checked against time_limit (max_execution_time)
- $start = microtime(true);
- $hadLock = null;
- while ($this->hasLock($smarty, $cached)) {
- $hadLock = true;
- if (microtime(true) - $start > $smarty->locking_timeout) {
- // abort waiting for lock release
- return false;
- }
- sleep(1);
- }
- return $hadLock;
- }
-
- /**
- * Check is cache is locked for this template
- *
- * @param Smarty $smarty
- * @param Smarty_Template_Cached $cached
- *
- * @return bool
- */
- public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
- {
- // check if lock exists
- return false;
- }
-
- /**
- * Lock cache for this template
- *
- * @param Smarty $smarty
- * @param Smarty_Template_Cached $cached
- *
- * @return bool
- */
- public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
- {
- // create lock
- return true;
- }
-
- /**
- * Unlock cache for this template
- *
- * @param Smarty $smarty
- * @param Smarty_Template_Cached $cached
- *
- * @return bool
- */
- public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
- {
- // release lock
- return true;
- }
-
- /**
- * Load Cache Resource Handler
- *
- * @param Smarty $smarty Smarty object
- * @param string $type name of the cache resource
- *
- * @throws SmartyException
- * @return Smarty_CacheResource Cache Resource Handler
- */
- public static function load(Smarty $smarty, $type = null)
- {
- if (!isset($type)) {
- $type = $smarty->caching_type;
- }
- // try smarty's cache
- if (isset($smarty->_cache[ 'cacheresource_handlers' ][ $type ])) {
- return $smarty->_cache[ 'cacheresource_handlers' ][ $type ];
- }
- // try registered resource
- if (isset($smarty->registered_cache_resources[ $type ])) {
- // do not cache these instances as they may vary from instance to instance
- return $smarty->_cache[ 'cacheresource_handlers' ][ $type ] = $smarty->registered_cache_resources[ $type ];
- }
- // try sysplugins dir
- if (isset(self::$sysplugins[ $type ])) {
- $cache_resource_class = 'Smarty_Internal_CacheResource_' . smarty_ucfirst_ascii($type);
- return $smarty->_cache[ 'cacheresource_handlers' ][ $type ] = new $cache_resource_class();
- }
- // try plugins dir
- $cache_resource_class = 'Smarty_CacheResource_' . smarty_ucfirst_ascii($type);
- if ($smarty->loadPlugin($cache_resource_class)) {
- return $smarty->_cache[ 'cacheresource_handlers' ][ $type ] = new $cache_resource_class();
- }
- // give up
- throw new SmartyException("Unable to load cache resource '{$type}'");
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_data.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_data.php
deleted file mode 100644
index 2545ed3a8..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_data.php
+++ /dev/null
@@ -1,68 +0,0 @@
-dataObjectName = 'Data_object ' . (isset($name) ? "'{$name}'" : self::$count);
- $this->smarty = $smarty;
- if (is_object($_parent)) {
- // when object set up back pointer
- $this->parent = $_parent;
- } elseif (is_array($_parent)) {
- // set up variable values
- foreach ($_parent as $_key => $_val) {
- $this->tpl_vars[ $_key ] = new Smarty_Variable($_val);
- }
- } elseif ($_parent !== null) {
- throw new SmartyException('Wrong type for template variables');
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php
deleted file mode 100644
index c77ae9e17..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php
+++ /dev/null
@@ -1,235 +0,0 @@
-source;
- $smarty = &$_template->smarty;
- $_compile_dir_sep = $smarty->use_sub_dirs ? DIRECTORY_SEPARATOR : '^';
- $_filepath = sha1($source->uid . $smarty->_joined_template_dir);
- $cached->filepath = $smarty->getCacheDir();
- if (isset($_template->cache_id)) {
- $cached->filepath .= preg_replace(
- array(
- '![^\w|]+!',
- '![|]+!'
- ),
- array(
- '_',
- $_compile_dir_sep
- ),
- $_template->cache_id
- ) . $_compile_dir_sep;
- }
- if (isset($_template->compile_id)) {
- $cached->filepath .= preg_replace('![^\w]+!', '_', $_template->compile_id) . $_compile_dir_sep;
- }
- // if use_sub_dirs, break file into directories
- if ($smarty->use_sub_dirs) {
- $cached->filepath .= $_filepath[ 0 ] . $_filepath[ 1 ] . DIRECTORY_SEPARATOR . $_filepath[ 2 ] .
- $_filepath[ 3 ] .
- DIRECTORY_SEPARATOR .
- $_filepath[ 4 ] . $_filepath[ 5 ] . DIRECTORY_SEPARATOR;
- }
- $cached->filepath .= $_filepath;
- $basename = $source->handler->getBasename($source);
- if (!empty($basename)) {
- $cached->filepath .= '.' . $basename;
- }
- if ($smarty->cache_locking) {
- $cached->lock_id = $cached->filepath . '.lock';
- }
- $cached->filepath .= '.php';
- $cached->timestamp = $cached->exists = is_file($cached->filepath);
- if ($cached->exists) {
- $cached->timestamp = filemtime($cached->filepath);
- }
- }
-
- /**
- * populate Cached Object with timestamp and exists from Resource
- *
- * @param Smarty_Template_Cached $cached cached object
- *
- * @return void
- */
- public function populateTimestamp(Smarty_Template_Cached $cached)
- {
- $cached->timestamp = $cached->exists = is_file($cached->filepath);
- if ($cached->exists) {
- $cached->timestamp = filemtime($cached->filepath);
- }
- }
-
- /**
- * Read the cached template and process its header
- *
- * @param \Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
- * @param Smarty_Template_Cached $cached cached object
- * @param bool $update flag if called because cache update
- *
- * @return boolean true or false if the cached content does not exist
- */
- public function process(
- Smarty_Internal_Template $_smarty_tpl,
- Smarty_Template_Cached $cached = null,
- $update = false
- ) {
- $_smarty_tpl->cached->valid = false;
- if ($update && defined('HHVM_VERSION')) {
- eval('?>' . file_get_contents($_smarty_tpl->cached->filepath));
- return true;
- } else {
- return @include $_smarty_tpl->cached->filepath;
- }
- }
-
- /**
- * Write the rendered template output to cache
- *
- * @param Smarty_Internal_Template $_template template object
- * @param string $content content to cache
- *
- * @return bool success
- * @throws \SmartyException
- */
- public function writeCachedContent(Smarty_Internal_Template $_template, $content)
- {
- if ($_template->smarty->ext->_writeFile->writeFile(
- $_template->cached->filepath,
- $content,
- $_template->smarty
- ) === true
- ) {
- if (function_exists('opcache_invalidate')
- && (!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api'))) < 1
- ) {
- opcache_invalidate($_template->cached->filepath, true);
- } elseif (function_exists('apc_compile_file')) {
- apc_compile_file($_template->cached->filepath);
- }
- $cached = $_template->cached;
- $cached->timestamp = $cached->exists = is_file($cached->filepath);
- if ($cached->exists) {
- $cached->timestamp = filemtime($cached->filepath);
- return true;
- }
- }
- return false;
- }
-
- /**
- * Read cached template from cache
- *
- * @param Smarty_Internal_Template $_template template object
- *
- * @return string content
- */
- public function readCachedContent(Smarty_Internal_Template $_template)
- {
- if (is_file($_template->cached->filepath)) {
- return file_get_contents($_template->cached->filepath);
- }
- return false;
- }
-
- /**
- * Empty cache
- *
- * @param Smarty $smarty
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
- *
- * @return integer number of cache files deleted
- */
- public function clearAll(Smarty $smarty, $exp_time = null)
- {
- return $smarty->ext->_cacheResourceFile->clear($smarty, null, null, null, $exp_time);
- }
-
- /**
- * Empty cache for a specific template
- *
- * @param Smarty $smarty
- * @param string $resource_name template name
- * @param string $cache_id cache id
- * @param string $compile_id compile id
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
- *
- * @return integer number of cache files deleted
- */
- public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
- {
- return $smarty->ext->_cacheResourceFile->clear($smarty, $resource_name, $cache_id, $compile_id, $exp_time);
- }
-
- /**
- * Check is cache is locked for this template
- *
- * @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
- *
- * @return boolean true or false if cache is locked
- */
- public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
- {
- clearstatcache(true, $cached->lock_id ?? '');
- if (null !== $cached->lock_id && is_file($cached->lock_id)) {
- $t = filemtime($cached->lock_id);
- return $t && (time() - $t < $smarty->locking_timeout);
- } else {
- return false;
- }
- }
-
- /**
- * Lock cache for this template
- *
- * @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
- *
- * @return bool|void
- */
- public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
- {
- $cached->is_locked = true;
- touch($cached->lock_id);
- }
-
- /**
- * Unlock cache for this template
- *
- * @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
- *
- * @return bool|void
- */
- public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
- {
- $cached->is_locked = false;
- @unlink($cached->lock_id);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_assign.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_assign.php
deleted file mode 100644
index 1f0ab9b7d..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_assign.php
+++ /dev/null
@@ -1,96 +0,0 @@
- Smarty::SCOPE_LOCAL, 'parent' => Smarty::SCOPE_PARENT,
- 'root' => Smarty::SCOPE_ROOT, 'global' => Smarty::SCOPE_GLOBAL,
- 'tpl_root' => Smarty::SCOPE_TPL_ROOT, 'smarty' => Smarty::SCOPE_SMARTY
- );
-
- /**
- * Compiles code for the {assign} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- * @param array $parameter array with compilation parameter
- *
- * @return string compiled code
- * @throws \SmartyCompilerException
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
- {
- // the following must be assigned at runtime because it will be overwritten in Smarty_Internal_Compile_Append
- $this->required_attributes = array('var', 'value');
- $this->shorttag_order = array('var', 'value');
- $this->optional_attributes = array('scope');
- $this->mapCache = array();
- $_nocache = false;
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- // nocache ?
- if ($_var = $compiler->getId($_attr[ 'var' ])) {
- $_var = "'{$_var}'";
- } else {
- $_var = $_attr[ 'var' ];
- }
- if ($compiler->tag_nocache || $compiler->nocache) {
- $_nocache = true;
- // create nocache var to make it know for further compiling
- $compiler->setNocacheInVariable($_attr[ 'var' ]);
- }
- // scope setup
- if ($_attr[ 'noscope' ]) {
- $_scope = -1;
- } else {
- $_scope = $compiler->convertScope($_attr, $this->valid_scopes);
- }
- // optional parameter
- $_params = '';
- if ($_nocache || $_scope) {
- $_params .= ' ,' . var_export($_nocache, true);
- }
- if ($_scope) {
- $_params .= ' ,' . $_scope;
- }
- if (isset($parameter[ 'smarty_internal_index' ])) {
- $output =
- "tpl_vars[{$_var}]) ? \$_smarty_tpl->tpl_vars[{$_var}]->value : array();\n";
- $output .= "if (!(is_array(\$_tmp_array) || \$_tmp_array instanceof ArrayAccess)) {\n";
- $output .= "settype(\$_tmp_array, 'array');\n";
- $output .= "}\n";
- $output .= "\$_tmp_array{$parameter['smarty_internal_index']} = {$_attr['value']};\n";
- $output .= "\$_smarty_tpl->_assignInScope({$_var}, \$_tmp_array{$_params});?>";
- } else {
- $output = "_assignInScope({$_var}, {$_attr['value']}{$_params});?>";
- }
- return $output;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php
deleted file mode 100644
index cbaccd2b3..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_block.php
+++ /dev/null
@@ -1,189 +0,0 @@
-
- */
-class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inheritance
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $required_attributes = array('name');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $shorttag_order = array('name');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $option_flags = array('hide', 'nocache');
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('assign');
-
- /**
- * Compiles code for the {block} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- * @param array $parameter array with compilation parameter
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
- {
- if (!isset($compiler->_cache[ 'blockNesting' ])) {
- $compiler->_cache[ 'blockNesting' ] = 0;
- }
- if ($compiler->_cache[ 'blockNesting' ] === 0) {
- // make sure that inheritance gets initialized in template code
- $this->registerInit($compiler);
- $this->option_flags = array('hide', 'nocache', 'append', 'prepend');
- } else {
- $this->option_flags = array('hide', 'nocache');
- }
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- ++$compiler->_cache[ 'blockNesting' ];
- $_className = 'Block_' . preg_replace('![^\w]+!', '_', uniqid(mt_rand(), true));
- $compiler->_cache[ 'blockName' ][ $compiler->_cache[ 'blockNesting' ] ] = $_attr[ 'name' ];
- $compiler->_cache[ 'blockClass' ][ $compiler->_cache[ 'blockNesting' ] ] = $_className;
- $compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ] = array();
- $compiler->_cache[ 'blockParams' ][ 1 ][ 'subBlocks' ][ trim($_attr[ 'name' ], '"\'') ][] = $_className;
- $this->openTag(
- $compiler,
- 'block',
- array(
- $_attr, $compiler->nocache, $compiler->parser->current_buffer,
- $compiler->template->compiled->has_nocache_code,
- $compiler->template->caching
- )
- );
- $compiler->saveRequiredPlugins(true);
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
- $compiler->template->compiled->has_nocache_code = false;
- $compiler->suppressNocacheProcessing = true;
- }
-}
-
-/**
- * Smarty Internal Plugin Compile BlockClose Class
- */
-class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_Compile_Shared_Inheritance
-{
- /**
- * Compiles code for the {/block} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- * @param array $parameter array with compilation parameter
- *
- * @return bool true
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
- {
- list($_attr, $_nocache, $_buffer, $_has_nocache_code, $_caching) = $this->closeTag($compiler, array('block'));
- // init block parameter
- $_block = $compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ];
- unset($compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ]);
- $_name = $_attr[ 'name' ];
- $_assign = isset($_attr[ 'assign' ]) ? $_attr[ 'assign' ] : null;
- unset($_attr[ 'assign' ], $_attr[ 'name' ]);
- foreach ($_attr as $name => $stat) {
- if ((is_bool($stat) && $stat !== false) || (!is_bool($stat) && $stat !== 'false')) {
- $_block[ $name ] = 'true';
- }
- }
- $_className = $compiler->_cache[ 'blockClass' ][ $compiler->_cache[ 'blockNesting' ] ];
- // get compiled block code
- $_functionCode = $compiler->parser->current_buffer;
- // setup buffer for template function code
- $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
- $output = "cStyleComment(" {block {$_name}} ") . "\n";
- $output .= "class {$_className} extends Smarty_Internal_Block\n";
- $output .= "{\n";
- foreach ($_block as $property => $value) {
- $output .= "public \${$property} = " . var_export($value, true) . ";\n";
- }
- $output .= "public function callBlock(Smarty_Internal_Template \$_smarty_tpl) {\n";
- $output .= $compiler->compileRequiredPlugins();
- $compiler->restoreRequiredPlugins();
- if ($compiler->template->compiled->has_nocache_code) {
- $output .= "\$_smarty_tpl->cached->hashes['{$compiler->template->compiled->nocache_hash}'] = true;\n";
- }
- if (isset($_assign)) {
- $output .= "ob_start();\n";
- }
- $output .= "?>\n";
- $compiler->parser->current_buffer->append_subtree(
- $compiler->parser,
- new Smarty_Internal_ParseTree_Tag(
- $compiler->parser,
- $output
- )
- );
- $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode);
- $output = "assign({$_assign}, ob_get_clean());\n";
- }
- $output .= "}\n";
- $output .= "}\n";
- $output .= $compiler->cStyleComment(" {/block {$_name}} ") . "\n\n";
- $output .= "?>\n";
- $compiler->parser->current_buffer->append_subtree(
- $compiler->parser,
- new Smarty_Internal_ParseTree_Tag(
- $compiler->parser,
- $output
- )
- );
- $compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser);
- $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
- // restore old status
- $compiler->template->compiled->has_nocache_code = $_has_nocache_code;
- $compiler->tag_nocache = $compiler->nocache;
- $compiler->nocache = $_nocache;
- $compiler->parser->current_buffer = $_buffer;
- $output = "_cache[ 'blockNesting' ] === 1) {
- $output .= "\$_smarty_tpl->inheritance->instanceBlock(\$_smarty_tpl, '$_className', $_name);\n";
- } else {
- $output .= "\$_smarty_tpl->inheritance->instanceBlock(\$_smarty_tpl, '$_className', $_name, \$this->tplIndex);\n";
- }
- $output .= "?>\n";
- --$compiler->_cache[ 'blockNesting' ];
- if ($compiler->_cache[ 'blockNesting' ] === 0) {
- unset($compiler->_cache[ 'blockNesting' ]);
- }
- $compiler->has_code = true;
- $compiler->suppressNocacheProcessing = true;
- return $output;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_child.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_child.php
deleted file mode 100644
index 588d18628..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_child.php
+++ /dev/null
@@ -1,24 +0,0 @@
-
- */
-class Smarty_Internal_Compile_Block_Child extends Smarty_Internal_Compile_Child
-{
- /**
- * Tag name
- *
- * @var string
- */
- public $tag = 'block_child';
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_parent.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_parent.php
deleted file mode 100644
index 97f11ca43..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_block_parent.php
+++ /dev/null
@@ -1,31 +0,0 @@
-
- */
-class Smarty_Internal_Compile_Block_Parent extends Smarty_Internal_Compile_Child
-{
- /**
- * Tag name
- *
- * @var string
- */
- public $tag = 'block_parent';
-
- /**
- * Block type
- *
- * @var string
- */
- public $blockType = 'Parent';
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_break.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_break.php
deleted file mode 100644
index 1ee8d75d7..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_break.php
+++ /dev/null
@@ -1,117 +0,0 @@
-checkLevels($args, $compiler);
- $output = " 0 && $this->tag === 'continue') {
- $foreachLevels--;
- }
- if ($foreachLevels > 0) {
- /* @var Smarty_Internal_Compile_Foreach $foreachCompiler */
- $foreachCompiler = $compiler->getTagCompiler('foreach');
- $output .= $foreachCompiler->compileRestore($foreachLevels);
- }
- $output .= "{$this->tag} {$levels};?>";
- return $output;
- }
-
- /**
- * check attributes and return array of break and foreach levels
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return array
- * @throws \SmartyCompilerException
- */
- public function checkLevels($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true);
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- if ($_attr[ 'nocache' ] === true) {
- $compiler->trigger_template_error('nocache option not allowed', null, true);
- }
- if (isset($_attr[ 'levels' ])) {
- if (!is_numeric($_attr[ 'levels' ])) {
- $compiler->trigger_template_error('level attribute must be a numeric constant', null, true);
- }
- $levels = $_attr[ 'levels' ];
- } else {
- $levels = 1;
- }
- $level_count = $levels;
- $stack_count = count($compiler->_tag_stack) - 1;
- $foreachLevels = 0;
- $lastTag = '';
- while ($level_count > 0 && $stack_count >= 0) {
- if (isset($_is_loopy[ $compiler->_tag_stack[ $stack_count ][ 0 ] ])) {
- $lastTag = $compiler->_tag_stack[ $stack_count ][ 0 ];
- if ($level_count === 0) {
- break;
- }
- $level_count--;
- if ($compiler->_tag_stack[ $stack_count ][ 0 ] === 'foreach') {
- $foreachLevels++;
- }
- }
- $stack_count--;
- }
- if ($level_count !== 0) {
- $compiler->trigger_template_error("cannot {$this->tag} {$levels} level(s)", null, true);
- }
- if ($lastTag === 'foreach' && $this->tag === 'break' && $foreachLevels > 0) {
- $foreachLevels--;
- }
- return array($levels, $foreachLevels);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_call.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_call.php
deleted file mode 100644
index 445cabc60..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_call.php
+++ /dev/null
@@ -1,89 +0,0 @@
-getAttributes($compiler, $args);
- // save possible attributes
- if (isset($_attr[ 'assign' ])) {
- // output will be stored in a smarty variable instead of being displayed
- $_assign = $_attr[ 'assign' ];
- }
- //$_name = trim($_attr['name'], "''");
- $_name = $_attr[ 'name' ];
- unset($_attr[ 'name' ], $_attr[ 'assign' ], $_attr[ 'nocache' ]);
- // set flag (compiled code of {function} must be included in cache file
- if (!$compiler->template->caching || $compiler->nocache || $compiler->tag_nocache) {
- $_nocache = 'true';
- } else {
- $_nocache = 'false';
- }
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- $_params = 'array(' . implode(',', $_paramsArray) . ')';
- //$compiler->suppressNocacheProcessing = true;
- // was there an assign attribute
- if (isset($_assign)) {
- $_output =
- "smarty->ext->_tplFunction->callTemplateFunction(\$_smarty_tpl, {$_name}, {$_params}, {$_nocache});\n\$_smarty_tpl->assign({$_assign}, ob_get_clean());?>\n";
- } else {
- $_output =
- "smarty->ext->_tplFunction->callTemplateFunction(\$_smarty_tpl, {$_name}, {$_params}, {$_nocache});?>\n";
- }
- return $_output;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php
deleted file mode 100644
index a4ffbc9ea..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_capture.php
+++ /dev/null
@@ -1,105 +0,0 @@
-smarty->ext->_capture->getBuffer($_smarty_tpl' .
- (isset($parameter[ 1 ]) ? ", {$parameter[ 1 ]})" : ')');
- }
-
- /**
- * Compiles code for the {capture} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- * @param null $parameter
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter = null)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args, $parameter, 'capture');
- $buffer = isset($_attr[ 'name' ]) ? $_attr[ 'name' ] : "'default'";
- $assign = isset($_attr[ 'assign' ]) ? $_attr[ 'assign' ] : 'null';
- $append = isset($_attr[ 'append' ]) ? $_attr[ 'append' ] : 'null';
- $compiler->_cache[ 'capture_stack' ][] = array($compiler->nocache);
- // maybe nocache because of nocache variables
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- $_output = "smarty->ext->_capture->open(\$_smarty_tpl, $buffer, $assign, $append);?>";
- return $_output;
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Captureclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {/capture} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- * @param null $parameter
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args, $parameter, '/capture');
- // must endblock be nocache?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- list($compiler->nocache) = array_pop($compiler->_cache[ 'capture_stack' ]);
- return "smarty->ext->_capture->close(\$_smarty_tpl);?>";
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_child.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_child.php
deleted file mode 100644
index f728c18bf..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_child.php
+++ /dev/null
@@ -1,79 +0,0 @@
-
- */
-class Smarty_Internal_Compile_Child extends Smarty_Internal_CompileBase
-{
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('assign');
-
- /**
- * Tag name
- *
- * @var string
- */
- public $tag = 'child';
-
- /**
- * Block type
- *
- * @var string
- */
- public $blockType = 'Child';
-
- /**
- * Compiles code for the {child} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- * @param array $parameter array with compilation parameter
- *
- * @return string compiled code
- * @throws \SmartyCompilerException
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $tag = isset($parameter[ 0 ]) ? "'{$parameter[0]}'" : "'{{$this->tag}}'";
- if (!isset($compiler->_cache[ 'blockNesting' ])) {
- $compiler->trigger_template_error(
- "{$tag} used outside {block} tags ",
- $compiler->parser->lex->taglineno
- );
- }
- $compiler->has_code = true;
- $compiler->suppressNocacheProcessing = true;
- if ($this->blockType === 'Child') {
- $compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ][ 'callsChild' ] = 'true';
- }
- $_assign = isset($_attr[ 'assign' ]) ? $_attr[ 'assign' ] : null;
- $output = "inheritance->call' . $this->blockType . '($_smarty_tpl, $this' .
- ($this->blockType === 'Child' ? '' : ", {$tag}") . ");\n";
- if (isset($_assign)) {
- $output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n";
- }
- $output .= "?>\n";
- return $output;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_config_load.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_config_load.php
deleted file mode 100644
index 8fe64ee10..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_config_load.php
+++ /dev/null
@@ -1,96 +0,0 @@
- Smarty::SCOPE_LOCAL, 'parent' => Smarty::SCOPE_PARENT,
- 'root' => Smarty::SCOPE_ROOT, 'tpl_root' => Smarty::SCOPE_TPL_ROOT,
- 'smarty' => Smarty::SCOPE_SMARTY, 'global' => Smarty::SCOPE_SMARTY
- );
-
- /**
- * Compiles code for the {config_load} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- * @throws \SmartyCompilerException
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- if ($_attr[ 'nocache' ] === true) {
- $compiler->trigger_template_error('nocache option not allowed', null, true);
- }
- // save possible attributes
- $conf_file = $_attr[ 'file' ];
- if (isset($_attr[ 'section' ])) {
- $section = $_attr[ 'section' ];
- } else {
- $section = 'null';
- }
- // scope setup
- if ($_attr[ 'noscope' ]) {
- $_scope = -1;
- } else {
- $_scope = $compiler->convertScope($_attr, $this->valid_scopes);
- }
- // create config object
- $_output =
- "smarty->ext->configLoad->_loadConfigFile(\$_smarty_tpl, {$conf_file}, {$section}, {$_scope});\n?>\n";
- return $_output;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_continue.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_continue.php
deleted file mode 100644
index e545728ee..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_continue.php
+++ /dev/null
@@ -1,25 +0,0 @@
-getAttributes($compiler, $args);
- // compile always as nocache
- $compiler->tag_nocache = true;
- // display debug template
- $_output =
- "display_debug(\$_smarty_tpl);\n";
- $_output .= "unset(\$_smarty_debug);\n?>";
- return $_output;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_eval.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_eval.php
deleted file mode 100644
index 8e0174e3e..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_eval.php
+++ /dev/null
@@ -1,70 +0,0 @@
-getAttributes($compiler, $args);
- if (isset($_attr[ 'assign' ])) {
- // output will be stored in a smarty variable instead of being displayed
- $_assign = $_attr[ 'assign' ];
- }
- // create template object
- $_output =
- "\$_template = new {$compiler->smarty->template_class}('eval:'.{$_attr[ 'var' ]}, \$_smarty_tpl->smarty, \$_smarty_tpl);";
- //was there an assign attribute?
- if (isset($_assign)) {
- $_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());";
- } else {
- $_output .= 'echo $_template->fetch();';
- }
- return "";
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_extends.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_extends.php
deleted file mode 100644
index d72d2b76f..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_extends.php
+++ /dev/null
@@ -1,158 +0,0 @@
-getAttributes($compiler, $args);
- if ($_attr[ 'nocache' ] === true) {
- $compiler->trigger_template_error('nocache option not allowed', $compiler->parser->lex->line - 1);
- }
- if (strpos($_attr[ 'file' ], '$_tmp') !== false) {
- $compiler->trigger_template_error('illegal value for file attribute', $compiler->parser->lex->line - 1);
- }
- // add code to initialize inheritance
- $this->registerInit($compiler, true);
- $file = trim($_attr[ 'file' ], '\'"');
- if (strlen($file) > 8 && substr($file, 0, 8) === 'extends:') {
- // generate code for each template
- $files = array_reverse(explode('|', substr($file, 8)));
- $i = 0;
- foreach ($files as $file) {
- if ($file[ 0 ] === '"') {
- $file = trim($file, '".');
- } else {
- $file = "'{$file}'";
- }
- $i++;
- if ($i === count($files) && isset($_attr[ 'extends_resource' ])) {
- $this->compileEndChild($compiler);
- }
- $this->compileInclude($compiler, $file);
- }
- if (!isset($_attr[ 'extends_resource' ])) {
- $this->compileEndChild($compiler);
- }
- } else {
- $this->compileEndChild($compiler, $_attr[ 'file' ]);
- }
- $compiler->has_code = false;
- return '';
- }
-
- /**
- * Add code for inheritance endChild() method to end of template
- *
- * @param \Smarty_Internal_TemplateCompilerBase $compiler
- * @param null|string $template optional inheritance parent template
- *
- * @throws \SmartyCompilerException
- * @throws \SmartyException
- */
- private function compileEndChild(Smarty_Internal_TemplateCompilerBase $compiler, $template = null)
- {
- $inlineUids = '';
- if (isset($template) && $compiler->smarty->merge_compiled_includes) {
- $code = $compiler->compileTag('include', array($template, array('scope' => 'parent')));
- if (preg_match('/([,][\s]*[\'][a-z0-9]+[\'][,][\s]*[\']content.*[\'])[)]/', $code, $match)) {
- $inlineUids = $match[ 1 ];
- }
- }
- $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag(
- $compiler->parser,
- 'inheritance->endChild($_smarty_tpl' .
- (isset($template) ?
- ", {$template}{$inlineUids}" :
- '') . ");\n?>"
- );
- }
-
- /**
- * Add code for including subtemplate to end of template
- *
- * @param \Smarty_Internal_TemplateCompilerBase $compiler
- * @param string $template subtemplate name
- *
- * @throws \SmartyCompilerException
- * @throws \SmartyException
- */
- private function compileInclude(Smarty_Internal_TemplateCompilerBase $compiler, $template)
- {
- $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag(
- $compiler->parser,
- $compiler->compileTag(
- 'include',
- array(
- $template,
- array('scope' => 'parent')
- )
- )
- );
- }
-
- /**
- * Create source code for {extends} from source components array
- *
- * @param \Smarty_Internal_Template $template
- *
- * @return string
- */
- public static function extendsSourceArrayCode(Smarty_Internal_Template $template)
- {
- $resources = array();
- foreach ($template->source->components as $source) {
- $resources[] = $source->resource;
- }
- return $template->smarty->left_delimiter . 'extends file=\'extends:' . join('|', $resources) .
- '\' extends_resource=true' . $template->smarty->right_delimiter;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php
deleted file mode 100644
index 969e22c1a..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_for.php
+++ /dev/null
@@ -1,164 +0,0 @@
-loopNesting++;
- if ($parameter === 0) {
- $this->required_attributes = array('start', 'to');
- $this->optional_attributes = array('max', 'step');
- } else {
- $this->required_attributes = array('start', 'ifexp', 'var', 'step');
- $this->optional_attributes = array();
- }
- $this->mapCache = array();
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $output = "tpl_vars[$var] = new Smarty_Variable(null, \$_smarty_tpl->isRenderingCache);\n";
- $output .= "\$_smarty_tpl->tpl_vars[$var]->value{$index} = {$_statement['value']};\n";
- }
- if (is_array($_attr[ 'var' ])) {
- $var = $_attr[ 'var' ][ 'var' ];
- $index = $_attr[ 'var' ][ 'smarty_internal_index' ];
- } else {
- $var = $_attr[ 'var' ];
- $index = '';
- }
- $output .= "if ($_attr[ifexp]) {\nfor (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$var]->value{$index}$_attr[step]) {\n";
- } else {
- $_statement = $_attr[ 'start' ];
- if (is_array($_statement[ 'var' ])) {
- $var = $_statement[ 'var' ][ 'var' ];
- $index = $_statement[ 'var' ][ 'smarty_internal_index' ];
- } else {
- $var = $_statement[ 'var' ];
- $index = '';
- }
- $output .= "\$_smarty_tpl->tpl_vars[$var] = new Smarty_Variable(null, \$_smarty_tpl->isRenderingCache);";
- if (isset($_attr[ 'step' ])) {
- $output .= "\$_smarty_tpl->tpl_vars[$var]->step = $_attr[step];";
- } else {
- $output .= "\$_smarty_tpl->tpl_vars[$var]->step = 1;";
- }
- if (isset($_attr[ 'max' ])) {
- $output .= "\$_smarty_tpl->tpl_vars[$var]->total = (int) min(ceil((\$_smarty_tpl->tpl_vars[$var]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$var]->step)),$_attr[max]);\n";
- } else {
- $output .= "\$_smarty_tpl->tpl_vars[$var]->total = (int) ceil((\$_smarty_tpl->tpl_vars[$var]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$var]->step));\n";
- }
- $output .= "if (\$_smarty_tpl->tpl_vars[$var]->total > 0) {\n";
- $output .= "for (\$_smarty_tpl->tpl_vars[$var]->value{$index} = $_statement[value], \$_smarty_tpl->tpl_vars[$var]->iteration = 1;\$_smarty_tpl->tpl_vars[$var]->iteration <= \$_smarty_tpl->tpl_vars[$var]->total;\$_smarty_tpl->tpl_vars[$var]->value{$index} += \$_smarty_tpl->tpl_vars[$var]->step, \$_smarty_tpl->tpl_vars[$var]->iteration++) {\n";
- $output .= "\$_smarty_tpl->tpl_vars[$var]->first = \$_smarty_tpl->tpl_vars[$var]->iteration === 1;";
- $output .= "\$_smarty_tpl->tpl_vars[$var]->last = \$_smarty_tpl->tpl_vars[$var]->iteration === \$_smarty_tpl->tpl_vars[$var]->total;";
- }
- $output .= '?>';
- $this->openTag($compiler, 'for', array('for', $compiler->nocache));
- // maybe nocache because of nocache variables
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- // return compiled code
- return $output;
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Forelse Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {forelse} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- *
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- list($openTag, $nocache) = $this->closeTag($compiler, array('for'));
- $this->openTag($compiler, 'forelse', array('forelse', $nocache));
- return "";
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Forclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {/for} tag
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- *
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter)
- {
- $compiler->loopNesting--;
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- // must endblock be nocache?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- list($openTag, $compiler->nocache) = $this->closeTag($compiler, array('for', 'forelse'));
- $output = "";
- return $output;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php
deleted file mode 100644
index edfe358be..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_foreach.php
+++ /dev/null
@@ -1,343 +0,0 @@
-loopNesting++;
- // init
- $this->isNamed = false;
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $from = $_attr[ 'from' ];
- $item = $compiler->getId($_attr[ 'item' ]);
- if ($item === false) {
- $item = $compiler->getVariableName($_attr[ 'item' ]);
- }
- $key = $name = null;
- $attributes = array('item' => $item);
- if (isset($_attr[ 'key' ])) {
- $key = $compiler->getId($_attr[ 'key' ]);
- if ($key === false) {
- $key = $compiler->getVariableName($_attr[ 'key' ]);
- }
- $attributes[ 'key' ] = $key;
- }
- if (isset($_attr[ 'name' ])) {
- $this->isNamed = true;
- $name = $attributes[ 'name' ] = $compiler->getId($_attr[ 'name' ]);
- }
- foreach ($attributes as $a => $v) {
- if ($v === false) {
- $compiler->trigger_template_error("'{$a}' attribute/variable has illegal value", null, true);
- }
- }
- $fromName = $compiler->getVariableName($_attr[ 'from' ]);
- if ($fromName) {
- foreach (array('item', 'key') as $a) {
- if (isset($attributes[ $a ]) && $attributes[ $a ] === $fromName) {
- $compiler->trigger_template_error(
- "'{$a}' and 'from' may not have same variable name '{$fromName}'",
- null,
- true
- );
- }
- }
- }
- $itemVar = "\$_smarty_tpl->tpl_vars['{$item}']";
- $local = '$__foreach_' . $attributes[ 'item' ] . '_' . $this->counter++ . '_';
- // search for used tag attributes
- $itemAttr = array();
- $namedAttr = array();
- $this->scanForProperties($attributes, $compiler);
- if (!empty($this->matchResults[ 'item' ])) {
- $itemAttr = $this->matchResults[ 'item' ];
- }
- if (!empty($this->matchResults[ 'named' ])) {
- $namedAttr = $this->matchResults[ 'named' ];
- }
- if (isset($_attr[ 'properties' ]) && preg_match_all('/[\'](.*?)[\']/', $_attr[ 'properties' ], $match)) {
- foreach ($match[ 1 ] as $prop) {
- if (in_array($prop, $this->itemProperties)) {
- $itemAttr[ $prop ] = true;
- } else {
- $compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
- }
- }
- if ($this->isNamed) {
- foreach ($match[ 1 ] as $prop) {
- if (in_array($prop, $this->nameProperties)) {
- $nameAttr[ $prop ] = true;
- } else {
- $compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
- }
- }
- }
- }
- if (isset($itemAttr[ 'first' ])) {
- $itemAttr[ 'index' ] = true;
- }
- if (isset($namedAttr[ 'first' ])) {
- $namedAttr[ 'index' ] = true;
- }
- if (isset($namedAttr[ 'last' ])) {
- $namedAttr[ 'iteration' ] = true;
- $namedAttr[ 'total' ] = true;
- }
- if (isset($itemAttr[ 'last' ])) {
- $itemAttr[ 'iteration' ] = true;
- $itemAttr[ 'total' ] = true;
- }
- if (isset($namedAttr[ 'show' ])) {
- $namedAttr[ 'total' ] = true;
- }
- if (isset($itemAttr[ 'show' ])) {
- $itemAttr[ 'total' ] = true;
- }
- $keyTerm = '';
- if (isset($attributes[ 'key' ])) {
- $keyTerm = "\$_smarty_tpl->tpl_vars['{$key}']->value => ";
- }
- if (isset($itemAttr[ 'key' ])) {
- $keyTerm = "{$itemVar}->key => ";
- }
- if ($this->isNamed) {
- $foreachVar = "\$_smarty_tpl->tpl_vars['__smarty_foreach_{$attributes['name']}']";
- }
- $needTotal = isset($itemAttr[ 'total' ]);
- // Register tag
- $this->openTag(
- $compiler,
- 'foreach',
- array('foreach', $compiler->nocache, $local, $itemVar, empty($itemAttr) ? 1 : 2)
- );
- // maybe nocache because of nocache variables
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- // generate output code
- $output = "smarty->ext->_foreach->init(\$_smarty_tpl, $from, " .
- var_export($item, true);
- if ($name || $needTotal || $key) {
- $output .= ', ' . var_export($needTotal, true);
- }
- if ($name || $key) {
- $output .= ', ' . var_export($key, true);
- }
- if ($name) {
- $output .= ', ' . var_export($name, true) . ', ' . var_export($namedAttr, true);
- }
- $output .= ");\n";
- if (isset($itemAttr[ 'show' ])) {
- $output .= "{$itemVar}->show = ({$itemVar}->total > 0);\n";
- }
- if (isset($itemAttr[ 'iteration' ])) {
- $output .= "{$itemVar}->iteration = 0;\n";
- }
- if (isset($itemAttr[ 'index' ])) {
- $output .= "{$itemVar}->index = -1;\n";
- }
- $output .= "{$itemVar}->do_else = true;\n";
- $output .= "if (\$_from !== null) foreach (\$_from as {$keyTerm}{$itemVar}->value) {\n";
- $output .= "{$itemVar}->do_else = false;\n";
- if (isset($attributes[ 'key' ]) && isset($itemAttr[ 'key' ])) {
- $output .= "\$_smarty_tpl->tpl_vars['{$key}']->value = {$itemVar}->key;\n";
- }
- if (isset($itemAttr[ 'iteration' ])) {
- $output .= "{$itemVar}->iteration++;\n";
- }
- if (isset($itemAttr[ 'index' ])) {
- $output .= "{$itemVar}->index++;\n";
- }
- if (isset($itemAttr[ 'first' ])) {
- $output .= "{$itemVar}->first = !{$itemVar}->index;\n";
- }
- if (isset($itemAttr[ 'last' ])) {
- $output .= "{$itemVar}->last = {$itemVar}->iteration === {$itemVar}->total;\n";
- }
- if (isset($foreachVar)) {
- if (isset($namedAttr[ 'iteration' ])) {
- $output .= "{$foreachVar}->value['iteration']++;\n";
- }
- if (isset($namedAttr[ 'index' ])) {
- $output .= "{$foreachVar}->value['index']++;\n";
- }
- if (isset($namedAttr[ 'first' ])) {
- $output .= "{$foreachVar}->value['first'] = !{$foreachVar}->value['index'];\n";
- }
- if (isset($namedAttr[ 'last' ])) {
- $output .= "{$foreachVar}->value['last'] = {$foreachVar}->value['iteration'] === {$foreachVar}->value['total'];\n";
- }
- }
- if (!empty($itemAttr)) {
- $output .= "{$local}saved = {$itemVar};\n";
- }
- $output .= '?>';
- return $output;
- }
-
- /**
- * Compiles code for to restore saved template variables
- *
- * @param int $levels number of levels to restore
- *
- * @return string compiled code
- */
- public function compileRestore($levels)
- {
- return "\$_smarty_tpl->smarty->ext->_foreach->restore(\$_smarty_tpl, {$levels});";
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Foreachelse Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {foreachelse} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- list($openTag, $nocache, $local, $itemVar, $restore) = $this->closeTag($compiler, array('foreach'));
- $this->openTag($compiler, 'foreachelse', array('foreachelse', $nocache, $local, $itemVar, 0));
- $output = "do_else) {\n?>";
- return $output;
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Foreachclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {/foreach} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- * @throws \SmartyCompilerException
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $compiler->loopNesting--;
- // must endblock be nocache?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- list(
- $openTag, $compiler->nocache, $local, $itemVar, $restore
- ) = $this->closeTag($compiler, array('foreach', 'foreachelse'));
- $output = "getTagCompiler('foreach');
- $output .= $foreachCompiler->compileRestore(1);
- $output .= "?>";
- return $output;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php
deleted file mode 100644
index b05a82b74..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_function.php
+++ /dev/null
@@ -1,236 +0,0 @@
-getAttributes($compiler, $args);
- if ($_attr[ 'nocache' ] === true) {
- $compiler->trigger_template_error('nocache option not allowed', null, true);
- }
- unset($_attr[ 'nocache' ]);
- $_name = trim($_attr[ 'name' ], '\'"');
-
- if (!preg_match('/^[a-zA-Z0-9_\x80-\xff]+$/', $_name)) {
- $compiler->trigger_template_error("Function name contains invalid characters: {$_name}", null, true);
- }
-
- $compiler->parent_compiler->tpl_function[ $_name ] = array();
- $save = array(
- $_attr, $compiler->parser->current_buffer, $compiler->template->compiled->has_nocache_code,
- $compiler->template->caching
- );
- $this->openTag($compiler, 'function', $save);
- // Init temporary context
- $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
- $compiler->template->compiled->has_nocache_code = false;
- $compiler->saveRequiredPlugins(true);
- return true;
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Functionclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
-{
- /**
- * Compiler object
- *
- * @var object
- */
- private $compiler = null;
-
- /**
- * Compiles code for the {/function} tag
- *
- * @param array $args array with attributes from parser
- * @param object|\Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return bool true
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $this->compiler = $compiler;
- $saved_data = $this->closeTag($compiler, array('function'));
- $_attr = $saved_data[ 0 ];
- $_name = trim($_attr[ 'name' ], '\'"');
- $compiler->parent_compiler->tpl_function[ $_name ][ 'compiled_filepath' ] =
- $compiler->parent_compiler->template->compiled->filepath;
- $compiler->parent_compiler->tpl_function[ $_name ][ 'uid' ] = $compiler->template->source->uid;
- $_parameter = $_attr;
- unset($_parameter[ 'name' ]);
- // default parameter
- $_paramsArray = array();
- foreach ($_parameter as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- if (!empty($_paramsArray)) {
- $_params = 'array(' . implode(',', $_paramsArray) . ')';
- $_paramsCode = "\$params = array_merge($_params, \$params);\n";
- } else {
- $_paramsCode = '';
- }
- $_functionCode = $compiler->parser->current_buffer;
- // setup buffer for template function code
- $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
- $_funcName = "smarty_template_function_{$_name}_{$compiler->template->compiled->nocache_hash}";
- $_funcNameCaching = $_funcName . '_nocache';
- if ($compiler->template->compiled->has_nocache_code) {
- $compiler->parent_compiler->tpl_function[ $_name ][ 'call_name_caching' ] = $_funcNameCaching;
- $output = "cStyleComment(" {$_funcNameCaching} ") . "\n";
- $output .= "if (!function_exists('{$_funcNameCaching}')) {\n";
- $output .= "function {$_funcNameCaching} (Smarty_Internal_Template \$_smarty_tpl,\$params) {\n";
- $output .= "ob_start();\n";
- $output .= $compiler->compileRequiredPlugins();
- $output .= "\$_smarty_tpl->compiled->has_nocache_code = true;\n";
- $output .= $_paramsCode;
- $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value, \$_smarty_tpl->isRenderingCache);\n}\n";
- $output .= "\$params = var_export(\$params, true);\n";
- $output .= "echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/smarty->ext->_tplFunction->saveTemplateVariables(\\\$_smarty_tpl, '{$_name}');\nforeach (\$params as \\\$key => \\\$value) {\n\\\$_smarty_tpl->tpl_vars[\\\$key] = new Smarty_Variable(\\\$value, \\\$_smarty_tpl->isRenderingCache);\n}\n?>";
- $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\";?>";
- $compiler->parser->current_buffer->append_subtree(
- $compiler->parser,
- new Smarty_Internal_ParseTree_Tag(
- $compiler->parser,
- $output
- )
- );
- $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode);
- $output = "template->compiled->nocache_hash}%%*/smarty->ext->_tplFunction->restoreTemplateVariables(\\\$_smarty_tpl, '{$_name}');?>\n";
- $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\";\n?>";
- $output .= "template->compiled->nocache_hash}', \$_smarty_tpl->compiled->nocache_hash ?? '', ob_get_clean());\n";
- $output .= "}\n}\n";
- $output .= $compiler->cStyleComment("/ {$_funcName}_nocache ") . "\n\n";
- $output .= "?>\n";
- $compiler->parser->current_buffer->append_subtree(
- $compiler->parser,
- new Smarty_Internal_ParseTree_Tag(
- $compiler->parser,
- $output
- )
- );
- $_functionCode = new Smarty_Internal_ParseTree_Tag(
- $compiler->parser,
- preg_replace_callback(
- "/((<\?php )?echo '\/\*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/([\S\s]*?)\/\*\/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/",
- array($this, 'removeNocache'),
- $_functionCode->to_smarty_php($compiler->parser)
- )
- );
- }
- $compiler->parent_compiler->tpl_function[ $_name ][ 'call_name' ] = $_funcName;
- $output = "cStyleComment(" {$_funcName} ") . "\n";
- $output .= "if (!function_exists('{$_funcName}')) {\n";
- $output .= "function {$_funcName}(Smarty_Internal_Template \$_smarty_tpl,\$params) {\n";
- $output .= $_paramsCode;
- $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value, \$_smarty_tpl->isRenderingCache);\n}\n";
- $output .= $compiler->compileCheckPlugins(array_merge($compiler->required_plugins[ 'compiled' ],
- $compiler->required_plugins[ 'nocache' ]));
- $output .= "?>\n";
- $compiler->parser->current_buffer->append_subtree(
- $compiler->parser,
- new Smarty_Internal_ParseTree_Tag(
- $compiler->parser,
- $output
- )
- );
- $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode);
- $output = "cStyleComment("/ {$_funcName} ") . "\n\n";
- $output .= "?>\n";
- $compiler->parser->current_buffer->append_subtree(
- $compiler->parser,
- new Smarty_Internal_ParseTree_Tag(
- $compiler->parser,
- $output
- )
- );
- $compiler->parent_compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser);
- // restore old buffer
- $compiler->parser->current_buffer = $saved_data[ 1 ];
- // restore old status
- $compiler->restoreRequiredPlugins();
- $compiler->template->compiled->has_nocache_code = $saved_data[ 2 ];
- $compiler->template->caching = $saved_data[ 3 ];
- return true;
- }
-
- /**
- * Remove nocache code
- *
- * @param $match
- *
- * @return string
- */
- public function removeNocache($match)
- {
- $code =
- preg_replace(
- "/((<\?php )?echo '\/\*%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/)|(\/\*\/%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/",
- '',
- $match[ 0 ]
- );
- $code = str_replace(array('\\\'', '\\\\\''), array('\'', '\\\''), $code);
- return $code;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php
deleted file mode 100644
index df3dc3fad..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_if.php
+++ /dev/null
@@ -1,207 +0,0 @@
-getAttributes($compiler, $args);
- $this->openTag($compiler, 'if', array(1, $compiler->nocache));
- // must whole block be nocache ?
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- if (!isset($parameter[ 'if condition' ])) {
- $compiler->trigger_template_error('missing if condition', null, true);
- }
- if (is_array($parameter[ 'if condition' ])) {
- if (is_array($parameter[ 'if condition' ][ 'var' ])) {
- $var = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
- } else {
- $var = $parameter[ 'if condition' ][ 'var' ];
- }
- if ($compiler->nocache) {
- // create nocache var to make it know for further compiling
- $compiler->setNocacheInVariable($var);
- }
- $prefixVar = $compiler->getNewPrefixVariable();
- $_output = "\n";
- $assignAttr = array();
- $assignAttr[][ 'value' ] = $prefixVar;
- $assignCompiler = new Smarty_Internal_Compile_Assign();
- if (is_array($parameter[ 'if condition' ][ 'var' ])) {
- $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
- $_output .= $assignCompiler->compile(
- $assignAttr,
- $compiler,
- array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ])
- );
- } else {
- $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ];
- $_output .= $assignCompiler->compile($assignAttr, $compiler, array());
- }
- $_output .= "";
- return $_output;
- } else {
- return "";
- }
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Else Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {else} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
- $this->openTag($compiler, 'else', array($nesting, $compiler->tag_nocache));
- return '';
- }
-}
-
-/**
- * Smarty Internal Plugin Compile ElseIf Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {elseif} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- * @param array $parameter array with compilation parameter
- *
- * @return string compiled code
- * @throws \SmartyCompilerException
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
- if (!isset($parameter[ 'if condition' ])) {
- $compiler->trigger_template_error('missing elseif condition', null, true);
- }
- $assignCode = '';
- $var = '';
- if (is_array($parameter[ 'if condition' ])) {
- $condition_by_assign = true;
- if (is_array($parameter[ 'if condition' ][ 'var' ])) {
- $var = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
- } else {
- $var = $parameter[ 'if condition' ][ 'var' ];
- }
- if ($compiler->nocache) {
- // create nocache var to make it know for further compiling
- $compiler->setNocacheInVariable($var);
- }
- $prefixVar = $compiler->getNewPrefixVariable();
- $assignCode = "\n";
- $assignCompiler = new Smarty_Internal_Compile_Assign();
- $assignAttr = array();
- $assignAttr[][ 'value' ] = $prefixVar;
- if (is_array($parameter[ 'if condition' ][ 'var' ])) {
- $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
- $assignCode .= $assignCompiler->compile(
- $assignAttr,
- $compiler,
- array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ])
- );
- } else {
- $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ];
- $assignCode .= $assignCompiler->compile($assignAttr, $compiler, array());
- }
- } else {
- $condition_by_assign = false;
- }
- $prefixCode = $compiler->getPrefixCode();
- if (empty($prefixCode)) {
- if ($condition_by_assign) {
- $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache));
- $_output = $compiler->appendCode("", $assignCode);
- return $compiler->appendCode($_output, "");
- } else {
- $this->openTag($compiler, 'elseif', array($nesting, $compiler->tag_nocache));
- return "";
- }
- } else {
- $_output = $compiler->appendCode("", $prefixCode);
- $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache));
- if ($condition_by_assign) {
- $_output = $compiler->appendCode($_output, $assignCode);
- return $compiler->appendCode($_output, "");
- } else {
- return $compiler->appendCode($_output, "");
- }
- }
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Ifclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {/if} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- // must endblock be nocache?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- list($nesting, $compiler->nocache) = $this->closeTag($compiler, array('if', 'else', 'elseif'));
- $tmp = '';
- for ($i = 0; $i < $nesting; $i++) {
- $tmp .= '}';
- }
- return "";
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php
deleted file mode 100644
index bf62461bc..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_include.php
+++ /dev/null
@@ -1,347 +0,0 @@
- Smarty::SCOPE_PARENT, 'root' => Smarty::SCOPE_ROOT,
- 'global' => Smarty::SCOPE_GLOBAL, 'tpl_root' => Smarty::SCOPE_TPL_ROOT,
- 'smarty' => Smarty::SCOPE_SMARTY
- );
-
- /**
- * Compiles code for the {include} tag
- *
- * @param array $args array with attributes from parser
- * @param Smarty_Internal_SmartyTemplateCompiler $compiler compiler object
- *
- * @return string
- * @throws \Exception
- * @throws \SmartyCompilerException
- * @throws \SmartyException
- */
- public function compile($args, Smarty_Internal_SmartyTemplateCompiler $compiler)
- {
- $uid = $t_hash = null;
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $fullResourceName = $source_resource = $_attr[ 'file' ];
- $variable_template = false;
- $cache_tpl = false;
- // parse resource_name
- if (preg_match('/^([\'"])(([A-Za-z0-9_\-]{2,})[:])?(([^$()]+)|(.+))\1$/', $source_resource, $match)) {
- $type = !empty($match[ 3 ]) ? $match[ 3 ] : $compiler->template->smarty->default_resource_type;
- $name = !empty($match[ 5 ]) ? $match[ 5 ] : $match[ 6 ];
- $handler = Smarty_Resource::load($compiler->smarty, $type);
- if ($handler->recompiled || $handler->uncompiled) {
- $variable_template = true;
- }
- if (!$variable_template) {
- if ($type !== 'string') {
- $fullResourceName = "{$type}:{$name}";
- $compiled = $compiler->parent_compiler->template->compiled;
- if (isset($compiled->includes[ $fullResourceName ])) {
- $compiled->includes[ $fullResourceName ]++;
- $cache_tpl = true;
- } else {
- if ("{$compiler->template->source->type}:{$compiler->template->source->name}" ==
- $fullResourceName
- ) {
- // recursive call of current template
- $compiled->includes[ $fullResourceName ] = 2;
- $cache_tpl = true;
- } else {
- $compiled->includes[ $fullResourceName ] = 1;
- }
- }
- $fullResourceName = $match[ 1 ] . $fullResourceName . $match[ 1 ];
- }
- }
- if (empty($match[ 5 ])) {
- $variable_template = true;
- }
- } else {
- $variable_template = true;
- }
- // scope setup
- $_scope = $compiler->convertScope($_attr, $this->valid_scopes);
- // set flag to cache subtemplate object when called within loop or template name is variable.
- if ($cache_tpl || $variable_template || $compiler->loopNesting > 0) {
- $_cache_tpl = 'true';
- } else {
- $_cache_tpl = 'false';
- }
- // assume caching is off
- $_caching = Smarty::CACHING_OFF;
- $call_nocache = $compiler->tag_nocache || $compiler->nocache;
- // caching was on and {include} is not in nocache mode
- if ($compiler->template->caching && !$compiler->nocache && !$compiler->tag_nocache) {
- $_caching = self::CACHING_NOCACHE_CODE;
- }
- // flag if included template code should be merged into caller
- $merge_compiled_includes = ($compiler->smarty->merge_compiled_includes || $_attr[ 'inline' ] === true) &&
- !$compiler->template->source->handler->recompiled;
- if ($merge_compiled_includes) {
- // variable template name ?
- if ($variable_template) {
- $merge_compiled_includes = false;
- }
- // variable compile_id?
- if (isset($_attr[ 'compile_id' ]) && $compiler->isVariable($_attr[ 'compile_id' ])) {
- $merge_compiled_includes = false;
- }
- }
- /*
- * if the {include} tag provides individual parameter for caching or compile_id
- * the subtemplate must not be included into the common cache file and is treated like
- * a call in nocache mode.
- *
- */
- if ($_attr[ 'nocache' ] !== true && $_attr[ 'caching' ]) {
- $_caching = $_new_caching = (int)$_attr[ 'caching' ];
- $call_nocache = true;
- } else {
- $_new_caching = Smarty::CACHING_LIFETIME_CURRENT;
- }
- if (isset($_attr[ 'cache_lifetime' ])) {
- $_cache_lifetime = $_attr[ 'cache_lifetime' ];
- $call_nocache = true;
- $_caching = $_new_caching;
- } else {
- $_cache_lifetime = '$_smarty_tpl->cache_lifetime';
- }
- if (isset($_attr[ 'cache_id' ])) {
- $_cache_id = $_attr[ 'cache_id' ];
- $call_nocache = true;
- $_caching = $_new_caching;
- } else {
- $_cache_id = '$_smarty_tpl->cache_id';
- }
- if (isset($_attr[ 'compile_id' ])) {
- $_compile_id = $_attr[ 'compile_id' ];
- } else {
- $_compile_id = '$_smarty_tpl->compile_id';
- }
- // if subtemplate will be called in nocache mode do not merge
- if ($compiler->template->caching && $call_nocache) {
- $merge_compiled_includes = false;
- }
- // assign attribute
- if (isset($_attr[ 'assign' ])) {
- // output will be stored in a smarty variable instead of being displayed
- if ($_assign = $compiler->getId($_attr[ 'assign' ])) {
- $_assign = "'{$_assign}'";
- if ($compiler->tag_nocache || $compiler->nocache || $call_nocache) {
- // create nocache var to make it know for further compiling
- $compiler->setNocacheInVariable($_attr[ 'assign' ]);
- }
- } else {
- $_assign = $_attr[ 'assign' ];
- }
- }
- $has_compiled_template = false;
- if ($merge_compiled_includes) {
- $c_id = isset($_attr[ 'compile_id' ]) ? $_attr[ 'compile_id' ] : $compiler->template->compile_id;
- // we must observe different compile_id and caching
- $t_hash = sha1($c_id . ($_caching ? '--caching' : '--nocaching'));
- $compiler->smarty->allow_ambiguous_resources = true;
- /* @var Smarty_Internal_Template $tpl */
- $tpl = new $compiler->smarty->template_class(
- trim($fullResourceName, '"\''),
- $compiler->smarty,
- $compiler->template,
- $compiler->template->cache_id,
- $c_id,
- $_caching
- );
- $uid = $tpl->source->type . $tpl->source->uid;
- if (!isset($compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $t_hash ])) {
- $has_compiled_template = $this->compileInlineTemplate($compiler, $tpl, $t_hash);
- } else {
- $has_compiled_template = true;
- }
- unset($tpl);
- }
- // delete {include} standard attributes
- unset($_attr[ 'file' ], $_attr[ 'assign' ], $_attr[ 'cache_id' ], $_attr[ 'compile_id' ], $_attr[ 'cache_lifetime' ], $_attr[ 'nocache' ], $_attr[ 'caching' ], $_attr[ 'scope' ], $_attr[ 'inline' ]);
- // remaining attributes must be assigned as smarty variable
- $_vars = 'array()';
- if (!empty($_attr)) {
- $_pairs = array();
- // create variables
- foreach ($_attr as $key => $value) {
- $_pairs[] = "'$key'=>$value";
- }
- $_vars = 'array(' . join(',', $_pairs) . ')';
- }
- $update_compile_id = $compiler->template->caching && !$compiler->tag_nocache && !$compiler->nocache &&
- $_compile_id !== '$_smarty_tpl->compile_id';
- if ($has_compiled_template && !$call_nocache) {
- $_output = "makeNocacheCode("\$_compile_id_save[] = \$_smarty_tpl->compile_id;\n\$_smarty_tpl->compile_id = {$_compile_id};\n");
- }
- if (!empty($_attr) && $_caching === 9999 && $compiler->template->caching) {
- $_vars_nc = "foreach ($_vars as \$ik => \$iv) {\n";
- $_vars_nc .= "\$_smarty_tpl->tpl_vars[\$ik] = new Smarty_Variable(\$iv);\n";
- $_vars_nc .= "}\n";
- $_output .= substr($compiler->processNocacheCode('\n", true), 6, -3);
- }
- if (isset($_assign)) {
- $_output .= "ob_start();\n";
- }
- $_output .= "\$_smarty_tpl->_subTemplateRender({$fullResourceName}, {$_cache_id}, {$_compile_id}, {$_caching}, {$_cache_lifetime}, {$_vars}, {$_scope}, {$_cache_tpl}, '{$compiler->parent_compiler->mergedSubTemplatesData[$uid][$t_hash]['uid']}', '{$compiler->parent_compiler->mergedSubTemplatesData[$uid][$t_hash]['func']}');\n";
- if (isset($_assign)) {
- $_output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n";
- }
- if ($update_compile_id) {
- $_output .= $compiler->makeNocacheCode("\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n");
- }
- $_output .= "?>";
- return $_output;
- }
- if ($call_nocache) {
- $compiler->tag_nocache = true;
- }
- $_output = "compile_id;\n\$_smarty_tpl->compile_id = {$_compile_id};\n";
- }
- // was there an assign attribute
- if (isset($_assign)) {
- $_output .= "ob_start();\n";
- }
- $_output .= "\$_smarty_tpl->_subTemplateRender({$fullResourceName}, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_scope, {$_cache_tpl});\n";
- if (isset($_assign)) {
- $_output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n";
- }
- if ($update_compile_id) {
- $_output .= "\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n";
- }
- $_output .= "?>";
- return $_output;
- }
-
- /**
- * Compile inline sub template
- *
- * @param \Smarty_Internal_SmartyTemplateCompiler $compiler
- * @param \Smarty_Internal_Template $tpl
- * @param string $t_hash
- *
- * @return bool
- * @throws \Exception
- * @throws \SmartyException
- */
- public function compileInlineTemplate(
- Smarty_Internal_SmartyTemplateCompiler $compiler,
- Smarty_Internal_Template $tpl,
- $t_hash
- ) {
- $uid = $tpl->source->type . $tpl->source->uid;
- if (!($tpl->source->handler->uncompiled) && $tpl->source->exists) {
- $compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $t_hash ][ 'uid' ] = $tpl->source->uid;
- if (isset($compiler->template->inheritance)) {
- $tpl->inheritance = clone $compiler->template->inheritance;
- }
- $tpl->compiled = new Smarty_Template_Compiled();
- $tpl->compiled->nocache_hash = $compiler->parent_compiler->template->compiled->nocache_hash;
- $tpl->loadCompiler();
- // save unique function name
- $compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $t_hash ][ 'func' ] =
- $tpl->compiled->unifunc = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
- // make sure whole chain gets compiled
- $tpl->mustCompile = true;
- $compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $t_hash ][ 'nocache_hash' ] =
- $tpl->compiled->nocache_hash;
- if ($tpl->source->type === 'file') {
- $sourceInfo = $tpl->source->filepath;
- } else {
- $basename = $tpl->source->handler->getBasename($tpl->source);
- $sourceInfo = $tpl->source->type . ':' .
- ($basename ? $basename : $tpl->source->name);
- }
- // get compiled code
- $compiled_code = "cStyleComment(" Start inline template \"{$sourceInfo}\" =============================") . "\n";
- $compiled_code .= "function {$tpl->compiled->unifunc} (Smarty_Internal_Template \$_smarty_tpl) {\n";
- $compiled_code .= "?>\n" . $tpl->compiler->compileTemplateSource($tpl, null, $compiler->parent_compiler);
- $compiled_code .= "\n";
- $compiled_code .= $tpl->compiler->postFilter($tpl->compiler->blockOrFunctionCode);
- $compiled_code .= "cStyleComment(" End inline template \"{$sourceInfo}\" =============================") . "\n";
- $compiled_code .= '?>';
- unset($tpl->compiler);
- if ($tpl->compiled->has_nocache_code) {
- // replace nocache_hash
- $compiled_code =
- str_replace(
- "{$tpl->compiled->nocache_hash}",
- $compiler->template->compiled->nocache_hash,
- $compiled_code
- );
- $compiler->template->compiled->has_nocache_code = true;
- }
- $compiler->parent_compiler->mergedSubTemplatesCode[ $tpl->compiled->unifunc ] = $compiled_code;
- return true;
- } else {
- return false;
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php
deleted file mode 100644
index 29031d910..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_insert.php
+++ /dev/null
@@ -1,157 +0,0 @@
-getAttributes($compiler, $args);
- $nocacheParam = $compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache);
- if (!$nocacheParam) {
- // do not compile as nocache code
- $compiler->suppressNocacheProcessing = true;
- }
- $compiler->tag_nocache = true;
- $_smarty_tpl = $compiler->template;
- $_name = null;
- $_script = null;
- $_output = 'template->tpl_vars[ $var ])) {
- $compiler->template->tpl_vars[ $var ]->nocache = true;
- } else {
- $compiler->template->tpl_vars[ $var ] = new Smarty_Variable(null, true);
- }
- }
- if (isset($_attr[ 'script' ])) {
- // script which must be included
- $_function = "smarty_insert_{$_name}";
- $_smarty_tpl = $compiler->template;
- $_filepath = false;
- eval('$_script = @' . $_attr[ 'script' ] . ';');
- if (!isset($compiler->smarty->security_policy) && file_exists($_script)) {
- $_filepath = $_script;
- } else {
- if (isset($compiler->smarty->security_policy)) {
- $_dir = $compiler->smarty->security_policy->trusted_dir;
- } else {
- $_dir = null;
- }
- if (!empty($_dir)) {
- foreach ((array)$_dir as $_script_dir) {
- $_script_dir = rtrim($_script_dir ?? '', '/\\') . DIRECTORY_SEPARATOR;
- if (file_exists($_script_dir . $_script)) {
- $_filepath = $_script_dir . $_script;
- break;
- }
- }
- }
- }
- if ($_filepath === false) {
- $compiler->trigger_template_error("{insert} missing script file '{$_script}'", null, true);
- }
- // code for script file loading
- $_output .= "require_once '{$_filepath}' ;";
- include_once $_filepath;
- if (!is_callable($_function)) {
- $compiler->trigger_template_error(
- " {insert} function '{$_function}' is not callable in script file '{$_script}'",
- null,
- true
- );
- }
- } else {
- $_filepath = 'null';
- $_function = "insert_{$_name}";
- // function in PHP script ?
- if (!is_callable($_function)) {
- // try plugin
- if (!$_function = $compiler->getPlugin($_name, 'insert')) {
- $compiler->trigger_template_error(
- "{insert} no function or plugin found for '{$_name}'",
- null,
- true
- );
- }
- }
- }
- // delete {insert} standard attributes
- unset($_attr[ 'name' ], $_attr[ 'assign' ], $_attr[ 'script' ], $_attr[ 'nocache' ]);
- // convert attributes into parameter array string
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- $_paramsArray[] = "'$_key' => $_value";
- }
- $_params = 'array(' . implode(", ", $_paramsArray) . ')';
- // call insert
- if (isset($_assign)) {
- if ($_smarty_tpl->caching && !$nocacheParam) {
- $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}',{$_assign});?>";
- } else {
- $_output .= "\$_smarty_tpl->assign({$_assign} , {$_function} ({$_params},\$_smarty_tpl), true);?>";
- }
- } else {
- if ($_smarty_tpl->caching && !$nocacheParam) {
- $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}');?>";
- } else {
- $_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>";
- }
- }
- $compiler->template->compiled->has_nocache_code = true;
- return $_output;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php
deleted file mode 100644
index 5493d4ecc..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php
+++ /dev/null
@@ -1,37 +0,0 @@
-getAttributes($compiler, $args);
- if ($_attr[ 'nocache' ] === true) {
- $compiler->trigger_template_error('nocache option not allowed', null, true);
- }
- return $compiler->smarty->left_delimiter;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php
deleted file mode 100644
index 8a34ccd0a..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php
+++ /dev/null
@@ -1,62 +0,0 @@
-getAttributes($compiler, $args);
- if ($compiler->template->caching) {
- $output = "smarty->ext->_make_nocache->save(\$_smarty_tpl, {$_attr[ 'var' ]});\n?>\n";
- $compiler->template->compiled->has_nocache_code = true;
- $compiler->suppressNocacheProcessing = true;
- return $output;
- } else {
- return true;
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php
deleted file mode 100644
index 12f64ed2e..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_nocache.php
+++ /dev/null
@@ -1,73 +0,0 @@
-getAttributes($compiler, $args);
- $this->openTag($compiler, 'nocache', array($compiler->nocache));
- // enter nocache mode
- $compiler->nocache = true;
- // this tag does not return compiled code
- $compiler->has_code = false;
- return true;
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Nocacheclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {/nocache} tag
- * This tag does not generate compiled output. It only sets a compiler flag.
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return bool
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $_attr = $this->getAttributes($compiler, $args);
- // leave nocache mode
- list($compiler->nocache) = $this->closeTag($compiler, array('nocache'));
- // this tag does not return compiled code
- $compiler->has_code = false;
- return true;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_parent.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_parent.php
deleted file mode 100644
index ff23edf73..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_parent.php
+++ /dev/null
@@ -1,31 +0,0 @@
-
- */
-class Smarty_Internal_Compile_Parent extends Smarty_Internal_Compile_Child
-{
- /**
- * Tag name
- *
- * @var string
- */
- public $tag = 'parent';
-
- /**
- * Block type
- *
- * @var string
- */
- public $blockType = 'Parent';
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php
deleted file mode 100644
index 199a296c8..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php
+++ /dev/null
@@ -1,124 +0,0 @@
-getAttributes($compiler, $args);
- $this->nesting++;
- unset($_attr[ 'nocache' ]);
- list($callback, $_paramsArray, $callable) = $this->setup($compiler, $_attr, $tag, $function);
- $_params = 'array(' . implode(',', $_paramsArray) . ')';
- // compile code
- $output = "nesting} = isset({$callback[0]}) ? {$callback[0]} : null;\n";
- $callback = "\$_block_plugin{$this->nesting}{$callback[1]}";
- }
- if (isset($callable)) {
- $output .= "if (!is_callable({$callable})) {\nthrow new SmartyException('block tag \'{$tag}\' not callable or registered');\n}\n";
- }
- $output .= "\$_smarty_tpl->smarty->_cache['_tag_stack'][] = array('{$tag}', {$_params});\n";
- $output .= "\$_block_repeat=true;\necho {$callback}({$_params}, null, \$_smarty_tpl, \$_block_repeat);\nwhile (\$_block_repeat) {\nob_start();?>";
- $this->openTag($compiler, $tag, array($_params, $compiler->nocache, $callback));
- // maybe nocache because of nocache variables or nocache plugin
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- } else {
- // must endblock be nocache?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- // closing tag of block plugin, restore nocache
- list($_params, $compiler->nocache, $callback) = $this->closeTag($compiler, substr($tag, 0, -5));
- // compile code
- if (!isset($parameter[ 'modifier_list' ])) {
- $mod_pre = $mod_post = $mod_content = '';
- $mod_content2 = 'ob_get_clean()';
- } else {
- $mod_content2 = "\$_block_content{$this->nesting}";
- $mod_content = "\$_block_content{$this->nesting} = ob_get_clean();\n";
- $mod_pre = "ob_start();\n";
- $mod_post = 'echo ' . $compiler->compileTag(
- 'private_modifier',
- array(),
- array(
- 'modifierlist' => $parameter[ 'modifier_list' ],
- 'value' => 'ob_get_clean()'
- )
- ) . ";\n";
- }
- $output =
- "smarty->_cache[\'_tag_stack\']);?>';
- }
- return $output;
- }
-
- /**
- * Setup callback and parameter array
- *
- * @param \Smarty_Internal_TemplateCompilerBase $compiler
- * @param array $_attr attributes
- * @param string $tag
- * @param string $function
- *
- * @return array
- */
- public function setup(Smarty_Internal_TemplateCompilerBase $compiler, $_attr, $tag, $function)
- {
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- return array($function, $_paramsArray, null);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php
deleted file mode 100644
index 246350dc8..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php
+++ /dev/null
@@ -1,228 +0,0 @@
-propertyPreg = '~(';
- $this->startOffset = 1;
- $this->resultOffsets = array();
- $this->matchResults = array('named' => array(), 'item' => array());
- if (isset($attributes[ 'name' ])) {
- $this->buildPropertyPreg(true, $attributes);
- }
- if (isset($this->itemProperties)) {
- if ($this->isNamed) {
- $this->propertyPreg .= '|';
- }
- $this->buildPropertyPreg(false, $attributes);
- }
- $this->propertyPreg .= ')\W~i';
- // Template source
- $this->matchTemplateSource($compiler);
- // Parent template source
- $this->matchParentTemplateSource($compiler);
- // {block} source
- $this->matchBlockSource($compiler);
- }
-
- /**
- * Build property preg string
- *
- * @param bool $named
- * @param array $attributes
- */
- public function buildPropertyPreg($named, $attributes)
- {
- if ($named) {
- $this->resultOffsets[ 'named' ] = $this->startOffset = $this->startOffset + 3;
- $this->propertyPreg .= "(([\$]smarty[.]{$this->tagName}[.]" .
- ($this->tagName === 'section' ? "|[\[]\s*" : '') .
- "){$attributes['name']}[.](";
- $properties = $this->nameProperties;
- } else {
- $this->resultOffsets[ 'item' ] = $this->startOffset = $this->startOffset + 2;
- $this->propertyPreg .= "([\$]{$attributes['item']}[@](";
- $properties = $this->itemProperties;
- }
- $propName = reset($properties);
- while ($propName) {
- $this->propertyPreg .= "{$propName}";
- $propName = next($properties);
- if ($propName) {
- $this->propertyPreg .= '|';
- }
- }
- $this->propertyPreg .= '))';
- }
-
- /**
- * Find matches in source string
- *
- * @param string $source
- */
- public function matchProperty($source)
- {
- preg_match_all($this->propertyPreg, $source, $match);
- foreach ($this->resultOffsets as $key => $offset) {
- foreach ($match[ $offset ] as $m) {
- if (!empty($m)) {
- $this->matchResults[ $key ][ smarty_strtolower_ascii($m) ] = true;
- }
- }
- }
- }
-
- /**
- * Find matches in template source
- *
- * @param \Smarty_Internal_TemplateCompilerBase $compiler
- */
- public function matchTemplateSource(Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $this->matchProperty($compiler->parser->lex->data);
- }
-
- /**
- * Find matches in all parent template source
- *
- * @param \Smarty_Internal_TemplateCompilerBase $compiler
- *
- * @throws \SmartyException
- */
- public function matchParentTemplateSource(Smarty_Internal_TemplateCompilerBase $compiler)
- {
- // search parent compiler template source
- $nextCompiler = $compiler;
- while ($nextCompiler !== $nextCompiler->parent_compiler) {
- $nextCompiler = $nextCompiler->parent_compiler;
- if ($compiler !== $nextCompiler) {
- // get template source
- $_content = $nextCompiler->template->source->getContent();
- if ($_content !== '') {
- // run pre filter if required
- if ((isset($nextCompiler->smarty->autoload_filters[ 'pre' ]) ||
- isset($nextCompiler->smarty->registered_filters[ 'pre' ]))
- ) {
- $_content = $nextCompiler->smarty->ext->_filterHandler->runFilter(
- 'pre',
- $_content,
- $nextCompiler->template
- );
- }
- $this->matchProperty($_content);
- }
- }
- }
- }
-
- /**
- * Find matches in {block} tag source
- *
- * @param \Smarty_Internal_TemplateCompilerBase $compiler
- */
- public function matchBlockSource(Smarty_Internal_TemplateCompilerBase $compiler)
- {
- }
-
- /**
- * Compiles code for the {$smarty.foreach.xxx} or {$smarty.section.xxx}tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- * @param array $parameter array with compilation parameter
- *
- * @return string compiled code
- * @throws \SmartyCompilerException
- */
- public function compileSpecialVariable($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
- {
- $tag = smarty_strtolower_ascii(trim($parameter[ 0 ], '"\''));
- $name = isset($parameter[ 1 ]) ? $compiler->getId($parameter[ 1 ]) : false;
- if (!$name) {
- $compiler->trigger_template_error("missing or illegal \$smarty.{$tag} name attribute", null, true);
- }
- $property = isset($parameter[ 2 ]) ? smarty_strtolower_ascii($compiler->getId($parameter[ 2 ])) : false;
- if (!$property || !in_array($property, $this->nameProperties)) {
- $compiler->trigger_template_error("missing or illegal \$smarty.{$tag} property attribute", null, true);
- }
- $tagVar = "'__smarty_{$tag}_{$name}'";
- return "(isset(\$_smarty_tpl->tpl_vars[{$tagVar}]->value['{$property}']) ? \$_smarty_tpl->tpl_vars[{$tagVar}]->value['{$property}'] : null)";
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
deleted file mode 100644
index 055823423..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
+++ /dev/null
@@ -1,78 +0,0 @@
-getAttributes($compiler, $args);
- unset($_attr[ 'nocache' ]);
- // convert attributes into parameter array string
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- $_params = 'array(' . implode(',', $_paramsArray) . ')';
- // compile code
- $output = "{$function}({$_params},\$_smarty_tpl)";
- if (!empty($parameter[ 'modifierlist' ])) {
- $output = $compiler->compileTag(
- 'private_modifier',
- array(),
- array(
- 'modifierlist' => $parameter[ 'modifierlist' ],
- 'value' => $output
- )
- );
- }
- $output = "\n";
- return $output;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php
deleted file mode 100644
index aea082f01..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php
+++ /dev/null
@@ -1,161 +0,0 @@
-getAttributes($compiler, $args);
- $output = $parameter[ 'value' ];
- // loop over list of modifiers
- foreach ($parameter[ 'modifierlist' ] as $single_modifier) {
- /* @var string $modifier */
- $modifier = $single_modifier[ 0 ];
- $single_modifier[ 0 ] = $output;
- $params = implode(',', $single_modifier);
- // check if we know already the type of modifier
- if (isset($compiler->known_modifier_type[ $modifier ])) {
- $modifier_types = array($compiler->known_modifier_type[ $modifier ]);
- } else {
- $modifier_types = array(1, 2, 3, 4, 5, 6);
- }
- foreach ($modifier_types as $type) {
- switch ($type) {
- case 1:
- // registered modifier
- if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ])) {
- if (is_callable($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ][ 0 ])) {
- $output =
- sprintf(
- 'call_user_func_array($_smarty_tpl->registered_plugins[ \'%s\' ][ %s ][ 0 ], array( %s ))',
- Smarty::PLUGIN_MODIFIER,
- var_export($modifier, true),
- $params
- );
- $compiler->known_modifier_type[ $modifier ] = $type;
- break 2;
- }
- }
- break;
- case 2:
- // registered modifier compiler
- if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIERCOMPILER ][ $modifier ][ 0 ])) {
- $output =
- call_user_func(
- $compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIERCOMPILER ][ $modifier ][ 0 ],
- $single_modifier,
- $compiler->smarty
- );
- $compiler->known_modifier_type[ $modifier ] = $type;
- break 2;
- }
- break;
- case 3:
- // modifiercompiler plugin
- if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) {
- // check if modifier allowed
- if (!is_object($compiler->smarty->security_policy)
- || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
- ) {
- $plugin = 'smarty_modifiercompiler_' . $modifier;
- $output = $plugin($single_modifier, $compiler);
- }
- $compiler->known_modifier_type[ $modifier ] = $type;
- break 2;
- }
- break;
- case 4:
- // modifier plugin
- if ($function = $compiler->getPlugin($modifier, Smarty::PLUGIN_MODIFIER)) {
- // check if modifier allowed
- if (!is_object($compiler->smarty->security_policy)
- || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
- ) {
- $output = "{$function}({$params})";
- }
- $compiler->known_modifier_type[ $modifier ] = $type;
- break 2;
- }
- break;
- case 5:
- // PHP function
- if (is_callable($modifier)) {
- // check if modifier allowed
- if (!is_object($compiler->smarty->security_policy)
- || $compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler)
- ) {
- trigger_error('Using php-function "' . $modifier . '" as a modifier is deprecated and will be ' .
- 'removed in a future release. Use Smarty::registerPlugin to explicitly register ' .
- 'a custom modifier.', E_USER_DEPRECATED);
- $output = "{$modifier}({$params})";
- }
- $compiler->known_modifier_type[ $modifier ] = $type;
- break 2;
- }
- break;
- case 6:
- // default plugin handler
- if (isset($compiler->default_handler_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ])
- || (is_callable($compiler->smarty->default_plugin_handler_func)
- && $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER))
- ) {
- $function = $compiler->default_handler_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ][ 0 ];
- // check if modifier allowed
- if (!is_object($compiler->smarty->security_policy)
- || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
- ) {
- if (!is_array($function)) {
- $output = "{$function}({$params})";
- } else {
- if (is_object($function[ 0 ])) {
- $output = $function[ 0 ] . '->' . $function[ 1 ] . '(' . $params . ')';
- } else {
- $output = $function[ 0 ] . '::' . $function[ 1 ] . '(' . $params . ')';
- }
- }
- }
- if (isset($compiler->required_plugins[ 'nocache' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ])
- ||
- isset($compiler->required_plugins[ 'compiled' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ])
- ) {
- // was a plugin
- $compiler->known_modifier_type[ $modifier ] = 4;
- } else {
- $compiler->known_modifier_type[ $modifier ] = $type;
- }
- break 2;
- }
- }
- }
- if (!isset($compiler->known_modifier_type[ $modifier ])) {
- $compiler->trigger_template_error("unknown modifier '{$modifier}'", null, true);
- }
- }
- return $output;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php
deleted file mode 100644
index baac51b28..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php
+++ /dev/null
@@ -1,42 +0,0 @@
- $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- $callback = array("\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]", "->{$method}");
- return array($callback, $_paramsArray, "array(\$_block_plugin{$this->nesting}, '{$method}')");
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php
deleted file mode 100644
index 2a763c6e3..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php
+++ /dev/null
@@ -1,85 +0,0 @@
-getAttributes($compiler, $args);
- unset($_attr[ 'nocache' ]);
- $_assign = null;
- if (isset($_attr[ 'assign' ])) {
- $_assign = $_attr[ 'assign' ];
- unset($_attr[ 'assign' ]);
- }
- // method or property ?
- if (is_callable(array($compiler->smarty->registered_objects[ $tag ][ 0 ], $method))) {
- // convert attributes into parameter array string
- if ($compiler->smarty->registered_objects[ $tag ][ 2 ]) {
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- $_params = 'array(' . implode(',', $_paramsArray) . ')';
- $output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)";
- } else {
- $_params = implode(',', $_attr);
- $output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})";
- }
- } else {
- // object property
- $output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}";
- }
- if (!empty($parameter[ 'modifierlist' ])) {
- $output = $compiler->compileTag(
- 'private_modifier',
- array(),
- array('modifierlist' => $parameter[ 'modifierlist' ], 'value' => $output)
- );
- }
- if (empty($_assign)) {
- return "\n";
- } else {
- return "assign({$_assign},{$output});?>\n";
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php
deleted file mode 100644
index 96bd37244..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php
+++ /dev/null
@@ -1,161 +0,0 @@
-getAttributes($compiler, $args);
- $output = $parameter[ 'value' ];
- // tag modifier
- if (!empty($parameter[ 'modifierlist' ])) {
- $output = $compiler->compileTag(
- 'private_modifier',
- array(),
- array(
- 'modifierlist' => $parameter[ 'modifierlist' ],
- 'value' => $output
- )
- );
- }
- if (isset($_attr[ 'assign' ])) {
- // assign output to variable
- return "assign({$_attr['assign']},{$output});?>";
- } else {
- // display value
- if (!$_attr[ 'nofilter' ]) {
- // default modifier
- if (!empty($compiler->smarty->default_modifiers)) {
- if (empty($compiler->default_modifier_list)) {
- $modifierlist = array();
- foreach ($compiler->smarty->default_modifiers as $key => $single_default_modifier) {
- preg_match_all(
- '/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/',
- $single_default_modifier,
- $mod_array
- );
- for ($i = 0, $count = count($mod_array[ 0 ]); $i < $count; $i++) {
- if ($mod_array[ 0 ][ $i ] !== ':') {
- $modifierlist[ $key ][] = $mod_array[ 0 ][ $i ];
- }
- }
- }
- $compiler->default_modifier_list = $modifierlist;
- }
- $output = $compiler->compileTag(
- 'private_modifier',
- array(),
- array(
- 'modifierlist' => $compiler->default_modifier_list,
- 'value' => $output
- )
- );
- }
- // autoescape html
- if ($compiler->template->smarty->escape_html) {
- $output = "htmlspecialchars((string) {$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')";
- }
- // loop over registered filters
- if (!empty($compiler->template->smarty->registered_filters[ Smarty::FILTER_VARIABLE ])) {
- foreach ($compiler->template->smarty->registered_filters[ Smarty::FILTER_VARIABLE ] as $key =>
- $function) {
- if (!is_array($function)) {
- $output = "{$function}({$output},\$_smarty_tpl)";
- } elseif (is_object($function[ 0 ])) {
- $output =
- "\$_smarty_tpl->smarty->registered_filters[Smarty::FILTER_VARIABLE]['{$key}'][0]->{$function[1]}({$output},\$_smarty_tpl)";
- } else {
- $output = "{$function[0]}::{$function[1]}({$output},\$_smarty_tpl)";
- }
- }
- }
- // auto loaded filters
- if (isset($compiler->smarty->autoload_filters[ Smarty::FILTER_VARIABLE ])) {
- foreach ((array)$compiler->template->smarty->autoload_filters[ Smarty::FILTER_VARIABLE ] as $name) {
- $result = $this->compile_variable_filter($compiler, $name, $output);
- if ($result !== false) {
- $output = $result;
- } else {
- // not found, throw exception
- throw new SmartyException("Unable to load variable filter '{$name}'");
- }
- }
- }
- foreach ($compiler->variable_filters as $filter) {
- if (count($filter) === 1
- && ($result = $this->compile_variable_filter($compiler, $filter[ 0 ], $output)) !== false
- ) {
- $output = $result;
- } else {
- $output = $compiler->compileTag(
- 'private_modifier',
- array(),
- array('modifierlist' => array($filter), 'value' => $output)
- );
- }
- }
- }
- $output = "\n";
- }
- return $output;
- }
-
- /**
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- * @param string $name name of variable filter
- * @param string $output embedded output
- *
- * @return string
- * @throws \SmartyException
- */
- private function compile_variable_filter(Smarty_Internal_TemplateCompilerBase $compiler, $name, $output)
- {
- $function = $compiler->getPlugin($name, 'variablefilter');
- if ($function) {
- return "{$function}({$output},\$_smarty_tpl)";
- } else {
- // not found
- return false;
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php
deleted file mode 100644
index 0f818d1b3..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php
+++ /dev/null
@@ -1,72 +0,0 @@
-smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ])) {
- $tag_info = $compiler->smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ];
- $callback = $tag_info[ 0 ];
- if (is_array($callback)) {
- if (is_object($callback[ 0 ])) {
- $callable = "array(\$_block_plugin{$this->nesting}, '{$callback[1]}')";
- $callback =
- array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]", "->{$callback[1]}");
- } else {
- $callable = "array(\$_block_plugin{$this->nesting}, '{$callback[1]}')";
- $callback =
- array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]", "::{$callback[1]}");
- }
- } else {
- $callable = "\$_block_plugin{$this->nesting}";
- $callback = array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0]", '');
- }
- } else {
- $tag_info = $compiler->default_handler_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ];
- $callback = $tag_info[ 0 ];
- if (is_array($callback)) {
- $callable = "array('{$callback[0]}', '{$callback[1]}')";
- $callback = "{$callback[1]}::{$callback[1]}";
- } else {
- $callable = null;
- }
- }
- $compiler->tag_nocache = !$tag_info[ 1 ] | $compiler->tag_nocache;
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } elseif ($compiler->template->caching && in_array($_key, $tag_info[ 2 ])) {
- $_value = str_replace('\'', "^#^", $_value);
- $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- return array($callback, $_paramsArray, $callable);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php
deleted file mode 100644
index 2591107d2..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php
+++ /dev/null
@@ -1,91 +0,0 @@
-getAttributes($compiler, $args);
- unset($_attr[ 'nocache' ]);
- if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ])) {
- $tag_info = $compiler->smarty->registered_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ];
- $is_registered = true;
- } else {
- $tag_info = $compiler->default_handler_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ];
- $is_registered = false;
- }
- // not cacheable?
- $compiler->tag_nocache = $compiler->tag_nocache || !$tag_info[ 1 ];
- // convert attributes into parameter array string
- $_paramsArray = array();
- foreach ($_attr as $_key => $_value) {
- if (is_int($_key)) {
- $_paramsArray[] = "$_key=>$_value";
- } elseif ($compiler->template->caching && in_array($_key, $tag_info[ 2 ])) {
- $_value = str_replace('\'', "^#^", $_value);
- $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
- } else {
- $_paramsArray[] = "'$_key'=>$_value";
- }
- }
- $_params = 'array(' . implode(',', $_paramsArray) . ')';
- // compile code
- if ($is_registered) {
- $output =
- "call_user_func_array( \$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0], array( {$_params},\$_smarty_tpl ) )";
- } else {
- $function = $tag_info[ 0 ];
- if (!is_array($function)) {
- $output = "{$function}({$_params},\$_smarty_tpl)";
- } else {
- $output = "{$function[0]}::{$function[1]}({$_params},\$_smarty_tpl)";
- }
- }
- if (!empty($parameter[ 'modifierlist' ])) {
- $output = $compiler->compileTag(
- 'private_modifier',
- array(),
- array(
- 'modifierlist' => $parameter[ 'modifierlist' ],
- 'value' => $output
- )
- );
- }
- $output = "\n";
- return $output;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
deleted file mode 100644
index 590cba5af..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
+++ /dev/null
@@ -1,130 +0,0 @@
-getId($_index[ 0 ]));
- if ($variable === false) {
- $compiler->trigger_template_error("special \$Smarty variable name index can not be variable", null, true);
- }
- if (!isset($compiler->smarty->security_policy)
- || $compiler->smarty->security_policy->isTrustedSpecialSmartyVar($variable, $compiler)
- ) {
- switch ($variable) {
- case 'foreach':
- case 'section':
- if (!isset(Smarty_Internal_TemplateCompilerBase::$_tag_objects[ $variable ])) {
- $class = 'Smarty_Internal_Compile_' . smarty_ucfirst_ascii($variable);
- Smarty_Internal_TemplateCompilerBase::$_tag_objects[ $variable ] = new $class;
- }
- return Smarty_Internal_TemplateCompilerBase::$_tag_objects[ $variable ]->compileSpecialVariable(
- array(),
- $compiler,
- $_index
- );
- case 'capture':
- if (class_exists('Smarty_Internal_Compile_Capture')) {
- return Smarty_Internal_Compile_Capture::compileSpecialVariable(array(), $compiler, $_index);
- }
- return '';
- case 'now':
- return 'time()';
- case 'cookies':
- if (isset($compiler->smarty->security_policy)
- && !$compiler->smarty->security_policy->allow_super_globals
- ) {
- $compiler->trigger_template_error("(secure mode) super globals not permitted");
- break;
- }
- $compiled_ref = '$_COOKIE';
- break;
- case 'get':
- case 'post':
- case 'env':
- case 'server':
- case 'session':
- case 'request':
- if (isset($compiler->smarty->security_policy)
- && !$compiler->smarty->security_policy->allow_super_globals
- ) {
- $compiler->trigger_template_error("(secure mode) super globals not permitted");
- break;
- }
- $compiled_ref = '$_' . smarty_strtoupper_ascii($variable);
- break;
- case 'template':
- return 'basename($_smarty_tpl->source->filepath)';
- case 'template_object':
- if (isset($compiler->smarty->security_policy)) {
- $compiler->trigger_template_error("(secure mode) template_object not permitted");
- break;
- }
- return '$_smarty_tpl';
- case 'current_dir':
- return 'dirname($_smarty_tpl->source->filepath)';
- case 'version':
- return "Smarty::SMARTY_VERSION";
- case 'const':
- if (isset($compiler->smarty->security_policy)
- && !$compiler->smarty->security_policy->allow_constants
- ) {
- $compiler->trigger_template_error("(secure mode) constants not permitted");
- break;
- }
- if (strpos($_index[ 1 ], '$') === false && strpos($_index[ 1 ], '\'') === false) {
- return "(defined('{$_index[1]}') ? constant('{$_index[1]}') : null)";
- } else {
- return "(defined({$_index[1]}) ? constant({$_index[1]}) : null)";
- }
- // no break
- case 'config':
- if (isset($_index[ 2 ])) {
- return "(is_array(\$tmp = \$_smarty_tpl->smarty->ext->configload->_getConfigVariable(\$_smarty_tpl, $_index[1])) ? \$tmp[$_index[2]] : null)";
- } else {
- return "\$_smarty_tpl->smarty->ext->configload->_getConfigVariable(\$_smarty_tpl, $_index[1])";
- }
- // no break
- case 'ldelim':
- return "\$_smarty_tpl->smarty->left_delimiter";
- case 'rdelim':
- return "\$_smarty_tpl->smarty->right_delimiter";
- default:
- $compiler->trigger_template_error('$smarty.' . trim($_index[ 0 ], "'") . ' is not defined');
- break;
- }
- if (isset($_index[ 1 ])) {
- array_shift($_index);
- foreach ($_index as $_ind) {
- $compiled_ref = $compiled_ref . "[$_ind]";
- }
- }
- return $compiled_ref;
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php
deleted file mode 100644
index 1cc340c18..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php
+++ /dev/null
@@ -1,34 +0,0 @@
-smarty->right_delimiter;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php
deleted file mode 100644
index 0dee20820..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_section.php
+++ /dev/null
@@ -1,462 +0,0 @@
-loopNesting++;
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $attributes = array('name' => $compiler->getId($_attr[ 'name' ]));
- unset($_attr[ 'name' ]);
- foreach ($attributes as $a => $v) {
- if ($v === false) {
- $compiler->trigger_template_error("'{$a}' attribute/variable has illegal value", null, true);
- }
- }
- $local = "\$__section_{$attributes['name']}_" . $this->counter++ . '_';
- $sectionVar = "\$_smarty_tpl->tpl_vars['__smarty_section_{$attributes['name']}']";
- $this->openTag($compiler, 'section', array('section', $compiler->nocache, $local, $sectionVar));
- // maybe nocache because of nocache variables
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- $initLocal = array();
- $initNamedProperty = array();
- $initFor = array();
- $incFor = array();
- $cmpFor = array();
- $propValue = array(
- 'index' => "{$sectionVar}->value['index']", 'show' => 'true', 'step' => 1,
- 'iteration' => "{$local}iteration",
- );
- $propType = array('index' => 2, 'iteration' => 2, 'show' => 0, 'step' => 0,);
- // search for used tag attributes
- $this->scanForProperties($attributes, $compiler);
- if (!empty($this->matchResults[ 'named' ])) {
- $namedAttr = $this->matchResults[ 'named' ];
- }
- if (isset($_attr[ 'properties' ]) && preg_match_all("/['](.*?)[']/", $_attr[ 'properties' ], $match)) {
- foreach ($match[ 1 ] as $prop) {
- if (in_array($prop, $this->nameProperties)) {
- $namedAttr[ $prop ] = true;
- } else {
- $compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
- }
- }
- }
- $namedAttr[ 'index' ] = true;
- $output = " $attr_value) {
- switch ($attr_name) {
- case 'loop':
- if (is_numeric($attr_value)) {
- $v = (int)$attr_value;
- $t = 0;
- } else {
- $v = "(is_array(@\$_loop=$attr_value) ? count(\$_loop) : max(0, (int) \$_loop))";
- $t = 1;
- }
- if ($t === 1) {
- $initLocal[ 'loop' ] = $v;
- $v = "{$local}loop";
- }
- break;
- case 'show':
- if (is_bool($attr_value)) {
- $v = $attr_value ? 'true' : 'false';
- $t = 0;
- } else {
- $v = "(bool) $attr_value";
- $t = 3;
- }
- break;
- case 'step':
- if (is_numeric($attr_value)) {
- $v = (int)$attr_value;
- $v = ($v === 0) ? 1 : $v;
- $t = 0;
- break;
- }
- $initLocal[ 'step' ] = "((int)@$attr_value) === 0 ? 1 : (int)@$attr_value";
- $v = "{$local}step";
- $t = 2;
- break;
- case 'max':
- case 'start':
- if (is_numeric($attr_value)) {
- $v = (int)$attr_value;
- $t = 0;
- break;
- }
- $v = "(int)@$attr_value";
- $t = 3;
- break;
- }
- if ($t === 3 && $compiler->getId($attr_value)) {
- $t = 1;
- }
- $propValue[ $attr_name ] = $v;
- $propType[ $attr_name ] = $t;
- }
- if (isset($namedAttr[ 'step' ])) {
- $initNamedProperty[ 'step' ] = $propValue[ 'step' ];
- }
- if (isset($namedAttr[ 'iteration' ])) {
- $propValue[ 'iteration' ] = "{$sectionVar}->value['iteration']";
- }
- $incFor[ 'iteration' ] = "{$propValue['iteration']}++";
- $initFor[ 'iteration' ] = "{$propValue['iteration']} = 1";
- if ($propType[ 'step' ] === 0) {
- if ($propValue[ 'step' ] === 1) {
- $incFor[ 'index' ] = "{$sectionVar}->value['index']++";
- } elseif ($propValue[ 'step' ] > 1) {
- $incFor[ 'index' ] = "{$sectionVar}->value['index'] += {$propValue['step']}";
- } else {
- $incFor[ 'index' ] = "{$sectionVar}->value['index'] -= " . -$propValue[ 'step' ];
- }
- } else {
- $incFor[ 'index' ] = "{$sectionVar}->value['index'] += {$propValue['step']}";
- }
- if (!isset($propValue[ 'max' ])) {
- $propValue[ 'max' ] = $propValue[ 'loop' ];
- $propType[ 'max' ] = $propType[ 'loop' ];
- } elseif ($propType[ 'max' ] !== 0) {
- $propValue[ 'max' ] = "{$propValue['max']} < 0 ? {$propValue['loop']} : {$propValue['max']}";
- $propType[ 'max' ] = 1;
- } else {
- if ($propValue[ 'max' ] < 0) {
- $propValue[ 'max' ] = $propValue[ 'loop' ];
- $propType[ 'max' ] = $propType[ 'loop' ];
- }
- }
- if (!isset($propValue[ 'start' ])) {
- $start_code =
- array(1 => "{$propValue['step']} > 0 ? ", 2 => '0', 3 => ' : ', 4 => $propValue[ 'loop' ], 5 => ' - 1');
- if ($propType[ 'loop' ] === 0) {
- $start_code[ 5 ] = '';
- $start_code[ 4 ] = $propValue[ 'loop' ] - 1;
- }
- if ($propType[ 'step' ] === 0) {
- if ($propValue[ 'step' ] > 0) {
- $start_code = array(1 => '0');
- $propType[ 'start' ] = 0;
- } else {
- $start_code[ 1 ] = $start_code[ 2 ] = $start_code[ 3 ] = '';
- $propType[ 'start' ] = $propType[ 'loop' ];
- }
- } else {
- $propType[ 'start' ] = 1;
- }
- $propValue[ 'start' ] = join('', $start_code);
- } else {
- $start_code =
- array(
- 1 => "{$propValue['start']} < 0 ? ", 2 => 'max(', 3 => "{$propValue['step']} > 0 ? ", 4 => '0',
- 5 => ' : ', 6 => '-1', 7 => ', ', 8 => "{$propValue['start']} + {$propValue['loop']}", 10 => ')',
- 11 => ' : ', 12 => 'min(', 13 => $propValue[ 'start' ], 14 => ', ',
- 15 => "{$propValue['step']} > 0 ? ", 16 => $propValue[ 'loop' ], 17 => ' : ',
- 18 => $propType[ 'loop' ] === 0 ? $propValue[ 'loop' ] - 1 : "{$propValue['loop']} - 1",
- 19 => ')'
- );
- if ($propType[ 'step' ] === 0) {
- $start_code[ 3 ] = $start_code[ 5 ] = $start_code[ 15 ] = $start_code[ 17 ] = '';
- if ($propValue[ 'step' ] > 0) {
- $start_code[ 6 ] = $start_code[ 18 ] = '';
- } else {
- $start_code[ 4 ] = $start_code[ 16 ] = '';
- }
- }
- if ($propType[ 'start' ] === 0) {
- if ($propType[ 'loop' ] === 0) {
- $start_code[ 8 ] = $propValue[ 'start' ] + $propValue[ 'loop' ];
- }
- $propType[ 'start' ] = $propType[ 'step' ] + $propType[ 'loop' ];
- $start_code[ 1 ] = '';
- if ($propValue[ 'start' ] < 0) {
- for ($i = 11; $i <= 19; $i++) {
- $start_code[ $i ] = '';
- }
- if ($propType[ 'start' ] === 0) {
- $start_code = array(
- max(
- $propValue[ 'step' ] > 0 ? 0 : -1,
- $propValue[ 'start' ] + $propValue[ 'loop' ]
- )
- );
- }
- } else {
- for ($i = 1; $i <= 11; $i++) {
- $start_code[ $i ] = '';
- }
- if ($propType[ 'start' ] === 0) {
- $start_code =
- array(
- min(
- $propValue[ 'step' ] > 0 ? $propValue[ 'loop' ] : $propValue[ 'loop' ] - 1,
- $propValue[ 'start' ]
- )
- );
- }
- }
- }
- $propValue[ 'start' ] = join('', $start_code);
- }
- if ($propType[ 'start' ] !== 0) {
- $initLocal[ 'start' ] = $propValue[ 'start' ];
- $propValue[ 'start' ] = "{$local}start";
- }
- $initFor[ 'index' ] = "{$sectionVar}->value['index'] = {$propValue['start']}";
- if (!isset($_attr[ 'start' ]) && !isset($_attr[ 'step' ]) && !isset($_attr[ 'max' ])) {
- $propValue[ 'total' ] = $propValue[ 'loop' ];
- $propType[ 'total' ] = $propType[ 'loop' ];
- } else {
- $propType[ 'total' ] =
- $propType[ 'start' ] + $propType[ 'loop' ] + $propType[ 'step' ] + $propType[ 'max' ];
- if ($propType[ 'total' ] === 0) {
- $propValue[ 'total' ] =
- min(
- ceil(
- ($propValue[ 'step' ] > 0 ? $propValue[ 'loop' ] - $propValue[ 'start' ] :
- (int)$propValue[ 'start' ] + 1) / abs($propValue[ 'step' ])
- ),
- $propValue[ 'max' ]
- );
- } else {
- $total_code = array(
- 1 => 'min(', 2 => 'ceil(', 3 => '(', 4 => "{$propValue['step']} > 0 ? ",
- 5 => $propValue[ 'loop' ], 6 => ' - ', 7 => $propValue[ 'start' ], 8 => ' : ',
- 9 => $propValue[ 'start' ], 10 => '+ 1', 11 => ')', 12 => '/ ', 13 => 'abs(',
- 14 => $propValue[ 'step' ], 15 => ')', 16 => ')', 17 => ", {$propValue['max']})",
- );
- if (!isset($propValue[ 'max' ])) {
- $total_code[ 1 ] = $total_code[ 17 ] = '';
- }
- if ($propType[ 'loop' ] + $propType[ 'start' ] === 0) {
- $total_code[ 5 ] = $propValue[ 'loop' ] - $propValue[ 'start' ];
- $total_code[ 6 ] = $total_code[ 7 ] = '';
- }
- if ($propType[ 'start' ] === 0) {
- $total_code[ 9 ] = (int)$propValue[ 'start' ] + 1;
- $total_code[ 10 ] = '';
- }
- if ($propType[ 'step' ] === 0) {
- $total_code[ 13 ] = $total_code[ 15 ] = '';
- if ($propValue[ 'step' ] === 1 || $propValue[ 'step' ] === -1) {
- $total_code[ 2 ] = $total_code[ 12 ] = $total_code[ 14 ] = $total_code[ 16 ] = '';
- } elseif ($propValue[ 'step' ] < 0) {
- $total_code[ 14 ] = -$propValue[ 'step' ];
- }
- $total_code[ 4 ] = '';
- if ($propValue[ 'step' ] > 0) {
- $total_code[ 8 ] = $total_code[ 9 ] = $total_code[ 10 ] = '';
- } else {
- $total_code[ 5 ] = $total_code[ 6 ] = $total_code[ 7 ] = $total_code[ 8 ] = '';
- }
- }
- $propValue[ 'total' ] = join('', $total_code);
- }
- }
- if (isset($namedAttr[ 'loop' ])) {
- $initNamedProperty[ 'loop' ] = "'loop' => {$propValue['loop']}";
- }
- if (isset($namedAttr[ 'total' ])) {
- $initNamedProperty[ 'total' ] = "'total' => {$propValue['total']}";
- if ($propType[ 'total' ] > 0) {
- $propValue[ 'total' ] = "{$sectionVar}->value['total']";
- }
- } elseif ($propType[ 'total' ] > 0) {
- $initLocal[ 'total' ] = $propValue[ 'total' ];
- $propValue[ 'total' ] = "{$local}total";
- }
- $cmpFor[ 'iteration' ] = "{$propValue['iteration']} <= {$propValue['total']}";
- foreach ($initLocal as $key => $code) {
- $output .= "{$local}{$key} = {$code};\n";
- }
- $_vars = 'array(' . join(', ', $initNamedProperty) . ')';
- $output .= "{$sectionVar} = new Smarty_Variable({$_vars});\n";
- $cond_code = "{$propValue['total']} !== 0";
- if ($propType[ 'total' ] === 0) {
- if ($propValue[ 'total' ] === 0) {
- $cond_code = 'false';
- } else {
- $cond_code = 'true';
- }
- }
- if ($propType[ 'show' ] > 0) {
- $output .= "{$local}show = {$propValue['show']} ? {$cond_code} : false;\n";
- $output .= "if ({$local}show) {\n";
- } elseif ($propValue[ 'show' ] === 'true') {
- $output .= "if ({$cond_code}) {\n";
- } else {
- $output .= "if (false) {\n";
- }
- $jinit = join(', ', $initFor);
- $jcmp = join(', ', $cmpFor);
- $jinc = join(', ', $incFor);
- $output .= "for ({$jinit}; {$jcmp}; {$jinc}){\n";
- if (isset($namedAttr[ 'rownum' ])) {
- $output .= "{$sectionVar}->value['rownum'] = {$propValue['iteration']};\n";
- }
- if (isset($namedAttr[ 'index_prev' ])) {
- $output .= "{$sectionVar}->value['index_prev'] = {$propValue['index']} - {$propValue['step']};\n";
- }
- if (isset($namedAttr[ 'index_next' ])) {
- $output .= "{$sectionVar}->value['index_next'] = {$propValue['index']} + {$propValue['step']};\n";
- }
- if (isset($namedAttr[ 'first' ])) {
- $output .= "{$sectionVar}->value['first'] = ({$propValue['iteration']} === 1);\n";
- }
- if (isset($namedAttr[ 'last' ])) {
- $output .= "{$sectionVar}->value['last'] = ({$propValue['iteration']} === {$propValue['total']});\n";
- }
- $output .= '?>';
- return $output;
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Sectionelse Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {sectionelse} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- list($openTag, $nocache, $local, $sectionVar) = $this->closeTag($compiler, array('section'));
- $this->openTag($compiler, 'sectionelse', array('sectionelse', $nocache, $local, $sectionVar));
- return "";
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Sectionclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {/section} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $compiler->loopNesting--;
- // must endblock be nocache?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- list($openTag, $compiler->nocache, $local, $sectionVar) =
- $this->closeTag($compiler, array('section', 'sectionelse'));
- $output = "';
- return $output;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php
deleted file mode 100644
index 70e2e2f9f..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php
+++ /dev/null
@@ -1,68 +0,0 @@
-variable_filter_stack[] = $compiler->variable_filters;
- $compiler->variable_filters = $parameter[ 'modifier_list' ];
- // this tag does not return compiled code
- $compiler->has_code = false;
- return true;
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Setfilterclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {/setfilter} tag
- * This tag does not generate compiled output. It resets variable filter.
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $_attr = $this->getAttributes($compiler, $args);
- // reset variable filter to previous state
- if (count($compiler->variable_filter_stack)) {
- $compiler->variable_filters = array_pop($compiler->variable_filter_stack);
- } else {
- $compiler->variable_filters = array();
- }
- // this tag does not return compiled code
- $compiler->has_code = false;
- return true;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php
deleted file mode 100644
index 5aa3a7330..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compile_while.php
+++ /dev/null
@@ -1,100 +0,0 @@
-loopNesting++;
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- $this->openTag($compiler, 'while', $compiler->nocache);
- if (!array_key_exists('if condition', $parameter)) {
- $compiler->trigger_template_error('missing while condition', null, true);
- }
- // maybe nocache because of nocache variables
- $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
- if (is_array($parameter[ 'if condition' ])) {
- if ($compiler->nocache) {
- // create nocache var to make it know for further compiling
- if (is_array($parameter[ 'if condition' ][ 'var' ])) {
- $var = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
- } else {
- $var = $parameter[ 'if condition' ][ 'var' ];
- }
- $compiler->setNocacheInVariable($var);
- }
- $prefixVar = $compiler->getNewPrefixVariable();
- $assignCompiler = new Smarty_Internal_Compile_Assign();
- $assignAttr = array();
- $assignAttr[][ 'value' ] = $prefixVar;
- if (is_array($parameter[ 'if condition' ][ 'var' ])) {
- $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
- $_output = "";
- $_output .= $assignCompiler->compile(
- $assignAttr,
- $compiler,
- array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ])
- );
- } else {
- $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ];
- $_output = "";
- $_output .= $assignCompiler->compile($assignAttr, $compiler, array());
- }
- return $_output;
- } else {
- return "";
- }
- }
-}
-
-/**
- * Smarty Internal Plugin Compile Whileclose Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
-class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase
-{
- /**
- * Compiles code for the {/while} tag
- *
- * @param array $args array with attributes from parser
- * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
- *
- * @return string compiled code
- */
- public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $compiler->loopNesting--;
- // must endblock be nocache?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- $compiler->nocache = $this->closeTag($compiler, array('while'));
- return "\n";
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compilebase.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compilebase.php
deleted file mode 100644
index 2a32e4373..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_compilebase.php
+++ /dev/null
@@ -1,203 +0,0 @@
- true, 0 => false, 'true' => true, 'false' => false);
-
- /**
- * Mapping array with attributes as key
- *
- * @var array
- */
- public $mapCache = array();
-
- /**
- * This function checks if the attributes passed are valid
- * The attributes passed for the tag to compile are checked against the list of required and
- * optional attributes. Required attributes must be present. Optional attributes are check against
- * the corresponding list. The keyword '_any' specifies that any attribute will be accepted
- * as valid
- *
- * @param object $compiler compiler object
- * @param array $attributes attributes applied to the tag
- *
- * @return array of mapped attributes for further processing
- */
- public function getAttributes($compiler, $attributes)
- {
- $_indexed_attr = array();
- if (!isset($this->mapCache[ 'option' ])) {
- $this->mapCache[ 'option' ] = array_fill_keys($this->option_flags, true);
- }
- foreach ($attributes as $key => $mixed) {
- // shorthand ?
- if (!is_array($mixed)) {
- // option flag ?
- if (isset($this->mapCache[ 'option' ][ trim($mixed, '\'"') ])) {
- $_indexed_attr[ trim($mixed, '\'"') ] = true;
- // shorthand attribute ?
- } elseif (isset($this->shorttag_order[ $key ])) {
- $_indexed_attr[ $this->shorttag_order[ $key ] ] = $mixed;
- } else {
- // too many shorthands
- $compiler->trigger_template_error('too many shorthand attributes', null, true);
- }
- // named attribute
- } else {
- foreach ($mixed as $k => $v) {
- // option flag?
- if (isset($this->mapCache[ 'option' ][ $k ])) {
- if (is_bool($v)) {
- $_indexed_attr[ $k ] = $v;
- } else {
- if (is_string($v)) {
- $v = trim($v, '\'" ');
- }
- if (isset($this->optionMap[ $v ])) {
- $_indexed_attr[ $k ] = $this->optionMap[ $v ];
- } else {
- $compiler->trigger_template_error(
- "illegal value '" . var_export($v, true) .
- "' for option flag '{$k}'",
- null,
- true
- );
- }
- }
- // must be named attribute
- } else {
- $_indexed_attr[ $k ] = $v;
- }
- }
- }
- }
- // check if all required attributes present
- foreach ($this->required_attributes as $attr) {
- if (!isset($_indexed_attr[ $attr ])) {
- $compiler->trigger_template_error("missing '{$attr}' attribute", null, true);
- }
- }
- // check for not allowed attributes
- if ($this->optional_attributes !== array('_any')) {
- if (!isset($this->mapCache[ 'all' ])) {
- $this->mapCache[ 'all' ] =
- array_fill_keys(
- array_merge(
- $this->required_attributes,
- $this->optional_attributes,
- $this->option_flags
- ),
- true
- );
- }
- foreach ($_indexed_attr as $key => $dummy) {
- if (!isset($this->mapCache[ 'all' ][ $key ]) && $key !== 0) {
- $compiler->trigger_template_error("unexpected '{$key}' attribute", null, true);
- }
- }
- }
- // default 'false' for all option flags not set
- foreach ($this->option_flags as $flag) {
- if (!isset($_indexed_attr[ $flag ])) {
- $_indexed_attr[ $flag ] = false;
- }
- }
- if (isset($_indexed_attr[ 'nocache' ]) && $_indexed_attr[ 'nocache' ]) {
- $compiler->tag_nocache = true;
- }
- return $_indexed_attr;
- }
-
- /**
- * Push opening tag name on stack
- * Optionally additional data can be saved on stack
- *
- * @param object $compiler compiler object
- * @param string $openTag the opening tag's name
- * @param mixed $data optional data saved
- */
- public function openTag($compiler, $openTag, $data = null)
- {
- array_push($compiler->_tag_stack, array($openTag, $data));
- }
-
- /**
- * Pop closing tag
- * Raise an error if this stack-top doesn't match with expected opening tags
- *
- * @param object $compiler compiler object
- * @param array|string $expectedTag the expected opening tag names
- *
- * @return mixed any type the opening tag's name or saved data
- */
- public function closeTag($compiler, $expectedTag)
- {
- if (count($compiler->_tag_stack) > 0) {
- // get stacked info
- list($_openTag, $_data) = array_pop($compiler->_tag_stack);
- // open tag must match with the expected ones
- if (in_array($_openTag, (array)$expectedTag)) {
- if (is_null($_data)) {
- // return opening tag
- return $_openTag;
- } else {
- // return restored data
- return $_data;
- }
- }
- // wrong nesting of tags
- $compiler->trigger_template_error("unclosed '{$compiler->smarty->left_delimiter}{$_openTag}{$compiler->smarty->right_delimiter}' tag");
- return;
- }
- // wrong nesting of tags
- $compiler->trigger_template_error('unexpected closing tag', null, true);
- return;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
deleted file mode 100644
index 469b9667a..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
+++ /dev/null
@@ -1,211 +0,0 @@
-smarty = $smarty;
- // get required plugins
- $this->lexer_class = $lexer_class;
- $this->parser_class = $parser_class;
- $this->smarty = $smarty;
- $this->config_data[ 'sections' ] = array();
- $this->config_data[ 'vars' ] = array();
- }
-
- /**
- * Method to compile Smarty config source.
- *
- * @param Smarty_Internal_Template $template
- *
- * @return bool true if compiling succeeded, false if it failed
- * @throws \SmartyException
- */
- public function compileTemplate(Smarty_Internal_Template $template)
- {
- $this->template = $template;
- $this->template->compiled->file_dependency[ $this->template->source->uid ] =
- array(
- $this->template->source->filepath,
- $this->template->source->getTimeStamp(),
- $this->template->source->type
- );
- if ($this->smarty->debugging) {
- if (!isset($this->smarty->_debug)) {
- $this->smarty->_debug = new Smarty_Internal_Debug();
- }
- $this->smarty->_debug->start_compile($this->template);
- }
- // init the lexer/parser to compile the config file
- /* @var Smarty_Internal_ConfigFileLexer $this->lex */
- $this->lex = new $this->lexer_class(
- str_replace(
- array(
- "\r\n",
- "\r"
- ),
- "\n",
- $template->source->getContent()
- ) . "\n",
- $this
- );
- /* @var Smarty_Internal_ConfigFileParser $this->parser */
- $this->parser = new $this->parser_class($this->lex, $this);
- if (function_exists('mb_internal_encoding')
- && function_exists('ini_get')
- && ((int)ini_get('mbstring.func_overload')) & 2
- ) {
- $mbEncoding = mb_internal_encoding();
- mb_internal_encoding('ASCII');
- } else {
- $mbEncoding = null;
- }
- if ($this->smarty->_parserdebug) {
- $this->parser->PrintTrace();
- }
- // get tokens from lexer and parse them
- while ($this->lex->yylex()) {
- if ($this->smarty->_parserdebug) {
- echo " Parsing {$this->parser->yyTokenName[$this->lex->token]} Token {$this->lex->value} Line {$this->lex->line} \n";
- }
- $this->parser->doParse($this->lex->token, $this->lex->value);
- }
- // finish parsing process
- $this->parser->doParse(0, 0);
- if ($mbEncoding) {
- mb_internal_encoding($mbEncoding);
- }
- if ($this->smarty->debugging) {
- $this->smarty->_debug->end_compile($this->template);
- }
- // template header code
- $template_header = sprintf(
- "\n",
- Smarty::SMARTY_VERSION,
- date("Y-m-d H:i:s"),
- str_replace('*/', '* /' , $this->template->source->filepath)
- );
- $code = 'smarty->ext->configLoad->_loadConfigVars($_smarty_tpl, ' .
- var_export($this->config_data, true) . '); ?>';
- return $template_header . $this->template->smarty->ext->_codeFrame->create($this->template, $code);
- }
-
- /**
- * display compiler error messages without dying
- * If parameter $args is empty it is a parser detected syntax error.
- * In this case the parser is called to obtain information about expected tokens.
- * If parameter $args contains a string this is used as error message
- *
- * @param string $args individual error message or null
- *
- * @throws SmartyCompilerException
- */
- public function trigger_config_file_error($args = null)
- {
- // get config source line which has error
- $line = $this->lex->line;
- if (isset($args)) {
- // $line--;
- }
- $match = preg_split("/\n/", $this->lex->data);
- $error_text =
- "Syntax error in config file '{$this->template->source->filepath}' on line {$line} '{$match[$line - 1]}' ";
- if (isset($args)) {
- // individual error message
- $error_text .= $args;
- } else {
- // expected token from parser
- foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) {
- $exp_token = $this->parser->yyTokenName[ $token ];
- if (isset($this->lex->smarty_token_names[ $exp_token ])) {
- // token type from lexer
- $expect[] = '"' . $this->lex->smarty_token_names[ $exp_token ] . '"';
- } else {
- // otherwise internal token name
- $expect[] = $this->parser->yyTokenName[ $token ];
- }
- }
- // output parser error message
- $error_text .= ' - Unexpected "' . $this->lex->value . '", expected one of: ' . implode(' , ', $expect);
- }
- throw new SmartyCompilerException($error_text);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php
deleted file mode 100644
index 36fdb76ee..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_configfileparser.php
+++ /dev/null
@@ -1,1046 +0,0 @@
- 20, 1 => 2),
- array(0 => 21, 1 => 1),
- array(0 => 22, 1 => 2),
- array(0 => 22, 1 => 0),
- array(0 => 24, 1 => 5),
- array(0 => 24, 1 => 6),
- array(0 => 23, 1 => 2),
- array(0 => 23, 1 => 2),
- array(0 => 23, 1 => 0),
- array(0 => 26, 1 => 3),
- array(0 => 27, 1 => 1),
- array(0 => 27, 1 => 1),
- array(0 => 27, 1 => 1),
- array(0 => 27, 1 => 1),
- array(0 => 27, 1 => 1),
- array(0 => 27, 1 => 3),
- array(0 => 27, 1 => 2),
- array(0 => 27, 1 => 1),
- array(0 => 27, 1 => 1),
- array(0 => 25, 1 => 1),
- array(0 => 25, 1 => 2),
- array(0 => 25, 1 => 3),
- );
-
- public static $yyReduceMap = array(
- 0 => 0,
- 2 => 0,
- 3 => 0,
- 19 => 0,
- 20 => 0,
- 21 => 0,
- 1 => 1,
- 4 => 4,
- 5 => 5,
- 6 => 6,
- 7 => 7,
- 8 => 8,
- 9 => 9,
- 10 => 10,
- 11 => 11,
- 12 => 12,
- 13 => 13,
- 14 => 14,
- 15 => 15,
- 16 => 16,
- 17 => 17,
- 18 => 17,
- );
-
- /**
- * helper map
- *
- * @var array
- */
- private static $escapes_single = array(
- '\\' => '\\',
- '\'' => '\''
- );
-
- /**
- * result status
- *
- * @var bool
- */
- public $successful = true;
-
- /**
- * return value
- *
- * @var mixed
- */
- public $retvalue = 0;
-
- /**
- * @var
- */
- public $yymajor;
-
- /**
- * compiler object
- *
- * @var Smarty_Internal_Config_File_Compiler
- */
- public $compiler = null;
-
- /**
- * smarty object
- *
- * @var Smarty
- */
- public $smarty = null;
-
- public $yyTraceFILE;
-
- public $yyTracePrompt;
-
- public $yyidx;
-
- public $yyerrcnt;
-
- public $yystack = array();
-
- public $yyTokenName = array(
- '$', 'OPENB', 'SECTION', 'CLOSEB',
- 'DOT', 'ID', 'EQUAL', 'FLOAT',
- 'INT', 'BOOL', 'SINGLE_QUOTED_STRING', 'DOUBLE_QUOTED_STRING',
- 'TRIPPLE_QUOTES', 'TRIPPLE_TEXT', 'TRIPPLE_QUOTES_END', 'NAKED_STRING',
- 'OTHER', 'NEWLINE', 'COMMENTSTART', 'error',
- 'start', 'global_vars', 'sections', 'var_list',
- 'section', 'newline', 'var', 'value',
- );
-
- /**
- * lexer object
- *
- * @var Smarty_Internal_Configfilelexer
- */
- private $lex;
-
- /**
- * internal error flag
- *
- * @var bool
- */
- private $internalError = false;
-
- /**
- * copy of config_overwrite property
- *
- * @var bool
- */
- private $configOverwrite = false;
-
- /**
- * copy of config_read_hidden property
- *
- * @var bool
- */
- private $configReadHidden = false;
-
- private $_retvalue;
-
- /**
- * constructor
- *
- * @param Smarty_Internal_Configfilelexer $lex
- * @param Smarty_Internal_Config_File_Compiler $compiler
- */
- public function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler)
- {
- $this->lex = $lex;
- $this->smarty = $compiler->smarty;
- $this->compiler = $compiler;
- $this->configOverwrite = $this->smarty->config_overwrite;
- $this->configReadHidden = $this->smarty->config_read_hidden;
- }
-
- public static function yy_destructor($yymajor, $yypminor)
- {
- switch ($yymajor) {
- default:
- break; /* If no destructor action specified: do nothing */
- }
- }
-
- /**
- * parse single quoted string
- * remove outer quotes
- * unescape inner quotes
- *
- * @param string $qstr
- *
- * @return string
- */
- private static function parse_single_quoted_string($qstr)
- {
- $escaped_string = substr($qstr, 1, strlen($qstr) - 2); //remove outer quotes
- $ss = preg_split('/(\\\\.)/', $escaped_string, -1, PREG_SPLIT_DELIM_CAPTURE);
- $str = '';
- foreach ($ss as $s) {
- if (strlen($s) === 2 && $s[ 0 ] === '\\') {
- if (isset(self::$escapes_single[ $s[ 1 ] ])) {
- $s = self::$escapes_single[ $s[ 1 ] ];
- }
- }
- $str .= $s;
- }
- return $str;
- } /* Index of top element in stack */
- /**
- * parse double quoted string
- *
- * @param string $qstr
- *
- * @return string
- */
- private static function parse_double_quoted_string($qstr)
- {
- $inner_str = substr($qstr, 1, strlen($qstr) - 2);
- return stripcslashes($inner_str);
- } /* Shifts left before out of the error */
- /**
- * parse triple quoted string
- *
- * @param string $qstr
- *
- * @return string
- */
- private static function parse_tripple_double_quoted_string($qstr)
- {
- return stripcslashes($qstr);
- } /* The parser's stack */
- public function Trace($TraceFILE, $zTracePrompt)
- {
- if (!$TraceFILE) {
- $zTracePrompt = 0;
- } elseif (!$zTracePrompt) {
- $TraceFILE = 0;
- }
- $this->yyTraceFILE = $TraceFILE;
- $this->yyTracePrompt = $zTracePrompt;
- }
-
- public function PrintTrace()
- {
- $this->yyTraceFILE = fopen('php://output', 'w');
- $this->yyTracePrompt = ' ';
- }
-
- public function tokenName($tokenType)
- {
- if ($tokenType === 0) {
- return 'End of Input';
- }
- if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) {
- return $this->yyTokenName[ $tokenType ];
- } else {
- return 'Unknown';
- }
- }
-
- public function yy_pop_parser_stack()
- {
- if (empty($this->yystack)) {
- return;
- }
- $yytos = array_pop($this->yystack);
- if ($this->yyTraceFILE && $this->yyidx >= 0) {
- fwrite(
- $this->yyTraceFILE,
- $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[ $yytos->major ] .
- "\n"
- );
- }
- $yymajor = $yytos->major;
- self::yy_destructor($yymajor, $yytos->minor);
- $this->yyidx--;
- return $yymajor;
- }
-
- public function __destruct()
- {
- while ($this->yystack !== array()) {
- $this->yy_pop_parser_stack();
- }
- if (is_resource($this->yyTraceFILE)) {
- fclose($this->yyTraceFILE);
- }
- }
-
- public function yy_get_expected_tokens($token)
- {
- static $res3 = array();
- static $res4 = array();
- $state = $this->yystack[ $this->yyidx ]->stateno;
- $expected = self::$yyExpectedTokens[ $state ];
- if (isset($res3[ $state ][ $token ])) {
- if ($res3[ $state ][ $token ]) {
- return $expected;
- }
- } else {
- if ($res3[ $state ][ $token ] = in_array($token, self::$yyExpectedTokens[ $state ], true)) {
- return $expected;
- }
- }
- $stack = $this->yystack;
- $yyidx = $this->yyidx;
- do {
- $yyact = $this->yy_find_shift_action($token);
- if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
- // reduce action
- $done = 0;
- do {
- if ($done++ === 100) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // too much recursion prevents proper detection
- // so give up
- return array_unique($expected);
- }
- $yyruleno = $yyact - self::YYNSTATE;
- $this->yyidx -= self::$yyRuleInfo[ $yyruleno ][ 1 ];
- $nextstate = $this->yy_find_reduce_action(
- $this->yystack[ $this->yyidx ]->stateno,
- self::$yyRuleInfo[ $yyruleno ][ 0 ]
- );
- if (isset(self::$yyExpectedTokens[ $nextstate ])) {
- $expected = array_merge($expected, self::$yyExpectedTokens[ $nextstate ]);
- if (isset($res4[ $nextstate ][ $token ])) {
- if ($res4[ $nextstate ][ $token ]) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return array_unique($expected);
- }
- } else {
- if ($res4[ $nextstate ][ $token ] =
- in_array($token, self::$yyExpectedTokens[ $nextstate ], true)) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return array_unique($expected);
- }
- }
- }
- if ($nextstate < self::YYNSTATE) {
- // we need to shift a non-terminal
- $this->yyidx++;
- $x = new TPC_yyStackEntry;
- $x->stateno = $nextstate;
- $x->major = self::$yyRuleInfo[ $yyruleno ][ 0 ];
- $this->yystack[ $this->yyidx ] = $x;
- continue 2;
- } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // the last token was just ignored, we can't accept
- // by ignoring input, this is in essence ignoring a
- // syntax error!
- return array_unique($expected);
- } elseif ($nextstate === self::YY_NO_ACTION) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // input accepted, but not shifted (I guess)
- return $expected;
- } else {
- $yyact = $nextstate;
- }
- } while (true);
- }
- break;
- } while (true);
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return array_unique($expected);
- }
-
- public function yy_is_expected_token($token)
- {
- static $res = array();
- static $res2 = array();
- if ($token === 0) {
- return true; // 0 is not part of this
- }
- $state = $this->yystack[ $this->yyidx ]->stateno;
- if (isset($res[ $state ][ $token ])) {
- if ($res[ $state ][ $token ]) {
- return true;
- }
- } else {
- if ($res[ $state ][ $token ] = in_array($token, self::$yyExpectedTokens[ $state ], true)) {
- return true;
- }
- }
- $stack = $this->yystack;
- $yyidx = $this->yyidx;
- do {
- $yyact = $this->yy_find_shift_action($token);
- if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
- // reduce action
- $done = 0;
- do {
- if ($done++ === 100) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // too much recursion prevents proper detection
- // so give up
- return true;
- }
- $yyruleno = $yyact - self::YYNSTATE;
- $this->yyidx -= self::$yyRuleInfo[ $yyruleno ][ 1 ];
- $nextstate = $this->yy_find_reduce_action(
- $this->yystack[ $this->yyidx ]->stateno,
- self::$yyRuleInfo[ $yyruleno ][ 0 ]
- );
- if (isset($res2[ $nextstate ][ $token ])) {
- if ($res2[ $nextstate ][ $token ]) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return true;
- }
- } else {
- if ($res2[ $nextstate ][ $token ] =
- (isset(self::$yyExpectedTokens[ $nextstate ]) &&
- in_array($token, self::$yyExpectedTokens[ $nextstate ], true))) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return true;
- }
- }
- if ($nextstate < self::YYNSTATE) {
- // we need to shift a non-terminal
- $this->yyidx++;
- $x = new TPC_yyStackEntry;
- $x->stateno = $nextstate;
- $x->major = self::$yyRuleInfo[ $yyruleno ][ 0 ];
- $this->yystack[ $this->yyidx ] = $x;
- continue 2;
- } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- if (!$token) {
- // end of input: this is valid
- return true;
- }
- // the last token was just ignored, we can't accept
- // by ignoring input, this is in essence ignoring a
- // syntax error!
- return false;
- } elseif ($nextstate === self::YY_NO_ACTION) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // input accepted, but not shifted (I guess)
- return true;
- } else {
- $yyact = $nextstate;
- }
- } while (true);
- }
- break;
- } while (true);
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return true;
- }
-
- public function yy_find_shift_action($iLookAhead)
- {
- $stateno = $this->yystack[ $this->yyidx ]->stateno;
- /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */
- if (!isset(self::$yy_shift_ofst[ $stateno ])) {
- // no shift actions
- return self::$yy_default[ $stateno ];
- }
- $i = self::$yy_shift_ofst[ $stateno ];
- if ($i === self::YY_SHIFT_USE_DFLT) {
- return self::$yy_default[ $stateno ];
- }
- if ($iLookAhead === self::YYNOCODE) {
- return self::YY_NO_ACTION;
- }
- $i += $iLookAhead;
- if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
- self::$yy_lookahead[ $i ] != $iLookAhead) {
- if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)
- && ($iFallback = self::$yyFallback[ $iLookAhead ]) != 0) {
- if ($this->yyTraceFILE) {
- fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'FALLBACK ' .
- $this->yyTokenName[ $iLookAhead ] . ' => ' .
- $this->yyTokenName[ $iFallback ] . "\n");
- }
- return $this->yy_find_shift_action($iFallback);
- }
- return self::$yy_default[ $stateno ];
- } else {
- return self::$yy_action[ $i ];
- }
- }
-
- public function yy_find_reduce_action($stateno, $iLookAhead)
- {
- /* $stateno = $this->yystack[$this->yyidx]->stateno; */
- if (!isset(self::$yy_reduce_ofst[ $stateno ])) {
- return self::$yy_default[ $stateno ];
- }
- $i = self::$yy_reduce_ofst[ $stateno ];
- if ($i === self::YY_REDUCE_USE_DFLT) {
- return self::$yy_default[ $stateno ];
- }
- if ($iLookAhead === self::YYNOCODE) {
- return self::YY_NO_ACTION;
- }
- $i += $iLookAhead;
- if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
- self::$yy_lookahead[ $i ] != $iLookAhead) {
- return self::$yy_default[ $stateno ];
- } else {
- return self::$yy_action[ $i ];
- }
- }
-
- public function yy_shift($yyNewState, $yyMajor, $yypMinor)
- {
- $this->yyidx++;
- if ($this->yyidx >= self::YYSTACKDEPTH) {
- $this->yyidx--;
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
- }
- while ($this->yyidx >= 0) {
- $this->yy_pop_parser_stack();
- }
- // line 239 "../smarty/lexer/smarty_internal_configfileparser.y"
- $this->internalError = true;
- $this->compiler->trigger_config_file_error('Stack overflow in configfile parser');
- return;
- }
- $yytos = new TPC_yyStackEntry;
- $yytos->stateno = $yyNewState;
- $yytos->major = $yyMajor;
- $yytos->minor = $yypMinor;
- $this->yystack[] = $yytos;
- if ($this->yyTraceFILE && $this->yyidx > 0) {
- fprintf(
- $this->yyTraceFILE,
- "%sShift %d\n",
- $this->yyTracePrompt,
- $yyNewState
- );
- fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt);
- for ($i = 1; $i <= $this->yyidx; $i++) {
- fprintf(
- $this->yyTraceFILE,
- " %s",
- $this->yyTokenName[ $this->yystack[ $i ]->major ]
- );
- }
- fwrite($this->yyTraceFILE, "\n");
- }
- }
-
- public function yy_r0()
- {
- $this->_retvalue = null;
- }
-
- public function yy_r1()
- {
- $this->add_global_vars($this->yystack[ $this->yyidx + 0 ]->minor);
- $this->_retvalue = null;
- }
-
- public function yy_r4()
- {
- $this->add_section_vars($this->yystack[ $this->yyidx + -3 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor);
- $this->_retvalue = null;
- }
-
- // line 245 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r5()
- {
- if ($this->configReadHidden) {
- $this->add_section_vars(
- $this->yystack[ $this->yyidx + -3 ]->minor,
- $this->yystack[ $this->yyidx + 0 ]->minor
- );
- }
- $this->_retvalue = null;
- }
-
- // line 250 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r6()
- {
- $this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor;
- }
-
- // line 264 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r7()
- {
- $this->_retvalue =
- array_merge($this->yystack[ $this->yyidx + -1 ]->minor, array($this->yystack[ $this->yyidx + 0 ]->minor));
- }
-
- // line 269 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r8()
- {
- $this->_retvalue = array();
- }
-
- // line 277 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r9()
- {
- $this->_retvalue =
- array(
- 'key' => $this->yystack[ $this->yyidx + -2 ]->minor,
- 'value' => $this->yystack[ $this->yyidx + 0 ]->minor
- );
- }
-
- // line 281 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r10()
- {
- $this->_retvalue = (float)$this->yystack[ $this->yyidx + 0 ]->minor;
- }
-
- // line 285 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r11()
- {
- $this->_retvalue = (int)$this->yystack[ $this->yyidx + 0 ]->minor;
- }
-
- // line 291 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r12()
- {
- $this->_retvalue = $this->parse_bool($this->yystack[ $this->yyidx + 0 ]->minor);
- }
-
- // line 296 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r13()
- {
- $this->_retvalue = self::parse_single_quoted_string($this->yystack[ $this->yyidx + 0 ]->minor);
- }
-
- // line 300 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r14()
- {
- $this->_retvalue = self::parse_double_quoted_string($this->yystack[ $this->yyidx + 0 ]->minor);
- }
-
- // line 304 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r15()
- {
- $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[ $this->yyidx + -1 ]->minor);
- }
-
- // line 308 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r16()
- {
- $this->_retvalue = '';
- }
-
- // line 312 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_r17()
- {
- $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
- }
-
- // line 316 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_reduce($yyruleno)
- {
- if ($this->yyTraceFILE && $yyruleno >= 0
- && $yyruleno < count(self::$yyRuleName)) {
- fprintf(
- $this->yyTraceFILE,
- "%sReduce (%d) [%s].\n",
- $this->yyTracePrompt,
- $yyruleno,
- self::$yyRuleName[ $yyruleno ]
- );
- }
- $this->_retvalue = $yy_lefthand_side = null;
- if (isset(self::$yyReduceMap[ $yyruleno ])) {
- // call the action
- $this->_retvalue = null;
- $this->{'yy_r' . self::$yyReduceMap[ $yyruleno ]}();
- $yy_lefthand_side = $this->_retvalue;
- }
- $yygoto = self::$yyRuleInfo[ $yyruleno ][ 0 ];
- $yysize = self::$yyRuleInfo[ $yyruleno ][ 1 ];
- $this->yyidx -= $yysize;
- for ($i = $yysize; $i; $i--) {
- // pop all of the right-hand side parameters
- array_pop($this->yystack);
- }
- $yyact = $this->yy_find_reduce_action($this->yystack[ $this->yyidx ]->stateno, $yygoto);
- if ($yyact < self::YYNSTATE) {
- if (!$this->yyTraceFILE && $yysize) {
- $this->yyidx++;
- $x = new TPC_yyStackEntry;
- $x->stateno = $yyact;
- $x->major = $yygoto;
- $x->minor = $yy_lefthand_side;
- $this->yystack[ $this->yyidx ] = $x;
- } else {
- $this->yy_shift($yyact, $yygoto, $yy_lefthand_side);
- }
- } elseif ($yyact === self::YYNSTATE + self::YYNRULE + 1) {
- $this->yy_accept();
- }
- }
-
- // line 320 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_parse_failed()
- {
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
- }
- while ($this->yyidx >= 0) {
- $this->yy_pop_parser_stack();
- }
- }
-
- // line 324 "../smarty/lexer/smarty_internal_configfileparser.y"
- public function yy_syntax_error($yymajor, $TOKEN)
- {
- // line 232 "../smarty/lexer/smarty_internal_configfileparser.y"
- $this->internalError = true;
- $this->yymajor = $yymajor;
- $this->compiler->trigger_config_file_error();
- }
-
- public function yy_accept()
- {
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
- }
- while ($this->yyidx >= 0) {
- $this->yy_pop_parser_stack();
- }
- // line 225 "../smarty/lexer/smarty_internal_configfileparser.y"
- $this->successful = !$this->internalError;
- $this->internalError = false;
- $this->retvalue = $this->_retvalue;
- }
-
- public function doParse($yymajor, $yytokenvalue)
- {
- $yyerrorhit = 0; /* True if yymajor has invoked an error */
- if ($this->yyidx === null || $this->yyidx < 0) {
- $this->yyidx = 0;
- $this->yyerrcnt = -1;
- $x = new TPC_yyStackEntry;
- $x->stateno = 0;
- $x->major = 0;
- $this->yystack = array();
- $this->yystack[] = $x;
- }
- $yyendofinput = ($yymajor == 0);
- if ($this->yyTraceFILE) {
- fprintf(
- $this->yyTraceFILE,
- "%sInput %s\n",
- $this->yyTracePrompt,
- $this->yyTokenName[ $yymajor ]
- );
- }
- do {
- $yyact = $this->yy_find_shift_action($yymajor);
- if ($yymajor < self::YYERRORSYMBOL &&
- !$this->yy_is_expected_token($yymajor)) {
- // force a syntax error
- $yyact = self::YY_ERROR_ACTION;
- }
- if ($yyact < self::YYNSTATE) {
- $this->yy_shift($yyact, $yymajor, $yytokenvalue);
- $this->yyerrcnt--;
- if ($yyendofinput && $this->yyidx >= 0) {
- $yymajor = 0;
- } else {
- $yymajor = self::YYNOCODE;
- }
- } elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
- $this->yy_reduce($yyact - self::YYNSTATE);
- } elseif ($yyact === self::YY_ERROR_ACTION) {
- if ($this->yyTraceFILE) {
- fprintf(
- $this->yyTraceFILE,
- "%sSyntax Error!\n",
- $this->yyTracePrompt
- );
- }
- if (self::YYERRORSYMBOL) {
- if ($this->yyerrcnt < 0) {
- $this->yy_syntax_error($yymajor, $yytokenvalue);
- }
- $yymx = $this->yystack[ $this->yyidx ]->major;
- if ($yymx === self::YYERRORSYMBOL || $yyerrorhit) {
- if ($this->yyTraceFILE) {
- fprintf(
- $this->yyTraceFILE,
- "%sDiscard input token %s\n",
- $this->yyTracePrompt,
- $this->yyTokenName[ $yymajor ]
- );
- }
- $this->yy_destructor($yymajor, $yytokenvalue);
- $yymajor = self::YYNOCODE;
- } else {
- while ($this->yyidx >= 0 &&
- $yymx !== self::YYERRORSYMBOL &&
- ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
- ) {
- $this->yy_pop_parser_stack();
- }
- if ($this->yyidx < 0 || $yymajor == 0) {
- $this->yy_destructor($yymajor, $yytokenvalue);
- $this->yy_parse_failed();
- $yymajor = self::YYNOCODE;
- } elseif ($yymx !== self::YYERRORSYMBOL) {
- $u2 = 0;
- $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2);
- }
- }
- $this->yyerrcnt = 3;
- $yyerrorhit = 1;
- } else {
- if ($this->yyerrcnt <= 0) {
- $this->yy_syntax_error($yymajor, $yytokenvalue);
- }
- $this->yyerrcnt = 3;
- $this->yy_destructor($yymajor, $yytokenvalue);
- if ($yyendofinput) {
- $this->yy_parse_failed();
- }
- $yymajor = self::YYNOCODE;
- }
- } else {
- $this->yy_accept();
- $yymajor = self::YYNOCODE;
- }
- } while ($yymajor !== self::YYNOCODE && $this->yyidx >= 0);
- }
-
- /**
- * parse optional boolean keywords
- *
- * @param string $str
- *
- * @return bool
- */
- private function parse_bool($str)
- {
- $str = strtolower($str);
- if (in_array($str, array('on', 'yes', 'true'))) {
- $res = true;
- } else {
- $res = false;
- }
- return $res;
- }
-
- /**
- * set a config variable in target array
- *
- * @param array $var
- * @param array $target_array
- */
- private function set_var(array $var, array &$target_array)
- {
- $key = $var[ 'key' ];
- $value = $var[ 'value' ];
- if ($this->configOverwrite || !isset($target_array[ 'vars' ][ $key ])) {
- $target_array[ 'vars' ][ $key ] = $value;
- } else {
- settype($target_array[ 'vars' ][ $key ], 'array');
- $target_array[ 'vars' ][ $key ][] = $value;
- }
- }
-
- /**
- * add config variable to global vars
- *
- * @param array $vars
- */
- private function add_global_vars(array $vars)
- {
- if (!isset($this->compiler->config_data[ 'vars' ])) {
- $this->compiler->config_data[ 'vars' ] = array();
- }
- foreach ($vars as $var) {
- $this->set_var($var, $this->compiler->config_data);
- }
- }
-
- /**
- * add config variable to section
- *
- * @param string $section_name
- * @param array $vars
- */
- private function add_section_vars($section_name, array $vars)
- {
- if (!isset($this->compiler->config_data[ 'sections' ][ $section_name ][ 'vars' ])) {
- $this->compiler->config_data[ 'sections' ][ $section_name ][ 'vars' ] = array();
- }
- foreach ($vars as $var) {
- $this->set_var($var, $this->compiler->config_data[ 'sections' ][ $section_name ]);
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_data.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_data.php
deleted file mode 100644
index 1b64185b8..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_data.php
+++ /dev/null
@@ -1,272 +0,0 @@
-ext = new Smarty_Internal_Extension_Handler();
- $this->ext->objType = $this->_objType;
- }
-
- /**
- * assigns a Smarty variable
- *
- * @param array|string $tpl_var the template variable name(s)
- * @param mixed $value the value to assign
- * @param boolean $nocache if true any output of this variable will be not cached
- *
- * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for
- * chaining
- */
- public function assign($tpl_var, $value = null, $nocache = false)
- {
- if (is_array($tpl_var)) {
- foreach ($tpl_var as $_key => $_val) {
- $this->assign($_key, $_val, $nocache);
- }
- } else {
- if ($tpl_var !== '') {
- if ($this->_objType === 2) {
- /**
- *
- *
- * @var Smarty_Internal_Template $this
- */
- $this->_assignInScope($tpl_var, $value, $nocache);
- } else {
- $this->tpl_vars[ $tpl_var ] = new Smarty_Variable($value, $nocache);
- }
- }
- }
- return $this;
- }
-
- /**
- * appends values to template variables
- *
- * @api Smarty::append()
- * @link https://www.smarty.net/docs/en/api.append.tpl
- *
- * @param array|string $tpl_var the template variable name(s)
- * @param mixed $value the value to append
- * @param bool $merge flag if array elements shall be merged
- * @param bool $nocache if true any output of this variable will
- * be not cached
- *
- * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
- */
- public function append($tpl_var, $value = null, $merge = false, $nocache = false)
- {
- return $this->ext->append->append($this, $tpl_var, $value, $merge, $nocache);
- }
-
- /**
- * assigns a global Smarty variable
- *
- * @param string $varName the global variable name
- * @param mixed $value the value to assign
- * @param boolean $nocache if true any output of this variable will be not cached
- *
- * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
- */
- public function assignGlobal($varName, $value = null, $nocache = false)
- {
- return $this->ext->assignGlobal->assignGlobal($this, $varName, $value, $nocache);
- }
-
- /**
- * appends values to template variables by reference
- *
- * @param string $tpl_var the template variable name
- * @param mixed &$value the referenced value to append
- * @param boolean $merge flag if array elements shall be merged
- *
- * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
- */
- public function appendByRef($tpl_var, &$value, $merge = false)
- {
- return $this->ext->appendByRef->appendByRef($this, $tpl_var, $value, $merge);
- }
-
- /**
- * assigns values to template variables by reference
- *
- * @param string $tpl_var the template variable name
- * @param $value
- * @param boolean $nocache if true any output of this variable will be not cached
- *
- * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
- */
- public function assignByRef($tpl_var, &$value, $nocache = false)
- {
- return $this->ext->assignByRef->assignByRef($this, $tpl_var, $value, $nocache);
- }
-
- /**
- * Returns a single or all template variables
- *
- * @api Smarty::getTemplateVars()
- * @link https://www.smarty.net/docs/en/api.get.template.vars.tpl
- *
- * @param string $varName variable name or null
- * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $_ptr optional pointer to data object
- * @param bool $searchParents include parent templates?
- *
- * @return mixed variable value or or array of variables
- */
- public function getTemplateVars($varName = null, Smarty_Internal_Data $_ptr = null, $searchParents = true)
- {
- return $this->ext->getTemplateVars->getTemplateVars($this, $varName, $_ptr, $searchParents);
- }
-
- /**
- * Follow the parent chain an merge template and config variables
- *
- * @param \Smarty_Internal_Data|null $data
- */
- public function _mergeVars(Smarty_Internal_Data $data = null)
- {
- if (isset($data)) {
- if (!empty($this->tpl_vars)) {
- $data->tpl_vars = array_merge($this->tpl_vars, $data->tpl_vars);
- }
- if (!empty($this->config_vars)) {
- $data->config_vars = array_merge($this->config_vars, $data->config_vars);
- }
- } else {
- $data = $this;
- }
- if (isset($this->parent)) {
- $this->parent->_mergeVars($data);
- }
- }
-
- /**
- * Return true if this instance is a Data obj
- *
- * @return bool
- */
- public function _isDataObj()
- {
- return $this->_objType === 4;
- }
-
- /**
- * Return true if this instance is a template obj
- *
- * @return bool
- */
- public function _isTplObj()
- {
- return $this->_objType === 2;
- }
-
- /**
- * Return true if this instance is a Smarty obj
- *
- * @return bool
- */
- public function _isSmartyObj()
- {
- return $this->_objType === 1;
- }
-
- /**
- * Get Smarty object
- *
- * @return Smarty
- */
- public function _getSmartyObj()
- {
- return $this->smarty;
- }
-
- /**
- * Handle unknown class methods
- *
- * @param string $name unknown method-name
- * @param array $args argument array
- *
- * @return mixed
- */
- public function __call($name, $args)
- {
- return $this->ext->_callExternalMethod($this, $name, $args);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php
deleted file mode 100644
index 3ef040ab1..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php
+++ /dev/null
@@ -1,197 +0,0 @@
- 0, 'DefaultModifiers' => 0, 'ConfigVars' => 0,
- 'DebugTemplate' => 0, 'RegisteredObject' => 0, 'StreamVariable' => 0,
- 'TemplateVars' => 0, 'Literals' => 'Literals',
- );//
-
- private $resolvedProperties = array();
-
- /**
- * Call external Method
- *
- * @param \Smarty_Internal_Data $data
- * @param string $name external method names
- * @param array $args argument array
- *
- * @return mixed
- */
- public function _callExternalMethod(Smarty_Internal_Data $data, $name, $args)
- {
- /* @var Smarty $data ->smarty */
- $smarty = isset($data->smarty) ? $data->smarty : $data;
- if (!isset($smarty->ext->$name)) {
- if (preg_match('/^((set|get)|(.*?))([A-Z].*)$/', $name, $match)) {
- $basename = $this->upperCase($match[ 4 ]);
- if (!isset($smarty->ext->$basename) && isset($this->_property_info[ $basename ])
- && is_string($this->_property_info[ $basename ])
- ) {
- $class = 'Smarty_Internal_Method_' . $this->_property_info[ $basename ];
- if (class_exists($class)) {
- $classObj = new $class();
- $methodes = get_class_methods($classObj);
- foreach ($methodes as $method) {
- $smarty->ext->$method = $classObj;
- }
- }
- }
- if (!empty($match[ 2 ]) && !isset($smarty->ext->$name)) {
- $class = 'Smarty_Internal_Method_' . $this->upperCase($name);
- if (!class_exists($class)) {
- $objType = $data->_objType;
- $propertyType = false;
- if (!isset($this->resolvedProperties[ $match[ 0 ] ][ $objType ])) {
- $property = $this->resolvedProperties['property'][$basename] ??
- $this->resolvedProperties['property'][$basename] = smarty_strtolower_ascii(
- join(
- '_',
- preg_split(
- '/([A-Z][^A-Z]*)/',
- $basename,
- -1,
- PREG_SPLIT_NO_EMPTY |
- PREG_SPLIT_DELIM_CAPTURE
- )
- )
- );
- if ($property !== false) {
- if (property_exists($data, $property)) {
- $propertyType = $this->resolvedProperties[ $match[ 0 ] ][ $objType ] = 1;
- } elseif (property_exists($smarty, $property)) {
- $propertyType = $this->resolvedProperties[ $match[ 0 ] ][ $objType ] = 2;
- } else {
- $this->resolvedProperties[ 'property' ][ $basename ] = $property = false;
- }
- }
- } else {
- $propertyType = $this->resolvedProperties[ $match[ 0 ] ][ $objType ];
- $property = $this->resolvedProperties[ 'property' ][ $basename ];
- }
- if ($propertyType) {
- $obj = $propertyType === 1 ? $data : $smarty;
- if ($match[ 2 ] === 'get') {
- return $obj->$property;
- } elseif ($match[ 2 ] === 'set') {
- return $obj->$property = $args[ 0 ];
- }
- }
- }
- }
- }
- }
- $callback = array($smarty->ext->$name, $name);
- array_unshift($args, $data);
- if (isset($callback) && $callback[ 0 ]->objMap | $data->_objType) {
- return call_user_func_array($callback, $args);
- }
- return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), $args);
- }
-
- /**
- * Make first character of name parts upper case
- *
- * @param string $name
- *
- * @return string
- */
- public function upperCase($name)
- {
- $_name = explode('_', $name);
- $_name = array_map('smarty_ucfirst_ascii', $_name);
- return implode('_', $_name);
- }
-
- /**
- * get extension object
- *
- * @param string $property_name property name
- *
- * @return mixed|Smarty_Template_Cached
- */
- public function __get($property_name)
- {
- // object properties of runtime template extensions will start with '_'
- if ($property_name[ 0 ] === '_') {
- $class = 'Smarty_Internal_Runtime' . $this->upperCase($property_name);
- } else {
- $class = 'Smarty_Internal_Method_' . $this->upperCase($property_name);
- }
- if (!class_exists($class)) {
- return $this->$property_name = new Smarty_Internal_Undefined($class);
- }
- return $this->$property_name = new $class();
- }
-
- /**
- * set extension property
- *
- * @param string $property_name property name
- * @param mixed $value value
- *
- */
- public function __set($property_name, $value)
- {
- $this->$property_name = $value;
- }
-
- /**
- * Call error handler for undefined method
- *
- * @param string $name unknown method-name
- * @param array $args argument array
- *
- * @return mixed
- */
- public function __call($name, $args)
- {
- return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), array($this));
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php
deleted file mode 100644
index a05f55a82..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php
+++ /dev/null
@@ -1,53 +0,0 @@
-_getSmartyObj();
- if ($type !== null) {
- $this->_checkFilterType($type);
- if (!empty($smarty->autoload_filters[ $type ])) {
- $smarty->autoload_filters[ $type ] = array_merge($smarty->autoload_filters[ $type ], (array)$filters);
- } else {
- $smarty->autoload_filters[ $type ] = (array)$filters;
- }
- } else {
- foreach ((array)$filters as $type => $value) {
- $this->_checkFilterType($type);
- if (!empty($smarty->autoload_filters[ $type ])) {
- $smarty->autoload_filters[ $type ] =
- array_merge($smarty->autoload_filters[ $type ], (array)$value);
- } else {
- $smarty->autoload_filters[ $type ] = (array)$value;
- }
- }
- }
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php
deleted file mode 100644
index c3feb3d8b..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php
+++ /dev/null
@@ -1,42 +0,0 @@
-_getSmartyObj();
- if (is_array($modifiers)) {
- $smarty->default_modifiers = array_merge($smarty->default_modifiers, $modifiers);
- } else {
- $smarty->default_modifiers[] = $modifiers;
- }
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php
deleted file mode 100644
index e207734e8..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_append.php
+++ /dev/null
@@ -1,74 +0,0 @@
- $_val) {
- if ($_key !== '') {
- $this->append($data, $_key, $_val, $merge, $nocache);
- }
- }
- } else {
- if ($tpl_var !== '' && isset($value)) {
- if (!isset($data->tpl_vars[ $tpl_var ])) {
- $tpl_var_inst = $data->ext->getTemplateVars->_getVariable($data, $tpl_var, null, true, false);
- if ($tpl_var_inst instanceof Smarty_Undefined_Variable) {
- $data->tpl_vars[ $tpl_var ] = new Smarty_Variable(null, $nocache);
- } else {
- $data->tpl_vars[ $tpl_var ] = clone $tpl_var_inst;
- }
- }
- if (!(is_array($data->tpl_vars[ $tpl_var ]->value)
- || $data->tpl_vars[ $tpl_var ]->value instanceof ArrayAccess)
- ) {
- settype($data->tpl_vars[ $tpl_var ]->value, 'array');
- }
- if ($merge && is_array($value)) {
- foreach ($value as $_mkey => $_mval) {
- $data->tpl_vars[ $tpl_var ]->value[ $_mkey ] = $_mval;
- }
- } else {
- $data->tpl_vars[ $tpl_var ]->value[] = $value;
- }
- }
- if ($data->_isTplObj() && $data->scope) {
- $data->ext->_updateScope->_updateScope($data, $tpl_var);
- }
- }
- return $data;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php
deleted file mode 100644
index b5be69b54..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php
+++ /dev/null
@@ -1,49 +0,0 @@
-tpl_vars[ $tpl_var ])) {
- $data->tpl_vars[ $tpl_var ] = new Smarty_Variable();
- }
- if (!is_array($data->tpl_vars[ $tpl_var ]->value)) {
- settype($data->tpl_vars[ $tpl_var ]->value, 'array');
- }
- if ($merge && is_array($value)) {
- foreach ($value as $_key => $_val) {
- $data->tpl_vars[ $tpl_var ]->value[ $_key ] = &$value[ $_key ];
- }
- } else {
- $data->tpl_vars[ $tpl_var ]->value[] = &$value;
- }
- if ($data->_isTplObj() && $data->scope) {
- $data->ext->_updateScope->_updateScope($data, $tpl_var);
- }
- }
- return $data;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php
deleted file mode 100644
index fa705bb80..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php
+++ /dev/null
@@ -1,36 +0,0 @@
-tpl_vars[ $tpl_var ] = new Smarty_Variable(null, $nocache);
- $data->tpl_vars[ $tpl_var ]->value = &$value;
- if ($data->_isTplObj() && $data->scope) {
- $data->ext->_updateScope->_updateScope($data, $tpl_var);
- }
- }
- return $data;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php
deleted file mode 100644
index 08cfa4693..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php
+++ /dev/null
@@ -1,44 +0,0 @@
-_isTplObj()) {
- $ptr->tpl_vars[ $varName ] = clone Smarty::$global_tpl_vars[ $varName ];
- $ptr = $ptr->parent;
- }
- }
- return $data;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php
deleted file mode 100644
index 6fb0c8f3d..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php
+++ /dev/null
@@ -1,36 +0,0 @@
-tpl_vars = array();
- return $data;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php
deleted file mode 100644
index b74d30580..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php
+++ /dev/null
@@ -1,41 +0,0 @@
-_clearTemplateCache();
- // load cache resource and call clearAll
- $_cache_resource = Smarty_CacheResource::load($smarty, $type);
- return $_cache_resource->clearAll($smarty, $exp_time);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php
deleted file mode 100644
index 12b755c06..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearassign.php
+++ /dev/null
@@ -1,43 +0,0 @@
-tpl_vars[ $curr_var ]);
- }
- } else {
- unset($data->tpl_vars[ $tpl_var ]);
- }
- return $data;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php
deleted file mode 100644
index df766eee8..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcache.php
+++ /dev/null
@@ -1,50 +0,0 @@
-_clearTemplateCache();
- // load cache resource and call clear
- $_cache_resource = Smarty_CacheResource::load($smarty, $type);
- return $_cache_resource->clear($smarty, $template_name, $cache_id, $compile_id, $exp_time);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php
deleted file mode 100644
index db0a49b00..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php
+++ /dev/null
@@ -1,131 +0,0 @@
-_clearTemplateCache();
- $_compile_dir = $smarty->getCompileDir();
- if ($_compile_dir === '/') { //We should never want to delete this!
- return 0;
- }
- $_compile_id = isset($compile_id) ? preg_replace('![^\w]+!', '_', $compile_id) : null;
- $_dir_sep = $smarty->use_sub_dirs ? DIRECTORY_SEPARATOR : '^';
- if (isset($resource_name)) {
- $_save_stat = $smarty->caching;
- $smarty->caching = Smarty::CACHING_OFF;
- /* @var Smarty_Internal_Template $tpl */
- $tpl = $smarty->createTemplate($resource_name);
- $smarty->caching = $_save_stat;
- if (!$tpl->source->handler->uncompiled && !$tpl->source->handler->recompiled && $tpl->source->exists) {
- $_resource_part_1 = basename(str_replace('^', DIRECTORY_SEPARATOR, $tpl->compiled->filepath));
- $_resource_part_1_length = strlen($_resource_part_1);
- } else {
- return 0;
- }
- $_resource_part_2 = str_replace('.php', '.cache.php', $_resource_part_1);
- $_resource_part_2_length = strlen($_resource_part_2);
- }
- $_dir = $_compile_dir;
- if ($smarty->use_sub_dirs && isset($_compile_id)) {
- $_dir .= $_compile_id . $_dir_sep;
- }
- if (isset($_compile_id)) {
- $_compile_id_part = $_compile_dir . $_compile_id . $_dir_sep;
- $_compile_id_part_length = strlen($_compile_id_part);
- }
- $_count = 0;
- try {
- $_compileDirs = new RecursiveDirectoryIterator($_dir);
- // NOTE: UnexpectedValueException thrown for PHP >= 5.3
- } catch (Exception $e) {
- return 0;
- }
- $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST);
- foreach ($_compile as $_file) {
- if (substr(basename($_file->getPathname()), 0, 1) === '.') {
- continue;
- }
- $_filepath = (string)$_file;
- if ($_file->isDir()) {
- if (!$_compile->isDot()) {
- // delete folder if empty
- @rmdir($_file->getPathname());
- }
- } else {
- // delete only php files
- if (substr($_filepath, -4) !== '.php') {
- continue;
- }
- $unlink = false;
- if ((!isset($_compile_id) ||
- (isset($_filepath[ $_compile_id_part_length ]) &&
- $a = !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length)))
- && (!isset($resource_name) || (isset($_filepath[ $_resource_part_1_length ])
- && substr_compare(
- $_filepath,
- $_resource_part_1,
- -$_resource_part_1_length,
- $_resource_part_1_length
- ) === 0) || (isset($_filepath[ $_resource_part_2_length ])
- && substr_compare(
- $_filepath,
- $_resource_part_2,
- -$_resource_part_2_length,
- $_resource_part_2_length
- ) === 0))
- ) {
- if (isset($exp_time)) {
- if (is_file($_filepath) && time() - filemtime($_filepath) >= $exp_time) {
- $unlink = true;
- }
- } else {
- $unlink = true;
- }
- }
- if ($unlink && is_file($_filepath) && @unlink($_filepath)) {
- $_count++;
- if (function_exists('opcache_invalidate')
- && (!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api')) < 1)
- ) {
- opcache_invalidate($_filepath, true);
- } elseif (function_exists('apc_delete_file')) {
- apc_delete_file($_filepath);
- }
- }
- }
- }
- return $_count;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php
deleted file mode 100644
index d1b730322..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php
+++ /dev/null
@@ -1,41 +0,0 @@
-config_vars[ $name ]);
- } else {
- $data->config_vars = array();
- }
- return $data;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php
deleted file mode 100644
index 3934ca042..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php
+++ /dev/null
@@ -1,36 +0,0 @@
-compileAll($smarty, $extension, $force_compile, $time_limit, $max_errors, true);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php
deleted file mode 100644
index 5c046da40..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php
+++ /dev/null
@@ -1,130 +0,0 @@
-compileAll($smarty, $extension, $force_compile, $time_limit, $max_errors);
- }
-
- /**
- * Compile all template or config files
- *
- * @param \Smarty $smarty
- * @param string $extension template file name extension
- * @param bool $force_compile force all to recompile
- * @param int $time_limit set maximum execution time
- * @param int $max_errors set maximum allowed errors
- * @param bool $isConfig flag true if called for config files
- *
- * @return int number of template files compiled
- */
- protected function compileAll(
- Smarty $smarty,
- $extension,
- $force_compile,
- $time_limit,
- $max_errors,
- $isConfig = false
- ) {
- // switch off time limit
- if (function_exists('set_time_limit')) {
- @set_time_limit($time_limit);
- }
- $_count = 0;
- $_error_count = 0;
- $sourceDir = $isConfig ? $smarty->getConfigDir() : $smarty->getTemplateDir();
- // loop over array of source directories
- foreach ($sourceDir as $_dir) {
- $_dir_1 = new RecursiveDirectoryIterator(
- $_dir,
- defined('FilesystemIterator::FOLLOW_SYMLINKS') ?
- FilesystemIterator::FOLLOW_SYMLINKS : 0
- );
- $_dir_2 = new RecursiveIteratorIterator($_dir_1);
- foreach ($_dir_2 as $_fileinfo) {
- $_file = $_fileinfo->getFilename();
- if (substr(basename($_fileinfo->getPathname()), 0, 1) === '.' || strpos($_file, '.svn') !== false) {
- continue;
- }
- if (substr_compare($_file, $extension, -strlen($extension)) !== 0) {
- continue;
- }
- if ($_fileinfo->getPath() !== substr($_dir, 0, -1)) {
- $_file = substr($_fileinfo->getPath(), strlen($_dir)) . DIRECTORY_SEPARATOR . $_file;
- }
- echo "\n ", $_dir, '---', $_file;
- flush();
- $_start_time = microtime(true);
- $_smarty = clone $smarty;
- //
- $_smarty->_cache = array();
- $_smarty->ext = new Smarty_Internal_Extension_Handler();
- $_smarty->ext->objType = $_smarty->_objType;
- $_smarty->force_compile = $force_compile;
- try {
- /* @var Smarty_Internal_Template $_tpl */
- $_tpl = new $smarty->template_class($_file, $_smarty);
- $_tpl->caching = Smarty::CACHING_OFF;
- $_tpl->source =
- $isConfig ? Smarty_Template_Config::load($_tpl) : Smarty_Template_Source::load($_tpl);
- if ($_tpl->mustCompile()) {
- $_tpl->compileTemplateSource();
- $_count++;
- echo ' compiled in ', microtime(true) - $_start_time, ' seconds';
- flush();
- } else {
- echo ' is up to date';
- flush();
- }
- } catch (Exception $e) {
- echo "\n ------>Error: ", $e->getMessage(), " \n";
- $_error_count++;
- }
- // free memory
- unset($_tpl);
- $_smarty->_clearTemplateCache();
- if ($max_errors !== null && $_error_count === $max_errors) {
- echo "\n too many errors\n";
- exit(1);
- }
- }
- }
- echo "\n ";
- return $_count;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php
deleted file mode 100644
index c3174d2d0..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php
+++ /dev/null
@@ -1,182 +0,0 @@
-_loadConfigFile($data, $config_file, $sections, null);
- return $data;
- }
-
- /**
- * load a config file, optionally load just selected sections
- *
- * @api Smarty::configLoad()
- * @link https://www.smarty.net/docs/en/api.config.load.tpl
- *
- * @param \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template $data
- * @param string $config_file filename
- * @param mixed $sections array of section names, single
- * section or null
- * @param int $scope scope into which config variables
- * shall be loaded
- *
- * @throws \Exception
- */
- public function _loadConfigFile(Smarty_Internal_Data $data, $config_file, $sections = null, $scope = 0)
- {
- /* @var \Smarty $smarty */
- $smarty = $data->_getSmartyObj();
- /* @var \Smarty_Internal_Template $confObj */
- $confObj = new Smarty_Internal_Template($config_file, $smarty, $data, null, null, null, null, true);
- $confObj->caching = Smarty::CACHING_OFF;
- $confObj->source->config_sections = $sections;
- $confObj->source->scope = $scope;
- $confObj->compiled = Smarty_Template_Compiled::load($confObj);
- $confObj->compiled->render($confObj);
- if ($data->_isTplObj()) {
- $data->compiled->file_dependency[ $confObj->source->uid ] =
- array($confObj->source->filepath, $confObj->source->getTimeStamp(), $confObj->source->type);
- }
- }
-
- /**
- * load config variables into template object
- *
- * @param \Smarty_Internal_Template $tpl
- * @param array $new_config_vars
- */
- public function _loadConfigVars(Smarty_Internal_Template $tpl, $new_config_vars)
- {
- $this->_assignConfigVars($tpl->parent->config_vars, $tpl, $new_config_vars);
- $tagScope = $tpl->source->scope;
- if ($tagScope >= 0) {
- if ($tagScope === Smarty::SCOPE_LOCAL) {
- $this->_updateVarStack($tpl, $new_config_vars);
- $tagScope = 0;
- if (!$tpl->scope) {
- return;
- }
- }
- if ($tpl->parent->_isTplObj() && ($tagScope || $tpl->parent->scope)) {
- $mergedScope = $tagScope | $tpl->scope;
- if ($mergedScope) {
- // update scopes
- /* @var \Smarty_Internal_Template|\Smarty|\Smarty_Internal_Data $ptr */
- foreach ($tpl->smarty->ext->_updateScope->_getAffectedScopes($tpl->parent, $mergedScope) as $ptr) {
- $this->_assignConfigVars($ptr->config_vars, $tpl, $new_config_vars);
- if ($tagScope && $ptr->_isTplObj() && isset($tpl->_cache[ 'varStack' ])) {
- $this->_updateVarStack($tpl, $new_config_vars);
- }
- }
- }
- }
- }
- }
-
- /**
- * Assign all config variables in given scope
- *
- * @param array $config_vars config variables in scope
- * @param \Smarty_Internal_Template $tpl
- * @param array $new_config_vars loaded config variables
- */
- public function _assignConfigVars(&$config_vars, Smarty_Internal_Template $tpl, $new_config_vars)
- {
- // copy global config vars
- foreach ($new_config_vars[ 'vars' ] as $variable => $value) {
- if ($tpl->smarty->config_overwrite || !isset($config_vars[ $variable ])) {
- $config_vars[ $variable ] = $value;
- } else {
- $config_vars[ $variable ] = array_merge((array)$config_vars[ $variable ], (array)$value);
- }
- }
- // scan sections
- $sections = $tpl->source->config_sections;
- if (!empty($sections)) {
- foreach ((array)$sections as $tpl_section) {
- if (isset($new_config_vars[ 'sections' ][ $tpl_section ])) {
- foreach ($new_config_vars[ 'sections' ][ $tpl_section ][ 'vars' ] as $variable => $value) {
- if ($tpl->smarty->config_overwrite || !isset($config_vars[ $variable ])) {
- $config_vars[ $variable ] = $value;
- } else {
- $config_vars[ $variable ] = array_merge((array)$config_vars[ $variable ], (array)$value);
- }
- }
- }
- }
- }
- }
-
- /**
- * Update config variables in template local variable stack
- *
- * @param \Smarty_Internal_Template $tpl
- * @param array $config_vars
- */
- public function _updateVarStack(Smarty_Internal_Template $tpl, $config_vars)
- {
- $i = 0;
- while (isset($tpl->_cache[ 'varStack' ][ $i ])) {
- $this->_assignConfigVars($tpl->_cache[ 'varStack' ][ $i ][ 'config' ], $tpl, $config_vars);
- $i++;
- }
- }
-
- /**
- * gets a config variable value
- *
- * @param \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template $data
- * @param string $varName the name of the config variable
- * @param bool $errorEnable
- *
- * @return null|string the value of the config variable
- */
- public function _getConfigVariable(Smarty_Internal_Data $data, $varName, $errorEnable = true)
- {
- $_ptr = $data;
- while ($_ptr !== null) {
- if (isset($_ptr->config_vars[ $varName ])) {
- // found it, return it
- return $_ptr->config_vars[ $varName ];
- }
- // not found, try at parent
- $_ptr = $_ptr->parent;
- }
- if ($data->smarty->error_unassigned && $errorEnable) {
- // force a notice
- $x = $$varName;
- }
- return null;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php
deleted file mode 100644
index c684c0870..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_createdata.php
+++ /dev/null
@@ -1,44 +0,0 @@
-_getSmartyObj();
- $dataObj = new Smarty_Data($parent, $smarty, $name);
- if ($smarty->debugging) {
- Smarty_Internal_Debug::register_data($dataObj);
- }
- return $dataObj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php
deleted file mode 100644
index 4145db10b..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php
+++ /dev/null
@@ -1,37 +0,0 @@
- array( 'filter1', 'filter2', … ) ) or array( 'filter1', 'filter2', …) if $type
- * was specified
- * @throws \SmartyException
- */
- public function getAutoloadFilters(Smarty_Internal_TemplateBase $obj, $type = null)
- {
- $smarty = $obj->_getSmartyObj();
- if ($type !== null) {
- $this->_checkFilterType($type);
- return isset($smarty->autoload_filters[ $type ]) ? $smarty->autoload_filters[ $type ] : array();
- }
- return $smarty->autoload_filters;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvariable.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvariable.php
deleted file mode 100644
index b54815123..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvariable.php
+++ /dev/null
@@ -1,34 +0,0 @@
-ext->configLoad->_getConfigVariable($data, $varName, $errorEnable);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php
deleted file mode 100644
index 763bdf989..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php
+++ /dev/null
@@ -1,58 +0,0 @@
-config_vars[ $varname ])) {
- return $_ptr->config_vars[ $varname ];
- }
- } else {
- $var_array = array_merge($_ptr->config_vars, $var_array);
- }
- // not found, try at parent
- if ($search_parents) {
- $_ptr = $_ptr->parent;
- } else {
- $_ptr = null;
- }
- }
- if (isset($varname)) {
- return '';
- } else {
- return $var_array;
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php
deleted file mode 100644
index 77d908c15..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php
+++ /dev/null
@@ -1,35 +0,0 @@
-_getSmartyObj();
- return $smarty->debug_tpl;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php
deleted file mode 100644
index 57da85c49..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php
+++ /dev/null
@@ -1,35 +0,0 @@
-_getSmartyObj();
- return $smarty->default_modifiers;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getglobal.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getglobal.php
deleted file mode 100644
index 2be11d7e8..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getglobal.php
+++ /dev/null
@@ -1,47 +0,0 @@
-value;
- } else {
- return '';
- }
- } else {
- $_result = array();
- foreach (Smarty::$global_tpl_vars as $key => $var) {
- $_result[ $key ] = $var->value;
- }
- return $_result;
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php
deleted file mode 100644
index 0b3a071d3..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php
+++ /dev/null
@@ -1,44 +0,0 @@
-_getSmartyObj();
- if (!isset($smarty->registered_objects[ $object_name ])) {
- throw new SmartyException("'$object_name' is not a registered object");
- }
- if (!is_object($smarty->registered_objects[ $object_name ][ 0 ])) {
- throw new SmartyException("registered '$object_name' is not an object");
- }
- return $smarty->registered_objects[ $object_name ][ 0 ];
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php
deleted file mode 100644
index 8db39c525..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php
+++ /dev/null
@@ -1,50 +0,0 @@
-smarty) ? $data->smarty : $data;
- if ($smarty->error_unassigned) {
- throw new SmartyException('Undefined stream variable "' . $variable . '"');
- } else {
- return null;
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php
deleted file mode 100644
index 0d1335a8d..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_gettags.php
+++ /dev/null
@@ -1,63 +0,0 @@
-_getSmartyObj();
- if ($obj->_isTplObj() && !isset($template)) {
- $tpl = clone $obj;
- } elseif (isset($template) && $template->_isTplObj()) {
- $tpl = clone $template;
- } elseif (isset($template) && is_string($template)) {
- /* @var Smarty_Internal_Template $tpl */
- $tpl = new $smarty->template_class($template, $smarty);
- // checks if template exists
- if (!$tpl->source->exists) {
- throw new SmartyException("Unable to load template {$tpl->source->type} '{$tpl->source->name}'");
- }
- }
- if (isset($tpl)) {
- $tpl->smarty = clone $tpl->smarty;
- $tpl->smarty->_cache[ 'get_used_tags' ] = true;
- $tpl->_cache[ 'used_tags' ] = array();
- $tpl->smarty->merge_compiled_includes = false;
- $tpl->smarty->disableSecurity();
- $tpl->caching = Smarty::CACHING_OFF;
- $tpl->loadCompiler();
- $tpl->compiler->compileTemplate($tpl);
- return $tpl->_cache[ 'used_tags' ];
- }
- throw new SmartyException('Missing template specification');
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php
deleted file mode 100644
index 0470785b1..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php
+++ /dev/null
@@ -1,119 +0,0 @@
-_getVariable($data, $varName, $_ptr, $searchParents, false);
- if (is_object($_var)) {
- return $_var->value;
- } else {
- return null;
- }
- } else {
- $_result = array();
- if ($_ptr === null) {
- $_ptr = $data;
- }
- while ($_ptr !== null) {
- foreach ($_ptr->tpl_vars as $key => $var) {
- if (!array_key_exists($key, $_result)) {
- $_result[ $key ] = $var->value;
- }
- }
- // not found, try at parent
- if ($searchParents && isset($_ptr->parent)) {
- $_ptr = $_ptr->parent;
- } else {
- $_ptr = null;
- }
- }
- if ($searchParents && isset(Smarty::$global_tpl_vars)) {
- foreach (Smarty::$global_tpl_vars as $key => $var) {
- if (!array_key_exists($key, $_result)) {
- $_result[ $key ] = $var->value;
- }
- }
- }
- return $_result;
- }
- }
-
- /**
- * gets the object of a Smarty variable
- *
- * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
- * @param string $varName the name of the Smarty variable
- * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $_ptr optional pointer to data object
- * @param bool $searchParents search also in parent data
- * @param bool $errorEnable
- *
- * @return \Smarty_Variable
- */
- public function _getVariable(
- Smarty_Internal_Data $data,
- $varName,
- Smarty_Internal_Data $_ptr = null,
- $searchParents = true,
- $errorEnable = true
- ) {
- if ($_ptr === null) {
- $_ptr = $data;
- }
- while ($_ptr !== null) {
- if (isset($_ptr->tpl_vars[ $varName ])) {
- // found it, return it
- return $_ptr->tpl_vars[ $varName ];
- }
- // not found, try at parent
- if ($searchParents && isset($_ptr->parent)) {
- $_ptr = $_ptr->parent;
- } else {
- $_ptr = null;
- }
- }
- if (isset(Smarty::$global_tpl_vars[ $varName ])) {
- // found it, return it
- return Smarty::$global_tpl_vars[ $varName ];
- }
- if ($errorEnable && $data->_getSmartyObj()->error_unassigned) {
- // force a notice
- $x = $$varName;
- }
- return new Smarty_Undefined_Variable;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_literals.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_literals.php
deleted file mode 100644
index bfa3f58ec..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_literals.php
+++ /dev/null
@@ -1,100 +0,0 @@
-_getSmartyObj();
- return (array)$smarty->literals;
- }
-
- /**
- * Add literals
- *
- * @api Smarty::addLiterals()
- *
- * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
- * @param array|string $literals literal or list of literals
- * to addto add
- *
- * @return \Smarty|\Smarty_Internal_Template
- * @throws \SmartyException
- */
- public function addLiterals(Smarty_Internal_TemplateBase $obj, $literals = null)
- {
- if (isset($literals)) {
- $this->set($obj->_getSmartyObj(), (array)$literals);
- }
- return $obj;
- }
-
- /**
- * Set literals
- *
- * @api Smarty::setLiterals()
- *
- * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
- * @param array|string $literals literal or list of literals
- * to setto set
- *
- * @return \Smarty|\Smarty_Internal_Template
- * @throws \SmartyException
- */
- public function setLiterals(Smarty_Internal_TemplateBase $obj, $literals = null)
- {
- $smarty = $obj->_getSmartyObj();
- $smarty->literals = array();
- if (!empty($literals)) {
- $this->set($smarty, (array)$literals);
- }
- return $obj;
- }
-
- /**
- * common setter for literals for easier handling of duplicates the
- * Smarty::$literals array gets filled with identical key values
- *
- * @param \Smarty $smarty
- * @param array $literals
- *
- * @throws \SmartyException
- */
- private function set(Smarty $smarty, $literals)
- {
- $literals = array_combine($literals, $literals);
- $error = isset($literals[ $smarty->left_delimiter ]) ? array($smarty->left_delimiter) : array();
- $error = isset($literals[ $smarty->right_delimiter ]) ? $error[] = $smarty->right_delimiter : $error;
- if (!empty($error)) {
- throw new SmartyException(
- 'User defined literal(s) "' . $error .
- '" may not be identical with left or right delimiter'
- );
- }
- $smarty->literals = array_merge((array)$smarty->literals, (array)$literals);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php
deleted file mode 100644
index af788a24e..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php
+++ /dev/null
@@ -1,77 +0,0 @@
- true, 'post' => true, 'output' => true, 'variable' => true);
-
- /**
- * load a filter of specified type and name
- *
- * @api Smarty::loadFilter()
- *
- * @link https://www.smarty.net/docs/en/api.load.filter.tpl
- *
- * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
- * @param string $type filter type
- * @param string $name filter name
- *
- * @return bool
- * @throws SmartyException if filter could not be loaded
- */
- public function loadFilter(Smarty_Internal_TemplateBase $obj, $type, $name)
- {
- $smarty = $obj->_getSmartyObj();
- $this->_checkFilterType($type);
- $_plugin = "smarty_{$type}filter_{$name}";
- $_filter_name = $_plugin;
- if (is_callable($_plugin)) {
- $smarty->registered_filters[ $type ][ $_filter_name ] = $_plugin;
- return true;
- }
- if ($smarty->loadPlugin($_plugin)) {
- if (class_exists($_plugin, false)) {
- $_plugin = array($_plugin, 'execute');
- }
- if (is_callable($_plugin)) {
- $smarty->registered_filters[ $type ][ $_filter_name ] = $_plugin;
- return true;
- }
- }
- throw new SmartyException("{$type}filter '{$name}' not found or callable");
- }
-
- /**
- * Check if filter type is valid
- *
- * @param string $type
- *
- * @throws \SmartyException
- */
- public function _checkFilterType($type)
- {
- if (!isset($this->filterTypes[ $type ])) {
- throw new SmartyException("Illegal filter type '{$type}'");
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php
deleted file mode 100644
index 6ddcaec94..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php
+++ /dev/null
@@ -1,111 +0,0 @@
-loadPlugin() method
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- */
-class Smarty_Internal_Method_LoadPlugin
-{
- /**
- * Cache of searched plugin files
- *
- * @var array
- */
- public $plugin_files = array();
-
- /**
- * Takes unknown classes and loads plugin files for them
- * class name format: Smarty_PluginType_PluginName
- * plugin filename format: plugintype.pluginname.php
- *
- * @param \Smarty $smarty
- * @param string $plugin_name class plugin name to load
- * @param bool $check check if already loaded
- *
- * @return bool|string
- * @throws \SmartyException
- */
- public function loadPlugin(Smarty $smarty, $plugin_name, $check)
- {
- // if function or class exists, exit silently (already loaded)
- if ($check && (is_callable($plugin_name) || class_exists($plugin_name, false))) {
- return true;
- }
- if (!preg_match('#^smarty_((internal)|([^_]+))_(.+)$#i', $plugin_name, $match)) {
- throw new SmartyException("plugin {$plugin_name} is not a valid name format");
- }
- if (!empty($match[ 2 ])) {
- $file = SMARTY_SYSPLUGINS_DIR . smarty_strtolower_ascii($plugin_name) . '.php';
- if (isset($this->plugin_files[ $file ])) {
- if ($this->plugin_files[ $file ] !== false) {
- return $this->plugin_files[ $file ];
- } else {
- return false;
- }
- } else {
- if (is_file($file)) {
- $this->plugin_files[ $file ] = $file;
- include_once $file;
- return $file;
- } else {
- $this->plugin_files[ $file ] = false;
- return false;
- }
- }
- }
- // plugin filename is expected to be: [type].[name].php
- $_plugin_filename = "{$match[1]}.{$match[4]}.php";
- $_lower_filename = smarty_strtolower_ascii($_plugin_filename);
- if (isset($this->plugin_files)) {
- if (isset($this->plugin_files[ 'plugins_dir' ][ $_lower_filename ])) {
- if (!$smarty->use_include_path || $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ] !== false) {
- return $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ];
- }
- }
- if (!$smarty->use_include_path || $smarty->ext->_getIncludePath->isNewIncludePath($smarty)) {
- unset($this->plugin_files[ 'include_path' ]);
- } else {
- if (isset($this->plugin_files[ 'include_path' ][ $_lower_filename ])) {
- return $this->plugin_files[ 'include_path' ][ $_lower_filename ];
- }
- }
- }
- $_file_names = array($_plugin_filename);
- if ($_lower_filename !== $_plugin_filename) {
- $_file_names[] = $_lower_filename;
- }
- $_p_dirs = $smarty->getPluginsDir();
- if (!isset($this->plugin_files[ 'plugins_dir' ][ $_lower_filename ])) {
- // loop through plugin dirs and find the plugin
- foreach ($_p_dirs as $_plugin_dir) {
- foreach ($_file_names as $name) {
- $file = $_plugin_dir . $name;
- if (is_file($file)) {
- $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ] = $file;
- include_once $file;
- return $file;
- }
- $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ] = false;
- }
- }
- }
- if ($smarty->use_include_path) {
- foreach ($_file_names as $_file_name) {
- // try PHP include_path
- $file = $smarty->ext->_getIncludePath->getIncludePath($_p_dirs, $_file_name, $smarty);
- $this->plugin_files[ 'include_path' ][ $_lower_filename ] = $file;
- if ($file !== false) {
- include_once $file;
- return $file;
- }
- }
- }
- // no plugin loaded
- return false;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php
deleted file mode 100644
index 381346c8f..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php
+++ /dev/null
@@ -1,50 +0,0 @@
-source->exists) {
- if ($_template->_isSubTpl()) {
- $parent_resource = " in '{$_template->parent->template_resource}'";
- } else {
- $parent_resource = '';
- }
- throw new SmartyException("Unable to load template {$_template->source->type} '{$_template->source->name}'{$parent_resource}");
- }
- if ($_template->mustCompile === null) {
- $_template->mustCompile = (!$_template->source->handler->uncompiled &&
- ($_template->smarty->force_compile || $_template->source->handler->recompiled ||
- !$_template->compiled->exists || ($_template->compile_check &&
- $_template->compiled->getTimeStamp() <
- $_template->source->getTimeStamp())));
- }
- return $_template->mustCompile;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php
deleted file mode 100644
index 5608b3fd0..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php
+++ /dev/null
@@ -1,42 +0,0 @@
-_getSmartyObj();
- $smarty->registered_cache_resources[ $name ] = $resource_handler;
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php
deleted file mode 100644
index 76a69c6e5..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerclass.php
+++ /dev/null
@@ -1,46 +0,0 @@
-_getSmartyObj();
- // test if exists
- if (!class_exists($class_impl)) {
- throw new SmartyException("Undefined class '$class_impl' in register template class");
- }
- // register the class
- $smarty->registered_classes[ $class_name ] = $class_impl;
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php
deleted file mode 100644
index b340f178d..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php
+++ /dev/null
@@ -1,42 +0,0 @@
-_getSmartyObj();
- if (is_callable($callback)) {
- $smarty->default_config_handler_func = $callback;
- } else {
- throw new SmartyException('Default config handler not callable');
- }
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php
deleted file mode 100644
index 4cda5b056..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php
+++ /dev/null
@@ -1,43 +0,0 @@
-_getSmartyObj();
- if (is_callable($callback)) {
- $smarty->default_plugin_handler_func = $callback;
- } else {
- throw new SmartyException("Default plugin handler '$callback' not callable");
- }
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php
deleted file mode 100644
index cbc133ccd..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php
+++ /dev/null
@@ -1,88 +0,0 @@
-_getSmartyObj();
- if (is_callable($callback)) {
- $smarty->default_template_handler_func = $callback;
- } else {
- throw new SmartyException('Default template handler not callable');
- }
- return $obj;
- }
-
- /**
- * get default content from template or config resource handler
- *
- * @param Smarty_Template_Source $source
- *
- * @throws \SmartyException
- */
- public static function _getDefaultTemplate(Smarty_Template_Source $source)
- {
- if ($source->isConfig) {
- $default_handler = $source->smarty->default_config_handler_func;
- } else {
- $default_handler = $source->smarty->default_template_handler_func;
- }
- $_content = $_timestamp = null;
- $_return = call_user_func_array(
- $default_handler,
- array($source->type, $source->name, &$_content, &$_timestamp, $source->smarty)
- );
- if (is_string($_return)) {
- $source->exists = is_file($_return);
- if ($source->exists) {
- $source->timestamp = filemtime($_return);
- } else {
- throw new SmartyException(
- 'Default handler: Unable to load ' .
- ($source->isConfig ? 'config' : 'template') .
- " default file '{$_return}' for '{$source->type}:{$source->name}'"
- );
- }
- $source->name = $source->filepath = $_return;
- $source->uid = sha1($source->filepath);
- } elseif ($_return === true) {
- $source->content = $_content;
- $source->exists = true;
- $source->uid = $source->name = sha1($_content);
- $source->handler = Smarty_Resource::load($source->smarty, 'eval');
- } else {
- $source->exists = false;
- throw new SmartyException(
- 'Default handler: No ' . ($source->isConfig ? 'config' : 'template') .
- " default content for '{$source->type}:{$source->name}'"
- );
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php
deleted file mode 100644
index 9719eb2b6..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php
+++ /dev/null
@@ -1,87 +0,0 @@
- true, 'post' => true, 'output' => true, 'variable' => true);
-
- /**
- * Registers a filter function
- *
- * @api Smarty::registerFilter()
- *
- * @link https://www.smarty.net/docs/en/api.register.filter.tpl
- *
- * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
- * @param string $type filter type
- * @param callback $callback
- * @param string|null $name optional filter name
- *
- * @return \Smarty|\Smarty_Internal_Template
- * @throws \SmartyException
- */
- public function registerFilter(Smarty_Internal_TemplateBase $obj, $type, $callback, $name = null)
- {
- $smarty = $obj->_getSmartyObj();
- $this->_checkFilterType($type);
- $name = isset($name) ? $name : $this->_getFilterName($callback);
- if (!is_callable($callback)) {
- throw new SmartyException("{$type}filter '{$name}' not callable");
- }
- $smarty->registered_filters[ $type ][ $name ] = $callback;
- return $obj;
- }
-
- /**
- * Return internal filter name
- *
- * @param callback $function_name
- *
- * @return string internal filter name
- */
- public function _getFilterName($function_name)
- {
- if (is_array($function_name)) {
- $_class_name = (is_object($function_name[ 0 ]) ? get_class($function_name[ 0 ]) : $function_name[ 0 ]);
- return $_class_name . '_' . $function_name[ 1 ];
- } elseif (is_string($function_name)) {
- return $function_name;
- } else {
- return 'closure';
- }
- }
-
- /**
- * Check if filter type is valid
- *
- * @param string $type
- *
- * @throws \SmartyException
- */
- public function _checkFilterType($type)
- {
- if (!isset($this->filterTypes[ $type ])) {
- throw new SmartyException("Illegal filter type '{$type}'");
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php
deleted file mode 100644
index 8e6fe0521..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerobject.php
+++ /dev/null
@@ -1,84 +0,0 @@
-_getSmartyObj();
- // test if allowed methods callable
- if (!empty($allowed_methods_properties)) {
- foreach ((array)$allowed_methods_properties as $method) {
- if (!is_callable(array($object, $method)) && !property_exists($object, $method)) {
- throw new SmartyException("Undefined method or property '$method' in registered object");
- }
- }
- }
- // test if block methods callable
- if (!empty($block_methods)) {
- foreach ((array)$block_methods as $method) {
- if (!is_callable(array($object, $method))) {
- throw new SmartyException("Undefined method '$method' in registered object");
- }
- }
- }
- // register the object
- $smarty->registered_objects[ $object_name ] =
- array($object, (array)$allowed_methods_properties, (boolean)$format, (array)$block_methods);
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php
deleted file mode 100644
index 74c0ae908..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php
+++ /dev/null
@@ -1,58 +0,0 @@
-_getSmartyObj();
- if (isset($smarty->registered_plugins[ $type ][ $name ])) {
- throw new SmartyException("Plugin tag '{$name}' already registered");
- } elseif (!is_callable($callback)) {
- throw new SmartyException("Plugin '{$name}' not callable");
- } elseif ($cacheable && $cache_attr) {
- throw new SmartyException("Cannot set caching attributes for plugin '{$name}' when it is cacheable.");
- } else {
- $smarty->registered_plugins[ $type ][ $name ] = array($callback, (bool)$cacheable, (array)$cache_attr);
- }
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php
deleted file mode 100644
index 302657ae0..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_registerresource.php
+++ /dev/null
@@ -1,39 +0,0 @@
-_getSmartyObj();
- $smarty->registered_resources[ $name ] = $resource_handler;
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php
deleted file mode 100644
index 2972f3ce1..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php
+++ /dev/null
@@ -1,72 +0,0 @@
- true, 'post' => true, 'output' => true, 'variable' => true);
-
- /**
- * Set autoload filters
- *
- * @api Smarty::setAutoloadFilters()
- *
- * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
- * @param array $filters filters to load automatically
- * @param string $type "pre", "output", … specify
- * the filter type to set.
- * Defaults to none treating
- * $filters' keys as the
- * appropriate types
- *
- * @return \Smarty|\Smarty_Internal_Template
- * @throws \SmartyException
- */
- public function setAutoloadFilters(Smarty_Internal_TemplateBase $obj, $filters, $type = null)
- {
- $smarty = $obj->_getSmartyObj();
- if ($type !== null) {
- $this->_checkFilterType($type);
- $smarty->autoload_filters[ $type ] = (array)$filters;
- } else {
- foreach ((array)$filters as $type => $value) {
- $this->_checkFilterType($type);
- }
- $smarty->autoload_filters = (array)$filters;
- }
- return $obj;
- }
-
- /**
- * Check if filter type is valid
- *
- * @param string $type
- *
- * @throws \SmartyException
- */
- public function _checkFilterType($type)
- {
- if (!isset($this->filterTypes[ $type ])) {
- throw new SmartyException("Illegal filter type '{$type}'");
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php
deleted file mode 100644
index cc9d23e2a..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php
+++ /dev/null
@@ -1,41 +0,0 @@
-_getSmartyObj();
- if (!is_readable($tpl_name)) {
- throw new SmartyException("Unknown file '{$tpl_name}'");
- }
- $smarty->debug_tpl = $tpl_name;
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php
deleted file mode 100644
index eadc2de1b..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php
+++ /dev/null
@@ -1,38 +0,0 @@
-_getSmartyObj();
- $smarty->default_modifiers = (array)$modifiers;
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php
deleted file mode 100644
index e41e8dffc..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php
+++ /dev/null
@@ -1,43 +0,0 @@
-_getSmartyObj();
- $this->_checkFilterType($type);
- if (isset($smarty->registered_filters[ $type ])) {
- $_filter_name = "smarty_{$type}filter_{$name}";
- if (isset($smarty->registered_filters[ $type ][ $_filter_name ])) {
- unset($smarty->registered_filters[ $type ][ $_filter_name ]);
- if (empty($smarty->registered_filters[ $type ])) {
- unset($smarty->registered_filters[ $type ]);
- }
- }
- }
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php
deleted file mode 100644
index 377397e97..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php
+++ /dev/null
@@ -1,40 +0,0 @@
-_getSmartyObj();
- if (isset($smarty->registered_cache_resources[ $name ])) {
- unset($smarty->registered_cache_resources[ $name ]);
- }
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php
deleted file mode 100644
index ebc9337d0..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php
+++ /dev/null
@@ -1,43 +0,0 @@
-_getSmartyObj();
- $this->_checkFilterType($type);
- if (isset($smarty->registered_filters[ $type ])) {
- $name = is_string($callback) ? $callback : $this->_getFilterName($callback);
- if (isset($smarty->registered_filters[ $type ][ $name ])) {
- unset($smarty->registered_filters[ $type ][ $name ]);
- if (empty($smarty->registered_filters[ $type ])) {
- unset($smarty->registered_filters[ $type ]);
- }
- }
- }
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php
deleted file mode 100644
index 77d619637..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php
+++ /dev/null
@@ -1,40 +0,0 @@
-_getSmartyObj();
- if (isset($smarty->registered_objects[ $object_name ])) {
- unset($smarty->registered_objects[ $object_name ]);
- }
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php
deleted file mode 100644
index 2431d5c23..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php
+++ /dev/null
@@ -1,41 +0,0 @@
-_getSmartyObj();
- if (isset($smarty->registered_plugins[ $type ][ $name ])) {
- unset($smarty->registered_plugins[ $type ][ $name ]);
- }
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php
deleted file mode 100644
index bbb6a861d..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php
+++ /dev/null
@@ -1,40 +0,0 @@
-_getSmartyObj();
- if (isset($smarty->registered_resources[ $type ])) {
- unset($smarty->registered_resources[ $type ]);
- }
- return $obj;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_nocache_insert.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_nocache_insert.php
deleted file mode 100644
index 88694dcfd..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_nocache_insert.php
+++ /dev/null
@@ -1,51 +0,0 @@
-assign('{$_assign}' , {$_function} (" . var_export($_attr, true) .
- ',\$_smarty_tpl), true);?>';
- } else {
- $_output .= "echo {$_function}(" . var_export($_attr, true) . ',$_smarty_tpl);?>';
- }
- $_tpl = $_template;
- while ($_tpl->_isSubTpl()) {
- $_tpl = $_tpl->parent;
- }
- return "/*%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/{$_output}/*/%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/";
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree.php
deleted file mode 100644
index 9f7678526..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree.php
+++ /dev/null
@@ -1,50 +0,0 @@
-data = null;
- $this->subtrees = null;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php
deleted file mode 100644
index ae2060673..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_file.php
+++ /dev/null
@@ -1,180 +0,0 @@
-filepath = $this->buildFilepath($source, $_template);
- if ($source->filepath !== false) {
- if (isset($source->smarty->security_policy) && is_object($source->smarty->security_policy)) {
- $source->smarty->security_policy->isTrustedResourceDir($source->filepath, $source->isConfig);
- }
- $source->exists = true;
- $source->uid = sha1(
- $source->filepath . ($source->isConfig ? $source->smarty->_joined_config_dir :
- $source->smarty->_joined_template_dir)
- );
- $source->timestamp = filemtime($source->filepath);
- } else {
- $source->timestamp = $source->exists = false;
- }
- }
-
- /**
- * populate Source Object with timestamp and exists from Resource
- *
- * @param Smarty_Template_Source $source source object
- */
- public function populateTimestamp(Smarty_Template_Source $source)
- {
- if (!$source->exists) {
- $source->timestamp = $source->exists = is_file($source->filepath);
- }
- if ($source->exists) {
- $source->timestamp = filemtime($source->filepath);
- }
- }
-
- /**
- * Load template's source from file into current template object
- *
- * @param Smarty_Template_Source $source source object
- *
- * @return string template source
- * @throws SmartyException if source cannot be loaded
- */
- public function getContent(Smarty_Template_Source $source)
- {
- if ($source->exists) {
- return file_get_contents($source->filepath);
- }
- throw new SmartyException(
- 'Unable to read ' . ($source->isConfig ? 'config' : 'template') .
- " {$source->type} '{$source->name}'"
- );
- }
-
- /**
- * Determine basename for compiled filename
- *
- * @param Smarty_Template_Source $source source object
- *
- * @return string resource's basename
- */
- public function getBasename(Smarty_Template_Source $source)
- {
- return basename($source->filepath);
- }
-
- /**
- * build template filepath by traversing the template_dir array
- *
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
- *
- * @return string fully qualified filepath
- * @throws SmartyException
- */
- protected function buildFilepath(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
- {
- $file = $source->name;
- // absolute file ?
- if ($file[ 0 ] === '/' || $file[ 1 ] === ':') {
- $file = $source->smarty->_realpath($file, true);
- return is_file($file) ? $file : false;
- }
- // go relative to a given template?
- if ($file[ 0 ] === '.' && $_template && $_template->_isSubTpl()
- && preg_match('#^[.]{1,2}[\\\/]#', $file)
- ) {
- if ($_template->parent->source->type !== 'file' && $_template->parent->source->type !== 'extends'
- && !isset($_template->parent->_cache[ 'allow_relative_path' ])
- ) {
- throw new SmartyException("Template '{$file}' cannot be relative to template of resource type '{$_template->parent->source->type}'");
- }
- // normalize path
- $path =
- $source->smarty->_realpath(dirname($_template->parent->source->filepath) . DIRECTORY_SEPARATOR . $file);
- // files relative to a template only get one shot
- return is_file($path) ? $path : false;
- }
- // normalize DIRECTORY_SEPARATOR
- if (strpos($file, DIRECTORY_SEPARATOR === '/' ? '\\' : '/') !== false) {
- $file = str_replace(DIRECTORY_SEPARATOR === '/' ? '\\' : '/', DIRECTORY_SEPARATOR, $file);
- }
- $_directories = $source->smarty->getTemplateDir(null, $source->isConfig);
- // template_dir index?
- if ($file[ 0 ] === '[' && preg_match('#^\[([^\]]+)\](.+)$#', $file, $fileMatch)) {
- $file = $fileMatch[ 2 ];
- $_indices = explode(',', $fileMatch[ 1 ]);
- $_index_dirs = array();
- foreach ($_indices as $index) {
- $index = trim($index);
- // try string indexes
- if (isset($_directories[ $index ])) {
- $_index_dirs[] = $_directories[ $index ];
- } elseif (is_numeric($index)) {
- // try numeric index
- $index = (int)$index;
- if (isset($_directories[ $index ])) {
- $_index_dirs[] = $_directories[ $index ];
- } else {
- // try at location index
- $keys = array_keys($_directories);
- if (isset($_directories[ $keys[ $index ] ])) {
- $_index_dirs[] = $_directories[ $keys[ $index ] ];
- }
- }
- }
- }
- if (empty($_index_dirs)) {
- // index not found
- return false;
- } else {
- $_directories = $_index_dirs;
- }
- }
- // relative file name?
- foreach ($_directories as $_directory) {
- $path = $_directory . $file;
- if (is_file($path)) {
- return (strpos($path, '.' . DIRECTORY_SEPARATOR) !== false) ? $source->smarty->_realpath($path) : $path;
- }
- }
- if (!isset($_index_dirs)) {
- // Could be relative to cwd
- $path = $source->smarty->_realpath($file, true);
- if (is_file($path)) {
- return $path;
- }
- }
- // Use include path ?
- if ($source->smarty->use_include_path) {
- return $source->smarty->ext->_getIncludePath->getIncludePath($_directories, $file, $source->smarty);
- }
- return false;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php
deleted file mode 100644
index 9d98ae181..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_php.php
+++ /dev/null
@@ -1,116 +0,0 @@
-short_open_tag = function_exists('ini_get') ? ini_get('short_open_tag') : 1;
- }
-
- /**
- * Load template's source from file into current template object
- *
- * @param Smarty_Template_Source $source source object
- *
- * @return string template source
- * @throws SmartyException if source cannot be loaded
- */
- public function getContent(Smarty_Template_Source $source)
- {
- if ($source->exists) {
- return '';
- }
- throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
- }
-
- /**
- * populate compiled object with compiled filepath
- *
- * @param Smarty_Template_Compiled $compiled compiled object
- * @param Smarty_Internal_Template $_template template object (is ignored)
- */
- public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template)
- {
- $compiled->filepath = $_template->source->filepath;
- $compiled->timestamp = $_template->source->timestamp;
- $compiled->exists = $_template->source->exists;
- $compiled->file_dependency[ $_template->source->uid ] =
- array(
- $compiled->filepath,
- $compiled->timestamp,
- $_template->source->type,
- );
- }
-
- /**
- * Render and output the template (without using the compiler)
- *
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
- *
- * @return void
- * @throws SmartyException if template cannot be loaded or allow_php_templates is disabled
- */
- public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template)
- {
- if (!$source->smarty->allow_php_templates) {
- throw new SmartyException('PHP templates are disabled');
- }
- if (!$source->exists) {
- throw new SmartyException(
- "Unable to load template '{$source->type}:{$source->name}'" .
- ($_template->_isSubTpl() ? " in '{$_template->parent->template_resource}'" : '')
- );
- }
- // prepare variables
- extract($_template->getTemplateVars());
- // include PHP template with short open tags enabled
- if (function_exists('ini_set')) {
- ini_set('short_open_tag', '1');
- }
- /**
- *
- *
- * @var Smarty_Internal_Template $_smarty_template
- * used in included file
- */
- $_smarty_template = $_template;
- include $source->filepath;
- if (function_exists('ini_set')) {
- ini_set('short_open_tag', $this->short_open_tag);
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php
deleted file mode 100644
index 5f0203498..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_stream.php
+++ /dev/null
@@ -1,78 +0,0 @@
-resource, '://') !== false) {
- $source->filepath = $source->resource;
- } else {
- $source->filepath = str_replace(':', '://', $source->resource);
- }
- $source->uid = false;
- $source->content = $this->getContent($source);
- $source->timestamp = $source->exists = !!$source->content;
- }
-
- /**
- * Load template's source from stream into current template object
- *
- * @param Smarty_Template_Source $source source object
- *
- * @return string template source
- */
- public function getContent(Smarty_Template_Source $source)
- {
- $t = '';
- // the availability of the stream has already been checked in Smarty_Resource::fetch()
- $fp = fopen($source->filepath, 'r+');
- if ($fp) {
- while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
- $t .= $current_line;
- }
- fclose($fp);
- return $t;
- } else {
- return false;
- }
- }
-
- /**
- * modify resource_name according to resource handlers specifications
- *
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
- * @param boolean $isConfig flag for config resource
- *
- * @return string unique resource name
- */
- public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
- {
- return get_class($this) . '#' . $resource_name;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php
deleted file mode 100644
index 3fecbb7ef..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_string.php
+++ /dev/null
@@ -1,108 +0,0 @@
-uid = $source->filepath = sha1($source->name . $source->smarty->_joined_template_dir);
- $source->timestamp = $source->exists = true;
- }
-
- /**
- * Load template's source from $resource_name into current template object
- *
- * @uses decode() to decode base64 and urlencoded template_resources
- *
- * @param Smarty_Template_Source $source source object
- *
- * @return string template source
- */
- public function getContent(Smarty_Template_Source $source)
- {
- return $this->decode($source->name);
- }
-
- /**
- * decode base64 and urlencode
- *
- * @param string $string template_resource to decode
- *
- * @return string decoded template_resource
- */
- protected function decode($string)
- {
- // decode if specified
- if (($pos = strpos($string, ':')) !== false) {
- if (!strncmp($string, 'base64', 6)) {
- return base64_decode(substr($string, 7));
- } elseif (!strncmp($string, 'urlencode', 9)) {
- return urldecode(substr($string, 10));
- }
- }
- return $string;
- }
-
- /**
- * modify resource_name according to resource handlers specifications
- *
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
- * @param boolean $isConfig flag for config resource
- *
- * @return string unique resource name
- */
- public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
- {
- return get_class($this) . '#' . $this->decode($resource_name);
- }
-
- /**
- * Determine basename for compiled filename
- * Always returns an empty string.
- *
- * @param Smarty_Template_Source $source source object
- *
- * @return string resource's basename
- */
- public function getBasename(Smarty_Template_Source $source)
- {
- return '';
- }
-
- /*
- * Disable timestamp checks for string resource.
- *
- * @return bool
- */
- /**
- * @return bool
- */
- public function checkTimestamps()
- {
- return false;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php
deleted file mode 100644
index 6e12d2ae1..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php
+++ /dev/null
@@ -1,68 +0,0 @@
-isCached() && !$_template->compiled->has_nocache_code;
- $_last_modified_date =
- @substr($_SERVER[ 'HTTP_IF_MODIFIED_SINCE' ], 0, strpos($_SERVER[ 'HTTP_IF_MODIFIED_SINCE' ], 'GMT') + 3);
- if ($_isCached && $cached->timestamp <= strtotime($_last_modified_date)) {
- switch (PHP_SAPI) {
- case 'cgi': // php-cgi < 5.3
- case 'cgi-fcgi': // php-cgi >= 5.3
- case 'fpm-fcgi': // php-fpm >= 5.3.3
- header('Status: 304 Not Modified');
- break;
- case 'cli':
- if (/* ^phpunit */
- !empty($_SERVER[ 'SMARTY_PHPUNIT_DISABLE_HEADERS' ]) /* phpunit$ */
- ) {
- $_SERVER[ 'SMARTY_PHPUNIT_HEADERS' ][] = '304 Not Modified';
- }
- break;
- default:
- if (/* ^phpunit */
- !empty($_SERVER[ 'SMARTY_PHPUNIT_DISABLE_HEADERS' ]) /* phpunit$ */
- ) {
- $_SERVER[ 'SMARTY_PHPUNIT_HEADERS' ][] = '304 Not Modified';
- } else {
- header($_SERVER[ 'SERVER_PROTOCOL' ] . ' 304 Not Modified');
- }
- break;
- }
- } else {
- switch (PHP_SAPI) {
- case 'cli':
- if (/* ^phpunit */
- !empty($_SERVER[ 'SMARTY_PHPUNIT_DISABLE_HEADERS' ]) /* phpunit$ */
- ) {
- $_SERVER[ 'SMARTY_PHPUNIT_HEADERS' ][] =
- 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $cached->timestamp) . ' GMT';
- }
- break;
- default:
- header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $cached->timestamp) . ' GMT');
- break;
- }
- echo $content;
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php
deleted file mode 100644
index 287096438..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php
+++ /dev/null
@@ -1,139 +0,0 @@
-use_sub_dirs ? '/' : '^';
- $_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0;
- $_dir = $smarty->getCacheDir();
- if ($_dir === '/') { //We should never want to delete this!
- return 0;
- }
- $_dir_length = strlen($_dir);
- if (isset($_cache_id)) {
- $_cache_id_parts = explode('|', $_cache_id);
- $_cache_id_parts_count = count($_cache_id_parts);
- if ($smarty->use_sub_dirs) {
- foreach ($_cache_id_parts as $id_part) {
- $_dir .= $id_part . '/';
- }
- }
- }
- if (isset($resource_name)) {
- $_save_stat = $smarty->caching;
- $smarty->caching = Smarty::CACHING_LIFETIME_CURRENT;
- $tpl = new $smarty->template_class($resource_name, $smarty);
- $smarty->caching = $_save_stat;
- // remove from template cache
- $tpl->source; // have the template registered before unset()
- if ($tpl->source->exists) {
- $_resourcename_parts = basename(str_replace('^', '/', $tpl->cached->filepath));
- } else {
- return 0;
- }
- }
- $_count = 0;
- $_time = time();
- if (file_exists($_dir)) {
- $_cacheDirs = new RecursiveDirectoryIterator($_dir);
- $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST);
- foreach ($_cache as $_file) {
- if (substr(basename($_file->getPathname()), 0, 1) === '.') {
- continue;
- }
- $_filepath = (string)$_file;
- // directory ?
- if ($_file->isDir()) {
- if (!$_cache->isDot()) {
- // delete folder if empty
- @rmdir($_file->getPathname());
- }
- } else {
- // delete only php files
- if (substr($_filepath, -4) !== '.php') {
- continue;
- }
- $_parts = explode($_dir_sep, str_replace('\\', '/', substr($_filepath, $_dir_length)));
- $_parts_count = count($_parts);
- // check name
- if (isset($resource_name)) {
- if ($_parts[ $_parts_count - 1 ] !== $_resourcename_parts) {
- continue;
- }
- }
- // check compile id
- if (isset($_compile_id) && (!isset($_parts[ $_parts_count - 2 - $_compile_id_offset ])
- || $_parts[ $_parts_count - 2 - $_compile_id_offset ] !== $_compile_id)
- ) {
- continue;
- }
- // check cache id
- if (isset($_cache_id)) {
- // count of cache id parts
- $_parts_count = (isset($_compile_id)) ? $_parts_count - 2 - $_compile_id_offset :
- $_parts_count - 1 - $_compile_id_offset;
- if ($_parts_count < $_cache_id_parts_count) {
- continue;
- }
- for ($i = 0; $i < $_cache_id_parts_count; $i++) {
- if ($_parts[ $i ] !== $_cache_id_parts[ $i ]) {
- continue 2;
- }
- }
- }
- if (is_file($_filepath)) {
- // expired ?
- if (isset($exp_time)) {
- if ($exp_time < 0) {
- preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_filepath), $match);
- if ($_time < (filemtime($_filepath) + $match[ 1 ])) {
- continue;
- }
- } else {
- if ($_time - filemtime($_filepath) < $exp_time) {
- continue;
- }
- }
- }
- $_count += @unlink($_filepath) ? 1 : 0;
- if (function_exists('opcache_invalidate')
- && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1)
- ) {
- opcache_invalidate($_filepath, true);
- } elseif (function_exists('apc_delete_file')) {
- apc_delete_file($_filepath);
- }
- }
- }
- }
- }
- return $_count;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_capture.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_capture.php
deleted file mode 100644
index c9dca83d9..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_capture.php
+++ /dev/null
@@ -1,174 +0,0 @@
-isRegistered) {
- $this->register($_template);
- }
- $this->captureStack[] = array(
- $buffer,
- $assign,
- $append
- );
- $this->captureCount++;
- ob_start();
- }
-
- /**
- * Register callbacks in template class
- *
- * @param \Smarty_Internal_Template $_template
- */
- private function register(Smarty_Internal_Template $_template)
- {
- $_template->startRenderCallbacks[] = array(
- $this,
- 'startRender'
- );
- $_template->endRenderCallbacks[] = array(
- $this,
- 'endRender'
- );
- $this->startRender($_template);
- $this->isRegistered = true;
- }
-
- /**
- * Start render callback
- *
- * @param \Smarty_Internal_Template $_template
- */
- public function startRender(Smarty_Internal_Template $_template)
- {
- $this->countStack[] = $this->captureCount;
- $this->captureCount = 0;
- }
-
- /**
- * Close capture section
- *
- * @param \Smarty_Internal_Template $_template
- *
- * @throws \SmartyException
- */
- public function close(Smarty_Internal_Template $_template)
- {
- if ($this->captureCount) {
- list($buffer, $assign, $append) = array_pop($this->captureStack);
- $this->captureCount--;
- if (isset($assign)) {
- $_template->assign($assign, ob_get_contents());
- }
- if (isset($append)) {
- $_template->append($append, ob_get_contents());
- }
- $this->namedBuffer[ $buffer ] = ob_get_clean();
- } else {
- $this->error($_template);
- }
- }
-
- /**
- * Error exception on not matching {capture}{/capture}
- *
- * @param \Smarty_Internal_Template $_template
- *
- * @throws \SmartyException
- */
- public function error(Smarty_Internal_Template $_template)
- {
- throw new SmartyException("Not matching {capture}{/capture} in '{$_template->template_resource}'");
- }
-
- /**
- * Return content of named capture buffer by key or as array
- *
- * @param \Smarty_Internal_Template $_template
- * @param string|null $name
- *
- * @return string|string[]|null
- */
- public function getBuffer(Smarty_Internal_Template $_template, $name = null)
- {
- if (isset($name)) {
- return isset($this->namedBuffer[ $name ]) ? $this->namedBuffer[ $name ] : null;
- } else {
- return $this->namedBuffer;
- }
- }
-
- /**
- * End render callback
- *
- * @param \Smarty_Internal_Template $_template
- *
- * @throws \SmartyException
- */
- public function endRender(Smarty_Internal_Template $_template)
- {
- if ($this->captureCount) {
- $this->error($_template);
- } else {
- $this->captureCount = array_pop($this->countStack);
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php
deleted file mode 100644
index d0ca751e2..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php
+++ /dev/null
@@ -1,103 +0,0 @@
-compiled->has_nocache_code;
- $properties[ 'file_dependency' ] = $_template->compiled->file_dependency;
- $properties[ 'includes' ] = $_template->compiled->includes;
- } else {
- $properties[ 'has_nocache_code' ] = $_template->cached->has_nocache_code;
- $properties[ 'file_dependency' ] = $_template->cached->file_dependency;
- $properties[ 'cache_lifetime' ] = $_template->cache_lifetime;
- }
- $output = sprintf(
- "source->filepath)
- );
- $output .= "/* @var Smarty_Internal_Template \$_smarty_tpl */\n";
- $dec = "\$_smarty_tpl->_decodeProperties(\$_smarty_tpl, " . var_export($properties, true) . ',' .
- ($cache ? 'true' : 'false') . ')';
- $output .= "if ({$dec}) {\n";
- $output .= "function {$properties['unifunc']} (Smarty_Internal_Template \$_smarty_tpl) {\n";
- if (!$cache && !empty($compiler->tpl_function)) {
- $output .= '$_smarty_tpl->smarty->ext->_tplFunction->registerTplFunctions($_smarty_tpl, ';
- $output .= var_export($compiler->tpl_function, true);
- $output .= ");\n";
- }
- if ($cache && isset($_template->smarty->ext->_tplFunction)) {
- $output .= "\$_smarty_tpl->smarty->ext->_tplFunction->registerTplFunctions(\$_smarty_tpl, " .
- var_export($_template->smarty->ext->_tplFunction->getTplFunction($_template), true) . ");\n";
- }
- $output .= "?>";
- $output .= $content;
- $output .= "";
- $output .= $functions;
- $output .= "[\n]?<\?php\s*/', $output)) {
- $curr_split = preg_split(
- '/\s*\?>[\n]?<\?php\s*/',
- $output
- );
- preg_match_all(
- '/\s*\?>[\n]?<\?php\s*/',
- $output,
- $curr_parts
- );
- $output = '';
- foreach ($curr_split as $idx => $curr_output) {
- $output .= $curr_output;
- if (isset($curr_parts[ 0 ][ $idx ])) {
- $output .= "\n";
- }
- }
- }
- if (preg_match('/\?>\s*$/', $output)) {
- $curr_split = preg_split(
- '/\?>\s*$/',
- $output
- );
- $output = '';
- foreach ($curr_split as $idx => $curr_output) {
- $output .= $curr_output;
- }
- }
- return $output;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php
deleted file mode 100644
index 9f868e1a4..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php
+++ /dev/null
@@ -1,69 +0,0 @@
-smarty->autoload_filters[ $type ])) {
- foreach ((array)$template->smarty->autoload_filters[ $type ] as $name) {
- $plugin_name = "Smarty_{$type}filter_{$name}";
- if (function_exists($plugin_name)) {
- $callback = $plugin_name;
- } elseif (class_exists($plugin_name, false) && is_callable(array($plugin_name, 'execute'))) {
- $callback = array($plugin_name, 'execute');
- } elseif ($template->smarty->loadPlugin($plugin_name, false)) {
- if (function_exists($plugin_name)) {
- // use loaded Smarty2 style plugin
- $callback = $plugin_name;
- } elseif (class_exists($plugin_name, false) && is_callable(array($plugin_name, 'execute'))) {
- // loaded class of filter plugin
- $callback = array($plugin_name, 'execute');
- } else {
- throw new SmartyException("Auto load {$type}-filter plugin method '{$plugin_name}::execute' not callable");
- }
- } else {
- // nothing found, throw exception
- throw new SmartyException("Unable to auto load {$type}-filter plugin '{$plugin_name}'");
- }
- $content = call_user_func($callback, $content, $template);
- }
- }
- // loop over registered filters of specified type
- if (!empty($template->smarty->registered_filters[ $type ])) {
- foreach ($template->smarty->registered_filters[ $type ] as $key => $name) {
- $content = call_user_func($template->smarty->registered_filters[ $type ][ $key ], $content, $template);
- }
- }
- // return filtered output
- return $content;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php
deleted file mode 100644
index badead165..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php
+++ /dev/null
@@ -1,162 +0,0 @@
-count($from);
- }
- } else {
- settype($from, 'array');
- }
- }
- if (!isset($total)) {
- $total = empty($from) ? 0 : ($needTotal ? count($from) : 1);
- }
- if (isset($tpl->tpl_vars[ $item ])) {
- $saveVars[ 'item' ] = array(
- $item,
- $tpl->tpl_vars[ $item ]
- );
- }
- $tpl->tpl_vars[ $item ] = new Smarty_Variable(null, $tpl->isRenderingCache);
- if ($total === 0) {
- $from = null;
- } else {
- if ($key) {
- if (isset($tpl->tpl_vars[ $key ])) {
- $saveVars[ 'key' ] = array(
- $key,
- $tpl->tpl_vars[ $key ]
- );
- }
- $tpl->tpl_vars[ $key ] = new Smarty_Variable(null, $tpl->isRenderingCache);
- }
- }
- if ($needTotal) {
- $tpl->tpl_vars[ $item ]->total = $total;
- }
- if ($name) {
- $namedVar = "__smarty_foreach_{$name}";
- if (isset($tpl->tpl_vars[ $namedVar ])) {
- $saveVars[ 'named' ] = array(
- $namedVar,
- $tpl->tpl_vars[ $namedVar ]
- );
- }
- $namedProp = array();
- if (isset($properties[ 'total' ])) {
- $namedProp[ 'total' ] = $total;
- }
- if (isset($properties[ 'iteration' ])) {
- $namedProp[ 'iteration' ] = 0;
- }
- if (isset($properties[ 'index' ])) {
- $namedProp[ 'index' ] = -1;
- }
- if (isset($properties[ 'show' ])) {
- $namedProp[ 'show' ] = ($total > 0);
- }
- $tpl->tpl_vars[ $namedVar ] = new Smarty_Variable($namedProp);
- }
- $this->stack[] = $saveVars;
- return $from;
- }
-
- /**
- * [util function] counts an array, arrayAccess/traversable or PDOStatement object
- *
- * @param mixed $value
- *
- * @return int the count for arrays and objects that implement countable, 1 for other objects that don't, and 0
- * for empty elements
- */
- public function count($value)
- {
- if ($value instanceof IteratorAggregate) {
- // Note: getIterator() returns a Traversable, not an Iterator
- // thus rewind() and valid() methods may not be present
- return iterator_count($value->getIterator());
- } elseif ($value instanceof Iterator) {
- return $value instanceof Generator ? 1 : iterator_count($value);
- } elseif ($value instanceof Countable) {
- return count($value);
- } elseif ($value instanceof PDOStatement) {
- return $value->rowCount();
- } elseif ($value instanceof Traversable) {
- return iterator_count($value);
- }
- return count((array)$value);
- }
-
- /**
- * Restore saved variables
- *
- * will be called by {break n} or {continue n} for the required number of levels
- *
- * @param \Smarty_Internal_Template $tpl
- * @param int $levels number of levels
- */
- public function restore(Smarty_Internal_Template $tpl, $levels = 1)
- {
- while ($levels) {
- $saveVars = array_pop($this->stack);
- if (!empty($saveVars)) {
- if (isset($saveVars[ 'item' ])) {
- $item = &$saveVars[ 'item' ];
- $tpl->tpl_vars[ $item[ 0 ] ]->value = $item[ 1 ]->value;
- }
- if (isset($saveVars[ 'key' ])) {
- $tpl->tpl_vars[ $saveVars[ 'key' ][ 0 ] ] = $saveVars[ 'key' ][ 1 ];
- }
- if (isset($saveVars[ 'named' ])) {
- $tpl->tpl_vars[ $saveVars[ 'named' ][ 0 ] ] = $saveVars[ 'named' ][ 1 ];
- }
- }
- $levels--;
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php
deleted file mode 100644
index 5ae98304e..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php
+++ /dev/null
@@ -1,181 +0,0 @@
-_include_path !== $_i_path) {
- $this->_include_dirs = array();
- $this->_include_path = $_i_path;
- $_dirs = (array)explode(PATH_SEPARATOR, $_i_path);
- foreach ($_dirs as $_path) {
- if (is_dir($_path)) {
- $this->_include_dirs[] = $smarty->_realpath($_path . DIRECTORY_SEPARATOR, true);
- }
- }
- return true;
- }
- return false;
- }
-
- /**
- * return array with include path directories
- *
- * @param \Smarty $smarty
- *
- * @return array
- */
- public function getIncludePathDirs(Smarty $smarty)
- {
- $this->isNewIncludePath($smarty);
- return $this->_include_dirs;
- }
-
- /**
- * Return full file path from PHP include_path
- *
- * @param string[] $dirs
- * @param string $file
- * @param \Smarty $smarty
- *
- * @return bool|string full filepath or false
- */
- public function getIncludePath($dirs, $file, Smarty $smarty)
- {
- //if (!(isset($this->_has_stream_include) ? $this->_has_stream_include : $this->_has_stream_include = false)) {
- if (!(isset($this->_has_stream_include) ? $this->_has_stream_include :
- $this->_has_stream_include = function_exists('stream_resolve_include_path'))
- ) {
- $this->isNewIncludePath($smarty);
- }
- // try PHP include_path
- foreach ($dirs as $dir) {
- $dir_n = isset($this->number[ $dir ]) ? $this->number[ $dir ] : $this->number[ $dir ] = $this->counter++;
- if (isset($this->isFile[ $dir_n ][ $file ])) {
- if ($this->isFile[ $dir_n ][ $file ]) {
- return $this->isFile[ $dir_n ][ $file ];
- } else {
- continue;
- }
- }
- if (isset($this->_user_dirs[ $dir_n ])) {
- if (false === $this->_user_dirs[ $dir_n ]) {
- continue;
- } else {
- $dir = $this->_user_dirs[ $dir_n ];
- }
- } else {
- if ($dir[ 0 ] === '/' || $dir[ 1 ] === ':') {
- $dir = str_ireplace(getcwd(), '.', $dir);
- if ($dir[ 0 ] === '/' || $dir[ 1 ] === ':') {
- $this->_user_dirs[ $dir_n ] = false;
- continue;
- }
- }
- $dir = substr($dir, 2);
- $this->_user_dirs[ $dir_n ] = $dir;
- }
- if ($this->_has_stream_include) {
- $path = stream_resolve_include_path($dir . (isset($file) ? $file : ''));
- if ($path) {
- return $this->isFile[ $dir_n ][ $file ] = $path;
- }
- } else {
- foreach ($this->_include_dirs as $key => $_i_path) {
- $path = isset($this->isPath[ $key ][ $dir_n ]) ? $this->isPath[ $key ][ $dir_n ] :
- $this->isPath[ $key ][ $dir_n ] = is_dir($_dir_path = $_i_path . $dir) ? $_dir_path : false;
- if ($path === false) {
- continue;
- }
- if (isset($file)) {
- $_file = $this->isFile[ $dir_n ][ $file ] = (is_file($path . $file)) ? $path . $file : false;
- if ($_file) {
- return $_file;
- }
- } else {
- // no file was given return directory path
- return $path;
- }
- }
- }
- }
- return false;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php
deleted file mode 100644
index 8f7f02d59..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php
+++ /dev/null
@@ -1,251 +0,0 @@
-state === 3 && (strpos($tpl->template_resource, 'extendsall') === false)) {
- $tpl->inheritance = new Smarty_Internal_Runtime_Inheritance();
- $tpl->inheritance->init($tpl, $initChild, $blockNames);
- return;
- }
- ++$this->tplIndex;
- $this->sources[ $this->tplIndex ] = $tpl->source;
- // start of child sub template(s)
- if ($initChild) {
- $this->state = 1;
- if (!$this->inheritanceLevel) {
- //grab any output of child templates
- ob_start();
- }
- ++$this->inheritanceLevel;
- // $tpl->startRenderCallbacks[ 'inheritance' ] = array($this, 'subTemplateStart');
- // $tpl->endRenderCallbacks[ 'inheritance' ] = array($this, 'subTemplateEnd');
- }
- // if state was waiting for parent change state to parent
- if ($this->state === 2) {
- $this->state = 3;
- }
- }
-
- /**
- * End of child template(s)
- * - if outer level is reached flush output buffer and switch to wait for parent template state
- *
- * @param \Smarty_Internal_Template $tpl
- * @param null|string $template optional name of inheritance parent template
- * @param null|string $uid uid of inline template
- * @param null|string $func function call name of inline template
- *
- * @throws \Exception
- * @throws \SmartyException
- */
- public function endChild(Smarty_Internal_Template $tpl, $template = null, $uid = null, $func = null)
- {
- --$this->inheritanceLevel;
- if (!$this->inheritanceLevel) {
- ob_end_clean();
- $this->state = 2;
- }
- if (isset($template) && (($tpl->parent->_isTplObj() && $tpl->parent->source->type !== 'extends')
- || $tpl->smarty->extends_recursion)
- ) {
- $tpl->_subTemplateRender(
- $template,
- $tpl->cache_id,
- $tpl->compile_id,
- $tpl->caching ? 9999 : 0,
- $tpl->cache_lifetime,
- array(),
- 2,
- false,
- $uid,
- $func
- );
- }
- }
-
- /**
- * Smarty_Internal_Block constructor.
- * - if outer level {block} of child template ($state === 1) save it as child root block
- * - otherwise process inheritance and render
- *
- * @param \Smarty_Internal_Template $tpl
- * @param $className
- * @param string $name
- * @param int|null $tplIndex index of outer level {block} if nested
- *
- * @throws \SmartyException
- */
- public function instanceBlock(Smarty_Internal_Template $tpl, $className, $name, $tplIndex = null)
- {
- $block = new $className($name, isset($tplIndex) ? $tplIndex : $this->tplIndex);
- if (isset($this->childRoot[ $name ])) {
- $block->child = $this->childRoot[ $name ];
- }
- if ($this->state === 1) {
- $this->childRoot[ $name ] = $block;
- return;
- }
- // make sure we got child block of child template of current block
- while ($block->child && $block->child->child && $block->tplIndex <= $block->child->tplIndex) {
- $block->child = $block->child->child;
- }
- $this->process($tpl, $block);
- }
-
- /**
- * Goto child block or render this
- *
- * @param \Smarty_Internal_Template $tpl
- * @param \Smarty_Internal_Block $block
- * @param \Smarty_Internal_Block|null $parent
- *
- * @throws \SmartyException
- */
- public function process(
- Smarty_Internal_Template $tpl,
- Smarty_Internal_Block $block,
- Smarty_Internal_Block $parent = null
- ) {
- if ($block->hide && !isset($block->child)) {
- return;
- }
- if (isset($block->child) && $block->child->hide && !isset($block->child->child)) {
- $block->child = null;
- }
- $block->parent = $parent;
- if ($block->append && !$block->prepend && isset($parent)) {
- $this->callParent($tpl, $block, '\'{block append}\'');
- }
- if ($block->callsChild || !isset($block->child) || ($block->child->hide && !isset($block->child->child))) {
- $this->callBlock($block, $tpl);
- } else {
- $this->process($tpl, $block->child, $block);
- }
- if ($block->prepend && isset($parent)) {
- $this->callParent($tpl, $block, '{block prepend}');
- if ($block->append) {
- if ($block->callsChild || !isset($block->child)
- || ($block->child->hide && !isset($block->child->child))
- ) {
- $this->callBlock($block, $tpl);
- } else {
- $this->process($tpl, $block->child, $block);
- }
- }
- }
- $block->parent = null;
- }
-
- /**
- * Render child on \$smarty.block.child
- *
- * @param \Smarty_Internal_Template $tpl
- * @param \Smarty_Internal_Block $block
- *
- * @return null|string block content
- * @throws \SmartyException
- */
- public function callChild(Smarty_Internal_Template $tpl, Smarty_Internal_Block $block)
- {
- if (isset($block->child)) {
- $this->process($tpl, $block->child, $block);
- }
- }
-
- /**
- * Render parent block on \$smarty.block.parent or {block append/prepend}
- *
- * @param \Smarty_Internal_Template $tpl
- * @param \Smarty_Internal_Block $block
- * @param string $tag
- *
- * @return null|string block content
- * @throws \SmartyException
- */
- public function callParent(Smarty_Internal_Template $tpl, Smarty_Internal_Block $block, $tag)
- {
- if (isset($block->parent)) {
- $this->callBlock($block->parent, $tpl);
- } else {
- throw new SmartyException("inheritance: illegal '{$tag}' used in child template '{$tpl->inheritance->sources[$block->tplIndex]->filepath}' block '{$block->name}'");
- }
- }
-
- /**
- * render block
- *
- * @param \Smarty_Internal_Block $block
- * @param \Smarty_Internal_Template $tpl
- */
- public function callBlock(Smarty_Internal_Block $block, Smarty_Internal_Template $tpl)
- {
- $this->sourceStack[] = $tpl->source;
- $tpl->source = $this->sources[ $block->tplIndex ];
- $block->callBlock($tpl);
- $tpl->source = array_pop($this->sourceStack);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php
deleted file mode 100644
index 7994aa048..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php
+++ /dev/null
@@ -1,54 +0,0 @@
-tpl_vars[ $var ])) {
- $export =
- preg_replace('/^\\\\?Smarty_Variable::__set_state[(]|[)]$/', '', var_export($tpl->tpl_vars[ $var ], true));
- if (preg_match('/(\w+)::__set_state/', $export, $match)) {
- throw new SmartyException("{make_nocache \${$var}} in template '{$tpl->source->name}': variable does contain object '{$match[1]}' not implementing method '__set_state'");
- }
- echo "/*%%SmartyNocache:{$tpl->compiled->nocache_hash}%%*/smarty->ext->_make_nocache->store(\$_smarty_tpl, '{$var}', ", '\\') .
- $export . ");?>\n/*/%%SmartyNocache:{$tpl->compiled->nocache_hash}%%*/";
- }
- }
-
- /**
- * Store variable value saved while rendering compiled template in cached template context
- *
- * @param \Smarty_Internal_Template $tpl
- * @param string $var variable name
- * @param array $properties
- */
- public function store(Smarty_Internal_Template $tpl, $var, $properties)
- {
- // do not overwrite existing nocache variables
- if (!isset($tpl->tpl_vars[ $var ]) || !$tpl->tpl_vars[ $var ]->nocache) {
- $newVar = new Smarty_Variable();
- unset($properties[ 'nocache' ]);
- foreach ($properties as $k => $v) {
- $newVar->$k = $v;
- }
- $tpl->tpl_vars[ $var ] = $newVar;
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php
deleted file mode 100644
index e5f8e48f7..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php
+++ /dev/null
@@ -1,177 +0,0 @@
-tplFunctions[ $name ]) ? $tpl->tplFunctions[ $name ] :
- (isset($tpl->smarty->tplFunctions[ $name ]) ? $tpl->smarty->tplFunctions[ $name ] : null);
- if (isset($funcParam)) {
- if (!$tpl->caching || ($tpl->caching && $nocache)) {
- $function = $funcParam[ 'call_name' ];
- } else {
- if (isset($funcParam[ 'call_name_caching' ])) {
- $function = $funcParam[ 'call_name_caching' ];
- } else {
- $function = $funcParam[ 'call_name' ];
- }
- }
- if (function_exists($function)) {
- $this->saveTemplateVariables($tpl, $name);
- $function($tpl, $params);
- $this->restoreTemplateVariables($tpl, $name);
- return;
- }
- // try to load template function dynamically
- if ($this->addTplFuncToCache($tpl, $name, $function)) {
- $this->saveTemplateVariables($tpl, $name);
- $function($tpl, $params);
- $this->restoreTemplateVariables($tpl, $name);
- return;
- }
- }
- throw new SmartyException("Unable to find template function '{$name}'");
- }
-
- /**
- * Register template functions defined by template
- *
- * @param \Smarty|\Smarty_Internal_Template|\Smarty_Internal_TemplateBase $obj
- * @param array $tplFunctions source information array of
- * template functions defined
- * in template
- * @param bool $override if true replace existing
- * functions with same name
- */
- public function registerTplFunctions(Smarty_Internal_TemplateBase $obj, $tplFunctions, $override = true)
- {
- $obj->tplFunctions =
- $override ? array_merge($obj->tplFunctions, $tplFunctions) : array_merge($tplFunctions, $obj->tplFunctions);
- // make sure that the template functions are known in parent templates
- if ($obj->_isSubTpl()) {
- $obj->smarty->ext->_tplFunction->registerTplFunctions($obj->parent, $tplFunctions, false);
- } else {
- $obj->smarty->tplFunctions = $override ? array_merge($obj->smarty->tplFunctions, $tplFunctions) :
- array_merge($tplFunctions, $obj->smarty->tplFunctions);
- }
- }
-
- /**
- * Return source parameter array for single or all template functions
- *
- * @param \Smarty_Internal_Template $tpl template object
- * @param null|string $name template function name
- *
- * @return array|bool|mixed
- */
- public function getTplFunction(Smarty_Internal_Template $tpl, $name = null)
- {
- if (isset($name)) {
- return isset($tpl->tplFunctions[ $name ]) ? $tpl->tplFunctions[ $name ] :
- (isset($tpl->smarty->tplFunctions[ $name ]) ? $tpl->smarty->tplFunctions[ $name ] : false);
- } else {
- return empty($tpl->tplFunctions) ? $tpl->smarty->tplFunctions : $tpl->tplFunctions;
- }
- }
-
- /**
- * Add template function to cache file for nocache calls
- *
- * @param Smarty_Internal_Template $tpl
- * @param string $_name template function name
- * @param string $_function PHP function name
- *
- * @return bool
- */
- public function addTplFuncToCache(Smarty_Internal_Template $tpl, $_name, $_function)
- {
- $funcParam = $tpl->tplFunctions[ $_name ];
- if (is_file($funcParam[ 'compiled_filepath' ])) {
- // read compiled file
- $code = file_get_contents($funcParam[ 'compiled_filepath' ]);
- // grab template function
- if (preg_match("/\/\* {$_function} \*\/([\S\s]*?)\/\*\/ {$_function} \*\//", $code, $match)) {
- // grab source info from file dependency
- preg_match("/\s*'{$funcParam['uid']}'([\S\s]*?)\),/", $code, $match1);
- unset($code);
- // make PHP function known
- eval($match[ 0 ]);
- if (function_exists($_function)) {
- // search cache file template
- $tplPtr = $tpl;
- while (!isset($tplPtr->cached) && isset($tplPtr->parent)) {
- $tplPtr = $tplPtr->parent;
- }
- // add template function code to cache file
- if (isset($tplPtr->cached)) {
- $content = $tplPtr->cached->read($tplPtr);
- if ($content) {
- // check if we must update file dependency
- if (!preg_match("/'{$funcParam['uid']}'(.*?)'nocache_hash'/", $content, $match2)) {
- $content = preg_replace("/('file_dependency'(.*?)\()/", "\\1{$match1[0]}", $content);
- }
- $tplPtr->smarty->ext->_updateCache->write(
- $tplPtr,
- preg_replace('/\s*\?>\s*$/', "\n", $content) .
- "\n" . preg_replace(
- array(
- '/^\s*<\?php\s+/',
- '/\s*\?>\s*$/',
- ),
- "\n",
- $match[ 0 ]
- )
- );
- }
- }
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * Save current template variables on stack
- *
- * @param \Smarty_Internal_Template $tpl
- * @param string $name stack name
- */
- public function saveTemplateVariables(Smarty_Internal_Template $tpl, $name)
- {
- $tpl->_cache[ 'varStack' ][] =
- array('tpl' => $tpl->tpl_vars, 'config' => $tpl->config_vars, 'name' => "_tplFunction_{$name}");
- }
-
- /**
- * Restore saved variables into template objects
- *
- * @param \Smarty_Internal_Template $tpl
- * @param string $name stack name
- */
- public function restoreTemplateVariables(Smarty_Internal_Template $tpl, $name)
- {
- if (isset($tpl->_cache[ 'varStack' ])) {
- $vars = array_pop($tpl->_cache[ 'varStack' ]);
- $tpl->tpl_vars = $vars[ 'tpl' ];
- $tpl->config_vars = $vars[ 'config' ];
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php
deleted file mode 100644
index c1abbb321..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php
+++ /dev/null
@@ -1,183 +0,0 @@
-compiled)) {
- $_template->loadCompiled();
- }
- $_template->compiled->render($_template);
- if ($_template->smarty->debugging) {
- $_template->smarty->_debug->start_cache($_template);
- }
- $this->removeNoCacheHash($cached, $_template, $no_output_filter);
- $compile_check = (int)$_template->compile_check;
- $_template->compile_check = Smarty::COMPILECHECK_OFF;
- if ($_template->_isSubTpl()) {
- $_template->compiled->unifunc = $_template->parent->compiled->unifunc;
- }
- if (!$_template->cached->processed) {
- $_template->cached->process($_template, true);
- }
- $_template->compile_check = $compile_check;
- $cached->getRenderedTemplateCode($_template);
- if ($_template->smarty->debugging) {
- $_template->smarty->_debug->end_cache($_template);
- }
- }
-
- /**
- * Sanitize content and write it to cache resource
- *
- * @param \Smarty_Template_Cached $cached
- * @param Smarty_Internal_Template $_template
- * @param bool $no_output_filter
- *
- * @throws \SmartyException
- */
- public function removeNoCacheHash(
- Smarty_Template_Cached $cached,
- Smarty_Internal_Template $_template,
- $no_output_filter
- ) {
- $php_pattern = '/(<%|%>|<\?php|<\?|\?>|]*>)|(]*>)|(]*>.*? ]*>)#is',
- $text,
- $matches,
- PREG_OFFSET_CAPTURE | PREG_SET_ORDER
- )
- ) {
- foreach ($matches as $match) {
- $store[] = $match[ 0 ][ 0 ];
- $_length = strlen($match[ 0 ][ 0 ]);
- $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
- $text = substr_replace($text, $replace, $match[ 0 ][ 1 ] - $_offset, $_length);
- $_offset += $_length - strlen($replace);
- $_store++;
- }
- }
- $expressions = array(// replace multiple spaces between tags by a single space
- '#(:SMARTY@!@|>)[\040\011]+(?=@!@SMARTY:|<)#s' => '\1 \2',
- // remove newline between tags
- '#(:SMARTY@!@|>)[\040\011]*[\n]\s*(?=@!@SMARTY:|<)#s' => '\1\2',
- // remove multiple spaces between attributes (but not in attribute values!)
- '#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5',
- '#>[\040\011]+$#Ss' => '> ',
- '#>[\040\011]*[\n]\s*$#Ss' => '>',
- $this->stripRegEx => '',
- );
- $text = preg_replace(array_keys($expressions), array_values($expressions), $text);
- $_offset = 0;
- if (preg_match_all(
- '#@!@SMARTY:([0-9]+):SMARTY@!@#is',
- $text,
- $matches,
- PREG_OFFSET_CAPTURE | PREG_SET_ORDER
- )
- ) {
- foreach ($matches as $match) {
- $_length = strlen($match[ 0 ][ 0 ]);
- $replace = $store[ $match[ 1 ][ 0 ] ];
- $text = substr_replace($text, $replace, $match[ 0 ][ 1 ] + $_offset, $_length);
- $_offset += strlen($replace) - $_length;
- $_store++;
- }
- }
- return $text;
- }
-
- /**
- * lazy loads internal compile plugin for tag and calls the compile method
- * compile objects cached for reuse.
- * class name format: Smarty_Internal_Compile_TagName
- * plugin filename format: Smarty_Internal_TagName.php
- *
- * @param string $tag tag name
- * @param array $args list of tag attributes
- * @param mixed $param1 optional parameter
- * @param mixed $param2 optional parameter
- * @param mixed $param3 optional parameter
- *
- * @return bool|string compiled code or false
- * @throws \SmartyCompilerException
- */
- public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null)
- {
- /* @var Smarty_Internal_CompileBase $tagCompiler */
- $tagCompiler = $this->getTagCompiler($tag);
- // compile this tag
- return $tagCompiler === false ? false : $tagCompiler->compile($args, $this, $param1, $param2, $param3);
- }
-
- /**
- * lazy loads internal compile plugin for tag compile objects cached for reuse.
- *
- * class name format: Smarty_Internal_Compile_TagName
- * plugin filename format: Smarty_Internal_TagName.php
- *
- * @param string $tag tag name
- *
- * @return bool|\Smarty_Internal_CompileBase tag compiler object or false if not found
- */
- public function getTagCompiler($tag)
- {
- // re-use object if already exists
- if (!isset(self::$_tag_objects[ $tag ])) {
- // lazy load internal compiler plugin
- $_tag = explode('_', $tag);
- $_tag = array_map('smarty_ucfirst_ascii', $_tag);
- $class_name = 'Smarty_Internal_Compile_' . implode('_', $_tag);
- if (class_exists($class_name)
- && (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))
- ) {
- self::$_tag_objects[ $tag ] = new $class_name;
- } else {
- self::$_tag_objects[ $tag ] = false;
- }
- }
- return self::$_tag_objects[ $tag ];
- }
-
- /**
- * Check for plugins and return function name
- *
- * @param $plugin_name
- * @param string $plugin_type type of plugin
- *
- * @return string call name of function
- * @throws \SmartyException
- */
- public function getPlugin($plugin_name, $plugin_type)
- {
- $function = null;
- if ($this->caching && ($this->nocache || $this->tag_nocache)) {
- if (isset($this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ])) {
- $function =
- $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ];
- } elseif (isset($this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ])) {
- $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ] =
- $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ];
- $function =
- $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ];
- }
- } else {
- if (isset($this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ])) {
- $function =
- $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ];
- } elseif (isset($this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ])) {
- $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ] =
- $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ];
- $function =
- $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ];
- }
- }
- if (isset($function)) {
- if ($plugin_type === 'modifier') {
- $this->modifier_plugins[ $plugin_name ] = true;
- }
- return $function;
- }
- // loop through plugin dirs and find the plugin
- $function = 'smarty_' . $plugin_type . '_' . $plugin_name;
- $file = $this->smarty->loadPlugin($function, false);
- if (is_string($file)) {
- if ($this->caching && ($this->nocache || $this->tag_nocache)) {
- $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'file' ] =
- $file;
- $this->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ] =
- $function;
- } else {
- $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'file' ] =
- $file;
- $this->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ] =
- $function;
- }
- if ($plugin_type === 'modifier') {
- $this->modifier_plugins[ $plugin_name ] = true;
- }
- return $function;
- }
- if (is_callable($function)) {
- // plugin function is defined in the script
- return $function;
- }
- return false;
- }
-
- /**
- * Check for plugins by default plugin handler
- *
- * @param string $tag name of tag
- * @param string $plugin_type type of plugin
- *
- * @return bool true if found
- * @throws \SmartyCompilerException
- */
- public function getPluginFromDefaultHandler($tag, $plugin_type)
- {
- $callback = null;
- $script = null;
- $cacheable = true;
- $result = call_user_func_array(
- $this->smarty->default_plugin_handler_func,
- array(
- $tag,
- $plugin_type,
- $this->template,
- &$callback,
- &$script,
- &$cacheable,
- )
- );
- if ($result) {
- $this->tag_nocache = $this->tag_nocache || !$cacheable;
- if ($script !== null) {
- if (is_file($script)) {
- if ($this->caching && ($this->nocache || $this->tag_nocache)) {
- $this->required_plugins[ 'nocache' ][ $tag ][ $plugin_type ][ 'file' ] =
- $script;
- $this->required_plugins[ 'nocache' ][ $tag ][ $plugin_type ][ 'function' ] =
- $callback;
- } else {
- $this->required_plugins[ 'compiled' ][ $tag ][ $plugin_type ][ 'file' ] =
- $script;
- $this->required_plugins[ 'compiled' ][ $tag ][ $plugin_type ][ 'function' ] =
- $callback;
- }
- include_once $script;
- } else {
- $this->trigger_template_error("Default plugin handler: Returned script file '{$script}' for '{$tag}' not found");
- }
- }
- if (is_callable($callback)) {
- $this->default_handler_plugins[ $plugin_type ][ $tag ] = array(
- $callback,
- true,
- array()
- );
- return true;
- } else {
- $this->trigger_template_error("Default plugin handler: Returned callback for '{$tag}' not callable");
- }
- }
- return false;
- }
-
- /**
- * Append code segments and remove unneeded ?> \s?$/D', $left) && preg_match('/^<\?php\s+/', $right)) {
- $left = preg_replace('/\s*\?>\s?$/D', "\n", $left);
- $left .= preg_replace('/^<\?php\s+/', '', $right);
- } else {
- $left .= $right;
- }
- return $left;
- }
-
- /**
- * Inject inline code for nocache template sections
- * This method gets the content of each template element from the parser.
- * If the content is compiled code and it should be not cached the code is injected
- * into the rendered output.
- *
- * @param string $content content of template element
- * @param boolean $is_code true if content is compiled code
- *
- * @return string content
- */
- public function processNocacheCode($content, $is_code)
- {
- // If the template is not evaluated and we have a nocache section and or a nocache tag
- if ($is_code && !empty($content)) {
- // generate replacement code
- if ((!($this->template->source->handler->recompiled) || $this->forceNocache) && $this->caching
- && !$this->suppressNocacheProcessing && ($this->nocache || $this->tag_nocache)
- ) {
- $this->template->compiled->has_nocache_code = true;
- $_output = addcslashes($content, '\'\\');
- $_output = str_replace('^#^', '\'', $_output);
- $_output =
- "nocache_hash}%%*/{$_output}/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n";
- // make sure we include modifier plugins for nocache code
- foreach ($this->modifier_plugins as $plugin_name => $dummy) {
- if (isset($this->required_plugins[ 'compiled' ][ $plugin_name ][ 'modifier' ])) {
- $this->required_plugins[ 'nocache' ][ $plugin_name ][ 'modifier' ] =
- $this->required_plugins[ 'compiled' ][ $plugin_name ][ 'modifier' ];
- }
- }
- } else {
- $_output = $content;
- }
- } else {
- $_output = $content;
- }
- $this->modifier_plugins = array();
- $this->suppressNocacheProcessing = false;
- $this->tag_nocache = false;
- return $_output;
- }
-
- /**
- * Get Id
- *
- * @param string $input
- *
- * @return bool|string
- */
- public function getId($input)
- {
- if (preg_match('~^([\'"]*)([0-9]*[a-zA-Z_]\w*)\1$~', $input, $match)) {
- return $match[ 2 ];
- }
- return false;
- }
-
- /**
- * Get variable name from string
- *
- * @param string $input
- *
- * @return bool|string
- */
- public function getVariableName($input)
- {
- if (preg_match('~^[$]_smarty_tpl->tpl_vars\[[\'"]*([0-9]*[a-zA-Z_]\w*)[\'"]*\]->value$~', $input, $match)) {
- return $match[ 1 ];
- }
- return false;
- }
-
- /**
- * Set nocache flag in variable or create new variable
- *
- * @param string $varName
- */
- public function setNocacheInVariable($varName)
- {
- // create nocache var to make it know for further compiling
- if ($_var = $this->getId($varName)) {
- if (isset($this->template->tpl_vars[ $_var ])) {
- $this->template->tpl_vars[ $_var ] = clone $this->template->tpl_vars[ $_var ];
- $this->template->tpl_vars[ $_var ]->nocache = true;
- } else {
- $this->template->tpl_vars[ $_var ] = new Smarty_Variable(null, true);
- }
- }
- }
-
- /**
- * @param array $_attr tag attributes
- * @param array $validScopes
- *
- * @return int|string
- * @throws \SmartyCompilerException
- */
- public function convertScope($_attr, $validScopes)
- {
- $_scope = 0;
- if (isset($_attr[ 'scope' ])) {
- $_scopeName = trim($_attr[ 'scope' ], '\'"');
- if (is_numeric($_scopeName) && in_array($_scopeName, $validScopes)) {
- $_scope = $_scopeName;
- } elseif (is_string($_scopeName)) {
- $_scopeName = trim($_scopeName, '\'"');
- $_scope = isset($validScopes[ $_scopeName ]) ? $validScopes[ $_scopeName ] : false;
- } else {
- $_scope = false;
- }
- if ($_scope === false) {
- $err = var_export($_scopeName, true);
- $this->trigger_template_error("illegal value '{$err}' for \"scope\" attribute", null, true);
- }
- }
- return $_scope;
- }
-
- /**
- * Generate nocache code string
- *
- * @param string $code PHP code
- *
- * @return string
- */
- public function makeNocacheCode($code)
- {
- return "echo '/*%%SmartyNocache:{$this->nocache_hash}%%*//*/%%SmartyNocache:{$this->nocache_hash}%%*/';\n";
- }
-
- /**
- * display compiler error messages without dying
- * If parameter $args is empty it is a parser detected syntax error.
- * In this case the parser is called to obtain information about expected tokens.
- * If parameter $args contains a string this is used as error message
- *
- * @param string $args individual error message or null
- * @param string $line line-number
- * @param null|bool $tagline if true the line number of last tag
- *
- * @throws \SmartyCompilerException when an unexpected token is found
- */
- public function trigger_template_error($args = null, $line = null, $tagline = null)
- {
- $lex = $this->parser->lex;
- if ($tagline === true) {
- // get line number of Tag
- $line = $lex->taglineno;
- } elseif (!isset($line)) {
- // get template source line which has error
- $line = $lex->line;
- } else {
- $line = (int)$line;
- }
- if (in_array(
- $this->template->source->type,
- array(
- 'eval',
- 'string'
- )
- )
- ) {
- $templateName = $this->template->source->type . ':' . trim(
- preg_replace(
- '![\t\r\n]+!',
- ' ',
- strlen($lex->data) > 40 ?
- substr($lex->data, 0, 40) .
- '...' : $lex->data
- )
- );
- } else {
- $templateName = $this->template->source->type . ':' . $this->template->source->filepath;
- }
- // $line += $this->trace_line_offset;
- $match = preg_split("/\n/", $lex->data);
- $error_text =
- 'Syntax error in template "' . (empty($this->trace_filepath) ? $templateName : $this->trace_filepath) .
- '" on line ' . ($line + $this->trace_line_offset) . ' "' .
- trim(preg_replace('![\t\r\n]+!', ' ', $match[ $line - 1 ])) . '" ';
- if (isset($args)) {
- // individual error message
- $error_text .= $args;
- } else {
- $expect = array();
- // expected token from parser
- $error_text .= ' - Unexpected "' . $lex->value . '"';
- if (count($this->parser->yy_get_expected_tokens($this->parser->yymajor)) <= 4) {
- foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) {
- $exp_token = $this->parser->yyTokenName[ $token ];
- if (isset($lex->smarty_token_names[ $exp_token ])) {
- // token type from lexer
- $expect[] = '"' . $lex->smarty_token_names[ $exp_token ] . '"';
- } else {
- // otherwise internal token name
- $expect[] = $this->parser->yyTokenName[ $token ];
- }
- }
- $error_text .= ', expected one of: ' . implode(' , ', $expect);
- }
- }
- if ($this->smarty->_parserdebug) {
- $this->parser->errorRunDown();
- echo ob_get_clean();
- flush();
- }
- $e = new SmartyCompilerException(
- $error_text,
- 0,
- $this->template->source->filepath,
- $line
- );
- $e->source = trim(preg_replace('![\t\r\n]+!', ' ', $match[ $line - 1 ]));
- $e->desc = $args;
- $e->template = $this->template->source->filepath;
- throw $e;
- }
-
- /**
- * Return var_export() value with all white spaces removed
- *
- * @param mixed $value
- *
- * @return string
- */
- public function getVarExport($value)
- {
- return preg_replace('/\s/', '', var_export($value, true));
- }
-
- /**
- * enter double quoted string
- * - save tag stack count
- */
- public function enterDoubleQuote()
- {
- array_push($this->_tag_stack_count, $this->getTagStackCount());
- }
-
- /**
- * Return tag stack count
- *
- * @return int
- */
- public function getTagStackCount()
- {
- return count($this->_tag_stack);
- }
-
- /**
- * @param $lexerPreg
- *
- * @return mixed
- */
- public function replaceDelimiter($lexerPreg)
- {
- return str_replace(
- array('SMARTYldel', 'SMARTYliteral', 'SMARTYrdel', 'SMARTYautoliteral', 'SMARTYal'),
- array(
- $this->ldelPreg, $this->literalPreg, $this->rdelPreg,
- $this->smarty->getAutoLiteral() ? '{1,}' : '{9}',
- $this->smarty->getAutoLiteral() ? '' : '\\s*'
- ),
- $lexerPreg
- );
- }
-
- /**
- * Build lexer regular expressions for left and right delimiter and user defined literals
- */
- public function initDelimiterPreg()
- {
- $ldel = $this->smarty->getLeftDelimiter();
- $this->ldelLength = strlen($ldel);
- $this->ldelPreg = '';
- foreach (str_split($ldel, 1) as $chr) {
- $this->ldelPreg .= '[' . preg_quote($chr,'/') . ']';
- }
- $rdel = $this->smarty->getRightDelimiter();
- $this->rdelLength = strlen($rdel);
- $this->rdelPreg = '';
- foreach (str_split($rdel, 1) as $chr) {
- $this->rdelPreg .= '[' . preg_quote($chr,'/') . ']';
- }
- $literals = $this->smarty->getLiterals();
- if (!empty($literals)) {
- foreach ($literals as $key => $literal) {
- $literalPreg = '';
- foreach (str_split($literal, 1) as $chr) {
- $literalPreg .= '[' . preg_quote($chr,'/') . ']';
- }
- $literals[ $key ] = $literalPreg;
- }
- $this->literalPreg = '|' . implode('|', $literals);
- } else {
- $this->literalPreg = '';
- }
- }
-
- /**
- * leave double quoted string
- * - throw exception if block in string was not closed
- *
- * @throws \SmartyCompilerException
- */
- public function leaveDoubleQuote()
- {
- if (array_pop($this->_tag_stack_count) !== $this->getTagStackCount()) {
- $tag = $this->getOpenBlockTag();
- $this->trigger_template_error(
- "unclosed '{{$tag}}' in doubled quoted string",
- null,
- true
- );
- }
- }
-
- /**
- * Get left delimiter preg
- *
- * @return string
- */
- public function getLdelPreg()
- {
- return $this->ldelPreg;
- }
-
- /**
- * Get right delimiter preg
- *
- * @return string
- */
- public function getRdelPreg()
- {
- return $this->rdelPreg;
- }
-
- /**
- * Get length of left delimiter
- *
- * @return int
- */
- public function getLdelLength()
- {
- return $this->ldelLength;
- }
-
- /**
- * Get length of right delimiter
- *
- * @return int
- */
- public function getRdelLength()
- {
- return $this->rdelLength;
- }
-
- /**
- * Get name of current open block tag
- *
- * @return string|boolean
- */
- public function getOpenBlockTag()
- {
- $tagCount = $this->getTagStackCount();
- if ($tagCount) {
- return $this->_tag_stack[ $tagCount - 1 ][ 0 ];
- } else {
- return false;
- }
- }
-
- /**
- * Check if $value contains variable elements
- *
- * @param mixed $value
- *
- * @return bool|int
- */
- public function isVariable($value)
- {
- if (is_string($value)) {
- return preg_match('/[$(]/', $value);
- }
- if (is_bool($value) || is_numeric($value)) {
- return false;
- }
- if (is_array($value)) {
- foreach ($value as $k => $v) {
- if ($this->isVariable($k) || $this->isVariable($v)) {
- return true;
- }
- }
- return false;
- }
- return false;
- }
-
- /**
- * Get new prefix variable name
- *
- * @return string
- */
- public function getNewPrefixVariable()
- {
- ++self::$prefixVariableNumber;
- return $this->getPrefixVariable();
- }
-
- /**
- * Get current prefix variable name
- *
- * @return string
- */
- public function getPrefixVariable()
- {
- return '$_prefixVariable' . self::$prefixVariableNumber;
- }
-
- /**
- * append code to prefix buffer
- *
- * @param string $code
- */
- public function appendPrefixCode($code)
- {
- $this->prefix_code[] = $code;
- }
-
- /**
- * get prefix code string
- *
- * @return string
- */
- public function getPrefixCode()
- {
- $code = '';
- $prefixArray = array_merge($this->prefix_code, array_pop($this->prefixCodeStack));
- $this->prefixCodeStack[] = array();
- foreach ($prefixArray as $c) {
- $code = $this->appendCode($code, $c);
- }
- $this->prefix_code = array();
- return $code;
- }
-
- /**
- * Save current required plugins
- *
- * @param bool $init if true init required plugins
- */
- public function saveRequiredPlugins($init = false)
- {
- $this->required_plugins_stack[] = $this->required_plugins;
- if ($init) {
- $this->required_plugins = array('compiled' => array(), 'nocache' => array());
- }
- }
-
- /**
- * Restore required plugins
- */
- public function restoreRequiredPlugins()
- {
- $this->required_plugins = array_pop($this->required_plugins_stack);
- }
-
- /**
- * Compile code to call Smarty_Internal_Template::_checkPlugins()
- * for required plugins
- *
- * @return string
- */
- public function compileRequiredPlugins()
- {
- $code = $this->compileCheckPlugins($this->required_plugins[ 'compiled' ]);
- if ($this->caching && !empty($this->required_plugins[ 'nocache' ])) {
- $code .= $this->makeNocacheCode($this->compileCheckPlugins($this->required_plugins[ 'nocache' ]));
- }
- return $code;
- }
-
- /**
- * Compile code to call Smarty_Internal_Template::_checkPlugins
- * - checks if plugin is callable require otherwise
- *
- * @param $requiredPlugins
- *
- * @return string
- */
- public function compileCheckPlugins($requiredPlugins)
- {
- if (!empty($requiredPlugins)) {
- $plugins = array();
- foreach ($requiredPlugins as $plugin) {
- foreach ($plugin as $data) {
- $plugins[] = $data;
- }
- }
- return '$_smarty_tpl->_checkPlugins(' . $this->getVarExport($plugins) . ');' . "\n";
- } else {
- return '';
- }
- }
-
- /**
- * method to compile a Smarty template
- *
- * @param mixed $_content template source
- * @param bool $isTemplateSource
- *
- * @return bool true if compiling succeeded, false if it failed
- */
- abstract protected function doCompile($_content, $isTemplateSource = false);
-
- public function cStyleComment($string) {
- return '/*' . str_replace('*/', '* /' , $string) . '*/';
- }
-
- /**
- * Compile Tag
- *
- * @param string $tag tag name
- * @param array $args array with tag attributes
- * @param array $parameter array with compilation parameter
- *
- * @throws SmartyCompilerException
- * @throws SmartyException
- * @return string compiled code
- */
- private function compileTag2($tag, $args, $parameter)
- {
- $plugin_type = '';
- // $args contains the attributes parsed and compiled by the lexer/parser
- // assume that tag does compile into code, but creates no HTML output
- $this->has_code = true;
- // log tag/attributes
- if (isset($this->smarty->_cache[ 'get_used_tags' ])) {
- $this->template->_cache[ 'used_tags' ][] = array(
- $tag,
- $args
- );
- }
- // check nocache option flag
- foreach ($args as $arg) {
- if (!is_array($arg)) {
- if ($arg === "'nocache'" || $arg === 'nocache') {
- $this->tag_nocache = true;
- }
- } else {
- foreach ($arg as $k => $v) {
- if (($k === "'nocache'" || $k === 'nocache') && (trim($v, "'\" ") === 'true')) {
- $this->tag_nocache = true;
- }
- }
- }
- }
- // compile the smarty tag (required compile classes to compile the tag are auto loaded)
- if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) {
- if (isset($this->parent_compiler->tpl_function[ $tag ])
- || (isset($this->template->smarty->ext->_tplFunction)
- && $this->template->smarty->ext->_tplFunction->getTplFunction($this->template, $tag) !== false)
- ) {
- // template defined by {template} tag
- $args[ '_attr' ][ 'name' ] = "'{$tag}'";
- $_output = $this->callTagCompiler('call', $args, $parameter);
- }
- }
- if ($_output !== false) {
- if ($_output !== true) {
- // did we get compiled code
- if ($this->has_code) {
- // return compiled code
- return $_output;
- }
- }
- // tag did not produce compiled code
- return null;
- } else {
- // map_named attributes
- if (isset($args[ '_attr' ])) {
- foreach ($args[ '_attr' ] as $key => $attribute) {
- if (is_array($attribute)) {
- $args = array_merge($args, $attribute);
- }
- }
- }
- // not an internal compiler tag
- if (strlen($tag) < 6 || substr($tag, -5) !== 'close') {
- // check if tag is a registered object
- if (isset($this->smarty->registered_objects[ $tag ]) && isset($parameter[ 'object_method' ])) {
- $method = $parameter[ 'object_method' ];
- if (!in_array($method, $this->smarty->registered_objects[ $tag ][ 3 ])
- && (empty($this->smarty->registered_objects[ $tag ][ 1 ])
- || in_array($method, $this->smarty->registered_objects[ $tag ][ 1 ]))
- ) {
- return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $method);
- } elseif (in_array($method, $this->smarty->registered_objects[ $tag ][ 3 ])) {
- return $this->callTagCompiler(
- 'private_object_block_function',
- $args,
- $parameter,
- $tag,
- $method
- );
- } else {
- // throw exception
- $this->trigger_template_error(
- 'not allowed method "' . $method . '" in registered object "' .
- $tag . '"',
- null,
- true
- );
- }
- }
- // check if tag is registered
- foreach (array(
- Smarty::PLUGIN_COMPILER,
- Smarty::PLUGIN_FUNCTION,
- Smarty::PLUGIN_BLOCK,
- ) as $plugin_type) {
- if (isset($this->smarty->registered_plugins[ $plugin_type ][ $tag ])) {
- // if compiler function plugin call it now
- if ($plugin_type === Smarty::PLUGIN_COMPILER) {
- $new_args = array();
- foreach ($args as $key => $mixed) {
- if (is_array($mixed)) {
- $new_args = array_merge($new_args, $mixed);
- } else {
- $new_args[ $key ] = $mixed;
- }
- }
- if (!$this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 1 ]) {
- $this->tag_nocache = true;
- }
- return call_user_func_array(
- $this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 0 ],
- array(
- $new_args,
- $this
- )
- );
- }
- // compile registered function or block function
- if ($plugin_type === Smarty::PLUGIN_FUNCTION || $plugin_type === Smarty::PLUGIN_BLOCK) {
- return $this->callTagCompiler(
- 'private_registered_' . $plugin_type,
- $args,
- $parameter,
- $tag
- );
- }
- }
- }
- // check plugins from plugins folder
- foreach ($this->plugin_search_order as $plugin_type) {
- if ($plugin_type === Smarty::PLUGIN_COMPILER
- && $this->smarty->loadPlugin('smarty_compiler_' . $tag)
- && (!isset($this->smarty->security_policy)
- || $this->smarty->security_policy->isTrustedTag($tag, $this))
- ) {
- $plugin = 'smarty_compiler_' . $tag;
- if (is_callable($plugin)) {
- // convert arguments format for old compiler plugins
- $new_args = array();
- foreach ($args as $key => $mixed) {
- if (is_array($mixed)) {
- $new_args = array_merge($new_args, $mixed);
- } else {
- $new_args[ $key ] = $mixed;
- }
- }
- return $plugin($new_args, $this->smarty);
- }
- if (class_exists($plugin, false)) {
- $plugin_object = new $plugin;
- if (method_exists($plugin_object, 'compile')) {
- return $plugin_object->compile($args, $this);
- }
- }
- throw new SmartyException("Plugin '{$tag}' not callable");
- } else {
- if ($function = $this->getPlugin($tag, $plugin_type)) {
- if (!isset($this->smarty->security_policy)
- || $this->smarty->security_policy->isTrustedTag($tag, $this)
- ) {
- return $this->callTagCompiler(
- 'private_' . $plugin_type . '_plugin',
- $args,
- $parameter,
- $tag,
- $function
- );
- }
- }
- }
- }
- if (is_callable($this->smarty->default_plugin_handler_func)) {
- $found = false;
- // look for already resolved tags
- foreach ($this->plugin_search_order as $plugin_type) {
- if (isset($this->default_handler_plugins[ $plugin_type ][ $tag ])) {
- $found = true;
- break;
- }
- }
- if (!$found) {
- // call default handler
- foreach ($this->plugin_search_order as $plugin_type) {
- if ($this->getPluginFromDefaultHandler($tag, $plugin_type)) {
- $found = true;
- break;
- }
- }
- }
- if ($found) {
- // if compiler function plugin call it now
- if ($plugin_type === Smarty::PLUGIN_COMPILER) {
- $new_args = array();
- foreach ($args as $key => $mixed) {
- if (is_array($mixed)) {
- $new_args = array_merge($new_args, $mixed);
- } else {
- $new_args[ $key ] = $mixed;
- }
- }
- return call_user_func_array(
- $this->default_handler_plugins[ $plugin_type ][ $tag ][ 0 ],
- array(
- $new_args,
- $this
- )
- );
- } else {
- return $this->callTagCompiler(
- 'private_registered_' . $plugin_type,
- $args,
- $parameter,
- $tag
- );
- }
- }
- }
- } else {
- // compile closing tag of block function
- $base_tag = substr($tag, 0, -5);
- // check if closing tag is a registered object
- if (isset($this->smarty->registered_objects[ $base_tag ]) && isset($parameter[ 'object_method' ])) {
- $method = $parameter[ 'object_method' ];
- if (in_array($method, $this->smarty->registered_objects[ $base_tag ][ 3 ])) {
- return $this->callTagCompiler(
- 'private_object_block_function',
- $args,
- $parameter,
- $tag,
- $method
- );
- } else {
- // throw exception
- $this->trigger_template_error(
- 'not allowed closing tag method "' . $method .
- '" in registered object "' . $base_tag . '"',
- null,
- true
- );
- }
- }
- // registered block tag ?
- if (isset($this->smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $base_tag ])
- || isset($this->default_handler_plugins[ Smarty::PLUGIN_BLOCK ][ $base_tag ])
- ) {
- return $this->callTagCompiler('private_registered_block', $args, $parameter, $tag);
- }
- // registered function tag ?
- if (isset($this->smarty->registered_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ])) {
- return $this->callTagCompiler('private_registered_function', $args, $parameter, $tag);
- }
- // block plugin?
- if ($function = $this->getPlugin($base_tag, Smarty::PLUGIN_BLOCK)) {
- return $this->callTagCompiler('private_block_plugin', $args, $parameter, $tag, $function);
- }
- // function plugin?
- if ($function = $this->getPlugin($tag, Smarty::PLUGIN_FUNCTION)) {
- if (!isset($this->smarty->security_policy)
- || $this->smarty->security_policy->isTrustedTag($tag, $this)
- ) {
- return $this->callTagCompiler('private_function_plugin', $args, $parameter, $tag, $function);
- }
- }
- // registered compiler plugin ?
- if (isset($this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ])) {
- // if compiler function plugin call it now
- $args = array();
- if (!$this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 1 ]) {
- $this->tag_nocache = true;
- }
- return call_user_func_array(
- $this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 0 ],
- array(
- $args,
- $this
- )
- );
- }
- if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) {
- $plugin = 'smarty_compiler_' . $tag;
- if (is_callable($plugin)) {
- return $plugin($args, $this->smarty);
- }
- if (class_exists($plugin, false)) {
- $plugin_object = new $plugin;
- if (method_exists($plugin_object, 'compile')) {
- return $plugin_object->compile($args, $this);
- }
- }
- throw new SmartyException("Plugin '{$tag}' not callable");
- }
- }
- $this->trigger_template_error("unknown tag '{$tag}'", null, true);
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php
deleted file mode 100644
index a2dd0d6fb..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_templateparser.php
+++ /dev/null
@@ -1,2926 +0,0 @@
-
-*/
-class Smarty_Internal_Templateparser
-{
-// line 23 "../smarty/lexer/smarty_internal_templateparser.y"
-
- const ERR1 = 'Security error: Call to private object member not allowed';
- const ERR2 = 'Security error: Call to dynamic object member not allowed';
-
- /**
- * result status
- *
- * @var bool
- */
- public $successful = true;
-
- /**
- * return value
- *
- * @var mixed
- */
- public $retvalue = 0;
-
- /**
- * @var
- */
- public $yymajor;
-
- /**
- * last index of array variable
- *
- * @var mixed
- */
- public $last_index;
-
- /**
- * last variable name
- *
- * @var string
- */
- public $last_variable;
-
- /**
- * root parse tree buffer
- *
- * @var Smarty_Internal_ParseTree_Template
- */
- public $root_buffer;
-
- /**
- * current parse tree object
- *
- * @var Smarty_Internal_ParseTree
- */
- public $current_buffer;
-
- /**
- * lexer object
- *
- * @var Smarty_Internal_Templatelexer
- */
- public $lex;
-
- /**
- * internal error flag
- *
- * @var bool
- */
- private $internalError = false;
-
- /**
- * {strip} status
- *
- * @var bool
- */
- public $strip = false;
- /**
- * compiler object
- *
- * @var Smarty_Internal_TemplateCompilerBase
- */
- public $compiler = null;
-
- /**
- * smarty object
- *
- * @var Smarty
- */
- public $smarty = null;
-
- /**
- * template object
- *
- * @var Smarty_Internal_Template
- */
- public $template = null;
-
- /**
- * block nesting level
- *
- * @var int
- */
- public $block_nesting_level = 0;
-
- /**
- * security object
- *
- * @var Smarty_Security
- */
- public $security = null;
-
- /**
- * template prefix array
- *
- * @var \Smarty_Internal_ParseTree[]
- */
- public $template_prefix = array();
-
- /**
- * template prefix array
- *
- * @var \Smarty_Internal_ParseTree[]
- */
- public $template_postfix = array();
-
- /**
- * constructor
- *
- * @param Smarty_Internal_Templatelexer $lex
- * @param Smarty_Internal_TemplateCompilerBase $compiler
- */
- public function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $this->lex = $lex;
- $this->compiler = $compiler;
- $this->template = $this->compiler->template;
- $this->smarty = $this->template->smarty;
- $this->security = isset($this->smarty->security_policy) ? $this->smarty->security_policy : false;
- $this->current_buffer = $this->root_buffer = new Smarty_Internal_ParseTree_Template();
- }
-
- /**
- * insert PHP code in current buffer
- *
- * @param string $code
- */
- public function insertPhpCode($code)
- {
- $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Tag($this, $code));
- }
-
- /**
- * error rundown
- *
- */
- public function errorRunDown()
- {
- while ($this->yystack !== array()) {
- $this->yy_pop_parser_stack();
- }
- if (is_resource($this->yyTraceFILE)) {
- fclose($this->yyTraceFILE);
- }
- }
-
- /**
- * merge PHP code with prefix code and return parse tree tag object
- *
- * @param string $code
- *
- * @return Smarty_Internal_ParseTree_Tag
- */
- public function mergePrefixCode($code)
- {
- $tmp = '';
- foreach ($this->compiler->prefix_code as $preCode) {
- $tmp .= $preCode;
- }
- $this->compiler->prefix_code = array();
- $tmp .= $code;
- return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp, true));
- }
-
-
- const TP_VERT = 1;
- const TP_COLON = 2;
- const TP_TEXT = 3;
- const TP_STRIPON = 4;
- const TP_STRIPOFF = 5;
- const TP_LITERALSTART = 6;
- const TP_LITERALEND = 7;
- const TP_LITERAL = 8;
- const TP_SIMPELOUTPUT = 9;
- const TP_SIMPLETAG = 10;
- const TP_SMARTYBLOCKCHILDPARENT = 11;
- const TP_LDEL = 12;
- const TP_RDEL = 13;
- const TP_DOLLARID = 14;
- const TP_EQUAL = 15;
- const TP_ID = 16;
- const TP_PTR = 17;
- const TP_LDELMAKENOCACHE = 18;
- const TP_LDELIF = 19;
- const TP_LDELFOR = 20;
- const TP_SEMICOLON = 21;
- const TP_INCDEC = 22;
- const TP_TO = 23;
- const TP_STEP = 24;
- const TP_LDELFOREACH = 25;
- const TP_SPACE = 26;
- const TP_AS = 27;
- const TP_APTR = 28;
- const TP_LDELSETFILTER = 29;
- const TP_CLOSETAG = 30;
- const TP_LDELSLASH = 31;
- const TP_ATTR = 32;
- const TP_INTEGER = 33;
- const TP_COMMA = 34;
- const TP_OPENP = 35;
- const TP_CLOSEP = 36;
- const TP_MATH = 37;
- const TP_UNIMATH = 38;
- const TP_ISIN = 39;
- const TP_QMARK = 40;
- const TP_NOT = 41;
- const TP_TYPECAST = 42;
- const TP_HEX = 43;
- const TP_DOT = 44;
- const TP_INSTANCEOF = 45;
- const TP_SINGLEQUOTESTRING = 46;
- const TP_DOUBLECOLON = 47;
- const TP_NAMESPACE = 48;
- const TP_AT = 49;
- const TP_HATCH = 50;
- const TP_OPENB = 51;
- const TP_CLOSEB = 52;
- const TP_DOLLAR = 53;
- const TP_LOGOP = 54;
- const TP_SLOGOP = 55;
- const TP_TLOGOP = 56;
- const TP_SINGLECOND = 57;
- const TP_ARRAYOPEN = 58;
- const TP_QUOTE = 59;
- const TP_BACKTICK = 60;
- const YY_NO_ACTION = 514;
- const YY_ACCEPT_ACTION = 513;
- const YY_ERROR_ACTION = 512;
-
- const YY_SZ_ACTTAB = 1997;
-public static $yy_action = array(
- 249, 250, 239, 1, 27, 127, 220, 184, 160, 213,
- 11, 54, 278, 10, 173, 34, 108, 387, 282, 279,
- 223, 321, 221, 8, 194, 387, 18, 387, 85, 41,
- 387, 285, 42, 44, 264, 222, 387, 209, 387, 198,
- 387, 52, 5, 307, 288, 288, 164, 283, 224, 4,
- 50, 249, 250, 239, 1, 232, 131, 381, 189, 205,
- 213, 11, 54, 39, 35, 243, 31, 108, 94, 17,
- 381, 223, 321, 221, 439, 226, 381, 33, 49, 426,
- 41, 439, 89, 42, 44, 264, 222, 9, 235, 163,
- 198, 426, 52, 5, 131, 288, 212, 284, 102, 106,
- 4, 50, 249, 250, 239, 1, 232, 129, 426, 189,
- 347, 213, 11, 54, 175, 324, 347, 208, 108, 22,
- 426, 301, 223, 321, 221, 302, 226, 135, 18, 49,
- 52, 41, 26, 288, 42, 44, 264, 222, 16, 235,
- 294, 198, 204, 52, 5, 170, 288, 32, 90, 267,
- 268, 4, 50, 249, 250, 239, 1, 20, 129, 185,
- 179, 255, 213, 11, 54, 455, 288, 192, 455, 108,
- 175, 167, 455, 223, 321, 221, 439, 226, 256, 18,
- 55, 292, 41, 439, 132, 42, 44, 264, 222, 427,
- 235, 12, 198, 165, 52, 5, 232, 288, 288, 347,
- 153, 427, 4, 50, 249, 250, 239, 1, 232, 129,
- 286, 181, 347, 213, 11, 54, 24, 13, 347, 49,
- 108, 232, 320, 426, 223, 321, 221, 195, 201, 173,
- 18, 49, 139, 41, 296, 426, 42, 44, 264, 222,
- 7, 235, 286, 198, 49, 52, 5, 147, 288, 117,
- 150, 317, 263, 4, 50, 249, 250, 239, 1, 95,
- 130, 173, 189, 155, 213, 11, 54, 22, 244, 271,
- 192, 108, 323, 286, 101, 223, 321, 221, 294, 226,
- 204, 18, 348, 257, 41, 166, 283, 42, 44, 264,
- 222, 28, 235, 300, 198, 348, 52, 5, 247, 288,
- 117, 348, 94, 206, 4, 50, 249, 250, 239, 1,
- 95, 129, 22, 189, 277, 213, 11, 54, 91, 274,
- 224, 426, 108, 323, 216, 156, 223, 321, 221, 132,
- 180, 262, 18, 426, 100, 41, 12, 288, 42, 44,
- 264, 222, 15, 235, 216, 198, 254, 52, 5, 233,
- 288, 210, 190, 192, 100, 4, 50, 249, 250, 239,
- 1, 3, 131, 94, 189, 192, 213, 11, 54, 269,
- 10, 204, 290, 108, 325, 216, 224, 223, 321, 221,
- 23, 226, 211, 33, 315, 100, 45, 513, 92, 42,
- 44, 264, 222, 102, 235, 178, 198, 268, 52, 5,
- 275, 288, 161, 192, 37, 25, 4, 50, 249, 250,
- 239, 1, 286, 129, 172, 187, 305, 213, 11, 54,
- 164, 283, 310, 141, 108, 281, 281, 236, 223, 321,
- 221, 169, 226, 230, 18, 122, 171, 41, 225, 175,
- 42, 44, 264, 222, 144, 235, 303, 198, 134, 52,
- 5, 265, 288, 151, 286, 192, 175, 4, 50, 249,
- 250, 239, 1, 286, 128, 94, 189, 143, 213, 11,
- 54, 219, 152, 207, 193, 108, 149, 281, 31, 223,
- 321, 221, 100, 226, 21, 6, 286, 288, 41, 158,
- 16, 42, 44, 264, 222, 102, 235, 238, 198, 286,
- 52, 5, 157, 288, 281, 122, 168, 283, 4, 50,
- 249, 250, 239, 1, 30, 93, 308, 51, 215, 213,
- 11, 54, 53, 251, 140, 248, 108, 245, 304, 116,
- 223, 321, 221, 111, 226, 176, 18, 270, 266, 41,
- 224, 322, 42, 44, 264, 222, 7, 235, 259, 198,
- 147, 52, 5, 257, 288, 43, 40, 38, 83, 4,
- 50, 241, 214, 204, 319, 280, 88, 107, 138, 182,
- 97, 64, 311, 312, 313, 316, 95, 281, 298, 258,
- 142, 234, 94, 105, 272, 197, 231, 482, 237, 323,
- 37, 133, 324, 241, 214, 204, 319, 314, 88, 107,
- 296, 183, 97, 82, 84, 43, 40, 38, 95, 296,
- 296, 258, 296, 296, 296, 159, 272, 197, 231, 296,
- 237, 323, 311, 312, 313, 316, 241, 296, 204, 296,
- 296, 103, 296, 296, 199, 104, 77, 296, 296, 110,
- 296, 95, 296, 296, 258, 278, 296, 296, 34, 272,
- 197, 231, 279, 237, 323, 43, 40, 38, 296, 296,
- 296, 241, 26, 204, 196, 276, 103, 296, 16, 199,
- 104, 77, 311, 312, 313, 316, 95, 192, 296, 258,
- 146, 296, 296, 296, 272, 197, 231, 296, 237, 323,
- 286, 393, 39, 35, 243, 296, 296, 296, 296, 191,
- 276, 296, 26, 318, 252, 253, 126, 296, 16, 249,
- 250, 239, 1, 296, 296, 131, 296, 261, 213, 11,
- 54, 296, 296, 296, 426, 108, 393, 393, 393, 223,
- 321, 221, 241, 296, 204, 299, 426, 103, 107, 296,
- 183, 97, 82, 393, 393, 393, 393, 95, 296, 260,
- 258, 52, 296, 296, 288, 272, 197, 231, 296, 237,
- 323, 293, 296, 296, 296, 296, 296, 249, 250, 239,
- 2, 296, 295, 296, 296, 296, 213, 11, 54, 296,
- 296, 177, 296, 108, 136, 296, 296, 223, 321, 221,
- 296, 296, 296, 293, 43, 40, 38, 296, 296, 249,
- 250, 239, 2, 296, 295, 43, 40, 38, 213, 11,
- 54, 311, 312, 313, 316, 108, 296, 291, 14, 223,
- 321, 221, 311, 312, 313, 316, 296, 296, 241, 296,
- 204, 296, 192, 103, 296, 296, 199, 104, 77, 296,
- 296, 296, 296, 95, 383, 296, 258, 296, 296, 297,
- 14, 272, 197, 231, 296, 237, 323, 383, 296, 296,
- 241, 296, 204, 383, 296, 99, 296, 287, 199, 120,
- 48, 241, 112, 204, 296, 95, 103, 296, 258, 199,
- 120, 74, 296, 272, 197, 231, 95, 237, 323, 258,
- 455, 296, 296, 455, 272, 197, 231, 455, 237, 323,
- 241, 296, 204, 296, 296, 103, 200, 296, 199, 120,
- 74, 296, 296, 296, 296, 95, 296, 296, 258, 278,
- 296, 296, 34, 272, 197, 231, 279, 237, 323, 241,
- 455, 204, 296, 296, 99, 202, 296, 199, 120, 56,
- 241, 211, 204, 296, 95, 103, 296, 258, 199, 120,
- 74, 296, 272, 197, 231, 95, 237, 323, 258, 227,
- 296, 296, 296, 272, 197, 231, 296, 237, 323, 241,
- 296, 204, 148, 296, 103, 203, 86, 199, 120, 73,
- 296, 296, 286, 296, 95, 296, 296, 258, 278, 296,
- 296, 34, 272, 197, 231, 279, 237, 323, 241, 296,
- 204, 175, 296, 103, 296, 296, 199, 120, 75, 241,
- 296, 204, 296, 95, 103, 296, 258, 199, 120, 63,
- 296, 272, 197, 231, 95, 237, 323, 258, 229, 192,
- 296, 296, 272, 197, 231, 296, 237, 323, 241, 296,
- 204, 380, 296, 103, 296, 296, 199, 120, 58, 296,
- 296, 296, 296, 95, 380, 296, 258, 296, 296, 296,
- 380, 272, 197, 231, 296, 237, 323, 241, 296, 204,
- 296, 296, 103, 296, 296, 199, 120, 71, 241, 296,
- 204, 296, 95, 103, 296, 258, 199, 120, 79, 296,
- 272, 197, 231, 95, 237, 323, 258, 296, 296, 296,
- 154, 272, 197, 231, 87, 237, 323, 241, 296, 204,
- 286, 296, 103, 296, 296, 199, 120, 70, 296, 296,
- 296, 296, 95, 296, 296, 258, 296, 296, 296, 175,
- 272, 197, 231, 296, 237, 323, 241, 296, 204, 296,
- 296, 103, 296, 296, 199, 120, 56, 241, 296, 204,
- 296, 95, 103, 296, 258, 199, 120, 46, 296, 272,
- 197, 231, 95, 237, 323, 258, 296, 296, 296, 296,
- 272, 197, 231, 296, 237, 323, 241, 296, 204, 296,
- 296, 103, 296, 296, 199, 120, 78, 296, 296, 296,
- 296, 95, 296, 296, 258, 296, 296, 296, 296, 272,
- 197, 231, 296, 237, 323, 241, 296, 204, 296, 296,
- 103, 296, 296, 199, 120, 66, 241, 296, 204, 296,
- 95, 103, 296, 258, 199, 120, 59, 296, 272, 197,
- 231, 95, 237, 323, 258, 296, 296, 296, 296, 272,
- 197, 231, 296, 237, 323, 241, 296, 204, 296, 296,
- 103, 296, 296, 186, 109, 57, 296, 296, 296, 296,
- 95, 296, 296, 258, 296, 296, 296, 296, 272, 197,
- 231, 296, 237, 323, 241, 296, 204, 296, 296, 103,
- 296, 296, 188, 120, 67, 241, 296, 204, 296, 95,
- 103, 296, 258, 199, 96, 62, 296, 272, 197, 231,
- 95, 237, 323, 258, 296, 296, 296, 296, 272, 197,
- 231, 296, 237, 323, 241, 296, 204, 296, 296, 103,
- 296, 296, 199, 120, 80, 296, 296, 296, 296, 95,
- 296, 296, 258, 296, 296, 296, 296, 272, 197, 231,
- 296, 237, 323, 241, 296, 204, 296, 296, 103, 296,
- 296, 199, 120, 76, 241, 296, 204, 296, 95, 103,
- 296, 258, 199, 120, 81, 296, 272, 197, 231, 95,
- 237, 323, 258, 296, 296, 296, 296, 272, 197, 231,
- 296, 237, 323, 241, 296, 204, 296, 296, 103, 296,
- 296, 199, 120, 65, 296, 296, 296, 296, 95, 296,
- 296, 258, 296, 296, 296, 296, 272, 197, 231, 296,
- 237, 323, 241, 296, 204, 296, 296, 103, 296, 296,
- 199, 96, 68, 241, 296, 204, 296, 95, 103, 296,
- 258, 199, 120, 61, 296, 272, 197, 231, 95, 237,
- 323, 258, 296, 296, 296, 296, 272, 197, 231, 296,
- 237, 323, 241, 296, 204, 296, 296, 103, 296, 296,
- 199, 98, 69, 296, 296, 296, 296, 95, 296, 296,
- 258, 296, 296, 296, 296, 272, 197, 231, 296, 237,
- 323, 241, 296, 204, 296, 296, 103, 296, 296, 199,
- 120, 72, 241, 296, 204, 296, 95, 103, 296, 258,
- 199, 120, 47, 296, 272, 197, 231, 95, 237, 323,
- 258, 296, 296, 296, 296, 272, 197, 231, 296, 237,
- 323, 241, 192, 204, 296, 296, 103, 296, 296, 199,
- 120, 60, 296, 296, 351, 296, 95, 296, 217, 258,
- 296, 296, 296, 296, 272, 197, 231, 26, 237, 323,
- 241, 296, 204, 16, 296, 103, 426, 296, 199, 125,
- 296, 241, 296, 204, 296, 95, 103, 296, 426, 199,
- 118, 296, 242, 272, 197, 231, 95, 237, 323, 296,
- 296, 296, 296, 246, 272, 197, 231, 296, 237, 323,
- 241, 296, 204, 278, 296, 103, 34, 296, 199, 121,
- 279, 296, 296, 296, 296, 95, 296, 296, 296, 296,
- 26, 296, 162, 272, 197, 231, 16, 237, 323, 241,
- 296, 204, 296, 296, 103, 296, 296, 199, 123, 296,
- 241, 296, 204, 296, 95, 103, 296, 296, 199, 114,
- 296, 296, 272, 197, 231, 95, 237, 323, 296, 296,
- 296, 296, 296, 272, 197, 231, 296, 237, 323, 241,
- 296, 204, 296, 145, 103, 296, 296, 199, 124, 296,
- 296, 296, 296, 286, 95, 39, 35, 243, 296, 296,
- 296, 296, 272, 197, 231, 296, 237, 323, 241, 296,
- 204, 296, 296, 103, 296, 296, 199, 115, 296, 241,
- 296, 204, 296, 95, 103, 296, 296, 199, 113, 296,
- 296, 272, 197, 231, 95, 237, 323, 296, 296, 296,
- 296, 296, 272, 197, 231, 228, 237, 323, 241, 296,
- 204, 296, 455, 103, 296, 455, 199, 119, 3, 455,
- 439, 296, 296, 95, 296, 296, 296, 296, 296, 296,
- 296, 272, 197, 231, 228, 237, 323, 296, 296, 296,
- 296, 455, 296, 296, 455, 296, 296, 439, 455, 439,
- 439, 228, 455, 296, 439, 296, 296, 137, 455, 296,
- 296, 455, 296, 296, 32, 455, 439, 286, 296, 39,
- 35, 243, 29, 296, 26, 296, 439, 296, 296, 439,
- 16, 455, 296, 439, 306, 43, 40, 38, 296, 296,
- 296, 296, 296, 439, 296, 296, 439, 296, 455, 296,
- 439, 26, 311, 312, 313, 316, 296, 16, 228, 296,
- 296, 296, 43, 40, 38, 455, 296, 296, 455, 296,
- 296, 296, 455, 439, 296, 296, 19, 296, 296, 311,
- 312, 313, 316, 455, 296, 296, 455, 296, 296, 296,
- 455, 439, 296, 296, 296, 43, 40, 38, 296, 296,
- 439, 296, 296, 439, 174, 455, 296, 439, 296, 240,
- 309, 296, 311, 312, 313, 316, 296, 289, 439, 296,
- 36, 439, 296, 455, 296, 439, 296, 296, 43, 40,
- 38, 296, 296, 43, 40, 38, 296, 296, 296, 296,
- 296, 43, 40, 38, 296, 311, 312, 313, 316, 296,
- 311, 312, 313, 316, 296, 43, 40, 38, 311, 312,
- 313, 316, 273, 43, 40, 38, 296, 296, 296, 296,
- 296, 296, 311, 312, 313, 316, 296, 296, 296, 296,
- 311, 312, 313, 316, 455, 296, 296, 455, 43, 40,
- 38, 455, 439, 218, 43, 40, 38, 296, 296, 296,
- 296, 296, 296, 296, 296, 311, 312, 313, 316, 296,
- 296, 311, 312, 313, 316, 296, 296, 296, 296, 439,
- 296, 296, 439, 296, 455, 296, 439,
- );
- public static $yy_lookahead = array(
- 9, 10, 11, 12, 12, 14, 14, 16, 16, 18,
- 19, 20, 9, 34, 102, 12, 25, 13, 70, 16,
- 29, 30, 31, 35, 33, 21, 35, 23, 95, 38,
- 26, 52, 41, 42, 43, 44, 32, 46, 34, 48,
- 36, 50, 51, 52, 53, 53, 98, 99, 44, 58,
- 59, 9, 10, 11, 12, 22, 14, 13, 16, 15,
- 18, 19, 20, 85, 86, 87, 15, 25, 17, 21,
- 26, 29, 30, 31, 44, 33, 32, 35, 45, 35,
- 38, 51, 34, 41, 42, 43, 44, 35, 46, 77,
- 48, 47, 50, 51, 14, 53, 16, 13, 47, 47,
- 58, 59, 9, 10, 11, 12, 22, 14, 35, 16,
- 26, 18, 19, 20, 102, 103, 32, 44, 25, 34,
- 47, 36, 29, 30, 31, 52, 33, 14, 35, 45,
- 50, 38, 26, 53, 41, 42, 43, 44, 32, 46,
- 66, 48, 68, 50, 51, 77, 53, 15, 35, 7,
- 8, 58, 59, 9, 10, 11, 12, 12, 14, 14,
- 16, 16, 18, 19, 20, 9, 53, 1, 12, 25,
- 102, 82, 16, 29, 30, 31, 44, 33, 33, 35,
- 106, 107, 38, 51, 44, 41, 42, 43, 44, 35,
- 46, 51, 48, 82, 50, 51, 22, 53, 53, 13,
- 73, 47, 58, 59, 9, 10, 11, 12, 22, 14,
- 83, 16, 26, 18, 19, 20, 28, 12, 32, 45,
- 25, 22, 70, 35, 29, 30, 31, 65, 33, 102,
- 35, 45, 73, 38, 60, 47, 41, 42, 43, 44,
- 35, 46, 83, 48, 45, 50, 51, 95, 53, 71,
- 95, 52, 74, 58, 59, 9, 10, 11, 12, 81,
- 14, 102, 16, 73, 18, 19, 20, 34, 90, 36,
- 1, 25, 94, 83, 81, 29, 30, 31, 66, 33,
- 68, 35, 13, 96, 38, 98, 99, 41, 42, 43,
- 44, 15, 46, 100, 48, 26, 50, 51, 14, 53,
- 71, 32, 17, 74, 58, 59, 9, 10, 11, 12,
- 81, 14, 34, 16, 36, 18, 19, 20, 82, 107,
- 44, 35, 25, 94, 71, 95, 29, 30, 31, 44,
- 33, 78, 35, 47, 81, 38, 51, 53, 41, 42,
- 43, 44, 15, 46, 71, 48, 16, 50, 51, 22,
- 53, 78, 79, 1, 81, 58, 59, 9, 10, 11,
- 12, 15, 14, 17, 16, 1, 18, 19, 20, 66,
- 34, 68, 36, 25, 16, 71, 44, 29, 30, 31,
- 28, 33, 78, 35, 52, 81, 38, 62, 63, 41,
- 42, 43, 44, 47, 46, 6, 48, 8, 50, 51,
- 16, 53, 73, 1, 2, 40, 58, 59, 9, 10,
- 11, 12, 83, 14, 77, 16, 52, 18, 19, 20,
- 98, 99, 52, 95, 25, 97, 97, 92, 29, 30,
- 31, 77, 33, 49, 35, 100, 14, 38, 16, 102,
- 41, 42, 43, 44, 73, 46, 14, 48, 14, 50,
- 51, 36, 53, 73, 83, 1, 102, 58, 59, 9,
- 10, 11, 12, 83, 14, 17, 16, 50, 18, 19,
- 20, 17, 71, 64, 65, 25, 73, 97, 15, 29,
- 30, 31, 81, 33, 26, 35, 83, 53, 38, 73,
- 32, 41, 42, 43, 44, 47, 46, 92, 48, 83,
- 50, 51, 95, 53, 97, 100, 98, 99, 58, 59,
- 9, 10, 11, 12, 23, 14, 52, 16, 16, 18,
- 19, 20, 16, 7, 50, 16, 25, 13, 13, 16,
- 29, 30, 31, 16, 33, 16, 35, 33, 33, 38,
- 44, 16, 41, 42, 43, 44, 35, 46, 16, 48,
- 95, 50, 51, 96, 53, 37, 38, 39, 81, 58,
- 59, 66, 67, 68, 69, 83, 71, 72, 95, 74,
- 75, 76, 54, 55, 56, 57, 81, 97, 60, 84,
- 95, 13, 17, 80, 89, 90, 91, 1, 93, 94,
- 2, 81, 103, 66, 67, 68, 69, 99, 71, 72,
- 108, 74, 75, 76, 81, 37, 38, 39, 81, 108,
- 108, 84, 108, 108, 108, 95, 89, 90, 91, 108,
- 93, 94, 54, 55, 56, 57, 66, 108, 68, 108,
- 108, 71, 108, 108, 74, 75, 76, 108, 108, 21,
- 108, 81, 108, 108, 84, 9, 108, 108, 12, 89,
- 90, 91, 16, 93, 94, 37, 38, 39, 108, 108,
- 108, 66, 26, 68, 104, 105, 71, 108, 32, 74,
- 75, 76, 54, 55, 56, 57, 81, 1, 108, 84,
- 73, 108, 108, 108, 89, 90, 91, 108, 93, 94,
- 83, 2, 85, 86, 87, 108, 108, 108, 108, 104,
- 105, 108, 26, 3, 4, 5, 6, 108, 32, 9,
- 10, 11, 12, 108, 108, 14, 108, 16, 18, 19,
- 20, 108, 108, 108, 35, 25, 37, 38, 39, 29,
- 30, 31, 66, 108, 68, 69, 47, 71, 72, 108,
- 74, 75, 76, 54, 55, 56, 57, 81, 108, 48,
- 84, 50, 108, 108, 53, 89, 90, 91, 108, 93,
- 94, 3, 108, 108, 108, 108, 108, 9, 10, 11,
- 12, 108, 14, 108, 108, 108, 18, 19, 20, 108,
- 108, 13, 108, 25, 27, 108, 108, 29, 30, 31,
- 108, 108, 108, 3, 37, 38, 39, 108, 108, 9,
- 10, 11, 12, 108, 14, 37, 38, 39, 18, 19,
- 20, 54, 55, 56, 57, 25, 108, 59, 60, 29,
- 30, 31, 54, 55, 56, 57, 108, 108, 66, 108,
- 68, 108, 1, 71, 108, 108, 74, 75, 76, 108,
- 108, 108, 108, 81, 13, 108, 84, 108, 108, 59,
- 60, 89, 90, 91, 108, 93, 94, 26, 108, 108,
- 66, 108, 68, 32, 108, 71, 108, 105, 74, 75,
- 76, 66, 78, 68, 108, 81, 71, 108, 84, 74,
- 75, 76, 108, 89, 90, 91, 81, 93, 94, 84,
- 9, 108, 108, 12, 89, 90, 91, 16, 93, 94,
- 66, 108, 68, 108, 108, 71, 101, 108, 74, 75,
- 76, 108, 108, 108, 108, 81, 108, 108, 84, 9,
- 108, 108, 12, 89, 90, 91, 16, 93, 94, 66,
- 49, 68, 108, 108, 71, 101, 108, 74, 75, 76,
- 66, 78, 68, 108, 81, 71, 108, 84, 74, 75,
- 76, 108, 89, 90, 91, 81, 93, 94, 84, 49,
- 108, 108, 108, 89, 90, 91, 108, 93, 94, 66,
- 108, 68, 73, 108, 71, 101, 77, 74, 75, 76,
- 108, 108, 83, 108, 81, 108, 108, 84, 9, 108,
- 108, 12, 89, 90, 91, 16, 93, 94, 66, 108,
- 68, 102, 108, 71, 108, 108, 74, 75, 76, 66,
- 108, 68, 108, 81, 71, 108, 84, 74, 75, 76,
- 108, 89, 90, 91, 81, 93, 94, 84, 49, 1,
- 108, 108, 89, 90, 91, 108, 93, 94, 66, 108,
- 68, 13, 108, 71, 108, 108, 74, 75, 76, 108,
- 108, 108, 108, 81, 26, 108, 84, 108, 108, 108,
- 32, 89, 90, 91, 108, 93, 94, 66, 108, 68,
- 108, 108, 71, 108, 108, 74, 75, 76, 66, 108,
- 68, 108, 81, 71, 108, 84, 74, 75, 76, 108,
- 89, 90, 91, 81, 93, 94, 84, 108, 108, 108,
- 73, 89, 90, 91, 77, 93, 94, 66, 108, 68,
- 83, 108, 71, 108, 108, 74, 75, 76, 108, 108,
- 108, 108, 81, 108, 108, 84, 108, 108, 108, 102,
- 89, 90, 91, 108, 93, 94, 66, 108, 68, 108,
- 108, 71, 108, 108, 74, 75, 76, 66, 108, 68,
- 108, 81, 71, 108, 84, 74, 75, 76, 108, 89,
- 90, 91, 81, 93, 94, 84, 108, 108, 108, 108,
- 89, 90, 91, 108, 93, 94, 66, 108, 68, 108,
- 108, 71, 108, 108, 74, 75, 76, 108, 108, 108,
- 108, 81, 108, 108, 84, 108, 108, 108, 108, 89,
- 90, 91, 108, 93, 94, 66, 108, 68, 108, 108,
- 71, 108, 108, 74, 75, 76, 66, 108, 68, 108,
- 81, 71, 108, 84, 74, 75, 76, 108, 89, 90,
- 91, 81, 93, 94, 84, 108, 108, 108, 108, 89,
- 90, 91, 108, 93, 94, 66, 108, 68, 108, 108,
- 71, 108, 108, 74, 75, 76, 108, 108, 108, 108,
- 81, 108, 108, 84, 108, 108, 108, 108, 89, 90,
- 91, 108, 93, 94, 66, 108, 68, 108, 108, 71,
- 108, 108, 74, 75, 76, 66, 108, 68, 108, 81,
- 71, 108, 84, 74, 75, 76, 108, 89, 90, 91,
- 81, 93, 94, 84, 108, 108, 108, 108, 89, 90,
- 91, 108, 93, 94, 66, 108, 68, 108, 108, 71,
- 108, 108, 74, 75, 76, 108, 108, 108, 108, 81,
- 108, 108, 84, 108, 108, 108, 108, 89, 90, 91,
- 108, 93, 94, 66, 108, 68, 108, 108, 71, 108,
- 108, 74, 75, 76, 66, 108, 68, 108, 81, 71,
- 108, 84, 74, 75, 76, 108, 89, 90, 91, 81,
- 93, 94, 84, 108, 108, 108, 108, 89, 90, 91,
- 108, 93, 94, 66, 108, 68, 108, 108, 71, 108,
- 108, 74, 75, 76, 108, 108, 108, 108, 81, 108,
- 108, 84, 108, 108, 108, 108, 89, 90, 91, 108,
- 93, 94, 66, 108, 68, 108, 108, 71, 108, 108,
- 74, 75, 76, 66, 108, 68, 108, 81, 71, 108,
- 84, 74, 75, 76, 108, 89, 90, 91, 81, 93,
- 94, 84, 108, 108, 108, 108, 89, 90, 91, 108,
- 93, 94, 66, 108, 68, 108, 108, 71, 108, 108,
- 74, 75, 76, 108, 108, 108, 108, 81, 108, 108,
- 84, 108, 108, 108, 108, 89, 90, 91, 108, 93,
- 94, 66, 108, 68, 108, 108, 71, 108, 108, 74,
- 75, 76, 66, 108, 68, 108, 81, 71, 108, 84,
- 74, 75, 76, 108, 89, 90, 91, 81, 93, 94,
- 84, 108, 108, 108, 108, 89, 90, 91, 108, 93,
- 94, 66, 1, 68, 108, 108, 71, 108, 108, 74,
- 75, 76, 108, 108, 13, 108, 81, 108, 17, 84,
- 108, 108, 108, 108, 89, 90, 91, 26, 93, 94,
- 66, 108, 68, 32, 108, 71, 35, 108, 74, 75,
- 108, 66, 108, 68, 108, 81, 71, 108, 47, 74,
- 75, 108, 88, 89, 90, 91, 81, 93, 94, 108,
- 108, 108, 108, 88, 89, 90, 91, 108, 93, 94,
- 66, 108, 68, 9, 108, 71, 12, 108, 74, 75,
- 16, 108, 108, 108, 108, 81, 108, 108, 108, 108,
- 26, 108, 28, 89, 90, 91, 32, 93, 94, 66,
- 108, 68, 108, 108, 71, 108, 108, 74, 75, 108,
- 66, 108, 68, 108, 81, 71, 108, 108, 74, 75,
- 108, 108, 89, 90, 91, 81, 93, 94, 108, 108,
- 108, 108, 108, 89, 90, 91, 108, 93, 94, 66,
- 108, 68, 108, 73, 71, 108, 108, 74, 75, 108,
- 108, 108, 108, 83, 81, 85, 86, 87, 108, 108,
- 108, 108, 89, 90, 91, 108, 93, 94, 66, 108,
- 68, 108, 108, 71, 108, 108, 74, 75, 108, 66,
- 108, 68, 108, 81, 71, 108, 108, 74, 75, 108,
- 108, 89, 90, 91, 81, 93, 94, 108, 108, 108,
- 108, 108, 89, 90, 91, 2, 93, 94, 66, 108,
- 68, 108, 9, 71, 108, 12, 74, 75, 15, 16,
- 17, 108, 108, 81, 108, 108, 108, 108, 108, 108,
- 108, 89, 90, 91, 2, 93, 94, 108, 108, 108,
- 108, 9, 108, 108, 12, 108, 108, 44, 16, 17,
- 47, 2, 49, 108, 51, 108, 108, 73, 9, 108,
- 108, 12, 108, 108, 15, 16, 17, 83, 108, 85,
- 86, 87, 24, 108, 26, 108, 44, 108, 108, 47,
- 32, 49, 108, 51, 52, 37, 38, 39, 108, 108,
- 108, 108, 108, 44, 108, 108, 47, 108, 49, 108,
- 51, 26, 54, 55, 56, 57, 108, 32, 2, 108,
- 108, 108, 37, 38, 39, 9, 108, 108, 12, 108,
- 108, 108, 16, 17, 108, 108, 2, 108, 108, 54,
- 55, 56, 57, 9, 108, 108, 12, 108, 108, 108,
- 16, 17, 108, 108, 108, 37, 38, 39, 108, 108,
- 44, 108, 108, 47, 13, 49, 108, 51, 108, 13,
- 52, 108, 54, 55, 56, 57, 108, 13, 44, 108,
- 2, 47, 108, 49, 108, 51, 108, 108, 37, 38,
- 39, 108, 108, 37, 38, 39, 108, 108, 108, 108,
- 108, 37, 38, 39, 108, 54, 55, 56, 57, 108,
- 54, 55, 56, 57, 108, 37, 38, 39, 54, 55,
- 56, 57, 36, 37, 38, 39, 108, 108, 108, 108,
- 108, 108, 54, 55, 56, 57, 108, 108, 108, 108,
- 54, 55, 56, 57, 9, 108, 108, 12, 37, 38,
- 39, 16, 17, 36, 37, 38, 39, 108, 108, 108,
- 108, 108, 108, 108, 108, 54, 55, 56, 57, 108,
- 108, 54, 55, 56, 57, 108, 108, 108, 108, 44,
- 108, 108, 47, 108, 49, 108, 51,
-);
- const YY_SHIFT_USE_DFLT = -22;
- const YY_SHIFT_MAX = 230;
- public static $yy_shift_ofst = array(
- -22, 501, 501, 93, 399, 399, 450, 93, 93, 93,
- 399, 450, -9, 93, 93, 93, 93, 93, 93, 144,
- 93, 195, 93, 93, 93, 246, 195, 93, 93, 93,
- 93, 93, 297, 93, 93, 93, 93, 348, 42, 42,
- 42, 42, 42, 42, 42, 42, 1768, 1795, 1795, 701,
- 758, 1521, 80, 676, 113, 790, 1927, 1828, 1896, 568,
- 768, 1861, 757, 1866, 1874, 1888, 618, 518, 1921, 1921,
- 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921,
- 1921, 1921, 1921, 1584, 636, 285, 676, 676, 346, 113,
- 113, 402, 700, 1723, -8, 910, 831, 269, 1028, 51,
- 3, 3, 422, 448, 352, 106, 422, 106, 458, 364,
- 434, 454, 106, 166, 166, 166, 166, 565, 166, 166,
- 166, 586, 565, 166, 166, -22, -22, 1752, 1769, 1826,
- 1844, 1945, 145, 979, 156, 132, 284, 106, 140, 106,
- 30, 140, 140, 30, 106, 106, 106, 140, 106, 106,
- 140, 106, 327, 106, 106, 106, 140, 140, 106, 140,
- 205, 106, 284, 166, 565, 588, 565, 588, 565, 166,
- 166, -12, 166, -22, -22, -22, -22, -22, -22, 689,
- 4, 44, 84, 186, 73, 881, 199, 188, 174, 286,
- 48, 336, 384, 389, 332, 142, -21, 52, 154, 33,
- 85, 276, 278, 233, 515, 509, 474, 516, 502, 464,
- 491, 415, 417, 432, 514, 370, 463, 506, 365, 513,
- -12, 517, 504, 519, 505, 511, 496, 525, 532, 330,
- 358,
-);
- const YY_REDUCE_USE_DFLT = -89;
- const YY_REDUCE_MAX = 178;
- public static $yy_reduce_ofst = array(
- 325, 527, 495, 666, 595, 560, 863, 874, 834, 805,
- 762, 794, 1179, 1455, 1208, 1012, 1386, 1139, 1070, 1110,
- 1150, 1219, 1248, 1277, 1288, 1317, 1346, 1357, 1415, 1426,
- 1081, 1041, 1001, 972, 943, 932, 903, 1484, 1495, 1622,
- 1633, 1662, 1593, 1564, 1553, 1524, 1704, 607, 1590, 178,
- 74, 1027, 229, 899, 273, 212, -22, -22, -22, -22,
- -22, -22, -22, -22, -22, -22, -22, -22, -22, -22,
- -22, -22, -22, -22, -22, -22, -22, -22, -22, -22,
- -22, -22, -22, 380, 329, 187, 159, 127, -52, 253,
- 304, 12, 303, 152, 193, 328, 68, 68, 68, 322,
- 328, 407, 405, 322, 68, 190, 335, 416, 403, 68,
- 401, 354, 371, 68, 68, 68, 337, 322, 68, 68,
- 68, 68, 408, 68, 68, 68, 409, 455, 455, 455,
- 455, 455, 510, 480, 455, 455, 477, 482, 457, 482,
- 473, 457, 457, 485, 482, 482, 482, 457, 482, 482,
- 457, 482, 503, 482, 482, 482, 457, 457, 482, 457,
- 520, 482, 523, -88, 498, 489, 498, 489, 498, -88,
- -88, -67, -88, 111, 155, 89, 236, 230, 162,
-);
- public static $yyExpectedTokens = array(
- array(),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 52, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
- array(24, 26, 32, 37, 38, 39, 54, 55, 56, 57, ),
- array(26, 32, 37, 38, 39, 54, 55, 56, 57, ),
- array(26, 32, 37, 38, 39, 54, 55, 56, 57, ),
- array(14, 16, 48, 50, 53, ),
- array(3, 9, 10, 11, 12, 14, 18, 19, 20, 25, 29, 30, 31, 59, 60, ),
- array(1, 13, 17, 26, 32, 35, 47, ),
- array(14, 16, 50, 53, ),
- array(1, 26, 32, ),
- array(14, 35, 53, ),
- array(3, 9, 10, 11, 12, 14, 18, 19, 20, 25, 29, 30, 31, 59, 60, ),
- array(36, 37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 52, 54, 55, 56, 57, ),
- array(36, 37, 38, 39, 54, 55, 56, 57, ),
- array(13, 37, 38, 39, 54, 55, 56, 57, ),
- array(13, 37, 38, 39, 54, 55, 56, 57, ),
- array(13, 37, 38, 39, 54, 55, 56, 57, ),
- array(27, 37, 38, 39, 54, 55, 56, 57, ),
- array(13, 37, 38, 39, 54, 55, 56, 57, ),
- array(13, 37, 38, 39, 54, 55, 56, 57, ),
- array(2, 37, 38, 39, 54, 55, 56, 57, ),
- array(21, 37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, 60, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(37, 38, 39, 54, 55, 56, 57, ),
- array(9, 12, 16, 26, 28, 32, ),
- array(9, 12, 16, 26, 32, ),
- array(17, 44, 51, ),
- array(1, 26, 32, ),
- array(1, 26, 32, ),
- array(15, 17, 47, ),
- array(14, 35, 53, ),
- array(14, 35, 53, ),
- array(1, 2, ),
- array(3, 4, 5, 6, 9, 10, 11, 12, 18, 19, 20, 25, 29, 30, 31, ),
- array(2, 9, 12, 15, 16, 17, 44, 47, 49, 51, ),
- array(12, 14, 16, 53, ),
- array(9, 12, 16, 49, ),
- array(1, 13, 26, 32, ),
- array(1, 13, 26, 32, ),
- array(1, 13, 26, 32, ),
- array(15, 17, 47, ),
- array(9, 12, 16, ),
- array(9, 12, 16, ),
- array(14, 16, ),
- array(17, 47, ),
- array(1, 28, ),
- array(26, 32, ),
- array(14, 16, ),
- array(26, 32, ),
- array(26, 32, ),
- array(1, 52, ),
- array(14, 53, ),
- array(1, 17, ),
- array(26, 32, ),
- array(1, ),
- array(1, ),
- array(1, ),
- array(1, ),
- array(17, ),
- array(1, ),
- array(1, ),
- array(1, ),
- array(1, ),
- array(17, ),
- array(1, ),
- array(1, ),
- array(),
- array(),
- array(2, 9, 12, 16, 17, 44, 47, 49, 51, 52, ),
- array(2, 9, 12, 15, 16, 17, 44, 47, 49, 51, ),
- array(2, 9, 12, 16, 17, 44, 47, 49, 51, ),
- array(2, 9, 12, 16, 17, 44, 47, 49, 51, ),
- array(9, 12, 16, 17, 44, 47, 49, 51, ),
- array(12, 14, 16, 33, 53, ),
- array(9, 12, 16, 49, ),
- array(9, 12, 16, ),
- array(15, 44, 51, ),
- array(14, 53, ),
- array(26, 32, ),
- array(44, 51, ),
- array(26, 32, ),
- array(44, 51, ),
- array(44, 51, ),
- array(44, 51, ),
- array(44, 51, ),
- array(26, 32, ),
- array(26, 32, ),
- array(26, 32, ),
- array(44, 51, ),
- array(26, 32, ),
- array(26, 32, ),
- array(44, 51, ),
- array(26, 32, ),
- array(15, 22, ),
- array(26, 32, ),
- array(26, 32, ),
- array(26, 32, ),
- array(44, 51, ),
- array(44, 51, ),
- array(26, 32, ),
- array(44, 51, ),
- array(12, 35, ),
- array(26, 32, ),
- array(14, 53, ),
- array(1, ),
- array(17, ),
- array(2, ),
- array(17, ),
- array(2, ),
- array(17, ),
- array(1, ),
- array(1, ),
- array(35, ),
- array(1, ),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(2, 35, 37, 38, 39, 47, 54, 55, 56, 57, ),
- array(13, 21, 23, 26, 32, 34, 36, 44, ),
- array(13, 15, 26, 32, 35, 47, ),
- array(13, 22, 26, 32, 45, ),
- array(13, 22, 26, 32, 45, ),
- array(35, 44, 47, 52, ),
- array(9, 12, 16, 49, ),
- array(22, 45, 52, ),
- array(28, 35, 47, ),
- array(22, 45, 60, ),
- array(35, 47, ),
- array(21, 34, ),
- array(34, 36, ),
- array(16, 49, ),
- array(6, 8, ),
- array(44, 52, ),
- array(7, 8, ),
- array(34, 52, ),
- array(35, 47, ),
- array(35, 47, ),
- array(22, 45, ),
- array(34, 36, ),
- array(15, 44, ),
- array(34, 36, ),
- array(34, 36, ),
- array(13, ),
- array(16, ),
- array(50, ),
- array(7, ),
- array(16, ),
- array(52, ),
- array(23, ),
- array(36, ),
- array(50, ),
- array(14, ),
- array(13, ),
- array(52, ),
- array(15, ),
- array(16, ),
- array(40, ),
- array(16, ),
- array(35, ),
- array(16, ),
- array(33, ),
- array(16, ),
- array(33, ),
- array(35, ),
- array(44, ),
- array(16, ),
- array(16, ),
- array(16, ),
- array(16, ),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
- array(),
-);
- public static $yy_default = array(
- 336, 512, 512, 512, 497, 497, 512, 474, 474, 474,
- 512, 512, 512, 512, 512, 512, 512, 512, 512, 512,
- 512, 512, 512, 512, 512, 512, 512, 512, 512, 512,
- 512, 512, 512, 512, 512, 512, 512, 512, 512, 512,
- 512, 512, 512, 512, 512, 512, 377, 377, 356, 512,
- 512, 413, 512, 377, 512, 512, 512, 512, 512, 512,
- 512, 512, 382, 512, 349, 512, 512, 512, 382, 379,
- 389, 388, 384, 402, 473, 397, 498, 500, 401, 361,
- 472, 499, 349, 377, 377, 487, 377, 377, 429, 512,
- 512, 368, 326, 428, 512, 439, 391, 391, 391, 429,
- 439, 439, 512, 429, 391, 377, 512, 377, 377, 391,
- 512, 371, 358, 395, 394, 396, 373, 429, 400, 404,
- 391, 404, 484, 406, 405, 481, 334, 428, 428, 428,
- 428, 428, 512, 441, 439, 455, 512, 363, 435, 354,
- 434, 437, 433, 432, 359, 357, 364, 436, 353, 367,
- 466, 365, 512, 352, 350, 360, 467, 465, 346, 464,
- 439, 366, 512, 369, 461, 475, 488, 476, 485, 372,
- 422, 439, 374, 480, 439, 480, 480, 439, 334, 413,
- 409, 413, 403, 403, 413, 440, 403, 413, 403, 413,
- 512, 512, 512, 332, 409, 512, 512, 512, 423, 403,
- 512, 409, 512, 512, 512, 512, 512, 512, 512, 418,
- 385, 512, 512, 512, 512, 512, 512, 512, 415, 512,
- 455, 512, 512, 512, 411, 486, 409, 512, 512, 512,
- 512, 419, 407, 362, 445, 418, 425, 424, 420, 339,
- 460, 421, 483, 398, 416, 340, 399, 455, 378, 337,
- 338, 330, 328, 329, 442, 443, 444, 438, 392, 393,
- 427, 426, 386, 417, 408, 390, 410, 331, 333, 335,
- 412, 470, 414, 415, 503, 478, 495, 471, 459, 458,
- 375, 457, 344, 462, 508, 493, 376, 496, 456, 509,
- 494, 501, 504, 511, 510, 507, 505, 502, 506, 345,
- 468, 469, 446, 355, 341, 452, 450, 454, 448, 453,
- 447, 489, 490, 491, 463, 449, 492, 451, 327, 342,
- 343, 370, 430, 431, 479, 477,
-);
- const YYNOCODE = 109;
- const YYSTACKDEPTH = 500;
- const YYNSTATE = 326;
- const YYNRULE = 186;
- const YYERRORSYMBOL = 61;
- const YYERRSYMDT = 'yy0';
- const YYFALLBACK = 0;
- public static $yyFallback = array(
- );
- public function Trace($TraceFILE, $zTracePrompt)
- {
- if (!$TraceFILE) {
- $zTracePrompt = 0;
- } elseif (!$zTracePrompt) {
- $TraceFILE = 0;
- }
- $this->yyTraceFILE = $TraceFILE;
- $this->yyTracePrompt = $zTracePrompt;
- }
-
- public function PrintTrace()
- {
- $this->yyTraceFILE = fopen('php://output', 'w');
- $this->yyTracePrompt = ' ';
- }
-
- public $yyTraceFILE;
- public $yyTracePrompt;
- public $yyidx; /* Index of top element in stack */
- public $yyerrcnt; /* Shifts left before out of the error */
- public $yystack = array(); /* The parser's stack */
-
- public $yyTokenName = array(
- '$', 'VERT', 'COLON', 'TEXT',
- 'STRIPON', 'STRIPOFF', 'LITERALSTART', 'LITERALEND',
- 'LITERAL', 'SIMPELOUTPUT', 'SIMPLETAG', 'SMARTYBLOCKCHILDPARENT',
- 'LDEL', 'RDEL', 'DOLLARID', 'EQUAL',
- 'ID', 'PTR', 'LDELMAKENOCACHE', 'LDELIF',
- 'LDELFOR', 'SEMICOLON', 'INCDEC', 'TO',
- 'STEP', 'LDELFOREACH', 'SPACE', 'AS',
- 'APTR', 'LDELSETFILTER', 'CLOSETAG', 'LDELSLASH',
- 'ATTR', 'INTEGER', 'COMMA', 'OPENP',
- 'CLOSEP', 'MATH', 'UNIMATH', 'ISIN',
- 'QMARK', 'NOT', 'TYPECAST', 'HEX',
- 'DOT', 'INSTANCEOF', 'SINGLEQUOTESTRING', 'DOUBLECOLON',
- 'NAMESPACE', 'AT', 'HATCH', 'OPENB',
- 'CLOSEB', 'DOLLAR', 'LOGOP', 'SLOGOP',
- 'TLOGOP', 'SINGLECOND', 'ARRAYOPEN', 'QUOTE',
- 'BACKTICK', 'error', 'start', 'template',
- 'literal_e2', 'literal_e1', 'smartytag', 'tagbody',
- 'tag', 'outattr', 'eqoutattr', 'varindexed',
- 'output', 'attributes', 'variable', 'value',
- 'expr', 'modifierlist', 'statement', 'statements',
- 'foraction', 'varvar', 'modparameters', 'attribute',
- 'ternary', 'tlop', 'lop', 'scond',
- 'array', 'function', 'ns1', 'doublequoted_with_quotes',
- 'static_class_access', 'arraydef', 'object', 'arrayindex',
- 'indexdef', 'varvarele', 'objectchain', 'objectelement',
- 'method', 'params', 'modifier', 'modparameter',
- 'arrayelements', 'arrayelement', 'doublequoted', 'doublequotedcontent',
- );
-
- public static $yyRuleName = array(
- 'start ::= template',
- 'template ::= template TEXT',
- 'template ::= template STRIPON',
- 'template ::= template STRIPOFF',
- 'template ::= template LITERALSTART literal_e2 LITERALEND',
- 'literal_e2 ::= literal_e1 LITERALSTART literal_e1 LITERALEND',
- 'literal_e2 ::= literal_e1',
- 'literal_e1 ::= literal_e1 LITERAL',
- 'literal_e1 ::=',
- 'template ::= template smartytag',
- 'template ::=',
- 'smartytag ::= SIMPELOUTPUT',
- 'smartytag ::= SIMPLETAG',
- 'smartytag ::= SMARTYBLOCKCHILDPARENT',
- 'smartytag ::= LDEL tagbody RDEL',
- 'smartytag ::= tag RDEL',
- 'tagbody ::= outattr',
- 'tagbody ::= DOLLARID eqoutattr',
- 'tagbody ::= varindexed eqoutattr',
- 'eqoutattr ::= EQUAL outattr',
- 'outattr ::= output attributes',
- 'output ::= variable',
- 'output ::= value',
- 'output ::= expr',
- 'tag ::= LDEL ID attributes',
- 'tag ::= LDEL ID',
- 'tag ::= LDEL ID modifierlist attributes',
- 'tag ::= LDEL ID PTR ID attributes',
- 'tag ::= LDEL ID PTR ID modifierlist attributes',
- 'tag ::= LDELMAKENOCACHE DOLLARID',
- 'tag ::= LDELIF expr',
- 'tag ::= LDELIF expr attributes',
- 'tag ::= LDELIF statement',
- 'tag ::= LDELIF statement attributes',
- 'tag ::= LDELFOR statements SEMICOLON expr SEMICOLON varindexed foraction attributes',
- 'foraction ::= EQUAL expr',
- 'foraction ::= INCDEC',
- 'tag ::= LDELFOR statement TO expr attributes',
- 'tag ::= LDELFOR statement TO expr STEP expr attributes',
- 'tag ::= LDELFOREACH SPACE expr AS varvar attributes',
- 'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes',
- 'tag ::= LDELFOREACH attributes',
- 'tag ::= LDELSETFILTER ID modparameters',
- 'tag ::= LDELSETFILTER ID modparameters modifierlist',
- 'smartytag ::= CLOSETAG',
- 'tag ::= LDELSLASH ID',
- 'tag ::= LDELSLASH ID modifierlist',
- 'tag ::= LDELSLASH ID PTR ID',
- 'tag ::= LDELSLASH ID PTR ID modifierlist',
- 'attributes ::= attributes attribute',
- 'attributes ::= attribute',
- 'attributes ::=',
- 'attribute ::= SPACE ID EQUAL ID',
- 'attribute ::= ATTR expr',
- 'attribute ::= ATTR value',
- 'attribute ::= SPACE ID',
- 'attribute ::= SPACE expr',
- 'attribute ::= SPACE value',
- 'attribute ::= SPACE INTEGER EQUAL expr',
- 'statements ::= statement',
- 'statements ::= statements COMMA statement',
- 'statement ::= DOLLARID EQUAL INTEGER',
- 'statement ::= DOLLARID EQUAL expr',
- 'statement ::= varindexed EQUAL expr',
- 'statement ::= OPENP statement CLOSEP',
- 'expr ::= value',
- 'expr ::= ternary',
- 'expr ::= DOLLARID COLON ID',
- 'expr ::= expr MATH value',
- 'expr ::= expr UNIMATH value',
- 'expr ::= expr tlop value',
- 'expr ::= expr lop expr',
- 'expr ::= expr scond',
- 'expr ::= expr ISIN array',
- 'expr ::= expr ISIN value',
- 'ternary ::= OPENP expr CLOSEP QMARK DOLLARID COLON expr',
- 'ternary ::= OPENP expr CLOSEP QMARK expr COLON expr',
- 'value ::= variable',
- 'value ::= UNIMATH value',
- 'value ::= NOT value',
- 'value ::= TYPECAST value',
- 'value ::= variable INCDEC',
- 'value ::= HEX',
- 'value ::= INTEGER',
- 'value ::= INTEGER DOT INTEGER',
- 'value ::= INTEGER DOT',
- 'value ::= DOT INTEGER',
- 'value ::= ID',
- 'value ::= function',
- 'value ::= OPENP expr CLOSEP',
- 'value ::= variable INSTANCEOF ns1',
- 'value ::= variable INSTANCEOF variable',
- 'value ::= SINGLEQUOTESTRING',
- 'value ::= doublequoted_with_quotes',
- 'value ::= varindexed DOUBLECOLON static_class_access',
- 'value ::= smartytag',
- 'value ::= value modifierlist',
- 'value ::= NAMESPACE',
- 'value ::= arraydef',
- 'value ::= ns1 DOUBLECOLON static_class_access',
- 'ns1 ::= ID',
- 'ns1 ::= NAMESPACE',
- 'variable ::= DOLLARID',
- 'variable ::= varindexed',
- 'variable ::= varvar AT ID',
- 'variable ::= object',
- 'variable ::= HATCH ID HATCH',
- 'variable ::= HATCH ID HATCH arrayindex',
- 'variable ::= HATCH variable HATCH',
- 'variable ::= HATCH variable HATCH arrayindex',
- 'varindexed ::= DOLLARID arrayindex',
- 'varindexed ::= varvar arrayindex',
- 'arrayindex ::= arrayindex indexdef',
- 'arrayindex ::=',
- 'indexdef ::= DOT DOLLARID',
- 'indexdef ::= DOT varvar',
- 'indexdef ::= DOT varvar AT ID',
- 'indexdef ::= DOT ID',
- 'indexdef ::= DOT INTEGER',
- 'indexdef ::= DOT LDEL expr RDEL',
- 'indexdef ::= OPENB ID CLOSEB',
- 'indexdef ::= OPENB ID DOT ID CLOSEB',
- 'indexdef ::= OPENB SINGLEQUOTESTRING CLOSEB',
- 'indexdef ::= OPENB INTEGER CLOSEB',
- 'indexdef ::= OPENB DOLLARID CLOSEB',
- 'indexdef ::= OPENB variable CLOSEB',
- 'indexdef ::= OPENB value CLOSEB',
- 'indexdef ::= OPENB expr CLOSEB',
- 'indexdef ::= OPENB CLOSEB',
- 'varvar ::= DOLLARID',
- 'varvar ::= DOLLAR',
- 'varvar ::= varvar varvarele',
- 'varvarele ::= ID',
- 'varvarele ::= SIMPELOUTPUT',
- 'varvarele ::= LDEL expr RDEL',
- 'object ::= varindexed objectchain',
- 'objectchain ::= objectelement',
- 'objectchain ::= objectchain objectelement',
- 'objectelement ::= PTR ID arrayindex',
- 'objectelement ::= PTR varvar arrayindex',
- 'objectelement ::= PTR LDEL expr RDEL arrayindex',
- 'objectelement ::= PTR ID LDEL expr RDEL arrayindex',
- 'objectelement ::= PTR method',
- 'function ::= ns1 OPENP params CLOSEP',
- 'method ::= ID OPENP params CLOSEP',
- 'method ::= DOLLARID OPENP params CLOSEP',
- 'params ::= params COMMA expr',
- 'params ::= expr',
- 'params ::=',
- 'modifierlist ::= modifierlist modifier modparameters',
- 'modifierlist ::= modifier modparameters',
- 'modifier ::= VERT AT ID',
- 'modifier ::= VERT ID',
- 'modparameters ::= modparameters modparameter',
- 'modparameters ::=',
- 'modparameter ::= COLON value',
- 'modparameter ::= COLON UNIMATH value',
- 'modparameter ::= COLON array',
- 'static_class_access ::= method',
- 'static_class_access ::= method objectchain',
- 'static_class_access ::= ID',
- 'static_class_access ::= DOLLARID arrayindex',
- 'static_class_access ::= DOLLARID arrayindex objectchain',
- 'lop ::= LOGOP',
- 'lop ::= SLOGOP',
- 'tlop ::= TLOGOP',
- 'scond ::= SINGLECOND',
- 'arraydef ::= OPENB arrayelements CLOSEB',
- 'arraydef ::= ARRAYOPEN arrayelements CLOSEP',
- 'arrayelements ::= arrayelement',
- 'arrayelements ::= arrayelements COMMA arrayelement',
- 'arrayelements ::=',
- 'arrayelement ::= value APTR expr',
- 'arrayelement ::= ID APTR expr',
- 'arrayelement ::= expr',
- 'doublequoted_with_quotes ::= QUOTE QUOTE',
- 'doublequoted_with_quotes ::= QUOTE doublequoted QUOTE',
- 'doublequoted ::= doublequoted doublequotedcontent',
- 'doublequoted ::= doublequotedcontent',
- 'doublequotedcontent ::= BACKTICK variable BACKTICK',
- 'doublequotedcontent ::= BACKTICK expr BACKTICK',
- 'doublequotedcontent ::= DOLLARID',
- 'doublequotedcontent ::= LDEL variable RDEL',
- 'doublequotedcontent ::= LDEL expr RDEL',
- 'doublequotedcontent ::= smartytag',
- 'doublequotedcontent ::= TEXT',
- );
-
- public function tokenName($tokenType)
- {
- if ($tokenType === 0) {
- return 'End of Input';
- }
- if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) {
- return $this->yyTokenName[$tokenType];
- } else {
- return 'Unknown';
- }
- }
-
- public static function yy_destructor($yymajor, $yypminor)
- {
- switch ($yymajor) {
- default: break; /* If no destructor action specified: do nothing */
- }
- }
-
- public function yy_pop_parser_stack()
- {
- if (empty($this->yystack)) {
- return;
- }
- $yytos = array_pop($this->yystack);
- if ($this->yyTraceFILE && $this->yyidx >= 0) {
- fwrite($this->yyTraceFILE,
- $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
- "\n");
- }
- $yymajor = $yytos->major;
- self::yy_destructor($yymajor, $yytos->minor);
- $this->yyidx--;
-
- return $yymajor;
- }
-
- public function __destruct()
- {
- while ($this->yystack !== Array()) {
- $this->yy_pop_parser_stack();
- }
- if (is_resource($this->yyTraceFILE)) {
- fclose($this->yyTraceFILE);
- }
- }
-
- public function yy_get_expected_tokens($token)
- {
- static $res3 = array();
- static $res4 = array();
- $state = $this->yystack[$this->yyidx]->stateno;
- $expected = self::$yyExpectedTokens[$state];
- if (isset($res3[$state][$token])) {
- if ($res3[$state][$token]) {
- return $expected;
- }
- } else {
- if ($res3[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) {
- return $expected;
- }
- }
- $stack = $this->yystack;
- $yyidx = $this->yyidx;
- do {
- $yyact = $this->yy_find_shift_action($token);
- if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
- // reduce action
- $done = 0;
- do {
- if ($done++ === 100) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // too much recursion prevents proper detection
- // so give up
- return array_unique($expected);
- }
- $yyruleno = $yyact - self::YYNSTATE;
- $this->yyidx -= self::$yyRuleInfo[$yyruleno][1];
- $nextstate = $this->yy_find_reduce_action(
- $this->yystack[$this->yyidx]->stateno,
- self::$yyRuleInfo[$yyruleno][0]);
- if (isset(self::$yyExpectedTokens[$nextstate])) {
- $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
- if (isset($res4[$nextstate][$token])) {
- if ($res4[$nextstate][$token]) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return array_unique($expected);
- }
- } else {
- if ($res4[$nextstate][$token] = in_array($token, self::$yyExpectedTokens[$nextstate], true)) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return array_unique($expected);
- }
- }
- }
- if ($nextstate < self::YYNSTATE) {
- // we need to shift a non-terminal
- $this->yyidx++;
- $x = new TP_yyStackEntry;
- $x->stateno = $nextstate;
- $x->major = self::$yyRuleInfo[$yyruleno][0];
- $this->yystack[$this->yyidx] = $x;
- continue 2;
- } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // the last token was just ignored, we can't accept
- // by ignoring input, this is in essence ignoring a
- // syntax error!
- return array_unique($expected);
- } elseif ($nextstate === self::YY_NO_ACTION) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // input accepted, but not shifted (I guess)
- return $expected;
- } else {
- $yyact = $nextstate;
- }
- } while (true);
- }
- break;
- } while (true);
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
-
- return array_unique($expected);
- }
-
- public function yy_is_expected_token($token)
- {
- static $res = array();
- static $res2 = array();
- if ($token === 0) {
- return true; // 0 is not part of this
- }
- $state = $this->yystack[$this->yyidx]->stateno;
- if (isset($res[$state][$token])) {
- if ($res[$state][$token]) {
- return true;
- }
- } else {
- if ($res[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) {
- return true;
- }
- }
- $stack = $this->yystack;
- $yyidx = $this->yyidx;
- do {
- $yyact = $this->yy_find_shift_action($token);
- if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
- // reduce action
- $done = 0;
- do {
- if ($done++ === 100) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // too much recursion prevents proper detection
- // so give up
- return true;
- }
- $yyruleno = $yyact - self::YYNSTATE;
- $this->yyidx -= self::$yyRuleInfo[$yyruleno][1];
- $nextstate = $this->yy_find_reduce_action(
- $this->yystack[$this->yyidx]->stateno,
- self::$yyRuleInfo[$yyruleno][0]);
- if (isset($res2[$nextstate][$token])) {
- if ($res2[$nextstate][$token]) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return true;
- }
- } else {
- if ($res2[$nextstate][$token] = (isset(self::$yyExpectedTokens[$nextstate]) && in_array($token, self::$yyExpectedTokens[$nextstate], true))) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- return true;
- }
- }
- if ($nextstate < self::YYNSTATE) {
- // we need to shift a non-terminal
- $this->yyidx++;
- $x = new TP_yyStackEntry;
- $x->stateno = $nextstate;
- $x->major = self::$yyRuleInfo[$yyruleno][0];
- $this->yystack[$this->yyidx] = $x;
- continue 2;
- } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- if (!$token) {
- // end of input: this is valid
- return true;
- }
- // the last token was just ignored, we can't accept
- // by ignoring input, this is in essence ignoring a
- // syntax error!
- return false;
- } elseif ($nextstate === self::YY_NO_ACTION) {
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
- // input accepted, but not shifted (I guess)
- return true;
- } else {
- $yyact = $nextstate;
- }
- } while (true);
- }
- break;
- } while (true);
- $this->yyidx = $yyidx;
- $this->yystack = $stack;
-
- return true;
- }
-
- public function yy_find_shift_action($iLookAhead)
- {
- $stateno = $this->yystack[$this->yyidx]->stateno;
-
- /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */
- if (!isset(self::$yy_shift_ofst[$stateno])) {
- // no shift actions
- return self::$yy_default[$stateno];
- }
- $i = self::$yy_shift_ofst[$stateno];
- if ($i === self::YY_SHIFT_USE_DFLT) {
- return self::$yy_default[$stateno];
- }
- if ($iLookAhead === self::YYNOCODE) {
- return self::YY_NO_ACTION;
- }
- $i += $iLookAhead;
- if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
- self::$yy_lookahead[$i] != $iLookAhead) {
- if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)
- && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) {
- if ($this->yyTraceFILE) {
- fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'FALLBACK ' .
- $this->yyTokenName[$iLookAhead] . ' => ' .
- $this->yyTokenName[$iFallback] . "\n");
- }
-
- return $this->yy_find_shift_action($iFallback);
- }
-
- return self::$yy_default[$stateno];
- } else {
- return self::$yy_action[$i];
- }
- }
-
- public function yy_find_reduce_action($stateno, $iLookAhead)
- {
- /* $stateno = $this->yystack[$this->yyidx]->stateno; */
-
- if (!isset(self::$yy_reduce_ofst[$stateno])) {
- return self::$yy_default[$stateno];
- }
- $i = self::$yy_reduce_ofst[$stateno];
- if ($i === self::YY_REDUCE_USE_DFLT) {
- return self::$yy_default[$stateno];
- }
- if ($iLookAhead === self::YYNOCODE) {
- return self::YY_NO_ACTION;
- }
- $i += $iLookAhead;
- if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
- self::$yy_lookahead[$i] != $iLookAhead) {
- return self::$yy_default[$stateno];
- } else {
- return self::$yy_action[$i];
- }
- }
-
- public function yy_shift($yyNewState, $yyMajor, $yypMinor)
- {
- $this->yyidx++;
- if ($this->yyidx >= self::YYSTACKDEPTH) {
- $this->yyidx--;
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
- }
- while ($this->yyidx >= 0) {
- $this->yy_pop_parser_stack();
- }
-// line 220 "../smarty/lexer/smarty_internal_templateparser.y"
-
- $this->internalError = true;
- $this->compiler->trigger_template_error('Stack overflow in template parser');
-
- return;
- }
- $yytos = new TP_yyStackEntry;
- $yytos->stateno = $yyNewState;
- $yytos->major = $yyMajor;
- $yytos->minor = $yypMinor;
- $this->yystack[] = $yytos;
- if ($this->yyTraceFILE && $this->yyidx > 0) {
- fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt,
- $yyNewState);
- fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt);
- for ($i = 1; $i <= $this->yyidx; $i++) {
- fprintf($this->yyTraceFILE, " %s",
- $this->yyTokenName[$this->yystack[$i]->major]);
- }
- fwrite($this->yyTraceFILE,"\n");
- }
- }
-
- public static $yyRuleInfo = array(
- array( 0 => 62, 1 => 1 ),
- array( 0 => 63, 1 => 2 ),
- array( 0 => 63, 1 => 2 ),
- array( 0 => 63, 1 => 2 ),
- array( 0 => 63, 1 => 4 ),
- array( 0 => 64, 1 => 4 ),
- array( 0 => 64, 1 => 1 ),
- array( 0 => 65, 1 => 2 ),
- array( 0 => 65, 1 => 0 ),
- array( 0 => 63, 1 => 2 ),
- array( 0 => 63, 1 => 0 ),
- array( 0 => 66, 1 => 1 ),
- array( 0 => 66, 1 => 1 ),
- array( 0 => 66, 1 => 1 ),
- array( 0 => 66, 1 => 3 ),
- array( 0 => 66, 1 => 2 ),
- array( 0 => 67, 1 => 1 ),
- array( 0 => 67, 1 => 2 ),
- array( 0 => 67, 1 => 2 ),
- array( 0 => 70, 1 => 2 ),
- array( 0 => 69, 1 => 2 ),
- array( 0 => 72, 1 => 1 ),
- array( 0 => 72, 1 => 1 ),
- array( 0 => 72, 1 => 1 ),
- array( 0 => 68, 1 => 3 ),
- array( 0 => 68, 1 => 2 ),
- array( 0 => 68, 1 => 4 ),
- array( 0 => 68, 1 => 5 ),
- array( 0 => 68, 1 => 6 ),
- array( 0 => 68, 1 => 2 ),
- array( 0 => 68, 1 => 2 ),
- array( 0 => 68, 1 => 3 ),
- array( 0 => 68, 1 => 2 ),
- array( 0 => 68, 1 => 3 ),
- array( 0 => 68, 1 => 8 ),
- array( 0 => 80, 1 => 2 ),
- array( 0 => 80, 1 => 1 ),
- array( 0 => 68, 1 => 5 ),
- array( 0 => 68, 1 => 7 ),
- array( 0 => 68, 1 => 6 ),
- array( 0 => 68, 1 => 8 ),
- array( 0 => 68, 1 => 2 ),
- array( 0 => 68, 1 => 3 ),
- array( 0 => 68, 1 => 4 ),
- array( 0 => 66, 1 => 1 ),
- array( 0 => 68, 1 => 2 ),
- array( 0 => 68, 1 => 3 ),
- array( 0 => 68, 1 => 4 ),
- array( 0 => 68, 1 => 5 ),
- array( 0 => 73, 1 => 2 ),
- array( 0 => 73, 1 => 1 ),
- array( 0 => 73, 1 => 0 ),
- array( 0 => 83, 1 => 4 ),
- array( 0 => 83, 1 => 2 ),
- array( 0 => 83, 1 => 2 ),
- array( 0 => 83, 1 => 2 ),
- array( 0 => 83, 1 => 2 ),
- array( 0 => 83, 1 => 2 ),
- array( 0 => 83, 1 => 4 ),
- array( 0 => 79, 1 => 1 ),
- array( 0 => 79, 1 => 3 ),
- array( 0 => 78, 1 => 3 ),
- array( 0 => 78, 1 => 3 ),
- array( 0 => 78, 1 => 3 ),
- array( 0 => 78, 1 => 3 ),
- array( 0 => 76, 1 => 1 ),
- array( 0 => 76, 1 => 1 ),
- array( 0 => 76, 1 => 3 ),
- array( 0 => 76, 1 => 3 ),
- array( 0 => 76, 1 => 3 ),
- array( 0 => 76, 1 => 3 ),
- array( 0 => 76, 1 => 3 ),
- array( 0 => 76, 1 => 2 ),
- array( 0 => 76, 1 => 3 ),
- array( 0 => 76, 1 => 3 ),
- array( 0 => 84, 1 => 7 ),
- array( 0 => 84, 1 => 7 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 2 ),
- array( 0 => 75, 1 => 2 ),
- array( 0 => 75, 1 => 2 ),
- array( 0 => 75, 1 => 2 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 3 ),
- array( 0 => 75, 1 => 2 ),
- array( 0 => 75, 1 => 2 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 3 ),
- array( 0 => 75, 1 => 3 ),
- array( 0 => 75, 1 => 3 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 3 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 2 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 1 ),
- array( 0 => 75, 1 => 3 ),
- array( 0 => 90, 1 => 1 ),
- array( 0 => 90, 1 => 1 ),
- array( 0 => 74, 1 => 1 ),
- array( 0 => 74, 1 => 1 ),
- array( 0 => 74, 1 => 3 ),
- array( 0 => 74, 1 => 1 ),
- array( 0 => 74, 1 => 3 ),
- array( 0 => 74, 1 => 4 ),
- array( 0 => 74, 1 => 3 ),
- array( 0 => 74, 1 => 4 ),
- array( 0 => 71, 1 => 2 ),
- array( 0 => 71, 1 => 2 ),
- array( 0 => 95, 1 => 2 ),
- array( 0 => 95, 1 => 0 ),
- array( 0 => 96, 1 => 2 ),
- array( 0 => 96, 1 => 2 ),
- array( 0 => 96, 1 => 4 ),
- array( 0 => 96, 1 => 2 ),
- array( 0 => 96, 1 => 2 ),
- array( 0 => 96, 1 => 4 ),
- array( 0 => 96, 1 => 3 ),
- array( 0 => 96, 1 => 5 ),
- array( 0 => 96, 1 => 3 ),
- array( 0 => 96, 1 => 3 ),
- array( 0 => 96, 1 => 3 ),
- array( 0 => 96, 1 => 3 ),
- array( 0 => 96, 1 => 3 ),
- array( 0 => 96, 1 => 3 ),
- array( 0 => 96, 1 => 2 ),
- array( 0 => 81, 1 => 1 ),
- array( 0 => 81, 1 => 1 ),
- array( 0 => 81, 1 => 2 ),
- array( 0 => 97, 1 => 1 ),
- array( 0 => 97, 1 => 1 ),
- array( 0 => 97, 1 => 3 ),
- array( 0 => 94, 1 => 2 ),
- array( 0 => 98, 1 => 1 ),
- array( 0 => 98, 1 => 2 ),
- array( 0 => 99, 1 => 3 ),
- array( 0 => 99, 1 => 3 ),
- array( 0 => 99, 1 => 5 ),
- array( 0 => 99, 1 => 6 ),
- array( 0 => 99, 1 => 2 ),
- array( 0 => 89, 1 => 4 ),
- array( 0 => 100, 1 => 4 ),
- array( 0 => 100, 1 => 4 ),
- array( 0 => 101, 1 => 3 ),
- array( 0 => 101, 1 => 1 ),
- array( 0 => 101, 1 => 0 ),
- array( 0 => 77, 1 => 3 ),
- array( 0 => 77, 1 => 2 ),
- array( 0 => 102, 1 => 3 ),
- array( 0 => 102, 1 => 2 ),
- array( 0 => 82, 1 => 2 ),
- array( 0 => 82, 1 => 0 ),
- array( 0 => 103, 1 => 2 ),
- array( 0 => 103, 1 => 3 ),
- array( 0 => 103, 1 => 2 ),
- array( 0 => 92, 1 => 1 ),
- array( 0 => 92, 1 => 2 ),
- array( 0 => 92, 1 => 1 ),
- array( 0 => 92, 1 => 2 ),
- array( 0 => 92, 1 => 3 ),
- array( 0 => 86, 1 => 1 ),
- array( 0 => 86, 1 => 1 ),
- array( 0 => 85, 1 => 1 ),
- array( 0 => 87, 1 => 1 ),
- array( 0 => 93, 1 => 3 ),
- array( 0 => 93, 1 => 3 ),
- array( 0 => 104, 1 => 1 ),
- array( 0 => 104, 1 => 3 ),
- array( 0 => 104, 1 => 0 ),
- array( 0 => 105, 1 => 3 ),
- array( 0 => 105, 1 => 3 ),
- array( 0 => 105, 1 => 1 ),
- array( 0 => 91, 1 => 2 ),
- array( 0 => 91, 1 => 3 ),
- array( 0 => 106, 1 => 2 ),
- array( 0 => 106, 1 => 1 ),
- array( 0 => 107, 1 => 3 ),
- array( 0 => 107, 1 => 3 ),
- array( 0 => 107, 1 => 1 ),
- array( 0 => 107, 1 => 3 ),
- array( 0 => 107, 1 => 3 ),
- array( 0 => 107, 1 => 1 ),
- array( 0 => 107, 1 => 1 ),
- );
-
- public static $yyReduceMap = array(
- 0 => 0,
- 1 => 1,
- 2 => 2,
- 3 => 3,
- 4 => 4,
- 5 => 5,
- 6 => 6,
- 21 => 6,
- 22 => 6,
- 23 => 6,
- 36 => 6,
- 56 => 6,
- 57 => 6,
- 65 => 6,
- 66 => 6,
- 77 => 6,
- 82 => 6,
- 83 => 6,
- 88 => 6,
- 92 => 6,
- 93 => 6,
- 97 => 6,
- 98 => 6,
- 100 => 6,
- 105 => 6,
- 169 => 6,
- 174 => 6,
- 7 => 7,
- 8 => 8,
- 9 => 9,
- 11 => 11,
- 12 => 12,
- 13 => 13,
- 14 => 14,
- 15 => 15,
- 16 => 16,
- 17 => 17,
- 18 => 18,
- 19 => 19,
- 20 => 20,
- 24 => 24,
- 25 => 25,
- 26 => 26,
- 27 => 27,
- 28 => 28,
- 29 => 29,
- 30 => 30,
- 31 => 31,
- 33 => 31,
- 32 => 32,
- 34 => 34,
- 35 => 35,
- 37 => 37,
- 38 => 38,
- 39 => 39,
- 40 => 40,
- 41 => 41,
- 42 => 42,
- 43 => 43,
- 44 => 44,
- 45 => 45,
- 46 => 46,
- 47 => 47,
- 48 => 48,
- 49 => 49,
- 50 => 50,
- 59 => 50,
- 147 => 50,
- 151 => 50,
- 155 => 50,
- 157 => 50,
- 51 => 51,
- 148 => 51,
- 154 => 51,
- 52 => 52,
- 53 => 53,
- 54 => 53,
- 55 => 55,
- 132 => 55,
- 58 => 58,
- 60 => 60,
- 61 => 61,
- 62 => 61,
- 63 => 63,
- 64 => 64,
- 67 => 67,
- 68 => 68,
- 69 => 68,
- 70 => 70,
- 71 => 71,
- 72 => 72,
- 73 => 73,
- 74 => 74,
- 75 => 75,
- 76 => 76,
- 78 => 78,
- 80 => 78,
- 81 => 78,
- 112 => 78,
- 79 => 79,
- 84 => 84,
- 85 => 85,
- 86 => 86,
- 87 => 87,
- 89 => 89,
- 90 => 90,
- 91 => 90,
- 94 => 94,
- 95 => 95,
- 96 => 96,
- 99 => 99,
- 101 => 101,
- 102 => 102,
- 103 => 103,
- 104 => 104,
- 106 => 106,
- 107 => 107,
- 108 => 108,
- 109 => 109,
- 110 => 110,
- 111 => 111,
- 113 => 113,
- 171 => 113,
- 114 => 114,
- 115 => 115,
- 116 => 116,
- 117 => 117,
- 118 => 118,
- 119 => 119,
- 127 => 119,
- 120 => 120,
- 121 => 121,
- 122 => 122,
- 123 => 122,
- 125 => 122,
- 126 => 122,
- 124 => 124,
- 128 => 128,
- 129 => 129,
- 130 => 130,
- 175 => 130,
- 131 => 131,
- 133 => 133,
- 134 => 134,
- 135 => 135,
- 136 => 136,
- 137 => 137,
- 138 => 138,
- 139 => 139,
- 140 => 140,
- 141 => 141,
- 142 => 142,
- 143 => 143,
- 144 => 144,
- 145 => 145,
- 146 => 146,
- 149 => 149,
- 150 => 150,
- 152 => 152,
- 153 => 153,
- 156 => 156,
- 158 => 158,
- 159 => 159,
- 160 => 160,
- 161 => 161,
- 162 => 162,
- 163 => 163,
- 164 => 164,
- 165 => 165,
- 166 => 166,
- 167 => 167,
- 168 => 167,
- 170 => 170,
- 172 => 172,
- 173 => 173,
- 176 => 176,
- 177 => 177,
- 178 => 178,
- 179 => 179,
- 182 => 179,
- 180 => 180,
- 183 => 180,
- 181 => 181,
- 184 => 184,
- 185 => 185,
- );
-// line 233 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r0(){
- $this->root_buffer->prepend_array($this, $this->template_prefix);
- $this->root_buffer->append_array($this, $this->template_postfix);
- $this->_retvalue = $this->root_buffer->to_smarty_php($this);
- }
-// line 240 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r1(){
- $text = $this->yystack[ $this->yyidx + 0 ]->minor;
-
- if ((string)$text == '') {
- $this->current_buffer->append_subtree($this, null);
- }
-
- $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text($text, $this->strip));
- }
-// line 250 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r2(){
- $this->strip = true;
- }
-// line 254 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r3(){
- $this->strip = false;
- }
-// line 259 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r4(){
- $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text($this->yystack[$this->yyidx + -1]->minor));
- }
-// line 264 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r5(){
- $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.$this->yystack[$this->yyidx + -1]->minor;
- }
-// line 267 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r6(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- }
-// line 271 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r7(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
-
- }
-// line 276 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r8(){
- $this->_retvalue = '';
- }
-// line 280 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r9(){
- if ($this->compiler->has_code) {
- $this->current_buffer->append_subtree($this, $this->mergePrefixCode($this->yystack[$this->yyidx + 0]->minor));
- }
- $this->compiler->has_variable_string = false;
- $this->block_nesting_level = count($this->compiler->_tag_stack);
- }
-// line 292 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r11(){
- $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $');
- if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) {
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',array('nocache'),array('value'=>$this->compiler->compileVariable('\''.$match[1].'\'')));
- } else {
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->compiler->compileVariable('\''.$var.'\'')));
- }
- }
-// line 302 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r12(){
- $tag = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()));
- if ($tag == 'strip') {
- $this->strip = true;
- $this->_retvalue = null;
- } else {
- if (defined($tag)) {
- if ($this->security) {
- $this->security->isTrustedConstant($tag, $this->compiler);
- }
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$tag));
- } else {
- if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) {
- $this->_retvalue = $this->compiler->compileTag($match[1],array('\'nocache\''));
- } else {
- $this->_retvalue = $this->compiler->compileTag($tag,array());
- }
- }
- }
- }
-// line 323 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r13(){
- $j = strrpos($this->yystack[$this->yyidx + 0]->minor,'.');
- if ($this->yystack[$this->yyidx + 0]->minor[$j+1] == 'c') {
- // {$smarty.block.child}
- $this->_retvalue = $this->compiler->compileTag('child',array(),array($this->yystack[$this->yyidx + 0]->minor));
- } else {
- // {$smarty.block.parent}
- $this->_retvalue = $this->compiler->compileTag('parent',array(),array($this->yystack[$this->yyidx + 0]->minor));
- }
- }
-// line 334 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r14(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- }
-// line 338 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r15(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- }
-// line 342 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r16(){
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + 0]->minor[1],array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]));
- }
-// line 351 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r17(){
- $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]),array('var'=>'\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'')),$this->yystack[$this->yyidx + 0]->minor[1]));
- }
-// line 355 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r18(){
- $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]),array('var'=>$this->yystack[$this->yyidx + -1]->minor['var'])),$this->yystack[$this->yyidx + 0]->minor[1]),array('smarty_internal_index'=>$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']));
- }
-// line 359 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r19(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- }
-// line 363 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r20(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 378 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r24(){
- if (defined($this->yystack[$this->yyidx + -1]->minor)) {
- if ($this->security) {
- $this->security->isTrustedConstant($this->yystack[$this->yyidx + -1]->minor, $this->compiler);
- }
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + 0]->minor,array('value'=>$this->yystack[$this->yyidx + -1]->minor));
- } else {
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
- }
- }
-// line 388 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r25(){
- if (defined($this->yystack[$this->yyidx + 0]->minor)) {
- if ($this->security) {
- $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler);
- }
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->yystack[$this->yyidx + 0]->minor));
- } else {
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor,array());
- }
- }
-// line 401 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r26(){
- if (defined($this->yystack[$this->yyidx + -2]->minor)) {
- if ($this->security) {
- $this->security->isTrustedConstant($this->yystack[$this->yyidx + -2]->minor, $this->compiler);
- }
- $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + 0]->minor,array('value'=>$this->yystack[$this->yyidx + -2]->minor, 'modifierlist'=>$this->yystack[$this->yyidx + -1]->minor));
- } else {
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + 0]->minor, array('modifierlist'=>$this->yystack[$this->yyidx + -1]->minor));
- }
- }
-// line 413 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r27(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor,$this->yystack[$this->yyidx + 0]->minor,array('object_method'=>$this->yystack[$this->yyidx + -1]->minor));
- }
-// line 418 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r28(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + 0]->minor,array('modifierlist'=>$this->yystack[$this->yyidx + -1]->minor, 'object_method'=>$this->yystack[$this->yyidx + -2]->minor));
- }
-// line 423 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r29(){
- $this->_retvalue = $this->compiler->compileTag('make_nocache',array(array('var'=>'\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'')));
- }
-// line 428 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r30(){
- $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor,$this->compiler->getLdelLength()));
- $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + 0]->minor));
- }
-// line 433 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r31(){
- $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor,$this->compiler->getLdelLength()));
- $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,$this->yystack[$this->yyidx + 0]->minor,array('if condition'=>$this->yystack[$this->yyidx + -1]->minor));
- }
-// line 438 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r32(){
- $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor,$this->compiler->getLdelLength()));
- $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + 0]->minor));
- }
-// line 449 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r34(){
- $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -6]->minor),array('ifexp'=>$this->yystack[$this->yyidx + -4]->minor),array('var'=>$this->yystack[$this->yyidx + -2]->minor),array('step'=>$this->yystack[$this->yyidx + -1]->minor))),1);
- }
-// line 453 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r35(){
- $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 461 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r37(){
- $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -3]->minor),array('to'=>$this->yystack[$this->yyidx + -1]->minor))),0);
- }
-// line 465 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r38(){
- $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -5]->minor),array('to'=>$this->yystack[$this->yyidx + -3]->minor),array('step'=>$this->yystack[$this->yyidx + -1]->minor))),0);
- }
-// line 470 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r39(){
- $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('from'=>$this->yystack[$this->yyidx + -3]->minor),array('item'=>$this->yystack[$this->yyidx + -1]->minor))));
- }
-// line 474 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r40(){
- $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('from'=>$this->yystack[$this->yyidx + -5]->minor),array('item'=>$this->yystack[$this->yyidx + -1]->minor),array('key'=>$this->yystack[$this->yyidx + -3]->minor))));
- }
-// line 477 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r41(){
- $this->_retvalue = $this->compiler->compileTag('foreach',$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 482 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r42(){
- $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array(array_merge(array($this->yystack[$this->yyidx + -1]->minor),$this->yystack[$this->yyidx + 0]->minor))));
- }
-// line 486 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r43(){
- $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array_merge(array(array_merge(array($this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor)),$this->yystack[$this->yyidx + 0]->minor)));
- }
-// line 492 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r44(){
- $tag = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' /');
- if ($tag === 'strip') {
- $this->strip = false;
- $this->_retvalue = null;
- } else {
- $this->_retvalue = $this->compiler->compileTag($tag.'close',array());
- }
- }
-// line 501 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r45(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor.'close',array());
- }
-// line 505 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r46(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array(),array('modifier_list'=>$this->yystack[$this->yyidx + 0]->minor));
- }
-// line 510 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r47(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',array(),array('object_method'=>$this->yystack[$this->yyidx + 0]->minor));
- }
-// line 514 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r48(){
- $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array(),array('object_method'=>$this->yystack[$this->yyidx + -1]->minor, 'modifier_list'=>$this->yystack[$this->yyidx + 0]->minor));
- }
-// line 522 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r49(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor;
- }
-// line 528 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r50(){
- $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
- }
-// line 533 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r51(){
- $this->_retvalue = array();
- }
-// line 538 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r52(){
- if (defined($this->yystack[$this->yyidx + 0]->minor)) {
- if ($this->security) {
- $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler);
- }
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);
- } else {
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'\''.$this->yystack[$this->yyidx + 0]->minor.'\'');
- }
- }
-// line 549 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r53(){
- $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor," =\n\r\t")=>$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 557 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r55(){
- $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';
- }
-// line 569 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r58(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 582 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r60(){
- $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor;
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;
- }
-// line 587 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r61(){
- $this->_retvalue = array('var' => '\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\'', 'value'=>$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 594 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r63(){
- $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 598 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r64(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- }
-// line 618 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r67(){
- $this->_retvalue = '$_smarty_tpl->getStreamVariable(\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'://' . $this->yystack[$this->yyidx + 0]->minor . '\')';
- }
-// line 623 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r68(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor;
- }
-// line 633 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r70(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor['pre']. $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor['op'].$this->yystack[$this->yyidx + 0]->minor .')';
- }
-// line 637 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r71(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 641 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r72(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor . $this->yystack[$this->yyidx + -1]->minor . ')';
- }
-// line 645 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r73(){
- $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-// line 649 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r74(){
- $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')';
- }
-// line 657 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r75(){
- $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '. $this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\'') . ' : '.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 661 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r76(){
- $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 671 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r78(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 676 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r79(){
- $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 697 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r84(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 701 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r85(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.';
- }
-// line 705 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r86(){
- $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 710 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r87(){
- if (defined($this->yystack[$this->yyidx + 0]->minor)) {
- if ($this->security) {
- $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler);
- }
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- } else {
- $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';
- }
- }
-// line 727 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r89(){
- $this->_retvalue = '('. $this->yystack[$this->yyidx + -1]->minor .')';
- }
-// line 731 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r90(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 749 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r94(){
- if ($this->security && $this->security->static_classes !== array()) {
- $this->compiler->trigger_template_error('dynamic static class not allowed by security setting');
- }
- $prefixVar = $this->compiler->getNewPrefixVariable();
- if ($this->yystack[$this->yyidx + -2]->minor['var'] === '\'smarty\'') {
- $this->compiler->appendPrefixCode("compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']).';?>');
- } else {
- $this->compiler->appendPrefixCode("compiler->compileVariable($this->yystack[$this->yyidx + -2]->minor['var']).$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'].';?>');
- }
- $this->_retvalue = $prefixVar .'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1];
- }
-// line 760 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r95(){
- $prefixVar = $this->compiler->getNewPrefixVariable();
- $tmp = $this->compiler->appendCode('', $this->yystack[$this->yyidx + 0]->minor);
- $this->compiler->appendPrefixCode($this->compiler->appendCode($tmp, ""));
- $this->_retvalue = $prefixVar;
- }
-// line 767 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r96(){
- $this->_retvalue = $this->compiler->compileTag('private_modifier',array(),array('value'=>$this->yystack[$this->yyidx + -1]->minor,'modifierlist'=>$this->yystack[$this->yyidx + 0]->minor));
- }
-// line 780 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r99(){
- if (!in_array(strtolower($this->yystack[$this->yyidx + -2]->minor), array('self', 'parent')) && (!$this->security || $this->security->isTrustedStaticClassAccess($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->compiler))) {
- if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor])) {
- $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor].'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1];
- } else {
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1];
- }
- } else {
- $this->compiler->trigger_template_error ('static class \''.$this->yystack[$this->yyidx + -2]->minor.'\' is undefined or not allowed by security setting');
- }
- }
-// line 799 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r101(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- }
-// line 810 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r102(){
- $this->_retvalue = $this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'');
- }
-// line 813 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r103(){
- if ($this->yystack[$this->yyidx + 0]->minor['var'] === '\'smarty\'') {
- $smarty_var = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);
- $this->_retvalue = $smarty_var;
- } else {
- // used for array reset,next,prev,end,current
- $this->last_variable = $this->yystack[$this->yyidx + 0]->minor['var'];
- $this->last_index = $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
- $this->_retvalue = $this->compiler->compileVariable($this->yystack[$this->yyidx + 0]->minor['var']).$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
- }
- }
-// line 826 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r104(){
- $this->_retvalue = '$_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + -2]->minor .']->'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 836 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r106(){
- $this->_retvalue = $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -1]->minor . '\'');
- }
-// line 840 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r107(){
- $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -2]->minor . '\'') . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' :null)';
- }
-// line 844 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r108(){
- $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -1]->minor);
- }
-// line 848 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r109(){
- $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -2]->minor) . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' : null)';
- }
-// line 852 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r110(){
- $this->_retvalue = array('var'=>'\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'', 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 855 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r111(){
- $this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 868 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r113(){
- return;
- }
-// line 874 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r114(){
- $this->_retvalue = '['.$this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'').']';
- }
-// line 877 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r115(){
- $this->_retvalue = '['.$this->compiler->compileVariable($this->yystack[$this->yyidx + 0]->minor).']';
- }
-// line 881 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r116(){
- $this->_retvalue = '['.$this->compiler->compileVariable($this->yystack[$this->yyidx + -2]->minor).'->'.$this->yystack[$this->yyidx + 0]->minor.']';
- }
-// line 885 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r117(){
- $this->_retvalue = '[\''. $this->yystack[$this->yyidx + 0]->minor .'\']';
- }
-// line 889 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r118(){
- $this->_retvalue = '['. $this->yystack[$this->yyidx + 0]->minor .']';
- }
-// line 894 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r119(){
- $this->_retvalue = '['. $this->yystack[$this->yyidx + -1]->minor .']';
- }
-// line 899 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r120(){
- $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']';
- }
-// line 903 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r121(){
- $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']';
- }
-// line 906 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r122(){
- $this->_retvalue = '['.$this->yystack[$this->yyidx + -1]->minor.']';
- }
-// line 912 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r124(){
- $this->_retvalue = '['.$this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'').']';
- }
-// line 928 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r128(){
- $this->_retvalue = '[]';
- }
-// line 938 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r129(){
- $this->_retvalue = '\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'';
- }
-// line 942 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r130(){
- $this->_retvalue = '\'\'';
- }
-// line 947 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r131(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 955 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r133(){
- $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $');
- $this->_retvalue = $this->compiler->compileVariable('\''.$var.'\'');
- }
-// line 961 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r134(){
- $this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')';
- }
-// line 968 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r135(){
- if ($this->yystack[$this->yyidx + -1]->minor['var'] === '\'smarty\'') {
- $this->_retvalue = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor;
- } else {
- $this->_retvalue = $this->compiler->compileVariable($this->yystack[$this->yyidx + -1]->minor['var']).$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor;
- }
- }
-// line 977 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r136(){
- $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
- }
-// line 982 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r137(){
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 987 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r138(){
- if ($this->security && substr($this->yystack[$this->yyidx + -1]->minor,0,1) === '_') {
- $this->compiler->trigger_template_error (self::ERR1);
- }
- $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 994 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r139(){
- if ($this->security) {
- $this->compiler->trigger_template_error (self::ERR2);
- }
- $this->_retvalue = '->{'.$this->compiler->compileVariable($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor.'}';
- }
-// line 1001 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r140(){
- if ($this->security) {
- $this->compiler->trigger_template_error (self::ERR2);
- }
- $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';
- }
-// line 1008 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r141(){
- if ($this->security) {
- $this->compiler->trigger_template_error (self::ERR2);
- }
- $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';
- }
-// line 1016 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r142(){
- $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 1024 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r143(){
- $this->_retvalue = $this->compiler->compilePHPFunctionCall($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + -1]->minor);
- }
-// line 1032 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r144(){
- if ($this->security && substr($this->yystack[$this->yyidx + -3]->minor,0,1) === '_') {
- $this->compiler->trigger_template_error (self::ERR1);
- }
- $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . '('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')';
- }
-// line 1039 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r145(){
- if ($this->security) {
- $this->compiler->trigger_template_error (self::ERR2);
- }
- $prefixVar = $this->compiler->getNewPrefixVariable();
- $this->compiler->appendPrefixCode("compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + -3]->minor,1).'\'').';?>');
- $this->_retvalue = $prefixVar .'('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')';
- }
-// line 1050 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r146(){
- $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array($this->yystack[$this->yyidx + 0]->minor));
- }
-// line 1067 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r149(){
- $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor)));
- }
-// line 1071 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r150(){
- $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor));
- }
-// line 1079 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r152(){
- $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
- }
-// line 1087 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r153(){
- $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 1100 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r156(){
- $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor);
- }
-// line 1109 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r158(){
- $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '', 'method');
- }
-// line 1114 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r159(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'method');
- }
-// line 1119 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r160(){
- $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '');
- }
-// line 1124 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r161(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'property');
- }
-// line 1129 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r162(){
- $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor, 'property');
- }
-// line 1135 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r163(){
- $this->_retvalue = ' '. trim($this->yystack[$this->yyidx + 0]->minor) . ' ';
- }
-// line 1139 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r164(){
- static $lops = array(
- 'eq' => ' == ',
- 'ne' => ' != ',
- 'neq' => ' != ',
- 'gt' => ' > ',
- 'ge' => ' >= ',
- 'gte' => ' >= ',
- 'lt' => ' < ',
- 'le' => ' <= ',
- 'lte' => ' <= ',
- 'mod' => ' % ',
- 'and' => ' && ',
- 'or' => ' || ',
- 'xor' => ' xor ',
- );
- $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor));
- $this->_retvalue = $lops[$op];
- }
-// line 1158 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r165(){
- static $tlops = array(
- 'isdivby' => array('op' => ' % ', 'pre' => '!('),
- 'isnotdivby' => array('op' => ' % ', 'pre' => '('),
- 'isevenby' => array('op' => ' / ', 'pre' => '!(1 & '),
- 'isnotevenby' => array('op' => ' / ', 'pre' => '(1 & '),
- 'isoddby' => array('op' => ' / ', 'pre' => '(1 & '),
- 'isnotoddby' => array('op' => ' / ', 'pre' => '!(1 & '),
- );
- $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor));
- $this->_retvalue = $tlops[$op];
- }
-// line 1171 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r166(){
- static $scond = array (
- 'iseven' => '!(1 & ',
- 'isnoteven' => '(1 & ',
- 'isodd' => '(1 & ',
- 'isnotodd' => '!(1 & ',
- );
- $op = strtolower(str_replace(' ', '', $this->yystack[$this->yyidx + 0]->minor));
- $this->_retvalue = $scond[$op];
- }
-// line 1185 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r167(){
- $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')';
- }
-// line 1196 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r170(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 1204 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r172(){
- $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 1208 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r173(){
- $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor;
- }
-// line 1224 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r176(){
- $this->compiler->leaveDoubleQuote();
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php($this);
- }
-// line 1230 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r177(){
- $this->yystack[$this->yyidx + -1]->minor->append_subtree($this, $this->yystack[$this->yyidx + 0]->minor);
- $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
- }
-// line 1235 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r178(){
- $this->_retvalue = new Smarty_Internal_ParseTree_Dq($this, $this->yystack[$this->yyidx + 0]->minor);
- }
-// line 1239 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r179(){
- $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)'.$this->yystack[$this->yyidx + -1]->minor);
- }
-// line 1243 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r180(){
- $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)('.$this->yystack[$this->yyidx + -1]->minor.')');
- }
-// line 1247 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r181(){
- $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\']->value');
- }
-// line 1259 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r184(){
- $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->yystack[$this->yyidx + 0]->minor);
- }
-// line 1263 "../smarty/lexer/smarty_internal_templateparser.y"
- public function yy_r185(){
- $this->_retvalue = new Smarty_Internal_ParseTree_DqContent($this->yystack[$this->yyidx + 0]->minor);
- }
-
- private $_retvalue;
-
- public function yy_reduce($yyruleno)
- {
- if ($this->yyTraceFILE && $yyruleno >= 0
- && $yyruleno < count(self::$yyRuleName)) {
- fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n",
- $this->yyTracePrompt, $yyruleno,
- self::$yyRuleName[$yyruleno]);
- }
-
- $this->_retvalue = $yy_lefthand_side = null;
- if (isset(self::$yyReduceMap[$yyruleno])) {
- // call the action
- $this->_retvalue = null;
- $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}();
- $yy_lefthand_side = $this->_retvalue;
- }
- $yygoto = self::$yyRuleInfo[$yyruleno][0];
- $yysize = self::$yyRuleInfo[$yyruleno][1];
- $this->yyidx -= $yysize;
- for ($i = $yysize; $i; $i--) {
- // pop all of the right-hand side parameters
- array_pop($this->yystack);
- }
- $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto);
- if ($yyact < self::YYNSTATE) {
- if (!$this->yyTraceFILE && $yysize) {
- $this->yyidx++;
- $x = new TP_yyStackEntry;
- $x->stateno = $yyact;
- $x->major = $yygoto;
- $x->minor = $yy_lefthand_side;
- $this->yystack[$this->yyidx] = $x;
- } else {
- $this->yy_shift($yyact, $yygoto, $yy_lefthand_side);
- }
- } elseif ($yyact === self::YYNSTATE + self::YYNRULE + 1) {
- $this->yy_accept();
- }
- }
-
- public function yy_parse_failed()
- {
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
- } while ($this->yyidx >= 0) {
- $this->yy_pop_parser_stack();
- }
- }
-
- public function yy_syntax_error($yymajor, $TOKEN)
- {
-// line 213 "../smarty/lexer/smarty_internal_templateparser.y"
-
- $this->internalError = true;
- $this->yymajor = $yymajor;
- $this->compiler->trigger_template_error();
- }
-
- public function yy_accept()
- {
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
- } while ($this->yyidx >= 0) {
- $this->yy_pop_parser_stack();
- }
-// line 206 "../smarty/lexer/smarty_internal_templateparser.y"
-
- $this->successful = !$this->internalError;
- $this->internalError = false;
- $this->retvalue = $this->_retvalue;
- }
-
- public function doParse($yymajor, $yytokenvalue)
- {
- $yyerrorhit = 0; /* True if yymajor has invoked an error */
-
- if ($this->yyidx === null || $this->yyidx < 0) {
- $this->yyidx = 0;
- $this->yyerrcnt = -1;
- $x = new TP_yyStackEntry;
- $x->stateno = 0;
- $x->major = 0;
- $this->yystack = array();
- $this->yystack[] = $x;
- }
- $yyendofinput = ($yymajor==0);
-
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sInput %s\n",
- $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
- }
-
- do {
- $yyact = $this->yy_find_shift_action($yymajor);
- if ($yymajor < self::YYERRORSYMBOL &&
- !$this->yy_is_expected_token($yymajor)) {
- // force a syntax error
- $yyact = self::YY_ERROR_ACTION;
- }
- if ($yyact < self::YYNSTATE) {
- $this->yy_shift($yyact, $yymajor, $yytokenvalue);
- $this->yyerrcnt--;
- if ($yyendofinput && $this->yyidx >= 0) {
- $yymajor = 0;
- } else {
- $yymajor = self::YYNOCODE;
- }
- } elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
- $this->yy_reduce($yyact - self::YYNSTATE);
- } elseif ($yyact === self::YY_ERROR_ACTION) {
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sSyntax Error!\n",
- $this->yyTracePrompt);
- }
- if (self::YYERRORSYMBOL) {
- if ($this->yyerrcnt < 0) {
- $this->yy_syntax_error($yymajor, $yytokenvalue);
- }
- $yymx = $this->yystack[$this->yyidx]->major;
- if ($yymx === self::YYERRORSYMBOL || $yyerrorhit) {
- if ($this->yyTraceFILE) {
- fprintf($this->yyTraceFILE, "%sDiscard input token %s\n",
- $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
- }
- $this->yy_destructor($yymajor, $yytokenvalue);
- $yymajor = self::YYNOCODE;
- } else {
- while ($this->yyidx >= 0 &&
- $yymx !== self::YYERRORSYMBOL &&
- ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
- ){
- $this->yy_pop_parser_stack();
- }
- if ($this->yyidx < 0 || $yymajor==0) {
- $this->yy_destructor($yymajor, $yytokenvalue);
- $this->yy_parse_failed();
- $yymajor = self::YYNOCODE;
- } elseif ($yymx !== self::YYERRORSYMBOL) {
- $u2 = 0;
- $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2);
- }
- }
- $this->yyerrcnt = 3;
- $yyerrorhit = 1;
- } else {
- if ($this->yyerrcnt <= 0) {
- $this->yy_syntax_error($yymajor, $yytokenvalue);
- }
- $this->yyerrcnt = 3;
- $this->yy_destructor($yymajor, $yytokenvalue);
- if ($yyendofinput) {
- $this->yy_parse_failed();
- }
- $yymajor = self::YYNOCODE;
- }
- } else {
- $this->yy_accept();
- $yymajor = self::YYNOCODE;
- }
- } while ($yymajor !== self::YYNOCODE && $this->yyidx >= 0);
- }
-}
-
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php
deleted file mode 100644
index c8ffd4cc6..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php
+++ /dev/null
@@ -1,605 +0,0 @@
-\n";
- echo "Smarty Installation test...\n";
- echo "Testing template directory...\n";
- }
- $_stream_resolve_include_path = function_exists('stream_resolve_include_path');
- // test if all registered template_dir are accessible
- foreach ($smarty->getTemplateDir() as $template_dir) {
- $_template_dir = $template_dir;
- $template_dir = realpath($template_dir);
- // resolve include_path or fail existence
- if (!$template_dir) {
- if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_template_dir)) {
- // try PHP include_path
- if ($_stream_resolve_include_path) {
- $template_dir = stream_resolve_include_path($_template_dir);
- } else {
- $template_dir = $smarty->ext->_getIncludePath->getIncludePath($_template_dir, null, $smarty);
- }
- if ($template_dir !== false) {
- if ($errors === null) {
- echo "$template_dir is OK.\n";
- }
- continue;
- } else {
- $status = false;
- $message =
- "FAILED: $_template_dir does not exist (and couldn't be found in include_path either)";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'template_dir' ] = $message;
- }
- continue;
- }
- } else {
- $status = false;
- $message = "FAILED: $_template_dir does not exist";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'template_dir' ] = $message;
- }
- continue;
- }
- }
- if (!is_dir($template_dir)) {
- $status = false;
- $message = "FAILED: $template_dir is not a directory";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'template_dir' ] = $message;
- }
- } elseif (!is_readable($template_dir)) {
- $status = false;
- $message = "FAILED: $template_dir is not readable";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'template_dir' ] = $message;
- }
- } else {
- if ($errors === null) {
- echo "$template_dir is OK.\n";
- }
- }
- }
- if ($errors === null) {
- echo "Testing compile directory...\n";
- }
- // test if registered compile_dir is accessible
- $__compile_dir = $smarty->getCompileDir();
- $_compile_dir = realpath($__compile_dir);
- if (!$_compile_dir) {
- $status = false;
- $message = "FAILED: {$__compile_dir} does not exist";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'compile_dir' ] = $message;
- }
- } elseif (!is_dir($_compile_dir)) {
- $status = false;
- $message = "FAILED: {$_compile_dir} is not a directory";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'compile_dir' ] = $message;
- }
- } elseif (!is_readable($_compile_dir)) {
- $status = false;
- $message = "FAILED: {$_compile_dir} is not readable";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'compile_dir' ] = $message;
- }
- } elseif (!is_writable($_compile_dir)) {
- $status = false;
- $message = "FAILED: {$_compile_dir} is not writable";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'compile_dir' ] = $message;
- }
- } else {
- if ($errors === null) {
- echo "{$_compile_dir} is OK.\n";
- }
- }
- if ($errors === null) {
- echo "Testing plugins directory...\n";
- }
- // test if all registered plugins_dir are accessible
- // and if core plugins directory is still registered
- $_core_plugins_dir = realpath(__DIR__ . '/../plugins');
- $_core_plugins_available = false;
- foreach ($smarty->getPluginsDir() as $plugin_dir) {
- $_plugin_dir = $plugin_dir;
- $plugin_dir = realpath($plugin_dir);
- // resolve include_path or fail existence
- if (!$plugin_dir) {
- if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) {
- // try PHP include_path
- if ($_stream_resolve_include_path) {
- $plugin_dir = stream_resolve_include_path($_plugin_dir);
- } else {
- $plugin_dir = $smarty->ext->_getIncludePath->getIncludePath($_plugin_dir, null, $smarty);
- }
- if ($plugin_dir !== false) {
- if ($errors === null) {
- echo "$plugin_dir is OK.\n";
- }
- continue;
- } else {
- $status = false;
- $message = "FAILED: $_plugin_dir does not exist (and couldn't be found in include_path either)";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'plugins_dir' ] = $message;
- }
- continue;
- }
- } else {
- $status = false;
- $message = "FAILED: $_plugin_dir does not exist";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'plugins_dir' ] = $message;
- }
- continue;
- }
- }
- if (!is_dir($plugin_dir)) {
- $status = false;
- $message = "FAILED: $plugin_dir is not a directory";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'plugins_dir' ] = $message;
- }
- } elseif (!is_readable($plugin_dir)) {
- $status = false;
- $message = "FAILED: $plugin_dir is not readable";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'plugins_dir' ] = $message;
- }
- } elseif ($_core_plugins_dir && $_core_plugins_dir == realpath($plugin_dir)) {
- $_core_plugins_available = true;
- if ($errors === null) {
- echo "$plugin_dir is OK.\n";
- }
- } else {
- if ($errors === null) {
- echo "$plugin_dir is OK.\n";
- }
- }
- }
- if (!$_core_plugins_available) {
- $status = false;
- $message = "WARNING: Smarty's own libs/plugins is not available";
- if ($errors === null) {
- echo $message . ".\n";
- } elseif (!isset($errors[ 'plugins_dir' ])) {
- $errors[ 'plugins_dir' ] = $message;
- }
- }
- if ($errors === null) {
- echo "Testing cache directory...\n";
- }
- // test if all registered cache_dir is accessible
- $__cache_dir = $smarty->getCacheDir();
- $_cache_dir = realpath($__cache_dir);
- if (!$_cache_dir) {
- $status = false;
- $message = "FAILED: {$__cache_dir} does not exist";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'cache_dir' ] = $message;
- }
- } elseif (!is_dir($_cache_dir)) {
- $status = false;
- $message = "FAILED: {$_cache_dir} is not a directory";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'cache_dir' ] = $message;
- }
- } elseif (!is_readable($_cache_dir)) {
- $status = false;
- $message = "FAILED: {$_cache_dir} is not readable";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'cache_dir' ] = $message;
- }
- } elseif (!is_writable($_cache_dir)) {
- $status = false;
- $message = "FAILED: {$_cache_dir} is not writable";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'cache_dir' ] = $message;
- }
- } else {
- if ($errors === null) {
- echo "{$_cache_dir} is OK.\n";
- }
- }
- if ($errors === null) {
- echo "Testing configs directory...\n";
- }
- // test if all registered config_dir are accessible
- foreach ($smarty->getConfigDir() as $config_dir) {
- $_config_dir = $config_dir;
- // resolve include_path or fail existence
- if (!$config_dir) {
- if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_config_dir)) {
- // try PHP include_path
- if ($_stream_resolve_include_path) {
- $config_dir = stream_resolve_include_path($_config_dir);
- } else {
- $config_dir = $smarty->ext->_getIncludePath->getIncludePath($_config_dir, null, $smarty);
- }
- if ($config_dir !== false) {
- if ($errors === null) {
- echo "$config_dir is OK.\n";
- }
- continue;
- } else {
- $status = false;
- $message = "FAILED: $_config_dir does not exist (and couldn't be found in include_path either)";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'config_dir' ] = $message;
- }
- continue;
- }
- } else {
- $status = false;
- $message = "FAILED: $_config_dir does not exist";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'config_dir' ] = $message;
- }
- continue;
- }
- }
- if (!is_dir($config_dir)) {
- $status = false;
- $message = "FAILED: $config_dir is not a directory";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'config_dir' ] = $message;
- }
- } elseif (!is_readable($config_dir)) {
- $status = false;
- $message = "FAILED: $config_dir is not readable";
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'config_dir' ] = $message;
- }
- } else {
- if ($errors === null) {
- echo "$config_dir is OK.\n";
- }
- }
- }
- if ($errors === null) {
- echo "Testing sysplugin files...\n";
- }
- // test if sysplugins are available
- $source = SMARTY_SYSPLUGINS_DIR;
- if (is_dir($source)) {
- $expectedSysplugins = array(
- 'smartycompilerexception.php' => true,
- 'smartyexception.php' => true,
- 'smarty_cacheresource.php' => true,
- 'smarty_cacheresource_custom.php' => true,
- 'smarty_cacheresource_keyvaluestore.php' => true,
- 'smarty_data.php' => true,
- 'smarty_internal_block.php' => true,
- 'smarty_internal_cacheresource_file.php' => true,
- 'smarty_internal_compilebase.php' => true,
- 'smarty_internal_compile_append.php' => true,
- 'smarty_internal_compile_assign.php' => true,
- 'smarty_internal_compile_block.php' => true,
- 'smarty_internal_compile_block_child.php' => true,
- 'smarty_internal_compile_block_parent.php' => true,
- 'smarty_internal_compile_child.php' => true,
- 'smarty_internal_compile_parent.php' => true,
- 'smarty_internal_compile_break.php' => true,
- 'smarty_internal_compile_call.php' => true,
- 'smarty_internal_compile_capture.php' => true,
- 'smarty_internal_compile_config_load.php' => true,
- 'smarty_internal_compile_continue.php' => true,
- 'smarty_internal_compile_debug.php' => true,
- 'smarty_internal_compile_eval.php' => true,
- 'smarty_internal_compile_extends.php' => true,
- 'smarty_internal_compile_for.php' => true,
- 'smarty_internal_compile_foreach.php' => true,
- 'smarty_internal_compile_function.php' => true,
- 'smarty_internal_compile_if.php' => true,
- 'smarty_internal_compile_include.php' => true,
- 'smarty_internal_compile_insert.php' => true,
- 'smarty_internal_compile_ldelim.php' => true,
- 'smarty_internal_compile_make_nocache.php' => true,
- 'smarty_internal_compile_nocache.php' => true,
- 'smarty_internal_compile_private_block_plugin.php' => true,
- 'smarty_internal_compile_private_foreachsection.php' => true,
- 'smarty_internal_compile_private_function_plugin.php' => true,
- 'smarty_internal_compile_private_modifier.php' => true,
- 'smarty_internal_compile_private_object_block_function.php' => true,
- 'smarty_internal_compile_private_object_function.php' => true,
- 'smarty_internal_compile_private_print_expression.php' => true,
- 'smarty_internal_compile_private_registered_block.php' => true,
- 'smarty_internal_compile_private_registered_function.php' => true,
- 'smarty_internal_compile_private_special_variable.php' => true,
- 'smarty_internal_compile_rdelim.php' => true,
- 'smarty_internal_compile_section.php' => true,
- 'smarty_internal_compile_setfilter.php' => true,
- 'smarty_internal_compile_shared_inheritance.php' => true,
- 'smarty_internal_compile_while.php' => true,
- 'smarty_internal_configfilelexer.php' => true,
- 'smarty_internal_configfileparser.php' => true,
- 'smarty_internal_config_file_compiler.php' => true,
- 'smarty_internal_data.php' => true,
- 'smarty_internal_debug.php' => true,
- 'smarty_internal_extension_handler.php' => true,
- 'smarty_internal_method_addautoloadfilters.php' => true,
- 'smarty_internal_method_adddefaultmodifiers.php' => true,
- 'smarty_internal_method_append.php' => true,
- 'smarty_internal_method_appendbyref.php' => true,
- 'smarty_internal_method_assignbyref.php' => true,
- 'smarty_internal_method_assignglobal.php' => true,
- 'smarty_internal_method_clearallassign.php' => true,
- 'smarty_internal_method_clearallcache.php' => true,
- 'smarty_internal_method_clearassign.php' => true,
- 'smarty_internal_method_clearcache.php' => true,
- 'smarty_internal_method_clearcompiledtemplate.php' => true,
- 'smarty_internal_method_clearconfig.php' => true,
- 'smarty_internal_method_compileallconfig.php' => true,
- 'smarty_internal_method_compilealltemplates.php' => true,
- 'smarty_internal_method_configload.php' => true,
- 'smarty_internal_method_createdata.php' => true,
- 'smarty_internal_method_getautoloadfilters.php' => true,
- 'smarty_internal_method_getconfigvariable.php' => true,
- 'smarty_internal_method_getconfigvars.php' => true,
- 'smarty_internal_method_getdebugtemplate.php' => true,
- 'smarty_internal_method_getdefaultmodifiers.php' => true,
- 'smarty_internal_method_getglobal.php' => true,
- 'smarty_internal_method_getregisteredobject.php' => true,
- 'smarty_internal_method_getstreamvariable.php' => true,
- 'smarty_internal_method_gettags.php' => true,
- 'smarty_internal_method_gettemplatevars.php' => true,
- 'smarty_internal_method_literals.php' => true,
- 'smarty_internal_method_loadfilter.php' => true,
- 'smarty_internal_method_loadplugin.php' => true,
- 'smarty_internal_method_mustcompile.php' => true,
- 'smarty_internal_method_registercacheresource.php' => true,
- 'smarty_internal_method_registerclass.php' => true,
- 'smarty_internal_method_registerdefaultconfighandler.php' => true,
- 'smarty_internal_method_registerdefaultpluginhandler.php' => true,
- 'smarty_internal_method_registerdefaulttemplatehandler.php' => true,
- 'smarty_internal_method_registerfilter.php' => true,
- 'smarty_internal_method_registerobject.php' => true,
- 'smarty_internal_method_registerplugin.php' => true,
- 'smarty_internal_method_registerresource.php' => true,
- 'smarty_internal_method_setautoloadfilters.php' => true,
- 'smarty_internal_method_setdebugtemplate.php' => true,
- 'smarty_internal_method_setdefaultmodifiers.php' => true,
- 'smarty_internal_method_unloadfilter.php' => true,
- 'smarty_internal_method_unregistercacheresource.php' => true,
- 'smarty_internal_method_unregisterfilter.php' => true,
- 'smarty_internal_method_unregisterobject.php' => true,
- 'smarty_internal_method_unregisterplugin.php' => true,
- 'smarty_internal_method_unregisterresource.php' => true,
- 'smarty_internal_nocache_insert.php' => true,
- 'smarty_internal_parsetree.php' => true,
- 'smarty_internal_parsetree_code.php' => true,
- 'smarty_internal_parsetree_dq.php' => true,
- 'smarty_internal_parsetree_dqcontent.php' => true,
- 'smarty_internal_parsetree_tag.php' => true,
- 'smarty_internal_parsetree_template.php' => true,
- 'smarty_internal_parsetree_text.php' => true,
- 'smarty_internal_resource_eval.php' => true,
- 'smarty_internal_resource_extends.php' => true,
- 'smarty_internal_resource_file.php' => true,
- 'smarty_internal_resource_php.php' => true,
- 'smarty_internal_resource_stream.php' => true,
- 'smarty_internal_resource_string.php' => true,
- 'smarty_internal_runtime_cachemodify.php' => true,
- 'smarty_internal_runtime_cacheresourcefile.php' => true,
- 'smarty_internal_runtime_capture.php' => true,
- 'smarty_internal_runtime_codeframe.php' => true,
- 'smarty_internal_runtime_filterhandler.php' => true,
- 'smarty_internal_runtime_foreach.php' => true,
- 'smarty_internal_runtime_getincludepath.php' => true,
- 'smarty_internal_runtime_inheritance.php' => true,
- 'smarty_internal_runtime_make_nocache.php' => true,
- 'smarty_internal_runtime_tplfunction.php' => true,
- 'smarty_internal_runtime_updatecache.php' => true,
- 'smarty_internal_runtime_updatescope.php' => true,
- 'smarty_internal_runtime_writefile.php' => true,
- 'smarty_internal_smartytemplatecompiler.php' => true,
- 'smarty_internal_template.php' => true,
- 'smarty_internal_templatebase.php' => true,
- 'smarty_internal_templatecompilerbase.php' => true,
- 'smarty_internal_templatelexer.php' => true,
- 'smarty_internal_templateparser.php' => true,
- 'smarty_internal_testinstall.php' => true,
- 'smarty_internal_undefined.php' => true,
- 'smarty_resource.php' => true,
- 'smarty_resource_custom.php' => true,
- 'smarty_resource_recompiled.php' => true,
- 'smarty_resource_uncompiled.php' => true,
- 'smarty_security.php' => true,
- 'smarty_template_cached.php' => true,
- 'smarty_template_compiled.php' => true,
- 'smarty_template_config.php' => true,
- 'smarty_template_resource_base.php' => true,
- 'smarty_template_source.php' => true,
- 'smarty_undefined_variable.php' => true,
- 'smarty_variable.php' => true,
- );
- $iterator = new DirectoryIterator($source);
- foreach ($iterator as $file) {
- if (!$file->isDot()) {
- $filename = $file->getFilename();
- if (isset($expectedSysplugins[ $filename ])) {
- unset($expectedSysplugins[ $filename ]);
- }
- }
- }
- if ($expectedSysplugins) {
- $status = false;
- $message = "FAILED: files missing from libs/sysplugins: " . join(', ', array_keys($expectedSysplugins));
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'sysplugins' ] = $message;
- }
- } elseif ($errors === null) {
- echo "... OK\n";
- }
- } else {
- $status = false;
- $message = "FAILED: " . SMARTY_SYSPLUGINS_DIR . ' is not a directory';
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'sysplugins_dir_constant' ] = $message;
- }
- }
- if ($errors === null) {
- echo "Testing plugin files...\n";
- }
- // test if core plugins are available
- $source = SMARTY_PLUGINS_DIR;
- if (is_dir($source)) {
- $expectedPlugins = array(
- 'block.textformat.php' => true,
- 'function.counter.php' => true,
- 'function.cycle.php' => true,
- 'function.fetch.php' => true,
- 'function.html_checkboxes.php' => true,
- 'function.html_image.php' => true,
- 'function.html_options.php' => true,
- 'function.html_radios.php' => true,
- 'function.html_select_date.php' => true,
- 'function.html_select_time.php' => true,
- 'function.html_table.php' => true,
- 'function.mailto.php' => true,
- 'function.math.php' => true,
- 'modifier.capitalize.php' => true,
- 'modifier.date_format.php' => true,
- 'modifier.debug_print_var.php' => true,
- 'modifier.escape.php' => true,
- 'modifier.mb_wordwrap.php' => true,
- 'modifier.regex_replace.php' => true,
- 'modifier.replace.php' => true,
- 'modifier.spacify.php' => true,
- 'modifier.truncate.php' => true,
- 'modifiercompiler.cat.php' => true,
- 'modifiercompiler.count_characters.php' => true,
- 'modifiercompiler.count_paragraphs.php' => true,
- 'modifiercompiler.count_sentences.php' => true,
- 'modifiercompiler.count_words.php' => true,
- 'modifiercompiler.default.php' => true,
- 'modifiercompiler.escape.php' => true,
- 'modifiercompiler.from_charset.php' => true,
- 'modifiercompiler.indent.php' => true,
- 'modifiercompiler.lower.php' => true,
- 'modifiercompiler.noprint.php' => true,
- 'modifiercompiler.string_format.php' => true,
- 'modifiercompiler.strip.php' => true,
- 'modifiercompiler.strip_tags.php' => true,
- 'modifiercompiler.to_charset.php' => true,
- 'modifiercompiler.unescape.php' => true,
- 'modifiercompiler.upper.php' => true,
- 'modifiercompiler.wordwrap.php' => true,
- 'outputfilter.trimwhitespace.php' => true,
- 'shared.escape_special_chars.php' => true,
- 'shared.literal_compiler_param.php' => true,
- 'shared.make_timestamp.php' => true,
- 'shared.mb_str_replace.php' => true,
- 'shared.mb_unicode.php' => true,
- 'variablefilter.htmlspecialchars.php' => true,
- );
- $iterator = new DirectoryIterator($source);
- foreach ($iterator as $file) {
- if (!$file->isDot()) {
- $filename = $file->getFilename();
- if (isset($expectedPlugins[ $filename ])) {
- unset($expectedPlugins[ $filename ]);
- }
- }
- }
- if ($expectedPlugins) {
- $status = false;
- $message = "FAILED: files missing from libs/plugins: " . join(', ', array_keys($expectedPlugins));
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'plugins' ] = $message;
- }
- } elseif ($errors === null) {
- echo "... OK\n";
- }
- } else {
- $status = false;
- $message = "FAILED: " . SMARTY_PLUGINS_DIR . ' is not a directory';
- if ($errors === null) {
- echo $message . ".\n";
- } else {
- $errors[ 'plugins_dir_constant' ] = $message;
- }
- }
- if ($errors === null) {
- echo "Tests complete.\n";
- echo "\n";
- }
- return $status;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_undefined.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_undefined.php
deleted file mode 100644
index 7df0acc2d..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_undefined.php
+++ /dev/null
@@ -1,67 +0,0 @@
-class = $class;
- }
-
- /**
- * Wrapper for obsolete class Smarty_Internal_Runtime_ValidateCompiled
- *
- * @param \Smarty_Internal_Template $tpl
- * @param array $properties special template properties
- * @param bool $cache flag if called from cache file
- *
- * @return bool false
- */
- public function decodeProperties(Smarty_Internal_Template $tpl, $properties, $cache = false)
- {
- if ($cache) {
- $tpl->cached->valid = false;
- } else {
- $tpl->mustCompile = true;
- }
- return false;
- }
-
- /**
- * Call error handler for undefined method
- *
- * @param string $name unknown method-name
- * @param array $args argument array
- *
- * @return mixed
- * @throws SmartyException
- */
- public function __call($name, $args)
- {
- if (isset($this->class)) {
- throw new SmartyException("undefined extension class '{$this->class}'");
- } else {
- throw new SmartyException(get_class($args[ 0 ]) . "->{$name}() undefined method");
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_resource.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_resource.php
deleted file mode 100644
index 3c43a9f46..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_resource.php
+++ /dev/null
@@ -1,260 +0,0 @@
- 'smarty_internal_resource_file.php',
- 'string' => 'smarty_internal_resource_string.php',
- 'extends' => 'smarty_internal_resource_extends.php',
- 'stream' => 'smarty_internal_resource_stream.php',
- 'eval' => 'smarty_internal_resource_eval.php',
- 'php' => 'smarty_internal_resource_php.php'
- );
-
- /**
- * Source is bypassing compiler
- *
- * @var boolean
- */
- public $uncompiled = false;
-
- /**
- * Source must be recompiled on every occasion
- *
- * @var boolean
- */
- public $recompiled = false;
-
- /**
- * Flag if resource does implement populateCompiledFilepath() method
- *
- * @var bool
- */
- public $hasCompiledHandler = false;
-
- /**
- * Load Resource Handler
- *
- * @param Smarty $smarty smarty object
- * @param string $type name of the resource
- *
- * @throws SmartyException
- * @return Smarty_Resource Resource Handler
- */
- public static function load(Smarty $smarty, $type)
- {
- // try smarty's cache
- if (isset($smarty->_cache[ 'resource_handlers' ][ $type ])) {
- return $smarty->_cache[ 'resource_handlers' ][ $type ];
- }
- // try registered resource
- if (isset($smarty->registered_resources[ $type ])) {
- return $smarty->_cache[ 'resource_handlers' ][ $type ] = $smarty->registered_resources[ $type ];
- }
- // try sysplugins dir
- if (isset(self::$sysplugins[ $type ])) {
- $_resource_class = 'Smarty_Internal_Resource_' . smarty_ucfirst_ascii($type);
- return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class();
- }
- // try plugins dir
- $_resource_class = 'Smarty_Resource_' . smarty_ucfirst_ascii($type);
- if ($smarty->loadPlugin($_resource_class)) {
- if (class_exists($_resource_class, false)) {
- return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class();
- } else {
- $smarty->registerResource(
- $type,
- array(
- "smarty_resource_{$type}_source", "smarty_resource_{$type}_timestamp",
- "smarty_resource_{$type}_secure", "smarty_resource_{$type}_trusted"
- )
- );
- // give it another try, now that the resource is registered properly
- return self::load($smarty, $type);
- }
- }
- // try streams
- $_known_stream = stream_get_wrappers();
- if (in_array($type, $_known_stream)) {
- // is known stream
- if (is_object($smarty->security_policy)) {
- $smarty->security_policy->isTrustedStream($type);
- }
- return $smarty->_cache[ 'resource_handlers' ][ $type ] = new Smarty_Internal_Resource_Stream();
- }
- // TODO: try default_(template|config)_handler
- // give up
- throw new SmartyException("Unknown resource type '{$type}'");
- }
-
- /**
- * extract resource_type and resource_name from template_resource and config_resource
- *
- * @note "C:/foo.tpl" was forced to file resource up till Smarty 3.1.3 (including).
- *
- * @param string $resource_name template_resource or config_resource to parse
- * @param string $default_resource the default resource_type defined in $smarty
- *
- * @return array with parsed resource name and type
- */
- public static function parseResourceName($resource_name, $default_resource)
- {
- if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]/', $resource_name, $match)) {
- $type = $match[ 1 ];
- $name = substr($resource_name, strlen($match[ 0 ]));
- } else {
- // no resource given, use default
- // or single character before the colon is not a resource type, but part of the filepath
- $type = $default_resource;
- $name = $resource_name;
- }
- return array($name, $type);
- }
-
- /**
- * modify template_resource according to resource handlers specifications
- *
- * @param \Smarty_Internal_Template|\Smarty $obj Smarty instance
- * @param string $template_resource template_resource to extract resource handler and
- * name of
- *
- * @return string unique resource name
- * @throws \SmartyException
- */
- public static function getUniqueTemplateName($obj, $template_resource)
- {
- $smarty = $obj->_getSmartyObj();
- list($name, $type) = self::parseResourceName($template_resource, $smarty->default_resource_type);
- // TODO: optimize for Smarty's internal resource types
- $resource = Smarty_Resource::load($smarty, $type);
- // go relative to a given template?
- $_file_is_dotted = $name[ 0 ] === '.' && ($name[ 1 ] === '.' || $name[ 1 ] === '/');
- if ($obj->_isTplObj() && $_file_is_dotted
- && ($obj->source->type === 'file' || $obj->parent->source->type === 'extends')
- ) {
- $name = $smarty->_realpath(dirname($obj->parent->source->filepath) . DIRECTORY_SEPARATOR . $name);
- }
- return $resource->buildUniqueResourceName($smarty, $name);
- }
-
- /**
- * initialize Source Object for given resource
- * wrapper for backward compatibility to versions < 3.1.22
- * Either [$_template] or [$smarty, $template_resource] must be specified
- *
- * @param Smarty_Internal_Template $_template template object
- * @param Smarty $smarty smarty object
- * @param string $template_resource resource identifier
- *
- * @return \Smarty_Template_Source Source Object
- * @throws \SmartyException
- */
- public static function source(
- Smarty_Internal_Template $_template = null,
- Smarty $smarty = null,
- $template_resource = null
- ) {
- return Smarty_Template_Source::load($_template, $smarty, $template_resource);
- }
-
- /**
- * Load template's source into current template object
- *
- * @param Smarty_Template_Source $source source object
- *
- * @return string template source
- * @throws SmartyException if source cannot be loaded
- */
- abstract public function getContent(Smarty_Template_Source $source);
-
- /**
- * populate Source Object with meta data from Resource
- *
- * @param Smarty_Template_Source $source source object
- * @param Smarty_Internal_Template $_template template object
- */
- abstract public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null);
-
- /**
- * populate Source Object with timestamp and exists from Resource
- *
- * @param Smarty_Template_Source $source source object
- */
- public function populateTimestamp(Smarty_Template_Source $source)
- {
- // intentionally left blank
- }
-
- /**
- * modify resource_name according to resource handlers specifications
- *
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
- * @param boolean $isConfig flag for config resource
- *
- * @return string unique resource name
- */
- public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
- {
- if ($isConfig) {
- if (!isset($smarty->_joined_config_dir)) {
- $smarty->getTemplateDir(null, true);
- }
- return get_class($this) . '#' . $smarty->_joined_config_dir . '#' . $resource_name;
- } else {
- if (!isset($smarty->_joined_template_dir)) {
- $smarty->getTemplateDir();
- }
- return get_class($this) . '#' . $smarty->_joined_template_dir . '#' . $resource_name;
- }
- }
-
- /*
- * Check if resource must check time stamps when when loading complied or cached templates.
- * Resources like 'extends' which use source components my disable timestamp checks on own resource.
- *
- * @return bool
- */
- /**
- * Determine basename for compiled filename
- *
- * @param Smarty_Template_Source $source source object
- *
- * @return string resource's basename
- */
- public function getBasename(Smarty_Template_Source $source)
- {
- return basename(preg_replace('![^\w]+!', '_', $source->name));
- }
-
- /**
- * @return bool
- */
- public function checkTimestamps()
- {
- return true;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_resource_custom.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_resource_custom.php
deleted file mode 100644
index 191fa7c90..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_resource_custom.php
+++ /dev/null
@@ -1,104 +0,0 @@
-filepath = $source->type . ':' . $this->generateSafeName($source->name);
- $source->uid = sha1($source->type . ':' . $source->name);
- $mtime = $this->fetchTimestamp($source->name);
- if ($mtime !== null) {
- $source->timestamp = $mtime;
- } else {
- $this->fetch($source->name, $content, $timestamp);
- $source->timestamp = isset($timestamp) ? $timestamp : false;
- if (isset($content)) {
- $source->content = $content;
- }
- }
- $source->exists = !!$source->timestamp;
- }
-
- /**
- * Load template's source into current template object
- *
- * @param Smarty_Template_Source $source source object
- *
- * @return string template source
- * @throws SmartyException if source cannot be loaded
- */
- public function getContent(Smarty_Template_Source $source)
- {
- $this->fetch($source->name, $content, $timestamp);
- if (isset($content)) {
- return $content;
- }
- throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
- }
-
- /**
- * Determine basename for compiled filename
- *
- * @param Smarty_Template_Source $source source object
- *
- * @return string resource's basename
- */
- public function getBasename(Smarty_Template_Source $source)
- {
- return basename($this->generateSafeName($source->name));
- }
-
- /**
- * Removes special characters from $name and limits its length to 127 characters.
- *
- * @param $name
- *
- * @return string
- */
- private function generateSafeName($name): string {
- return substr(preg_replace('/[^A-Za-z0-9._]/', '', (string) $name), 0, 127);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_resource_recompiled.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_resource_recompiled.php
deleted file mode 100644
index 760c4dd33..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_resource_recompiled.php
+++ /dev/null
@@ -1,94 +0,0 @@
-compiled;
- $compiled->file_dependency = array();
- $compiled->includes = array();
- $compiled->nocache_hash = null;
- $compiled->unifunc = null;
- $level = ob_get_level();
- ob_start();
- $_smarty_tpl->loadCompiler();
- // call compiler
- try {
- eval('?>' . $_smarty_tpl->compiler->compileTemplate($_smarty_tpl));
- } catch (Exception $e) {
- unset($_smarty_tpl->compiler);
- while (ob_get_level() > $level) {
- ob_end_clean();
- }
- throw $e;
- }
- // release compiler object to free memory
- unset($_smarty_tpl->compiler);
- ob_get_clean();
- $compiled->timestamp = time();
- $compiled->exists = true;
- }
-
- /**
- * populate Compiled Object with compiled filepath
- *
- * @param Smarty_Template_Compiled $compiled compiled object
- * @param Smarty_Internal_Template $_template template object
- *
- * @return void
- */
- public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template)
- {
- $compiled->filepath = false;
- $compiled->timestamp = false;
- $compiled->exists = false;
- }
-
- /*
- * Disable timestamp checks for recompiled resource.
- *
- * @return bool
- */
- /**
- * @return bool
- */
- public function checkTimestamps()
- {
- return false;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_resource_uncompiled.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_resource_uncompiled.php
deleted file mode 100644
index a11e2c14c..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_resource_uncompiled.php
+++ /dev/null
@@ -1,49 +0,0 @@
-filepath = $_template->source->filepath;
- $compiled->timestamp = $_template->source->timestamp;
- $compiled->exists = $_template->source->exists;
- if ($_template->smarty->merge_compiled_includes || $_template->source->handler->checkTimestamps()) {
- $compiled->file_dependency[ $_template->source->uid ] =
- array($compiled->filepath, $compiled->timestamp, $_template->source->type,);
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_security.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_security.php
deleted file mode 100644
index 97cd0521d..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_security.php
+++ /dev/null
@@ -1,680 +0,0 @@
- array('method_1', 'method_2'), // allowed methods listed
- * 'class_2' => array(), // all methods of class allowed
- * )
- * If set to null none is allowed.
- *
- * @var array
- */
- public $trusted_static_methods = array();
-
- /**
- * This is an array of trusted static properties.
- * If empty access to all static classes and properties is allowed.
- * Format:
- * array (
- * 'class_1' => array('prop_1', 'prop_2'), // allowed properties listed
- * 'class_2' => array(), // all properties of class allowed
- * )
- * If set to null none is allowed.
- *
- * @var array
- */
- public $trusted_static_properties = array();
-
- /**
- * This is an array of trusted PHP functions.
- * If empty all functions are allowed.
- * To disable all PHP functions set $php_functions = null.
- *
- * @var array
- */
- public $php_functions = array('isset', 'empty', 'count', 'sizeof', 'in_array', 'is_array', 'time',);
-
- /**
- * This is an array of trusted PHP modifiers.
- * If empty all modifiers are allowed.
- * To disable all modifier set $php_modifiers = null.
- *
- * @var array
- */
- public $php_modifiers = array('escape', 'count', 'sizeof', 'nl2br',);
-
- /**
- * This is an array of allowed tags.
- * If empty no restriction by allowed_tags.
- *
- * @var array
- */
- public $allowed_tags = array();
-
- /**
- * This is an array of disabled tags.
- * If empty no restriction by disabled_tags.
- *
- * @var array
- */
- public $disabled_tags = array();
-
- /**
- * This is an array of allowed modifier plugins.
- * If empty no restriction by allowed_modifiers.
- *
- * @var array
- */
- public $allowed_modifiers = array();
-
- /**
- * This is an array of disabled modifier plugins.
- * If empty no restriction by disabled_modifiers.
- *
- * @var array
- */
- public $disabled_modifiers = array();
-
- /**
- * This is an array of disabled special $smarty variables.
- *
- * @var array
- */
- public $disabled_special_smarty_vars = array();
-
- /**
- * This is an array of trusted streams.
- * If empty all streams are allowed.
- * To disable all streams set $streams = null.
- *
- * @var array
- */
- public $streams = array('file');
-
- /**
- * + flag if constants can be accessed from template
- *
- * @var boolean
- */
- public $allow_constants = true;
-
- /**
- * + flag if super globals can be accessed from template
- *
- * @var boolean
- */
- public $allow_super_globals = true;
-
- /**
- * max template nesting level
- *
- * @var int
- */
- public $max_template_nesting = 0;
-
- /**
- * current template nesting level
- *
- * @var int
- */
- private $_current_template_nesting = 0;
-
- /**
- * Cache for $resource_dir lookup
- *
- * @var array
- */
- protected $_resource_dir = array();
-
- /**
- * Cache for $template_dir lookup
- *
- * @var array
- */
- protected $_template_dir = array();
-
- /**
- * Cache for $config_dir lookup
- *
- * @var array
- */
- protected $_config_dir = array();
-
- /**
- * Cache for $secure_dir lookup
- *
- * @var array
- */
- protected $_secure_dir = array();
-
- /**
- * Cache for $php_resource_dir lookup
- *
- * @var array
- */
- protected $_php_resource_dir = null;
-
- /**
- * Cache for $trusted_dir lookup
- *
- * @var array
- */
- protected $_trusted_dir = null;
-
- /**
- * Cache for include path status
- *
- * @var bool
- */
- protected $_include_path_status = false;
-
- /**
- * Cache for $_include_array lookup
- *
- * @var array
- */
- protected $_include_dir = array();
-
- /**
- * @param Smarty $smarty
- */
- public function __construct($smarty)
- {
- $this->smarty = $smarty;
- }
-
- /**
- * Check if PHP function is trusted.
- *
- * @param string $function_name
- * @param object $compiler compiler object
- *
- * @return boolean true if function is trusted
- */
- public function isTrustedPhpFunction($function_name, $compiler)
- {
- if (isset($this->php_functions)
- && (empty($this->php_functions) || in_array($function_name, $this->php_functions))
- ) {
- return true;
- }
- $compiler->trigger_template_error("PHP function '{$function_name}' not allowed by security setting");
- return false; // should not, but who knows what happens to the compiler in the future?
- }
-
- /**
- * Check if static class is trusted.
- *
- * @param string $class_name
- * @param object $compiler compiler object
- *
- * @return boolean true if class is trusted
- */
- public function isTrustedStaticClass($class_name, $compiler)
- {
- if (isset($this->static_classes)
- && (empty($this->static_classes) || in_array($class_name, $this->static_classes))
- ) {
- return true;
- }
- $compiler->trigger_template_error("access to static class '{$class_name}' not allowed by security setting");
- return false; // should not, but who knows what happens to the compiler in the future?
- }
-
- /**
- * Check if static class method/property is trusted.
- *
- * @param string $class_name
- * @param string $params
- * @param object $compiler compiler object
- *
- * @return boolean true if class method is trusted
- */
- public function isTrustedStaticClassAccess($class_name, $params, $compiler)
- {
- if (!isset($params[ 2 ])) {
- // fall back
- return $this->isTrustedStaticClass($class_name, $compiler);
- }
- if ($params[ 2 ] === 'method') {
- $allowed = $this->trusted_static_methods;
- $name = substr($params[ 0 ], 0, strpos($params[ 0 ], '('));
- } else {
- $allowed = $this->trusted_static_properties;
- // strip '$'
- $name = substr($params[ 0 ], 1);
- }
- if (isset($allowed)) {
- if (empty($allowed)) {
- // fall back
- return $this->isTrustedStaticClass($class_name, $compiler);
- }
- if (isset($allowed[ $class_name ])
- && (empty($allowed[ $class_name ]) || in_array($name, $allowed[ $class_name ]))
- ) {
- return true;
- }
- }
- $compiler->trigger_template_error("access to static class '{$class_name}' {$params[2]} '{$name}' not allowed by security setting");
- return false; // should not, but who knows what happens to the compiler in the future?
- }
-
- /**
- * Check if PHP modifier is trusted.
- *
- * @param string $modifier_name
- * @param object $compiler compiler object
- * @deprecated
- * @return boolean true if modifier is trusted
- */
- public function isTrustedPhpModifier($modifier_name, $compiler)
- {
- if (isset($this->php_modifiers)
- && (empty($this->php_modifiers) || in_array($modifier_name, $this->php_modifiers))
- ) {
- return true;
- }
- $compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting");
- return false; // should not, but who knows what happens to the compiler in the future?
- }
-
- /**
- * Check if tag is trusted.
- *
- * @param string $tag_name
- * @param object $compiler compiler object
- *
- * @return boolean true if tag is trusted
- */
- public function isTrustedTag($tag_name, $compiler)
- {
- // check for internal always required tags
- if (in_array(
- $tag_name,
- array(
- 'assign', 'call', 'private_filter', 'private_block_plugin', 'private_function_plugin',
- 'private_object_block_function', 'private_object_function', 'private_registered_function',
- 'private_registered_block', 'private_special_variable', 'private_print_expression',
- 'private_modifier'
- )
- )
- ) {
- return true;
- }
- // check security settings
- if (empty($this->allowed_tags)) {
- if (empty($this->disabled_tags) || !in_array($tag_name, $this->disabled_tags)) {
- return true;
- } else {
- $compiler->trigger_template_error("tag '{$tag_name}' disabled by security setting", null, true);
- }
- } elseif (in_array($tag_name, $this->allowed_tags) && !in_array($tag_name, $this->disabled_tags)) {
- return true;
- } else {
- $compiler->trigger_template_error("tag '{$tag_name}' not allowed by security setting", null, true);
- }
- return false; // should not, but who knows what happens to the compiler in the future?
- }
-
- /**
- * Check if special $smarty variable is trusted.
- *
- * @param string $var_name
- * @param object $compiler compiler object
- *
- * @return boolean true if tag is trusted
- */
- public function isTrustedSpecialSmartyVar($var_name, $compiler)
- {
- if (!in_array($var_name, $this->disabled_special_smarty_vars)) {
- return true;
- } else {
- $compiler->trigger_template_error(
- "special variable '\$smarty.{$var_name}' not allowed by security setting",
- null,
- true
- );
- }
- return false; // should not, but who knows what happens to the compiler in the future?
- }
-
- /**
- * Check if modifier plugin is trusted.
- *
- * @param string $modifier_name
- * @param object $compiler compiler object
- *
- * @return boolean true if tag is trusted
- */
- public function isTrustedModifier($modifier_name, $compiler)
- {
- // check for internal always allowed modifier
- if (in_array($modifier_name, array('default'))) {
- return true;
- }
- // check security settings
- if (empty($this->allowed_modifiers)) {
- if (empty($this->disabled_modifiers) || !in_array($modifier_name, $this->disabled_modifiers)) {
- return true;
- } else {
- $compiler->trigger_template_error(
- "modifier '{$modifier_name}' disabled by security setting",
- null,
- true
- );
- }
- } elseif (in_array($modifier_name, $this->allowed_modifiers)
- && !in_array($modifier_name, $this->disabled_modifiers)
- ) {
- return true;
- } else {
- $compiler->trigger_template_error(
- "modifier '{$modifier_name}' not allowed by security setting",
- null,
- true
- );
- }
- return false; // should not, but who knows what happens to the compiler in the future?
- }
-
- /**
- * Check if constants are enabled or trusted
- *
- * @param string $const constant name
- * @param object $compiler compiler object
- *
- * @return bool
- */
- public function isTrustedConstant($const, $compiler)
- {
- if (in_array($const, array('true', 'false', 'null'))) {
- return true;
- }
- if (!empty($this->trusted_constants)) {
- if (!in_array(strtolower($const), $this->trusted_constants)) {
- $compiler->trigger_template_error("Security: access to constant '{$const}' not permitted");
- return false;
- }
- return true;
- }
- if ($this->allow_constants) {
- return true;
- }
- $compiler->trigger_template_error("Security: access to constants not permitted");
- return false;
- }
-
- /**
- * Check if stream is trusted.
- *
- * @param string $stream_name
- *
- * @return boolean true if stream is trusted
- * @throws SmartyException if stream is not trusted
- */
- public function isTrustedStream($stream_name)
- {
- if (isset($this->streams) && (empty($this->streams) || in_array($stream_name, $this->streams))) {
- return true;
- }
- throw new SmartyException("stream '{$stream_name}' not allowed by security setting");
- }
-
- /**
- * Check if directory of file resource is trusted.
- *
- * @param string $filepath
- * @param null|bool $isConfig
- *
- * @return bool true if directory is trusted
- * @throws \SmartyException if directory is not trusted
- */
- public function isTrustedResourceDir($filepath, $isConfig = null)
- {
- if ($this->_include_path_status !== $this->smarty->use_include_path) {
- $_dir =
- $this->smarty->use_include_path ? $this->smarty->ext->_getIncludePath->getIncludePathDirs($this->smarty) : array();
- if ($this->_include_dir !== $_dir) {
- $this->_updateResourceDir($this->_include_dir, $_dir);
- $this->_include_dir = $_dir;
- }
- $this->_include_path_status = $this->smarty->use_include_path;
- }
- $_dir = $this->smarty->getTemplateDir();
- if ($this->_template_dir !== $_dir) {
- $this->_updateResourceDir($this->_template_dir, $_dir);
- $this->_template_dir = $_dir;
- }
- $_dir = $this->smarty->getConfigDir();
- if ($this->_config_dir !== $_dir) {
- $this->_updateResourceDir($this->_config_dir, $_dir);
- $this->_config_dir = $_dir;
- }
- if ($this->_secure_dir !== $this->secure_dir) {
- $this->secure_dir = (array)$this->secure_dir;
- foreach ($this->secure_dir as $k => $d) {
- $this->secure_dir[ $k ] = $this->smarty->_realpath($d . DIRECTORY_SEPARATOR, true);
- }
- $this->_updateResourceDir($this->_secure_dir, $this->secure_dir);
- $this->_secure_dir = $this->secure_dir;
- }
- $addPath = $this->_checkDir($filepath, $this->_resource_dir);
- if ($addPath !== false) {
- $this->_resource_dir = array_merge($this->_resource_dir, $addPath);
- }
- return true;
- }
-
- /**
- * Check if URI (e.g. {fetch} or {html_image}) is trusted
- * To simplify things, isTrustedUri() resolves all input to "{$PROTOCOL}://{$HOSTNAME}".
- * So "http://username:password@hello.world.example.org:8080/some-path?some=query-string"
- * is reduced to "http://hello.world.example.org" prior to applying the patters from {@link $trusted_uri}.
- *
- * @param string $uri
- *
- * @return boolean true if URI is trusted
- * @throws SmartyException if URI is not trusted
- * @uses $trusted_uri for list of patterns to match against $uri
- */
- public function isTrustedUri($uri)
- {
- $_uri = parse_url($uri);
- if (!empty($_uri[ 'scheme' ]) && !empty($_uri[ 'host' ])) {
- $_uri = $_uri[ 'scheme' ] . '://' . $_uri[ 'host' ];
- foreach ($this->trusted_uri as $pattern) {
- if (preg_match($pattern, $_uri)) {
- return true;
- }
- }
- }
- throw new SmartyException("URI '{$uri}' not allowed by security setting");
- }
-
- /**
- * Remove old directories and its sub folders, add new directories
- *
- * @param array $oldDir
- * @param array $newDir
- */
- private function _updateResourceDir($oldDir, $newDir)
- {
- foreach ($oldDir as $directory) {
- // $directory = $this->smarty->_realpath($directory, true);
- $length = strlen($directory);
- foreach ($this->_resource_dir as $dir) {
- if (substr($dir, 0, $length) === $directory) {
- unset($this->_resource_dir[ $dir ]);
- }
- }
- }
- foreach ($newDir as $directory) {
- // $directory = $this->smarty->_realpath($directory, true);
- $this->_resource_dir[ $directory ] = true;
- }
- }
-
- /**
- * Check if file is inside a valid directory
- *
- * @param string $filepath
- * @param array $dirs valid directories
- *
- * @return array|bool
- * @throws \SmartyException
- */
- private function _checkDir($filepath, $dirs)
- {
- $directory = dirname($this->smarty->_realpath($filepath, true)) . DIRECTORY_SEPARATOR;
- $_directory = array();
- if (!preg_match('#[\\\\/][.][.][\\\\/]#', $directory)) {
- while (true) {
- // test if the directory is trusted
- if (isset($dirs[ $directory ])) {
- return $_directory;
- }
- // abort if we've reached root
- if (!preg_match('#[\\\\/][^\\\\/]+[\\\\/]$#', $directory)) {
- // give up
- break;
- }
- // remember the directory to add it to _resource_dir in case we're successful
- $_directory[ $directory ] = true;
- // bubble up one level
- $directory = preg_replace('#[\\\\/][^\\\\/]+[\\\\/]$#', DIRECTORY_SEPARATOR, $directory);
- }
- }
- // give up
- throw new SmartyException(sprintf('Smarty Security: not trusted file path \'%s\' ', $filepath));
- }
-
- /**
- * Loads security class and enables security
- *
- * @param \Smarty $smarty
- * @param string|Smarty_Security $security_class if a string is used, it must be class-name
- *
- * @return \Smarty current Smarty instance for chaining
- * @throws \SmartyException when an invalid class name is provided
- */
- public static function enableSecurity(Smarty $smarty, $security_class)
- {
- if ($security_class instanceof Smarty_Security) {
- $smarty->security_policy = $security_class;
- return $smarty;
- } elseif (is_object($security_class)) {
- throw new SmartyException("Class '" . get_class($security_class) . "' must extend Smarty_Security.");
- }
- if ($security_class === null) {
- $security_class = $smarty->security_class;
- }
- if (!class_exists($security_class)) {
- throw new SmartyException("Security class '$security_class' is not defined");
- } elseif ($security_class !== 'Smarty_Security' && !is_subclass_of($security_class, 'Smarty_Security')) {
- throw new SmartyException("Class '$security_class' must extend Smarty_Security.");
- } else {
- $smarty->security_policy = new $security_class($smarty);
- }
- return $smarty;
- }
-
- /**
- * Start template processing
- *
- * @param $template
- *
- * @throws SmartyException
- */
- public function startTemplate($template)
- {
- if ($this->max_template_nesting > 0 && $this->_current_template_nesting++ >= $this->max_template_nesting) {
- throw new SmartyException("maximum template nesting level of '{$this->max_template_nesting}' exceeded when calling '{$template->template_resource}'");
- }
- }
-
- /**
- * Exit template processing
- */
- public function endTemplate()
- {
- if ($this->max_template_nesting > 0) {
- $this->_current_template_nesting--;
- }
- }
-
- /**
- * Register callback functions call at start/end of template rendering
- *
- * @param \Smarty_Internal_Template $template
- */
- public function registerCallBacks(Smarty_Internal_Template $template)
- {
- $template->startRenderCallbacks[] = array($this, 'startTemplate');
- $template->endRenderCallbacks[] = array($this, 'endTemplate');
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_cached.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_cached.php
deleted file mode 100644
index 508d27f36..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_cached.php
+++ /dev/null
@@ -1,257 +0,0 @@
-compile_id = $_template->compile_id;
- $this->cache_id = $_template->cache_id;
- $this->source = $_template->source;
- if (!class_exists('Smarty_CacheResource', false)) {
- include SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php';
- }
- $this->handler = Smarty_CacheResource::load($_template->smarty);
- }
-
- /**
- * @param Smarty_Internal_Template $_template
- *
- * @return Smarty_Template_Cached
- */
- public static function load(Smarty_Internal_Template $_template)
- {
- $_template->cached = new Smarty_Template_Cached($_template);
- $_template->cached->handler->populate($_template->cached, $_template);
- // caching enabled ?
- if (!$_template->caching || $_template->source->handler->recompiled
- ) {
- $_template->cached->valid = false;
- }
- return $_template->cached;
- }
-
- /**
- * Render cache template
- *
- * @param \Smarty_Internal_Template $_template
- * @param bool $no_output_filter
- *
- * @throws \Exception
- */
- public function render(Smarty_Internal_Template $_template, $no_output_filter = true)
- {
- if ($this->isCached($_template)) {
- if ($_template->smarty->debugging) {
- if (!isset($_template->smarty->_debug)) {
- $_template->smarty->_debug = new Smarty_Internal_Debug();
- }
- $_template->smarty->_debug->start_cache($_template);
- }
- if (!$this->processed) {
- $this->process($_template);
- }
- $this->getRenderedTemplateCode($_template);
- if ($_template->smarty->debugging) {
- $_template->smarty->_debug->end_cache($_template);
- }
- return;
- } else {
- $_template->smarty->ext->_updateCache->updateCache($this, $_template, $no_output_filter);
- }
- }
-
- /**
- * Check if cache is valid, lock cache if required
- *
- * @param \Smarty_Internal_Template $_template
- *
- * @return bool flag true if cache is valid
- */
- public function isCached(Smarty_Internal_Template $_template)
- {
- if ($this->valid !== null) {
- return $this->valid;
- }
- while (true) {
- while (true) {
- if ($this->exists === false || $_template->smarty->force_compile || $_template->smarty->force_cache) {
- $this->valid = false;
- } else {
- $this->valid = true;
- }
- if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_CURRENT
- && $_template->cache_lifetime >= 0 && time() > ($this->timestamp + $_template->cache_lifetime)
- ) {
- // lifetime expired
- $this->valid = false;
- }
- if ($this->valid && $_template->compile_check === Smarty::COMPILECHECK_ON
- && $_template->source->getTimeStamp() > $this->timestamp
- ) {
- $this->valid = false;
- }
- if ($this->valid || !$_template->smarty->cache_locking) {
- break;
- }
- if (!$this->handler->locked($_template->smarty, $this)) {
- $this->handler->acquireLock($_template->smarty, $this);
- break 2;
- }
- $this->handler->populate($this, $_template);
- }
- if ($this->valid) {
- if (!$_template->smarty->cache_locking || $this->handler->locked($_template->smarty, $this) === null) {
- // load cache file for the following checks
- if ($_template->smarty->debugging) {
- $_template->smarty->_debug->start_cache($_template);
- }
- if ($this->handler->process($_template, $this) === false) {
- $this->valid = false;
- } else {
- $this->processed = true;
- }
- if ($_template->smarty->debugging) {
- $_template->smarty->_debug->end_cache($_template);
- }
- } else {
- $this->is_locked = true;
- continue;
- }
- } else {
- return $this->valid;
- }
- if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_SAVED
- && $_template->cached->cache_lifetime >= 0
- && (time() > ($_template->cached->timestamp + $_template->cached->cache_lifetime))
- ) {
- $this->valid = false;
- }
- if ($_template->smarty->cache_locking) {
- if (!$this->valid) {
- $this->handler->acquireLock($_template->smarty, $this);
- } elseif ($this->is_locked) {
- $this->handler->releaseLock($_template->smarty, $this);
- }
- }
- return $this->valid;
- }
- return $this->valid;
- }
-
- /**
- * Process cached template
- *
- * @param Smarty_Internal_Template $_template template object
- * @param bool $update flag if called because cache update
- */
- public function process(Smarty_Internal_Template $_template, $update = false)
- {
- if ($this->handler->process($_template, $this, $update) === false) {
- $this->valid = false;
- }
- if ($this->valid) {
- $this->processed = true;
- } else {
- $this->processed = false;
- }
- }
-
- /**
- * Read cache content from handler
- *
- * @param Smarty_Internal_Template $_template template object
- *
- * @return string|false content
- */
- public function read(Smarty_Internal_Template $_template)
- {
- if (!$_template->source->handler->recompiled) {
- return $this->handler->readCachedContent($_template);
- }
- return false;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_compiled.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_compiled.php
deleted file mode 100644
index b78a3b600..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_compiled.php
+++ /dev/null
@@ -1,257 +0,0 @@
-source->handler->hasCompiledHandler) {
- $_template->source->handler->populateCompiledFilepath($compiled, $_template);
- } else {
- $compiled->populateCompiledFilepath($_template);
- }
- return $compiled;
- }
-
- /**
- * populate Compiled Object with compiled filepath
- *
- * @param Smarty_Internal_Template $_template template object
- **/
- public function populateCompiledFilepath(Smarty_Internal_Template $_template)
- {
- $source = &$_template->source;
- $smarty = &$_template->smarty;
- $this->filepath = $smarty->getCompileDir();
- if (isset($_template->compile_id)) {
- $this->filepath .= preg_replace('![^\w]+!', '_', $_template->compile_id) .
- ($smarty->use_sub_dirs ? DIRECTORY_SEPARATOR : '^');
- }
- // if use_sub_dirs, break file into directories
- if ($smarty->use_sub_dirs) {
- $this->filepath .= $source->uid[ 0 ] . $source->uid[ 1 ] . DIRECTORY_SEPARATOR . $source->uid[ 2 ] .
- $source->uid[ 3 ] . DIRECTORY_SEPARATOR . $source->uid[ 4 ] . $source->uid[ 5 ] .
- DIRECTORY_SEPARATOR;
- }
- $this->filepath .= $source->uid . '_';
- if ($source->isConfig) {
- $this->filepath .= (int)$smarty->config_read_hidden + (int)$smarty->config_booleanize * 2 +
- (int)$smarty->config_overwrite * 4;
- } else {
- $this->filepath .= (int)$smarty->merge_compiled_includes + (int)$smarty->escape_html * 2 +
- (($smarty->merge_compiled_includes && $source->type === 'extends') ?
- (int)$smarty->extends_recursion * 4 : 0);
- }
- $this->filepath .= '.' . $source->type;
- $basename = $source->handler->getBasename($source);
- if (!empty($basename)) {
- $this->filepath .= '.' . $basename;
- }
- if ($_template->caching) {
- $this->filepath .= '.cache';
- }
- $this->filepath .= '.php';
- $this->timestamp = $this->exists = is_file($this->filepath);
- if ($this->exists) {
- $this->timestamp = filemtime($this->filepath);
- }
- }
-
- /**
- * render compiled template code
- *
- * @param Smarty_Internal_Template $_template
- *
- * @return void
- * @throws Exception
- */
- public function render(Smarty_Internal_Template $_template)
- {
- // checks if template exists
- if (!$_template->source->exists) {
- $type = $_template->source->isConfig ? 'config' : 'template';
- throw new SmartyException("Unable to load {$type} '{$_template->source->type}:{$_template->source->name}'");
- }
- if ($_template->smarty->debugging) {
- if (!isset($_template->smarty->_debug)) {
- $_template->smarty->_debug = new Smarty_Internal_Debug();
- }
- $_template->smarty->_debug->start_render($_template);
- }
- if (!$this->processed) {
- $this->process($_template);
- }
- if (isset($_template->cached)) {
- $_template->cached->file_dependency =
- array_merge($_template->cached->file_dependency, $this->file_dependency);
- }
- if ($_template->source->handler->uncompiled) {
- $_template->source->handler->renderUncompiled($_template->source, $_template);
- } else {
- $this->getRenderedTemplateCode($_template);
- }
- if ($_template->caching && $this->has_nocache_code) {
- $_template->cached->hashes[ $this->nocache_hash ] = true;
- }
- if ($_template->smarty->debugging) {
- $_template->smarty->_debug->end_render($_template);
- }
- }
-
- /**
- * load compiled template or compile from source
- *
- * @param Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
- *
- * @throws Exception
- */
- public function process(Smarty_Internal_Template $_smarty_tpl)
- {
- $source = &$_smarty_tpl->source;
- $smarty = &$_smarty_tpl->smarty;
- if ($source->handler->recompiled) {
- $source->handler->process($_smarty_tpl);
- } elseif (!$source->handler->uncompiled) {
- if (!$this->exists || $smarty->force_compile
- || ($_smarty_tpl->compile_check && $source->getTimeStamp() > $this->getTimeStamp())
- ) {
- $this->compileTemplateSource($_smarty_tpl);
- $compileCheck = $_smarty_tpl->compile_check;
- $_smarty_tpl->compile_check = Smarty::COMPILECHECK_OFF;
- $this->loadCompiledTemplate($_smarty_tpl);
- $_smarty_tpl->compile_check = $compileCheck;
- } else {
- $_smarty_tpl->mustCompile = true;
- @include $this->filepath;
- if ($_smarty_tpl->mustCompile) {
- $this->compileTemplateSource($_smarty_tpl);
- $compileCheck = $_smarty_tpl->compile_check;
- $_smarty_tpl->compile_check = Smarty::COMPILECHECK_OFF;
- $this->loadCompiledTemplate($_smarty_tpl);
- $_smarty_tpl->compile_check = $compileCheck;
- }
- }
- $_smarty_tpl->_subTemplateRegister();
- $this->processed = true;
- }
- }
-
- /**
- * compile template from source
- *
- * @param Smarty_Internal_Template $_template
- *
- * @throws Exception
- */
- public function compileTemplateSource(Smarty_Internal_Template $_template)
- {
- $this->file_dependency = array();
- $this->includes = array();
- $this->nocache_hash = null;
- $this->unifunc = null;
- // compile locking
- if ($saved_timestamp = (!$_template->source->handler->recompiled && is_file($this->filepath))) {
- $saved_timestamp = $this->getTimeStamp();
- touch($this->filepath);
- }
- // compile locking
- try {
- // call compiler
- $_template->loadCompiler();
- $this->write($_template, $_template->compiler->compileTemplate($_template));
- } catch (Exception $e) {
- // restore old timestamp in case of error
- if ($saved_timestamp && is_file($this->filepath)) {
- touch($this->filepath, $saved_timestamp);
- }
- unset($_template->compiler);
- throw $e;
- }
- // release compiler object to free memory
- unset($_template->compiler);
- }
-
- /**
- * Write compiled code by handler
- *
- * @param Smarty_Internal_Template $_template template object
- * @param string $code compiled code
- *
- * @return bool success
- * @throws \SmartyException
- */
- public function write(Smarty_Internal_Template $_template, $code)
- {
- if (!$_template->source->handler->recompiled) {
- if ($_template->smarty->ext->_writeFile->writeFile($this->filepath, $code, $_template->smarty) === true) {
- $this->timestamp = $this->exists = is_file($this->filepath);
- if ($this->exists) {
- $this->timestamp = filemtime($this->filepath);
- return true;
- }
- }
- return false;
- }
- return true;
- }
-
- /**
- * Read compiled content from handler
- *
- * @param Smarty_Internal_Template $_template template object
- *
- * @return string content
- */
- public function read(Smarty_Internal_Template $_template)
- {
- if (!$_template->source->handler->recompiled) {
- return file_get_contents($this->filepath);
- }
- return isset($this->content) ? $this->content : false;
- }
-
- /**
- * Load fresh compiled template by including the PHP file
- * HHVM requires a work around because of a PHP incompatibility
- *
- * @param \Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
- */
- private function loadCompiledTemplate(Smarty_Internal_Template $_smarty_tpl)
- {
- if (function_exists('opcache_invalidate')
- && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1)
- ) {
- opcache_invalidate($this->filepath, true);
- } elseif (function_exists('apc_compile_file')) {
- apc_compile_file($this->filepath);
- }
- if (defined('HHVM_VERSION')) {
- eval('?>' . file_get_contents($this->filepath));
- } else {
- include $this->filepath;
- }
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_config.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_config.php
deleted file mode 100644
index 850ae32e7..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_config.php
+++ /dev/null
@@ -1,100 +0,0 @@
- true, 'php' => true);
- if ($_template) {
- $smarty = $_template->smarty;
- $template_resource = $_template->template_resource;
- }
- if (empty($template_resource)) {
- throw new SmartyException('Source: Missing name');
- }
- // parse resource_name, load resource handler
- list($name, $type) = Smarty_Resource::parseResourceName($template_resource, $smarty->default_config_type);
- // make sure configs are not loaded via anything smarty can't handle
- if (isset($_incompatible_resources[ $type ])) {
- throw new SmartyException("Unable to use resource '{$type}' for config");
- }
- $source = new Smarty_Template_Config($smarty, $template_resource, $type, $name);
- $source->handler->populate($source, $_template);
- if (!$source->exists && isset($smarty->default_config_handler_func)) {
- Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source);
- $source->handler->populate($source, $_template);
- }
- return $source;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php
deleted file mode 100644
index 52bfba252..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php
+++ /dev/null
@@ -1,152 +0,0 @@
-smarty;
- $_template->isRenderingCache = $this->isCache;
- $level = ob_get_level();
- try {
- if (!isset($unifunc)) {
- $unifunc = $this->unifunc;
- }
- if (empty($unifunc) || !function_exists($unifunc)) {
- throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'");
- }
- if ($_template->startRenderCallbacks) {
- foreach ($_template->startRenderCallbacks as $callback) {
- call_user_func($callback, $_template);
- }
- }
- $unifunc($_template);
- foreach ($_template->endRenderCallbacks as $callback) {
- call_user_func($callback, $_template);
- }
- $_template->isRenderingCache = false;
- } catch (Exception $e) {
- $_template->isRenderingCache = false;
- while (ob_get_level() > $level) {
- ob_end_clean();
- }
- if (isset($smarty->security_policy)) {
- $smarty->security_policy->endTemplate();
- }
- throw $e;
- }
- }
-
- /**
- * Get compiled time stamp
- *
- * @return int
- */
- public function getTimeStamp()
- {
- if ($this->exists && !$this->timestamp) {
- $this->timestamp = filemtime($this->filepath);
- }
- return $this->timestamp;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_source.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_source.php
deleted file mode 100644
index 16b47f23c..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_template_source.php
+++ /dev/null
@@ -1,213 +0,0 @@
-handler =
- isset($smarty->_cache[ 'resource_handlers' ][ $type ]) ? $smarty->_cache[ 'resource_handlers' ][ $type ] :
- Smarty_Resource::load($smarty, $type);
- $this->smarty = $smarty;
- $this->resource = $resource;
- $this->type = $type;
- $this->name = $name;
- }
-
- /**
- * initialize Source Object for given resource
- * Either [$_template] or [$smarty, $template_resource] must be specified
- *
- * @param Smarty_Internal_Template $_template template object
- * @param Smarty $smarty smarty object
- * @param string $template_resource resource identifier
- *
- * @return Smarty_Template_Source Source Object
- * @throws SmartyException
- */
- public static function load(
- Smarty_Internal_Template $_template = null,
- Smarty $smarty = null,
- $template_resource = null
- ) {
- if ($_template) {
- $smarty = $_template->smarty;
- $template_resource = $_template->template_resource;
- }
- if (empty($template_resource)) {
- throw new SmartyException('Source: Missing name');
- }
- // parse resource_name, load resource handler, identify unique resource name
- if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]([\s\S]*)$/', $template_resource, $match)) {
- $type = $match[ 1 ];
- $name = $match[ 2 ];
- } else {
- // no resource given, use default
- // or single character before the colon is not a resource type, but part of the filepath
- $type = $smarty->default_resource_type;
- $name = $template_resource;
- }
- // create new source object
- $source = new Smarty_Template_Source($smarty, $template_resource, $type, $name);
- $source->handler->populate($source, $_template);
- if (!$source->exists && isset($_template->smarty->default_template_handler_func)) {
- Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source);
- $source->handler->populate($source, $_template);
- }
- return $source;
- }
-
- /**
- * Get source time stamp
- *
- * @return int
- */
- public function getTimeStamp()
- {
- if (!isset($this->timestamp)) {
- $this->handler->populateTimestamp($this);
- }
- return $this->timestamp;
- }
-
- /**
- * Get source content
- *
- * @return string
- * @throws \SmartyException
- */
- public function getContent()
- {
- return isset($this->content) ? $this->content : $this->handler->getContent($this);
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_undefined_variable.php b/bundled-libs/smarty/smarty/libs/sysplugins/smarty_undefined_variable.php
deleted file mode 100644
index 6d31a8a05..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_undefined_variable.php
+++ /dev/null
@@ -1,33 +0,0 @@
-value = $value;
- $this->nocache = $nocache;
- }
-
- /**
- * <> String conversion
- *
- * @return string
- */
- public function __toString()
- {
- return (string)$this->value;
- }
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smartycompilerexception.php b/bundled-libs/smarty/smarty/libs/sysplugins/smartycompilerexception.php
deleted file mode 100644
index 0a0a32351..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smartycompilerexception.php
+++ /dev/null
@@ -1,73 +0,0 @@
-file = $filename;
- }
- if ($line) {
- $this->line = $line;
- }
- }
-
- /**
- * @return string
- */
- public function __toString()
- {
- return ' --> Smarty Compiler: ' . $this->message . ' <-- ';
- }
-
- /**
- * @param int $line
- */
- public function setLine($line)
- {
- $this->line = $line;
- }
-
- /**
- * The template source snippet relating to the error
- *
- * @type string|null
- */
- public $source = null;
-
- /**
- * The raw text of the error message
- *
- * @type string|null
- */
- public $desc = null;
-
- /**
- * The resource identifier or template name
- *
- * @type string|null
- */
- public $template = null;
-}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smartyexception.php b/bundled-libs/smarty/smarty/libs/sysplugins/smartyexception.php
deleted file mode 100644
index 7f7b9aa43..000000000
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smartyexception.php
+++ /dev/null
@@ -1,19 +0,0 @@
- Smarty: ' . (self::$escape ? htmlentities($this->message) : $this->message) . ' <-- ';
- }
-}
diff --git a/bundled-libs/smarty/smarty/mkdocs.yml b/bundled-libs/smarty/smarty/mkdocs.yml
index 7762cd75e..4fffe7d96 100644
--- a/bundled-libs/smarty/smarty/mkdocs.yml
+++ b/bundled-libs/smarty/smarty/mkdocs.yml
@@ -11,7 +11,7 @@ theme:
- navigation.tracking
icon:
logo: material/lightbulb-on
- favicon: images/favicon.ico
+ favicon: img/favicon.ico
extra:
version:
@@ -26,16 +26,18 @@ markdown_extensions:
nav:
- Home: 'index.md'
- - 'Getting started': 'getting-started.md'
- - 'Designers':
+ - 'Getting started':
+ - Introduction: 'getting-started.md'
+ - 'Upgrading from an older version': 'upgrading.md'
+ - 'Language reference':
- 'Basic Syntax':
- Introduction: 'designers/language-basic-syntax/index.md'
- Comments: 'designers/language-basic-syntax/language-syntax-comments.md'
- Variables: 'designers/language-basic-syntax/language-syntax-variables.md'
- - Functions: 'designers/language-basic-syntax/language-syntax-functions.md'
+ - Operators: 'designers/language-basic-syntax/language-syntax-operators.md'
+ - Tags: 'designers/language-basic-syntax/language-syntax-tags.md'
- Attributes: 'designers/language-basic-syntax/language-syntax-attributes.md'
- Quotes: 'designers/language-basic-syntax/language-syntax-quotes.md'
- - Math: 'designers/language-basic-syntax/language-math.md'
- 'Escaping Smarty parsing': 'designers/language-basic-syntax/language-escaping.md'
- 'Variables':
- 'Introduction': 'designers/language-variables/index.md'
@@ -47,30 +49,43 @@ nav:
- 'Introduction': 'designers/language-modifiers/index.md'
- 'capitalize': 'designers/language-modifiers/language-modifier-capitalize.md'
- 'cat': 'designers/language-modifiers/language-modifier-cat.md'
+ - 'count': 'designers/language-modifiers/language-modifier-count.md'
- 'count_characters': 'designers/language-modifiers/language-modifier-count-characters.md'
- 'count_paragraphs': 'designers/language-modifiers/language-modifier-count-paragraphs.md'
- 'count_sentences': 'designers/language-modifiers/language-modifier-count-sentences.md'
- 'count_words': 'designers/language-modifiers/language-modifier-count-words.md'
- 'date_format': 'designers/language-modifiers/language-modifier-date-format.md'
+ - 'debug_print_var': 'designers/language-modifiers/language-modifier-debug-print-var.md'
- 'default': 'designers/language-modifiers/language-modifier-default.md'
- 'escape': 'designers/language-modifiers/language-modifier-escape.md'
- 'from_charset': 'designers/language-modifiers/language-modifier-from-charset.md'
- 'indent': 'designers/language-modifiers/language-modifier-indent.md'
+ - 'is_array': 'designers/language-modifiers/language-modifier-is_array.md'
+ - 'isset': 'designers/language-modifiers/language-modifier-isset.md'
+ - 'join': 'designers/language-modifiers/language-modifier-join.md'
+ - 'json_encode': 'designers/language-modifiers/language-modifier-json-encode.md'
- 'lower': 'designers/language-modifiers/language-modifier-lower.md'
+ - 'noprint': 'designers/language-modifiers/language-modifier-noprint.md'
+ - 'number_format': 'designers/language-modifiers/language-modifier-number-format.md'
- 'nl2br': 'designers/language-modifiers/language-modifier-nl2br.md'
+ - 'raw': 'designers/language-modifiers/language-modifier-raw.md'
- 'regex_replace': 'designers/language-modifiers/language-modifier-regex-replace.md'
- 'replace': 'designers/language-modifiers/language-modifier-replace.md'
+ - 'round': 'designers/language-modifiers/language-modifier-round.md'
- 'spacify': 'designers/language-modifiers/language-modifier-spacify.md'
+ - 'split': 'designers/language-modifiers/language-modifier-split.md'
+ - 'str_repeat': 'designers/language-modifiers/language-modifier-str-repeat.md'
- 'string_format': 'designers/language-modifiers/language-modifier-string-format.md'
- 'strip': 'designers/language-modifiers/language-modifier-strip.md'
- 'strip_tags': 'designers/language-modifiers/language-modifier-strip-tags.md'
+ - 'strlen': 'designers/language-modifiers/language-modifier-strlen.md'
+ - 'substr': 'designers/language-modifiers/language-modifier-substr.md'
- 'to_charset': 'designers/language-modifiers/language-modifier-to-charset.md'
- 'truncate': 'designers/language-modifiers/language-modifier-truncate.md'
- 'unescape': 'designers/language-modifiers/language-modifier-unescape.md'
- 'upper': 'designers/language-modifiers/language-modifier-upper.md'
- 'wordwrap': 'designers/language-modifiers/language-modifier-wordwrap.md'
- - 'designers/language-combining-modifiers.md'
- - 'Builtin Functions':
+ - 'Builtin Tags':
- 'Introduction': 'designers/language-builtin-functions/index.md'
- '{append}': 'designers/language-builtin-functions/language-function-append.md'
- '{assign}': 'designers/language-builtin-functions/language-function-assign.md'
@@ -93,7 +108,7 @@ nav:
- '{setfilter}': 'designers/language-builtin-functions/language-function-setfilter.md'
- '{strip}': 'designers/language-builtin-functions/language-function-strip.md'
- '{while}': 'designers/language-builtin-functions/language-function-while.md'
- - 'Custom Functions':
+ - 'Custom Tags':
- 'Introduction': 'designers/language-custom-functions/index.md'
- '{counter}': 'designers/language-custom-functions/language-function-counter.md'
- '{cycle}': 'designers/language-custom-functions/language-function-cycle.md'
@@ -112,12 +127,31 @@ nav:
- '{textformat}': 'designers/language-custom-functions/language-function-textformat.md'
- 'designers/config-files.md'
- 'designers/chapter-debugging-console.md'
- - 'Programmers':
- - 'programmers/charset.md'
- - 'programmers/smarty-constants.md'
- - 'programmers/api-variables.md'
- - 'programmers/api-functions.md'
- - 'programmers/caching.md'
- - 'programmers/resources.md'
- - 'programmers/advanced-features.md'
- - 'programmers/plugins.md'
\ No newline at end of file
+ - 'API':
+ - 'Basics': 'api/basics.md'
+ - 'Configuring Smarty': 'api/configuring.md'
+ - 'Rendering a template': 'api/rendering.md'
+ - 'Using data in templates':
+ - 'Assigning variables': 'api/variables/assigning.md'
+ - 'Config files': 'api/variables/config-files.md'
+ - 'Using streams': 'api/variables/streams.md'
+ - 'Objects': 'api/variables/objects.md'
+ - 'Static class methods': 'api/variables/static-class-methods.md'
+ - 'Template inheritance': 'api/inheritance.md'
+ - 'Filters':
+ - 'Output filters': 'api/filters/output-filters.md'
+ - 'Prefilters': 'api/filters/prefilters.md'
+ - 'Postfilters': 'api/filters/postfilters.md'
+ - 'Template resources': 'api/resources.md'
+ - 'Caching':
+ - 'Basics': 'api/caching/basics.md'
+ - 'Multiple caches per template': 'api/caching/multiple-caches-per-template.md'
+ - 'Custom cache storage layers': 'api/caching/custom-storage-layers.md'
+ - 'Extending Smarty':
+ - 'Introduction': 'api/extending/introduction.md'
+ - 'Custom tags': 'api/extending/tags.md'
+ - 'Custom block tags': 'api/extending/block-tags.md'
+ - 'Custom modifiers': 'api/extending/modifiers.md'
+ - 'Creating an extension': 'api/extending/extensions.md'
+ - 'Security': 'api/security.md'
+
diff --git a/bundled-libs/smarty/smarty/run-tests-for-all-php-versions.sh b/bundled-libs/smarty/smarty/run-tests-for-all-php-versions.sh
index 79bebb8a6..efff5713d 100755
--- a/bundled-libs/smarty/smarty/run-tests-for-all-php-versions.sh
+++ b/bundled-libs/smarty/smarty/run-tests-for-all-php-versions.sh
@@ -5,11 +5,13 @@
# - ./run-tests-for-all-php-versions.sh --group 20221124
# - ./run-tests-for-all-php-versions.sh --exclude-group slow
-docker-compose run php71 ./run-tests.sh $@ && \
-docker-compose run php72 ./run-tests.sh $@ && \
-docker-compose run php73 ./run-tests.sh $@ && \
-docker-compose run php74 ./run-tests.sh $@ && \
-docker-compose run php80 ./run-tests.sh $@ && \
-docker-compose run php81 ./run-tests.sh $@ && \
-docker-compose run php82 ./run-tests.sh $@ && \
-docker-compose run php83 ./run-tests.sh $@
+COMPOSE_CMD="mutagen-compose"
+
+$COMPOSE_CMD run --rm php72 ./run-tests.sh $@ && \
+$COMPOSE_CMD run --rm php73 ./run-tests.sh $@ && \
+$COMPOSE_CMD run --rm php74 ./run-tests.sh $@ && \
+$COMPOSE_CMD run --rm php80 ./run-tests.sh $@ && \
+$COMPOSE_CMD run --rm php81 ./run-tests.sh $@ && \
+$COMPOSE_CMD run --rm php82 ./run-tests.sh $@
+$COMPOSE_CMD run --rm php83 ./run-tests.sh $@
+$COMPOSE_CMD run --rm php84 ./run-tests.sh $@
diff --git a/bundled-libs/smarty/smarty/src/BlockHandler/Base.php b/bundled-libs/smarty/smarty/src/BlockHandler/Base.php
new file mode 100644
index 000000000..e194f67b6
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/BlockHandler/Base.php
@@ -0,0 +1,19 @@
+cacheable;
+ }
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/BlockHandler/BlockHandlerInterface.php b/bundled-libs/smarty/smarty/src/BlockHandler/BlockHandlerInterface.php
new file mode 100644
index 000000000..9aa744ec7
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/BlockHandler/BlockHandlerInterface.php
@@ -0,0 +1,10 @@
+callback = $callback;
+ $this->cacheable = $cacheable;
+ }
+
+ public function handle($params, $content, Template $template, &$repeat) {
+ return \call_user_func_array($this->callback, [$params, $content, &$template, &$repeat]);
+ }
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/BlockHandler/TextFormat.php b/bundled-libs/smarty/smarty/src/BlockHandler/TextFormat.php
new file mode 100644
index 000000000..b4fa5acd4
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/BlockHandler/TextFormat.php
@@ -0,0 +1,110 @@
+
+ * @throws \Smarty\Exception
+ */
+class TextFormat implements BlockHandlerInterface {
+
+ public function handle($params, $content, Template $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
+ $_paragraph = smarty_mb_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;
+ }
+ }
+
+ public function isCacheable(): bool {
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/Cacheresource/Base.php b/bundled-libs/smarty/smarty/src/Cacheresource/Base.php
new file mode 100644
index 000000000..41c4f6bc6
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Cacheresource/Base.php
@@ -0,0 +1,156 @@
+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 Cached $cached
+ *
+ * @return bool
+ */
+ public function hasLock(Smarty $smarty, Cached $cached)
+ {
+ // check if lock exists
+ return false;
+ }
+
+ /**
+ * Lock cache for this template
+ *
+ * @param Smarty $smarty
+ * @param Cached $cached
+ *
+ * @return bool
+ */
+ public function acquireLock(Smarty $smarty, Cached $cached)
+ {
+ // create lock
+ return true;
+ }
+
+ /**
+ * Unlock cache for this template
+ *
+ * @param Smarty $smarty
+ * @param Cached $cached
+ *
+ * @return bool
+ */
+ public function releaseLock(Smarty $smarty, Cached $cached)
+ {
+ // release lock
+ return true;
+ }
+}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_cacheresource_custom.php b/bundled-libs/smarty/smarty/src/Cacheresource/Custom.php
similarity index 64%
rename from bundled-libs/smarty/smarty/libs/sysplugins/smarty_cacheresource_custom.php
rename to bundled-libs/smarty/smarty/src/Cacheresource/Custom.php
index 68ad11289..f9eb858e4 100644
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_cacheresource_custom.php
+++ b/bundled-libs/smarty/smarty/src/Cacheresource/Custom.php
@@ -1,19 +1,26 @@
cache_id) ? preg_replace('![^\w\|]+!', '_', $cached->cache_id) : null;
$_compile_id = isset($cached->compile_id) ? preg_replace('![^\w]+!', '_', $cached->compile_id) : null;
- $path = $cached->source->uid . $_cache_id . $_compile_id;
+ $path = $cached->getSource()->uid . $_cache_id . $_compile_id;
$cached->filepath = sha1($path);
- if ($_template->smarty->cache_locking) {
+ if ($_template->getSmarty()->cache_locking) {
$cached->lock_id = sha1('lock.' . $path);
}
$this->populateTimestamp($cached);
@@ -95,14 +102,14 @@ public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Templat
/**
* populate Cached Object with timestamp and exists from Resource
*
- * @param Smarty_Template_Cached $cached
+ * @param \Smarty\Template\Cached $cached
*
* @return void
*/
- public function populateTimestamp(Smarty_Template_Cached $cached)
+ public function populateTimestamp(\Smarty\Template\Cached $cached)
{
$mtime =
- $this->fetchTimestamp($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id);
+ $this->fetchTimestamp($cached->filepath, $cached->getSource()->name, $cached->cache_id, $cached->compile_id);
if ($mtime !== null) {
$cached->timestamp = $mtime;
$cached->exists = !!$cached->timestamp;
@@ -111,7 +118,7 @@ public function populateTimestamp(Smarty_Template_Cached $cached)
$timestamp = null;
$this->fetch(
$cached->filepath,
- $cached->source->name,
+ $cached->getSource()->name,
$cached->cache_id,
$cached->compile_id,
$cached->content,
@@ -121,29 +128,29 @@ public function populateTimestamp(Smarty_Template_Cached $cached)
$cached->exists = !!$cached->timestamp;
}
- /**
- * Read the cached template and process the header
- *
- * @param \Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
- * @param Smarty_Template_Cached $cached cached object
- * @param boolean $update flag if called because cache update
- *
- * @return boolean true or false if the cached content does not exist
- */
+ /**
+ * Read the cached template and process the header
+ *
+ * @param Template $_smarty_tpl do not change variable name, is used by compiled template
+ * @param Cached|null $cached cached object
+ * @param boolean $update flag if called because cache update
+ *
+ * @return boolean true or false if the cached content does not exist
+ */
public function process(
- Smarty_Internal_Template $_smarty_tpl,
- Smarty_Template_Cached $cached = null,
- $update = false
+ Template $_smarty_tpl,
+ ?\Smarty\Template\Cached $cached = null,
+ $update = false
) {
if (!$cached) {
- $cached = $_smarty_tpl->cached;
+ $cached = $_smarty_tpl->getCached();
}
$content = $cached->content ? $cached->content : null;
$timestamp = $cached->timestamp ? $cached->timestamp : null;
if ($content === null || !$timestamp) {
$this->fetch(
- $_smarty_tpl->cached->filepath,
- $_smarty_tpl->source->name,
+ $_smarty_tpl->getCached()->filepath,
+ $_smarty_tpl->getSource()->name,
$_smarty_tpl->cache_id,
$_smarty_tpl->compile_id,
$content,
@@ -161,16 +168,16 @@ public function process(
/**
* Write the rendered template output to cache
*
- * @param Smarty_Internal_Template $_template template object
+ * @param Template $_template template object
* @param string $content content to cache
*
* @return boolean success
*/
- public function writeCachedContent(Smarty_Internal_Template $_template, $content)
+ public function storeCachedContent(Template $_template, $content)
{
return $this->save(
- $_template->cached->filepath,
- $_template->source->name,
+ $_template->getCached()->filepath,
+ $_template->getSource()->name,
$_template->cache_id,
$_template->compile_id,
$_template->cache_lifetime,
@@ -181,19 +188,18 @@ public function writeCachedContent(Smarty_Internal_Template $_template, $content
/**
* Read cached template from cache
*
- * @param Smarty_Internal_Template $_template template object
+ * @param Template $_template template object
*
* @return string|boolean content
*/
- public function readCachedContent(Smarty_Internal_Template $_template)
+ public function retrieveCachedContent(Template $_template)
{
- $content = $_template->cached->content ? $_template->cached->content : null;
- $timestamp = null;
- if ($content === null) {
+ $content = $_template->getCached()->content ?: null;
+ if ($content === null) {
$timestamp = null;
$this->fetch(
- $_template->cached->filepath,
- $_template->source->name,
+ $_template->getCached()->filepath,
+ $_template->getSource()->name,
$_template->cache_id,
$_template->compile_id,
$content,
@@ -206,15 +212,15 @@ public function readCachedContent(Smarty_Internal_Template $_template)
return false;
}
- /**
- * Empty cache
- *
- * @param Smarty $smarty Smarty object
- * @param integer $exp_time expiration time (number of seconds, not timestamp)
- *
- * @return integer number of cache files deleted
- */
- public function clearAll(Smarty $smarty, $exp_time = null)
+ /**
+ * Empty cache
+ *
+ * @param \Smarty\Smarty $smarty Smarty object
+ * @param null $exp_time expiration time (number of seconds, not timestamp)
+ *
+ * @return integer number of cache files deleted
+ */
+ public function clearAll(\Smarty\Smarty $smarty, $exp_time = null)
{
return $this->delete(null, null, null, $exp_time);
}
@@ -222,20 +228,20 @@ public function clearAll(Smarty $smarty, $exp_time = null)
/**
* Empty cache for a specific template
*
- * @param Smarty $smarty Smarty object
+ * @param \Smarty\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 int number of cache files deleted
- * @throws \SmartyException
+ * @throws \Smarty\Exception
*/
- public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
+ public function clear(\Smarty\Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
{
$cache_name = null;
if (isset($resource_name)) {
- $source = Smarty_Template_Source::load(null, $smarty, $resource_name);
+ $source = \Smarty\Template\Source::load(null, $smarty, $resource_name);
if ($source->exists) {
$cache_name = $source->name;
} else {
@@ -245,18 +251,18 @@ public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $e
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)
+ /**
+ * Check is cache is locked for this template
+ *
+ * @param Smarty $smarty Smarty object
+ * @param Cached $cached cached object
+ *
+ * @return boolean true or false if cache is locked
+ */
+ public function hasLock(\Smarty\Smarty $smarty, \Smarty\Template\Cached $cached)
{
$id = $cached->lock_id;
- $name = $cached->source->name . '.lock';
+ $name = $cached->getSource()->name . '.lock';
$mtime = $this->fetchTimestamp($id, $name, $cached->cache_id, $cached->compile_id);
if ($mtime === null) {
$this->fetch($id, $name, $cached->cache_id, $cached->compile_id, $content, $mtime);
@@ -267,31 +273,31 @@ public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
/**
* Lock cache for this template
*
- * @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
+ * @param \Smarty\Smarty $smarty Smarty object
+ * @param \Smarty\Template\Cached $cached cached object
*
* @return bool|void
*/
- public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
+ public function acquireLock(\Smarty\Smarty $smarty, \Smarty\Template\Cached $cached)
{
$cached->is_locked = true;
$id = $cached->lock_id;
- $name = $cached->source->name . '.lock';
+ $name = $cached->getSource()->name . '.lock';
$this->save($id, $name, $cached->cache_id, $cached->compile_id, $smarty->locking_timeout, '');
}
/**
* Unlock cache for this template
*
- * @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
+ * @param \Smarty\Smarty $smarty Smarty object
+ * @param \Smarty\Template\Cached $cached cached object
*
* @return bool|void
*/
- public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
+ public function releaseLock(\Smarty\Smarty $smarty, \Smarty\Template\Cached $cached)
{
$cached->is_locked = false;
- $name = $cached->source->name . '.lock';
+ $name = $cached->getSource()->name . '.lock';
$this->delete($name, $cached->cache_id, $cached->compile_id, null);
}
}
diff --git a/bundled-libs/smarty/smarty/src/Cacheresource/File.php b/bundled-libs/smarty/smarty/src/Cacheresource/File.php
new file mode 100644
index 000000000..4b4198ec2
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Cacheresource/File.php
@@ -0,0 +1,338 @@
+getSource();
+ $smarty = $_template->getSmarty();
+ $_compile_dir_sep = $smarty->use_sub_dirs ? DIRECTORY_SEPARATOR : '^';
+ $_filepath = $source->uid;
+ $cached->filepath = $smarty->getCacheDir();
+ if (isset($_template->cache_id)) {
+ $cached->filepath .= preg_replace(
+ array(
+ '![^\w|]+!',
+ '![|]+!'
+ ),
+ array(
+ '_',
+ $_compile_dir_sep
+ ),
+ $_template->cache_id
+ ) . $_compile_dir_sep;
+ }
+ if (isset($_template->compile_id)) {
+ $cached->filepath .= preg_replace('![^\w]+!', '_', $_template->compile_id) . $_compile_dir_sep;
+ }
+ // if use_sub_dirs, break file into directories
+ if ($smarty->use_sub_dirs) {
+ $cached->filepath .= $_filepath[ 0 ] . $_filepath[ 1 ] . DIRECTORY_SEPARATOR . $_filepath[ 2 ] .
+ $_filepath[ 3 ] .
+ DIRECTORY_SEPARATOR .
+ $_filepath[ 4 ] . $_filepath[ 5 ] . DIRECTORY_SEPARATOR;
+ }
+ $cached->filepath .= $_filepath . '_' . $source->getBasename();
+
+ if ($smarty->cache_locking) {
+ $cached->lock_id = $cached->filepath . '.lock';
+ }
+ $cached->filepath .= '.php';
+ $cached->timestamp = $cached->exists = is_file($cached->filepath);
+ if ($cached->exists) {
+ $cached->timestamp = filemtime($cached->filepath);
+ }
+ }
+
+ /**
+ * populate Cached Object with timestamp and exists from Resource
+ *
+ * @param Cached $cached cached object
+ *
+ * @return void
+ */
+ public function populateTimestamp(Cached $cached)
+ {
+ $cached->timestamp = $cached->exists = is_file($cached->filepath);
+ if ($cached->exists) {
+ $cached->timestamp = filemtime($cached->filepath);
+ }
+ }
+
+ /**
+ * Read the cached template and process its header
+ *
+ * @param Template $_smarty_tpl do not change variable name, is used by compiled template
+ * @param Cached|null $cached cached object
+ * @param bool $update flag if called because cache update
+ *
+ * @return boolean true or false if the cached content does not exist
+ */
+ public function process(
+ Template $_smarty_tpl,
+ ?Cached $cached = null,
+ $update = false
+ ) {
+ $_smarty_tpl->getCached()->setValid(false);
+ if ($update && defined('HHVM_VERSION')) {
+ eval('?>' . file_get_contents($_smarty_tpl->getCached()->filepath));
+ return true;
+ } else {
+ return @include $_smarty_tpl->getCached()->filepath;
+ }
+ }
+
+ /**
+ * Write the rendered template output to cache
+ *
+ * @param Template $_template template object
+ * @param string $content content to cache
+ *
+ * @return bool success
+ * @throws \Smarty\Exception
+ */
+ public function storeCachedContent(Template $_template, $content)
+ {
+ if ($_template->getSmarty()->writeFile($_template->getCached()->filepath, $content) === true) {
+ if (function_exists('opcache_invalidate')
+ && (!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api'))) < 1
+ ) {
+ opcache_invalidate($_template->getCached()->filepath, true);
+ } elseif (function_exists('apc_compile_file')) {
+ apc_compile_file($_template->getCached()->filepath);
+ }
+ $cached = $_template->getCached();
+ $cached->timestamp = $cached->exists = is_file($cached->filepath);
+ if ($cached->exists) {
+ $cached->timestamp = filemtime($cached->filepath);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Read cached template from cache
+ *
+ * @param Template $_template template object
+ *
+ * @return string content
+ */
+ public function retrieveCachedContent(Template $_template)
+ {
+ if (is_file($_template->getCached()->filepath)) {
+ return file_get_contents($_template->getCached()->filepath);
+ }
+ return false;
+ }
+
+ /**
+ * Empty cache
+ *
+ * @param Smarty $smarty
+ * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
+ * @return integer number of cache files deleted
+ */
+ public function clearAll(Smarty $smarty, $exp_time = null)
+ {
+ return $this->clear($smarty, null, null, null, $exp_time);
+ }
+
+ /**
+ * Empty cache for a specific template
+ *
+ * @param Smarty $smarty
+ * @param string $resource_name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time (number of seconds, not timestamp)
+ *
+ * @return integer number of cache files deleted
+ */
+ public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
+ {
+ $_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null;
+ $_compile_id = isset($compile_id) ? preg_replace('![^\w]+!', '_', $compile_id) : null;
+ $_dir_sep = $smarty->use_sub_dirs ? '/' : '^';
+ $_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0;
+ $_dir = $smarty->getCacheDir();
+ if ($_dir === '/') { //We should never want to delete this!
+ return 0;
+ }
+ $_dir_length = strlen($_dir);
+ if (isset($_cache_id)) {
+ $_cache_id_parts = explode('|', $_cache_id);
+ $_cache_id_parts_count = count($_cache_id_parts);
+ if ($smarty->use_sub_dirs) {
+ foreach ($_cache_id_parts as $id_part) {
+ $_dir .= $id_part . '/';
+ }
+ }
+ }
+ if (isset($resource_name)) {
+ $_save_stat = $smarty->caching;
+ $smarty->caching = \Smarty\Smarty::CACHING_LIFETIME_CURRENT;
+ $tpl = $smarty->doCreateTemplate($resource_name);
+ $smarty->caching = $_save_stat;
+ // remove from template cache
+ if ($tpl->getSource()->exists) {
+ $_resourcename_parts = basename(str_replace('^', '/', $tpl->getCached()->filepath));
+ } else {
+ return 0;
+ }
+ }
+ $_count = 0;
+ $_time = time();
+ if (file_exists($_dir)) {
+ $_cacheDirs = new RecursiveDirectoryIterator($_dir);
+ $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST);
+ foreach ($_cache as $_file) {
+ if (substr(basename($_file->getPathname()), 0, 1) === '.') {
+ continue;
+ }
+ $_filepath = (string)$_file;
+ // directory ?
+ if ($_file->isDir()) {
+ if (!$_cache->isDot()) {
+ // delete folder if empty
+ @rmdir($_file->getPathname());
+ }
+ } else {
+ // delete only php files
+ if (substr($_filepath, -4) !== '.php') {
+ continue;
+ }
+ $_parts = explode($_dir_sep, str_replace('\\', '/', substr($_filepath, $_dir_length)));
+ $_parts_count = count($_parts);
+ // check name
+ if (isset($resource_name)) {
+ if ($_parts[ $_parts_count - 1 ] !== $_resourcename_parts) {
+ continue;
+ }
+ }
+ // check compile id
+ if (isset($_compile_id) && (!isset($_parts[ $_parts_count - 2 - $_compile_id_offset ])
+ || $_parts[ $_parts_count - 2 - $_compile_id_offset ] !== $_compile_id)
+ ) {
+ continue;
+ }
+ // check cache id
+ if (isset($_cache_id)) {
+ // count of cache id parts
+ $_parts_count = (isset($_compile_id)) ? $_parts_count - 2 - $_compile_id_offset :
+ $_parts_count - 1 - $_compile_id_offset;
+ if ($_parts_count < $_cache_id_parts_count) {
+ continue;
+ }
+ for ($i = 0; $i < $_cache_id_parts_count; $i++) {
+ if ($_parts[ $i ] !== $_cache_id_parts[ $i ]) {
+ continue 2;
+ }
+ }
+ }
+ if (is_file($_filepath)) {
+ // expired ?
+ if (isset($exp_time)) {
+ if ($exp_time < 0) {
+ preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_filepath), $match);
+ if ($_time < (filemtime($_filepath) + $match[ 1 ])) {
+ continue;
+ }
+ } else {
+ if ($_time - filemtime($_filepath) < $exp_time) {
+ continue;
+ }
+ }
+ }
+ $_count += @unlink($_filepath) ? 1 : 0;
+ if (function_exists('opcache_invalidate')
+ && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1)
+ ) {
+ opcache_invalidate($_filepath, true);
+ } elseif (function_exists('apc_delete_file')) {
+ apc_delete_file($_filepath);
+ }
+ }
+ }
+ }
+ }
+ return $_count;
+ }
+
+ /**
+ * Check is cache is locked for this template
+ *
+ * @param Smarty $smarty Smarty object
+ * @param Cached $cached cached object
+ *
+ * @return boolean true or false if cache is locked
+ */
+ public function hasLock(Smarty $smarty, Cached $cached)
+ {
+ clearstatcache(true, $cached->lock_id ?? '');
+ if (null !== $cached->lock_id && is_file($cached->lock_id)) {
+ $t = filemtime($cached->lock_id);
+ return $t && (time() - $t < $smarty->locking_timeout);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Lock cache for this template
+ *
+ * @param Smarty $smarty Smarty object
+ * @param Cached $cached cached object
+ *
+ * @return void
+ */
+ public function acquireLock(Smarty $smarty, Cached $cached)
+ {
+ $cached->is_locked = true;
+ touch($cached->lock_id);
+ }
+
+ /**
+ * Unlock cache for this template
+ *
+ * @param Smarty $smarty Smarty object
+ * @param Cached $cached cached object
+ *
+ * @return void
+ */
+ public function releaseLock(Smarty $smarty, Cached $cached)
+ {
+ $cached->is_locked = false;
+ @unlink($cached->lock_id);
+ }
+}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php b/bundled-libs/smarty/smarty/src/Cacheresource/KeyValueStore.php
similarity index 83%
rename from bundled-libs/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
rename to bundled-libs/smarty/smarty/src/Cacheresource/KeyValueStore.php
index 4b1c0f6d8..1953bb20f 100644
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
+++ b/bundled-libs/smarty/smarty/src/Cacheresource/KeyValueStore.php
@@ -1,9 +1,16 @@
filepath = $_template->source->uid . '#' . $this->sanitize($cached->source->resource) . '#' .
+ $cached->filepath = $_template->getSource()->uid . '#' . $this->sanitize($cached->getSource()->resource) . '#' .
$this->sanitize($cached->cache_id) . '#' . $this->sanitize($cached->compile_id);
$this->populateTimestamp($cached);
}
@@ -62,20 +69,20 @@ public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Templat
/**
* populate Cached Object with timestamp and exists from Resource
*
- * @param Smarty_Template_Cached $cached cached object
+ * @param Cached $cached cached object
*
* @return void
*/
- public function populateTimestamp(Smarty_Template_Cached $cached)
+ public function populateTimestamp(Cached $cached)
{
if (!$this->fetch(
$cached->filepath,
- $cached->source->name,
+ $cached->getSource()->name,
$cached->cache_id,
$cached->compile_id,
$content,
$timestamp,
- $cached->source->uid
+ $cached->getSource()->uid
)
) {
return;
@@ -85,34 +92,34 @@ public function populateTimestamp(Smarty_Template_Cached $cached)
$cached->exists = !!$cached->timestamp;
}
- /**
- * Read the cached template and process the header
- *
- * @param \Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template
- * @param Smarty_Template_Cached $cached cached object
- * @param boolean $update flag if called because cache update
- *
- * @return boolean true or false if the cached content does not exist
- */
+ /**
+ * Read the cached template and process the header
+ *
+ * @param Template $_smarty_tpl do not change variable name, is used by compiled template
+ * @param Cached|null $cached cached object
+ * @param boolean $update flag if called because cache update
+ *
+ * @return boolean true or false if the cached content does not exist
+ */
public function process(
- Smarty_Internal_Template $_smarty_tpl,
- Smarty_Template_Cached $cached = null,
- $update = false
+ Template $_smarty_tpl,
+ ?Cached $cached = null,
+ $update = false
) {
if (!$cached) {
- $cached = $_smarty_tpl->cached;
+ $cached = $_smarty_tpl->getCached();
}
- $content = $cached->content ? $cached->content : null;
- $timestamp = $cached->timestamp ? $cached->timestamp : null;
+ $content = $cached->content ?: null;
+ $timestamp = $cached->timestamp ?: null;
if ($content === null || !$timestamp) {
if (!$this->fetch(
- $_smarty_tpl->cached->filepath,
- $_smarty_tpl->source->name,
+ $_smarty_tpl->getCached()->filepath,
+ $_smarty_tpl->getSource()->name,
$_smarty_tpl->cache_id,
$_smarty_tpl->compile_id,
$content,
$timestamp,
- $_smarty_tpl->source->uid
+ $_smarty_tpl->getSource()->uid
)
) {
return false;
@@ -128,37 +135,37 @@ public function process(
/**
* Write the rendered template output to cache
*
- * @param Smarty_Internal_Template $_template template object
+ * @param Template $_template template object
* @param string $content content to cache
*
* @return boolean success
*/
- public function writeCachedContent(Smarty_Internal_Template $_template, $content)
+ public function storeCachedContent(Template $_template, $content)
{
$this->addMetaTimestamp($content);
- return $this->write(array($_template->cached->filepath => $content), $_template->cache_lifetime);
+ return $this->write(array($_template->getCached()->filepath => $content), $_template->cache_lifetime);
}
/**
* Read cached template from cache
*
- * @param Smarty_Internal_Template $_template template object
+ * @param Template $_template template object
*
* @return string|false content
*/
- public function readCachedContent(Smarty_Internal_Template $_template)
+ public function retrieveCachedContent(Template $_template)
{
- $content = $_template->cached->content ? $_template->cached->content : null;
+ $content = $_template->getCached()->content ?: null;
$timestamp = null;
if ($content === null) {
if (!$this->fetch(
- $_template->cached->filepath,
- $_template->source->name,
+ $_template->getCached()->filepath,
+ $_template->getSource()->name,
$_template->cache_id,
$_template->compile_id,
$content,
$timestamp,
- $_template->source->uid
+ $_template->getSource()->uid
)
) {
return false;
@@ -200,7 +207,7 @@ public function clearAll(Smarty $smarty, $exp_time = null)
* @param integer $exp_time expiration time [being ignored]
*
* @return int number of cache files deleted [always -1]
- * @throws \SmartyException
+ * @throws \Smarty\Exception
* @uses buildCachedFilepath() to generate the CacheID
* @uses invalidate() to mark CacheIDs parent chain as outdated
* @uses delete() to remove CacheID from cache
@@ -222,12 +229,12 @@ public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $e
* @param string $resource_name template name
*
* @return string filepath of cache file
- * @throws \SmartyException
+ * @throws \Smarty\Exception
*/
protected function getTemplateUid(Smarty $smarty, $resource_name)
{
if (isset($resource_name)) {
- $source = Smarty_Template_Source::load(null, $smarty, $resource_name);
+ $source = \Smarty\Template\Source::load(null, $smarty, $resource_name);
if ($source->exists) {
return $source->uid;
}
@@ -380,11 +387,7 @@ protected function getLatestInvalidationTimestamp(
$compile_id = null,
$resource_uid = null
) {
- // abort if there is no CacheID
- if (false && !$cid) {
- return 0;
- }
- // abort if there are no InvalidationKeys to check
+ // abort if there are no InvalidationKeys to check
if (!($_cid = $this->listInvalidationKeys($cid, $resource_name, $cache_id, $compile_id, $resource_uid))) {
return 0;
}
@@ -457,11 +460,11 @@ protected function listInvalidationKeys(
* Check is cache is locked for this template
*
* @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
+ * @param Cached $cached cached object
*
* @return boolean true or false if cache is locked
*/
- public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
+ public function hasLock(Smarty $smarty, Cached $cached)
{
$key = 'LOCK#' . $cached->filepath;
$data = $this->read(array($key));
@@ -472,11 +475,11 @@ public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
* Lock cache for this template
*
* @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
+ * @param Cached $cached cached object
*
* @return bool|void
*/
- public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
+ public function acquireLock(Smarty $smarty, Cached $cached)
{
$cached->is_locked = true;
$key = 'LOCK#' . $cached->filepath;
@@ -487,11 +490,11 @@ public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
* Unlock cache for this template
*
* @param Smarty $smarty Smarty object
- * @param Smarty_Template_Cached $cached cached object
+ * @param Cached $cached cached object
*
- * @return bool|void
+ * @return void
*/
- public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
+ public function releaseLock(Smarty $smarty, Cached $cached)
{
$cached->is_locked = false;
$key = 'LOCK#' . $cached->filepath;
diff --git a/bundled-libs/smarty/smarty/src/Compile/Base.php b/bundled-libs/smarty/smarty/src/Compile/Base.php
new file mode 100644
index 000000000..2d5c0c0ef
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Compile/Base.php
@@ -0,0 +1,233 @@
+cacheable;
+ }
+
+ /**
+ * Converts attributes into parameter array strings
+ *
+ * @param array $_attr
+ *
+ * @return array
+ */
+ protected function formatParamsArray(array $_attr): array {
+ $_paramsArray = [];
+ foreach ($_attr as $_key => $_value) {
+ $_paramsArray[] = var_export($_key, true) . "=>" . $_value;
+ }
+ return $_paramsArray;
+ }
+
+ /**
+ * This function checks if the attributes passed are valid
+ * The attributes passed for the tag to compile are checked against the list of required and
+ * optional attributes. Required attributes must be present. Optional attributes are check against
+ * the corresponding list. The keyword '_any' specifies that any attribute will be accepted
+ * as valid
+ *
+ * @param object $compiler compiler object
+ * @param array $attributes attributes applied to the tag
+ *
+ * @return array of mapped attributes for further processing
+ */
+ protected function getAttributes($compiler, $attributes) {
+ $_indexed_attr = [];
+ $options = array_fill_keys($this->option_flags, true);
+ foreach ($attributes as $key => $mixed) {
+ // shorthand ?
+ if (!is_array($mixed)) {
+ // options flag ?
+ if (isset($options[trim($mixed, '\'"')])) {
+ $_indexed_attr[trim($mixed, '\'"')] = true;
+ // shorthand attribute ?
+ } elseif (isset($this->shorttag_order[$key])) {
+ $_indexed_attr[$this->shorttag_order[$key]] = $mixed;
+ } else {
+ // too many shorthands
+ $compiler->trigger_template_error('too many shorthand attributes', null, true);
+ }
+ // named attribute
+ } else {
+ foreach ($mixed as $k => $v) {
+ // options flag?
+ if (isset($options[$k])) {
+ if (is_bool($v)) {
+ $_indexed_attr[$k] = $v;
+ } else {
+ if (is_string($v)) {
+ $v = trim($v, '\'" ');
+ }
+
+ // Mapping array for boolean option value
+ static $optionMap = [1 => true, 0 => false, 'true' => true, 'false' => false];
+
+ if (isset($optionMap[$v])) {
+ $_indexed_attr[$k] = $optionMap[$v];
+ } else {
+ $compiler->trigger_template_error(
+ "illegal value '" . var_export($v, true) .
+ "' for options flag '{$k}'",
+ null,
+ true
+ );
+ }
+ }
+ // must be named attribute
+ } else {
+ $_indexed_attr[$k] = $v;
+ }
+ }
+ }
+ }
+ // check if all required attributes present
+ foreach ($this->required_attributes as $attr) {
+ if (!isset($_indexed_attr[$attr])) {
+ $compiler->trigger_template_error("missing '{$attr}' attribute", null, true);
+ }
+ }
+ // check for not allowed attributes
+ if ($this->optional_attributes !== ['_any']) {
+ $allowedAttributes = array_fill_keys(
+ array_merge(
+ $this->required_attributes,
+ $this->optional_attributes,
+ $this->option_flags
+ ),
+ true
+ );
+ foreach ($_indexed_attr as $key => $dummy) {
+ if (!isset($allowedAttributes[$key]) && $key !== 0) {
+ $compiler->trigger_template_error("unexpected '{$key}' attribute", null, true);
+ }
+ }
+ }
+ // default 'false' for all options flags not set
+ foreach ($this->option_flags as $flag) {
+ if (!isset($_indexed_attr[$flag])) {
+ $_indexed_attr[$flag] = false;
+ }
+ }
+
+ return $_indexed_attr;
+ }
+
+ /**
+ * Push opening tag name on stack
+ * Optionally additional data can be saved on stack
+ *
+ * @param Template $compiler compiler object
+ * @param string $openTag the opening tag's name
+ * @param mixed $data optional data saved
+ */
+ protected function openTag(Template $compiler, $openTag, $data = null) {
+ $compiler->openTag($openTag, $data);
+ }
+
+ /**
+ * Pop closing tag
+ * Raise an error if this stack-top doesn't match with expected opening tags
+ *
+ * @param Template $compiler compiler object
+ * @param array|string $expectedTag the expected opening tag names
+ *
+ * @return mixed any type the opening tag's name or saved data
+ */
+ protected function closeTag(Template $compiler, $expectedTag) {
+ return $compiler->closeTag($expectedTag);
+ }
+
+ /**
+ * @param mixed $scope
+ * @param array $invalidScopes
+ *
+ * @return int
+ * @throws Exception
+ */
+ protected function convertScope($scope): int {
+
+ static $scopes = [
+ 'local' => Data::SCOPE_LOCAL, // current scope
+ 'parent' => Data::SCOPE_PARENT, // parent scope (definition unclear)
+ 'tpl_root' => Data::SCOPE_TPL_ROOT, // highest template (keep going up until parent is not a template)
+ 'root' => Data::SCOPE_ROOT, // highest scope (definition unclear)
+ 'global' => Data::SCOPE_GLOBAL, // smarty object
+
+ 'smarty' => Data::SCOPE_SMARTY, // @deprecated alias of 'global'
+ ];
+
+ $_scopeName = trim($scope, '\'"');
+ if (is_numeric($_scopeName) && in_array($_scopeName, $scopes)) {
+ return (int) $_scopeName;
+ }
+
+ if (isset($scopes[$_scopeName])) {
+ return $scopes[$_scopeName];
+ }
+
+ $err = var_export($_scopeName, true);
+ throw new Exception("illegal value '{$err}' for \"scope\" attribute");
+ }
+
+ /**
+ * Compiles code for the tag
+ *
+ * @param array $args array with attributes from parser
+ * @param Template $compiler compiler object
+ * @param array $parameter array with compilation parameter
+ *
+ * @return string compiled code as a string
+ * @throws \Smarty\CompilerException
+ */
+ abstract public function compile($args, Template $compiler, $parameter = array(), $tag = null, $function = null): string;
+}
diff --git a/bundled-libs/smarty/smarty/src/Compile/BlockCompiler.php b/bundled-libs/smarty/smarty/src/Compile/BlockCompiler.php
new file mode 100644
index 000000000..e7a8f310e
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Compile/BlockCompiler.php
@@ -0,0 +1,228 @@
+compileOpeningTag($compiler, $args, $tag, $function);
+ } else {
+ $output = $this->compileClosingTag($compiler, $tag, $parameter, $function);
+ }
+ return $output;
+ }
+
+ /**
+ * Compiles code for the {$smarty.block.child} property
+ *
+ * @param Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws CompilerException
+ */
+ public function compileChild(\Smarty\Compiler\Template $compiler) {
+
+ if (!isset($compiler->_cache['blockNesting'])) {
+ $compiler->trigger_template_error(
+ "'{\$smarty.block.child}' used outside {block} tags ",
+ $compiler->getParser()->lex->taglineno
+ );
+ }
+ $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']]['callsChild'] = true;
+ $compiler->suppressNocacheProcessing = true;
+
+ $output = "getInheritance()->callChild($_smarty_tpl, $this' . ");\n";
+ $output .= "?>\n";
+ return $output;
+ }
+
+ /**
+ * Compiles code for the {$smarty.block.parent} property
+ *
+ * @param Template $compiler compiler object
+ *
+ * @return string compiled code
+ * @throws CompilerException
+ */
+ public function compileParent(\Smarty\Compiler\Template $compiler) {
+
+ if (!isset($compiler->_cache['blockNesting'])) {
+ $compiler->trigger_template_error(
+ "'{\$smarty.block.parent}' used outside {block} tags ",
+ $compiler->getParser()->lex->taglineno
+ );
+ }
+ $compiler->suppressNocacheProcessing = true;
+
+ $output = "getInheritance()->callParent($_smarty_tpl, $this' . ");\n";
+ $output .= "?>\n";
+ return $output;
+ }
+
+ /**
+ * Returns true if this block is cacheable.
+ *
+ * @param Smarty $smarty
+ * @param $function
+ *
+ * @return bool
+ */
+ protected function blockIsCacheable(\Smarty\Smarty $smarty, $function): bool {
+ return $smarty->getBlockHandler($function)->isCacheable();
+ }
+
+ /**
+ * Returns the code used for the isset check
+ *
+ * @param string $tag tag name
+ * @param string $function base tag or method name
+ *
+ * @return string
+ */
+ protected function getIsCallableCode($tag, $function): string {
+ return "\$_smarty_tpl->getSmarty()->getBlockHandler(" . var_export($function, true) . ")";
+ }
+
+ /**
+ * Returns the full code used to call the callback
+ *
+ * @param string $tag tag name
+ * @param string $function base tag or method name
+ *
+ * @return string
+ */
+ protected function getFullCallbackCode($tag, $function): string {
+ return "\$_smarty_tpl->getSmarty()->getBlockHandler(" . var_export($function, true) . ")->handle";
+ }
+
+ /**
+ * @param Template $compiler
+ * @param array $args
+ * @param string|null $tag
+ * @param string|null $function
+ *
+ * @return string
+ */
+ private function compileOpeningTag(Template $compiler, array $args, ?string $tag, ?string $function): string {
+
+ // check and get attributes
+ $_attr = $this->getAttributes($compiler, $args);
+ $this->nesting++;
+ unset($_attr['nocache']);
+ $_params = 'array(' . implode(',', $this->formatParamsArray($_attr)) . ')';
+
+ if (!$this->blockIsCacheable($compiler->getSmarty(), $function)) {
+ $compiler->tag_nocache = true;
+ }
+
+ if ($compiler->tag_nocache) {
+ // push a {nocache} tag onto the stack to prevent caching of this block
+ $this->openTag($compiler, 'nocache');
+ }
+
+ $this->openTag($compiler, $tag, [$_params, $compiler->tag_nocache]);
+
+ // compile code
+ $output = "getIsCallableCode($tag, $function) .") {\nthrow new \\Smarty\\Exception('block tag \'{$tag}\' not callable or registered');\n}\n
+echo " . $this->getFullCallbackCode($tag, $function) . "({$_params}, null, \$_smarty_tpl, \$_block_repeat);
+while (\$_block_repeat) {
+ ob_start();
+?>";
+
+ return $output;
+ }
+
+ /**
+ * @param Template $compiler
+ * @param string $tag
+ * @param array $parameter
+ * @param string|null $function
+ *
+ * @return string
+ * @throws CompilerException
+ * @throws Exception
+ */
+ private function compileClosingTag(Template $compiler, string $tag, array $parameter, ?string $function): string {
+
+ // closing tag of block plugin, restore nocache
+ $base_tag = substr($tag, 0, -5);
+ [$_params, $nocache_pushed] = $this->closeTag($compiler, $base_tag);
+
+ // compile code
+ if (!isset($parameter['modifier_list'])) {
+ $mod_pre = $mod_post = $mod_content = '';
+ $mod_content2 = 'ob_get_clean()';
+ } else {
+ $mod_content2 = "\$_block_content{$this->nesting}";
+ $mod_content = "\$_block_content{$this->nesting} = ob_get_clean();\n";
+ $mod_pre = "ob_start();\n";
+ $mod_post = 'echo ' . $compiler->compileModifier($parameter['modifier_list'], 'ob_get_clean()')
+ . ";\n";
+ }
+ $output = "getFullCallbackCode($base_tag, $function);
+ $output .= "echo {$callback}({$_params}, {$mod_content2}, \$_smarty_tpl, \$_block_repeat);\n";
+ $output .= "{$mod_post}}\n?>";
+
+ if ($nocache_pushed) {
+ // pop the pushed virtual nocache tag
+ $this->closeTag($compiler, 'nocache');
+ $compiler->tag_nocache = true;
+ }
+
+ return $output;
+ }
+
+}
diff --git a/bundled-libs/smarty/smarty/src/Compile/CompilerInterface.php b/bundled-libs/smarty/smarty/src/Compile/CompilerInterface.php
new file mode 100644
index 000000000..5f2cc7ccc
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Compile/CompilerInterface.php
@@ -0,0 +1,26 @@
+getSmarty()->getRuntime('DefaultPluginHandler')->hasPlugin(" .
+ var_export($function, true) . ", 'block')";
+ }
+
+ /**
+ * @inheritDoc
+ */
+ protected function getFullCallbackCode($tag, $function): string {
+ return "\$_smarty_tpl->getSmarty()->getRuntime('DefaultPluginHandler')->getCallback(" .
+ var_export($function, true) . ", 'block')";
+ }
+
+ /**
+ * @inheritDoc
+ */
+ protected function blockIsCacheable(\Smarty\Smarty $smarty, $function): bool {
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/Compile/DefaultHandlerFunctionCallCompiler.php b/bundled-libs/smarty/smarty/src/Compile/DefaultHandlerFunctionCallCompiler.php
new file mode 100644
index 000000000..e6d11384e
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Compile/DefaultHandlerFunctionCallCompiler.php
@@ -0,0 +1,47 @@
+getAttributes($compiler, $args);
+ unset($_attr['nocache']);
+
+ $_paramsArray = $this->formatParamsArray($_attr);
+ $_params = 'array(' . implode(',', $_paramsArray) . ')';
+
+ $output = "\$_smarty_tpl->getSmarty()->getRuntime('DefaultPluginHandler')->getCallback(" . var_export($function, true) .
+ ",'function')($_params, \$_smarty_tpl)";
+
+ if (!empty($parameter['modifierlist'])) {
+ $output = $compiler->compileModifier($parameter['modifierlist'], $output);
+ }
+ return "\n";
+ }
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/Compile/FunctionCallCompiler.php b/bundled-libs/smarty/smarty/src/Compile/FunctionCallCompiler.php
new file mode 100644
index 000000000..107dd98bb
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Compile/FunctionCallCompiler.php
@@ -0,0 +1,79 @@
+getAttributes($compiler, $args);
+ unset($_attr['nocache']);
+
+ $_paramsArray = $this->formatParamsArray($_attr);
+ $_params = 'array(' . implode(',', $_paramsArray) . ')';
+
+
+ if ($functionHandler = $compiler->getSmarty()->getFunctionHandler($function)) {
+
+ // not cacheable?
+ $compiler->tag_nocache = $compiler->tag_nocache || !$functionHandler->isCacheable();
+ $output = "\$_smarty_tpl->getSmarty()->getFunctionHandler(" . var_export($function, true) . ")";
+ $output .= "->handle($_params, \$_smarty_tpl)";
+ } else {
+ $compiler->trigger_template_error("unknown function '{$function}'", null, true);
+ }
+
+ if (!empty($parameter['modifierlist'])) {
+ $output = $compiler->compileModifier($parameter['modifierlist'], $output);
+ }
+
+ return $output;
+ }
+}
diff --git a/bundled-libs/smarty/smarty/src/Compile/Modifier/BCPluginWrapper.php b/bundled-libs/smarty/smarty/src/Compile/Modifier/BCPluginWrapper.php
new file mode 100644
index 000000000..0147651fd
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Compile/Modifier/BCPluginWrapper.php
@@ -0,0 +1,19 @@
+callback = $callback;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function compile($params, \Smarty\Compiler\Template $compiler) {
+ return call_user_func($this->callback, $params, $compiler);
+ }
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/Compile/Modifier/Base.php b/bundled-libs/smarty/smarty/src/Compile/Modifier/Base.php
new file mode 100644
index 000000000..2ae572287
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Compile/Modifier/Base.php
@@ -0,0 +1,49 @@
+literal_compiler_param($params, 1, 'html');
+ $char_set = $this->literal_compiler_param($params, 2, \Smarty\Smarty::$_CHARSET);
+ $double_encode = $this->literal_compiler_param($params, 3, true);
+ if (!$char_set) {
+ $char_set = \Smarty\Smarty::$_CHARSET;
+ }
+ switch ($esc_type) {
+ case 'html':
+ case 'force':
+ // in case of auto-escaping, and without the 'force' option, no double-escaping
+ if ($compiler->getSmarty()->escape_html && $esc_type != 'force')
+ return $params[0];
+ // otherwise, escape the variable
+ return 'htmlspecialchars((string)' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ', ' .
+ var_export($double_encode, true) . ')';
+ // no break
+ case 'htmlall':
+ $compiler->setRawOutput(true);
+ return 'htmlentities(mb_convert_encoding((string)' . $params[ 0 ] . ', \'UTF-8\', ' .
+ var_export($char_set, true) . '), ENT_QUOTES, \'UTF-8\', ' .
+ var_export($double_encode, true) . ')';
+ // no break
+ case 'url':
+ $compiler->setRawOutput(true);
+ return 'rawurlencode((string)' . $params[ 0 ] . ')';
+ case 'urlpathinfo':
+ $compiler->setRawOutput(true);
+ return 'str_replace("%2F", "/", rawurlencode((string)' . $params[ 0 ] . '))';
+ case 'quotes':
+ $compiler->setRawOutput(true);
+ // escape unescaped single quotes
+ return 'preg_replace("%(?setRawOutput(true);
+ // escape quotes and backslashes, newlines, etc.
+ // see https://html.spec.whatwg.org/multipage/scripting.html#restrictions-for-contents-of-script-elements
+ return 'strtr((string)' .
+ $params[ 0 ] .
+ ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r",
+ "\\n" => "\\\n", "" => "<\/", " Smarty Compiler: ' . $this->message . ' <-- ';
+ }
+
+ /**
+ * @param int $line
+ */
+ public function setLine($line) {
+ $this->line = $line;
+ }
+
+ /**
+ * The template source snippet relating to the error
+ *
+ * @type string|null
+ */
+ public $source = null;
+
+ /**
+ * The raw text of the error message
+ *
+ * @type string|null
+ */
+ public $desc = null;
+
+ /**
+ * The resource identifier or template name
+ *
+ * @type string|null
+ */
+ public $template = null;
+}
diff --git a/bundled-libs/smarty/smarty/src/Data.php b/bundled-libs/smarty/smarty/src/Data.php
new file mode 100644
index 000000000..6ae823d8c
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Data.php
@@ -0,0 +1,521 @@
+smarty = $smarty;
+ if (is_object($_parent)) {
+ // when object set up back pointer
+ $this->parent = $_parent;
+ } elseif (is_array($_parent)) {
+ // set up variable values
+ foreach ($_parent as $_key => $_val) {
+ $this->assign($_key, $_val);
+ }
+ } elseif ($_parent !== null) {
+ throw new Exception('Wrong type for template variables');
+ }
+ }
+
+ /**
+ * assigns a Smarty variable
+ *
+ * @param array|string $tpl_var the template variable name(s)
+ * @param mixed $value the value to assign
+ * @param boolean $nocache if true any output of this variable will be not cached
+ * @param int $scope one of self::SCOPE_* constants
+ *
+ * @return Data current Data (or Smarty or \Smarty\Template) instance for
+ * chaining
+ */
+ public function assign($tpl_var, $value = null, $nocache = false, $scope = null)
+ {
+ if (is_array($tpl_var)) {
+ foreach ($tpl_var as $_key => $_val) {
+ $this->assign($_key, $_val, $nocache, $scope);
+ }
+ return $this;
+ }
+ switch ($scope ?? $this->getDefaultScope()) {
+ case self::SCOPE_GLOBAL:
+ case self::SCOPE_SMARTY:
+ $this->getSmarty()->assign($tpl_var, $value);
+ break;
+ case self::SCOPE_TPL_ROOT:
+ $ptr = $this;
+ while (isset($ptr->parent) && ($ptr->parent instanceof Template)) {
+ $ptr = $ptr->parent;
+ }
+ $ptr->assign($tpl_var, $value);
+ break;
+ case self::SCOPE_ROOT:
+ $ptr = $this;
+ while (isset($ptr->parent) && !($ptr->parent instanceof Smarty)) {
+ $ptr = $ptr->parent;
+ }
+ $ptr->assign($tpl_var, $value);
+ break;
+ case self::SCOPE_PARENT:
+ if ($this->parent) {
+ $this->parent->assign($tpl_var, $value);
+ } else {
+ // assign local as fallback
+ $this->assign($tpl_var, $value);
+ }
+ break;
+ case self::SCOPE_LOCAL:
+ default:
+ if (isset($this->tpl_vars[$tpl_var])) {
+ $this->tpl_vars[$tpl_var]->setValue($value);
+ if ($nocache) {
+ $this->tpl_vars[$tpl_var]->setNocache(true);
+ }
+ } else {
+ $this->tpl_vars[$tpl_var] = new Variable($value, $nocache);
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * appends values to template variables
+ *
+ * @param array|string $tpl_var the template variable name(s)
+ * @param mixed $value the value to append
+ * @param bool $merge flag if array elements shall be merged
+ * @param bool $nocache if true any output of this variable will
+ * be not cached
+ *
+ * @return Data
+ * @api Smarty::append()
+ */
+ public function append($tpl_var, $value = null, $merge = false, $nocache = false)
+ {
+ if (is_array($tpl_var)) {
+ foreach ($tpl_var as $_key => $_val) {
+ $this->append($_key, $_val, $merge, $nocache);
+ }
+ } else {
+
+ $newValue = $this->getValue($tpl_var) ?? [];
+ if (!is_array($newValue)) {
+ $newValue = (array) $newValue;
+ }
+
+ if ($merge && is_array($value)) {
+ foreach ($value as $_mkey => $_mval) {
+ $newValue[$_mkey] = $_mval;
+ }
+ } else {
+ $newValue[] = $value;
+ }
+
+ $this->assign($tpl_var, $newValue, $nocache);
+ }
+ return $this;
+ }
+
+ /**
+ * assigns a global Smarty variable
+ *
+ * @param string $varName the global variable name
+ * @param mixed $value the value to assign
+ * @param boolean $nocache if true any output of this variable will be not cached
+ *
+ * @return Data
+ * @deprecated since 5.0
+ */
+ public function assignGlobal($varName, $value = null, $nocache = false)
+ {
+ trigger_error(__METHOD__ . " is deprecated. Use \\Smarty\\Smarty::assign() to assign a variable " .
+ " at the Smarty level.", E_USER_DEPRECATED);
+ return $this->getSmarty()->assign($varName, $value, $nocache);
+ }
+
+ /**
+ * Returns a single or all template variables
+ *
+ * @param string $varName variable name or null
+ * @param bool $searchParents include parent templates?
+ *
+ * @return mixed variable value or or array of variables
+ * @api Smarty::getTemplateVars()
+ *
+ */
+ public function getTemplateVars($varName = null, $searchParents = true)
+ {
+ if (isset($varName)) {
+ return $this->getValue($varName, $searchParents);
+ }
+
+ return array_merge(
+ $this->parent && $searchParents ? $this->parent->getTemplateVars() : [],
+ array_map(function(Variable $var) { return $var->getValue(); }, $this->tpl_vars)
+ );
+ }
+
+ /**
+ * Wrapper for ::getVariable()
+ *
+ * @deprecated since 5.0
+ *
+ * @param $varName
+ * @param $searchParents
+ * @param $errorEnable
+ *
+ * @return void
+ */
+ public function _getVariable($varName, $searchParents = true, $errorEnable = true) {
+ trigger_error('Using ::_getVariable() to is deprecated and will be ' .
+ 'removed in a future release. Use getVariable() instead.', E_USER_DEPRECATED);
+ return $this->getVariable($varName, $searchParents, $errorEnable);
+ }
+
+ /**
+ * Gets the object of a Smarty variable
+ *
+ * @param string $varName the name of the Smarty variable
+ * @param bool $searchParents search also in parent data
+ * @param bool $errorEnable
+ *
+ * @return Variable
+ */
+ public function getVariable($varName, $searchParents = true, $errorEnable = true) {
+ if (isset($this->tpl_vars[$varName])) {
+ return $this->tpl_vars[$varName];
+ }
+
+ if ($searchParents && $this->parent) {
+ return $this->parent->getVariable($varName, $searchParents, $errorEnable);
+ }
+
+ if ($errorEnable && $this->getSmarty()->error_unassigned) {
+ // force a notice
+ $x = $$varName;
+ }
+ return new UndefinedVariable();
+ }
+
+ /**
+ * Directly sets a complete Variable object in the variable with the given name.
+ * @param $varName
+ * @param Variable $variableObject
+ *
+ * @return void
+ */
+ public function setVariable($varName, Variable $variableObject) {
+ $this->tpl_vars[$varName] = $variableObject;
+ }
+
+ /**
+ * Indicates if given variable has been set.
+ * @param $varName
+ *
+ * @return bool
+ */
+ public function hasVariable($varName): bool {
+ return !($this->getVariable($varName, true, false) instanceof UndefinedVariable);
+ }
+
+ /**
+ * Returns the value of the Smarty\Variable given by $varName, or null if the variable does not exist.
+ *
+ * @param $varName
+ * @param bool $searchParents
+ *
+ * @return mixed|null
+ */
+ public function getValue($varName, $searchParents = true) {
+ $variable = $this->getVariable($varName, $searchParents);
+ return isset($variable) ? $variable->getValue() : null;
+ }
+
+ /**
+ * load config variables into template object
+ *
+ * @param array $new_config_vars
+ */
+ public function assignConfigVars($new_config_vars, array $sections = []) {
+
+ // copy global config vars
+ foreach ($new_config_vars['vars'] as $variable => $value) {
+ if ($this->getSmarty()->config_overwrite || !isset($this->config_vars[$variable])) {
+ $this->config_vars[$variable] = $value;
+ } else {
+ $this->config_vars[$variable] = array_merge((array)$this->config_vars[$variable], (array)$value);
+ }
+ }
+
+ foreach ($sections as $tpl_section) {
+ if (isset($new_config_vars['sections'][$tpl_section])) {
+ foreach ($new_config_vars['sections'][$tpl_section]['vars'] as $variable => $value) {
+ if ($this->getSmarty()->config_overwrite || !isset($this->config_vars[$variable])) {
+ $this->config_vars[$variable] = $value;
+ } else {
+ $this->config_vars[$variable] = array_merge((array)$this->config_vars[$variable], (array)$value);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Get Smarty object
+ *
+ * @return Smarty
+ */
+ public function getSmarty()
+ {
+ return $this->smarty;
+ }
+
+ /**
+ * clear the given assigned template variable(s).
+ *
+ * @param string|array $tpl_var the template variable(s) to clear
+ *
+ * @return Data
+ *
+ * @api Smarty::clearAssign()
+ */
+ public function clearAssign($tpl_var)
+ {
+ if (is_array($tpl_var)) {
+ foreach ($tpl_var as $curr_var) {
+ unset($this->tpl_vars[ $curr_var ]);
+ }
+ } else {
+ unset($this->tpl_vars[ $tpl_var ]);
+ }
+ return $this;
+ }
+
+ /**
+ * clear all the assigned template variables.
+ *
+ * @return Data
+ *
+ * @api Smarty::clearAllAssign()
+ */
+ public function clearAllAssign()
+ {
+ $this->tpl_vars = array();
+ return $this;
+ }
+
+ /**
+ * clear a single or all config variables
+ *
+ * @param string|null $name variable name or null
+ *
+ * @return Data
+ *
+ * @api Smarty::clearConfig()
+ */
+ public function clearConfig($name = null)
+ {
+ if (isset($name)) {
+ unset($this->config_vars[ $name ]);
+ } else {
+ $this->config_vars = array();
+ }
+ return $this;
+ }
+
+ /**
+ * Gets a config variable value
+ *
+ * @param string $varName the name of the config variable
+ *
+ * @return mixed the value of the config variable
+ * @throws Exception
+ */
+ public function getConfigVariable($varName)
+ {
+
+ if (isset($this->config_vars[$varName])) {
+ return $this->config_vars[$varName];
+ }
+
+ $returnValue = $this->parent ? $this->parent->getConfigVariable($varName) : null;
+
+ if ($returnValue === null && $this->getSmarty()->error_unassigned) {
+ throw new Exception("Undefined variable $varName");
+ }
+
+ return $returnValue;
+ }
+
+ public function hasConfigVariable($varName): bool {
+ try {
+ return $this->getConfigVariable($varName) !== null;
+ } catch (Exception $e) {
+ return false;
+ }
+ }
+
+ /**
+ * Returns a single or all config variables
+ *
+ * @param string $varname variable name or null
+ *
+ * @return mixed variable value or or array of variables
+ * @throws Exception
+ *
+ * @api Smarty::getConfigVars()
+ */
+ public function getConfigVars($varname = null)
+ {
+ if (isset($varname)) {
+ return $this->getConfigVariable($varname);
+ }
+
+ return array_merge($this->parent ? $this->parent->getConfigVars() : [], $this->config_vars);
+ }
+
+ /**
+ * load a config file, optionally load just selected sections
+ *
+ * @param string $config_file filename
+ * @param mixed $sections array of section names, single
+ * section or null
+
+ * @returns $this
+ * @throws \Exception
+ *
+ * @api Smarty::configLoad()
+ */
+ public function configLoad($config_file, $sections = null)
+ {
+ $template = $this->getSmarty()->doCreateTemplate($config_file, null, null, $this, null, null, true);
+ $template->caching = Smarty::CACHING_OFF;
+ $template->assign('sections', (array) $sections ?? []);
+ // trigger a call to $this->assignConfigVars
+ $template->fetch();
+ return $this;
+ }
+
+ /**
+ * Sets the default scope for new variables assigned in this template.
+ * @param int $scope
+ *
+ * @return void
+ */
+ protected function setDefaultScope(int $scope) {
+ $this->defaultScope = $scope;
+ }
+
+ /**
+ * Returns the default scope for new variables assigned in this template.
+ * @return int
+ */
+ public function getDefaultScope(): int {
+ return $this->defaultScope;
+ }
+
+ /**
+ * @return Data|Smarty|null
+ */
+ public function getParent() {
+ return $this->parent;
+ }
+
+ /**
+ * @param Data|Smarty|null $parent
+ */
+ public function setParent($parent): void {
+ $this->parent = $parent;
+ }
+
+ public function pushStack(): void {
+ $stackList = [];
+ foreach ($this->tpl_vars as $name => $variable) {
+ $stackList[$name] = clone $variable; // variables are stored in Variable objects
+ }
+ $this->_var_stack[] = $this->tpl_vars;
+ $this->tpl_vars = $stackList;
+
+ $this->_config_stack[] = $this->config_vars;
+ }
+
+ public function popStack(): void {
+ $this->tpl_vars = array_pop($this->_var_stack);
+ $this->config_vars = array_pop($this->_config_stack);
+ }
+}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_debug.php b/bundled-libs/smarty/smarty/src/Debug.php
similarity index 55%
rename from bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_debug.php
rename to bundled-libs/smarty/smarty/src/Debug.php
index da67904c5..ab1a88779 100644
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_debug.php
+++ b/bundled-libs/smarty/smarty/src/Debug.php
@@ -1,34 +1,28 @@
_isSubTpl()) {
$this->index++;
@@ -64,39 +58,30 @@ public function start_template(Smarty_Internal_Template $template, $mode = null)
/**
* End logging of cache time
*
- * @param \Smarty_Internal_Template $template cached template
+ * @param Template $template cached template
*/
- public function end_template(Smarty_Internal_Template $template)
+ public function end_template(Template $template)
{
$key = $this->get_key($template);
$this->template_data[ $this->index ][ $key ][ 'total_time' ] +=
microtime(true) - $this->template_data[ $this->index ][ $key ][ 'start_template_time' ];
- //$this->template_data[$this->index][$key]['properties'] = $template->properties;
}
/**
* Start logging of compile time
*
- * @param \Smarty_Internal_Template $template
+ * @param Template $template
*/
- public function start_compile(Smarty_Internal_Template $template)
+ public function start_compile(Template $template)
{
static $_is_stringy = array('string' => true, 'eval' => true);
- if (!empty($template->compiler->trace_uid)) {
- $key = $template->compiler->trace_uid;
+ if (!empty($template->getCompiler()->trace_uid)) {
+ $key = $template->getCompiler()->trace_uid;
if (!isset($this->template_data[ $this->index ][ $key ])) {
- if (isset($_is_stringy[ $template->source->type ])) {
- $this->template_data[ $this->index ][ $key ][ 'name' ] =
- '\'' . substr($template->source->name, 0, 25) . '...\'';
- } else {
- $this->template_data[ $this->index ][ $key ][ 'name' ] = $template->source->filepath;
- }
- $this->template_data[ $this->index ][ $key ][ 'compile_time' ] = 0;
- $this->template_data[ $this->index ][ $key ][ 'render_time' ] = 0;
- $this->template_data[ $this->index ][ $key ][ 'cache_time' ] = 0;
+ $this->saveTemplateData($_is_stringy, $template, $key);
}
} else {
- if (isset($this->ignore_uid[ $template->source->uid ])) {
+ if (isset($this->ignore_uid[ $template->getSource()->uid ])) {
return;
}
$key = $this->get_key($template);
@@ -107,14 +92,14 @@ public function start_compile(Smarty_Internal_Template $template)
/**
* End logging of compile time
*
- * @param \Smarty_Internal_Template $template
+ * @param Template $template
*/
- public function end_compile(Smarty_Internal_Template $template)
+ public function end_compile(Template $template)
{
- if (!empty($template->compiler->trace_uid)) {
- $key = $template->compiler->trace_uid;
+ if (!empty($template->getCompiler()->trace_uid)) {
+ $key = $template->getCompiler()->trace_uid;
} else {
- if (isset($this->ignore_uid[ $template->source->uid ])) {
+ if (isset($this->ignore_uid[ $template->getSource()->uid ])) {
return;
}
$key = $this->get_key($template);
@@ -126,9 +111,9 @@ public function end_compile(Smarty_Internal_Template $template)
/**
* Start logging of render time
*
- * @param \Smarty_Internal_Template $template
+ * @param Template $template
*/
- public function start_render(Smarty_Internal_Template $template)
+ public function start_render(Template $template)
{
$key = $this->get_key($template);
$this->template_data[ $this->index ][ $key ][ 'start_time' ] = microtime(true);
@@ -137,9 +122,9 @@ public function start_render(Smarty_Internal_Template $template)
/**
* End logging of compile time
*
- * @param \Smarty_Internal_Template $template
+ * @param Template $template
*/
- public function end_render(Smarty_Internal_Template $template)
+ public function end_render(Template $template)
{
$key = $this->get_key($template);
$this->template_data[ $this->index ][ $key ][ 'render_time' ] +=
@@ -149,9 +134,9 @@ public function end_render(Smarty_Internal_Template $template)
/**
* Start logging of cache time
*
- * @param \Smarty_Internal_Template $template cached template
+ * @param Template $template cached template
*/
- public function start_cache(Smarty_Internal_Template $template)
+ public function start_cache(Template $template)
{
$key = $this->get_key($template);
$this->template_data[ $this->index ][ $key ][ 'start_time' ] = microtime(true);
@@ -160,9 +145,9 @@ public function start_cache(Smarty_Internal_Template $template)
/**
* End logging of cache time
*
- * @param \Smarty_Internal_Template $template cached template
+ * @param Template $template cached template
*/
- public function end_cache(Smarty_Internal_Template $template)
+ public function end_cache(Template $template)
{
$key = $this->get_key($template);
$this->template_data[ $this->index ][ $key ][ 'cache_time' ] +=
@@ -172,65 +157,52 @@ public function end_cache(Smarty_Internal_Template $template)
/**
* Register template object
*
- * @param \Smarty_Internal_Template $template cached template
+ * @param Template $template cached template
*/
- public function register_template(Smarty_Internal_Template $template)
+ public function register_template(Template $template)
{
}
/**
* Register data object
*
- * @param \Smarty_Data $data data object
+ * @param Data $data data object
*/
- public static function register_data(Smarty_Data $data)
+ public static function register_data(Data $data)
{
}
/**
* Opens a window for the Smarty Debugging Console and display the data
*
- * @param Smarty_Internal_Template|Smarty $obj object to debug
+ * @param Template|Smarty $obj object to debug
* @param bool $full
*
* @throws \Exception
- * @throws \SmartyException
+ * @throws Exception
*/
- public function display_debug($obj, $full = false)
+ public function display_debug($obj, bool $full = false)
{
if (!$full) {
$this->offset++;
$savedIndex = $this->index;
$this->index = 9999;
}
- $smarty = $obj->_getSmartyObj();
+ $smarty = $obj->getSmarty();
// create fresh instance of smarty for displaying the debug console
// to avoid problems if the application did overload the Smarty class
$debObj = new Smarty();
// copy the working dirs from application
$debObj->setCompileDir($smarty->getCompileDir());
- // init properties by hand as user may have edited the original Smarty class
- $debObj->setPluginsDir(is_dir(__DIR__ . '/../plugins') ? __DIR__ .
- '/../plugins' : $smarty->getPluginsDir());
- $debObj->force_compile = false;
$debObj->compile_check = Smarty::COMPILECHECK_ON;
- $debObj->left_delimiter = '{';
- $debObj->right_delimiter = '}';
$debObj->security_policy = null;
$debObj->debugging = false;
$debObj->debugging_ctrl = 'NONE';
$debObj->error_reporting = E_ALL & ~E_NOTICE;
- $debObj->debug_tpl =
- isset($smarty->debug_tpl) ? $smarty->debug_tpl : 'file:' . __DIR__ . '/../debug.tpl';
- $debObj->registered_plugins = array();
+ $debObj->debug_tpl = $smarty->debug_tpl ?? 'file:' . __DIR__ . '/debug.tpl';
$debObj->registered_resources = array();
- $debObj->registered_filters = array();
- $debObj->autoload_filters = array();
- $debObj->default_modifiers = array();
$debObj->escape_html = true;
$debObj->caching = Smarty::CACHING_OFF;
- $debObj->compile_id = null;
- $debObj->cache_id = null;
// prepare information of assigned variables
$ptr = $this->get_debug_vars($obj);
$_assigned_vars = $ptr->tpl_vars;
@@ -238,15 +210,14 @@ public function display_debug($obj, $full = false)
$_config_vars = $ptr->config_vars;
ksort($_config_vars);
$debugging = $smarty->debugging;
- $templateName = $obj->source->type . ':' . $obj->source->name;
+ $templateName = $obj->getSource()->type . ':' . $obj->getSource()->name;
$displayMode = $debugging === 2 || !$full;
$offset = $this->offset * 50;
- $_template = new Smarty_Internal_Template($debObj->debug_tpl, $debObj);
- if ($obj->_isTplObj()) {
+ $_template = $debObj->doCreateTemplate($debObj->debug_tpl);
+ if ($obj instanceof Template) {
$_template->assign('template_name', $templateName);
- }
- if ($obj->_objType === 1 || $full) {
- $_template->assign('template_data', $this->template_data[ $this->index ]);
+ } elseif ($obj instanceof Smarty || $full) {
+ $_template->assign('template_data', $this->template_data[$this->index]);
} else {
$_template->assign('template_data', null);
}
@@ -267,22 +238,16 @@ public function display_debug($obj, $full = false)
/**
* Recursively gets variables from all template/data scopes
*
- * @param Smarty_Internal_Template|Smarty_Data $obj object to debug
+ * @param \Smarty\Data $obj object to debug
*
- * @return StdClass
+ * @return \StdClass
*/
- public function get_debug_vars($obj)
+ private function get_debug_vars($obj)
{
$config_vars = array();
foreach ($obj->config_vars as $key => $var) {
- $config_vars[ $key ][ 'value' ] = $var;
- if ($obj->_isTplObj()) {
- $config_vars[ $key ][ 'scope' ] = $obj->source->type . ':' . $obj->source->name;
- } elseif ($obj->_isDataObj()) {
- $tpl_vars[ $key ][ 'scope' ] = $obj->dataObjectName;
- } else {
- $config_vars[ $key ][ 'scope' ] = 'Smarty object';
- }
+ $config_vars[$key]['value'] = $var;
+ $config_vars[$key]['scope'] = get_class($obj) . ':' . spl_object_id($obj);
}
$tpl_vars = array();
foreach ($obj->tpl_vars as $key => $var) {
@@ -301,13 +266,7 @@ public function get_debug_vars($obj)
}
}
}
- if ($obj->_isTplObj()) {
- $tpl_vars[ $key ][ 'scope' ] = $obj->source->type . ':' . $obj->source->name;
- } elseif ($obj->_isDataObj()) {
- $tpl_vars[ $key ][ 'scope' ] = $obj->dataObjectName;
- } else {
- $tpl_vars[ $key ][ 'scope' ] = 'Smarty object';
- }
+ $tpl_vars[$key]['scope'] = get_class($obj) . ':' . spl_object_id($obj);
}
if (isset($obj->parent)) {
$parent = $this->get_debug_vars($obj->parent);
@@ -323,27 +282,6 @@ public function get_debug_vars($obj)
}
}
$config_vars = array_merge($parent->config_vars, $config_vars);
- } else {
- foreach (Smarty::$global_tpl_vars as $key => $var) {
- if (!array_key_exists($key, $tpl_vars)) {
- foreach ($var as $varkey => $varvalue) {
- if ($varkey === 'value') {
- $tpl_vars[ $key ][ $varkey ] = $varvalue;
- } else {
- if ($varkey === 'nocache') {
- if ($varvalue === true) {
- $tpl_vars[ $key ][ $varkey ] = $varvalue;
- }
- } else {
- if ($varkey !== 'scope' || $varvalue !== 0) {
- $tpl_vars[ $key ][ 'attributes' ][ $varkey ] = $varvalue;
- }
- }
- }
- }
- $tpl_vars[ $key ][ 'scope' ] = 'Global';
- }
- }
}
return (object)array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars);
}
@@ -351,31 +289,20 @@ public function get_debug_vars($obj)
/**
* Return key into $template_data for template
*
- * @param \Smarty_Internal_Template $template template object
+ * @param Template $template template object
*
* @return string key into $template_data
*/
- private function get_key(Smarty_Internal_Template $template)
+ private function get_key(Template $template)
{
static $_is_stringy = array('string' => true, 'eval' => true);
- // calculate Uid if not already done
- if ($template->source->uid === '') {
- $template->source->filepath;
- }
- $key = $template->source->uid;
+
+ $key = $template->getSource()->uid;
if (isset($this->template_data[ $this->index ][ $key ])) {
return $key;
} else {
- if (isset($_is_stringy[ $template->source->type ])) {
- $this->template_data[ $this->index ][ $key ][ 'name' ] =
- '\'' . substr($template->source->name, 0, 25) . '...\'';
- } else {
- $this->template_data[ $this->index ][ $key ][ 'name' ] = $template->source->filepath;
- }
- $this->template_data[ $this->index ][ $key ][ 'compile_time' ] = 0;
- $this->template_data[ $this->index ][ $key ][ 'render_time' ] = 0;
- $this->template_data[ $this->index ][ $key ][ 'cache_time' ] = 0;
- $this->template_data[ $this->index ][ $key ][ 'total_time' ] = 0;
+ $this->saveTemplateData($_is_stringy, $template, $key);
+ $this->template_data[ $this->index ][ $key ][ 'total_time' ] = 0;
return $key;
}
}
@@ -383,15 +310,11 @@ private function get_key(Smarty_Internal_Template $template)
/**
* Ignore template
*
- * @param \Smarty_Internal_Template $template
+ * @param Template $template
*/
- public function ignore(Smarty_Internal_Template $template)
+ public function ignore(Template $template)
{
- // calculate Uid if not already done
- if ($template->source->uid === '') {
- $template->source->filepath;
- }
- $this->ignore_uid[ $template->source->uid ] = true;
+ $this->ignore_uid[$template->getSource()->uid] = true;
}
/**
@@ -425,4 +348,23 @@ public function debugUrl(Smarty $smarty)
}
}
}
+
+ /**
+ * @param array $_is_stringy
+ * @param Template $template
+ * @param string $key
+ *
+ * @return void
+ */
+ private function saveTemplateData(array $_is_stringy, Template $template, string $key): void {
+ if (isset($_is_stringy[$template->getSource()->type])) {
+ $this->template_data[$this->index][$key]['name'] =
+ '\'' . substr($template->getSource()->name, 0, 25) . '...\'';
+ } else {
+ $this->template_data[$this->index][$key]['name'] = $template->getSource()->getResourceName();
+ }
+ $this->template_data[$this->index][$key]['compile_time'] = 0;
+ $this->template_data[$this->index][$key]['render_time'] = 0;
+ $this->template_data[$this->index][$key]['cache_time'] = 0;
+ }
}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php b/bundled-libs/smarty/smarty/src/ErrorHandler.php
similarity index 86%
rename from bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php
rename to bundled-libs/smarty/smarty/src/ErrorHandler.php
index 4ddcfcd11..05b1cb3e6 100644
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php
+++ b/bundled-libs/smarty/smarty/src/ErrorHandler.php
@@ -1,22 +1,13 @@
propName} where propName is undefined.
* @var bool
@@ -78,14 +69,6 @@ public function deactivate() {
*/
public function handleError($errno, $errstr, $errfile, $errline, $errcontext = [])
{
-
- if ($this->allowUndefinedVars && preg_match(
- '/^(Attempt to read property "value" on null|Trying to get property (\'value\' )?of non-object)/',
- $errstr
- )) {
- return; // suppresses this error
- }
-
if ($this->allowUndefinedProperties && preg_match(
'/^(Undefined property)/',
$errstr
diff --git a/bundled-libs/smarty/smarty/src/Exception.php b/bundled-libs/smarty/smarty/src/Exception.php
new file mode 100644
index 000000000..0f75f5685
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Exception.php
@@ -0,0 +1,16 @@
+ Smarty: ' . $this->message . ' <-- ';
+ }
+}
diff --git a/bundled-libs/smarty/smarty/src/Extension/BCPluginsAdapter.php b/bundled-libs/smarty/smarty/src/Extension/BCPluginsAdapter.php
new file mode 100644
index 000000000..aa0eefe20
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Extension/BCPluginsAdapter.php
@@ -0,0 +1,229 @@
+smarty = $smarty;
+ }
+
+ private function findPlugin($type, $name): ?array {
+ if (null !== $plugin = $this->smarty->getRegisteredPlugin($type, $name)) {
+ return $plugin;
+ }
+
+ return null;
+ }
+
+ public function getTagCompiler(string $tag): ?\Smarty\Compile\CompilerInterface {
+
+ $plugin = $this->findPlugin(\Smarty\Smarty::PLUGIN_COMPILER, $tag);
+ if ($plugin === null) {
+ return null;
+ }
+
+ if (is_callable($plugin[0])) {
+ $callback = $plugin[0];
+ $cacheable = (bool) $plugin[1] ?? true;
+ return new TagPluginWrapper($callback, $cacheable);
+ } elseif (class_exists($plugin[0])) {
+ $compiler = new $plugin[0];
+ if ($compiler instanceof CompilerInterface) {
+ return $compiler;
+ }
+ }
+
+ return null;
+ }
+
+ public function getFunctionHandler(string $functionName): ?\Smarty\FunctionHandler\FunctionHandlerInterface {
+ $plugin = $this->findPlugin(\Smarty\Smarty::PLUGIN_FUNCTION, $functionName);
+ if ($plugin === null) {
+ return null;
+ }
+ $callback = $plugin[0];
+ $cacheable = (bool) $plugin[1] ?? true;
+
+ return new FunctionPluginWrapper($callback, $cacheable);
+
+ }
+
+ public function getBlockHandler(string $blockTagName): ?\Smarty\BlockHandler\BlockHandlerInterface {
+ $plugin = $this->findPlugin(\Smarty\Smarty::PLUGIN_BLOCK, $blockTagName);
+ if ($plugin === null) {
+ return null;
+ }
+ $callback = $plugin[0];
+ $cacheable = (bool) $plugin[1] ?? true;
+
+ return new BlockPluginWrapper($callback, $cacheable);
+ }
+
+ public function getModifierCallback(string $modifierName) {
+
+ $plugin = $this->findPlugin(\Smarty\Smarty::PLUGIN_MODIFIER, $modifierName);
+ if ($plugin === null) {
+ return null;
+ }
+ return $plugin[0];
+ }
+
+ public function getModifierCompiler(string $modifier): ?\Smarty\Compile\Modifier\ModifierCompilerInterface {
+ $plugin = $this->findPlugin(\Smarty\Smarty::PLUGIN_MODIFIERCOMPILER, $modifier);
+ if ($plugin === null) {
+ return null;
+ }
+ $callback = $plugin[0];
+
+ return new ModifierCompilerPluginWrapper($callback);
+ }
+
+ /**
+ * @var array
+ */
+ private $preFilters = [];
+
+ public function getPreFilters(): array {
+ return $this->preFilters;
+ }
+
+ public function addPreFilter(\Smarty\Filter\FilterInterface $filter) {
+ $this->preFilters[] = $filter;
+ }
+
+ public function addCallableAsPreFilter(callable $callable, ?string $name = null) {
+ if ($name === null) {
+ $this->preFilters[] = new FilterPluginWrapper($callable);
+ } else {
+ $this->preFilters[$name] = new FilterPluginWrapper($callable);
+ }
+ }
+
+ public function removePrefilter(string $name) {
+ unset($this->preFilters[$name]);
+ }
+
+ /**
+ * @var array
+ */
+ private $postFilters = [];
+
+ public function getPostFilters(): array {
+ return $this->postFilters;
+ }
+
+ public function addPostFilter(\Smarty\Filter\FilterInterface $filter) {
+ $this->postFilters[] = $filter;
+ }
+
+ public function addCallableAsPostFilter(callable $callable, ?string $name = null) {
+ if ($name === null) {
+ $this->postFilters[] = new FilterPluginWrapper($callable);
+ } else {
+ $this->postFilters[$name] = new FilterPluginWrapper($callable);
+ }
+ }
+
+ public function removePostFilter(string $name) {
+ unset($this->postFilters[$name]);
+ }
+
+
+ /**
+ * @var array
+ */
+ private $outputFilters = [];
+
+ public function getOutputFilters(): array {
+ return $this->outputFilters;
+ }
+
+ public function addOutputFilter(\Smarty\Filter\FilterInterface $filter) {
+ $this->outputFilters[] = $filter;
+ }
+
+ public function addCallableAsOutputFilter(callable $callable, ?string $name = null) {
+ if ($name === null) {
+ $this->outputFilters[] = new FilterPluginWrapper($callable);
+ } else {
+ $this->outputFilters[$name] = new FilterPluginWrapper($callable);
+ }
+ }
+
+ public function removeOutputFilter(string $name) {
+ unset($this->outputFilters[$name]);
+ }
+
+ public function loadPluginsFromDir(string $path) {
+
+ foreach([
+ 'function',
+ 'modifier',
+ 'block',
+ 'compiler',
+ 'prefilter',
+ 'postfilter',
+ 'outputfilter',
+ ] as $type) {
+ foreach (glob($path . $type . '.?*.php') as $filename) {
+ $pluginName = $this->getPluginNameFromFilename($filename);
+ if ($pluginName !== null) {
+ require_once $filename;
+ $functionOrClassName = 'smarty_' . $type . '_' . $pluginName;
+ if (function_exists($functionOrClassName) || class_exists($functionOrClassName)) {
+ $this->smarty->registerPlugin($type, $pluginName, $functionOrClassName, true, []);
+ }
+ }
+ }
+ }
+
+ $type = 'resource';
+ foreach (glob($path . $type . '.?*.php') as $filename) {
+ $pluginName = $this->getPluginNameFromFilename($filename);
+ if ($pluginName !== null) {
+ require_once $filename;
+ if (class_exists($className = 'smarty_' . $type . '_' . $pluginName)) {
+ $this->smarty->registerResource($pluginName, new $className());
+ }
+ }
+ }
+
+ $type = 'cacheresource';
+ foreach (glob($path . $type . '.?*.php') as $filename) {
+ $pluginName = $this->getPluginNameFromFilename($filename);
+ if ($pluginName !== null) {
+ require_once $filename;
+ if (class_exists($className = 'smarty_' . $type . '_' . $pluginName)) {
+ $this->smarty->registerCacheResource($pluginName, new $className());
+ }
+ }
+ }
+
+ }
+
+ /**
+ * @param $filename
+ *
+ * @return string|null
+ */
+ private function getPluginNameFromFilename($filename) {
+ if (!preg_match('/.*\.([a-z_A-Z0-9]+)\.php$/',$filename,$matches)) {
+ return null;
+ }
+ return $matches[1];
+ }
+
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/Extension/Base.php b/bundled-libs/smarty/smarty/src/Extension/Base.php
new file mode 100644
index 000000000..b37b6acd0
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Extension/Base.php
@@ -0,0 +1,41 @@
+callback = $callback;
+ $this->modifierName = $modifierName;
+ }
+
+ public function handle(...$params) {
+ try {
+ return ($this->callback)(...$params);
+ } catch (\ArgumentCountError $e) {
+ throw new Exception("Invalid number of arguments to modifier " . $this->modifierName);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/Extension/CoreExtension.php b/bundled-libs/smarty/smarty/src/Extension/CoreExtension.php
new file mode 100644
index 000000000..a7c658d34
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Extension/CoreExtension.php
@@ -0,0 +1,49 @@
+modifiers[$modifier])) {
+ return $this->modifiers[$modifier];
+ }
+
+ switch ($modifier) {
+ case 'cat': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\CatModifierCompiler(); break;
+ case 'count_characters': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\CountCharactersModifierCompiler(); break;
+ case 'count_paragraphs': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\CountParagraphsModifierCompiler(); break;
+ case 'count_sentences': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\CountSentencesModifierCompiler(); break;
+ case 'count_words': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\CountWordsModifierCompiler(); break;
+ case 'default': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\DefaultModifierCompiler(); break;
+ case 'empty': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\EmptyModifierCompiler(); break;
+ case 'escape': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\EscapeModifierCompiler(); break;
+ case 'from_charset': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\FromCharsetModifierCompiler(); break;
+ case 'indent': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\IndentModifierCompiler(); break;
+ case 'is_array': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\IsArrayModifierCompiler(); break;
+ case 'isset': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\IssetModifierCompiler(); break;
+ case 'json_encode': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\JsonEncodeModifierCompiler(); break;
+ case 'lower': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\LowerModifierCompiler(); break;
+ case 'nl2br': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\Nl2brModifierCompiler(); break;
+ case 'noprint': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\NoPrintModifierCompiler(); break;
+ case 'raw': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\RawModifierCompiler(); break;
+ case 'round': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\RoundModifierCompiler(); break;
+ case 'str_repeat': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\StrRepeatModifierCompiler(); break;
+ case 'string_format': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\StringFormatModifierCompiler(); break;
+ case 'strip': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\StripModifierCompiler(); break;
+ case 'strip_tags': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\StripTagsModifierCompiler(); break;
+ case 'strlen': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\StrlenModifierCompiler(); break;
+ case 'substr': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\SubstrModifierCompiler(); break;
+ case 'to_charset': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\ToCharsetModifierCompiler(); break;
+ case 'unescape': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\UnescapeModifierCompiler(); break;
+ case 'upper': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\UpperModifierCompiler(); break;
+ case 'wordwrap': $this->modifiers[$modifier] = new \Smarty\Compile\Modifier\WordWrapModifierCompiler(); break;
+ }
+
+ return $this->modifiers[$modifier] ?? null;
+ }
+
+ public function getModifierCallback(string $modifierName) {
+ switch ($modifierName) {
+ case 'capitalize': return [$this, 'smarty_modifier_capitalize'];
+ case 'count': return [$this, 'smarty_modifier_count'];
+ case 'date_format': return [$this, 'smarty_modifier_date_format'];
+ case 'debug_print_var': return [$this, 'smarty_modifier_debug_print_var'];
+ case 'escape': return [$this, 'smarty_modifier_escape'];
+ case 'explode': return [$this, 'smarty_modifier_explode'];
+ case 'implode': return [$this, 'smarty_modifier_implode'];
+ case 'in_array': return [$this, 'smarty_modifier_in_array'];
+ case 'join': return [$this, 'smarty_modifier_join'];
+ case 'mb_wordwrap': return [$this, 'smarty_modifier_mb_wordwrap'];
+ case 'number_format': return [$this, 'smarty_modifier_number_format'];
+ case 'regex_replace': return [$this, 'smarty_modifier_regex_replace'];
+ case 'replace': return [$this, 'smarty_modifier_replace'];
+ case 'spacify': return [$this, 'smarty_modifier_spacify'];
+ case 'split': return [$this, 'smarty_modifier_split'];
+ case 'truncate': return [$this, 'smarty_modifier_truncate'];
+ }
+ return null;
+ }
+
+ public function getFunctionHandler(string $functionName): ?\Smarty\FunctionHandler\FunctionHandlerInterface {
+
+ if (isset($this->functionHandlers[$functionName])) {
+ return $this->functionHandlers[$functionName];
+ }
+
+ switch ($functionName) {
+ case 'count': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\Count(); break;
+ case 'counter': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\Counter(); break;
+ case 'cycle': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\Cycle(); break;
+ case 'fetch': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\Fetch(); break;
+ case 'html_checkboxes': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\HtmlCheckboxes(); break;
+ case 'html_image': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\HtmlImage(); break;
+ case 'html_options': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\HtmlOptions(); break;
+ case 'html_radios': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\HtmlRadios(); break;
+ case 'html_select_date': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\HtmlSelectDate(); break;
+ case 'html_select_time': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\HtmlSelectTime(); break;
+ case 'html_table': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\HtmlTable(); break;
+ case 'mailto': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\Mailto(); break;
+ case 'math': $this->functionHandlers[$functionName] = new \Smarty\FunctionHandler\Math(); break;
+ }
+
+ return $this->functionHandlers[$functionName] ?? null;
+ }
+
+ public function getBlockHandler(string $blockTagName): ?\Smarty\BlockHandler\BlockHandlerInterface {
+
+ switch ($blockTagName) {
+ case 'textformat': $this->blockHandlers[$blockTagName] = new \Smarty\BlockHandler\TextFormat(); break;
+ }
+
+ return $this->blockHandlers[$blockTagName] ?? null;
+ }
+
+ /**
+ * Smarty spacify modifier plugin
+ * Type: modifier
+ * Name: spacify
+ * Purpose: add spaces between characters in a string
+ *
+ * @author Monte Ohrt
+ *
+ * @param string $string input string
+ * @param string $spacify_char string to insert between characters.
+ *
+ * @return string
+ */
+ public function smarty_modifier_spacify($string, $spacify_char = ' ')
+ {
+ // well… what about charsets besides latin and UTF-8?
+ return implode($spacify_char, preg_split('//' . \Smarty\Smarty::$_UTF8_MODIFIER, $string, -1, PREG_SPLIT_NO_EMPTY));
+ }
+
+ /**
+ * Smarty capitalize modifier plugin
+ * Type: modifier
+ * Name: capitalize
+ * Purpose: capitalize words in the string
+ * {@internal {$string|capitalize:true:true} is the fastest option for MBString enabled systems }}
+ *
+ * @param string $string string to capitalize
+ * @param boolean $uc_digits also capitalize "x123" to "X123"
+ * @param boolean $lc_rest capitalize first letters, lowercase all following letters "aAa" to "Aaa"
+ *
+ * @return string capitalized string
+ * @author Monte Ohrt
+ * @author Rodney Rehm
+ */
+ public function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = false)
+ {
+ $string = (string) $string;
+
+ if ($lc_rest) {
+ // uppercase (including hyphenated words)
+ $upper_string = mb_convert_case($string, MB_CASE_TITLE, \Smarty\Smarty::$_CHARSET);
+ } else {
+ // uppercase word breaks
+ $upper_string = preg_replace_callback(
+ "!(^|[^\p{L}'])([\p{Ll}])!S" . \Smarty\Smarty::$_UTF8_MODIFIER,
+ function ($matches) {
+ return stripslashes($matches[1]) .
+ mb_convert_case(stripslashes($matches[2]), MB_CASE_UPPER, \Smarty\Smarty::$_CHARSET);
+ },
+ $string
+ );
+ }
+ // check uc_digits case
+ if (!$uc_digits) {
+ if (preg_match_all(
+ "!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . \Smarty\Smarty::$_UTF8_MODIFIER,
+ $string,
+ $matches,
+ PREG_OFFSET_CAPTURE
+ )
+ ) {
+ foreach ($matches[ 1 ] as $match) {
+ $upper_string =
+ substr_replace(
+ $upper_string,
+ mb_strtolower($match[ 0 ], \Smarty\Smarty::$_CHARSET),
+ $match[ 1 ],
+ strlen($match[ 0 ])
+ );
+ }
+ }
+ }
+ $upper_string =
+ preg_replace_callback(
+ "!((^|\s)['\"])(\w)!" . \Smarty\Smarty::$_UTF8_MODIFIER,
+ function ($matches) {
+ return stripslashes(
+ $matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 3 ]),
+ MB_CASE_UPPER,
+ \Smarty\Smarty::$_CHARSET
+ );
+ },
+ $upper_string
+ );
+ return $upper_string;
+ }
+
+ /**
+ * Smarty count modifier plugin
+ * Type: modifier
+ * Name: count
+ * Purpose: counts all elements in an array or in a Countable object
+ * Input:
+ * - Countable|array: array or object to count
+ * - mode: int defaults to 0 for normal count mode, if set to 1 counts recursive
+ *
+ * @param mixed $arrayOrObject input array/object
+ * @param int $mode count mode
+ *
+ * @return int
+ */
+ public function smarty_modifier_count($arrayOrObject, $mode = 0) {
+ /*
+ * @see https://www.php.net/count
+ * > Prior to PHP 8.0.0, if the parameter was neither an array nor an object that implements the Countable interface,
+ * > 1 would be returned, unless value was null, in which case 0 would be returned.
+ */
+
+ if ($arrayOrObject instanceof \Countable || is_array($arrayOrObject)) {
+ return count($arrayOrObject, (int) $mode);
+ } elseif ($arrayOrObject === null) {
+ return 0;
+ }
+ return 1;
+ }
+
+ /**
+ * Smarty date_format modifier plugin
+ * Type: modifier
+ * Name: date_format
+ * Purpose: format datestamps via strftime
+ * Input:
+ * - string: input date string
+ * - format: strftime format for output
+ * - default_date: default date if $string is empty
+ *
+ * @author Monte Ohrt
+ *
+ * @param string $string input date string
+ * @param string $format strftime format for output
+ * @param string $default_date default date if $string is empty
+ * @param string $formatter either 'strftime' or 'auto'
+ *
+ * @return string |void
+ * @uses smarty_make_timestamp()
+ */
+ public function smarty_modifier_date_format($string, $format = null, $default_date = '', $formatter = 'auto')
+ {
+ if ($format === null) {
+ $format = \Smarty\Smarty::$_DATE_FORMAT;
+ }
+
+ if (!empty($string) && $string !== '0000-00-00' && $string !== '0000-00-00 00:00:00') {
+ $timestamp = smarty_make_timestamp($string);
+ } elseif (!empty($default_date)) {
+ $timestamp = smarty_make_timestamp($default_date);
+ } else {
+ return;
+ }
+ if ($formatter === 'strftime' || ($formatter === 'auto' && strpos($format, '%') !== false)) {
+ if (\Smarty\Smarty::$_IS_WINDOWS) {
+ $_win_from = array(
+ '%D',
+ '%h',
+ '%n',
+ '%r',
+ '%R',
+ '%t',
+ '%T'
+ );
+ $_win_to = array(
+ '%m/%d/%y',
+ '%b',
+ "\n",
+ '%I:%M:%S %p',
+ '%H:%M',
+ "\t",
+ '%H:%M:%S'
+ );
+ if (strpos($format, '%e') !== false) {
+ $_win_from[] = '%e';
+ $_win_to[] = sprintf('%\' 2d', date('j', $timestamp));
+ }
+ if (strpos($format, '%l') !== false) {
+ $_win_from[] = '%l';
+ $_win_to[] = sprintf('%\' 2d', date('h', $timestamp));
+ }
+ $format = str_replace($_win_from, $_win_to, $format);
+ }
+ // @ to suppress deprecation errors when running in PHP8.1 or higher.
+ return @strftime($format, $timestamp);
+ } else {
+ return date($format, $timestamp);
+ }
+ }
+
+ /**
+ * Smarty debug_print_var modifier plugin
+ * Type: modifier
+ * Name: debug_print_var
+ * Purpose: formats variable contents for display in the console
+ *
+ * @author Monte Ohrt
+ *
+ * @param array|object $var variable to be formatted
+ * @param int $max maximum recursion depth if $var is an array or object
+ * @param int $length maximum string length if $var is a string
+ * @param int $depth actual recursion depth
+ * @param array $objects processed objects in actual depth to prevent recursive object processing
+ *
+ * @return string
+ */
+ public function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, $depth = 0, $objects = array())
+ {
+ $_replace = array("\n" => '\n', "\r" => '\r', "\t" => '\t');
+ switch (gettype($var)) {
+ case 'array':
+ $results = 'Array (' . count($var) . ') ';
+ if ($depth === $max) {
+ break;
+ }
+ foreach ($var as $curr_key => $curr_val) {
+ $results .= ' ' . str_repeat(' ', $depth * 2) . '' . strtr($curr_key, $_replace) .
+ ' => ' .
+ $this->smarty_modifier_debug_print_var($curr_val, $max, $length, ++$depth, $objects);
+ $depth--;
+ }
+ break;
+ case 'object':
+ $object_vars = get_object_vars($var);
+ $results = '' . get_class($var) . ' Object (' . count($object_vars) . ') ';
+ if (in_array($var, $objects)) {
+ $results .= ' called recursive';
+ break;
+ }
+ if ($depth === $max) {
+ break;
+ }
+ $objects[] = $var;
+ foreach ($object_vars as $curr_key => $curr_val) {
+ $results .= ' ' . str_repeat(' ', $depth * 2) . ' ->' . strtr($curr_key, $_replace) .
+ ' = ' . $this->smarty_modifier_debug_print_var($curr_val, $max, $length, ++$depth, $objects);
+ $depth--;
+ }
+ break;
+ case 'boolean':
+ case 'NULL':
+ case 'resource':
+ if (true === $var) {
+ $results = 'true';
+ } elseif (false === $var) {
+ $results = 'false';
+ } elseif (null === $var) {
+ $results = 'null';
+ } else {
+ $results = htmlspecialchars((string)$var);
+ }
+ $results = '' . $results . ' ';
+ break;
+ case 'integer':
+ case 'float':
+ $results = htmlspecialchars((string)$var);
+ break;
+ case 'string':
+ $results = strtr($var, $_replace);
+ if (mb_strlen($var, \Smarty\Smarty::$_CHARSET) > $length) {
+ $results = mb_substr($var, 0, $length - 3, \Smarty\Smarty::$_CHARSET) . '...';
+ }
+ $results = htmlspecialchars('"' . $results . '"', ENT_QUOTES, \Smarty\Smarty::$_CHARSET);
+ break;
+ case 'unknown type':
+ default:
+ $results = strtr((string)$var, $_replace);
+ if (mb_strlen($results, \Smarty\Smarty::$_CHARSET) > $length) {
+ $results = mb_substr($results, 0, $length - 3, \Smarty\Smarty::$_CHARSET) . '...';
+ }
+ $results = htmlspecialchars($results, ENT_QUOTES, \Smarty\Smarty::$_CHARSET);
+ }
+ return $results;
+ }
+
+ /**
+ * Smarty escape modifier plugin
+ * Type: modifier
+ * Name: escape
+ * Purpose: escape string for output
+ *
+ * @author Monte Ohrt
+ *
+ * @param string $string input string
+ * @param string $esc_type escape type
+ * @param string $char_set character set, used for htmlspecialchars() or htmlentities()
+ * @param boolean $double_encode encode already encoded entitites again, used for htmlspecialchars() or htmlentities()
+ *
+ * @return string escaped input string
+ */
+ public function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true)
+ {
+ if (!$char_set) {
+ $char_set = \Smarty\Smarty::$_CHARSET;
+ }
+
+ $string = (string)$string;
+
+ switch ($esc_type) {
+ case 'html':
+ return htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode);
+ // no break
+ case 'htmlall':
+ $string = mb_convert_encoding($string, 'UTF-8', $char_set);
+ return htmlentities($string, ENT_QUOTES, 'UTF-8', $double_encode);
+ // no break
+ case 'url':
+ return rawurlencode($string);
+ case 'urlpathinfo':
+ return str_replace('%2F', '/', rawurlencode($string));
+ case 'quotes':
+ // escape unescaped single quotes
+ return preg_replace("%(?mb_to_unicode($string, \Smarty\Smarty::$_CHARSET) as $unicode) {
+ $return .= '' . strtoupper(dechex($unicode)) . ';';
+ }
+ return $return;
+ case 'decentity':
+ $return = '';
+ foreach ($this->mb_to_unicode($string, \Smarty\Smarty::$_CHARSET) as $unicode) {
+ $return .= '' . $unicode . ';';
+ }
+ return $return;
+ case 'javascript':
+ // escape quotes and backslashes, newlines, etc.
+ return strtr(
+ $string,
+ array(
+ '\\' => '\\\\',
+ "'" => "\\'",
+ '"' => '\\"',
+ "\r" => '\\r',
+ "\n" => '\\n',
+ '' => '<\/',
+ // see https://html.spec.whatwg.org/multipage/scripting.html#restrictions-for-contents-of-script-elements
+ '#is',
+ $source,
+ $matches,
+ PREG_OFFSET_CAPTURE | PREG_SET_ORDER
+ )
+ ) {
+ foreach ($matches as $match) {
+ $store[] = $match[ 0 ][ 0 ];
+ $_length = strlen($match[ 0 ][ 0 ]);
+ $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
+ $source = substr_replace($source, $replace, $match[ 0 ][ 1 ] - $_offset, $_length);
+ $_offset += $_length - strlen($replace);
+ $_store++;
+ }
+ }
+ // Strip all HTML-Comments
+ // yes, even the ones in ]*>)|(]*>)|(]*>.*? ]*>)#is',
+ $source,
+ $matches,
+ PREG_OFFSET_CAPTURE | PREG_SET_ORDER
+ )
+ ) {
+ foreach ($matches as $match) {
+ $store[] = $match[ 0 ][ 0 ];
+ $_length = strlen($match[ 0 ][ 0 ]);
+ $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
+ $source = substr_replace($source, $replace, $match[ 0 ][ 1 ] - $_offset, $_length);
+ $_offset += $_length - strlen($replace);
+ $_store++;
+ }
+ }
+ $expressions = array(// replace multiple spaces between tags by a single space
+ // can't remove them entirely, because that might break poorly implemented CSS display:inline-block elements
+ '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',
+ // remove spaces between attributes (but not in attribute values!)
+ '#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5',
+ // note: for some very weird reason trim() seems to remove spaces inside attributes.
+ // maybe a \0 byte or something is interfering?
+ '#^\s+<#Ss' => '<',
+ '#>\s+$#Ss' => '>',
+ );
+ $source = preg_replace(array_keys($expressions), array_values($expressions), $source);
+ // note: for some very weird reason trim() seems to remove spaces inside attributes.
+ // maybe a \0 byte or something is interfering?
+ // $source = trim( $source );
+ $_offset = 0;
+ if (preg_match_all('#@!@SMARTY:([0-9]+):SMARTY@!@#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
+ foreach ($matches as $match) {
+ $_length = strlen($match[ 0 ][ 0 ]);
+ $replace = $store[ $match[ 1 ][ 0 ] ];
+ $source = substr_replace($source, $replace, $match[ 0 ][ 1 ] + $_offset, $_length);
+ $_offset += strlen($replace) - $_length;
+ $_store++;
+ }
+ }
+ return $source;
+ }
+
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/BCPluginWrapper.php b/bundled-libs/smarty/smarty/src/FunctionHandler/BCPluginWrapper.php
new file mode 100644
index 000000000..04af07ed8
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/BCPluginWrapper.php
@@ -0,0 +1,21 @@
+callback = $callback;
+ $this->cacheable = $cacheable;
+ }
+
+ public function handle($params, Template $template) {
+ $func = $this->callback;
+ return $func($params, $template);
+ }
+
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/Base.php b/bundled-libs/smarty/smarty/src/FunctionHandler/Base.php
new file mode 100644
index 000000000..7cf196372
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/Base.php
@@ -0,0 +1,21 @@
+cacheable;
+ }
+
+ public function handle($params, Template $template) {
+ // TODO: Implement handle() method.
+ }
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/Count.php b/bundled-libs/smarty/smarty/src/FunctionHandler/Count.php
new file mode 100644
index 000000000..768d809b5
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/Count.php
@@ -0,0 +1,36 @@
+ 2) {
+ throw new Exception("Invalid number of arguments for count. count expects 1 or 2 parameters.");
+ }
+
+ $value = $params[0];
+
+ if ($value instanceof \Countable) {
+ return $value->count();
+ }
+
+ $mode = count($params) == 2 ? (int) $params[1] : COUNT_NORMAL;
+ return count((array) $value, $mode);
+ }
+
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/Counter.php b/bundled-libs/smarty/smarty/src/FunctionHandler/Counter.php
new file mode 100644
index 000000000..b447caf1f
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/Counter.php
@@ -0,0 +1,61 @@
+
+ */
+class Counter extends Base {
+
+ private $counters = [];
+
+ public function handle($params, Template $template) {
+ $name = (isset($params['name'])) ? $params['name'] : 'default';
+ if (!isset($this->counters[$name])) {
+ $this->counters[$name] = ['start' => 1, 'skip' => 1, 'direction' => 'up', 'count' => 1];
+ }
+ $counter =& $this->counters[$name];
+ if (isset($params['start'])) {
+ $counter['start'] = $counter['count'] = (int)$params['start'];
+ }
+ if (!empty($params['assign'])) {
+ $counter['assign'] = $params['assign'];
+ }
+ if (isset($counter['assign'])) {
+ $template->assign($counter['assign'], $counter['count']);
+ }
+ if (isset($params['print'])) {
+ $print = (bool)$params['print'];
+ } else {
+ $print = empty($counter['assign']);
+ }
+ if ($print) {
+ $retval = $counter['count'];
+ } else {
+ $retval = null;
+ }
+ if (isset($params['skip'])) {
+ $counter['skip'] = $params['skip'];
+ }
+ if (isset($params['direction'])) {
+ $counter['direction'] = $params['direction'];
+ }
+ if ($counter['direction'] === 'down') {
+ $counter['count'] -= $counter['skip'];
+ } else {
+ $counter['count'] += $counter['skip'];
+ }
+ return $retval;
+ }
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/Cycle.php b/bundled-libs/smarty/smarty/src/FunctionHandler/Cycle.php
new file mode 100644
index 000000000..909a688b6
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/Cycle.php
@@ -0,0 +1,90 @@
+
+ * @author credit to Mark Priatel
+ * @author credit to Gerard
+ * @author credit to Jason Sweat
+ * @version 1.3
+ *
+ * @param array $params parameters
+ * @param Template $template template object
+ *
+ * @return string|null
+ */
+class Cycle extends Base {
+
+ public function handle($params, Template $template) {
+ static $cycle_vars;
+ $name = (empty($params['name'])) ? 'default' : $params['name'];
+ $print = !(isset($params['print'])) || (bool)$params['print'];
+ $advance = !(isset($params['advance'])) || (bool)$params['advance'];
+ $reset = isset($params['reset']) && (bool)$params['reset'];
+ if (!isset($params['values'])) {
+ if (!isset($cycle_vars[$name]['values'])) {
+ trigger_error('cycle: missing \'values\' parameter');
+ return;
+ }
+ } else {
+ if (isset($cycle_vars[$name]['values']) && $cycle_vars[$name]['values'] !== $params['values']) {
+ $cycle_vars[$name]['index'] = 0;
+ }
+ $cycle_vars[$name]['values'] = $params['values'];
+ }
+ if (isset($params['delimiter'])) {
+ $cycle_vars[$name]['delimiter'] = $params['delimiter'];
+ } elseif (!isset($cycle_vars[$name]['delimiter'])) {
+ $cycle_vars[$name]['delimiter'] = ',';
+ }
+ if (is_array($cycle_vars[$name]['values'])) {
+ $cycle_array = $cycle_vars[$name]['values'];
+ } else {
+ $cycle_array = explode($cycle_vars[$name]['delimiter'], $cycle_vars[$name]['values']);
+ }
+ if (!isset($cycle_vars[$name]['index']) || $reset) {
+ $cycle_vars[$name]['index'] = 0;
+ }
+ if (isset($params['assign'])) {
+ $print = false;
+ $template->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]);
+ }
+ if ($print) {
+ $retval = $cycle_array[$cycle_vars[$name]['index']];
+ } else {
+ $retval = null;
+ }
+ if ($advance) {
+ if ($cycle_vars[$name]['index'] >= count($cycle_array) - 1) {
+ $cycle_vars[$name]['index'] = 0;
+ } else {
+ $cycle_vars[$name]['index']++;
+ }
+ }
+ return $retval;
+ }
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/Fetch.php b/bundled-libs/smarty/smarty/src/FunctionHandler/Fetch.php
new file mode 100644
index 000000000..d10ef668f
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/Fetch.php
@@ -0,0 +1,203 @@
+
+ *
+ * @param array $params parameters
+ * @param Template $template template object
+ *
+ * @throws Exception
+ * @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable
+ */
+class Fetch extends Base {
+
+ public function handle($params, Template $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->getSmarty()->security_policy)) {
+ if ($protocol) {
+ // remote resource (or php stream, …)
+ if (!$template->getSmarty()->security_policy->isTrustedUri($params['file'])) {
+ return;
+ }
+ } else {
+ // local file
+ if (!$template->getSmarty()->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::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 Exception("{fetch} cannot read resource '" . $params['file'] . "'");
+ }
+ }
+ if (!empty($params['assign'])) {
+ $template->assign($params['assign'], $content);
+ } else {
+ return $content;
+ }
+ }
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/FunctionHandlerInterface.php b/bundled-libs/smarty/smarty/src/FunctionHandler/FunctionHandlerInterface.php
new file mode 100644
index 000000000..ce77e13d2
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/FunctionHandlerInterface.php
@@ -0,0 +1,10 @@
+__toString();
+ } else {
+ trigger_error(
+ '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(
+ '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\Smarty::$_UTF8_MODIFIER,
+ '_',
+ $name . '_' . $value
+ )
+ );
+ $_output .= '';
+ } else {
+ $_output .= '';
+ }
+ }
+ $name = smarty_function_escape_special_chars($name);
+ $value = smarty_function_escape_special_chars($value);
+ if ($escape) {
+ $output = smarty_function_escape_special_chars($output);
+ }
+ $_output .= ' ' . $output;
+ if ($labels) {
+ $_output .= ' ';
+ }
+ $_output .= $separator;
+ return $_output;
+ }
+
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlCheckboxes.php b/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlCheckboxes.php
new file mode 100644
index 000000000..45ecc40a1
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlCheckboxes.php
@@ -0,0 +1,189 @@
+' output=$names}
+ * {html_checkboxes values=$ids checked=$checked separator=' ' output=$names}
+ *
+ * Params:
+ *
+ * - name (optional) - string default "checkbox"
+ * - values (required) - array
+ * - options (optional) - associative array
+ * - checked (optional) - array default not set
+ * - separator (optional) - ie or
+ * - output (optional) - the output next to each checkbox
+ * - assign (optional) - assign the output as an array to this variable
+ * - escape (optional) - escape the content (not value), defaults to true
+ *
+ * @author Christopher Kvarme
+ * @author credits to Monte Ohrt
+ * @version 1.0
+ *
+ * @param array $params parameters
+ * @param Template $template template object
+ *
+ * @return string
+ * @uses smarty_function_escape_special_chars()
+ * @throws \Smarty\Exception
+ */
+class HtmlCheckboxes extends HtmlBase {
+
+ public function handle($params, Template $template) {
+ $name = 'checkbox';
+ $values = null;
+ $options = null;
+ $selected = [];
+ $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 = [];
+ 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 'strict':
+ case 'assign':
+ break;
+ case 'disabled':
+ case 'readonly':
+ if (!empty($params['strict'])) {
+ if (!is_scalar($_val)) {
+ trigger_error(
+ "html_options: {$_key} attribute must be a scalar, only boolean true or string '{$_key}' will actually add the attribute",
+ E_USER_NOTICE
+ );
+ }
+ if ($_val === true || $_val === $_key) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
+ }
+ break;
+ }
+ // omit break; to fall through!
+ // no break
+ default:
+ if (!is_array($_val)) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
+ } else {
+ trigger_error("html_checkboxes: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
+ }
+ break;
+ }
+ }
+ if (!isset($options) && !isset($values)) {
+ return '';
+ } /* raise error here? */
+ $_html_result = [];
+ if (isset($options)) {
+ foreach ($options as $_key => $_val) {
+ $_html_result[] =
+ $this->getHtmlForInput(
+ 'checkbox',
+ $name,
+ $_key,
+ $_val,
+ true,
+ $selected,
+ $extra,
+ $separator,
+ $labels,
+ $label_ids,
+ $escape
+ );
+ }
+ } else {
+ foreach ($values as $_i => $_key) {
+ $_val = isset($output[$_i]) ? $output[$_i] : '';
+ $_html_result[] =
+ $this->getHtmlForInput(
+ 'checkbox',
+ $name,
+ $_key,
+ $_val,
+ true,
+ $selected,
+ $extra,
+ $separator,
+ $labels,
+ $label_ids,
+ $escape
+ );
+ }
+ }
+ if (!empty($params['assign'])) {
+ $template->assign($params['assign'], $_html_result);
+ } else {
+ return implode("\n", $_html_result);
+ }
+ }
+
+}
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlImage.php b/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlImage.php
new file mode 100644
index 000000000..9cb087456
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlImage.php
@@ -0,0 +1,149 @@
+
+ * Params:
+ *
+ * - file - (required) - file (and path) of image
+ * - height - (optional) - image height (default actual height)
+ * - width - (optional) - image width (default actual width)
+ * - basedir - (optional) - base directory for absolute paths, default is environment variable DOCUMENT_ROOT
+ * - path_prefix - prefix for path output (optional, default empty)
+ *
+ * @author Monte Ohrt
+ * @author credits to Duda
+ * @version 1.0
+ *
+ * @param array $params parameters
+ * @param Template $template template object
+ *
+ * @throws Exception
+ * @return string
+ * @uses smarty_function_escape_special_chars()
+ */
+class HtmlImage extends Base {
+
+ public function handle($params, Template $template) {
+ $alt = '';
+ $file = '';
+ $height = '';
+ $width = '';
+ $extra = '';
+ $prefix = '';
+ $suffix = '';
+ $path_prefix = '';
+ $basedir = $_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 Exception(
+ "html_image: extra attribute '{$_key}' cannot be an array",
+ E_USER_NOTICE
+ );
+ }
+ break;
+ case 'link':
+ case 'href':
+ $prefix = '';
+ $suffix = ' ';
+ break;
+ default:
+ if (!is_array($_val)) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
+ } else {
+ throw new Exception(
+ "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->getSmarty()->security_policy)) {
+ if ($protocol) {
+ // remote resource (or php stream, …)
+ if (!$template->getSmarty()->security_policy->isTrustedUri($params['file'])) {
+ return;
+ }
+ } else {
+ // local file
+ if (!$template->getSmarty()->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 . ' ' . $suffix;
+ }
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlOptions.php b/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlOptions.php
new file mode 100644
index 000000000..5346738b6
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlOptions.php
@@ -0,0 +1,223 @@
+ tags generated from
+ * the passed parameters
+ * Params:
+ *
+ * - name (optional) - string default "select"
+ * - values (required) - if no options supplied) - array
+ * - options (required) - if no values supplied) - associative array
+ * - selected (optional) - string default not set
+ * - output (required) - if not options supplied) - array
+ * - id (optional) - string default not set
+ * - class (optional) - string default not set
+ *
+ * @author Monte Ohrt
+ * @author Ralf Strehle (minor optimization)
+ *
+ * @param array $params parameters
+ *
+ * @param \Smarty\Template $template
+ *
+ * @return string
+ * @uses smarty_function_escape_special_chars()
+ * @throws \Smarty\Exception
+ */
+class HtmlOptions extends Base {
+
+ public function handle($params, Template $template) {
+ $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 = [];
+ foreach ($_val as $_sel) {
+ if (is_object($_sel)) {
+ if (method_exists($_sel, '__toString')) {
+ $_sel = smarty_function_escape_special_chars((string)$_sel->__toString());
+ } else {
+ trigger_error(
+ 'html_options: selected attribute contains an object of class \'' .
+ get_class($_sel) . '\' without __toString() method',
+ E_USER_NOTICE
+ );
+ continue;
+ }
+ } else {
+ $_sel = smarty_function_escape_special_chars((string)$_sel);
+ }
+ $selected[$_sel] = true;
+ }
+ } elseif (is_object($_val)) {
+ if (method_exists($_val, '__toString')) {
+ $selected = smarty_function_escape_special_chars((string)$_val->__toString());
+ } else {
+ trigger_error(
+ 'html_options: selected attribute is an object of class \'' . get_class($_val) .
+ '\' without __toString() method',
+ E_USER_NOTICE
+ );
+ }
+ } else {
+ $selected = smarty_function_escape_special_chars((string)$_val);
+ }
+ break;
+ case 'strict':
+ break;
+ case 'disabled':
+ case 'readonly':
+ if (!empty($params['strict'])) {
+ if (!is_scalar($_val)) {
+ trigger_error(
+ "html_options: {$_key} attribute must be a scalar, only boolean true or string '{$_key}' will actually add the attribute",
+ E_USER_NOTICE
+ );
+ }
+ if ($_val === true || $_val === $_key) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
+ }
+ break;
+ }
+ // omit break; to fall through!
+ // no break
+ default:
+ if (!is_array($_val)) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
+ } else {
+ trigger_error("html_options: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
+ }
+ break;
+ }
+ }
+ if (!isset($options) && !isset($values)) {
+ /* raise error here? */
+ return '';
+ }
+ $_html_result = '';
+ $_idx = 0;
+ if (isset($options)) {
+ foreach ($options as $_key => $_val) {
+ $_html_result .= $this->output($_key, $_val, $selected, $id, $class, $_idx);
+ }
+ } else {
+ foreach ($values as $_i => $_key) {
+ $_val = $output[$_i] ?? '';
+ $_html_result .= $this->output($_key, $_val, $selected, $id, $class, $_idx);
+ }
+ }
+ if (!empty($name)) {
+ $_html_class = !empty($class) ? ' class="' . $class . '"' : '';
+ $_html_id = !empty($id) ? ' id="' . $id . '"' : '';
+ $_html_result =
+ '' . "\n" . $_html_result .
+ ' ' . "\n";
+ }
+ return $_html_result;
+ }
+
+
+ /**
+ * @param $key
+ * @param $value
+ * @param $selected
+ * @param $id
+ * @param $class
+ * @param $idx
+ *
+ * @return string
+ */
+ private function output($key, $value, $selected, $id, $class, &$idx)
+ {
+ if (!is_array($value)) {
+ $_key = smarty_function_escape_special_chars($key);
+ $_html_result = '__toString());
+ } else {
+ trigger_error(
+ 'html_options: value is an object of class \'' . get_class($value) .
+ '\' without __toString() method',
+ E_USER_NOTICE
+ );
+ return '';
+ }
+ } else {
+ $value = smarty_function_escape_special_chars((string)$value);
+ }
+ $_html_result .= $_html_class . $_html_id . '>' . $value . ' ' . "\n";
+ $idx++;
+ } else {
+ $_idx = 0;
+ $_html_result =
+ $this->getHtmlForOptGroup(
+ $key,
+ $value,
+ $selected,
+ !empty($id) ? ($id . '-' . $idx) : null,
+ $class,
+ $_idx
+ );
+ $idx++;
+ }
+ return $_html_result;
+ }
+
+ /**
+ * @param $key
+ * @param $values
+ * @param $selected
+ * @param $id
+ * @param $class
+ * @param $idx
+ *
+ * @return string
+ */
+ private function getHtmlForOptGroup($key, $values, $selected, $id, $class, &$idx)
+ {
+ $optgroup_html = '' . "\n";
+ foreach ($values as $key => $value) {
+ $optgroup_html .= $this->output($key, $value, $selected, $id, $class, $idx);
+ }
+ $optgroup_html .= " \n";
+ return $optgroup_html;
+ }
+
+}
+
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlRadios.php b/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlRadios.php
new file mode 100644
index 000000000..544c5c7d4
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlRadios.php
@@ -0,0 +1,174 @@
+ or
+ * - output (optional) - the output next to each radio button
+ * - assign (optional) - assign the output as an array to this variable
+ * - escape (optional) - escape the content (not value), defaults to true
+ *
+ * Examples:
+ *
+ * {html_radios values=$ids output=$names}
+ * {html_radios values=$ids name='box' separator=' ' output=$names}
+ * {html_radios values=$ids checked=$checked separator=' ' output=$names}
+ *
+ * @author Christopher Kvarme
+ * @author credits to Monte Ohrt
+ * @version 1.0
+ *
+ * @param array $params parameters
+ * @param Template $template template object
+ *
+ * @return string
+ * @uses smarty_function_escape_special_chars()
+ * @throws \Smarty\Exception
+ */
+class HtmlRadios extends HtmlBase {
+
+ public function handle($params, Template $template) {
+ $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 'strict':
+ case 'assign':
+ break;
+ case 'disabled':
+ case 'readonly':
+ if (!empty($params['strict'])) {
+ if (!is_scalar($_val)) {
+ trigger_error(
+ "html_options: {$_key} attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute",
+ E_USER_NOTICE
+ );
+ }
+ if ($_val === true || $_val === $_key) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
+ }
+ break;
+ }
+ // omit break; to fall through!
+ // no break
+ default:
+ if (!is_array($_val)) {
+ $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
+ } else {
+ trigger_error("html_radios: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
+ }
+ break;
+ }
+ }
+ if (!isset($options) && !isset($values)) {
+ /* raise error here? */
+ return '';
+ }
+ $_html_result = [];
+ if (isset($options)) {
+ foreach ($options as $_key => $_val) {
+ $_html_result[] =
+ $this->getHtmlForInput(
+ 'radio',
+ $name,
+ $_key,
+ $_val,
+ false,
+ $selected,
+ $extra,
+ $separator,
+ $labels,
+ $label_ids,
+ $escape
+ );
+ }
+ } else {
+ foreach ($values as $_i => $_key) {
+ $_val = $output[$_i] ?? '';
+ $_html_result[] =
+ $this->getHtmlForInput(
+ 'radio',
+ $name,
+ $_key,
+ $_val,
+ false,
+ $selected,
+ $extra,
+ $separator,
+ $labels,
+ $label_ids,
+ $escape
+ );
+ }
+ }
+ if (!empty($params['assign'])) {
+ $template->assign($params['assign'], $_html_result);
+ } else {
+ return implode("\n", $_html_result);
+ }
+ }
+
+
+}
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlSelectDate.php b/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlSelectDate.php
new file mode 100644
index 000000000..a6acfb7bd
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlSelectDate.php
@@ -0,0 +1,381 @@
+
+ * @author Rodney Rehm
+ *
+ * @param array $params parameters
+ *
+ * @param \Smarty\Template $template
+ *
+ * @return string
+ * @throws \Smarty\Exception
+ */
+class HtmlSelectDate extends Base {
+
+ public function handle($params, Template $template) {
+ // 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 = [];
+ 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;
+ /* 's of the different tags.
+ If not set, uses default dropdown. */
+ $day_size = null;
+ $month_size = null;
+ $year_size = null;
+ /* Unparsed attributes common to *ALL* the / 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':
+ $$_key = $_value; // we'll handle conversion below
+ 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($time) && is_array($time)) {
+ if (isset($time[$prefix . 'Year'])) {
+ // $_REQUEST[$field_array] given
+ foreach ([
+ 'Y' => 'Year',
+ 'm' => 'Month',
+ 'd' => 'Day'
+ ] as $_elementKey => $_elementName) {
+ $_variableName = '_' . strtolower($_elementName);
+ $$_variableName =
+ $time[$prefix . $_elementName] ?? date($_elementKey);
+ }
+ } elseif (isset($time[$field_array][$prefix . 'Year'])) {
+ // $_REQUEST given
+ foreach ([
+ 'Y' => 'Year',
+ 'm' => 'Month',
+ 'd' => 'Day'
+ ] as $_elementKey => $_elementName) {
+ $_variableName = '_' . strtolower($_elementName);
+ $$_variableName = $time[$field_array][$prefix . $_elementName] ?? date($_elementKey);
+ }
+ } else {
+ // no date found, use NOW
+ [$_year, $_month, $_day] = explode('-', date('Y-m-d'));
+ }
+ } elseif (isset($time) && preg_match("/(\d*)-(\d*)-(\d*)/", $time, $matches)) {
+ $_year = $_month = $_day = null;
+ if ($matches[1] > '') {
+ $_year = (int)$matches[1];
+ }
+ if ($matches[2] > '') {
+ $_month = (int)$matches[2];
+ }
+ if ($matches[3] > '') {
+ $_day = (int)$matches[3];
+ }
+ } elseif ($time === null) {
+ if (array_key_exists('time', $params)) {
+ $_year = $_month = $_day = null;
+ } else {
+ [$_year, $_month, $_day] = explode('-', date('Y-m-d'));
+ }
+ } else {
+ $time = smarty_make_timestamp($time);
+ [$_year, $_month, $_day] = explode('-', date('Y-m-d', $time));
+ }
+
+ // make syntax "+N" or "-N" work with $start_year and $end_year
+ // Note preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match) is slower than trim+substr
+ foreach ([
+ '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 or
+ 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 =
+ ' ';
+ } else {
+ $_html_years = '' . $option_separator;
+ if (isset($year_empty) || isset($all_empty)) {
+ $_html_years .= '' . (isset($year_empty) ? $year_empty : $all_empty) . ' ' .
+ $option_separator;
+ }
+ $op = $start_year > $end_year ? -1 : 1;
+ for ($i = $start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) {
+ $_html_years .= '' . $i .
+ ' ' . $option_separator;
+ }
+ $_html_years .= ' ';
+ }
+ }
+ // generate month or
+ 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 = '' . $option_separator;
+ if (isset($month_empty) || isset($all_empty)) {
+ $_html_months .= '' . (isset($month_empty) ? $month_empty : $all_empty) . ' ' .
+ $option_separator;
+ }
+ for ($i = 1; $i <= 12; $i++) {
+ $_val = sprintf('%02d', $i);
+ $_text = isset($month_names) ? smarty_function_escape_special_chars($month_names[$i]) :
+ ($month_format === '%m' ? $_val : @strftime($month_format, $_month_timestamps[$i]));
+ $_value = $month_value_format === '%m' ? $_val : @strftime($month_value_format, $_month_timestamps[$i]);
+ $_html_months .= '' . $_text . ' ' . $option_separator;
+ }
+ $_html_months .= ' ';
+ }
+ // generate day or
+ 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 = '' . $option_separator;
+ if (isset($day_empty) || isset($all_empty)) {
+ $_html_days .= '' . (isset($day_empty) ? $day_empty : $all_empty) . ' ' .
+ $option_separator;
+ }
+ for ($i = 1; $i <= 31; $i++) {
+ $_val = sprintf('%02d', $i);
+ $_text = $day_format === '%02d' ? $_val : sprintf($day_format, $i);
+ $_value = $day_value_format === '%02d' ? $_val : sprintf($day_value_format, $i);
+ $_html_days .= '' .
+ $_text . ' ' . $option_separator;
+ }
+ $_html_days .= ' ';
+ }
+ // 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;
+ }
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlSelectTime.php b/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlSelectTime.php
new file mode 100644
index 000000000..40679c10c
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlSelectTime.php
@@ -0,0 +1,334 @@
+
+ * @author Monte Ohrt
+ *
+ * @param array $params parameters
+ *
+ * @param \Smarty\Template $template
+ *
+ * @return string
+ * @uses smarty_make_timestamp()
+ * @throws \Smarty\Exception
+ */
+class HtmlSelectTime extends Base {
+
+ public function handle($params, Template $template) {
+ $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 ([
+ 'H' => 'Hour',
+ 'i' => 'Minute',
+ 's' => 'Second'
+ ] as $_elementKey => $_elementName) {
+ $_variableName = '_' . strtolower($_elementName);
+ $$_variableName =
+ $params['time'][$prefix . $_elementName] ?? date($_elementKey);
+ }
+ $_meridian =
+ isset($params['time'][$prefix . 'Meridian']) ? (' ' . $params['time'][$prefix . 'Meridian']) :
+ '';
+ $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
+ [$_hour, $_minute, $_second] = $time = explode('-', date('H-i-s', $time));
+ } elseif (isset($params['time'][$field_array][$prefix . 'Hour'])) {
+ // $_REQUEST given
+ foreach ([
+ 'H' => 'Hour',
+ 'i' => 'Minute',
+ 's' => 'Second'
+ ] as $_elementKey => $_elementName) {
+ $_variableName = '_' . strtolower($_elementName);
+ $$_variableName = $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);
+ [$_hour, $_minute, $_second] = $time = explode('-', date('H-i-s', $time));
+ } else {
+ // no date found, use NOW
+ [$_year, $_month, $_day] = $time = explode('-', date('Y-m-d'));
+ }
+ } elseif ($time === null) {
+ if (array_key_exists('time', $params)) {
+ $_hour = $_minute = $_second = $time = null;
+ } else {
+ [$_hour, $_minute, $_second] = $time = explode('-', date('H-i-s'));
+ }
+ } else {
+ [$_hour, $_minute, $_second] = $time = explode('-', date('H-i-s', $time));
+ }
+ // generate hour
+ 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 = '' . $option_separator;
+ if (isset($hour_empty) || isset($all_empty)) {
+ $_html_hours .= '' . (isset($hour_empty) ? $hour_empty : $all_empty) . ' ' .
+ $option_separator;
+ }
+ $start = $use_24_hours ? 0 : 1;
+ $end = $use_24_hours ? 23 : 12;
+ for ($i = $start; $i <= $end; $i++) {
+ $_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 .= '' .
+ $_text . ' ' . $option_separator;
+ }
+ $_html_hours .= ' ';
+ }
+ // generate minute
+ 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 = '' . $option_separator;
+ if (isset($minute_empty) || isset($all_empty)) {
+ $_html_minutes .= '' . (isset($minute_empty) ? $minute_empty : $all_empty) . ' ' .
+ $option_separator;
+ }
+ $selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null;
+ for ($i = 0; $i <= 59; $i += $minute_interval) {
+ $_val = sprintf('%02d', $i);
+ $_text = $minute_format === '%02d' ? $_val : sprintf($minute_format, $i);
+ $_value = $minute_value_format === '%02d' ? $_val : sprintf($minute_value_format, $i);
+ $_html_minutes .= '' . $_text . ' ' . $option_separator;
+ }
+ $_html_minutes .= ' ';
+ }
+ // generate second
+ 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 = '' . $option_separator;
+ if (isset($second_empty) || isset($all_empty)) {
+ $_html_seconds .= '' . (isset($second_empty) ? $second_empty : $all_empty) . ' ' .
+ $option_separator;
+ }
+ $selected = $_second !== null ? ($_second - $_second % $second_interval) : null;
+ for ($i = 0; $i <= 59; $i += $second_interval) {
+ $_val = sprintf('%02d', $i);
+ $_text = $second_format === '%02d' ? $_val : sprintf($second_format, $i);
+ $_value = $second_value_format === '%02d' ? $_val : sprintf($second_value_format, $i);
+ $_html_seconds .= '' . $_text . ' ' . $option_separator;
+ }
+ $_html_seconds .= ' ';
+ }
+ // generate meridian
+ 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 = '' . $option_separator;
+ if (isset($meridian_empty) || isset($all_empty)) {
+ $_html_meridian .= '' . (isset($meridian_empty) ? $meridian_empty : $all_empty) .
+ ' ' . $option_separator;
+ }
+ $_html_meridian .= ' 0 && $_hour < 12 ? ' selected="selected"' : '') .
+ '>AM ' . $option_separator . 'PM ' . $option_separator .
+ ' ';
+ }
+ $_html = '';
+ foreach ([
+ '_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/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlTable.php b/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlTable.php
new file mode 100644
index 000000000..d5d147053
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/HtmlTable.php
@@ -0,0 +1,161 @@
+
+ * @version 1.1
+ *
+ * @author Monte Ohrt
+ * @author credit to Messju Mohr
+ */
+class HtmlTable extends Base {
+
+ public function handle($params, Template $template) {
+ $table_attr = 'border="1"';
+ $tr_attr = '';
+ $th_attr = '';
+ $td_attr = '';
+ $cols = $cols_count = 3;
+ $rows = 3;
+ $trailpad = ' ';
+ $vdir = 'down';
+ $hdir = 'right';
+ $inner = 'cols';
+ $caption = '';
+ $loop = null;
+ if (!isset($params['loop'])) {
+ trigger_error("html_table: missing 'loop' parameter", E_USER_WARNING);
+ return;
+ }
+ foreach ($params as $_key => $_value) {
+ switch ($_key) {
+ case 'loop':
+ $$_key = (array)$_value;
+ break;
+ case 'cols':
+ if (is_array($_value) && !empty($_value)) {
+ $cols = $_value;
+ $cols_count = count($_value);
+ } elseif (!is_numeric($_value) && is_string($_value) && !empty($_value)) {
+ $cols = explode(',', $_value);
+ $cols_count = count($cols);
+ } elseif (!empty($_value)) {
+ $cols_count = (int)$_value;
+ } else {
+ $cols_count = $cols;
+ }
+ break;
+ case 'rows':
+ $$_key = (int)$_value;
+ break;
+ case 'table_attr':
+ case 'trailpad':
+ case 'hdir':
+ case 'vdir':
+ case 'inner':
+ case 'caption':
+ $$_key = (string)$_value;
+ break;
+ case 'tr_attr':
+ case 'td_attr':
+ case 'th_attr':
+ $$_key = $_value;
+ break;
+ }
+ }
+ $loop_count = count($loop);
+ if (empty($params['rows'])) {
+ /* no rows specified */
+ $rows = ceil($loop_count / $cols_count);
+ } elseif (empty($params['cols'])) {
+ if (!empty($params['rows'])) {
+ /* no cols specified, but rows */
+ $cols_count = ceil($loop_count / $rows);
+ }
+ }
+ $output = "\n";
+ if (!empty($caption)) {
+ $output .= '' . $caption . " \n";
+ }
+ if (is_array($cols)) {
+ $cols = ($hdir === 'right') ? $cols : array_reverse($cols);
+ $output .= "\n";
+ for ($r = 0; $r < $cols_count; $r++) {
+ $output .= 'cycle('th', $th_attr, $r) . '>';
+ $output .= $cols[$r];
+ $output .= " \n";
+ }
+ $output .= " \n";
+ }
+ $output .= "\n";
+ for ($r = 0; $r < $rows; $r++) {
+ $output .= "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 .= "cycle('td', $td_attr, $c) . ">" . $loop[$x] . " \n";
+ } else {
+ $output .= "cycle('td', $td_attr, $c) . ">$trailpad \n";
+ }
+ }
+ $output .= " \n";
+ }
+ $output .= " \n";
+ $output .= "
\n";
+ return $output;
+ }
+
+ /**
+ * @param $name
+ * @param $var
+ * @param $no
+ *
+ * @return string
+ */
+ private function cycle($name, $var, $no) {
+ if (!is_array($var)) {
+ $ret = $var;
+ } else {
+ $ret = $var[$no % count($var)];
+ }
+ return ($ret) ? ' ' . $ret : '';
+ }
+}
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/Mailto.php b/bundled-libs/smarty/smarty/src/FunctionHandler/Mailto.php
new file mode 100644
index 000000000..eb35c48eb
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/Mailto.php
@@ -0,0 +1,141 @@
+
+ * @author credits to Jason Sweat (added cc, bcc and subject functionality)
+ *
+ * @param array $params parameters
+ *
+ * @return string
+ */
+class Mailto extends Base {
+
+ public function handle($params, Template $template) {
+ static $_allowed_encoding = [
+ '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.
+ $mail_parms = [];
+ foreach ($params as $var => $value) {
+ switch ($var) {
+ case 'cc':
+ case 'bcc':
+ case 'followupto':
+ if (!empty($value)) {
+ $mail_parms[] = $var . '=' . str_replace(['%40', '%2C'], ['@', ','], rawurlencode($value));
+ }
+ break;
+ case 'subject':
+ case 'newsgroups':
+ $mail_parms[] = $var . '=' . rawurlencode($value);
+ break;
+ case 'extra':
+ case 'text':
+ $$var = $value;
+ // no break
+ 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;
+ }
+
+ $string = '' . htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, \Smarty\Smarty::$_CHARSET) . ' ';
+
+ if ($encode === 'javascript') {
+ $js_encode = '';
+ for ($x = 0, $_length = strlen($string); $x < $_length; $x++) {
+ $js_encode .= '%' . bin2hex($string[$x]);
+ }
+ return '';
+ } elseif ($encode === 'javascript_charcode') {
+ for ($x = 0, $_length = strlen($string); $x < $_length; $x++) {
+ $ord[] = ord($string[$x]);
+ }
+ return '';
+ } elseif ($encode === 'hex') {
+ preg_match('!^(.*)(\?.*)$!', $address, $match);
+ if (!empty($match[2])) {
+ trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.", E_USER_WARNING);
+ return;
+ }
+ $address_encode = '';
+ for ($x = 0, $_length = strlen($address); $x < $_length; $x++) {
+ if (preg_match('!\w!' . \Smarty\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 .= '' . bin2hex($text[$x]) . ';';
+ }
+ $mailto = "mailto:";
+ return '' . $text_encode . ' ';
+ } else {
+ // no encoding
+ return $string;
+ }
+ }
+}
diff --git a/bundled-libs/smarty/smarty/src/FunctionHandler/Math.php b/bundled-libs/smarty/smarty/src/FunctionHandler/Math.php
new file mode 100644
index 000000000..23ef9253d
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/FunctionHandler/Math.php
@@ -0,0 +1,140 @@
+
+ *
+ * @param array $params parameters
+ * @param Template $template template object
+ *
+ * @return string|null
+ */
+class Math extends Base {
+
+ public function handle($params, Template $template) {
+ static $_allowed_funcs =
+ [
+ 'int' => true,
+ 'abs' => true,
+ 'ceil' => true,
+ 'acos' => true,
+ 'acosh' => true,
+ 'cos' => true,
+ 'cosh' => true,
+ 'deg2rad' => true,
+ 'rad2deg' => true,
+ 'exp' => true,
+ 'floor' => true,
+ 'log' => true,
+ 'log10' => true,
+ 'max' => true,
+ 'min' => true,
+ 'pi' => true,
+ 'pow' => true,
+ 'rand' => true,
+ 'round' => true,
+ 'asin' => true,
+ 'asinh' => true,
+ 'sin' => true,
+ 'sinh' => true,
+ 'sqrt' => true,
+ 'srand' => true,
+ 'atan' => true,
+ 'atanh' => true,
+ 'tan' => true,
+ 'tanh' => true
+ ];
+
+ // be sure equation parameter is present
+ if (empty($params['equation'])) {
+ trigger_error("math: missing equation parameter", E_USER_WARNING);
+ return;
+ }
+ $equation = $params['equation'];
+
+ // Remove whitespaces
+ $equation = preg_replace('/\s+/', '', $equation);
+
+ // Adapted from https://www.php.net/manual/en/function.eval.php#107377
+ $number = '-?(?:\d+(?:[,.]\d+)?|pi|π)'; // What is a number
+ $functionsOrVars = '((?:0x[a-fA-F0-9]+)|([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*))';
+ $operators = '[,+\/*\^%-]'; // Allowed math operators
+ $regexp = '/^((' . $number . '|' . $functionsOrVars . '|(' . $functionsOrVars . '\s*\((?1)*\)|\((?1)*\)))(?:' . $operators . '(?1))?)+$/';
+
+ if (!preg_match($regexp, $equation)) {
+ trigger_error("math: illegal characters", E_USER_WARNING);
+ return;
+ }
+
+ // make sure parenthesis are balanced
+ if (substr_count($equation, '(') !== substr_count($equation, ')')) {
+ trigger_error("math: unbalanced parenthesis", E_USER_WARNING);
+ return;
+ }
+
+ // disallow backticks
+ if (strpos($equation, '`') !== false) {
+ trigger_error("math: backtick character not allowed in equation", E_USER_WARNING);
+ return;
+ }
+
+ // also disallow dollar signs
+ if (strpos($equation, '$') !== false) {
+ trigger_error("math: dollar signs not allowed in equation", E_USER_WARNING);
+ return;
+ }
+ foreach ($params as $key => $val) {
+ if ($key !== 'equation' && $key !== 'format' && $key !== 'assign') {
+ // make sure value is not empty
+ if (strlen($val) === 0) {
+ trigger_error("math: parameter '{$key}' is empty", E_USER_WARNING);
+ return;
+ }
+ if (!is_numeric($val)) {
+ trigger_error("math: parameter '{$key}' is not numeric", E_USER_WARNING);
+ return;
+ }
+ }
+ }
+ // match all vars in equation, make sure all are passed
+ preg_match_all('!(?:0x[a-fA-F0-9]+)|([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)!', $equation, $match);
+ foreach ($match[1] as $curr_var) {
+ if ($curr_var && !isset($params[$curr_var]) && !isset($_allowed_funcs[$curr_var])) {
+ trigger_error(
+ "math: function call '{$curr_var}' not allowed, or missing parameter '{$curr_var}'",
+ E_USER_WARNING
+ );
+ return;
+ }
+ }
+ foreach ($params as $key => $val) {
+ if ($key !== 'equation' && $key !== 'format' && $key !== 'assign') {
+ $equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation);
+ }
+ }
+ $smarty_math_result = null;
+ eval("\$smarty_math_result = " . $equation . ";");
+
+ if (empty($params['format'])) {
+ if (empty($params['assign'])) {
+ return $smarty_math_result;
+ } else {
+ $template->assign($params['assign'], $smarty_math_result);
+ }
+ } else {
+ if (empty($params['assign'])) {
+ printf($params['format'], $smarty_math_result);
+ } else {
+ $template->assign($params['assign'], sprintf($params['format'], $smarty_math_result));
+ }
+ }
+ }
+}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_configfilelexer.php b/bundled-libs/smarty/smarty/src/Lexer/ConfigfileLexer.php
similarity index 57%
rename from bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_configfilelexer.php
rename to bundled-libs/smarty/smarty/src/Lexer/ConfigfileLexer.php
index afb3efcb0..d592c8238 100644
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_configfilelexer.php
+++ b/bundled-libs/smarty/smarty/src/Lexer/ConfigfileLexer.php
@@ -1,133 +1,105 @@
'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', 6 => 'TRIPPLE'
- );
-
- /**
- * token names
- *
- * @var array
- */
- public $smarty_token_names = array( // Text for parser error messages
- );
-
- /**
- * compiler object
- *
- * @var Smarty_Internal_Config_File_Compiler
- */
- private $compiler = null;
-
- /**
- * copy of config_booleanize
- *
- * @var bool
- */
- private $configBooleanize = false;
+ public $state_name = array(1 => 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', 6 => 'TRIPPLE');
/**
* storage for assembled token patterns
@@ -135,34 +107,33 @@ class Smarty_Internal_Configfilelexer
* @var string
*/
private $yy_global_pattern1 = null;
-
private $yy_global_pattern2 = null;
-
private $yy_global_pattern3 = null;
-
private $yy_global_pattern4 = null;
-
private $yy_global_pattern5 = null;
-
private $yy_global_pattern6 = null;
- private $_yy_state = 1;
-
- private $_yy_stack = array();
+ /**
+ * token names
+ *
+ * @var array
+ */
+ public $smarty_token_names = array( // Text for parser error messages
+ );
/**
* constructor
*
* @param string $data template source
- * @param Smarty_Internal_Config_File_Compiler $compiler
+ * @param \Smarty\Compiler\Configfile $compiler
*/
- public function __construct($data, Smarty_Internal_Config_File_Compiler $compiler)
+ public function __construct($data, \Smarty\Compiler\Configfile $compiler)
{
$this->data = $data . "\n"; //now all lines are \n-terminated
$this->dataLength = strlen($data);
$this->counter = 0;
if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) {
- $this->counter += strlen($match[ 0 ]);
+ $this->counter += strlen($match[0]);
}
$this->line = 1;
$this->compiler = $compiler;
@@ -170,10 +141,9 @@ public function __construct($data, Smarty_Internal_Config_File_Compiler $compile
$this->configBooleanize = $this->smarty->config_booleanize;
}
- public function replace($input)
- {
+ public function replace ($input) {
return $input;
- } // end function
+ }
public function PrintTrace()
{
@@ -181,6 +151,11 @@ public function PrintTrace()
$this->yyTracePrompt = ' ';
}
+
+
+ private $_yy_state = 1;
+ private $_yy_stack = array();
+
public function yylex()
{
return $this->{'yylex' . $this->_yy_state}();
@@ -189,85 +164,61 @@ public function yylex()
public function yypushstate($state)
{
if ($this->yyTraceFILE) {
- fprintf(
- $this->yyTraceFILE,
- "%sState push %s\n",
- $this->yyTracePrompt,
- isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state
- );
+ fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
}
array_push($this->_yy_stack, $this->_yy_state);
$this->_yy_state = $state;
if ($this->yyTraceFILE) {
- fprintf(
- $this->yyTraceFILE,
- "%snew State %s\n",
- $this->yyTracePrompt,
- isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state
- );
+ fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
}
}
public function yypopstate()
{
- if ($this->yyTraceFILE) {
- fprintf(
- $this->yyTraceFILE,
- "%sState pop %s\n",
- $this->yyTracePrompt,
- isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state
- );
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
}
- $this->_yy_state = array_pop($this->_yy_stack);
+ $this->_yy_state = array_pop($this->_yy_stack);
if ($this->yyTraceFILE) {
- fprintf(
- $this->yyTraceFILE,
- "%snew State %s\n",
- $this->yyTracePrompt,
- isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state
- );
+ fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
}
+
}
public function yybegin($state)
{
- $this->_yy_state = $state;
+ $this->_yy_state = $state;
if ($this->yyTraceFILE) {
- fprintf(
- $this->yyTraceFILE,
- "%sState set %s\n",
- $this->yyTracePrompt,
- isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state
- );
+ fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
}
}
+
+
+
public function yylex1()
{
if (!isset($this->yy_global_pattern1)) {
- $this->yy_global_pattern1 =
- $this->replace("/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/isS");
+ $this->yy_global_pattern1 = $this->replace("/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/isS");
}
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
}
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
+
do {
- if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, 0, $this->counter)) {
- if (!isset($yymatches[ 0 ][ 1 ])) {
- $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ if (preg_match($this->yy_global_pattern1,$this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][1])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
} else {
$yymatches = array_filter($yymatches);
}
if (empty($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr(
- $this->data,
- $this->counter,
- 5
- ) . '... state START');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state START');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@@ -285,89 +236,91 @@ public function yylex1()
} elseif ($r === false) {
$this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
// skip this token
continue;
- }
- } else {
+ } } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[ $this->counter ]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
- }
+ } // end function
+
+
+ const START = 1;
public function yy_r1_1()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART;
- $this->yypushstate(self::COMMENT);
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_COMMENTSTART;
+ $this->yypushstate(self::COMMENT);
+ }
public function yy_r1_2()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_OPENB;
- $this->yypushstate(self::SECTION);
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_OPENB;
+ $this->yypushstate(self::SECTION);
+ }
public function yy_r1_3()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB;
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_CLOSEB;
+ }
public function yy_r1_4()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL;
- $this->yypushstate(self::VALUE);
- } // end function
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_EQUAL;
+ $this->yypushstate(self::VALUE);
+ }
public function yy_r1_5()
{
- return false;
- }
+ return false;
+ }
public function yy_r1_6()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NEWLINE;
+ }
public function yy_r1_7()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_ID;
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_ID;
+ }
public function yy_r1_8()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_OTHER;
+
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_OTHER;
}
+
+
public function yylex2()
{
if (!isset($this->yy_global_pattern2)) {
- $this->yy_global_pattern2 =
- $this->replace("/\G([ \t\r]+)|\G(\\d+\\.\\d+(?=[ \t\r]*[\n#;]))|\G(\\d+(?=[ \t\r]*[\n#;]))|\G(\"\"\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#;]))|\G(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#;]))|\G([a-zA-Z]+(?=[ \t\r]*[\n#;]))|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS");
+ $this->yy_global_pattern2 = $this->replace("/\G([ \t\r]+)|\G(\\d+\\.\\d+(?=[ \t\r]*[\n#;]))|\G(\\d+(?=[ \t\r]*[\n#;]))|\G(\"\"\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#;]))|\G(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#;]))|\G([a-zA-Z]+(?=[ \t\r]*[\n#;]))|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS");
}
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
}
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
+
do {
- if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, 0, $this->counter)) {
- if (!isset($yymatches[ 0 ][ 1 ])) {
- $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ if (preg_match($this->yy_global_pattern2,$this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][1])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
} else {
$yymatches = array_filter($yymatches);
}
if (empty($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr(
- $this->data,
- $this->counter,
- 5
- ) . '... state VALUE');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state VALUE');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@@ -385,80 +338,84 @@ public function yylex2()
} elseif ($r === false) {
$this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
// skip this token
continue;
- }
- } else {
+ } } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[ $this->counter ]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
- }
+ } // end function
+
+
+ const VALUE = 2;
public function yy_r2_1()
{
- return false;
- }
+ return false;
+ }
public function yy_r2_2()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT;
- $this->yypopstate();
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_FLOAT;
+ $this->yypopstate();
+ }
public function yy_r2_3()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_INT;
- $this->yypopstate();
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_INT;
+ $this->yypopstate();
+ }
public function yy_r2_4()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES;
- $this->yypushstate(self::TRIPPLE);
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_TRIPPLE_QUOTES;
+ $this->yypushstate(self::TRIPPLE);
+ }
public function yy_r2_5()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING;
- $this->yypopstate();
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_SINGLE_QUOTED_STRING;
+ $this->yypopstate();
+ }
public function yy_r2_6()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING;
- $this->yypopstate();
- } // end function
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_DOUBLE_QUOTED_STRING;
+ $this->yypopstate();
+ }
public function yy_r2_7()
{
- if (!$this->configBooleanize ||
- !in_array(strtolower($this->value), array('true', 'false', 'on', 'off', 'yes', 'no'))) {
- $this->yypopstate();
- $this->yypushstate(self::NAKED_STRING_VALUE);
- return true; //reprocess in new state
- } else {
- $this->token = Smarty_Internal_Configfileparser::TPC_BOOL;
- $this->yypopstate();
- }
- }
- public function yy_r2_8()
- {
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ if (!$this->configBooleanize || !in_array(strtolower($this->value), array('true', 'false', 'on', 'off', 'yes', 'no')) ) {
+ $this->yypopstate();
+ $this->yypushstate(self::NAKED_STRING_VALUE);
+ return true; //reprocess in new state
+ } else {
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_BOOL;
$this->yypopstate();
}
+ }
+ public function yy_r2_8()
+ {
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
+ $this->yypopstate();
+ }
public function yy_r2_9()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- $this->value = '';
- $this->yypopstate();
- } // end function
+
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
+ $this->value = '';
+ $this->yypopstate();
+ }
+
+
public function yylex3()
{
@@ -468,23 +425,21 @@ public function yylex3()
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
}
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
+
do {
- if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, 0, $this->counter)) {
- if (!isset($yymatches[ 0 ][ 1 ])) {
- $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ if (preg_match($this->yy_global_pattern3,$this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][1])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
} else {
$yymatches = array_filter($yymatches);
}
if (empty($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr(
- $this->data,
- $this->counter,
- 5
- ) . '... state NAKED_STRING_VALUE');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state NAKED_STRING_VALUE');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@@ -502,26 +457,31 @@ public function yylex3()
} elseif ($r === false) {
$this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
// skip this token
continue;
- }
- } else {
+ } } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[ $this->counter ]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
- }
+ } // end function
+
+
+ const NAKED_STRING_VALUE = 3;
public function yy_r3_1()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- $this->yypopstate();
+
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
+ $this->yypopstate();
}
+
+
public function yylex4()
{
if (!isset($this->yy_global_pattern4)) {
@@ -530,23 +490,21 @@ public function yylex4()
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
}
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
+
do {
- if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, 0, $this->counter)) {
- if (!isset($yymatches[ 0 ][ 1 ])) {
- $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ if (preg_match($this->yy_global_pattern4,$this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][1])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
} else {
$yymatches = array_filter($yymatches);
}
if (empty($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr(
- $this->data,
- $this->counter,
- 5
- ) . '... state COMMENT');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state COMMENT');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@@ -564,36 +522,41 @@ public function yylex4()
} elseif ($r === false) {
$this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
// skip this token
continue;
- }
- } else {
+ } } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[ $this->counter ]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
- }
+ } // end function
+
+
+ const COMMENT = 4;
public function yy_r4_1()
{
- return false;
- }
+ return false;
+ }
public function yy_r4_2()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- } // end function
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
+ }
public function yy_r4_3()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
- $this->yypopstate();
+
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NEWLINE;
+ $this->yypopstate();
}
+
+
public function yylex5()
{
if (!isset($this->yy_global_pattern5)) {
@@ -602,23 +565,21 @@ public function yylex5()
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
}
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
+
do {
- if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, 0, $this->counter)) {
- if (!isset($yymatches[ 0 ][ 1 ])) {
- $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ if (preg_match($this->yy_global_pattern5,$this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][1])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
} else {
$yymatches = array_filter($yymatches);
}
if (empty($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr(
- $this->data,
- $this->counter,
- 5
- ) . '... state SECTION');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state SECTION');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@@ -636,30 +597,34 @@ public function yylex5()
} elseif ($r === false) {
$this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
// skip this token
continue;
- }
- } else {
+ } } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[ $this->counter ]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
- }
+ } // end function
+
+
+ const SECTION = 5;
public function yy_r5_1()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_DOT;
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_DOT;
+ }
public function yy_r5_2()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_SECTION;
- $this->yypopstate();
- } // end function
+
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_SECTION;
+ $this->yypopstate();
+ }
+
public function yylex6()
{
@@ -669,23 +634,21 @@ public function yylex6()
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
}
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
+
do {
- if (preg_match($this->yy_global_pattern6, $this->data, $yymatches, 0, $this->counter)) {
- if (!isset($yymatches[ 0 ][ 1 ])) {
- $yymatches = preg_grep("/(.|\s)+/", $yymatches);
+ if (preg_match($this->yy_global_pattern6,$this->data, $yymatches, 0, $this->counter)) {
+ if (!isset($yymatches[ 0 ][1])) {
+ $yymatches = preg_grep("/(.|\s)+/", $yymatches);
} else {
$yymatches = array_filter($yymatches);
}
if (empty($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
- ' an empty string. Input "' . substr(
- $this->data,
- $this->counter,
- 5
- ) . '... state TRIPPLE');
+ ' an empty string. Input "' . substr($this->data,
+ $this->counter, 5) . '... state TRIPPLE');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@@ -703,37 +666,42 @@ public function yylex6()
} elseif ($r === false) {
$this->counter += strlen($this->value);
$this->line += substr_count($this->value, "\n");
- if ($this->counter >= $this->dataLength) {
+ if ($this->counter >= $this->dataLength) {
return false; // end of input
}
// skip this token
continue;
- }
- } else {
+ } } else {
throw new Exception('Unexpected input at line' . $this->line .
- ': ' . $this->data[ $this->counter ]);
+ ': ' . $this->data[$this->counter]);
}
break;
} while (true);
- }
+ } // end function
+
+
+ const TRIPPLE = 6;
public function yy_r6_1()
{
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END;
- $this->yypopstate();
- $this->yypushstate(self::START);
- }
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_TRIPPLE_QUOTES_END;
+ $this->yypopstate();
+ $this->yypushstate(self::START);
+ }
public function yy_r6_2()
{
- $to = strlen($this->data);
- preg_match("/\"\"\"[ \t\r]*[\n#;]/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
- if (isset($match[ 0 ][ 1 ])) {
- $to = $match[ 0 ][ 1 ];
- } else {
- $this->compiler->trigger_config_file_error('missing or misspelled literal closing tag');
- }
- $this->value = substr($this->data, $this->counter, $to - $this->counter);
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT;
+
+ $to = strlen($this->data);
+ preg_match("/\"\"\"[ \t\r]*[\n#;]/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
+ if (isset($match[0][1])) {
+ $to = $match[0][1];
+ } else {
+ $this->compiler->trigger_config_file_error ('missing or misspelled literal closing tag');
+ }
+ $this->value = substr($this->data,$this->counter,$to-$this->counter);
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_TRIPPLE_TEXT;
}
+
+
}
diff --git a/bundled-libs/smarty/smarty/lexer/smarty_internal_configfilelexer.plex b/bundled-libs/smarty/smarty/src/Lexer/ConfigfileLexer.plex
similarity index 73%
rename from bundled-libs/smarty/smarty/lexer/smarty_internal_configfilelexer.plex
rename to bundled-libs/smarty/smarty/src/Lexer/ConfigfileLexer.plex
index 7a86fadc4..a895050c4 100644
--- a/bundled-libs/smarty/smarty/lexer/smarty_internal_configfilelexer.plex
+++ b/bundled-libs/smarty/smarty/src/Lexer/ConfigfileLexer.plex
@@ -1,6 +1,9 @@
data = $data . "\n"; //now all lines are \n-terminated
$this->dataLength = strlen($data);
@@ -179,31 +182,31 @@ naked_string = /[^\n]+?(?=[ \t\r]*\n)/
%statename START
commentstart {
- $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_COMMENTSTART;
$this->yypushstate(self::COMMENT);
}
openB {
- $this->token = Smarty_Internal_Configfileparser::TPC_OPENB;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_OPENB;
$this->yypushstate(self::SECTION);
}
closeB {
- $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_CLOSEB;
}
equal {
- $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_EQUAL;
$this->yypushstate(self::VALUE);
}
whitespace {
return false;
}
newline {
- $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NEWLINE;
}
id {
- $this->token = Smarty_Internal_Configfileparser::TPC_ID;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_ID;
}
text {
- $this->token = Smarty_Internal_Configfileparser::TPC_OTHER;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_OTHER;
}
*/
@@ -215,23 +218,23 @@ whitespace {
return false;
}
float {
- $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_FLOAT;
$this->yypopstate();
}
int {
- $this->token = Smarty_Internal_Configfileparser::TPC_INT;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_INT;
$this->yypopstate();
}
tripple_quotes {
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_TRIPPLE_QUOTES;
$this->yypushstate(self::TRIPPLE);
}
single_quoted_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_SINGLE_QUOTED_STRING;
$this->yypopstate();
}
double_quoted_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_DOUBLE_QUOTED_STRING;
$this->yypopstate();
}
maybe_bool {
@@ -240,16 +243,16 @@ maybe_bool {
$this->yypushstate(self::NAKED_STRING_VALUE);
return true; //reprocess in new state
} else {
- $this->token = Smarty_Internal_Configfileparser::TPC_BOOL;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_BOOL;
$this->yypopstate();
}
}
naked_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
$this->yypopstate();
}
newline {
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
$this->value = '';
$this->yypopstate();
}
@@ -260,7 +263,7 @@ newline {
%statename NAKED_STRING_VALUE
naked_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
$this->yypopstate();
}
@@ -273,10 +276,10 @@ whitespace {
return false;
}
naked_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NAKED_STRING;
}
newline {
- $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_NEWLINE;
$this->yypopstate();
}
@@ -286,10 +289,10 @@ newline {
%statename SECTION
dot {
- $this->token = Smarty_Internal_Configfileparser::TPC_DOT;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_DOT;
}
section {
- $this->token = Smarty_Internal_Configfileparser::TPC_SECTION;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_SECTION;
$this->yypopstate();
}
@@ -298,7 +301,7 @@ section {
%statename TRIPPLE
tripple_quotes_end {
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_TRIPPLE_QUOTES_END;
$this->yypopstate();
$this->yypushstate(self::START);
}
@@ -311,7 +314,7 @@ text {
$this->compiler->trigger_config_file_error ('missing or misspelled literal closing tag');
}
$this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT;
+ $this->token = \Smarty\Parser\ConfigfileParser::TPC_TRIPPLE_TEXT;
}
*/
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php b/bundled-libs/smarty/smarty/src/Lexer/TemplateLexer.php
similarity index 79%
rename from bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php
rename to bundled-libs/smarty/smarty/src/Lexer/TemplateLexer.php
index 5ca482058..2e7f33055 100644
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_templatelexer.php
+++ b/bundled-libs/smarty/smarty/src/Lexer/TemplateLexer.php
@@ -1,4 +1,7 @@
*/
-class Smarty_Internal_Templatelexer
+class TemplateLexer
{
/**
* Source
@@ -67,13 +70,6 @@ class Smarty_Internal_Templatelexer
*/
public $taglineno;
- /**
- * php code type
- *
- * @var string
- */
- public $phpType = '';
-
/**
* state number
*
@@ -91,7 +87,7 @@ class Smarty_Internal_Templatelexer
/**
* compiler object
*
- * @var Smarty_Internal_TemplateCompilerBase
+ * @var \Smarty\Compiler\Template
*/
public $compiler = null;
@@ -161,7 +157,6 @@ class Smarty_Internal_Templatelexer
'COMMENT' => 'comment',
'AS' => 'as',
'TO' => 'to',
- 'PHP' => '" '"<", "==" ... logical operator',
'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition',
'SCOND' => '"is even" ... if condition',
@@ -227,9 +222,9 @@ class Smarty_Internal_Templatelexer
* constructor
*
* @param string $source template source
- * @param Smarty_Internal_TemplateCompilerBase $compiler
+ * @param \Smarty\Compiler\Template $compiler
*/
- public function __construct($source, Smarty_Internal_TemplateCompilerBase $compiler)
+ public function __construct($source, \Smarty\Compiler\Template $compiler)
{
$this->data = $source;
$this->dataLength = strlen($this->data);
@@ -238,7 +233,7 @@ public function __construct($source, Smarty_Internal_TemplateCompilerBase $compi
$this->counter += strlen($match[0]);
}
$this->line = 1;
- $this->smarty = $compiler->template->smarty;
+ $this->smarty = $compiler->getTemplate()->getSmarty();
$this->compiler = $compiler;
$this->compiler->initDelimiterPreg();
$this->smarty_token_names['LDEL'] = $this->smarty->getLeftDelimiter();
@@ -380,7 +375,7 @@ public function yylex1()
public function yy_r1_1()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yy_r1_2()
{
@@ -398,18 +393,18 @@ public function yy_r1_2()
public function yy_r1_4()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yy_r1_6()
{
- $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERALSTART;
$this->yypushstate(self::LITERAL);
}
public function yy_r1_8()
{
- $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERALEND;
$this->yypushstate(self::LITERAL);
}
public function yy_r1_10()
@@ -430,14 +425,14 @@ public function yy_r1_12()
$to = $match[0][1];
}
$this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yylex2()
{
if (!isset($this->yy_global_pattern2)) {
- $this->yy_global_pattern2 = $this->replace("/\G((SMARTYldel)SMARTYal(if|elseif|else if|while)\\s+)|\G((SMARTYldel)SMARTYalfor\\s+)|\G((SMARTYldel)SMARTYalforeach(?![^\s]))|\G((SMARTYldel)SMARTYalsetfilter\\s+)|\G((SMARTYldel)SMARTYalmake_nocache\\s+)|\G((SMARTYldel)SMARTYal[0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[$]smarty\\.block\\.(child|parent)\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/][0-9]*[a-zA-Z_]\\w*\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/])|\G((SMARTYldel)SMARTYal)/isS");
+ $this->yy_global_pattern2 = $this->replace("/\G((SMARTYldel)SMARTYal(if|elseif|else if|while)\\s+)|\G((SMARTYldel)SMARTYalfor\\s+)|\G((SMARTYldel)SMARTYalforeach(?![^\s]))|\G((SMARTYldel)SMARTYalsetfilter\\s+)|\G((SMARTYldel)SMARTYal[0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[$]smarty\\.block\\.(child|parent)\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/][0-9]*[a-zA-Z_]\\w*\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/])|\G((SMARTYldel)SMARTYal)/isS");
}
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
@@ -493,84 +488,77 @@ public function yylex2()
public function yy_r2_1()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELIF;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
public function yy_r2_4()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELFOR;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
public function yy_r2_6()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELFOREACH;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
public function yy_r2_8()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELSETFILTER;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
public function yy_r2_10()
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_LDELMAKENOCACHE;
- $this->yybegin(self::TAGBODY);
- $this->taglineno = $this->line;
- }
- public function yy_r2_12()
{
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SIMPLETAG;
$this->taglineno = $this->line;
}
- public function yy_r2_15()
+ public function yy_r2_13()
{
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SMARTYBLOCKCHILDPARENT;
$this->taglineno = $this->line;
}
- public function yy_r2_18()
+ public function yy_r2_16()
{
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_CLOSETAG;
+ $this->token = \Smarty\Parser\TemplateParser::TP_CLOSETAG;
$this->taglineno = $this->line;
}
- public function yy_r2_20()
+ public function yy_r2_18()
{
if ($this->_yy_stack[count($this->_yy_stack)-1] === self::TEXT) {
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_SIMPELOUTPUT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SIMPELOUTPUT;
$this->taglineno = $this->line;
} else {
$this->value = $this->smarty->getLeftDelimiter();
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDEL;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
}
- public function yy_r2_23()
+ public function yy_r2_21()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELSLASH;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
- public function yy_r2_25()
+ public function yy_r2_23()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDEL;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
@@ -579,7 +567,7 @@ public function yy_r2_25()
public function yylex3()
{
if (!isset($this->yy_global_pattern3)) {
- $this->yy_global_pattern3 = $this->replace("/\G(\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*([!=][=]{1,2}|[<][=>]?|[>][=]?|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even|div)\\s+by\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G([!]\\s*|not\\s+)|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G(array\\s*[(]\\s*)|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|][@]?)|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS");
+ $this->yy_global_pattern3 = $this->replace("/\G(\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+(not\\s+)?in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*([!=][=]{1,2}|[<][=>]?|[>][=]?|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even|div)\\s+by\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G([!]\\s*|not\\s+)|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G(array\\s*[(]\\s*)|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|][@]?)|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS");
}
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
@@ -635,7 +623,7 @@ public function yylex3()
public function yy_r3_1()
{
- $this->token = Smarty_Internal_Templateparser::TP_RDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_RDEL;
$this->yypopstate();
}
public function yy_r3_2()
@@ -647,227 +635,227 @@ public function yy_r3_2()
public function yy_r3_4()
{
- $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_QUOTE;
$this->yypushstate(self::DOUBLEQUOTEDSTRING);
$this->compiler->enterDoubleQuote();
}
public function yy_r3_5()
{
- $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SINGLEQUOTESTRING;
}
public function yy_r3_6()
{
- $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOLLARID;
}
public function yy_r3_7()
{
- $this->token = Smarty_Internal_Templateparser::TP_DOLLAR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOLLAR;
}
public function yy_r3_8()
{
- $this->token = Smarty_Internal_Templateparser::TP_ISIN;
- }
- public function yy_r3_9()
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_AS;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ISIN;
}
public function yy_r3_10()
{
- $this->token = Smarty_Internal_Templateparser::TP_TO;
+ $this->token = \Smarty\Parser\TemplateParser::TP_AS;
}
public function yy_r3_11()
{
- $this->token = Smarty_Internal_Templateparser::TP_STEP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TO;
}
public function yy_r3_12()
{
- $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF;
+ $this->token = \Smarty\Parser\TemplateParser::TP_STEP;
}
public function yy_r3_13()
{
- $this->token = Smarty_Internal_Templateparser::TP_LOGOP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_INSTANCEOF;
}
- public function yy_r3_15()
+ public function yy_r3_14()
{
- $this->token = Smarty_Internal_Templateparser::TP_SLOGOP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LOGOP;
}
- public function yy_r3_17()
+ public function yy_r3_16()
{
- $this->token = Smarty_Internal_Templateparser::TP_TLOGOP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SLOGOP;
}
- public function yy_r3_20()
+ public function yy_r3_18()
{
- $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TLOGOP;
}
- public function yy_r3_23()
+ public function yy_r3_21()
{
- $this->token = Smarty_Internal_Templateparser::TP_NOT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SINGLECOND;
}
public function yy_r3_24()
{
- $this->token = Smarty_Internal_Templateparser::TP_TYPECAST;
+ $this->token = \Smarty\Parser\TemplateParser::TP_NOT;
}
- public function yy_r3_28()
+ public function yy_r3_25()
{
- $this->token = Smarty_Internal_Templateparser::TP_OPENP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TYPECAST;
}
public function yy_r3_29()
{
- $this->token = Smarty_Internal_Templateparser::TP_CLOSEP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_OPENP;
}
public function yy_r3_30()
{
- $this->token = Smarty_Internal_Templateparser::TP_OPENB;
+ $this->token = \Smarty\Parser\TemplateParser::TP_CLOSEP;
}
public function yy_r3_31()
{
- $this->token = Smarty_Internal_Templateparser::TP_CLOSEB;
+ $this->token = \Smarty\Parser\TemplateParser::TP_OPENB;
}
public function yy_r3_32()
{
- $this->token = Smarty_Internal_Templateparser::TP_PTR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_CLOSEB;
}
public function yy_r3_33()
{
- $this->token = Smarty_Internal_Templateparser::TP_APTR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_PTR;
}
public function yy_r3_34()
{
- $this->token = Smarty_Internal_Templateparser::TP_EQUAL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_APTR;
}
public function yy_r3_35()
{
- $this->token = Smarty_Internal_Templateparser::TP_INCDEC;
+ $this->token = \Smarty\Parser\TemplateParser::TP_EQUAL;
}
- public function yy_r3_37()
+ public function yy_r3_36()
{
- $this->token = Smarty_Internal_Templateparser::TP_UNIMATH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_INCDEC;
}
- public function yy_r3_39()
+ public function yy_r3_38()
{
- $this->token = Smarty_Internal_Templateparser::TP_MATH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_UNIMATH;
}
- public function yy_r3_41()
+ public function yy_r3_40()
{
- $this->token = Smarty_Internal_Templateparser::TP_AT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_MATH;
}
public function yy_r3_42()
{
- $this->token = Smarty_Internal_Templateparser::TP_ARRAYOPEN;
+ $this->token = \Smarty\Parser\TemplateParser::TP_AT;
}
public function yy_r3_43()
{
- $this->token = Smarty_Internal_Templateparser::TP_HATCH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ARRAYOPEN;
}
public function yy_r3_44()
+ {
+
+ $this->token = \Smarty\Parser\TemplateParser::TP_HATCH;
+ }
+ public function yy_r3_45()
{
// resolve conflicts with shorttag and right_delimiter starting with '='
if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->compiler->getRdelLength()) === $this->smarty->getRightDelimiter()) {
preg_match('/\s+/',$this->value,$match);
$this->value = $match[0];
- $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SPACE;
} else {
- $this->token = Smarty_Internal_Templateparser::TP_ATTR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ATTR;
}
}
- public function yy_r3_45()
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE;
- }
- public function yy_r3_48()
+ public function yy_r3_46()
{
- $this->token = Smarty_Internal_Templateparser::TP_ID;
+ $this->token = \Smarty\Parser\TemplateParser::TP_NAMESPACE;
}
public function yy_r3_49()
{
- $this->token = Smarty_Internal_Templateparser::TP_INTEGER;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ID;
}
public function yy_r3_50()
{
- $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
- $this->yypopstate();
+ $this->token = \Smarty\Parser\TemplateParser::TP_INTEGER;
}
public function yy_r3_51()
{
- $this->token = Smarty_Internal_Templateparser::TP_VERT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_BACKTICK;
+ $this->yypopstate();
}
public function yy_r3_52()
{
- $this->token = Smarty_Internal_Templateparser::TP_DOT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_VERT;
}
public function yy_r3_53()
{
- $this->token = Smarty_Internal_Templateparser::TP_COMMA;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOT;
}
public function yy_r3_54()
{
- $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
+ $this->token = \Smarty\Parser\TemplateParser::TP_COMMA;
}
public function yy_r3_55()
{
- $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SEMICOLON;
}
public function yy_r3_56()
{
- $this->token = Smarty_Internal_Templateparser::TP_COLON;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOUBLECOLON;
}
public function yy_r3_57()
{
- $this->token = Smarty_Internal_Templateparser::TP_QMARK;
+ $this->token = \Smarty\Parser\TemplateParser::TP_COLON;
}
public function yy_r3_58()
{
- $this->token = Smarty_Internal_Templateparser::TP_HEX;
+ $this->token = \Smarty\Parser\TemplateParser::TP_QMARK;
}
public function yy_r3_59()
{
- $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_HEX;
}
public function yy_r3_60()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SPACE;
+ }
+ public function yy_r3_61()
+ {
+
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
@@ -932,16 +920,16 @@ public function yy_r4_1()
{
$this->literal_cnt++;
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERAL;
}
public function yy_r4_3()
{
if ($this->literal_cnt) {
$this->literal_cnt--;
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERAL;
} else {
- $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERALEND;
$this->yypopstate();
}
}
@@ -959,7 +947,7 @@ public function yy_r4_5()
$this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
}
$this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERAL;
}
@@ -1022,17 +1010,17 @@ public function yylex5()
public function yy_r5_1()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yy_r5_3()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yy_r5_5()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yy_r5_7()
{
@@ -1049,20 +1037,20 @@ public function yy_r5_9()
public function yy_r5_11()
{
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDEL;
$this->taglineno = $this->line;
$this->yypushstate(self::TAGBODY);
}
public function yy_r5_13()
{
- $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_QUOTE;
$this->yypopstate();
}
public function yy_r5_14()
{
- $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+ $this->token = \Smarty\Parser\TemplateParser::TP_BACKTICK;
$this->value = substr($this->value,0,-1);
$this->yypushstate(self::TAGBODY);
$this->taglineno = $this->line;
@@ -1070,24 +1058,24 @@ public function yy_r5_14()
public function yy_r5_15()
{
- $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOLLARID;
}
public function yy_r5_16()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yy_r5_17()
{
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
public function yy_r5_22()
{
$to = $this->dataLength;
$this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
}
diff --git a/bundled-libs/smarty/smarty/lexer/smarty_internal_templatelexer.plex b/bundled-libs/smarty/smarty/src/Lexer/TemplateLexer.plex
similarity index 72%
rename from bundled-libs/smarty/smarty/lexer/smarty_internal_templatelexer.plex
rename to bundled-libs/smarty/smarty/src/Lexer/TemplateLexer.plex
index 2cd46df97..282a99cf9 100644
--- a/bundled-libs/smarty/smarty/lexer/smarty_internal_templatelexer.plex
+++ b/bundled-libs/smarty/smarty/src/Lexer/TemplateLexer.plex
@@ -1,4 +1,7 @@
*/
-class Smarty_Internal_Templatelexer
+class TemplateLexer
{
/**
* Source
@@ -67,13 +70,6 @@ class Smarty_Internal_Templatelexer
*/
public $taglineno;
- /**
- * php code type
- *
- * @var string
- */
- public $phpType = '';
-
/**
* state number
*
@@ -91,7 +87,7 @@ class Smarty_Internal_Templatelexer
/**
* compiler object
*
- * @var Smarty_Internal_TemplateCompilerBase
+ * @var \Smarty\Compiler\Template
*/
public $compiler = null;
@@ -226,9 +222,9 @@ class Smarty_Internal_Templatelexer
* constructor
*
* @param string $source template source
- * @param Smarty_Internal_TemplateCompilerBase $compiler
+ * @param \Smarty\Compiler\Template $compiler
*/
- public function __construct($source, Smarty_Internal_TemplateCompilerBase $compiler)
+ public function __construct($source, \Smarty\Compiler\Template $compiler)
{
$this->data = $source;
$this->dataLength = strlen($this->data);
@@ -237,7 +233,7 @@ class Smarty_Internal_Templatelexer
$this->counter += strlen($match[0]);
}
$this->line = 1;
- $this->smarty = $compiler->template->smarty;
+ $this->smarty = $compiler->getTemplate()->getSmarty();
$this->compiler = $compiler;
$this->compiler->initDelimiterPreg();
$this->smarty_token_names['LDEL'] = $this->smarty->getLeftDelimiter();
@@ -328,13 +324,12 @@ class Smarty_Internal_Templatelexer
slop = ~\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\s+~
tlop = ~\s+is\s+(not\s+)?(odd|even|div)\s+by\s+~
scond = ~\s+is\s+(not\s+)?(odd|even)~
- isin = ~\s+is\s+in\s+~
+ isin = ~\s+is\s+(not\s+)?in\s+~
as = ~\s+as\s+~
to = ~\s+to\s+~
step = ~\s+step\s+~
if = ~(if|elseif|else if|while)\s+~
for = ~for\s+~
- makenocache = ~make_nocache\s+~
array = ~array~
foreach = ~foreach(?![^\s])~
setfilter = ~setfilter\s+~
@@ -346,7 +341,7 @@ class Smarty_Internal_Templatelexer
/*!lex2php
%statename TEXT
emptyjava {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
comment {
$to = $this->dataLength;
@@ -360,14 +355,14 @@ class Smarty_Internal_Templatelexer
return false;
}
userliteral {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
ldel literal rdel {
- $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERALSTART;
$this->yypushstate(self::LITERAL);
}
ldel slash literal rdel {
- $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERALEND;
$this->yypushstate(self::LITERAL);
}
ldel {
@@ -384,70 +379,65 @@ class Smarty_Internal_Templatelexer
$to = $match[0][1];
}
$this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
*/
/*!lex2php
%statename TAG
ldel if {
- $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELIF;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
ldel for {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELFOR;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
ldel foreach {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELFOREACH;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
ldel setfilter {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER;
- $this->yybegin(self::TAGBODY);
- $this->taglineno = $this->line;
- }
- ldel makenocache {
- $this->token = Smarty_Internal_Templateparser::TP_LDELMAKENOCACHE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELSETFILTER;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
ldel id nocacherdel {
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SIMPLETAG;
$this->taglineno = $this->line;
}
ldel smartyblockchildparent rdel {
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SMARTYBLOCKCHILDPARENT;
$this->taglineno = $this->line;
}
ldel slash id rdel {
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_CLOSETAG;
+ $this->token = \Smarty\Parser\TemplateParser::TP_CLOSETAG;
$this->taglineno = $this->line;
}
ldel dollar id nocacherdel {
if ($this->_yy_stack[count($this->_yy_stack)-1] === self::TEXT) {
$this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_SIMPELOUTPUT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SIMPELOUTPUT;
$this->taglineno = $this->line;
} else {
$this->value = $this->smarty->getLeftDelimiter();
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDEL;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
}
ldel slash {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDELSLASH;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
ldel {
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDEL;
$this->yybegin(self::TAGBODY);
$this->taglineno = $this->line;
}
@@ -455,7 +445,7 @@ class Smarty_Internal_Templatelexer
/*!lex2php
%statename TAGBODY
rdel {
- $this->token = Smarty_Internal_Templateparser::TP_RDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_RDEL;
$this->yypopstate();
}
ldel {
@@ -463,143 +453,143 @@ class Smarty_Internal_Templatelexer
return true;
}
double_quote {
- $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_QUOTE;
$this->yypushstate(self::DOUBLEQUOTEDSTRING);
$this->compiler->enterDoubleQuote();
}
singlequotestring {
- $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SINGLEQUOTESTRING;
}
dollar id {
- $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOLLARID;
}
dollar {
- $this->token = Smarty_Internal_Templateparser::TP_DOLLAR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOLLAR;
}
isin {
- $this->token = Smarty_Internal_Templateparser::TP_ISIN;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ISIN;
}
as {
- $this->token = Smarty_Internal_Templateparser::TP_AS;
+ $this->token = \Smarty\Parser\TemplateParser::TP_AS;
}
to {
- $this->token = Smarty_Internal_Templateparser::TP_TO;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TO;
}
step {
- $this->token = Smarty_Internal_Templateparser::TP_STEP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_STEP;
}
instanceof {
- $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF;
+ $this->token = \Smarty\Parser\TemplateParser::TP_INSTANCEOF;
}
lop {
- $this->token = Smarty_Internal_Templateparser::TP_LOGOP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LOGOP;
}
slop {
- $this->token = Smarty_Internal_Templateparser::TP_SLOGOP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SLOGOP;
}
tlop {
- $this->token = Smarty_Internal_Templateparser::TP_TLOGOP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TLOGOP;
}
scond {
- $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SINGLECOND;
}
not{
- $this->token = Smarty_Internal_Templateparser::TP_NOT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_NOT;
}
typecast {
- $this->token = Smarty_Internal_Templateparser::TP_TYPECAST;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TYPECAST;
}
openP {
- $this->token = Smarty_Internal_Templateparser::TP_OPENP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_OPENP;
}
closeP {
- $this->token = Smarty_Internal_Templateparser::TP_CLOSEP;
+ $this->token = \Smarty\Parser\TemplateParser::TP_CLOSEP;
}
openB {
- $this->token = Smarty_Internal_Templateparser::TP_OPENB;
+ $this->token = \Smarty\Parser\TemplateParser::TP_OPENB;
}
closeB {
- $this->token = Smarty_Internal_Templateparser::TP_CLOSEB;
+ $this->token = \Smarty\Parser\TemplateParser::TP_CLOSEB;
}
ptr {
- $this->token = Smarty_Internal_Templateparser::TP_PTR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_PTR;
}
aptr {
- $this->token = Smarty_Internal_Templateparser::TP_APTR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_APTR;
}
equal {
- $this->token = Smarty_Internal_Templateparser::TP_EQUAL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_EQUAL;
}
incdec {
- $this->token = Smarty_Internal_Templateparser::TP_INCDEC;
+ $this->token = \Smarty\Parser\TemplateParser::TP_INCDEC;
}
unimath {
- $this->token = Smarty_Internal_Templateparser::TP_UNIMATH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_UNIMATH;
}
math {
- $this->token = Smarty_Internal_Templateparser::TP_MATH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_MATH;
}
at {
- $this->token = Smarty_Internal_Templateparser::TP_AT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_AT;
}
array openP {
- $this->token = Smarty_Internal_Templateparser::TP_ARRAYOPEN;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ARRAYOPEN;
}
hatch {
- $this->token = Smarty_Internal_Templateparser::TP_HATCH;
+ $this->token = \Smarty\Parser\TemplateParser::TP_HATCH;
}
attr {
// resolve conflicts with shorttag and right_delimiter starting with '='
if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->compiler->getRdelLength()) === $this->smarty->getRightDelimiter()) {
preg_match('/\s+/',$this->value,$match);
$this->value = $match[0];
- $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SPACE;
} else {
- $this->token = Smarty_Internal_Templateparser::TP_ATTR;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ATTR;
}
}
namespace {
- $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_NAMESPACE;
}
id {
- $this->token = Smarty_Internal_Templateparser::TP_ID;
+ $this->token = \Smarty\Parser\TemplateParser::TP_ID;
}
integer {
- $this->token = Smarty_Internal_Templateparser::TP_INTEGER;
+ $this->token = \Smarty\Parser\TemplateParser::TP_INTEGER;
}
backtick {
- $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+ $this->token = \Smarty\Parser\TemplateParser::TP_BACKTICK;
$this->yypopstate();
}
vert {
- $this->token = Smarty_Internal_Templateparser::TP_VERT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_VERT;
}
dot {
- $this->token = Smarty_Internal_Templateparser::TP_DOT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOT;
}
comma {
- $this->token = Smarty_Internal_Templateparser::TP_COMMA;
+ $this->token = \Smarty\Parser\TemplateParser::TP_COMMA;
}
semicolon {
- $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SEMICOLON;
}
doublecolon {
- $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOUBLECOLON;
}
colon {
- $this->token = Smarty_Internal_Templateparser::TP_COLON;
+ $this->token = \Smarty\Parser\TemplateParser::TP_COLON;
}
qmark {
- $this->token = Smarty_Internal_Templateparser::TP_QMARK;
+ $this->token = \Smarty\Parser\TemplateParser::TP_QMARK;
}
hex {
- $this->token = Smarty_Internal_Templateparser::TP_HEX;
+ $this->token = \Smarty\Parser\TemplateParser::TP_HEX;
}
space {
- $this->token = Smarty_Internal_Templateparser::TP_SPACE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_SPACE;
}
char {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
*/
@@ -607,14 +597,14 @@ class Smarty_Internal_Templatelexer
%statename LITERAL
ldel literal rdel {
$this->literal_cnt++;
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERAL;
}
ldel slash literal rdel {
if ($this->literal_cnt) {
$this->literal_cnt--;
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERAL;
} else {
- $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERALEND;
$this->yypopstate();
}
}
@@ -630,19 +620,19 @@ class Smarty_Internal_Templatelexer
$this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
}
$this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LITERAL;
}
*/
/*!lex2php
%statename DOUBLEQUOTEDSTRING
userliteral {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
ldel literal rdel {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
ldel slash literal rdel {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
ldel slash {
$this->yypushstate(self::TAG);
@@ -653,33 +643,33 @@ class Smarty_Internal_Templatelexer
return true;
}
ldel {
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+ $this->token = \Smarty\Parser\TemplateParser::TP_LDEL;
$this->taglineno = $this->line;
$this->yypushstate(self::TAGBODY);
}
double_quote {
- $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+ $this->token = \Smarty\Parser\TemplateParser::TP_QUOTE;
$this->yypopstate();
}
backtick dollar {
- $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+ $this->token = \Smarty\Parser\TemplateParser::TP_BACKTICK;
$this->value = substr($this->value,0,-1);
$this->yypushstate(self::TAGBODY);
$this->taglineno = $this->line;
}
dollar id {
- $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
+ $this->token = \Smarty\Parser\TemplateParser::TP_DOLLARID;
}
dollar {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
textdoublequoted {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
char {
$to = $this->dataLength;
$this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ $this->token = \Smarty\Parser\TemplateParser::TP_TEXT;
}
*/
}
diff --git a/bundled-libs/smarty/smarty/src/ParseTree/Base.php b/bundled-libs/smarty/smarty/src/ParseTree/Base.php
new file mode 100644
index 000000000..e1140c15e
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/ParseTree/Base.php
@@ -0,0 +1,45 @@
+data);
}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php b/bundled-libs/smarty/smarty/src/ParseTree/Dq.php
similarity index 50%
rename from bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php
rename to bundled-libs/smarty/smarty/src/ParseTree/Dq.php
index 8655f5869..b5fca3b40 100644
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php
+++ b/bundled-libs/smarty/smarty/src/ParseTree/Dq.php
@@ -1,92 +1,94 @@
subtrees[] = $subtree;
- if ($subtree instanceof Smarty_Internal_ParseTree_Tag) {
- $parser->block_nesting_level = count($parser->compiler->_tag_stack);
+ if ($subtree instanceof Tag) {
+ $parser->block_nesting_level = $parser->compiler->getTagStackCount();
}
}
/**
* Append buffer to subtree
*
- * @param \Smarty_Internal_Templateparser $parser
- * @param Smarty_Internal_ParseTree $subtree parse tree buffer
+ * @param \Smarty\Parser\TemplateParser $parser
+ * @param Base $subtree parse tree buffer
*/
- public function append_subtree(Smarty_Internal_Templateparser $parser, Smarty_Internal_ParseTree $subtree)
+ public function append_subtree(\Smarty\Parser\TemplateParser $parser, Base $subtree)
{
$last_subtree = count($this->subtrees) - 1;
- if ($last_subtree >= 0 && $this->subtrees[ $last_subtree ] instanceof Smarty_Internal_ParseTree_Tag
+ if ($last_subtree >= 0 && $this->subtrees[ $last_subtree ] instanceof Tag
&& $this->subtrees[ $last_subtree ]->saved_block_nesting < $parser->block_nesting_level
) {
- if ($subtree instanceof Smarty_Internal_ParseTree_Code) {
+ if ($subtree instanceof Code) {
$this->subtrees[ $last_subtree ]->data =
$parser->compiler->appendCode(
- $this->subtrees[ $last_subtree ]->data,
+ (string) $this->subtrees[ $last_subtree ]->data,
'data . ';?>'
);
- } elseif ($subtree instanceof Smarty_Internal_ParseTree_DqContent) {
+ } elseif ($subtree instanceof DqContent) {
$this->subtrees[ $last_subtree ]->data =
$parser->compiler->appendCode(
- $this->subtrees[ $last_subtree ]->data,
+ (string) $this->subtrees[ $last_subtree ]->data,
'data . '";?>'
);
} else {
$this->subtrees[ $last_subtree ]->data =
- $parser->compiler->appendCode($this->subtrees[ $last_subtree ]->data, $subtree->data);
+ $parser->compiler->appendCode((string) $this->subtrees[ $last_subtree ]->data, (string) $subtree->data);
}
} else {
$this->subtrees[] = $subtree;
}
- if ($subtree instanceof Smarty_Internal_ParseTree_Tag) {
- $parser->block_nesting_level = count($parser->compiler->_tag_stack);
+ if ($subtree instanceof Tag) {
+ $parser->block_nesting_level = $parser->compiler->getTagStackCount();
}
}
/**
* Merge subtree buffer content together
*
- * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty\Parser\TemplateParser $parser
*
* @return string compiled template code
*/
- public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ public function to_smarty_php(\Smarty\Parser\TemplateParser $parser)
{
$code = '';
foreach ($this->subtrees as $subtree) {
if ($code !== '') {
$code .= '.';
}
- if ($subtree instanceof Smarty_Internal_ParseTree_Tag) {
+ if ($subtree instanceof Tag) {
$more_php = $subtree->assign_to_var($parser);
} else {
$more_php = $subtree->to_smarty_php($parser);
}
$code .= $more_php;
- if (!$subtree instanceof Smarty_Internal_ParseTree_DqContent) {
+ if (!$subtree instanceof DqContent) {
$parser->compiler->has_variable_string = true;
}
}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php b/bundled-libs/smarty/smarty/src/ParseTree/DqContent.php
similarity index 58%
rename from bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php
rename to bundled-libs/smarty/smarty/src/ParseTree/DqContent.php
index a8ca389d9..f0a4b0697 100644
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php
+++ b/bundled-libs/smarty/smarty/src/ParseTree/DqContent.php
@@ -1,22 +1,24 @@
data . '"';
}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php b/bundled-libs/smarty/smarty/src/ParseTree/Tag.php
similarity index 63%
rename from bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php
rename to bundled-libs/smarty/smarty/src/ParseTree/Tag.php
index e6c755604..05237f2de 100644
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php
+++ b/bundled-libs/smarty/smarty/src/ParseTree/Tag.php
@@ -1,10 +1,13 @@
data = $data;
$this->saved_block_nesting = $parser->block_nesting_level;
@@ -40,11 +43,11 @@ public function __construct(Smarty_Internal_Templateparser $parser, $data)
/**
* Return buffer content
*
- * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty\Parser\TemplateParser $parser
*
* @return string content
*/
- public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ public function to_smarty_php(\Smarty\Parser\TemplateParser $parser)
{
return $this->data;
}
@@ -52,16 +55,16 @@ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
/**
* Return complied code that loads the evaluated output of buffer content into a temporary variable
*
- * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty\Parser\TemplateParser $parser
*
* @return string template code
*/
- public function assign_to_var(Smarty_Internal_Templateparser $parser)
+ public function assign_to_var(\Smarty\Parser\TemplateParser $parser)
{
$var = $parser->compiler->getNewPrefixVariable();
- $tmp = $parser->compiler->appendCode('', $this->data);
+ $tmp = $parser->compiler->appendCode('', (string) $this->data);
$tmp = $parser->compiler->appendCode($tmp, "");
- $parser->compiler->prefix_code[] = sprintf('%s', $tmp);
+ $parser->compiler->appendPrefixCode($tmp);
return $var;
}
}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php b/bundled-libs/smarty/smarty/src/ParseTree/Template.php
similarity index 77%
rename from bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php
rename to bundled-libs/smarty/smarty/src/ParseTree/Template.php
index 829c420fe..ce802a0f4 100644
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php
+++ b/bundled-libs/smarty/smarty/src/ParseTree/Template.php
@@ -1,10 +1,13 @@
subtrees)) {
$this->subtrees = array_merge($this->subtrees, $subtree->subtrees);
@@ -52,10 +55,10 @@ public function append_subtree(Smarty_Internal_Templateparser $parser, Smarty_In
/**
* Append array to subtree
*
- * @param \Smarty_Internal_Templateparser $parser
- * @param \Smarty_Internal_ParseTree[] $array
+ * @param \Smarty\Parser\TemplateParser $parser
+ * @param Base[] $array
*/
- public function append_array(Smarty_Internal_Templateparser $parser, $array = array())
+ public function append_array(\Smarty\Parser\TemplateParser $parser, $array = array())
{
if (!empty($array)) {
$this->subtrees = array_merge($this->subtrees, (array)$array);
@@ -65,10 +68,10 @@ public function append_array(Smarty_Internal_Templateparser $parser, $array = ar
/**
* Prepend array to subtree
*
- * @param \Smarty_Internal_Templateparser $parser
- * @param \Smarty_Internal_ParseTree[] $array
+ * @param \Smarty\Parser\TemplateParser $parser
+ * @param Base[] $array
*/
- public function prepend_array(Smarty_Internal_Templateparser $parser, $array = array())
+ public function prepend_array(\Smarty\Parser\TemplateParser $parser, $array = array())
{
if (!empty($array)) {
$this->subtrees = array_merge((array)$array, $this->subtrees);
@@ -78,11 +81,11 @@ public function prepend_array(Smarty_Internal_Templateparser $parser, $array = a
/**
* Sanitize and merge subtree buffers together
*
- * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty\Parser\TemplateParser $parser
*
* @return string template code content
*/
- public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ public function to_smarty_php(\Smarty\Parser\TemplateParser $parser)
{
$code = '';
@@ -111,7 +114,7 @@ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
break;
case 'tag':
foreach ($chunk['subtrees'] as $subtree) {
- $text = $parser->compiler->appendCode($text, $subtree->to_smarty_php($parser));
+ $text = $parser->compiler->appendCode($text, (string) $subtree->to_smarty_php($parser));
}
$code .= $text;
break;
@@ -136,12 +139,12 @@ private function getChunkedSubtrees() {
continue;
}
- if ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Text
+ if ($this->subtrees[ $key ] instanceof Text
&& $this->subtrees[ $key ]->isToBeStripped()) {
$newMode = 'textstripped';
- } elseif ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Text) {
+ } elseif ($this->subtrees[ $key ] instanceof Text) {
$newMode = 'text';
- } elseif ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Tag) {
+ } elseif ($this->subtrees[ $key ] instanceof Tag) {
$newMode = 'tag';
} else {
$newMode = 'other';
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php b/bundled-libs/smarty/smarty/src/ParseTree/Text.php
similarity index 78%
rename from bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php
rename to bundled-libs/smarty/smarty/src/ParseTree/Text.php
index 58116c811..e6131407c 100644
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_text.php
+++ b/bundled-libs/smarty/smarty/src/ParseTree/Text.php
@@ -1,20 +1,22 @@
data;
}
diff --git a/bundled-libs/smarty/smarty/src/Parser/ConfigfileParser.php b/bundled-libs/smarty/smarty/src/Parser/ConfigfileParser.php
new file mode 100644
index 000000000..7997a0981
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Parser/ConfigfileParser.php
@@ -0,0 +1,972 @@
+ '\\',
+ '\'' => '\'');
+
+ /**
+ * constructor
+ *
+ * @param Lexer $lex
+ * @param Configfile $compiler
+ */
+ public function __construct(Lexer $lex, Configfile $compiler)
+ {
+ $this->lex = $lex;
+ $this->smarty = $compiler->getSmarty();
+ $this->compiler = $compiler;
+ $this->configOverwrite = $this->smarty->config_overwrite;
+ $this->configReadHidden = $this->smarty->config_read_hidden;
+ }
+
+ /**
+ * parse optional boolean keywords
+ *
+ * @param string $str
+ *
+ * @return bool
+ */
+ private function parse_bool($str)
+ {
+ $str = strtolower($str);
+ if (in_array($str, array('on', 'yes', 'true'))) {
+ $res = true;
+ } else {
+ $res = false;
+ }
+ return $res;
+ }
+
+ /**
+ * parse single quoted string
+ * remove outer quotes
+ * unescape inner quotes
+ *
+ * @param string $qstr
+ *
+ * @return string
+ */
+ private static function parse_single_quoted_string($qstr)
+ {
+ $escaped_string = substr($qstr, 1, strlen($qstr) - 2); //remove outer quotes
+
+ $ss = preg_split('/(\\\\.)/', $escaped_string, - 1, PREG_SPLIT_DELIM_CAPTURE);
+
+ $str = '';
+ foreach ($ss as $s) {
+ if (strlen($s) === 2 && $s[0] === '\\') {
+ if (isset(self::$escapes_single[$s[1]])) {
+ $s = self::$escapes_single[$s[1]];
+ }
+ }
+ $str .= $s;
+ }
+ return $str;
+ }
+
+ /**
+ * parse double quoted string
+ *
+ * @param string $qstr
+ *
+ * @return string
+ */
+ private static function parse_double_quoted_string($qstr)
+ {
+ $inner_str = substr($qstr, 1, strlen($qstr) - 2);
+ return stripcslashes($inner_str);
+ }
+
+ /**
+ * parse triple quoted string
+ *
+ * @param string $qstr
+ *
+ * @return string
+ */
+ private static function parse_tripple_double_quoted_string($qstr)
+ {
+ return stripcslashes($qstr);
+ }
+
+ /**
+ * set a config variable in target array
+ *
+ * @param array $var
+ * @param array $target_array
+ */
+ private function set_var(array $var, array &$target_array)
+ {
+ $key = $var['key'];
+ $value = $var['value'];
+
+ if ($this->configOverwrite || !isset($target_array['vars'][$key])) {
+ $target_array['vars'][$key] = $value;
+ } else {
+ settype($target_array['vars'][$key], 'array');
+ $target_array['vars'][$key][] = $value;
+ }
+ }
+
+ /**
+ * add config variable to global vars
+ *
+ * @param array $vars
+ */
+ private function add_global_vars(array $vars)
+ {
+ if (!isset($this->compiler->config_data['vars'])) {
+ $this->compiler->config_data['vars'] = array();
+ }
+ foreach ($vars as $var) {
+ $this->set_var($var, $this->compiler->config_data);
+ }
+ }
+
+ /**
+ * add config variable to section
+ *
+ * @param string $section_name
+ * @param array $vars
+ */
+ private function add_section_vars($section_name, array $vars)
+ {
+ if (!isset($this->compiler->config_data['sections'][$section_name]['vars'])) {
+ $this->compiler->config_data['sections'][$section_name]['vars'] = array();
+ }
+ foreach ($vars as $var) {
+ $this->set_var($var, $this->compiler->config_data['sections'][$section_name]);
+ }
+ }
+
+ const TPC_OPENB = 1;
+ const TPC_SECTION = 2;
+ const TPC_CLOSEB = 3;
+ const TPC_DOT = 4;
+ const TPC_ID = 5;
+ const TPC_EQUAL = 6;
+ const TPC_FLOAT = 7;
+ const TPC_INT = 8;
+ const TPC_BOOL = 9;
+ const TPC_SINGLE_QUOTED_STRING = 10;
+ const TPC_DOUBLE_QUOTED_STRING = 11;
+ const TPC_TRIPPLE_QUOTES = 12;
+ const TPC_TRIPPLE_TEXT = 13;
+ const TPC_TRIPPLE_QUOTES_END = 14;
+ const TPC_NAKED_STRING = 15;
+ const TPC_OTHER = 16;
+ const TPC_NEWLINE = 17;
+ const TPC_COMMENTSTART = 18;
+ const YY_NO_ACTION = 60;
+ const YY_ACCEPT_ACTION = 59;
+ const YY_ERROR_ACTION = 58;
+
+ const YY_SZ_ACTTAB = 39;
+public static $yy_action = array(
+ 24, 25, 26, 27, 28, 12, 15, 23, 31, 32,
+ 59, 8, 9, 3, 21, 22, 33, 13, 33, 13,
+ 14, 10, 18, 16, 30, 11, 17, 20, 34, 7,
+ 5, 1, 2, 29, 4, 19, 52, 35, 6,
+ );
+ public static $yy_lookahead = array(
+ 7, 8, 9, 10, 11, 12, 5, 27, 15, 16,
+ 20, 21, 25, 23, 25, 26, 17, 18, 17, 18,
+ 2, 25, 4, 13, 14, 1, 15, 24, 17, 22,
+ 3, 23, 23, 14, 6, 2, 28, 17, 3,
+);
+ const YY_SHIFT_USE_DFLT = -8;
+ const YY_SHIFT_MAX = 19;
+ public static $yy_shift_ofst = array(
+ -8, 1, 1, 1, -7, -1, -1, 24, -8, -8,
+ -8, 18, 10, 11, 27, 28, 19, 20, 33, 35,
+);
+ const YY_REDUCE_USE_DFLT = -21;
+ const YY_REDUCE_MAX = 10;
+ public static $yy_reduce_ofst = array(
+ -10, -11, -11, -11, -20, -13, -4, 3, 7, 8,
+ 9,
+);
+ public static $yyExpectedTokens = array(
+ array(),
+ array(5, 17, 18, ),
+ array(5, 17, 18, ),
+ array(5, 17, 18, ),
+ array(7, 8, 9, 10, 11, 12, 15, 16, ),
+ array(17, 18, ),
+ array(17, 18, ),
+ array(1, ),
+ array(),
+ array(),
+ array(),
+ array(2, 4, ),
+ array(13, 14, ),
+ array(15, 17, ),
+ array(3, ),
+ array(6, ),
+ array(14, ),
+ array(17, ),
+ array(2, ),
+ array(3, ),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+);
+ public static $yy_default = array(
+ 44, 40, 41, 37, 58, 58, 58, 36, 39, 44,
+ 44, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 38, 42, 43, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57,
+);
+ const YYNOCODE = 29;
+ const YYSTACKDEPTH = 100;
+ const YYNSTATE = 36;
+ const YYNRULE = 22;
+ const YYERRORSYMBOL = 19;
+ const YYERRSYMDT = 'yy0';
+ const YYFALLBACK = 0;
+ public static $yyFallback = array(
+ );
+ public function Trace($TraceFILE, $zTracePrompt)
+ {
+ if (!$TraceFILE) {
+ $zTracePrompt = 0;
+ } elseif (!$zTracePrompt) {
+ $TraceFILE = 0;
+ }
+ $this->yyTraceFILE = $TraceFILE;
+ $this->yyTracePrompt = $zTracePrompt;
+ }
+
+ public function PrintTrace()
+ {
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = ' ';
+ }
+
+ public $yyTraceFILE;
+ public $yyTracePrompt;
+ public $yyidx; /* Index of top element in stack */
+ public $yyerrcnt; /* Shifts left before out of the error */
+ public $yystack = array(); /* The parser's stack */
+
+ public $yyTokenName = array(
+ '$', 'OPENB', 'SECTION', 'CLOSEB',
+ 'DOT', 'ID', 'EQUAL', 'FLOAT',
+ 'INT', 'BOOL', 'SINGLE_QUOTED_STRING', 'DOUBLE_QUOTED_STRING',
+ 'TRIPPLE_QUOTES', 'TRIPPLE_TEXT', 'TRIPPLE_QUOTES_END', 'NAKED_STRING',
+ 'OTHER', 'NEWLINE', 'COMMENTSTART', 'error',
+ 'start', 'global_vars', 'sections', 'var_list',
+ 'section', 'newline', 'var', 'value',
+ );
+
+ public static $yyRuleName = array(
+ 'start ::= global_vars sections',
+ 'global_vars ::= var_list',
+ 'sections ::= sections section',
+ 'sections ::=',
+ 'section ::= OPENB SECTION CLOSEB newline var_list',
+ 'section ::= OPENB DOT SECTION CLOSEB newline var_list',
+ 'var_list ::= var_list newline',
+ 'var_list ::= var_list var',
+ 'var_list ::=',
+ 'var ::= ID EQUAL value',
+ 'value ::= FLOAT',
+ 'value ::= INT',
+ 'value ::= BOOL',
+ 'value ::= SINGLE_QUOTED_STRING',
+ 'value ::= DOUBLE_QUOTED_STRING',
+ 'value ::= TRIPPLE_QUOTES TRIPPLE_TEXT TRIPPLE_QUOTES_END',
+ 'value ::= TRIPPLE_QUOTES TRIPPLE_QUOTES_END',
+ 'value ::= NAKED_STRING',
+ 'value ::= OTHER',
+ 'newline ::= NEWLINE',
+ 'newline ::= COMMENTSTART NEWLINE',
+ 'newline ::= COMMENTSTART NAKED_STRING NEWLINE',
+ );
+
+ public function tokenName($tokenType)
+ {
+ if ($tokenType === 0) {
+ return 'End of Input';
+ }
+ if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) {
+ return $this->yyTokenName[$tokenType];
+ } else {
+ return 'Unknown';
+ }
+ }
+
+ public static function yy_destructor($yymajor, $yypminor)
+ {
+ switch ($yymajor) {
+ default: break; /* If no destructor action specified: do nothing */
+ }
+ }
+
+ public function yy_pop_parser_stack()
+ {
+ if (empty($this->yystack)) {
+ return;
+ }
+ $yytos = array_pop($this->yystack);
+ if ($this->yyTraceFILE && $this->yyidx >= 0) {
+ fwrite($this->yyTraceFILE,
+ $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
+ "\n");
+ }
+ $yymajor = $yytos->major;
+ self::yy_destructor($yymajor, $yytos->minor);
+ $this->yyidx--;
+
+ return $yymajor;
+ }
+
+ public function __destruct()
+ {
+ while ($this->yystack !== Array()) {
+ $this->yy_pop_parser_stack();
+ }
+ if (is_resource($this->yyTraceFILE)) {
+ fclose($this->yyTraceFILE);
+ }
+ }
+
+ public function yy_get_expected_tokens($token)
+ {
+ static $res3 = array();
+ static $res4 = array();
+ $state = $this->yystack[$this->yyidx]->stateno;
+ $expected = self::$yyExpectedTokens[$state];
+ if (isset($res3[$state][$token])) {
+ if ($res3[$state][$token]) {
+ return $expected;
+ }
+ } else {
+ if ($res3[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) {
+ return $expected;
+ }
+ }
+ $stack = $this->yystack;
+ $yyidx = $this->yyidx;
+ do {
+ $yyact = $this->yy_find_shift_action($token);
+ if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
+ // reduce action
+ $done = 0;
+ do {
+ if ($done++ === 100) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // too much recursion prevents proper detection
+ // so give up
+ return array_unique($expected);
+ }
+ $yyruleno = $yyact - self::YYNSTATE;
+ $this->yyidx -= self::$yyRuleInfo[$yyruleno][1];
+ $nextstate = $this->yy_find_reduce_action(
+ $this->yystack[$this->yyidx]->stateno,
+ self::$yyRuleInfo[$yyruleno][0]);
+ if (isset(self::$yyExpectedTokens[$nextstate])) {
+ $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
+ if (isset($res4[$nextstate][$token])) {
+ if ($res4[$nextstate][$token]) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return array_unique($expected);
+ }
+ } else {
+ if ($res4[$nextstate][$token] = in_array($token, self::$yyExpectedTokens[$nextstate], true)) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return array_unique($expected);
+ }
+ }
+ }
+ if ($nextstate < self::YYNSTATE) {
+ // we need to shift a non-terminal
+ $this->yyidx++;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = $nextstate;
+ $x->major = self::$yyRuleInfo[$yyruleno][0];
+ $this->yystack[$this->yyidx] = $x;
+ continue 2;
+ } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // the last token was just ignored, we can't accept
+ // by ignoring input, this is in essence ignoring a
+ // syntax error!
+ return array_unique($expected);
+ } elseif ($nextstate === self::YY_NO_ACTION) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // input accepted, but not shifted (I guess)
+ return $expected;
+ } else {
+ $yyact = $nextstate;
+ }
+ } while (true);
+ }
+ break;
+ } while (true);
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+
+ return array_unique($expected);
+ }
+
+ public function yy_is_expected_token($token)
+ {
+ static $res = array();
+ static $res2 = array();
+ if ($token === 0) {
+ return true; // 0 is not part of this
+ }
+ $state = $this->yystack[$this->yyidx]->stateno;
+ if (isset($res[$state][$token])) {
+ if ($res[$state][$token]) {
+ return true;
+ }
+ } else {
+ if ($res[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) {
+ return true;
+ }
+ }
+ $stack = $this->yystack;
+ $yyidx = $this->yyidx;
+ do {
+ $yyact = $this->yy_find_shift_action($token);
+ if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
+ // reduce action
+ $done = 0;
+ do {
+ if ($done++ === 100) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // too much recursion prevents proper detection
+ // so give up
+ return true;
+ }
+ $yyruleno = $yyact - self::YYNSTATE;
+ $this->yyidx -= self::$yyRuleInfo[$yyruleno][1];
+ $nextstate = $this->yy_find_reduce_action(
+ $this->yystack[$this->yyidx]->stateno,
+ self::$yyRuleInfo[$yyruleno][0]);
+ if (isset($res2[$nextstate][$token])) {
+ if ($res2[$nextstate][$token]) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return true;
+ }
+ } else {
+ if ($res2[$nextstate][$token] = (isset(self::$yyExpectedTokens[$nextstate]) && in_array($token, self::$yyExpectedTokens[$nextstate], true))) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return true;
+ }
+ }
+ if ($nextstate < self::YYNSTATE) {
+ // we need to shift a non-terminal
+ $this->yyidx++;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = $nextstate;
+ $x->major = self::$yyRuleInfo[$yyruleno][0];
+ $this->yystack[$this->yyidx] = $x;
+ continue 2;
+ } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ if (!$token) {
+ // end of input: this is valid
+ return true;
+ }
+ // the last token was just ignored, we can't accept
+ // by ignoring input, this is in essence ignoring a
+ // syntax error!
+ return false;
+ } elseif ($nextstate === self::YY_NO_ACTION) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // input accepted, but not shifted (I guess)
+ return true;
+ } else {
+ $yyact = $nextstate;
+ }
+ } while (true);
+ }
+ break;
+ } while (true);
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+
+ return true;
+ }
+
+ public function yy_find_shift_action($iLookAhead)
+ {
+ $stateno = $this->yystack[$this->yyidx]->stateno;
+
+ /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */
+ if (!isset(self::$yy_shift_ofst[$stateno])) {
+ // no shift actions
+ return self::$yy_default[$stateno];
+ }
+ $i = self::$yy_shift_ofst[$stateno];
+ if ($i === self::YY_SHIFT_USE_DFLT) {
+ return self::$yy_default[$stateno];
+ }
+ if ($iLookAhead === self::YYNOCODE) {
+ return self::YY_NO_ACTION;
+ }
+ $i += $iLookAhead;
+ if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
+ self::$yy_lookahead[$i] != $iLookAhead) {
+ if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)
+ && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) {
+ if ($this->yyTraceFILE) {
+ fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'FALLBACK ' .
+ $this->yyTokenName[$iLookAhead] . ' => ' .
+ $this->yyTokenName[$iFallback] . "\n");
+ }
+
+ return $this->yy_find_shift_action($iFallback);
+ }
+
+ return self::$yy_default[$stateno];
+ } else {
+ return self::$yy_action[$i];
+ }
+ }
+
+ public function yy_find_reduce_action($stateno, $iLookAhead)
+ {
+ /* $stateno = $this->yystack[$this->yyidx]->stateno; */
+
+ if (!isset(self::$yy_reduce_ofst[$stateno])) {
+ return self::$yy_default[$stateno];
+ }
+ $i = self::$yy_reduce_ofst[$stateno];
+ if ($i === self::YY_REDUCE_USE_DFLT) {
+ return self::$yy_default[$stateno];
+ }
+ if ($iLookAhead === self::YYNOCODE) {
+ return self::YY_NO_ACTION;
+ }
+ $i += $iLookAhead;
+ if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
+ self::$yy_lookahead[$i] != $iLookAhead) {
+ return self::$yy_default[$stateno];
+ } else {
+ return self::$yy_action[$i];
+ }
+ }
+
+ public function yy_shift($yyNewState, $yyMajor, $yypMinor)
+ {
+ $this->yyidx++;
+ if ($this->yyidx >= self::YYSTACKDEPTH) {
+ $this->yyidx--;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
+ }
+ while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+// line 245 "src/Parser/ConfigfileParser.y"
+
+ $this->internalError = true;
+ $this->compiler->trigger_config_file_error('Stack overflow in configfile parser');
+
+ return;
+ }
+ $yytos = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $yytos->stateno = $yyNewState;
+ $yytos->major = $yyMajor;
+ $yytos->minor = $yypMinor;
+ $this->yystack[] = $yytos;
+ if ($this->yyTraceFILE && $this->yyidx > 0) {
+ fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt,
+ $yyNewState);
+ fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt);
+ for ($i = 1; $i <= $this->yyidx; $i++) {
+ fprintf($this->yyTraceFILE, " %s",
+ $this->yyTokenName[$this->yystack[$i]->major]);
+ }
+ fwrite($this->yyTraceFILE,"\n");
+ }
+ }
+
+ public static $yyRuleInfo = array(
+ array( 0 => 20, 1 => 2 ),
+ array( 0 => 21, 1 => 1 ),
+ array( 0 => 22, 1 => 2 ),
+ array( 0 => 22, 1 => 0 ),
+ array( 0 => 24, 1 => 5 ),
+ array( 0 => 24, 1 => 6 ),
+ array( 0 => 23, 1 => 2 ),
+ array( 0 => 23, 1 => 2 ),
+ array( 0 => 23, 1 => 0 ),
+ array( 0 => 26, 1 => 3 ),
+ array( 0 => 27, 1 => 1 ),
+ array( 0 => 27, 1 => 1 ),
+ array( 0 => 27, 1 => 1 ),
+ array( 0 => 27, 1 => 1 ),
+ array( 0 => 27, 1 => 1 ),
+ array( 0 => 27, 1 => 3 ),
+ array( 0 => 27, 1 => 2 ),
+ array( 0 => 27, 1 => 1 ),
+ array( 0 => 27, 1 => 1 ),
+ array( 0 => 25, 1 => 1 ),
+ array( 0 => 25, 1 => 2 ),
+ array( 0 => 25, 1 => 3 ),
+ );
+
+ public static $yyReduceMap = array(
+ 0 => 0,
+ 2 => 0,
+ 3 => 0,
+ 19 => 0,
+ 20 => 0,
+ 21 => 0,
+ 1 => 1,
+ 4 => 4,
+ 5 => 5,
+ 6 => 6,
+ 7 => 7,
+ 8 => 8,
+ 9 => 9,
+ 10 => 10,
+ 11 => 11,
+ 12 => 12,
+ 13 => 13,
+ 14 => 14,
+ 15 => 15,
+ 16 => 16,
+ 17 => 17,
+ 18 => 17,
+ );
+// line 251 "src/Parser/ConfigfileParser.y"
+ public function yy_r0(){
+ $this->_retvalue = null;
+ }
+// line 256 "src/Parser/ConfigfileParser.y"
+ public function yy_r1(){
+ $this->add_global_vars($this->yystack[$this->yyidx + 0]->minor);
+ $this->_retvalue = null;
+ }
+// line 270 "src/Parser/ConfigfileParser.y"
+ public function yy_r4(){
+ $this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor);
+ $this->_retvalue = null;
+ }
+// line 275 "src/Parser/ConfigfileParser.y"
+ public function yy_r5(){
+ if ($this->configReadHidden) {
+ $this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor);
+ }
+ $this->_retvalue = null;
+ }
+// line 283 "src/Parser/ConfigfileParser.y"
+ public function yy_r6(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
+ }
+// line 287 "src/Parser/ConfigfileParser.y"
+ public function yy_r7(){
+ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor, array($this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 291 "src/Parser/ConfigfileParser.y"
+ public function yy_r8(){
+ $this->_retvalue = array();
+ }
+// line 297 "src/Parser/ConfigfileParser.y"
+ public function yy_r9(){
+ $this->_retvalue = array('key' => $this->yystack[$this->yyidx + -2]->minor, 'value' => $this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 302 "src/Parser/ConfigfileParser.y"
+ public function yy_r10(){
+ $this->_retvalue = (float) $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 306 "src/Parser/ConfigfileParser.y"
+ public function yy_r11(){
+ $this->_retvalue = (int) $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 310 "src/Parser/ConfigfileParser.y"
+ public function yy_r12(){
+ $this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 314 "src/Parser/ConfigfileParser.y"
+ public function yy_r13(){
+ $this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 318 "src/Parser/ConfigfileParser.y"
+ public function yy_r14(){
+ $this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 322 "src/Parser/ConfigfileParser.y"
+ public function yy_r15(){
+ $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + -1]->minor);
+ }
+// line 326 "src/Parser/ConfigfileParser.y"
+ public function yy_r16(){
+ $this->_retvalue = '';
+ }
+// line 330 "src/Parser/ConfigfileParser.y"
+ public function yy_r17(){
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ }
+
+ private $_retvalue;
+
+ public function yy_reduce($yyruleno)
+ {
+ if ($this->yyTraceFILE && $yyruleno >= 0
+ && $yyruleno < count(self::$yyRuleName)) {
+ fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n",
+ $this->yyTracePrompt, $yyruleno,
+ self::$yyRuleName[$yyruleno]);
+ }
+
+ $this->_retvalue = $yy_lefthand_side = null;
+ if (isset(self::$yyReduceMap[$yyruleno])) {
+ // call the action
+ $this->_retvalue = null;
+ $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}();
+ $yy_lefthand_side = $this->_retvalue;
+ }
+ $yygoto = self::$yyRuleInfo[$yyruleno][0];
+ $yysize = self::$yyRuleInfo[$yyruleno][1];
+ $this->yyidx -= $yysize;
+ for ($i = $yysize; $i; $i--) {
+ // pop all of the right-hand side parameters
+ array_pop($this->yystack);
+ }
+ $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto);
+ if ($yyact < self::YYNSTATE) {
+ if (!$this->yyTraceFILE && $yysize) {
+ $this->yyidx++;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = $yyact;
+ $x->major = $yygoto;
+ $x->minor = $yy_lefthand_side;
+ $this->yystack[$this->yyidx] = $x;
+ } else {
+ $this->yy_shift($yyact, $yygoto, $yy_lefthand_side);
+ }
+ } elseif ($yyact === self::YYNSTATE + self::YYNRULE + 1) {
+ $this->yy_accept();
+ }
+ }
+
+ public function yy_parse_failed()
+ {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
+ } while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+ }
+
+ public function yy_syntax_error($yymajor, $TOKEN)
+ {
+// line 238 "src/Parser/ConfigfileParser.y"
+
+ $this->internalError = true;
+ $this->yymajor = $yymajor;
+ $this->compiler->trigger_config_file_error();
+ }
+
+ public function yy_accept()
+ {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
+ } while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+// line 231 "src/Parser/ConfigfileParser.y"
+
+ $this->successful = !$this->internalError;
+ $this->internalError = false;
+ $this->retvalue = $this->_retvalue;
+ }
+
+ public function doParse($yymajor, $yytokenvalue)
+ {
+ $yyerrorhit = 0; /* True if yymajor has invoked an error */
+
+ if ($this->yyidx === null || $this->yyidx < 0) {
+ $this->yyidx = 0;
+ $this->yyerrcnt = -1;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = 0;
+ $x->major = 0;
+ $this->yystack = array();
+ $this->yystack[] = $x;
+ }
+ $yyendofinput = ($yymajor==0);
+
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sInput %s\n",
+ $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
+ }
+
+ do {
+ $yyact = $this->yy_find_shift_action($yymajor);
+ if ($yymajor < self::YYERRORSYMBOL &&
+ !$this->yy_is_expected_token($yymajor)) {
+ // force a syntax error
+ $yyact = self::YY_ERROR_ACTION;
+ }
+ if ($yyact < self::YYNSTATE) {
+ $this->yy_shift($yyact, $yymajor, $yytokenvalue);
+ $this->yyerrcnt--;
+ if ($yyendofinput && $this->yyidx >= 0) {
+ $yymajor = 0;
+ } else {
+ $yymajor = self::YYNOCODE;
+ }
+ } elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
+ $this->yy_reduce($yyact - self::YYNSTATE);
+ } elseif ($yyact === self::YY_ERROR_ACTION) {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sSyntax Error!\n",
+ $this->yyTracePrompt);
+ }
+ if (self::YYERRORSYMBOL) {
+ if ($this->yyerrcnt < 0) {
+ $this->yy_syntax_error($yymajor, $yytokenvalue);
+ }
+ $yymx = $this->yystack[$this->yyidx]->major;
+ if ($yymx === self::YYERRORSYMBOL || $yyerrorhit) {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sDiscard input token %s\n",
+ $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
+ }
+ $this->yy_destructor($yymajor, $yytokenvalue);
+ $yymajor = self::YYNOCODE;
+ } else {
+ while ($this->yyidx >= 0 &&
+ $yymx !== self::YYERRORSYMBOL &&
+ ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
+ ){
+ $this->yy_pop_parser_stack();
+ }
+ if ($this->yyidx < 0 || $yymajor==0) {
+ $this->yy_destructor($yymajor, $yytokenvalue);
+ $this->yy_parse_failed();
+ $yymajor = self::YYNOCODE;
+ } elseif ($yymx !== self::YYERRORSYMBOL) {
+ $u2 = 0;
+ $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2);
+ }
+ }
+ $this->yyerrcnt = 3;
+ $yyerrorhit = 1;
+ } else {
+ if ($this->yyerrcnt <= 0) {
+ $this->yy_syntax_error($yymajor, $yytokenvalue);
+ }
+ $this->yyerrcnt = 3;
+ $this->yy_destructor($yymajor, $yytokenvalue);
+ if ($yyendofinput) {
+ $this->yy_parse_failed();
+ }
+ $yymajor = self::YYNOCODE;
+ }
+ } else {
+ $this->yy_accept();
+ $yymajor = self::YYNOCODE;
+ }
+ } while ($yymajor !== self::YYNOCODE && $this->yyidx >= 0);
+ }
+}
+
diff --git a/bundled-libs/smarty/smarty/lexer/smarty_internal_configfileparser.y b/bundled-libs/smarty/smarty/src/Parser/ConfigfileParser.y
similarity index 91%
rename from bundled-libs/smarty/smarty/lexer/smarty_internal_configfileparser.y
rename to bundled-libs/smarty/smarty/src/Parser/ConfigfileParser.y
index c981b58e9..23afc2d8f 100644
--- a/bundled-libs/smarty/smarty/lexer/smarty_internal_configfileparser.y
+++ b/bundled-libs/smarty/smarty/src/Parser/ConfigfileParser.y
@@ -1,5 +1,5 @@
/**
-* Smarty Internal Plugin Configfileparser
+* ConfigfileParser
*
* This is the config file parser
*
@@ -10,16 +10,22 @@
*/
%name TPC_
%declare_class {
+
+namespace Smarty\Parser;
+
+use \Smarty\Lexer\ConfigfileLexer as Lexer;
+use \Smarty\Compiler\Configfile as Configfile;
+
/**
* Smarty Internal Plugin Configfileparse
*
* This is the config file parser.
-* It is generated from the smarty_internal_configfileparser.y file
+* It is generated from the ConfigfileParser.y file
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
-class Smarty_Internal_Configfileparser
+class ConfigfileParser
}
%include_class
{
@@ -42,7 +48,7 @@ class Smarty_Internal_Configfileparser
/**
* lexer object
*
- * @var Smarty_Internal_Configfilelexer
+ * @var Lexer
*/
private $lex;
/**
@@ -54,7 +60,7 @@ class Smarty_Internal_Configfileparser
/**
* compiler object
*
- * @var Smarty_Internal_Config_File_Compiler
+ * @var Configfile
*/
public $compiler = null;
/**
@@ -86,13 +92,13 @@ class Smarty_Internal_Configfileparser
/**
* constructor
*
- * @param Smarty_Internal_Configfilelexer $lex
- * @param Smarty_Internal_Config_File_Compiler $compiler
+ * @param Lexer $lex
+ * @param Configfile $compiler
*/
- public function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler)
+ public function __construct(Lexer $lex, Configfile $compiler)
{
$this->lex = $lex;
- $this->smarty = $compiler->smarty;
+ $this->smarty = $compiler->getSmarty();
$this->compiler = $compiler;
$this->configOverwrite = $this->smarty->config_overwrite;
$this->configReadHidden = $this->smarty->config_read_hidden;
@@ -237,8 +243,8 @@ class Smarty_Internal_Configfileparser
%stack_overflow
{
- $this->internalError = true;
- $this->compiler->trigger_config_file_error('Stack overflow in configfile parser');
+ $this->internalError = true;
+ $this->compiler->trigger_config_file_error('Stack overflow in configfile parser');
}
// Complete config file
diff --git a/bundled-libs/smarty/smarty/src/Parser/TemplateParser.php b/bundled-libs/smarty/smarty/src/Parser/TemplateParser.php
new file mode 100644
index 000000000..1a9ea97db
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Parser/TemplateParser.php
@@ -0,0 +1,3171 @@
+
+*/
+class TemplateParser
+{
+// line 35 "src/Parser/TemplateParser.y"
+
+ const ERR1 = 'Security error: Call to private object member not allowed';
+ const ERR2 = 'Security error: Call to dynamic object member not allowed';
+
+ /**
+ * result status
+ *
+ * @var bool
+ */
+ public $successful = true;
+
+ /**
+ * return value
+ *
+ * @var mixed
+ */
+ public $retvalue = 0;
+
+ /**
+ * @var
+ */
+ public $yymajor;
+
+ /**
+ * last index of array variable
+ *
+ * @var mixed
+ */
+ public $last_index;
+
+ /**
+ * last variable name
+ *
+ * @var string
+ */
+ public $last_variable;
+
+ /**
+ * root parse tree buffer
+ *
+ * @var TemplateParseTree
+ */
+ public $root_buffer;
+
+ /**
+ * current parse tree object
+ *
+ * @var \Smarty\ParseTree\Base
+ */
+ public $current_buffer;
+
+ /**
+ * lexer object
+ *
+ * @var Lexer
+ */
+ public $lex;
+
+ /**
+ * internal error flag
+ *
+ * @var bool
+ */
+ private $internalError = false;
+
+ /**
+ * {strip} status
+ *
+ * @var bool
+ */
+ public $strip = false;
+ /**
+ * compiler object
+ *
+ * @var TemplateCompiler
+ */
+ public $compiler = null;
+
+ /**
+ * smarty object
+ *
+ * @var \Smarty\Smarty
+ */
+ public $smarty = null;
+
+ /**
+ * template object
+ *
+ * @var \Smarty\Template
+ */
+ public $template = null;
+
+ /**
+ * block nesting level
+ *
+ * @var int
+ */
+ public $block_nesting_level = 0;
+
+ /**
+ * security object
+ *
+ * @var \Smarty\Security
+ */
+ public $security = null;
+
+ /**
+ * template prefix array
+ *
+ * @var \Smarty\ParseTree\Base[]
+ */
+ public $template_prefix = array();
+
+ /**
+ * template prefix array
+ *
+ * @var \Smarty\ParseTree\Base[]
+ */
+ public $template_postfix = array();
+
+ /**
+ * constructor
+ *
+ * @param Lexer $lex
+ * @param TemplateCompiler $compiler
+ */
+ public function __construct(Lexer $lex, TemplateCompiler $compiler)
+ {
+ $this->lex = $lex;
+ $this->compiler = $compiler;
+ $this->template = $this->compiler->getTemplate();
+ $this->smarty = $this->template->getSmarty();
+ $this->security = $this->smarty->security_policy ?? false;
+ $this->current_buffer = $this->root_buffer = new TemplateParseTree();
+ }
+
+ /**
+ * insert PHP code in current buffer
+ *
+ * @param string $code
+ */
+ public function insertPhpCode($code)
+ {
+ $this->current_buffer->append_subtree($this, new Tag($this, $code));
+ }
+
+ /**
+ * error rundown
+ *
+ */
+ public function errorRunDown()
+ {
+ while ($this->yystack !== array()) {
+ $this->yy_pop_parser_stack();
+ }
+ if (is_resource($this->yyTraceFILE)) {
+ fclose($this->yyTraceFILE);
+ }
+ }
+
+ /**
+ * merge PHP code with prefix code and return parse tree tag object
+ *
+ * @param string $code
+ *
+ * @return Tag
+ */
+ private function mergePrefixCode($code)
+ {
+ $tmp = '';
+ foreach ($this->compiler->prefix_code as $preCode) {
+ $tmp .= $preCode;
+ }
+ $this->compiler->prefix_code = array();
+ $tmp .= $code;
+ return new Tag($this, $this->compiler->processNocacheCode($tmp));
+ }
+
+
+ const TP_VERT = 1;
+ const TP_COLON = 2;
+ const TP_TEXT = 3;
+ const TP_STRIPON = 4;
+ const TP_STRIPOFF = 5;
+ const TP_LITERALSTART = 6;
+ const TP_LITERALEND = 7;
+ const TP_LITERAL = 8;
+ const TP_SIMPELOUTPUT = 9;
+ const TP_SIMPLETAG = 10;
+ const TP_SMARTYBLOCKCHILDPARENT = 11;
+ const TP_LDEL = 12;
+ const TP_RDEL = 13;
+ const TP_DOLLARID = 14;
+ const TP_EQUAL = 15;
+ const TP_ID = 16;
+ const TP_PTR = 17;
+ const TP_LDELIF = 18;
+ const TP_LDELFOR = 19;
+ const TP_SEMICOLON = 20;
+ const TP_INCDEC = 21;
+ const TP_TO = 22;
+ const TP_STEP = 23;
+ const TP_LDELFOREACH = 24;
+ const TP_SPACE = 25;
+ const TP_AS = 26;
+ const TP_APTR = 27;
+ const TP_LDELSETFILTER = 28;
+ const TP_CLOSETAG = 29;
+ const TP_LDELSLASH = 30;
+ const TP_ATTR = 31;
+ const TP_INTEGER = 32;
+ const TP_COMMA = 33;
+ const TP_OPENP = 34;
+ const TP_CLOSEP = 35;
+ const TP_MATH = 36;
+ const TP_UNIMATH = 37;
+ const TP_ISIN = 38;
+ const TP_QMARK = 39;
+ const TP_NOT = 40;
+ const TP_TYPECAST = 41;
+ const TP_HEX = 42;
+ const TP_DOT = 43;
+ const TP_INSTANCEOF = 44;
+ const TP_SINGLEQUOTESTRING = 45;
+ const TP_DOUBLECOLON = 46;
+ const TP_NAMESPACE = 47;
+ const TP_AT = 48;
+ const TP_HATCH = 49;
+ const TP_OPENB = 50;
+ const TP_CLOSEB = 51;
+ const TP_DOLLAR = 52;
+ const TP_LOGOP = 53;
+ const TP_SLOGOP = 54;
+ const TP_TLOGOP = 55;
+ const TP_SINGLECOND = 56;
+ const TP_ARRAYOPEN = 57;
+ const TP_QUOTE = 58;
+ const TP_BACKTICK = 59;
+ const YY_NO_ACTION = 541;
+ const YY_ACCEPT_ACTION = 540;
+ const YY_ERROR_ACTION = 539;
+
+ const YY_SZ_ACTTAB = 2565;
+public static $yy_action = array(
+ 33, 106, 269, 306, 179, 305, 200, 247, 248, 249,
+ 1, 264, 138, 237, 202, 361, 6, 87, 284, 222,
+ 338, 361, 112, 107, 400, 321, 217, 261, 218, 130,
+ 224, 400, 21, 400, 49, 44, 400, 32, 45, 46,
+ 278, 226, 400, 282, 400, 203, 400, 53, 4, 139,
+ 302, 231, 28, 102, 225, 5, 54, 247, 248, 249,
+ 1, 20, 135, 192, 193, 271, 6, 87, 246, 222,
+ 216, 29, 112, 229, 7, 159, 217, 261, 218, 140,
+ 208, 272, 21, 509, 53, 44, 13, 302, 45, 46,
+ 278, 226, 149, 235, 153, 203, 257, 53, 4, 328,
+ 302, 302, 256, 304, 143, 5, 54, 247, 248, 249,
+ 1, 302, 100, 394, 86, 236, 6, 87, 3, 222,
+ 102, 257, 112, 144, 97, 394, 217, 261, 218, 102,
+ 224, 394, 21, 256, 446, 44, 178, 305, 45, 46,
+ 278, 226, 302, 282, 200, 203, 446, 53, 4, 115,
+ 302, 47, 22, 285, 41, 5, 54, 247, 248, 249,
+ 1, 139, 137, 267, 202, 141, 6, 87, 14, 222,
+ 540, 99, 112, 151, 15, 446, 217, 261, 218, 314,
+ 224, 216, 21, 256, 233, 44, 9, 446, 45, 46,
+ 278, 226, 325, 282, 268, 203, 53, 53, 4, 302,
+ 302, 152, 257, 361, 320, 5, 54, 247, 248, 249,
+ 1, 264, 137, 102, 194, 361, 6, 87, 37, 222,
+ 102, 361, 112, 257, 89, 316, 217, 261, 218, 314,
+ 224, 216, 21, 36, 49, 44, 200, 40, 45, 46,
+ 278, 226, 115, 282, 237, 203, 14, 53, 4, 115,
+ 302, 238, 15, 155, 107, 5, 54, 247, 248, 249,
+ 1, 466, 136, 256, 202, 200, 6, 87, 466, 222,
+ 255, 171, 112, 264, 446, 310, 217, 261, 218, 158,
+ 224, 257, 11, 142, 157, 44, 446, 183, 45, 46,
+ 278, 226, 26, 282, 256, 203, 49, 53, 4, 446,
+ 302, 184, 260, 323, 176, 5, 54, 247, 248, 249,
+ 1, 446, 137, 264, 189, 291, 6, 87, 183, 222,
+ 200, 302, 112, 253, 178, 305, 217, 261, 218, 263,
+ 213, 18, 21, 200, 184, 44, 49, 15, 45, 46,
+ 278, 226, 146, 282, 269, 203, 25, 53, 4, 220,
+ 302, 312, 107, 152, 290, 5, 54, 247, 248, 249,
+ 1, 219, 137, 147, 187, 130, 6, 87, 259, 222,
+ 16, 19, 112, 256, 167, 258, 217, 261, 218, 111,
+ 224, 173, 21, 96, 256, 44, 200, 23, 45, 46,
+ 278, 226, 177, 282, 227, 203, 335, 53, 4, 174,
+ 302, 180, 305, 170, 90, 5, 54, 247, 248, 249,
+ 1, 184, 137, 256, 202, 91, 6, 87, 482, 222,
+ 160, 482, 112, 214, 197, 482, 217, 261, 218, 184,
+ 188, 181, 21, 245, 302, 44, 164, 140, 45, 46,
+ 278, 226, 466, 282, 13, 203, 166, 53, 4, 466,
+ 302, 42, 43, 286, 12, 5, 54, 247, 248, 249,
+ 1, 264, 139, 447, 202, 40, 6, 87, 293, 294,
+ 295, 296, 112, 17, 311, 447, 217, 261, 218, 337,
+ 224, 183, 21, 260, 49, 48, 244, 245, 45, 46,
+ 278, 226, 24, 282, 303, 203, 8, 53, 4, 92,
+ 302, 42, 43, 286, 12, 5, 54, 247, 248, 249,
+ 1, 10, 139, 9, 202, 317, 6, 87, 293, 294,
+ 295, 296, 112, 116, 299, 35, 217, 261, 218, 225,
+ 224, 198, 21, 98, 34, 44, 329, 324, 45, 46,
+ 278, 226, 448, 282, 448, 203, 161, 53, 4, 172,
+ 302, 129, 175, 225, 232, 5, 54, 288, 215, 216,
+ 252, 101, 93, 109, 243, 191, 103, 85, 450, 162,
+ 450, 24, 101, 330, 182, 273, 274, 300, 298, 301,
+ 250, 251, 281, 204, 283, 113, 289, 262, 300, 298,
+ 301, 121, 288, 215, 216, 252, 270, 93, 109, 275,
+ 190, 103, 60, 277, 279, 225, 237, 101, 280, 297,
+ 273, 274, 129, 239, 199, 266, 107, 281, 204, 283,
+ 7, 289, 101, 300, 298, 301, 288, 88, 216, 254,
+ 163, 114, 109, 265, 191, 103, 85, 200, 300, 298,
+ 301, 101, 200, 259, 273, 274, 19, 165, 326, 362,
+ 258, 281, 204, 283, 396, 289, 234, 300, 298, 301,
+ 288, 362, 216, 327, 200, 114, 396, 362, 201, 119,
+ 72, 336, 396, 37, 259, 101, 393, 19, 273, 274,
+ 154, 258, 228, 339, 94, 281, 204, 283, 393, 289,
+ 256, 300, 298, 301, 393, 38, 313, 288, 313, 216,
+ 313, 313, 114, 207, 319, 201, 119, 72, 313, 313,
+ 313, 313, 101, 221, 184, 273, 274, 156, 313, 313,
+ 313, 95, 281, 204, 283, 313, 289, 256, 300, 298,
+ 301, 313, 313, 313, 288, 313, 216, 313, 313, 108,
+ 206, 319, 201, 122, 51, 313, 120, 313, 313, 101,
+ 313, 184, 273, 274, 313, 313, 313, 313, 313, 281,
+ 204, 283, 313, 289, 313, 300, 298, 301, 288, 313,
+ 216, 313, 313, 114, 313, 313, 201, 122, 67, 313,
+ 313, 313, 313, 101, 313, 313, 273, 274, 313, 313,
+ 313, 313, 313, 281, 204, 283, 313, 289, 313, 300,
+ 298, 301, 288, 313, 216, 313, 313, 114, 212, 313,
+ 201, 122, 67, 313, 313, 313, 313, 101, 313, 313,
+ 273, 274, 313, 313, 313, 313, 313, 281, 204, 283,
+ 313, 289, 313, 300, 298, 301, 288, 313, 216, 313,
+ 313, 114, 205, 313, 201, 119, 72, 313, 313, 313,
+ 313, 101, 313, 313, 273, 274, 313, 313, 313, 313,
+ 313, 281, 204, 283, 313, 289, 313, 300, 298, 301,
+ 313, 313, 313, 288, 313, 216, 313, 313, 114, 313,
+ 318, 201, 122, 78, 313, 313, 313, 313, 101, 313,
+ 482, 273, 274, 482, 313, 313, 313, 482, 281, 204,
+ 283, 313, 289, 209, 211, 298, 301, 288, 313, 216,
+ 313, 313, 108, 313, 313, 201, 122, 58, 313, 238,
+ 313, 313, 101, 313, 313, 273, 274, 313, 313, 482,
+ 313, 313, 281, 204, 283, 313, 289, 313, 300, 298,
+ 301, 288, 313, 216, 313, 313, 114, 313, 313, 201,
+ 118, 64, 313, 313, 313, 313, 101, 313, 313, 273,
+ 274, 313, 313, 313, 313, 313, 281, 204, 283, 313,
+ 289, 313, 300, 298, 301, 288, 313, 216, 313, 313,
+ 114, 313, 313, 196, 117, 59, 313, 313, 313, 313,
+ 101, 313, 313, 273, 274, 313, 313, 313, 313, 313,
+ 281, 204, 283, 313, 289, 313, 300, 298, 301, 288,
+ 313, 216, 313, 313, 114, 313, 313, 201, 104, 84,
+ 313, 313, 313, 313, 101, 313, 313, 273, 274, 313,
+ 313, 313, 313, 313, 281, 204, 283, 313, 289, 313,
+ 300, 298, 301, 288, 313, 216, 313, 313, 114, 313,
+ 313, 201, 105, 83, 313, 313, 313, 313, 101, 313,
+ 313, 273, 274, 313, 313, 313, 313, 313, 281, 204,
+ 283, 313, 289, 313, 300, 298, 301, 288, 313, 216,
+ 313, 313, 114, 313, 313, 201, 122, 55, 313, 313,
+ 313, 313, 101, 313, 313, 273, 274, 313, 313, 313,
+ 313, 313, 281, 204, 283, 313, 289, 313, 300, 298,
+ 301, 288, 313, 216, 313, 313, 114, 313, 313, 201,
+ 122, 66, 313, 313, 313, 313, 101, 313, 313, 273,
+ 274, 313, 313, 313, 313, 313, 281, 204, 283, 313,
+ 289, 313, 300, 298, 301, 288, 313, 216, 313, 313,
+ 114, 313, 313, 201, 104, 56, 313, 313, 313, 313,
+ 101, 313, 313, 273, 274, 313, 313, 313, 313, 313,
+ 281, 204, 283, 313, 289, 313, 300, 298, 301, 288,
+ 313, 216, 313, 313, 114, 313, 313, 201, 122, 65,
+ 313, 313, 313, 313, 101, 313, 313, 273, 274, 313,
+ 313, 313, 313, 313, 281, 204, 283, 313, 289, 313,
+ 300, 298, 301, 288, 313, 216, 313, 313, 114, 313,
+ 313, 201, 122, 57, 313, 313, 313, 313, 101, 313,
+ 313, 273, 274, 313, 313, 313, 313, 313, 281, 204,
+ 283, 313, 289, 313, 300, 298, 301, 288, 313, 216,
+ 313, 313, 114, 313, 313, 201, 122, 58, 313, 313,
+ 313, 313, 101, 313, 313, 273, 274, 313, 313, 313,
+ 313, 313, 281, 204, 283, 313, 289, 313, 300, 298,
+ 301, 288, 313, 216, 313, 313, 114, 313, 313, 201,
+ 122, 68, 313, 313, 313, 313, 101, 313, 313, 273,
+ 274, 313, 313, 313, 313, 313, 281, 204, 283, 313,
+ 289, 313, 300, 298, 301, 288, 313, 216, 313, 313,
+ 114, 313, 313, 201, 122, 69, 313, 313, 313, 313,
+ 101, 313, 313, 273, 274, 313, 313, 313, 313, 313,
+ 281, 204, 283, 313, 289, 313, 300, 298, 301, 288,
+ 313, 216, 313, 313, 114, 313, 313, 201, 122, 70,
+ 313, 313, 313, 313, 101, 313, 313, 273, 274, 313,
+ 313, 313, 313, 313, 281, 204, 283, 313, 289, 313,
+ 300, 298, 301, 288, 313, 216, 313, 313, 114, 313,
+ 313, 201, 122, 71, 313, 313, 313, 313, 101, 313,
+ 313, 273, 274, 313, 313, 313, 313, 313, 281, 204,
+ 283, 313, 289, 313, 300, 298, 301, 288, 313, 216,
+ 313, 313, 114, 313, 313, 201, 122, 73, 313, 313,
+ 313, 313, 101, 313, 313, 273, 274, 313, 313, 313,
+ 313, 313, 281, 204, 283, 313, 289, 313, 300, 298,
+ 301, 288, 313, 216, 313, 313, 114, 313, 313, 195,
+ 122, 61, 313, 313, 313, 313, 101, 313, 313, 273,
+ 274, 313, 313, 313, 313, 313, 281, 204, 283, 313,
+ 289, 313, 300, 298, 301, 288, 313, 216, 313, 313,
+ 114, 313, 313, 201, 122, 62, 313, 313, 313, 313,
+ 101, 313, 313, 273, 274, 313, 313, 313, 313, 313,
+ 281, 204, 283, 313, 289, 313, 300, 298, 301, 288,
+ 313, 216, 313, 313, 114, 313, 313, 201, 122, 63,
+ 313, 313, 313, 313, 101, 313, 313, 273, 274, 313,
+ 313, 313, 313, 313, 281, 204, 283, 313, 289, 313,
+ 300, 298, 301, 288, 313, 216, 313, 313, 114, 313,
+ 313, 201, 122, 74, 313, 313, 313, 313, 101, 313,
+ 313, 273, 274, 313, 313, 313, 313, 313, 281, 204,
+ 283, 313, 289, 313, 300, 298, 301, 288, 313, 216,
+ 313, 313, 114, 313, 313, 201, 122, 75, 313, 313,
+ 313, 313, 101, 313, 313, 273, 274, 313, 313, 313,
+ 313, 313, 281, 204, 283, 313, 289, 313, 300, 298,
+ 301, 288, 313, 216, 313, 313, 114, 313, 313, 201,
+ 122, 76, 313, 313, 313, 313, 101, 313, 313, 273,
+ 274, 313, 313, 313, 313, 313, 281, 204, 283, 313,
+ 289, 313, 300, 298, 301, 288, 313, 216, 313, 313,
+ 114, 313, 313, 201, 122, 77, 313, 313, 313, 313,
+ 101, 313, 313, 273, 274, 313, 313, 313, 313, 313,
+ 281, 204, 283, 313, 289, 313, 300, 298, 301, 288,
+ 313, 216, 313, 313, 114, 313, 313, 201, 122, 79,
+ 313, 313, 313, 313, 101, 313, 313, 273, 274, 313,
+ 313, 313, 313, 313, 281, 204, 283, 313, 289, 313,
+ 210, 298, 301, 288, 313, 216, 313, 313, 114, 313,
+ 313, 201, 122, 80, 313, 313, 313, 313, 101, 313,
+ 313, 273, 274, 313, 313, 313, 313, 313, 281, 204,
+ 283, 313, 289, 313, 300, 298, 301, 288, 313, 216,
+ 313, 313, 114, 313, 313, 201, 122, 81, 313, 313,
+ 313, 313, 101, 313, 313, 273, 274, 313, 313, 313,
+ 313, 313, 281, 204, 283, 313, 289, 313, 300, 298,
+ 301, 288, 313, 216, 313, 313, 114, 313, 313, 201,
+ 122, 82, 313, 313, 313, 313, 101, 313, 313, 273,
+ 274, 313, 313, 313, 313, 313, 281, 204, 283, 313,
+ 289, 313, 300, 298, 301, 288, 313, 216, 313, 313,
+ 114, 313, 313, 201, 122, 50, 313, 313, 313, 313,
+ 101, 313, 313, 273, 274, 313, 313, 313, 313, 313,
+ 281, 204, 283, 313, 289, 313, 300, 298, 301, 288,
+ 313, 216, 313, 313, 114, 313, 313, 201, 122, 52,
+ 313, 313, 313, 313, 101, 313, 313, 273, 274, 313,
+ 313, 313, 313, 313, 281, 204, 283, 313, 289, 313,
+ 300, 298, 301, 288, 313, 216, 168, 313, 114, 313,
+ 313, 201, 134, 313, 313, 313, 256, 313, 101, 47,
+ 22, 285, 41, 313, 313, 313, 313, 333, 281, 204,
+ 283, 313, 289, 313, 300, 298, 301, 288, 313, 216,
+ 145, 313, 114, 313, 313, 201, 128, 313, 313, 313,
+ 256, 313, 101, 47, 22, 285, 41, 313, 313, 313,
+ 313, 287, 281, 204, 283, 315, 289, 313, 300, 298,
+ 301, 247, 248, 249, 2, 313, 313, 313, 313, 313,
+ 6, 87, 259, 313, 313, 19, 112, 313, 14, 258,
+ 217, 261, 218, 313, 15, 39, 313, 14, 14, 42,
+ 43, 286, 12, 15, 15, 313, 313, 313, 42, 43,
+ 286, 12, 313, 313, 313, 313, 293, 294, 295, 296,
+ 308, 27, 313, 313, 315, 293, 294, 295, 296, 313,
+ 247, 248, 249, 2, 313, 313, 313, 110, 313, 6,
+ 87, 313, 313, 313, 313, 112, 313, 313, 148, 217,
+ 261, 218, 313, 42, 43, 286, 12, 313, 42, 43,
+ 286, 12, 313, 313, 313, 313, 313, 313, 313, 313,
+ 293, 294, 295, 296, 313, 293, 294, 295, 296, 309,
+ 27, 313, 313, 240, 241, 242, 133, 223, 313, 247,
+ 248, 249, 1, 313, 482, 313, 313, 482, 6, 87,
+ 3, 482, 466, 313, 112, 313, 276, 313, 217, 261,
+ 218, 288, 313, 216, 313, 313, 114, 313, 313, 201,
+ 132, 313, 313, 313, 313, 313, 101, 313, 466, 313,
+ 313, 466, 313, 482, 313, 466, 281, 204, 283, 313,
+ 289, 313, 300, 298, 301, 313, 288, 313, 216, 313,
+ 200, 114, 313, 313, 201, 123, 313, 313, 313, 313,
+ 313, 101, 365, 313, 313, 313, 230, 313, 313, 313,
+ 313, 281, 204, 283, 14, 289, 313, 300, 298, 301,
+ 15, 313, 288, 446, 216, 313, 169, 114, 313, 313,
+ 201, 124, 313, 313, 313, 446, 256, 101, 313, 47,
+ 22, 285, 41, 313, 313, 313, 313, 281, 204, 283,
+ 313, 289, 313, 300, 298, 301, 313, 288, 313, 216,
+ 313, 313, 114, 313, 313, 201, 125, 313, 313, 313,
+ 313, 313, 101, 313, 313, 313, 313, 313, 313, 313,
+ 313, 313, 281, 204, 283, 313, 289, 313, 300, 298,
+ 301, 313, 313, 288, 313, 216, 313, 313, 114, 313,
+ 313, 201, 126, 313, 313, 313, 313, 313, 101, 313,
+ 313, 313, 313, 313, 313, 313, 313, 313, 281, 204,
+ 283, 313, 289, 313, 300, 298, 301, 313, 288, 313,
+ 216, 313, 313, 114, 313, 313, 201, 127, 313, 313,
+ 313, 313, 313, 101, 313, 313, 313, 313, 313, 313,
+ 313, 313, 313, 281, 204, 283, 313, 289, 313, 300,
+ 298, 301, 313, 313, 288, 313, 216, 223, 313, 114,
+ 313, 313, 201, 131, 482, 313, 313, 482, 313, 101,
+ 313, 482, 466, 313, 313, 313, 276, 313, 313, 281,
+ 204, 283, 313, 289, 313, 300, 298, 301, 313, 313,
+ 409, 313, 313, 313, 313, 313, 313, 313, 466, 313,
+ 313, 466, 313, 482, 223, 466, 292, 313, 313, 313,
+ 313, 482, 313, 313, 482, 313, 313, 36, 482, 466,
+ 313, 223, 446, 276, 409, 409, 409, 409, 482, 313,
+ 313, 482, 313, 313, 446, 482, 466, 313, 313, 30,
+ 276, 409, 409, 409, 409, 466, 482, 313, 466, 482,
+ 482, 313, 466, 482, 466, 313, 313, 313, 276, 313,
+ 313, 313, 466, 313, 313, 466, 332, 482, 313, 466,
+ 313, 313, 313, 313, 313, 331, 42, 43, 286, 12,
+ 466, 313, 313, 466, 313, 482, 313, 466, 313, 42,
+ 43, 286, 12, 293, 294, 295, 296, 307, 313, 42,
+ 43, 286, 12, 185, 313, 313, 293, 294, 295, 296,
+ 186, 313, 313, 313, 322, 313, 293, 294, 295, 296,
+ 42, 43, 286, 12, 31, 313, 42, 43, 286, 12,
+ 313, 334, 313, 42, 43, 286, 12, 293, 294, 295,
+ 296, 313, 313, 293, 294, 295, 296, 313, 313, 313,
+ 293, 294, 295, 296, 42, 43, 286, 12, 42, 43,
+ 286, 12, 482, 313, 313, 482, 313, 313, 313, 482,
+ 466, 293, 294, 295, 296, 293, 294, 295, 296, 313,
+ 313, 313, 259, 313, 313, 19, 313, 313, 313, 258,
+ 313, 313, 313, 313, 313, 313, 466, 313, 14, 466,
+ 150, 482, 313, 466, 15,
+ );
+ public static $yy_lookahead = array(
+ 2, 80, 100, 13, 102, 103, 1, 9, 10, 11,
+ 12, 21, 14, 70, 16, 25, 18, 19, 93, 21,
+ 77, 31, 24, 80, 13, 104, 28, 29, 30, 104,
+ 32, 20, 34, 22, 44, 37, 25, 39, 40, 41,
+ 42, 43, 31, 45, 33, 47, 35, 49, 50, 14,
+ 52, 16, 12, 17, 43, 57, 58, 9, 10, 11,
+ 12, 12, 14, 14, 16, 16, 18, 19, 65, 21,
+ 67, 12, 24, 14, 34, 16, 28, 29, 30, 43,
+ 32, 32, 34, 1, 49, 37, 50, 52, 40, 41,
+ 42, 43, 72, 45, 99, 47, 101, 49, 50, 51,
+ 52, 52, 82, 69, 14, 57, 58, 9, 10, 11,
+ 12, 52, 14, 13, 16, 15, 18, 19, 15, 21,
+ 17, 101, 24, 72, 34, 25, 28, 29, 30, 17,
+ 32, 31, 34, 82, 34, 37, 102, 103, 40, 41,
+ 42, 43, 52, 45, 1, 47, 46, 49, 50, 46,
+ 52, 85, 86, 87, 88, 57, 58, 9, 10, 11,
+ 12, 14, 14, 16, 16, 80, 18, 19, 25, 21,
+ 61, 62, 24, 72, 31, 34, 28, 29, 30, 65,
+ 32, 67, 34, 82, 43, 37, 33, 46, 40, 41,
+ 42, 43, 51, 45, 47, 47, 49, 49, 50, 52,
+ 52, 99, 101, 13, 51, 57, 58, 9, 10, 11,
+ 12, 21, 14, 17, 16, 25, 18, 19, 15, 21,
+ 17, 31, 24, 101, 110, 111, 28, 29, 30, 65,
+ 32, 67, 34, 15, 44, 37, 1, 2, 40, 41,
+ 42, 43, 46, 45, 70, 47, 25, 49, 50, 46,
+ 52, 77, 31, 72, 80, 57, 58, 9, 10, 11,
+ 12, 43, 14, 82, 16, 1, 18, 19, 50, 21,
+ 82, 76, 24, 21, 34, 111, 28, 29, 30, 99,
+ 32, 101, 34, 14, 72, 37, 46, 106, 40, 41,
+ 42, 43, 27, 45, 82, 47, 44, 49, 50, 34,
+ 52, 106, 107, 51, 76, 57, 58, 9, 10, 11,
+ 12, 46, 14, 21, 16, 51, 18, 19, 106, 21,
+ 1, 52, 24, 69, 102, 103, 28, 29, 30, 16,
+ 32, 25, 34, 1, 106, 37, 44, 31, 40, 41,
+ 42, 43, 70, 45, 100, 47, 27, 49, 50, 17,
+ 52, 59, 80, 99, 93, 57, 58, 9, 10, 11,
+ 12, 48, 14, 72, 16, 104, 18, 19, 9, 21,
+ 20, 12, 24, 82, 72, 16, 28, 29, 30, 79,
+ 32, 76, 34, 33, 82, 37, 1, 2, 40, 41,
+ 42, 43, 14, 45, 16, 47, 14, 49, 50, 76,
+ 52, 102, 103, 72, 80, 57, 58, 9, 10, 11,
+ 12, 106, 14, 82, 16, 80, 18, 19, 9, 21,
+ 99, 12, 24, 63, 64, 16, 28, 29, 30, 106,
+ 32, 6, 34, 8, 52, 37, 99, 43, 40, 41,
+ 42, 43, 43, 45, 50, 47, 99, 49, 50, 50,
+ 52, 36, 37, 38, 39, 57, 58, 9, 10, 11,
+ 12, 21, 14, 34, 16, 2, 18, 19, 53, 54,
+ 55, 56, 24, 15, 59, 46, 28, 29, 30, 21,
+ 32, 106, 34, 107, 44, 37, 7, 8, 40, 41,
+ 42, 43, 33, 45, 35, 47, 34, 49, 50, 99,
+ 52, 36, 37, 38, 39, 57, 58, 9, 10, 11,
+ 12, 34, 14, 33, 16, 35, 18, 19, 53, 54,
+ 55, 56, 24, 46, 103, 15, 28, 29, 30, 43,
+ 32, 64, 34, 81, 33, 37, 35, 51, 40, 41,
+ 42, 43, 33, 45, 35, 47, 99, 49, 50, 81,
+ 52, 70, 81, 43, 73, 57, 58, 65, 66, 67,
+ 68, 80, 70, 71, 7, 73, 74, 75, 33, 99,
+ 35, 33, 80, 35, 16, 83, 84, 96, 97, 98,
+ 13, 13, 90, 91, 92, 16, 94, 16, 96, 97,
+ 98, 16, 65, 66, 67, 68, 16, 70, 71, 14,
+ 73, 74, 75, 16, 32, 43, 70, 80, 32, 16,
+ 83, 84, 70, 77, 78, 73, 80, 90, 91, 92,
+ 34, 94, 80, 96, 97, 98, 65, 16, 67, 68,
+ 49, 70, 71, 91, 73, 74, 75, 1, 96, 97,
+ 98, 80, 1, 9, 83, 84, 12, 49, 51, 13,
+ 16, 90, 91, 92, 13, 94, 16, 96, 97, 98,
+ 65, 25, 67, 51, 1, 70, 25, 31, 73, 74,
+ 75, 16, 31, 15, 9, 80, 13, 12, 83, 84,
+ 72, 16, 48, 35, 76, 90, 91, 92, 25, 94,
+ 82, 96, 97, 98, 31, 22, 112, 65, 112, 67,
+ 112, 112, 70, 108, 109, 73, 74, 75, 112, 112,
+ 112, 112, 80, 48, 106, 83, 84, 72, 112, 112,
+ 112, 76, 90, 91, 92, 112, 94, 82, 96, 97,
+ 98, 112, 112, 112, 65, 112, 67, 112, 112, 70,
+ 108, 109, 73, 74, 75, 112, 77, 112, 112, 80,
+ 112, 106, 83, 84, 112, 112, 112, 112, 112, 90,
+ 91, 92, 112, 94, 112, 96, 97, 98, 65, 112,
+ 67, 112, 112, 70, 112, 112, 73, 74, 75, 112,
+ 112, 112, 112, 80, 112, 112, 83, 84, 112, 112,
+ 112, 112, 112, 90, 91, 92, 112, 94, 112, 96,
+ 97, 98, 65, 112, 67, 112, 112, 70, 105, 112,
+ 73, 74, 75, 112, 112, 112, 112, 80, 112, 112,
+ 83, 84, 112, 112, 112, 112, 112, 90, 91, 92,
+ 112, 94, 112, 96, 97, 98, 65, 112, 67, 112,
+ 112, 70, 105, 112, 73, 74, 75, 112, 112, 112,
+ 112, 80, 112, 112, 83, 84, 112, 112, 112, 112,
+ 112, 90, 91, 92, 112, 94, 112, 96, 97, 98,
+ 112, 112, 112, 65, 112, 67, 112, 112, 70, 112,
+ 109, 73, 74, 75, 112, 112, 112, 112, 80, 112,
+ 9, 83, 84, 12, 112, 112, 112, 16, 90, 91,
+ 92, 112, 94, 95, 96, 97, 98, 65, 112, 67,
+ 112, 112, 70, 112, 112, 73, 74, 75, 112, 77,
+ 112, 112, 80, 112, 112, 83, 84, 112, 112, 48,
+ 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
+ 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
+ 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
+ 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
+ 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
+ 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
+ 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
+ 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
+ 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
+ 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
+ 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
+ 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
+ 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
+ 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
+ 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
+ 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
+ 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
+ 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
+ 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
+ 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
+ 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
+ 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
+ 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
+ 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
+ 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
+ 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
+ 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
+ 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
+ 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
+ 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
+ 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
+ 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
+ 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
+ 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
+ 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
+ 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
+ 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
+ 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
+ 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
+ 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
+ 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
+ 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
+ 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
+ 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
+ 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
+ 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
+ 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
+ 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
+ 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
+ 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
+ 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
+ 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
+ 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
+ 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
+ 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
+ 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
+ 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
+ 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
+ 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
+ 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
+ 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
+ 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
+ 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
+ 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
+ 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
+ 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
+ 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
+ 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
+ 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
+ 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
+ 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
+ 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
+ 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
+ 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
+ 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
+ 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
+ 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
+ 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
+ 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
+ 96, 97, 98, 65, 112, 67, 112, 112, 70, 112,
+ 112, 73, 74, 75, 112, 112, 112, 112, 80, 112,
+ 112, 83, 84, 112, 112, 112, 112, 112, 90, 91,
+ 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
+ 112, 112, 70, 112, 112, 73, 74, 75, 112, 112,
+ 112, 112, 80, 112, 112, 83, 84, 112, 112, 112,
+ 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
+ 98, 65, 112, 67, 112, 112, 70, 112, 112, 73,
+ 74, 75, 112, 112, 112, 112, 80, 112, 112, 83,
+ 84, 112, 112, 112, 112, 112, 90, 91, 92, 112,
+ 94, 112, 96, 97, 98, 65, 112, 67, 112, 112,
+ 70, 112, 112, 73, 74, 75, 112, 112, 112, 112,
+ 80, 112, 112, 83, 84, 112, 112, 112, 112, 112,
+ 90, 91, 92, 112, 94, 112, 96, 97, 98, 65,
+ 112, 67, 112, 112, 70, 112, 112, 73, 74, 75,
+ 112, 112, 112, 112, 80, 112, 112, 83, 84, 112,
+ 112, 112, 112, 112, 90, 91, 92, 112, 94, 112,
+ 96, 97, 98, 65, 112, 67, 72, 112, 70, 112,
+ 112, 73, 74, 112, 112, 112, 82, 112, 80, 85,
+ 86, 87, 88, 112, 112, 112, 112, 89, 90, 91,
+ 92, 112, 94, 112, 96, 97, 98, 65, 112, 67,
+ 72, 112, 70, 112, 112, 73, 74, 112, 112, 112,
+ 82, 112, 80, 85, 86, 87, 88, 112, 112, 112,
+ 112, 89, 90, 91, 92, 3, 94, 112, 96, 97,
+ 98, 9, 10, 11, 12, 112, 14, 112, 112, 112,
+ 18, 19, 9, 112, 112, 12, 24, 112, 25, 16,
+ 28, 29, 30, 112, 31, 23, 112, 25, 25, 36,
+ 37, 38, 39, 31, 31, 112, 112, 112, 36, 37,
+ 38, 39, 112, 112, 112, 112, 53, 54, 55, 56,
+ 58, 59, 112, 112, 3, 53, 54, 55, 56, 112,
+ 9, 10, 11, 12, 112, 14, 112, 20, 112, 18,
+ 19, 112, 112, 112, 112, 24, 112, 112, 26, 28,
+ 29, 30, 112, 36, 37, 38, 39, 112, 36, 37,
+ 38, 39, 112, 112, 112, 112, 112, 112, 112, 112,
+ 53, 54, 55, 56, 112, 53, 54, 55, 56, 58,
+ 59, 112, 112, 3, 4, 5, 6, 2, 112, 9,
+ 10, 11, 12, 112, 9, 112, 112, 12, 18, 19,
+ 15, 16, 17, 112, 24, 112, 21, 112, 28, 29,
+ 30, 65, 112, 67, 112, 112, 70, 112, 112, 73,
+ 74, 112, 112, 112, 112, 112, 80, 112, 43, 112,
+ 112, 46, 112, 48, 112, 50, 90, 91, 92, 112,
+ 94, 112, 96, 97, 98, 112, 65, 112, 67, 112,
+ 1, 70, 112, 112, 73, 74, 112, 112, 112, 112,
+ 112, 80, 13, 112, 112, 112, 17, 112, 112, 112,
+ 112, 90, 91, 92, 25, 94, 112, 96, 97, 98,
+ 31, 112, 65, 34, 67, 112, 72, 70, 112, 112,
+ 73, 74, 112, 112, 112, 46, 82, 80, 112, 85,
+ 86, 87, 88, 112, 112, 112, 112, 90, 91, 92,
+ 112, 94, 112, 96, 97, 98, 112, 65, 112, 67,
+ 112, 112, 70, 112, 112, 73, 74, 112, 112, 112,
+ 112, 112, 80, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 90, 91, 92, 112, 94, 112, 96, 97,
+ 98, 112, 112, 65, 112, 67, 112, 112, 70, 112,
+ 112, 73, 74, 112, 112, 112, 112, 112, 80, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 90, 91,
+ 92, 112, 94, 112, 96, 97, 98, 112, 65, 112,
+ 67, 112, 112, 70, 112, 112, 73, 74, 112, 112,
+ 112, 112, 112, 80, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 90, 91, 92, 112, 94, 112, 96,
+ 97, 98, 112, 112, 65, 112, 67, 2, 112, 70,
+ 112, 112, 73, 74, 9, 112, 112, 12, 112, 80,
+ 112, 16, 17, 112, 112, 112, 21, 112, 112, 90,
+ 91, 92, 112, 94, 112, 96, 97, 98, 112, 112,
+ 2, 112, 112, 112, 112, 112, 112, 112, 43, 112,
+ 112, 46, 112, 48, 2, 50, 51, 112, 112, 112,
+ 112, 9, 112, 112, 12, 112, 112, 15, 16, 17,
+ 112, 2, 34, 21, 36, 37, 38, 39, 9, 112,
+ 112, 12, 112, 112, 46, 16, 17, 112, 112, 2,
+ 21, 53, 54, 55, 56, 43, 9, 112, 46, 12,
+ 48, 112, 50, 16, 17, 112, 112, 112, 21, 112,
+ 112, 112, 43, 112, 112, 46, 13, 48, 112, 50,
+ 112, 112, 112, 112, 112, 35, 36, 37, 38, 39,
+ 43, 112, 112, 46, 112, 48, 112, 50, 112, 36,
+ 37, 38, 39, 53, 54, 55, 56, 13, 112, 36,
+ 37, 38, 39, 13, 112, 112, 53, 54, 55, 56,
+ 13, 112, 112, 112, 51, 112, 53, 54, 55, 56,
+ 36, 37, 38, 39, 2, 112, 36, 37, 38, 39,
+ 112, 13, 112, 36, 37, 38, 39, 53, 54, 55,
+ 56, 112, 112, 53, 54, 55, 56, 112, 112, 112,
+ 53, 54, 55, 56, 36, 37, 38, 39, 36, 37,
+ 38, 39, 9, 112, 112, 12, 112, 112, 112, 16,
+ 17, 53, 54, 55, 56, 53, 54, 55, 56, 112,
+ 112, 112, 9, 112, 112, 12, 112, 112, 112, 16,
+ 112, 112, 112, 112, 112, 112, 43, 112, 25, 46,
+ 27, 48, 112, 50, 31,
+);
+ const YY_SHIFT_USE_DFLT = -11;
+ const YY_SHIFT_MAX = 239;
+ public static $yy_shift_ofst = array(
+ -11, 98, 98, 148, 198, 198, 248, 148, 148, 198,
+ 148, 248, -2, 48, 298, 148, 148, 148, 298, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 348, 148, 148, 148, 148, 148, 398, 148, 148, 148,
+ 448, 498, 498, 498, 498, 498, 498, 498, 498, 147,
+ 1962, 1953, 1953, 35, 1952, 2007, 2012, 2413, 2400, 2423,
+ 2444, 415, 2450, 2457, 2482, 2478, 465, 465, 465, 465,
+ 465, 465, 465, 465, 465, 465, 465, 465, 465, 465,
+ 465, 465, 465, 465, 465, 465, 2139, 90, 143, 2011,
+ 2533, 1963, 36, 103, 143, 143, 90, 90, 235, 2070,
+ 2075, 634, 59, 636, 641, 663, 359, 359, 203, 221,
+ 269, 221, 306, 332, 196, 378, 378, 264, 385, 319,
+ 221, 5, 5, 5, 5, 5, 5, 5, 5, 112,
+ 112, 82, 5, -11, -11, 2315, 2362, 2379, 2397, 2513,
+ 49, 665, 409, 218, 221, 221, 458, 221, 382, 221,
+ 382, 221, 394, 394, 221, 221, 221, 221, 394, 40,
+ 394, 394, 394, 399, 394, 399, 394, 221, 221, 221,
+ 221, 5, 463, 5, 5, 463, 5, 462, 112, 112,
+ 112, -11, -11, -11, -11, -11, -11, 2348, 11, 100,
+ -10, 190, 881, 141, 265, 292, 252, 425, 479, 350,
+ 313, 440, 240, 429, 477, 459, 480, 153, 486, 501,
+ 509, 535, 538, 510, 557, 567, 568, 558, 569, 571,
+ 575, 580, 585, 587, 562, 572, 576, 586, 593, 462,
+ 611, 581, 598, 640, 597, 612, 655, 658, 648, 673,
+);
+ const YY_REDUCE_USE_DFLT = -99;
+ const YY_REDUCE_MAX = 186;
+ public static $yy_reduce_ofst = array(
+ 109, 492, 527, 561, 595, 632, 669, 703, 737, 771,
+ 808, 842, 876, 910, 944, 978, 1012, 1046, 1080, 1114,
+ 1148, 1182, 1216, 1250, 1284, 1318, 1352, 1386, 1420, 1454,
+ 1488, 1522, 1556, 1590, 1624, 1658, 1692, 1726, 1760, 1794,
+ 1828, 1862, 2036, 2071, 2107, 2142, 2178, 2213, 2249, 542,
+ 1824, 1858, 2104, 481, 114, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 608, 536, 645, 164,
+ 20, 101, -98, 34, 181, 212, -57, 174, 195, 3,
+ 254, -5, -79, 228, 228, 228, 180, -5, 222, 51,
+ 272, 291, 302, 305, 222, -75, 261, 228, 228, 228,
+ 331, 323, 228, 228, 228, 228, 228, 228, 228, 222,
+ 299, 228, 228, 360, 228, 102, 102, 102, 102, 102,
+ 85, 122, 102, 102, 188, 188, 300, 188, 324, 188,
+ 335, 188, 244, 244, 188, 188, 188, 188, 244, 321,
+ 244, 244, 244, 337, 244, 347, 244, 188, 188, 188,
+ 188, 375, 376, 375, 375, 376, 375, 400, 421, 421,
+ 421, 467, 452, 468, 471, 447, 470,
+);
+ public static $yyExpectedTokens = array(
+ array(),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(2, 9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 39, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 51, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ),
+ array(14, 16, 47, 49, 52, ),
+ array(23, 25, 31, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(25, 31, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(25, 31, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(14, 16, 49, 52, ),
+ array(3, 9, 10, 11, 12, 14, 18, 19, 24, 28, 29, 30, 58, 59, ),
+ array(20, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(26, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(13, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(35, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 51, 53, 54, 55, 56, ),
+ array(13, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, 59, ),
+ array(13, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(13, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(2, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(13, 36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(36, 37, 38, 39, 53, 54, 55, 56, ),
+ array(1, 13, 17, 25, 31, 34, 46, ),
+ array(14, 34, 52, ),
+ array(1, 25, 31, ),
+ array(3, 9, 10, 11, 12, 14, 18, 19, 24, 28, 29, 30, 58, 59, ),
+ array(9, 12, 16, 25, 27, 31, ),
+ array(9, 12, 16, 25, 31, ),
+ array(17, 43, 50, ),
+ array(15, 17, 46, ),
+ array(1, 25, 31, ),
+ array(1, 25, 31, ),
+ array(14, 34, 52, ),
+ array(14, 34, 52, ),
+ array(1, 2, ),
+ array(3, 4, 5, 6, 9, 10, 11, 12, 18, 19, 24, 28, 29, 30, ),
+ array(2, 9, 12, 15, 16, 17, 21, 43, 46, 48, 50, ),
+ array(9, 12, 16, 48, ),
+ array(12, 14, 16, 52, ),
+ array(1, 13, 25, 31, ),
+ array(1, 13, 25, 31, ),
+ array(1, 13, 25, 31, ),
+ array(9, 12, 16, ),
+ array(9, 12, 16, ),
+ array(15, 17, 46, ),
+ array(25, 31, ),
+ array(14, 52, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(1, 17, ),
+ array(17, 46, ),
+ array(14, 16, ),
+ array(14, 16, ),
+ array(1, 51, ),
+ array(1, 2, ),
+ array(1, 27, ),
+ array(25, 31, ),
+ array(1, ),
+ array(1, ),
+ array(1, ),
+ array(1, ),
+ array(1, ),
+ array(1, ),
+ array(1, ),
+ array(1, ),
+ array(17, ),
+ array(17, ),
+ array(1, ),
+ array(1, ),
+ array(),
+ array(),
+ array(2, 9, 12, 16, 17, 21, 43, 46, 48, 50, 51, ),
+ array(2, 9, 12, 15, 16, 17, 21, 43, 46, 48, 50, ),
+ array(2, 9, 12, 16, 17, 21, 43, 46, 48, 50, ),
+ array(2, 9, 12, 16, 17, 21, 43, 46, 48, 50, ),
+ array(9, 12, 16, 17, 43, 46, 48, 50, ),
+ array(12, 14, 16, 32, 52, ),
+ array(9, 12, 16, 48, ),
+ array(9, 12, 16, ),
+ array(15, 43, 50, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(15, 21, ),
+ array(25, 31, ),
+ array(14, 52, ),
+ array(25, 31, ),
+ array(14, 52, ),
+ array(25, 31, ),
+ array(43, 50, ),
+ array(43, 50, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(43, 50, ),
+ array(12, 34, ),
+ array(43, 50, ),
+ array(43, 50, ),
+ array(43, 50, ),
+ array(43, 50, ),
+ array(43, 50, ),
+ array(43, 50, ),
+ array(43, 50, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(25, 31, ),
+ array(1, ),
+ array(2, ),
+ array(1, ),
+ array(1, ),
+ array(2, ),
+ array(1, ),
+ array(34, ),
+ array(17, ),
+ array(17, ),
+ array(17, ),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(2, 34, 36, 37, 38, 39, 46, 53, 54, 55, 56, ),
+ array(13, 20, 22, 25, 31, 33, 35, 43, ),
+ array(13, 15, 25, 31, 34, 46, ),
+ array(13, 21, 25, 31, 44, ),
+ array(13, 21, 25, 31, 44, ),
+ array(9, 12, 16, 48, ),
+ array(34, 43, 46, 51, ),
+ array(27, 34, 46, ),
+ array(21, 44, 59, ),
+ array(21, 44, 51, ),
+ array(6, 8, ),
+ array(7, 8, ),
+ array(20, 33, ),
+ array(16, 48, ),
+ array(21, 44, ),
+ array(34, 46, ),
+ array(34, 46, ),
+ array(34, 46, ),
+ array(33, 35, ),
+ array(33, 35, ),
+ array(33, 51, ),
+ array(43, 51, ),
+ array(33, 35, ),
+ array(33, 35, ),
+ array(33, 35, ),
+ array(33, 35, ),
+ array(15, 43, ),
+ array(7, ),
+ array(13, ),
+ array(13, ),
+ array(16, ),
+ array(16, ),
+ array(16, ),
+ array(16, ),
+ array(16, ),
+ array(14, ),
+ array(16, ),
+ array(43, ),
+ array(32, ),
+ array(32, ),
+ array(34, ),
+ array(16, ),
+ array(34, ),
+ array(16, ),
+ array(49, ),
+ array(49, ),
+ array(16, ),
+ array(51, ),
+ array(51, ),
+ array(16, ),
+ array(15, ),
+ array(35, ),
+ array(22, ),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+);
+ public static $yy_default = array(
+ 350, 539, 539, 539, 524, 524, 539, 501, 501, 539,
+ 452, 539, 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
+ 390, 369, 390, 539, 539, 539, 395, 539, 539, 539,
+ 363, 539, 539, 539, 539, 539, 374, 500, 413, 420,
+ 499, 525, 527, 526, 419, 421, 418, 422, 451, 449,
+ 397, 401, 402, 392, 395, 363, 433, 539, 390, 539,
+ 390, 390, 514, 454, 390, 390, 539, 539, 381, 340,
+ 453, 466, 539, 404, 404, 404, 466, 466, 454, 390,
+ 539, 390, 390, 384, 454, 539, 539, 404, 404, 404,
+ 371, 386, 404, 411, 424, 425, 426, 412, 417, 454,
+ 511, 424, 410, 348, 508, 453, 453, 453, 453, 453,
+ 539, 468, 466, 482, 360, 370, 539, 373, 539, 378,
+ 539, 379, 463, 464, 364, 366, 367, 368, 492, 466,
+ 491, 494, 493, 457, 458, 459, 460, 380, 376, 377,
+ 372, 382, 502, 385, 387, 503, 442, 466, 488, 515,
+ 512, 348, 507, 507, 507, 466, 466, 433, 429, 433,
+ 423, 423, 467, 433, 433, 423, 423, 346, 539, 539,
+ 539, 423, 433, 443, 539, 539, 539, 539, 429, 539,
+ 461, 461, 539, 429, 539, 539, 539, 539, 539, 539,
+ 539, 539, 539, 539, 429, 431, 539, 513, 539, 482,
+ 539, 539, 539, 539, 539, 438, 539, 539, 539, 398,
+ 341, 342, 343, 344, 345, 347, 349, 351, 352, 353,
+ 354, 355, 356, 357, 359, 388, 389, 484, 485, 486,
+ 506, 383, 504, 505, 427, 436, 437, 446, 447, 465,
+ 469, 470, 471, 405, 406, 407, 408, 409, 428, 430,
+ 432, 434, 438, 439, 440, 414, 415, 416, 441, 444,
+ 445, 479, 477, 516, 517, 518, 519, 455, 456, 490,
+ 461, 462, 483, 498, 358, 489, 535, 536, 528, 529,
+ 530, 533, 532, 534, 537, 538, 531, 521, 523, 522,
+ 520, 495, 480, 478, 476, 473, 474, 475, 481, 496,
+ 497, 435, 472, 510, 487, 482, 391, 375, 399, 403,
+);
+ const YYNOCODE = 113;
+ const YYSTACKDEPTH = 500;
+ const YYNSTATE = 340;
+ const YYNRULE = 199;
+ const YYERRORSYMBOL = 60;
+ const YYERRSYMDT = 'yy0';
+ const YYFALLBACK = 0;
+ public static $yyFallback = array(
+ );
+ public function Trace($TraceFILE, $zTracePrompt)
+ {
+ if (!$TraceFILE) {
+ $zTracePrompt = 0;
+ } elseif (!$zTracePrompt) {
+ $TraceFILE = 0;
+ }
+ $this->yyTraceFILE = $TraceFILE;
+ $this->yyTracePrompt = $zTracePrompt;
+ }
+
+ public function PrintTrace()
+ {
+ $this->yyTraceFILE = fopen('php://output', 'w');
+ $this->yyTracePrompt = ' ';
+ }
+
+ public $yyTraceFILE;
+ public $yyTracePrompt;
+ public $yyidx; /* Index of top element in stack */
+ public $yyerrcnt; /* Shifts left before out of the error */
+ public $yystack = array(); /* The parser's stack */
+
+ public $yyTokenName = array(
+ '$', 'VERT', 'COLON', 'TEXT',
+ 'STRIPON', 'STRIPOFF', 'LITERALSTART', 'LITERALEND',
+ 'LITERAL', 'SIMPELOUTPUT', 'SIMPLETAG', 'SMARTYBLOCKCHILDPARENT',
+ 'LDEL', 'RDEL', 'DOLLARID', 'EQUAL',
+ 'ID', 'PTR', 'LDELIF', 'LDELFOR',
+ 'SEMICOLON', 'INCDEC', 'TO', 'STEP',
+ 'LDELFOREACH', 'SPACE', 'AS', 'APTR',
+ 'LDELSETFILTER', 'CLOSETAG', 'LDELSLASH', 'ATTR',
+ 'INTEGER', 'COMMA', 'OPENP', 'CLOSEP',
+ 'MATH', 'UNIMATH', 'ISIN', 'QMARK',
+ 'NOT', 'TYPECAST', 'HEX', 'DOT',
+ 'INSTANCEOF', 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'NAMESPACE',
+ 'AT', 'HATCH', 'OPENB', 'CLOSEB',
+ 'DOLLAR', 'LOGOP', 'SLOGOP', 'TLOGOP',
+ 'SINGLECOND', 'ARRAYOPEN', 'QUOTE', 'BACKTICK',
+ 'error', 'start', 'template', 'literal_e2',
+ 'literal_e1', 'smartytag', 'tagbody', 'tag',
+ 'outattr', 'eqoutattr', 'varindexed', 'output',
+ 'attributes', 'variablevalue', 'value', 'expr',
+ 'modifierlist', 'statement', 'statements', 'foraction',
+ 'varvar', 'modparameters', 'attribute', 'nullcoalescing',
+ 'ternary', 'tlop', 'lop', 'scond',
+ 'isin', 'array', 'function', 'ns1',
+ 'doublequoted_with_quotes', 'static_class_access', 'arraydef', 'variablelist',
+ 'variable', 'object', 'configvariable', 'arrayindex',
+ 'indexdef', 'varvarele', 'objectchain', 'objectelement',
+ 'method', 'params', 'modifier', 'modparameter',
+ 'arrayelements', 'arrayelement', 'doublequoted', 'doublequotedcontent',
+ );
+
+ public static $yyRuleName = array(
+ 'start ::= template',
+ 'template ::= template TEXT',
+ 'template ::= template STRIPON',
+ 'template ::= template STRIPOFF',
+ 'template ::= template LITERALSTART literal_e2 LITERALEND',
+ 'literal_e2 ::= literal_e1 LITERALSTART literal_e1 LITERALEND',
+ 'literal_e2 ::= literal_e1',
+ 'literal_e1 ::= literal_e1 LITERAL',
+ 'literal_e1 ::=',
+ 'template ::= template smartytag',
+ 'template ::=',
+ 'smartytag ::= SIMPELOUTPUT',
+ 'smartytag ::= SIMPLETAG',
+ 'smartytag ::= SMARTYBLOCKCHILDPARENT',
+ 'smartytag ::= LDEL tagbody RDEL',
+ 'smartytag ::= tag RDEL',
+ 'tagbody ::= outattr',
+ 'tagbody ::= DOLLARID eqoutattr',
+ 'tagbody ::= varindexed eqoutattr',
+ 'eqoutattr ::= EQUAL outattr',
+ 'outattr ::= output attributes',
+ 'output ::= variablevalue',
+ 'output ::= value',
+ 'output ::= expr',
+ 'tag ::= LDEL ID attributes',
+ 'tag ::= LDEL ID',
+ 'tag ::= LDEL ID modifierlist attributes',
+ 'tag ::= LDEL ID PTR ID attributes',
+ 'tag ::= LDEL ID PTR ID modifierlist attributes',
+ 'tag ::= LDELIF expr',
+ 'tag ::= LDELIF expr attributes',
+ 'tag ::= LDELIF statement',
+ 'tag ::= LDELIF statement attributes',
+ 'tag ::= LDELFOR statements SEMICOLON expr SEMICOLON varindexed foraction attributes',
+ 'foraction ::= EQUAL expr',
+ 'foraction ::= INCDEC',
+ 'tag ::= LDELFOR statement TO expr attributes',
+ 'tag ::= LDELFOR statement TO expr STEP expr attributes',
+ 'tag ::= LDELFOREACH SPACE expr AS varvar attributes',
+ 'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes',
+ 'tag ::= LDELFOREACH attributes',
+ 'tag ::= LDELSETFILTER ID modparameters',
+ 'tag ::= LDELSETFILTER ID modparameters modifierlist',
+ 'smartytag ::= CLOSETAG',
+ 'tag ::= LDELSLASH ID',
+ 'tag ::= LDELSLASH ID modifierlist',
+ 'tag ::= LDELSLASH ID PTR ID',
+ 'tag ::= LDELSLASH ID PTR ID modifierlist',
+ 'attributes ::= attributes attribute',
+ 'attributes ::= attribute',
+ 'attributes ::=',
+ 'attribute ::= SPACE ID EQUAL ID',
+ 'attribute ::= ATTR expr',
+ 'attribute ::= ATTR value',
+ 'attribute ::= SPACE ID',
+ 'attribute ::= SPACE expr',
+ 'attribute ::= SPACE value',
+ 'attribute ::= SPACE INTEGER EQUAL expr',
+ 'statements ::= statement',
+ 'statements ::= statements COMMA statement',
+ 'statement ::= DOLLARID EQUAL INTEGER',
+ 'statement ::= DOLLARID EQUAL expr',
+ 'statement ::= varindexed EQUAL expr',
+ 'statement ::= OPENP statement CLOSEP',
+ 'expr ::= value',
+ 'expr ::= nullcoalescing',
+ 'expr ::= ternary',
+ 'expr ::= INCDEC DOLLARID',
+ 'expr ::= DOLLARID INCDEC',
+ 'expr ::= DOLLARID COLON ID',
+ 'expr ::= expr MATH value',
+ 'expr ::= expr UNIMATH value',
+ 'expr ::= expr tlop value',
+ 'expr ::= expr lop expr',
+ 'expr ::= expr scond',
+ 'isin ::= ISIN',
+ 'expr ::= expr isin array',
+ 'expr ::= expr isin value',
+ 'nullcoalescing ::= expr QMARK QMARK expr',
+ 'ternary ::= expr QMARK DOLLARID COLON expr',
+ 'ternary ::= expr QMARK value COLON expr',
+ 'ternary ::= expr QMARK expr COLON expr',
+ 'ternary ::= expr QMARK COLON expr',
+ 'value ::= variablevalue',
+ 'value ::= UNIMATH value',
+ 'value ::= NOT value',
+ 'value ::= TYPECAST value',
+ 'value ::= variablevalue INCDEC',
+ 'value ::= HEX',
+ 'value ::= INTEGER',
+ 'value ::= INTEGER DOT INTEGER',
+ 'value ::= INTEGER DOT',
+ 'value ::= DOT INTEGER',
+ 'value ::= ID',
+ 'value ::= function',
+ 'value ::= OPENP expr CLOSEP',
+ 'value ::= variablevalue INSTANCEOF ns1',
+ 'value ::= variablevalue INSTANCEOF variablevalue',
+ 'value ::= SINGLEQUOTESTRING',
+ 'value ::= doublequoted_with_quotes',
+ 'value ::= varindexed DOUBLECOLON static_class_access',
+ 'value ::= smartytag',
+ 'value ::= value modifierlist',
+ 'value ::= NAMESPACE',
+ 'value ::= arraydef',
+ 'value ::= ns1 DOUBLECOLON static_class_access',
+ 'ns1 ::= ID',
+ 'ns1 ::= NAMESPACE',
+ 'variablelist ::= variablelist COMMA variable',
+ 'variablelist ::= variablelist COMMA expr',
+ 'variablelist ::= variable',
+ 'variablelist ::= expr',
+ 'variablelist ::=',
+ 'variable ::= DOLLARID',
+ 'variable ::= varindexed',
+ 'variable ::= varvar AT ID',
+ 'variable ::= object',
+ 'configvariable ::= HATCH ID HATCH',
+ 'configvariable ::= HATCH ID HATCH arrayindex',
+ 'configvariable ::= HATCH variablevalue HATCH',
+ 'configvariable ::= HATCH variablevalue HATCH arrayindex',
+ 'variablevalue ::= variable',
+ 'variablevalue ::= configvariable',
+ 'varindexed ::= DOLLARID arrayindex',
+ 'varindexed ::= varvar arrayindex',
+ 'arrayindex ::= arrayindex indexdef',
+ 'arrayindex ::=',
+ 'indexdef ::= DOT DOLLARID',
+ 'indexdef ::= DOT varvar',
+ 'indexdef ::= DOT varvar AT ID',
+ 'indexdef ::= DOT ID',
+ 'indexdef ::= DOT INTEGER',
+ 'indexdef ::= DOT LDEL expr RDEL',
+ 'indexdef ::= OPENB ID CLOSEB',
+ 'indexdef ::= OPENB ID DOT ID CLOSEB',
+ 'indexdef ::= OPENB SINGLEQUOTESTRING CLOSEB',
+ 'indexdef ::= OPENB INTEGER CLOSEB',
+ 'indexdef ::= OPENB DOLLARID CLOSEB',
+ 'indexdef ::= OPENB variablevalue CLOSEB',
+ 'indexdef ::= OPENB value CLOSEB',
+ 'indexdef ::= OPENB expr CLOSEB',
+ 'indexdef ::= OPENB CLOSEB',
+ 'varvar ::= DOLLARID',
+ 'varvar ::= DOLLAR',
+ 'varvar ::= varvar varvarele',
+ 'varvarele ::= ID',
+ 'varvarele ::= SIMPELOUTPUT',
+ 'varvarele ::= LDEL expr RDEL',
+ 'object ::= varindexed objectchain',
+ 'objectchain ::= objectelement',
+ 'objectchain ::= objectchain objectelement',
+ 'objectelement ::= PTR ID arrayindex',
+ 'objectelement ::= PTR varvar arrayindex',
+ 'objectelement ::= PTR LDEL expr RDEL arrayindex',
+ 'objectelement ::= PTR ID LDEL expr RDEL arrayindex',
+ 'objectelement ::= PTR method',
+ 'function ::= ns1 OPENP variablelist CLOSEP',
+ 'method ::= ID OPENP params CLOSEP',
+ 'method ::= DOLLARID OPENP params CLOSEP',
+ 'params ::= params COMMA expr',
+ 'params ::= expr',
+ 'params ::=',
+ 'modifierlist ::= modifierlist modifier modparameters',
+ 'modifierlist ::= modifier modparameters',
+ 'modifier ::= VERT AT ID',
+ 'modifier ::= VERT ID',
+ 'modparameters ::= modparameters modparameter',
+ 'modparameters ::=',
+ 'modparameter ::= COLON value',
+ 'modparameter ::= COLON UNIMATH value',
+ 'modparameter ::= COLON array',
+ 'static_class_access ::= method',
+ 'static_class_access ::= method objectchain',
+ 'static_class_access ::= ID',
+ 'static_class_access ::= DOLLARID arrayindex',
+ 'static_class_access ::= DOLLARID arrayindex objectchain',
+ 'lop ::= LOGOP',
+ 'lop ::= SLOGOP',
+ 'tlop ::= TLOGOP',
+ 'scond ::= SINGLECOND',
+ 'arraydef ::= OPENB arrayelements CLOSEB',
+ 'arraydef ::= ARRAYOPEN arrayelements CLOSEP',
+ 'arrayelements ::= arrayelement',
+ 'arrayelements ::= arrayelements COMMA arrayelement',
+ 'arrayelements ::=',
+ 'arrayelement ::= value APTR expr',
+ 'arrayelement ::= ID APTR expr',
+ 'arrayelement ::= expr',
+ 'doublequoted_with_quotes ::= QUOTE QUOTE',
+ 'doublequoted_with_quotes ::= QUOTE doublequoted QUOTE',
+ 'doublequoted ::= doublequoted doublequotedcontent',
+ 'doublequoted ::= doublequotedcontent',
+ 'doublequotedcontent ::= BACKTICK variablevalue BACKTICK',
+ 'doublequotedcontent ::= BACKTICK expr BACKTICK',
+ 'doublequotedcontent ::= DOLLARID',
+ 'doublequotedcontent ::= LDEL variablevalue RDEL',
+ 'doublequotedcontent ::= LDEL expr RDEL',
+ 'doublequotedcontent ::= smartytag',
+ 'doublequotedcontent ::= TEXT',
+ );
+
+ public function tokenName($tokenType)
+ {
+ if ($tokenType === 0) {
+ return 'End of Input';
+ }
+ if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) {
+ return $this->yyTokenName[$tokenType];
+ } else {
+ return 'Unknown';
+ }
+ }
+
+ public static function yy_destructor($yymajor, $yypminor)
+ {
+ switch ($yymajor) {
+ default: break; /* If no destructor action specified: do nothing */
+ }
+ }
+
+ public function yy_pop_parser_stack()
+ {
+ if (empty($this->yystack)) {
+ return;
+ }
+ $yytos = array_pop($this->yystack);
+ if ($this->yyTraceFILE && $this->yyidx >= 0) {
+ fwrite($this->yyTraceFILE,
+ $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
+ "\n");
+ }
+ $yymajor = $yytos->major;
+ self::yy_destructor($yymajor, $yytos->minor);
+ $this->yyidx--;
+
+ return $yymajor;
+ }
+
+ public function __destruct()
+ {
+ while ($this->yystack !== Array()) {
+ $this->yy_pop_parser_stack();
+ }
+ if (is_resource($this->yyTraceFILE)) {
+ fclose($this->yyTraceFILE);
+ }
+ }
+
+ public function yy_get_expected_tokens($token)
+ {
+ static $res3 = array();
+ static $res4 = array();
+ $state = $this->yystack[$this->yyidx]->stateno;
+ $expected = self::$yyExpectedTokens[$state];
+ if (isset($res3[$state][$token])) {
+ if ($res3[$state][$token]) {
+ return $expected;
+ }
+ } else {
+ if ($res3[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) {
+ return $expected;
+ }
+ }
+ $stack = $this->yystack;
+ $yyidx = $this->yyidx;
+ do {
+ $yyact = $this->yy_find_shift_action($token);
+ if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
+ // reduce action
+ $done = 0;
+ do {
+ if ($done++ === 100) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // too much recursion prevents proper detection
+ // so give up
+ return array_unique($expected);
+ }
+ $yyruleno = $yyact - self::YYNSTATE;
+ $this->yyidx -= self::$yyRuleInfo[$yyruleno][1];
+ $nextstate = $this->yy_find_reduce_action(
+ $this->yystack[$this->yyidx]->stateno,
+ self::$yyRuleInfo[$yyruleno][0]);
+ if (isset(self::$yyExpectedTokens[$nextstate])) {
+ $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
+ if (isset($res4[$nextstate][$token])) {
+ if ($res4[$nextstate][$token]) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return array_unique($expected);
+ }
+ } else {
+ if ($res4[$nextstate][$token] = in_array($token, self::$yyExpectedTokens[$nextstate], true)) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return array_unique($expected);
+ }
+ }
+ }
+ if ($nextstate < self::YYNSTATE) {
+ // we need to shift a non-terminal
+ $this->yyidx++;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = $nextstate;
+ $x->major = self::$yyRuleInfo[$yyruleno][0];
+ $this->yystack[$this->yyidx] = $x;
+ continue 2;
+ } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // the last token was just ignored, we can't accept
+ // by ignoring input, this is in essence ignoring a
+ // syntax error!
+ return array_unique($expected);
+ } elseif ($nextstate === self::YY_NO_ACTION) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // input accepted, but not shifted (I guess)
+ return $expected;
+ } else {
+ $yyact = $nextstate;
+ }
+ } while (true);
+ }
+ break;
+ } while (true);
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+
+ return array_unique($expected);
+ }
+
+ public function yy_is_expected_token($token)
+ {
+ static $res = array();
+ static $res2 = array();
+ if ($token === 0) {
+ return true; // 0 is not part of this
+ }
+ $state = $this->yystack[$this->yyidx]->stateno;
+ if (isset($res[$state][$token])) {
+ if ($res[$state][$token]) {
+ return true;
+ }
+ } else {
+ if ($res[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) {
+ return true;
+ }
+ }
+ $stack = $this->yystack;
+ $yyidx = $this->yyidx;
+ do {
+ $yyact = $this->yy_find_shift_action($token);
+ if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
+ // reduce action
+ $done = 0;
+ do {
+ if ($done++ === 100) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // too much recursion prevents proper detection
+ // so give up
+ return true;
+ }
+ $yyruleno = $yyact - self::YYNSTATE;
+ $this->yyidx -= self::$yyRuleInfo[$yyruleno][1];
+ $nextstate = $this->yy_find_reduce_action(
+ $this->yystack[$this->yyidx]->stateno,
+ self::$yyRuleInfo[$yyruleno][0]);
+ if (isset($res2[$nextstate][$token])) {
+ if ($res2[$nextstate][$token]) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return true;
+ }
+ } else {
+ if ($res2[$nextstate][$token] = (isset(self::$yyExpectedTokens[$nextstate]) && in_array($token, self::$yyExpectedTokens[$nextstate], true))) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ return true;
+ }
+ }
+ if ($nextstate < self::YYNSTATE) {
+ // we need to shift a non-terminal
+ $this->yyidx++;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = $nextstate;
+ $x->major = self::$yyRuleInfo[$yyruleno][0];
+ $this->yystack[$this->yyidx] = $x;
+ continue 2;
+ } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ if (!$token) {
+ // end of input: this is valid
+ return true;
+ }
+ // the last token was just ignored, we can't accept
+ // by ignoring input, this is in essence ignoring a
+ // syntax error!
+ return false;
+ } elseif ($nextstate === self::YY_NO_ACTION) {
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+ // input accepted, but not shifted (I guess)
+ return true;
+ } else {
+ $yyact = $nextstate;
+ }
+ } while (true);
+ }
+ break;
+ } while (true);
+ $this->yyidx = $yyidx;
+ $this->yystack = $stack;
+
+ return true;
+ }
+
+ public function yy_find_shift_action($iLookAhead)
+ {
+ $stateno = $this->yystack[$this->yyidx]->stateno;
+
+ /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */
+ if (!isset(self::$yy_shift_ofst[$stateno])) {
+ // no shift actions
+ return self::$yy_default[$stateno];
+ }
+ $i = self::$yy_shift_ofst[$stateno];
+ if ($i === self::YY_SHIFT_USE_DFLT) {
+ return self::$yy_default[$stateno];
+ }
+ if ($iLookAhead === self::YYNOCODE) {
+ return self::YY_NO_ACTION;
+ }
+ $i += $iLookAhead;
+ if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
+ self::$yy_lookahead[$i] != $iLookAhead) {
+ if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)
+ && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) {
+ if ($this->yyTraceFILE) {
+ fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'FALLBACK ' .
+ $this->yyTokenName[$iLookAhead] . ' => ' .
+ $this->yyTokenName[$iFallback] . "\n");
+ }
+
+ return $this->yy_find_shift_action($iFallback);
+ }
+
+ return self::$yy_default[$stateno];
+ } else {
+ return self::$yy_action[$i];
+ }
+ }
+
+ public function yy_find_reduce_action($stateno, $iLookAhead)
+ {
+ /* $stateno = $this->yystack[$this->yyidx]->stateno; */
+
+ if (!isset(self::$yy_reduce_ofst[$stateno])) {
+ return self::$yy_default[$stateno];
+ }
+ $i = self::$yy_reduce_ofst[$stateno];
+ if ($i === self::YY_REDUCE_USE_DFLT) {
+ return self::$yy_default[$stateno];
+ }
+ if ($iLookAhead === self::YYNOCODE) {
+ return self::YY_NO_ACTION;
+ }
+ $i += $iLookAhead;
+ if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
+ self::$yy_lookahead[$i] != $iLookAhead) {
+ return self::$yy_default[$stateno];
+ } else {
+ return self::$yy_action[$i];
+ }
+ }
+
+ public function yy_shift($yyNewState, $yyMajor, $yypMinor)
+ {
+ $this->yyidx++;
+ if ($this->yyidx >= self::YYSTACKDEPTH) {
+ $this->yyidx--;
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
+ }
+ while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+// line 232 "src/Parser/TemplateParser.y"
+
+ $this->internalError = true;
+ $this->compiler->trigger_template_error('Stack overflow in template parser');
+
+ return;
+ }
+ $yytos = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $yytos->stateno = $yyNewState;
+ $yytos->major = $yyMajor;
+ $yytos->minor = $yypMinor;
+ $this->yystack[] = $yytos;
+ if ($this->yyTraceFILE && $this->yyidx > 0) {
+ fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt,
+ $yyNewState);
+ fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt);
+ for ($i = 1; $i <= $this->yyidx; $i++) {
+ fprintf($this->yyTraceFILE, " %s",
+ $this->yyTokenName[$this->yystack[$i]->major]);
+ }
+ fwrite($this->yyTraceFILE,"\n");
+ }
+ }
+
+ public static $yyRuleInfo = array(
+ array( 0 => 61, 1 => 1 ),
+ array( 0 => 62, 1 => 2 ),
+ array( 0 => 62, 1 => 2 ),
+ array( 0 => 62, 1 => 2 ),
+ array( 0 => 62, 1 => 4 ),
+ array( 0 => 63, 1 => 4 ),
+ array( 0 => 63, 1 => 1 ),
+ array( 0 => 64, 1 => 2 ),
+ array( 0 => 64, 1 => 0 ),
+ array( 0 => 62, 1 => 2 ),
+ array( 0 => 62, 1 => 0 ),
+ array( 0 => 65, 1 => 1 ),
+ array( 0 => 65, 1 => 1 ),
+ array( 0 => 65, 1 => 1 ),
+ array( 0 => 65, 1 => 3 ),
+ array( 0 => 65, 1 => 2 ),
+ array( 0 => 66, 1 => 1 ),
+ array( 0 => 66, 1 => 2 ),
+ array( 0 => 66, 1 => 2 ),
+ array( 0 => 69, 1 => 2 ),
+ array( 0 => 68, 1 => 2 ),
+ array( 0 => 71, 1 => 1 ),
+ array( 0 => 71, 1 => 1 ),
+ array( 0 => 71, 1 => 1 ),
+ array( 0 => 67, 1 => 3 ),
+ array( 0 => 67, 1 => 2 ),
+ array( 0 => 67, 1 => 4 ),
+ array( 0 => 67, 1 => 5 ),
+ array( 0 => 67, 1 => 6 ),
+ array( 0 => 67, 1 => 2 ),
+ array( 0 => 67, 1 => 3 ),
+ array( 0 => 67, 1 => 2 ),
+ array( 0 => 67, 1 => 3 ),
+ array( 0 => 67, 1 => 8 ),
+ array( 0 => 79, 1 => 2 ),
+ array( 0 => 79, 1 => 1 ),
+ array( 0 => 67, 1 => 5 ),
+ array( 0 => 67, 1 => 7 ),
+ array( 0 => 67, 1 => 6 ),
+ array( 0 => 67, 1 => 8 ),
+ array( 0 => 67, 1 => 2 ),
+ array( 0 => 67, 1 => 3 ),
+ array( 0 => 67, 1 => 4 ),
+ array( 0 => 65, 1 => 1 ),
+ array( 0 => 67, 1 => 2 ),
+ array( 0 => 67, 1 => 3 ),
+ array( 0 => 67, 1 => 4 ),
+ array( 0 => 67, 1 => 5 ),
+ array( 0 => 72, 1 => 2 ),
+ array( 0 => 72, 1 => 1 ),
+ array( 0 => 72, 1 => 0 ),
+ array( 0 => 82, 1 => 4 ),
+ array( 0 => 82, 1 => 2 ),
+ array( 0 => 82, 1 => 2 ),
+ array( 0 => 82, 1 => 2 ),
+ array( 0 => 82, 1 => 2 ),
+ array( 0 => 82, 1 => 2 ),
+ array( 0 => 82, 1 => 4 ),
+ array( 0 => 78, 1 => 1 ),
+ array( 0 => 78, 1 => 3 ),
+ array( 0 => 77, 1 => 3 ),
+ array( 0 => 77, 1 => 3 ),
+ array( 0 => 77, 1 => 3 ),
+ array( 0 => 77, 1 => 3 ),
+ array( 0 => 75, 1 => 1 ),
+ array( 0 => 75, 1 => 1 ),
+ array( 0 => 75, 1 => 1 ),
+ array( 0 => 75, 1 => 2 ),
+ array( 0 => 75, 1 => 2 ),
+ array( 0 => 75, 1 => 3 ),
+ array( 0 => 75, 1 => 3 ),
+ array( 0 => 75, 1 => 3 ),
+ array( 0 => 75, 1 => 3 ),
+ array( 0 => 75, 1 => 3 ),
+ array( 0 => 75, 1 => 2 ),
+ array( 0 => 88, 1 => 1 ),
+ array( 0 => 75, 1 => 3 ),
+ array( 0 => 75, 1 => 3 ),
+ array( 0 => 83, 1 => 4 ),
+ array( 0 => 84, 1 => 5 ),
+ array( 0 => 84, 1 => 5 ),
+ array( 0 => 84, 1 => 5 ),
+ array( 0 => 84, 1 => 4 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 2 ),
+ array( 0 => 74, 1 => 2 ),
+ array( 0 => 74, 1 => 2 ),
+ array( 0 => 74, 1 => 2 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 3 ),
+ array( 0 => 74, 1 => 2 ),
+ array( 0 => 74, 1 => 2 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 3 ),
+ array( 0 => 74, 1 => 3 ),
+ array( 0 => 74, 1 => 3 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 3 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 2 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 1 ),
+ array( 0 => 74, 1 => 3 ),
+ array( 0 => 91, 1 => 1 ),
+ array( 0 => 91, 1 => 1 ),
+ array( 0 => 95, 1 => 3 ),
+ array( 0 => 95, 1 => 3 ),
+ array( 0 => 95, 1 => 1 ),
+ array( 0 => 95, 1 => 1 ),
+ array( 0 => 95, 1 => 0 ),
+ array( 0 => 96, 1 => 1 ),
+ array( 0 => 96, 1 => 1 ),
+ array( 0 => 96, 1 => 3 ),
+ array( 0 => 96, 1 => 1 ),
+ array( 0 => 98, 1 => 3 ),
+ array( 0 => 98, 1 => 4 ),
+ array( 0 => 98, 1 => 3 ),
+ array( 0 => 98, 1 => 4 ),
+ array( 0 => 73, 1 => 1 ),
+ array( 0 => 73, 1 => 1 ),
+ array( 0 => 70, 1 => 2 ),
+ array( 0 => 70, 1 => 2 ),
+ array( 0 => 99, 1 => 2 ),
+ array( 0 => 99, 1 => 0 ),
+ array( 0 => 100, 1 => 2 ),
+ array( 0 => 100, 1 => 2 ),
+ array( 0 => 100, 1 => 4 ),
+ array( 0 => 100, 1 => 2 ),
+ array( 0 => 100, 1 => 2 ),
+ array( 0 => 100, 1 => 4 ),
+ array( 0 => 100, 1 => 3 ),
+ array( 0 => 100, 1 => 5 ),
+ array( 0 => 100, 1 => 3 ),
+ array( 0 => 100, 1 => 3 ),
+ array( 0 => 100, 1 => 3 ),
+ array( 0 => 100, 1 => 3 ),
+ array( 0 => 100, 1 => 3 ),
+ array( 0 => 100, 1 => 3 ),
+ array( 0 => 100, 1 => 2 ),
+ array( 0 => 80, 1 => 1 ),
+ array( 0 => 80, 1 => 1 ),
+ array( 0 => 80, 1 => 2 ),
+ array( 0 => 101, 1 => 1 ),
+ array( 0 => 101, 1 => 1 ),
+ array( 0 => 101, 1 => 3 ),
+ array( 0 => 97, 1 => 2 ),
+ array( 0 => 102, 1 => 1 ),
+ array( 0 => 102, 1 => 2 ),
+ array( 0 => 103, 1 => 3 ),
+ array( 0 => 103, 1 => 3 ),
+ array( 0 => 103, 1 => 5 ),
+ array( 0 => 103, 1 => 6 ),
+ array( 0 => 103, 1 => 2 ),
+ array( 0 => 90, 1 => 4 ),
+ array( 0 => 104, 1 => 4 ),
+ array( 0 => 104, 1 => 4 ),
+ array( 0 => 105, 1 => 3 ),
+ array( 0 => 105, 1 => 1 ),
+ array( 0 => 105, 1 => 0 ),
+ array( 0 => 76, 1 => 3 ),
+ array( 0 => 76, 1 => 2 ),
+ array( 0 => 106, 1 => 3 ),
+ array( 0 => 106, 1 => 2 ),
+ array( 0 => 81, 1 => 2 ),
+ array( 0 => 81, 1 => 0 ),
+ array( 0 => 107, 1 => 2 ),
+ array( 0 => 107, 1 => 3 ),
+ array( 0 => 107, 1 => 2 ),
+ array( 0 => 93, 1 => 1 ),
+ array( 0 => 93, 1 => 2 ),
+ array( 0 => 93, 1 => 1 ),
+ array( 0 => 93, 1 => 2 ),
+ array( 0 => 93, 1 => 3 ),
+ array( 0 => 86, 1 => 1 ),
+ array( 0 => 86, 1 => 1 ),
+ array( 0 => 85, 1 => 1 ),
+ array( 0 => 87, 1 => 1 ),
+ array( 0 => 94, 1 => 3 ),
+ array( 0 => 94, 1 => 3 ),
+ array( 0 => 108, 1 => 1 ),
+ array( 0 => 108, 1 => 3 ),
+ array( 0 => 108, 1 => 0 ),
+ array( 0 => 109, 1 => 3 ),
+ array( 0 => 109, 1 => 3 ),
+ array( 0 => 109, 1 => 1 ),
+ array( 0 => 92, 1 => 2 ),
+ array( 0 => 92, 1 => 3 ),
+ array( 0 => 110, 1 => 2 ),
+ array( 0 => 110, 1 => 1 ),
+ array( 0 => 111, 1 => 3 ),
+ array( 0 => 111, 1 => 3 ),
+ array( 0 => 111, 1 => 1 ),
+ array( 0 => 111, 1 => 3 ),
+ array( 0 => 111, 1 => 3 ),
+ array( 0 => 111, 1 => 1 ),
+ array( 0 => 111, 1 => 1 ),
+ );
+
+ public static $yyReduceMap = array(
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => 5,
+ 6 => 6,
+ 21 => 6,
+ 22 => 6,
+ 23 => 6,
+ 35 => 6,
+ 55 => 6,
+ 56 => 6,
+ 64 => 6,
+ 65 => 6,
+ 66 => 6,
+ 83 => 6,
+ 88 => 6,
+ 89 => 6,
+ 94 => 6,
+ 98 => 6,
+ 99 => 6,
+ 103 => 6,
+ 104 => 6,
+ 106 => 6,
+ 122 => 6,
+ 182 => 6,
+ 187 => 6,
+ 7 => 7,
+ 8 => 8,
+ 9 => 9,
+ 11 => 11,
+ 12 => 12,
+ 13 => 13,
+ 14 => 14,
+ 15 => 15,
+ 16 => 16,
+ 17 => 17,
+ 18 => 18,
+ 19 => 19,
+ 20 => 20,
+ 24 => 24,
+ 25 => 25,
+ 26 => 26,
+ 27 => 27,
+ 28 => 28,
+ 29 => 29,
+ 30 => 30,
+ 32 => 30,
+ 31 => 31,
+ 33 => 33,
+ 34 => 34,
+ 36 => 36,
+ 37 => 37,
+ 38 => 38,
+ 39 => 39,
+ 40 => 40,
+ 41 => 41,
+ 42 => 42,
+ 43 => 43,
+ 44 => 44,
+ 45 => 45,
+ 46 => 46,
+ 47 => 47,
+ 48 => 48,
+ 49 => 49,
+ 58 => 49,
+ 110 => 49,
+ 111 => 49,
+ 160 => 49,
+ 164 => 49,
+ 168 => 49,
+ 170 => 49,
+ 50 => 50,
+ 112 => 50,
+ 161 => 50,
+ 167 => 50,
+ 51 => 51,
+ 52 => 52,
+ 53 => 52,
+ 54 => 54,
+ 145 => 54,
+ 57 => 57,
+ 59 => 59,
+ 60 => 60,
+ 61 => 60,
+ 62 => 62,
+ 63 => 63,
+ 67 => 67,
+ 68 => 68,
+ 69 => 69,
+ 70 => 70,
+ 71 => 70,
+ 72 => 72,
+ 73 => 73,
+ 74 => 74,
+ 75 => 75,
+ 76 => 76,
+ 77 => 77,
+ 78 => 78,
+ 79 => 79,
+ 80 => 80,
+ 81 => 80,
+ 82 => 82,
+ 84 => 84,
+ 86 => 84,
+ 87 => 84,
+ 125 => 84,
+ 85 => 85,
+ 90 => 90,
+ 91 => 91,
+ 92 => 92,
+ 93 => 93,
+ 95 => 95,
+ 96 => 96,
+ 97 => 96,
+ 100 => 100,
+ 101 => 101,
+ 102 => 102,
+ 105 => 105,
+ 107 => 107,
+ 108 => 108,
+ 109 => 108,
+ 159 => 108,
+ 113 => 113,
+ 114 => 114,
+ 115 => 115,
+ 116 => 116,
+ 117 => 117,
+ 118 => 118,
+ 119 => 119,
+ 120 => 120,
+ 121 => 121,
+ 123 => 123,
+ 124 => 124,
+ 126 => 126,
+ 184 => 126,
+ 127 => 127,
+ 128 => 128,
+ 129 => 129,
+ 130 => 130,
+ 131 => 131,
+ 132 => 132,
+ 140 => 132,
+ 133 => 133,
+ 134 => 134,
+ 135 => 135,
+ 136 => 135,
+ 138 => 135,
+ 139 => 135,
+ 137 => 137,
+ 141 => 141,
+ 142 => 142,
+ 143 => 143,
+ 188 => 143,
+ 144 => 144,
+ 146 => 146,
+ 147 => 147,
+ 148 => 148,
+ 149 => 149,
+ 150 => 150,
+ 151 => 151,
+ 152 => 152,
+ 153 => 153,
+ 154 => 154,
+ 155 => 155,
+ 156 => 156,
+ 157 => 157,
+ 158 => 158,
+ 162 => 162,
+ 163 => 163,
+ 165 => 165,
+ 166 => 166,
+ 169 => 169,
+ 171 => 171,
+ 172 => 172,
+ 173 => 173,
+ 174 => 174,
+ 175 => 175,
+ 176 => 176,
+ 177 => 177,
+ 178 => 178,
+ 179 => 179,
+ 180 => 180,
+ 181 => 180,
+ 183 => 183,
+ 185 => 185,
+ 186 => 186,
+ 189 => 189,
+ 190 => 190,
+ 191 => 191,
+ 192 => 192,
+ 195 => 192,
+ 193 => 193,
+ 196 => 193,
+ 194 => 194,
+ 197 => 197,
+ 198 => 198,
+ );
+// line 245 "src/Parser/TemplateParser.y"
+ public function yy_r0(){
+ $this->root_buffer->prepend_array($this, $this->template_prefix);
+ $this->root_buffer->append_array($this, $this->template_postfix);
+ $this->_retvalue = $this->root_buffer->to_smarty_php($this);
+ }
+// line 252 "src/Parser/TemplateParser.y"
+ public function yy_r1(){
+ $text = $this->yystack[ $this->yyidx + 0 ]->minor;
+
+ if ((string)$text == '') {
+ $this->current_buffer->append_subtree($this, null);
+ }
+
+ $this->current_buffer->append_subtree($this, new \Smarty\ParseTree\Text($text, $this->strip));
+ }
+// line 262 "src/Parser/TemplateParser.y"
+ public function yy_r2(){
+ $this->strip = true;
+ }
+// line 266 "src/Parser/TemplateParser.y"
+ public function yy_r3(){
+ $this->strip = false;
+ }
+// line 271 "src/Parser/TemplateParser.y"
+ public function yy_r4(){
+ $this->current_buffer->append_subtree($this, new \Smarty\ParseTree\Text($this->yystack[$this->yyidx + -1]->minor));
+ }
+// line 276 "src/Parser/TemplateParser.y"
+ public function yy_r5(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.$this->yystack[$this->yyidx + -1]->minor;
+ }
+// line 279 "src/Parser/TemplateParser.y"
+ public function yy_r6(){
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 283 "src/Parser/TemplateParser.y"
+ public function yy_r7(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
+
+ }
+// line 288 "src/Parser/TemplateParser.y"
+ public function yy_r8(){
+ $this->_retvalue = '';
+ }
+// line 292 "src/Parser/TemplateParser.y"
+ public function yy_r9(){
+ $this->current_buffer->append_subtree($this, $this->mergePrefixCode($this->yystack[$this->yyidx + 0]->minor));
+ $this->compiler->has_variable_string = false;
+ $this->block_nesting_level = $this->compiler->getTagStackCount();
+ }
+// line 302 "src/Parser/TemplateParser.y"
+ public function yy_r11(){
+ $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $');
+ $attributes = [];
+ if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) {
+ $attributes[] = 'nocache';
+ $var = $match[1];
+ }
+ $this->compiler->triggerTagNoCache($var);
+ $this->_retvalue = $this->compiler->compilePrintExpression('$_smarty_tpl->getValue(\''.$var.'\')', $attributes);
+ }
+// line 314 "src/Parser/TemplateParser.y"
+ public function yy_r12(){
+ $tag = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()));
+ if ($tag == 'strip') {
+ $this->strip = true;
+ $this->_retvalue = null;
+ } else {
+ if (defined($tag)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($tag, $this->compiler);
+ }
+ $this->_retvalue = $this->compiler->compilePrintExpression($tag);
+ } else {
+ if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) {
+ $this->_retvalue = $this->compiler->compileTag($match[1],array('\'nocache\''));
+ } else {
+ $this->_retvalue = $this->compiler->compileTag($tag,array());
+ }
+ }
+ }
+ }
+// line 335 "src/Parser/TemplateParser.y"
+ public function yy_r13(){
+ $j = strrpos($this->yystack[$this->yyidx + 0]->minor,'.');
+ if ($this->yystack[$this->yyidx + 0]->minor[$j+1] == 'c') {
+ // {$smarty.block.child}
+ $this->_retvalue = $this->compiler->compileChildBlock();
+ } else {
+ // {$smarty.block.parent}
+ $this->_retvalue = $this->compiler->compileParentBlock();
+ }
+ }
+// line 346 "src/Parser/TemplateParser.y"
+ public function yy_r14(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
+ }
+// line 350 "src/Parser/TemplateParser.y"
+ public function yy_r15(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
+ }
+// line 354 "src/Parser/TemplateParser.y"
+ public function yy_r16(){
+ $this->_retvalue = $this->compiler->compilePrintExpression($this->yystack[$this->yyidx + 0]->minor[0], $this->yystack[$this->yyidx + 0]->minor[1]);
+ }
+// line 363 "src/Parser/TemplateParser.y"
+ public function yy_r17(){
+ $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]),array('var'=>'\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'')),$this->yystack[$this->yyidx + 0]->minor[1]));
+ }
+// line 367 "src/Parser/TemplateParser.y"
+ public function yy_r18(){
+ $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]),array('var'=>$this->yystack[$this->yyidx + -1]->minor['var'])),$this->yystack[$this->yyidx + 0]->minor[1]),array('smarty_internal_index'=>$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']));
+ }
+// line 371 "src/Parser/TemplateParser.y"
+ public function yy_r19(){
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 375 "src/Parser/TemplateParser.y"
+ public function yy_r20(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 390 "src/Parser/TemplateParser.y"
+ public function yy_r24(){
+ if (defined($this->yystack[$this->yyidx + -1]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[$this->yyidx + -1]->minor, $this->compiler);
+ }
+ $this->_retvalue = $this->compiler->compilePrintExpression($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor);
+ } else {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
+ }
+ }
+// line 400 "src/Parser/TemplateParser.y"
+ public function yy_r25(){
+ if (defined($this->yystack[$this->yyidx + 0]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler);
+ }
+ $this->_retvalue = $this->compiler->compilePrintExpression($this->yystack[$this->yyidx + 0]->minor);
+ } else {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor,array());
+ }
+ }
+// line 413 "src/Parser/TemplateParser.y"
+ public function yy_r26(){
+ if (defined($this->yystack[$this->yyidx + -2]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[$this->yyidx + -2]->minor, $this->compiler);
+ }
+ $this->_retvalue = $this->compiler->compilePrintExpression($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor);
+ } else {
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + 0]->minor, array('modifierlist'=>$this->yystack[$this->yyidx + -1]->minor));
+ }
+ }
+// line 425 "src/Parser/TemplateParser.y"
+ public function yy_r27(){
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor,$this->yystack[$this->yyidx + 0]->minor,array('object_method'=>$this->yystack[$this->yyidx + -1]->minor));
+ }
+// line 430 "src/Parser/TemplateParser.y"
+ public function yy_r28(){
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + 0]->minor,array('modifierlist'=>$this->yystack[$this->yyidx + -1]->minor, 'object_method'=>$this->yystack[$this->yyidx + -2]->minor));
+ }
+// line 435 "src/Parser/TemplateParser.y"
+ public function yy_r29(){
+ $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor,$this->compiler->getLdelLength()));
+ $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 440 "src/Parser/TemplateParser.y"
+ public function yy_r30(){
+ $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor,$this->compiler->getLdelLength()));
+ $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,$this->yystack[$this->yyidx + 0]->minor,array('if condition'=>$this->yystack[$this->yyidx + -1]->minor));
+ }
+// line 445 "src/Parser/TemplateParser.y"
+ public function yy_r31(){
+ $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor,$this->compiler->getLdelLength()));
+ $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 456 "src/Parser/TemplateParser.y"
+ public function yy_r33(){
+ $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -6]->minor),array('ifexp'=>$this->yystack[$this->yyidx + -4]->minor),array('var'=>$this->yystack[$this->yyidx + -2]->minor),array('step'=>$this->yystack[$this->yyidx + -1]->minor))),1);
+ }
+// line 460 "src/Parser/TemplateParser.y"
+ public function yy_r34(){
+ $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 468 "src/Parser/TemplateParser.y"
+ public function yy_r36(){
+ $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -3]->minor),array('to'=>$this->yystack[$this->yyidx + -1]->minor))),0);
+ }
+// line 472 "src/Parser/TemplateParser.y"
+ public function yy_r37(){
+ $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -5]->minor),array('to'=>$this->yystack[$this->yyidx + -3]->minor),array('step'=>$this->yystack[$this->yyidx + -1]->minor))),0);
+ }
+// line 477 "src/Parser/TemplateParser.y"
+ public function yy_r38(){
+ $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('from'=>$this->yystack[$this->yyidx + -3]->minor),array('item'=>$this->yystack[$this->yyidx + -1]->minor))));
+ }
+// line 481 "src/Parser/TemplateParser.y"
+ public function yy_r39(){
+ $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('from'=>$this->yystack[$this->yyidx + -5]->minor),array('item'=>$this->yystack[$this->yyidx + -1]->minor),array('key'=>$this->yystack[$this->yyidx + -3]->minor))));
+ }
+// line 484 "src/Parser/TemplateParser.y"
+ public function yy_r40(){
+ $this->_retvalue = $this->compiler->compileTag('foreach',$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 489 "src/Parser/TemplateParser.y"
+ public function yy_r41(){
+ $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array(array_merge(array($this->yystack[$this->yyidx + -1]->minor),$this->yystack[$this->yyidx + 0]->minor))));
+ }
+// line 493 "src/Parser/TemplateParser.y"
+ public function yy_r42(){
+ $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array_merge(array(array_merge(array($this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor)),$this->yystack[$this->yyidx + 0]->minor)));
+ }
+// line 499 "src/Parser/TemplateParser.y"
+ public function yy_r43(){
+ $tag = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' /');
+ if ($tag === 'strip') {
+ $this->strip = false;
+ $this->_retvalue = null;
+ } else {
+ $this->_retvalue = $this->compiler->compileTag($tag.'close',array());
+ }
+ }
+// line 508 "src/Parser/TemplateParser.y"
+ public function yy_r44(){
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor.'close',array());
+ }
+// line 512 "src/Parser/TemplateParser.y"
+ public function yy_r45(){
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array(),array('modifier_list'=>$this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 517 "src/Parser/TemplateParser.y"
+ public function yy_r46(){
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',array(),array('object_method'=>$this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 521 "src/Parser/TemplateParser.y"
+ public function yy_r47(){
+ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array(),array('object_method'=>$this->yystack[$this->yyidx + -1]->minor, 'modifier_list'=>$this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 529 "src/Parser/TemplateParser.y"
+ public function yy_r48(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
+ $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 535 "src/Parser/TemplateParser.y"
+ public function yy_r49(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 540 "src/Parser/TemplateParser.y"
+ public function yy_r50(){
+ $this->_retvalue = array();
+ }
+// line 545 "src/Parser/TemplateParser.y"
+ public function yy_r51(){
+ if (defined($this->yystack[$this->yyidx + 0]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler);
+ }
+ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);
+ } else {
+ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'\''.$this->yystack[$this->yyidx + 0]->minor.'\'');
+ }
+ }
+// line 556 "src/Parser/TemplateParser.y"
+ public function yy_r52(){
+ $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor," =\n\r\t")=>$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 564 "src/Parser/TemplateParser.y"
+ public function yy_r54(){
+ $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';
+ }
+// line 576 "src/Parser/TemplateParser.y"
+ public function yy_r57(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 589 "src/Parser/TemplateParser.y"
+ public function yy_r59(){
+ $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor;
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;
+ }
+// line 594 "src/Parser/TemplateParser.y"
+ public function yy_r60(){
+ $this->_retvalue = array('var' => '\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\'', 'value'=>$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 601 "src/Parser/TemplateParser.y"
+ public function yy_r62(){
+ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 605 "src/Parser/TemplateParser.y"
+ public function yy_r63(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
+ }
+// line 630 "src/Parser/TemplateParser.y"
+ public function yy_r67(){
+ $this->_retvalue = '$_smarty_tpl->getVariable(\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\')->preIncDec(\'' . $this->yystack[$this->yyidx + -1]->minor . '\')';
+ }
+// line 635 "src/Parser/TemplateParser.y"
+ public function yy_r68(){
+ $this->_retvalue = '$_smarty_tpl->getVariable(\''. substr($this->yystack[$this->yyidx + -1]->minor,1) .'\')->postIncDec(\'' . $this->yystack[$this->yyidx + 0]->minor . '\')';
+ }
+// line 640 "src/Parser/TemplateParser.y"
+ public function yy_r69(){
+ $this->_retvalue = '$_smarty_tpl->getStreamVariable(\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'://' . $this->yystack[$this->yyidx + 0]->minor . '\')';
+ }
+// line 645 "src/Parser/TemplateParser.y"
+ public function yy_r70(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 655 "src/Parser/TemplateParser.y"
+ public function yy_r72(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor['pre']. $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor['op'].$this->yystack[$this->yyidx + 0]->minor .')';
+ }
+// line 659 "src/Parser/TemplateParser.y"
+ public function yy_r73(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 663 "src/Parser/TemplateParser.y"
+ public function yy_r74(){
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor . $this->yystack[$this->yyidx + -1]->minor . ')';
+ }
+// line 667 "src/Parser/TemplateParser.y"
+ public function yy_r75(){
+ static $isin = [
+ 'isin' => 'in_array(',
+ 'isnotin' => '!in_array(',
+ ];
+ $op = strtolower(str_replace(' ', '', $this->yystack[$this->yyidx + 0]->minor));
+ $this->_retvalue = $isin[$op];
+ }
+// line 676 "src/Parser/TemplateParser.y"
+ public function yy_r76(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')';
+ }
+// line 680 "src/Parser/TemplateParser.y"
+ public function yy_r77(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')';
+ }
+// line 685 "src/Parser/TemplateParser.y"
+ public function yy_r78(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.' ?? '.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 692 "src/Parser/TemplateParser.y"
+ public function yy_r79(){
+ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + -2]->minor,1));
+ $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor.' ? $_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\') : '.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 697 "src/Parser/TemplateParser.y"
+ public function yy_r80(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 706 "src/Parser/TemplateParser.y"
+ public function yy_r82(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.' ?: '.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 716 "src/Parser/TemplateParser.y"
+ public function yy_r84(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 721 "src/Parser/TemplateParser.y"
+ public function yy_r85(){
+ $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 742 "src/Parser/TemplateParser.y"
+ public function yy_r90(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 746 "src/Parser/TemplateParser.y"
+ public function yy_r91(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.';
+ }
+// line 750 "src/Parser/TemplateParser.y"
+ public function yy_r92(){
+ $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 755 "src/Parser/TemplateParser.y"
+ public function yy_r93(){
+ if (defined($this->yystack[$this->yyidx + 0]->minor)) {
+ if ($this->security) {
+ $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler);
+ }
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ } else {
+ $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';
+ }
+ }
+// line 772 "src/Parser/TemplateParser.y"
+ public function yy_r95(){
+ $this->_retvalue = '('. $this->yystack[$this->yyidx + -1]->minor .')';
+ }
+// line 776 "src/Parser/TemplateParser.y"
+ public function yy_r96(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 794 "src/Parser/TemplateParser.y"
+ public function yy_r100(){
+ if ($this->security && $this->security->static_classes !== array()) {
+ $this->compiler->trigger_template_error('dynamic static class not allowed by security setting');
+ }
+ $prefixVar = $this->compiler->getNewPrefixVariable();
+ if ($this->yystack[$this->yyidx + -2]->minor['var'] === '\'smarty\'') {
+ $this->compiler->appendPrefixCode("compile(array(),$this->compiler,$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']).';?>');
+ } else {
+ $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + -2]->minor['var']);
+ $this->compiler->appendPrefixCode("getValue(" . $this->yystack[$this->yyidx + -2]->minor['var'] . ')'.$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'].';?>');
+ }
+ $this->_retvalue = $prefixVar .'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1];
+ }
+// line 809 "src/Parser/TemplateParser.y"
+ public function yy_r101(){
+ $prefixVar = $this->compiler->getNewPrefixVariable();
+ $tmp = $this->compiler->appendCode('', (string) $this->yystack[$this->yyidx + 0]->minor);
+ $this->compiler->appendPrefixCode($this->compiler->appendCode($tmp, ""));
+ $this->_retvalue = $prefixVar;
+ }
+// line 816 "src/Parser/TemplateParser.y"
+ public function yy_r102(){
+ $this->_retvalue = $this->compiler->compileModifier($this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor);
+ }
+// line 829 "src/Parser/TemplateParser.y"
+ public function yy_r105(){
+ if (!in_array(strtolower($this->yystack[$this->yyidx + -2]->minor), array('self', 'parent')) && (!$this->security || $this->security->isTrustedStaticClassAccess($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->compiler))) {
+ if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor])) {
+ $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor].'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1];
+ } else {
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1];
+ }
+ } else {
+ $this->compiler->trigger_template_error ('static class \''.$this->yystack[$this->yyidx + -2]->minor.'\' is undefined or not allowed by security setting');
+ }
+ }
+// line 848 "src/Parser/TemplateParser.y"
+ public function yy_r107(){
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 856 "src/Parser/TemplateParser.y"
+ public function yy_r108(){
+ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array($this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 883 "src/Parser/TemplateParser.y"
+ public function yy_r113(){
+ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + 0]->minor,1));
+ $this->_retvalue = array('$_smarty_tpl->hasVariable(\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\')','$_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\')');
+ }
+// line 887 "src/Parser/TemplateParser.y"
+ public function yy_r114(){
+ if ($this->yystack[$this->yyidx + 0]->minor['var'] === '\'smarty\'') {
+ $smarty_var = (new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);
+ $this->_retvalue = array('true', $smarty_var);
+ } else {
+ // used for array reset,next,prev,end,current
+ $this->last_variable = $this->yystack[$this->yyidx + 0]->minor['var'];
+ $this->last_index = $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
+ $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + 0]->minor['var']);
+ $this->_retvalue = array('true', '$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + 0]->minor['var'] . ')'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);
+ }
+ }
+// line 901 "src/Parser/TemplateParser.y"
+ public function yy_r115(){
+ $this->_retvalue = array('true', '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor .')->'.$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 906 "src/Parser/TemplateParser.y"
+ public function yy_r116(){
+ $this->_retvalue = array('true', $this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 911 "src/Parser/TemplateParser.y"
+ public function yy_r117(){
+ $this->_retvalue = $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -1]->minor . '\'');
+ }
+// line 915 "src/Parser/TemplateParser.y"
+ public function yy_r118(){
+ $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -2]->minor . '\'') . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' :null)';
+ }
+// line 919 "src/Parser/TemplateParser.y"
+ public function yy_r119(){
+ $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -1]->minor);
+ }
+// line 923 "src/Parser/TemplateParser.y"
+ public function yy_r120(){
+ $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -2]->minor) . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' : null)';
+ }
+// line 927 "src/Parser/TemplateParser.y"
+ public function yy_r121(){
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor[1];
+ }
+// line 935 "src/Parser/TemplateParser.y"
+ public function yy_r123(){
+ $this->_retvalue = array('var'=>'\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'', 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 938 "src/Parser/TemplateParser.y"
+ public function yy_r124(){
+ $this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 951 "src/Parser/TemplateParser.y"
+ public function yy_r126(){
+ return;
+ }
+// line 957 "src/Parser/TemplateParser.y"
+ public function yy_r127(){
+ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + 0]->minor,1));
+ $this->_retvalue = '[$_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\')]';
+ }
+// line 961 "src/Parser/TemplateParser.y"
+ public function yy_r128(){
+ $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + 0]->minor);
+ $this->_retvalue = '[$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + 0]->minor . ')]';
+ }
+// line 966 "src/Parser/TemplateParser.y"
+ public function yy_r129(){
+ $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + -2]->minor);
+ $this->_retvalue = '[$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -2]->minor . ')->'.$this->yystack[$this->yyidx + 0]->minor.']';
+ }
+// line 971 "src/Parser/TemplateParser.y"
+ public function yy_r130(){
+ $this->_retvalue = '[\''. $this->yystack[$this->yyidx + 0]->minor .'\']';
+ }
+// line 975 "src/Parser/TemplateParser.y"
+ public function yy_r131(){
+ $this->_retvalue = '['. $this->yystack[$this->yyidx + 0]->minor .']';
+ }
+// line 980 "src/Parser/TemplateParser.y"
+ public function yy_r132(){
+ $this->_retvalue = '['. $this->yystack[$this->yyidx + -1]->minor .']';
+ }
+// line 985 "src/Parser/TemplateParser.y"
+ public function yy_r133(){
+ $this->_retvalue = '['.(new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,'[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']';
+ }
+// line 989 "src/Parser/TemplateParser.y"
+ public function yy_r134(){
+ $this->_retvalue = '['.(new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,'[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']';
+ }
+// line 992 "src/Parser/TemplateParser.y"
+ public function yy_r135(){
+ $this->_retvalue = '['.$this->yystack[$this->yyidx + -1]->minor.']';
+ }
+// line 998 "src/Parser/TemplateParser.y"
+ public function yy_r137(){
+ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + -1]->minor,1));
+ $this->_retvalue = '[$_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\')]';
+ }
+// line 1015 "src/Parser/TemplateParser.y"
+ public function yy_r141(){
+ $this->_retvalue = '[]';
+ }
+// line 1025 "src/Parser/TemplateParser.y"
+ public function yy_r142(){
+ $this->_retvalue = '\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'';
+ }
+// line 1029 "src/Parser/TemplateParser.y"
+ public function yy_r143(){
+ $this->_retvalue = '\'\'';
+ }
+// line 1034 "src/Parser/TemplateParser.y"
+ public function yy_r144(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1042 "src/Parser/TemplateParser.y"
+ public function yy_r146(){
+ $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $');
+ $this->compiler->triggerTagNoCache($var);
+ $this->_retvalue = '$_smarty_tpl->getValue(\''.$var.'\')';
+ }
+// line 1049 "src/Parser/TemplateParser.y"
+ public function yy_r147(){
+ $this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')';
+ }
+// line 1056 "src/Parser/TemplateParser.y"
+ public function yy_r148(){
+ if ($this->yystack[$this->yyidx + -1]->minor['var'] === '\'smarty\'') {
+ $this->_retvalue = (new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor;
+ } else {
+ $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + -1]->minor['var']);
+ $this->_retvalue = '$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -1]->minor['var'] . ')'.$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor;
+ }
+ }
+// line 1066 "src/Parser/TemplateParser.y"
+ public function yy_r149(){
+ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1071 "src/Parser/TemplateParser.y"
+ public function yy_r150(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1076 "src/Parser/TemplateParser.y"
+ public function yy_r151(){
+ if ($this->security && substr($this->yystack[$this->yyidx + -1]->minor,0,1) === '_') {
+ $this->compiler->trigger_template_error (self::ERR1);
+ }
+ $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1083 "src/Parser/TemplateParser.y"
+ public function yy_r152(){
+ if ($this->security) {
+ $this->compiler->trigger_template_error (self::ERR2);
+ }
+ $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + -1]->minor);
+ $this->_retvalue = '->{$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -1]->minor . ')'.$this->yystack[$this->yyidx + 0]->minor.'}';
+ }
+// line 1091 "src/Parser/TemplateParser.y"
+ public function yy_r153(){
+ if ($this->security) {
+ $this->compiler->trigger_template_error (self::ERR2);
+ }
+ $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';
+ }
+// line 1098 "src/Parser/TemplateParser.y"
+ public function yy_r154(){
+ if ($this->security) {
+ $this->compiler->trigger_template_error (self::ERR2);
+ }
+ $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';
+ }
+// line 1106 "src/Parser/TemplateParser.y"
+ public function yy_r155(){
+ $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1114 "src/Parser/TemplateParser.y"
+ public function yy_r156(){
+
+ if ($this->yystack[$this->yyidx + -3]->minor == 'isset') {
+ $this->_retvalue = '(true';
+ if (count($this->yystack[$this->yyidx + -1]->minor) == 0) {
+ throw new CompilerException("Invalid number of arguments for isset. isset expects at least one parameter.");
+ }
+ foreach ($this->yystack[$this->yyidx + -1]->minor as $value) {
+ if (is_array($value)) {
+ $this->_retvalue .= ' && (' . $value[0] . ' && null !== (' . $value[1] . ' ?? null))';
+ } else {
+ $this->_retvalue .= ' && (' . $value . ' !== null)';
+ }
+ }
+ $this->_retvalue .= ')';
+ } elseif ($this->yystack[$this->yyidx + -3]->minor == 'empty') {
+ if (count($this->yystack[$this->yyidx + -1]->minor) != 1) {
+ throw new CompilerException("Invalid number of arguments for empty. empty expects at exactly one parameter.");
+ }
+ if (is_array($this->yystack[$this->yyidx + -1]->minor[0])) {
+ $this->_retvalue .= '( !' . $this->yystack[$this->yyidx + -1]->minor[0][0] . ' || empty(' . $this->yystack[$this->yyidx + -1]->minor[0][1] . '))';
+ } else {
+ $this->_retvalue = 'false == ' . $this->yystack[$this->yyidx + -1]->minor[0];
+ }
+ } else {
+ $p = array();
+ foreach ($this->yystack[$this->yyidx + -1]->minor as $value) {
+ if (is_array($value)) {
+ $p[] = $value[1];
+ } else {
+ $p[] = $value;
+ }
+ }
+ $this->_retvalue = $this->compiler->compileModifierInExpression($this->yystack[$this->yyidx + -3]->minor, $p);
+ }
+ }
+// line 1155 "src/Parser/TemplateParser.y"
+ public function yy_r157(){
+ if ($this->security && substr($this->yystack[$this->yyidx + -3]->minor,0,1) === '_') {
+ $this->compiler->trigger_template_error (self::ERR1);
+ }
+ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . '('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')';
+ }
+// line 1162 "src/Parser/TemplateParser.y"
+ public function yy_r158(){
+ if ($this->security) {
+ $this->compiler->trigger_template_error (self::ERR2);
+ }
+ $prefixVar = $this->compiler->getNewPrefixVariable();
+ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + -3]->minor,1));
+ $this->compiler->appendPrefixCode("getValue('".substr($this->yystack[$this->yyidx + -3]->minor,1).'\')'.';?>');
+ $this->_retvalue = $prefixVar .'('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')';
+ }
+// line 1191 "src/Parser/TemplateParser.y"
+ public function yy_r162(){
+ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor)));
+ }
+// line 1195 "src/Parser/TemplateParser.y"
+ public function yy_r163(){
+ $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor));
+ }
+// line 1203 "src/Parser/TemplateParser.y"
+ public function yy_r165(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 1211 "src/Parser/TemplateParser.y"
+ public function yy_r166(){
+ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 1224 "src/Parser/TemplateParser.y"
+ public function yy_r169(){
+ $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 1233 "src/Parser/TemplateParser.y"
+ public function yy_r171(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '', 'method');
+ }
+// line 1238 "src/Parser/TemplateParser.y"
+ public function yy_r172(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'method');
+ }
+// line 1243 "src/Parser/TemplateParser.y"
+ public function yy_r173(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '');
+ }
+// line 1248 "src/Parser/TemplateParser.y"
+ public function yy_r174(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'property');
+ }
+// line 1253 "src/Parser/TemplateParser.y"
+ public function yy_r175(){
+ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor, 'property');
+ }
+// line 1259 "src/Parser/TemplateParser.y"
+ public function yy_r176(){
+ $this->_retvalue = ' '. trim($this->yystack[$this->yyidx + 0]->minor) . ' ';
+ }
+// line 1263 "src/Parser/TemplateParser.y"
+ public function yy_r177(){
+ static $lops = array(
+ 'eq' => ' == ',
+ 'ne' => ' != ',
+ 'neq' => ' != ',
+ 'gt' => ' > ',
+ 'ge' => ' >= ',
+ 'gte' => ' >= ',
+ 'lt' => ' < ',
+ 'le' => ' <= ',
+ 'lte' => ' <= ',
+ 'mod' => ' % ',
+ 'and' => ' && ',
+ 'or' => ' || ',
+ 'xor' => ' xor ',
+ );
+ $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor));
+ $this->_retvalue = $lops[$op];
+ }
+// line 1282 "src/Parser/TemplateParser.y"
+ public function yy_r178(){
+ static $tlops = array(
+ 'isdivby' => array('op' => ' % ', 'pre' => '!('),
+ 'isnotdivby' => array('op' => ' % ', 'pre' => '('),
+ 'isevenby' => array('op' => ' / ', 'pre' => '!(1 & '),
+ 'isnotevenby' => array('op' => ' / ', 'pre' => '(1 & '),
+ 'isoddby' => array('op' => ' / ', 'pre' => '(1 & '),
+ 'isnotoddby' => array('op' => ' / ', 'pre' => '!(1 & '),
+ );
+ $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor));
+ $this->_retvalue = $tlops[$op];
+ }
+// line 1295 "src/Parser/TemplateParser.y"
+ public function yy_r179(){
+ static $scond = array (
+ 'iseven' => '!(1 & ',
+ 'isnoteven' => '(1 & ',
+ 'isodd' => '(1 & ',
+ 'isnotodd' => '!(1 & ',
+ );
+ $op = strtolower(str_replace(' ', '', $this->yystack[$this->yyidx + 0]->minor));
+ $this->_retvalue = $scond[$op];
+ }
+// line 1309 "src/Parser/TemplateParser.y"
+ public function yy_r180(){
+ $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')';
+ }
+// line 1320 "src/Parser/TemplateParser.y"
+ public function yy_r183(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1328 "src/Parser/TemplateParser.y"
+ public function yy_r185(){
+ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1332 "src/Parser/TemplateParser.y"
+ public function yy_r186(){
+ $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor;
+ }
+// line 1348 "src/Parser/TemplateParser.y"
+ public function yy_r189(){
+ $this->compiler->leaveDoubleQuote();
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php($this);
+ }
+// line 1354 "src/Parser/TemplateParser.y"
+ public function yy_r190(){
+ $this->yystack[$this->yyidx + -1]->minor->append_subtree($this, $this->yystack[$this->yyidx + 0]->minor);
+ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
+ }
+// line 1359 "src/Parser/TemplateParser.y"
+ public function yy_r191(){
+ $this->_retvalue = new Dq($this, $this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 1363 "src/Parser/TemplateParser.y"
+ public function yy_r192(){
+ $this->_retvalue = new Code('(string)'.$this->yystack[$this->yyidx + -1]->minor);
+ }
+// line 1367 "src/Parser/TemplateParser.y"
+ public function yy_r193(){
+ $this->_retvalue = new Code('(string)('.$this->yystack[$this->yyidx + -1]->minor.')');
+ }
+// line 1371 "src/Parser/TemplateParser.y"
+ public function yy_r194(){
+ $this->_retvalue = new Code('(string)$_smarty_tpl->getValue(\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\')');
+ }
+// line 1383 "src/Parser/TemplateParser.y"
+ public function yy_r197(){
+ $this->_retvalue = new Tag($this, $this->yystack[$this->yyidx + 0]->minor);
+ }
+// line 1387 "src/Parser/TemplateParser.y"
+ public function yy_r198(){
+ $this->_retvalue = new DqContent($this->yystack[$this->yyidx + 0]->minor);
+ }
+
+ private $_retvalue;
+
+ public function yy_reduce($yyruleno)
+ {
+ if ($this->yyTraceFILE && $yyruleno >= 0
+ && $yyruleno < count(self::$yyRuleName)) {
+ fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n",
+ $this->yyTracePrompt, $yyruleno,
+ self::$yyRuleName[$yyruleno]);
+ }
+
+ $this->_retvalue = $yy_lefthand_side = null;
+ if (isset(self::$yyReduceMap[$yyruleno])) {
+ // call the action
+ $this->_retvalue = null;
+ $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}();
+ $yy_lefthand_side = $this->_retvalue;
+ }
+ $yygoto = self::$yyRuleInfo[$yyruleno][0];
+ $yysize = self::$yyRuleInfo[$yyruleno][1];
+ $this->yyidx -= $yysize;
+ for ($i = $yysize; $i; $i--) {
+ // pop all of the right-hand side parameters
+ array_pop($this->yystack);
+ }
+ $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto);
+ if ($yyact < self::YYNSTATE) {
+ if (!$this->yyTraceFILE && $yysize) {
+ $this->yyidx++;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = $yyact;
+ $x->major = $yygoto;
+ $x->minor = $yy_lefthand_side;
+ $this->yystack[$this->yyidx] = $x;
+ } else {
+ $this->yy_shift($yyact, $yygoto, $yy_lefthand_side);
+ }
+ } elseif ($yyact === self::YYNSTATE + self::YYNRULE + 1) {
+ $this->yy_accept();
+ }
+ }
+
+ public function yy_parse_failed()
+ {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
+ } while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+ }
+
+ public function yy_syntax_error($yymajor, $TOKEN)
+ {
+// line 225 "src/Parser/TemplateParser.y"
+
+ $this->internalError = true;
+ $this->yymajor = $yymajor;
+ $this->compiler->trigger_template_error();
+ }
+
+ public function yy_accept()
+ {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
+ } while ($this->yyidx >= 0) {
+ $this->yy_pop_parser_stack();
+ }
+// line 218 "src/Parser/TemplateParser.y"
+
+ $this->successful = !$this->internalError;
+ $this->internalError = false;
+ $this->retvalue = $this->_retvalue;
+ }
+
+ public function doParse($yymajor, $yytokenvalue)
+ {
+ $yyerrorhit = 0; /* True if yymajor has invoked an error */
+
+ if ($this->yyidx === null || $this->yyidx < 0) {
+ $this->yyidx = 0;
+ $this->yyerrcnt = -1;
+ $x = (object) ['stateno' => null, 'major' => null, 'minor' => null];
+ $x->stateno = 0;
+ $x->major = 0;
+ $this->yystack = array();
+ $this->yystack[] = $x;
+ }
+ $yyendofinput = ($yymajor==0);
+
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sInput %s\n",
+ $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
+ }
+
+ do {
+ $yyact = $this->yy_find_shift_action($yymajor);
+ if ($yymajor < self::YYERRORSYMBOL &&
+ !$this->yy_is_expected_token($yymajor)) {
+ // force a syntax error
+ $yyact = self::YY_ERROR_ACTION;
+ }
+ if ($yyact < self::YYNSTATE) {
+ $this->yy_shift($yyact, $yymajor, $yytokenvalue);
+ $this->yyerrcnt--;
+ if ($yyendofinput && $this->yyidx >= 0) {
+ $yymajor = 0;
+ } else {
+ $yymajor = self::YYNOCODE;
+ }
+ } elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
+ $this->yy_reduce($yyact - self::YYNSTATE);
+ } elseif ($yyact === self::YY_ERROR_ACTION) {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sSyntax Error!\n",
+ $this->yyTracePrompt);
+ }
+ if (self::YYERRORSYMBOL) {
+ if ($this->yyerrcnt < 0) {
+ $this->yy_syntax_error($yymajor, $yytokenvalue);
+ }
+ $yymx = $this->yystack[$this->yyidx]->major;
+ if ($yymx === self::YYERRORSYMBOL || $yyerrorhit) {
+ if ($this->yyTraceFILE) {
+ fprintf($this->yyTraceFILE, "%sDiscard input token %s\n",
+ $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
+ }
+ $this->yy_destructor($yymajor, $yytokenvalue);
+ $yymajor = self::YYNOCODE;
+ } else {
+ while ($this->yyidx >= 0 &&
+ $yymx !== self::YYERRORSYMBOL &&
+ ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
+ ){
+ $this->yy_pop_parser_stack();
+ }
+ if ($this->yyidx < 0 || $yymajor==0) {
+ $this->yy_destructor($yymajor, $yytokenvalue);
+ $this->yy_parse_failed();
+ $yymajor = self::YYNOCODE;
+ } elseif ($yymx !== self::YYERRORSYMBOL) {
+ $u2 = 0;
+ $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2);
+ }
+ }
+ $this->yyerrcnt = 3;
+ $yyerrorhit = 1;
+ } else {
+ if ($this->yyerrcnt <= 0) {
+ $this->yy_syntax_error($yymajor, $yytokenvalue);
+ }
+ $this->yyerrcnt = 3;
+ $this->yy_destructor($yymajor, $yytokenvalue);
+ if ($yyendofinput) {
+ $this->yy_parse_failed();
+ }
+ $yymajor = self::YYNOCODE;
+ }
+ } else {
+ $this->yy_accept();
+ $yymajor = self::YYNOCODE;
+ }
+ } while ($yymajor !== self::YYNOCODE && $this->yyidx >= 0);
+ }
+}
+
diff --git a/bundled-libs/smarty/smarty/lexer/smarty_internal_templateparser.y b/bundled-libs/smarty/smarty/src/Parser/TemplateParser.y
similarity index 75%
rename from bundled-libs/smarty/smarty/lexer/smarty_internal_templateparser.y
rename to bundled-libs/smarty/smarty/src/Parser/TemplateParser.y
index 620498765..58d115fe0 100644
--- a/bundled-libs/smarty/smarty/lexer/smarty_internal_templateparser.y
+++ b/bundled-libs/smarty/smarty/src/Parser/TemplateParser.y
@@ -9,15 +9,27 @@
%stack_size 500
%name TP_
%declare_class {
+
+namespace Smarty\Parser;
+
+use \Smarty\Lexer\TemplateLexer as Lexer;
+use \Smarty\ParseTree\Template as TemplateParseTree;
+use \Smarty\Compiler\Template as TemplateCompiler;
+use \Smarty\ParseTree\Code;
+use \Smarty\ParseTree\Dq;
+use \Smarty\ParseTree\DqContent;
+use \Smarty\ParseTree\Tag;
+use \Smarty\CompilerException;
+
/**
* Smarty Template Parser Class
*
* This is the template parser.
-* It is generated from the smarty_internal_templateparser.y file
+* It is generated from the TemplateParser.y file
*
* @author Uwe Tews
*/
-class Smarty_Internal_Templateparser
+class TemplateParser
}
%include_class
{
@@ -60,21 +72,21 @@ class Smarty_Internal_Templateparser
/**
* root parse tree buffer
*
- * @var Smarty_Internal_ParseTree_Template
+ * @var TemplateParseTree
*/
public $root_buffer;
/**
* current parse tree object
*
- * @var Smarty_Internal_ParseTree
+ * @var \Smarty\ParseTree\Base
*/
public $current_buffer;
/**
* lexer object
*
- * @var Smarty_Internal_Templatelexer
+ * @var Lexer
*/
public $lex;
@@ -94,21 +106,21 @@ class Smarty_Internal_Templateparser
/**
* compiler object
*
- * @var Smarty_Internal_TemplateCompilerBase
+ * @var TemplateCompiler
*/
public $compiler = null;
/**
* smarty object
*
- * @var Smarty
+ * @var \Smarty\Smarty
*/
public $smarty = null;
/**
* template object
*
- * @var Smarty_Internal_Template
+ * @var \Smarty\Template
*/
public $template = null;
@@ -122,38 +134,38 @@ class Smarty_Internal_Templateparser
/**
* security object
*
- * @var Smarty_Security
+ * @var \Smarty\Security
*/
public $security = null;
/**
* template prefix array
*
- * @var \Smarty_Internal_ParseTree[]
+ * @var \Smarty\ParseTree\Base[]
*/
public $template_prefix = array();
/**
* template prefix array
*
- * @var \Smarty_Internal_ParseTree[]
+ * @var \Smarty\ParseTree\Base[]
*/
public $template_postfix = array();
/**
* constructor
*
- * @param Smarty_Internal_Templatelexer $lex
- * @param Smarty_Internal_TemplateCompilerBase $compiler
+ * @param Lexer $lex
+ * @param TemplateCompiler $compiler
*/
- public function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler)
+ public function __construct(Lexer $lex, TemplateCompiler $compiler)
{
$this->lex = $lex;
$this->compiler = $compiler;
- $this->template = $this->compiler->template;
- $this->smarty = $this->template->smarty;
- $this->security = isset($this->smarty->security_policy) ? $this->smarty->security_policy : false;
- $this->current_buffer = $this->root_buffer = new Smarty_Internal_ParseTree_Template();
+ $this->template = $this->compiler->getTemplate();
+ $this->smarty = $this->template->getSmarty();
+ $this->security = $this->smarty->security_policy ?? false;
+ $this->current_buffer = $this->root_buffer = new TemplateParseTree();
}
/**
@@ -163,7 +175,7 @@ class Smarty_Internal_Templateparser
*/
public function insertPhpCode($code)
{
- $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Tag($this, $code));
+ $this->current_buffer->append_subtree($this, new Tag($this, $code));
}
/**
@@ -185,9 +197,9 @@ class Smarty_Internal_Templateparser
*
* @param string $code
*
- * @return Smarty_Internal_ParseTree_Tag
+ * @return Tag
*/
- public function mergePrefixCode($code)
+ private function mergePrefixCode($code)
{
$tmp = '';
foreach ($this->compiler->prefix_code as $preCode) {
@@ -195,7 +207,7 @@ class Smarty_Internal_Templateparser
}
$this->compiler->prefix_code = array();
$tmp .= $code;
- return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp, true));
+ return new Tag($this, $this->compiler->processNocacheCode($tmp));
}
}
@@ -244,7 +256,7 @@ template ::= template TEXT(B). {
$this->current_buffer->append_subtree($this, null);
}
- $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text($text, $this->strip));
+ $this->current_buffer->append_subtree($this, new \Smarty\ParseTree\Text($text, $this->strip));
}
// strip on
template ::= template STRIPON. {
@@ -257,7 +269,7 @@ template ::= template STRIPOFF. {
// Literal
template ::= template LITERALSTART literal_e2(B) LITERALEND. {
- $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text(B));
+ $this->current_buffer->append_subtree($this, new \Smarty\ParseTree\Text(B));
}
@@ -278,11 +290,9 @@ literal_e1(A) ::= . {
}
// Smarty tag
template ::= template smartytag(B). {
- if ($this->compiler->has_code) {
- $this->current_buffer->append_subtree($this, $this->mergePrefixCode(B));
- }
+ $this->current_buffer->append_subtree($this, $this->mergePrefixCode(B));
$this->compiler->has_variable_string = false;
- $this->block_nesting_level = count($this->compiler->_tag_stack);
+ $this->block_nesting_level = $this->compiler->getTagStackCount();
}
@@ -291,11 +301,13 @@ template ::= .
smartytag(A) ::= SIMPELOUTPUT(B). {
$var = trim(substr(B, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $');
+ $attributes = [];
if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) {
- A = $this->compiler->compileTag('private_print_expression',array('nocache'),array('value'=>$this->compiler->compileVariable('\''.$match[1].'\'')));
- } else {
- A = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->compiler->compileVariable('\''.$var.'\'')));
+ $attributes[] = 'nocache';
+ $var = $match[1];
}
+ $this->compiler->triggerTagNoCache($var);
+ A = $this->compiler->compilePrintExpression('$_smarty_tpl->getValue(\''.$var.'\')', $attributes);
}
// simple tag like {name}
@@ -309,7 +321,7 @@ smartytag(A)::= SIMPLETAG(B). {
if ($this->security) {
$this->security->isTrustedConstant($tag, $this->compiler);
}
- A = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$tag));
+ A = $this->compiler->compilePrintExpression($tag);
} else {
if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) {
A = $this->compiler->compileTag($match[1],array('\'nocache\''));
@@ -324,10 +336,10 @@ smartytag(A) ::= SMARTYBLOCKCHILDPARENT(i). {
$j = strrpos(i,'.');
if (i[$j+1] == 'c') {
// {$smarty.block.child}
- A = $this->compiler->compileTag('child',array(),array(i));
+ A = $this->compiler->compileChildBlock();
} else {
// {$smarty.block.parent}
- A = $this->compiler->compileTag('parent',array(),array(i));
+ A = $this->compiler->compileParentBlock();
}
}
@@ -340,7 +352,7 @@ smartytag(A) ::= LDEL tagbody(B) RDEL. {
}
// output with optional attributes
tagbody(A) ::= outattr(B). {
- A = $this->compiler->compileTag('private_print_expression',B[1],array('value'=>B[0]));
+ A = $this->compiler->compilePrintExpression(B[0], B[1]);
}
//
@@ -364,7 +376,7 @@ outattr(A) ::= output(B) attributes(C). {
A = array(B,C);
}
-output(A) ::= variable(B). {
+output(A) ::= variablevalue(B). {
A = B;
}
output(A) ::= value(B). {
@@ -380,7 +392,7 @@ tag(res) ::= LDEL ID(i) attributes(a). {
if ($this->security) {
$this->security->isTrustedConstant(i, $this->compiler);
}
- res = $this->compiler->compileTag('private_print_expression',a,array('value'=>i));
+ res = $this->compiler->compilePrintExpression(i, a);
} else {
res = $this->compiler->compileTag(i,a);
}
@@ -390,7 +402,7 @@ tag(res) ::= LDEL ID(i). {
if ($this->security) {
$this->security->isTrustedConstant(i, $this->compiler);
}
- res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>i));
+ res = $this->compiler->compilePrintExpression(i);
} else {
res = $this->compiler->compileTag(i,array());
}
@@ -403,7 +415,7 @@ tag(res) ::= LDEL ID(i) modifierlist(l)attributes(a). {
if ($this->security) {
$this->security->isTrustedConstant(i, $this->compiler);
}
- res = $this->compiler->compileTag('private_print_expression',a,array('value'=>i, 'modifierlist'=>l));
+ res = $this->compiler->compilePrintExpression(i, a, l);
} else {
res = $this->compiler->compileTag(i,a, array('modifierlist'=>l));
}
@@ -419,11 +431,6 @@ tag(res) ::= LDEL ID(i) PTR ID(me) modifierlist(l) attributes(a). {
res = $this->compiler->compileTag(i,a,array('modifierlist'=>l, 'object_method'=>me));
}
- // nocache tag
-tag(res) ::= LDELMAKENOCACHE DOLLARID(i). {
- res = $this->compiler->compileTag('make_nocache',array(array('var'=>'\''.substr(i,1).'\'')));
-}
-
// {if}, {elseif} and {while} tag
tag(res) ::= LDELIF(i) expr(ie). {
$tag = trim(substr(i,$this->compiler->getLdelLength()));
@@ -609,11 +616,26 @@ expr(res) ::= value(v). {
res = v;
}
+ // nullcoalescing
+expr(res) ::= nullcoalescing(v). {
+ res = v;
+}
+
// ternary
expr(res) ::= ternary(v). {
res = v;
}
+ // ++$a / --$a
+expr(res) ::= INCDEC(i2) DOLLARID(i). {
+ res = '$_smarty_tpl->getVariable(\''. substr(i,1) .'\')->preIncDec(\'' . i2 . '\')';
+}
+
+ // $a++ / $a--
+expr(res) ::= DOLLARID(i) INCDEC(i2). {
+ res = '$_smarty_tpl->getVariable(\''. substr(i,1) .'\')->postIncDec(\'' . i2 . '\')';
+}
+
// resources/streams
expr(res) ::= DOLLARID(i) COLON ID(i2). {
res = '$_smarty_tpl->getStreamVariable(\''.substr(i,1).'://' . i2 . '\')';
@@ -642,28 +664,51 @@ expr(res) ::= expr(e1) scond(c). {
res = c . e1 . ')';
}
-expr(res) ::= expr(e1) ISIN array(a). {
- res = 'in_array('.e1.','.a.')';
+isin(res) ::= ISIN(o). {
+ static $isin = [
+ 'isin' => 'in_array(',
+ 'isnotin' => '!in_array(',
+ ];
+ $op = strtolower(str_replace(' ', '', o));
+ res = $isin[$op];
+}
+
+expr(res) ::= expr(e1) isin(c) array(a). {
+ res = c . e1.','.a.')';
}
-expr(res) ::= expr(e1) ISIN value(v). {
- res = 'in_array('.e1.',(array)'.v.')';
+expr(res) ::= expr(e1) isin(c) value(v). {
+ res = c . e1.',(array)'.v.')';
}
+// null coalescing
+nullcoalescing(res) ::= expr(v) QMARK QMARK expr(e2). {
+ res = v.' ?? '.e2;
+}
//
// ternary
//
-ternary(res) ::= OPENP expr(v) CLOSEP QMARK DOLLARID(e1) COLON expr(e2). {
- res = v.' ? '. $this->compiler->compileVariable('\''.substr(e1,1).'\'') . ' : '.e2;
+ternary(res) ::= expr(v) QMARK DOLLARID(e1) COLON expr(e2). {
+ $this->compiler->triggerTagNoCache(substr(e1,1));
+ res = v.' ? $_smarty_tpl->getValue(\''.substr(e1,1).'\') : '.e2;
+}
+
+ternary(res) ::= expr(v) QMARK value(e1) COLON expr(e2). {
+ res = v.' ? '.e1.' : '.e2;
}
-ternary(res) ::= OPENP expr(v) CLOSEP QMARK expr(e1) COLON expr(e2). {
+ternary(res) ::= expr(v) QMARK expr(e1) COLON expr(e2). {
res = v.' ? '.e1.' : '.e2;
}
+// shorthand ternary
+ternary(res) ::= expr(v) QMARK COLON expr(e2). {
+ res = v.' ?: '.e2;
+}
+
// value
-value(res) ::= variable(v). {
+value(res) ::= variablevalue(v). {
res = v;
}
@@ -681,7 +726,7 @@ value(res) ::= TYPECAST(t) value(v). {
res = t.v;
}
-value(res) ::= variable(v) INCDEC(o). {
+value(res) ::= variablevalue(v) INCDEC(o). {
res = v.o;
}
@@ -728,10 +773,10 @@ value(res) ::= OPENP expr(e) CLOSEP. {
res = '('. e .')';
}
-value(res) ::= variable(v1) INSTANCEOF(i) ns1(v2). {
+value(res) ::= variablevalue(v1) INSTANCEOF(i) ns1(v2). {
res = v1.i.v2;
}
-value(res) ::= variable(v1) INSTANCEOF(i) variable(v2). {
+value(res) ::= variablevalue(v1) INSTANCEOF(i) variablevalue(v2). {
res = v1.i.v2;
}
@@ -752,9 +797,10 @@ value(res) ::= varindexed(vi) DOUBLECOLON static_class_access(r). {
}
$prefixVar = $this->compiler->getNewPrefixVariable();
if (vi['var'] === '\'smarty\'') {
- $this->compiler->appendPrefixCode("compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']).';?>');
+ $this->compiler->appendPrefixCode("compile(array(),$this->compiler,vi['smarty_internal_index']).';?>');
} else {
- $this->compiler->appendPrefixCode("compiler->compileVariable(vi['var']).vi['smarty_internal_index'].';?>');
+ $this->compiler->triggerTagNoCache(vi['var']);
+ $this->compiler->appendPrefixCode("getValue(" . vi['var'] . ')'.vi['smarty_internal_index'].';?>');
}
res = $prefixVar .'::'.r[0].r[1];
}
@@ -762,13 +808,13 @@ value(res) ::= varindexed(vi) DOUBLECOLON static_class_access(r). {
// Smarty tag
value(res) ::= smartytag(st). {
$prefixVar = $this->compiler->getNewPrefixVariable();
- $tmp = $this->compiler->appendCode('', st);
+ $tmp = $this->compiler->appendCode('', (string) st);
$this->compiler->appendPrefixCode($this->compiler->appendCode($tmp, ""));
res = $prefixVar;
}
value(res) ::= value(v) modifierlist(l). {
- res = $this->compiler->compileTag('private_modifier',array(),array('value'=>v,'modifierlist'=>l));
+ res = $this->compiler->compileModifier(l, v);
}
// name space constant
value(res) ::= NAMESPACE(c). {
@@ -804,54 +850,88 @@ ns1(res) ::= NAMESPACE(i). {
}
+// variable lists
+
+// multiple variables
+variablelist(res) ::= variablelist(l) COMMA variable(v). {
+ res = array_merge(l,array(v));
+}
+
+variablelist(res) ::= variablelist(l) COMMA expr(e). {
+ res = array_merge(l,array(e));
+}
+
+// single variable
+variablelist(res) ::= variable(v). {
+ res = array(v);
+}
+// single expression
+variablelist(res) ::= expr(e). {
+ res = array(e);
+}
+
+// no variable
+variablelist(res) ::= . {
+ res = array();
+}
//
// variables
//
// Smarty variable (optional array)
variable(res) ::= DOLLARID(i). {
- res = $this->compiler->compileVariable('\''.substr(i,1).'\'');
+ $this->compiler->triggerTagNoCache(substr(i,1));
+ res = array('$_smarty_tpl->hasVariable(\''.substr(i,1).'\')','$_smarty_tpl->getValue(\''.substr(i,1).'\')');
}
variable(res) ::= varindexed(vi). {
if (vi['var'] === '\'smarty\'') {
- $smarty_var = $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']);
- res = $smarty_var;
+ $smarty_var = (new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,vi['smarty_internal_index']);
+ res = array('true', $smarty_var);
} else {
// used for array reset,next,prev,end,current
$this->last_variable = vi['var'];
$this->last_index = vi['smarty_internal_index'];
- res = $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index'];
+ $this->compiler->triggerTagNoCache(vi['var']);
+ res = array('true', '$_smarty_tpl->getValue(' . vi['var'] . ')'.vi['smarty_internal_index']);
}
}
// variable with property
variable(res) ::= varvar(v) AT ID(p). {
- res = '$_smarty_tpl->tpl_vars['. v .']->'.p;
+ res = array('true', '$_smarty_tpl->getVariable('. v .')->'.p);
}
// object
variable(res) ::= object(o). {
- res = o;
+ res = array('true', o);
}
// config variable
-variable(res) ::= HATCH ID(i) HATCH. {
+configvariable(res) ::= HATCH ID(i) HATCH. {
res = $this->compiler->compileConfigVariable('\'' . i . '\'');
}
-variable(res) ::= HATCH ID(i) HATCH arrayindex(a). {
+configvariable(res) ::= HATCH ID(i) HATCH arrayindex(a). {
res = '(is_array($tmp = ' . $this->compiler->compileConfigVariable('\'' . i . '\'') . ') ? $tmp'.a.' :null)';
}
-variable(res) ::= HATCH variable(v) HATCH. {
+configvariable(res) ::= HATCH variablevalue(v) HATCH. {
res = $this->compiler->compileConfigVariable(v);
}
-variable(res) ::= HATCH variable(v) HATCH arrayindex(a). {
+configvariable(res) ::= HATCH variablevalue(v) HATCH arrayindex(a). {
res = '(is_array($tmp = ' . $this->compiler->compileConfigVariable(v) . ') ? $tmp'.a.' : null)';
}
+variablevalue(res) ::= variable(v). {
+ res = v[1];
+}
+
+variablevalue(res) ::= configvariable(v). {
+ res = v;
+}
+
varindexed(res) ::= DOLLARID(i) arrayindex(a). {
res = array('var'=>'\''.substr(i,1).'\'', 'smarty_internal_index'=>a);
}
@@ -875,14 +955,17 @@ arrayindex ::= . {
// single index definition
// Smarty2 style index
indexdef(res) ::= DOT DOLLARID(i). {
- res = '['.$this->compiler->compileVariable('\''.substr(i,1).'\'').']';
+ $this->compiler->triggerTagNoCache(substr(i,1));
+ res = '[$_smarty_tpl->getValue(\''.substr(i,1).'\')]';
}
indexdef(res) ::= DOT varvar(v). {
- res = '['.$this->compiler->compileVariable(v).']';
+ $this->compiler->triggerTagNoCache(v);
+ res = '[$_smarty_tpl->getValue(' . v . ')]';
}
indexdef(res) ::= DOT varvar(v) AT ID(p). {
- res = '['.$this->compiler->compileVariable(v).'->'.p.']';
+ $this->compiler->triggerTagNoCache(v);
+ res = '[$_smarty_tpl->getValue(' . v . ')->'.p.']';
}
indexdef(res) ::= DOT ID(i). {
@@ -900,11 +983,11 @@ indexdef(res) ::= DOT LDEL expr(e) RDEL. {
// section tag index
indexdef(res) ::= OPENB ID(i)CLOSEB. {
- res = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.i.'\'][\'index\']').']';
+ res = '['.(new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,'[\'section\'][\''.i.'\'][\'index\']').']';
}
indexdef(res) ::= OPENB ID(i) DOT ID(i2) CLOSEB. {
- res = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.i.'\'][\''.i2.'\']').']';
+ res = '['.(new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,'[\'section\'][\''.i.'\'][\''.i2.'\']').']';
}
indexdef(res) ::= OPENB SINGLEQUOTESTRING(s) CLOSEB. {
res = '['.s.']';
@@ -913,9 +996,10 @@ indexdef(res) ::= OPENB INTEGER(n) CLOSEB. {
res = '['.n.']';
}
indexdef(res) ::= OPENB DOLLARID(i) CLOSEB. {
- res = '['.$this->compiler->compileVariable('\''.substr(i,1).'\'').']';
+ $this->compiler->triggerTagNoCache(substr(i,1));
+ res = '[$_smarty_tpl->getValue(\''.substr(i,1).'\')]';
}
-indexdef(res) ::= OPENB variable(v) CLOSEB. {
+indexdef(res) ::= OPENB variablevalue(v) CLOSEB. {
res = '['.v.']';
}
indexdef(res) ::= OPENB value(v) CLOSEB. {
@@ -957,7 +1041,8 @@ varvarele(res) ::= ID(s). {
}
varvarele(res) ::= SIMPELOUTPUT(i). {
$var = trim(substr(i, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $');
- res = $this->compiler->compileVariable('\''.$var.'\'');
+ $this->compiler->triggerTagNoCache($var);
+ res = '$_smarty_tpl->getValue(\''.$var.'\')';
}
// variable sections of element
@@ -970,9 +1055,10 @@ varvarele(res) ::= LDEL expr(e) RDEL. {
//
object(res) ::= varindexed(vi) objectchain(oc). {
if (vi['var'] === '\'smarty\'') {
- res = $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']).oc;
+ res = (new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,vi['smarty_internal_index']).oc;
} else {
- res = $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index'].oc;
+ $this->compiler->triggerTagNoCache(vi['var']);
+ res = '$_smarty_tpl->getValue(' . vi['var'] . ')'.vi['smarty_internal_index'].oc;
}
}
@@ -998,7 +1084,8 @@ objectelement(res)::= PTR varvar(v) arrayindex(a). {
if ($this->security) {
$this->compiler->trigger_template_error (self::ERR2);
}
- res = '->{'.$this->compiler->compileVariable(v).a.'}';
+ $this->compiler->triggerTagNoCache(v);
+ res = '->{$_smarty_tpl->getValue(' . v . ')'.a.'}';
}
objectelement(res)::= PTR LDEL expr(e) RDEL arrayindex(a). {
@@ -1024,8 +1111,41 @@ objectelement(res)::= PTR method(f). {
//
// function
//
-function(res) ::= ns1(f) OPENP params(p) CLOSEP. {
- res = $this->compiler->compilePHPFunctionCall(f, p);
+function(res) ::= ns1(f) OPENP variablelist(v) CLOSEP. {
+
+ if (f == 'isset') {
+ res = '(true';
+ if (count(v) == 0) {
+ throw new CompilerException("Invalid number of arguments for isset. isset expects at least one parameter.");
+ }
+ foreach (v as $value) {
+ if (is_array($value)) {
+ res .= ' && (' . $value[0] . ' && null !== (' . $value[1] . ' ?? null))';
+ } else {
+ res .= ' && (' . $value . ' !== null)';
+ }
+ }
+ res .= ')';
+ } elseif (f == 'empty') {
+ if (count(v) != 1) {
+ throw new CompilerException("Invalid number of arguments for empty. empty expects at exactly one parameter.");
+ }
+ if (is_array(v[0])) {
+ res .= '( !' . v[0][0] . ' || empty(' . v[0][1] . '))';
+ } else {
+ res = 'false == ' . v[0];
+ }
+ } else {
+ $p = array();
+ foreach (v as $value) {
+ if (is_array($value)) {
+ $p[] = $value[1];
+ } else {
+ $p[] = $value;
+ }
+ }
+ res = $this->compiler->compileModifierInExpression(f, $p);
+ }
}
@@ -1044,7 +1164,8 @@ method(res) ::= DOLLARID(f) OPENP params(p) CLOSEP. {
$this->compiler->trigger_template_error (self::ERR2);
}
$prefixVar = $this->compiler->getNewPrefixVariable();
- $this->compiler->appendPrefixCode("compiler->compileVariable('\''.substr(f,1).'\'').';?>');
+ $this->compiler->triggerTagNoCache(substr(f,1));
+ $this->compiler->appendPrefixCode("getValue('".substr(f,1).'\')'.';?>');
res = $prefixVar .'('. implode(',',p) .')';
}
@@ -1059,7 +1180,7 @@ params(res) ::= expr(e). {
res = array(e);
}
- // kein parameter
+ // no parameter
params(res) ::= . {
res = array();
}
@@ -1236,34 +1357,34 @@ doublequoted(res) ::= doublequoted(o1) doublequotedcontent(o2). {
}
doublequoted(res) ::= doublequotedcontent(o). {
- res = new Smarty_Internal_ParseTree_Dq($this, o);
+ res = new Dq($this, o);
}
-doublequotedcontent(res) ::= BACKTICK variable(v) BACKTICK. {
- res = new Smarty_Internal_ParseTree_Code('(string)'.v);
+doublequotedcontent(res) ::= BACKTICK variablevalue(v) BACKTICK. {
+ res = new Code('(string)'.v);
}
doublequotedcontent(res) ::= BACKTICK expr(e) BACKTICK. {
- res = new Smarty_Internal_ParseTree_Code('(string)('.e.')');
+ res = new Code('(string)('.e.')');
}
doublequotedcontent(res) ::= DOLLARID(i). {
- res = new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\''. substr(i,1) .'\']->value');
+ res = new Code('(string)$_smarty_tpl->getValue(\''. substr(i,1) .'\')');
}
-doublequotedcontent(res) ::= LDEL variable(v) RDEL. {
- res = new Smarty_Internal_ParseTree_Code('(string)'.v);
+doublequotedcontent(res) ::= LDEL variablevalue(v) RDEL. {
+ res = new Code('(string)'.v);
}
doublequotedcontent(res) ::= LDEL expr(e) RDEL. {
- res = new Smarty_Internal_ParseTree_Code('(string)('.e.')');
+ res = new Code('(string)('.e.')');
}
doublequotedcontent(res) ::= smartytag(st). {
- res = new Smarty_Internal_ParseTree_Tag($this, st);
+ res = new Tag($this, st);
}
doublequotedcontent(res) ::= TEXT(o). {
- res = new Smarty_Internal_ParseTree_DqContent(o);
+ res = new DqContent(o);
}
diff --git a/bundled-libs/smarty/smarty/src/Resource/BasePlugin.php b/bundled-libs/smarty/smarty/src/Resource/BasePlugin.php
new file mode 100644
index 000000000..6d2222237
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Resource/BasePlugin.php
@@ -0,0 +1,145 @@
+ FilePlugin::class,
+ 'string' => StringPlugin::class,
+ 'extends' => ExtendsPlugin::class,
+ 'stream' => StreamPlugin::class,
+ 'eval' => StringEval::class,
+ ];
+
+ /**
+ * Source must be recompiled on every occasion
+ *
+ * @var boolean
+ */
+ public $recompiled = false;
+
+ /**
+ * Flag if resource does allow compilation
+ *
+ * @return bool
+ */
+ public function supportsCompiledTemplates(): bool {
+ return true;
+ }
+
+ /**
+ * Check if resource must check time stamps when loading compiled or cached templates.
+ * Resources like 'extends' which use source components my disable timestamp checks on own resource.
+ * @return bool
+ */
+ public function checkTimestamps()
+ {
+ return true;
+ }
+
+ /**
+ * Load Resource Handler
+ *
+ * @param Smarty $smarty smarty object
+ * @param string $type name of the resource
+ *
+ * @return BasePlugin Resource Handler
+ * @throws Exception
+ */
+ public static function load(Smarty $smarty, $type)
+ {
+ // try smarty's cache
+ if (isset($smarty->_resource_handlers[ $type ])) {
+ return $smarty->_resource_handlers[ $type ];
+ }
+ // try registered resource
+ if (isset($smarty->registered_resources[ $type ])) {
+ return $smarty->_resource_handlers[ $type ] = $smarty->registered_resources[ $type ];
+ }
+ // try sysplugins dir
+ if (isset(self::$sysplugins[ $type ])) {
+ $_resource_class = self::$sysplugins[ $type ];
+ return $smarty->_resource_handlers[ $type ] = new $_resource_class();
+ }
+ // try plugins dir
+ $_resource_class = 'Smarty_Resource_' . \smarty_ucfirst_ascii($type);
+ if (class_exists($_resource_class, false)) {
+ return $smarty->_resource_handlers[ $type ] = new $_resource_class();
+ }
+ // try streams
+ $_known_stream = stream_get_wrappers();
+ if (in_array($type, $_known_stream)) {
+ // is known stream
+ if (is_object($smarty->security_policy)) {
+ $smarty->security_policy->isTrustedStream($type);
+ }
+ return $smarty->_resource_handlers[ $type ] = new StreamPlugin();
+ }
+ // TODO: try default_(template|config)_handler
+ // give up
+ throw new \Smarty\Exception("Unknown resource type '{$type}'");
+ }
+
+ /**
+ * Load template's source into current template object
+ *
+ * @param Source $source source object
+ *
+ * @return string template source
+ * @throws \Smarty\Exception if source cannot be loaded
+ */
+ abstract public function getContent(Source $source);
+
+ /**
+ * populate Source Object with metadata from Resource
+ *
+ * @param Source $source source object
+ * @param Template|null $_template template object
+ */
+ abstract public function populate(Source $source, ?\Smarty\Template $_template = null);
+
+ /**
+ * populate Source Object with timestamp and exists from Resource
+ *
+ * @param Source $source source object
+ */
+ public function populateTimestamp(Source $source)
+ {
+ // intentionally left blank
+ }
+
+ /*
+ * Check if resource must check time stamps when when loading complied or cached templates.
+ * Resources like 'extends' which use source components my disable timestamp checks on own resource.
+ *
+ * @return bool
+ */
+ /**
+ * Determine basename for compiled filename
+ *
+ * @param \Smarty\Template\Source $source source object
+ *
+ * @return string resource's basename
+ */
+ public function getBasename(\Smarty\Template\Source $source)
+ {
+ return basename(preg_replace('![^\w]+!', '_', $source->name));
+ }
+
+}
diff --git a/bundled-libs/smarty/smarty/src/Resource/CustomPlugin.php b/bundled-libs/smarty/smarty/src/Resource/CustomPlugin.php
new file mode 100644
index 000000000..895e97108
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Resource/CustomPlugin.php
@@ -0,0 +1,105 @@
+uid = sha1($source->type . ':' . $source->name);
+ $mtime = $this->fetchTimestamp($source->name);
+ if ($mtime !== null) {
+ $source->timestamp = $mtime;
+ } else {
+ $this->fetch($source->name, $content, $timestamp);
+ $source->timestamp = $timestamp ?? false;
+ if (isset($content)) {
+ $source->content = $content;
+ }
+ }
+ $source->exists = !!$source->timestamp;
+ }
+
+ /**
+ * Load template's source into current template object
+ *
+ * @param Source $source source object
+ *
+ * @return string template source
+ * @throws Exception if source cannot be loaded
+ */
+ public function getContent(Source $source) {
+ $this->fetch($source->name, $content, $timestamp);
+ if (isset($content)) {
+ return $content;
+ }
+ throw new Exception("Unable to read template {$source->type} '{$source->name}'");
+ }
+
+ /**
+ * Determine basename for compiled filename
+ *
+ * @param Source $source source object
+ *
+ * @return string resource's basename
+ */
+ public function getBasename(Source $source) {
+ return basename($this->generateSafeName($source->name));
+ }
+
+ /**
+ * Removes special characters from $name and limits its length to 127 characters.
+ *
+ * @param $name
+ *
+ * @return string
+ */
+ private function generateSafeName($name): string {
+ return substr(preg_replace('/[^A-Za-z0-9._]/', '', (string)$name), 0, 127);
+ }
+}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_extends.php b/bundled-libs/smarty/smarty/src/Resource/ExtendsPlugin.php
similarity index 50%
rename from bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_extends.php
rename to bundled-libs/smarty/smarty/src/Resource/ExtendsPlugin.php
index 80946932e..960e37971 100644
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_extends.php
+++ b/bundled-libs/smarty/smarty/src/Resource/ExtendsPlugin.php
@@ -1,59 +1,45 @@
name);
- $smarty = &$source->smarty;
+ $smarty = $source->getSmarty();
$exists = true;
foreach ($components as $component) {
- /* @var \Smarty_Template_Source $_s */
- $_s = Smarty_Template_Source::load(null, $smarty, $component);
- if ($_s->type === 'php') {
- throw new SmartyException("Resource type {$_s->type} cannot be used with the extends resource type");
- }
+ $_s = Source::load(null, $smarty, $component);
$sources[ $_s->uid ] = $_s;
- $uid .= $_s->filepath;
+ $uid .= $_s->uid;
if ($_template) {
$exists = $exists && $_s->exists;
}
}
$source->components = $sources;
- $source->filepath = $_s->filepath;
- $source->uid = sha1($uid . $source->smarty->_joined_template_dir);
+ $source->uid = sha1($uid . $source->getSmarty()->_joined_template_dir);
$source->exists = $exists;
if ($_template) {
$source->timestamp = $_s->timestamp;
@@ -63,12 +49,12 @@ public function populate(Smarty_Template_Source $source, Smarty_Internal_Templat
/**
* populate Source Object with timestamp and exists from Resource
*
- * @param Smarty_Template_Source $source source object
+ * @param Source $source source object
*/
- public function populateTimestamp(Smarty_Template_Source $source)
+ public function populateTimestamp(Source $source)
{
$source->exists = true;
- /* @var \Smarty_Template_Source $_s */
+ /* @var Source $_s */
foreach ($source->components as $_s) {
$source->exists = $source->exists && $_s->exists;
}
@@ -78,19 +64,19 @@ public function populateTimestamp(Smarty_Template_Source $source)
/**
* Load template's source from files into current template object
*
- * @param Smarty_Template_Source $source source object
+ * @param Source $source source object
*
* @return string template source
- * @throws SmartyException if source cannot be loaded
+ * @throws \Smarty\Exception if source cannot be loaded
*/
- public function getContent(Smarty_Template_Source $source)
+ public function getContent(Source $source)
{
if (!$source->exists) {
- throw new SmartyException("Unable to load template '{$source->type}:{$source->name}'");
+ throw new \Smarty\Exception("Unable to load '{$source->type}:{$source->name}'");
}
$_components = array_reverse($source->components);
$_content = '';
- /* @var \Smarty_Template_Source $_s */
+ /* @var Source $_s */
foreach ($_components as $_s) {
// read content
$_content .= $_s->getContent();
@@ -101,13 +87,17 @@ public function getContent(Smarty_Template_Source $source)
/**
* Determine basename for compiled filename
*
- * @param Smarty_Template_Source $source source object
+ * @param Source $source source object
*
* @return string resource's basename
*/
- public function getBasename(Smarty_Template_Source $source)
+ public function getBasename(Source $source)
{
- return str_replace(':', '.', basename($source->filepath));
+ $search = array(':');
+ if (\Smarty\Smarty::$_IS_WINDOWS) {
+ $search = array(':', '|');
+ }
+ return str_replace($search, '.', basename($source->getResourceName()));
}
/*
diff --git a/bundled-libs/smarty/smarty/src/Resource/FilePlugin.php b/bundled-libs/smarty/smarty/src/Resource/FilePlugin.php
new file mode 100644
index 000000000..0033c8348
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Resource/FilePlugin.php
@@ -0,0 +1,183 @@
+uid = sha1(
+ $source->name . ($source->isConfig ? $source->getSmarty()->_joined_config_dir :
+ $source->getSmarty()->_joined_template_dir)
+ );
+
+ if ($path = $this->getFilePath($source->name, $source->getSmarty(), $source->isConfig)) {
+ if (isset($source->getSmarty()->security_policy) && is_object($source->getSmarty()->security_policy)) {
+ $source->getSmarty()->security_policy->isTrustedResourceDir($path, $source->isConfig);
+ }
+ $source->exists = true;
+ $source->timestamp = filemtime($path);
+ } else {
+ $source->timestamp = $source->exists = false;
+ }
+ }
+
+ /**
+ * populate Source Object with timestamp and exists from Resource
+ *
+ * @param Source $source source object
+ */
+ public function populateTimestamp(Source $source) {
+ $path = $this->getFilePath($source->name, $source->getSmarty(), $source->isConfig);
+ if (!$source->exists) {
+ $source->exists = ($path !== false && is_file($path));
+ }
+ if ($source->exists && $path !== false) {
+ $source->timestamp = filemtime($path);
+ } else {
+ $source->timestamp = 0;
+ }
+ }
+
+ /**
+ * Load template's source from file into current template object
+ *
+ * @param Source $source source object
+ *
+ * @return string template source
+ * @throws Exception if source cannot be loaded
+ */
+ public function getContent(Source $source) {
+ if ($source->exists) {
+ return file_get_contents($this->getFilePath($source->getResourceName(), $source->getSmarty(), $source->isConfig()));
+ }
+ throw new Exception(
+ 'Unable to read ' . ($source->isConfig ? 'config' : 'template') .
+ " {$source->type} '{$source->name}'"
+ );
+ }
+
+ /**
+ * Determine basename for compiled filename
+ *
+ * @param Source $source source object
+ *
+ * @return string resource's basename
+ */
+ public function getBasename(Source $source) {
+ return basename($source->getResourceName());
+ }
+
+ /**
+ * build template filepath by traversing the template_dir array
+ *
+ * @param $file
+ * @param Smarty $smarty
+ * @param bool $isConfig
+ *
+ * @return string fully qualified filepath
+ */
+ public function getFilePath($file, \Smarty\Smarty $smarty, bool $isConfig = false) {
+ // absolute file ?
+ if ($file[0] === '/' || $file[1] === ':') {
+ $file = $smarty->_realpath($file, true);
+ return is_file($file) ? $file : false;
+ }
+
+ // normalize DIRECTORY_SEPARATOR
+ if (strpos($file, DIRECTORY_SEPARATOR === '/' ? '\\' : '/') !== false) {
+ $file = str_replace(DIRECTORY_SEPARATOR === '/' ? '\\' : '/', DIRECTORY_SEPARATOR, $file);
+ }
+ $_directories = $smarty->getTemplateDir(null, $isConfig);
+ // template_dir index?
+ if ($file[0] === '[' && preg_match('#^\[([^\]]+)\](.+)$#', $file, $fileMatch)) {
+ $file = $fileMatch[2];
+ $_indices = explode(',', $fileMatch[1]);
+ $_index_dirs = [];
+ foreach ($_indices as $index) {
+ $index = trim($index);
+ // try string indexes
+ if (isset($_directories[$index])) {
+ $_index_dirs[] = $_directories[$index];
+ } elseif (is_numeric($index)) {
+ // try numeric index
+ $index = (int)$index;
+ if (isset($_directories[$index])) {
+ $_index_dirs[] = $_directories[$index];
+ } else {
+ // try at location index
+ $keys = array_keys($_directories);
+ if (isset($_directories[$keys[$index]])) {
+ $_index_dirs[] = $_directories[$keys[$index]];
+ }
+ }
+ }
+ }
+ if (empty($_index_dirs)) {
+ // index not found
+ return false;
+ } else {
+ $_directories = $_index_dirs;
+ }
+ }
+ // relative file name?
+ foreach ($_directories as $_directory) {
+ $path = $_directory . $file;
+ if (is_file($path)) {
+ return (strpos($path, '.' . DIRECTORY_SEPARATOR) !== false) ? $smarty->_realpath($path) : $path;
+ }
+ }
+ if (!isset($_index_dirs)) {
+ // Could be relative to cwd
+ $path = $smarty->_realpath($file, true);
+ if (is_file($path)) {
+ return $path;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns the timestamp of the resource indicated by $resourceName, or false if it doesn't exist.
+ *
+ * @param string $resourceName
+ * @param Smarty $smarty
+ * @param bool $isConfig
+ *
+ * @return false|int
+ */
+ public function getResourceNameTimestamp(string $resourceName, \Smarty\Smarty $smarty, bool $isConfig = false) {
+ if ($path = $this->getFilePath($resourceName, $smarty, $isConfig)) {
+ return filemtime($path);
+ }
+ return false;
+ }
+}
diff --git a/bundled-libs/smarty/smarty/src/Resource/RecompiledPlugin.php b/bundled-libs/smarty/smarty/src/Resource/RecompiledPlugin.php
new file mode 100644
index 000000000..f1c64bc78
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Resource/RecompiledPlugin.php
@@ -0,0 +1,50 @@
+uid = false;
+ $source->content = $this->getContent($source);
+ $source->timestamp = $source->exists = !!$source->content;
+ }
+
+ /**
+ * Load template's source from stream into current template object
+ *
+ * @param Source $source source object
+ *
+ * @return string template source
+ */
+ public function getContent(Source $source) {
+
+ if (strpos($source->getResourceName(), '://') !== false) {
+ $filepath = $source->getResourceName();
+ } else {
+ $filepath = str_replace(':', '://', $source->getFullResourceName());
+ }
+
+ $t = '';
+ // the availability of the stream has already been checked in Smarty\Resource\Base::fetch()
+ $fp = fopen($filepath, 'r+');
+ if ($fp) {
+ while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
+ $t .= $current_line;
+ }
+ fclose($fp);
+ return $t;
+ } else {
+ return false;
+ }
+ }
+
+}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_eval.php b/bundled-libs/smarty/smarty/src/Resource/StringEval.php
similarity index 53%
rename from bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_eval.php
rename to bundled-libs/smarty/smarty/src/Resource/StringEval.php
index 3b552a589..5c35e7437 100644
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_resource_eval.php
+++ b/bundled-libs/smarty/smarty/src/Resource/StringEval.php
@@ -1,9 +1,14 @@
uid = $source->filepath = sha1($source->name);
+ $source->uid = sha1($source->name);
$source->timestamp = $source->exists = true;
}
/**
* Load template's source from $resource_name into current template object
*
- * @uses decode() to decode base64 and urlencoded template_resources
- *
- * @param Smarty_Template_Source $source source object
+ * @param \Smarty\Template\Source $source source object
*
* @return string template source
+ *@uses decode() to decode base64 and urlencoded template_resources
+ *
*/
- public function getContent(Smarty_Template_Source $source)
+ public function getContent(\Smarty\Template\Source $source)
{
return $this->decode($source->name);
}
@@ -66,28 +71,14 @@ protected function decode($string)
return $string;
}
- /**
- * modify resource_name according to resource handlers specifications
- *
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
- * @param boolean $isConfig flag for config resource
- *
- * @return string unique resource name
- */
- public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
- {
- return get_class($this) . '#' . $this->decode($resource_name);
- }
-
/**
* Determine basename for compiled filename
*
- * @param Smarty_Template_Source $source source object
+ * @param \Smarty\Template\Source $source source object
*
* @return string resource's basename
*/
- public function getBasename(Smarty_Template_Source $source)
+ public function getBasename(\Smarty\Template\Source $source)
{
return '';
}
diff --git a/bundled-libs/smarty/smarty/src/Resource/StringPlugin.php b/bundled-libs/smarty/smarty/src/Resource/StringPlugin.php
new file mode 100644
index 000000000..fb3692c73
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Resource/StringPlugin.php
@@ -0,0 +1,94 @@
+uid = sha1($source->name);
+ $source->timestamp = $source->exists = true;
+ }
+
+ /**
+ * Load template's source from $resource_name into current template object
+ *
+ * @param Source $source source object
+ *
+ * @return string template source
+ * @uses decode() to decode base64 and urlencoded template_resources
+ *
+ */
+ public function getContent(Source $source) {
+ return $this->decode($source->name);
+ }
+
+ /**
+ * decode base64 and urlencode
+ *
+ * @param string $string template_resource to decode
+ *
+ * @return string decoded template_resource
+ */
+ protected function decode($string) {
+ // decode if specified
+ if (($pos = strpos($string, ':')) !== false) {
+ if (!strncmp($string, 'base64', 6)) {
+ return base64_decode(substr($string, 7));
+ } elseif (!strncmp($string, 'urlencode', 9)) {
+ return urldecode(substr($string, 10));
+ }
+ }
+ return $string;
+ }
+
+ /**
+ * Determine basename for compiled filename
+ * Always returns an empty string.
+ *
+ * @param Source $source source object
+ *
+ * @return string resource's basename
+ */
+ public function getBasename(Source $source) {
+ return '';
+ }
+
+ /*
+ * Disable timestamp checks for string resource.
+ *
+ * @return bool
+ */
+ /**
+ * @return bool
+ */
+ public function checkTimestamps() {
+ return false;
+ }
+}
diff --git a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_block.php b/bundled-libs/smarty/smarty/src/Runtime/Block.php
similarity index 81%
rename from bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_block.php
rename to bundled-libs/smarty/smarty/src/Runtime/Block.php
index 9956d642b..90eab9cbb 100644
--- a/bundled-libs/smarty/smarty/libs/sysplugins/smarty_internal_block.php
+++ b/bundled-libs/smarty/smarty/src/Runtime/Block.php
@@ -1,13 +1,15 @@
registerCallbacks($_template);
+
+ $this->captureStack[] = [
+ $buffer,
+ $assign,
+ $append,
+ ];
+ $this->captureCount++;
+ ob_start();
+ }
+
+ /**
+ * Register callbacks in template class
+ *
+ * @param \Smarty\Template $_template
+ */
+ private function registerCallbacks(Template $_template) {
+
+ foreach ($_template->startRenderCallbacks as $callback) {
+ if (is_array($callback) && get_class($callback[0]) == self::class) {
+ // already registered
+ return;
+ }
+ }
+
+ $_template->startRenderCallbacks[] = [
+ $this,
+ 'startRender',
+ ];
+ $_template->endRenderCallbacks[] = [
+ $this,
+ 'endRender',
+ ];
+ $this->startRender($_template);
+ }
+
+ /**
+ * Start render callback
+ *
+ * @param \Smarty\Template $_template
+ */
+ public function startRender(Template $_template) {
+ $this->countStack[] = $this->captureCount;
+ $this->captureCount = 0;
+ }
+
+ /**
+ * Close capture section
+ *
+ * @param \Smarty\Template $_template
+ *
+ * @throws \Smarty\Exception
+ */
+ public function close(Template $_template) {
+ if ($this->captureCount) {
+ [$buffer, $assign, $append] = array_pop($this->captureStack);
+ $this->captureCount--;
+ if (isset($assign)) {
+ $_template->assign($assign, ob_get_contents());
+ }
+ if (isset($append)) {
+ $_template->append($append, ob_get_contents());
+ }
+ $this->namedBuffer[$buffer] = ob_get_clean();
+ } else {
+ $this->error($_template);
+ }
+ }
+
+ /**
+ * Error exception on not matching {capture}{/capture}
+ *
+ * @param \Smarty\Template $_template
+ *
+ * @throws \Smarty\Exception
+ */
+ public function error(Template $_template) {
+ throw new \Smarty\Exception("Not matching {capture}{/capture} in '{$_template->template_resource}'");
+ }
+
+ /**
+ * Return content of named capture buffer by key or as array
+ *
+ * @param \Smarty\Template $_template
+ * @param string|null $name
+ *
+ * @return string|string[]|null
+ */
+ public function getBuffer(Template $_template, $name = null) {
+ if (isset($name)) {
+ return $this->namedBuffer[$name] ?? null;
+ } else {
+ return $this->namedBuffer;
+ }
+ }
+
+ /**
+ * End render callback
+ *
+ * @param \Smarty\Template $_template
+ *
+ * @throws \Smarty\Exception
+ */
+ public function endRender(Template $_template) {
+ if ($this->captureCount) {
+ $this->error($_template);
+ } else {
+ $this->captureCount = array_pop($this->countStack);
+ }
+ }
+}
diff --git a/bundled-libs/smarty/smarty/src/Runtime/DefaultPluginHandlerRuntime.php b/bundled-libs/smarty/smarty/src/Runtime/DefaultPluginHandlerRuntime.php
new file mode 100644
index 000000000..f3be85ca6
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Runtime/DefaultPluginHandlerRuntime.php
@@ -0,0 +1,73 @@
+defaultPluginHandler = $defaultPluginHandler;
+ }
+
+ public function hasPlugin($tag, $plugin_type): bool {
+ if ($this->defaultPluginHandler === null) {
+ return false;
+ }
+
+ $callback = null;
+
+ // these are not used here
+ $script = null;
+ $cacheable = null;
+
+ return (\call_user_func_array(
+ $this->defaultPluginHandler,
+ [
+ $tag,
+ $plugin_type,
+ null, // This used to pass $this->template, but this parameter has been removed in 5.0
+ &$callback,
+ &$script,
+ &$cacheable,
+ ]
+ ) && $callback);
+ }
+
+ /**
+ * @throws Exception
+ */
+ public function getCallback($tag, $plugin_type) {
+
+ if ($this->defaultPluginHandler === null) {
+ return false;
+ }
+
+ $callback = null;
+
+ // these are not used here
+ $script = null;
+ $cacheable = null;
+
+ if (\call_user_func_array(
+ $this->defaultPluginHandler,
+ [
+ $tag,
+ $plugin_type,
+ null, // This used to pass $this->template, but this parameter has been removed in 5.0
+ &$callback,
+ &$script,
+ &$cacheable,
+ ]
+ ) && $callback) {
+ return $callback;
+ }
+ throw new Exception("Default plugin handler: Returned callback for '{$tag}' not callable at runtime");
+ }
+
+}
\ No newline at end of file
diff --git a/bundled-libs/smarty/smarty/src/Runtime/ForeachRuntime.php b/bundled-libs/smarty/smarty/src/Runtime/ForeachRuntime.php
new file mode 100644
index 000000000..06da7d546
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Runtime/ForeachRuntime.php
@@ -0,0 +1,160 @@
+count($from);
+ }
+ } else {
+ settype($from, 'array');
+ }
+ }
+ if (!isset($total)) {
+ $total = empty($from) ? 0 : ($needTotal ? count($from) : 1);
+ }
+ if ($tpl->hasVariable($item)) {
+ $saveVars['item'] = [
+ $item,
+ $tpl->getVariable($item)->getValue(),
+ ];
+ }
+ $tpl->assign($item,null);
+ if ($total === 0) {
+ $from = null;
+ } else {
+ if ($key) {
+ if ($tpl->hasVariable($key)) {
+ $saveVars['key'] = [
+ $key,
+ clone $tpl->getVariable($key),
+ ];
+ }
+ $tpl->assign($key, null);
+ }
+ }
+ if ($needTotal) {
+ $tpl->getVariable($item)->total = $total;
+ }
+ if ($name) {
+ $namedVar = "__smarty_foreach_{$name}";
+ if ($tpl->hasVariable($namedVar)) {
+ $saveVars['named'] = [
+ $namedVar,
+ clone $tpl->getVariable($namedVar),
+ ];
+ }
+ $namedProp = [];
+ if (isset($properties['total'])) {
+ $namedProp['total'] = $total;
+ }
+ if (isset($properties['iteration'])) {
+ $namedProp['iteration'] = 0;
+ }
+ if (isset($properties['index'])) {
+ $namedProp['index'] = -1;
+ }
+ if (isset($properties['show'])) {
+ $namedProp['show'] = ($total > 0);
+ }
+ $tpl->assign($namedVar, $namedProp);
+ }
+ $this->stack[] = $saveVars;
+ return $from;
+ }
+
+ /**
+ * [util function] counts an array, arrayAccess/traversable or PDOStatement object
+ *
+ * @param mixed $value
+ *
+ * @return int the count for arrays and objects that implement countable, 1 for other objects that don't, and 0
+ * for empty elements
+ * @throws \Exception
+ */
+ public function count($value): int
+ {
+ if ($value instanceof \IteratorAggregate) {
+ // Note: getIterator() returns a Traversable, not an Iterator
+ // thus rewind() and valid() methods may not be present
+ return iterator_count($value->getIterator());
+ } elseif ($value instanceof \Iterator) {
+ return $value instanceof \Generator ? 1 : iterator_count($value);
+ } elseif ($value instanceof \Countable) {
+ return count($value);
+ }
+ return count((array) $value);
+ }
+
+ /**
+ * Restore saved variables
+ *
+ * will be called by {break n} or {continue n} for the required number of levels
+ *
+ * @param \Smarty\Template $tpl
+ * @param int $levels number of levels
+ */
+ public function restore(Template $tpl, $levels = 1) {
+ while ($levels) {
+ $saveVars = array_pop($this->stack);
+ if (!empty($saveVars)) {
+ if (isset($saveVars['item'])) {
+ $tpl->getVariable($saveVars['item'][0])->setValue($saveVars['item'][1]);
+ }
+ if (isset($saveVars['key'])) {
+ $tpl->setVariable($saveVars['key'][0], $saveVars['key'][1]);
+ }
+ if (isset($saveVars['named'])) {
+ $tpl->setVariable($saveVars['named'][0], $saveVars['named'][1]);
+ }
+ }
+ $levels--;
+ }
+ }
+}
diff --git a/bundled-libs/smarty/smarty/src/Runtime/InheritanceRuntime.php b/bundled-libs/smarty/smarty/src/Runtime/InheritanceRuntime.php
new file mode 100644
index 000000000..74ea85440
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Runtime/InheritanceRuntime.php
@@ -0,0 +1,243 @@
+state === 3 && (strpos($tpl->template_resource, 'extendsall') === false)) {
+ $tpl->setInheritance(clone $tpl->getSmarty()->getRuntime('Inheritance'));
+ $tpl->getInheritance()->init($tpl, $initChild, $blockNames);
+ return;
+ }
+ ++$this->tplIndex;
+ $this->sources[$this->tplIndex] = $tpl->getSource();
+ // start of child sub template(s)
+ if ($initChild) {
+ $this->state = 1;
+ if (!$this->inheritanceLevel) {
+ //grab any output of child templates
+ ob_start();
+ }
+ ++$this->inheritanceLevel;
+ }
+ // if state was waiting for parent change state to parent
+ if ($this->state === 2) {
+ $this->state = 3;
+ }
+ }
+
+ /**
+ * End of child template(s)
+ * - if outer level is reached flush output buffer and switch to wait for parent template state
+ *
+ * @param \Smarty\Template $tpl
+ * @param null|string $template optional name of inheritance parent template
+ *
+ * @throws \Exception
+ * @throws \Smarty\Exception
+ */
+ public function endChild(Template $tpl, $template = null, ?string $currentDir = null) {
+ --$this->inheritanceLevel;
+ if (!$this->inheritanceLevel) {
+ ob_end_clean();
+ $this->state = 2;
+ }
+ if (isset($template)) {
+ $tpl->renderSubTemplate(
+ $template,
+ $tpl->cache_id,
+ $tpl->compile_id,
+ $tpl->caching ? \Smarty\Template::CACHING_NOCACHE_CODE : 0,
+ $tpl->cache_lifetime,
+ [],
+ null,
+ $currentDir
+ );
+ }
+ }
+
+ /**
+ * \Smarty\Runtime\Block constructor.
+ * - if outer level {block} of child template ($state === 1) save it as child root block
+ * - otherwise process inheritance and render
+ *
+ * @param \Smarty\Template $tpl
+ * @param $className
+ * @param string $name
+ * @param int|null $tplIndex index of outer level {block} if nested
+ *
+ * @throws \Smarty\Exception
+ */
+ public function instanceBlock(Template $tpl, $className, $name, $tplIndex = null) {
+ $block = new $className($name, isset($tplIndex) ? $tplIndex : $this->tplIndex);
+ if (isset($this->childRoot[$name])) {
+ $block->child = $this->childRoot[$name];
+ }
+ if ($this->state === 1) {
+ $this->childRoot[$name] = $block;
+ return;
+ }
+ // make sure we got child block of child template of current block
+ while ($block->child && $block->child->child && $block->tplIndex <= $block->child->tplIndex) {
+ $block->child = $block->child->child;
+ }
+ $this->processBlock($tpl, $block);
+ }
+
+ /**
+ * Goto child block or render this
+ *
+ * @param Template $tpl
+ * @param \Smarty\Runtime\Block $block
+ * @param \Smarty\Runtime\Block|null $parent
+ *
+ * @throws Exception
+ */
+ private function processBlock(
+ Template $tpl,
+ \Smarty\Runtime\Block $block,
+ ?\Smarty\Runtime\Block $parent = null
+ ) {
+ if ($block->hide && !isset($block->child)) {
+ return;
+ }
+ if (isset($block->child) && $block->child->hide && !isset($block->child->child)) {
+ $block->child = null;
+ }
+ $block->parent = $parent;
+ if ($block->append && !$block->prepend && isset($parent)) {
+ $this->callParent($tpl, $block, '\'{block append}\'');
+ }
+ if ($block->callsChild || !isset($block->child) || ($block->child->hide && !isset($block->child->child))) {
+ $this->callBlock($block, $tpl);
+ } else {
+ $this->processBlock($tpl, $block->child, $block);
+ }
+ if ($block->prepend && isset($parent)) {
+ $this->callParent($tpl, $block, '{block prepend}');
+ if ($block->append) {
+ if ($block->callsChild || !isset($block->child)
+ || ($block->child->hide && !isset($block->child->child))
+ ) {
+ $this->callBlock($block, $tpl);
+ } else {
+ $this->processBlock($tpl, $block->child, $block);
+ }
+ }
+ }
+ $block->parent = null;
+ }
+
+ /**
+ * Render child on \$smarty.block.child
+ *
+ * @param Template $tpl
+ * @param \Smarty\Runtime\Block $block
+ *
+ * @return null|string block content
+ * @throws Exception
+ */
+ public function callChild(Template $tpl, \Smarty\Runtime\Block $block) {
+ if (isset($block->child)) {
+ $this->processBlock($tpl, $block->child, $block);
+ }
+ }
+
+ /**
+ * Render parent block on \$smarty.block.parent or {block append/prepend}
+ *
+ * @param Template $tpl
+ * @param \Smarty\Runtime\Block $block
+ * @param string $tag
+ *
+ * @return null|string block content
+ * @throws Exception
+ */
+ public function callParent(Template $tpl, \Smarty\Runtime\Block $block) {
+ if (isset($block->parent)) {
+ $this->callBlock($block->parent, $tpl);
+ } else {
+ throw new Exception("inheritance: illegal '{\$smarty.block.parent}' used in child template '" .
+ "{$tpl->getInheritance()->sources[$block->tplIndex]->getResourceName()}' block '{$block->name}'");
+ }
+ }
+
+ /**
+ * render block
+ *
+ * @param \Smarty\Runtime\Block $block
+ * @param Template $tpl
+ */
+ public function callBlock(\Smarty\Runtime\Block $block, Template $tpl) {
+ $this->sourceStack[] = $tpl->getSource();
+ $tpl->setSource($this->sources[$block->tplIndex]);
+ $block->callBlock($tpl);
+ $tpl->setSource(array_pop($this->sourceStack));
+ }
+}
diff --git a/bundled-libs/smarty/smarty/src/Runtime/TplFunctionRuntime.php b/bundled-libs/smarty/smarty/src/Runtime/TplFunctionRuntime.php
new file mode 100644
index 000000000..6c4b93d73
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Runtime/TplFunctionRuntime.php
@@ -0,0 +1,144 @@
+tplFunctions[$name] ?? ($tpl->getSmarty()->tplFunctions[$name] ?? null);
+ if (!isset($funcParam)) {
+ throw new \Smarty\Exception("Unable to find template function '{$name}'");
+ }
+
+ if (!$tpl->caching || ($tpl->caching && $nocache)) {
+ $function = $funcParam['call_name'];
+ } else {
+ if (isset($funcParam['call_name_caching'])) {
+ $function = $funcParam['call_name_caching'];
+ } else {
+ $function = $funcParam['call_name'];
+ }
+ }
+ if (!function_exists($function) && !$this->addTplFuncToCache($tpl, $name, $function)) {
+ throw new \Smarty\Exception("Unable to find template function '{$name}'");
+ }
+
+ $tpl->pushStack();
+ $function($tpl, $params);
+ $tpl->popStack();
+ }
+
+ /**
+ * Register template functions defined by template
+ *
+ * @param \Smarty|\Smarty\Template|\Smarty\TemplateBase $obj
+ * @param array $tplFunctions source information array of
+ * template functions defined
+ * in template
+ * @param bool $override if true replace existing
+ * functions with same name
+ */
+ public function registerTplFunctions(TemplateBase $obj, $tplFunctions, $override = true) {
+ $obj->tplFunctions =
+ $override ? array_merge($obj->tplFunctions, $tplFunctions) : array_merge($tplFunctions, $obj->tplFunctions);
+ // make sure that the template functions are known in parent templates
+ if ($obj->_isSubTpl()) {
+ $this->registerTplFunctions($obj->parent, $tplFunctions, false);
+ } else {
+ $obj->getSmarty()->tplFunctions = $override ? array_merge($obj->getSmarty()->tplFunctions, $tplFunctions) :
+ array_merge($tplFunctions, $obj->getSmarty()->tplFunctions);
+ }
+ }
+
+ /**
+ * Return source parameter array for single or all template functions
+ *
+ * @param \Smarty\Template $tpl template object
+ * @param null|string $name template function name
+ *
+ * @return array|bool|mixed
+ */
+ public function getTplFunction(Template $tpl, $name = null) {
+ if (isset($name)) {
+ return $tpl->tplFunctions[$name] ?? ($tpl->getSmarty()->tplFunctions[$name] ?? false);
+ } else {
+ return empty($tpl->tplFunctions) ? $tpl->getSmarty()->tplFunctions : $tpl->tplFunctions;
+ }
+ }
+
+ /**
+ * Add template function to cache file for nocache calls
+ *
+ * @param Template $tpl
+ * @param string $_name template function name
+ * @param string $_function PHP function name
+ *
+ * @return bool
+ * @throws Exception
+ */
+ private function addTplFuncToCache(Template $tpl, $_name, $_function) {
+ $funcParam = $tpl->tplFunctions[$_name];
+ if (is_file($funcParam['compiled_filepath'])) {
+ // read compiled file
+ $code = file_get_contents($funcParam['compiled_filepath']);
+ // grab template function
+ if (preg_match("/\/\* {$_function} \*\/([\S\s]*?)\/\*\/ {$_function} \*\//", $code, $match)) {
+ // grab source info from file dependency
+ preg_match("/\s*'{$funcParam['uid']}'([\S\s]*?)\),/", $code, $match1);
+ unset($code);
+ // make PHP function known
+ eval($match[0]);
+ if (function_exists($_function)) {
+
+ // Some magic code existed here, testing if the cached property had been set
+ // and then bubbling up until it found a parent template that had the cached property.
+ // This is no longer possible, so somehow this might break.
+
+ // add template function code to cache file
+ $content = $tpl->getCached()->readCache($tpl);
+ if ($content) {
+ // check if we must update file dependency
+ if (!preg_match("/'{$funcParam['uid']}'(.*?)'nocache_hash'/", $content, $match2)) {
+ $content = preg_replace("/('file_dependency'(.*?)\()/", "\\1{$match1[0]}", $content);
+ }
+ $tpl->getCached()->writeCache(
+ $tpl,
+ preg_replace('/\s*\?>\s*$/', "\n", $content) .
+ "\n" . preg_replace(
+ [
+ '/^\s*<\?php\s+/',
+ '/\s*\?>\s*$/',
+ ],
+ "\n",
+ $match[0]
+ )
+ );
+ }
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/bundled-libs/smarty/smarty/src/Security.php b/bundled-libs/smarty/smarty/src/Security.php
new file mode 100644
index 000000000..250b3bca7
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Security.php
@@ -0,0 +1,560 @@
+ array('method_1', 'method_2'), // allowed methods listed
+ * 'class_2' => array(), // all methods of class allowed
+ * )
+ * If set to null none is allowed.
+ *
+ * @var array
+ */
+ public $trusted_static_methods = [];
+
+ /**
+ * This is an array of trusted static properties.
+ * If empty access to all static classes and properties is allowed.
+ * Format:
+ * array (
+ * 'class_1' => array('prop_1', 'prop_2'), // allowed properties listed
+ * 'class_2' => array(), // all properties of class allowed
+ * )
+ * If set to null none is allowed.
+ *
+ * @var array
+ */
+ public $trusted_static_properties = [];
+
+ /**
+ * This is an array of allowed tags.
+ * If empty no restriction by allowed_tags.
+ *
+ * @var array
+ */
+ public $allowed_tags = [];
+
+ /**
+ * This is an array of disabled tags.
+ * If empty no restriction by disabled_tags.
+ *
+ * @var array
+ */
+ public $disabled_tags = [];
+
+ /**
+ * This is an array of allowed modifier plugins.
+ * If empty no restriction by allowed_modifiers.
+ *
+ * @var array
+ */
+ public $allowed_modifiers = [];
+
+ /**
+ * This is an array of disabled modifier plugins.
+ * If empty no restriction by disabled_modifiers.
+ *
+ * @var array
+ */
+ public $disabled_modifiers = [];
+
+ /**
+ * This is an array of disabled special $smarty variables.
+ *
+ * @var array
+ */
+ public $disabled_special_smarty_vars = [];
+
+ /**
+ * This is an array of trusted streams.
+ * If empty all streams are allowed.
+ * To disable all streams set $streams = null.
+ *
+ * @var array
+ */
+ public $streams = ['file'];
+
+ /**
+ * + flag if constants can be accessed from template
+ *
+ * @var boolean
+ */
+ public $allow_constants = true;
+
+ /**
+ * + flag if super globals can be accessed from template
+ *
+ * @var boolean
+ */
+ public $allow_super_globals = true;
+
+ /**
+ * max template nesting level
+ *
+ * @var int
+ */
+ public $max_template_nesting = 0;
+
+ /**
+ * current template nesting level
+ *
+ * @var int
+ */
+ private $_current_template_nesting = 0;
+
+ /**
+ * Cache for $resource_dir lookup
+ *
+ * @var array
+ */
+ protected $_resource_dir = [];
+
+ /**
+ * Cache for $template_dir lookup
+ *
+ * @var array
+ */
+ protected $_template_dir = [];
+
+ /**
+ * Cache for $config_dir lookup
+ *
+ * @var array
+ */
+ protected $_config_dir = [];
+
+ /**
+ * Cache for $secure_dir lookup
+ *
+ * @var array
+ */
+ protected $_secure_dir = [];
+
+ /**
+ * @param Smarty $smarty
+ */
+ public function __construct(Smarty $smarty) {
+ $this->smarty = $smarty;
+ }
+
+ /**
+ * Check if static class is trusted.
+ *
+ * @param string $class_name
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if class is trusted
+ */
+ public function isTrustedStaticClass($class_name, $compiler) {
+ if (isset($this->static_classes)
+ && (empty($this->static_classes) || in_array($class_name, $this->static_classes))
+ ) {
+ return true;
+ }
+ $compiler->trigger_template_error("access to static class '{$class_name}' not allowed by security setting");
+ return false; // should not, but who knows what happens to the compiler in the future?
+ }
+
+ /**
+ * Check if static class method/property is trusted.
+ *
+ * @param string $class_name
+ * @param string $params
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if class method is trusted
+ */
+ public function isTrustedStaticClassAccess($class_name, $params, $compiler) {
+ if (!isset($params[2])) {
+ // fall back
+ return $this->isTrustedStaticClass($class_name, $compiler);
+ }
+ if ($params[2] === 'method') {
+ $allowed = $this->trusted_static_methods;
+ $name = substr($params[0], 0, strpos($params[0], '('));
+ } else {
+ $allowed = $this->trusted_static_properties;
+ // strip '$'
+ $name = substr($params[0], 1);
+ }
+ if (isset($allowed)) {
+ if (empty($allowed)) {
+ // fall back
+ return $this->isTrustedStaticClass($class_name, $compiler);
+ }
+ if (isset($allowed[$class_name])
+ && (empty($allowed[$class_name]) || in_array($name, $allowed[$class_name]))
+ ) {
+ return true;
+ }
+ }
+ $compiler->trigger_template_error("access to static class '{$class_name}' {$params[2]} '{$name}' not allowed by security setting");
+ return false; // should not, but who knows what happens to the compiler in the future?
+ }
+
+ /**
+ * Check if tag is trusted.
+ *
+ * @param string $tag_name
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if tag is trusted
+ */
+ public function isTrustedTag($tag_name, $compiler) {
+ $tag_name = strtolower($tag_name);
+
+ // check for internal always required tags
+ if (in_array($tag_name, ['assign', 'call'])) {
+ return true;
+ }
+ // check security settings
+ if (empty($this->allowed_tags)) {
+ if (empty($this->disabled_tags) || !in_array($tag_name, $this->disabled_tags)) {
+ return true;
+ } else {
+ $compiler->trigger_template_error("tag '{$tag_name}' disabled by security setting", null, true);
+ }
+ } elseif (in_array($tag_name, $this->allowed_tags) && !in_array($tag_name, $this->disabled_tags)) {
+ return true;
+ } else {
+ $compiler->trigger_template_error("tag '{$tag_name}' not allowed by security setting", null, true);
+ }
+ return false; // should not, but who knows what happens to the compiler in the future?
+ }
+
+ /**
+ * Check if special $smarty variable is trusted.
+ *
+ * @param string $var_name
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if tag is trusted
+ */
+ public function isTrustedSpecialSmartyVar($var_name, $compiler) {
+ if (!in_array($var_name, $this->disabled_special_smarty_vars)) {
+ return true;
+ } else {
+ $compiler->trigger_template_error(
+ "special variable '\$smarty.{$var_name}' not allowed by security setting",
+ null,
+ true
+ );
+ }
+ return false; // should not, but who knows what happens to the compiler in the future?
+ }
+
+ /**
+ * Check if modifier plugin is trusted.
+ *
+ * @param string $modifier_name
+ * @param object $compiler compiler object
+ *
+ * @return boolean true if tag is trusted
+ */
+ public function isTrustedModifier($modifier_name, $compiler) {
+ // check for internal always allowed modifier
+ if (in_array($modifier_name, ['default'])) {
+ return true;
+ }
+ // check security settings
+ if (empty($this->allowed_modifiers)) {
+ if (empty($this->disabled_modifiers) || !in_array($modifier_name, $this->disabled_modifiers)) {
+ return true;
+ } else {
+ $compiler->trigger_template_error(
+ "modifier '{$modifier_name}' disabled by security setting",
+ null,
+ true
+ );
+ }
+ } elseif (in_array($modifier_name, $this->allowed_modifiers)
+ && !in_array($modifier_name, $this->disabled_modifiers)
+ ) {
+ return true;
+ } else {
+ $compiler->trigger_template_error(
+ "modifier '{$modifier_name}' not allowed by security setting",
+ null,
+ true
+ );
+ }
+ return false; // should not, but who knows what happens to the compiler in the future?
+ }
+
+ /**
+ * Check if constants are enabled or trusted
+ *
+ * @param string $const constant name
+ * @param object $compiler compiler object
+ *
+ * @return bool
+ */
+ public function isTrustedConstant($const, $compiler) {
+ if (in_array($const, ['true', 'false', 'null'])) {
+ return true;
+ }
+ if (!empty($this->trusted_constants)) {
+ if (!in_array(strtolower($const), $this->trusted_constants)) {
+ $compiler->trigger_template_error("Security: access to constant '{$const}' not permitted");
+ return false;
+ }
+ return true;
+ }
+ if ($this->allow_constants) {
+ return true;
+ }
+ $compiler->trigger_template_error("Security: access to constants not permitted");
+ return false;
+ }
+
+ /**
+ * Check if stream is trusted.
+ *
+ * @param string $stream_name
+ *
+ * @return boolean true if stream is trusted
+ * @throws Exception if stream is not trusted
+ */
+ public function isTrustedStream($stream_name) {
+ if (isset($this->streams) && (empty($this->streams) || in_array($stream_name, $this->streams))) {
+ return true;
+ }
+ throw new Exception("stream '{$stream_name}' not allowed by security setting");
+ }
+
+ /**
+ * Check if directory of file resource is trusted.
+ *
+ * @param string $filepath
+ * @param null|bool $isConfig
+ *
+ * @return bool true if directory is trusted
+ * @throws \Smarty\Exception if directory is not trusted
+ */
+ public function isTrustedResourceDir($filepath, $isConfig = null) {
+ $_dir = $this->smarty->getTemplateDir();
+ if ($this->_template_dir !== $_dir) {
+ $this->_updateResourceDir($this->_template_dir, $_dir);
+ $this->_template_dir = $_dir;
+ }
+ $_dir = $this->smarty->getConfigDir();
+ if ($this->_config_dir !== $_dir) {
+ $this->_updateResourceDir($this->_config_dir, $_dir);
+ $this->_config_dir = $_dir;
+ }
+ if ($this->_secure_dir !== $this->secure_dir) {
+ $this->secure_dir = (array)$this->secure_dir;
+ foreach ($this->secure_dir as $k => $d) {
+ $this->secure_dir[$k] = $this->smarty->_realpath($d . DIRECTORY_SEPARATOR, true);
+ }
+ $this->_updateResourceDir($this->_secure_dir, $this->secure_dir);
+ $this->_secure_dir = $this->secure_dir;
+ }
+ $addPath = $this->_checkDir($filepath, $this->_resource_dir);
+ if ($addPath !== false) {
+ $this->_resource_dir = array_merge($this->_resource_dir, $addPath);
+ }
+ return true;
+ }
+
+ /**
+ * Check if URI (e.g. {fetch} or {html_image}) is trusted
+ * To simplify things, isTrustedUri() resolves all input to "{$PROTOCOL}://{$HOSTNAME}".
+ * So "http://username:password@hello.world.example.org:8080/some-path?some=query-string"
+ * is reduced to "http://hello.world.example.org" prior to applying the patters from {@link $trusted_uri}.
+ *
+ * @param string $uri
+ *
+ * @return boolean true if URI is trusted
+ * @throws Exception if URI is not trusted
+ * @uses $trusted_uri for list of patterns to match against $uri
+ */
+ public function isTrustedUri($uri) {
+ $_uri = parse_url($uri);
+ if (!empty($_uri['scheme']) && !empty($_uri['host'])) {
+ $_uri = $_uri['scheme'] . '://' . $_uri['host'];
+ foreach ($this->trusted_uri as $pattern) {
+ if (preg_match($pattern, $_uri)) {
+ return true;
+ }
+ }
+ }
+ throw new Exception("URI '{$uri}' not allowed by security setting");
+ }
+
+ /**
+ * Remove old directories and its sub folders, add new directories
+ *
+ * @param array $oldDir
+ * @param array $newDir
+ */
+ private function _updateResourceDir($oldDir, $newDir) {
+ foreach ($oldDir as $directory) {
+ // $directory = $this->smarty->_realpath($directory, true);
+ $length = strlen($directory);
+ foreach ($this->_resource_dir as $dir) {
+ if (substr($dir, 0, $length) === $directory) {
+ unset($this->_resource_dir[$dir]);
+ }
+ }
+ }
+ foreach ($newDir as $directory) {
+ // $directory = $this->smarty->_realpath($directory, true);
+ $this->_resource_dir[$directory] = true;
+ }
+ }
+
+ /**
+ * Check if file is inside a valid directory
+ *
+ * @param string $filepath
+ * @param array $dirs valid directories
+ *
+ * @return array|bool
+ * @throws \Smarty\Exception
+ */
+ private function _checkDir($filepath, $dirs) {
+ $directory = dirname($this->smarty->_realpath($filepath, true)) . DIRECTORY_SEPARATOR;
+ $_directory = [];
+ if (!preg_match('#[\\\\/][.][.][\\\\/]#', $directory)) {
+ while (true) {
+ // test if the directory is trusted
+ if (isset($dirs[$directory])) {
+ return $_directory;
+ }
+ // abort if we've reached root
+ if (!preg_match('#[\\\\/][^\\\\/]+[\\\\/]$#', $directory)) {
+ // give up
+ break;
+ }
+ // remember the directory to add it to _resource_dir in case we're successful
+ $_directory[$directory] = true;
+ // bubble up one level
+ $directory = preg_replace('#[\\\\/][^\\\\/]+[\\\\/]$#', DIRECTORY_SEPARATOR, $directory);
+ }
+ }
+ // give up
+ throw new Exception(sprintf('Smarty Security: not trusted file path \'%s\' ', $filepath));
+ }
+
+ /**
+ * Loads security class and enables security
+ *
+ * @param \Smarty $smarty
+ * @param string|Security $security_class if a string is used, it must be class-name
+ *
+ * @return \Smarty current Smarty instance for chaining
+ * @throws \Smarty\Exception when an invalid class name is provided
+ */
+ public static function enableSecurity(Smarty $smarty, $security_class) {
+ if ($security_class instanceof Security) {
+ $smarty->security_policy = $security_class;
+ return $smarty;
+ } elseif (is_object($security_class)) {
+ throw new Exception("Class '" . get_class($security_class) . "' must extend \\Smarty\\Security.");
+ }
+ if ($security_class === null) {
+ $security_class = $smarty->security_class;
+ }
+ if (!class_exists($security_class)) {
+ throw new Exception("Security class '$security_class' is not defined");
+ } elseif ($security_class !== Security::class && !is_subclass_of($security_class, Security::class)) {
+ throw new Exception("Class '$security_class' must extend " . Security::class . ".");
+ } else {
+ $smarty->security_policy = new $security_class($smarty);
+ }
+ return $smarty;
+ }
+
+ /**
+ * Start template processing
+ *
+ * @param $template
+ *
+ * @throws Exception
+ */
+ public function startTemplate($template) {
+ if ($this->max_template_nesting > 0 && $this->_current_template_nesting++ >= $this->max_template_nesting) {
+ throw new Exception("maximum template nesting level of '{$this->max_template_nesting}' exceeded when calling '{$template->template_resource}'");
+ }
+ }
+
+ /**
+ * Exit template processing
+ */
+ public function endTemplate() {
+ if ($this->max_template_nesting > 0) {
+ $this->_current_template_nesting--;
+ }
+ }
+
+ /**
+ * Register callback functions call at start/end of template rendering
+ *
+ * @param \Smarty\Template $template
+ */
+ public function registerCallBacks(Template $template) {
+ $template->startRenderCallbacks[] = [$this, 'startTemplate'];
+ $template->endRenderCallbacks[] = [$this, 'endTemplate'];
+ }
+}
diff --git a/bundled-libs/smarty/smarty/src/Smarty.php b/bundled-libs/smarty/smarty/src/Smarty.php
new file mode 100644
index 000000000..15baba8f3
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Smarty.php
@@ -0,0 +1,2239 @@
+
+ * @author Uwe Tews
+ * @author Rodney Rehm
+ * @author Simon Wisselink
+ */
+
+/**
+ * This is the main Smarty class
+ */
+class Smarty extends \Smarty\TemplateBase {
+
+ /**
+ * smarty version
+ */
+ const SMARTY_VERSION = '5.4.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 dates
+ */
+ const CLEAR_EXPIRED = -1;
+ /**
+ * define compile check modes
+ */
+ const COMPILECHECK_OFF = 0;
+ const COMPILECHECK_ON = 1;
+ /**
+ * 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';
+
+ /**
+ * The character set to adhere to (defaults to "UTF-8")
+ */
+ public static $_CHARSET = 'UTF-8';
+
+ /**
+ * The date format to be used internally
+ * (accepts date() and strftime())
+ */
+ public static $_DATE_FORMAT = '%b %e, %Y';
+
+ /**
+ * 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;
+
+ /**
+ * auto literal on delimiters with whitespace
+ *
+ * @var boolean
+ */
+ public $auto_literal = true;
+
+ /**
+ * display error on not assigned variables
+ *
+ * @var boolean
+ */
+ public $error_unassigned = false;
+
+ /**
+ * flag if template_dir is normalized
+ *
+ * @var bool
+ */
+ public $_templateDirNormalized = false;
+
+ /**
+ * joined template directory string used in cache keys
+ *
+ * @var string
+ */
+ public $_joined_template_dir = null;
+
+ /**
+ * flag if config_dir is normalized
+ *
+ * @var bool
+ */
+ public $_configDirNormalized = false;
+
+ /**
+ * 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
+ */
+ private $default_plugin_handler_func = null;
+
+ /**
+ * flag if template_dir is normalized
+ *
+ * @var bool
+ */
+ public $_compileDirNormalized = false;
+
+ /**
+ * flag if template_dir is normalized
+ *
+ * @var bool
+ */
+ public $_cacheDirNormalized = false;
+
+ /**
+ * force template compiling?
+ *
+ * @var boolean
+ */
+ public $force_compile = false;
+
+ /**
+ * use sub dirs for compiled/cached files?
+ *
+ * @var boolean
+ */
+ public $use_sub_dirs = false;
+
+ /**
+ * merge compiled includes
+ *
+ * @var boolean
+ */
+ public $merge_compiled_includes = false;
+
+ /**
+ * force cache file creation
+ *
+ * @var boolean
+ */
+ public $force_cache = false;
+
+ /**
+ * template left-delimiter
+ *
+ * @var string
+ */
+ private $left_delimiter = "{";
+
+ /**
+ * template right-delimiter
+ *
+ * @var string
+ */
+ private $right_delimiter = "}";
+
+ /**
+ * array of strings which shall be treated as literal by compiler
+ *
+ * @var array string
+ */
+ public $literals = [];
+
+ /**
+ * class name
+ * This should be instance of \Smarty\Security.
+ *
+ * @var string
+ * @see \Smarty\Security
+ */
+ public $security_class = \Smarty\Security::class;
+
+ /**
+ * implementation of security class
+ *
+ * @var \Smarty\Security
+ */
+ public $security_policy = null;
+
+ /**
+ * debug mode
+ * Setting this to true enables the debug-console. Setting it to 2 enables individual Debug Console window by
+ * template name.
+ *
+ * @var boolean|int
+ */
+ public $debugging = false;
+
+ /**
+ * This determines if debugging is enable-able from the browser.
+ *
+ * NONE => no debugging control allowed
+ * URL => enable debugging when SMARTY_DEBUG is found in the URL.
+ *
+ *
+ * @var string
+ */
+ public $debugging_ctrl = 'NONE';
+
+ /**
+ * Name of debugging URL-param.
+ * Only used when $debugging_ctrl is set to 'URL'.
+ * The name of the URL-parameter that activates debugging.
+ *
+ * @var string
+ */
+ public $smarty_debug_id = 'SMARTY_DEBUG';
+
+ /**
+ * Path of debug template.
+ *
+ * @var string
+ */
+ public $debug_tpl = null;
+
+ /**
+ * When set, smarty uses this value as error_reporting-level.
+ *
+ * @var int
+ */
+ public $error_reporting = null;
+
+ /**
+ * 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;
+
+ /**
+ * locking concurrent compiles
+ *
+ * @var boolean
+ */
+ public $compile_locking = true;
+
+ /**
+ * Controls whether cache resources should use locking mechanism
+ *
+ * @var boolean
+ */
+ public $cache_locking = false;
+
+ /**
+ * seconds to wait for acquiring a lock before ignoring the write lock
+ *
+ * @var float
+ */
+ public $locking_timeout = 10;
+
+ /**
+ * resource type used if none given
+ * Must be a valid key of $registered_resources.
+ *
+ * @var string
+ */
+ public $default_resource_type = 'file';
+
+ /**
+ * cache resource
+ * Must be a subclass of \Smarty\Cacheresource\Base
+ *
+ * @var \Smarty\Cacheresource\Base
+ */
+ private $cacheResource;
+
+ /**
+ * config type
+ *
+ * @var string
+ */
+ public $default_config_type = 'file';
+
+ /**
+ * check If-Modified-Since headers
+ *
+ * @var boolean
+ */
+ public $cache_modified_check = false;
+
+ /**
+ * registered plugins
+ *
+ * @var array
+ */
+ public $registered_plugins = [];
+
+ /**
+ * registered objects
+ *
+ * @var array
+ */
+ public $registered_objects = [];
+
+ /**
+ * registered classes
+ *
+ * @var array
+ */
+ public $registered_classes = [];
+
+ /**
+ * registered resources
+ *
+ * @var array
+ */
+ public $registered_resources = [];
+
+ /**
+ * registered cache resources
+ *
+ * @var array
+ * @deprecated since 5.0
+ */
+ private $registered_cache_resources = [];
+
+ /**
+ * default modifier
+ *
+ * @var array
+ */
+ public $default_modifiers = [];
+
+ /**
+ * autoescape variable output
+ *
+ * @var boolean
+ */
+ public $escape_html = false;
+
+ /**
+ * start time for execution time calculation
+ *
+ * @var int
+ */
+ public $start_time = 0;
+
+ /**
+ * internal flag to enable parser debugging
+ *
+ * @var bool
+ */
+ public $_parserdebug = false;
+
+ /**
+ * Debug object
+ *
+ * @var \Smarty\Debug
+ */
+ public $_debug = null;
+
+ /**
+ * template directory
+ *
+ * @var array
+ */
+ protected $template_dir = ['./templates/'];
+
+ /**
+ * flags for normalized template directory entries
+ *
+ * @var array
+ */
+ protected $_processedTemplateDir = [];
+
+ /**
+ * config directory
+ *
+ * @var array
+ */
+ protected $config_dir = ['./configs/'];
+
+ /**
+ * flags for normalized template directory entries
+ *
+ * @var array
+ */
+ protected $_processedConfigDir = [];
+
+ /**
+ * compile directory
+ *
+ * @var string
+ */
+ protected $compile_dir = './templates_c/';
+
+ /**
+ * cache directory
+ *
+ * @var string
+ */
+ protected $cache_dir = './cache/';
+
+ /**
+ * PHP7 Compatibility mode
+ *
+ * @var bool
+ */
+ private $isMutingUndefinedOrNullWarnings = false;
+
+ /**
+ * Cache of loaded resource handlers.
+ *
+ * @var array
+ */
+ public $_resource_handlers = [];
+
+ /**
+ * Cache of loaded cacheresource handlers.
+ *
+ * @var array
+ */
+ public $_cacheresource_handlers = [];
+
+ /**
+ * List of extensions
+ *
+ * @var ExtensionInterface[]
+ */
+ private $extensions = [];
+ /**
+ * @var BCPluginsAdapter
+ */
+ private $BCPluginsAdapter;
+
+ /**
+ * Initialize new Smarty object
+ */
+ public function __construct() {
+
+ $this->start_time = microtime(true);
+ // Check if we're running on Windows
+ \Smarty\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\Smarty::$_CHARSET !== 'UTF-8') {
+ \Smarty\Smarty::$_UTF8_MODIFIER = '';
+ }
+
+ $this->BCPluginsAdapter = new BCPluginsAdapter($this);
+
+ $this->extensions[] = new CoreExtension();
+ $this->extensions[] = new DefaultExtension();
+ $this->extensions[] = $this->BCPluginsAdapter;
+
+ $this->cacheResource = new File();
+ }
+
+ /**
+ * Load an additional extension.
+ *
+ * @return void
+ */
+ public function addExtension(ExtensionInterface $extension) {
+ $this->extensions[] = $extension;
+ }
+
+ /**
+ * Returns all loaded extensions
+ *
+ * @return array|ExtensionInterface[]
+ */
+ public function getExtensions(): array {
+ return $this->extensions;
+ }
+
+ /**
+ * Replace the entire list extensions, allowing you to determine the exact order of the extensions.
+ *
+ * @param ExtensionInterface[] $extensions
+ *
+ * @return void
+ */
+ public function setExtensions(array $extensions): void {
+ $this->extensions = $extensions;
+ }
+
+ /**
+ * Check if a template resource exists
+ *
+ * @param string $resource_name template name
+ *
+ * @return bool status
+ * @throws \Smarty\Exception
+ */
+ public function templateExists($resource_name) {
+ // create source object
+ $source = Template\Source::load(null, $this, $resource_name);
+ return $source->exists;
+ }
+
+ /**
+ * Loads security class and enables security
+ *
+ * @param string|\Smarty\Security $security_class if a string is used, it must be class-name
+ *
+ * @return static current Smarty instance for chaining
+ * @throws \Smarty\Exception
+ */
+ public function enableSecurity($security_class = null) {
+ \Smarty\Security::enableSecurity($this, $security_class);
+ return $this;
+ }
+
+ /**
+ * Disable security
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function disableSecurity() {
+ $this->security_policy = null;
+ return $this;
+ }
+
+ /**
+ * Add template directory(s)
+ *
+ * @param string|array $template_dir directory(s) of template sources
+ * @param string $key of the array element to assign the template dir to
+ * @param bool $isConfig true for config_dir
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function addTemplateDir($template_dir, $key = null, $isConfig = false) {
+ if ($isConfig) {
+ $processed = &$this->_processedConfigDir;
+ $dir = &$this->config_dir;
+ $this->_configDirNormalized = false;
+ } else {
+ $processed = &$this->_processedTemplateDir;
+ $dir = &$this->template_dir;
+ $this->_templateDirNormalized = false;
+ }
+ if (is_array($template_dir)) {
+ foreach ($template_dir as $k => $v) {
+ if (is_int($k)) {
+ // indexes are not merged but appended
+ $dir[] = $v;
+ } else {
+ // string indexes are overridden
+ $dir[$k] = $v;
+ unset($processed[$key]);
+ }
+ }
+ } else {
+ if ($key !== null) {
+ // override directory at specified index
+ $dir[$key] = $template_dir;
+ unset($processed[$key]);
+ } else {
+ // append new directory
+ $dir[] = $template_dir;
+ }
+ }
+ return $this;
+ }
+
+ /**
+ * Get template directories
+ *
+ * @param mixed $index index of directory to get, null to get all
+ * @param bool $isConfig true for config_dir
+ *
+ * @return array|string list of template directories, or directory of $index
+ */
+ public function getTemplateDir($index = null, $isConfig = false) {
+ if ($isConfig) {
+ $dir = &$this->config_dir;
+ } else {
+ $dir = &$this->template_dir;
+ }
+ if ($isConfig ? !$this->_configDirNormalized : !$this->_templateDirNormalized) {
+ $this->_normalizeTemplateConfig($isConfig);
+ }
+ if ($index !== null) {
+ return isset($dir[$index]) ? $dir[$index] : null;
+ }
+ return $dir;
+ }
+
+ /**
+ * Set template directory
+ *
+ * @param string|array $template_dir directory(s) of template sources
+ * @param bool $isConfig true for config_dir
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function setTemplateDir($template_dir, $isConfig = false) {
+ if ($isConfig) {
+ $this->config_dir = [];
+ $this->_processedConfigDir = [];
+ } else {
+ $this->template_dir = [];
+ $this->_processedTemplateDir = [];
+ }
+ $this->addTemplateDir($template_dir, null, $isConfig);
+ return $this;
+ }
+
+ /**
+ * Adds a template directory before any existing directoires
+ *
+ * @param string $new_template_dir directory of template sources
+ * @param bool $is_config true for config_dir
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function prependTemplateDir($new_template_dir, $is_config = false) {
+ $current_template_dirs = $is_config ? $this->config_dir : $this->template_dir;
+ array_unshift($current_template_dirs, $new_template_dir);
+ $this->setTemplateDir($current_template_dirs, $is_config);
+ 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 static current Smarty instance for chaining
+ */
+ public function addConfigDir($config_dir, $key = null) {
+ return $this->addTemplateDir($config_dir, $key, true);
+ }
+
+ /**
+ * Get config directory
+ *
+ * @param mixed $index index of directory to get, null to get all
+ *
+ * @return array configuration directory
+ */
+ public function getConfigDir($index = null) {
+ return $this->getTemplateDir($index, true);
+ }
+
+ /**
+ * Set config directory
+ *
+ * @param $config_dir
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function setConfigDir($config_dir) {
+ return $this->setTemplateDir($config_dir, true);
+ }
+
+ /**
+ * Registers plugin to be used in templates
+ *
+ * @param string $type plugin type
+ * @param string $name name of template tag
+ * @param callable $callback PHP callback to register
+ * @param bool $cacheable if true (default) this function is cache able
+ *
+ * @return $this
+ * @throws \Smarty\Exception
+ *
+ * @api Smarty::registerPlugin()
+ */
+ public function registerPlugin($type, $name, $callback, $cacheable = true) {
+ if (isset($this->registered_plugins[$type][$name])) {
+ throw new Exception("Plugin tag '{$name}' already registered");
+ } elseif (!is_callable($callback) && !class_exists($callback)) {
+ throw new Exception("Plugin '{$name}' not callable");
+ } else {
+ $this->registered_plugins[$type][$name] = [$callback, (bool)$cacheable];
+ }
+ return $this;
+ }
+
+ /**
+ * Returns plugin previously registered using ::registerPlugin as a numerical array as follows or null if not found:
+ * [
+ * 0 => the callback
+ * 1 => (bool) $cacheable
+ * 2 => (array) $cache_attr
+ * ]
+ *
+ * @param string $type plugin type
+ * @param string $name name of template tag
+ *
+ * @return array|null
+ *
+ * @api Smarty::unregisterPlugin()
+ */
+ public function getRegisteredPlugin($type, $name): ?array {
+ if (isset($this->registered_plugins[$type][$name])) {
+ return $this->registered_plugins[$type][$name];
+ }
+ return null;
+ }
+
+ /**
+ * Unregisters plugin previously registered using ::registerPlugin
+ *
+ * @param string $type plugin type
+ * @param string $name name of template tag
+ *
+ * @return $this
+ *
+ * @api Smarty::unregisterPlugin()
+ */
+ public function unregisterPlugin($type, $name) {
+ if (isset($this->registered_plugins[$type][$name])) {
+ unset($this->registered_plugins[$type][$name]);
+ }
+ return $this;
+ }
+
+ /**
+ * Adds directory of plugin files
+ *
+ * @param null|array|string $plugins_dir
+ *
+ * @return static current Smarty instance for chaining
+ * @deprecated since 5.0
+ */
+ public function addPluginsDir($plugins_dir) {
+ trigger_error('Using Smarty::addPluginsDir() to load plugins is deprecated and will be ' .
+ 'removed in a future release. Use Smarty::addExtension() to add an extension or Smarty::registerPlugin to ' .
+ 'quickly register a plugin using a callback function.', E_USER_DEPRECATED);
+
+ foreach ((array)$plugins_dir as $v) {
+ $path = $this->_realpath(rtrim($v ?? '', '/\\') . DIRECTORY_SEPARATOR, true);
+ $this->BCPluginsAdapter->loadPluginsFromDir($path);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get plugin directories
+ *
+ * @return array list of plugin directories
+ * @deprecated since 5.0
+ */
+ public function getPluginsDir() {
+ trigger_error('Using Smarty::getPluginsDir() is deprecated and will be ' .
+ 'removed in a future release. It will always return an empty array.', E_USER_DEPRECATED);
+ return [];
+ }
+
+ /**
+ * Set plugins directory
+ *
+ * @param string|array $plugins_dir directory(s) of plugins
+ *
+ * @return static current Smarty instance for chaining
+ * @deprecated since 5.0
+ */
+ public function setPluginsDir($plugins_dir) {
+ trigger_error('Using Smarty::getPluginsDir() is deprecated and will be ' .
+ 'removed in a future release. For now, it will remove the DefaultExtension from the extensions list and ' .
+ 'proceed to call Smartyy::addPluginsDir..', E_USER_DEPRECATED);
+
+ $this->extensions = array_filter(
+ $this->extensions,
+ function ($extension) {
+ return !($extension instanceof DefaultExtension);
+ }
+ );
+
+ return $this->addPluginsDir($plugins_dir);
+ }
+
+ /**
+ * Registers a default plugin handler
+ *
+ * @param callable $callback class/method name
+ *
+ * @return $this
+ * @throws Exception if $callback is not callable
+ *
+ * @api Smarty::registerDefaultPluginHandler()
+ *
+ * @deprecated since 5.0
+ */
+ public function registerDefaultPluginHandler($callback) {
+
+ trigger_error('Using Smarty::registerDefaultPluginHandler() is deprecated and will be ' .
+ 'removed in a future release. Please rewrite your plugin handler as an extension.',
+ E_USER_DEPRECATED);
+
+ if (is_callable($callback)) {
+ $this->default_plugin_handler_func = $callback;
+ } else {
+ throw new Exception("Default plugin handler '$callback' not callable");
+ }
+ return $this;
+ }
+
+ /**
+ * Get compiled directory
+ *
+ * @return string path to compiled templates
+ */
+ public function getCompileDir() {
+ if (!$this->_compileDirNormalized) {
+ $this->_normalizeDir('compile_dir', $this->compile_dir);
+ $this->_compileDirNormalized = true;
+ }
+ return $this->compile_dir;
+ }
+
+ /**
+ *
+ * @param string $compile_dir directory to store compiled templates in
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function setCompileDir($compile_dir) {
+ $this->_normalizeDir('compile_dir', $compile_dir);
+ $this->_compileDirNormalized = true;
+ return $this;
+ }
+
+ /**
+ * Get cache directory
+ *
+ * @return string path of cache directory
+ */
+ public function getCacheDir() {
+ if (!$this->_cacheDirNormalized) {
+ $this->_normalizeDir('cache_dir', $this->cache_dir);
+ $this->_cacheDirNormalized = true;
+ }
+ return $this->cache_dir;
+ }
+
+ /**
+ * Set cache directory
+ *
+ * @param string $cache_dir directory to store cached templates in
+ *
+ * @return static current Smarty instance for chaining
+ */
+ public function setCacheDir($cache_dir) {
+ $this->_normalizeDir('cache_dir', $cache_dir);
+ $this->_cacheDirNormalized = true;
+ return $this;
+ }
+
+ private $templates = [];
+
+ /**
+ * Creates a template object
+ *
+ * @param string $template_name
+ * @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 null $parent next higher level of Smarty variables
+ *
+ * @return Template template object
+ * @throws Exception
+ */
+ public function createTemplate($template_name, $cache_id = null, $compile_id = null, $parent = null): Template {
+
+ $data = [];
+
+ // Shuffle params for backward compatibility: if 2nd param is an object, it's the parent
+ if (is_object($cache_id)) {
+ $parent = $cache_id;
+ $cache_id = null;
+ }
+
+ // Shuffle params for backward compatibility: if 2nd param is an array, it's data
+ if (is_array($cache_id)) {
+ $data = $cache_id;
+ $cache_id = null;
+ }
+
+ return $this->doCreateTemplate($template_name, $cache_id, $compile_id, $parent, null, null, false, $data);
+ }
+
+ /**
+ * Get unique template id
+ *
+ * @param string $resource_name
+ * @param null|mixed $cache_id
+ * @param null|mixed $compile_id
+ * @param null $caching
+ *
+ * @return string
+ */
+ private function generateUniqueTemplateId(
+ $resource_name,
+ $cache_id = null,
+ $compile_id = null,
+ $caching = null
+ ): string {
+ // defaults for optional params
+ $cache_id = $cache_id ?? $this->cache_id;
+ $compile_id = $compile_id ?? $this->compile_id;
+ $caching = (int)$caching ?? $this->caching;
+
+ // Add default resource type to resource name if it is missing
+ if (strpos($resource_name, ':') === false) {
+ $resource_name = "{$this->default_resource_type}:{$resource_name}";
+ }
+
+ $_templateId = $resource_name . '#' . $cache_id . '#' . $compile_id . '#' . $caching;
+
+ // hash very long IDs to prevent problems with filename length
+ // do not hash shorter IDs, so they remain recognizable
+ if (strlen($_templateId) > 150) {
+ $_templateId = sha1($_templateId);
+ }
+
+ return $_templateId;
+ }
+
+ /**
+ * Normalize path
+ * - remove /./ and /../
+ * - make it absolute if required
+ *
+ * @param string $path file path
+ * @param bool $realpath if true - convert to absolute
+ * false - convert to relative
+ * null - keep as it is but
+ * remove /./ /../
+ *
+ * @return string
+ */
+ public function _realpath($path, $realpath = null) {
+ $nds = ['/' => '\\', '\\' => '/'];
+ preg_match(
+ '%^(?(?:[[:alpha:]]:[\\\\/]|/|[\\\\]{2}[[:alpha:]]+|[[:print:]]{2,}:[/]{2}|[\\\\])?)(?(.*))$%u',
+ $path,
+ $parts
+ );
+ $path = $parts['path'];
+ if ($parts['root'] === '\\') {
+ $parts['root'] = substr(getcwd(), 0, 2) . $parts['root'];
+ } else {
+ if ($realpath !== null && !$parts['root']) {
+ $path = getcwd() . DIRECTORY_SEPARATOR . $path;
+ }
+ }
+ // normalize DIRECTORY_SEPARATOR
+ $path = str_replace($nds[DIRECTORY_SEPARATOR], DIRECTORY_SEPARATOR, $path);
+ $parts['root'] = str_replace($nds[DIRECTORY_SEPARATOR], DIRECTORY_SEPARATOR, $parts['root']);
+ do {
+ $path = preg_replace(
+ ['#[\\\\/]{2}#', '#[\\\\/][.][\\\\/]#', '#[\\\\/]([^\\\\/.]+)[\\\\/][.][.][\\\\/]#'],
+ DIRECTORY_SEPARATOR,
+ $path,
+ -1,
+ $count
+ );
+ } while ($count > 0);
+ return $realpath !== false ? $parts['root'] . $path : str_ireplace(getcwd(), '.', $parts['root'] . $path);
+ }
+
+ /**
+ * @param boolean $use_sub_dirs
+ */
+ public function setUseSubDirs($use_sub_dirs) {
+ $this->use_sub_dirs = $use_sub_dirs;
+ }
+
+ /**
+ * @param int $error_reporting
+ */
+ public function setErrorReporting($error_reporting) {
+ $this->error_reporting = $error_reporting;
+ }
+
+ /**
+ * @param boolean $escape_html
+ */
+ public function setEscapeHtml($escape_html) {
+ $this->escape_html = $escape_html;
+ }
+
+ /**
+ * Return auto_literal flag
+ *
+ * @return boolean
+ */
+ public function getAutoLiteral() {
+ return $this->auto_literal;
+ }
+
+ /**
+ * Set auto_literal flag
+ *
+ * @param boolean $auto_literal
+ */
+ public function setAutoLiteral($auto_literal = true) {
+ $this->auto_literal = $auto_literal;
+ }
+
+ /**
+ * @param boolean $force_compile
+ */
+ public function setForceCompile($force_compile) {
+ $this->force_compile = $force_compile;
+ }
+
+ /**
+ * @param boolean $merge_compiled_includes
+ */
+ public function setMergeCompiledIncludes($merge_compiled_includes) {
+ $this->merge_compiled_includes = $merge_compiled_includes;
+ }
+
+ /**
+ * Get left delimiter
+ *
+ * @return string
+ */
+ public function getLeftDelimiter() {
+ return $this->left_delimiter;
+ }
+
+ /**
+ * Set left delimiter
+ *
+ * @param string $left_delimiter
+ */
+ public function setLeftDelimiter($left_delimiter) {
+ $this->left_delimiter = $left_delimiter;
+ }
+
+ /**
+ * Get right delimiter
+ *
+ * @return string $right_delimiter
+ */
+ public function getRightDelimiter() {
+ return $this->right_delimiter;
+ }
+
+ /**
+ * Set right delimiter
+ *
+ * @param string
+ */
+ public function setRightDelimiter($right_delimiter) {
+ $this->right_delimiter = $right_delimiter;
+ }
+
+ /**
+ * @param boolean $debugging
+ */
+ public function setDebugging($debugging) {
+ $this->debugging = $debugging;
+ }
+
+ /**
+ * @param boolean $config_overwrite
+ */
+ public function setConfigOverwrite($config_overwrite) {
+ $this->config_overwrite = $config_overwrite;
+ }
+
+ /**
+ * @param boolean $config_booleanize
+ */
+ public function setConfigBooleanize($config_booleanize) {
+ $this->config_booleanize = $config_booleanize;
+ }
+
+ /**
+ * @param boolean $config_read_hidden
+ */
+ public function setConfigReadHidden($config_read_hidden) {
+ $this->config_read_hidden = $config_read_hidden;
+ }
+
+ /**
+ * @param boolean $compile_locking
+ */
+ public function setCompileLocking($compile_locking) {
+ $this->compile_locking = $compile_locking;
+ }
+
+ /**
+ * @param string $default_resource_type
+ */
+ public function setDefaultResourceType($default_resource_type) {
+ $this->default_resource_type = $default_resource_type;
+ }
+
+ /**
+ * Test install
+ *
+ * @param null $errors
+ */
+ public function testInstall(&$errors = null) {
+ \Smarty\TestInstall::testInstall($this, $errors);
+ }
+
+ /**
+ * Get Smarty object
+ *
+ * @return static
+ */
+ public function getSmarty() {
+ return $this;
+ }
+
+ /**
+ * Normalize and set directory string
+ *
+ * @param string $dirName cache_dir or compile_dir
+ * @param string $dir filepath of folder
+ */
+ private function _normalizeDir($dirName, $dir) {
+ $this->{$dirName} = $this->_realpath(rtrim($dir ?? '', "/\\") . DIRECTORY_SEPARATOR, true);
+ }
+
+ /**
+ * Normalize template_dir or config_dir
+ *
+ * @param bool $isConfig true for config_dir
+ */
+ private function _normalizeTemplateConfig($isConfig) {
+ if ($isConfig) {
+ $processed = &$this->_processedConfigDir;
+ $dir = &$this->config_dir;
+ } else {
+ $processed = &$this->_processedTemplateDir;
+ $dir = &$this->template_dir;
+ }
+ if (!is_array($dir)) {
+ $dir = (array)$dir;
+ }
+ foreach ($dir as $k => $v) {
+ if (!isset($processed[$k])) {
+ $dir[$k] = $this->_realpath(rtrim($v ?? '', "/\\") . DIRECTORY_SEPARATOR, true);
+ $processed[$k] = true;
+ }
+ }
+
+ if ($isConfig) {
+ $this->_configDirNormalized = true;
+ $this->_joined_config_dir = join('#', $this->config_dir);
+ } else {
+ $this->_templateDirNormalized = true;
+ $this->_joined_template_dir = join('#', $this->template_dir);
+ }
+
+ }
+
+ /**
+ * Mutes errors for "undefined index", "undefined array key" and "trying to read property of null".
+ *
+ * @void
+ */
+ public function muteUndefinedOrNullWarnings(): void {
+ $this->isMutingUndefinedOrNullWarnings = true;
+ }
+
+ /**
+ * Indicates if Smarty will mute errors for "undefined index", "undefined array key" and "trying to read property of null".
+ *
+ * @return bool
+ */
+ public function isMutingUndefinedOrNullWarnings(): bool {
+ return $this->isMutingUndefinedOrNullWarnings;
+ }
+
+ /**
+ * 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 int number of cache files deleted
+ * @throws \Smarty\Exception
+ *
+ * @api Smarty::clearCache()
+ */
+ public function clearCache(
+ $template_name,
+ $cache_id = null,
+ $compile_id = null,
+ $exp_time = null
+ ) {
+ return $this->getCacheResource()->clear($this, $template_name, $cache_id, $compile_id, $exp_time);
+ }
+
+ /**
+ * Empty cache folder
+ *
+ * @param integer $exp_time expiration time
+ * @param string $type resource type
+ *
+ * @return int number of cache files deleted
+ *
+ * @api Smarty::clearAllCache()
+ */
+ public function clearAllCache($exp_time = null) {
+ return $this->getCacheResource()->clearAll($this, $exp_time);
+ }
+
+ /**
+ * Delete compiled template file
+ *
+ * @param string $resource_name template name
+ * @param string $compile_id compile id
+ * @param integer $exp_time expiration time
+ *
+ * @return int number of template files deleted
+ * @throws \Smarty\Exception
+ *
+ * @api Smarty::clearCompiledTemplate()
+ */
+ public function clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) {
+ $_compile_dir = $this->getCompileDir();
+ if ($_compile_dir === '/') { //We should never want to delete this!
+ return 0;
+ }
+ $_compile_id = isset($compile_id) ? preg_replace('![^\w]+!', '_', $compile_id) : null;
+ $_dir_sep = $this->use_sub_dirs ? DIRECTORY_SEPARATOR : '^';
+ if (isset($resource_name)) {
+ $_save_stat = $this->caching;
+ $this->caching = \Smarty\Smarty::CACHING_OFF;
+ /* @var Template $tpl */
+ $tpl = $this->doCreateTemplate($resource_name);
+ $this->caching = $_save_stat;
+ if (!$tpl->getSource()->handler->recompiled && $tpl->getSource()->exists) {
+ $_resource_part_1 = basename(str_replace('^', DIRECTORY_SEPARATOR, $tpl->getCompiled()->filepath));
+ $_resource_part_1_length = strlen($_resource_part_1);
+ } else {
+ return 0;
+ }
+ $_resource_part_2 = str_replace('.php', '.cache.php', $_resource_part_1);
+ $_resource_part_2_length = strlen($_resource_part_2);
+ }
+ $_dir = $_compile_dir;
+ if ($this->use_sub_dirs && isset($_compile_id)) {
+ $_dir .= $_compile_id . $_dir_sep;
+ }
+ if (isset($_compile_id)) {
+ $_compile_id_part = $_compile_dir . $_compile_id . $_dir_sep;
+ $_compile_id_part_length = strlen($_compile_id_part);
+ }
+ $_count = 0;
+ try {
+ $_compileDirs = new RecursiveDirectoryIterator($_dir);
+ } catch (\UnexpectedValueException $e) {
+ // path not found / not a dir
+ return 0;
+ }
+ $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST);
+ foreach ($_compile as $_file) {
+ if (substr(basename($_file->getPathname()), 0, 1) === '.') {
+ continue;
+ }
+ $_filepath = (string)$_file;
+ if ($_file->isDir()) {
+ if (!$_compile->isDot()) {
+ // delete folder if empty
+ @rmdir($_file->getPathname());
+ }
+ } else {
+ // delete only php files
+ if (substr($_filepath, -4) !== '.php') {
+ continue;
+ }
+ $unlink = false;
+ if ((!isset($_compile_id) ||
+ (isset($_filepath[$_compile_id_part_length]) &&
+ $a = !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length)))
+ && (!isset($resource_name) || (isset($_filepath[$_resource_part_1_length])
+ && substr_compare(
+ $_filepath,
+ $_resource_part_1,
+ -$_resource_part_1_length,
+ $_resource_part_1_length
+ ) === 0) || (isset($_filepath[$_resource_part_2_length])
+ && substr_compare(
+ $_filepath,
+ $_resource_part_2,
+ -$_resource_part_2_length,
+ $_resource_part_2_length
+ ) === 0))
+ ) {
+ if (isset($exp_time)) {
+ if (is_file($_filepath) && time() - filemtime($_filepath) >= $exp_time) {
+ $unlink = true;
+ }
+ } else {
+ $unlink = true;
+ }
+ }
+ if ($unlink && is_file($_filepath) && @unlink($_filepath)) {
+ $_count++;
+ if (function_exists('opcache_invalidate')
+ && (!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api')) < 1)
+ ) {
+ opcache_invalidate($_filepath, true);
+ } elseif (function_exists('apc_delete_file')) {
+ apc_delete_file($_filepath);
+ }
+ }
+ }
+ }
+ return $_count;
+ }
+
+ /**
+ * 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
+ * @api Smarty::compileAllTemplates()
+ *
+ */
+ public function compileAllTemplates(
+ $extension = '.tpl',
+ $force_compile = false,
+ $time_limit = 0,
+ $max_errors = null
+ ) {
+ return $this->compileAll($extension, $force_compile, $time_limit, $max_errors);
+ }
+
+ /**
+ * 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 int number of template files recompiled
+ * @api Smarty::compileAllConfig()
+ *
+ */
+ public function compileAllConfig(
+ $extension = '.conf',
+ $force_compile = false,
+ $time_limit = 0,
+ $max_errors = null
+ ) {
+ return $this->compileAll($extension, $force_compile, $time_limit, $max_errors, true);
+ }
+
+ /**
+ * Compile all template or config files
+ *
+ * @param string $extension template file name extension
+ * @param bool $force_compile force all to recompile
+ * @param int $time_limit set maximum execution time
+ * @param int $max_errors set maximum allowed errors
+ * @param bool $isConfig flag true if called for config files
+ *
+ * @return int number of template files compiled
+ */
+ protected function compileAll(
+ $extension,
+ $force_compile,
+ $time_limit,
+ $max_errors,
+ $isConfig = false
+ ) {
+ // switch off time limit
+ if (function_exists('set_time_limit')) {
+ @set_time_limit($time_limit);
+ }
+ $_count = 0;
+ $_error_count = 0;
+ $sourceDir = $isConfig ? $this->getConfigDir() : $this->getTemplateDir();
+ // loop over array of source directories
+ foreach ($sourceDir as $_dir) {
+ $_dir_1 = new RecursiveDirectoryIterator(
+ $_dir,
+ defined('FilesystemIterator::FOLLOW_SYMLINKS') ?
+ FilesystemIterator::FOLLOW_SYMLINKS : 0
+ );
+ $_dir_2 = new RecursiveIteratorIterator($_dir_1);
+ foreach ($_dir_2 as $_fileinfo) {
+ $_file = $_fileinfo->getFilename();
+ if (substr(basename($_fileinfo->getPathname()), 0, 1) === '.' || strpos($_file, '.svn') !== false) {
+ continue;
+ }
+ if (substr_compare($_file, $extension, -strlen($extension)) !== 0) {
+ continue;
+ }
+ if ($_fileinfo->getPath() !== substr($_dir, 0, -1)) {
+ $_file = substr($_fileinfo->getPath(), strlen($_dir)) . DIRECTORY_SEPARATOR . $_file;
+ }
+ echo "\n", $_dir, '---', $_file;
+ flush();
+ $_start_time = microtime(true);
+ $_smarty = clone $this;
+ //
+ $_smarty->force_compile = $force_compile;
+ try {
+ $_tpl = $this->doCreateTemplate($_file);
+ $_tpl->caching = self::CACHING_OFF;
+ $_tpl->setSource(
+ $isConfig ? \Smarty\Template\Config::load($_tpl) : \Smarty\Template\Source::load($_tpl)
+ );
+ if ($_tpl->mustCompile()) {
+ $_tpl->compileTemplateSource();
+ $_count++;
+ echo ' compiled in ', microtime(true) - $_start_time, ' seconds';
+ flush();
+ } else {
+ echo ' is up to date';
+ flush();
+ }
+ } catch (\Exception $e) {
+ echo "\n ------>Error: ", $e->getMessage(), "\n";
+ $_error_count++;
+ }
+ // free memory
+ unset($_tpl);
+ if ($max_errors !== null && $_error_count === $max_errors) {
+ echo "\ntoo many errors\n";
+ exit(1);
+ }
+ }
+ }
+ echo "\n";
+ return $_count;
+ }
+
+ /**
+ * check client side cache
+ *
+ * @param \Smarty\Template\Cached $cached
+ * @param Template $_template
+ * @param string $content
+ *
+ * @throws \Exception
+ * @throws \Smarty\Exception
+ */
+ public function cacheModifiedCheck(Template\Cached $cached, Template $_template, $content) {
+ $_isCached = $_template->isCached() && !$_template->getCompiled()->getNocacheCode();
+ $_last_modified_date =
+ @substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 0, strpos($_SERVER['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3);
+ if ($_isCached && $cached->timestamp <= strtotime($_last_modified_date)) {
+ switch (PHP_SAPI) {
+ case 'cgi': // php-cgi < 5.3
+ case 'cgi-fcgi': // php-cgi >= 5.3
+ case 'fpm-fcgi': // php-fpm >= 5.3.3
+ header('Status: 304 Not Modified');
+ break;
+ case 'cli':
+ if (/* ^phpunit */
+ !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */
+ ) {
+ $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified';
+ }
+ break;
+ default:
+ if (/* ^phpunit */
+ !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */
+ ) {
+ $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified';
+ } else {
+ header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
+ }
+ break;
+ }
+ } else {
+ switch (PHP_SAPI) {
+ case 'cli':
+ if (/* ^phpunit */
+ !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */
+ ) {
+ $_SERVER['SMARTY_PHPUNIT_HEADERS'][] =
+ 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $cached->timestamp) . ' GMT';
+ }
+ break;
+ default:
+ header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $cached->timestamp) . ' GMT');
+ break;
+ }
+ echo $content;
+ }
+ }
+
+ public function getModifierCallback(string $modifierName) {
+ foreach ($this->getExtensions() as $extension) {
+ if ($callback = $extension->getModifierCallback($modifierName)) {
+ return [new CallbackWrapper($modifierName, $callback), 'handle'];
+ }
+ }
+ return null;
+ }
+
+ public function getFunctionHandler(string $functionName): ?\Smarty\FunctionHandler\FunctionHandlerInterface {
+ foreach ($this->getExtensions() as $extension) {
+ if ($handler = $extension->getFunctionHandler($functionName)) {
+ return $handler;
+ }
+ }
+ return null;
+ }
+
+ public function getBlockHandler(string $blockTagName): ?\Smarty\BlockHandler\BlockHandlerInterface {
+ foreach ($this->getExtensions() as $extension) {
+ if ($handler = $extension->getBlockHandler($blockTagName)) {
+ return $handler;
+ }
+ }
+ return null;
+ }
+
+ public function getModifierCompiler(string $modifier): ?\Smarty\Compile\Modifier\ModifierCompilerInterface {
+ foreach ($this->getExtensions() as $extension) {
+ if ($handler = $extension->getModifierCompiler($modifier)) {
+ return $handler;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Run pre-filters over template source
+ *
+ * @param string $source the content which shall be processed by the filters
+ * @param Template $template template object
+ *
+ * @return string the filtered source
+ */
+ public function runPreFilters($source, Template $template) {
+
+ foreach ($this->getExtensions() as $extension) {
+ /** @var \Smarty\Filter\FilterInterface $filter */
+ foreach ($extension->getPreFilters() as $filter) {
+ $source = $filter->filter($source, $template);
+ }
+ }
+
+ // return filtered output
+ return $source;
+ }
+
+ /**
+ * Run post-filters over template's compiled code
+ *
+ * @param string $code the content which shall be processed by the filters
+ * @param Template $template template object
+ *
+ * @return string the filtered code
+ */
+ public function runPostFilters($code, Template $template) {
+
+ foreach ($this->getExtensions() as $extension) {
+ /** @var \Smarty\Filter\FilterInterface $filter */
+ foreach ($extension->getPostFilters() as $filter) {
+ $code = $filter->filter($code, $template);
+ }
+ }
+
+ // return filtered output
+ return $code;
+ }
+
+ /**
+ * Run filters over template output
+ *
+ * @param string $content the content which shall be processed by the filters
+ * @param Template $template template object
+ *
+ * @return string the filtered (modified) output
+ */
+ public function runOutputFilters($content, Template $template) {
+
+ foreach ($this->getExtensions() as $extension) {
+ /** @var \Smarty\Filter\FilterInterface $filter */
+ foreach ($extension->getOutputFilters() as $filter) {
+ $content = $filter->filter($content, $template);
+ }
+ }
+
+ // return filtered output
+ return $content;
+ }
+
+ /**
+ * Writes file in a safe way to disk
+ *
+ * @param string $_filepath complete filepath
+ * @param string $_contents file content
+ *
+ * @return boolean true
+ * @throws Exception
+ */
+ public function writeFile($_filepath, $_contents) {
+ $_error_reporting = error_reporting();
+ error_reporting($_error_reporting & ~E_NOTICE & ~E_WARNING);
+ $_dirpath = dirname($_filepath);
+ // if subdirs, create dir structure
+ if ($_dirpath !== '.') {
+ $i = 0;
+ // loop if concurrency problem occurs
+ // see https://bugs.php.net/bug.php?id=35326
+ while (!is_dir($_dirpath)) {
+ if (@mkdir($_dirpath, 0777, true)) {
+ break;
+ }
+ clearstatcache();
+ if (++$i === 3) {
+ error_reporting($_error_reporting);
+ throw new Exception("unable to create directory {$_dirpath}");
+ }
+ sleep(1);
+ }
+ }
+ // write to tmp file, then move to overt file lock race condition
+ $_tmp_file = $_dirpath . DIRECTORY_SEPARATOR . str_replace(['.', ','], '_', uniqid('wrt', true));
+ if (!file_put_contents($_tmp_file, $_contents)) {
+ error_reporting($_error_reporting);
+ throw new Exception("unable to write file {$_tmp_file}");
+ }
+ /*
+ * Windows' rename() fails if the destination exists,
+ * Linux' rename() properly handles the overwrite.
+ * Simply unlink()ing a file might cause other processes
+ * currently reading that file to fail, but linux' rename()
+ * seems to be smart enough to handle that for us.
+ */
+ if (\Smarty\Smarty::$_IS_WINDOWS) {
+ // remove original file
+ if (is_file($_filepath)) {
+ @unlink($_filepath);
+ }
+ // rename tmp file
+ $success = @rename($_tmp_file, $_filepath);
+ } else {
+ // rename tmp file
+ $success = @rename($_tmp_file, $_filepath);
+ if (!$success) {
+ // remove original file
+ if (is_file($_filepath)) {
+ @unlink($_filepath);
+ }
+ // rename tmp file
+ $success = @rename($_tmp_file, $_filepath);
+ }
+ }
+ if (!$success) {
+ error_reporting($_error_reporting);
+ throw new Exception("unable to write file {$_filepath}");
+ }
+ // set file permissions
+ @chmod($_filepath, 0666 & ~umask());
+ error_reporting($_error_reporting);
+ return true;
+ }
+
+ private $runtimes = [];
+
+ /**
+ * Loads and returns a runtime extension or null if not found
+ *
+ * @param string $type
+ *
+ * @return object|null
+ */
+ public function getRuntime(string $type) {
+
+ if (isset($this->runtimes[$type])) {
+ return $this->runtimes[$type];
+ }
+
+ // Lazy load runtimes when/if needed
+ switch ($type) {
+ case 'Capture':
+ return $this->runtimes[$type] = new CaptureRuntime();
+ case 'Foreach':
+ return $this->runtimes[$type] = new ForeachRuntime();
+ case 'Inheritance':
+ return $this->runtimes[$type] = new InheritanceRuntime();
+ case 'TplFunction':
+ return $this->runtimes[$type] = new TplFunctionRuntime();
+ case 'DefaultPluginHandler':
+ return $this->runtimes[$type] = new DefaultPluginHandlerRuntime(
+ $this->getDefaultPluginHandlerFunc()
+ );
+ }
+
+ throw new \Smarty\Exception('Trying to load invalid runtime ' . $type);
+ }
+
+ /**
+ * Indicates if a runtime is available.
+ *
+ * @param string $type
+ *
+ * @return bool
+ */
+ public function hasRuntime(string $type): bool {
+ try {
+ $this->getRuntime($type);
+ return true;
+ } catch (\Smarty\Exception $e) {
+ return false;
+ }
+ }
+
+ /**
+ * @return callable|null
+ */
+ public function getDefaultPluginHandlerFunc(): ?callable {
+ return $this->default_plugin_handler_func;
+ }
+
+ /**
+ * load a filter of specified type and name
+ *
+ * @param string $type filter type
+ * @param string $name filter name
+ *
+ * @return bool
+ * @throws \Smarty\Exception
+ * @api Smarty::loadFilter()
+ *
+ * @deprecated since 5.0
+ */
+ public function loadFilter($type, $name) {
+
+ if ($type == \Smarty\Smarty::FILTER_VARIABLE) {
+ foreach ($this->getExtensions() as $extension) {
+ if ($extension->getModifierCallback($name)) {
+
+ trigger_error('Using Smarty::loadFilter() to load variable filters is deprecated and will ' .
+ 'be removed in a future release. Use Smarty::addDefaultModifiers() to add a modifier.',
+ E_USER_DEPRECATED);
+
+ $this->addDefaultModifiers([$name]);
+ return true;
+ }
+ }
+ }
+
+ trigger_error('Using Smarty::loadFilter() to load filters is deprecated and will be ' .
+ 'removed in a future release. Use Smarty::addExtension() to add an extension or Smarty::registerFilter to ' .
+ 'quickly register a filter using a callback function.', E_USER_DEPRECATED);
+
+ if ($type == \Smarty\Smarty::FILTER_OUTPUT && $name == 'trimwhitespace') {
+ $this->BCPluginsAdapter->addOutputFilter(new TrimWhitespace());
+ return true;
+ }
+
+ $_plugin = "smarty_{$type}filter_{$name}";
+ if (!is_callable($_plugin) && class_exists($_plugin, false)) {
+ $_plugin = [$_plugin, 'execute'];
+ }
+
+ if (is_callable($_plugin)) {
+ $this->registerFilter($type, $_plugin, $name);
+ return true;
+ }
+
+ throw new Exception("{$type}filter '{$name}' not found or callable");
+ }
+
+ /**
+ * load a filter of specified type and name
+ *
+ * @param string $type filter type
+ * @param string $name filter name
+ *
+ * @return static
+ * @throws \Smarty\Exception
+ * @api Smarty::unloadFilter()
+ *
+ *
+ * @deprecated since 5.0
+ */
+ public function unloadFilter($type, $name) {
+ trigger_error('Using Smarty::unloadFilter() to unload filters is deprecated and will be ' .
+ 'removed in a future release. Use Smarty::addExtension() to add an extension or Smarty::(un)registerFilter to ' .
+ 'quickly (un)register a filter using a callback function.', E_USER_DEPRECATED);
+
+ return $this->unregisterFilter($type, $name);
+ }
+
+ private $_caching_type = 'file';
+
+ /**
+ * @param $type
+ *
+ * @return void
+ * @deprecated since 5.0
+ */
+ public function setCachingType($type) {
+ trigger_error('Using Smarty::setCachingType() is deprecated and will be ' .
+ 'removed in a future release. Use Smarty::setCacheResource() instead.', E_USER_DEPRECATED);
+ $this->_caching_type = $type;
+ $this->activateBCCacheResource();
+ }
+
+ /**
+ * @return string
+ * @deprecated since 5.0
+ */
+ public function getCachingType(): string {
+ trigger_error('Using Smarty::getCachingType() is deprecated and will be ' .
+ 'removed in a future release.', E_USER_DEPRECATED);
+ return $this->_caching_type;
+ }
+
+ /**
+ * Registers a resource to fetch a template
+ *
+ * @param string $name name of resource type
+ * @param Base $resource_handler
+ *
+ * @return static
+ *
+ * @api Smarty::registerCacheResource()
+ *
+ * @deprecated since 5.0
+ */
+ public function registerCacheResource($name, \Smarty\Cacheresource\Base $resource_handler) {
+
+ trigger_error('Using Smarty::registerCacheResource() is deprecated and will be ' .
+ 'removed in a future release. Use Smarty::setCacheResource() instead.', E_USER_DEPRECATED);
+
+ $this->registered_cache_resources[$name] = $resource_handler;
+ $this->activateBCCacheResource();
+ return $this;
+ }
+
+ /**
+ * Unregisters a resource to fetch a template
+ *
+ * @param $name
+ *
+ * @return static
+ * @api Smarty::unregisterCacheResource()
+ *
+ * @deprecated since 5.0
+ *
+ */
+ public function unregisterCacheResource($name) {
+
+ trigger_error('Using Smarty::unregisterCacheResource() is deprecated and will be ' .
+ 'removed in a future release.', E_USER_DEPRECATED);
+
+ if (isset($this->registered_cache_resources[$name])) {
+ unset($this->registered_cache_resources[$name]);
+ }
+ return $this;
+ }
+
+ private function activateBCCacheResource() {
+ if ($this->_caching_type == 'file') {
+ $this->setCacheResource(new File());
+ }
+ if (isset($this->registered_cache_resources[$this->_caching_type])) {
+ $this->setCacheResource($this->registered_cache_resources[$this->_caching_type]);
+ }
+ }
+
+ /**
+ * Registers a filter function
+ *
+ * @param string $type filter type
+ * @param callable $callback
+ * @param string|null $name optional filter name
+ *
+ * @return static
+ * @throws \Smarty\Exception
+ *
+ * @api Smarty::registerFilter()
+ */
+ public function registerFilter($type, $callback, $name = null) {
+ $name = $name ?? $this->_getFilterName($callback);
+ if (!is_callable($callback)) {
+ throw new Exception("{$type}filter '{$name}' not callable");
+ }
+ switch ($type) {
+ case 'variable':
+ $this->registerPlugin(self::PLUGIN_MODIFIER, $name, $callback);
+ trigger_error('Using Smarty::registerFilter() to register variable filters is deprecated and ' .
+ 'will be removed in a future release. Use Smarty::addDefaultModifiers() to add a modifier.',
+ E_USER_DEPRECATED);
+
+ $this->addDefaultModifiers([$name]);
+ break;
+ case 'output':
+ $this->BCPluginsAdapter->addCallableAsOutputFilter($callback, $name);
+ break;
+ case 'pre':
+ $this->BCPluginsAdapter->addCallableAsPreFilter($callback, $name);
+ break;
+ case 'post':
+ $this->BCPluginsAdapter->addCallableAsPostFilter($callback, $name);
+ break;
+ default:
+ throw new Exception("Illegal filter type '{$type}'");
+ }
+
+ return $this;
+ }
+
+ /**
+ * Return internal filter name
+ *
+ * @param callback $callable
+ *
+ * @return string|null internal filter name or null if callable cannot be serialized
+ */
+ private function _getFilterName($callable) {
+ if (is_array($callable)) {
+ $_class_name = is_object($callable[0]) ? get_class($callable[0]) : $callable[0];
+ return $_class_name . '_' . $callable[1];
+ } elseif (is_string($callable)) {
+ return $callable;
+ }
+ return null;
+ }
+
+ /**
+ * Unregisters a filter function. Smarty cannot unregister closures/anonymous functions if
+ * no name was given in ::registerFilter.
+ *
+ * @param string $type filter type
+ * @param callback|string $name the name previously used in ::registerFilter
+ *
+ * @return static
+ * @throws \Smarty\Exception
+ * @api Smarty::unregisterFilter()
+ *
+ *
+ */
+ public function unregisterFilter($type, $name) {
+
+ if (!is_string($name)) {
+ $name = $this->_getFilterName($name);
+ }
+
+ if ($name) {
+ switch ($type) {
+ case 'output':
+ $this->BCPluginsAdapter->removeOutputFilter($name);
+ break;
+ case 'pre':
+ $this->BCPluginsAdapter->removePreFilter($name);
+ break;
+ case 'post':
+ $this->BCPluginsAdapter->removePostFilter($name);
+ break;
+ default:
+ throw new Exception("Illegal filter type '{$type}'");
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Add default modifiers
+ *
+ * @param array|string $modifiers modifier or list of modifiers
+ * to add
+ *
+ * @return static
+ * @api Smarty::addDefaultModifiers()
+ *
+ */
+ 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
+ * @api Smarty::getDefaultModifiers()
+ *
+ */
+ public function getDefaultModifiers() {
+ return $this->default_modifiers;
+ }
+
+ /**
+ * Set default modifiers
+ *
+ * @param array|string $modifiers modifier or list of modifiers
+ * to set
+ *
+ * @return static
+ * @api Smarty::setDefaultModifiers()
+ *
+ */
+ public function setDefaultModifiers($modifiers) {
+ $this->default_modifiers = (array)$modifiers;
+ return $this;
+ }
+
+ /**
+ * @return Cacheresource\Base
+ */
+ public function getCacheResource(): Cacheresource\Base {
+ return $this->cacheResource;
+ }
+
+ /**
+ * @param Cacheresource\Base $cacheResource
+ */
+ public function setCacheResource(Cacheresource\Base $cacheResource): void {
+ $this->cacheResource = $cacheResource;
+ }
+
+ /**
+ * fetches a rendered Smarty template
+ *
+ * @param string $template the resource handle of the template file or template object
+ * @param mixed $cache_id cache id to be used with this template
+ * @param mixed $compile_id compile id to be used with this template
+ *
+ * @return string rendered template output
+ * @throws Exception
+ * @throws Exception
+ */
+ public function fetch($template = null, $cache_id = null, $compile_id = null) {
+ return $this->returnOrCreateTemplate($template, $cache_id, $compile_id)->fetch();
+ }
+
+ /**
+ * displays a Smarty template
+ *
+ * @param string $template the resource handle of the template file or template object
+ * @param mixed $cache_id cache id to be used with this template
+ * @param mixed $compile_id compile id to be used with this template
+ *
+ * @throws \Exception
+ * @throws \Smarty\Exception
+ */
+ public function display($template = null, $cache_id = null, $compile_id = null) {
+ $this->returnOrCreateTemplate($template, $cache_id, $compile_id)->display();
+ }
+
+ /**
+ * @param $resource_name
+ * @param $cache_id
+ * @param $compile_id
+ * @param $parent
+ * @param $caching
+ * @param $cache_lifetime
+ * @param bool $isConfig
+ * @param array $data
+ *
+ * @return Template
+ * @throws Exception
+ */
+ public function doCreateTemplate(
+ $resource_name,
+ $cache_id = null,
+ $compile_id = null,
+ $parent = null,
+ $caching = null,
+ $cache_lifetime = null,
+ bool $isConfig = false,
+ array $data = []): Template {
+
+ if (!$this->_templateDirNormalized) {
+ $this->_normalizeTemplateConfig(false);
+ }
+
+ $_templateId = $this->generateUniqueTemplateId($resource_name, $cache_id, $compile_id, $caching);
+
+ if (!isset($this->templates[$_templateId])) {
+ $newTemplate = new Template($resource_name, $this, $parent ?: $this, $cache_id, $compile_id, $caching, $isConfig);
+ $newTemplate->templateId = $_templateId; // @TODO this could go in constructor ^?
+ $this->templates[$_templateId] = $newTemplate;
+ }
+
+ $tpl = clone $this->templates[$_templateId];
+
+ $tpl->setParent($parent ?: $this);
+
+ if ($cache_lifetime) {
+ $tpl->setCacheLifetime($cache_lifetime);
+ }
+
+ // fill data if present
+ foreach ($data as $_key => $_val) {
+ $tpl->assign($_key, $_val);
+ }
+
+ $tpl->tplFunctions = array_merge($parent->tplFunctions ?? [], $tpl->tplFunctions ?? []);
+
+ if (!$this->debugging && $this->debugging_ctrl === 'URL') {
+ $tpl->getSmarty()->getDebug()->debugUrl($tpl->getSmarty());
+ }
+ return $tpl;
+ }
+
+ /**
+ * test if cache is valid
+ *
+ * @param null|string|Template $template the resource handle of the template file or template
+ * object
+ * @param mixed $cache_id cache id to be used with this template
+ * @param mixed $compile_id compile id to be used with this template
+ *
+ * @return bool cache status
+ * @throws \Exception
+ * @throws \Smarty\Exception
+ *
+ * @api Smarty::isCached()
+ */
+ public function isCached($template = null, $cache_id = null, $compile_id = null) {
+ return $this->returnOrCreateTemplate($template, $cache_id, $compile_id)->isCached();
+ }
+
+ /**
+ * @param $template
+ * @param $cache_id
+ * @param $compile_id
+ * @param $parent
+ *
+ * @return Template
+ * @throws Exception
+ */
+ private function returnOrCreateTemplate($template, $cache_id = null, $compile_id = null) {
+ if (!($template instanceof Template)) {
+ $template = $this->createTemplate($template, $cache_id, $compile_id, $this);
+ $template->caching = $this->caching;
+ }
+ return $template;
+ }
+
+ /**
+ * Sets if Smarty should check If-Modified-Since headers to determine cache validity.
+ * @param bool $cache_modified_check
+ * @return void
+ */
+ public function setCacheModifiedCheck($cache_modified_check): void {
+ $this->cache_modified_check = (bool) $cache_modified_check;
+ }
+
+}
+
diff --git a/bundled-libs/smarty/smarty/src/Template.php b/bundled-libs/smarty/smarty/src/Template.php
new file mode 100644
index 000000000..242fb2388
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Template.php
@@ -0,0 +1,732 @@
+getSmarty()-getLeftDelimiter().
+ *
+ * @var string
+ */
+ private $left_delimiter = null;
+
+ /**
+ * Template right-delimiter. If null, defaults to $this->getSmarty()-getRightDelimiter().
+ *
+ * @var string
+ */
+ private $right_delimiter = null;
+
+ /**
+ * @var InheritanceRuntime|null
+ */
+ private $inheritance;
+
+ /**
+ * Create template data object
+ * Some of the global Smarty settings copied to template scope
+ * It load the required template resources and caching plugins
+ *
+ * @param string $template_resource template resource string
+ * @param Smarty $smarty Smarty instance
+ * @param \Smarty\Data|null $_parent back pointer to parent object with variables or null
+ * @param mixed $_cache_id cache id or null
+ * @param mixed $_compile_id compile id or null
+ * @param bool|int|null $_caching use caching?
+ * @param bool $_isConfig
+ *
+ * @throws \Smarty\Exception
+ */
+ public function __construct(
+ $template_resource,
+ Smarty $smarty,
+ ?\Smarty\Data $_parent = null,
+ $_cache_id = null,
+ $_compile_id = null,
+ $_caching = null,
+ $_isConfig = false
+ ) {
+ $this->smarty = $smarty;
+ // Smarty parameter
+ $this->cache_id = $_cache_id === null ? $this->smarty->cache_id : $_cache_id;
+ $this->compile_id = $_compile_id === null ? $this->smarty->compile_id : $_compile_id;
+ $this->caching = (int)($_caching === null ? $this->smarty->caching : $_caching);
+ $this->cache_lifetime = $this->smarty->cache_lifetime;
+ $this->compile_check = (int)$smarty->compile_check;
+ $this->parent = $_parent;
+ // Template resource
+ $this->template_resource = $template_resource;
+
+ $this->source = $_isConfig ? Config::load($this) : Source::load($this);
+ $this->compiled = Compiled::load($this);
+
+ if ($smarty->security_policy) {
+ $smarty->security_policy->registerCallBacks($this);
+ }
+ }
+
+ /**
+ * render template
+ *
+ * @param bool $no_output_filter if true do not run output filter
+ * @param null|bool $display true: display, false: fetch null: sub-template
+ *
+ * @return string
+ * @throws \Exception
+ * @throws \Smarty\Exception
+ */
+ private function render($no_output_filter = true, $display = null) {
+ if ($this->smarty->debugging) {
+ $this->smarty->getDebug()->start_template($this, $display);
+ }
+ // checks if template exists
+ if ($this->compile_check && !$this->getSource()->exists) {
+ throw new Exception(
+ "Unable to load '{$this->getSource()->type}:{$this->getSource()->name}'" .
+ ($this->_isSubTpl() ? " in '{$this->parent->template_resource}'" : '')
+ );
+ }
+
+ // disable caching for evaluated code
+ if ($this->getSource()->handler->recompiled) {
+ $this->caching = \Smarty\Smarty::CACHING_OFF;
+ }
+
+ foreach ($this->startRenderCallbacks as $callback) {
+ call_user_func($callback, $this);
+ }
+
+ try {
+
+ // read from cache or render
+ if ($this->caching === \Smarty\Smarty::CACHING_LIFETIME_CURRENT || $this->caching === \Smarty\Smarty::CACHING_LIFETIME_SAVED) {
+ $this->getCached()->render($this, $no_output_filter);
+ } else {
+ $this->getCompiled()->render($this);
+ }
+
+ } finally {
+ foreach ($this->endRenderCallbacks as $callback) {
+ call_user_func($callback, $this);
+ }
+ }
+
+ // display or fetch
+ if ($display) {
+ if ($this->caching && $this->smarty->cache_modified_check) {
+ $this->smarty->cacheModifiedCheck(
+ $this->getCached(),
+ $this,
+ isset($content) ? $content : ob_get_clean()
+ );
+ } else {
+ if ((!$this->caching || $this->getCached()->getNocacheCode() || $this->getSource()->handler->recompiled)
+ && !$no_output_filter
+ ) {
+ echo $this->smarty->runOutputFilters(ob_get_clean(), $this);
+ } else {
+ echo ob_get_clean();
+ }
+ }
+ if ($this->smarty->debugging) {
+ $this->smarty->getDebug()->end_template($this);
+ // debug output
+ $this->smarty->getDebug()->display_debug($this, true);
+ }
+ return '';
+ } else {
+ if ($this->smarty->debugging) {
+ $this->smarty->getDebug()->end_template($this);
+ if ($this->smarty->debugging === 2 && $display === false) {
+ $this->smarty->getDebug()->display_debug($this, true);
+ }
+ }
+ if (
+ !$no_output_filter
+ && (!$this->caching || $this->getCached()->getNocacheCode() || $this->getSource()->handler->recompiled)
+ ) {
+
+ return $this->smarty->runOutputFilters(ob_get_clean(), $this);
+ }
+ // return cache content
+ return null;
+ }
+ }
+
+ /**
+ * Runtime function to render sub-template
+ *
+ * @param string $template_name template name
+ * @param mixed $cache_id cache id
+ * @param mixed $compile_id compile id
+ * @param integer $caching cache mode
+ * @param integer $cache_lifetime lifetime of cache data
+ * @param array $extra_vars passed parameter template variables
+ * @param int|null $scope
+ *
+ * @throws Exception
+ */
+ public function renderSubTemplate(
+ $template_name,
+ $cache_id,
+ $compile_id,
+ $caching,
+ $cache_lifetime,
+ array $extra_vars = [],
+ ?int $scope = null,
+ ?string $currentDir = null
+ ) {
+
+ $name = $this->parseResourceName($template_name);
+ if ($currentDir && preg_match('/^\.{1,2}\//', $name)) {
+ // relative template resource name, append it to current template name
+ $template_name = $currentDir . DIRECTORY_SEPARATOR . $name;
+ }
+
+ $tpl = $this->smarty->doCreateTemplate($template_name, $cache_id, $compile_id, $this, $caching, $cache_lifetime);
+
+ $tpl->inheritance = $this->getInheritance(); // re-use the same Inheritance object inside the inheritance tree
+
+ if ($scope) {
+ $tpl->defaultScope = $scope;
+ }
+
+ if ($caching) {
+ if ($tpl->templateId !== $this->templateId && $caching !== \Smarty\Template::CACHING_NOCACHE_CODE) {
+ $tpl->getCached(true);
+ } else {
+ // re-use the same Cache object across subtemplates to gather hashes and file dependencies.
+ $tpl->setCached($this->getCached());
+ }
+ }
+
+ foreach ($extra_vars as $_key => $_val) {
+ $tpl->assign($_key, $_val);
+ }
+ if ($tpl->caching === \Smarty\Template::CACHING_NOCACHE_CODE) {
+ if ($tpl->getCompiled()->getNocacheCode()) {
+ $this->getCached()->hashes[$tpl->getCompiled()->nocache_hash] = true;
+ }
+ }
+
+ $tpl->render();
+ }
+
+ /**
+ * Remove type indicator from resource name if present.
+ * E.g. $this->parseResourceName('file:template.tpl') returns 'template.tpl'
+ *
+ * @note "C:/foo.tpl" was forced to file resource up till Smarty 3.1.3 (including).
+ *
+ * @param string $resource_name template_resource or config_resource to parse
+ *
+ * @return string
+ */
+ private function parseResourceName($resource_name): string {
+ if (preg_match('/^([A-Za-z0-9_\-]{2,}):/', $resource_name, $match)) {
+ return substr($resource_name, strlen($match[0]));
+ }
+ return $resource_name;
+ }
+
+ /**
+ * Check if this is a sub template
+ *
+ * @return bool true is sub template
+ */
+ public function _isSubTpl() {
+ return isset($this->parent) && $this->parent instanceof Template;
+ }
+
+ public function assign($tpl_var, $value = null, $nocache = false, $scope = null) {
+ return parent::assign($tpl_var, $value, $nocache, $scope);
+ }
+
+ /**
+ * Compiles the template
+ * If the template is not evaluated the compiled template is saved on disk
+ *
+ * @TODO only used in compileAll and 1 unit test: can we move this and make compileAndWrite private?
+ *
+ * @throws \Exception
+ */
+ public function compileTemplateSource() {
+ return $this->getCompiled()->compileAndWrite($this);
+ }
+
+ /**
+ * Return cached content
+ *
+ * @return null|string
+ * @throws Exception
+ */
+ public function getCachedContent() {
+ return $this->getCached()->getContent($this);
+ }
+
+ /**
+ * Writes the content to cache resource
+ *
+ * @param string $content
+ *
+ * @return bool
+ *
+ * @TODO this method is only used in unit tests that (mostly) try to test CacheResources.
+ */
+ public function writeCachedContent($content) {
+ if ($this->getSource()->handler->recompiled || !$this->caching
+ ) {
+ // don't write cache file
+ return false;
+ }
+ $codeframe = $this->createCodeFrame($content, '', true);
+ return $this->getCached()->writeCache($this, $codeframe);
+ }
+
+ /**
+ * Get unique template id
+ *
+ * @return string
+ */
+ public function getTemplateId() {
+ return $this->templateId;
+ }
+
+ /**
+ * runtime error not matching capture tags
+ *
+ * @throws \Smarty\Exception
+ */
+ public function capture_error() {
+ throw new Exception("Not matching {capture} open/close in '{$this->template_resource}'");
+ }
+
+ /**
+ * Return Compiled object
+ *
+ * @param bool $forceNew force new compiled object
+ */
+ public function getCompiled($forceNew = false) {
+ if ($forceNew || !isset($this->compiled)) {
+ $this->compiled = Compiled::load($this);
+ }
+ return $this->compiled;
+ }
+
+ /**
+ * Return Cached object
+ *
+ * @param bool $forceNew force new cached object
+ *
+ * @throws Exception
+ */
+ public function getCached($forceNew = false): Cached {
+ if ($forceNew || !isset($this->cached)) {
+ $cacheResource = $this->smarty->getCacheResource();
+ $this->cached = new Cached(
+ $this->source,
+ $cacheResource,
+ $this->compile_id,
+ $this->cache_id
+ );
+ if ($this->isCachingEnabled()) {
+ $cacheResource->populate($this->cached, $this);
+ } else {
+ $this->cached->setValid(false);
+ }
+ }
+ return $this->cached;
+ }
+
+ private function isCachingEnabled(): bool {
+ return $this->caching && !$this->getSource()->handler->recompiled;
+ }
+
+ /**
+ * Helper function for InheritanceRuntime object
+ *
+ * @return InheritanceRuntime
+ * @throws Exception
+ */
+ public function getInheritance(): InheritanceRuntime {
+ if (is_null($this->inheritance)) {
+ $this->inheritance = clone $this->getSmarty()->getRuntime('Inheritance');
+ }
+ return $this->inheritance;
+ }
+
+ /**
+ * Sets a new InheritanceRuntime object.
+ *
+ * @param InheritanceRuntime $inheritanceRuntime
+ *
+ * @return void
+ */
+ public function setInheritance(InheritanceRuntime $inheritanceRuntime) {
+ $this->inheritance = $inheritanceRuntime;
+ }
+
+ /**
+ * Return Compiler object
+ */
+ public function getCompiler() {
+ if (!isset($this->compiler)) {
+ $this->compiler = $this->getSource()->createCompiler();
+ }
+ return $this->compiler;
+ }
+
+ /**
+ * Create code frame for compiled and cached templates
+ *
+ * @param string $content optional template content
+ * @param string $functions compiled template function and block code
+ * @param bool $cache flag for cache file
+ * @param Compiler\Template|null $compiler
+ *
+ * @return string
+ * @throws Exception
+ */
+ public function createCodeFrame($content = '', $functions = '', $cache = false, ?\Smarty\Compiler\Template $compiler = null) {
+ return $this->getCodeFrameCompiler()->create($content, $functions, $cache, $compiler);
+ }
+
+ /**
+ * Template data object destructor
+ */
+ public function __destruct() {
+ if ($this->smarty->cache_locking && $this->getCached()->is_locked) {
+ $this->getCached()->handler->releaseLock($this->smarty, $this->getCached());
+ }
+ }
+
+ /**
+ * Returns if the current template must be compiled by the Smarty compiler
+ * It does compare the timestamps of template source and the compiled templates and checks the force compile
+ * configuration
+ *
+ * @return bool
+ * @throws \Smarty\Exception
+ */
+ public function mustCompile(): bool {
+ if (!$this->getSource()->exists) {
+ if ($this->_isSubTpl()) {
+ $parent_resource = " in '{$this->parent->template_resource}'";
+ } else {
+ $parent_resource = '';
+ }
+ throw new Exception("Unable to load {$this->getSource()->type} '{$this->getSource()->name}'{$parent_resource}");
+ }
+
+ // @TODO move this logic to Compiled
+ return $this->smarty->force_compile
+ || $this->getSource()->handler->recompiled
+ || !$this->getCompiled()->exists
+ || ($this->compile_check && $this->getCompiled()->getTimeStamp() < $this->getSource()->getTimeStamp());
+ }
+
+ private function getCodeFrameCompiler(): Compiler\CodeFrame {
+ return new \Smarty\Compiler\CodeFrame($this);
+ }
+
+ /**
+ * Get left delimiter
+ *
+ * @return string
+ */
+ public function getLeftDelimiter()
+ {
+ return $this->left_delimiter ?? $this->getSmarty()->getLeftDelimiter();
+ }
+
+ /**
+ * Set left delimiter
+ *
+ * @param string $left_delimiter
+ */
+ public function setLeftDelimiter($left_delimiter)
+ {
+ $this->left_delimiter = $left_delimiter;
+ }
+
+ /**
+ * Get right delimiter
+ *
+ * @return string $right_delimiter
+ */
+ public function getRightDelimiter()
+ {
+ return $this->right_delimiter ?? $this->getSmarty()->getRightDelimiter();;
+ }
+
+ /**
+ * Set right delimiter
+ *
+ * @param string
+ */
+ public function setRightDelimiter($right_delimiter)
+ {
+ $this->right_delimiter = $right_delimiter;
+ }
+
+ /**
+ * gets a stream variable
+ *
+ * @param string $variable the stream of the variable
+ *
+ * @return mixed
+ * @throws \Smarty\Exception
+ *
+ */
+ public function getStreamVariable($variable)
+ {
+
+ trigger_error("Using stream variables (\`\{\$foo:bar\}\`)is deprecated.", E_USER_DEPRECATED);
+
+ $_result = '';
+ $fp = fopen($variable, 'r+');
+ if ($fp) {
+ while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
+ $_result .= $current_line;
+ }
+ fclose($fp);
+ return $_result;
+ }
+ if ($this->getSmarty()->error_unassigned) {
+ throw new Exception('Undefined stream variable "' . $variable . '"');
+ }
+ return null;
+ }
+ /**
+ * @inheritdoc
+ */
+ public function configLoad($config_file, $sections = null)
+ {
+ $confObj = parent::configLoad($config_file, $sections);
+
+ $this->getCompiled()->file_dependency[ $confObj->getSource()->uid ] =
+ array($confObj->getSource()->getResourceName(), $confObj->getSource()->getTimeStamp(), $confObj->getSource()->type);
+
+ return $confObj;
+ }
+
+ public function fetch() {
+ $result = $this->_execute(0);
+ return $result === null ? ob_get_clean() : $result;
+ }
+
+ public function display() {
+ $this->_execute(1);
+ }
+
+ /**
+ * test if cache is valid
+ *
+ * @param mixed $cache_id cache id to be used with this template
+ * @param mixed $compile_id compile id to be used with this template
+ * @param object $parent next higher level of Smarty variables
+ *
+ * @return bool cache status
+ * @throws \Exception
+ * @throws \Smarty\Exception
+ *
+ * @api Smarty::isCached()
+ */
+ public function isCached(): bool {
+ return (bool) $this->_execute(2);
+ }
+
+ /**
+ * fetches a rendered Smarty template
+ *
+ * @param string $function function type 0 = fetch, 1 = display, 2 = isCache
+ *
+ * @return mixed
+ * @throws Exception
+ * @throws \Throwable
+ */
+ private function _execute($function) {
+
+ $smarty = $this->getSmarty();
+
+ // make sure we have integer values
+ $this->caching = (int)$this->caching;
+ // fetch template content
+ $level = ob_get_level();
+ try {
+ $_smarty_old_error_level =
+ isset($smarty->error_reporting) ? error_reporting($smarty->error_reporting) : null;
+
+ if ($smarty->isMutingUndefinedOrNullWarnings()) {
+ $errorHandler = new \Smarty\ErrorHandler();
+ $errorHandler->activate();
+ }
+
+ if ($function === 2) {
+ if ($this->caching) {
+ // return cache status of template
+ $result = $this->getCached()->isCached($this);
+ } else {
+ return false;
+ }
+ } else {
+
+ // After rendering a template, the tpl/config variables are reset, so the template can be re-used.
+ $this->pushStack();
+
+ // Start output-buffering.
+ ob_start();
+
+ $result = $this->render(false, $function);
+
+ // Restore the template to its previous state
+ $this->popStack();
+ }
+
+ if (isset($errorHandler)) {
+ $errorHandler->deactivate();
+ }
+
+ if (isset($_smarty_old_error_level)) {
+ error_reporting($_smarty_old_error_level);
+ }
+ return $result;
+ } catch (\Throwable $e) {
+ while (ob_get_level() > $level) {
+ ob_end_clean();
+ }
+ if (isset($errorHandler)) {
+ $errorHandler->deactivate();
+ }
+
+ if (isset($_smarty_old_error_level)) {
+ error_reporting($_smarty_old_error_level);
+ }
+ throw $e;
+ }
+ }
+
+ /**
+ * @return Config|Source|null
+ */
+ public function getSource() {
+ return $this->source;
+ }
+
+ /**
+ * @param Config|Source|null $source
+ */
+ public function setSource($source): void {
+ $this->source = $source;
+ }
+
+ /**
+ * Sets the Cached object, so subtemplates can share one Cached object to gather meta-data.
+ *
+ * @param Cached $cached
+ *
+ * @return void
+ */
+ private function setCached(Cached $cached) {
+ $this->cached = $cached;
+ }
+
+ /**
+ * @param string $compile_id
+ *
+ * @throws Exception
+ */
+ public function setCompileId($compile_id) {
+ parent::setCompileId($compile_id);
+ $this->getCompiled(true);
+ if ($this->caching) {
+ $this->getCached(true);
+ }
+ }
+
+ /**
+ * @param string $cache_id
+ *
+ * @throws Exception
+ */
+ public function setCacheId($cache_id) {
+ parent::setCacheId($cache_id);
+ $this->getCached(true);
+ }
+
+}
diff --git a/bundled-libs/smarty/smarty/src/Template/Cached.php b/bundled-libs/smarty/smarty/src/Template/Cached.php
new file mode 100644
index 000000000..78635db06
--- /dev/null
+++ b/bundled-libs/smarty/smarty/src/Template/Cached.php
@@ -0,0 +1,428 @@
+valid = $valid;
+ }
+
+ /**
+ * CacheResource Handler
+ *
+ * @var \Smarty\Cacheresource\Base
+ */
+ public $handler = null;
+
+ /**
+ * Template Cache Id (\Smarty\Template::$cache_id)
+ *
+ * @var string
+ */
+ public $cache_id = null;
+
+ /**
+ * saved cache lifetime in seconds
+ *
+ * @var int
+ */
+ public $cache_lifetime = 0;
+
+ /**
+ * Id for cache locking
+ *
+ * @var string
+ */
+ public $lock_id = null;
+
+ /**
+ * flag that cache is locked by this instance
+ *
+ * @var bool
+ */
+ public $is_locked = false;
+
+ /**
+ * Source Object
+ *
+ * @var Source
+ */
+ public $source = null;
+
+ /**
+ * Nocache hash codes of processed compiled templates
+ *
+ * @var array
+ */
+ public $hashes = [];
+
+ /**
+ * Content buffer
+ *
+ * @var string
+ */
+ public $content = null;
+
+ /**
+ * create Cached Object container
+ *
+ * @param Source $source
+ * @param \Smarty\Cacheresource\Base $handler
+ * @param $compile_id
+ * @param $cache_id
+ */
+ public function __construct(Source $source, \Smarty\Cacheresource\Base $handler, $compile_id, $cache_id) {
+ $this->compile_id = $compile_id;
+ $this->cache_id = $cache_id;
+ $this->source = $source;
+ $this->handler = $handler;
+ }
+
+ /**
+ * Render cache template
+ *
+ * @param \Smarty\Template $_template
+ * @param bool $no_output_filter
+ *
+ * @throws \Exception
+ */
+ public function render(Template $_template, $no_output_filter = true) {
+
+ if (!$this->isCached($_template)) {
+ $this->updateCache($_template, $no_output_filter);
+ } else {
+ if (!$this->processed) {
+ $this->process($_template);
+ }
+ }
+
+ if ($_template->getSmarty()->debugging) {
+ $_template->getSmarty()->getDebug()->start_cache($_template);
+ }
+
+ $this->getRenderedTemplateCode($_template, $this->unifunc);
+
+ if ($_template->getSmarty()->debugging) {
+ $_template->getSmarty()->getDebug()->end_cache($_template);
+ }
+
+ }
+
+ /**
+ * Check if cache is valid, lock cache if required
+ *
+ * @param Template $_template
+ *
+ * @return bool flag true if cache is valid
+ * @throws Exception
+ */
+ public function isCached(Template $_template) {
+ if ($this->valid !== null) {
+ return $this->valid;
+ }
+ while (true) {
+ while (true) {
+ if ($this->exists === false || $_template->getSmarty()->force_compile || $_template->getSmarty()->force_cache) {
+ $this->valid = false;
+ } else {
+ $this->valid = true;
+ }
+ if ($this->valid && $_template->caching === \Smarty\Smarty::CACHING_LIFETIME_CURRENT
+ && $_template->cache_lifetime >= 0 && time() > ($this->timestamp + $_template->cache_lifetime)
+ ) {
+ // lifetime expired
+ $this->valid = false;
+ }
+ if ($this->valid && $_template->compile_check === \Smarty\Smarty::COMPILECHECK_ON
+ && $_template->getSource()->getTimeStamp() > $this->timestamp
+ ) {
+ $this->valid = false;
+ }
+ if ($this->valid || !$_template->getSmarty()->cache_locking) {
+ break;
+ }
+ if (!$this->handler->locked($_template->getSmarty(), $this)) {
+ $this->handler->acquireLock($_template->getSmarty(), $this);
+ break 2;
+ }
+ $this->handler->populate($this, $_template);
+ }
+ if ($this->valid) {
+ if (!$_template->getSmarty()->cache_locking || $this->handler->locked($_template->getSmarty(), $this) === null) {
+ // load cache file for the following checks
+ if ($_template->getSmarty()->debugging) {
+ $_template->getSmarty()->getDebug()->start_cache($_template);
+ }
+ if ($this->handler->process($_template, $this) === false) {
+ $this->valid = false;
+ } else {
+ $this->processed = true;
+ }
+ if ($_template->getSmarty()->debugging) {
+ $_template->getSmarty()->getDebug()->end_cache($_template);
+ }
+ } else {
+ $this->is_locked = true;
+ continue;
+ }
+ } else {
+ return $this->valid;
+ }
+ if ($this->valid && $_template->caching === \Smarty\Smarty::CACHING_LIFETIME_SAVED
+ && $_template->getCached()->cache_lifetime >= 0
+ && (time() > ($_template->getCached()->timestamp + $_template->getCached()->cache_lifetime))
+ ) {
+ $this->valid = false;
+ }
+ if ($_template->getSmarty()->cache_locking) {
+ if (!$this->valid) {
+ $this->handler->acquireLock($_template->getSmarty(), $this);
+ } elseif ($this->is_locked) {
+ $this->handler->releaseLock($_template->getSmarty(), $this);
+ }
+ }
+ return $this->valid;
+ }
+ return $this->valid;
+ }
+
+ /**
+ * Process cached template
+ *
+ * @param Template $_template template object
+ */
+ private function process(Template $_template) {
+ if ($this->handler->process($_template, $this) === false) {
+ $this->valid = false;
+ }
+ $this->processed = $this->valid;
+ }
+
+ /**
+ * Read cache content from handler
+ *
+ * @param Template $_template template object
+ *
+ * @return string|false content
+ */
+ public function readCache(Template $_template) {
+ if (!$_template->getSource()->handler->recompiled) {
+ return $this->handler->retrieveCachedContent($_template);
+ }
+ return false;
+ }
+
+ /**
+ * Write this cache object to handler
+ *
+ * @param string $content content to cache
+ *
+ * @return bool success
+ */
+ public function writeCache(Template $_template, $content) {
+ if (!$_template->getSource()->handler->recompiled) {
+ if ($this->handler->storeCachedContent($_template, $content)) {
+ $this->content = null;
+ $this->timestamp = time();
+ $this->exists = true;
+ $this->valid = true;
+ $this->cache_lifetime = $_template->cache_lifetime;
+ $this->processed = false;
+ if ($_template->getSmarty()->cache_locking) {
+ $this->handler->releaseLock($_template->getSmarty(), $this);
+ }
+ return true;
+ }
+ $this->content = null;
+ $this->timestamp = false;
+ $this->exists = false;
+ $this->valid = false;
+ $this->processed = false;
+ }
+ return false;
+ }
+
+ /**
+ * Cache was invalid , so render from compiled and write to cache
+ *
+ * @param Template $_template
+ * @param bool $no_output_filter
+ *
+ * @throws \Smarty\Exception
+ */
+ private function updateCache(Template $_template, $no_output_filter) {
+
+ ob_start();
+
+ $_template->getCompiled()->render($_template);
+
+ if ($_template->getSmarty()->debugging) {
+ $_template->getSmarty()->getDebug()->start_cache($_template);
+ }
+
+ $this->removeNoCacheHash($_template, $no_output_filter);
+ $this->process($_template);
+
+ if ($_template->getSmarty()->debugging) {
+ $_template->getSmarty()->getDebug()->end_cache($_template);
+ }
+ }
+
+ /**
+ * Sanitize content and write it to cache resource
+ *
+ * @param Template $_template
+ * @param bool $no_output_filter
+ *
+ * @throws \Smarty\Exception
+ */
+ private function removeNoCacheHash(Template $_template, $no_output_filter) {
+ $php_pattern = '/(<%|%>|<\?php|<\?|\?>|