From 9775ca7e9fc69378efa47ed3b9c0de14da6f7d37 Mon Sep 17 00:00:00 2001 From: Oldperl <44996956+oldperl@users.noreply.github.com> Date: Wed, 16 Aug 2017 13:54:04 +0000 Subject: [PATCH] add new smarty plugin --- .../smarty/classes/class.smarty.backend.php | 37 + .../smarty/classes/class.smarty.frontend.php | 146 + .../smarty/classes/class.smarty.wrapper.php | 61 + .../smarty/includes/config.autoloader.php | 8 + .../plugins/smarty/includes/config.plugin.php | 22 + conlite/plugins/smarty/libs/Autoloader.php | 110 + conlite/plugins/smarty/libs/Smarty.class.php | 1539 +++++++++ .../plugins/smarty/libs/SmartyBC.class.php | 455 +++ conlite/plugins/smarty/libs/bootstrap.php | 17 + conlite/plugins/smarty/libs/debug.tpl | 160 + .../smarty/libs/plugins/block.textformat.php | 120 + .../smarty/libs/plugins/function.counter.php | 73 + .../smarty/libs/plugins/function.cycle.php | 105 + .../smarty/libs/plugins/function.fetch.php | 221 ++ .../libs/plugins/function.html_checkboxes.php | 252 ++ .../libs/plugins/function.html_image.php | 167 + .../libs/plugins/function.html_options.php | 209 ++ .../libs/plugins/function.html_radios.php | 235 ++ .../plugins/function.html_select_date.php | 397 +++ .../plugins/function.html_select_time.php | 374 +++ .../libs/plugins/function.html_table.php | 176 ++ .../smarty/libs/plugins/function.mailto.php | 153 + .../smarty/libs/plugins/function.math.php | 109 + .../libs/plugins/modifier.capitalize.php | 101 + .../libs/plugins/modifier.date_format.php | 83 + .../libs/plugins/modifier.debug_print_var.php | 112 + .../smarty/libs/plugins/modifier.escape.php | 232 ++ .../libs/plugins/modifier.mb_wordwrap.php | 75 + .../libs/plugins/modifier.regex_replace.php | 58 + .../smarty/libs/plugins/modifier.replace.php | 39 + .../smarty/libs/plugins/modifier.spacify.php | 27 + .../smarty/libs/plugins/modifier.truncate.php | 66 + .../libs/plugins/modifiercompiler.cat.php | 29 + .../modifiercompiler.count_characters.php | 32 + .../modifiercompiler.count_paragraphs.php | 27 + .../modifiercompiler.count_sentences.php | 27 + .../plugins/modifiercompiler.count_words.php | 32 + .../libs/plugins/modifiercompiler.default.php | 35 + .../libs/plugins/modifiercompiler.escape.php | 119 + .../plugins/modifiercompiler.from_charset.php | 33 + .../libs/plugins/modifiercompiler.indent.php | 33 + .../libs/plugins/modifiercompiler.lower.php | 31 + .../libs/plugins/modifiercompiler.noprint.php | 21 + .../modifiercompiler.string_format.php | 25 + .../libs/plugins/modifiercompiler.strip.php | 33 + .../plugins/modifiercompiler.strip_tags.php | 29 + .../plugins/modifiercompiler.to_charset.php | 33 + .../plugins/modifiercompiler.unescape.php | 50 + .../libs/plugins/modifiercompiler.upper.php | 29 + .../plugins/modifiercompiler.wordwrap.php | 39 + .../plugins/outputfilter.trimwhitespace.php | 89 + .../plugins/shared.escape_special_chars.php | 34 + .../plugins/shared.literal_compiler_param.php | 36 + .../libs/plugins/shared.make_timestamp.php | 45 + .../libs/plugins/shared.mb_str_replace.php | 55 + .../smarty/libs/plugins/shared.mb_unicode.php | 54 + .../variablefilter.htmlspecialchars.php | 19 + .../libs/sysplugins/smarty_cacheresource.php | 220 ++ .../smarty_cacheresource_custom.php | 275 ++ .../smarty_cacheresource_keyvaluestore.php | 507 +++ .../smarty/libs/sysplugins/smarty_data.php | 68 + .../libs/sysplugins/smarty_internal_block.php | 90 + .../smarty_internal_cacheresource_file.php | 225 ++ .../smarty_internal_compile_append.php | 51 + .../smarty_internal_compile_assign.php | 94 + .../smarty_internal_compile_block.php | 202 ++ .../smarty_internal_compile_block_child.php | 54 + .../smarty_internal_compile_block_parent.php | 73 + .../smarty_internal_compile_break.php | 110 + .../smarty_internal_compile_call.php | 89 + .../smarty_internal_compile_capture.php | 112 + .../smarty_internal_compile_config_load.php | 98 + .../smarty_internal_compile_continue.php | 42 + .../smarty_internal_compile_debug.php | 42 + .../smarty_internal_compile_eval.php | 72 + .../smarty_internal_compile_extends.php | 144 + .../smarty_internal_compile_for.php | 170 + .../smarty_internal_compile_foreach.php | 344 ++ .../smarty_internal_compile_function.php | 216 ++ .../sysplugins/smarty_internal_compile_if.php | 211 ++ .../smarty_internal_compile_include.php | 344 ++ .../smarty_internal_compile_include_php.php | 111 + .../smarty_internal_compile_insert.php | 155 + .../smarty_internal_compile_ldelim.php | 40 + .../smarty_internal_compile_make_nocache.php | 64 + .../smarty_internal_compile_nocache.php | 75 + ..._internal_compile_private_block_plugin.php | 122 + ...nternal_compile_private_foreachsection.php | 221 ++ ...ternal_compile_private_function_plugin.php | 74 + ...arty_internal_compile_private_modifier.php | 150 + ..._compile_private_object_block_function.php | 42 + ...ternal_compile_private_object_function.php | 86 + .../smarty_internal_compile_private_php.php | 216 ++ ...ernal_compile_private_print_expression.php | 162 + ...ernal_compile_private_registered_block.php | 72 + ...al_compile_private_registered_function.php | 86 + ...ernal_compile_private_special_variable.php | 126 + .../smarty_internal_compile_rdelim.php | 40 + .../smarty_internal_compile_section.php | 469 +++ .../smarty_internal_compile_setfilter.php | 70 + ...ty_internal_compile_shared_inheritance.php | 46 + .../smarty_internal_compile_while.php | 100 + .../smarty_internal_compilebase.php | 196 ++ .../smarty_internal_config_file_compiler.php | 201 ++ .../smarty_internal_configfilelexer.php | 733 +++++ .../smarty_internal_configfileparser.php | 989 ++++++ .../libs/sysplugins/smarty_internal_data.php | 285 ++ .../libs/sysplugins/smarty_internal_debug.php | 426 +++ .../smarty_internal_extension_handler.php | 171 + ...rty_internal_method_addautoloadfilters.php | 52 + ...ty_internal_method_adddefaultmodifiers.php | 42 + .../smarty_internal_method_append.php | 74 + .../smarty_internal_method_appendbyref.php | 50 + .../smarty_internal_method_assignbyref.php | 36 + .../smarty_internal_method_assignglobal.php | 43 + .../smarty_internal_method_clearallassign.php | 37 + .../smarty_internal_method_clearallcache.php | 40 + .../smarty_internal_method_clearassign.php | 44 + .../smarty_internal_method_clearcache.php | 44 + ..._internal_method_clearcompiledtemplate.php | 126 + .../smarty_internal_method_clearconfig.php | 41 + ...marty_internal_method_compileallconfig.php | 33 + ...ty_internal_method_compilealltemplates.php | 119 + .../smarty_internal_method_configload.php | 183 ++ .../smarty_internal_method_createdata.php | 44 + ...rty_internal_method_getautoloadfilters.php | 37 + ...arty_internal_method_getconfigvariable.php | 34 + .../smarty_internal_method_getconfigvars.php | 58 + ...marty_internal_method_getdebugtemplate.php | 35 + ...ty_internal_method_getdefaultmodifiers.php | 35 + .../smarty_internal_method_getglobal.php | 47 + ...ty_internal_method_getregisteredobject.php | 44 + ...arty_internal_method_getstreamvariable.php | 51 + .../smarty_internal_method_gettags.php | 62 + ...smarty_internal_method_gettemplatevars.php | 116 + .../smarty_internal_method_loadfilter.php | 77 + .../smarty_internal_method_loadplugin.php | 111 + .../smarty_internal_method_mustcompile.php | 51 + ..._internal_method_registercacheresource.php | 40 + .../smarty_internal_method_registerclass.php | 46 + ...al_method_registerdefaultconfighandler.php | 42 + ...al_method_registerdefaultpluginhandler.php | 43 + ..._method_registerdefaulttemplatehandler.php | 82 + .../smarty_internal_method_registerfilter.php | 88 + .../smarty_internal_method_registerobject.php | 72 + .../smarty_internal_method_registerplugin.php | 51 + ...marty_internal_method_registerresource.php | 44 + ...rty_internal_method_setautoloadfilters.php | 70 + ...marty_internal_method_setdebugtemplate.php | 41 + ...ty_internal_method_setdefaultmodifiers.php | 38 + .../smarty_internal_method_unloadfilter.php | 42 + ...nternal_method_unregistercacheresource.php | 40 + ...marty_internal_method_unregisterfilter.php | 42 + ...marty_internal_method_unregisterobject.php | 40 + ...marty_internal_method_unregisterplugin.php | 41 + ...rty_internal_method_unregisterresource.php | 40 + .../smarty_internal_nocache_insert.php | 53 + .../sysplugins/smarty_internal_parsetree.php | 54 + .../smarty_internal_parsetree_code.php | 42 + .../smarty_internal_parsetree_dq.php | 95 + .../smarty_internal_parsetree_dqcontent.php | 42 + .../smarty_internal_parsetree_tag.php | 69 + .../smarty_internal_parsetree_template.php | 128 + .../smarty_internal_parsetree_text.php | 40 + .../smarty_internal_resource_eval.php | 95 + .../smarty_internal_resource_extends.php | 125 + .../smarty_internal_resource_file.php | 176 ++ .../smarty_internal_resource_php.php | 111 + .../smarty_internal_resource_registered.php | 99 + .../smarty_internal_resource_stream.php | 80 + .../smarty_internal_resource_string.php | 107 + .../smarty_internal_runtime_cachemodify.php | 68 + ...rty_internal_runtime_cacheresourcefile.php | 142 + .../smarty_internal_runtime_capture.php | 169 + .../smarty_internal_runtime_codeframe.php | 98 + .../smarty_internal_runtime_filterhandler.php | 69 + .../smarty_internal_runtime_foreach.php | 151 + ...smarty_internal_runtime_getincludepath.php | 182 ++ .../smarty_internal_runtime_inheritance.php | 241 ++ .../smarty_internal_runtime_make_nocache.php | 56 + .../smarty_internal_runtime_tplfunction.php | 171 + .../smarty_internal_runtime_updatecache.php | 165 + .../smarty_internal_runtime_updatescope.php | 115 + .../smarty_internal_runtime_writefile.php | 105 + ...smarty_internal_smartytemplatecompiler.php | 174 ++ .../sysplugins/smarty_internal_template.php | 692 +++++ .../smarty_internal_templatebase.php | 354 +++ .../smarty_internal_templatecompilerbase.php | 1394 +++++++++ .../smarty_internal_templatelexer.php | 1136 +++++++ .../smarty_internal_templateparser.php | 2764 +++++++++++++++++ .../smarty_internal_testinstall.php | 599 ++++ .../sysplugins/smarty_internal_undefined.php | 68 + .../libs/sysplugins/smarty_resource.php | 254 ++ .../sysplugins/smarty_resource_custom.php | 95 + .../sysplugins/smarty_resource_recompiled.php | 92 + .../sysplugins/smarty_resource_uncompiled.php | 49 + .../libs/sysplugins/smarty_security.php | 730 +++++ .../sysplugins/smarty_template_cached.php | 256 ++ .../sysplugins/smarty_template_compiled.php | 257 ++ .../sysplugins/smarty_template_config.php | 99 + .../smarty_template_resource_base.php | 158 + .../sysplugins/smarty_template_source.php | 210 ++ .../sysplugins/smarty_undefined_variable.php | 37 + .../libs/sysplugins/smarty_variable.php | 48 + .../sysplugins/smartycompilerexception.php | 42 + .../libs/sysplugins/smartyexception.php | 16 + conlite/plugins/smarty/plugin.xml | 19 + 207 files changed, 31568 insertions(+) create mode 100644 conlite/plugins/smarty/classes/class.smarty.backend.php create mode 100644 conlite/plugins/smarty/classes/class.smarty.frontend.php create mode 100644 conlite/plugins/smarty/classes/class.smarty.wrapper.php create mode 100644 conlite/plugins/smarty/includes/config.autoloader.php create mode 100644 conlite/plugins/smarty/includes/config.plugin.php create mode 100644 conlite/plugins/smarty/libs/Autoloader.php create mode 100644 conlite/plugins/smarty/libs/Smarty.class.php create mode 100644 conlite/plugins/smarty/libs/SmartyBC.class.php create mode 100644 conlite/plugins/smarty/libs/bootstrap.php create mode 100644 conlite/plugins/smarty/libs/debug.tpl create mode 100644 conlite/plugins/smarty/libs/plugins/block.textformat.php create mode 100644 conlite/plugins/smarty/libs/plugins/function.counter.php create mode 100644 conlite/plugins/smarty/libs/plugins/function.cycle.php create mode 100644 conlite/plugins/smarty/libs/plugins/function.fetch.php create mode 100644 conlite/plugins/smarty/libs/plugins/function.html_checkboxes.php create mode 100644 conlite/plugins/smarty/libs/plugins/function.html_image.php create mode 100644 conlite/plugins/smarty/libs/plugins/function.html_options.php create mode 100644 conlite/plugins/smarty/libs/plugins/function.html_radios.php create mode 100644 conlite/plugins/smarty/libs/plugins/function.html_select_date.php create mode 100644 conlite/plugins/smarty/libs/plugins/function.html_select_time.php create mode 100644 conlite/plugins/smarty/libs/plugins/function.html_table.php create mode 100644 conlite/plugins/smarty/libs/plugins/function.mailto.php create mode 100644 conlite/plugins/smarty/libs/plugins/function.math.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifier.capitalize.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifier.date_format.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifier.debug_print_var.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifier.escape.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifier.mb_wordwrap.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifier.regex_replace.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifier.replace.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifier.spacify.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifier.truncate.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.cat.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.count_characters.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.count_paragraphs.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.count_sentences.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.count_words.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.default.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.escape.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.from_charset.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.indent.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.lower.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.noprint.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.string_format.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.strip.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.strip_tags.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.to_charset.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.unescape.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.upper.php create mode 100644 conlite/plugins/smarty/libs/plugins/modifiercompiler.wordwrap.php create mode 100644 conlite/plugins/smarty/libs/plugins/outputfilter.trimwhitespace.php create mode 100644 conlite/plugins/smarty/libs/plugins/shared.escape_special_chars.php create mode 100644 conlite/plugins/smarty/libs/plugins/shared.literal_compiler_param.php create mode 100644 conlite/plugins/smarty/libs/plugins/shared.make_timestamp.php create mode 100644 conlite/plugins/smarty/libs/plugins/shared.mb_str_replace.php create mode 100644 conlite/plugins/smarty/libs/plugins/shared.mb_unicode.php create mode 100644 conlite/plugins/smarty/libs/plugins/variablefilter.htmlspecialchars.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_cacheresource.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_cacheresource_custom.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_data.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_block.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_cacheresource_file.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_append.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_assign.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_block.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_block_child.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_block_parent.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_break.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_call.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_capture.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_config_load.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_continue.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_debug.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_eval.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_extends.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_for.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_foreach.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_function.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_if.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_include.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_include_php.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_insert.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_make_nocache.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_nocache.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_php.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_section.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compile_while.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_compilebase.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_configfilelexer.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_configfileparser.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_data.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_debug.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_extension_handler.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_append.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_clearassign.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_clearcache.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_configload.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_createdata.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getconfigvariable.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getglobal.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_gettags.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerclass.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerobject.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_registerresource.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_nocache_insert.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_parsetree.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_parsetree_code.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_parsetree_template.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_parsetree_text.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_resource_eval.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_resource_extends.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_resource_file.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_resource_php.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_resource_registered.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_resource_stream.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_resource_string.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_capture.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_template.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_templatebase.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_templatelexer.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_templateparser.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_testinstall.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_internal_undefined.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_resource.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_resource_custom.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_resource_recompiled.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_resource_uncompiled.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_security.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_template_cached.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_template_compiled.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_template_config.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_template_resource_base.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_template_source.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_undefined_variable.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smarty_variable.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smartycompilerexception.php create mode 100644 conlite/plugins/smarty/libs/sysplugins/smartyexception.php create mode 100644 conlite/plugins/smarty/plugin.xml diff --git a/conlite/plugins/smarty/classes/class.smarty.backend.php b/conlite/plugins/smarty/classes/class.smarty.backend.php new file mode 100644 index 0000000..4a0088b --- /dev/null +++ b/conlite/plugins/smarty/classes/class.smarty.backend.php @@ -0,0 +1,37 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + */ +defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.'); + +/** + * Wrapper class for Integration of smarty. + * + * @package Plugin + * @subpackage SmartyWrapper + */ +class cSmartyBackend extends cSmartyFrontend { + + public function __construct(&$aCfg, &$aClientCfg, $bSanityCheck = false) { + parent::__construct($aCfg, $aClientCfg, false); + + parent::$aDefaultPaths = array( + 'template_dir' => $aCfg['path']['contenido'] . 'plugins/smarty_templates/', + 'cache_dir' => $aCfg['path']['contenido_cache'], + 'compile_dir' => $aCfg['path']['contenido_cache'] . 'templates_c/' + ); + + parent::$bSmartyInstanciated = true; + + $this->resetPaths(); + } + +} \ No newline at end of file diff --git a/conlite/plugins/smarty/classes/class.smarty.frontend.php b/conlite/plugins/smarty/classes/class.smarty.frontend.php new file mode 100644 index 0000000..69235bc --- /dev/null +++ b/conlite/plugins/smarty/classes/class.smarty.frontend.php @@ -0,0 +1,146 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + */ +defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.'); + +/** + * Wrapper class for Integration of smarty. + * + * @package Plugin + * @subpackage SmartyWrapper + */ +class cSmartyFrontend { + + /** + * The smarty Object + * + * @var Smarty + */ + protected static $oSmarty; + + /** + * static flag to simulate singleton behaviour + * + * @var bool + */ + public static $bSmartyInstanciated = false; + + /** + * static default paths + * + * @var array + */ + protected static $aDefaultPaths = array(); + + /** + * constructor + * + * @param array &$aCfg contenido cfg array + * @param array &$aClientCfg contenido client cfg array of the specific + * client + * @throws cException + * @throws cInvalidArgumentException if the given configurations are not an + * array + */ + public function __construct(&$aCfg, &$aClientCfg, $bSanityCheck = false) { + // check if already instanciated + if (isset(self::$bSmartyInstanciated) && self::$bSmartyInstanciated) { + throw new Exception("cSmartyFrontend class is intended to be used as singleton. Do not instanciate multiple times."); + } + + if (!is_array($aCfg)) { + throw new Exception(__CLASS__ . " " . __FUNCTION__ . " Parameter 1 invalid."); + } + + if (!is_array($aClientCfg)) { + throw new Exception(__CLASS__ . " " . __FUNCTION__ . " Parameter 2 invalid."); + } + + self::$oSmarty = new cSmartyWrapper(); + self::$aDefaultPaths = array( + 'template_dir' => $aClientCfg['module']['path'], + 'cache_dir' => $aClientCfg['cache']['path'] . 'templates_c', + 'compile_dir' => $aClientCfg['cache']['path'] . 'templates_c' + ); + + // check the template directory and create new one if it not exists + if (!is_dir(self::$aDefaultPaths['compile_dir'])) { + mkdir(self::$aDefaultPaths['compile_dir'], 0777); + } + + // check if folders exist and rights ok if needed + if ($bSanityCheck) { + foreach (self::$aDefaultPaths as $key => $value) { + if (!file_exists($value)) { + throw new Exception(sprintf("Class %s Error: Folder %s does not exist. Please create.", __CLASS__, $value)); + } + if ($key == 'cache' || $key == 'compile_dir') { + if (!is_writable($value)) { + throw new Exception(sprintf("Class %s Error: Folder %s is not writable. Please check for sufficient rights.", __CLASS__, $value)); + } + } + } + } + + self::resetPaths(); + self::$bSmartyInstanciated = true; + } + + /** + * prevent users from cloning instance + * + * @throws cException if this function is called + */ + public function __clone() { + throw new Exception("cSmartyFrontend class is intended to be used as singleton. Do not clone."); + } + + /** + * destructor + * set cSmarty::bSmartyInstanciated to false + */ + public function __destruct() { + self::$bSmartyInstanciated = false; + } + + /** + * static function to provide the smart object + * + * @param boolean $bResetTemplate true if the template values shall all be + * resetted + * @throws cException if singleton has not been instantiated yet + * @return cSmartyWrapper + */ + public static function getInstance($bResetTemplate = false) { + if (!isset(self::$oSmarty)) { + // @TODO find a smart way to instanciate smarty object on demand + throw new Exception("Smarty singleton not instantiated yet."); + } + if ($bResetTemplate) { + self::$oSmarty = new cSmartyWrapper(); + self::resetPaths(); + } + return self::$oSmarty; + } + + /** + * sets the default paths again + */ + public static function resetPaths() { + self::$oSmarty->setTemplateDir(self::$aDefaultPaths['template_dir']); + self::$oSmarty->setCacheDir(self::$aDefaultPaths['cache_dir']); + self::$oSmarty->setCompileDir(self::$aDefaultPaths['compile_dir']); + } + +} + +?> \ No newline at end of file diff --git a/conlite/plugins/smarty/classes/class.smarty.wrapper.php b/conlite/plugins/smarty/classes/class.smarty.wrapper.php new file mode 100644 index 0000000..9fab118 --- /dev/null +++ b/conlite/plugins/smarty/classes/class.smarty.wrapper.php @@ -0,0 +1,61 @@ + + * @license http://www.contenido.org/license/LIZENZ.txt + * @link http://www.4fb.de + * @link http://www.contenido.org + */ +defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.'); + +class cSmartyWrapper extends Smarty { + + public function fetch($template = NULL, $cache_id = NULL, $compile_id = NULL, $parent = NULL, $display = false, $merge_tpl_vars = true, $no_output_filter = false) { + if ($this->templateExists($template) === false) { + $moduleId = (int) cRegistry::getCurrentModuleId(); + if ($moduleId > 0) { + $module = new cModuleHandler($moduleId); + $template = $module->getTemplatePath($template); + } + } + + return parent::fetch($template, $cache_id, $compile_id, $parent, $display, $merge_tpl_vars, $no_output_filter); + } + + public function fetchGeneral($template = NULL, $cache_id = NULL, $compile_id = NULL, $parent = NULL, $display = false, $merge_tpl_vars = true, $no_output_filter = false) { + $template = cRegistry::getFrontendPath() . 'templates/' . $template; + + return parent::fetch($template, $cache_id, $compile_id, $parent, $display, $merge_tpl_vars, $no_output_filter); + } + + public function display($template = NULL, $cache_id = NULL, $compile_id = NULL, $parent = NULL) { + global $frontend_debug; + + if ($frontend_debug['template_display']) { + echo(""); + } + + return parent::display($template, $cache_id, $compile_id, $parent); + } + + public function displayGeneral($template = NULL, $cache_id = NULL, $compile_id = NULL, $parent = NULL) { + $this->fetchGeneral($template, $cache_id, $compile_id, $parent, true); + } + + public function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) { + if ($this->templateExists($template_name) === false) { + $moduleId = (int) cRegistry::getCurrentModuleId(); + if ($moduleId > 0) { + $module = new cModuleHandler($moduleId); + $template_name = $module->getTemplatePath($template_name); + } + } + + return parent::clearCache($template_name, $cache_id, $compile_id, $exp_time, $type); + } +} \ No newline at end of file diff --git a/conlite/plugins/smarty/includes/config.autoloader.php b/conlite/plugins/smarty/includes/config.autoloader.php new file mode 100644 index 0000000..0dc1b3d --- /dev/null +++ b/conlite/plugins/smarty/includes/config.autoloader.php @@ -0,0 +1,8 @@ + $sAutoloadClassPath.'class.smarty.backend.php', + 'cSmartyFrontend' => $sAutoloadClassPath.'class.smarty.frontend.php', + 'cSmartyWrapper' => $sAutoloadClassPath.'class.smarty.wrapper.php' +); +?> \ No newline at end of file diff --git a/conlite/plugins/smarty/includes/config.plugin.php b/conlite/plugins/smarty/includes/config.plugin.php new file mode 100644 index 0000000..5e75309 --- /dev/null +++ b/conlite/plugins/smarty/includes/config.plugin.php @@ -0,0 +1,22 @@ +getFile(), $e->getLine(), $e->getMessage()); +} +?> \ No newline at end of file diff --git a/conlite/plugins/smarty/libs/Autoloader.php b/conlite/plugins/smarty/libs/Autoloader.php new file mode 100644 index 0000000..3a0da8f --- /dev/null +++ b/conlite/plugins/smarty/libs/Autoloader.php @@ -0,0 +1,110 @@ + 'Smarty.class.php', 'smartybc' => 'SmartyBC.class.php',); + + /** + * Registers Smarty_Autoloader backward compatible to older installations. + * + * @param bool $prepend Whether to prepend the autoloader or not. + */ + public static function registerBC($prepend = false) + { + /** + * register the class autoloader + */ + if (!defined('SMARTY_SPL_AUTOLOAD')) { + define('SMARTY_SPL_AUTOLOAD', 0); + } + if (SMARTY_SPL_AUTOLOAD && + set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false + ) { + $registeredAutoLoadFunctions = spl_autoload_functions(); + if (!isset($registeredAutoLoadFunctions[ 'spl_autoload' ])) { + spl_autoload_register(); + } + } else { + self::register($prepend); + } + } + + /** + * Registers Smarty_Autoloader as an SPL autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not. + */ + public static function register($prepend = false) + { + self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : dirname(__FILE__) . DIRECTORY_SEPARATOR; + self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR : + self::$SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR; + if (version_compare(PHP_VERSION, '5.3.0', '>=')) { + spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend); + } else { + spl_autoload_register(array(__CLASS__, 'autoload')); + } + } + + /** + * Handles auto loading of classes. + * + * @param string $class A class name. + */ + public static function autoload($class) + { + if ($class[ 0 ] !== 'S' && strpos($class, 'Smarty') !== 0) { + return; + } + $_class = strtolower($class); + if (isset(self::$rootClasses[ $_class ])) { + $file = self::$SMARTY_DIR . self::$rootClasses[ $_class ]; + if (is_file($file)) { + include $file; + } + } else { + $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php'; + if (is_file($file)) { + include $file; + } + } + return; + } +} diff --git a/conlite/plugins/smarty/libs/Smarty.class.php b/conlite/plugins/smarty/libs/Smarty.class.php new file mode 100644 index 0000000..ab866ea --- /dev/null +++ b/conlite/plugins/smarty/libs/Smarty.class.php @@ -0,0 +1,1539 @@ + + * @author Uwe Tews + * @author Rodney Rehm + * @package Smarty + * @version 3.1.32-dev + */ + +/** + * set SMARTY_DIR to absolute path to Smarty library files. + * Sets SMARTY_DIR only if user application has not already defined it. + */ +if (!defined('SMARTY_DIR')) { + define('SMARTY_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR); +} + +/** + * set SMARTY_SYSPLUGINS_DIR to absolute path to Smarty internal plugins. + * Sets SMARTY_SYSPLUGINS_DIR only if user application has not already defined it. + */ +if (!defined('SMARTY_SYSPLUGINS_DIR')) { + define('SMARTY_SYSPLUGINS_DIR', SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR); +} +if (!defined('SMARTY_PLUGINS_DIR')) { + define('SMARTY_PLUGINS_DIR', SMARTY_DIR . 'plugins' . DIRECTORY_SEPARATOR); +} +if (!defined('SMARTY_MBSTRING')) { + define('SMARTY_MBSTRING', function_exists('mb_get_info')); +} +if (!defined('SMARTY_RESOURCE_CHAR_SET')) { + // UTF-8 can only be done properly when mbstring is available! + /** + * @deprecated in favor of Smarty::$_CHARSET + */ + define('SMARTY_RESOURCE_CHAR_SET', SMARTY_MBSTRING ? 'UTF-8' : 'ISO-8859-1'); +} +if (!defined('SMARTY_RESOURCE_DATE_FORMAT')) { + /** + * @deprecated in favor of Smarty::$_DATE_FORMAT + */ + define('SMARTY_RESOURCE_DATE_FORMAT', '%b %e, %Y'); +} + +/** + * Load Smarty_Autoloader + */ +if (!class_exists('Smarty_Autoloader')) { + include dirname(__FILE__) . '/bootstrap.php'; +} + +/** + * Load always needed external class files + */ +require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_data.php'; +require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_extension_handler.php'; +require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_templatebase.php'; +require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_template.php'; +require_once SMARTY_SYSPLUGINS_DIR . 'smarty_resource.php'; +require_once SMARTY_SYSPLUGINS_DIR . 'smarty_variable.php'; +require_once SMARTY_SYSPLUGINS_DIR . 'smarty_template_source.php'; +require_once SMARTY_SYSPLUGINS_DIR . 'smarty_template_resource_base.php'; +require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_resource_file.php'; + +/** + * This is the main Smarty class + * + * @package Smarty + * + * The following methods will be dynamically loaded by the extension handler when they are called. + * They are located in a corresponding Smarty_Internal_Method_xxxx class + * + * @method int clearAllCache(int $exp_time = null, string $type = null) + * @method int clearCache(string $template_name, string $cache_id = null, string $compile_id = null, int $exp_time = null, string $type = null) + * @method int compileAllTemplates(string $extension = '.tpl', bool $force_compile = false, int $time_limit = 0, int $max_errors = null) + * @method int compileAllConfig(string $extension = '.conf', bool $force_compile = false, int $time_limit = 0, int $max_errors = null) + * @method int clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) + */ +class Smarty extends Smarty_Internal_TemplateBase +{ + /**#@+ + * constant definitions + */ + + /** + * smarty version + */ + const SMARTY_VERSION = '3.1.32-dev-19'; + + /** + * define variable scopes + */ + const SCOPE_LOCAL = 1; + + const SCOPE_PARENT = 2; + + const SCOPE_TPL_ROOT = 4; + + const SCOPE_ROOT = 8; + + const SCOPE_SMARTY = 16; + + const SCOPE_GLOBAL = 32; + + /** + * define caching modes + */ + const CACHING_OFF = 0; + + const CACHING_LIFETIME_CURRENT = 1; + + const CACHING_LIFETIME_SAVED = 2; + + /** + * define constant for clearing cache files be saved expiration dates + */ + const CLEAR_EXPIRED = - 1; + + /** + * define compile check modes + */ + const COMPILECHECK_OFF = 0; + + const COMPILECHECK_ON = 1; + + const COMPILECHECK_CACHEMISS = 2; + + /** + * define debug modes + */ + const DEBUG_OFF = 0; + + const DEBUG_ON = 1; + + const DEBUG_INDIVIDUAL = 2; + + /** + * modes for handling of "" tags in templates. + */ + const PHP_PASSTHRU = 0; //-> print tags as plain text + + const PHP_QUOTE = 1; //-> escape tags as entities + + const PHP_REMOVE = 2; //-> escape tags as entities + + const PHP_ALLOW = 3; //-> escape tags as entities + + /** + * filter types + */ + const FILTER_POST = 'post'; + + const FILTER_PRE = 'pre'; + + const FILTER_OUTPUT = 'output'; + + const FILTER_VARIABLE = 'variable'; + + /** + * plugin types + */ + const PLUGIN_FUNCTION = 'function'; + + const PLUGIN_BLOCK = 'block'; + + const PLUGIN_COMPILER = 'compiler'; + + const PLUGIN_MODIFIER = 'modifier'; + + const PLUGIN_MODIFIERCOMPILER = 'modifiercompiler'; + + /** + * Resource caching modes + * (not used since 3.1.30) + */ + const RESOURCE_CACHE_OFF = 0; + + const RESOURCE_CACHE_AUTOMATIC = 1; // cache template objects by rules + + const RESOURCE_CACHE_TEMPLATE = 2; // cache all template objects + + const RESOURCE_CACHE_ON = 4; // cache source and compiled resources + + /**#@-*/ + + /** + * assigned global tpl vars + */ + public static $global_tpl_vars = array(); + + /** + * error handler returned by set_error_handler() in Smarty::muteExpectedErrors() + */ + public static $_previous_error_handler = null; + + /** + * contains directories outside of SMARTY_DIR that are to be muted by muteExpectedErrors() + */ + public static $_muted_directories = array(); + + /** + * Flag denoting if Multibyte String functions are available + */ + public static $_MBSTRING = SMARTY_MBSTRING; + + /** + * The character set to adhere to (e.g. "UTF-8") + */ + public static $_CHARSET = SMARTY_RESOURCE_CHAR_SET; + + /** + * The date format to be used internally + * (accepts date() and strftime()) + */ + public static $_DATE_FORMAT = SMARTY_RESOURCE_DATE_FORMAT; + + /** + * Flag denoting if PCRE should run in UTF-8 mode + */ + public static $_UTF8_MODIFIER = 'u'; + + /** + * Flag denoting if operating system is windows + */ + public static $_IS_WINDOWS = false; + + /**#@+ + * variables + */ + + /** + * auto literal on delimiters with whitespace + * + * @var boolean + */ + public $auto_literal = true; + + /** + * display error on not assigned variables + * + * @var boolean + */ + public $error_unassigned = false; + + /** + * look up relative file path in include_path + * + * @var boolean + */ + public $use_include_path = false; + + /** + * template directory + * + * @var array + */ + protected $template_dir = array('./templates/'); + + /** + * flags for normalized template directory entries + * + * @var array + */ + protected $_processedTemplateDir = array(); + + /** + * 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; + + /** + * config directory + * + * @var array + */ + protected $config_dir = array('./configs/'); + + /** + * flags for normalized template directory entries + * + * @var array + */ + protected $_processedConfigDir = array(); + + /** + * 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 + */ + public $default_plugin_handler_func = null; + + /** + * compile directory + * + * @var string + */ + protected $compile_dir = './templates_c/'; + + /** + * flag if template_dir is normalized + * + * @var bool + */ + public $_compileDirNormalized = false; + + /** + * plugins directory + * + * @var array + */ + protected $plugins_dir = array(); + + /** + * flag if plugins_dir is normalized + * + * @var bool + */ + public $_pluginsDirNormalized = false; + + /** + * cache directory + * + * @var string + */ + protected $cache_dir = './cache/'; + + /** + * flag if template_dir is normalized + * + * @var bool + */ + public $_cacheDirNormalized = false; + + /** + * force template compiling? + * + * @var boolean + */ + public $force_compile = false; + + /** + * check template for modifications? + * + * @var boolean + */ + public $compile_check = true; + + /** + * use sub dirs for compiled/cached files? + * + * @var boolean + */ + public $use_sub_dirs = false; + + /** + * allow ambiguous resources (that are made unique by the resource handler) + * + * @var boolean + */ + public $allow_ambiguous_resources = false; + + /** + * merge compiled includes + * + * @var boolean + */ + public $merge_compiled_includes = false; + + /* + * flag for behaviour when extends: resource and {extends} tag are used simultaneous + * if false disable execution of {extends} in templates called by extends resource. + * (behaviour as versions < 3.1.28) + * + * @var boolean + */ + public $extends_recursion = true; + + /** + * force cache file creation + * + * @var boolean + */ + public $force_cache = false; + + /** + * template left-delimiter + * + * @var string + */ + public $left_delimiter = "{"; + + /** + * template right-delimiter + * + * @var string + */ + public $right_delimiter = "}"; + + /**#@+ + * security + */ + /** + * class name + * This should be instance of Smarty_Security. + * + * @var string + * @see Smarty_Security + */ + public $security_class = 'Smarty_Security'; + + /** + * implementation of security class + * + * @var Smarty_Security + */ + public $security_policy = null; + + /** + * controls handling of PHP-blocks + * + * @var integer + */ + public $php_handling = self::PHP_PASSTHRU; + + /** + * controls if the php template file resource is allowed + * + * @var bool + */ + public $allow_php_templates = false; + + /**#@-*/ + /** + * debug mode + * Setting this to true enables the debug-console. + * + * @var boolean + */ + public $debugging = false; + + /** + * This determines if debugging is enable-able from the browser. + * + * + * @var string + */ + public $debugging_ctrl = 'NONE'; + + /** + * Name of debugging URL-param. + * Only used when $debugging_ctrl is set to 'URL'. + * The name of the URL-parameter that activates debugging. + * + * @var string + */ + public $smarty_debug_id = 'SMARTY_DEBUG'; + + /** + * Path of debug template. + * + * @var string + */ + public $debug_tpl = null; + + /** + * When set, smarty uses this value as error_reporting-level. + * + * @var int + */ + public $error_reporting = null; + + /**#@+ + * config var settings + */ + + /** + * Controls whether variables with the same name overwrite each other. + * + * @var boolean + */ + public $config_overwrite = true; + + /** + * Controls whether config values of on/true/yes and off/false/no get converted to boolean. + * + * @var boolean + */ + public $config_booleanize = true; + + /** + * Controls whether hidden config sections/vars are read from the file. + * + * @var boolean + */ + public $config_read_hidden = false; + + /**#@-*/ + + /**#@+ + * resource locking + */ + + /** + * locking concurrent compiles + * + * @var boolean + */ + public $compile_locking = true; + + /** + * Controls whether cache resources should use locking mechanism + * + * @var boolean + */ + public $cache_locking = false; + + /** + * seconds to wait for acquiring a lock before ignoring the write lock + * + * @var float + */ + public $locking_timeout = 10; + + /**#@-*/ + + /** + * resource type used if none given + * Must be an valid key of $registered_resources. + * + * @var string + */ + public $default_resource_type = 'file'; + + /** + * caching type + * Must be an element of $cache_resource_types. + * + * @var string + */ + public $caching_type = 'file'; + + /** + * config type + * + * @var string + */ + public $default_config_type = 'file'; + + /** + * check If-Modified-Since headers + * + * @var boolean + */ + public $cache_modified_check = false; + + /** + * registered plugins + * + * @var array + */ + public $registered_plugins = array(); + + /** + * registered objects + * + * @var array + */ + public $registered_objects = array(); + + /** + * registered classes + * + * @var array + */ + public $registered_classes = array(); + + /** + * registered filters + * + * @var array + */ + public $registered_filters = array(); + + /** + * registered resources + * + * @var array + */ + public $registered_resources = array(); + + /** + * registered cache resources + * + * @var array + */ + public $registered_cache_resources = array(); + + /** + * autoload filter + * + * @var array + */ + public $autoload_filters = array(); + + /** + * default modifier + * + * @var array + */ + public $default_modifiers = array(); + + /** + * autoescape variable output + * + * @var boolean + */ + public $escape_html = false; + + /** + * start time for execution time calculation + * + * @var int + */ + public $start_time = 0; + + /** + * required by the compiler for BC + * + * @var string + */ + public $_current_file = null; + + /** + * internal flag to enable parser debugging + * + * @var bool + */ + public $_parserdebug = false; + + /** + * This object type (Smarty = 1, template = 2, data = 4) + * + * @var int + */ + public $_objType = 1; + + /** + * Debug object + * + * @var Smarty_Internal_Debug + */ + public $_debug = null; + + /** + * Directory separator + * + * @var string + */ + public $ds = DIRECTORY_SEPARATOR; + + /** + * removed properties + * + * @var string[] + */ + protected $obsoleteProperties = array('resource_caching', 'template_resource_caching', 'direct_access_security', + '_dir_perms', '_file_perms', 'plugin_search_order', + 'inheritance_merge_compiled_includes', 'resource_cache_mode',); + + /** + * List of private properties which will call getter/setter on a direct access + * + * @var string[] + */ + protected $accessMap = array('template_dir' => 'TemplateDir', 'config_dir' => 'ConfigDir', + 'plugins_dir' => 'PluginsDir', 'compile_dir' => 'CompileDir', + 'cache_dir' => 'CacheDir',); + + /**#@-*/ + + /** + * Initialize new Smarty object + */ + public function __construct() + { + $this->_clearTemplateCache(); + parent::__construct(); + if (is_callable('mb_internal_encoding')) { + mb_internal_encoding(Smarty::$_CHARSET); + } + $this->start_time = microtime(true); + + if (isset($_SERVER[ 'SCRIPT_NAME' ])) { + Smarty::$global_tpl_vars[ 'SCRIPT_NAME' ] = new Smarty_Variable($_SERVER[ 'SCRIPT_NAME' ]); + } + + // Check if we're running on windows + Smarty::$_IS_WINDOWS = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'; + // let PCRE (preg_*) treat strings as ISO-8859-1 if we're not dealing with UTF-8 + if (Smarty::$_CHARSET !== 'UTF-8') { + Smarty::$_UTF8_MODIFIER = ''; + } + } + + /** + * Check if a template resource exists + * + * @param string $resource_name template name + * + * @return boolean status + */ + public function templateExists($resource_name) + { + // create source object + $source = Smarty_Template_Source::load(null, $this, $resource_name); + return $source->exists; + } + + /** + * Loads security class and enables security + * + * @param string|Smarty_Security $security_class if a string is used, it must be class-name + * + * @return Smarty current Smarty instance for chaining + * @throws SmartyException when an invalid class name is provided + */ + public function enableSecurity($security_class = null) + { + Smarty_Security::enableSecurity($this, $security_class); + return $this; + } + + /** + * Disable security + * + * @return Smarty current Smarty instance for chaining + */ + public function disableSecurity() + { + $this->security_policy = null; + + return $this; + } + + /** + * Set template directory + * + * @param string|array $template_dir directory(s) of template sources + * @param bool $isConfig true for config_dir + * + * @return \Smarty current Smarty instance for chaining + */ + public function setTemplateDir($template_dir, $isConfig = false) + { + if ($isConfig) { + $this->config_dir = array(); + $this->_processedConfigDir = array(); + } else { + $this->template_dir = array(); + $this->_processedTemplateDir = array(); + } + $this->addTemplateDir($template_dir, null, $isConfig); + return $this; + } + + /** + * Add template directory(s) + * + * @param string|array $template_dir directory(s) of template sources + * @param string $key of the array element to assign the template dir to + * @param bool $isConfig true for config_dir + * + * @return Smarty current Smarty instance for chaining + */ + public function addTemplateDir($template_dir, $key = null, $isConfig = false) + { + 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 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->_nomalizeTemplateConfig($isConfig); + } + if ($index !== null) { + return isset($dir[ $index ]) ? $dir[ $index ] : null; + } + return $dir; + } + + /** + * Set config directory + * + * @param $config_dir + * + * @return Smarty current Smarty instance for chaining + */ + public function setConfigDir($config_dir) + { + return $this->setTemplateDir($config_dir, true); + } + + /** + * Add config directory(s) + * + * @param string|array $config_dir directory(s) of config sources + * @param mixed $key key of the array element to assign the config dir to + * + * @return Smarty current Smarty instance for chaining + */ + public function addConfigDir($config_dir, $key = null) + { + return $this->addTemplateDir($config_dir, $key, true); + } + + /** + * Get config directory + * + * @param mixed $index index of directory to get, null to get all + * + * @return array configuration directory + */ + public function getConfigDir($index = null) + { + return $this->getTemplateDir($index, true); + } + + /** + * Set plugins directory + * + * @param string|array $plugins_dir directory(s) of plugins + * + * @return Smarty current Smarty instance for chaining + */ + public function setPluginsDir($plugins_dir) + { + $this->plugins_dir = (array) $plugins_dir; + $this->_pluginsDirNormalized = false; + return $this; + } + + /** + * Adds directory of plugin files + * + * @param null|array|string $plugins_dir + * + * @return Smarty current Smarty instance for chaining + */ + public function addPluginsDir($plugins_dir) + { + if (empty($this->plugins_dir)) { + $this->plugins_dir[] = SMARTY_PLUGINS_DIR; + } + $this->plugins_dir = array_merge($this->plugins_dir, (array) $plugins_dir); + $this->_pluginsDirNormalized = false; + return $this; + } + + /** + * Get plugin directories + * + * @return array list of plugin directories + */ + public function getPluginsDir() + { + if (empty($this->plugins_dir)) { + $this->plugins_dir[] = SMARTY_PLUGINS_DIR; + $this->_pluginsDirNormalized = false; + } + if (!$this->_pluginsDirNormalized) { + if (!is_array($this->plugins_dir)) { + $this->plugins_dir = (array) $this->plugins_dir; + } + foreach ($this->plugins_dir as $k => $v) { + $this->plugins_dir[ $k ] = $this->_realpath(rtrim($v, "/\\") . $this->ds, true); + } + $this->_cache[ 'plugin_files' ] = array(); + $this->_pluginsDirNormalized = true; + } + return $this->plugins_dir; + } + + /** + * + * @param string $compile_dir directory to store compiled templates in + * + * @return Smarty current Smarty instance for chaining + */ + public function setCompileDir($compile_dir) + { + $this->_normalizeDir('compile_dir', $compile_dir); + $this->_compileDirNormalized = true; + 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; + } + + /** + * Set cache directory + * + * @param string $cache_dir directory to store cached templates in + * + * @return Smarty current Smarty instance for chaining + */ + public function setCacheDir($cache_dir) + { + $this->_normalizeDir('cache_dir', $cache_dir); + $this->_cacheDirNormalized = 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; + } + + /** + * 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, "/\\") . $this->ds, true); + if (!isset(Smarty::$_muted_directories[ $this->{$dirName} ])) { + Smarty::$_muted_directories[ $this->{$dirName} ] = null; + } + } + + /** + * Normalize template_dir or config_dir + * + * @param bool $isConfig true for config_dir + * + */ + private function _nomalizeTemplateConfig($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 ] = $v = $this->_realpath(rtrim($v, "/\\") . $this->ds, true); + $processed[ $k ] = true; + } + } + $isConfig ? $this->_configDirNormalized = true : $this->_templateDirNormalized = true; + $isConfig ? $this->_joined_config_dir = join('#', $this->config_dir) : + $this->_joined_template_dir = join('#', $this->template_dir); + } + + /** + * creates a template object + * + * @param string $template the resource handle of the template file + * @param mixed $cache_id cache id to be used with this template + * @param mixed $compile_id compile id to be used with this template + * @param object $parent next higher level of Smarty variables + * @param boolean $do_clone flag is Smarty object shall be cloned + * + * @return object template object + */ + public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true) + { + if ($cache_id !== null && (is_object($cache_id) || is_array($cache_id))) { + $parent = $cache_id; + $cache_id = null; + } + if ($parent !== null && is_array($parent)) { + $data = $parent; + $parent = null; + } else { + $data = null; + } + if (!$this->_templateDirNormalized) { + $this->_nomalizeTemplateConfig(false); + } + $_templateId = $this->_getTemplateId($template, $cache_id, $compile_id); + $tpl = null; + if ($this->caching && isset(Smarty_Internal_Template::$isCacheTplObj[ $_templateId ])) { + $tpl = $do_clone ? clone Smarty_Internal_Template::$isCacheTplObj[ $_templateId ] : + Smarty_Internal_Template::$isCacheTplObj[ $_templateId ]; + $tpl->inheritance = null; + $tpl->tpl_vars = $tpl->config_vars = array(); + } else if (!$do_clone && isset(Smarty_Internal_Template::$tplObjCache[ $_templateId ])) { + $tpl = clone Smarty_Internal_Template::$tplObjCache[ $_templateId ]; + $tpl->inheritance = null; + $tpl->tpl_vars = $tpl->config_vars = array(); + } else { + /* @var Smarty_Internal_Template $tpl */ + $tpl = new $this->template_class($template, $this, null, $cache_id, $compile_id, null, null); + $tpl->templateId = $_templateId; + } + if ($do_clone) { + $tpl->smarty = clone $tpl->smarty; + } + $tpl->parent = $parent ? $parent : $this; + // fill data if present + if (!empty($data) && is_array($data)) { + // set up variable values + foreach ($data as $_key => $_val) { + $tpl->tpl_vars[ $_key ] = new Smarty_Variable($_val); + } + } + if ($this->debugging || $this->debugging_ctrl == 'URL') { + $tpl->smarty->_debug = new Smarty_Internal_Debug(); + // check URL debugging control + if (!$this->debugging && $this->debugging_ctrl == 'URL') { + $tpl->smarty->_debug->debugUrl($tpl->smarty); + } + } + return $tpl; + } + + /** + * Takes unknown classes and loads plugin files for them + * class name format: Smarty_PluginType_PluginName + * plugin filename format: plugintype.pluginname.php + * + * @param string $plugin_name class plugin name to load + * @param bool $check check if already loaded + * + * @throws SmartyException + * @return string |boolean filepath of loaded file or false + */ + public function loadPlugin($plugin_name, $check = true) + { + return $this->ext->loadPlugin->loadPlugin($this, $plugin_name, $check); + } + + /** + * Get unique template id + * + * @param string $template_name + * @param null|mixed $cache_id + * @param null|mixed $compile_id + * @param null $caching + * @param \Smarty_Internal_Template $template + * + * @return string + */ + public function _getTemplateId($template_name, $cache_id = null, $compile_id = null, $caching = null, + Smarty_Internal_Template $template = null) + { + $template_name = (strpos($template_name, ':') === false) ? "{$this->default_resource_type}:{$template_name}" : + $template_name; + $cache_id = $cache_id === null ? $this->cache_id : $cache_id; + $compile_id = $compile_id === null ? $this->compile_id : $compile_id; + $caching = (int) ($caching === null ? $this->caching : $caching); + + if ((isset($template) && strpos($template_name, ':.') !== false) || $this->allow_ambiguous_resources) { + $_templateId = + Smarty_Resource::getUniqueTemplateName((isset($template) ? $template : $this), $template_name) . + "#{$cache_id}#{$compile_id}#{$caching}"; + } else { + $_templateId = $this->_joined_template_dir . "#{$template_name}#{$cache_id}#{$compile_id}#{$caching}"; + } + if (isset($_templateId[ 150 ])) { + $_templateId = sha1($_templateId); + } + return $_templateId; + } + + /** + * Normalize path + * - remove /./ and /../ + * - make it absolute if required + * + * @param string $path file path + * @param bool $realpath 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 = $this->ds == '/' ? '\\' : '/'; + // normalize $this->ds + $path = str_replace($nds, $this->ds, $path); + preg_match('%^(?(?:[[:alpha:]]:[\\\\]|/|[\\\\]{2}[[:alpha:]]+|[[:print:]]{2,}:[/]{2}|[\\\\])?)(?(?:[[:print:]]*))$%', + $path, $parts); + $path = $parts[ 'path' ]; + if ($parts[ 'root' ] == '\\') { + $parts[ 'root' ] = substr(getcwd(), 0, 2) . $parts[ 'root' ]; + } else { + if ($realpath !== null && !$parts[ 'root' ]) { + $path = getcwd() . $this->ds . $path; + } + } + // remove noop 'DIRECTORY_SEPARATOR DIRECTORY_SEPARATOR' and 'DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR' patterns + $path = preg_replace('#([\\\\/]([.]?[\\\\/])+)#', $this->ds, $path); + // resolve '..DIRECTORY_SEPARATOR' pattern, smallest first + if (strpos($path, '..' . $this->ds) != false && + preg_match_all('#(([.]?[\\\\/])*([.][.])[\\\\/]([.]?[\\\\/])*)+#', $path, $match) + ) { + $counts = array(); + foreach ($match[ 0 ] as $m) { + $counts[] = (int) ((strlen($m) - 1) / 3); + } + sort($counts); + foreach ($counts as $count) { + $path = preg_replace('#(([\\\\/]([.]?[\\\\/])*[^\\\\/.]+){' . $count . + '}[\\\\/]([.]?[\\\\/])*([.][.][\\\\/]([.]?[\\\\/])*){' . $count . '})(?=[^.])#', + $this->ds, $path); + } + } + + return $parts[ 'root' ] . $path; + } + + /** + * Empty template objects cache + */ + public function _clearTemplateCache() + { + Smarty_Internal_Template::$isCacheTplObj = array(); + Smarty_Internal_Template::$tplObjCache = array(); + } + + /** + * @param boolean $compile_check + */ + public function setCompileCheck($compile_check) + { + $this->compile_check = $compile_check; + } + + /** + * @param boolean $use_sub_dirs + */ + public function setUseSubDirs($use_sub_dirs) + { + $this->use_sub_dirs = $use_sub_dirs; + } + + /** + * @param int $error_reporting + */ + public function setErrorReporting($error_reporting) + { + $this->error_reporting = $error_reporting; + } + + /** + * @param boolean $escape_html + */ + public function setEscapeHtml($escape_html) + { + $this->escape_html = $escape_html; + } + + /** + * @param boolean $auto_literal + */ + public function setAutoLiteral($auto_literal) + { + $this->auto_literal = $auto_literal; + } + + /** + * @param boolean $force_compile + */ + public function setForceCompile($force_compile) + { + $this->force_compile = $force_compile; + } + + /** + * @param boolean $merge_compiled_includes + */ + public function setMergeCompiledIncludes($merge_compiled_includes) + { + $this->merge_compiled_includes = $merge_compiled_includes; + } + + /** + * @param string $left_delimiter + */ + public function setLeftDelimiter($left_delimiter) + { + $this->left_delimiter = $left_delimiter; + } + + /** + * @param string $right_delimiter + */ + public function setRightDelimiter($right_delimiter) + { + $this->right_delimiter = $right_delimiter; + } + + /** + * @param boolean $debugging + */ + public function setDebugging($debugging) + { + $this->debugging = $debugging; + } + + /** + * @param boolean $config_overwrite + */ + public function setConfigOverwrite($config_overwrite) + { + $this->config_overwrite = $config_overwrite; + } + + /** + * @param boolean $config_booleanize + */ + public function setConfigBooleanize($config_booleanize) + { + $this->config_booleanize = $config_booleanize; + } + + /** + * @param boolean $config_read_hidden + */ + public function setConfigReadHidden($config_read_hidden) + { + $this->config_read_hidden = $config_read_hidden; + } + + /** + * @param boolean $compile_locking + */ + public function setCompileLocking($compile_locking) + { + $this->compile_locking = $compile_locking; + } + + /** + * @param string $default_resource_type + */ + public function setDefaultResourceType($default_resource_type) + { + $this->default_resource_type = $default_resource_type; + } + + /** + * @param string $caching_type + */ + public function setCachingType($caching_type) + { + $this->caching_type = $caching_type; + } + + /** + * Test install + * + * @param null $errors + */ + public function testInstall(&$errors = null) + { + Smarty_Internal_TestInstall::testInstall($this, $errors); + } + + /** + * <> Generic getter. + * Calls the appropriate getter function. + * Issues an E_USER_NOTICE if no valid getter is found. + * + * @param string $name property name + * + * @return mixed + */ + public function __get($name) + { + if (isset($this->accessMap[ $name ])) { + $method = 'get' . $this->accessMap[ $name ]; + return $this->{$method}(); + } elseif (isset($this->_cache[ $name ])) { + return $this->_cache[ $name ]; + } elseif (in_array($name, $this->obsoleteProperties)) { + return null; + } else { + trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE); + } + return null; + } + + /** + * <> Generic setter. + * Calls the appropriate setter function. + * Issues an E_USER_NOTICE if no valid setter is found. + * + * @param string $name property name + * @param mixed $value parameter passed to setter + */ + public function __set($name, $value) + { + if (isset($this->accessMap[ $name ])) { + $method = 'set' . $this->accessMap[ $name ]; + $this->{$method}($value); + } elseif (in_array($name, $this->obsoleteProperties)) { + return; + } else { + if (is_object($value) && method_exists($value, $name)) { + $this->$name = $value; + } else { + trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE); + } + } + } + + /** + * Error Handler to mute expected messages + * + * @link http://php.net/set_error_handler + * + * @param integer $errno Error level + * @param $errstr + * @param $errfile + * @param $errline + * @param $errcontext + * + * @return bool|void + */ + public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) + { + $_is_muted_directory = false; + + // add the SMARTY_DIR to the list of muted directories + if (!isset(Smarty::$_muted_directories[ SMARTY_DIR ])) { + $smarty_dir = realpath(SMARTY_DIR); + if ($smarty_dir !== false) { + Smarty::$_muted_directories[ SMARTY_DIR ] = + array('file' => $smarty_dir, 'length' => strlen($smarty_dir),); + } + } + + // walk the muted directories and test against $errfile + foreach (Smarty::$_muted_directories as $key => &$dir) { + if (!$dir) { + // resolve directory and length for speedy comparisons + $file = realpath($key); + if ($file === false) { + // this directory does not exist, remove and skip it + unset(Smarty::$_muted_directories[ $key ]); + continue; + } + $dir = array('file' => $file, 'length' => strlen($file),); + } + if (!strncmp($errfile, $dir[ 'file' ], $dir[ 'length' ])) { + $_is_muted_directory = true; + break; + } + } + // pass to next error handler if this error did not occur inside SMARTY_DIR + // or the error was within smarty but masked to be ignored + if (!$_is_muted_directory || ($errno && $errno & error_reporting())) { + if (Smarty::$_previous_error_handler) { + return call_user_func(Smarty::$_previous_error_handler, $errno, $errstr, $errfile, $errline, + $errcontext); + } else { + return false; + } + } + return; + } + + /** + * Enable error handler to mute expected messages + * + * @return void + */ + public static function muteExpectedErrors() + { + /* + error muting is done because some people implemented custom error_handlers using + http://php.net/set_error_handler and for some reason did not understand the following paragraph: + + It is important to remember that the standard PHP error handler is completely bypassed for the + error types specified by error_types unless the callback function returns FALSE. + error_reporting() settings will have no effect and your error handler will be called regardless - + however you are still able to read the current value of error_reporting and act appropriately. + Of particular note is that this value will be 0 if the statement that caused the error was + prepended by the @ error-control operator. + + Smarty deliberately uses @filemtime() over file_exists() and filemtime() in some places. Reasons include + - @filemtime() is almost twice as fast as using an additional file_exists() + - between file_exists() and filemtime() a possible race condition is opened, + which does not exist using the simple @filemtime() approach. + */ + $error_handler = array('Smarty', 'mutingErrorHandler'); + $previous = set_error_handler($error_handler); + + // avoid dead loops + if ($previous !== $error_handler) { + Smarty::$_previous_error_handler = $previous; + } + } + + /** + * Disable error handler muting expected messages + * + * @return void + */ + public static function unmuteExpectedErrors() + { + restore_error_handler(); + } +} diff --git a/conlite/plugins/smarty/libs/SmartyBC.class.php b/conlite/plugins/smarty/libs/SmartyBC.class.php new file mode 100644 index 0000000..2f3b5f1 --- /dev/null +++ b/conlite/plugins/smarty/libs/SmartyBC.class.php @@ -0,0 +1,455 @@ + + * @author Uwe Tews + * @author Rodney Rehm + * @package Smarty + */ +/** + * @ignore + */ +require_once(dirname(__FILE__) . '/Smarty.class.php'); + +/** + * Smarty Backward Compatibility Wrapper Class + * + * @package Smarty + */ +class SmartyBC extends Smarty +{ + /** + * Smarty 2 BC + * + * @var string + */ + public $_version = self::SMARTY_VERSION; + + /** + * This is an array of directories where trusted php scripts reside. + * + * @var array + */ + public $trusted_dir = array(); + + /** + * Initialize new SmartyBC object + * + */ + public function __construct() + { + parent::__construct(); + } + + /** + * wrapper for assign_by_ref + * + * @param string $tpl_var the template variable name + * @param mixed &$value the referenced value to assign + */ + public function assign_by_ref($tpl_var, &$value) + { + $this->assignByRef($tpl_var, $value); + } + + /** + * wrapper for append_by_ref + * + * @param string $tpl_var the template variable name + * @param mixed &$value the referenced value to append + * @param boolean $merge flag if array elements shall be merged + */ + public function append_by_ref($tpl_var, &$value, $merge = false) + { + $this->appendByRef($tpl_var, $value, $merge); + } + + /** + * clear the given assigned template variable. + * + * @param string $tpl_var the template variable to clear + */ + public function clear_assign($tpl_var) + { + $this->clearAssign($tpl_var); + } + + /** + * Registers custom function to be used in templates + * + * @param string $function the name of the template function + * @param string $function_impl the name of the PHP function to register + * @param bool $cacheable + * @param mixed $cache_attrs + */ + public function register_function($function, $function_impl, $cacheable = true, $cache_attrs = null) + { + $this->registerPlugin('function', $function, $function_impl, $cacheable, $cache_attrs); + } + + /** + * Unregister custom function + * + * @param string $function name of template function + */ + public function unregister_function($function) + { + $this->unregisterPlugin('function', $function); + } + + /** + * Registers object to be used in templates + * + * @param string $object name of template object + * @param object $object_impl the referenced PHP object to register + * @param array $allowed list of allowed methods (empty = all) + * @param boolean $smarty_args smarty argument format, else traditional + * @param array $block_methods list of methods that are block format + * + * @throws SmartyException + * @internal param array $block_functs list of methods that are block format + */ + public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, + $block_methods = array()) + { + settype($allowed, 'array'); + settype($smarty_args, 'boolean'); + $this->registerObject($object, $object_impl, $allowed, $smarty_args, $block_methods); + } + + /** + * Unregister object + * + * @param string $object name of template object + */ + public function unregister_object($object) + { + $this->unregisterObject($object); + } + + /** + * Registers block function to be used in templates + * + * @param string $block name of template block + * @param string $block_impl PHP function to register + * @param bool $cacheable + * @param mixed $cache_attrs + */ + public function register_block($block, $block_impl, $cacheable = true, $cache_attrs = null) + { + $this->registerPlugin('block', $block, $block_impl, $cacheable, $cache_attrs); + } + + /** + * Unregister block function + * + * @param string $block name of template function + */ + public function unregister_block($block) + { + $this->unregisterPlugin('block', $block); + } + + /** + * Registers compiler function + * + * @param string $function name of template function + * @param string $function_impl name of PHP function to register + * @param bool $cacheable + */ + public function register_compiler_function($function, $function_impl, $cacheable = true) + { + $this->registerPlugin('compiler', $function, $function_impl, $cacheable); + } + + /** + * Unregister compiler function + * + * @param string $function name of template function + */ + public function unregister_compiler_function($function) + { + $this->unregisterPlugin('compiler', $function); + } + + /** + * Registers modifier to be used in templates + * + * @param string $modifier name of template modifier + * @param string $modifier_impl name of PHP function to register + */ + public function register_modifier($modifier, $modifier_impl) + { + $this->registerPlugin('modifier', $modifier, $modifier_impl); + } + + /** + * Unregister modifier + * + * @param string $modifier name of template modifier + */ + public function unregister_modifier($modifier) + { + $this->unregisterPlugin('modifier', $modifier); + } + + /** + * Registers a resource to fetch a template + * + * @param string $type name of resource + * @param array $functions array of functions to handle resource + */ + public function register_resource($type, $functions) + { + $this->registerResource($type, $functions); + } + + /** + * Unregister a resource + * + * @param string $type name of resource + */ + public function unregister_resource($type) + { + $this->unregisterResource($type); + } + + /** + * Registers a prefilter function to apply + * to a template before compiling + * + * @param callable $function + */ + public function register_prefilter($function) + { + $this->registerFilter('pre', $function); + } + + /** + * Unregister a prefilter function + * + * @param callable $function + */ + public function unregister_prefilter($function) + { + $this->unregisterFilter('pre', $function); + } + + /** + * Registers a postfilter function to apply + * to a compiled template after compilation + * + * @param callable $function + */ + public function register_postfilter($function) + { + $this->registerFilter('post', $function); + } + + /** + * Unregister a postfilter function + * + * @param callable $function + */ + public function unregister_postfilter($function) + { + $this->unregisterFilter('post', $function); + } + + /** + * Registers an output filter function to apply + * to a template output + * + * @param callable $function + */ + public function register_outputfilter($function) + { + $this->registerFilter('output', $function); + } + + /** + * Unregister an outputfilter function + * + * @param callable $function + */ + public function unregister_outputfilter($function) + { + $this->unregisterFilter('output', $function); + } + + /** + * load a filter of specified type and name + * + * @param string $type filter type + * @param string $name filter name + */ + public function load_filter($type, $name) + { + $this->loadFilter($type, $name); + } + + /** + * clear cached content for the given template and cache id + * + * @param string $tpl_file name of template file + * @param string $cache_id name of cache_id + * @param string $compile_id name of compile_id + * @param string $exp_time expiration time + * + * @return boolean + */ + public function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null) + { + return $this->clearCache($tpl_file, $cache_id, $compile_id, $exp_time); + } + + /** + * clear the entire contents of cache (all templates) + * + * @param string $exp_time expire time + * + * @return boolean + */ + public function clear_all_cache($exp_time = null) + { + return $this->clearCache(null, null, null, $exp_time); + } + + /** + * test to see if valid cache exists for this template + * + * @param string $tpl_file name of template file + * @param string $cache_id + * @param string $compile_id + * + * @return boolean + */ + public function is_cached($tpl_file, $cache_id = null, $compile_id = null) + { + return $this->isCached($tpl_file, $cache_id, $compile_id); + } + + /** + * clear all the assigned template variables. + */ + public function clear_all_assign() + { + $this->clearAllAssign(); + } + + /** + * clears compiled version of specified template resource, + * or all compiled template files if one is not specified. + * This function is for advanced use only, not normally needed. + * + * @param string $tpl_file + * @param string $compile_id + * @param string $exp_time + * + * @return boolean results of {@link smarty_core_rm_auto()} + */ + public function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null) + { + return $this->clearCompiledTemplate($tpl_file, $compile_id, $exp_time); + } + + /** + * Checks whether requested template exists. + * + * @param string $tpl_file + * + * @return boolean + */ + public function template_exists($tpl_file) + { + return $this->templateExists($tpl_file); + } + + /** + * Returns an array containing template variables + * + * @param string $name + * + * @return array + */ + public function get_template_vars($name = null) + { + return $this->getTemplateVars($name); + } + + /** + * Returns an array containing config variables + * + * @param string $name + * + * @return array + */ + public function get_config_vars($name = null) + { + return $this->getConfigVars($name); + } + + /** + * load configuration values + * + * @param string $file + * @param string $section + * @param string $scope + */ + public function config_load($file, $section = null, $scope = 'global') + { + $this->ConfigLoad($file, $section, $scope); + } + + /** + * return a reference to a registered object + * + * @param string $name + * + * @return object + */ + public function get_registered_object($name) + { + return $this->getRegisteredObject($name); + } + + /** + * clear configuration values + * + * @param string $var + */ + public function clear_config($var = null) + { + $this->clearConfig($var); + } + + /** + * trigger Smarty error + * + * @param string $error_msg + * @param integer $error_type + */ + public function trigger_error($error_msg, $error_type = E_USER_WARNING) + { + trigger_error("Smarty error: $error_msg", $error_type); + } +} diff --git a/conlite/plugins/smarty/libs/bootstrap.php b/conlite/plugins/smarty/libs/bootstrap.php new file mode 100644 index 0000000..dad72fc --- /dev/null +++ b/conlite/plugins/smarty/libs/bootstrap.php @@ -0,0 +1,17 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/* + * Load and register Smarty Autoloader + */ +if (!class_exists('Smarty_Autoloader')) { + require dirname(__FILE__) . '/Autoloader.php'; +} +Smarty_Autoloader::register(true); diff --git a/conlite/plugins/smarty/libs/debug.tpl b/conlite/plugins/smarty/libs/debug.tpl new file mode 100644 index 0000000..5526cbc --- /dev/null +++ b/conlite/plugins/smarty/libs/debug.tpl @@ -0,0 +1,160 @@ +{capture name='_smarty_debug' assign=debug_output} + + + + Smarty Debug Console + + + + +

Smarty {Smarty::SMARTY_VERSION} Debug Console + - {if isset($template_name)}{$template_name|debug_print_var nofilter} {/if}{if !empty($template_data)}Total Time {$execution_time|string_format:"%.5f"}{/if}

+ + {if !empty($template_data)} +

included templates & config files (load time in seconds)

+
+ {foreach $template_data as $template} + {$template.name} +
   + (compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"}) + +
+ {/foreach} +
+ {/if} + +

assigned template variables

+ + + {foreach $assigned_vars as $vars} + + + + + {/foreach} +

${$vars@key}

+ {if isset($vars['nocache'])}Nocache
{/if} + {if isset($vars['scope'])}Origin: {$vars['scope']|debug_print_var nofilter}{/if} +

Value

{$vars['value']|debug_print_var:10:80 nofilter}
{if isset($vars['attributes'])}

Attributes

{$vars['attributes']|debug_print_var nofilter} {/if}
+ +

assigned config file variables

+ + + {foreach $config_vars as $vars} + + + + + {/foreach} + +

#{$vars@key}#

+ {if isset($vars['scope'])}Origin: {$vars['scope']|debug_print_var nofilter}{/if} +
{$vars['value']|debug_print_var:10:80 nofilter}
+ + +{/capture} + diff --git a/conlite/plugins/smarty/libs/plugins/block.textformat.php b/conlite/plugins/smarty/libs/plugins/block.textformat.php new file mode 100644 index 0000000..1e5c0fe --- /dev/null +++ b/conlite/plugins/smarty/libs/plugins/block.textformat.php @@ -0,0 +1,120 @@ + + * Name: textformat
+ * Purpose: format text a certain way with preset styles + * or custom wrap/indent settings
+ * Params: + *
+ * - style         - string (email)
+ * - indent        - integer (0)
+ * - wrap          - integer (80)
+ * - wrap_char     - string ("\n")
+ * - indent_char   - string (" ")
+ * - wrap_boundary - boolean (true)
+ * 
+ * + * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat} + * (Smarty online manual) + * + * @param array $params parameters + * @param string $content contents of the block + * @param Smarty_Internal_Template $template template object + * @param boolean &$repeat repeat flag + * + * @return string content re-formatted + * @author Monte Ohrt + */ +function smarty_block_textformat($params, $content, $template, &$repeat) +{ + static $mb_wordwrap_loaded = false; + if (is_null($content)) { + return; + } + if (Smarty::$_MBSTRING && !$mb_wordwrap_loaded) { + if (!is_callable('smarty_modifier_mb_wordwrap')) { + require_once(SMARTY_PLUGINS_DIR . 'modifier.mb_wordwrap.php'); + } + $mb_wordwrap_loaded = true; + } + + $style = null; + $indent = 0; + $indent_first = 0; + $indent_char = ' '; + $wrap = 80; + $wrap_char = "\n"; + $wrap_cut = false; + $assign = null; + + foreach ($params as $_key => $_val) { + switch ($_key) { + case 'style': + case 'indent_char': + case 'wrap_char': + case 'assign': + $$_key = (string) $_val; + break; + + case 'indent': + case 'indent_first': + case 'wrap': + $$_key = (int) $_val; + break; + + case 'wrap_cut': + $$_key = (bool) $_val; + break; + + default: + trigger_error("textformat: unknown attribute '$_key'"); + } + } + + if ($style == 'email') { + $wrap = 72; + } + // split into paragraphs + $_paragraphs = preg_split('![\r\n]{2}!', $content); + + foreach ($_paragraphs as &$_paragraph) { + if (!$_paragraph) { + continue; + } + // convert mult. spaces & special chars to single space + $_paragraph = + preg_replace(array('!\s+!' . Smarty::$_UTF8_MODIFIER, + '!(^\s+)|(\s+$)!' . Smarty::$_UTF8_MODIFIER), + array(' ', + ''), $_paragraph); + // indent first line + if ($indent_first > 0) { + $_paragraph = str_repeat($indent_char, $indent_first) . $_paragraph; + } + // wordwrap sentences + if (Smarty::$_MBSTRING) { + $_paragraph = smarty_modifier_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); + } else { + $_paragraph = wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); + } + // indent lines + if ($indent > 0) { + $_paragraph = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraph); + } + } + $_output = implode($wrap_char . $wrap_char, $_paragraphs); + + if ($assign) { + $template->assign($assign, $_output); + } else { + return $_output; + } +} diff --git a/conlite/plugins/smarty/libs/plugins/function.counter.php b/conlite/plugins/smarty/libs/plugins/function.counter.php new file mode 100644 index 0000000..bcc8f49 --- /dev/null +++ b/conlite/plugins/smarty/libs/plugins/function.counter.php @@ -0,0 +1,73 @@ + + * Name: counter
+ * Purpose: print out a counter value + * + * @author Monte Ohrt + * @link http://www.smarty.net/manual/en/language.function.counter.php {counter} + * (Smarty online manual) + * + * @param array $params parameters + * @param Smarty_Internal_Template $template template object + * + * @return string|null + */ +function smarty_function_counter($params, $template) +{ + static $counters = array(); + + $name = (isset($params[ 'name' ])) ? $params[ 'name' ] : 'default'; + if (!isset($counters[ $name ])) { + $counters[ $name ] = array('start' => 1, 'skip' => 1, 'direction' => 'up', 'count' => 1); + } + $counter =& $counters[ $name ]; + + if (isset($params[ 'start' ])) { + $counter[ 'start' ] = $counter[ 'count' ] = (int) $params[ 'start' ]; + } + + if (!empty($params[ 'assign' ])) { + $counter[ 'assign' ] = $params[ 'assign' ]; + } + + if (isset($counter[ 'assign' ])) { + $template->assign($counter[ 'assign' ], $counter[ 'count' ]); + } + + if (isset($params[ 'print' ])) { + $print = (bool) $params[ 'print' ]; + } else { + $print = empty($counter[ 'assign' ]); + } + + if ($print) { + $retval = $counter[ 'count' ]; + } else { + $retval = null; + } + + if (isset($params[ 'skip' ])) { + $counter[ 'skip' ] = $params[ 'skip' ]; + } + + if (isset($params[ 'direction' ])) { + $counter[ 'direction' ] = $params[ 'direction' ]; + } + + if ($counter[ 'direction' ] == "down") { + $counter[ 'count' ] -= $counter[ 'skip' ]; + } else { + $counter[ 'count' ] += $counter[ 'skip' ]; + } + + return $retval; +} diff --git a/conlite/plugins/smarty/libs/plugins/function.cycle.php b/conlite/plugins/smarty/libs/plugins/function.cycle.php new file mode 100644 index 0000000..a76d49a --- /dev/null +++ b/conlite/plugins/smarty/libs/plugins/function.cycle.php @@ -0,0 +1,105 @@ + + * Name: cycle
+ * Date: May 3, 2002
+ * Purpose: cycle through given values
+ * Params: + *
+ * - name      - name of cycle (optional)
+ * - values    - comma separated list of values to cycle, or an array of values to cycle
+ *               (this can be left out for subsequent calls)
+ * - reset     - boolean - resets given var to true
+ * - print     - boolean - print var or not. default is true
+ * - advance   - boolean - whether or not to advance the cycle
+ * - delimiter - the value delimiter, default is ","
+ * - assign    - boolean, assigns to template var instead of printed.
+ * 
+ * Examples:
+ *
+ * {cycle values="#eeeeee,#d0d0d0d"}
+ * {cycle name=row values="one,two,three" reset=true}
+ * {cycle name=row}
+ * 
+ * + * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle} + * (Smarty online manual) + * @author Monte Ohrt + * @author credit to Mark Priatel + * @author credit to Gerard + * @author credit to Jason Sweat + * @version 1.3 + * + * @param array $params parameters + * @param Smarty_Internal_Template $template template object + * + * @return string|null + */ + +function smarty_function_cycle($params, $template) +{ + static $cycle_vars; + + $name = (empty($params[ 'name' ])) ? 'default' : $params[ 'name' ]; + $print = (isset($params[ 'print' ])) ? (bool) $params[ 'print' ] : true; + $advance = (isset($params[ 'advance' ])) ? (bool) $params[ 'advance' ] : true; + $reset = (isset($params[ 'reset' ])) ? (bool) $params[ 'reset' ] : false; + + if (!isset($params[ 'values' ])) { + if (!isset($cycle_vars[ $name ][ 'values' ])) { + trigger_error("cycle: missing 'values' parameter"); + + return; + } + } else { + if (isset($cycle_vars[ $name ][ 'values' ]) && $cycle_vars[ $name ][ 'values' ] != $params[ 'values' ]) { + $cycle_vars[ $name ][ 'index' ] = 0; + } + $cycle_vars[ $name ][ 'values' ] = $params[ 'values' ]; + } + + if (isset($params[ 'delimiter' ])) { + $cycle_vars[ $name ][ 'delimiter' ] = $params[ 'delimiter' ]; + } elseif (!isset($cycle_vars[ $name ][ 'delimiter' ])) { + $cycle_vars[ $name ][ 'delimiter' ] = ','; + } + + if (is_array($cycle_vars[ $name ][ 'values' ])) { + $cycle_array = $cycle_vars[ $name ][ 'values' ]; + } else { + $cycle_array = explode($cycle_vars[ $name ][ 'delimiter' ], $cycle_vars[ $name ][ 'values' ]); + } + + if (!isset($cycle_vars[ $name ][ 'index' ]) || $reset) { + $cycle_vars[ $name ][ 'index' ] = 0; + } + + if (isset($params[ 'assign' ])) { + $print = false; + $template->assign($params[ 'assign' ], $cycle_array[ $cycle_vars[ $name ][ 'index' ] ]); + } + + if ($print) { + $retval = $cycle_array[ $cycle_vars[ $name ][ 'index' ] ]; + } else { + $retval = null; + } + + if ($advance) { + if ($cycle_vars[ $name ][ 'index' ] >= count($cycle_array) - 1) { + $cycle_vars[ $name ][ 'index' ] = 0; + } else { + $cycle_vars[ $name ][ 'index' ] ++; + } + } + + return $retval; +} diff --git a/conlite/plugins/smarty/libs/plugins/function.fetch.php b/conlite/plugins/smarty/libs/plugins/function.fetch.php new file mode 100644 index 0000000..cb60dd9 --- /dev/null +++ b/conlite/plugins/smarty/libs/plugins/function.fetch.php @@ -0,0 +1,221 @@ + + * Name: fetch
+ * Purpose: fetch file, web or ftp data and display results + * + * @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch} + * (Smarty online manual) + * @author Monte Ohrt + * + * @param array $params parameters + * @param Smarty_Internal_Template $template template object + * + * @throws SmartyException + * @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable + */ +function smarty_function_fetch($params, $template) +{ + if (empty($params[ 'file' ])) { + trigger_error("[plugin] fetch parameter 'file' cannot be empty", E_USER_NOTICE); + + return; + } + + // strip file protocol + if (stripos($params[ 'file' ], 'file://') === 0) { + $params[ 'file' ] = substr($params[ 'file' ], 7); + } + + $protocol = strpos($params[ 'file' ], '://'); + if ($protocol !== false) { + $protocol = strtolower(substr($params[ 'file' ], 0, $protocol)); + } + + if (isset($template->smarty->security_policy)) { + if ($protocol) { + // remote resource (or php stream, …) + if (!$template->smarty->security_policy->isTrustedUri($params[ 'file' ])) { + return; + } + } else { + // local file + if (!$template->smarty->security_policy->isTrustedResourceDir($params[ 'file' ])) { + return; + } + } + } + + $content = ''; + if ($protocol == 'http') { + // http fetch + if ($uri_parts = parse_url($params[ 'file' ])) { + // set defaults + $host = $server_name = $uri_parts[ 'host' ]; + $timeout = 30; + $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; + $agent = "Smarty Template Engine " . Smarty::SMARTY_VERSION; + $referer = ""; + $uri = !empty($uri_parts[ 'path' ]) ? $uri_parts[ 'path' ] : '/'; + $uri .= !empty($uri_parts[ 'query' ]) ? '?' . $uri_parts[ 'query' ] : ''; + $_is_proxy = false; + if (empty($uri_parts[ 'port' ])) { + $port = 80; + } else { + $port = $uri_parts[ 'port' ]; + } + if (!empty($uri_parts[ 'user' ])) { + $user = $uri_parts[ 'user' ]; + } + if (!empty($uri_parts[ 'pass' ])) { + $pass = $uri_parts[ 'pass' ]; + } + // loop through parameters, setup headers + foreach ($params as $param_key => $param_value) { + switch ($param_key) { + case "file": + case "assign": + case "assign_headers": + break; + case "user": + if (!empty($param_value)) { + $user = $param_value; + } + break; + case "pass": + if (!empty($param_value)) { + $pass = $param_value; + } + break; + case "accept": + if (!empty($param_value)) { + $accept = $param_value; + } + break; + case "header": + if (!empty($param_value)) { + if (!preg_match('![\w\d-]+: .+!', $param_value)) { + trigger_error("[plugin] invalid header format '" . $param_value . "'", E_USER_NOTICE); + + return; + } else { + $extra_headers[] = $param_value; + } + } + break; + case "proxy_host": + if (!empty($param_value)) { + $proxy_host = $param_value; + } + break; + case "proxy_port": + if (!preg_match('!\D!', $param_value)) { + $proxy_port = (int) $param_value; + } else { + trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE); + + return; + } + break; + case "agent": + if (!empty($param_value)) { + $agent = $param_value; + } + break; + case "referer": + if (!empty($param_value)) { + $referer = $param_value; + } + break; + case "timeout": + if (!preg_match('!\D!', $param_value)) { + $timeout = (int) $param_value; + } else { + trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE); + + return; + } + break; + default: + trigger_error("[plugin] unrecognized attribute '" . $param_key . "'", E_USER_NOTICE); + + return; + } + } + if (!empty($proxy_host) && !empty($proxy_port)) { + $_is_proxy = true; + $fp = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout); + } else { + $fp = fsockopen($server_name, $port, $errno, $errstr, $timeout); + } + + if (!$fp) { + trigger_error("[plugin] unable to fetch: $errstr ($errno)", E_USER_NOTICE); + + return; + } else { + if ($_is_proxy) { + fputs($fp, 'GET ' . $params[ 'file' ] . " HTTP/1.0\r\n"); + } else { + fputs($fp, "GET $uri HTTP/1.0\r\n"); + } + if (!empty($host)) { + fputs($fp, "Host: $host\r\n"); + } + if (!empty($accept)) { + fputs($fp, "Accept: $accept\r\n"); + } + if (!empty($agent)) { + fputs($fp, "User-Agent: $agent\r\n"); + } + if (!empty($referer)) { + fputs($fp, "Referer: $referer\r\n"); + } + if (isset($extra_headers) && is_array($extra_headers)) { + foreach ($extra_headers as $curr_header) { + fputs($fp, $curr_header . "\r\n"); + } + } + if (!empty($user) && !empty($pass)) { + fputs($fp, "Authorization: BASIC " . base64_encode("$user:$pass") . "\r\n"); + } + + fputs($fp, "\r\n"); + while (!feof($fp)) { + $content .= fgets($fp, 4096); + } + fclose($fp); + $csplit = preg_split("!\r\n\r\n!", $content, 2); + + $content = $csplit[ 1 ]; + + if (!empty($params[ 'assign_headers' ])) { + $template->assign($params[ 'assign_headers' ], preg_split("!\r\n!", $csplit[ 0 ])); + } + } + } else { + trigger_error("[plugin fetch] unable to parse URL, check syntax", E_USER_NOTICE); + + return; + } + } else { + $content = @file_get_contents($params[ 'file' ]); + if ($content === false) { + throw new SmartyException("{fetch} cannot read resource '" . $params[ 'file' ] . "'"); + } + } + + if (!empty($params[ 'assign' ])) { + $template->assign($params[ 'assign' ], $content); + } else { + return $content; + } +} diff --git a/conlite/plugins/smarty/libs/plugins/function.html_checkboxes.php b/conlite/plugins/smarty/libs/plugins/function.html_checkboxes.php new file mode 100644 index 0000000..84b8456 --- /dev/null +++ b/conlite/plugins/smarty/libs/plugins/function.html_checkboxes.php @@ -0,0 +1,252 @@ + + * Type: function
+ * Name: html_checkboxes
+ * Date: 24.Feb.2003
+ * Purpose: Prints out a list of checkbox input types
+ * Examples: + *
+ * {html_checkboxes values=$ids output=$names}
+ * {html_checkboxes values=$ids name='box' separator='
' output=$names} + * {html_checkboxes values=$ids checked=$checked separator='
' output=$names} + *
+ * Params: + *
+ * - name       (optional) - string default "checkbox"
+ * - values     (required) - array
+ * - options    (optional) - associative array
+ * - checked    (optional) - array default not set
+ * - separator  (optional) - ie 
or   + * - output (optional) - the output next to each checkbox + * - assign (optional) - assign the output as an array to this variable + * - escape (optional) - escape the content (not value), defaults to true + *
+ * + * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} + * (Smarty online manual) + * @author Christopher Kvarme + * @author credits to Monte Ohrt + * @version 1.0 + * + * @param array $params parameters + * @param object $template template object + * + * @return string + * @uses smarty_function_escape_special_chars() + */ +function smarty_function_html_checkboxes($params, $template) +{ + if (!isset($template->smarty->_cache[ '_required_sesc' ])) { + require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + $template->smarty->_cache[ '_required_sesc' ] = true; + } + + $name = 'checkbox'; + $values = null; + $options = null; + $selected = array(); + $separator = ''; + $escape = true; + $labels = true; + $label_ids = false; + $output = null; + + $extra = ''; + + foreach ($params as $_key => $_val) { + switch ($_key) { + case 'name': + case 'separator': + $$_key = (string) $_val; + break; + + case 'escape': + case 'labels': + case 'label_ids': + $$_key = (bool) $_val; + break; + + case 'options': + $$_key = (array) $_val; + break; + + case 'values': + case 'output': + $$_key = array_values((array) $_val); + break; + + case 'checked': + case 'selected': + if (is_array($_val)) { + $selected = array(); + foreach ($_val as $_sel) { + if (is_object($_sel)) { + if (method_exists($_sel, "__toString")) { + $_sel = smarty_function_escape_special_chars((string) $_sel->__toString()); + } else { + trigger_error("html_checkboxes: selected attribute contains an object of class '" . + get_class($_sel) . "' without __toString() method", E_USER_NOTICE); + continue; + } + } else { + $_sel = smarty_function_escape_special_chars((string) $_sel); + } + $selected[ $_sel ] = true; + } + } elseif (is_object($_val)) { + if (method_exists($_val, "__toString")) { + $selected = smarty_function_escape_special_chars((string) $_val->__toString()); + } else { + trigger_error("html_checkboxes: selected attribute is an object of class '" . get_class($_val) . + "' without __toString() method", E_USER_NOTICE); + } + } else { + $selected = smarty_function_escape_special_chars((string) $_val); + } + break; + + case 'checkboxes': + trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', + E_USER_WARNING); + $options = (array) $_val; + break; + + case 'assign': + break; + + case 'strict': + break; + + case 'disabled': + case 'readonly': + if (!empty($params[ 'strict' ])) { + if (!is_scalar($_val)) { + trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", + E_USER_NOTICE); + } + + if ($_val === true || $_val === $_key) { + $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"'; + } + + break; + } + // omit break; to fall through! + + default: + if (!is_array($_val)) { + $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; + } else { + trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + } + } + + if (!isset($options) && !isset($values)) { + return ''; + } /* raise error here? */ + + $_html_result = array(); + + if (isset($options)) { + foreach ($options as $_key => $_val) { + $_html_result[] = + smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, + $label_ids, $escape); + } + } else { + foreach ($values as $_i => $_key) { + $_val = isset($output[ $_i ]) ? $output[ $_i ] : ''; + $_html_result[] = + smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, + $label_ids, $escape); + } + } + + if (!empty($params[ 'assign' ])) { + $template->assign($params[ 'assign' ], $_html_result); + } else { + return implode("\n", $_html_result); + } +} + +function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, + $label_ids, $escape = true) +{ + $_output = ''; + + if (is_object($value)) { + if (method_exists($value, "__toString")) { + $value = (string) $value->__toString(); + } else { + trigger_error("html_options: value is an object of class '" . get_class($value) . + "' without __toString() method", E_USER_NOTICE); + + return ''; + } + } else { + $value = (string) $value; + } + + if (is_object($output)) { + if (method_exists($output, "__toString")) { + $output = (string) $output->__toString(); + } else { + trigger_error("html_options: output is an object of class '" . get_class($output) . + "' without __toString() method", E_USER_NOTICE); + + return ''; + } + } else { + $output = (string) $output; + } + + if ($labels) { + if ($label_ids) { + $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', + $name . '_' . $value)); + $_output .= '