From 1044fa8ccbf600dd605f5b27f0fd1b7db1ce6cad Mon Sep 17 00:00:00 2001 From: Michael Erdely Date: Fri, 18 Oct 2024 22:07:51 -0400 Subject: [PATCH] So many changes... I wanted to do this piece by piece, but once I got started, I couldn't stop: Update Smarty Update bootstrap Switch to using cards Set up themes Improve sorting (add direction) Use modals for viewing, editing, adding items. Add Help page Add bookmarklet Add footer --- .gitignore | 2 +- src/admin.php | 59 +- src/categories.php | 47 +- .../{phpgiftrec.css => phpgiftrec.old.css} | 0 src/css/phpgiftreg.css | 20 + src/event.php | 35 +- src/families.php | 55 +- src/forgot.php | 10 +- src/help.php | 45 +- src/images/arrow-down-dark.png | Bin 0 -> 4726 bytes .../{arrow-down.png => arrow-down-light.png} | Bin src/images/arrow-up-dark.png | Bin 0 -> 4735 bytes .../{arrow-up.png => arrow-up-light.png} | Bin src/images/bin-dark.png | Bin 0 -> 4573 bytes src/images/{bin.png => bin-light.png} | Bin src/images/caret-ASC-dark.png | Bin 0 -> 701 bytes src/images/caret-ASC-light.png | Bin 0 -> 698 bytes src/images/caret-DESC-dark.png | Bin 0 -> 718 bytes src/images/caret-DESC-light.png | Bin 0 -> 724 bytes src/images/check2-dark.png | Bin 0 -> 687 bytes src/images/check2-light.png | Bin 0 -> 6151 bytes src/images/circle-half-dark.png | Bin 0 -> 854 bytes src/images/circle-half-light.png | Bin 0 -> 6301 bytes src/images/cloud-add-dark.png | Bin 0 -> 4730 bytes .../{cloud-add.png => cloud-add-light.png} | Bin src/images/credit-card-3-dark.png | Bin 0 -> 4567 bytes ...dit-card-3.png => credit-card-3-light.png} | Bin src/images/delete-dark.png | Bin 0 -> 4751 bytes src/images/{delete.png => delete-light.png} | Bin src/images/image-dark.png | Bin 0 -> 4651 bytes src/images/{image.png => image-light.png} | Bin src/images/key-dark.png | Bin 0 -> 4620 bytes src/images/key-fill-dark.png | Bin 0 -> 736 bytes src/images/key-fill-light.png | Bin 0 -> 6187 bytes src/images/{key.png => key-light.png} | Bin src/images/link-dark.png | Bin 0 -> 4729 bytes src/images/{link.png => link-light.png} | Bin src/images/locked-dark.png | Bin 0 -> 4579 bytes src/images/{locked.png => locked-light.png} | Bin src/images/moon-stars-fill-dark.png | Bin 0 -> 972 bytes src/images/moon-stars-fill-light.png | Bin 0 -> 6456 bytes src/images/pencil-dark.png | Bin 0 -> 4572 bytes src/images/{pencil.png => pencil-light.png} | Bin src/images/pencil-mwe.png | Bin 0 -> 1099 bytes src/images/person-circle-dark.png | Bin 0 -> 1013 bytes src/images/person-circle-light.png | Bin 0 -> 6473 bytes src/images/podcast-dark.png | Bin 0 -> 4795 bytes src/images/{podcast.png => podcast-light.png} | Bin src/images/return-dark.png | Bin 0 -> 4549 bytes src/images/{return.png => return-light.png} | Bin src/images/split-2-dark.png | Bin 0 -> 4577 bytes src/images/{split-2.png => split-2-light.png} | Bin src/images/store-dark.png | Bin 0 -> 4547 bytes src/images/{store.png => store-light.png} | Bin src/images/sun-fill-dark.png | Bin 0 -> 845 bytes src/images/sun-fill-light.png | Bin 0 -> 6341 bytes src/images/unlocked-dark.png | Bin 0 -> 4582 bytes .../{unlocked.png => unlocked-light.png} | Bin src/includes/MySmarty.class.php | 4 +- src/includes/config.php | 39 +- .../smarty-3.1.48/COMPOSER_RELEASE_NOTES.txt | 31 - .../INHERITANCE_RELEASE_NOTES.txt | 91 - src/includes/smarty-3.1.48/NEW_FEATURES.txt | 291 -- src/includes/smarty-3.1.48/README | 575 --- src/includes/smarty-3.1.48/README.md | 78 - src/includes/smarty-3.1.48/SECURITY.md | 19 - .../smarty-3.1.48/SMARTY_2_BC_NOTES.txt | 109 - .../smarty-3.1.48/SMARTY_3.0_BC_NOTES.txt | 24 - .../smarty-3.1.48/SMARTY_3.1_NOTES.txt | 306 -- .../demo/plugins/cacheresource.apc.php | 85 - .../demo/plugins/cacheresource.memcache.php | 99 - .../demo/plugins/cacheresource.mysql.php | 183 - .../demo/plugins/cacheresource.pdo.php | 346 -- .../demo/plugins/cacheresource.pdo_gzip.php | 42 - .../demo/plugins/resource.extendsall.php | 62 - .../demo/plugins/resource.mysql.php | 101 - .../demo/plugins/resource.mysqls.php | 77 - .../smarty-3.1.48/libs/Autoloader.php | 110 - .../smarty-3.1.48/libs/Smarty.class.php | 1424 ------- .../smarty-3.1.48/libs/SmartyBC.class.php | 477 --- src/includes/smarty-3.1.48/libs/bootstrap.php | 16 - .../libs/plugins/block.textformat.php | 121 - .../libs/plugins/function.counter.php | 62 - .../libs/plugins/function.cycle.php | 92 - .../libs/plugins/function.fetch.php | 204 - .../libs/plugins/function.html_checkboxes.php | 286 -- .../libs/plugins/function.html_image.php | 158 - .../libs/plugins/function.html_options.php | 230 -- .../libs/plugins/function.html_radios.php | 266 -- .../plugins/function.html_select_date.php | 395 -- .../plugins/function.html_select_time.php | 354 -- .../libs/plugins/function.html_table.php | 164 - .../libs/plugins/function.mailto.php | 147 - .../libs/plugins/function.math.php | 142 - .../libs/plugins/modifier.capitalize.php | 145 - .../libs/plugins/modifier.date_format.php | 85 - .../libs/plugins/modifier.debug_print_var.php | 103 - .../libs/plugins/modifier.escape.php | 262 -- .../libs/plugins/modifier.mb_wordwrap.php | 71 - .../libs/plugins/modifier.regex_replace.php | 55 - .../libs/plugins/modifier.replace.php | 37 - .../libs/plugins/modifier.spacify.php | 26 - .../libs/plugins/modifier.truncate.php | 62 - .../libs/plugins/modifiercompiler.cat.php | 28 - .../modifiercompiler.count_characters.php | 32 - .../modifiercompiler.count_paragraphs.php | 26 - .../modifiercompiler.count_sentences.php | 26 - .../plugins/modifiercompiler.count_words.php | 31 - .../libs/plugins/modifiercompiler.default.php | 32 - .../libs/plugins/modifiercompiler.escape.php | 115 - .../plugins/modifiercompiler.from_charset.php | 30 - .../libs/plugins/modifiercompiler.indent.php | 30 - .../libs/plugins/modifiercompiler.lower.php | 29 - .../libs/plugins/modifiercompiler.noprint.php | 20 - .../modifiercompiler.string_format.php | 24 - .../libs/plugins/modifiercompiler.strip.php | 30 - .../plugins/modifiercompiler.strip_tags.php | 28 - .../plugins/modifiercompiler.to_charset.php | 30 - .../plugins/modifiercompiler.unescape.php | 52 - .../libs/plugins/modifiercompiler.upper.php | 28 - .../plugins/modifiercompiler.wordwrap.php | 39 - .../plugins/outputfilter.trimwhitespace.php | 89 - .../plugins/shared.escape_special_chars.php | 32 - .../plugins/shared.literal_compiler_param.php | 35 - .../libs/plugins/shared.make_timestamp.php | 49 - .../libs/plugins/shared.mb_str_replace.php | 87 - .../libs/plugins/shared.mb_unicode.php | 51 - .../variablefilter.htmlspecialchars.php | 19 - .../libs/sysplugins/smarty_cacheresource.php | 219 - .../libs/sysplugins/smarty_data.php | 68 - .../smarty_internal_cacheresource_file.php | 239 -- .../smarty_internal_compile_assign.php | 96 - .../smarty_internal_compile_block.php | 189 - .../smarty_internal_compile_block_child.php | 24 - .../smarty_internal_compile_block_parent.php | 31 - .../smarty_internal_compile_break.php | 117 - .../smarty_internal_compile_call.php | 89 - .../smarty_internal_compile_capture.php | 105 - .../smarty_internal_compile_child.php | 79 - .../smarty_internal_compile_config_load.php | 96 - .../smarty_internal_compile_continue.php | 25 - .../smarty_internal_compile_debug.php | 40 - .../smarty_internal_compile_eval.php | 70 - .../smarty_internal_compile_extends.php | 158 - .../smarty_internal_compile_for.php | 164 - .../smarty_internal_compile_foreach.php | 343 -- .../smarty_internal_compile_function.php | 236 -- .../sysplugins/smarty_internal_compile_if.php | 207 - .../smarty_internal_compile_include.php | 347 -- .../smarty_internal_compile_include_php.php | 110 - .../smarty_internal_compile_insert.php | 157 - .../smarty_internal_compile_ldelim.php | 37 - .../smarty_internal_compile_make_nocache.php | 62 - .../smarty_internal_compile_nocache.php | 73 - .../smarty_internal_compile_parent.php | 31 - ..._internal_compile_private_block_plugin.php | 124 - ...nternal_compile_private_foreachsection.php | 228 -- ...ternal_compile_private_function_plugin.php | 78 - ...arty_internal_compile_private_modifier.php | 158 - ..._compile_private_object_block_function.php | 42 - ...ternal_compile_private_object_function.php | 85 - .../smarty_internal_compile_private_php.php | 253 -- ...ernal_compile_private_print_expression.php | 161 - ...ernal_compile_private_registered_block.php | 72 - ...al_compile_private_registered_function.php | 91 - ...ernal_compile_private_special_variable.php | 130 - .../smarty_internal_compile_rdelim.php | 34 - .../smarty_internal_compile_section.php | 462 --- .../smarty_internal_compile_setfilter.php | 68 - .../smarty_internal_compile_while.php | 100 - .../smarty_internal_compilebase.php | 203 - .../smarty_internal_config_file_compiler.php | 211 - .../smarty_internal_configfileparser.php | 1046 ----- .../libs/sysplugins/smarty_internal_data.php | 292 -- .../smarty_internal_errorhandler.php | 113 - .../smarty_internal_extension_handler.php | 197 - ...rty_internal_method_addautoloadfilters.php | 53 - ...ty_internal_method_adddefaultmodifiers.php | 42 - .../smarty_internal_method_append.php | 74 - .../smarty_internal_method_appendbyref.php | 49 - .../smarty_internal_method_assignbyref.php | 36 - .../smarty_internal_method_assignglobal.php | 44 - .../smarty_internal_method_clearallassign.php | 36 - .../smarty_internal_method_clearallcache.php | 41 - .../smarty_internal_method_clearassign.php | 43 - .../smarty_internal_method_clearcache.php | 50 - ..._internal_method_clearcompiledtemplate.php | 131 - .../smarty_internal_method_clearconfig.php | 41 - ...marty_internal_method_compileallconfig.php | 36 - ...ty_internal_method_compilealltemplates.php | 130 - .../smarty_internal_method_configload.php | 182 - .../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 | 50 - .../smarty_internal_method_gettags.php | 63 - ...smarty_internal_method_gettemplatevars.php | 119 - .../smarty_internal_method_literals.php | 100 - .../smarty_internal_method_loadfilter.php | 77 - .../smarty_internal_method_loadplugin.php | 111 - .../smarty_internal_method_mustcompile.php | 50 - ..._internal_method_registercacheresource.php | 42 - .../smarty_internal_method_registerclass.php | 46 - ...al_method_registerdefaultconfighandler.php | 42 - ...al_method_registerdefaultpluginhandler.php | 43 - ..._method_registerdefaulttemplatehandler.php | 88 - .../smarty_internal_method_registerfilter.php | 87 - .../smarty_internal_method_registerobject.php | 84 - .../smarty_internal_method_registerplugin.php | 58 - ...marty_internal_method_registerresource.php | 46 - ...rty_internal_method_setautoloadfilters.php | 72 - ...marty_internal_method_setdebugtemplate.php | 41 - ...ty_internal_method_setdefaultmodifiers.php | 38 - .../smarty_internal_method_unloadfilter.php | 43 - ...nternal_method_unregistercacheresource.php | 40 - ...marty_internal_method_unregisterfilter.php | 43 - ...marty_internal_method_unregisterobject.php | 40 - ...marty_internal_method_unregisterplugin.php | 41 - ...rty_internal_method_unregisterresource.php | 40 - .../smarty_internal_nocache_insert.php | 51 - .../sysplugins/smarty_internal_parsetree.php | 50 - .../smarty_internal_parsetree_template.php | 169 - .../smarty_internal_parsetree_text.php | 57 - .../smarty_internal_resource_file.php | 180 - .../smarty_internal_resource_php.php | 116 - .../smarty_internal_resource_registered.php | 101 - .../smarty_internal_resource_stream.php | 78 - .../smarty_internal_resource_string.php | 108 - .../smarty_internal_runtime_cachemodify.php | 68 - ...rty_internal_runtime_cacheresourcefile.php | 139 - .../smarty_internal_runtime_capture.php | 174 - .../smarty_internal_runtime_codeframe.php | 103 - .../smarty_internal_runtime_filterhandler.php | 69 - .../smarty_internal_runtime_foreach.php | 162 - ...smarty_internal_runtime_getincludepath.php | 181 - .../smarty_internal_runtime_inheritance.php | 251 -- .../smarty_internal_runtime_make_nocache.php | 54 - .../smarty_internal_runtime_tplfunction.php | 177 - .../smarty_internal_runtime_updatecache.php | 183 - .../smarty_internal_runtime_updatescope.php | 115 - .../smarty_internal_runtime_writefile.php | 100 - ...smarty_internal_smartytemplatecompiler.php | 184 - .../sysplugins/smarty_internal_template.php | 740 ---- .../smarty_internal_templatebase.php | 394 -- .../smarty_internal_templatecompilerbase.php | 1764 -------- .../smarty_internal_templateparser.php | 3627 ----------------- .../smarty_internal_testinstall.php | 609 --- .../sysplugins/smarty_internal_undefined.php | 67 - .../libs/sysplugins/smarty_resource.php | 262 -- .../sysplugins/smarty_resource_custom.php | 93 - .../sysplugins/smarty_resource_recompiled.php | 94 - .../sysplugins/smarty_resource_uncompiled.php | 49 - .../libs/sysplugins/smarty_security.php | 721 ---- .../sysplugins/smarty_template_cached.php | 257 -- .../sysplugins/smarty_template_compiled.php | 257 -- .../sysplugins/smarty_template_config.php | 100 - .../smarty_template_resource_base.php | 152 - .../sysplugins/smarty_template_source.php | 213 - .../sysplugins/smarty_undefined_variable.php | 33 - .../libs/sysplugins/smarty_variable.php | 47 - .../sysplugins/smartycompilerexception.php | 45 - .../libs/sysplugins/smartyexception.php | 19 - .../run-tests-for-all-php-versions.sh | 46 - src/includes/smarty-3.1.48/run-tests.sh | 13 - .../CHANGELOG.md | 237 +- src/includes/smarty-5.4.1/CONTRIBUTING.md | 119 + .../{smarty-3.1.48 => smarty-5.4.1}/LICENSE | 0 src/includes/smarty-5.4.1/Makefile | 19 + src/includes/smarty-5.4.1/README.md | 20 + src/includes/smarty-5.4.1/SECURITY.md | 20 + src/includes/smarty-5.4.1/TODO.txt | 32 + src/includes/smarty-5.4.1/changelog/.gitkeep | 0 .../composer.json | 25 +- .../demo/configs/test.conf | 0 .../demo/index.php | 8 +- .../demo/templates/footer.tpl | 0 .../demo/templates/header.tpl | 0 .../demo/templates/index.tpl | 2 - src/includes/smarty-5.4.1/docs/_config.yml | 1 + src/includes/smarty-5.4.1/docs/api/basics.md | 93 + .../smarty-5.4.1/docs/api/caching/basics.md | 184 + .../docs/api/caching/custom-storage-layers.md | 36 + .../caching/multiple-caches-per-template.md | 137 + .../smarty-5.4.1/docs/api/configuring.md | 225 + .../docs/api/extending/block-tags.md | 59 + .../docs/api/extending/extensions.md | 101 + .../docs/api/extending/introduction.md | 10 + .../docs/api/extending/modifiers.md | 27 + .../smarty-5.4.1/docs/api/extending/tags.md | 84 + .../docs/api/filters/output-filters.md | 35 + .../docs/api/filters/postfilters.md | 33 + .../docs/api/filters/prefilters.md | 26 + .../smarty-5.4.1/docs/api/inheritance.md | 130 + .../smarty-5.4.1/docs/api/rendering.md | 86 + .../smarty-5.4.1/docs/api/resources.md | 322 ++ .../smarty-5.4.1/docs/api/security.md | 119 + .../docs/api/variables/assigning.md | 139 + .../docs/api/variables/config-files.md | 88 + .../docs/api/variables/objects.md | 106 + .../api/variables/static-class-methods.md | 39 + .../docs/api/variables/streams.md | 16 + .../smarty-5.4.1/docs/appendixes/tips.md | 273 ++ .../docs/appendixes/troubleshooting.md | 104 + .../designers/chapter-debugging-console.md | 39 + .../docs/designers/config-files.md | 74 + .../designers/language-basic-syntax/index.md | 33 + .../language-escaping.md | 78 + .../language-syntax-attributes.md | 49 + .../language-syntax-comments.md | 69 + .../language-syntax-operators.md | 88 + .../language-syntax-quotes.md | 54 + .../language-syntax-tags.md | 39 + .../language-syntax-variables.md | 106 + .../designers/language-builtin-functions.md | 0 .../language-builtin-functions/index.md | 35 + .../language-function-append.md | 49 + .../language-function-assign.md | 148 + .../language-function-block.md | 201 + .../language-function-call.md | 77 + .../language-function-capture.md | 75 + .../language-function-config-load.md | 87 + .../language-function-debug.md | 17 + .../language-function-extends.md | 37 + .../language-function-for.md | 91 + .../language-function-foreach.md | 389 ++ .../language-function-function.md | 89 + .../language-function-if.md | 92 + .../language-function-include.md | 187 + .../language-function-insert.md | 0 .../language-function-ldelim.md | 51 + .../language-function-literal.md | 34 + .../language-function-nocache.md | 20 + .../language-function-section.md | 610 +++ .../language-function-setfilter.md | 43 + .../language-function-strip.md | 45 + .../language-function-while.md | 20 + .../designers/language-combining-modifiers.md | 32 + .../language-custom-functions/index.md | 19 + .../language-function-counter.md | 45 + .../language-function-cycle.md | 55 + .../language-function-debug.md | 14 + .../language-function-eval.md | 81 + .../language-function-fetch.md | 61 + .../language-function-html-checkboxes.md | 102 + .../language-function-html-image.md | 58 + .../language-function-html-options.md | 146 + .../language-function-html-radios.md | 104 + .../language-function-html-select-date.md | 118 + .../language-function-html-select-time.md | 100 + .../language-function-html-table.md | 93 + .../language-function-mailto.md | 61 + .../language-function-math.md | 99 + .../language-function-textformat.md | 182 + .../designers/language-modifiers/index.md | 104 + .../language-modifier-capitalize.md | 49 + .../language-modifier-cat.md | 36 + .../language-modifier-count-characters.md | 43 + .../language-modifier-count-paragraphs.md | 41 + .../language-modifier-count-sentences.md | 39 + .../language-modifier-count-words.md | 35 + .../language-modifier-count.md | 21 + .../language-modifier-date-format.md | 145 + .../language-modifier-debug-print-var.md | 26 + .../language-modifier-default.md | 45 + .../language-modifier-escape.md | 78 + .../language-modifier-from-charset.md | 20 + .../language-modifier-indent.md | 67 + .../language-modifier-is_array.md | 9 + .../language-modifier-isset.md | 11 + .../language-modifier-join.md | 26 + .../language-modifier-json-encode.md | 27 + .../language-modifier-lower.md | 34 + .../language-modifier-nl2br.md | 37 + .../language-modifier-noprint.md | 9 + .../language-modifier-number-format.md | 32 + .../language-modifier-raw.md | 8 + .../language-modifier-regex-replace.md | 55 + .../language-modifier-replace.md | 45 + .../language-modifier-round.md | 35 + .../language-modifier-spacify.md | 44 + .../language-modifier-split.md | 32 + .../language-modifier-str-repeat.md | 14 + .../language-modifier-string-format.md | 43 + .../language-modifier-strip-tags.md | 46 + .../language-modifier-strip.md | 42 + .../language-modifier-strlen.md | 9 + .../language-modifier-substr.md | 25 + .../language-modifier-to-charset.md | 20 + .../language-modifier-truncate.md | 57 + .../language-modifier-unescape.md | 43 + .../language-modifier-upper.md | 33 + .../language-modifier-wordwrap.md | 73 + .../designers/language-variables/index.md | 36 + .../language-assigned-variables.md | 126 + .../language-config-variables.md | 79 + .../language-variable-scopes.md | 60 + .../language-variables-smarty.md | 155 + src/includes/smarty-5.4.1/docs/features.md | 151 + .../smarty-5.4.1/docs/getting-started.md | 197 + .../smarty-5.4.1/docs/img/favicon.ico | Bin 0 -> 7782 bytes src/includes/smarty-5.4.1/docs/img/smarty.svg | 22 + src/includes/smarty-5.4.1/docs/index.md | 35 + src/includes/smarty-5.4.1/docs/philosophy.md | 107 + .../api-functions/add-extension.md | 0 .../api-functions/api-add-plugins-dir.md | 42 + .../programmers/api-functions/api-append.md | 60 + .../programmers/api-functions/api-assign.md | 83 + .../api-functions/api-clear-all-assign.md | 34 + .../api-functions/api-clear-all-cache.md | 37 + .../api-functions/api-clear-assign.md | 32 + .../api-functions/api-clear-cache.md | 60 + .../api-functions/api-clear-compiled-tpl.md | 44 + .../api-functions/api-clear-config.md | 35 + .../api-functions/api-compile-all-config.md | 61 + .../api-compile-all-templates.md | 71 + .../api-functions/api-config-load.md | 47 + .../api-functions/api-create-data.md | 52 + .../api-functions/api-create-template.md | 99 + .../api-functions/api-disable-security.md | 15 + .../programmers/api-functions/api-display.md | 84 + .../api-functions/api-enable-security.md | 41 + .../programmers/api-functions/api-fetch.md | 91 + .../api-functions/api-get-config-dir.md | 40 + .../api-functions/api-get-config-vars.md | 37 + .../api-functions/api-get-plugins-dir.md | 31 + .../api-get-registered-object.md | 36 + .../api-functions/api-get-template-vars.md | 37 + .../api-functions/api-is-cached.md | 81 + .../api-functions/api-load-filter.md | 41 + .../api-functions/api-mute-expected-errors.md | 21 + .../api-register-cacheresource.md | 40 + .../api-functions/api-register-class.md | 68 + .../api-register-default-plugin-handler.md | 93 + .../api-functions/api-register-filter.md | 44 + .../api-functions/api-register-object.md | 44 + .../api-functions/api-register-plugin.md | 110 + .../api-functions/api-register-resource.md | 46 + .../api-functions/api-set-plugins-dir.md | 46 + .../api-functions/api-test-install.md | 22 + .../api-unregister-cacheresource.md | 28 + .../api-functions/api-unregister-filter.md | 23 + .../api-functions/api-unregister-object.md | 17 + .../api-functions/api-unregister-plugin.md | 36 + .../api-functions/api-unregister-resource.md | 28 + .../api-variables/variable-auto-literal.md | 17 + .../api-variables/variable-cache-dir.md | 35 + .../api-variables/variable-cache-id.md | 11 + .../api-variables/variable-cache-lifetime.md | 30 + .../api-variables/variable-cache-locking.md | 11 + .../variable-cache-modified-check.md | 11 + .../api-variables/variable-caching-type.md | 9 + .../api-variables/variable-caching.md | 38 + .../api-variables/variable-compile-dir.md | 29 + .../api-variables/variable-compile-id.md | 44 + .../api-variables/variable-compile-locking.md | 7 + .../api-variables/variable-compiler-class.md | 6 + .../variable-config-booleanize.md | 8 + .../api-variables/variable-config-dir.md | 23 + .../variable-config-overwrite.md | 40 + .../variable-config-read-hidden.md | 8 + .../api-variables/variable-debug-template.md | 8 + .../api-variables/variable-debugging-ctrl.md | 20 + .../api-variables/variable-debugging.md | 17 + .../variable-default-config-handler-func.md | 50 + .../variable-default-config-type.md | 7 + .../variable-default-modifiers.md | 8 + .../variable-default-resource-type.md | 7 + .../variable-default-template-handler-func.md | 50 + .../api-variables/variable-error-reporting.md | 17 + .../api-variables/variable-escape-html.md | 21 + .../api-variables/variable-force-cache.md | 6 + .../api-variables/variable-force-compile.md | 9 + .../api-variables/variable-locking-timeout.md | 7 + .../variable-merge-compiled-includes.md | 27 + .../api-variables/variable-smarty-debug-id.md | 9 + .../api-variables/variable-template-dir.md | 26 + .../variable-use-include-path.md | 0 .../api-variables/variable-use-sub-dirs.md | 31 + src/includes/smarty-5.4.1/docs/upgrading.md | 157 + .../smarty-5.4.1/libs/Smarty.class.php | 42 + src/includes/smarty-5.4.1/mkdocs.yml | 157 + .../run-tests-for-all-php-versions.sh | 16 + src/includes/smarty-5.4.1/run-tests.sh | 10 + .../smarty-5.4.1/src/BlockHandler/Base.php | 19 + .../BlockHandler/BlockHandlerInterface.php | 10 + .../src/BlockHandler/BlockPluginWrapper.php | 19 + .../src/BlockHandler/TextFormat.php | 110 + .../smarty-5.4.1/src/Cacheresource/Base.php | 156 + .../src/Cacheresource/Custom.php} | 150 +- .../smarty-5.4.1/src/Cacheresource/File.php | 338 ++ .../src/Cacheresource/KeyValueStore.php} | 117 +- .../smarty-5.4.1/src/Compile/Base.php | 233 ++ .../src/Compile/BlockCompiler.php | 228 ++ .../src/Compile/CompilerInterface.php | 26 + .../Compile/DefaultHandlerBlockCompiler.php | 29 + .../DefaultHandlerFunctionCallCompiler.php | 47 + .../src/Compile/FunctionCallCompiler.php | 79 + .../src/Compile/Modifier/BCPluginWrapper.php | 19 + .../src/Compile/Modifier/Base.php | 49 + .../Compile/Modifier/CatModifierCompiler.php | 25 + .../CountCharactersModifierCompiler.php | 21 + .../CountParagraphsModifierCompiler.php | 19 + .../CountSentencesModifierCompiler.php | 19 + .../Modifier/CountWordsModifierCompiler.php | 20 + .../Modifier/DefaultModifierCompiler.php | 26 + .../Modifier/EmptyModifierCompiler.php | 19 + .../Modifier/EscapeModifierCompiler.php | 66 + .../Modifier/FromCharsetModifierCompiler.php | 21 + .../Modifier/IndentModifierCompiler.php | 24 + .../Modifier/IsArrayModifierCompiler.php | 19 + .../Modifier/IssetModifierCompiler.php | 25 + .../Modifier/JsonEncodeModifierCompiler.php | 14 + .../Modifier/LowerModifierCompiler.php | 19 + .../Modifier/ModifierCompilerInterface.php | 17 + .../Modifier/Nl2brModifierCompiler.php | 17 + .../Modifier/NoPrintModifierCompiler.php | 18 + .../Compile/Modifier/RawModifierCompiler.php | 21 + .../Modifier/RoundModifierCompiler.php | 18 + .../Modifier/StrRepeatModifierCompiler.php | 17 + .../Modifier/StringFormatModifierCompiler.php | 18 + .../Modifier/StripModifierCompiler.php | 24 + .../Modifier/StripTagsModifierCompiler.php | 22 + .../Modifier/StrlenModifierCompiler.php | 18 + .../Modifier/SubstrModifierCompiler.php | 15 + .../Modifier/ToCharsetModifierCompiler.php | 21 + .../Modifier/UnescapeModifierCompiler.php | 34 + .../Modifier/UpperModifierCompiler.php | 18 + .../Modifier/WordWrapModifierCompiler.php | 27 + .../src/Compile/ModifierCompiler.php | 95 + .../src/Compile/ObjectMethodBlockCompiler.php | 44 + .../src/Compile/ObjectMethodCallCompiler.php | 76 + .../src/Compile/PrintExpressionCompiler.php | 96 + .../src/Compile/SpecialVariableCompiler.php | 134 + .../src/Compile/Tag/Append.php} | 34 +- .../smarty-5.4.1/src/Compile/Tag/Assign.php | 95 + .../src/Compile/Tag/BCPluginWrapper.php | 31 + .../smarty-5.4.1/src/Compile/Tag/Block.php | 92 + .../src/Compile/Tag/BlockClose.php | 110 + .../smarty-5.4.1/src/Compile/Tag/BreakTag.php | 123 + .../smarty-5.4.1/src/Compile/Tag/Call.php | 81 + .../smarty-5.4.1/src/Compile/Tag/Capture.php | 72 + .../src/Compile/Tag/CaptureClose.php | 43 + .../src/Compile/Tag/ConfigLoad.php | 77 + .../src/Compile/Tag/ContinueTag.php | 27 + .../smarty-5.4.1/src/Compile/Tag/Debug.php | 45 + .../src/Compile/Tag/ElseIfTag.php | 86 + .../smarty-5.4.1/src/Compile/Tag/ElseTag.php | 29 + .../smarty-5.4.1/src/Compile/Tag/EvalTag.php | 74 + .../src/Compile/Tag/ExtendsTag.php | 87 + .../smarty-5.4.1/src/Compile/Tag/ForClose.php | 51 + .../smarty-5.4.1/src/Compile/Tag/ForElse.php | 30 + .../smarty-5.4.1/src/Compile/Tag/ForTag.php | 101 + .../src/Compile/Tag/ForeachClose.php | 55 + .../src/Compile/Tag/ForeachElse.php | 35 + .../src/Compile/Tag/ForeachSection.php | 206 + .../src/Compile/Tag/ForeachTag.php | 286 ++ .../src/Compile/Tag/FunctionClose.php | 164 + .../src/Compile/Tag/FunctionTag.php | 73 + .../smarty-5.4.1/src/Compile/Tag/IfClose.php | 48 + .../smarty-5.4.1/src/Compile/Tag/IfTag.php | 70 + .../src/Compile/Tag/IncludeTag.php | 189 + .../src/Compile/Tag/Inheritance.php} | 27 +- .../smarty-5.4.1/src/Compile/Tag/Ldelim.php | 41 + .../smarty-5.4.1/src/Compile/Tag/Nocache.php | 36 + .../src/Compile/Tag/NocacheClose.php | 37 + .../smarty-5.4.1/src/Compile/Tag/Rdelim.php | 36 + .../smarty-5.4.1/src/Compile/Tag/Section.php | 399 ++ .../src/Compile/Tag/SectionClose.php | 48 + .../src/Compile/Tag/SectionElse.php | 29 + .../src/Compile/Tag/Setfilter.php | 40 + .../src/Compile/Tag/SetfilterClose.php | 43 + .../src/Compile/Tag/WhileClose.php | 45 + .../smarty-5.4.1/src/Compile/Tag/WhileTag.php | 72 + .../src/Compiler/BaseCompiler.php | 23 + .../smarty-5.4.1/src/Compiler/CodeFrame.php | 126 + .../smarty-5.4.1/src/Compiler/Configfile.php | 173 + .../smarty-5.4.1/src/Compiler/Template.php | 1512 +++++++ .../smarty-5.4.1/src/CompilerException.php | 73 + src/includes/smarty-5.4.1/src/Data.php | 521 +++ .../src/Debug.php} | 219 +- .../smarty-5.4.1/src/ErrorHandler.php | 97 + src/includes/smarty-5.4.1/src/Exception.php | 16 + .../src/Extension/BCPluginsAdapter.php | 229 ++ .../smarty-5.4.1/src/Extension/Base.php | 41 + .../src/Extension/CallbackWrapper.php | 35 + .../src/Extension/CoreExtension.php | 49 + .../src/Extension/DefaultExtension.php | 757 ++++ .../src/Extension/ExtensionInterface.php | 83 + .../src/Filter/FilterInterface.php | 9 + .../src/Filter/FilterPluginWrapper.php | 15 + .../src/Filter/Output/TrimWhitespace.php | 91 + .../src/FunctionHandler/BCPluginWrapper.php | 21 + .../smarty-5.4.1/src/FunctionHandler/Base.php | 21 + .../src/FunctionHandler/Count.php | 36 + .../src/FunctionHandler/Counter.php | 61 + .../src/FunctionHandler/Cycle.php | 90 + .../src/FunctionHandler/Fetch.php | 203 + .../FunctionHandlerInterface.php | 10 + .../src/FunctionHandler/HtmlBase.php | 107 + .../src/FunctionHandler/HtmlCheckboxes.php | 189 + .../src/FunctionHandler/HtmlImage.php | 149 + .../src/FunctionHandler/HtmlOptions.php | 223 + .../src/FunctionHandler/HtmlRadios.php | 174 + .../src/FunctionHandler/HtmlSelectDate.php | 381 ++ .../src/FunctionHandler/HtmlSelectTime.php | 334 ++ .../src/FunctionHandler/HtmlTable.php | 161 + .../src/FunctionHandler/Mailto.php | 141 + .../smarty-5.4.1/src/FunctionHandler/Math.php | 140 + .../src/Lexer/ConfigfileLexer.php} | 568 ++- .../src/Lexer/ConfigfileLexer.plex} | 61 +- .../src/Lexer/TemplateLexer.php} | 1022 +++-- .../src/Lexer/TemplateLexer.plex} | 193 +- .../smarty-5.4.1/src/ParseTree/Base.php | 45 + .../src/ParseTree/Code.php} | 17 +- .../src/ParseTree/Dq.php} | 54 +- .../src/ParseTree/DqContent.php} | 20 +- .../src/ParseTree/Tag.php} | 29 +- .../smarty-5.4.1/src/ParseTree/Template.php | 172 + .../smarty-5.4.1/src/ParseTree/Text.php | 59 + .../src/Parser/ConfigfileParser.php | 972 +++++ .../src/Parser/ConfigfileParser.y} | 28 +- .../src/Parser/TemplateParser.php | 3051 ++++++++++++++ .../src/Parser/TemplateParser.y} | 188 +- .../smarty-5.4.1/src/Resource/BasePlugin.php | 145 + .../src/Resource/CustomPlugin.php | 105 + .../src/Resource/ExtendsPlugin.php} | 76 +- .../smarty-5.4.1/src/Resource/FilePlugin.php | 183 + .../src/Resource/RecompiledPlugin.php | 50 + .../src/Resource/StreamPlugin.php | 71 + .../src/Resource/StringEval.php} | 49 +- .../src/Resource/StringPlugin.php | 94 + .../src/Runtime/Block.php} | 18 +- .../src/Runtime/CaptureRuntime.php | 163 + .../Runtime/DefaultPluginHandlerRuntime.php | 73 + .../src/Runtime/ForeachRuntime.php | 160 + .../src/Runtime/InheritanceRuntime.php | 243 ++ .../src/Runtime/TplFunctionRuntime.php | 144 + src/includes/smarty-5.4.1/src/Security.php | 560 +++ src/includes/smarty-5.4.1/src/Smarty.php | 2239 ++++++++++ src/includes/smarty-5.4.1/src/Template.php | 732 ++++ .../smarty-5.4.1/src/Template/Cached.php | 428 ++ .../smarty-5.4.1/src/Template/Compiled.php | 305 ++ .../smarty-5.4.1/src/Template/Config.php | 36 + .../src/Template/GeneratedPhpFile.php | 159 + .../smarty-5.4.1/src/Template/Source.php | 285 ++ .../smarty-5.4.1/src/TemplateBase.php | 425 ++ src/includes/smarty-5.4.1/src/TestInstall.php | 211 + .../smarty-5.4.1/src/UndefinedVariable.php | 19 + src/includes/smarty-5.4.1/src/Variable.php | 118 + .../libs => smarty-5.4.1/src}/debug.tpl | 64 +- src/includes/smarty-5.4.1/src/functions.php | 253 ++ src/index.php | 134 +- src/item.php | 84 +- src/js/bs-components.js | 15 + src/js/giftreg.js | 4 +- src/js/themeswitcher.js | 38 +- src/login.php | 21 +- src/message.php | 25 +- src/mylist.php | 61 +- src/profile.php | 6 +- src/ranks.php | 72 +- src/receive.php | 39 +- src/setup.php | 4 +- src/shop.php | 127 +- src/shoplist.php | 62 +- src/signup.php | 200 +- src/sql/create-phpgiftregdb.sql | 10 +- src/templates/categories.tpl | 179 +- src/templates/event.tpl | 263 +- src/templates/families.tpl | 230 +- src/templates/footer.tpl | 4 + src/templates/forgot.tpl | 99 +- src/templates/help.tpl | 187 +- src/templates/home.tpl | 829 ++-- src/templates/item.tpl | 260 -- src/templates/login.tpl | 118 +- src/templates/message.tpl | 78 +- src/templates/mylist.tpl | 104 +- src/templates/navbar.tpl | 273 +- src/templates/profile.tpl | 223 +- src/templates/ranks.tpl | 193 +- src/templates/receive.tpl | 115 +- src/templates/shop.tpl | 460 ++- src/templates/shoplist.tpl | 92 +- src/templates/signup.tpl | 219 +- src/templates/users.tpl | 269 +- src/users.php | 136 +- 692 files changed, 40696 insertions(+), 35959 deletions(-) rename src/css/{phpgiftrec.css => phpgiftrec.old.css} (100%) create mode 100644 src/css/phpgiftreg.css create mode 100644 src/images/arrow-down-dark.png rename src/images/{arrow-down.png => arrow-down-light.png} (100%) create mode 100644 src/images/arrow-up-dark.png rename src/images/{arrow-up.png => arrow-up-light.png} (100%) create mode 100644 src/images/bin-dark.png rename src/images/{bin.png => bin-light.png} (100%) create mode 100644 src/images/caret-ASC-dark.png create mode 100644 src/images/caret-ASC-light.png create mode 100644 src/images/caret-DESC-dark.png create mode 100644 src/images/caret-DESC-light.png create mode 100644 src/images/check2-dark.png create mode 100644 src/images/check2-light.png create mode 100644 src/images/circle-half-dark.png create mode 100644 src/images/circle-half-light.png create mode 100644 src/images/cloud-add-dark.png rename src/images/{cloud-add.png => cloud-add-light.png} (100%) create mode 100644 src/images/credit-card-3-dark.png rename src/images/{credit-card-3.png => credit-card-3-light.png} (100%) create mode 100644 src/images/delete-dark.png rename src/images/{delete.png => delete-light.png} (100%) create mode 100644 src/images/image-dark.png rename src/images/{image.png => image-light.png} (100%) create mode 100644 src/images/key-dark.png create mode 100644 src/images/key-fill-dark.png create mode 100644 src/images/key-fill-light.png rename src/images/{key.png => key-light.png} (100%) create mode 100644 src/images/link-dark.png rename src/images/{link.png => link-light.png} (100%) create mode 100644 src/images/locked-dark.png rename src/images/{locked.png => locked-light.png} (100%) create mode 100644 src/images/moon-stars-fill-dark.png create mode 100644 src/images/moon-stars-fill-light.png create mode 100644 src/images/pencil-dark.png rename src/images/{pencil.png => pencil-light.png} (100%) create mode 100644 src/images/pencil-mwe.png create mode 100644 src/images/person-circle-dark.png create mode 100644 src/images/person-circle-light.png create mode 100644 src/images/podcast-dark.png rename src/images/{podcast.png => podcast-light.png} (100%) create mode 100644 src/images/return-dark.png rename src/images/{return.png => return-light.png} (100%) create mode 100644 src/images/split-2-dark.png rename src/images/{split-2.png => split-2-light.png} (100%) create mode 100644 src/images/store-dark.png rename src/images/{store.png => store-light.png} (100%) create mode 100644 src/images/sun-fill-dark.png create mode 100644 src/images/sun-fill-light.png create mode 100644 src/images/unlocked-dark.png rename src/images/{unlocked.png => unlocked-light.png} (100%) delete mode 100644 src/includes/smarty-3.1.48/COMPOSER_RELEASE_NOTES.txt delete mode 100644 src/includes/smarty-3.1.48/INHERITANCE_RELEASE_NOTES.txt delete mode 100644 src/includes/smarty-3.1.48/NEW_FEATURES.txt delete mode 100644 src/includes/smarty-3.1.48/README delete mode 100644 src/includes/smarty-3.1.48/README.md delete mode 100644 src/includes/smarty-3.1.48/SECURITY.md delete mode 100644 src/includes/smarty-3.1.48/SMARTY_2_BC_NOTES.txt delete mode 100644 src/includes/smarty-3.1.48/SMARTY_3.0_BC_NOTES.txt delete mode 100644 src/includes/smarty-3.1.48/SMARTY_3.1_NOTES.txt delete mode 100644 src/includes/smarty-3.1.48/demo/plugins/cacheresource.apc.php delete mode 100644 src/includes/smarty-3.1.48/demo/plugins/cacheresource.memcache.php delete mode 100644 src/includes/smarty-3.1.48/demo/plugins/cacheresource.mysql.php delete mode 100644 src/includes/smarty-3.1.48/demo/plugins/cacheresource.pdo.php delete mode 100644 src/includes/smarty-3.1.48/demo/plugins/cacheresource.pdo_gzip.php delete mode 100644 src/includes/smarty-3.1.48/demo/plugins/resource.extendsall.php delete mode 100644 src/includes/smarty-3.1.48/demo/plugins/resource.mysql.php delete mode 100644 src/includes/smarty-3.1.48/demo/plugins/resource.mysqls.php delete mode 100644 src/includes/smarty-3.1.48/libs/Autoloader.php delete mode 100644 src/includes/smarty-3.1.48/libs/Smarty.class.php delete mode 100644 src/includes/smarty-3.1.48/libs/SmartyBC.class.php delete mode 100644 src/includes/smarty-3.1.48/libs/bootstrap.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/block.textformat.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/function.counter.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/function.cycle.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/function.fetch.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/function.html_checkboxes.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/function.html_image.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/function.html_options.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/function.html_radios.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/function.html_select_date.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/function.html_select_time.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/function.html_table.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/function.mailto.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/function.math.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifier.capitalize.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifier.date_format.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifier.debug_print_var.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifier.escape.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifier.mb_wordwrap.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifier.regex_replace.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifier.replace.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifier.spacify.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifier.truncate.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.cat.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.count_characters.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.count_paragraphs.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.count_sentences.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.count_words.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.default.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.escape.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.from_charset.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.indent.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.lower.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.noprint.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.string_format.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.strip.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.strip_tags.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.to_charset.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.unescape.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.upper.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/modifiercompiler.wordwrap.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/outputfilter.trimwhitespace.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/shared.escape_special_chars.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/shared.literal_compiler_param.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/shared.make_timestamp.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/shared.mb_str_replace.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/shared.mb_unicode.php delete mode 100644 src/includes/smarty-3.1.48/libs/plugins/variablefilter.htmlspecialchars.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_cacheresource.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_data.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_cacheresource_file.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_assign.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_block.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_block_child.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_block_parent.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_break.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_call.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_capture.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_child.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_config_load.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_continue.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_debug.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_eval.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_extends.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_for.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_foreach.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_function.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_if.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_include.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_include_php.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_insert.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_ldelim.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_make_nocache.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_nocache.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_parent.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_block_plugin.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_foreachsection.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_function_plugin.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_modifier.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_object_block_function.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_object_function.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_php.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_print_expression.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_registered_block.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_registered_function.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_private_special_variable.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_rdelim.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_section.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_setfilter.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compile_while.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_compilebase.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_config_file_compiler.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_configfileparser.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_data.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_errorhandler.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_extension_handler.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_addautoloadfilters.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_append.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_appendbyref.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_assignbyref.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_assignglobal.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearallassign.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearallcache.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearassign.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearcache.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_clearconfig.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_compileallconfig.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_compilealltemplates.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_configload.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_createdata.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getautoloadfilters.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getconfigvariable.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getconfigvars.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getdebugtemplate.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getglobal.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getregisteredobject.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_getstreamvariable.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_gettags.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_gettemplatevars.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_literals.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_loadfilter.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_loadplugin.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_mustcompile.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registercacheresource.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerclass.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerfilter.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerobject.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerplugin.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_registerresource.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_setautoloadfilters.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_setdebugtemplate.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unloadfilter.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregistercacheresource.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterfilter.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterobject.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterplugin.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_method_unregisterresource.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_nocache_insert.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_template.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_text.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_file.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_php.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_registered.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_stream.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_resource_string.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_cachemodify.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_capture.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_codeframe.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_filterhandler.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_foreach.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_getincludepath.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_inheritance.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_make_nocache.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_tplfunction.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_updatecache.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_updatescope.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_runtime_writefile.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_smartytemplatecompiler.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_template.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_templatebase.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_templatecompilerbase.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_templateparser.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_testinstall.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_internal_undefined.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource_custom.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource_recompiled.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_resource_uncompiled.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_security.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_cached.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_compiled.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_config.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_resource_base.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_template_source.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_undefined_variable.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smarty_variable.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smartycompilerexception.php delete mode 100644 src/includes/smarty-3.1.48/libs/sysplugins/smartyexception.php delete mode 100755 src/includes/smarty-3.1.48/run-tests-for-all-php-versions.sh delete mode 100755 src/includes/smarty-3.1.48/run-tests.sh rename src/includes/{smarty-3.1.48 => smarty-5.4.1}/CHANGELOG.md (90%) create mode 100644 src/includes/smarty-5.4.1/CONTRIBUTING.md rename src/includes/{smarty-3.1.48 => smarty-5.4.1}/LICENSE (100%) create mode 100644 src/includes/smarty-5.4.1/Makefile create mode 100644 src/includes/smarty-5.4.1/README.md create mode 100644 src/includes/smarty-5.4.1/SECURITY.md create mode 100644 src/includes/smarty-5.4.1/TODO.txt create mode 100644 src/includes/smarty-5.4.1/changelog/.gitkeep rename src/includes/{smarty-3.1.48 => smarty-5.4.1}/composer.json (57%) rename src/includes/{smarty-3.1.48 => smarty-5.4.1}/demo/configs/test.conf (100%) rename src/includes/{smarty-3.1.48 => smarty-5.4.1}/demo/index.php (88%) rename src/includes/{smarty-3.1.48 => smarty-5.4.1}/demo/templates/footer.tpl (100%) rename src/includes/{smarty-3.1.48 => smarty-5.4.1}/demo/templates/header.tpl (100%) rename src/includes/{smarty-3.1.48 => smarty-5.4.1}/demo/templates/index.tpl (96%) create mode 100644 src/includes/smarty-5.4.1/docs/_config.yml create mode 100644 src/includes/smarty-5.4.1/docs/api/basics.md create mode 100644 src/includes/smarty-5.4.1/docs/api/caching/basics.md create mode 100644 src/includes/smarty-5.4.1/docs/api/caching/custom-storage-layers.md create mode 100644 src/includes/smarty-5.4.1/docs/api/caching/multiple-caches-per-template.md create mode 100644 src/includes/smarty-5.4.1/docs/api/configuring.md create mode 100644 src/includes/smarty-5.4.1/docs/api/extending/block-tags.md create mode 100644 src/includes/smarty-5.4.1/docs/api/extending/extensions.md create mode 100644 src/includes/smarty-5.4.1/docs/api/extending/introduction.md create mode 100644 src/includes/smarty-5.4.1/docs/api/extending/modifiers.md create mode 100644 src/includes/smarty-5.4.1/docs/api/extending/tags.md create mode 100644 src/includes/smarty-5.4.1/docs/api/filters/output-filters.md create mode 100644 src/includes/smarty-5.4.1/docs/api/filters/postfilters.md create mode 100644 src/includes/smarty-5.4.1/docs/api/filters/prefilters.md create mode 100644 src/includes/smarty-5.4.1/docs/api/inheritance.md create mode 100644 src/includes/smarty-5.4.1/docs/api/rendering.md create mode 100644 src/includes/smarty-5.4.1/docs/api/resources.md create mode 100644 src/includes/smarty-5.4.1/docs/api/security.md create mode 100644 src/includes/smarty-5.4.1/docs/api/variables/assigning.md create mode 100644 src/includes/smarty-5.4.1/docs/api/variables/config-files.md create mode 100644 src/includes/smarty-5.4.1/docs/api/variables/objects.md create mode 100644 src/includes/smarty-5.4.1/docs/api/variables/static-class-methods.md create mode 100644 src/includes/smarty-5.4.1/docs/api/variables/streams.md create mode 100644 src/includes/smarty-5.4.1/docs/appendixes/tips.md create mode 100644 src/includes/smarty-5.4.1/docs/appendixes/troubleshooting.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/chapter-debugging-console.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/config-files.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-basic-syntax/index.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-basic-syntax/language-escaping.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-basic-syntax/language-syntax-attributes.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-basic-syntax/language-syntax-comments.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-basic-syntax/language-syntax-operators.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-basic-syntax/language-syntax-quotes.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-basic-syntax/language-syntax-tags.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-basic-syntax/language-syntax-variables.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/index.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-append.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-assign.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-block.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-call.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-capture.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-config-load.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-debug.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-extends.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-for.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-foreach.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-function.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-if.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-include.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-insert.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-ldelim.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-literal.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-nocache.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-section.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-setfilter.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-strip.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-builtin-functions/language-function-while.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-combining-modifiers.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/index.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-counter.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-cycle.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-debug.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-eval.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-fetch.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-html-checkboxes.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-html-image.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-html-options.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-html-radios.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-html-select-date.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-html-select-time.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-html-table.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-mailto.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-math.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-custom-functions/language-function-textformat.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/index.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-capitalize.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-cat.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-count-characters.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-count-paragraphs.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-count-sentences.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-count-words.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-count.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-date-format.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-debug-print-var.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-default.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-escape.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-from-charset.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-indent.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-is_array.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-isset.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-join.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-json-encode.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-lower.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-nl2br.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-noprint.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-number-format.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-raw.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-regex-replace.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-replace.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-round.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-spacify.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-split.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-str-repeat.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-string-format.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-strip-tags.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-strip.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-strlen.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-substr.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-to-charset.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-truncate.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-unescape.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-upper.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-modifiers/language-modifier-wordwrap.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-variables/index.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-variables/language-assigned-variables.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-variables/language-config-variables.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-variables/language-variable-scopes.md create mode 100644 src/includes/smarty-5.4.1/docs/designers/language-variables/language-variables-smarty.md create mode 100644 src/includes/smarty-5.4.1/docs/features.md create mode 100644 src/includes/smarty-5.4.1/docs/getting-started.md create mode 100644 src/includes/smarty-5.4.1/docs/img/favicon.ico create mode 100644 src/includes/smarty-5.4.1/docs/img/smarty.svg create mode 100644 src/includes/smarty-5.4.1/docs/index.md create mode 100644 src/includes/smarty-5.4.1/docs/philosophy.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/add-extension.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-add-plugins-dir.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-append.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-assign.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-clear-all-assign.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-clear-all-cache.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-clear-assign.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-clear-cache.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-clear-compiled-tpl.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-clear-config.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-compile-all-config.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-compile-all-templates.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-config-load.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-create-data.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-create-template.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-disable-security.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-display.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-enable-security.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-fetch.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-get-config-dir.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-get-config-vars.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-get-plugins-dir.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-get-registered-object.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-get-template-vars.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-is-cached.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-load-filter.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-mute-expected-errors.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-register-cacheresource.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-register-class.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-register-default-plugin-handler.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-register-filter.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-register-object.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-register-plugin.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-register-resource.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-set-plugins-dir.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-test-install.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-unregister-cacheresource.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-unregister-filter.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-unregister-object.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-unregister-plugin.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-functions/api-unregister-resource.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-auto-literal.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-cache-dir.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-cache-id.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-cache-lifetime.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-cache-locking.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-cache-modified-check.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-caching-type.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-caching.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-compile-dir.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-compile-id.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-compile-locking.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-compiler-class.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-config-booleanize.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-config-dir.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-config-overwrite.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-config-read-hidden.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-debug-template.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-debugging-ctrl.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-debugging.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-default-config-handler-func.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-default-config-type.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-default-modifiers.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-default-resource-type.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-default-template-handler-func.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-error-reporting.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-escape-html.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-force-cache.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-force-compile.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-locking-timeout.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-merge-compiled-includes.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-smarty-debug-id.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-template-dir.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-use-include-path.md create mode 100644 src/includes/smarty-5.4.1/docs/programmers/api-variables/variable-use-sub-dirs.md create mode 100644 src/includes/smarty-5.4.1/docs/upgrading.md create mode 100644 src/includes/smarty-5.4.1/libs/Smarty.class.php create mode 100644 src/includes/smarty-5.4.1/mkdocs.yml create mode 100755 src/includes/smarty-5.4.1/run-tests-for-all-php-versions.sh create mode 100755 src/includes/smarty-5.4.1/run-tests.sh create mode 100644 src/includes/smarty-5.4.1/src/BlockHandler/Base.php create mode 100644 src/includes/smarty-5.4.1/src/BlockHandler/BlockHandlerInterface.php create mode 100644 src/includes/smarty-5.4.1/src/BlockHandler/BlockPluginWrapper.php create mode 100644 src/includes/smarty-5.4.1/src/BlockHandler/TextFormat.php create mode 100644 src/includes/smarty-5.4.1/src/Cacheresource/Base.php rename src/includes/{smarty-3.1.48/libs/sysplugins/smarty_cacheresource_custom.php => smarty-5.4.1/src/Cacheresource/Custom.php} (64%) create mode 100644 src/includes/smarty-5.4.1/src/Cacheresource/File.php rename src/includes/{smarty-3.1.48/libs/sysplugins/smarty_cacheresource_keyvaluestore.php => smarty-5.4.1/src/Cacheresource/KeyValueStore.php} (82%) create mode 100644 src/includes/smarty-5.4.1/src/Compile/Base.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/BlockCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/CompilerInterface.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/DefaultHandlerBlockCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/DefaultHandlerFunctionCallCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/FunctionCallCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/BCPluginWrapper.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/Base.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/CatModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/CountCharactersModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/CountParagraphsModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/CountSentencesModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/CountWordsModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/DefaultModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/EmptyModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/EscapeModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/FromCharsetModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/IndentModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/IsArrayModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/IssetModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/JsonEncodeModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/LowerModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/ModifierCompilerInterface.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/Nl2brModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/NoPrintModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/RawModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/RoundModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/StrRepeatModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/StringFormatModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/StripModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/StripTagsModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/StrlenModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/SubstrModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/ToCharsetModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/UnescapeModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/UpperModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Modifier/WordWrapModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/ModifierCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/ObjectMethodBlockCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/ObjectMethodCallCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/PrintExpressionCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/SpecialVariableCompiler.php rename src/includes/{smarty-3.1.48/libs/sysplugins/smarty_internal_compile_append.php => smarty-5.4.1/src/Compile/Tag/Append.php} (60%) create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/Assign.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/BCPluginWrapper.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/Block.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/BlockClose.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/BreakTag.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/Call.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/Capture.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/CaptureClose.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/ConfigLoad.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/ContinueTag.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/Debug.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/ElseIfTag.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/ElseTag.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/EvalTag.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/ExtendsTag.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/ForClose.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/ForElse.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/ForTag.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/ForeachClose.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/ForeachElse.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/ForeachSection.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/ForeachTag.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/FunctionClose.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/FunctionTag.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/IfClose.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/IfTag.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/IncludeTag.php rename src/includes/{smarty-3.1.48/libs/sysplugins/smarty_internal_compile_shared_inheritance.php => smarty-5.4.1/src/Compile/Tag/Inheritance.php} (58%) create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/Ldelim.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/Nocache.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/NocacheClose.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/Rdelim.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/Section.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/SectionClose.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/SectionElse.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/Setfilter.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/SetfilterClose.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/WhileClose.php create mode 100644 src/includes/smarty-5.4.1/src/Compile/Tag/WhileTag.php create mode 100644 src/includes/smarty-5.4.1/src/Compiler/BaseCompiler.php create mode 100644 src/includes/smarty-5.4.1/src/Compiler/CodeFrame.php create mode 100644 src/includes/smarty-5.4.1/src/Compiler/Configfile.php create mode 100644 src/includes/smarty-5.4.1/src/Compiler/Template.php create mode 100644 src/includes/smarty-5.4.1/src/CompilerException.php create mode 100644 src/includes/smarty-5.4.1/src/Data.php rename src/includes/{smarty-3.1.48/libs/sysplugins/smarty_internal_debug.php => smarty-5.4.1/src/Debug.php} (53%) create mode 100644 src/includes/smarty-5.4.1/src/ErrorHandler.php create mode 100644 src/includes/smarty-5.4.1/src/Exception.php create mode 100644 src/includes/smarty-5.4.1/src/Extension/BCPluginsAdapter.php create mode 100644 src/includes/smarty-5.4.1/src/Extension/Base.php create mode 100644 src/includes/smarty-5.4.1/src/Extension/CallbackWrapper.php create mode 100644 src/includes/smarty-5.4.1/src/Extension/CoreExtension.php create mode 100644 src/includes/smarty-5.4.1/src/Extension/DefaultExtension.php create mode 100644 src/includes/smarty-5.4.1/src/Extension/ExtensionInterface.php create mode 100644 src/includes/smarty-5.4.1/src/Filter/FilterInterface.php create mode 100644 src/includes/smarty-5.4.1/src/Filter/FilterPluginWrapper.php create mode 100644 src/includes/smarty-5.4.1/src/Filter/Output/TrimWhitespace.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/BCPluginWrapper.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/Base.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/Count.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/Counter.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/Cycle.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/Fetch.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/FunctionHandlerInterface.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/HtmlBase.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/HtmlCheckboxes.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/HtmlImage.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/HtmlOptions.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/HtmlRadios.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/HtmlSelectDate.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/HtmlSelectTime.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/HtmlTable.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/Mailto.php create mode 100644 src/includes/smarty-5.4.1/src/FunctionHandler/Math.php rename src/includes/{smarty-3.1.48/libs/sysplugins/smarty_internal_configfilelexer.php => smarty-5.4.1/src/Lexer/ConfigfileLexer.php} (57%) rename src/includes/{smarty-3.1.48/lexer/smarty_internal_configfilelexer.plex => smarty-5.4.1/src/Lexer/ConfigfileLexer.plex} (73%) rename src/includes/{smarty-3.1.48/libs/sysplugins/smarty_internal_templatelexer.php => smarty-5.4.1/src/Lexer/TemplateLexer.php} (53%) rename src/includes/{smarty-3.1.48/lexer/smarty_internal_templatelexer.plex => smarty-5.4.1/src/Lexer/TemplateLexer.plex} (70%) create mode 100644 src/includes/smarty-5.4.1/src/ParseTree/Base.php rename src/includes/{smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_code.php => smarty-5.4.1/src/ParseTree/Code.php} (67%) rename src/includes/{smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_dq.php => smarty-5.4.1/src/ParseTree/Dq.php} (50%) rename src/includes/{smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_dqcontent.php => smarty-5.4.1/src/ParseTree/DqContent.php} (58%) rename src/includes/{smarty-3.1.48/libs/sysplugins/smarty_internal_parsetree_tag.php => smarty-5.4.1/src/ParseTree/Tag.php} (63%) create mode 100644 src/includes/smarty-5.4.1/src/ParseTree/Template.php create mode 100644 src/includes/smarty-5.4.1/src/ParseTree/Text.php create mode 100644 src/includes/smarty-5.4.1/src/Parser/ConfigfileParser.php rename src/includes/{smarty-3.1.48/lexer/smarty_internal_configfileparser.y => smarty-5.4.1/src/Parser/ConfigfileParser.y} (91%) create mode 100644 src/includes/smarty-5.4.1/src/Parser/TemplateParser.php rename src/includes/{smarty-3.1.48/lexer/smarty_internal_templateparser.y => smarty-5.4.1/src/Parser/TemplateParser.y} (84%) create mode 100644 src/includes/smarty-5.4.1/src/Resource/BasePlugin.php create mode 100644 src/includes/smarty-5.4.1/src/Resource/CustomPlugin.php rename src/includes/{smarty-3.1.48/libs/sysplugins/smarty_internal_resource_extends.php => smarty-5.4.1/src/Resource/ExtendsPlugin.php} (50%) create mode 100644 src/includes/smarty-5.4.1/src/Resource/FilePlugin.php create mode 100644 src/includes/smarty-5.4.1/src/Resource/RecompiledPlugin.php create mode 100644 src/includes/smarty-5.4.1/src/Resource/StreamPlugin.php rename src/includes/{smarty-3.1.48/libs/sysplugins/smarty_internal_resource_eval.php => smarty-5.4.1/src/Resource/StringEval.php} (53%) create mode 100644 src/includes/smarty-5.4.1/src/Resource/StringPlugin.php rename src/includes/{smarty-3.1.48/libs/sysplugins/smarty_internal_block.php => smarty-5.4.1/src/Runtime/Block.php} (81%) create mode 100644 src/includes/smarty-5.4.1/src/Runtime/CaptureRuntime.php create mode 100644 src/includes/smarty-5.4.1/src/Runtime/DefaultPluginHandlerRuntime.php create mode 100644 src/includes/smarty-5.4.1/src/Runtime/ForeachRuntime.php create mode 100644 src/includes/smarty-5.4.1/src/Runtime/InheritanceRuntime.php create mode 100644 src/includes/smarty-5.4.1/src/Runtime/TplFunctionRuntime.php create mode 100644 src/includes/smarty-5.4.1/src/Security.php create mode 100644 src/includes/smarty-5.4.1/src/Smarty.php create mode 100644 src/includes/smarty-5.4.1/src/Template.php create mode 100644 src/includes/smarty-5.4.1/src/Template/Cached.php create mode 100644 src/includes/smarty-5.4.1/src/Template/Compiled.php create mode 100644 src/includes/smarty-5.4.1/src/Template/Config.php create mode 100644 src/includes/smarty-5.4.1/src/Template/GeneratedPhpFile.php create mode 100644 src/includes/smarty-5.4.1/src/Template/Source.php create mode 100644 src/includes/smarty-5.4.1/src/TemplateBase.php create mode 100644 src/includes/smarty-5.4.1/src/TestInstall.php create mode 100644 src/includes/smarty-5.4.1/src/UndefinedVariable.php create mode 100644 src/includes/smarty-5.4.1/src/Variable.php rename src/includes/{smarty-3.1.48/libs => smarty-5.4.1/src}/debug.tpl (68%) create mode 100644 src/includes/smarty-5.4.1/src/functions.php create mode 100644 src/js/bs-components.js create mode 100644 src/templates/footer.tpl delete mode 100644 src/templates/item.tpl diff --git a/.gitignore b/.gitignore index 6bfc4ca..f335e4a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ src/templates_c src/item_images - +**/.*.swp diff --git a/src/admin.php b/src/admin.php index 91ae062..6267664 100644 --- a/src/admin.php +++ b/src/admin.php @@ -20,7 +20,7 @@ $opt = $smarty->opt(); session_start(); if (!isset($_SESSION["userid"])) { - header("Location: " . getFullPath("login.php")); + header("Location: " . getFullPath("login.php") . "?from=admin.php"); exit; } else if ($_SESSION["admin"] != 1) { @@ -31,56 +31,79 @@ else { $userid = $_SESSION["userid"]; } +if (isset($_GET["familyid"])) { + $familyid = filter_var(trim($_GET["familyid"]), FILTER_SANITIZE_NUMBER_INT); + + if (filter_var($familyid, FILTER_SANITIZE_NUMBER_INT) === false || $familyid == "" || !is_numeric($familyid) || $familyid < 0) { + die("Invalid familyid ({$_GET["familyid"]})"); + } +} + +if (isset($_GET["userid"])) { + $userid = filter_var(trim($_GET["userid"]), FILTER_SANITIZE_NUMBER_INT); + + if (filter_var($userid, FILTER_SANITIZE_NUMBER_INT) === false || $userid == "" || !is_numeric($userid) || $userid < 0) { + die("Invalid userid ({$_GET["userid"]})"); + } +} + $action = $_GET["action"]; if ($action == "approve") { $pwd = generatePassword($opt); - if ($_GET["familyid"] != "") { + if ($familyid != "") { $stmt = $smarty->dbh()->prepare("INSERT INTO {$opt["table_prefix"]}memberships(userid,familyid) VALUES(?, ?)"); - $stmt->bindValue(1, (int) $_GET["userid"], PDO::PARAM_INT); - $stmt->bindValue(2, (int) $_GET["familyid"], PDO::PARAM_INT); + $stmt->bindValue(1, (int) $userid, PDO::PARAM_INT); + $stmt->bindValue(2, (int) $familyid, PDO::PARAM_INT); $stmt->execute(); } $stmt = $smarty->dbh()->prepare("UPDATE {$opt["table_prefix"]}users SET approved = 1, password = {$opt["password_hasher"]}(?) WHERE userid = ?"); $stmt->bindParam(1, $pwd, PDO::PARAM_STR); - $stmt->bindValue(2, (int) $_GET["userid"], PDO::PARAM_INT); + $stmt->bindValue(2, (int) $userid, PDO::PARAM_INT); $stmt->execute(); - + // send the e-mails $stmt = $smarty->dbh()->prepare("SELECT username, email FROM {$opt["table_prefix"]}users WHERE userid = ?"); - $stmt->bindValue(1, (int) $_GET["userid"], PDO::PARAM_INT); + $stmt->bindValue(1, (int) $userid, PDO::PARAM_INT); $stmt->execute(); if ($row = $stmt->fetch()) { mail( $row["email"], "Gift Registry application approved", - "Your Gift Registry application was approved by " . $_SESSION["fullname"] . ".\r\n" . - "Your username is " . $row["username"] . " and your password is '$pwd'.\r\n" . - "Log in to https://wishlist.erdelynet.com/ and change your password under\r\n" . - "Update Profile as soon as possible.", + "Your Gift Registry application was approved.\r\n" . + "Your username is {$row["username"]} and your password is '$pwd'.\r\n" . + "Log in to {$_SERVER['REQUEST_SCHEME']}://{$_SERVER['HTTP_HOST']}/ and change your password under " . + "'Update Profile' (menu at the top/right of the page) as soon as possible.\r\n" . + "\r\n" . + "There is a browser bookmarklet at {$_SERVER['REQUEST_SCHEME']}://{$_SERVER['HTTP_HOST']}/help.php\r\n" . + "\r\n" . + "Once you've logged in, you can see the people you can shop for under 'Available People To Shopping For'. " . + "Click on the icon next to each person you want to shop for to see their lists.\r\n" . + "\r\n" . + "If you have any questions or problems, email {$opt['email_from']}.\r\n", "From: {$opt["email_from"]}\r\nReply-To: {$opt["email_reply_to"]}\r\nX-Mailer: {$opt["email_xmailer"]}\r\n" - ) or die("Mail not accepted for " . $row["email"]); + ) or die("Mail not accepted for " . $row["email"]); } - header("Location: " . getFullPath("index.php")); + header("Location: " . getFullPath("families.php")); exit; } else if ($action == "reject") { // send the e-mails $stmt = $smarty->dbh()->prepare("SELECT email FROM {$opt["table_prefix"]}users WHERE userid = ?"); - $stmt->bindValue(1, (int) $_GET["userid"], PDO::PARAM_INT); + $stmt->bindValue(1, (int) $userid, PDO::PARAM_INT); $stmt->execute(); if ($row = $stmt->fetch()) { mail( $row["email"], "Gift Registry application denied", - "Your Gift Registry application was denied by " . $_SESSION["fullname"] . ".", + "Your Gift Registry application was denied.", "From: {$opt["email_from"]}\r\nReply-To: {$opt["email_reply_to"]}\r\nX-Mailer: {$opt["email_xmailer"]}\r\n" - ) or die("Mail not accepted for " . $row["email"]); + ) or die("Mail not accepted for " . $row["email"]); } $stmt = $smarty->dbh()->prepare("DELETE FROM {$opt["table_prefix"]}users WHERE userid = ?"); - $stmt->bindValue(1, (int) $_GET["userid"], PDO::PARAM_INT); + $stmt->bindValue(1, (int) $userid, PDO::PARAM_INT); $stmt->execute(); - + header("Location: " . getFullPath("index.php")); exit; } diff --git a/src/categories.php b/src/categories.php index d9a5df6..eaabe8f 100644 --- a/src/categories.php +++ b/src/categories.php @@ -20,7 +20,7 @@ $opt = $smarty->opt(); session_start(); if (!isset($_SESSION["userid"])) { - header("Location: " . getFullPath("login.php")); + header("Location: " . getFullPath("login.php") . "?from=categories.php"); exit; } else if ($_SESSION["admin"] != 1) { @@ -31,38 +31,50 @@ else { $userid = $_SESSION["userid"]; } if (!empty($_GET["message"])) { - $message = $_GET["message"]; + $message = filter_var(trim($_GET["message"], FILTER_SANITIZE_STRING));; + $message = htmlspecialchars($message, ENT_QUOTES, 'UTF-8'); } +$haserror = false; +$error_message = ""; $action = isset($_GET["action"]) ? $_GET["action"] : ""; if ($action == "insert" || $action == "update") { /* validate the data. */ - $category = trim($_GET["category"]); - - $haserror = false; + $category = filter_var(trim($_GET["category"]), FILTER_SANITIZE_STRING); + $category = htmlspecialchars($category, ENT_QUOTES, 'UTF-8'); + if ($category == "") { $haserror = true; - $category_error = "A category is required."; + $error_message = trim("$error_message A category is required."); + $category_error = true; + } +} + +if (isset($_GET["categoryid"])) { + $categoryid = filter_var(trim($_GET["categoryid"]), FILTER_SANITIZE_NUMBER_INT); + + if (filter_var($categoryid, FILTER_SANITIZE_NUMBER_INT) === false || $categoryid == "" || !is_numeric($categoryid) || $categoryid < 0) { + die("Invalid categoryid ({$_GET["categoryid"]})"); } } if ($action == "delete") { /* first, NULL all category FKs for items that use this category. */ $stmt = $smarty->dbh()->prepare("UPDATE {$opt["table_prefix"]}items SET category = NULL WHERE category = ?"); - $stmt->bindValue(1, (int) $_GET["categoryid"], PDO::PARAM_INT); + $stmt->bindValue(1, (int) $categoryid, PDO::PARAM_INT); $stmt->execute(); $stmt = $smarty->dbh()->prepare("DELETE FROM {$opt["table_prefix"]}categories WHERE categoryid = ?"); - $stmt->bindValue(1, (int) $_GET["categoryid"], PDO::PARAM_INT); + $stmt->bindValue(1, (int) $categoryid, PDO::PARAM_INT); $stmt->execute(); - + header("Location: " . getFullPath("categories.php?message=Category+deleted.")); exit; } else if ($action == "edit") { $stmt = $smarty->dbh()->prepare("SELECT category FROM {$opt["table_prefix"]}categories WHERE categoryid = ?"); - $stmt->bindValue(1, (int) $_GET["categoryid"], PDO::PARAM_INT); + $stmt->bindValue(1, (int) $categoryid, PDO::PARAM_INT); $stmt->execute(); if ($row = $stmt->fetch()) { $category = $row["category"]; @@ -76,7 +88,7 @@ else if ($action == "insert") { $stmt = $smarty->dbh()->prepare("INSERT INTO {$opt["table_prefix"]}categories(categoryid,category) VALUES(NULL, ?)"); $stmt->bindParam(1, $category, PDO::PARAM_STR); $stmt->execute(); - + header("Location: " . getFullPath("categories.php?message=Category+added.")); exit; } @@ -87,11 +99,11 @@ else if ($action == "update") { "SET category = ? " . "WHERE categoryid = ?"); $stmt->bindParam(1, $category, PDO::PARAM_STR); - $stmt->bindValue(2, (int) $_GET["categoryid"], PDO::PARAM_INT); + $stmt->bindValue(2, (int) $categoryid, PDO::PARAM_INT); $stmt->execute(); - + header("Location: " . getFullPath("categories.php?message=Category+updated.")); - exit; + exit; } } else { @@ -113,8 +125,8 @@ if (isset($action)) { $smarty->assign('action', $action); } $smarty->assign('categories', $categories); -if (isset($_GET["categoryid"])) { - $smarty->assign('categoryid', (int) $_GET["categoryid"]); +if (isset($categoryid)) { + $smarty->assign('categoryid', (int) $categoryid); } if (isset($message)) { $smarty->assign('message', $message); @@ -124,5 +136,8 @@ if (isset($category_error)) { $smarty->assign('category_error', $category_error); } $smarty->assign('haserror', isset($haserror) ? $haserror : false); +if ($error_message != "") { + $smarty->assign('error_message', $error_message); +} $smarty->display('categories.tpl'); ?> diff --git a/src/css/phpgiftrec.css b/src/css/phpgiftrec.old.css similarity index 100% rename from src/css/phpgiftrec.css rename to src/css/phpgiftrec.old.css diff --git a/src/css/phpgiftreg.css b/src/css/phpgiftreg.css new file mode 100644 index 0000000..1222d1b --- /dev/null +++ b/src/css/phpgiftreg.css @@ -0,0 +1,20 @@ +/* Ensure the main content takes up available space */ +html, body { + height: 100%; +} +body { + display: flex; + flex-direction: column; +} +main { + flex: 1; +} +.icon { + fill: currentcolor; +} + +.boldicon { + fill: currentcolor; + stroke: currentcolor; + stroke-width: 1; +} diff --git a/src/event.php b/src/event.php index 72137c9..9a038dc 100644 --- a/src/event.php +++ b/src/event.php @@ -20,7 +20,7 @@ $opt = $smarty->opt(); session_start(); if (!isset($_SESSION["userid"])) { - header("Location: " . getFullPath("login.php")); + header("Location: " . getFullPath("login.php") . "?from=event.php"); exit; } else { @@ -28,13 +28,21 @@ else { } if (!empty($_GET["message"])) { - $message = $_GET["message"]; + $message = filter_var(trim($_GET["message"], FILTER_SANITIZE_STRING));; + $message = htmlspecialchars($message, ENT_QUOTES, 'UTF-8'); } if (isset($_GET["eventid"])) { - $eventid = $_GET["eventid"]; + $eventid = filter_var(trim($_GET["eventid"]), FILTER_SANITIZE_NUMBER_INT); + + if (filter_var($eventid, FILTER_SANITIZE_NUMBER_INT) === false || $eventid == "" || !is_numeric($eventid) || $eventid < 0) { + die("Invalid eventid ({$_GET["eventid"]})"); + } } +$haserror = false; +$error_message = ""; + // for security, let's make sure that if an eventid was passed in, it belongs // to $userid (or is a system event and the user is an admin). // all operations on this page should only be performed by the event's owner. @@ -62,7 +70,8 @@ $action = isset($_GET["action"]) ? $_GET["action"] : ""; if ($action == "insert" || $action == "update") { /* validate the data. */ - $description = trim($_GET["description"]); + $description = filter_var(trim($_GET["description"], FILTER_SANITIZE_STRING));; + $description = htmlspecialchars($description, ENT_QUOTES, 'UTF-8'); try { $eventdate = new DateTime($_GET["eventdate"]); } @@ -71,15 +80,16 @@ if ($action == "insert" || $action == "update") { } $recurring = (strtoupper($_GET["recurring"]) == "ON" ? 1 : 0); $systemevent = (strtoupper($_GET["systemevent"]) == "ON" ? 1 : 0); - - $haserror = false; + if ($description == "") { $haserror = true; - $description_error = "A description is required."; + $error_message = trim("$error_message A description is required."); + $description_error = true; } if ($eventdate == FALSE) { $haserror = true; - $eventdate_error = "Date is out of range for this server."; + $error_message = trim("$error_message Date is out of range for this server."); + $eventdate_error = true; } } @@ -101,7 +111,7 @@ else if ($action == "edit") { try { $stmt = $smarty->dbh()->prepare("SELECT description, eventdate, recurring, userid FROM {$opt["table_prefix"]}events WHERE eventid = ?"); $stmt->bindParam(1, $eventid, PDO::PARAM_INT); - + $stmt->execute(); // we know this will work, see above. @@ -131,7 +141,7 @@ else if ($action == "insert") { $stmt->bindParam(4, $recurring, PDO::PARAM_BOOL); $stmt->execute(); - + header("Location: " . getFullPath("event.php?message=Event+added.")); exit; } @@ -147,7 +157,7 @@ else if ($action == "update") { "userid = ?, " . "description = ?, " . "eventdate = ?, " . - "recurring = ? " . + "recurring = ? " . "WHERE eventid = ?"); $stmt->bindValue(1, $systemevent ? NULL : $userid, PDO::PARAM_BOOL); $stmt->bindParam(2, $description, PDO::PARAM_STR); @@ -198,6 +208,9 @@ try { } $smarty->assign('action', $action); $smarty->assign('haserror', isset($haserror) ? $haserror : false); + if ($error_message != "") { + $smarty->assign('error_message', $error_message); + } $smarty->assign('events', $events); $smarty->assign('eventdate', $eventdate->format($opt["date_format"])); if (isset($eventdate_error)) { diff --git a/src/families.php b/src/families.php index dd86a3d..a37fec3 100644 --- a/src/families.php +++ b/src/families.php @@ -20,8 +20,9 @@ $opt = $smarty->opt(); session_start(); $haserror = false; +$error_message = ""; if (!isset($_SESSION["userid"])) { - header("Location: " . getFullPath("login.php")); + header("Location: " . getFullPath("login.php") . "?from=families.php"); exit; } else if ($_SESSION["admin"] != 1) { @@ -32,24 +33,44 @@ else { $userid = $_SESSION["userid"]; } if (!empty($_GET["message"])) { - $message = $_GET["message"]; + $message = filter_var(trim($_GET["message"], FILTER_SANITIZE_STRING));; + $message = htmlspecialchars($message, ENT_QUOTES, 'UTF-8'); } $action = empty($_GET["action"]) ? "" : $_GET["action"]; -if (!empty($_GET["familyid"])) - $familyid = (int) $_GET["familyid"]; -else - $familyid = 1; +if (isset($_GET["familyid"])) { + $familyid = filter_var(trim($_GET["familyid"]), FILTER_SANITIZE_NUMBER_INT); + + if (filter_var($familyid, FILTER_SANITIZE_NUMBER_INT) === false || $familyid == "" || !is_numeric($familyid) || $familyid < 0) { + die("Invalid familyid ({$_GET["familyid"]})"); + } +} + +if (empty($familyid)) $familyid = 1; + +if (isset($_GET["members"])) { + $members = isset($_GET["members"]) ? $_GET["members"] : array(); + if (!is_array($members)) { + die("Invalid data for members ({$_GET["members"]})"); + } + foreach ($members as $index => $member) { + $members[$index] = filter_var($member, FILTER_SANITIZE_NUMBER_INT); + if (filter_var($members[$index], FILTER_SANITIZE_NUMBER_INT) === false) { + die("Invalid data for members ({$_GET["members"]})"); + } + } +} if ($action == "insert" || $action == "update") { /* validate the data. */ - $familyname = trim($_GET["familyname"]); - - $haserror = false; + $familyname = filter_var(trim($_GET["familyname"]), FILTER_SANITIZE_STRING); + $familyname = htmlspecialchars($familyname, ENT_QUOTES, 'UTF-8'); + if ($familyname == "") { $haserror = true; - $familyname_error = "A family name is required."; + $error_message = "A family name is required."; + $familyname_error = true; } } @@ -63,7 +84,7 @@ if ($action == "delete") { $stmt = $smarty->dbh()->prepare("DELETE FROM {$opt["table_prefix"]}families WHERE familyid = ?"); $stmt->bindValue(1, $familyid, PDO::PARAM_INT); $stmt->execute(); - + header("Location: " . getFullPath("families.php?message=Family+deleted.")); exit; } @@ -100,7 +121,7 @@ else if ($action == "insert") { catch (PDOException $e) { die("sql exception: " . $e->getMessage()); } - + header("Location: " . getFullPath("families.php?message=Family+added.")); exit; } @@ -118,13 +139,12 @@ else if ($action == "update") { catch (PDOException $e) { die("sql exception: " . $e->getMessage()); } - + header("Location: " . getFullPath("families.php?message=Family+updated.")); - exit; + exit; } } else if ($action == "members") { - $members = isset($_GET["members"]) ? $_GET["members"] : array(); try { /* first, delete all memberships for this family. */ $stmt = $smarty->dbh()->prepare("DELETE FROM {$opt["table_prefix"]}memberships WHERE familyid = ?"); @@ -142,7 +162,7 @@ else if ($action == "members") { catch (PDOException $e) { die("sql exception: " . $e->getMessage()); } - + header("Location: " . getFullPath("families.php?message=Members+changed.")); exit; } @@ -176,6 +196,9 @@ try { $smarty->assign('action', $action); $smarty->assign('haserror', $haserror); + if ($error_message != "") { + $smarty->assign('error_message', $error_message); + } if (isset($familyname_error)) { $smarty->assign('familyname_error', $familyname_error); } diff --git a/src/forgot.php b/src/forgot.php index 5c7a45d..181b520 100644 --- a/src/forgot.php +++ b/src/forgot.php @@ -22,14 +22,14 @@ if (isset($_POST["action"]) && $_POST["action"] == "forgot") { $username = $_POST["username"]; try { - // make sure that username is valid + // make sure that username is valid $stmt = $smarty->dbh()->prepare("SELECT email FROM {$opt["table_prefix"]}users WHERE username = ?"); $stmt->bindParam(1, $username, PDO::PARAM_STR); - + $stmt->execute(); if ($row = $stmt->fetch()) { $email = $row["email"]; - + if ($email == "") $error = "The username '" . $username . "' does not have an e-mail address, so the password could not be sent."; else { @@ -42,7 +42,7 @@ if (isset($_POST["action"]) && $_POST["action"] == "forgot") { mail( $email, "Gift Registry password reset", - "Your Gift Registry account information:\r\n" . + "Your Gift Registry account information:\r\n" . "Your username is '" . $username . "' and your new password is '$pwd'.", "From: {$opt["email_from"]}\r\nReply-To: {$opt["email_reply_to"]}\r\nX-Mailer: {$opt["email_xmailer"]}\r\n" ) or die("Mail not accepted for $email"); @@ -64,6 +64,8 @@ if (isset($_POST["action"]) && $_POST["action"] == "forgot") { } } else { + if (!isset($username)) $username = ""; + $smarty->assign('username', $username); $smarty->display('forgot.tpl'); } ?> diff --git a/src/help.php b/src/help.php index 94af24f..338689b 100644 --- a/src/help.php +++ b/src/help.php @@ -21,13 +21,56 @@ $opt = $smarty->opt(); session_start(); if (!isset($_SESSION["userid"])) { - header("Location: " . getFullPath("login.php")); + header("Location: " . getFullPath("login.php") . "?from=help.php"); exit; } else { $userid = $_SESSION["userid"]; } +$action = ""; +if (!empty($_POST["action"])) { + $action = $_POST["action"]; + + if ($action == "save") { + if (!empty($_POST["show_helptext"])) + $show_helptext = ($_POST["show_helptext"] == "on" ? 1 : 0); + else + $show_helptext = 0; + + try { + $stmt = $smarty->dbh()->prepare("UPDATE {$opt["table_prefix"]}users SET show_helptext = ? WHERE userid = ?"); + $stmt->bindParam(1, $show_helptext, PDO::PARAM_BOOL); + $stmt->bindParam(2, $userid, PDO::PARAM_INT); + $stmt->execute(); + } + catch (PDOException $e) { + die("sql exception: " . $e->getMessage()); + } + } + else { + die("Unknown verb."); + } +} + +try { + $stmt = $smarty->dbh()->prepare("SELECT show_helptext FROM {$opt["table_prefix"]}users WHERE userid = ?"); + $stmt->bindParam(1, $userid, PDO::PARAM_INT); + + $stmt->execute(); + if ($row = $stmt->fetch()) { + $smarty->assign('show_helptext', $row["show_helptext"]); + $_SESSION['show_helptext'] = $row["show_helptext"]; + } + else { + die("You don't exist."); + } +} +catch (PDOException $e) { + die("sql exception: " . $e->getMessage()); +} + +$smarty->assign('myurl', "{$_SERVER['REQUEST_SCHEME']}://{$_SERVER['HTTP_HOST']}"); $smarty->display('help.tpl'); ?> diff --git a/src/images/arrow-down-dark.png b/src/images/arrow-down-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b1885eedd60e24e8cf4c2dde6a16aed126c73d GIT binary patch literal 4726 zcmeHLeN+_J72ky@ganla70rj^h!se7cV@q5${Kffc45&40yG6vOJ`?hm#OT|x;qOC zCK|*Dg2zNlB%-19M6vM$tsg1X1VSpFlt$~3oaS&y2_-SuXhLGrQ=*`KGrN4X^fa8) z{Ks480>RO2XuqZ$a+<4O!y zYk;=&*W(@uNZ2lB5TI;j&E{;I*$jDooRckPB$D9%=XM#=|FG(jj>6p9oRmk`8ZRt0 z2Ts-2=>L)uf57yc`D+8n@4tDV;Y?z(eCL++?d>mi9I325-8`px3p6C{zu9;2I=uX@ zBKb`9SA8u@2EQ19u;({6#zcd{$!S$#Y~JH}B8IYXg_>TzKl~JwNXE_upSBPal3a&~Z(7d3n{W z#zmS_d&~Nhew+Upd8n$O`%3lU?bMN`+}4-;1=rr}C^)LkA7~tY;lP&GQ||>DUP~wA zR=)(9jFI#6$fcP_Gi$a#`1uOM@UoqSaJ{KHCIMTJT{*k^tIB)rgPu$M?;qS3pAk{9 zu;*?<RomPqCp*}Qx{-@XQ?IJcanIR_&Ty1hceB&kmZy(G1s;UNd(Vm$_U@O&E# zv9tmHiN=oDy=JC}O)vK`x#gL8RQY-eqv0o4#-s*u0N`eL5(>JDJ$^iBfJIy!$ilJ$ zhC~&9y#dY#b!6sz45XH;<%rA@WJ{Fr$`~lsM?3Kx!WxDEPX@S%=e@W>QCeCmFICAo zpG$#a7^Xm!3Z+s8G-UoV4^IYV9{(}{B7{LOe#*ysd6x4)0w(F;0=xl+!9FzVpWAD< zkHLHVVHN-%iXiD#pmIdvb}J@Y_<2hS00}!ZrG-DQ%*!Zp7(W;AQH-U8@$kzgL*y{y zF?|OJpgswJrp6rb27JXLA2g+4iWxUJ%MaW}C;2Q~*)a=&Ll^7zidG<7lQenO`CmK} zc0@iVMgq*oaHotzR0djhJ5F#^Kyc4S7+|m>r&$`eU}}|~FqxEAErFsIrJk^0dL^OK zSr84Tvtkp>Z5}^QdMIYpoCW3><X~KtyM)R5v?9Y^?I|`Y|^SwLZ`LrQKje!P2pC~=O#h^SvToo6kd-@ z+z<%HjoCH>tdt|;E7`>)?*s-0cn#|b1jje>ST~c)lLC9FPKhBZRHfJG5gm$Y#+9CC ze11^60;bq(#T_9HI0ys~NeYDx0K|2`C~o#KB+vQsIIh?LkG1KsZ9BMsG|7_$$uj_S zta0a!Hf|ZB#*vWw0-T+rS!db*(iUzTlp0ELI_n4Lmx)WEE11h{2t9=!i&^pRL6CTh zaFPmz;3rEMTJ#fOg|?_7(&J)4y9t-)=sG(^8R!r_MI#PG=D;YOOpQ7bPzInD94e<4 z)zc0}kA})%4BgK;`BKuy7+ruzz!kU-;;%F)NlaAoWM4{)7$FOQFd2%-P|d#+rU(bD z5Sq+r#Hot^&dP?p*g& z{OrEL#tX~2dCJd{UOS)IU`x8@+?}2Aa_Xw2rIi^?i}qYKzCNe((A;cO-R|tz(!7+! zlC-_suIQ4MUj5^_vm5uXHgDSLK0b2d>_1oDYb#%ybm)oxS&vc4T>}YJeB44!+XpGV z9gn~F_lw-kv^%uLUTN>@}?0cg1onKb#xmQy! zw$$B_3ZI z`R(R4EjMBxqrd!kPV5gqe4)Gfug~5&S;K9}8L8dWtcsPZg8Bcre#`jk!=IFQA8a~V z5Z8F1SGkCYodb75=zU$bqv?>n0 uJd(y<`}~cU2VJi;?fCkn=JJYl9}h>_%gP-MpDL?_JlHImM6>DVTmA+1|7|4z literal 0 HcmV?d00001 diff --git a/src/images/arrow-down.png b/src/images/arrow-down-light.png similarity index 100% rename from src/images/arrow-down.png rename to src/images/arrow-down-light.png diff --git a/src/images/arrow-up-dark.png b/src/images/arrow-up-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..d89351b1a4f4c3e4b302851a96940f87249a1ef5 GIT binary patch literal 4735 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 literal 0 HcmV?d00001 diff --git a/src/images/bin.png b/src/images/bin-light.png similarity index 100% rename from src/images/bin.png rename to src/images/bin-light.png diff --git a/src/images/caret-ASC-dark.png b/src/images/caret-ASC-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..820c6b45f8ed74787261d5e66ecc8d83fc6c054e GIT binary patch literal 701 zcmV;u0z&EX>4Tx04R}tkv&MmKpe$iTSX}?B6biF%}|}}q9Ts93Pq?8YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fWJ{;s@W9>RLwHd z$%K&2tqMJ_2%;Zhj9^q^ramW%DR_>rd-(Wz7vovp=l&dFC2umoClJS(Zdk+{#50?g z&Uv3W!b*}td`>)J&;^Mfxh}i>#<}RQpJzslOnRO;LM#+JSngm}GF0Me;;5o(l<&{F ztZ?4qtX68Qbx;1nP+nVE<~q$`B(aDkh!7y7hB7L!5TjKi#YCF+6CVB{$1jpgCRZ7Z z91EyIh2;3b|KNAGW?^d5O$sG|?ibts7z28Cfo9#dzmILZc>)BUfh(=;uQq_$Ptxmc zEqVm>Z37qAZB5<-E_Z;zCtWfmM+(sN7Ye}p8GTa@7`O$3Yi@6?eVjf38R{x^0~{Oz z<3-9|_jq@2XK(+WY4!I5nj&(xH3()R00006VoOIv00000008+zyMF)x010qNS#tmY z4c7nw4c7reD4Tcy000McNliru=n4`NDm9=P%kKaH0J=#;K~y-)?bAO?!T}J*@sBoD zW6%q5uV4q4 zs#ZH^nB)`>4KV28G0Ax&Fi98p7`0gF5Yr?lOPvd2Y@ar@&8lU(8Tz*Fs4)%$jb jpI96Kd%^Pf{(o5CCW1BrN6fiZ00000NkvXXu0mjfiEt}% literal 0 HcmV?d00001 diff --git a/src/images/caret-ASC-light.png b/src/images/caret-ASC-light.png new file mode 100644 index 0000000000000000000000000000000000000000..e0e18191019cda1df2d3aaf178a151e37b3951a1 GIT binary patch literal 698 zcmV;r0!96aP)EX>4Tx04R}tkv&MmKpe$iTSX}?B6biF%}|}}q9Ts93Pq?8YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fWJ{;s@W9>RLwHd z$%K&2tqMJ_2%;Zhj9^q^ramW%DR_>rd-(Wz7vovp=l&dFC2umoClJS(Zdk+{#50?g z&Uv3W!b*}td`>)J&;^Mfxh}i>#<}RQpJzslOnRO;LM#+JSngm}GF0Me;;5o(l<&{F ztZ?4qtX68Qbx;1nP+nVE<~q$`B(aDkh!7y7hB7L!5TjKi#YCF+6CVB{$1jpgCRZ7Z z91EyIh2;3b|KNAGW?^d5O$sG|?ibts7z28Cfo9#dzmILZc>)BUfh(=;uQq_$Ptxmc zEqVm>Z37qAZB5<-E_Z;zCtWfmM+(sN7Ye}p8GTa@7`O$3Yi@6?eVjf38R{x^0~{Oz z<3-9|_jq@2XK(+WY4!I5nj&(xH3()R00006VoOIv00000008+zyMF)x010qNS#tmY z4c7nw4c7reD4Tcy000McNliru=n4`ND-DqVLNEXT0Jlj*K~y-)?b9z$!T}J*@ei2L z$mRY*w6`*=iv%{qcjO8&A63-M)9bKb-YHm1LA; z)F!vv0yf1G%bne*&H>mMPq^H=OCh22=;V<>xa9dR$ z2WOb1hj{}G2B;)gjld*bJYv#fp<~RFTr_p~fax(8h5H|8nB)el6Hj$mRh#_|w|G4P g_Ja5G`~P8m18hMlal6#u&;S4c07*qoM6N<$g5$F$O#lD@ literal 0 HcmV?d00001 diff --git a/src/images/caret-DESC-dark.png b/src/images/caret-DESC-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e067440ea80fb6f619026ba518e528431c56db2e GIT binary patch literal 718 zcmV;<0x|uGP)EX>4Tx04R}tkv&MmKpe$iTSX}?B6biF%}|}}q9Ts93Pq?8YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fWJ{;s@W9>RLwHd z$%K&2tqMJ_2%;Zhj9^q^ramW%DR_>rd-(Wz7vovp=l&dFC2umoClJS(Zdk+{#50?g z&Uv3W!b*}td`>)J&;^Mfxh}i>#<}RQpJzslOnRO;LM#+JSngm}GF0Me;;5o(l<&{F ztZ?4qtX68Qbx;1nP+nVE<~q$`B(aDkh!7y7hB7L!5TjKi#YCF+6CVB{$1jpgCRZ7Z z91EyIh2;3b|KNAGW?^d5O$sG|?ibts7z28Cfo9#dzmILZc>)BUfh(=;uQq_$Ptxmc zEqVm>Z37qAZB5<-E_Z;zCtWfmM+(sN7Ye}p8GTa@7`O$3Yi@6?eVjf38R{x^0~{Oz z<3-9|_jq@2XK(+WY4!I5nj&(xH3()R00006VoOIv00000008+zyMF)x010qNS#tmY z4c7nw4c7reD4Tcy000McNliru=n4`ND*^$(U!ed10Lw{4K~y-)?bI28}(e z^>Pz8=>33=agyY9Ay}c?7~!A=o8mahQ|m1^p!>MP&X>|NdPyFe&UMrYSfOKF;G-JnNk+eZ{iT#{DW$vq2mWb30SCA)%;=1fvj6}907*qoM6N<$g0gNd A+yDRo literal 0 HcmV?d00001 diff --git a/src/images/caret-DESC-light.png b/src/images/caret-DESC-light.png new file mode 100644 index 0000000000000000000000000000000000000000..acc8e88c5a3f81c595a2d83225b639a99384b081 GIT binary patch literal 724 zcmV;_0xSKAP)EX>4Tx04R}tkv&MmKpe$iTSX}?B6biF%}|}}q9Ts93Pq?8YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fWJ{;s@W9>RLwHd z$%K&2tqMJ_2%;Zhj9^q^ramW%DR_>rd-(Wz7vovp=l&dFC2umoClJS(Zdk+{#50?g z&Uv3W!b*}td`>)J&;^Mfxh}i>#<}RQpJzslOnRO;LM#+JSngm}GF0Me;;5o(l<&{F ztZ?4qtX68Qbx;1nP+nVE<~q$`B(aDkh!7y7hB7L!5TjKi#YCF+6CVB{$1jpgCRZ7Z z91EyIh2;3b|KNAGW?^d5O$sG|?ibts7z28Cfo9#dzmILZc>)BUfh(=;uQq_$Ptxmc zEqVm>Z37qAZB5<-E_Z;zCtWfmM+(sN7Ye}p8GTa@7`O$3Yi@6?eVjf38R{x^0~{Oz z<3-9|_jq@2XK(+WY4!I5nj&(xH3()R00006VoOIv00000008+zyMF)x010qNS#tmY z4c7nw4c7reD4Tcy000McNliru=n4`ND;I2HyGj560MSWAK~y-)?bIN-MC{@b#{-RLoMq-K6s^YL4=^~vK~rouNmW(LvMl#783^8H=3P@1E6r=% z55N*Poil9Bat9BXeuK?%o|$iJ!5ST5hO!4+;50K|dT+S{J;D?AS6WLEX>4Tx04R}tkv&MmKpe$iTSX}?B6biF%}|}}q9Ts93Pq?8YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fWJ{;s@W9>RLwHd z$%K&2tqMJ_2%;Zhj9^q^ramW%DR_>rd-(Wz7vovp=l&dFC2umoClJS(Zdk+{#50?g z&Uv3W!b*}td`>)J&;^Mfxh}i>#<}RQpJzslOnRO;LM#+JSngm}GF0Me;;5o(l<&{F ztZ?4qtX68Qbx;1nP+nVE<~q$`B(aDkh!7y7hB7L!5TjKi#YCF+6CVB{$1jpgCRZ7Z z91EyIh2;3b|KNAGW?^d5O$sG|?ibts7z28Cfo9#dzmILZc>)BUfh(=;uQq_$Ptxmc zEqVm>Z37qAZB5<-E_Z;zCtWfmM+(sN7Ye}p8GTa@7`O$3Yi@6?eVjf38R{x^0~{Oz z<3-9|_jq@2XK(+WY4!I5nj&(xH3()R00006VoOIv00000008+zyMF)x010qNS#tmY z4c7nw4c7reD4Tcy000McNliru=n4@HDglIIbol@P0IW$wK~y-)?Ubxjl=r}9Qqu4D7m;$d+pVv2PPYqxeO>BEZC&U5 zi?A6m2a4}-HdD`P=W{T%rWP{5PHH=8f8XH(SgFO7&L%)FBGy@eL!bdH)lvd%3Je~> z0CEW~s=yXF0Nsc<-oW}1u}Z5X_aIsw*Z_NA2aMBVJ_X)6tz>bQ^*qXI^ZyTiTo-_D0co9EdKby}JKmt&|2$Z3~W_{Q)f+yncOMyKyVy^~vcEpE`QS7CfdV^wRr02z0~>1inI7paMt|6(x=mNyK8YR4S3hB*ex$Li06e)KxrUP5s$mVRKPP|AQVN3B~n>5aM&NmDkb0x1tO792wE3_c1Rd6 z8k(-oiyAf!6T|Zo(B_q!BpLa8k0zF#zn7_T`dXy2;YrCUBSw$O%FY?9)#(jJlexfJ zSTwQNHmTe(y<$e?%vm@=x~k_;HGZb9J`ikZd}(3pqL&x9Em`%8)oWh+<*(MR+q`A# zTif2={_7p@zPE4xf%gv{YCm@T#K}{qfA`@>oqxFS$4@R^y8P*luA86z>GLmc{rUF& zumAes;iJdh-~5f`#q#XA!pxrG6%Tmvg+hT)%<| #})p(tG)H8gLU7@Ic?Mw=xG z`71Z=Ju1!6l-)~o`p(OSXKHVZzRyzQnEhwOTK+3$y~O%>eG0`0cwq1Z@z4aQ>(=Ha zQ1)OM)L?K9{9n$2(B%@eeG*ub7g7ZUrM7|sxz|U#s9F+&g6kKov=kqIA@$@>W*6ol zaD80-nbHkkZibibmlbZ0t7)wmHAV4{mNBumC9iC`KFfO#-+TLd*UooddPgq#S(EX3 zV@`W5H>x zer`U4W$s-(dU2e5%OZ5_p13X3GfrC9JsS4hll0TdRg=feNLiX1y*w))O zSWTy0HoECf(v>I4g2wu0*VO}um%BR}_`;3NKiu`zZhh0`shxjuBaOlbZb8yTxBZ$x z5okJ^^QP|EGGb%NAX{>{RVUVI!3(A9Kk zBlYmHU>)o`@JeVY4R%{W%2CNw+NYRt+O5C{+DR&cZZG#Mlsh5l#qhZ#BX^S3l*avzoWrRD$7VeUFXBe!g|uf zWb}t1@ZNZDov)UoL*PoXmUIJGKj>BcRF~}DvNwX2pqg@fxhNp^Q=Sav>J#g!+}IY5 zPX9zecrWf#-aXtoXW(VGo2@in$EIhqT41(+GeP4NVGf&mEv`e=C}Ps9)QDDvyAY#G zYd~})ro}NMYH%8~{h(|fKZAL2l7#}`3JTz;NYshCR4PPA7>$S)#Q>N~uSN)`Q{{4k z?KEl9_k)<~qrj}hYWru!LJB4jxlaYfW zaB~sub7NpQDK}P4D!ra+u7MTYoL6eIz^FpiS5sPxF)k2bfu~TOx?o>}gL0GQ492Rd zHlQZ8L8DXaH9FL!3Fpk=RggYEn29VVcS_*G*eRs|Q@n1wImEXrF_o zYb|i^`J%Vk4qhh$V=ybmkN~vz#Np^UaUd$KSrty7g|pKHO>Pdpj6JUj#@Hv>LngpvyWV-g$Q{OQa z44BGEYBf5mt;M(TJmn0mU^aL6~$T@eI13b}<3WN9I)n9f4M0dU9tmc{Vpt zIZx*jm_xFo00cwSDnxB~Rxo9Ru##OfdKl*_|3#Br&Y|BT1LDGUVDSQLp|W=|jA+I# zJKy6K8H?|+2LL_T$$<17lxt9~0Vyyb=fT-EDA#}#7?AVe?E0U{CF?s*ksh!M3V_2B z@o04eIBG>XCr`A7|M>f+pyTJjl6s40`oZb!B3pR**{=sdrI@kV3&po&@v-L2)~)Z} z1y$`fYo5dS`>!roWc<9CMK>;{5tbIolGZDYD~CAFbzZxcKbyXulG`$J&xKQGqYqx1 zFP!ZD(F!b7RlCr>RyxEc5lrtcI-ay*U(E4)iKp)i-n`T1ZXOkvd1zbK0iMfMZ~JAhczWG?_^el>6;0{h6&KDX`!}|}b*Hp!h*1!z zs&#$*!G^?^GzMDVG}0@oXuyZJl)QZv-LS^8eA(7%4>x_=@Bz;f`@%lxYDGEA+g4a& K{Y`#V%Rd2Jd;gXI literal 0 HcmV?d00001 diff --git a/src/images/circle-half-dark.png b/src/images/circle-half-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..ea20a1b930294d9399d1d4cdc1a66c328067b1d9 GIT binary patch literal 854 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 literal 0 HcmV?d00001 diff --git a/src/images/cloud-add.png b/src/images/cloud-add-light.png similarity index 100% rename from src/images/cloud-add.png rename to src/images/cloud-add-light.png diff --git a/src/images/credit-card-3-dark.png b/src/images/credit-card-3-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..55d3ed685cc0849223ad5fdb87eed22a16fb20d2 GIT binary patch literal 4567 zcmeHKYj6|S6<*mqj0qSA91NkuW`PFCNc+%hwY5krtz-$1acn2G>7-<}yOOs^TCuyb zWZFz)n-mNL(ivh;9VQ8r2PqIIF=^65%A>`ZPTB^DnI@DO;<}|UO$rI*2W^b$*_Hfi z-Dy12{Ifh)_w2dneD|F1o_pkNtE#M+Rk*MaL6BL&09y_79DNi_gYU&RZgVi55$l4H zU~nZ;01seknu3^g8yKcha-Jz4$p_t!VB86^ZljNdrm4of6Xd&d@*a?v=WOyoCQW(B zESUGgpg^7n^8pyr*6d!#K-ND6#$Ny=9eHT32!^Uq%0dzrD-HexWn)N!A?+whGZYOn zSeu?7iAYD9vgRXzFl~{%-m0M2izXF0BE>`m$?SdX$L_$dA6V40p=L+*%5SVMKXs2c z)xBdo{fCwF_IX|@S)U?)@x{!}H}uI~^5pKG1Fbs_cg^lR0<`v|0iKze)96a=yQ8 z>(pl#*t>ty)W7_Vy1#KRZLL3lX50QY{=myM$DUH_FTK-Kf6!5P`PqRd_O%@A{#~l` zg#cH)<|))uo?lYS-BWq6a(mkyf4|o~uw>T;ti#h)Sn9f~s&(4=&s%Swyq5TV|G5{R znYTKxdH#jL()@p>n;U!II=(x8^s&5~&o$ro%THeW+2iNeeeld9=Ef;o-frIUN!QDt znmWF9;`)Yc^Nb@|!pEE&;oLRbg3%0f4xuacCwUOQ=l7 zjTyKM$hsQGP{Tyq=*H@xj=ZuWqBe`oLYRFSsgc4~6{2N|5MioWe+~kk+*pIAB^ew~ zr_+|S)gmiVoOHQdI6>hQWd;kg+LX|^j5(n$(IK)Jtf=yel++|Sf$ErCSWanf41;xa zD86_y6dHz4s5usZ4?M#qaneHI@i;!(L)CnZ0Fn!6To1LjDJkOBqAI5pUi3AJ32n(( zh-z^pr>_73=3@W^emH<+N{JbK2s|#v#5nAwLfGV(nDr|=?4ffQmEuXm3r=f{r6xuG zOJw?r!N=%Kz{vEep7yc~l2CvY0aa+(OB!;QOk zsBxPK8$)En*Wp64AVr$~m$iP|(6a0i2P75tZ!%QbD_A3L%06WuW0G=NI=C88p7{YXfDm0GDR4G3Wv8GFI4fzUd27T>a$%9P6OM>L z&|}e6IijUGMJ$g3kH8gN2jeFVU2YuIim}$|22no+Ak0h>X43xegyFe_alOe5Wn6~; zCnq_YSW%H6VZS2B4LVc}E;u8Mb3eXPRRUwW|9H%}Tu#E{q&!4ppy!8#@Q~m;PjMKtvDp=#)5&4Jr=np}fkqp$U z2r_f7K1@jG-cnFb*McG6^ecr$cP%Pp7F4-Fbuh@5*V4c3=_R-4ad%AZlTTgD&rG}R zpL1x>t7T81v1Q+V*Z+F=_1V443ud-FI`?$nvbWCub^fBW?-sAU5kT=Ke2ZLBTzvPy zJLiv=6nCWeSDbq36)*DSAHR9-=`%m@@2Os?y!zx+KfSN@&fYyAEa==FDthBrv&{p4 zE}DLbJe2v&vwHE3opZmqdi_8f?)Zpr-}LnUkCl=cr^`;@?WKL&67AIBm6G=sF1_^O ab7xDIZer`t&Fo&ICmQrsvR$4>TmA*Q;}gdK literal 0 HcmV?d00001 diff --git a/src/images/credit-card-3.png b/src/images/credit-card-3-light.png similarity index 100% rename from src/images/credit-card-3.png rename to src/images/credit-card-3-light.png diff --git a/src/images/delete-dark.png b/src/images/delete-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..2cb2677a3467743167dfdabd88eb5ecefd20f51d GIT binary patch literal 4751 zcmeHLeNa@_72gFF#VTO%GwHZKh=S?v``GU%3t{)|!WtI{U;CS!%XuZ z%Utex_nz~+=lt$D2j1?^%1B!hxh7H|5G*mK6WL&n=ElMW;P={pJR-q#h0ZftjK+U1KP+i78Jv_RlLwCh)z^pBr@qN^ZhZ}!F?Z%gf5 zr}MV#-J`m;G4>tpd&{?Zkw5%%asBD|M9IGL;*O5}T_-B`wl*zoDi;k4d+y#o+7CTB z1}C1b8oK?#+QDx$-`o^xPhOI>!os39n#wk!wFS#Z3Sx*=x`iT0+M2w<$oTg)|9p73 zbY)-u&AzcGDqifMUdfElIMqhRIHNDywt2fpI-h;+z}6m5&!P%R`sg3MU3Zk-Pgc%9 zyjtE;7wAd&UEbH^vC91GSE`QhHlKJm=lmO<{5v0Z<)2jK^&KAlCF1aq_WX7J|Kl=Ly&1l@d0;pEo6uC;hBCBG-^`VMK9fOWfd;W6tVC?3w zvXwW+R)v4-D=WGBe*1p=* zIXe_o+Wo7sd-S&-R-aFdA{=G6>u+qgu00<0^ntd`w*(QD7yP?hKG)pTT)AD4O^C^*ql=jIQa7DbnvrWREjFtuC?z>E$&Uj7JI#_Jzuo5W;C>Cnwx(&ajOD+0 z#_jNYOpOGXPvFiN2d@mYOeUOgn!TKRMnVID6$!;qxXzF&lgcmyW>63)s>f7>Uai6i zsZx)~)k=eUin-C@VM&LX9ye!zxmu>6Wrc`Rtfb7SSf-LwVp4|DVoIfyQF0}Tsg+Y9 zGTjVFWzsg2Cxk(!PSq<6QUXI1Dil?zbPAnTAw>zL!k|Ji-V@4<8=P)C3GSb7-*m^jKk}n+{k6@bPh{$?4e3bjYv^UsYX?Z3JLnl z<2^^aJs@>COupIj=G-;lAP_(#$t5-b;MW18xXw+Jtka$AblNn~M4O)2Hi7!1NR}i> zmIj~`jXQU|af=Zdjs)H3;7m@6u>}5?Hdk$;q~H~&Gahh$fL{uhU=F=A_!NA!F?{Wb zM0^$Dq&XOZhb*Bf-cNuP+%gxD4l51XO(;Fb*O?j8pio6Bl%#?bOJ$Ty3~~Y$t1z=g zTv%vPn+s{0F0{y|qkEhd)Sa0SYN|C1(4;4dn1y0))~=57HHCPoo4D*sQy z;84IY*JQ>cPJ+M7Nr)zbb~7MggWGB6>F}_iz;SAZ`uJX12^iz-XJSUJQzBX=rbSXi zS#3~YgibG2%e7j>AU8m~>q)%hQ@SOHC%6W>Flg%VL{|^pCD%WHz)vVge!vp|^xPq{ z;&+a&Il5-Wz^s(#vTKg6Surpx<+<$oztI&r`Cdpnz<*~x@YWZxuYvovVL{R?PxFHnOA6f+#BUqzJAJHEfwc_zj@vmL%1YZl7jYMj$>Q9YV zpRKGRqa*I!3S2I|?mTr@-?ryYb+$6*&n=202m8Z+60_r|<7{<5^jVj?Kb(j^VpDW) zjW79hU7IbxTUk}BQ?{zlbuW`A9j>#EJqq*&ES9%7)CHFMT+90ghNB;=j_VnLUb+&O za>3lNO_DN{03Ci9Ba&|auuFkg53PA?v2XR6jjb!zx};EBO<0onKI$Mk$-&-5>+2pY z8;l&87Zp*b{z%ySL2S&`Pi%2V1~kpDS2f)$K#7JIj#qyHHTR@hx=-bg?rNZW>prU9 z8MVoDEWG)}LFD82sz#1ozI3MQ3y16dYB)N^WBYP@OxiJL&7g9{!0YX`56W*|OSZXk zFLr&~uY`?0P(k!#v0$ydT9Nf_Uy)AoVj)Bk@d}t)qTb1c8;C49eP>#{8)YZgFy2w P?t+Z^45CT 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 literal 0 HcmV?d00001 diff --git a/src/images/key.png b/src/images/key-light.png similarity index 100% rename from src/images/key.png rename to src/images/key-light.png diff --git a/src/images/link-dark.png b/src/images/link-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f5910ada4dc2da3b00e0d5dd83d3c3476fa337e3 GIT binary patch literal 4729 zcmeHLeNa@_72gE}vWQ9pLK9k_&m`ik8u~Vb1je`56Q0sIVGeM24s{Q#)$=U zBN!Nv z+T34Hd&D3)u-5eeWjCeKWEnIX$m4a}Cm1RGyIq)b1*DY?5arzU&t&vvLTtkn2V z*X)yDTO0qT`gaLC{KyCYh^asO#2UeY%95_GgWV^pYR)t-X|9AuxdUJJzx@ULgVYPt@9ys~p=xBN3 z?fjd!$CIm`@3QXN`b1_+D-q{jcGR`{>x7H!IsuU-Z}iCY^}e z{2HWIg(sMZm6=VM`}Qurw^}*2>Odh}r*7sYDVAqdMcx>xde}AO`gq{ew;SR!!YUGb z$CJXp4OEm~eXrx7v+d=u(KjmAeR%ie?|0qU`bk3pzcga^A1Z3@Hox;Fx9;iA;hX}g zHSO!G@%wcB4{F=jEY-Ry`s;gl+E*M~y6JFhMjt1tx-+=<^mXM;<(1yv4mdT-FPT%GX|j};SQJ)x;|5-85C;HGk|v;_)8X>rK_$%M;y`AWg)qdb z&?QPZ57d#y?Ij_xKrBG`x*%1G!5er`s@H16v$gsV1b9-y#Wd}~g~C7}AP9&AZm(U4 zDijJKf(bE<4>b6`G8at*`7Ylo24Vt3OZqHc%0p9b7sOx^X1AYK!Z6r}CjE1IjK(Q= zmoLNu;6oTBJVI1}2%S#hObZ{aD+M4Shvu~KnaVt*Fq`zb{ay>HDN%z)VH zr9deYj=4P1>ct9`PO2AaF+?gyQMp_r)u^Q+R4bF}Yd|~2g;?Y5|cMpQt zTZ9vqi4c55DQRW>1XvSWmSVzXCqcUjmFMI-HAfkkB`BdltY*GhWE1nnBD0h)Czvu& z*a$gEASf!b%|`dRZFGR}k}5mk5pV^r1N$otN?{YVX0~>qm}Ig52;-v&AC>$kVZu-dar3F4Vp16>$2b>UQ359N~SpFiR!R3ks)2>^QGka_XD zK-U6Y^I~9L$_v%CK-at&n3wWGb^YJy;!VF7k}mMqSpdBC4VDdk3*Hzb&70G-?7Ji9 z8%^6Uf%J$cJ>SRS#5~FjE~maR2`om@2BR+O3*OS@k0*>~^~8XG3m6Srl}X;S|C3WC zCRKd*ts(yA&W|$ES7t!a`p*v^G9Aj}N5j!Pb#yeZLY(U&6C#{p+b$t^HNvr*tuoyox=#6S-$Ax zsu51dh$XUpk7WHenM;3RrTEAPxz&klTa3vB$xFNN&BL3Yoo`q^)^evte%|T07<0T( z)|CQ3HQI1w`_78kmW`LY4DY^i`K7;5f3+7Zd2b})pvYHwJ-Fw^U;V52=%$>4&pKB> u`~1EAP1~aGN0et(zw*z!{Yin=qS2^GmF?_X_wHP0Qen_#YMa$XmH!63zG)`_ literal 0 HcmV?d00001 diff --git a/src/images/link.png b/src/images/link-light.png similarity index 100% rename from src/images/link.png rename to src/images/link-light.png diff --git a/src/images/locked-dark.png b/src/images/locked-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e83088eddf1857bc34d9d38a03cd63aa7deafd08 GIT binary patch literal 4579 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 literal 0 HcmV?d00001 diff --git a/src/images/pencil.png b/src/images/pencil-light.png similarity index 100% rename from src/images/pencil.png rename to src/images/pencil-light.png diff --git a/src/images/pencil-mwe.png b/src/images/pencil-mwe.png new file mode 100644 index 0000000000000000000000000000000000000000..c8529af9f35707b28b65f5fd430a4e95a3a3cfcc GIT binary patch literal 1099 zcmbVL&1=(O91aY06NaK*rid>Y9+WkC-?T}Zux@Lc#&xW7b`>Wgm?rPmY|DqqJKGHr zHbfL1h#o|D5X6Ish@f~8RJ?gmbf^>m02MFd$3ai}W^1R1v4er+{mAqDe$Vgg?BKxO z)(zV>Fbvb0@70QQ-4wme>*#mq_umFx+DLAg40$7@Y6O@`TV5H1ykm^wA~vk4W6y9W z!!%Xw(l8k=^sA=la7KjTYK~9Y4Aa?N^9^$x6HvyZwwq$VJbcUo+e)zq#R4q&SzNJu zrvp4RJy0^I$4$jzySqSVO{E4LObk$SCfrc1rPw9AD&0rdJPVc}WIV+#iyAHrf~*%{ zAaXEfLJ0vW!J!0H5=sXUAc8y+cqqpZR7F{Z2-F{zdJC)(wW#TJU-Xn>D}?we&sVEe zt{UgOV3bFSqVQ1Q1tCTev2e;IMlI%s?F|bW4$Z*!iS4-{vS^gONs?lz(&Z2wzff2) z?1uG3(UkEu!{-qPdB=(3T0)1Ui2ur16&;qQe9RYd=uHMDt;a}vgG_U`wxbA0)u{Ud zn-;~G&^&X}!7j;bDVF}>EZb5wJ)xv?k{;ItC?yd}CbLpDBgK&>OL`Is4I8U*(@2qE zJShvhq#=|Ol3Gql3R+ywK~a%)rNPa+Au(JNH~iYvZ=EZx$yKufHi#FLJa3}W0fQBf zcwxo!L3T*w5GWX??M63IftKUda9|(DmL7NxSjwC6OlIOf;C+eHU!DzBwWwfE&R zXnmbVhnO2*ySFaxzkbEa-nCC}f2y7OpaXZdOrG?ge?He+p6h)eU%b_J?Wh0p_PO?x zEn_1y3o|_@+RiMREt7*k-fZdXxO^e8dB=fIFE-AozxM3D`s&i>)|+~)EZ*xm!hHMK e2OjBTTvIb-?jPEX>4Tx04R}tkv&MmKpe$iTSX}?B6biF%}|}}q9Ts93Pq?8YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fWJ{;s@W9>RLwHd z$%K&2tqMJ_2%;Zhj9^q^ramW%DR_>rd-(Wz7vovp=l&dFC2umoClJS(Zdk+{#50?g z&Uv3W!b*}td`>)J&;^Mfxh}i>#<}RQpJzslOnRO;LM#+JSngm}GF0Me;;5o(l<&{F ztZ?4qtX68Qbx;1nP+nVE<~q$`B(aDkh!7y7hB7L!5TjKi#YCF+6CVB{$1jpgCRZ7Z z91EyIh2;3b|KNAGW?^d5O$sG|?ibts7z28Cfo9#dzmILZc>)BUfh(=;uQq_$Ptxmc zEqVm>Z37qAZB5<-E_Z;zCtWfmM+(sN7Ye}p8GTa@7`O$3Yi@6?eVjf38R{x^0~{Oz z<3-9|_jq@2XK(+WY4!I5nj&(xH3()R00006VoOIv00000008+zyMF)x010qNS#tmY z4c7nw4c7reD4Tcy000McNliru=n4@HDJBXi@_-@Xpo>h#0LTOet-_5c>0bI3kwTsbD7tF@Sp*jEJAmP*^vFKAet-H-+Q| z9Ld8E5wQ{xi@2UrdV%Ly&E)EZGW*e4B0GgCyvxs2j)91HjZR!nDRo0F3-Ad~BH~7Y ztQiSAN)<2TXhcjE*4{=h4%f4qd$JHk3|5fAc3dgN?qDyv>RGYT3IUp}k3+>l&K+AL zJeI9d#`Fe+Un*h~I9|s-e63h8geu!CW27QJhyC^J#Xk%l5z|@0nbNM$76mDJdbN&u zG*#6V5wFmakEI>0IaY-x%r{^X9e7ykhOIb(16e_6ODWCbZA7e;2s5KZCg+RoM`ELf&H_xZ8X jFJLnF?RZ4|DChnH-f*UXySsrc00000NkvXXu0mjf-p{x| literal 0 HcmV?d00001 diff --git a/src/images/person-circle-light.png b/src/images/person-circle-light.png new file mode 100644 index 0000000000000000000000000000000000000000..f33602cffb2b3267d2da2b7f0b3060a148a3a520 GIT binary patch literal 6473 zcmeHLd010d7JnfLS%47~H;fVw2DP-?O2zwR%~k(ZDky*$hcMuy)R+2)9;&czUg1XCzeEfK3F3cgsSmMhgr449v`r8grG z3UQzg$b(Jg*v*Mbw3`!UcXLVvHoYrfN*V7y_TWA|XkH%7G%B{swow7#^5oumsq-r2 zKR!j50w$sa0w0}ULrD#)>5}nJhR$rBNcWLa7X)KxiBe$JfVqn4jM;B!m}&yztd|6bfKdInik_ zoWrrr#H4e@=*A^x<*eW>OAw!1^4+t6HGg{R&uiDMuc>`|+dJ=W ze{aY8AAGp~z`;ZHhmU>Ibo|80Pd__#{%;q)y!h3n=F8VwuHX3nhnuZ`zjd$upZ6a; zeDwIqPZTeTXZPh{_A6cifR`78L1(ZiUNkQ!MLdAP43T&bOqjw#iwD8Te0E^s>aBH+ zoKR^-+hBw39Ct{V>{|Feikh3*e@3k0zhc%yte4ki$d^t7i$@QD;-Qw-nq^RAf9uzv zzXtvN#_Q3ANsKj3uw zrrR~}%KhBr?f!*}vPVu7{#-HIPq%D&?bSSM8&-GgYRj&j3wH9^ug+7BQ$`(5TiQ8+ zD=@?=@0@Iyv#P;4@5mH%NAqA-)@kJYXA56Hy_>7q%dQDVt7c^x-ieD?7Uf#Gch2L- zibc;dmj>4h8=jr0Z{4>! zKc#A7d9^ZeY~Z+@JF~KptQMkWdrje*yJrsXvR-M~m0h^2WOB!`^qJFge^8%B!|E!- zEB*Pki;?Jk{{J;eEuJ1K{?~TnLhL@v;GQQ=$zLWF#`!p z<(|Dilza5)@VS|P7M8;-zy!l;3# z%JpKsH3=^u(#makX8EKntb8`6GQ#n3+*p?y0GM$H%6FNIEOxa^1G{n6z^1xIFyHOs zn5}_xz#CH%X~X$4p-djMQ%DqOoSKVX5eZEvr3+ul6tr7iJ&CNC(KrN6cGD4PX}S@73;a&s1Y}vzKMYF z9^B`=ySclaftOyd){<-j|;S>}A7ZLymS1KhKil_vL1gxe^Aw~o$gBTYW#bO*cNn?~U zsk{%wWE%mh5-sYR6$NDkPzse%YQ&^+fkYOg5XfWz50%BJ1SUBq!AvnKOsYcMP)1Ch zLfXtISWd!>=Hnu(CEqcFx{sF_XxEtYCr}Ei&Aw80Nnk6i#o}MqYl!RMUq7t zxaWM)Gpq-XlM!{GTGW99(4G@VR`-cRAeO1cp7bd=J!vFNW&h5bdU*J;z#lAm8es?X zm$|zHlO~4~wc!c*Ku4ezC{OoUj34P< zsHo??odr0x3P3P{L@bafel3`&i?E2=GrAeaivC5DShqu;O$Nky`oQJ|_Cit5X4s_} zwe9?lSJztnjxzx0{z+a)-+sCJ<$56nUdXw>y87jMAq8H@xxc#pXL50Sk5jk>yahSI zVQEhu`y@DOc^f9AYCZq>dy>@f8n8Ilv|Kwloqa_$T4Lk|7wBX;boyjgD>uMT9i%9h%1%Fj1_nNY9_<+0k%bdu8xqQdg9=F+uv^C>iHy5{oPQhT0CsGGL>P~?cu zjxYKq?A_*eaA@Ajn^?SWJ+Z-BTstG@Q0)DO<%%Dsk>r`XWv_ns=*dUl-Mw2@82x%i z-h$B9goyR+7v}ussPaT;%WT!b?1WO^+DnylTonV#4s)KiFNs4V;Sgs_Sa zX%7TTUDcb{@#q2fhAk;Zwq5YqKlW(g9c@#+SFX=YbjEuv%-bs~*B!gOy!GT4<=OVk zAvKlPxJb_O%x#y#i&7?Q#>8ZYytI5)e$Rlx%&4-TQbz`#oBr}tZEWJ~4#B2^&+DRP z*D?C&b1OD%v*fJ!=+aw*7p`1$KDIi!$*^?ah&T7I$%waXQNeLH4;-F%y?*n~HqOD~ zIQZkY*IdL#(T`O99ONwa8Bq7_5p)Qv*lTX<_V3$QnvSVH%pHE^hTr|~ayYxvsJGIzUPd}g-bg*Mlf%m(i21E0phFR;bd~E_sr6PvWeKUjXigp=1C6 literal 0 HcmV?d00001 diff --git a/src/images/podcast-dark.png b/src/images/podcast-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..2e48af8050731182b46f14c65fb7be24ec4efcfc GIT binary patch literal 4795 zcmeHLdsGu=7N1~M#Pz`zG`==5)GD?~W+t!6NL2EIC_&`4fa}u9%p^?7tI31}yPhie zLO5c#Yq4szx>a`313qeNkwsl)w?}Q&wbsMhiqPY+t?$}B#rj~snS@uDJzLJ%{zo_; z-<|Kf_xIiVyZ5^=smMrA851)(27;h5mQ-UVn8$M?dIb0_deB9H={%ihv0E&&p=j^` zGzHH<0!{}EK_59vFbo<7*4BXWOCWPP+?XsF&d*gqo)VG&0OVN_ohTq9f+%PVn74s} z0yz%Mbzm@S!)G-EnfpZZKdC_Ckh|v;i#0=x$`Dwlz<@oBDscqH5tSIha8!*ev_M<% zPOnEC(!b^p{}iCCVhn~1i@_lF`aE{VNkdR*+w#|SsVC=8Z7IyE%$z-~Aol_$Qp z?*6qSqPur=cdiQbdrvD5$puA?G?i&VY6{~Y6~-EchG?-wacJ&L3lrMV@M>r0vWYkH zuikh%wfyB1)QUyVrSESfVm;%}IST@xJUX>F_syIRf5)hDS?c4D0xj1ypUhZ0eETHT z!M92~W*x};hS!OOaphD*H zIpl~|tChp397Ux-L+USevqVVh_9t)urS%O&q?;b%=H03_njfENDjQZFsfr2U?NkEBf{w3|)n50Odt z#`F^)fOU>Q{WMv|{$D)f zc6dJeMgq)xa0iToR|Z;ED{l0V0nR;(Q6~W_GK!&a*nsIZW|aXotMv$CLNTLBi=jq^ z#ssUh8nd>Kxy9{g2{%c1n=`;1(LfjFx@X%8?jJ?4gppur z0NT^Iv%4F&6jtJJ*nJMp>Y*5W>HpH^ZksqMoZ?i*56&;;m%>*ti+&~i6n=Cv{M{3a z`CEh&WH8WaPAQXZ|z@U_es_XwoS4{7FA?*hLodv;LU)_pp+_woMYztG2{JSIc z&~WrMAdT{-=KCRN^t0R$KwGv6!Qx2PVl|EYDrVe-$ukqT?L7^?7O1uule4iiu8Yak zWkNXe-np*t9bd;CP~zr_UsY~iSHJMW?yRaj8(WZuG*&(T&qP~oeZqz5yRxb(_B7Qt zvO**{hIYR z4y^jp{CCldxtC7AKD?lq3{^6>$oPf>v0uc0p6(z+)k|^?x0&v}*fI~<)KU8Qqs`;g z@gFO<>l+T2#1?v2oH>GsQ%;dhCmr7{o@RezUk7#PB~c~z#sQ&o)XZJC$@dq|**_s! zv}peZ&7_+rez>r2x4rRl!Id*DQ%^SB^2Us*P59irx^2|4wQtKDHJ3)d;*Az<8n?Z4 z-^twHTb%Z}<*&Au&Ux^bck7Xj4|8jlteztjQe&s&s21lud;jEbj%+GwUkV(V&=!@} z{_@q|jSZF``|Fv_%(NY4J4D$1(zD-AsksMLuSwcpHSzvgEVu5P_Tv?!JIC8JSA`o| zn~sO}H9^y|FA3_&59>zkY8N)teZl$^s+8Bh+*$ZA828(puCKcUGcNky`P->g30yKQ MrgUSy{-v^i15wYA;{X5v literal 0 HcmV?d00001 diff --git a/src/images/podcast.png b/src/images/podcast-light.png similarity index 100% rename from src/images/podcast.png rename to src/images/podcast-light.png diff --git a/src/images/return-dark.png b/src/images/return-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..4dd850f43e2eaa61710c7ad951efefdc8cd8142d GIT binary patch literal 4549 zcmeHKYj6|S6<*l^6DPbEvOX#26Bi&a|O1ZW<=fnv9b|k~ZK#mQ?MSZK;(b%8&{*jSokX**84SjNFJ zcCa=*JrGNb{^=N)6s4~)tJ^OQ{&dNOk31g@n0)(wWjjEc8V`y>O^DvTY2l}v=5rXn0NzC7RGkUDg2o2C5nFVe@( zI^Vgqea2IZ?E9Z=9$N9^`oEy(+8a*yZGWMI?|#1a@Z)O3+1_If`yBP>p1SCR+sxA!+deybA^Gc} zQ_t>MP*KowQ~%YH!hdC2n%;f=$YY5^_Z1BPu;uG-zW?%T51wBCyFDAtP1kJuNz2an zd!GNmw0reif34l<5Z3&_^7ClgJE;LQeC}PA701ua>9ZHIU-uJiIjd|SlMma6yi6F z8Xgg2Qqn_QICO--CBZ}7We-!~lwWL=%C{=2=8bB(o#0@?Ko)qI^0`^iNY`js8^&^e4riIm|5r!~P+ zlcJv!nZ9E1F+LM;AH|(C55pL&!eN$^`LrHhi1QGju?UjDQeL;$;dANKLpGNgF;Ut~yX|(XD-xk1 zj5rQry&^#=qxfWza6y~f8*l`z978!=H0^Tv9e$s~N^?#}&_y!_jKH%&SxF!`e<^`t zBAH6Yj0K%w)>|F&5R8Qy(^SWi76k_nu}(^+vttW&QbMfNkj@_MWZaY$HncnKwA(q( z`%Y0&p>%ajquCnn`Z2JO2oQ<%!Uh0C4~(*YMMRpc)X8$(LyWfR(d97QKLKfoLz)Pn zqm8?6q;Ug{ER_pDhYQPs6m9-r*7|M3%W_9tE~&78v!Tje!CG-k?kV>emyElIb9*mB5(pKN&Mn$`nmIZIm-#)jSI?iN-ao&@PrgRJ#2o;7dXp*fJ5AR#T~lIU zO2*UGHBHx)7?_grbanmT=qet2FBFsT>nsCreP=H2cog0kXGSX5a>lzOcFBL}0g$du zl{csucHLL>VZu7QN)$+cI#_y>`9o%#8^~IOo+_ACvV)rlC4ea@6blBb|3ZK1{pRX>R~N>&Ji1+4-qP9o^B4VB z8#dlu@n-X>vZ~6LDo-47ZaF^lMC&DW+xGJx|M70Fi#|TT=z;d4meng3?ODxTucs9X LRB=7Nds_bu;0qJ( literal 0 HcmV?d00001 diff --git a/src/images/return.png b/src/images/return-light.png similarity index 100% rename from src/images/return.png rename to src/images/return-light.png diff --git a/src/images/split-2-dark.png b/src/images/split-2-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..3e9a7eba31d28d04cb7b4d486e0d727352a4e1a0 GIT binary patch literal 4577 zcmeHKeNYtV8Q(*L1WVKuKdN?ISDc9H-G1EnmNVYn-f<@$Qot1KWax6ccWk-4z3%RD z2OTE@X#hzyowi{rj%ivG6KJtwq^Tx~iL{-5L?@)_ILsJi#*$VWlQwN>;zys|JHA>v z4KvMu+|A4T?DIa)?|q)%`@9dg9c87(dAVzI5d_Ke`s=P6OMI0- z;$-evgTF?pI*p1Pn?_!(p z;Ds->e=z#;hMVs>-n*i6_5R9q64%w8=DBh|*;TXhMP@S*0+A`JhyLGLFrFUvn#~q7bANTZ+v{=OAkN2drTg?x7Fag^~=Q2HR~Ij z+wM8?IdlK_8ppPrsQMH8TwC?!OYO%xf<4byoPA2JzV^ycb+4sr{K&0uKHGA(|2K(4 zKlHIHN}fVp&P6LL*^Q;WrTaTR^XCT~w>BN9!Ma?1xohmJ%38B8f6#jO{LR>J$KE>H zoxdZidG*MhHH$tx+Z$S3F|jivKd4zuz-@`-!uK%a~a6=%JCXgf|>pw*BeTJKjN-v<;>@`hV}Z;Ds{a$wxbV0?sE#2RZ3N0Cmj@{29^_Rc|$51R}Ty+dMFiVgY~?E*79K? z=D=>AIftPF=fJ*f4iJI3o39gmO%h+xR9YEqst?*Z?4fPBMJXBpqP)VQsc0l7(B14izF^YmowfB1UxygIz@@oIG#)< z4N0Rxl)^Y^x7%@o!YN7*7J9icrm!h}Ox~nIq%jy?4oX5?5yTj(VzRYjLUCXitfQ0h zMdN|M6nsq1umF7EDK?Ii1_F;p@tGd7;%NYoOh9vb$d!$89xvx*F(CzcPXixQHqC}8 z=cjY}1Q1|83xEqw1rSe25seQni1QIX3VX>AHaRP1^~z3ps2qlcXk7Dx)0$8JE#M9}UYifXrr zW`pSzWVV6lv^W7Py%eltV__cJO{P32^}-xw5aO(a#cbvD_K@A8H?c-DlmXNNYqV2@ znXuY;n`Jh-EQXXMEAh@S@CaPNb67|`J{Ewg`uhAQ(ZlCmTLd}6hE07`4o2m=!H$@#qR=L3v|tk zfq5A(RM!Gs^I~9L#tYT;f1@jR`n`~k!LPF%suMF=p466f@epBl1u8nMXmo zH}0#J5oGCS)uBTU9bN;p3#z9-OW9J7}z^dUiLdOjtmU`;1}0#486Rh!SQ5rG;6)1^|iNm zGCc?C^9S>)ex7aI*B5&IkH-oN{@yp-ew-=jyu0t%(!mSl5&CfN(!uN()^T}1T7ROq nB=U+qeya6Ud(pOnOK-l446h@LrSGmgsHW`qlrnv;ueSUP{NEfw literal 0 HcmV?d00001 diff --git a/src/images/split-2.png b/src/images/split-2-light.png similarity index 100% rename from src/images/split-2.png rename to src/images/split-2-light.png diff --git a/src/images/store-dark.png b/src/images/store-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..836caa8d124624e193216fba3ed3aff0c07f970f GIT binary patch literal 4547 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�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 "wishlist@erdelynet.com", /* The e-mail Reply-To: header. */ - "email_reply_to" => "mike@erdelynet.com", + "email_reply_to" => "wishlist@erdelynet.com", /* The e-mail X-Mailer header. */ "email_xmailer" => "PHP/" . phpversion(), + /* Application name. */ + "app_name" => "Test Gift Registry", + /* Whether or not to show brief blurbs in certain spots which describe how features work. 0 = don't help text, @@ -125,7 +128,39 @@ function getGlobalOptions() { 0 = don't hide it, 1 = hide it */ - "hide_zero_price" => 1, + "hide_zero_price" => 0, + + /* Default raking + This is the default rankings list: + 5 = I'd love to get this + 4 = I would really, really like this + 3 = Would make me happy + 2 = Would be nice to have + 1 = Wouldn't mind it + */ + "default_ranking" => 3, + + /* Default category + This is the default categories list: + 1 = Miscellaneous + 2 = Music + 3 = Video Games + 4 = Clothing + 5 = Movies/DVD + 6 = Gift Certificates + 7 = Hobbies + 8 = Household + 9 = Electronics + 10 = Ornaments/Figurines + 11 = Automotive + 12 = Toys + 13 = Jewelry + 14 = Computer + 15 = Games + 16 = Tools + 17 = Books + */ + "default_category" => 1, /* Whether or not to hash passwords. Your version of MySQL may or may not support it. diff --git a/src/includes/smarty-3.1.48/COMPOSER_RELEASE_NOTES.txt b/src/includes/smarty-3.1.48/COMPOSER_RELEASE_NOTES.txt deleted file mode 100644 index 0644719..0000000 --- a/src/includes/smarty-3.1.48/COMPOSER_RELEASE_NOTES.txt +++ /dev/null @@ -1,31 +0,0 @@ - - -Starting with Smarty 3.1.21 Composer has been configured to load the packages from github. - -******************************************************************************* -* * -* NOTE: Because of this change you must clear your local composer cache with * -* the "composer clearcache" command * -* * -******************************************************************************* - -To get the latest stable version use - "require": { - "smarty/smarty": "~3.1" - } -in your composer.json file. - -To get the trunk version use - "require": { - "smarty/smarty": "~3.1@dev" - } - -The "smarty/smarty" package will start at libs/.... subfolder. - -To retrieve the development and documentation folders add - "require-dev": { - "smarty/smarty-dev": "~3.1@dev" - } - -If you are using (include) the composer generated autoloader.php which is located -in the /vendor folder it is no longer needed to require the Smarty.class.php file. \ No newline at end of file diff --git a/src/includes/smarty-3.1.48/INHERITANCE_RELEASE_NOTES.txt b/src/includes/smarty-3.1.48/INHERITANCE_RELEASE_NOTES.txt deleted file mode 100644 index 67936a8..0000000 --- a/src/includes/smarty-3.1.48/INHERITANCE_RELEASE_NOTES.txt +++ /dev/null @@ -1,91 +0,0 @@ -3.1.3" -New tags for inheritance parent and chilD -{parent} == {$smarty.block.parent} -{child} == {$smarty.block.child} -Both tags support the assign attribute like -{child assign=foo} - -3.1.31 -New tags for inheritance parent and child -{block_parent} == {$smarty.block.parent} -{block_child} == {$smarty.block.child} - -Since 3.1.28 you can mix inheritance by extends resource with the {extends} tag. -A template called by extends resource can extend a subtemplate or chain buy the {extends} tag. -Since 3.1.31 this feature can be turned off by setting the new Smarty property Smarty::$extends_recursion to false. - -3.1.28 -Starting with version 3.1.28 template inheritance is no longer a compile time process. -All {block} tag parent/child relations are resolved at run time. -This does resolve all known existing restrictions (see below). - -The $smarty::$inheritance_merge_compiled_includes property has been removed. -Any access to it is ignored. - -New features: - -Any code outside root {block} tags in child templates is now executed but any output will be ignored. - - {extends 'foo.tpl'} - {$bar = 'on'} // assigns variable $bar seen in parent templates - {block 'buh'}{/block} - - {extends 'foo.tpl'} - {$bar} // the output of variable bar is ignored - {block 'buh'}{/block} - -{block} tags can be dynamically en/disabled by conditions. - - {block 'root'} - {if $foo} - {block 'v1'} - .... - {/block} - {else} - {block 'v1'} - .... - {/block} - {/if} - {/block} - -{block} tags can have variable names. - - {block $foo} - .... - {/block} - -Starting with 3.1.28 you can mix inheritance by extends resource with the {extends} tag. -A template called by extends resource can extend a subtemplate or chain buy the {extends} tag. - -NOTE There is a BC break. If you used the extends resource {extends} tags have been ignored. - -THE FOLLOWING RESTRICTIONS ARE NO LONGER EXISTING: -In Smarty 3.1 template inheritance is a compile time process. All the extending of {block} tags -is done at compile time and the parent and child templates are compiled in a single compiled template. -{include} subtemplate could also {block} tags. Such subtemplate could not compiled by it's own because -it could be used in other context where the {block} extended with a different result. For that reasion -the compiled code of {include} subtemplates gets also merged in compiled inheritance template. - -Merging the code into a single compile template has some drawbacks. -1. You could not use variable file names in {include} Smarty would use the {include} of compilation time. -2. You could not use individual compile_id in {include} -3. Separate caching of subtemplate was not possible -4. Any change of the template directory structure between calls was not necessarily seen. - -Starting with 3.1.15 some of the above conditions got checked and resulted in an exception. It turned out -that a couple of users did use some of above and now got exceptions. - -To resolve this starting with 3.1.16 there is a new configuration parameter $inheritance_merge_compiled_includes. -For most backward compatibility its default setting is true. -With this setting all {include} subtemplate will be merge into the compiled inheritance template, but the above cases -could be rejected by exception. - - -If $smarty->inheritance_merge_compiled_includes = false; {include} subtemplate will not be merged.You must now manually merge all {include} subtemplate which do contain {block} tags. This is done by setting the "inline" option. -{include file='foo.bar' inline} - -1. In case of a variable file name like {include file=$foo inline} you must use the variable in a compile_id $smarty->compile_id = $foo; -2. If you use individual compile_id in {include file='foo.tpl' compile_id=$bar inline} it must be used in the global compile_id as well $smarty->compile_id = $bar; -3. If call templates with different template_dir configurations and a parent could same named child template from different folders - you must make the folder name part of the compile_id. - diff --git a/src/includes/smarty-3.1.48/NEW_FEATURES.txt b/src/includes/smarty-3.1.48/NEW_FEATURES.txt deleted file mode 100644 index 0b2cae1..0000000 --- a/src/includes/smarty-3.1.48/NEW_FEATURES.txt +++ /dev/null @@ -1,291 +0,0 @@ - - -This file contains a brief description of new features which have been added to Smarty 3.1 - -Smarty 3.1.33-dev - Variable capture name in Smarty special variable - ================================================ - {$smarty.capture.$foo} can now be used to access the content of a named - capture block - -Smarty 3.1.32 - New tags for inheritance parent and child - ========================================= - {parent} == {$smarty.block.parent} - {child} == {$smarty.block.child} - Both tags support the assign attribute like - {child assign=foo} - - Deprecate functions Smarty::muteExpectedErrors() and Smarty::unmuteExpectedErrors() - =================================================================================== - These functions to start a special error handler are no longer needed as Smarty does - no longer use error suppression like @filemtime(). - For backward compatibility the functions still can be called. - - Using literals containing Smarty's left and right delimiter - =========================================================== - New Methods - $smarty->setLiterals(array $literals) - $smarty->addLiterals(array $literals) - to define literals containing Smarty delimiter. This can avoid the need for extreme usage - of {literal} {/literal} tags. - A) Treat '{{' and '}}' as literal - If Smarty::$auto_literal is enabled - {{ foo }} - will be treated now as literal. (This does apply for any number of delimiter repeatations). - However {{foo}} is not an literal but will be interpreted as a recursive Smarty tag. - If you use - $smarty->setLiterals(array('{{','}}')); - {{foo}} is now a literal as well. - NOTE: In the last example nested Smarty tags starting with '{{' or ending with '}}' will not - work any longer, but this should be very very raw occouring restriction. - B) Example 2 - Assume your delimiter are '<-' , '->' and '<--' , '-->' shall be literals - $smarty->setLiterals(array('<--','-->')); - - - The capture buffers can now be accessed as array - ================================================ - {capture name='foo'} - bah - {\capture} - {capture name='buh'} - blar - {\capture} - {foreach $smarty.capture as $name => $buffer} - .... - {/foreach} - -Smarty 3.1.31 - New tags for inheritance parent and child - ========================================= - {block_parent} == {$smarty.block.parent} - {block_child} == {$smarty.block.child} - -Smarty 3.1.30 - - Loop optimization {foreach} and {section} - ========================================= - Smarty does optimize the {foreach} and {section} loops by removing code for not needed loop - properties. - The compiler collects needed properties by scanning the current template for $item@property, - $smarty.foreach.name.property and $smarty.section.name.property. - The compiler does not know if additional properties will be needed outside the current template scope. - Additional properties can be generated by adding them with the property attribute. - - Example: - index.tpl - {foreach $from as $item properties=[iteration, index]} - {include 'sub.tpl'} - {$item.total} - {/foreach} - - sub.tpl - {$item.index} {$item.iteration} {$item.total} - - In above example code for the 'total' property is automatically generated as $item.total is used in - index.tpl. Code for 'iteration' and 'index' must be added with properties=[iteration, index]. - - New tag {make_nocache} - ====================== - Syntax: {make_nocache $foo} - - This tag makes a variable which does exists normally only while rendering the compiled template - available in the cached template for use in not cached expressions. - - Expample: - {foreach from=$list item=item} -
  • {$item.name} {make_nocache $item}{if $current==$item.id} ACTIVE{/if}
  • - {/foreach} - - The {foreach} loop is rendered while processing the compiled template, but $current is a nocache - variable. Normally the {if $current==$item.id} would fail as the $item variable is unknown in the cached template. {make_nocache $item} does make the current $item value known in thee cached template. - - {make_nocache} is ignored when caching is disabled or the variable does exists as nocache variable. - - NOTE: if the variable value does contain objects these must have the __set_state method implemented. - - - Scope Attributes - ================ - The scope handling has been updated to cover all cases of variable assignments in templates. - - The tags {assign}, {append} direct assignments like {$foo = ...}, {$foo[...]= ...} support - the following optional scope attributes: - scope='parent' - the variable will be assigned in the current template and if the template - was included by {include} the calling template - scope='tpl_root' - the variable will be assigned in the outermost root template called by $smarty->display() - or $smarty->fetch() and is bubbled up all {include} sub-templates to the current template. - scope='smarty' - the variable will be assigned in the Smarty object and is bubbled up all {include} sub-templates - to the current template. - scope='global' - the variable will be assigned as Smarty object global variable and is bubbled up all {include} - sub-templates to the current template. - scope='root' - the variable will be assigned if a data object was used for variable definitions in the data - object or in the Smarty object otherwise and is bubbled up all {include} sub-templates to the - current template. - scope='local' - this scope has only a meaning if the tag is called within a template {function}. - The variable will be assigned in the local scope of the template function and the - template which did call the template function. - - - The {config_load} tag supports all of the above except the global scope. - - The scope attribute can be used also with the {include} tag. - Supported scope are parent, tpl_root, smarty, global and root. - A scope used together with the {include} tag will cause that with some exceptions any variable - assignment within that sub-template will update/assign the variable in other scopes according - to the above rules. It does include also variables assigned by plugins, tags supporting the assign=foo attribute and direct assignments in {if} and {while} like {if $foo=$bar}. - Excluded are the key and value variables of {foreach}, {for} loop variables , variables passed by attributes - in {include} and direct increments/decrements like {$foo++}, {$foo--} - - Note: The scopes should be used only to the extend really need. If a variable value assigned in an included - sub-template should be returned to the calling sub-template just use {$foo='bar' scope='parent'}. - Use scopes only with variables for which it's realy needed. Avoid general scope settings with the - {include} tag as it can have a performance impact. - - The {assign}, {append}, {config_load} and {$foo...=...} tags have a new option flag 'noscope'.Thi - Example: {$foo='bar' noscope} This will assign $foo only in the current template and any scope settings - at {include} is ignored. - - - Caching - ======= - Caching does now observe the template_dir setting and will create separate cache files if required - - Compiled Templates - ================== - The template_dir setting is now encoded in the uid of the file name. - The content of the compiled template may depend on the template_dir search order - {include .... inline} is used or $smarty->merge_compiled_includes is enabled - - APC - === - If APC is enabled force an apc_compile_file() when compiled or cached template was updated - -Smarty 3.1.28 - - OPCACHE - ======= - Smarty does now invalidate automatically updated and cleared compiled or cached template files in OPCACHE. - Correct operation is no longer dependent on OPCACHE configuration settings. - - Template inheritance - ==================== - Template inheritance is now processed in run time. - See the INHERITANCE_RELEASE_NOTES - - Modifier regex_replace - ====================== - An optional limit parameter was added - - fetch() and display() - ===================== - The fetch() and display() methods of the template object accept now optionally the same parameter - as the corresponding Smarty methods to get the content of another template. - Example: - $template->display(); Does display template of template object - $template->display('foo.tpl'); Does display template 'foo.bar' - - File: resource - ============== - Multiple template_dir entries can now be selected by a comma separated list of indices. - The template_dir array is searched in the order of the indices. (Could be used to change the default search order) - Example: - $smarty->display('[1],[0]foo.bar'); - - Filter support - ============== - Optional filter names - An optional filter name was added to $smarty->registerFilter(). It can be used to unregister a filter by name. - - $smarty->registerFilter('output', $callback, 'name'); - $smarty->unregister('output', 'name'); - - Closures - $smarty->registerFilter() does now accept closures. - - $smarty->registerFilter('pre', function($source) {return $source;}); - If no optional filter name was specified it gets the default name 'closure'. - If you register multiple closures register each with a unique filter name. - - $smarty->registerFilter('pre', function($source) {return $source;}, 'closure_1'); - - $smarty->registerFilter('pre', function($source) {return $source;}, 'closure_2'); - - -Smarty 3.1.22 - - Namespace support within templates - ================================== - Within templates you can now use namespace specifications on: - - Constants like foo\bar\FOO - - Class names like foo\bar\Baz::FOO, foo\bar\Baz::$foo, foo\bar\Baz::foo() - - PHP function names like foo\bar\baz() - - Security - ======== - - disable special $smarty variable - - The Smarty_Security class has the new property $disabled_special_smarty_vars. - It's an array which can be loaded with the $smarty special variable names like - 'template_object', 'template', 'current_dir' and others which will be disabled. - Note: That this security check is performed at compile time. - - - limit template nesting - - Property $max_template_nesting of Smarty_Security does set the maximum template nesting level. - The main template is level 1. The nesting level is checked at run time. When the maximum will be exceeded - an Exception will be thrown. The default setting is 0 which does disable this check. - - - trusted static methods - - The Smarty_Security class has the new property $trusted_static_methods to restrict access to static methods. - It's an nested array of trusted class and method names. - Format: - array ( - 'class_1' => array('method_1', 'method_2'), // allowed methods - 'class_2' => array(), // all methods of class allowed - ) - To disable access for all methods of all classes set $trusted_static_methods = null; - The default value is an empty array() which does enables all methods of all classes, but for backward compatibility - the setting of $static_classes will be checked. - Note: That this security check is performed at compile time. - - - trusted static properties - - The Smarty_Security class has the new property $trusted_static_properties to restrict access to static properties. - It's an nested array of trusted class and property names. - Format: - array ( - 'class_1' => array('prop_1', 'prop_2'), // allowed properties listed - 'class_2' => array(), // all properties of class allowed - } - To disable access for all properties of all classes set $trusted_static_properties = null; - The default value is an empty array() which does enables all properties of all classes, but for backward compatibility - the setting of $static_classes will be checked. - Note: That this security check is performed at compile time. - - - trusted constants . - The Smarty_Security class has the new property $trusted_constants to restrict access to constants. - It's an array of trusted constant names. - Format: - array ( - 'SMARTY_DIR' , // allowed constant - } - If the array is empty (default) the usage of constants can be controlled with the - Smarty_Security::$allow_constants property (default true) - - - - Compiled Templates - ================== - Smarty does now automatically detects a change of the $merge_compiled_includes and $escape_html - property and creates different compiled templates files depending on the setting. - - Same applies to config files and the $config_overwrite, $config_booleanize and - $config_read_hidden properties. - - Debugging - ========= - The layout of the debug window has been changed for better readability - - New class constants - Smarty::DEBUG_OFF - Smarty::DEBUG_ON - Smarty::DEBUG_INDIVIDUAL - have been introduced for setting the $debugging property. - - Smarty::DEBUG_INDIVIDUAL will create for each display() and fetch() call an individual debug window. - diff --git a/src/includes/smarty-3.1.48/README b/src/includes/smarty-3.1.48/README deleted file mode 100644 index 9a71519..0000000 --- a/src/includes/smarty-3.1.48/README +++ /dev/null @@ -1,575 +0,0 @@ -Smarty 3.x - -Author: Monte Ohrt -Author: Uwe Tews - -AN INTRODUCTION TO SMARTY 3 - -NOTICE FOR 3.1 release: - -Please see the SMARTY_3.1_NOTES.txt file that comes with the distribution. - -NOTICE for 3.0.5 release: - -Smarty now follows the PHP error_reporting level by default. If PHP does not mask E_NOTICE and you try to access an unset template variable, you will now get an E_NOTICE warning. To revert to the old behavior: - -$smarty->error_reporting = E_ALL & ~E_NOTICE; - -NOTICE for 3.0 release: - -IMPORTANT: Some API adjustments have been made between the RC4 and 3.0 release. -We felt it is better to make these now instead of after a 3.0 release, then have to -immediately deprecate APIs in 3.1. Online documentation has been updated -to reflect these changes. Specifically: - ----- API CHANGES RC4 -> 3.0 ---- - -$smarty->register->* -$smarty->unregister->* -$smarty->utility->* -$samrty->cache->* - -Have all been changed to local method calls such as: - -$smarty->clearAllCache() -$smarty->registerFoo() -$smarty->unregisterFoo() -$smarty->testInstall() -etc. - -Registration of function, block, compiler, and modifier plugins have been -consolidated under two API calls: - -$smarty->registerPlugin(...) -$smarty->unregisterPlugin(...) - -Registration of pre, post, output and variable filters have been -consolidated under two API calls: - -$smarty->registerFilter(...) -$smarty->unregisterFilter(...) - -Please refer to the online documentation for all specific changes: - -http://www.smarty.net/documentation - ----- - -The Smarty 3 API has been refactored to a syntax geared -for consistency and modularity. The Smarty 2 API syntax is still supported, but -will throw a deprecation notice. You can disable the notices, but it is highly -recommended to adjust your syntax to Smarty 3, as the Smarty 2 syntax must run -through an extra rerouting wrapper. - -Basically, all Smarty methods now follow the "fooBarBaz" camel case syntax. Also, -all Smarty properties now have getters and setters. So for example, the property -$smarty->cache_dir can be set with $smarty->setCacheDir('foo/') and can be -retrieved with $smarty->getCacheDir(). - -Some of the Smarty 3 APIs have been revoked such as the "is*" methods that were -just duplicate functions of the now available "get*" methods. - -Here is a rundown of the Smarty 3 API: - -$smarty->fetch($template, $cache_id = null, $compile_id = null, $parent = null) -$smarty->display($template, $cache_id = null, $compile_id = null, $parent = null) -$smarty->isCached($template, $cache_id = null, $compile_id = null) -$smarty->createData($parent = null) -$smarty->createTemplate($template, $cache_id = null, $compile_id = null, $parent = null) -$smarty->enableSecurity() -$smarty->disableSecurity() -$smarty->setTemplateDir($template_dir) -$smarty->addTemplateDir($template_dir) -$smarty->templateExists($resource_name) -$smarty->loadPlugin($plugin_name, $check = true) -$smarty->loadFilter($type, $name) -$smarty->setExceptionHandler($handler) -$smarty->addPluginsDir($plugins_dir) -$smarty->getGlobal($varname = null) -$smarty->getRegisteredObject($name) -$smarty->getDebugTemplate() -$smarty->setDebugTemplate($tpl_name) -$smarty->assign($tpl_var, $value = null, $nocache = false) -$smarty->assignGlobal($varname, $value = null, $nocache = false) -$smarty->assignByRef($tpl_var, &$value, $nocache = false) -$smarty->append($tpl_var, $value = null, $merge = false, $nocache = false) -$smarty->appendByRef($tpl_var, &$value, $merge = false) -$smarty->clearAssign($tpl_var) -$smarty->clearAllAssign() -$smarty->configLoad($config_file, $sections = null) -$smarty->getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true) -$smarty->getConfigVariable($variable) -$smarty->getStreamVariable($variable) -$smarty->getConfigVars($varname = null) -$smarty->clearConfig($varname = null) -$smarty->getTemplateVars($varname = null, $_ptr = null, $search_parents = true) -$smarty->clearAllCache($exp_time = null, $type = null) -$smarty->clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) - -$smarty->registerPlugin($type, $tag, $callback, $cacheable = true, $cache_attr = array()) - -$smarty->registerObject($object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) - -$smarty->registerFilter($type, $function_name) -$smarty->registerResource($resource_type, $function_names) -$smarty->registerDefaultPluginHandler($function_name) -$smarty->registerDefaultTemplateHandler($function_name) - -$smarty->unregisterPlugin($type, $tag) -$smarty->unregisterObject($object_name) -$smarty->unregisterFilter($type, $function_name) -$smarty->unregisterResource($resource_type) - -$smarty->compileAllTemplates($extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null) -$smarty->clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) -$smarty->testInstall() - -// then all the getters/setters, available for all properties. Here are a few: - -$caching = $smarty->getCaching(); // get $smarty->caching -$smarty->setCaching(true); // set $smarty->caching -$smarty->setDeprecationNotices(false); // set $smarty->deprecation_notices -$smarty->setCacheId($id); // set $smarty->cache_id -$debugging = $smarty->getDebugging(); // get $smarty->debugging - - -FILE STRUCTURE - -The Smarty 3 file structure is similar to Smarty 2: - -/libs/ - Smarty.class.php -/libs/sysplugins/ - internal.* -/libs/plugins/ - function.mailto.php - modifier.escape.php - ... - -A lot of Smarty 3 core functionality lies in the sysplugins directory; you do -not need to change any files here. The /libs/plugins/ folder is where Smarty -plugins are located. You can add your own here, or create a separate plugin -directory, just the same as Smarty 2. You will still need to create your own -/cache/, /templates/, /templates_c/, /configs/ folders. Be sure /cache/ and -/templates_c/ are writable. - -The typical way to use Smarty 3 should also look familiar: - -require('Smarty.class.php'); -$smarty = new Smarty; -$smarty->assign('foo','bar'); -$smarty->display('index.tpl'); - - -However, Smarty 3 works completely different on the inside. Smarty 3 is mostly -backward compatible with Smarty 2, except for the following items: - -*) Smarty 3 is PHP 5 only. It will not work with PHP 4. -*) The {php} tag is disabled by default. Enable with $smarty->allow_php_tag=true. -*) Delimiters surrounded by whitespace are no longer treated as Smarty tags. - Therefore, { foo } will not compile as a tag, you must use {foo}. This change - Makes Javascript/CSS easier to work with, eliminating the need for {literal}. - This can be disabled by setting $smarty->auto_literal = false; -*) The Smarty 3 API is a bit different. Many Smarty 2 API calls are deprecated - but still work. You will want to update your calls to Smarty 3 for maximum - efficiency. - - -There are many things that are new to Smarty 3. Here are the notable items: - -LEXER/PARSER -============ - -Smarty 3 now uses a lexing tokenizer for its parser/compiler. Basically, this -means Smarty has some syntax additions that make life easier such as in-template -math, shorter/intuitive function parameter options, infinite function recursion, -more accurate error handling, etc. - - -WHAT IS NEW IN SMARTY TEMPLATE SYNTAX -===================================== - -Smarty 3 allows expressions almost anywhere. Expressions can include PHP -functions as long as they are not disabled by the security policy, object -methods and properties, etc. The {math} plugin is no longer necessary but -is still supported for BC. - -Examples: -{$x+$y} will output the sum of x and y. -{$foo = strlen($bar)} function in assignment -{assign var=foo value= $x+$y} in attributes -{$foo = myfunct( ($x+$y)*3 )} as function parameter -{$foo[$x+3]} as array index - -Smarty tags can be used as values within other tags. -Example: {$foo={counter}+3} - -Smarty tags can also be used inside double quoted strings. -Example: {$foo="this is message {counter}"} - -You can define arrays within templates. -Examples: -{assign var=foo value=[1,2,3]} -{assign var=foo value=['y'=>'yellow','b'=>'blue']} -Arrays can be nested. -{assign var=foo value=[1,[9,8],3]} - -There is a new short syntax supported for assigning variables. -Example: {$foo=$bar+2} - -You can assign a value to a specific array element. If the variable exists but -is not an array, it is converted to an array before the new values are assigned. -Examples: -{$foo['bar']=1} -{$foo['bar']['blar']=1} - -You can append values to an array. If the variable exists but is not an array, -it is converted to an array before the new values are assigned. -Example: {$foo[]=1} - -You can use a PHP-like syntax for accessing array elements, as well as the -original "dot" notation. -Examples: -{$foo[1]} normal access -{$foo['bar']} -{$foo['bar'][1]} -{$foo[$x+$x]} index may contain any expression -{$foo[$bar[1]]} nested index -{$foo[section_name]} smarty section access, not array access! - -The original "dot" notation stays, and with improvements. -Examples: -{$foo.a.b.c} => $foo['a']['b']['c'] -{$foo.a.$b.c} => $foo['a'][$b]['c'] with variable index -{$foo.a.{$b+4}.c} => $foo['a'][$b+4]['c'] with expression as index -{$foo.a.{$b.c}} => $foo['a'][$b['c']] with nested index - -note that { and } are used to address ambiguties when nesting the dot syntax. - -Variable names themselves can be variable and contain expressions. -Examples: -$foo normal variable -$foo_{$bar} variable name containing other variable -$foo_{$x+$y} variable name containing expressions -$foo_{$bar}_buh_{$blar} variable name with multiple segments -{$foo_{$x}} will output the variable $foo_1 if $x has a value of 1. - -Object method chaining is implemented. -Example: {$object->method1($x)->method2($y)} - -{for} tag added for looping (replacement for {section} tag): -{for $x=0, $y=count($foo); $x<$y; $x++} .... {/for} -Any number of statements can be used separated by comma as the first -initial expression at {for}. - -{for $x = $start to $end step $step} ... {/for}is in the SVN now . -You can use also -{for $x = $start to $end} ... {/for} -In this case the step value will be automatically 1 or -1 depending on the start and end values. -Instead of $start and $end you can use any valid expression. -Inside the loop the following special vars can be accessed: -$x@iteration = number of iteration -$x@total = total number of iterations -$x@first = true on first iteration -$x@last = true on last iteration - - -The Smarty 2 {section} syntax is still supported. - -New shorter {foreach} syntax to loop over an array. -Example: {foreach $myarray as $var}...{/foreach} - -Within the foreach loop, properties are access via: - -$var@key foreach $var array key -$var@iteration foreach current iteration count (1,2,3...) -$var@index foreach current index count (0,1,2...) -$var@total foreach $var array total -$var@first true on first iteration -$var@last true on last iteration - -The Smarty 2 {foreach} tag syntax is still supported. - -NOTE: {$bar[foo]} still indicates a variable inside of a {section} named foo. -If you want to access an array element with index foo, you must use quotes -such as {$bar['foo']}, or use the dot syntax {$bar.foo}. - -while block tag is now implemented: -{while $foo}...{/while} -{while $x lt 10}...{/while} - -Direct access to PHP functions: -Just as you can use PHP functions as modifiers directly, you can now access -PHP functions directly, provided they are permitted by security settings: -{time()} - -There is a new {function}...{/function} block tag to implement a template function. -This enables reuse of code sequences like a plugin function. It can call itself recursively. -Template function must be called with the new {call name=foo...} tag. - -Example: - -Template file: -{function name=menu level=0} -
      - {foreach $data as $entry} - {if is_array($entry)} -
    • {$entry@key}
    • - {call name=menu data=$entry level=$level+1} - {else} -
    • {$entry}
    • - {/if} - {/foreach} -
    -{/function} - -{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' => - ['item3-3-1','item3-3-2']],'item4']} - -{call name=menu data=$menu} - - -Generated output: - * item1 - * item2 - * item3 - o item3-1 - o item3-2 - o item3-3 - + item3-3-1 - + item3-3-2 - * item4 - -The function tag itself must have the "name" attribute. This name is the tag -name when calling the function. The function tag may have any number of -additional attributes. These will be default settings for local variables. - -New {nocache} block function: -{nocache}...{/nocache} will declare a section of the template to be non-cached -when template caching is enabled. - -New nocache attribute: -You can declare variable/function output as non-cached with the nocache attribute. -Examples: - -{$foo nocache=true} -{$foo nocache} /* same */ - -{foo bar="baz" nocache=true} -{foo bar="baz" nocache} /* same */ - -{time() nocache=true} -{time() nocache} /* same */ - -Or you can also assign the variable in your script as nocache: -$smarty->assign('foo',$something,true); // third param is nocache setting -{$foo} /* non-cached */ - -$smarty.current_dir returns the directory name of the current template. - -You can use strings directly as templates with the "string" resource type. -Examples: -$smarty->display('string:This is my template, {$foo}!'); // php -{include file="string:This is my template, {$foo}!"} // template - - - -VARIABLE SCOPE / VARIABLE STORAGE -================================= - -In Smarty 2, all assigned variables were stored within the Smarty object. -Therefore, all variables assigned in PHP were accessible by all subsequent -fetch and display template calls. - -In Smarty 3, we have the choice to assign variables to the main Smarty object, -to user-created data objects, and to user-created template objects. -These objects can be chained. The object at the end of a chain can access all -variables belonging to that template and all variables within the parent objects. -The Smarty object can only be the root of a chain, but a chain can be isolated -from the Smarty object. - -All known Smarty assignment interfaces will work on the data and template objects. - -Besides the above mentioned objects, there is also a special storage area for -global variables. - -A Smarty data object can be created as follows: -$data = $smarty->createData(); // create root data object -$data->assign('foo','bar'); // assign variables as usual -$data->config_load('my.conf'); // load config file - -$data= $smarty->createData($smarty); // create data object having a parent link to -the Smarty object - -$data2= $smarty->createData($data); // create data object having a parent link to -the $data data object - -A template object can be created by using the createTemplate method. It has the -same parameter assignments as the fetch() or display() method. -Function definition: -function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null) - -The first parameter can be a template name, a smarty object or a data object. - -Examples: -$tpl = $smarty->createTemplate('mytpl.tpl'); // create template object not linked to any parent -$tpl->assign('foo','bar'); // directly assign variables -$tpl->config_load('my.conf'); // load config file - -$tpl = $smarty->createTemplate('mytpl.tpl',$smarty); // create template having a parent link to the Smarty object -$tpl = $smarty->createTemplate('mytpl.tpl',$data); // create template having a parent link to the $data object - -The standard fetch() and display() methods will implicitly create a template object. -If the $parent parameter is not specified in these method calls, the template object -is will link back to the Smarty object as it's parent. - -If a template is called by an {include...} tag from another template, the -subtemplate links back to the calling template as it's parent. - -All variables assigned locally or from a parent template are accessible. If the -template creates or modifies a variable by using the {assign var=foo...} or -{$foo=...} tags, these new values are only known locally (local scope). When the -template exits, none of the new variables or modifications can be seen in the -parent template(s). This is same behavior as in Smarty 2. - -With Smarty 3, we can assign variables with a scope attribute which allows the -availablility of these new variables or modifications globally (ie in the parent -templates.) - -Possible scopes are local, parent, root and global. -Examples: -{assign var=foo value='bar'} // no scope is specified, the default 'local' -{$foo='bar'} // same, local scope -{assign var=foo value='bar' scope='local'} // same, local scope - -{assign var=foo value='bar' scope='parent'} // Values will be available to the parent object -{$foo='bar' scope='parent'} // (normally the calling template) - -{assign var=foo value='bar' scope='root'} // Values will be exported up to the root object, so they can -{$foo='bar' scope='root'} // be seen from all templates using the same root. - -{assign var=foo value='bar' scope='global'} // Values will be exported to global variable storage, -{$foo='bar' scope='global'} // they are available to any and all templates. - - -The scope attribute can also be attached to the {include...} tag. In this case, -the specified scope will be the default scope for all assignments within the -included template. - - -PLUGINS -======= - -Smarty 3 plugins follow the same coding rules as in Smarty 2. -The main difference is that the template object is now passed in place of the smarty object. -The smarty object can be still be accessed through $template->smarty. - -smarty_plugintype_name (array $params, Smarty_Internal_Template $template) - -The Smarty 2 plugins are still compatible as long as they do not make use of specific Smarty 2 internals. - - -TEMPLATE INHERITANCE: -===================== - -With template inheritance you can define blocks, which are areas that can be -overridden by child templates, so your templates could look like this: - -parent.tpl: - - - {block name='title'}My site name{/block} - - -

    {block name='page-title'}Default page title{/block}

    -
    - {block name='content'} - Default content - {/block} -
    - - - -child.tpl: -{extends file='parent.tpl'} -{block name='title'} -Child title -{/block} - -grandchild.tpl: -{extends file='child.tpl'} -{block name='title'}Home - {$smarty.block.parent}{/block} -{block name='page-title'}My home{/block} -{block name='content'} - {foreach $images as $img} - {$img.description} - {/foreach} -{/block} - -We redefined all the blocks here, however in the title block we used {$smarty.block.parent}, -which tells Smarty to insert the default content from the parent template in its place. -The content block was overridden to display the image files, and page-title has also be -overridden to display a completely different title. - -If we render grandchild.tpl we will get this: - - - Home - Child title - - -

    My home

    -
    - image - image - image -
    - - - -NOTE: In the child templates everything outside the {extends} or {block} tag sections -is ignored. - -The inheritance tree can be as big as you want (meaning you can extend a file that -extends another one that extends another one and so on..), but be aware that all files -have to be checked for modifications at runtime so the more inheritance the more overhead you add. - -Instead of defining the parent/child relationships with the {extends} tag in the child template you -can use the resource as follow: - -$smarty->display('extends:parent.tpl|child.tpl|grandchild.tpl'); - -Child {block} tags may optionally have a append or prepend attribute. In this case the parent block content -is appended or prepended to the child block content. - -{block name='title' append} My title {/block} - - -PHP STREAMS: -============ - -(see online documentation) - -VARIBLE FILTERS: -================ - -(see online documentation) - - -STATIC CLASS ACCESS AND NAMESPACE SUPPORT -========================================= - -You can register a class with optional namespace for the use in the template like: - -$smarty->register->templateClass('foo','name\name2\myclass'); - -In the template you can use it like this: -{foo::method()} etc. - - -======================= - -Please look through it and send any questions/suggestions/etc to the forums. - -http://www.phpinsider.com/smarty-forum/viewtopic.php?t=14168 - -Monte and Uwe diff --git a/src/includes/smarty-3.1.48/README.md b/src/includes/smarty-3.1.48/README.md deleted file mode 100644 index b57969c..0000000 --- a/src/includes/smarty-3.1.48/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# Smarty 3 template engine -[smarty.net](https://www.smarty.net/) - -[![Build Status](https://travis-ci.org/smarty-php/smarty.svg?branch=master)](https://travis-ci.org/smarty-php/smarty) - -## Documentation - -For documentation see -[www.smarty.net/docs/en/](https://www.smarty.net/docs/en/) - -## Requirements - -Smarty can be run with PHP 5.2 to PHP 7.4. - -## Distribution repository - -> Smarty 3.1.28 introduces run time template inheritance - -> Read the NEW_FEATURES and INHERITANCE_RELEASE_NOTES file for recent extensions to Smarty 3.1 functionality - -Smarty versions 3.1.11 or later are now on GitHub and can be installed with Composer. - - -The "smarty/smarty" package will start at libs/.... subfolder. - -To get the latest stable version of Smarty 3.1 use: - -```json -"require": { - "smarty/smarty": "~3.1" -} -``` - -in your composer.json file. - -To get the trunk version use: - -```json -"require": { - "smarty/smarty": "~3.1@dev" -} -``` - -For a specific version use something like: - -```json -"require": { - "smarty/smarty": "3.1.19" -} -``` - -PHPUnit test can be installed by corresponding composer entries like: - -```json -"require": { - "smarty/smarty-phpunit": "3.1.19" -} -``` - -Similar applies for the lexer/parser generator. - -```json -"require": { - "smarty/smarty-lexer": "3.1.19" -} -``` - -Or you could use: - -```json -"require": { - "smarty/smarty-dev": "3.1.19" -} -``` - -Which is a wrapper to install all 3 packages. - -Composer can also be used for Smarty2 versions 2.6.24 to 2.6.30. diff --git a/src/includes/smarty-3.1.48/SECURITY.md b/src/includes/smarty-3.1.48/SECURITY.md deleted file mode 100644 index d98ea01..0000000 --- a/src/includes/smarty-3.1.48/SECURITY.md +++ /dev/null @@ -1,19 +0,0 @@ -# Security Policy - -## Supported Versions - -Smarty currently supports the latest minor version of Smarty 3 and Smarty 4. (Smarty 4 has not been released yet.) - -| Version | Supported | -| ------- | ------------------ | -| 4.0.x | :white_check_mark: | -| 3.1.x | :white_check_mark: | -| < 3.1 | :x: | - -## Reporting a Vulnerability - - If you have discovered a security issue with Smarty, please contact us at mail [at] simonwisselink.nl. Do not - disclose your findings publicly and PLEASE PLEASE do not file an Issue. - -We will try to confirm the vulnerability and develop a fix if appropriate. When we release the fix, we will publish -a security release. Please let us know if you want to be credited. diff --git a/src/includes/smarty-3.1.48/SMARTY_2_BC_NOTES.txt b/src/includes/smarty-3.1.48/SMARTY_2_BC_NOTES.txt deleted file mode 100644 index fd36bd3..0000000 --- a/src/includes/smarty-3.1.48/SMARTY_2_BC_NOTES.txt +++ /dev/null @@ -1,109 +0,0 @@ -= Known incompatibilities with Smarty 2 = - -== Syntax == - -Smarty 3 API has a new syntax. Much of the Smarty 2 syntax is supported -by a wrapper but deprecated. See the README that comes with Smarty 3 for more -information. - -The {$array|@mod} syntax has always been a bit confusing, where an "@" is required -to apply a modifier to an array instead of the individual elements. Normally you -always want the modifier to apply to the variable regardless of its type. In Smarty 3, -{$array|mod} and {$array|@mod} behave identical. It is safe to drop the "@" and the -modifier will still apply to the array. If you really want the modifier to apply to -each array element, you must loop the array in-template, or use a custom modifier that -supports array iteration. Most smarty functions already escape values where necessary -such as {html_options} - -== PHP Version == -Smarty 3 is PHP 5 only. It will not work with PHP 4. - -== {php} Tag == -The {php} tag is disabled by default. The use of {php} tags is -deprecated. It can be enabled with $smarty->allow_php_tag=true. - -But if you scatter PHP code which belongs together into several -{php} tags it may not work any longer. - -== Delimiters and whitespace == -Delimiters surrounded by whitespace are no longer treated as Smarty tags. -Therefore, { foo } will not compile as a tag, you must use {foo}. This change -Makes Javascript/CSS easier to work with, eliminating the need for {literal}. -This can be disabled by setting $smarty->auto_literal = false; - -== Unquoted Strings == -Smarty 2 was a bit more forgiving (and ambiguous) when it comes to unquoted strings -in parameters. Smarty3 is more restrictive. You can still pass strings without quotes -so long as they contain no special characters. (anything outside of A-Za-z0-9_) - -For example filename strings must be quoted - -{include file='path/foo.tpl'} - - -== Extending the Smarty class == -Smarty 3 makes use of the __construct method for initialization. If you are extending -the Smarty class, its constructor is not called implicitly if the your child class defines -its own constructor. In order to run Smarty's constructor, a call to parent::__construct() -within your child constructor is required. - - -class MySmarty extends Smarty { - function __construct() { - parent::__construct(); - - // your initialization code goes here - - } -} - - -== Autoloader == -Smarty 3 does register its own autoloader with spl_autoload_register. If your code has -an existing __autoload function then this function must be explicitly registered on -the __autoload stack. See http://us3.php.net/manual/en/function.spl-autoload-register.php -for further details. - -== Plugin Filenames == -Smarty 3 optionally supports the PHP spl_autoloader. The autoloader requires filenames -to be lower case. Because of this, Smarty plugin file names must also be lowercase. -In Smarty 2, mixed case file names did work. - -== Scope of Special Smarty Variables == -In Smarty 2 the special Smarty variables $smarty.section... and $smarty.foreach... -had global scope. If you had loops with the same name in subtemplates you could accidentally -overwrite values of parent template. - -In Smarty 3 these special Smarty variable have only local scope in the template which -is defining the loop. If you need their value in a subtemplate you have to pass them -as parameter. - -{include file='path/foo.tpl' index=$smarty.section.foo.index} - - -== SMARTY_RESOURCE_CHAR_SET == -Smarty 3 sets the constant SMARTY_RESOURCE_CHAR_SET to utf-8 as default template charset. -This is now used also on modifiers like escape as default charset. If your templates use -other charsets make sure that you define the constant accordingly. Otherwise you may not -get any output. - -== newline at {if} tags == -A \n was added to the compiled code of the {if},{else},{elseif},{/if} tags to get output of newlines as expected by the template source. -If one of the {if} tags is at the line end you will now get a newline in the HTML output. - -== trigger_error() == -The API function trigger_error() has been removed because it did just map to PHP trigger_error. -However it's still included in the Smarty2 API wrapper. - -== Smarty constants == -The constants -SMARTY_PHP_PASSTHRU -SMARTY_PHP_QUOTE -SMARTY_PHP_REMOVE -SMARTY_PHP_ALLOW -have been replaced with class constants -Smarty::PHP_PASSTHRU -Smarty::PHP_QUOTE -Smarty::PHP_REMOVE -Smarty::PHP_ALLOW - diff --git a/src/includes/smarty-3.1.48/SMARTY_3.0_BC_NOTES.txt b/src/includes/smarty-3.1.48/SMARTY_3.0_BC_NOTES.txt deleted file mode 100644 index 24bdec6..0000000 --- a/src/includes/smarty-3.1.48/SMARTY_3.0_BC_NOTES.txt +++ /dev/null @@ -1,24 +0,0 @@ -== Smarty2 backward compatibility == -All Smarty2 specific API functions and deprecated functionality has been moved -to the SmartyBC class. - -== {php} Tag == -The {php} tag is no longer available in the standard Smarty calls. -The use of {php} tags is deprecated and only available in the SmartyBC class. - -== {include_php} Tag == -The {include_php} tag is no longer available in the standard Smarty calls. -The use of {include_php} tags is deprecated and only available in the SmartyBC class. - -== php template resource == -The support of the php template resource is removed. - -== $cache_dir, $compile_dir, $config_dir, $template_dir access == -The mentioned properties can't be accessed directly any longer. You must use -corresponding getter/setters like addConfigDir(), setConfigDir(), getConfigDir() - -== obsolete Smarty class properties == -The following no longer used properties are removed: -$allow_php_tag -$allow_php_template -$deprecation_notices \ No newline at end of file diff --git a/src/includes/smarty-3.1.48/SMARTY_3.1_NOTES.txt b/src/includes/smarty-3.1.48/SMARTY_3.1_NOTES.txt deleted file mode 100644 index d7c23cc..0000000 --- a/src/includes/smarty-3.1.48/SMARTY_3.1_NOTES.txt +++ /dev/null @@ -1,306 +0,0 @@ -Smarty 3.1 Notes -================ - -Smarty 3.1 is a departure from 2.0 compatibility. Most notably, all -backward compatibility has been moved to a separate class file named -SmartyBC.class.php. If you require compatibility with 2.0, you will -need to use this class. - -Some differences from 3.0 are also present. 3.1 begins the journey of -requiring setters/getters for property access. So far this is only -implemented on the five directory properties: template_dir, -plugins_dir, configs_dir, compile_dir and cache_dir. These properties -are now protected, it is required to use the setters/getters instead. -That said, direct property access will still work, however slightly -slower since they will now fall through __set() and __get() and in -turn passed through the setter/getter methods. 3.2 will exhibit a full -list of setter/getter methods for all (currently) public properties, -so code-completion in your IDE will work as expected. - -There is absolutely no PHP allowed in templates any more. All -deprecated features of Smarty 2.0 are gone. Again, use the SmartyBC -class if you need any backward compatibility. - -Internal Changes - - Full UTF-8 Compatibility - -The plugins shipped with Smarty 3.1 have been rewritten to fully -support UTF-8 strings if Multibyte String is available. Without -MBString UTF-8 cannot be handled properly. For those rare cases where -templates themselves have to juggle encodings, the new modifiers -to_charset and from_charset may come in handy. - - Plugin API and Performance - -All Plugins (modifiers, functions, blocks, resources, -default_template_handlers, etc) are now receiving the -Smarty_Internal_Template instance, where they were supplied with the -Smarty instance in Smarty 3.0. *. As The Smarty_Internal_Template -mimics the behavior of Smarty, this API simplification should not -require any changes to custom plugins. - -The plugins shipped with Smarty 3.1 have been rewritten for better -performance. Most notably {html_select_date} and {html_select_time} -have been improved vastly. Performance aside, plugins have also been -reviewed and generalized in their API. {html_select_date} and -{html_select_time} now share almost all available options. - -The escape modifier now knows the $double_encode option, which will -prevent entities from being encoded again. - -The capitalize modifier now know the $lc_rest option, which makes sure -all letters following a capital letter are lower-cased. - -The count_sentences modifier now accepts (.?!) as -legitimate endings of a sentence - previously only (.) was -accepted - -The new unescape modifier is there to reverse the effects of the -escape modifier. This applies to the escape formats html, htmlall and -entity. - - default_template_handler_func - -The invocation of $smarty->$default_template_handler_func had to be -altered. Instead of a Smarty_Internal_Template, the fifth argument is -now provided with the Smarty instance. New footprint: - - -/** - * Default Template Handler - * - * called when Smarty's file: resource is unable to load a requested file - * - * @param string $type resource type (e.g. "file", "string", "eval", "resource") - * @param string $name resource name (e.g. "foo/bar.tpl") - * @param string &$content template's content - * @param integer &$modified template's modification time - * @param Smarty $smarty Smarty instance - * @return string|boolean path to file or boolean true if $content and $modified - * have been filled, boolean false if no default template - * could be loaded - */ -function default_template_handler_func($type, $name, &$content, &$modified, Smarty $smarty) { - if (false) { - // return corrected filepath - return "/tmp/some/foobar.tpl"; - } elseif (false) { - // return a template directly - $content = "the template source"; - $modified = time(); - return true; - } else { - // tell smarty that we failed - return false; - } -} - - Stuff done to the compiler - -Many performance improvements have happened internally. One notable -improvement is that all compiled templates are now handled as PHP -functions. This speeds up repeated templates tremendously, as each one -calls an (in-memory) PHP function instead of performing another file -include/scan. - -New Features - - Template syntax - - {block}..{/block} - -The {block} tag has a new hide option flag. It does suppress the block -content if no corresponding child block exists. -EXAMPLE: -parent.tpl -{block name=body hide} child content "{$smarty.block.child}" was -inserted {block} -In the above example the whole block will be suppressed if no child -block "body" is existing. - - {setfilter}..{/setfilter} - -The new {setfilter} block tag allows the definition of filters which -run on variable output. -SYNTAX: -{setfilter filter1|filter2|filter3....} -Smarty3 will lookup up matching filters in the following search order: -1. variable filter plugin in plugins_dir. -2. a valid modifier. A modifier specification will also accept -additional parameter like filter2:'foo' -3. a PHP function -{/setfilter} will turn previous filter setting off again. -{setfilter} tags can be nested. -EXAMPLE: -{setfilter filter1} - {$foo} - {setfilter filter2} - {$bar} - {/setfilter} - {$buh} -{/setfilter} -{$blar} -In the above example filter1 will run on the output of $foo, filter2 -on $bar, filter1 again on $buh and no filter on $blar. -NOTES: -- {$foo nofilter} will suppress the filters -- These filters will run in addition to filters defined by -registerFilter('variable',...), autoLoadFilter('variable',...) and -defined default modifier. -- {setfilter} will effect only the current template, not included -subtemplates. - - Resource API - -Smarty 3.1 features a new approach to resource management. The -Smarty_Resource API allows simple, yet powerful integration of custom -resources for templates and configuration files. It offers simple -functions for loading data from a custom resource (e.g. database) as -well as define new template types adhering to the special -non-compiling (e,g, plain php) and non-compile-caching (e.g. eval: -resource type) resources. - -See demo/plugins/resource.mysql.php for an example custom database -resource. - -Note that old-fashioned registration of callbacks for resource -management has been deprecated but is still possible with SmartyBC. - - CacheResource API - -In line with the Resource API, the CacheResource API offers a more -comfortable handling of output-cache data. With the -Smarty_CacheResource_Custom accessing databases is made simple. With -the introduction of Smarty_CacheResource_KeyValueStore the -implementation of resources like memcache or APC became a no-brainer; -simple hash-based storage systems are now supporting hierarchical -output-caches. - -See demo/plugins/cacheresource.mysql.php for an example custom -database CacheResource. -See demo/plugins/cacheresource.memcache.php for an example custom -memcache CacheResource using the KeyValueStore helper. - -Note that old-fashioned registration of $cache_handler is not possible -anymore. As the functionality had not been ported to Smarty 3.0.x -properly, it has been dropped from 3.1 completely. - -Locking facilities have been implemented to avoid concurrent cache -generation. Enable cache locking by setting -$smarty->cache_locking = true; - - Relative Paths in Templates (File-Resource) - -As of Smarty 3.1 {include file="../foo.tpl"} and {include -file="./foo.tpl"} will resolve relative to the template they're in. -Relative paths are available with {include file="..."} and -{extends file="..."}. As $smarty->fetch('../foo.tpl') and -$smarty->fetch('./foo.tpl') cannot be relative to a template, an -exception is thrown. - - Addressing a specific $template_dir - -Smarty 3.1 introduces the $template_dir index notation. -$smarty->fetch('[foo]bar.tpl') and {include file="[foo]bar.tpl"} -require the template bar.tpl to be loaded from $template_dir['foo']; -Smarty::setTemplateDir() and Smarty::addTemplateDir() offer ways to -define indexes along with the actual directories. - - Mixing Resources in extends-Resource - -Taking the php extends: template resource one step further, it is now -possible to mix resources within an extends: call like -$smarty->fetch("extends:file:foo.tpl|db:bar.tpl"); - -To make eval: and string: resources available to the inheritance -chain, eval:base64:TPL_STRING and eval:urlencode:TPL_STRING have been -introduced. Supplying the base64 or urlencode flags will trigger -decoding the TPL_STRING in with either base64_decode() or urldecode(). - - extends-Resource in template inheritance - -Template based inheritance may now inherit from php's extends: -resource like {extends file="extends:foo.tpl|db:bar.tpl"}. - - New Smarty property escape_html - -$smarty->escape_html = true will autoescape all template variable -output by calling htmlspecialchars({$output}, ENT_QUOTES, -SMARTY_RESOURCE_CHAR_SET). -NOTE: -This is a compile time option. If you change the setting you must make -sure that the templates get recompiled. - - New option at Smarty property compile_check - -The automatic recompilation of modified templates can now be -controlled by the following settings: -$smarty->compile_check = COMPILECHECK_OFF (false) - template files -will not be checked -$smarty->compile_check = COMPILECHECK_ON (true) - template files will -always be checked -$smarty->compile_check = COMPILECHECK_CACHEMISS - template files will -be checked if caching is enabled and there is no existing cache file -or it has expired - - Automatic recompilation on Smarty version change - -Templates will now be automatically recompiled on Smarty version -changes to avoide incompatibillities in the compiled code. Compiled -template checked against the current setting of the SMARTY_VERSION -constant. - - default_config_handler_func() - -Analogous to the default_template_handler_func() -default_config_handler_func() has been introduced. - - default_plugin_handler_func() - -An optional default_plugin_handler_func() can be defined which gets called -by the compiler on tags which can't be resolved internally or by plugins. -The default_plugin_handler() can map tags to plugins on the fly. - -New getters/setters - -The following setters/getters will be part of the official -documentation, and will be strongly recommended. Direct property -access will still work for the foreseeable future... it will be -transparently routed through the setters/getters, and consequently a -bit slower. - -array|string getTemplateDir( [string $index] ) -replaces $smarty->template_dir; and $smarty->template_dir[$index]; -Smarty setTemplateDir( array|string $path ) -replaces $smarty->template_dir = "foo"; and $smarty->template_dir = -array("foo", "bar"); -Smarty addTemplateDir( array|string $path, [string $index]) -replaces $smarty->template_dir[] = "bar"; and -$smarty->template_dir[$index] = "bar"; - -array|string getConfigDir( [string $index] ) -replaces $smarty->config_dir; and $smarty->config_dir[$index]; -Smarty setConfigDir( array|string $path ) -replaces $smarty->config_dir = "foo"; and $smarty->config_dir = -array("foo", "bar"); -Smarty addConfigDir( array|string $path, [string $index]) -replaces $smarty->config_dir[] = "bar"; and -$smarty->config_dir[$index] = "bar"; - -array getPluginsDir() -replaces $smarty->plugins_dir; -Smarty setPluginsDir( array|string $path ) -replaces $smarty->plugins_dir = "foo"; -Smarty addPluginsDir( array|string $path ) -replaces $smarty->plugins_dir[] = "bar"; - -string getCompileDir() -replaces $smarty->compile_dir; -Smarty setCompileDir( string $path ) -replaces $smarty->compile_dir = "foo"; - -string getCacheDir() -replaces $smarty->cache_dir; -Smarty setCacheDir( string $path ) -replaces $smarty->cache_dir; diff --git a/src/includes/smarty-3.1.48/demo/plugins/cacheresource.apc.php b/src/includes/smarty-3.1.48/demo/plugins/cacheresource.apc.php deleted file mode 100644 index 7867cc5..0000000 --- a/src/includes/smarty-3.1.48/demo/plugins/cacheresource.apc.php +++ /dev/null @@ -1,85 +0,0 @@ - $v) { - $_res[ $k ] = $v; - } - return $_res; - } - - /** - * Save values for a set of keys to cache - * - * @param array $keys list of values to save - * @param int $expire expiration time - * - * @return boolean true on success, false on failure - */ - protected function write(array $keys, $expire = null) - { - foreach ($keys as $k => $v) { - apc_store($k, $v, $expire); - } - return true; - } - - /** - * Remove values from cache - * - * @param array $keys list of keys to delete - * - * @return boolean true on success, false on failure - */ - protected function delete(array $keys) - { - foreach ($keys as $k) { - apc_delete($k); - } - return true; - } - - /** - * Remove *all* values from cache - * - * @return boolean true on success, false on failure - */ - protected function purge() - { - return apc_clear_cache('user'); - } -} diff --git a/src/includes/smarty-3.1.48/demo/plugins/cacheresource.memcache.php b/src/includes/smarty-3.1.48/demo/plugins/cacheresource.memcache.php deleted file mode 100644 index 71fe9d3..0000000 --- a/src/includes/smarty-3.1.48/demo/plugins/cacheresource.memcache.php +++ /dev/null @@ -1,99 +0,0 @@ -memcache = new Memcached(); - } else { - $this->memcache = new Memcache(); - } - $this->memcache->addServer('127.0.0.1', 11211); - } - - /** - * Read values for a set of keys from cache - * - * @param array $keys list of keys to fetch - * - * @return array list of values with the given keys used as indexes - * @return boolean true on success, false on failure - */ - protected function read(array $keys) - { - $res = array(); - foreach ($keys as $key) { - $k = sha1($key); - $res[$key] = $this->memcache->get($k); - } - return $res; - } - - /** - * Save values for a set of keys to cache - * - * @param array $keys list of values to save - * @param int $expire expiration time - * - * @return boolean true on success, false on failure - */ - protected function write(array $keys, $expire = null) - { - foreach ($keys as $k => $v) { - $k = sha1($k); - if (class_exists('Memcached')) { - $this->memcache->set($k, $v, $expire); - } else { - $this->memcache->set($k, $v, 0, $expire); - } - } - return true; - } - - /** - * Remove values from cache - * - * @param array $keys list of keys to delete - * - * @return boolean true on success, false on failure - */ - protected function delete(array $keys) - { - foreach ($keys as $k) { - $k = sha1($k); - $this->memcache->delete($k); - } - return true; - } - - /** - * Remove *all* values from cache - * - * @return boolean true on success, false on failure - */ - protected function purge() - { - return $this->memcache->flush(); - } -} diff --git a/src/includes/smarty-3.1.48/demo/plugins/cacheresource.mysql.php b/src/includes/smarty-3.1.48/demo/plugins/cacheresource.mysql.php deleted file mode 100644 index c5037eb..0000000 --- a/src/includes/smarty-3.1.48/demo/plugins/cacheresource.mysql.php +++ /dev/null @@ -1,183 +0,0 @@ -CREATE TABLE IF NOT EXISTS `output_cache` ( - * `id` CHAR(40) NOT NULL COMMENT 'sha1 hash', - * `name` VARCHAR(250) NOT NULL, - * `cache_id` VARCHAR(250) NULL DEFAULT NULL, - * `compile_id` VARCHAR(250) NULL DEFAULT NULL, - * `modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - * `content` LONGTEXT NOT NULL, - * PRIMARY KEY (`id`), - * INDEX(`name`), - * INDEX(`cache_id`), - * INDEX(`compile_id`), - * INDEX(`modified`) - * ) ENGINE = InnoDB; - * - * @package CacheResource-examples - * @author Rodney Rehm - */ -class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom -{ - /** - * @var \PDO - */ - protected $db; - - /** - * @var \PDOStatement - */ - protected $fetch; - - /** - * @var \PDOStatement - */ - protected $fetchTimestamp; - - /** - * @var \PDOStatement - */ - protected $save; - - /** - * Smarty_CacheResource_Mysql constructor. - * - * @throws \SmartyException - */ - public function __construct() - { - try { - $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty"); - } catch (PDOException $e) { - throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); - } - $this->fetch = $this->db->prepare('SELECT modified, content FROM output_cache WHERE id = :id'); - $this->fetchTimestamp = $this->db->prepare('SELECT modified FROM output_cache WHERE id = :id'); - $this->save = $this->db->prepare( - 'REPLACE INTO output_cache (id, name, cache_id, compile_id, content) - VALUES (:id, :name, :cache_id, :compile_id, :content)' - ); - } - - /** - * fetch cached content and its modification time from data source - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param string $content cached content - * @param integer $mtime cache modification timestamp (epoch) - * - * @return void - */ - protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime) - { - $this->fetch->execute(array('id' => $id)); - $row = $this->fetch->fetch(); - $this->fetch->closeCursor(); - if ($row) { - $content = $row[ 'content' ]; - $mtime = strtotime($row[ 'modified' ]); - } else { - $content = null; - $mtime = null; - } - } - - /** - * Fetch cached content's modification timestamp from data source - * - * @note implementing this method is optional. Only implement it if modification times can be accessed faster than - * loading the complete cached content. - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * - * @return integer|boolean timestamp (epoch) the template was modified, or false if not found - */ - protected function fetchTimestamp($id, $name, $cache_id, $compile_id) - { - $this->fetchTimestamp->execute(array('id' => $id)); - $mtime = strtotime($this->fetchTimestamp->fetchColumn()); - $this->fetchTimestamp->closeCursor(); - return $mtime; - } - - /** - * Save content to cache - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer|null $exp_time seconds till expiration time in seconds or null - * @param string $content content to cache - * - * @return boolean success - */ - protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content) - { - $this->save->execute( - array('id' => $id, - 'name' => $name, - 'cache_id' => $cache_id, - 'compile_id' => $compile_id, - 'content' => $content,) - ); - return !!$this->save->rowCount(); - } - - /** - * Delete content from cache - * - * @param string $name template name - * @param string $cache_id cache id - * @param string $compile_id compile id - * @param integer|null $exp_time seconds till expiration or null - * - * @return integer number of deleted caches - */ - protected function delete($name, $cache_id, $compile_id, $exp_time) - { - // delete the whole cache - if ($name === null && $cache_id === null && $compile_id === null && $exp_time === null) { - // returning the number of deleted caches would require a second query to count them - $query = $this->db->query('TRUNCATE TABLE output_cache'); - return -1; - } - // build the filter - $where = array(); - // equal test name - if ($name !== null) { - $where[] = 'name = ' . $this->db->quote($name); - } - // equal test compile_id - if ($compile_id !== null) { - $where[] = 'compile_id = ' . $this->db->quote($compile_id); - } - // range test expiration time - if ($exp_time !== null) { - $where[] = 'modified < DATE_SUB(NOW(), INTERVAL ' . intval($exp_time) . ' SECOND)'; - } - // equal test cache_id and match sub-groups - if ($cache_id !== null) { - $where[] = - '(cache_id = ' . - $this->db->quote($cache_id) . - ' OR cache_id LIKE ' . - $this->db->quote($cache_id . '|%') . - ')'; - } - // run delete query - $query = $this->db->query('DELETE FROM output_cache WHERE ' . join(' AND ', $where)); - return $query->rowCount(); - } -} diff --git a/src/includes/smarty-3.1.48/demo/plugins/cacheresource.pdo.php b/src/includes/smarty-3.1.48/demo/plugins/cacheresource.pdo.php deleted file mode 100644 index a80cd69..0000000 --- a/src/includes/smarty-3.1.48/demo/plugins/cacheresource.pdo.php +++ /dev/null @@ -1,346 +0,0 @@ -setCachingType('pdo'); - * $smarty->loadPlugin('Smarty_CacheResource_Pdo'); - * $smarty->registerCacheResource('pdo', new Smarty_CacheResource_Pdo($cnx, 'smarty_cache')); - * - * @author Beno!t POLASZEK - 2014 - */ -class Smarty_CacheResource_Pdo extends Smarty_CacheResource_Custom -{ - /** - * @var string[] - */ - protected $fetchStatements = array('default' => 'SELECT %2$s - FROM %1$s - WHERE 1 - AND id = :id - AND cache_id IS NULL - AND compile_id IS NULL', - 'withCacheId' => 'SELECT %2$s - FROM %1$s - WHERE 1 - AND id = :id - AND cache_id = :cache_id - AND compile_id IS NULL', - 'withCompileId' => 'SELECT %2$s - FROM %1$s - WHERE 1 - AND id = :id - AND compile_id = :compile_id - AND cache_id IS NULL', - 'withCacheIdAndCompileId' => 'SELECT %2$s - FROM %1$s - WHERE 1 - AND id = :id - AND cache_id = :cache_id - AND compile_id = :compile_id'); - - /** - * @var string - */ - protected $insertStatement = 'INSERT INTO %s - - SET id = :id, - name = :name, - cache_id = :cache_id, - compile_id = :compile_id, - modified = CURRENT_TIMESTAMP, - expire = DATE_ADD(CURRENT_TIMESTAMP, INTERVAL :expire SECOND), - content = :content - - ON DUPLICATE KEY UPDATE - name = :name, - cache_id = :cache_id, - compile_id = :compile_id, - modified = CURRENT_TIMESTAMP, - expire = DATE_ADD(CURRENT_TIMESTAMP, INTERVAL :expire SECOND), - content = :content'; - - /** - * @var string - */ - protected $deleteStatement = 'DELETE FROM %1$s WHERE %2$s'; - - /** - * @var string - */ - protected $truncateStatement = 'TRUNCATE TABLE %s'; - - /** - * @var string - */ - protected $fetchColumns = 'modified, content'; - - /** - * @var string - */ - protected $fetchTimestampColumns = 'modified'; - - /** - * @var \PDO - */ - protected $pdo; - - /** - * @var - */ - protected $table; - - /** - * @var null - */ - protected $database; - - /** - * Constructor - * - * @param PDO $pdo PDO : active connection - * @param string $table : table (or view) name - * @param string $database : optional - if table is located in another db - * - * @throws \SmartyException - */ - public function __construct(PDO $pdo, $table, $database = null) - { - if (is_null($table)) { - throw new SmartyException("Table name for caching can't be null"); - } - $this->pdo = $pdo; - $this->table = $table; - $this->database = $database; - $this->fillStatementsWithTableName(); - } - - /** - * Fills the table name into the statements. - * - * @return $this Current Instance - * @access protected - */ - protected function fillStatementsWithTableName() - { - foreach ($this->fetchStatements as &$statement) { - $statement = sprintf($statement, $this->getTableName(), '%s'); - } - $this->insertStatement = sprintf($this->insertStatement, $this->getTableName()); - $this->deleteStatement = sprintf($this->deleteStatement, $this->getTableName(), '%s'); - $this->truncateStatement = sprintf($this->truncateStatement, $this->getTableName()); - return $this; - } - - /** - * Gets the fetch statement, depending on what you specify - * - * @param string $columns : the column(s) name(s) you want to retrieve from the database - * @param string $id unique cache content identifier - * @param string|null $cache_id cache id - * @param string|null $compile_id compile id - * - * @access protected - * @return \PDOStatement - */ - protected function getFetchStatement($columns, $id, $cache_id = null, $compile_id = null) - { - $args = array(); - if (!is_null($cache_id) && !is_null($compile_id)) { - $query = $this->fetchStatements[ 'withCacheIdAndCompileId' ] and - $args = array('id' => $id, 'cache_id' => $cache_id, 'compile_id' => $compile_id); - } elseif (is_null($cache_id) && !is_null($compile_id)) { - $query = $this->fetchStatements[ 'withCompileId' ] and - $args = array('id' => $id, 'compile_id' => $compile_id); - } elseif (!is_null($cache_id) && is_null($compile_id)) { - $query = $this->fetchStatements[ 'withCacheId' ] and $args = array('id' => $id, 'cache_id' => $cache_id); - } else { - $query = $this->fetchStatements[ 'default' ] and $args = array('id' => $id); - } - $query = sprintf($query, $columns); - $stmt = $this->pdo->prepare($query); - foreach ($args as $key => $value) { - $stmt->bindValue($key, $value); - } - return $stmt; - } - - /** - * fetch cached content and its modification time from data source - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string|null $cache_id cache id - * @param string|null $compile_id compile id - * @param string $content cached content - * @param integer $mtime cache modification timestamp (epoch) - * - * @return void - * @access protected - */ - protected function fetch($id, $name, $cache_id = null, $compile_id = null, &$content, &$mtime) - { - $stmt = $this->getFetchStatement($this->fetchColumns, $id, $cache_id, $compile_id); - $stmt->execute(); - $row = $stmt->fetch(); - $stmt->closeCursor(); - if ($row) { - $content = $this->outputContent($row[ 'content' ]); - $mtime = strtotime($row[ 'modified' ]); - } else { - $content = null; - $mtime = null; - } - } - - /** - * Fetch cached content's modification timestamp from data source - * {@internal implementing this method is optional. - * Only implement it if modification times can be accessed faster than loading the complete cached content.}} - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string|null $cache_id cache id - * @param string|null $compile_id compile id - * - * @return integer|boolean timestamp (epoch) the template was modified, or false if not found - * @access protected - */ - // protected function fetchTimestamp($id, $name, $cache_id = null, $compile_id = null) { - // $stmt = $this->getFetchStatement($this->fetchTimestampColumns, $id, $cache_id, $compile_id); - // $stmt -> execute(); - // $mtime = strtotime($stmt->fetchColumn()); - // $stmt -> closeCursor(); - // return $mtime; - // } - /** - * Save content to cache - * - * @param string $id unique cache content identifier - * @param string $name template name - * @param string|null $cache_id cache id - * @param string|null $compile_id compile id - * @param integer|null $exp_time seconds till expiration time in seconds or null - * @param string $content content to cache - * - * @return boolean success - * @access protected - */ - protected function save($id, $name, $cache_id = null, $compile_id = null, $exp_time, $content) - { - $stmt = $this->pdo->prepare($this->insertStatement); - $stmt->bindValue('id', $id); - $stmt->bindValue('name', $name); - $stmt->bindValue('cache_id', $cache_id, (is_null($cache_id)) ? PDO::PARAM_NULL : PDO::PARAM_STR); - $stmt->bindValue('compile_id', $compile_id, (is_null($compile_id)) ? PDO::PARAM_NULL : PDO::PARAM_STR); - $stmt->bindValue('expire', (int)$exp_time, PDO::PARAM_INT); - $stmt->bindValue('content', $this->inputContent($content)); - $stmt->execute(); - return !!$stmt->rowCount(); - } - - /** - * Encodes the content before saving to database - * - * @param string $content - * - * @return string $content - * @access protected - */ - protected function inputContent($content) - { - return $content; - } - - /** - * Decodes the content before saving to database - * - * @param string $content - * - * @return string $content - * @access protected - */ - protected function outputContent($content) - { - return $content; - } - - /** - * Delete content from cache - * - * @param string|null $name template name - * @param string|null $cache_id cache id - * @param string|null $compile_id compile id - * @param integer|null|-1 $exp_time seconds till expiration or null - * - * @return integer number of deleted caches - * @access protected - */ - protected function delete($name = null, $cache_id = null, $compile_id = null, $exp_time = null) - { - // delete the whole cache - if ($name === null && $cache_id === null && $compile_id === null && $exp_time === null) { - // returning the number of deleted caches would require a second query to count them - $this->pdo->query($this->truncateStatement); - return -1; - } - // build the filter - $where = array(); - // equal test name - if ($name !== null) { - $where[] = 'name = ' . $this->pdo->quote($name); - } - // equal test cache_id and match sub-groups - if ($cache_id !== null) { - $where[] = - '(cache_id = ' . - $this->pdo->quote($cache_id) . - ' OR cache_id LIKE ' . - $this->pdo->quote($cache_id . '|%') . - ')'; - } - // equal test compile_id - if ($compile_id !== null) { - $where[] = 'compile_id = ' . $this->pdo->quote($compile_id); - } - // for clearing expired caches - if ($exp_time === Smarty::CLEAR_EXPIRED) { - $where[] = 'expire < CURRENT_TIMESTAMP'; - } // range test expiration time - elseif ($exp_time !== null) { - $where[] = 'modified < DATE_SUB(NOW(), INTERVAL ' . intval($exp_time) . ' SECOND)'; - } - // run delete query - $query = $this->pdo->query(sprintf($this->deleteStatement, join(' AND ', $where))); - return $query->rowCount(); - } - - /** - * Gets the formatted table name - * - * @return string - * @access protected - */ - protected function getTableName() - { - return (is_null($this->database)) ? "`{$this->table}`" : "`{$this->database}`.`{$this->table}`"; - } -} diff --git a/src/includes/smarty-3.1.48/demo/plugins/cacheresource.pdo_gzip.php b/src/includes/smarty-3.1.48/demo/plugins/cacheresource.pdo_gzip.php deleted file mode 100644 index 5560b9e..0000000 --- a/src/includes/smarty-3.1.48/demo/plugins/cacheresource.pdo_gzip.php +++ /dev/null @@ -1,42 +0,0 @@ -setCachingType('pdo_gzip'); - * $smarty->loadPlugin('Smarty_CacheResource_Pdo_Gzip'); - * $smarty->registerCacheResource('pdo_gzip', new Smarty_CacheResource_Pdo_Gzip($cnx, 'smarty_cache')); - * - * @require Smarty_CacheResource_Pdo class - * @author Beno!t POLASZEK - 2014 - */ -class Smarty_CacheResource_Pdo_Gzip extends Smarty_CacheResource_Pdo -{ - /** - * Encodes the content before saving to database - * - * @param string $content - * - * @return string $content - * @access protected - */ - protected function inputContent($content) - { - return gzdeflate($content); - } - - /** - * Decodes the content before saving to database - * - * @param string $content - * - * @return string $content - * @access protected - */ - protected function outputContent($content) - { - return gzinflate($content); - } -} diff --git a/src/includes/smarty-3.1.48/demo/plugins/resource.extendsall.php b/src/includes/smarty-3.1.48/demo/plugins/resource.extendsall.php deleted file mode 100644 index a547d41..0000000 --- a/src/includes/smarty-3.1.48/demo/plugins/resource.extendsall.php +++ /dev/null @@ -1,62 +0,0 @@ -smarty->getTemplateDir() as $key => $directory) { - try { - $s = Smarty_Resource::source(null, $source->smarty, 'file:' . '[' . $key . ']' . $source->name); - if (!$s->exists) { - continue; - } - $sources[ $s->uid ] = $s; - $uid .= $s->filepath; - $timestamp = $s->timestamp > $timestamp ? $s->timestamp : $timestamp; - } catch (SmartyException $e) { - } - } - if (!$sources) { - $source->exists = false; - return; - } - $sources = array_reverse($sources, true); - reset($sources); - $s = current($sources); - $source->components = $sources; - $source->filepath = $s->filepath; - $source->uid = sha1($uid . $source->smarty->_joined_template_dir); - $source->exists = true; - $source->timestamp = $timestamp; - } - - /** - * Disable timestamp checks for extendsall resource. - * The individual source components will be checked. - * - * @return bool false - */ - public function checkTimestamps() - { - return false; - } -} diff --git a/src/includes/smarty-3.1.48/demo/plugins/resource.mysql.php b/src/includes/smarty-3.1.48/demo/plugins/resource.mysql.php deleted file mode 100644 index 95a3c2b..0000000 --- a/src/includes/smarty-3.1.48/demo/plugins/resource.mysql.php +++ /dev/null @@ -1,101 +0,0 @@ -CREATE TABLE IF NOT EXISTS `templates` ( - * `name` varchar(100) NOT NULL, - * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - * `source` text, - * PRIMARY KEY (`name`) - * ) ENGINE=InnoDB DEFAULT CHARSET=utf8; - * Demo data: - *
    INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello
    - * world"}{$x}');
    - * - * - * @package Resource-examples - * @author Rodney Rehm - */ -class Smarty_Resource_Mysql extends Smarty_Resource_Custom -{ - /** - * PDO instance - * - * @var \PDO - */ - protected $db; - - /** - * prepared fetch() statement - * - * @var \PDOStatement - */ - protected $fetch; - - /** - * prepared fetchTimestamp() statement - * - * @var \PDOStatement - */ - protected $mtime; - - /** - * Smarty_Resource_Mysql constructor. - * - * @throws \SmartyException - */ - public function __construct() - { - try { - $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty"); - } catch (PDOException $e) { - throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); - } - $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name'); - $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name'); - } - - /** - * Fetch a template and its modification time from database - * - * @param string $name template name - * @param string $source template source - * @param integer $mtime template modification timestamp (epoch) - * - * @return void - */ - protected function fetch($name, &$source, &$mtime) - { - $this->fetch->execute(array('name' => $name)); - $row = $this->fetch->fetch(); - $this->fetch->closeCursor(); - if ($row) { - $source = $row[ 'source' ]; - $mtime = strtotime($row[ 'modified' ]); - } else { - $source = null; - $mtime = null; - } - } - - /** - * Fetch a template's modification time from database - * - * @note implementing this method is optional. Only implement it if modification times can be accessed faster than - * loading the comple template source. - * - * @param string $name template name - * - * @return integer timestamp (epoch) the template was modified - */ - protected function fetchTimestamp($name) - { - $this->mtime->execute(array('name' => $name)); - $mtime = $this->mtime->fetchColumn(); - $this->mtime->closeCursor(); - return strtotime($mtime); - } -} diff --git a/src/includes/smarty-3.1.48/demo/plugins/resource.mysqls.php b/src/includes/smarty-3.1.48/demo/plugins/resource.mysqls.php deleted file mode 100644 index 148a8dd..0000000 --- a/src/includes/smarty-3.1.48/demo/plugins/resource.mysqls.php +++ /dev/null @@ -1,77 +0,0 @@ -CREATE TABLE IF NOT EXISTS `templates` ( - * `name` varchar(100) NOT NULL, - * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - * `source` text, - * PRIMARY KEY (`name`) - * ) ENGINE=InnoDB DEFAULT CHARSET=utf8; - * Demo data: - *
    INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello
    - * world"}{$x}');
    - * - * - * @package Resource-examples - * @author Rodney Rehm - */ -class Smarty_Resource_Mysqls extends Smarty_Resource_Custom -{ - /** - * PDO instance - * - * @var \PDO - */ - protected $db; - - /** - * prepared fetch() statement - * - * @var \PDOStatement - */ - protected $fetch; - - /** - * Smarty_Resource_Mysqls constructor. - * - * @throws \SmartyException - */ - public function __construct() - { - try { - $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty"); - } catch (PDOException $e) { - throw new SmartyException('Mysql Resource failed: ' . $e->getMessage()); - } - $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name'); - } - - /** - * Fetch a template and its modification time from database - * - * @param string $name template name - * @param string $source template source - * @param integer $mtime template modification timestamp (epoch) - * - * @return void - */ - protected function fetch($name, &$source, &$mtime) - { - $this->fetch->execute(array('name' => $name)); - $row = $this->fetch->fetch(); - $this->fetch->closeCursor(); - if ($row) { - $source = $row[ 'source' ]; - $mtime = strtotime($row[ 'modified' ]); - } else { - $source = null; - $mtime = null; - } - } -} diff --git a/src/includes/smarty-3.1.48/libs/Autoloader.php b/src/includes/smarty-3.1.48/libs/Autoloader.php deleted file mode 100644 index c09361b..0000000 --- a/src/includes/smarty-3.1.48/libs/Autoloader.php +++ /dev/null @@ -1,110 +0,0 @@ - '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/src/includes/smarty-3.1.48/libs/Smarty.class.php b/src/includes/smarty-3.1.48/libs/Smarty.class.php deleted file mode 100644 index a34c55e..0000000 --- a/src/includes/smarty-3.1.48/libs/Smarty.class.php +++ /dev/null @@ -1,1424 +0,0 @@ - - * @author Uwe Tews - * @author Rodney Rehm - * @package Smarty - */ -/** - * 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, $max_errors = null) - * @method int compileAllConfig(string $extension = '.conf', bool $force_compile = false, int $time_limit = 0, $max_errors = null) - * @method int clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) - */ -class Smarty extends Smarty_Internal_TemplateBase -{ - /** - * smarty version - */ - const SMARTY_VERSION = '3.1.48'; - /** - * 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'; - - /** - * assigned global tpl vars - */ - public static $global_tpl_vars = 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; - - /** - * 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; - - /** - * flag if template_dir is normalized - * - * @var bool - */ - public $_templateDirNormalized = false; - - /** - * joined template directory string used in cache keys - * - * @var string - */ - public $_joined_template_dir = null; - - /** - * flag if config_dir is normalized - * - * @var bool - */ - public $_configDirNormalized = false; - - /** - * joined config directory string used in cache keys - * - * @var string - */ - public $_joined_config_dir = null; - - /** - * default template handler - * - * @var callable - */ - public $default_template_handler_func = null; - - /** - * default config handler - * - * @var callable - */ - public $default_config_handler_func = null; - - /** - * default plugin handler - * - * @var callable - */ - public $default_plugin_handler_func = null; - - /** - * flag if template_dir is normalized - * - * @var bool - */ - public $_compileDirNormalized = false; - - /** - * flag if plugins_dir is normalized - * - * @var bool - */ - public $_pluginsDirNormalized = false; - - /** - * flag if template_dir is normalized - * - * @var bool - */ - public $_cacheDirNormalized = false; - - /** - * force template compiling? - * - * @var boolean - */ - public $force_compile = false; - - /** - * use sub dirs for compiled/cached files? - * - * @var boolean - */ - public $use_sub_dirs = false; - - /** - * 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 = "}"; - - /** - * array of strings which shall be treated as literal by compiler - * - * @var array string - */ - public $literals = array(); - - /** - * 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. - *
      - *
    • NONE => no debugging control allowed
    • - *
    • URL => enable debugging when SMARTY_DEBUG is found in the URL.
    • - *
    - * - * @var string - */ - public $debugging_ctrl = 'NONE'; - - /** - * Name of debugging URL-param. - * Only used when $debugging_ctrl is set to 'URL'. - * The name of the URL-parameter that activates debugging. - * - * @var string - */ - public $smarty_debug_id = 'SMARTY_DEBUG'; - - /** - * Path of debug template. - * - * @var string - */ - public $debug_tpl = null; - - /** - * When set, smarty uses this value as error_reporting-level. - * - * @var int - */ - public $error_reporting = null; - - /** - * Controls whether variables with the same name overwrite each other. - * - * @var boolean - */ - public $config_overwrite = true; - - /** - * Controls whether config values of on/true/yes and off/false/no get converted to boolean. - * - * @var boolean - */ - public $config_booleanize = true; - - /** - * Controls whether hidden config sections/vars are read from the file. - * - * @var boolean - */ - public $config_read_hidden = false; - - /** - * locking concurrent compiles - * - * @var boolean - */ - public $compile_locking = true; - - /** - * Controls whether cache resources should use locking mechanism - * - * @var boolean - */ - public $cache_locking = false; - - /** - * seconds to wait for acquiring a lock before ignoring the write lock - * - * @var float - */ - public $locking_timeout = 10; - - /** - * resource type used if none given - * Must be 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; - - /** - * template directory - * - * @var array - */ - protected $template_dir = array('./templates/'); - - /** - * flags for normalized template directory entries - * - * @var array - */ - protected $_processedTemplateDir = array(); - - /** - * config directory - * - * @var array - */ - protected $config_dir = array('./configs/'); - - /** - * flags for normalized template directory entries - * - * @var array - */ - protected $_processedConfigDir = array(); - - /** - * compile directory - * - * @var string - */ - protected $compile_dir = './templates_c/'; - - /** - * plugins directory - * - * @var array - */ - protected $plugins_dir = array(); - - /** - * cache directory - * - * @var string - */ - protected $cache_dir = './cache/'; - - /** - * 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 = ''; - } - } - - /** - * Enable error handler to mute expected messages - * - * @return boolean - * @deprecated - */ - public static function muteExpectedErrors() - { - return Smarty_Internal_ErrorHandler::muteExpectedErrors(); - } - - /** - * Disable error handler muting expected messages - * - * @deprecated - */ - public static function unmuteExpectedErrors() - { - restore_error_handler(); - } - - /** - * Check if a template resource exists - * - * @param string $resource_name template name - * - * @return bool status - * @throws \SmartyException - */ - 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 - */ - 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; - } - - /** - * 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|string list of template directories, or directory of $index - */ - public function getTemplateDir($index = null, $isConfig = false) - { - if ($isConfig) { - $dir = &$this->config_dir; - } else { - $dir = &$this->template_dir; - } - if ($isConfig ? !$this->_configDirNormalized : !$this->_templateDirNormalized) { - $this->_normalizeTemplateConfig($isConfig); - } - if ($index !== null) { - return isset($dir[ $index ]) ? $dir[ $index ] : null; - } - return $dir; - } - - /** - * Set template directory - * - * @param string|array $template_dir directory(s) of template sources - * @param bool $isConfig true for config_dir - * - * @return \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 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 config directory - * - * @param $config_dir - * - * @return Smarty current Smarty instance for chaining - */ - public function setConfigDir($config_dir) - { - return $this->setTemplateDir($config_dir, true); - } - - /** - * 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, '/\\') . DIRECTORY_SEPARATOR, true); - } - $this->_cache[ 'plugin_files' ] = array(); - $this->_pluginsDirNormalized = true; - } - return $this->plugins_dir; - } - - /** - * Set plugins directory - * - * @param string|array $plugins_dir directory(s) of plugins - * - * @return Smarty current Smarty instance for chaining - */ - public function setPluginsDir($plugins_dir) - { - $this->plugins_dir = (array)$plugins_dir; - $this->_pluginsDirNormalized = false; - return $this; - } - - /** - * Get compiled directory - * - * @return string path to compiled templates - */ - public function getCompileDir() - { - if (!$this->_compileDirNormalized) { - $this->_normalizeDir('compile_dir', $this->compile_dir); - $this->_compileDirNormalized = true; - } - return $this->compile_dir; - } - - /** - * - * @param string $compile_dir directory to store compiled templates in - * - * @return Smarty current Smarty instance for chaining - */ - public function setCompileDir($compile_dir) - { - $this->_normalizeDir('compile_dir', $compile_dir); - $this->_compileDirNormalized = true; - return $this; - } - - /** - * Get cache directory - * - * @return string path of cache directory - */ - public function getCacheDir() - { - if (!$this->_cacheDirNormalized) { - $this->_normalizeDir('cache_dir', $this->cache_dir); - $this->_cacheDirNormalized = true; - } - return $this->cache_dir; - } - - /** - * Set cache directory - * - * @param string $cache_dir directory to store cached templates in - * - * @return Smarty current Smarty instance for chaining - */ - public function setCacheDir($cache_dir) - { - $this->_normalizeDir('cache_dir', $cache_dir); - $this->_cacheDirNormalized = true; - return $this; - } - - /** - * creates a template object - * - * @param string $template the resource handle of the template file - * @param mixed $cache_id cache id to be used with this template - * @param mixed $compile_id compile id to be used with this template - * @param object $parent next higher level of Smarty variables - * @param boolean $do_clone flag is Smarty object shall be cloned - * - * @return \Smarty_Internal_Template template object - * @throws \SmartyException - */ - 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->_normalizeTemplateConfig(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(); - } elseif (!$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 - * - * @return string |boolean filepath of loaded file or false - * @throws \SmartyException - */ - 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 - * @throws \SmartyException - */ - 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 = array('/' => '\\', '\\' => '/'); - preg_match( - '%^(?(?:[[:alpha:]]:[\\\\/]|/|[\\\\]{2}[[:alpha:]]+|[[:print:]]{2,}:[/]{2}|[\\\\])?)(?(.*))$%u', - $path, - $parts - ); - $path = $parts[ 'path' ]; - if ($parts[ 'root' ] === '\\') { - $parts[ 'root' ] = substr(getcwd(), 0, 2) . $parts[ 'root' ]; - } else { - if ($realpath !== null && !$parts[ 'root' ]) { - $path = getcwd() . DIRECTORY_SEPARATOR . $path; - } - } - // normalize DIRECTORY_SEPARATOR - $path = str_replace($nds[ DIRECTORY_SEPARATOR ], DIRECTORY_SEPARATOR, $path); - $parts[ 'root' ] = str_replace($nds[ DIRECTORY_SEPARATOR ], DIRECTORY_SEPARATOR, $parts[ 'root' ]); - do { - $path = preg_replace( - array('#[\\\\/]{2}#', '#[\\\\/][.][\\\\/]#', '#[\\\\/]([^\\\\/.]+)[\\\\/][.][.][\\\\/]#'), - DIRECTORY_SEPARATOR, - $path, - -1, - $count - ); - } while ($count > 0); - return $realpath !== false ? $parts[ 'root' ] . $path : str_ireplace(getcwd(), '.', $parts[ 'root' ] . $path); - } - - /** - * Empty template objects cache - */ - public function _clearTemplateCache() - { - Smarty_Internal_Template::$isCacheTplObj = array(); - Smarty_Internal_Template::$tplObjCache = array(); - } - - /** - * @param boolean $use_sub_dirs - */ - public function setUseSubDirs($use_sub_dirs) - { - $this->use_sub_dirs = $use_sub_dirs; - } - - /** - * @param int $error_reporting - */ - public function setErrorReporting($error_reporting) - { - $this->error_reporting = $error_reporting; - } - - /** - * @param boolean $escape_html - */ - public function setEscapeHtml($escape_html) - { - $this->escape_html = $escape_html; - } - - /** - * Return auto_literal flag - * - * @return boolean - */ - public function getAutoLiteral() - { - return $this->auto_literal; - } - - /** - * Set auto_literal flag - * - * @param boolean $auto_literal - */ - public function setAutoLiteral($auto_literal = true) - { - $this->auto_literal = $auto_literal; - } - - /** - * @param boolean $force_compile - */ - public function setForceCompile($force_compile) - { - $this->force_compile = $force_compile; - } - - /** - * @param boolean $merge_compiled_includes - */ - public function setMergeCompiledIncludes($merge_compiled_includes) - { - $this->merge_compiled_includes = $merge_compiled_includes; - } - - /** - * Get left delimiter - * - * @return string - */ - public function getLeftDelimiter() - { - return $this->left_delimiter; - } - - /** - * Set left delimiter - * - * @param string $left_delimiter - */ - public function setLeftDelimiter($left_delimiter) - { - $this->left_delimiter = $left_delimiter; - } - - /** - * Get right delimiter - * - * @return string $right_delimiter - */ - public function getRightDelimiter() - { - return $this->right_delimiter; - } - - /** - * Set right delimiter - * - * @param string - */ - public function setRightDelimiter($right_delimiter) - { - $this->right_delimiter = $right_delimiter; - } - - /** - * @param boolean $debugging - */ - public function setDebugging($debugging) - { - $this->debugging = $debugging; - } - - /** - * @param boolean $config_overwrite - */ - public function setConfigOverwrite($config_overwrite) - { - $this->config_overwrite = $config_overwrite; - } - - /** - * @param boolean $config_booleanize - */ - public function setConfigBooleanize($config_booleanize) - { - $this->config_booleanize = $config_booleanize; - } - - /** - * @param boolean $config_read_hidden - */ - public function setConfigReadHidden($config_read_hidden) - { - $this->config_read_hidden = $config_read_hidden; - } - - /** - * @param boolean $compile_locking - */ - public function setCompileLocking($compile_locking) - { - $this->compile_locking = $compile_locking; - } - - /** - * @param string $default_resource_type - */ - public function setDefaultResourceType($default_resource_type) - { - $this->default_resource_type = $default_resource_type; - } - - /** - * @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); - } - - /** - * Get Smarty object - * - * @return Smarty - */ - public function _getSmartyObj() - { - return $this; - } - - /** - * <> Generic getter. - * Calls the appropriate getter function. - * Issues an E_USER_NOTICE if no valid getter is found. - * - * @param string $name property name - * - * @return mixed - */ - public function __get($name) - { - 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; - } elseif (is_object($value) && method_exists($value, $name)) { - $this->$name = $value; - } else { - trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE); - } - } - - /** - * Normalize and set directory string - * - * @param string $dirName cache_dir or compile_dir - * @param string $dir filepath of folder - */ - private function _normalizeDir($dirName, $dir) - { - $this->{$dirName} = $this->_realpath(rtrim($dir, "/\\") . DIRECTORY_SEPARATOR, true); - if (class_exists('Smarty_Internal_ErrorHandler', false)) { - if (!isset(Smarty_Internal_ErrorHandler::$mutedDirectories[ $this->{$dirName} ])) { - Smarty_Internal_ErrorHandler::$mutedDirectories[ $this->{$dirName} ] = null; - } - } - } - - /** - * Normalize template_dir or config_dir - * - * @param bool $isConfig true for config_dir - */ - private function _normalizeTemplateConfig($isConfig) - { - if ($isConfig) { - $processed = &$this->_processedConfigDir; - $dir = &$this->config_dir; - } else { - $processed = &$this->_processedTemplateDir; - $dir = &$this->template_dir; - } - if (!is_array($dir)) { - $dir = (array)$dir; - } - foreach ($dir as $k => $v) { - if (!isset($processed[ $k ])) { - $dir[ $k ] = $v = $this->_realpath(rtrim($v, "/\\") . DIRECTORY_SEPARATOR, 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); - } -} diff --git a/src/includes/smarty-3.1.48/libs/SmartyBC.class.php b/src/includes/smarty-3.1.48/libs/SmartyBC.class.php deleted file mode 100644 index 0550e46..0000000 --- a/src/includes/smarty-3.1.48/libs/SmartyBC.class.php +++ /dev/null @@ -1,477 +0,0 @@ - - * @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 - * - * @throws \SmartyException - */ - 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 - * - * @throws \SmartyException - */ - 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 - * - * @throws \SmartyException - */ - 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 - * - * @throws \SmartyException - */ - 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 - * - * @throws \SmartyException - */ - 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 - * - * @throws \SmartyException - */ - 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 - * - * @throws \SmartyException - */ - 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 - * - * @throws \SmartyException - */ - 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 bool - * @throws \Exception - * @throws \SmartyException - */ - 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 bool - * @throws \SmartyException - */ - 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/src/includes/smarty-3.1.48/libs/bootstrap.php b/src/includes/smarty-3.1.48/libs/bootstrap.php deleted file mode 100644 index 2c83046..0000000 --- a/src/includes/smarty-3.1.48/libs/bootstrap.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * 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')) { - include dirname(__FILE__) . '/Autoloader.php'; -} -Smarty_Autoloader::register(true); diff --git a/src/includes/smarty-3.1.48/libs/plugins/block.textformat.php b/src/includes/smarty-3.1.48/libs/plugins/block.textformat.php deleted file mode 100644 index 5e49463..0000000 --- a/src/includes/smarty-3.1.48/libs/plugins/block.textformat.php +++ /dev/null @@ -1,121 +0,0 @@ - - * @throws \SmartyException - */ -function smarty_block_textformat($params, $content, Smarty_Internal_Template $template, &$repeat) -{ - if (is_null($content)) { - return; - } - if (Smarty::$_MBSTRING) { - $template->_checkPlugins( - array( - array( - 'function' => 'smarty_modifier_mb_wordwrap', - 'file' => SMARTY_PLUGINS_DIR . 'modifier.mb_wordwrap.php' - ) - ) - ); - } - $style = null; - $indent = 0; - $indent_first = 0; - $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/src/includes/smarty-3.1.48/libs/plugins/function.counter.php b/src/includes/smarty-3.1.48/libs/plugins/function.counter.php deleted file mode 100644 index a4129e7..0000000 --- a/src/includes/smarty-3.1.48/libs/plugins/function.counter.php +++ /dev/null @@ -1,62 +0,0 @@ - - * @link http://www.smarty.net/manual/en/language.function.counter.php {counter} - * (Smarty online manual) - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @return string|null - */ -function smarty_function_counter($params, $template) -{ - static $counters = array(); - $name = (isset($params[ 'name' ])) ? $params[ 'name' ] : 'default'; - if (!isset($counters[ $name ])) { - $counters[ $name ] = array('start' => 1, 'skip' => 1, 'direction' => 'up', 'count' => 1); - } - $counter =& $counters[ $name ]; - if (isset($params[ 'start' ])) { - $counter[ 'start' ] = $counter[ 'count' ] = (int)$params[ 'start' ]; - } - if (!empty($params[ 'assign' ])) { - $counter[ 'assign' ] = $params[ 'assign' ]; - } - if (isset($counter[ 'assign' ])) { - $template->assign($counter[ 'assign' ], $counter[ 'count' ]); - } - if (isset($params[ 'print' ])) { - $print = (bool)$params[ 'print' ]; - } else { - $print = empty($counter[ 'assign' ]); - } - if ($print) { - $retval = $counter[ 'count' ]; - } else { - $retval = null; - } - if (isset($params[ 'skip' ])) { - $counter[ 'skip' ] = $params[ 'skip' ]; - } - if (isset($params[ 'direction' ])) { - $counter[ 'direction' ] = $params[ 'direction' ]; - } - if ($counter[ 'direction' ] === 'down') { - $counter[ 'count' ] -= $counter[ 'skip' ]; - } else { - $counter[ 'count' ] += $counter[ 'skip' ]; - } - return $retval; -} diff --git a/src/includes/smarty-3.1.48/libs/plugins/function.cycle.php b/src/includes/smarty-3.1.48/libs/plugins/function.cycle.php deleted file mode 100644 index 07ffcc5..0000000 --- a/src/includes/smarty-3.1.48/libs/plugins/function.cycle.php +++ /dev/null @@ -1,92 +0,0 @@ - - * @author credit to Mark Priatel - * @author credit to Gerard - * @author credit to Jason Sweat - * @version 1.3 - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @return string|null - */ -function smarty_function_cycle($params, $template) -{ - static $cycle_vars; - $name = (empty($params[ 'name' ])) ? 'default' : $params[ 'name' ]; - $print = (isset($params[ 'print' ])) ? (bool)$params[ 'print' ] : true; - $advance = (isset($params[ 'advance' ])) ? (bool)$params[ 'advance' ] : true; - $reset = (isset($params[ 'reset' ])) ? (bool)$params[ 'reset' ] : false; - if (!isset($params[ 'values' ])) { - if (!isset($cycle_vars[ $name ][ 'values' ])) { - trigger_error('cycle: missing \'values\' parameter'); - return; - } - } else { - if (isset($cycle_vars[ $name ][ 'values' ]) && $cycle_vars[ $name ][ 'values' ] !== $params[ 'values' ]) { - $cycle_vars[ $name ][ 'index' ] = 0; - } - $cycle_vars[ $name ][ 'values' ] = $params[ 'values' ]; - } - if (isset($params[ 'delimiter' ])) { - $cycle_vars[ $name ][ 'delimiter' ] = $params[ 'delimiter' ]; - } elseif (!isset($cycle_vars[ $name ][ 'delimiter' ])) { - $cycle_vars[ $name ][ 'delimiter' ] = ','; - } - if (is_array($cycle_vars[ $name ][ 'values' ])) { - $cycle_array = $cycle_vars[ $name ][ 'values' ]; - } else { - $cycle_array = explode($cycle_vars[ $name ][ 'delimiter' ], $cycle_vars[ $name ][ 'values' ]); - } - if (!isset($cycle_vars[ $name ][ 'index' ]) || $reset) { - $cycle_vars[ $name ][ 'index' ] = 0; - } - if (isset($params[ 'assign' ])) { - $print = false; - $template->assign($params[ 'assign' ], $cycle_array[ $cycle_vars[ $name ][ 'index' ] ]); - } - if ($print) { - $retval = $cycle_array[ $cycle_vars[ $name ][ 'index' ] ]; - } else { - $retval = null; - } - if ($advance) { - if ($cycle_vars[ $name ][ 'index' ] >= count($cycle_array) - 1) { - $cycle_vars[ $name ][ 'index' ] = 0; - } else { - $cycle_vars[ $name ][ 'index' ]++; - } - } - return $retval; -} diff --git a/src/includes/smarty-3.1.48/libs/plugins/function.fetch.php b/src/includes/smarty-3.1.48/libs/plugins/function.fetch.php deleted file mode 100644 index 768761b..0000000 --- a/src/includes/smarty-3.1.48/libs/plugins/function.fetch.php +++ /dev/null @@ -1,204 +0,0 @@ - - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @throws SmartyException - * @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable - */ -function smarty_function_fetch($params, $template) -{ - if (empty($params[ 'file' ])) { - trigger_error('[plugin] fetch parameter \'file\' cannot be empty', E_USER_NOTICE); - return; - } - // strip file protocol - if (stripos($params[ 'file' ], 'file://') === 0) { - $params[ 'file' ] = substr($params[ 'file' ], 7); - } - $protocol = strpos($params[ 'file' ], '://'); - if ($protocol !== false) { - $protocol = strtolower(substr($params[ 'file' ], 0, $protocol)); - } - if (isset($template->smarty->security_policy)) { - if ($protocol) { - // remote resource (or php stream, …) - if (!$template->smarty->security_policy->isTrustedUri($params[ 'file' ])) { - return; - } - } else { - // local file - if (!$template->smarty->security_policy->isTrustedResourceDir($params[ 'file' ])) { - return; - } - } - } - $content = ''; - if ($protocol === 'http') { - // http fetch - if ($uri_parts = parse_url($params[ 'file' ])) { - // set defaults - $host = $server_name = $uri_parts[ 'host' ]; - $timeout = 30; - $accept = 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*'; - $agent = 'Smarty Template Engine ' . Smarty::SMARTY_VERSION; - $referer = ''; - $uri = !empty($uri_parts[ 'path' ]) ? $uri_parts[ 'path' ] : '/'; - $uri .= !empty($uri_parts[ 'query' ]) ? '?' . $uri_parts[ 'query' ] : ''; - $_is_proxy = false; - if (empty($uri_parts[ 'port' ])) { - $port = 80; - } else { - $port = $uri_parts[ 'port' ]; - } - if (!empty($uri_parts[ 'user' ])) { - $user = $uri_parts[ 'user' ]; - } - if (!empty($uri_parts[ 'pass' ])) { - $pass = $uri_parts[ 'pass' ]; - } - // loop through parameters, setup headers - foreach ($params as $param_key => $param_value) { - switch ($param_key) { - case 'file': - case 'assign': - case 'assign_headers': - break; - case 'user': - if (!empty($param_value)) { - $user = $param_value; - } - break; - case 'pass': - if (!empty($param_value)) { - $pass = $param_value; - } - break; - case 'accept': - if (!empty($param_value)) { - $accept = $param_value; - } - break; - case 'header': - if (!empty($param_value)) { - if (!preg_match('![\w\d-]+: .+!', $param_value)) { - trigger_error("[plugin] invalid header format '{$param_value}'", E_USER_NOTICE); - return; - } else { - $extra_headers[] = $param_value; - } - } - break; - case 'proxy_host': - if (!empty($param_value)) { - $proxy_host = $param_value; - } - break; - case 'proxy_port': - if (!preg_match('!\D!', $param_value)) { - $proxy_port = (int)$param_value; - } else { - trigger_error("[plugin] invalid value for attribute '{$param_key }'", E_USER_NOTICE); - return; - } - break; - case 'agent': - if (!empty($param_value)) { - $agent = $param_value; - } - break; - case 'referer': - if (!empty($param_value)) { - $referer = $param_value; - } - break; - case 'timeout': - if (!preg_match('!\D!', $param_value)) { - $timeout = (int)$param_value; - } else { - trigger_error("[plugin] invalid value for attribute '{$param_key}'", E_USER_NOTICE); - return; - } - break; - default: - trigger_error("[plugin] unrecognized attribute '{$param_key}'", E_USER_NOTICE); - return; - } - } - if (!empty($proxy_host) && !empty($proxy_port)) { - $_is_proxy = true; - $fp = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout); - } else { - $fp = fsockopen($server_name, $port, $errno, $errstr, $timeout); - } - if (!$fp) { - trigger_error("[plugin] unable to fetch: $errstr ($errno)", E_USER_NOTICE); - return; - } else { - if ($_is_proxy) { - fputs($fp, 'GET ' . $params[ 'file' ] . " HTTP/1.0\r\n"); - } else { - fputs($fp, "GET $uri HTTP/1.0\r\n"); - } - if (!empty($host)) { - fputs($fp, "Host: $host\r\n"); - } - if (!empty($accept)) { - fputs($fp, "Accept: $accept\r\n"); - } - if (!empty($agent)) { - fputs($fp, "User-Agent: $agent\r\n"); - } - if (!empty($referer)) { - fputs($fp, "Referer: $referer\r\n"); - } - if (isset($extra_headers) && is_array($extra_headers)) { - foreach ($extra_headers as $curr_header) { - fputs($fp, $curr_header . "\r\n"); - } - } - if (!empty($user) && !empty($pass)) { - fputs($fp, 'Authorization: BASIC ' . base64_encode("$user:$pass") . "\r\n"); - } - fputs($fp, "\r\n"); - while (!feof($fp)) { - $content .= fgets($fp, 4096); - } - fclose($fp); - $csplit = preg_split("!\r\n\r\n!", $content, 2); - $content = $csplit[ 1 ]; - if (!empty($params[ 'assign_headers' ])) { - $template->assign($params[ 'assign_headers' ], preg_split("!\r\n!", $csplit[ 0 ])); - } - } - } else { - trigger_error("[plugin fetch] unable to parse URL, check syntax", E_USER_NOTICE); - return; - } - } else { - $content = @file_get_contents($params[ 'file' ]); - if ($content === false) { - throw new SmartyException("{fetch} cannot read resource '" . $params[ 'file' ] . "'"); - } - } - if (!empty($params[ 'assign' ])) { - $template->assign($params[ 'assign' ], $content); - } else { - return $content; - } -} diff --git a/src/includes/smarty-3.1.48/libs/plugins/function.html_checkboxes.php b/src/includes/smarty-3.1.48/libs/plugins/function.html_checkboxes.php deleted file mode 100644 index 302358e..0000000 --- a/src/includes/smarty-3.1.48/libs/plugins/function.html_checkboxes.php +++ /dev/null @@ -1,286 +0,0 @@ -' output=$names} - * {html_checkboxes values=$ids checked=$checked separator='
    ' output=$names} - * - * Params: - * - * - name (optional) - string default "checkbox" - * - values (required) - array - * - options (optional) - associative array - * - checked (optional) - array default not set - * - separator (optional) - ie
    or   - * - output (optional) - the output next to each checkbox - * - assign (optional) - assign the output as an array to this variable - * - escape (optional) - escape the content (not value), defaults to true - * - * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} - * (Smarty online manual) - * @author Christopher Kvarme - * @author credits to Monte Ohrt - * @version 1.0 - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @return string - * @uses smarty_function_escape_special_chars() - * @throws \SmartyException - */ -function smarty_function_html_checkboxes($params, Smarty_Internal_Template $template) -{ - $template->_checkPlugins( - array( - array( - 'function' => 'smarty_function_escape_special_chars', - 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php' - ) - ) - ); - $name = 'checkbox'; - $values = null; - $options = null; - $selected = array(); - $separator = ''; - $escape = true; - $labels = true; - $label_ids = false; - $output = null; - $extra = ''; - foreach ($params as $_key => $_val) { - switch ($_key) { - case 'name': - case 'separator': - $$_key = (string)$_val; - break; - case 'escape': - case 'labels': - case 'label_ids': - $$_key = (bool)$_val; - break; - case 'options': - $$_key = (array)$_val; - break; - case 'values': - case 'output': - $$_key = array_values((array)$_val); - break; - case 'checked': - case 'selected': - if (is_array($_val)) { - $selected = array(); - foreach ($_val as $_sel) { - if (is_object($_sel)) { - if (method_exists($_sel, '__toString')) { - $_sel = smarty_function_escape_special_chars((string)$_sel->__toString()); - } else { - trigger_error( - 'html_checkboxes: selected attribute contains an object of class \'' . - get_class($_sel) . '\' without __toString() method', - E_USER_NOTICE - ); - continue; - } - } else { - $_sel = smarty_function_escape_special_chars((string)$_sel); - } - $selected[ $_sel ] = true; - } - } elseif (is_object($_val)) { - if (method_exists($_val, '__toString')) { - $selected = smarty_function_escape_special_chars((string)$_val->__toString()); - } else { - trigger_error( - 'html_checkboxes: selected attribute is an object of class \'' . get_class($_val) . - '\' without __toString() method', - E_USER_NOTICE - ); - } - } else { - $selected = smarty_function_escape_special_chars((string)$_val); - } - break; - case 'checkboxes': - trigger_error( - 'html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', - E_USER_WARNING - ); - $options = (array)$_val; - break; - case 'assign': - break; - case 'strict': - break; - case 'disabled': - case 'readonly': - if (!empty($params[ 'strict' ])) { - if (!is_scalar($_val)) { - trigger_error( - "html_options: {$_key} attribute must be a scalar, only boolean true or string '{$_key}' will actually add the attribute", - E_USER_NOTICE - ); - } - if ($_val === true || $_val === $_key) { - $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"'; - } - break; - } - // omit break; to fall through! - // no break - default: - if (!is_array($_val)) { - $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; - } else { - trigger_error("html_checkboxes: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE); - } - break; - } - } - if (!isset($options) && !isset($values)) { - return ''; - } /* raise error here? */ - $_html_result = array(); - if (isset($options)) { - foreach ($options as $_key => $_val) { - $_html_result[] = - smarty_function_html_checkboxes_output( - $name, - $_key, - $_val, - $selected, - $extra, - $separator, - $labels, - $label_ids, - $escape - ); - } - } else { - foreach ($values as $_i => $_key) { - $_val = isset($output[ $_i ]) ? $output[ $_i ] : ''; - $_html_result[] = - smarty_function_html_checkboxes_output( - $name, - $_key, - $_val, - $selected, - $extra, - $separator, - $labels, - $label_ids, - $escape - ); - } - } - if (!empty($params[ 'assign' ])) { - $template->assign($params[ 'assign' ], $_html_result); - } else { - return implode("\n", $_html_result); - } -} - -/** - * @param $name - * @param $value - * @param $output - * @param $selected - * @param $extra - * @param $separator - * @param $labels - * @param $label_ids - * @param bool $escape - * - * @return string - */ -function smarty_function_html_checkboxes_output( - $name, - $value, - $output, - $selected, - $extra, - $separator, - $labels, - $label_ids, - $escape = true -) { - $_output = ''; - if (is_object($value)) { - if (method_exists($value, '__toString')) { - $value = (string)$value->__toString(); - } else { - trigger_error( - 'html_options: value is an object of class \'' . get_class($value) . - '\' without __toString() method', - E_USER_NOTICE - ); - return ''; - } - } else { - $value = (string)$value; - } - if (is_object($output)) { - if (method_exists($output, '__toString')) { - $output = (string)$output->__toString(); - } else { - trigger_error( - 'html_options: output is an object of class \'' . get_class($output) . - '\' without __toString() method', - E_USER_NOTICE - ); - return ''; - } - } else { - $output = (string)$output; - } - if ($labels) { - if ($label_ids) { - $_id = smarty_function_escape_special_chars( - preg_replace( - '![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, - '_', - $name . '_' . $value - ) - ); - $_output .= '
    '; - $suffix = ''; - break; - default: - if (!is_array($_val)) { - $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; - } else { - throw new SmartyException( - "html_image: extra attribute '{$_key}' cannot be an array", - E_USER_NOTICE - ); - } - break; - } - } - if (empty($file)) { - trigger_error('html_image: missing \'file\' parameter', E_USER_NOTICE); - return; - } - if ($file[ 0 ] === '/') { - $_image_path = $basedir . $file; - } else { - $_image_path = $file; - } - // strip file protocol - if (stripos($params[ 'file' ], 'file://') === 0) { - $params[ 'file' ] = substr($params[ 'file' ], 7); - } - $protocol = strpos($params[ 'file' ], '://'); - if ($protocol !== false) { - $protocol = strtolower(substr($params[ 'file' ], 0, $protocol)); - } - if (isset($template->smarty->security_policy)) { - if ($protocol) { - // remote resource (or php stream, …) - if (!$template->smarty->security_policy->isTrustedUri($params[ 'file' ])) { - return; - } - } else { - // local file - if (!$template->smarty->security_policy->isTrustedResourceDir($_image_path)) { - return; - } - } - } - if (!isset($params[ 'width' ]) || !isset($params[ 'height' ])) { - // FIXME: (rodneyrehm) getimagesize() loads the complete file off a remote resource, use custom [jpg,png,gif]header reader! - if (!$_image_data = @getimagesize($_image_path)) { - if (!file_exists($_image_path)) { - trigger_error("html_image: unable to find '{$_image_path}'", E_USER_NOTICE); - return; - } elseif (!is_readable($_image_path)) { - trigger_error("html_image: unable to read '{$_image_path}'", E_USER_NOTICE); - return; - } else { - trigger_error("html_image: '{$_image_path}' is not a valid image file", E_USER_NOTICE); - return; - } - } - if (!isset($params[ 'width' ])) { - $width = $_image_data[ 0 ]; - } - if (!isset($params[ 'height' ])) { - $height = $_image_data[ 1 ]; - } - } - if (isset($params[ 'dpi' ])) { - if (strstr($_SERVER[ 'HTTP_USER_AGENT' ], 'Mac')) { - // FIXME: (rodneyrehm) wrong dpi assumption - // don't know who thought this up… even if it was true in 1998, it's definitely wrong in 2011. - $dpi_default = 72; - } else { - $dpi_default = 96; - } - $_resize = $dpi_default / $params[ 'dpi' ]; - $width = round($width * $_resize); - $height = round($height * $_resize); - } - return $prefix . '' . $alt . '' . $suffix; -} diff --git a/src/includes/smarty-3.1.48/libs/plugins/function.html_options.php b/src/includes/smarty-3.1.48/libs/plugins/function.html_options.php deleted file mode 100644 index 6907e8e..0000000 --- a/src/includes/smarty-3.1.48/libs/plugins/function.html_options.php +++ /dev/null @@ -1,230 +0,0 @@ - tags generated from - * the passed parameters - * Params: - * - * - name (optional) - string default "select" - * - values (required) - if no options supplied) - array - * - options (required) - if no values supplied) - associative array - * - selected (optional) - string default not set - * - output (required) - if not options supplied) - array - * - id (optional) - string default not set - * - class (optional) - string default not set - * - * @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image} - * (Smarty online manual) - * @author Monte Ohrt - * @author Ralf Strehle (minor optimization) - * - * @param array $params parameters - * - * @param \Smarty_Internal_Template $template - * - * @return string - * @uses smarty_function_escape_special_chars() - * @throws \SmartyException - */ -function smarty_function_html_options($params, Smarty_Internal_Template $template) -{ - $template->_checkPlugins( - array( - array( - 'function' => 'smarty_function_escape_special_chars', - 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php' - ) - ) - ); - $name = null; - $values = null; - $options = null; - $selected = null; - $output = null; - $id = null; - $class = null; - $extra = ''; - foreach ($params as $_key => $_val) { - switch ($_key) { - case 'name': - case 'class': - case 'id': - $$_key = (string)$_val; - break; - case 'options': - $options = (array)$_val; - break; - case 'values': - case 'output': - $$_key = array_values((array)$_val); - break; - case 'selected': - if (is_array($_val)) { - $selected = array(); - foreach ($_val as $_sel) { - if (is_object($_sel)) { - if (method_exists($_sel, '__toString')) { - $_sel = smarty_function_escape_special_chars((string)$_sel->__toString()); - } else { - trigger_error( - 'html_options: selected attribute contains an object of class \'' . - get_class($_sel) . '\' without __toString() method', - E_USER_NOTICE - ); - continue; - } - } else { - $_sel = smarty_function_escape_special_chars((string)$_sel); - } - $selected[ $_sel ] = true; - } - } elseif (is_object($_val)) { - if (method_exists($_val, '__toString')) { - $selected = smarty_function_escape_special_chars((string)$_val->__toString()); - } else { - trigger_error( - 'html_options: selected attribute is an object of class \'' . get_class($_val) . - '\' without __toString() method', - E_USER_NOTICE - ); - } - } else { - $selected = smarty_function_escape_special_chars((string)$_val); - } - break; - case 'strict': - break; - case 'disabled': - case 'readonly': - if (!empty($params[ 'strict' ])) { - if (!is_scalar($_val)) { - trigger_error( - "html_options: {$_key} attribute must be a scalar, only boolean true or string '{$_key}' will actually add the attribute", - E_USER_NOTICE - ); - } - if ($_val === true || $_val === $_key) { - $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"'; - } - break; - } - // omit break; to fall through! - // no break - default: - if (!is_array($_val)) { - $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; - } else { - trigger_error("html_options: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE); - } - break; - } - } - if (!isset($options) && !isset($values)) { - /* raise error here? */ - return ''; - } - $_html_result = ''; - $_idx = 0; - if (isset($options)) { - foreach ($options as $_key => $_val) { - $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx); - } - } else { - foreach ($values as $_i => $_key) { - $_val = isset($output[ $_i ]) ? $output[ $_i ] : ''; - $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx); - } - } - if (!empty($name)) { - $_html_class = !empty($class) ? ' class="' . $class . '"' : ''; - $_html_id = !empty($id) ? ' id="' . $id . '"' : ''; - $_html_result = - '' . "\n"; - } - return $_html_result; -} - -/** - * @param $key - * @param $value - * @param $selected - * @param $id - * @param $class - * @param $idx - * - * @return string - */ -function smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, &$idx) -{ - if (!is_array($value)) { - $_key = smarty_function_escape_special_chars($key); - $_html_result = '' . "\n"; - $idx++; - } else { - $_idx = 0; - $_html_result = - smarty_function_html_options_optgroup( - $key, - $value, - $selected, - !empty($id) ? ($id . '-' . $idx) : null, - $class, - $_idx - ); - $idx++; - } - return $_html_result; -} - -/** - * @param $key - * @param $values - * @param $selected - * @param $id - * @param $class - * @param $idx - * - * @return string - */ -function smarty_function_html_options_optgroup($key, $values, $selected, $id, $class, &$idx) -{ - $optgroup_html = '' . "\n"; - foreach ($values as $key => $value) { - $optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, $idx); - } - $optgroup_html .= "\n"; - return $optgroup_html; -} diff --git a/src/includes/smarty-3.1.48/libs/plugins/function.html_radios.php b/src/includes/smarty-3.1.48/libs/plugins/function.html_radios.php deleted file mode 100644 index 5e83458..0000000 --- a/src/includes/smarty-3.1.48/libs/plugins/function.html_radios.php +++ /dev/null @@ -1,266 +0,0 @@ - or   - * - output (optional) - the output next to each radio button - * - assign (optional) - assign the output as an array to this variable - * - escape (optional) - escape the content (not value), defaults to true - * - * Examples: - * - * {html_radios values=$ids output=$names} - * {html_radios values=$ids name='box' separator='
    ' output=$names} - * {html_radios values=$ids checked=$checked separator='
    ' output=$names} - * - * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios} - * (Smarty online manual) - * @author Christopher Kvarme - * @author credits to Monte Ohrt - * @version 1.0 - * - * @param array $params parameters - * @param Smarty_Internal_Template $template template object - * - * @return string - * @uses smarty_function_escape_special_chars() - * @throws \SmartyException - */ -function smarty_function_html_radios($params, Smarty_Internal_Template $template) -{ - $template->_checkPlugins( - array( - array( - 'function' => 'smarty_function_escape_special_chars', - 'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php' - ) - ) - ); - $name = 'radio'; - $values = null; - $options = null; - $selected = null; - $separator = ''; - $escape = true; - $labels = true; - $label_ids = false; - $output = null; - $extra = ''; - foreach ($params as $_key => $_val) { - switch ($_key) { - case 'name': - case 'separator': - $$_key = (string)$_val; - break; - case 'checked': - case 'selected': - if (is_array($_val)) { - trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING); - } elseif (is_object($_val)) { - if (method_exists($_val, '__toString')) { - $selected = smarty_function_escape_special_chars((string)$_val->__toString()); - } else { - trigger_error( - 'html_radios: selected attribute is an object of class \'' . get_class($_val) . - '\' without __toString() method', - E_USER_NOTICE - ); - } - } else { - $selected = (string)$_val; - } - break; - case 'escape': - case 'labels': - case 'label_ids': - $$_key = (bool)$_val; - break; - case 'options': - $$_key = (array)$_val; - break; - case 'values': - case 'output': - $$_key = array_values((array)$_val); - break; - case 'radios': - trigger_error( - 'html_radios: the use of the "radios" attribute is deprecated, use "options" instead', - E_USER_WARNING - ); - $options = (array)$_val; - break; - case 'assign': - break; - case 'strict': - break; - case 'disabled': - case 'readonly': - if (!empty($params[ 'strict' ])) { - if (!is_scalar($_val)) { - trigger_error( - "html_options: {$_key} attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", - E_USER_NOTICE - ); - } - if ($_val === true || $_val === $_key) { - $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"'; - } - break; - } - // omit break; to fall through! - // no break - default: - if (!is_array($_val)) { - $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; - } else { - trigger_error("html_radios: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE); - } - break; - } - } - if (!isset($options) && !isset($values)) { - /* raise error here? */ - return ''; - } - $_html_result = array(); - if (isset($options)) { - foreach ($options as $_key => $_val) { - $_html_result[] = - smarty_function_html_radios_output( - $name, - $_key, - $_val, - $selected, - $extra, - $separator, - $labels, - $label_ids, - $escape - ); - } - } else { - foreach ($values as $_i => $_key) { - $_val = isset($output[ $_i ]) ? $output[ $_i ] : ''; - $_html_result[] = - smarty_function_html_radios_output( - $name, - $_key, - $_val, - $selected, - $extra, - $separator, - $labels, - $label_ids, - $escape - ); - } - } - if (!empty($params[ 'assign' ])) { - $template->assign($params[ 'assign' ], $_html_result); - } else { - return implode("\n", $_html_result); - } -} - -/** - * @param $name - * @param $value - * @param $output - * @param $selected - * @param $extra - * @param $separator - * @param $labels - * @param $label_ids - * @param $escape - * - * @return string - */ -function smarty_function_html_radios_output( - $name, - $value, - $output, - $selected, - $extra, - $separator, - $labels, - $label_ids, - $escape -) { - $_output = ''; - if (is_object($value)) { - if (method_exists($value, '__toString')) { - $value = (string)$value->__toString(); - } else { - trigger_error( - 'html_options: value is an object of class \'' . get_class($value) . - '\' without __toString() method', - E_USER_NOTICE - ); - return ''; - } - } else { - $value = (string)$value; - } - if (is_object($output)) { - if (method_exists($output, '__toString')) { - $output = (string)$output->__toString(); - } else { - trigger_error( - 'html_options: output is an object of class \'' . get_class($output) . - '\' without __toString() method', - E_USER_NOTICE - ); - return ''; - } - } else { - $output = (string)$output; - } - if ($labels) { - if ($label_ids) { - $_id = smarty_function_escape_special_chars( - preg_replace( - '![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, - '_', - $name . '_' . $value - ) - ); - $_output .= '