From 341b248a2979deab1b02bc3acc0f32364c0067e5 Mon Sep 17 00:00:00 2001 From: Ortwin Pinke Date: Fri, 27 Jun 2025 14:56:53 +0200 Subject: [PATCH] upgrade smarty --- cSmartyBackendTest.php | 13 + vendor/autoload.php | 7 + vendor/composer/ClassLoader.php | 572 +++ vendor/composer/InstalledVersions.php | 357 ++ vendor/composer/LICENSE | 21 + vendor/composer/autoload_classmap.php | 10 + vendor/composer/autoload_files.php | 11 + vendor/composer/autoload_namespaces.php | 9 + vendor/composer/autoload_psr4.php | 11 + vendor/composer/autoload_real.php | 80 + vendor/composer/autoload_static.php | 46 + vendor/composer/installed.json | 169 + vendor/composer/installed.php | 41 + vendor/composer/platform_check.php | 26 + vendor/smarty/smarty/CHANGELOG.md | 3759 +++++++++++++++++ vendor/smarty/smarty/CONTRIBUTING.md | 119 + vendor/smarty/smarty/LICENSE | 179 + vendor/smarty/smarty/Makefile | 19 + vendor/smarty/smarty/README.md | 27 + vendor/smarty/smarty/SECURITY.md | 20 + vendor/smarty/smarty/TODO.txt | 32 + vendor/smarty/smarty/changelog/.gitkeep | 0 vendor/smarty/smarty/composer.json | 53 + vendor/smarty/smarty/demo/configs/test.conf | 5 + vendor/smarty/smarty/demo/index.php | 35 + .../smarty/smarty/demo/templates/footer.tpl | 2 + .../smarty/smarty/demo/templates/header.tpl | 5 + vendor/smarty/smarty/demo/templates/index.tpl | 85 + vendor/smarty/smarty/docs/_config.yml | 1 + vendor/smarty/smarty/docs/api/basics.md | 93 + .../smarty/smarty/docs/api/caching/basics.md | 184 + .../docs/api/caching/custom-storage-layers.md | 36 + .../caching/multiple-caches-per-template.md | 137 + vendor/smarty/smarty/docs/api/configuring.md | 225 + .../smarty/docs/api/extending/block-tags.md | 59 + .../smarty/docs/api/extending/extensions.md | 101 + .../smarty/docs/api/extending/introduction.md | 10 + .../smarty/docs/api/extending/modifiers.md | 27 + .../smarty/smarty/docs/api/extending/tags.md | 84 + .../smarty/docs/api/filters/output-filters.md | 35 + .../smarty/docs/api/filters/postfilters.md | 33 + .../smarty/docs/api/filters/prefilters.md | 26 + vendor/smarty/smarty/docs/api/inheritance.md | 130 + vendor/smarty/smarty/docs/api/rendering.md | 86 + vendor/smarty/smarty/docs/api/resources.md | 322 ++ vendor/smarty/smarty/docs/api/security.md | 119 + .../smarty/docs/api/variables/assigning.md | 139 + .../smarty/docs/api/variables/config-files.md | 88 + .../smarty/docs/api/variables/objects.md | 106 + .../api/variables/static-class-methods.md | 39 + .../smarty/docs/api/variables/streams.md | 16 + vendor/smarty/smarty/docs/appendixes/tips.md | 273 ++ .../smarty/docs/appendixes/troubleshooting.md | 104 + .../designers/chapter-debugging-console.md | 39 + .../smarty/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-empty.md | 10 + .../language-modifier-escape.md | 78 + .../language-modifier-from-charset.md | 20 + .../language-modifier-in_array.md | 17 + .../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 + vendor/smarty/smarty/docs/features.md | 151 + vendor/smarty/smarty/docs/getting-started.md | 197 + vendor/smarty/smarty/docs/img/favicon.ico | Bin 0 -> 7782 bytes vendor/smarty/smarty/docs/img/smarty.svg | 22 + vendor/smarty/smarty/docs/index.md | 35 + vendor/smarty/smarty/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 + vendor/smarty/smarty/docs/upgrading.md | 171 + vendor/smarty/smarty/libs/Smarty.class.php | 42 + vendor/smarty/smarty/mkdocs.yml | 159 + .../smarty/run-tests-for-all-php-versions.sh | 17 + vendor/smarty/smarty/run-tests.sh | 10 + .../smarty/smarty/src/BlockHandler/Base.php | 19 + .../BlockHandler/BlockHandlerInterface.php | 10 + .../src/BlockHandler/BlockPluginWrapper.php | 19 + .../smarty/src/BlockHandler/TextFormat.php | 110 + .../smarty/smarty/src/Cacheresource/Base.php | 156 + .../smarty/src/Cacheresource/Custom.php | 303 ++ .../smarty/smarty/src/Cacheresource/File.php | 338 ++ .../src/Cacheresource/KeyValueStore.php | 541 +++ vendor/smarty/smarty/src/Compile/Base.php | 233 + .../smarty/src/Compile/BlockCompiler.php | 228 + .../smarty/src/Compile/CompilerInterface.php | 26 + .../Compile/DefaultHandlerBlockCompiler.php | 29 + .../DefaultHandlerFunctionCallCompiler.php | 47 + .../src/Compile/FunctionCallCompiler.php | 79 + .../src/Compile/Modifier/BCPluginWrapper.php | 19 + .../smarty/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 + .../smarty/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 + .../smarty/smarty/src/Compile/Tag/Append.php | 58 + .../smarty/smarty/src/Compile/Tag/Assign.php | 95 + .../src/Compile/Tag/BCPluginWrapper.php | 31 + .../smarty/smarty/src/Compile/Tag/Block.php | 92 + .../smarty/src/Compile/Tag/BlockClose.php | 110 + .../smarty/src/Compile/Tag/BreakTag.php | 123 + vendor/smarty/smarty/src/Compile/Tag/Call.php | 81 + .../smarty/smarty/src/Compile/Tag/Capture.php | 72 + .../smarty/src/Compile/Tag/CaptureClose.php | 43 + .../smarty/src/Compile/Tag/ConfigLoad.php | 77 + .../smarty/src/Compile/Tag/ContinueTag.php | 27 + .../smarty/smarty/src/Compile/Tag/Debug.php | 45 + .../smarty/src/Compile/Tag/ElseIfTag.php | 86 + .../smarty/smarty/src/Compile/Tag/ElseTag.php | 29 + .../smarty/smarty/src/Compile/Tag/EvalTag.php | 74 + .../smarty/src/Compile/Tag/ExtendsTag.php | 87 + .../smarty/src/Compile/Tag/ForClose.php | 51 + .../smarty/smarty/src/Compile/Tag/ForElse.php | 30 + .../smarty/smarty/src/Compile/Tag/ForTag.php | 101 + .../smarty/src/Compile/Tag/ForeachClose.php | 55 + .../smarty/src/Compile/Tag/ForeachElse.php | 35 + .../smarty/src/Compile/Tag/ForeachSection.php | 206 + .../smarty/src/Compile/Tag/ForeachTag.php | 286 ++ .../smarty/src/Compile/Tag/FunctionClose.php | 164 + .../smarty/src/Compile/Tag/FunctionTag.php | 73 + .../smarty/smarty/src/Compile/Tag/IfClose.php | 48 + .../smarty/smarty/src/Compile/Tag/IfTag.php | 70 + .../smarty/src/Compile/Tag/IncludeTag.php | 189 + .../smarty/src/Compile/Tag/Inheritance.php | 54 + .../smarty/smarty/src/Compile/Tag/Ldelim.php | 41 + .../smarty/smarty/src/Compile/Tag/Nocache.php | 36 + .../smarty/src/Compile/Tag/NocacheClose.php | 37 + .../smarty/smarty/src/Compile/Tag/Rdelim.php | 36 + .../smarty/smarty/src/Compile/Tag/Section.php | 399 ++ .../smarty/src/Compile/Tag/SectionClose.php | 48 + .../smarty/src/Compile/Tag/SectionElse.php | 29 + .../smarty/src/Compile/Tag/Setfilter.php | 40 + .../smarty/src/Compile/Tag/SetfilterClose.php | 43 + .../smarty/src/Compile/Tag/WhileClose.php | 45 + .../smarty/src/Compile/Tag/WhileTag.php | 72 + .../smarty/src/Compiler/BaseCompiler.php | 23 + .../smarty/smarty/src/Compiler/CodeFrame.php | 126 + .../smarty/smarty/src/Compiler/Configfile.php | 173 + .../smarty/smarty/src/Compiler/Template.php | 1512 +++++++ .../smarty/smarty/src/CompilerException.php | 73 + vendor/smarty/smarty/src/Data.php | 521 +++ vendor/smarty/smarty/src/Debug.php | 370 ++ vendor/smarty/smarty/src/ErrorHandler.php | 97 + vendor/smarty/smarty/src/Exception.php | 16 + .../smarty/src/Extension/BCPluginsAdapter.php | 229 + vendor/smarty/smarty/src/Extension/Base.php | 41 + .../smarty/src/Extension/CallbackWrapper.php | 35 + .../smarty/src/Extension/CoreExtension.php | 49 + .../smarty/src/Extension/DefaultExtension.php | 757 ++++ .../src/Extension/ExtensionInterface.php | 83 + .../smarty/src/Filter/FilterInterface.php | 9 + .../smarty/src/Filter/FilterPluginWrapper.php | 15 + .../src/Filter/Output/TrimWhitespace.php | 91 + .../src/FunctionHandler/BCPluginWrapper.php | 21 + .../smarty/src/FunctionHandler/Base.php | 21 + .../smarty/src/FunctionHandler/Count.php | 36 + .../smarty/src/FunctionHandler/Counter.php | 61 + .../smarty/src/FunctionHandler/Cycle.php | 90 + .../smarty/src/FunctionHandler/Fetch.php | 203 + .../FunctionHandlerInterface.php | 10 + .../smarty/src/FunctionHandler/HtmlBase.php | 107 + .../src/FunctionHandler/HtmlCheckboxes.php | 189 + .../smarty/src/FunctionHandler/HtmlImage.php | 149 + .../src/FunctionHandler/HtmlOptions.php | 223 + .../smarty/src/FunctionHandler/HtmlRadios.php | 174 + .../src/FunctionHandler/HtmlSelectDate.php | 381 ++ .../src/FunctionHandler/HtmlSelectTime.php | 334 ++ .../smarty/src/FunctionHandler/HtmlTable.php | 161 + .../smarty/src/FunctionHandler/Mailto.php | 141 + .../smarty/src/FunctionHandler/Math.php | 140 + .../smarty/src/Lexer/ConfigfileLexer.php | 707 ++++ .../smarty/src/Lexer/ConfigfileLexer.plex | 321 ++ .../smarty/smarty/src/Lexer/TemplateLexer.php | 1083 +++++ .../smarty/src/Lexer/TemplateLexer.plex | 677 +++ vendor/smarty/smarty/src/ParseTree/Base.php | 45 + vendor/smarty/smarty/src/ParseTree/Code.php | 45 + vendor/smarty/smarty/src/ParseTree/Dq.php | 97 + .../smarty/smarty/src/ParseTree/DqContent.php | 44 + vendor/smarty/smarty/src/ParseTree/Tag.php | 70 + .../smarty/smarty/src/ParseTree/Template.php | 172 + vendor/smarty/smarty/src/ParseTree/Text.php | 59 + .../smarty/src/Parser/ConfigfileParser.php | 972 +++++ .../smarty/src/Parser/ConfigfileParser.y | 352 ++ .../smarty/src/Parser/TemplateParser.php | 3178 ++++++++++++++ .../smarty/smarty/src/Parser/TemplateParser.y | 1394 ++++++ .../smarty/smarty/src/Resource/BasePlugin.php | 145 + .../smarty/src/Resource/CustomPlugin.php | 105 + .../smarty/src/Resource/ExtendsPlugin.php | 116 + .../smarty/smarty/src/Resource/FilePlugin.php | 183 + .../smarty/src/Resource/RecompiledPlugin.php | 50 + .../smarty/src/Resource/StreamPlugin.php | 71 + .../smarty/smarty/src/Resource/StringEval.php | 85 + .../smarty/src/Resource/StringPlugin.php | 94 + vendor/smarty/smarty/src/Runtime/Block.php | 92 + .../smarty/src/Runtime/CaptureRuntime.php | 163 + .../Runtime/DefaultPluginHandlerRuntime.php | 73 + .../smarty/src/Runtime/ForeachRuntime.php | 160 + .../smarty/src/Runtime/InheritanceRuntime.php | 243 ++ .../smarty/src/Runtime/TplFunctionRuntime.php | 144 + vendor/smarty/smarty/src/Security.php | 560 +++ vendor/smarty/smarty/src/Smarty.php | 2239 ++++++++++ vendor/smarty/smarty/src/Template.php | 732 ++++ vendor/smarty/smarty/src/Template/Cached.php | 428 ++ .../smarty/smarty/src/Template/Compiled.php | 305 ++ vendor/smarty/smarty/src/Template/Config.php | 36 + .../smarty/src/Template/GeneratedPhpFile.php | 159 + vendor/smarty/smarty/src/Template/Source.php | 285 ++ vendor/smarty/smarty/src/TemplateBase.php | 425 ++ vendor/smarty/smarty/src/TestInstall.php | 211 + .../smarty/smarty/src/UndefinedVariable.php | 19 + vendor/smarty/smarty/src/Variable.php | 118 + vendor/smarty/smarty/src/debug.tpl | 174 + vendor/smarty/smarty/src/functions.php | 253 ++ vendor/symfony/polyfill-mbstring/LICENSE | 19 + vendor/symfony/polyfill-mbstring/Mbstring.php | 1045 +++++ vendor/symfony/polyfill-mbstring/README.md | 13 + .../Resources/unidata/caseFolding.php | 119 + .../Resources/unidata/lowerCase.php | 1397 ++++++ .../Resources/unidata/titleCaseRegexp.php | 5 + .../Resources/unidata/upperCase.php | 1489 +++++++ .../symfony/polyfill-mbstring/bootstrap.php | 172 + .../symfony/polyfill-mbstring/bootstrap80.php | 167 + .../symfony/polyfill-mbstring/composer.json | 39 + 413 files changed, 52759 insertions(+) create mode 100644 cSmartyBackendTest.php create mode 100644 vendor/autoload.php create mode 100644 vendor/composer/ClassLoader.php create mode 100644 vendor/composer/InstalledVersions.php create mode 100644 vendor/composer/LICENSE create mode 100644 vendor/composer/autoload_classmap.php create mode 100644 vendor/composer/autoload_files.php create mode 100644 vendor/composer/autoload_namespaces.php create mode 100644 vendor/composer/autoload_psr4.php create mode 100644 vendor/composer/autoload_real.php create mode 100644 vendor/composer/autoload_static.php create mode 100644 vendor/composer/installed.json create mode 100644 vendor/composer/installed.php create mode 100644 vendor/composer/platform_check.php create mode 100644 vendor/smarty/smarty/CHANGELOG.md create mode 100644 vendor/smarty/smarty/CONTRIBUTING.md create mode 100644 vendor/smarty/smarty/LICENSE create mode 100644 vendor/smarty/smarty/Makefile create mode 100644 vendor/smarty/smarty/README.md create mode 100644 vendor/smarty/smarty/SECURITY.md create mode 100644 vendor/smarty/smarty/TODO.txt create mode 100644 vendor/smarty/smarty/changelog/.gitkeep create mode 100644 vendor/smarty/smarty/composer.json create mode 100644 vendor/smarty/smarty/demo/configs/test.conf create mode 100644 vendor/smarty/smarty/demo/index.php create mode 100644 vendor/smarty/smarty/demo/templates/footer.tpl create mode 100644 vendor/smarty/smarty/demo/templates/header.tpl create mode 100644 vendor/smarty/smarty/demo/templates/index.tpl create mode 100644 vendor/smarty/smarty/docs/_config.yml create mode 100644 vendor/smarty/smarty/docs/api/basics.md create mode 100644 vendor/smarty/smarty/docs/api/caching/basics.md create mode 100644 vendor/smarty/smarty/docs/api/caching/custom-storage-layers.md create mode 100644 vendor/smarty/smarty/docs/api/caching/multiple-caches-per-template.md create mode 100644 vendor/smarty/smarty/docs/api/configuring.md create mode 100644 vendor/smarty/smarty/docs/api/extending/block-tags.md create mode 100644 vendor/smarty/smarty/docs/api/extending/extensions.md create mode 100644 vendor/smarty/smarty/docs/api/extending/introduction.md create mode 100644 vendor/smarty/smarty/docs/api/extending/modifiers.md create mode 100644 vendor/smarty/smarty/docs/api/extending/tags.md create mode 100644 vendor/smarty/smarty/docs/api/filters/output-filters.md create mode 100644 vendor/smarty/smarty/docs/api/filters/postfilters.md create mode 100644 vendor/smarty/smarty/docs/api/filters/prefilters.md create mode 100644 vendor/smarty/smarty/docs/api/inheritance.md create mode 100644 vendor/smarty/smarty/docs/api/rendering.md create mode 100644 vendor/smarty/smarty/docs/api/resources.md create mode 100644 vendor/smarty/smarty/docs/api/security.md create mode 100644 vendor/smarty/smarty/docs/api/variables/assigning.md create mode 100644 vendor/smarty/smarty/docs/api/variables/config-files.md create mode 100644 vendor/smarty/smarty/docs/api/variables/objects.md create mode 100644 vendor/smarty/smarty/docs/api/variables/static-class-methods.md create mode 100644 vendor/smarty/smarty/docs/api/variables/streams.md create mode 100644 vendor/smarty/smarty/docs/appendixes/tips.md create mode 100644 vendor/smarty/smarty/docs/appendixes/troubleshooting.md create mode 100644 vendor/smarty/smarty/docs/designers/chapter-debugging-console.md create mode 100644 vendor/smarty/smarty/docs/designers/config-files.md create mode 100644 vendor/smarty/smarty/docs/designers/language-basic-syntax/index.md create mode 100644 vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md create mode 100644 vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md create mode 100644 vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md create mode 100644 vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-operators.md create mode 100644 vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-quotes.md create mode 100644 vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-tags.md create mode 100644 vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/index.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-append.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-call.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-debug.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-for.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-function.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-setfilter.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-strip.md create mode 100644 vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md create mode 100644 vendor/smarty/smarty/docs/designers/language-combining-modifiers.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/index.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-counter.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-cycle.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-debug.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-checkboxes.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-options.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-radios.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-date.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-time.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-table.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-mailto.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-math.md create mode 100644 vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/index.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-capitalize.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-cat.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-characters.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-paragraphs.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-sentences.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-words.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-date-format.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-debug-print-var.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-default.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-empty.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-in_array.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-indent.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-is_array.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-isset.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-join.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-json-encode.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-lower.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-nl2br.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-noprint.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-number-format.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-raw.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-regex-replace.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-replace.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-round.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-spacify.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-split.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-str-repeat.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-string-format.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip-tags.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strlen.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-substr.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-truncate.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-unescape.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md create mode 100644 vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-wordwrap.md create mode 100644 vendor/smarty/smarty/docs/designers/language-variables/index.md create mode 100644 vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md create mode 100644 vendor/smarty/smarty/docs/designers/language-variables/language-config-variables.md create mode 100644 vendor/smarty/smarty/docs/designers/language-variables/language-variable-scopes.md create mode 100644 vendor/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md create mode 100644 vendor/smarty/smarty/docs/features.md create mode 100644 vendor/smarty/smarty/docs/getting-started.md create mode 100644 vendor/smarty/smarty/docs/img/favicon.ico create mode 100644 vendor/smarty/smarty/docs/img/smarty.svg create mode 100644 vendor/smarty/smarty/docs/index.md create mode 100644 vendor/smarty/smarty/docs/philosophy.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/add-extension.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-add-plugins-dir.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-append.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-assign.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-assign.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-cache.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-clear-assign.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-clear-cache.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-clear-compiled-tpl.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-clear-config.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-templates.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-config-load.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-create-data.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-create-template.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-disable-security.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-display.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-enable-security.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-fetch.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-dir.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-vars.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-get-plugins-dir.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-get-registered-object.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-vars.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-is-cached.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-load-filter.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-register-class.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-register-filter.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-register-object.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-register-resource.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-set-plugins-dir.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-test-install.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-cacheresource.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-filter.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-object.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-plugin.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-resource.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-auto-literal.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-dir.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-id.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-locking.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-caching-type.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-caching.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-dir.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-id.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-locking.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-compiler-class.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-config-booleanize.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-config-dir.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-config-overwrite.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-config-read-hidden.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging-ctrl.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-type.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-default-modifiers.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-default-resource-type.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-escape-html.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-force-cache.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-force-compile.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-locking-timeout.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-merge-compiled-includes.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-smarty-debug-id.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md create mode 100644 vendor/smarty/smarty/docs/programmers/api-variables/variable-use-sub-dirs.md create mode 100644 vendor/smarty/smarty/docs/upgrading.md create mode 100644 vendor/smarty/smarty/libs/Smarty.class.php create mode 100644 vendor/smarty/smarty/mkdocs.yml create mode 100755 vendor/smarty/smarty/run-tests-for-all-php-versions.sh create mode 100755 vendor/smarty/smarty/run-tests.sh create mode 100644 vendor/smarty/smarty/src/BlockHandler/Base.php create mode 100644 vendor/smarty/smarty/src/BlockHandler/BlockHandlerInterface.php create mode 100644 vendor/smarty/smarty/src/BlockHandler/BlockPluginWrapper.php create mode 100644 vendor/smarty/smarty/src/BlockHandler/TextFormat.php create mode 100644 vendor/smarty/smarty/src/Cacheresource/Base.php create mode 100644 vendor/smarty/smarty/src/Cacheresource/Custom.php create mode 100644 vendor/smarty/smarty/src/Cacheresource/File.php create mode 100644 vendor/smarty/smarty/src/Cacheresource/KeyValueStore.php create mode 100644 vendor/smarty/smarty/src/Compile/Base.php create mode 100644 vendor/smarty/smarty/src/Compile/BlockCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/CompilerInterface.php create mode 100644 vendor/smarty/smarty/src/Compile/DefaultHandlerBlockCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/DefaultHandlerFunctionCallCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/FunctionCallCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/BCPluginWrapper.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/Base.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/CatModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/CountCharactersModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/CountParagraphsModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/CountSentencesModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/CountWordsModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/DefaultModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/EmptyModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/EscapeModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/FromCharsetModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/IndentModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/IsArrayModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/IssetModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/JsonEncodeModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/LowerModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/ModifierCompilerInterface.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/Nl2brModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/NoPrintModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/RawModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/RoundModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/StrRepeatModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/StringFormatModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/StripModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/StripTagsModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/StrlenModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/SubstrModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/ToCharsetModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/UnescapeModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/UpperModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Modifier/WordWrapModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/ModifierCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/ObjectMethodBlockCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/ObjectMethodCallCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/PrintExpressionCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/SpecialVariableCompiler.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/Append.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/Assign.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/BCPluginWrapper.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/Block.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/BlockClose.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/BreakTag.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/Call.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/Capture.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/CaptureClose.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/ConfigLoad.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/ContinueTag.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/Debug.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/ElseIfTag.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/ElseTag.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/EvalTag.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/ExtendsTag.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/ForClose.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/ForElse.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/ForTag.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/ForeachClose.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/ForeachElse.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/ForeachSection.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/ForeachTag.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/FunctionClose.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/FunctionTag.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/IfClose.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/IfTag.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/IncludeTag.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/Inheritance.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/Ldelim.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/Nocache.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/NocacheClose.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/Rdelim.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/Section.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/SectionClose.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/SectionElse.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/Setfilter.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/SetfilterClose.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/WhileClose.php create mode 100644 vendor/smarty/smarty/src/Compile/Tag/WhileTag.php create mode 100644 vendor/smarty/smarty/src/Compiler/BaseCompiler.php create mode 100644 vendor/smarty/smarty/src/Compiler/CodeFrame.php create mode 100644 vendor/smarty/smarty/src/Compiler/Configfile.php create mode 100644 vendor/smarty/smarty/src/Compiler/Template.php create mode 100644 vendor/smarty/smarty/src/CompilerException.php create mode 100644 vendor/smarty/smarty/src/Data.php create mode 100644 vendor/smarty/smarty/src/Debug.php create mode 100644 vendor/smarty/smarty/src/ErrorHandler.php create mode 100644 vendor/smarty/smarty/src/Exception.php create mode 100644 vendor/smarty/smarty/src/Extension/BCPluginsAdapter.php create mode 100644 vendor/smarty/smarty/src/Extension/Base.php create mode 100644 vendor/smarty/smarty/src/Extension/CallbackWrapper.php create mode 100644 vendor/smarty/smarty/src/Extension/CoreExtension.php create mode 100644 vendor/smarty/smarty/src/Extension/DefaultExtension.php create mode 100644 vendor/smarty/smarty/src/Extension/ExtensionInterface.php create mode 100644 vendor/smarty/smarty/src/Filter/FilterInterface.php create mode 100644 vendor/smarty/smarty/src/Filter/FilterPluginWrapper.php create mode 100644 vendor/smarty/smarty/src/Filter/Output/TrimWhitespace.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/BCPluginWrapper.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/Base.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/Count.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/Counter.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/Cycle.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/Fetch.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/FunctionHandlerInterface.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/HtmlBase.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/HtmlCheckboxes.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/HtmlImage.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/HtmlOptions.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/HtmlRadios.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/HtmlSelectDate.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/HtmlSelectTime.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/HtmlTable.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/Mailto.php create mode 100644 vendor/smarty/smarty/src/FunctionHandler/Math.php create mode 100644 vendor/smarty/smarty/src/Lexer/ConfigfileLexer.php create mode 100644 vendor/smarty/smarty/src/Lexer/ConfigfileLexer.plex create mode 100644 vendor/smarty/smarty/src/Lexer/TemplateLexer.php create mode 100644 vendor/smarty/smarty/src/Lexer/TemplateLexer.plex create mode 100644 vendor/smarty/smarty/src/ParseTree/Base.php create mode 100644 vendor/smarty/smarty/src/ParseTree/Code.php create mode 100644 vendor/smarty/smarty/src/ParseTree/Dq.php create mode 100644 vendor/smarty/smarty/src/ParseTree/DqContent.php create mode 100644 vendor/smarty/smarty/src/ParseTree/Tag.php create mode 100644 vendor/smarty/smarty/src/ParseTree/Template.php create mode 100644 vendor/smarty/smarty/src/ParseTree/Text.php create mode 100644 vendor/smarty/smarty/src/Parser/ConfigfileParser.php create mode 100644 vendor/smarty/smarty/src/Parser/ConfigfileParser.y create mode 100644 vendor/smarty/smarty/src/Parser/TemplateParser.php create mode 100644 vendor/smarty/smarty/src/Parser/TemplateParser.y create mode 100644 vendor/smarty/smarty/src/Resource/BasePlugin.php create mode 100644 vendor/smarty/smarty/src/Resource/CustomPlugin.php create mode 100644 vendor/smarty/smarty/src/Resource/ExtendsPlugin.php create mode 100644 vendor/smarty/smarty/src/Resource/FilePlugin.php create mode 100644 vendor/smarty/smarty/src/Resource/RecompiledPlugin.php create mode 100644 vendor/smarty/smarty/src/Resource/StreamPlugin.php create mode 100644 vendor/smarty/smarty/src/Resource/StringEval.php create mode 100644 vendor/smarty/smarty/src/Resource/StringPlugin.php create mode 100644 vendor/smarty/smarty/src/Runtime/Block.php create mode 100644 vendor/smarty/smarty/src/Runtime/CaptureRuntime.php create mode 100644 vendor/smarty/smarty/src/Runtime/DefaultPluginHandlerRuntime.php create mode 100644 vendor/smarty/smarty/src/Runtime/ForeachRuntime.php create mode 100644 vendor/smarty/smarty/src/Runtime/InheritanceRuntime.php create mode 100644 vendor/smarty/smarty/src/Runtime/TplFunctionRuntime.php create mode 100644 vendor/smarty/smarty/src/Security.php create mode 100644 vendor/smarty/smarty/src/Smarty.php create mode 100644 vendor/smarty/smarty/src/Template.php create mode 100644 vendor/smarty/smarty/src/Template/Cached.php create mode 100644 vendor/smarty/smarty/src/Template/Compiled.php create mode 100644 vendor/smarty/smarty/src/Template/Config.php create mode 100644 vendor/smarty/smarty/src/Template/GeneratedPhpFile.php create mode 100644 vendor/smarty/smarty/src/Template/Source.php create mode 100644 vendor/smarty/smarty/src/TemplateBase.php create mode 100644 vendor/smarty/smarty/src/TestInstall.php create mode 100644 vendor/smarty/smarty/src/UndefinedVariable.php create mode 100644 vendor/smarty/smarty/src/Variable.php create mode 100644 vendor/smarty/smarty/src/debug.tpl create mode 100644 vendor/smarty/smarty/src/functions.php create mode 100644 vendor/symfony/polyfill-mbstring/LICENSE create mode 100644 vendor/symfony/polyfill-mbstring/Mbstring.php create mode 100644 vendor/symfony/polyfill-mbstring/README.md create mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php create mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php create mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php create mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php create mode 100644 vendor/symfony/polyfill-mbstring/bootstrap.php create mode 100644 vendor/symfony/polyfill-mbstring/bootstrap80.php create mode 100644 vendor/symfony/polyfill-mbstring/composer.json diff --git a/cSmartyBackendTest.php b/cSmartyBackendTest.php new file mode 100644 index 0000000..c638ab5 --- /dev/null +++ b/cSmartyBackendTest.php @@ -0,0 +1,13 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var ?string */ + private $vendorDir; + + // PSR-4 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array[] + * @psalm-var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixesPsr0 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var string[] + * @psalm-var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var bool[] + * @psalm-var array + */ + private $missingClasses = array(); + + /** @var ?string */ + private $apcuPrefix; + + /** + * @var self[] + */ + private static $registeredLoaders = array(); + + /** + * @param ?string $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + } + + /** + * @return string[] + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array[] + * @psalm-return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return string[] Array of classname => path + * @psalm-return array + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param string[] $classMap Class to filename map + * @psalm-param array $classMap + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders indexed by their corresponding vendor directories. + * + * @return self[] + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + * @private + */ +function includeFile($file) +{ + include $file; +} diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php new file mode 100644 index 0000000..0158194 --- /dev/null +++ b/vendor/composer/InstalledVersions.php @@ -0,0 +1,357 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints($constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; + } else { + self::$installed = array(); + } + } + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } + + return $installed; + } +} diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE new file mode 100644 index 0000000..f27399a --- /dev/null +++ b/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php new file mode 100644 index 0000000..b26f1b1 --- /dev/null +++ b/vendor/composer/autoload_classmap.php @@ -0,0 +1,10 @@ + $vendorDir . '/composer/InstalledVersions.php', +); diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php new file mode 100644 index 0000000..eeb08c0 --- /dev/null +++ b/vendor/composer/autoload_files.php @@ -0,0 +1,11 @@ + $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', + 'c15d4a1253e33e055d05e547c61dcb71' => $vendorDir . '/smarty/smarty/src/functions.php', +); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php new file mode 100644 index 0000000..b7fc012 --- /dev/null +++ b/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($vendorDir . '/symfony/polyfill-mbstring'), + 'Smarty\\' => array($vendorDir . '/smarty/smarty/src'), +); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php new file mode 100644 index 0000000..d4f55af --- /dev/null +++ b/vendor/composer/autoload_real.php @@ -0,0 +1,80 @@ += 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInit4a7c2df53697697a1579e233cd984924::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } + + $loader->register(true); + + if ($useStaticLoader) { + $includeFiles = Composer\Autoload\ComposerStaticInit4a7c2df53697697a1579e233cd984924::$files; + } else { + $includeFiles = require __DIR__ . '/autoload_files.php'; + } + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequire4a7c2df53697697a1579e233cd984924($fileIdentifier, $file); + } + + return $loader; + } +} + +/** + * @param string $fileIdentifier + * @param string $file + * @return void + */ +function composerRequire4a7c2df53697697a1579e233cd984924($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; + } +} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php new file mode 100644 index 0000000..2774ca7 --- /dev/null +++ b/vendor/composer/autoload_static.php @@ -0,0 +1,46 @@ + __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', + 'c15d4a1253e33e055d05e547c61dcb71' => __DIR__ . '/..' . '/smarty/smarty/src/functions.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'S' => + array ( + 'Symfony\\Polyfill\\Mbstring\\' => 26, + 'Smarty\\' => 7, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Symfony\\Polyfill\\Mbstring\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', + ), + 'Smarty\\' => + array ( + 0 => __DIR__ . '/..' . '/smarty/smarty/src', + ), + ); + + public static $classMap = array ( + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit4a7c2df53697697a1579e233cd984924::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit4a7c2df53697697a1579e233cd984924::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit4a7c2df53697697a1579e233cd984924::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json new file mode 100644 index 0000000..96395e1 --- /dev/null +++ b/vendor/composer/installed.json @@ -0,0 +1,169 @@ +{ + "packages": [ + { + "name": "smarty/smarty", + "version": "v5.5.1", + "version_normalized": "5.5.1.0", + "source": { + "type": "git", + "url": "https://github.com/smarty-php/smarty.git", + "reference": "cbcd66e1de017ae3bcbf8b5fa2a34858f5e2adbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/cbcd66e1de017ae3bcbf8b5fa2a34858f5e2adbc", + "reference": "cbcd66e1de017ae3bcbf8b5fa2a34858f5e2adbc", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-mbstring": "^1.27" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^7.5", + "smarty/smarty-lexer": "^4.0.2" + }, + "time": "2025-05-19T09:29:42+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Smarty\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Monte Ohrt", + "email": "monte@ohrt.com" + }, + { + "name": "Uwe Tews", + "email": "uwe.tews@googlemail.com" + }, + { + "name": "Rodney Rehm", + "email": "rodney.rehm@medialize.de" + }, + { + "name": "Simon Wisselink", + "homepage": "https://www.iwink.nl/" + } + ], + "description": "Smarty - the compiling PHP template engine", + "homepage": "https://smarty-php.github.io/smarty/", + "keywords": [ + "templating" + ], + "support": { + "forum": "https://github.com/smarty-php/smarty/discussions", + "issues": "https://github.com/smarty-php/smarty/issues", + "source": "https://github.com/smarty-php/smarty/tree/v5.5.1" + }, + "funding": [ + { + "url": "https://github.com/wisskid", + "type": "github" + } + ], + "install-path": "../smarty/smarty" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.32.0", + "version_normalized": "1.32.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "time": "2024-12-23T08:48:59+00:00", + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-mbstring" + } + ], + "dev": true, + "dev-package-names": [] +} diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php new file mode 100644 index 0000000..528e542 --- /dev/null +++ b/vendor/composer/installed.php @@ -0,0 +1,41 @@ + array( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => 'f8d1a613c4775c1957a89399933df1926edd596f', + 'name' => 'conlite/plugin_smarty', + 'dev' => true, + ), + 'versions' => array( + 'conlite/plugin_smarty' => array( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => 'f8d1a613c4775c1957a89399933df1926edd596f', + 'dev_requirement' => false, + ), + 'smarty/smarty' => array( + 'pretty_version' => 'v5.5.1', + 'version' => '5.5.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../smarty/smarty', + 'aliases' => array(), + 'reference' => 'cbcd66e1de017ae3bcbf8b5fa2a34858f5e2adbc', + 'dev_requirement' => false, + ), + 'symfony/polyfill-mbstring' => array( + 'pretty_version' => 'v1.32.0', + 'version' => '1.32.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', + 'aliases' => array(), + 'reference' => '6d857f4d76bd4b343eac26d6b539585d2bc56493', + 'dev_requirement' => false, + ), + ), +); diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php new file mode 100644 index 0000000..adfb472 --- /dev/null +++ b/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 80000)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 8.0.0". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} diff --git a/vendor/smarty/smarty/CHANGELOG.md b/vendor/smarty/smarty/CHANGELOG.md new file mode 100644 index 0000000..6ddcd89 --- /dev/null +++ b/vendor/smarty/smarty/CHANGELOG.md @@ -0,0 +1,3759 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [5.5.1] - 2025-05-19 +- Fix missing support for loading modifiercompilers from plugin dir in BCPluginsAdapter [#1132](https://github.com/smarty-php/smarty/pull/1132) + + +## [5.5.0] - 2025-05-03 +- Support trailing comma in array [#1013](https://github.com/smarty-php/smarty/issues/1013) + + +## [5.4.5] - 2025-04-15 +- Fixed deprecation notice in StringEval in PHP8.4 [#1119](https://github.com/smarty-php/smarty/issues/1119) + + +## [5.4.4] - 2025-04-13 +- Fix syntax error occurring when registering a function plugin that ends with the string 'close' [#1122](https://github.com/smarty-php/smarty/issues/1122) +- Replace SMARTY_VERSION constant with $smarty.version in debug.tpl [#1073](https://github.com/smarty-php/smarty/issues/1073) + + +## [5.4.3] - 2024-12-23 +- Fix PHP backtraces by qualifying/replacing `call_user_func_array` calls [#1074](https://github.com/smarty-php/smarty/issues/1074) + + +## [5.4.2] - 2024-11-20 + + +- Support the deprecations introduced in PHP 8.4 and added tests for PHP 8.4 [#1043](https://github.com/smarty-php/smarty/pull/1043) + +## [5.4.1] - 2024-08-29 + + +- Enable (and fix) unit tests for Windows [#1046](https://github.com/smarty-php/smarty/pull/1046) +- Fix the use of "extends:" to define the inheritance tree on Windows [#1018](https://github.com/smarty-php/smarty/issues/1018) + +## [5.4.0] - 2024-08-14 +- Fixing forced OpCache invalidation on every template include, which is resulting in fast raising wasted OpCache memory [#1007](https://github.com/smarty-php/smarty/issues/1007) +- Improvement of auto-escaping [#1030](https://github.com/smarty-php/smarty/pull/1030) + + +## [5.3.1] - 2024-06-16 +- Fixed error when using section with nocache [#1034](https://github.com/smarty-php/smarty/issues/1034) + + +## [5.3.0] - 2024-05-30 +- Fix warning when calling hasVariable for an undefined variable [#977](https://github.com/smarty-php/smarty/issues/977) +- Added `$smarty->prependTemplateDir()` method [#1022](https://github.com/smarty-php/smarty/issues/1022) + + +## [5.2.0] - 2024-05-28 +- Fixed a code injection vulnerability in extends-tag. This addresses CVE-2024-35226. +- Added `$smarty->setCacheModifiedCheck()` setter for cache_modified_check +- Added a PSR-4 loading script to allow Smarty to be used without Composer [#1017](https://github.com/smarty-php/smarty/pull/1017) + + +## [5.1.0] - 2024-04-22 +- Prevent deprecation notices during compilation in PHP8.3 [#996](https://github.com/smarty-php/smarty/issues/996) +- Fix that getTemplateVars would return an array of objects instead of the assigned variables values [#994](https://github.com/smarty-php/smarty/issues/994) +- Fix Smarty::assign() not returning $this when called with an array as first parameter [#972](https://github.com/smarty-php/smarty/pull/972) +- Documented support for `{if $element is in $array}` syntax [#937](https://github.com/smarty-php/smarty/issues/937) +- Added support for `{if $element is not in $array}` syntax [#937](https://github.com/smarty-php/smarty/issues/937) +- Using stream variables in templates now throws a deprecation notice [#933](https://github.com/smarty-php/smarty/pull/933) +- Internal compiler classes always return a string (the internal has_code flag has been removed for simplicity) [#918](https://github.com/smarty-php/smarty/pull/918) +- Fix invalid classnames in Runtime code for foreach [#1000](https://github.com/smarty-php/smarty/issues/1000) + +## [5.0.2] - 2024-03-28 +- Fix Smarty::assign() not returning $this when called with an array as first parameter [#972](https://github.com/smarty-php/smarty/pull/972) + +## [5.0.1] - 2024-03-27 +- Fix error in Smarty\Smarty::compileAllTemplates() by including missing FilesystemIterator class [#966](https://github.com/smarty-php/smarty/issues/966) + +## [5.0.0] - 2024-03-25 +- Fixed that scoped variables would overwrite parent scope [#952](https://github.com/smarty-php/smarty/issues/952) +- Removed publicly accessible `$tpl->_var_stack` variable + +### Fixed +- Too many shorthand attributes error when using a modifier as a function with more than 3 parameters in an expression [#949](https://github.com/smarty-php/smarty/issues/949) + +### Removed +- Dropped support for undocumented `{time()}` added in v5.0.0 since we already have the documented `{$smarty.now}` + +## [5.0.0-rc3] - 2024-02-26 + +### Added +- PHP8.3 support [#925](https://github.com/smarty-php/smarty/issues/925) +- Backlink to GitHub in docs +- Explain how to do escaping and set-up auto-escaping in docs [#865](https://github.com/smarty-php/smarty/issues/865) +- Link to variable scope page in the documentation for the assign tag [#878](https://github.com/smarty-php/smarty/issues/878) +- Add support for implode, substr and json_encode as modifiers/functions in templates [#939](https://github.com/smarty-php/smarty/issues/939) +- Add template path to CompilerException to enable rich debug features [#935](https://github.com/smarty-php/smarty/issues/935) + +### Fixed +- The {debug} tag was broken in v5 [#922](https://github.com/smarty-php/smarty/issues/922) +- Documentation on `{if $x is even by $y}` syntax +- Fix incorrect compilation of expressions when escape_html=true [#930](https://github.com/smarty-php/smarty/pull/930) + +## [5.0.0-rc2] - 2023-11-11 + +### Fixed +- Registered output filters wouldn't run [#899](https://github.com/smarty-php/smarty/issues/899) +- Use of negative numbers in {math} equations [#895](https://github.com/smarty-php/smarty/issues/895) +- Do not auto-html-escape custom function results [#906](https://github.com/smarty-php/smarty/issues/906) +- Fix case-sensitive tag names [#907](https://github.com/smarty-php/smarty/issues/907) + +### Removed +- Removed `$smarty->registered_filters` array + +## [5.0.0-rc1] - 2023-08-08 + +### Added +- Added support for PHP8.2 +- Added a new way to extend Smarty functionality using `Smarty::addExtension()` or `Smarty::setExtensions()`. Please see the docs for more information. +- Custom tags can accept positional parameters, so you can write a block compiler that support this: `{trans "Jack" "dull boy"}All work and no play makes %s a %s.{/trans}` [#164](https://github.com/smarty-php/smarty/issues/164) +- Full support for ternary operator: `{$test ? $a : $b}` and `{$var ?: $value_if_falsy}` [#881](https://github.com/smarty-php/smarty/issues/881) +- Full support for null coalescing operator: `{$var ?? $value_if_null}` [#882](https://github.com/smarty-php/smarty/issues/882) + +### Changed +- All Smarty code is now in the \Smarty namespace. For simple use-cases, you only need to add + `use \Smarty\Smarty;` to your script and everything will work. If you extend Smarty or use + Smarty plug-ins, please review your code to see if they assume specific class or method names. + E.g.: `Smarty_Internal_Template` is now `\Smarty\Template\`, `SmartyException` is now `\Smarty\Exception`. +- Template variable scope bubbling has been simplified and made more consistent. + The global scope now equals the Smarty scope in order to avoid global state side effects. Please read + the documentation for more details. +- Lexers and Parsers PHP files are reliably generated from sources (.y and .plex) using the make file +- Smarty now always runs in multibyte mode, using `symfony/polyfill-mbstring` if required. Please use the + multibyte extension for optimal performance. +- Smarty no longer calls `mb_internal_encoding()` and doesn't check for deprecated `mbstring.func_overload` ini directive [#480](https://github.com/smarty-php/smarty/issues/480) +- Generated ` +{/block} +``` + +mypage.tpl (grandchild) + +```smarty +{extends file='myproject.tpl'} +{block name=title}My Page Title{/block} +{block name=head} + + +{/block} +{block name=body}My HTML Page Body goes here{/block} +``` + + +To render the above, you would use: + +```php +display('mypage.tpl'); +``` + +The resulting output is: + +```html + + + My Page Title + + + + + My HTML Page Body goes here + + +``` + +> **Note** +> +> When [compile-check](./configuring.md#disabling-compile-check) is enabled, all files +> in the inheritance tree +> are checked for modifications upon each invocation. You may want to +> disable compile-check on production servers for this reason. + +> **Note** +> +> If you have a subtemplate which is included with +> [`{include}`](../designers/language-builtin-functions/language-function-include.md) and it contains +> [`{block}`](../designers/language-builtin-functions/language-function-block.md) areas it works only if the +> [`{include}`](../designers/language-builtin-functions/language-function-include.md) itself is called from within +> a surrounding [`{block}`](../designers/language-builtin-functions/language-function-block.md). In the final +> parent template you may need a dummy +> [`{block}`](../designers/language-builtin-functions/language-function-block.md) for it. + + +## Using append and prepend +The content of [`{block}`](../designers/language-builtin-functions/language-function-block.md) tags from child +and parent templates can be merged by the `append` or `prepend` +[`{block}`](../designers/language-builtin-functions/language-function-block.md) tag option flags and +`{$smarty.block.parent}` or `{$smarty.block.child}` placeholders. + +## Extends resource type +Instead of using [`{extends}`](../designers/language-builtin-functions/language-function-extends.md) tags in the +template files you can define the inheritance tree in your PHP script by +using the [`extends:` resource](resources.md#the-extends-resource) type. + +The code below will return same result as the example above. + +```php +display('extends:layout.tpl|myproject.tpl|mypage.tpl'); +``` diff --git a/vendor/smarty/smarty/docs/api/rendering.md b/vendor/smarty/smarty/docs/api/rendering.md new file mode 100644 index 0000000..a66b612 --- /dev/null +++ b/vendor/smarty/smarty/docs/api/rendering.md @@ -0,0 +1,86 @@ +# Rendering templates + +## Fetching or rendering templates directly +As explained in [basics](basics.md), you can use `$smarty->fetch()` or `$smarty->display()` +to render a template directly. + +```php +display('homepage.tpl'); + +// or + +$output = $smarty->fetch('homepage.tpl'); +``` + +When you use `display()`, Smarty renders the template to the standard output stream. +`fetch()` returns the output instead of echoing it. + +The example above uses simple filenames to load the template. Smarty also supports +[loading templates from resources](resources.md). + +## Creating a template object +You can also create a template object which later can be prepared first, +and rendered later. This can be useful, for example if you plan to re-use several +templates. + +```php +createTemplate('index.tpl'); + +// assign a variable (available only to this template) +$tpl->assign('title', 'My Homepage!'); + +// display the template +$tpl->display(); +``` + +More on assigning variables in [using data in templates](variables/assigning.md). + + +## Testing if a template exists +You can use `templateExists()` to check whether a template exists before you attempt to use it. + +It accepts either a path to the template on the filesystem or a +resource string specifying the template. + +This example uses `$_GET['page']` to +[`{include}`](../designers/language-builtin-functions/language-function-include.md) a content template. If the +template does not exist then an error page is displayed instead. First, +the `page_container.tpl` + +```smarty + + + {$title|escape} + + + {* include middle content page *} + {include file=$content_template} + + +``` + +And the php script: + +```php +templateExists($mid_template)){ + $mid_template = 'page_not_found.tpl'; +} +$smarty->assign('content_template', $mid_template); + +$smarty->display('page_container.tpl'); +``` diff --git a/vendor/smarty/smarty/docs/api/resources.md b/vendor/smarty/smarty/docs/api/resources.md new file mode 100644 index 0000000..5ca52b1 --- /dev/null +++ b/vendor/smarty/smarty/docs/api/resources.md @@ -0,0 +1,322 @@ +# Template resources + +## The filesystem resource + +So far in our examples, we have used simple filenames or paths when loading a template. + +For example, to load a template file called `homepage.tpl`, from the filesystem, you could write: +```php +display('homepage.tpl'); +``` + +The filesystem is the default resource. Templates, however, may come +from a variety of sources. When you render a template, or +when you include a template from within another template, you supply a +resource type, followed by `:` and the appropriate path and template name. + +If a resource is not explicitly given, the default resource type is assumed. +The resource type for the filesystem is `file`, which means that the previous example +can be rewritten as follows: +```php +display('file:homepage.tpl'); +``` + +The file resource pulls templates source files from the directories +specified using `Smarty::setTemplateDir()` (see [Configuring Smarty](configuring.md)). + +`setTemplateDir` accepts a single path, but can also ben called with an array of paths. +In that case, the list of directories is traversed in the order they appear in the array. The +first template found is the one to process. + +### Templates from a specific directory + +Smarty 3.1 introduced the bracket-syntax for specifying an element from +`Smarty::setTemplateDir()`. This allows websites +employing multiple sets of templates better control over which template +to access. + +The bracket-syntax can be used as follows: +```php +setTemplateDir([ + './templates', // element: 0, index: 0 + './templates_2', // element: 1, index: 1 + '10' => 'templates_10', // element: 2, index: '10' + 'foo' => 'templates_foo', // element: 3, index: 'foo' +]); + +/* + assume the template structure + ./templates/foo.tpl + ./templates_2/foo.tpl + ./templates_2/bar.tpl + ./templates_10/foo.tpl + ./templates_10/bar.tpl + ./templates_foo/foo.tpl +*/ + +// regular access +$smarty->display('file:foo.tpl'); +// will load ./templates/foo.tpl + +// using numeric index +$smarty->display('file:[1]foo.tpl'); +// will load ./templates_2/foo.tpl + +// using numeric string index +$smarty->display('file:[10]foo.tpl'); +// will load ./templates_10/foo.tpl + +// using string index +$smarty->display('file:[foo]foo.tpl'); +// will load ./templates_foo/foo.tpl + +// using "unknown" numeric index (using element number) +$smarty->display('file:[2]foo.tpl'); +// will load ./templates_10/foo.tpl +``` + +And, from within a Smarty template: + +```smarty +{include file="file:foo.tpl"} +{* will load ./templates/foo.tpl *} + +{include file="file:[1]foo.tpl"} +{* will load ./templates_2/foo.tpl *} + +{include file="file:[foo]foo.tpl"} +{* will load ./templates_foo/foo.tpl *} +``` + +### Using absolute paths + +Templates outside the specified template directories +require the `file:` template resource type, followed by the absolute +path to the template (with leading slash). + +```php +display('file:/export/templates/index.tpl'); +$smarty->display('file:/path/to/my/templates/menu.tpl'); +```` + +And from within a Smarty template: +```smarty +{include file='file:/usr/local/share/templates/navigation.tpl'} +``` + +> **Note** +> +> With [`Security`](security.md) enabled, access to +> templates outside of the specified templates directories is +> not allowed unless you whitelist those directories. + +### Windows file paths +If you are running on Windows, file paths usually include a drive +letter (such as `C:`) at the beginning of the pathname. Be sure to use `file:` in +the path to avoid namespace conflicts and get the desired results. +```php +display('file:C:/export/templates/index.tpl'); +$smarty->display('file:F:/path/to/my/templates/menu.tpl'); +``` + +And from within Smarty template: +```smarty +{include file='file:D:/usr/local/share/templates/navigation.tpl'} +``` + +### Handling missing templates +If the file resource cannot find the requested template, it will check if there is +a default template handler to call. By default, there is none, and Smarty will return an error, +but you can register a default template handler calling `Smarty::registerDefaultTemplateHandler` +with any [callable](https://www.php.net/manual/en/language.types.callable.php). + +```php +registerDefaultTemplateHandler([$this, 'handleMissingTemplate']); + +// ... + +public function handleMissingTemplate($type, $name, &$content, &$modified, Smarty $smarty) { + if (/* ... */) { + // return corrected filepath + return "/tmp/some/foobar.tpl"; + } elseif (/* ... */) { + // return a template directly + $content = "the template source"; + $modified = time(); + return true; + } else { + // tell smarty that we failed + return false; + } +} + +``` + +## The string and eval resources + +Smarty can render templates from a string by using the `string:` or +`eval:` resource. + +- The `string:` resource behaves much the same as a template file. The + template source is compiled from a string and stores the compiled + template code for later reuse. Each unique template string will + create a new compiled template file. If your template strings are + accessed frequently, this is a good choice. If you have frequently + changing template strings (or strings with low reuse value), the + `eval:` resource may be a better choice, as it doesn\'t save + compiled templates to disk. + +- The `eval:` resource evaluates the template source every time a page + is rendered. This is a good choice for strings with low reuse value. + If the same string is accessed frequently, the `string:` resource + may be a better choice. + +> **Note** +> +> With a `string:` resource type, each unique string generates a +> compiled file. Smarty cannot detect a string that has changed, and +> therefore will generate a new compiled file for each unique string. It +> is important to choose the correct resource so that you do not fill +> your disk space with wasted compiled strings. + +```php +assign('foo', 'value'); +$template_string = 'display {$foo} here'; +$smarty->display('string:' . $template_string); // compiles for later reuse +$smarty->display('eval:' . $template_string); // compiles every time +``` +From within a Smarty template: +```smarty +{include file="string:$template_string"} {* compiles for later reuse *} +{include file="eval:$template_string"} {* compiles every time *} +``` + +Both `string:` and `eval:` resources may be encoded with +[`urlencode()`](https://www.php.net/urlencode) or +[`base64_encode()`](https://www.php.net/urlencode). This is not necessary +for the usual use of `string:` and `eval:`, but is required when using +either of them in conjunction with the [`extends resource`](#the-extends-resource). + +```php + assign('foo','value'); + $template_string_urlencode = urlencode('display {$foo} here'); + $template_string_base64 = base64_encode('display {$foo} here'); + $smarty->display('eval:urlencode:' . $template_string_urlencode); // will decode string using urldecode() + $smarty->display('eval:base64:' . $template_string_base64); // will decode string using base64_decode() +``` + +From within a Smarty template: +```smarty + {include file="string:urlencode:$template_string_urlencode"} {* will decode string using urldecode() *} + {include file="eval:base64:$template_string_base64"} {* will decode string using base64_decode() *} +``` + +## The extends resource + +The `extends:` resource is used to define child/parent relationships. For details see section of +[Template inheritance](inheritance.md). + +> **Note** +> +> Using the extends resource is usually not necessary. If you have a choice, it is normally more flexible and +> intuitive to handle inheritance chains from within the templates using the [{extends} tag](inheritance.md). + +When `string:` and `eval:` templates are used, make sure they are properly url or base64 encoded. + +The templates within an inheritance chain are not compiled separately. Only a single compiled template will be generated. +(If an `eval:` resource is found within an inheritance chain, its "don't save a compile file" property is superseded by +the `extends:` resource.) + +Example: +```php +display('extends:parent.tpl|child.tpl|grandchild.tpl'); + +// inheritance from multiple template sources +$smarty->display('extends:db:parent.tpl|file:child.tpl|grandchild.tpl|eval:{block name="fooBazVar_"}hello world{/block}'); +``` + +## The stream resource + +Smarty allow you to use [PHP streams](https://www.php.net/manual/en/function.stream-wrapper-register.php) +as a template resource. Smarty will first look for a registered template resource. If nothing is +found, it will check if a PHP stream is available. If a stream is available, Smarty will use it +to fetch the template. + +For example, +```php +display('myresource:bar.tpl'); +``` + +Or, from within a template: +```smarty + {include file="myresource:bar.tpl"} +``` + +## Adding your own resource type +You can create a class that extends `Smarty\Resource\CustomPlugin` to add your own resource type, +for example to load template from a database. + +For example: +```php +registerResource('helloworld', new HelloWorldResource()); +``` + +If a Resource's templates should not be run through the Smarty +compiler, the Custom Resource may extend `\Smarty\Resource\UncompiledPlugin`. +The Resource Handler must then implement the function +`renderUncompiled(\Smarty\Template $_template)`. `$_template` is +a reference to the current template and contains all assigned variables +which the implementor can access via +`$_template->getSmarty()->getTemplateVars()`. These Resources simply echo +their rendered content to the output stream. The rendered output will be +output-cached if the Smarty instance was configured accordingly. See +`src/Resource/PhpPlugin.php` for an example. + +If the Resource's compiled templates should not be cached on disk, the +Custom Resource may extend `\Smarty\Resource\RecompiledPlugin`. These Resources +are compiled every time they are accessed. This may be an expensive +overhead. See `src/Resource/StringEval.php` for an +example. + +## Changing the default resource type +The default resource type is `file`. If you want to change it, use `Smarty::setDefaultResourceType`. + +The following example will change the default resource type to `mysql`: +```php +setDefaultResourceType('mysql'); +``` diff --git a/vendor/smarty/smarty/docs/api/security.md b/vendor/smarty/smarty/docs/api/security.md new file mode 100644 index 0000000..07120af --- /dev/null +++ b/vendor/smarty/smarty/docs/api/security.md @@ -0,0 +1,119 @@ +# Security + +Security is good for situations when you have untrusted parties editing +the templates, and you want to reduce the risk of system +security compromises through the template language. + +The settings of the security policy are defined by overriding public properties of an +instance of the \Smarty\Security class. These are the possible settings: + +- `$secure_dir` is an array of template directories that are + considered secure. A directory configured using `$smarty->setTemplateDir()` is + considered secure implicitly. The default is an empty array. +- `$trusted_uri` is an array of regular expressions matching URIs that + are considered trusted. This security directive is used by + [`{fetch}`](../designers/language-custom-functions/language-function-fetch.md) and + [`{html_image}`](../designers/language-custom-functions/language-function-html-image.md). URIs passed to + these functions are reduced to `{$PROTOCOL}://{$HOSTNAME}` to allow + simple regular expressions (without having to deal with edge cases + like authentication-tokens). + + The expression `'#https?://.*smarty.net$#i'` would allow accessing + the following URIs: + + - `http://smarty.net/foo` + - `http://smarty.net/foo` + - `http://www.smarty.net/foo` + - `http://smarty.net/foo` + - `https://foo.bar.www.smarty.net/foo/bla?blubb=1` + + but deny access to these URIs: + + - `http://smarty.com/foo` (not matching top-level domain \"com\") + - `ftp://www.smarty.net/foo` (not matching protocol \"ftp\") + - `http://www.smarty.net.otherdomain.com/foo` (not matching end of + domain \"smarty.net\") + +- `$static_classes` is an array of classes that are considered + trusted. The default is an empty array which allows access to all + static classes. To disable access to all static classes set + $static_classes = null. + +- `$streams` is an array of streams that are considered trusted and + can be used from within template. To disable access to all streams + set $streams = null. An empty array ( $streams = [] ) will + allow all streams. The default is array('file'). + +- `$allowed_modifiers` is an array of (registered / autoloaded) + modifiers that should be accessible to the template. If this array + is non-empty, only the herein listed modifiers may be used. This is + a whitelist. + +- `$disabled_modifiers` is an array of (registered / autoloaded) + modifiers that may not be accessible to the template. + +- `$allowed_tags` is a boolean flag which controls if constants can + function-, block and filter plugins that should be accessible to the + template. If this array is non-empty, only the herein listed + modifiers may be used. This is a whitelist. + +- `$disabled_tags` is an array of (registered / autoloaded) function-, + block and filter plugins that may not be accessible to the template. + +- `$allow_constants` is a boolean flag which controls if constants can + be accessed by the template. The default is "true". + +- `$allow_super_globals` is a boolean flag which controls if the PHP + super globals can be accessed by the template. The default is + "true". + +If security is enabled, no private methods, functions or properties of +static classes or assigned objects can be accessed (beginning with +'_') by the template. + +To customize the security policy settings you can extend the +\Smarty\Security class or create an instance of it. + +```php +enableSecurity('My_Security_Policy'); +``` + +```php +allow_constants = false; + +$smarty->enableSecurity($my_security_policy); +``` + +```php +enableSecurity(); +``` + +> **Note** +> +> Most security policy settings are only checked when the template gets +> compiled. For that reason you should delete all cached and compiled +> template files when you change your security settings. diff --git a/vendor/smarty/smarty/docs/api/variables/assigning.md b/vendor/smarty/smarty/docs/api/variables/assigning.md new file mode 100644 index 0000000..40a02c1 --- /dev/null +++ b/vendor/smarty/smarty/docs/api/variables/assigning.md @@ -0,0 +1,139 @@ +# Assigning variables + +Templates start to become really useful once you know how to use variables. + +## Basic assigning +Let's revisit the example from the [basics section](../basics.md). The following script assigns a value to +the 'companyName' variable and renders the template: + +```php +assign('companyName', 'AC & ME Corp.'); + +$smarty->display('footer.tpl'); +``` + +footer.tpl: +```smarty +Copyright {$companyName|escape} +``` + +Smarty will apply the [escape modifier](../../designers/language-modifiers/language-modifier-escape.md) +to the value assigned to the variable +`companyName` and replace `{$companyName|escape}` with the result. + +```html +Copyright AC & ME Corp. +``` + +Using `$smarty->assign()` is the most common way of assigning data to templates, but there are several other methods. + +## Appending data to an existing variable +Using `append()`, you can add data to an existing variable, usually an array. + +If you append to a string value, it is converted to an array value and +then appended to. You can explicitly pass name/value pairs, or +associative arrays containing the name/value pairs. If you pass the +optional third parameter of TRUE, the value will be merged with the +current array instead of appended. + +Examples: + +```php +append('foo', 'Fred'); +// After this line, foo will now be seen as an array in the template +$smarty->append('foo', 'Albert'); + +$array = [1 => 'one', 2 => 'two']; +$smarty->append('X', $array); +$array2 = [3 => 'three', 4 => 'four']; +// The following line will add a second element to the X array +$smarty->append('X', $array2); + +// passing an associative array +$smarty->append(['city' => 'Lincoln', 'state' => 'Nebraska']); +``` + +## Assigning to template objects +When you use a template objects, as explained in [rendering a template](../rendering.md#creating-a-template-object), +you can assign data to the template objects directly instead of assigning it to Smarty. This way, you can use different +sets of data for different templates. + +For example: +```php +createTemplate('blue.tpl'); +$tplBlue->assign('name', 'The one'); +$tplBlue->display(); + +$tplRed = $smarty->createTemplate('red.tpl'); +$tplRed->assign('name', 'Neo'); +$tplRed->display(); +``` + +## Using data objects +For more complex use cases, Smarty supports the concept of data objects. +Data objects are containers to hold data. Data objects can be attached to templates when creating them. +This allows for fine-grained re-use of data. + +For example: +```php +createData(); + +// assign variable to the data object +$data->assign('name', 'Neo'); + +// create template object which will use variables from the data object +$tpl = $smarty->createTemplate('index.tpl', $data); + +// display the template +$tpl->display(); +``` + +## Clearing assigned data +When re-using templates, you may need to clear data assigned in a previous run. Use `clearAllAssign()` to +clear the values of all assigned variables on data objects, template objects or the Smarty object. + +Examples: +```php +assign('Name', 'Fred'); +// ... +$smarty->clearAllAssign(); + +// using a data object +$data = $smarty->createData(); +$data->assign('name', 'Neo'); +// ... +$data->clearAllAssign(); + +// using a template +$tplBlue = $smarty->createTemplate('blue.tpl'); +$tplBlue->assign('name', 'The one'); +// ... +$tplBlue->clearAllAssign(); +``` + +Note that there it's only useful to clear assigned data if you: + +1. repeatedly re-use templates, and +2. the variables used may change on each repetition + +If your script simply runs once and then ends, or you always assign the same variables, clearing assigned data +is of no use. \ No newline at end of file diff --git a/vendor/smarty/smarty/docs/api/variables/config-files.md b/vendor/smarty/smarty/docs/api/variables/config-files.md new file mode 100644 index 0000000..107353b --- /dev/null +++ b/vendor/smarty/smarty/docs/api/variables/config-files.md @@ -0,0 +1,88 @@ +# Loading data from config files + +Instead of [assigning data to templates from PHP](assigning.md), you can also +use a config file. + +## Example config file +Config files are best suited to manage template settings +from one file. One example is a multi-language application. +Instead of writing multiple templates to support different languages, +you can write a single template file and load your language dependent strings +from config files. + +Example `lang.en.ini`: +```ini +# global variables +pageTitle = "Main Menu" + +[Customer] +pageTitle = "Customer Info" + +[Login] +pageTitle = "Login" +focus = "username" +Intro = """This is a value that spans more + than one line. you must enclose + it in triple quotes.""" + +``` + +Values of [config file variables](../../designers/language-variables/language-config-variables.md) can be in +quotes, but not necessary. You can use either single or double quotes. +If you have a value that spans more than one line, enclose the entire +value with triple quotes \("""\). You can put comments into config +files by any syntax that is not a valid config file syntax. We recommend +using a `#` (hash) at the beginning of the line. + +The example config file above has two sections. Section names are +enclosed in \[brackets\]. Section names can be arbitrary strings not +containing `[` or `]` symbols. The variable at the top is a global +variable. Global variables are always +loaded from the config file. If a particular section is loaded, then the +global variables and the variables from that section are also loaded. If +a variable exists both as a global and in a section, the section +variable is used. + +## Loading a config file + +Config files are loaded into templates with the built-in template +function [`{config_load}`](../../designers/language-builtin-functions/language-function-config-load.md) or by calling +`configLoad()` from PHP: + +```php +configLoad('lang.en.ini'); +``` + +Load a specific section with: + +```php +configLoad('lang.en.ini', 'Customer'); +``` + +Note that the global section will always be loaded. + +## Retrieving config variables in PHP + + +## Loading from a resource +Config files (or resources) are loaded by the same resource facilities +as templates. That means that a config file can also be loaded from a db. See [resources](../resources.md) +for more information. + +## Config overwrite +If you name two variables the same within a section, +the last one will be used unless you call: +```php +setConfigOverwrite(false); +``` +When config overwrite is disabled, Smarty will create arrays of config file variables when it encounters +multiple entries with the same name. + +See also [`{config_load}`](../../designers/language-builtin-functions/language-function-config-load.md), +[`$default_config_handler_func`](../../programmers/api-variables/variable-default-config-handler-func.md), +[`getConfigVars()`](../../programmers/api-functions/api-get-config-vars.md), +[`clearConfig()`](../../programmers/api-functions/api-clear-config.md) and +[`configLoad()`](../../programmers/api-functions/api-config-load.md) diff --git a/vendor/smarty/smarty/docs/api/variables/objects.md b/vendor/smarty/smarty/docs/api/variables/objects.md new file mode 100644 index 0000000..9befcb1 --- /dev/null +++ b/vendor/smarty/smarty/docs/api/variables/objects.md @@ -0,0 +1,106 @@ +# Objects + +Smarty allows access to PHP [objects](https://www.php.net/object) through +the templates. + +> **Note** +> +> When you assign/register objects to templates, be sure that all +> properties and methods accessed from the template are for presentation +> purposes only. It is very easy to inject application logic through +> objects, and this leads to poor designs that are difficult to manage. +> See the Best Practices section of the Smarty website. + +There are two ways to access them. + +## Assign the object +You can assign objects to a template and access them much like any other assigned variable. + +Example: +```php +assign('myobj', new My_Object()); + +$smarty->display('index.tpl'); +``` + +And here's how to access your object in `index.tpl`: + +```smarty +{$myobj->meth1('foo',$bar)} +``` + + + +## Register the object +Registerd objects use a different template syntax. Also, a registered object +can be restricted to certain methods or +properties. However, **a registered object cannot be looped over or +assigned in arrays of objects**, etc. + +If security is enabled, no private methods or functions can be accessed +(beginning with '_'). If a method and property of the same name exist, +the method will be used. + +You can restrict the methods and properties that can be accessed by +listing them in an array as the third registration parameter. + +By default, parameters passed to objects through the templates are +passed the same way [custom tags](../../designers/language-custom-functions/index.md) get +them. An associative array is passed as the first parameter, and the +smarty object as the second. If you want the parameters passed one at a +time for each argument like traditional object parameter passing, set +the fourth registration parameter to FALSE. + +The optional fifth parameter has only effect with `format` being TRUE +and contains a list of methods that should be treated as blocks. That +means these methods have a closing tag in the template +(`{foobar->meth2}...{/foobar->meth2}`) and the parameters to the methods +have the same synopsis as the parameters for +[`block tags`](../extending/block-tags.md): They get the four +parameters `$params`, `$content`, `$smarty` and `&$repeat` and they also +behave like block tags. + +```php +registerObject('foobar', $myobj); + +// if we want to restrict access to certain methods or properties, list them +$smarty->registerObject('foobar', $myobj, array('meth1','meth2','prop1')); + +// if you want to use the traditional object parameter format, pass a boolean of false +$smarty->registerObject('foobar', $myobj, null, false); + +$smarty->display('index.tpl'); +``` + +And here's how to access your objects in `index.tpl`: + +```smarty +{* access our registered object *} +{foobar->meth1 p1='foo' p2=$bar} + +{* you can also assign the output *} +{foobar->meth1 p1='foo' p2=$bar assign='output'} +the output was {$output} +``` diff --git a/vendor/smarty/smarty/docs/api/variables/static-class-methods.md b/vendor/smarty/smarty/docs/api/variables/static-class-methods.md new file mode 100644 index 0000000..fd3fea4 --- /dev/null +++ b/vendor/smarty/smarty/docs/api/variables/static-class-methods.md @@ -0,0 +1,39 @@ +# Static Classes + +You can directly access static classes. The syntax is roughly the same as in +PHP. + +> **Note** +> +> Direct access to PHP classes is not recommended. This ties the +> underlying application code structure directly to the presentation, +> and also complicates template syntax. It is recommended to register +> plugins which insulate templates from PHP classes/objects. Use at your +> own discretion. + +## Examples + +**class constant BAR** +```smarty +{assign var=foo value=myclass::BAR} +``` + +**method result** +```smarty +{assign var=foo value=myclass::method()} +``` + +**method chaining** +```smarty +{assign var=foo value=myclass::method1()->method2} +``` + +**property bar of class myclass** +```smarty +{assign var=foo value=myclass::$bar} +``` + +**using Smarty variable bar as class name** +```smarty +{assign var=foo value=$bar::method} +``` diff --git a/vendor/smarty/smarty/docs/api/variables/streams.md b/vendor/smarty/smarty/docs/api/variables/streams.md new file mode 100644 index 0000000..c872cf8 --- /dev/null +++ b/vendor/smarty/smarty/docs/api/variables/streams.md @@ -0,0 +1,16 @@ +# Streams + +You can also use streams to call variables. *{$foo:bar}* will use the +*foo://bar* stream to get the template variable. + +Using a PHP stream for a template variable resource from within a +template. + +```smarty +{$foo:bar} +``` + +NB. Support for using streams to call variables is deprecated since Smarty v5.1 and will be removed +in a future version. + +See also [`Template Resources`](../resources.md) diff --git a/vendor/smarty/smarty/docs/appendixes/tips.md b/vendor/smarty/smarty/docs/appendixes/tips.md new file mode 100644 index 0000000..e4e38d4 --- /dev/null +++ b/vendor/smarty/smarty/docs/appendixes/tips.md @@ -0,0 +1,273 @@ +# Tips & Tricks + +## Blank Variable Handling + +There may be times when you want to print a default value for an empty +variable instead of printing nothing, such as printing ` ` so that +html table backgrounds work properly. Many would use an +[`{if}`](../designers/language-builtin-functions/language-function-if.md) statement to handle this, but there is a +shorthand way with Smarty, using the +[`default`](../designers/language-modifiers/language-modifier-default.md) variable modifier. + +> **Note** +> +> "Undefined variable" errors will show an E\_NOTICE if not disabled in +> PHP's [`error_reporting()`](https://www.php.net/error_reporting) level or +> Smarty's [`$error_reporting`](../programmers/api-variables/variable-error-reporting.md) property and +> a variable had not been assigned to Smarty. + +```smarty + + {* the long way *} + {if $title eq ''} +   + {else} + {$title} + {/if} + + {* the short way *} + {$title|default:' '} + +``` + +See also [`default`](../designers/language-modifiers/language-modifier-default.md) modifier and [default +variable handling](#default-variable-handling). + +## Default Variable Handling + +If a variable is used frequently throughout your templates, applying the +[`default`](../designers/language-modifiers/language-modifier-default.md) modifier every time it is +mentioned can get a bit ugly. You can remedy this by assigning the +variable its default value with the +[`{assign}`](../designers/language-builtin-functions/language-function-assign.md) function. + + + {* do this somewhere at the top of your template *} + {assign var='title' value=$title|default:'no title'} + + {* if $title was empty, it now contains the value "no title" when you use it *} + {$title} + + + +See also [`default`](../designers/language-modifiers/language-modifier-default.md) modifier and [blank +variable handling](#blank-variable-handling). + +## Passing variable title to header template + +When the majority of your templates use the same headers and footers, it +is common to split those out into their own templates and +[`{include}`](../designers/language-builtin-functions/language-function-include.md) them. But what if the header +needs to have a different title, depending on what page you are coming +from? You can pass the title to the header as an +[attribute](../designers/language-basic-syntax/language-syntax-attributes.md) when it is included. + +`mainpage.tpl` - When the main page is drawn, the title of "Main Page" +is passed to the `header.tpl`, and will subsequently be used as the +title. + +```smarty + +{include file='header.tpl' title='Main Page'} +{* template body goes here *} +{include file='footer.tpl'} + +``` + +`archives.tpl` - When the archives page is drawn, the title will be +"Archives". Notice in the archive example, we are using a variable from +the `archives_page.conf` file instead of a hard coded variable. + +```smarty + +{config_load file='archive_page.conf'} + +{include file='header.tpl' title=#archivePageTitle#} +{* template body goes here *} +{include file='footer.tpl'} + +``` + + +`header.tpl` - Notice that "Smarty News" is printed if the `$title` +variable is not set, using the [`default`](../designers/language-modifiers/language-modifier-default.md) +variable modifier. + +```smarty + + + + {$title|default:'Smarty News'} + + + +``` + + +`footer.tpl` + +```smarty + + + + +``` + + +## Dates + +As a rule of thumb, always pass dates to Smarty as +[timestamps](https://www.php.net/time). This allows template designers to +use the [`date_format`](../designers/language-modifiers/language-modifier-date-format.md) modifier for +full control over date formatting, and also makes it easy to compare +dates if necessary. + +```smarty +{$startDate|date_format} +``` + + +This will output: + +``` +Jan 4, 2009 +``` + +```smarty + +{$startDate|date_format:"%Y/%m/%d"} + +``` + + +This will output: + +``` +2009/01/04 +``` + +Dates can be compared in the template by timestamps with: + +```smarty + +{if $order_date < $invoice_date} + ...do something.. +{/if} + +``` + +When using [`{html_select_date}`](../designers/language-custom-functions/language-function-html-select-date.md) +in a template, the programmer will most likely want to convert the +output from the form back into timestamp format. Here is a function to +help you with that. + +```php + +assign($params['assign'], $ticker_info); +} + +``` + +`index.tpl` + +```smarty + +{load_ticker symbol='SMARTY' assign='ticker'} + +Stock Name: {$ticker.name} Stock Price: {$ticker.price} + +``` + +See also: [`{include}`](../designers/language-builtin-functions/language-function-include.md). + +## Obfuscating E-mail Addresses + +Do you ever wonder how your email address gets on so many spam mailing +lists? One way spammers collect email addresses is from web pages. To +help combat this problem, you can make your email address show up in +scrambled javascript in the HTML source, yet it it will look and work +correctly in the browser. This is done with the +[`{mailto}`](../designers/language-custom-functions/language-function-mailto.md) plugin. + +```smarty + +
Send inquiries to +{mailto address=$EmailAddress encode='javascript' subject='Hello'} +
+ +``` + +> **Note** +> +> This method isn\'t 100% foolproof. A spammer could conceivably program +> his e-mail collector to decode these values, but not likely\.... +> hopefully..yet \... wheres that quantum computer :-?. + +See also [`escape`](../designers/language-modifiers/language-modifier-escape.md) modifier and +[`{mailto}`](../designers/language-custom-functions/language-function-mailto.md). diff --git a/vendor/smarty/smarty/docs/appendixes/troubleshooting.md b/vendor/smarty/smarty/docs/appendixes/troubleshooting.md new file mode 100644 index 0000000..8364534 --- /dev/null +++ b/vendor/smarty/smarty/docs/appendixes/troubleshooting.md @@ -0,0 +1,104 @@ +# Troubleshooting + +## Smarty/PHP errors + +Smarty can catch many errors such as missing tag attributes or malformed +variable names. If this happens, you will see an error similar to the +following: + +``` +Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah' + in /path/to/smarty/Smarty.class.php on line 1041 + +Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name + in /path/to/smarty/Smarty.class.php on line 1041 +``` + + +Smarty shows you the template name, the line number and the error. After +that, the error consists of the actual line number in the Smarty class +that the error occurred. + +There are certain errors that Smarty cannot catch, such as missing close +tags. These types of errors usually end up in PHP compile-time parsing +errors. + +`Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75` + +When you encounter a PHP parsing error, the error line number will +correspond to the compiled PHP script, NOT the template itself. Usually +you can look at the template and spot the syntax error. Here are some +common things to look for: missing close tags for +[`{if}{/if}`](../designers/language-builtin-functions/language-function-if.md) or +[`{section}{/section}`](../designers/language-builtin-functions/language-function-section.md), +or syntax of logic within an `{if}` tag. If you can\'t find the error, you might have to +open the compiled PHP file and go to the line number to figure out where +the corresponding error is in the template. + +``` +Warning: Smarty error: unable to read resource: "index.tpl" in... +``` +or +``` +Warning: Smarty error: unable to read resource: "site.conf" in... +``` + +- The [`$template_dir`](../programmers/api-variables/variable-template-dir.md) is incorrect, doesn't + exist or the file `index.tpl` is not in the `templates/` directory + +- A [`{config_load}`](../designers/language-builtin-functions/language-function-config-load.md) function is + within a template (or [`configLoad()`](../programmers/api-functions/api-config-load.md) has been + called) and either [`$config_dir`](../programmers/api-variables/variable-config-dir.md) is + incorrect, does not exist or `site.conf` is not in the directory. + +``` +Fatal error: Smarty error: the $compile_dir 'templates_c' does not exist, +or is not a directory... +``` + +- Either the [`$compile_dir`](../programmers/api-variables/variable-compile-dir.md)is incorrectly + set, the directory does not exist, or `templates_c` is a file and + not a directory. + +``` +Fatal error: Smarty error: unable to write to $compile_dir '.... +``` + + +- The [`$compile_dir`](../programmers/api-variables/variable-compile-dir.md) is not writable by the + web server. See the bottom of the [installing + smarty](../getting-started.md#installation) page for more about permissions. + +``` +Fatal error: Smarty error: the $cache_dir 'cache' does not exist, +or is not a directory. in /.. +``` + +- This means that [`$caching`](../programmers/api-variables/variable-caching.md) is enabled and + either; the [`$cache_dir`](../programmers/api-variables/variable-cache-dir.md) is incorrectly set, + the directory does not exist, or `cache/` is a file and not a + directory. + +``` +Fatal error: Smarty error: unable to write to $cache_dir '/... +``` + +- This means that [`$caching`](../programmers/api-variables/variable-caching.md) is enabled and the + [`$cache_dir`](../programmers/api-variables/variable-cache-dir.md) is not writable by the web + server. See the bottom of the [installing + smarty](../getting-started.md#installation) page for permissions. + +``` +Warning: filemtime(): stat failed for /path/to/smarty/cache/3ab50a623e65185c49bf17c63c90cc56070ea85c.one.tpl.php +in /path/to/smarty/libs/sysplugins/smarty_resource.php +``` + +- This means that your application registered a custom error handler + (using [set_error_handler()](https://www.php.net/set_error_handler)) + which is not respecting the given `$errno` as it should. If, for + whatever reason, this is the desired behaviour of your custom error + handler, please call + [`muteExpectedErrors()`](../programmers/api-functions/api-mute-expected-errors.md) after you've + registered your custom error handler. + +See also [debugging](../designers/chapter-debugging-console.md). diff --git a/vendor/smarty/smarty/docs/designers/chapter-debugging-console.md b/vendor/smarty/smarty/docs/designers/chapter-debugging-console.md new file mode 100644 index 0000000..50acd19 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/chapter-debugging-console.md @@ -0,0 +1,39 @@ +# Debugging Console + +There is a debugging console included with Smarty. The console informs +you of all the [included](./language-builtin-functions/language-function-include.md) templates, +[assigned](../programmers/api-functions/api-assign.md) variables and +[config](./language-variables/language-config-variables.md) file variables for the current +invocation of the template. A template file named `debug.tpl` is +included with the distribution of Smarty which controls the formatting +of the console. + +Set [`$debugging`](../programmers/api-variables/variable-debugging.md) to TRUE in Smarty, and if needed +set [`$debug_tpl`](../programmers/api-variables/variable-debug-template.md) to the template resource +path to `debug.tpl`. When you load the page, a Javascript console window will pop +up and give you the names of all the included templates and assigned +variables for the current page. + +To see the available variables for a particular template, see the +[`{debug}`](./language-builtin-functions/language-function-debug.md) template function. To disable the +debugging console, set [`$debugging`](../programmers/api-variables/variable-debugging.md) to FALSE. You +can also temporarily turn on the debugging console by putting +`SMARTY_DEBUG` in the URL if you enable this option with +[`$debugging_ctrl`](../programmers/api-variables/variable-debugging-ctrl.md). + +> **Note** +> +> The debugging console does not work when you use the +> [`fetch()`](../programmers/api-functions/api-fetch.md) API, only when using +> [`display()`](../programmers/api-functions/api-display.md). It is a set of javascript statements +> added to the very bottom of the generated template. If you do not like +> javascript, you can edit the `debug.tpl` template to format the output +> however you like. Debug data is not cached and `debug.tpl` info is not +> included in the output of the debug console. + +> **Note** +> +> The load times of each template and config file are in seconds, or +> fractions thereof. + +See also [troubleshooting](../appendixes/troubleshooting.md). diff --git a/vendor/smarty/smarty/docs/designers/config-files.md b/vendor/smarty/smarty/docs/designers/config-files.md new file mode 100644 index 0000000..1e1db2d --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/config-files.md @@ -0,0 +1,74 @@ +# Config Files + +Config files are handy for designers to manage global template variables +from one file. One example is template colors. Normally if you wanted to +change the color scheme of an application, you would have to go through +each and every template file and change the colors. With a config file, +the colors can be kept in one place, and only one file needs to be +updated. + +```ini +# global variables +pageTitle = "Main Menu" +bodyBgColor = #000000 +tableBgColor = #000000 +rowBgColor = #00ff00 + +[Customer] +pageTitle = "Customer Info" + +[Login] +pageTitle = "Login" +focus = "username" +Intro = """This is a value that spans more + than one line. you must enclose + it in triple quotes.""" + +# hidden section +[.Database] +host=my.example.com +db=ADDRESSBOOK +user=php-user +pass=foobar +``` + + +Values of [config file variables](./language-variables/language-config-variables.md) can be in +quotes, but not necessary. You can use either single or double quotes. +If you have a value that spans more than one line, enclose the entire +value with triple quotes \("""\). You can put comments into config +files by any syntax that is not a valid config file syntax. We recommend +using a `#` (hash) at the beginning of the line. + +The example config file above has two sections. Section names are +enclosed in \[brackets\]. Section names can be arbitrary strings not +containing `[` or `]` symbols. The four variables at the top are global +variables, or variables not within a section. These variables are always +loaded from the config file. If a particular section is loaded, then the +global variables and the variables from that section are also loaded. If +a variable exists both as a global and in a section, the section +variable is used. If you name two variables the same within a section, +the last one will be used unless +[`$config_overwrite`](../programmers/api-variables/variable-config-overwrite.md) is disabled. + +Config files are loaded into templates with the built-in template +function [`{config_load}`](./language-builtin-functions/language-function-config-load.md) or the API +[`configLoad()`](../programmers/api-functions/api-config-load.md) function. + +You can hide variables or entire sections by prepending the variable +name or section name with a period(.) eg `[.hidden]`. This is useful if +your application reads the config files and gets sensitive data from +them that the template engine does not need. If you have third parties +doing template editing, you can be certain that they cannot read +sensitive data from the config file by loading it into the template. + +Config files (or resources) are loaded by the same resource facilities +as templates. That means that a config file can also be loaded from a db +`$smarty->configLoad("db:my.conf")`. + +See also [`{config_load}`](./language-builtin-functions/language-function-config-load.md), +[`$config_overwrite`](../programmers/api-variables/variable-config-overwrite.md), +[`$default_config_handler_func`](../programmers/api-variables/variable-default-config-handler-func.md), +[`getConfigVars()`](../programmers/api-functions/api-get-config-vars.md), +[`clearConfig()`](../programmers/api-functions/api-clear-config.md) and +[`configLoad()`](../programmers/api-functions/api-config-load.md) diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/index.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/index.md new file mode 100644 index 0000000..e054d14 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/index.md @@ -0,0 +1,33 @@ +# Basic Syntax + +A simple Smarty template could look like this: +```smarty +

{$title|escape}

+
    + {foreach $cities as $city} +
  • {$city.name|escape} ({$city.population})
  • + {foreachelse} +
  • no cities found
  • + {/foreach} +
+``` + +All Smarty template tags are enclosed within delimiters. By default +these are `{` and `}`, but they can be +[changed](../../designers/language-basic-syntax/language-escaping.md). + +For the examples in this manual, we will assume that you are using the +default delimiters. In Smarty, all content outside of delimiters is +displayed as static content, or unchanged. When Smarty encounters +template tags, it attempts to interpret them, and displays the +appropriate output in their place. + +The basic components of the Smarty syntax are: + +- [Comments](language-syntax-comments.md) +- [Variables](language-syntax-variables.md) +- [Operators](language-syntax-operators.md) +- [Tags](language-syntax-tags.md) +- [Attributes](language-syntax-attributes.md) +- [Quotes](language-syntax-quotes.md) +- [Escaping](language-escaping.md) diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md new file mode 100644 index 0000000..9132b8c --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md @@ -0,0 +1,78 @@ +# Escaping Smarty parsing + +It is sometimes desirable or even necessary to have Smarty ignore +sections it would otherwise parse. A classic example is embedding +Javascript or CSS code in a template. The problem arises as those +languages use the { and } characters which are also the default +[delimiters](../language-builtin-functions/language-function-ldelim.md) for Smarty. + +> **Note** +> +> A good practice for avoiding escapement altogether is by separating +> your Javascript/CSS into their own files and use standard HTML methods +> to access them. This will also take advantage of browser script +> caching. When you need to embed Smarty variables/functions into your +> Javascript/CSS, then the following applies. + +In Smarty templates, the { and } braces will be ignored so long as they +are surrounded by white space. This behavior can be disabled by setting +the Smarty class variable [`$auto_literal`](../../programmers/api-variables/variable-auto-literal.md) to +false. + +## Examples + +```smarty + +``` + +[`{literal}..{/literal}`](../language-builtin-functions/language-function-literal.md) blocks are used +for escaping blocks of template logic. You can also escape the braces +individually with +[`{ldelim}`, `{rdelim}`](../language-builtin-functions/language-function-ldelim.md) tags or +[`{$smarty.ldelim}`,`{$smarty.rdelim}`](../language-variables/language-variables-smarty.md#smartyldelim-smartyrdelim-languagevariablessmartyldelim) +variables. + +Smarty's default delimiters { and } cleanly represent presentational +content. However, if another set of delimiters suit your needs better, +you can change them with Smarty's +`setLeftDelimiter()` and `setRightDelimiter()` methods. + +> **Note** +> +> Changing delimiters affects ALL template syntax and escapement. Be +> sure to clear out cache and compiled files if you decide to change +> them. + +```php +setLeftDelimiter(''); + +$smarty->assign('foo', 'bar'); +$smarty->assign('name', 'Albert'); +$smarty->display('example.tpl'); +``` + +Where the template is: + +```smarty +Welcome to Smarty + +``` diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md new file mode 100644 index 0000000..e3c7d58 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md @@ -0,0 +1,49 @@ +# Attributes + +Most of the [tags](./language-syntax-tags.md) take attributes that +specify or modify their behavior. Attributes to Smarty functions are +much like HTML attributes. Static values don't have to be enclosed in +quotes, but it is required for literal strings. Variables with or +without modifiers may also be used, and should not be in quotes. You can +even use PHP function results, plugin results and complex expressions. + +Some attributes require boolean values (TRUE or FALSE). These can be +specified as `true` and `false`. If an attribute has no value assigned +it gets the default boolean value of true. + +## Examples +```smarty +{include file="header.tpl"} + +{include file="header.tpl" nocache} // is equivalent to nocache=true + +{include file="header.tpl" attrib_name="attrib value"} + +{include file=$includeFile} + +{include file=#includeFile# title="My Title"} + +{assign var=foo value={counter}} // plugin result + +{assign var=foo value=substr($bar,2,5)} // PHP function result + +{assign var=foo value=$bar|strlen} // using modifier + +{assign var=foo value=$buh+$bar|strlen} // more complex expression + +{html_select_date display_days=true} + +{mailto address="smarty@example.com"} + + +``` + +> **Note** +> +> Although Smarty can handle some very complex expressions and syntax, +> it is a good rule of thumb to keep the template syntax minimal and +> focused on presentation. If you find your template syntax getting too +> complex, it may be a good idea to move the bits that do not deal +> explicitly with presentation to PHP by way of plugins or modifiers. diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md new file mode 100644 index 0000000..379418e --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md @@ -0,0 +1,69 @@ +# Comments + +Template comments are surrounded by asterisks, and that is surrounded by +the [delimiter](../../designers/language-basic-syntax/language-escaping.md) tags like so: + +## Examples + +```smarty +{* this is a comment *} +``` + +Smarty comments are NOT displayed in the final output of the template, +unlike ``. These are useful for making internal +notes in the templates which no one will see ;-) + +```smarty +{* I am a Smarty comment, I don't exist in the compiled output *} + + + {$title} + + + + {* another single line smarty comment *} + + + {* this multiline smarty + comment is + not sent to browser + *} + + {********************************************************* + Multi line comment block with credits block + @ author: bg@example.com + @ maintainer: support@example.com + @ para: var that sets block style + @ css: the style output + **********************************************************} + + {* The header file with the main logo and stuff *} + {include file='header.tpl'} + + + {* Dev note: the $includeFile var is assigned in foo.php script *} + + {include file=$includeFile} + + {* this + {html_options options=$vals selected=$selected_id} + + *} + + + {* $affiliate|upper *} + + {* you cannot nest comments *} + {* + + *} + + + +``` + diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-operators.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-operators.md new file mode 100644 index 0000000..98a5653 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-operators.md @@ -0,0 +1,88 @@ +# Operators + +## Basic + +Various basic operators can be applied directly to variable values. + +## Examples +```smarty +{$foo + 1} + +{$foo * $bar} + +{$foo->bar - $bar[1] * $baz->foo->bar() -3 * 7} + +{if ($foo + $bar.test % $baz * 134232 + 10 + $b + 10)} + ... +{/if} + +{$foo = $foo + $bar} +``` + +> **Note** +> +> Although Smarty can handle some very complex expressions and syntax, +> it is a good rule of thumb to keep the template syntax minimal and +> focused on presentation. If you find your template syntax getting too +> complex, it may be a good idea to move the bits that do not deal +> explicitly with presentation to PHP by way of plugins or modifiers. + +## List +The following is a list of recognized operators, which must be +separated from surrounding elements by spaces. Note that items listed in +\[brackets\] are optional. PHP equivalents are shown where applicable. + +| Operator | Alternates | Syntax Example | Meaning | PHP Equivalent | +|--------------------|------------|----------------------|--------------------------------|--------------------| +| == | eq | $a eq $b | equals | == | +| != | ne, neq | $a neq $b | not equals | != | +| > | gt | $a gt $b | greater than | > | +| < | lt | $a lt $b | less than | < | +| >= | gte, ge | $a ge $b | greater than or equal | >= | +| <= | lte, le | $a le $b | less than or equal | <= | +| === | | $a === 0 | check for identity | === | +| ! | not | not $a | negation (unary) | ! | +| % | mod | $a mod $b | modulo | % | +| is \[not\] div by | | $a is not div by 4 | divisible by | $a % $b == 0 | +| is \[not\] even | | $a is not even | \[not\] an even number (unary) | $a % 2 == 0 | +| is \[not\] even by | | $a is not even by $b | grouping level \[not\] even | ($a / $b) % 2 == 0 | +| is \[not\] odd | | $a is not odd | \[not\] an odd number (unary) | $a % 2 != 0 | +| is \[not\] odd by | | $a is not odd by $b | \[not\] an odd grouping | ($a / $b) % 2 != 0 | +| is in | | $a is in $b | exists in array | in_array($a, $b) | +| is \[not\] in | | $a is not in $b | does not exist in array | !in_array($a, $b) | + +## Ternary +You can use the `?:` (or ternary) operator to test one expression and present the value +of the second or third expression, based on the result of the test. + +In other words: +```smarty +{$test ? "OK" : "FAIL"} +``` +will result in OK if `$test` is set to true, and in FAIL otherwise. + +There is also a shorthand `?:` operator: +```smarty +{$myVar ?: "empty"} +``` +will result in 'empty' if `$myVar` is not set or set to something that evaluates to false, such as an empty string. +If `$myVar` is set to something that evaluates to true, the value of `$myVar` is returned. So, the following will +return 'hello': +```smarty +{$myVar="hello"} +{$myVar ?: "empty"} +``` + +## Testing for null +If "something that evaluates to false" is to broad a test for you, you can use the `??` (or null coalescing) operator +to trigger only if the tested value is undefined or set to null. +```smarty +{$myVar ?? "empty"} +``` +will result in 'empty' if `$myVar` is not set or set to null. +If `$myVar` is set to something that evaluates to anything else, the value of `$myVar` is returned. So, the following will +return an empty string (''): +```smarty +{$myVar=""} +{$myVar ?: "this is not shown"} +``` \ No newline at end of file diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-quotes.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-quotes.md new file mode 100644 index 0000000..e04e6da --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-quotes.md @@ -0,0 +1,54 @@ +# Embedding Vars in Double Quotes + +- Smarty will recognize [assigned](../../programmers/api-functions/api-assign.md) + [variables](./language-syntax-variables.md) embedded in "double + quotes" so long as the variable name contains only numbers, letters + and under_scores. See [naming](https://www.php.net/language.variables) + for more detail. + +- With any other characters, for example a period(.) or + `$object->reference`, then the variable must be surrounded by `` `backticks` ``. + +- In addition, Smarty does allow embedded Smarty tags in double-quoted + strings. This is useful if you want to include variables with + modifiers, plugin or PHP function results. + +## Examples +```smarty +{func var="test $foo test"} // sees $foo +{func var="test $foo_bar test"} // sees $foo_bar +{func var="test `$foo[0]` test"} // sees $foo[0] +{func var="test `$foo[bar]` test"} // sees $foo[bar] +{func var="test $foo.bar test"} // sees $foo (not $foo.bar) +{func var="test `$foo.bar` test"} // sees $foo.bar +{func var="test `$foo.bar` test"|escape} // modifiers outside quotes! +{func var="test {$foo|escape} test"} // modifiers inside quotes! +{func var="test {time()} test"} // PHP function result +{func var="test {counter} test"} // plugin result +{func var="variable foo is {if !$foo}not {/if} defined"} // Smarty block function + +{* will replace $tpl_name with value *} +{include file="subdir/$tpl_name.tpl"} + +{* does NOT replace $tpl_name *} +{include file='subdir/$tpl_name.tpl'} // vars require double quotes! + +{* must have backticks as it contains a dot "." *} +{cycle values="one,two,`$smarty.config.myval`"} + +{* must have backticks as it contains a dot "." *} +{include file="`$module.contact`.tpl"} + +{* can use variable with dot syntax *} +{include file="`$module.$view`.tpl"} +``` + +> **Note** +> +> Although Smarty can handle some very complex expressions and syntax, +> it is a good rule of thumb to keep the template syntax minimal and +> focused on presentation. If you find your template syntax getting too +> complex, it may be a good idea to move the bits that do not deal +> explicitly with presentation to PHP by way of plugins or modifiers. + +See also [`escape`](../language-modifiers/language-modifier-escape.md). diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-tags.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-tags.md new file mode 100644 index 0000000..7142f0d --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-tags.md @@ -0,0 +1,39 @@ +# Tags + +Every Smarty tag either prints a [variable](./language-syntax-variables.md) or +invokes some sort of function. These are processed and displayed by +enclosing the function and its [attributes](./language-syntax-attributes.md) +within delimiters like so: `{funcname attr1="val1" attr2="val2"}`. + +## Examples + +```smarty +{config_load file="colors.conf"} + +{include file="header.tpl"} + +{if $logged_in} + Welcome, {$name}! +{else} + hi, {$name} +{/if} + +{include file="footer.tpl"} +``` + +- Both [built-in functions](../language-builtin-functions/index.md) and [custom + functions](../language-custom-functions/index.md) have the same syntax within + templates. + +- Built-in functions are the **inner** workings of Smarty, such as + [`{if}`](../language-builtin-functions/language-function-if.md), + [`{section}`](../language-builtin-functions/language-function-section.md) and + [`{strip}`](../language-builtin-functions/language-function-strip.md). There should be no need to + change or modify them. + +- Custom tags are **additional** tags implemented via + [plugins](../../api/extending/introduction.md). They can be modified to your liking, or you can + create new ones. [`{html_options}`](../language-custom-functions/language-function-html-options.md) + is an example of a custom function. + +See also [`registerPlugin()`](../../programmers/api-functions/api-register-plugin.md) diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md new file mode 100644 index 0000000..78d309a --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md @@ -0,0 +1,106 @@ +# Variables + +Template variables start with the $dollar sign. They can contain +numbers, letters and underscores, much like a [PHP +variable](https://www.php.net/language.variables). You can reference arrays +by index numerically or non-numerically. Also reference object +properties and methods. + +[Config file variables](../language-variables/language-config-variables.md) are an exception to +the \$dollar syntax and are instead referenced with surrounding +\#hashmarks\#, or via the [`$smarty.config`](../language-variables/language-variables-smarty.md#smartyconfig-languagevariablessmartyconfig) variable. + +## Examples + +```smarty +{$foo} <-- displaying a simple variable (non array/object) +{$foo[4]} <-- display the 5th element of a zero-indexed array +{$foo.bar} <-- display the "bar" key value of an array, similar to PHP $foo['bar'] +{$foo.$bar} <-- display variable key value of an array, similar to PHP $foo[$bar] +{$foo->bar} <-- display the object property "bar" +{$foo->bar()} <-- display the return value of object method "bar" +{#foo#} <-- display the config file variable "foo" +{$smarty.config.foo} <-- synonym for {#foo#} +{$foo[bar]} <-- syntax only valid in a section loop, see {section} +{assign var=foo value='baa'}{$foo} <-- displays "baa", see {assign} + +Many other combinations are allowed + +{$foo.bar.baz} +{$foo.$bar.$baz} +{$foo[4].baz} +{$foo[4].$baz} +{$foo.bar.baz[4]} +{$foo->bar($baz,2,$bar)} <-- passing parameters +{"foo"} <-- static values are allowed + +{* display the server variable "SERVER_NAME" ($_SERVER['SERVER_NAME'])*} +{$smarty.server.SERVER_NAME} + +Math and embedding tags: + +{$x+$y} // will output the sum of x and y. +{assign var=foo value=$x+$y} // in attributes +{$foo[$x+3]} // as array index +{$foo={counter}+3} // tags within tags +{$foo="this is message {counter}"} // tags within double quoted strings + +Defining Arrays: + +{assign var=foo value=[1,2,3]} +{assign var=foo value=['y'=>'yellow','b'=>'blue']} +{assign var=foo value=[1,[9,8],3]} // can be nested + +Short variable assignment: + +{$foo=$bar+2} +{$foo = strlen($bar)} // function in assignment +{$foo = myfunct( ($x+$y)*3 )} // as function parameter +{$foo.bar=1} // assign to specific array element +{$foo.bar.baz=1} +{$foo[]=1} // appending to an array + +Smarty "dot" syntax (note: embedded {} are used to address ambiguities): + +{$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 + +PHP-like syntax, alternative to "dot" syntax: + +{$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! + +Variable variables: + +$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 chaining: + +{$object->method1($x)->method2($y)} + +``` + +> **Note** +> +> Although Smarty can handle some very complex expressions and syntax, +> it is a good rule of thumb to keep the template syntax minimal and +> focused on presentation. If you find your template syntax getting too +> complex, it may be a good idea to move the bits that do not deal +> explicitly with presentation to PHP by way of plugins or modifiers. + +Request variables such as `$_GET`, `$_SESSION`, etc are available via +the reserved [`$smarty`](../language-variables/language-variables-smarty.md) variable. + +See also [`$smarty`](../language-variables/language-variables-smarty.md), [config +variables](../language-variables/language-config-variables.md) +[`{assign}`](../language-builtin-functions/language-function-assign.md) and [`assign()`](../../programmers/api-functions/api-assign.md). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions.md new file mode 100644 index 0000000..e69de29 diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/index.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/index.md new file mode 100644 index 0000000..852b392 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/index.md @@ -0,0 +1,35 @@ +# Built-in Functions + +Smarty comes with several built-in functions. These built-in functions +are the integral part of the smarty template engine. They are compiled +into corresponding inline PHP code for maximum performance. + +You cannot create your own [custom tags](../language-custom-functions/index.md) with the same name; and you +should not need to modify the built-in functions. + +A few of these functions have an `assign` attribute which collects the +result the function to a named template variable instead of being +output; much like the [`{assign}`](language-function-assign.md) function. + +- [{append}](language-function-append.md) +- [{assign} or {$var=...}](language-function-assign.md) +- [{block}](language-function-block.md) +- [{call}](language-function-call.md) +- [{capture}](language-function-capture.md) +- [{config_load}](language-function-config-load.md) +- [{debug}](language-function-debug.md) +- [{extends}](language-function-extends.md) +- [{for}](language-function-for.md) +- [{foreach}, {foreachelse}](language-function-foreach.md) +- [{function}](language-function-function.md) +- [{if}, {elseif}, {else}](language-function-if.md) +- [{include}](language-function-include.md) +- [{insert}](language-function-insert.md) +- [{ldelim}, {rdelim}](language-function-ldelim.md) +- [{literal}](language-function-literal.md) +- [{nocache}](language-function-nocache.md) +- [{section}, {sectionelse}](language-function-section.md) +- [{setfilter}](language-function-setfilter.md) +- [{strip}](language-function-strip.md) +- [{while}](language-function-while.md) + diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-append.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-append.md new file mode 100644 index 0000000..37e1b81 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-append.md @@ -0,0 +1,49 @@ +# {append} + +`{append}` is used for creating or appending template variable arrays +**during the execution of a template**. + +## Attributes + +| Attribute | Required | Description | +|-----------|------------|----------------------------------------------------------------------------------------------------| +| var | | The name of the variable being assigned | +| value | | The value being assigned | +| index | (optional) | The index for the new array element. If not specified the value is append to the end of the array. | +| scope | (optional) | The scope of the assigned variable: parent, root or global. Defaults to local if omitted. | + +## Option Flags + +| Name | Description | +|---------|-----------------------------------------------------| +| nocache | Assigns the variable with the 'nocache' attribute | + +> **Note** +> +> Assignment of variables in-template is essentially placing application +> logic into the presentation that may be better handled in PHP. Use at +> your own discretion. + +## Examples + +```smarty +{append var='name' value='Bob' index='first'} +{append var='name' value='Meyer' index='last'} +// or +{append 'name' 'Bob' index='first'} {* short-hand *} +{append 'name' 'Meyer' index='last'} {* short-hand *} + +The first name is {$name.first}.
+The last name is {$name.last}. +``` + +The above example will output: + + + The first name is Bob. + The last name is Meyer. + + + +See also [`append()`](#api.append) and +[`getTemplateVars()`](#api.get.template.vars). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md new file mode 100644 index 0000000..abcc8e5 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md @@ -0,0 +1,148 @@ +# {assign}, {$var=...} + +`{assign}` or `{$var=...}` is used for assigning template variables **during the +execution of a template**. + +## Attributes of the {assign} syntax +| Attribute Name | Required | Description | +|----------------|------------|-----------------------------------------------------------------------| +| var | | The name of the variable being assigned | +| value | | The value being assigned | +| scope | (optional) | The scope of the assigned variable: 'parent','root' or 'global' | + +## Attributes of the {$var=...} syntax +| Attribute Name | Required | Description | +|----------------|------------|-----------------------------------------------------------------------| +| scope | (optional) | The scope of the assigned variable: 'parent','root' or 'global' | + +## Option Flags +| Name | Description | +|---------|---------------------------------------------------| +| nocache | Assigns the variable with the 'nocache' attribute | + + +> **Note** +> +> Assignment of variables in-template is essentially placing application +> logic into the presentation that may be better handled in PHP. Use at +> your own discretion. + +## Examples + +```smarty +{assign var="name" value="Bob"} {* or *} +{assign "name" "Bob"} {* short-hand, or *} +{$name='Bob'} + +The value of $name is {$name}. +``` + + +The above example will output: + +``` +The value of $name is Bob. +``` + + +```smarty +{assign var="name" value="Bob" nocache} {* or *} +{assign "name" "Bob" nocache} {* short-hand, or *} +{$name='Bob' nocache} + +The value of $name is {$name}. +``` +The above example will output: +``` +The value of $name is Bob. +``` + + +```smarty +{assign var=running_total value=$running_total+$some_array[$row].some_value} {* or *} +{$running_total=$running_total+$some_array[row].some_value} +``` + +Variables assigned in the included template will be seen in the +including template. + +```smarty +{include file="sub_template.tpl"} + +{* display variable assigned in sub_template *} +{$foo}
+``` + +The template above includes the example `sub_template.tpl` below: + +```smarty + +{* foo will be known also in the including template *} +{assign var="foo" value="something" scope=parent} +{$foo="something" scope=parent} + +{* bar is assigned only local in the including template *} +{assign var="bar" value="value"} {* or *} +{$var="value"} + +``` + +You can assign a variable to root of the current root tree. The variable +is seen by all templates using the same root tree. + +```smarty +{assign var=foo value="bar" scope="root"} +``` + +A global variable is seen by all templates. + +```smarty +{assign var=foo value="bar" scope="global"} {* or *} +{assign "foo" "bar" scope="global"} {* short-hand, or *} +{$foo="bar" scope="global"} +``` + +For more information on variable scope, please read the page on [variable scopes](../language-variables/language-variable-scopes.md). + +To access `{assign}` variables from a php script use +[`getTemplateVars()`](../../programmers/api-functions/api-get-template-vars.md). +Here's the template that creates the variable `$foo`. + +```smarty +{assign var="foo" value="Smarty"} {* or *} +{$foo="Smarty"} +``` + +The template variables are only available after/during template +execution as in the following script. + +```php +getTemplateVars('foo'); + +// fetch the template to a variable +$whole_page = $smarty->fetch('index.tpl'); + +// this will output 'smarty' as the template has been executed +echo $smarty->getTemplateVars('foo'); + +$smarty->assign('foo','Even smarter'); + +// this will output 'Even smarter' +echo $smarty->getTemplateVars('foo'); +``` + +The following functions can also *optionally* assign template variables: [`{capture}`](#language.function.capture), +[`{include}`](#language.function.include), +[`{counter}`](#language.function.counter), +[`{cycle}`](#language.function.cycle), +[`{eval}`](#language.function.eval), +[`{fetch}`](#language.function.fetch), +[`{math}`](#language.function.math) and +[`{textformat}`](#language.function.textformat). + +See also [`{append}`](./language-function-append.md), +[`assign()`](#api.assign) and +[`getTemplateVars()`](#api.get.template.vars). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md new file mode 100644 index 0000000..05334e2 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md @@ -0,0 +1,201 @@ +# {block} + +`{block}` is used to define a named area of template source for template +inheritance. For details see section of [Template +Inheritance](../../api/inheritance.md). + +The `{block}` template source area of a child template will replace the +corresponding areas in the parent template(s). + +Optionally `{block}` areas of child and parent templates can be merged +into each other. You can append or prepend the parent `{block}` content +by using the `append` or `prepend` option flag with the child's `{block}` +definition. With `{$smarty.block.parent}` the `{block}` content of +the parent template can be inserted at any location of the child +`{block}` content. `{$smarty.block.child}` inserts the `{block}` content +of the child template at any location of the parent `{block}`. + +`{blocks}'s` can be nested. + +## Attributes + +| Attribute Name | Required | Description | +|----------------|----------|----------------------------------------------------------------------------------------------------------------------| +| name | yes | The name of the template source block | +| assign | no | The name of variable to assign the output of the block to. | + +> **Note** +> +> The assign attribute only works on the block that actually gets executed, so you may need +> to add it to each child block as well. + + +## Option Flags (in child templates only): + +| Name | Description | +|---------|-----------------------------------------------------------------------------------------| +| append | The `{block}` content will be appended to the content of the parent template `{block}` | +| prepend | The `{block}` content will be prepended to the content of the parent template `{block}` | +| hide | Ignore the block content if no child block of same name is existing. | +| nocache | Disables caching of the `{block}` content | + + +## Examples + +parent.tpl + +```smarty + + + {block name="title"}Default Title{/block} + {block "title"}Default Title{/block} {* short-hand *} + + +``` + + +child.tpl + +```smarty + {extends file="parent.tpl"} + {block name="title"} + Page Title + {/block} +``` + + +The result would look like + +```html + + + Page Title + + +``` + +parent.tpl + +```smarty + + + {block name="title"}Title - {/block} + + +``` + + +child.tpl + +```smarty + {extends file="parent.tpl"} + {block name="title" append} + Page Title + {/block} +``` + + +The result would look like + +```html + + + Title - Page Title + + +``` + +parent.tpl + +```smarty + + + {block name="title"} is my title{/block} + + +``` + +child.tpl + +```smarty + {extends file="parent.tpl"} + {block name="title" prepend} + Page Title + {/block} +``` + + +The result would look like + +```html + + + Page title is my titel + + +``` + +parent.tpl + +```smarty + + + {block name="title"}The {$smarty.block.child} was inserted here{/block} + + +``` + +child.tpl + +```smarty + {extends file="parent.tpl"} + {block name="title"} + Child Title + {/block} +``` + +The result would look like + +```html + + + The Child Title was inserted here + + +``` + +parent.tpl + +```smarty + + + {block name="title"}Parent Title{/block} + + +``` + + +child.tpl + +```smarty + {extends file="parent.tpl"} + {block name="title"} + You will see now - {$smarty.block.parent} - here + {/block} +``` + +The result would look like + +```html + + + You will see now - Parent Title - here + + +``` + +See also [Template +Inheritance](../../api/inheritance.md), +[`$smarty.block.parent`](../language-variables/language-variables-smarty.md#smartyblockparent-languagevariablessmartyblockparent), +[`$smarty.block.child`](../language-variables/language-variables-smarty.md#smartyblockchild-languagevariablessmartyblockchild), and +[`{extends}`](./language-function-extends.md) diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-call.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-call.md new file mode 100644 index 0000000..c07fb49 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-call.md @@ -0,0 +1,77 @@ +# {call} + +`{call}` is used to call a template function defined by the +[`{function}`](./language-function-function.md) tag just like a plugin +function. + +> **Note** +> +> Template functions are defined global. Since the Smarty compiler is a +> single-pass compiler, The `{call}` tag must +> be used to call a template function defined externally from the given +> template. Otherwise you can directly use the function as +> `{funcname ...}` in the template. + +- The `{call}` tag must have the `name` attribute which contains the + name of the template function. + +- Values for variables can be passed to the template function as + [attributes](../language-basic-syntax/language-syntax-attributes.md). + +## Attributes + +| Attribute Name | Required | Description | +|----------------|----------|------------------------------------------------------------------------------------------| +| name | Yes | The name of the template function | +| assign | No | The name of the variable that the output of called template function will be assigned to | +| [var ...] | No | variable to pass local to template function | + +## Option Flags + +| Name | Description | +|---------|--------------------------------------------| +| nocache | Call the template function in nocache mode | + + +## Examples + +```smarty + {* define the function *} + {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} + + {* create an array to demonstrate *} + {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' => + ['item3-3-1','item3-3-2']],'item4']} + + {* run the array through the function *} + {call name=menu data=$menu} + {call menu data=$menu} {* short-hand *} +``` + + +Will generate the following output + +``` + * item1 + * item2 + * item3 + o item3-1 + o item3-2 + o item3-3 + + item3-3-1 + + item3-3-2 + * item4 +``` + +See also [`{function}`](./language-function-function.md). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md new file mode 100644 index 0000000..83f4d02 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md @@ -0,0 +1,75 @@ +# {capture} + +`{capture}` is used to collect the output of the template between the +tags into a variable instead of displaying it. Any content between +`{capture name='foo'}` and `{/capture}` is collected into the variable +specified in the `name` attribute. + +The captured content can be used in the template from the variable +[`$smarty.capture.foo`](../language-variables/language-variables-smarty.md#smartycapture-languagevariablessmartycapture) where "foo" +is the value passed in the `name` attribute. If you do not supply the +`name` attribute, then "default" will be used as the name ie +`$smarty.capture.default`. + +`{capture}'s` can be nested. + +## Attributes + +| Attribute Name | Required | Description | +|----------------|----------|----------------------------------------------------------------------| +| name | Yes | The name of the captured block | +| assign | No | The variable name where to assign the captured output to | +| append | No | The name of an array variable where to append the captured output to | + +## Option Flags + +| Name | Description | +|---------|-----------------------------------------| +| nocache | Disables caching of this captured block | + + +## Examples + +```smarty +{* we don't want to print a div tag unless content is displayed *} +{capture name="banner"} +{capture "banner"} {* short-hand *} + {include file="get_banner.tpl"} +{/capture} + +{if $smarty.capture.banner ne ""} + +{/if} +``` + +This example demonstrates the capture function. +```smarty + +{capture name=some_content assign=popText} +{capture some_content assign=popText} {* short-hand *} +The server is {$my_server_name|upper} at {$my_server_addr}
+Your ip is {$my_ip}. +{/capture} +{$popText} +``` + + +This example also demonstrates how multiple calls of capture can be used +to create an array with captured content. + +```smarty +{capture append="foo"}hello{/capture}I say just {capture append="foo"}world{/capture} +{foreach $foo as $text}{$text} {/foreach} +``` + +The above example will output: + +``` +I say just hello world +``` + + +See also [`$smarty.capture`](../language-variables/language-variables-smarty.md#smartycapture-languagevariablessmartycapture), +[`{eval}`](../language-custom-functions/language-function-eval.md), +[`{fetch}`](../language-custom-functions/language-function-fetch.md), [`fetch()`](../../programmers/api-functions/api-fetch.md) and +[`{assign}`](./language-function-assign.md). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md new file mode 100644 index 0000000..1972179 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md @@ -0,0 +1,87 @@ +# {config_load} + +`{config_load}` is used for loading config +[`#variables#`](#language.config.variables) from a [configuration file](#config.files) into the template. + +## Attributes + +| Attribute Name | Required | Description | +|----------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| file | Yes | The name of the config file to include | +| section | No | The name of the section to load | + + +## Examples + +The `example.conf` file. + +```ini +#this is config file comment + +# global variables +pageTitle = "Main Menu" +bodyBgColor = #000000 +tableBgColor = #000000 +rowBgColor = #00ff00 + +#customer variables section +[Customer] +pageTitle = "Customer Info" +``` + +and the template + +```smarty +{config_load file="example.conf"} +{config_load "example.conf"} {* short-hand *} + + + {#pageTitle#|default:"No title"} + + + + + + + +
FirstLastAddress
+ + +``` + +[Config Files](#config.files) may also contain sections. You can load +variables from within a section with the added attribute `section`. Note +that global config variables are always loaded along with section +variables, and same-named section variables overwrite the globals. + +> **Note** +> +> Config file *sections* and the built-in template function called +> [`{section}`](../language-builtin-functions/language-function-section.md) have nothing to do with each +> other, they just happen to share a common naming convention. + +```smarty +{config_load file='example.conf' section='Customer'} +{config_load 'example.conf' 'Customer'} {* short-hand *} + + + {#pageTitle#} + + + + + + + +
FirstLastAddress
+ + +``` + +See [`$config_overwrite`](../../programmers/api-variables/variable-config-overwrite.md) to create arrays +of config file variables. + +See also the [config files](../config-files.md) page, [config variables](../language-variables/language-config-variables.md) page, +[`$config_dir`](../../programmers/api-variables/variable-config-dir.md), +[`getConfigVars()`](../../programmers/api-functions/api-get-config-vars.md) and +[`configLoad()`](../../programmers/api-functions/api-config-load.md). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-debug.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-debug.md new file mode 100644 index 0000000..29485d5 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-debug.md @@ -0,0 +1,17 @@ +# {debug} + +`{debug}` dumps the debug console to the page. This works regardless of +the [debug](../chapter-debugging-console.md) settings in the php script. +Since this gets executed at runtime, this is only able to show the +[assigned](../../programmers/api-functions/api-assign.md) variables; not the templates that are in use. +However, you can see all the currently available variables within the +scope of a template. + +If caching is enabled and a page is loaded from cache `{debug}` does +show only the variables which assigned for the cached page. + +In order to see also the variables which have been locally assigned +within the template it does make sense to place the `{debug}` tag at the +end of the template. + +See also the [debugging console page](../chapter-debugging-console.md). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md new file mode 100644 index 0000000..06241d9 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md @@ -0,0 +1,37 @@ +# {extends} + +`{extends}` tags are used in child templates in template inheritance for +extending parent templates. For details see section of [Template +Inheritance](../../api/inheritance.md). + +- The `{extends}` tag must be on the first line of the template. + +- If a child template extends a parent template with the `{extends}` + tag it may contain only `{block}` tags. Any other template content + is ignored. + +- Use the syntax for [template resources](../../api/resources.md) to extend files + outside the [`$template_dir`](../../programmers/api-variables/variable-template-dir.md) directory. + +## Attributes + +| Attribute | Required | Description | +|-----------|----------|-------------------------------------------------| +| file | Yes | The name of the template file which is extended | + +> **Note** +> +> When extending a variable parent like `{extends file=$parent_file}`, +> make sure you include `$parent_file` in the +> [`$compile_id`](../../programmers/api-variables/variable-compile-id.md). Otherwise, Smarty cannot +> distinguish between different `$parent_file`s. + +## Examples + +```smarty +{extends file='parent.tpl'} +{extends 'parent.tpl'} {* short-hand *} +``` + +See also [Template Inheritance](../../api/inheritance.md) +and [`{block}`](./language-function-block.md). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-for.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-for.md new file mode 100644 index 0000000..619b61e --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-for.md @@ -0,0 +1,91 @@ +# {for} + +The `{for}{forelse}` tag is used to create simple loops. The following different formats are supported: + +- `{for $var=$start to $end}` simple loop with step size of 1. + +- `{for $var=$start to $end step $step}` loop with individual step + size. + +`{forelse}` is executed when the loop is not iterated. + +## Attributes + +| Attribute | Required | Description | +|-----------|----------|--------------------------------| +| max | No | Limit the number of iterations | + +## Option Flags + +| Name | Description | +|---------|--------------------------------------| +| nocache | Disables caching of the `{for}` loop | + +## Examples + +```smarty +
    + {for $foo=1 to 3} +
  • {$foo}
  • + {/for} +
+``` + +The above example will output: + +```html +
    +
  • 1
  • +
  • 2
  • +
  • 3
  • +
+``` + +```php +assign('to',10); +``` + +```smarty +
    + {for $foo=3 to $to max=3} +
  • {$foo}
  • + {/for} +
+``` + +The above example will output: + +```html +
    +
  • 3
  • +
  • 4
  • +
  • 5
  • +
+``` + +```php +assign('start',10); +$smarty->assign('to',5); +``` + +```smarty +
    + {for $foo=$start to $to} +
  • {$foo}
  • + {forelse} + no iteration + {/for} +
+``` + +The above example will output: + +``` + no iteration +``` + +See also [`{foreach}`](./language-function-foreach.md), +[`{section}`](./language-function-section.md) and +[`{while}`](./language-function-while.md) diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md new file mode 100644 index 0000000..38d1511 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md @@ -0,0 +1,389 @@ +# {foreach},{foreachelse} + +`{foreach}` is used for looping over arrays of data. `{foreach}` has a +simpler and cleaner syntax than the +[`{section}`](./language-function-section.md) loop, and can also loop over +associative arrays. + +## Option Flags + +| Name | Description | +|---------|------------------------------------------| +| nocache | Disables caching of the `{foreach}` loop | + + +## Examples + +```smarty + +{foreach $arrayvar as $itemvar} + {$itemvar|escape} +{/foreach} + +{foreach $arrayvar as $keyvar=>$itemvar} + {$keyvar}: {$itemvar|escape} +{/foreach} + +``` +> **Note** +> +> This foreach syntax does not accept any named attributes. This syntax +> is new to Smarty 3, however the Smarty 2.x syntax +> `{foreach from=$myarray key="mykey" item="myitem"}` is still +> supported. + +- `{foreach}` loops can be nested. + +- The `array` variable, usually an array of values, determines the + number of times `{foreach}` will loop. You can also pass an integer + for arbitrary loops. + +- `{foreachelse}` is executed when there are no values in the `array` + variable. + +- `{foreach}` properties are [`@index`](#index), + [`@iteration`](#iteration), + [`@first`](#first), + [`@last`](#last), + [`@show`](#show), + [`@total`](#total). + +- `{foreach}` constructs are [`{break}`](#break), + [`{continue}`](#continue). + +- Instead of specifying the `key` variable you can access the current + key of the loop item by `{$item@key}` (see examples below). + +> **Note** +> +> The `$var@property` syntax is new to Smarty 3, however when using the +> Smarty 2 `{foreach from=$myarray key="mykey" item="myitem"}` style +> syntax, the `$smarty.foreach.name.property` syntax is still supported. + +> **Note** +> +> Although you can retrieve the array key with the syntax +> `{foreach $myArray as $myKey => $myValue}`, the key is always +> available as `$myValue@key` within the foreach loop. + +```php +assign('myColors', $arr); +``` + +Template to output `$myColors` in an un-ordered list + +```smarty +
    + {foreach $myColors as $color} +
  • {$color}
  • + {/foreach} +
+``` + +The above example will output: + +```html +
    +
  • red
  • +
  • green
  • +
  • blue
  • +
+``` + +```php + 'John', 'lname' => 'Doe', 'email' => 'j.doe@example.com'); +$smarty->assign('myPeople', $people); +``` + +Template to output `$myArray` as key/value pairs. + +```smarty +
    + {foreach $myPeople as $value} +
  • {$value@key}: {$value}
  • + {/foreach} +
+``` + +The above example will output: + +```html +
    +
  • fname: John
  • +
  • lname: Doe
  • +
  • email: j.doe@example.com
  • +
+``` + +Assign an array to Smarty, the key contains the key for each looped +value. + +```php +assign( + 'contacts', + [ + ['phone' => '555-555-1234', 'fax' => '555-555-5678', 'cell' => '555-555-0357'], + ['phone' => '800-555-4444', 'fax' => '800-555-3333', 'cell' => '800-555-2222'], + ] + ); +``` + +The template to output `$contact`. + +```smarty +{* key always available as a property *} +{foreach $contacts as $contact} + {foreach $contact as $value} + {$value@key}: {$value} + {/foreach} +{/foreach} + +{* accessing key the PHP syntax alternate *} +{foreach $contacts as $contact} + {foreach $contact as $key => $value} + {$key}: {$value} + {/foreach} +{/foreach} +``` + +Either of the above examples will output: + +``` + phone: 555-555-1234 + fax: 555-555-5678 + cell: 555-555-0357 + phone: 800-555-4444 + fax: 800-555-3333 + cell: 800-555-2222 +``` + +A database (PDO) example of looping over search results. This example is +looping over a PHP iterator instead of an array(). + +```php + true)); + + $res = $db->prepare("select * from users"); + $res->execute(); + $res->setFetchMode(PDO::FETCH_LAZY); + + // assign to smarty + $smarty->assign('res',$res); + + $smarty->display('index.tpl');?> +``` + +```smarty +{foreach $res as $r} + {$r.id} + {$r.name} +{foreachelse} + .. no results .. +{/foreach} +``` + +The above is assuming the results contain the columns named `id` and +`name`. + +What is the advantage of an iterator vs. looping over a plain old array? +With an array, all the results are accumulated into memory before being +looped. With an iterator, each result is loaded/released within the +loop. This saves processing time and memory, especially for very large +result sets. + +## @index + +`index` contains the current array index, starting with zero. + +```smarty +{* output empty row on the 4th iteration (when index is 3) *} + + {foreach $items as $i} + {if $i@index eq 3} + {* put empty table row *} + + {/if} + + {/foreach} +
nbsp;
{$i.label}
+``` + + +## @iteration + +`iteration` contains the current loop iteration and always starts at +one, unlike [`index`](#index). It is incremented by one +on each iteration. + +The *"is div by"* operator can be used to detect a specific iteration. +Here we bold-face the name every 4th iteration. + +```smarty +{foreach $myNames as $name} + {if $name@iteration is div by 4} + {$name} + {/if} + {$name} +{/foreach} +``` + +The *"is even by"* and *"is odd by"* operators can be used to +alternate something every so many iterations. Choosing between even or +odd rotates which one starts. Here we switch the font color every 3rd +iteration. + +```smarty + {foreach $myNames as $name} + {if $name@index is even by 3} + {$name} + {else} + {$name} + {/if} + {/foreach} +``` + +This will output something similar to this: + +```html +... +... +... +... +... +... +... +... +... +... +... +... +... +``` + +## @first + +`first` is TRUE if the current `{foreach}` iteration is the initial one. +Here we display a table header row on the first iteration. + +```smarty +{* show table header at first iteration *} + + {foreach $items as $i} + {if $i@first} + + + {/if} + + + + + {/foreach} +
key + name +
{$i@key}{$i.name}
+``` + +## @last + +`last` is set to TRUE if the current `{foreach}` iteration is the final +one. Here we display a horizontal rule on the last iteration. + +```smarty +{* Add horizontal rule at end of list *} +{foreach $items as $item} + {$item.name}{if $item@last}
{else},{/if} +{foreachelse} + ... no items to loop ... +{/foreach} +``` + +## @show + +The show `show` property can be used after the execution of a +`{foreach}` loop to detect if data has been displayed or not. `show` is +a boolean value. + +```smarty +
    + {foreach $myArray as $name} +
  • {$name}
  • + {/foreach} +
+{if $name@show} do something here if the array contained data {/if} +``` + +## @total + +`total` contains the number of iterations that this `{foreach}` will +loop. This can be used inside or after the `{foreach}`. + +```smarty +{* show number of rows at end *} +{foreach $items as $item} + {$item.name}
+ {if $item@last} +
{$item@total} items
+ {/if} +{foreachelse} + ... no items to loop ... +{/foreach} +``` + +See also [`{section}`](./language-function-section.md), +[`{for}`](./language-function-for.md) and +[`{while}`](./language-function-while.md) + +## {break} + +`{break}` aborts the iteration of the array + +```smarty + {$data = [1,2,3,4,5]} + {foreach $data as $value} + {if $value == 3} + {* abort iterating the array *} + {break} + {/if} + {$value} + {/foreach} + {* + prints: 1 2 + *} +``` + +## {continue} + +`{continue}` leaves the current iteration and begins with the next +iteration. + +```smarty + {$data = [1,2,3,4,5]} + {foreach $data as $value} + {if $value == 3} + {* skip this iteration *} + {continue} + {/if} + {$value} + {/foreach} + {* + prints: 1 2 4 5 + *} +``` diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-function.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-function.md new file mode 100644 index 0000000..cee6762 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-function.md @@ -0,0 +1,89 @@ +# {function} + +`{function}` is used to create functions within a template and call them +just like a plugin function. Instead of writing a plugin that generates +presentational content, keeping it in the template is often a more +manageable choice. It also simplifies data traversal, such as deeply +nested menus. + +> **Note** +> +> Template functions are defined global. Since the Smarty compiler is a +> single-pass compiler, The [`{call}`](#language.function.call) tag must +> be used to call a template function defined externally from the given +> template. Otherwise, you can directly use the function as +> `{funcname ...}` in the template. + +## Attributes + +| Attribute Name | Required | Description | +|----------------|----------|---------------------------------------------------------------| +| name | Yes | The name of the template function | +| \[var \...\] | No | default variable value to pass local to the template function | + +- The `{function}` tag must have the `name` attribute which contains + the name of the template function. A tag with this name can be + used to call the template function. + +- Default values for variables can be passed to the template function + as [attributes](../language-basic-syntax/language-syntax-attributes.md). Like in PHP function + declarations you can only use scalar values as default. The default + values can be overwritten when the template function is being + called. + +- You can use all variables from the calling template inside the + template function. Changes to variables or new created variables + inside the template function have local scope and are not visible + inside the calling template after the template function is executed. + + + +> **Note** +> +> You can pass any number of parameter to the template function when it +> is called. The parameter variables must not be declared in the +> `{funcname ...}` tag unless you what to use default values. Default +> values must be scalar and can not be variable. Variables must be +> passed when the template is called. + +## Examples + +```smarty +{* define the function *} +{function name=menu level=0} +{function menu level=0} {* short-hand *} +
    + {foreach $data as $entry} + {if is_array($entry)} +
  • {$entry@key}
  • + {menu data=$entry level=$level+1} + {else} +
  • {$entry}
  • + {/if} + {/foreach} +
+{/function} + +{* create an array to demonstrate *} +{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' => +['item3-3-1','item3-3-2']],'item4']} + +{* run the array through the function *} +{menu data=$menu} +``` + +Will generate the following output + +``` +* item1 +* item2 +* item3 + o item3-1 + o item3-2 + o item3-3 + + item3-3-1 + + item3-3-2 +* item4 +``` + +See also [`{call}`](./language-function-call.md) diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md new file mode 100644 index 0000000..eb00cfd --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md @@ -0,0 +1,92 @@ +# {if},{elseif},{else} + +`{if}` statements in Smarty have much the same flexibility as PHP +[if](https://www.php.net/if) statements, with a few added features for the +template engine. Every `{if}` must be paired with a matching `{/if}`. +`{else}` and `{elseif}` are also permitted. All [operators](../language-basic-syntax/language-syntax-operators.md) are recognized, such as *==*, +*\|\|*, *or*, *&&*, *and*, etc and you can use modifiers as functions, such as *is_array()*. + +## Examples +```smarty +{if $name eq 'Fred'} + Welcome Sir. +{elseif $name eq 'Wilma'} + Welcome Ma'am. +{else} + Welcome, whatever you are. +{/if} + +{* an example with "or" logic *} +{if $name eq 'Fred' or $name eq 'Wilma'} + ... +{/if} + +{* same as above *} +{if $name == 'Fred' || $name == 'Wilma'} + ... +{/if} + + +{* parenthesis are allowed *} +{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#} + ... +{/if} + + +{* you can also embed php function calls *} +{if count($var) gt 0} + ... +{/if} + +{* check for array. *} +{if is_array($foo) } + ..... +{/if} + +{* check for not null. *} +{if isset($foo) } + ..... +{/if} + + +{* test if values are even or odd *} +{if $var is even} + ... +{/if} +{if $var is odd} + ... +{/if} +{if $var is not odd} + ... +{/if} + + +{* test if var is divisible by 4 *} +{if $var is div by 4} + ... +{/if} + + +{* + test if var is even, grouped by two. i.e., + 0=even, 1=even, 2=odd, 3=odd, 4=even, 5=even, etc. +*} +{if $var is even by 2} + ... +{/if} + +{* 0=even, 1=even, 2=even, 3=odd, 4=odd, 5=odd, etc. *} +{if $var is even by 3} + ... +{/if} + +{if isset($name) && $name == 'Blog'} + {* do something *} +{elseif $name == $foo} + {* do something *} +{/if} + +{if is_array($foo) && count($foo) > 0} + {* do a foreach loop *} +{/if} +``` diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md new file mode 100644 index 0000000..0710db7 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md @@ -0,0 +1,187 @@ +# {include} + +`{include}` tags are used for including other templates in the current +template. Any variables available in the current template are also +available within the included template. + +## Attributes + +| Attribute Name | Required | Description | +|----------------|----------|--------------------------------------------------------------------------------------------| +| file | Yes | The name of the template file to include | +| assign | No | The name of the variable that the output of include will be assigned to | +| cache_lifetime | No | Enable caching of this subtemplate with an individual cache lifetime | +| compile_id | No | Compile this subtemplate with an individual compile_id | +| cache_id | No | Enable caching of this subtemplate with an individual cache_id | +| scope | No | Define the scope of all in the subtemplate assigned variables: 'parent','root' or 'global' | +| \[var \...\] | No | variable to pass local to template | + + +- The `{include}` tag must have the `file` attribute which contains + the template resource path. + +- Setting the optional `assign` attribute specifies the template + variable that the output of `{include}` is assigned to, instead of + being displayed. Similar to [`{assign}`](./language-function-assign.md). + +- Variables can be passed to included templates as + [attributes](../language-basic-syntax/language-syntax-attributes.md). Any variables explicitly + passed to an included template are only available within the scope + of the included file. Attribute variables override current template + variables, in the case when they are named the same. + +- You can use all variables from the including template inside the + included template. But changes to variables or new created variables + inside the included template have local scope and are not visible + inside the including template after the `{include}` statement. This + default behaviour can be changed for all variables assigned in the + included template by using the scope attribute at the `{include}` + statement or for individual variables by using the scope attribute + at the [`{assign}`](./language-function-assign.md) statement. The later + is useful to return values from the included template to the + including template. + +- Use the syntax for [template resources](../../api/resources.md) to `{include}` + files outside of the [`$template_dir`](../../programmers/api-variables/variable-template-dir.md) + directory. + +## Option Flags + +| Name | Description | +|---------|--------------------------------------------------------------------------------------| +| nocache | Disables caching of this subtemplate | +| caching | Enable caching of this subtemplate | +| inline | If set, merge the compile-code of the subtemplate into the compiled calling template | + +## Examples +```smarty + + + {$title} + + + {include file='page_header.tpl'} + + {* body of template goes here, the $tpl_name variable + is replaced with a value eg 'contact.tpl' + *} + {include file="$tpl_name.tpl"} + + {* using shortform file attribute *} + {include 'page_footer.tpl'} + + +``` + +```smarty + +{include 'links.tpl' title='Newest links' links=$link_array} +{* body of template goes here *} +{include 'footer.tpl' foo='bar'} + +``` + +The template above includes the example `links.tpl` below + +```smarty +
+

{$title}

+
    + {foreach from=$links item=l} + .. do stuff ... + {/foreach} +
+
+``` +Variables assigned in the included template will be seen in the +including template. + +```smarty +{include 'sub_template.tpl' scope=parent} +... +{* display variables assigned in sub_template *} +{$foo}
+{$bar}
+... +``` + +The template above includes the example `sub_template.tpl` below + +```smarty +... +{assign var=foo value='something'} +{assign var=bar value='value'} +... +``` + +The included template will not be cached. + +```smarty +{include 'sub_template.tpl' nocache} +... +``` + +In this example included template will be cached with an individual +cache lifetime of 500 seconds. + +```smarty +{include 'sub_template.tpl' cache_lifetime=500} +... +``` + +In this example included template will be cached independent of the +global caching setting. + +```smarty +{include 'sub_template.tpl' caching} +... +``` + +This example assigns the contents of `nav.tpl` to the `$navbar` +variable, which is then output at both the top and bottom of the page. + +```smarty + + {include 'nav.tpl' assign=navbar} + {include 'header.tpl' title='Smarty is cool'} + {$navbar} + {* body of template goes here *} + {$navbar} + {include 'footer.tpl'} + +``` + +This example includes another template relative to the directory of the +current template. + +```smarty +{include 'template-in-a-template_dir-directory.tpl'} +{include './template-in-same-directory.tpl'} +{include '../template-in-parent-directory.tpl'} +``` + +```smarty +{* absolute filepath *} +{include file='/usr/local/include/templates/header.tpl'} + +{* absolute filepath (same thing) *} +{include file='file:/usr/local/include/templates/header.tpl'} + +{* windows absolute filepath (MUST use "file:" prefix) *} +{include file='file:C:/www/pub/templates/header.tpl'} + +{* include from template resource named "db" *} +{include file='db:header.tpl'} + +{* include a $variable template - eg $module = 'contacts' *} +{include file="$module.tpl"} + +{* wont work as its single quotes ie no variable substitution *} +{include file='$module.tpl'} + +{* include a multi $variable template - eg amber/links.view.tpl *} +{include file="$style_dir/$module.$view.tpl"} +``` + +See also [template resources](../../api/resources.md) and +[componentized templates](../../appendixes/tips.md#componentized-templates). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md new file mode 100644 index 0000000..e69de29 diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md new file mode 100644 index 0000000..05bc8ec --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md @@ -0,0 +1,51 @@ +# {ldelim}, {rdelim} + +`{ldelim}` and `{rdelim}` are used for [escaping](../language-basic-syntax/language-escaping.md) +template delimiters, by default **{** and **}**. You can also use +[`{literal}{/literal}`](./language-function-literal.md) to escape blocks of +text eg Javascript or CSS. See also the complementary +[`{$smarty.ldelim}`](../../designers/language-basic-syntax/language-escaping.md). + +```smarty +{* this will print literal delimiters out of the template *} + +{ldelim}funcname{rdelim} is how functions look in Smarty! +``` + +The above example will output: + +``` +{funcname} is how functions look in Smarty! +``` + +Another example with some Javascript + +```smarty + +``` + +will output + +```html + +``` + +```smarty + +Click here for Server Info +``` + +See also [`{literal}`](./language-function-literal.md) and [escaping Smarty +parsing](../language-basic-syntax/language-escaping.md). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md new file mode 100644 index 0000000..0253f26 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md @@ -0,0 +1,34 @@ +# {literal} + +`{literal}` tags allow a block of data to be taken literally. This is +typically used around Javascript or stylesheet blocks where {curly +braces} would interfere with the template +[delimiter](../../designers/language-basic-syntax/language-escaping.md) syntax. Anything within +`{literal}{/literal}` tags is not interpreted, but displayed as-is. If +you need template tags embedded in a `{literal}` block, consider using +[`{ldelim}{rdelim}`](./language-function-ldelim.md) to escape the individual +delimiters instead. + +> **Note** +> +> `{literal}{/literal}` tags are normally not necessary, as Smarty +> ignores delimiters that are surrounded by whitespace. Be sure your +> javascript and CSS curly braces are surrounded by whitespace. This is +> new behavior to Smarty 3. + +```smarty + +``` + +See also [`{ldelim} {rdelim}`](./language-function-ldelim.md) and the +[escaping Smarty parsing](../language-basic-syntax/language-escaping.md) page. diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md new file mode 100644 index 0000000..7997ecf --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md @@ -0,0 +1,20 @@ +# {nocache} + +`{nocache}` is used to disable caching of a template section. Every +`{nocache}` must be paired with a matching `{/nocache}`. + +> **Note** +> +> Be sure any variables used within a non-cached section are also +> assigned from PHP when the page is loaded from the cache. + +```smarty +Today's date is +{nocache} +{$smarty.now|date_format} +{/nocache} +``` + +The above code will output the current date on a cached page. + +See also the [caching section](../../api/caching/basics.md). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md new file mode 100644 index 0000000..afa6366 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md @@ -0,0 +1,610 @@ +# {section}, {sectionelse} + +A `{section}` is for looping over **sequentially indexed arrays of +data**, unlike [`{foreach}`](./language-function-foreach.md) which is used +to loop over a **single associative array**. Every `{section}` tag must +be paired with a closing `{/section}` tag. + +> **Note** +> +> The [`{foreach}`](./language-function-foreach.md) loop can do everything a +> {section} loop can do, and has a simpler and easier syntax. It is +> usually preferred over the {section} loop. + +> **Note** +> +> {section} loops cannot loop over associative arrays, they must be +> numerically indexed, and sequential (0,1,2,\...). For associative +> arrays, use the [`{foreach}`](./language-function-foreach.md) loop. + + +## Attributes + +| Attribute Name | Required | Description | +|----------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| name | Yes | The name of the section | +| loop | Yes | Value to determine the number of loop iterations | +| start | No | The index position that the section will begin looping. If the value is negative, the start position is calculated from the end of the array. For example, if there are seven values in the loop array and start is -2, the start index is 5. Invalid values (values outside of the length of the loop array) are automatically truncated to the closest valid value. Defaults to 0. | +| step | No | The step value that will be used to traverse the loop array. For example, step=2 will loop on index 0, 2, 4, etc. If step is negative, it will step through the array backwards. Defaults to 1. | +| max | No | Sets the maximum number of times the section will loop. | +| show | No | Determines whether to show this section (defaults to true) | + +## Option Flags + +| Name | Description | +|---------|------------------------------------------| +| nocache | Disables caching of the `{section}` loop | + +- Required attributes are `name` and `loop`. + +- The `name` of the `{section}` can be anything you like, made up of + letters, numbers and underscores, like [PHP + variables](https://www.php.net/language.variables). + +- {section}'s can be nested, and the nested `{section}` names must be + unique from each other. + +- The `loop` attribute, usually an array of values, determines the + number of times the `{section}` will loop. You can also pass an + integer as the loop value. + +- When printing a variable within a `{section}`, the `{section}` + `name` must be given next to variable name within \[brackets\]. + +- `{sectionelse}` is executed when there are no values in the loop + variable. + +- A `{section}` also has its own variables that handle `{section}` + properties. These properties are accessible as: + [`{$smarty.section.name.property}`](../language-variables/language-variables-smarty.md#smartysection-languagevariablessmartyloops) + where "name" is the attribute `name`. + +- `{section}` properties are [`index`](#index), + [`index_prev`](#index_prev), + [`index_next`](#index_next), + [`iteration`](#iteration), + [`first`](#first), + [`last`](#last), + [`rownum`](#rownum), + [`loop`](#loop), [`show`](#show), + [`total`](#total). + +[`assign()`](../../programmers/api-functions/api-assign.md) an array to Smarty + +## Examples + +```php +assign('custid', $data); +``` + +The template that outputs the array + +```smarty +{* this example will print out all the values of the $custid array *} +{section name=customer loop=$custid} +{section customer $custid} {* short-hand *} + id: {$custid[customer]}
+{/section} +
+{* print out all the values of the $custid array reversed *} +{section name=foo loop=$custid step=-1} +{section foo $custid step=-1} {* short-hand *} + {$custid[foo]}
+{/section} +``` + +The above example will output: + +```html +id: 1000
+id: 1001
+id: 1002
+
+id: 1002
+id: 1001
+id: 1000
+``` + +```smarty +{section name=foo start=10 loop=20 step=2} + {$smarty.section.foo.index} +{/section} +
+{section name=bar loop=21 max=6 step=-2} + {$smarty.section.bar.index} +{/section} +``` + +The above example will output: + +```html +10 12 14 16 18 +
+20 18 16 14 12 10 +``` + +The `name` of the `{section}` can be anything you like, see [PHP +variables](https://www.php.net/language.variables). It is used to reference +the data within the `{section}`. + +```smarty +{section name=anything loop=$myArray} + {$myArray[anything].foo} + {$name[anything]} + {$address[anything].bar} +{/section} +``` + +This is an example of printing an associative array of data with a +`{section}`. Following is the php script to assign the `$contacts` array +to Smarty. + +```php + 'John Smith', 'home' => '555-555-5555', + 'cell' => '666-555-5555', 'email' => 'john@myexample.com'], + ['name' => 'Jack Jones', 'home' => '777-555-5555', + 'cell' => '888-555-5555', 'email' => 'jack@myexample.com'], + ['name' => 'Jane Munson', 'home' => '000-555-5555', + 'cell' => '123456', 'email' => 'jane@myexample.com'] +]; +$smarty->assign('contacts',$data); +``` + +The template to output `$contacts` + +```smarty +{section name=customer loop=$contacts} +

+ name: {$contacts[customer].name}
+ home: {$contacts[customer].home}
+ cell: {$contacts[customer].cell}
+ e-mail: {$contacts[customer].email} +

+{/section} +``` + +The above example will output: + +```html +

+ name: John Smith
+ home: 555-555-5555
+ cell: 666-555-5555
+ e-mail: john@myexample.com +

+

+ name: Jack Jones
+ home phone: 777-555-5555
+ cell phone: 888-555-5555
+ e-mail: jack@myexample.com +

+

+ name: Jane Munson
+ home phone: 000-555-5555
+ cell phone: 123456
+ e-mail: jane@myexample.com +

+``` + +This example assumes that `$custid`, `$name` and `$address` are all +arrays containing the same number of values. First the php script that +assign's the arrays to Smarty. + +```php +assign('custid',$id); + +$fullnames = ['John Smith','Jack Jones','Jane Munson']; +$smarty->assign('name',$fullnames); + +$addr = ['253 Abbey road', '417 Mulberry ln', '5605 apple st']; +$smarty->assign('address',$addr); +``` + +The `loop` variable only determines the number of times to loop. You can +access ANY variable from the template within the `{section}`. This is +useful for looping multiple arrays. You can pass an array which will +determine the loop count by the array size, or you can pass an integer +to specify the number of loops. + +```smarty +{section name=customer loop=$custid} +

+ id: {$custid[customer]}
+ name: {$name[customer]}
+ address: {$address[customer]} +

+{/section} +``` + +The above example will output: + +```html +

+ id: 1000
+ name: John Smith
+ address: 253 Abbey road +

+

+ id: 1001
+ name: Jack Jones
+ address: 417 Mulberry ln +

+

+ id: 1002
+ name: Jane Munson
+ address: 5605 apple st +

+``` + +{section}'s can be nested as deep as you like. With nested +{section}'s, you can access complex data structures, such as +multidimensional arrays. This is an example `.php` script that +assigns the arrays. + +```php +assign('custid',$id); + +$fullnames = ['John Smith','Jack Jones','Jane Munson']; +$smarty->assign('name',$fullnames); + +$addr = ['253 N 45th', '417 Mulberry ln', '5605 apple st']; +$smarty->assign('address',$addr); + +$types = [ + [ 'home phone', 'cell phone', 'e-mail'], + [ 'home phone', 'web'], + [ 'cell phone'] + ]; +$smarty->assign('contact_type', $types); + +$info = [ + ['555-555-5555', '666-555-5555', 'john@myexample.com'], + [ '123-456-4', 'www.example.com'], + [ '0457878'] + ]; +$smarty->assign('contact_info', $info); +``` + +In this template, *$contact_type\[customer\]* is an array of contact +types for the current customer. + +```smarty +{section name=customer loop=$custid} +
+ id: {$custid[customer]}
+ name: {$name[customer]}
+ address: {$address[customer]}
+ {section name=contact loop=$contact_type[customer]} + {$contact_type[customer][contact]}: {$contact_info[customer][contact]}
+ {/section} +{/section} +``` + +The above example will output: + +```html +
+ id: 1000
+ name: John Smith
+ address: 253 N 45th
+ home phone: 555-555-5555
+ cell phone: 666-555-5555
+ e-mail: john@myexample.com
+
+ id: 1001
+ name: Jack Jones
+ address: 417 Mulberry ln
+ home phone: 123-456-4
+ web: www.example.com
+
+ id: 1002
+ name: Jane Munson
+ address: 5605 apple st
+ cell phone: 0457878
+``` + +Results of a database search (eg ADODB or PEAR) are assigned to Smarty + +```php +assign('contacts', $db->getAll($sql)); +``` + +The template to output the database result in a HTML table + +```smarty + + + {section name=co loop=$contacts} + + + + + + + + {sectionelse} + + {/section} +
 NameHomeCellEmail
view{$contacts[co].name}{$contacts[co].home}{$contacts[co].cell}{$contacts[co].email}
No items found
+``` + +## .index +`index` contains the current array index, starting with zero or the +`start` attribute if given. It increments by one or by the `step` +attribute if given. + +> **Note** +> +> If the `step` and `start` properties are not modified, then this works +> the same as the [`iteration`](#iteration) property, +> except it starts at zero instead of one. + +> **Note** +> +> `$custid[customer.index]` and `$custid[customer]` are identical. + +```smarty +{section name=customer loop=$custid} + {$smarty.section.customer.index} id: {$custid[customer]}
+{/section} +``` + +The above example will output: + +```html +0 id: 1000
+1 id: 1001
+2 id: 1002
+``` + + +## .index_prev + +`index_prev` is the previous loop index. On the first loop, this is set to -1. + +## .index_next + +`index_next` is the next loop index. On the last loop, this is still one +more than the current index, respecting the setting of the `step` +attribute, if given. + +```php +assign('rows',$data); +``` + +Template to output the above array in a table + +```smarty +{* $rows[row.index] and $rows[row] are identical in meaning *} + + + + + + +{section name=row loop=$rows} + + + + + +{/section} +
indexidindex_prevprev_idindex_nextnext_id
{$smarty.section.row.index}{$rows[row]}{$smarty.section.row.index_prev}{$rows[row.index_prev]}{$smarty.section.row.index_next}{$rows[row.index_next]}
+``` + +The above example will output a table containing the following: + +``` + index id index_prev prev_id index_next next_id + 0 1001 -1 1 1002 + 1 1002 0 1001 2 1003 + 2 1003 1 1002 3 1004 + 3 1004 2 1003 4 1005 + 4 1005 3 1004 5 +``` + +## .iteration + +`iteration` contains the current loop iteration and starts at one. + +> **Note** +> +> This is not affected by the `{section}` properties `start`, `step` and +> `max`, unlike the [`index`](#index) property. +> `iteration` also starts with one instead of zero unlike `index`. +> [`rownum`](#rownum) is an alias to `iteration`, they +> are identical. + +```php +assign('arr', $id); +``` + +Template to output every other element of the `$arr` array as `step=2` + +```smarty +{section name=cu loop=$arr start=5 step=2} + iteration={$smarty.section.cu.iteration} + index={$smarty.section.cu.index} + id={$custid[cu]}
+{/section} +``` + +The above example will output: + +```html +iteration=1 index=5 id=3005
+iteration=2 index=7 id=3007
+iteration=3 index=9 id=3009
+iteration=4 index=11 id=3011
+iteration=5 index=13 id=3013
+iteration=6 index=15 id=3015
+``` + +Another example that uses the `iteration` property to output a table +header block every five rows. + +```smarty + + {section name=co loop=$contacts} + {if $smarty.section.co.iteration is div by 5} + + {/if} + + + + + + + + {/section} +
 NameHomeCellEmail
view{$contacts[co].name}{$contacts[co].home}{$contacts[co].cell}{$contacts[co].email}
+``` + +An example that uses the `index` property to alternate a text color every +third row. + +```smarty + + {section name=co loop=$contacts} + {if $smarty.section.co.index is even by 3} + {$contacts[co].name} + {else} + {$contacts[co].name} + {/if} + {/section} +
+``` + +> **Note** +> +> The *"is div by"* syntax is a simpler alternative to the PHP mod +> operator syntax. The mod operator is allowed: +> `{if $smarty.section.co.iteration % 5 == 1}` will work just the same. + +> **Note** +> +> You can also use *"is odd by"* to reverse the alternating. + +## .first + +`first` is set to TRUE if the current `{section}` iteration is the initial one. + +## .last + +`last` is set to TRUE if the current section iteration is the final one. + +This example loops the `$customers` array, outputs a header block on the +first iteration and on the last outputs the footer block. Also uses the +[`total`](#total) property. + +```smarty +{section name=customer loop=$customers} + {if $smarty.section.customer.first} + + + {/if} + + + + + + + {if $smarty.section.customer.last} + +
idcustomer
{$customers[customer].id}}{$customers[customer].name}
{$smarty.section.customer.total} customers
+ {/if} +{/section} +``` + +## .rownum + +`rownum` contains the current loop iteration, starting with one. It is +an alias to [`iteration`](#iteration), they work +identically. + +## .loop + +`loop` contains the last index number that this {section} looped. This +can be used inside or after the `{section}`. + +```smarty +{section name=customer loop=$custid} + {$smarty.section.customer.index} id: {$custid[customer]}
+{/section} +There are {$smarty.section.customer.loop} customers shown above. +``` + +The above example will output: + +```html +0 id: 1000
+1 id: 1001
+2 id: 1002
+There are 3 customers shown above. +``` + +## .show + +`show` is used as a parameter to section and is a boolean value. If +FALSE, the section will not be displayed. If there is a `{sectionelse}` +present, that will be alternately displayed. + +Boolean `$show_customer_info` has been passed from the PHP application, +to regulate whether this section shows. + +```smarty +{section name=customer loop=$customers show=$show_customer_info} + {$smarty.section.customer.rownum} id: {$customers[customer]}
+{/section} + +{if $smarty.section.customer.show} + the section was shown. +{else} + the section was not shown. +{/if} +``` + +The above example will output: + +```html +1 id: 1000
+2 id: 1001
+3 id: 1002
+ +the section was shown. +``` + + +## .total + +`total` contains the number of iterations that this `{section}` will +loop. This can be used inside or after a `{section}`. + +```smarty +{section name=customer loop=$custid step=2} + {$smarty.section.customer.index} id: {$custid[customer]}
+{/section} + There are {$smarty.section.customer.total} customers shown above. +``` + +See also [`{foreach}`](./language-function-foreach.md), +[`{for}`](./language-function-for.md), [`{while}`](./language-function-while.md) +and [`$smarty.section`](../language-variables/language-variables-smarty.md#smartysection-languagevariablessmartyloops). diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-setfilter.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-setfilter.md new file mode 100644 index 0000000..eb11cbf --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-setfilter.md @@ -0,0 +1,43 @@ +# {setfilter} + +The `{setfilter}...{/setfilter}` block tag allows the definition of +template instance's variable filters. + +SYNTAX: `{setfilter filter1\|filter2\|filter3\....}\...{/setfilter}` + +The filter can be: + +- A variable filter plugin specified by it's name. + +- A modifier specified by it's name and optional additional + parameter. + +`{setfilter}...{/setfilter}` blocks can be nested. The filter definition +of inner blocks does replace the definition of the outer block. + +Template instance filters run in addition to other modifiers and +filters. They run in the following order: modifier, default_modifier, +$escape_html, registered variable filters, autoloaded variable +filters, template instance's variable filters. Everything after +default_modifier can be disabled with the `nofilter` flag. + +> **Note** +> +> The setting of template instance filters does not affect the output of +> included subtemplates. + +## Examples + +```smarty + +``` + diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-strip.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-strip.md new file mode 100644 index 0000000..800de84 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-strip.md @@ -0,0 +1,45 @@ +# {strip} + +Many times web designers run into the issue where white space and +carriage returns affect the output of the rendered HTML (browser +"features"), so you must run all your tags together in the template to +get the desired results. This usually ends up in unreadable or +unmanageable templates. + +Anything within `{strip}{/strip}` tags are stripped of the extra spaces +or carriage returns at the beginnings and ends of the lines before they +are displayed. This way you can keep your templates readable, and not +worry about extra white space causing problems. + +> **Note** +> +> `{strip}{/strip}` does not affect the contents of template variables, +> see the [strip modifier](../language-modifiers/language-modifier-strip.md) instead. + +```smarty +{* the following will be all run into one line upon output *} +{strip} + + + + +
+ + This is a test + +
+{/strip} +``` + +The above example will output: + +```html +
This is a test
+``` + +Notice that in the above example, all the lines begin and end with HTML +tags. Be aware that all the lines are run together. If you have plain +text at the beginning or end of any line, they will be run together, and +may not be desired results. + +See also the [`strip`](../language-modifiers/language-modifier-strip.md) modifier. diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md new file mode 100644 index 0000000..d0a4b2f --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md @@ -0,0 +1,20 @@ +# {while} + +`{while}` loops in Smarty have much the same flexibility as PHP +[while](https://www.php.net/while) statements, with a few added features for +the template engine. Every `{while}` must be paired with a matching +`{/while}`. All [operators](../language-basic-syntax/language-syntax-operators.md) are recognized, such as *==*, +*\|\|*, *or*, *&&*, *and*, etc and you can use modifiers as functions, such as *is_array()*. + +## Examples +```smarty +{while $foo > 0} + {$foo--} +{/while} +``` + +The above example will count down the value of $foo until 1 is reached. + +See also [`{foreach}`](./language-function-foreach.md), +[`{for}`](./language-function-for.md) and +[`{section}`](./language-function-section.md). diff --git a/vendor/smarty/smarty/docs/designers/language-combining-modifiers.md b/vendor/smarty/smarty/docs/designers/language-combining-modifiers.md new file mode 100644 index 0000000..97903c5 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-combining-modifiers.md @@ -0,0 +1,32 @@ +# Combining Modifiers + +You can apply any number of modifiers to a variable. They will be +applied in the order they are combined, from left to right. They must be +separated with a `|` (pipe) character. + +```php +assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.'); +``` + +where template is: + +```smarty +{$articleTitle} +{$articleTitle|upper|spacify} +{$articleTitle|lower|spacify|truncate} +{$articleTitle|lower|truncate:30|spacify} +{$articleTitle|lower|spacify|truncate:30:". . ."} +``` + + +The above example will output: + +``` +Smokers are Productive, but Death Cuts Efficiency. +S M O K E R S A R ....snip.... H C U T S E F F I C I E N C Y . +s m o k e r s a r ....snip.... b u t d e a t h c u t s... +s m o k e r s a r e p r o d u c t i v e , b u t . . . +s m o k e r s a r e p. . . +``` diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/index.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/index.md new file mode 100644 index 0000000..2c1d9b7 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/index.md @@ -0,0 +1,19 @@ +# Custom Tags + +Smarty comes with several custom plugin functions that you can use in +the templates. + +- [{counter}](language-function-counter.md) +- [{cycle}](language-function-cycle.md) +- [{eval}](language-function-eval.md) +- [{fetch}](language-function-fetch.md) +- [{html_checkboxes}](language-function-html-checkboxes.md) +- [{html_image}](language-function-html-image.md) +- [{html_options}](language-function-html-options.md) +- [{html_radios}](language-function-html-radios.md) +- [{html_select_date}](language-function-html-select-date.md) +- [{html_select_time}](language-function-html-select-time.md) +- [{html_table}](language-function-html-table.md) +- [{mailto}](language-function-mailto.md) +- [{math}](language-function-math.md) +- [{textformat}](language-function-textformat.md) diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-counter.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-counter.md new file mode 100644 index 0000000..de04c2f --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-counter.md @@ -0,0 +1,45 @@ +# {counter} + +`{counter}` is used to print out a count. `{counter}` will remember the +count on each iteration. You can adjust the number, the interval and the +direction of the count, as well as determine whether to print the +value. You can run multiple counters concurrently by supplying a unique +name for each one. If you do not supply a name, the name "default" will +be used. + +## Attributes + +| Attribute Name | Required | Description | +|----------------|----------|-----------------------------------------------------------| +| name | No | The name of the counter | +| start | No | The initial number to start counting from (defaults to 1) | +| skip | No | The interval to count by (defaults to 1) | +| direction | No | The direction to count (up/down) (defaults to 'up') | +| print | No | Whether or not to print the value (defaults to true) | +| assign | No | the template variable the output will be assigned to | + +If you supply the `assign` attribute, the output of the `{counter}` +function will be assigned to this template variable instead of being +output to the template. + +## Examples + +```smarty + +{* initialize the count *} +{counter start=0 skip=2}
+{counter}
+{counter}
+{counter}
+ +``` + +this will output: + +```html +0
+2
+4
+6
+``` + diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-cycle.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-cycle.md new file mode 100644 index 0000000..661e490 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-cycle.md @@ -0,0 +1,55 @@ +# {cycle} + +`{cycle}` is used to alternate a set of values. This makes it easy to +for example, alternate between two or more colors in a table, or cycle +through an array of values. + +## Attributes + +| Attribute Name | Required | Description | +|----------------|----------|-------------------------------------------------------------------------------------------------------------| +| name | No | The name of the cycle | +| values | Yes | The values to cycle through, either a comma delimited list (see delimiter attribute), or an array of values | +| print | No | Whether to print the value or not (defaults to true) | +| advance | No | Whether or not to advance to the next value (defaults to true) | +| delimiter | No | The delimiter to use in the values attribute (defaults to ',') | +| assign | No | The template variable the output will be assigned to | +| reset | No | The cycle will be set to the first value and not advanced (defaults to false) | + +- You can `{cycle}` through more than one set of values in a template + by supplying a `name` attribute. Give each `{cycle}` a unique + `name`. + +- You can force the current value not to print with the `print` + attribute set to FALSE. This would be useful for silently skipping a + value. + +- The `advance` attribute is used to repeat a value. When set to + FALSE, the next call to `{cycle}` will print the same value. + +- If you supply the `assign` attribute, the output of the `{cycle}` + function will be assigned to a template variable instead of being + output to the template. + +## Examples +```smarty +{section name=rows loop=$data} + + {$data[rows]} + +{/section} +``` + +The above template would output: + +```html + + 1 + + + 2 + + + 3 + +``` diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-debug.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-debug.md new file mode 100644 index 0000000..7886145 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-debug.md @@ -0,0 +1,14 @@ +# {debug} + +`{debug}` dumps the debug console to the page. This works regardless of +the [debug](../chapter-debugging-console.md) settings in the php script. +Since this gets executed at runtime, this is only able to show the +[assigned](../../programmers/api-functions/api-assign.md) variables; not the templates that are in use. +However, you can see all the currently available variables within the +scope of a template. + +| Attribute Name | Required | Description | +|----------------|----------|------------------------------------------------------------| +| output | No | output type, html or javascript (defaults to 'javascript') | + +See also the [debugging console page](../chapter-debugging-console.md). diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md new file mode 100644 index 0000000..e44862c --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md @@ -0,0 +1,81 @@ +# {eval} + +`{eval}` is used to evaluate a variable as a template. This can be used +for things like embedding template tags/variables into variables or +tags/variables into config file variables. + +## Attributes + +| Attribute Name | Required | Description | +|----------------|----------|------------------------------------------------------| +| var | Yes | Variable (or string) to evaluate | +| assign | No | The template variable the output will be assigned to | + +If you supply the `assign` attribute, the output of the `{eval}` +function will be assigned to this template variable instead of being +output to the template. + +> **Note** +> +> - Evaluated variables are treated the same as templates. They follow +> the same escapement and security features just as if they were +> templates. +> +> - Evaluated variables are compiled on every invocation, the compiled +> versions are not saved! However, if you have [caching](../../api/caching/basics.md) +> enabled, the output will be cached with the rest of the template. +> +> - If the content to evaluate doesn't change often, or is used +> repeatedly, consider using +> `{include file="string:{$template_code}"}` instead. This may cache +> the compiled state and thus doesn't have to run the (comparably +> slow) compiler on every invocation. + +## Examples + +The contents of the config file, `setup.conf`. + +```ini +emphstart = +emphend = +title = Welcome to {$company}'s home page! +ErrorCity = You must supply a {#emphstart#}city{#emphend#}. +ErrorState = You must supply a {#emphstart#}state{#emphend#}. +``` + +Where the template is: + +```smarty +{config_load file='setup.conf'} + +{eval var=$foo} +{eval var=#title#} +{eval var=#ErrorCity#} +{eval var=#ErrorState# assign='state_error'} +{$state_error} +``` + +The above template will output: + +```html +This is the contents of foo. +Welcome to Foobar Pub & Grill's home page! +You must supply a city. +You must supply a state. +``` + +This outputs the server name (in uppercase) and IP. The assigned +variable `$str` could be from a database query. + +```php +assign('foo',$str); +``` + +Where the template is: + +```smarty +{eval var=$foo} +``` diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md new file mode 100644 index 0000000..a2f07f3 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md @@ -0,0 +1,61 @@ +# {fetch} + +`{fetch}` is used to retrieve files from the local file system, http, or +ftp and display the contents. + +## Attributes +| Attribute | Required | Description | +|-----------|----------|------------------------------------------------------| +| file | Yes | The file, http or ftp site to fetch | +| assign | No | The template variable the output will be assigned to | + +- If the file name begins with `http://`, the website page will be + fetched and displayed. + + > **Note** + > + > This will not support http redirects, be sure to include a + > trailing slash on your web page fetches where necessary. + +- If the file name begins with `ftp://`, the file will be downloaded + from the ftp server and displayed. + +- For local files, either a full system file path must be given, or a + path relative to the executed php script. + + > **Note** + > + > If security is enabled, and you are fetching a file from the local + > file system, `{fetch}` will only allow files from within the + > `$secure_dir` path of the security policy. See the + > [Security](../../api/security.md) section for details. + +- If the `assign` attribute is set, the output of the `{fetch}` + function will be assigned to this template variable instead of being + output to the template. + +## Examples + +```smarty +{* include some javascript in your template *} +{fetch file='/export/httpd/www.example.com/docs/navbar.js'} + +{* embed some weather text in your template from another web site *} +{fetch file='http://www.myweather.com/68502/'} + +{* fetch a news headline file via ftp *} +{fetch file='ftp://user:password@ftp.example.com/path/to/currentheadlines.txt'} +{* as above but with variables *} +{fetch file="ftp://`$user`:`$password`@`$server`/`$path`"} + +{* assign the fetched contents to a template variable *} +{fetch file='http://www.myweather.com/68502/' assign='weather'} +{if $weather ne ''} +
{$weather}
+{/if} +``` + + +See also [`{capture}`](../language-builtin-functions/language-function-capture.md), +[`{eval}`](language-function-eval.md), +[`{assign}`](../language-builtin-functions/language-function-assign.md) and [`fetch()`](../../programmers/api-functions/api-fetch.md). diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-checkboxes.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-checkboxes.md new file mode 100644 index 0000000..3ab3609 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-checkboxes.md @@ -0,0 +1,102 @@ +# {html_checkboxes} + +`{html_checkboxes}` is a [custom function](index.md) +that creates an html checkbox group with provided data. It takes care of +which item(s) are selected by default as well. + +## Attributes + +| Attribute Name | Required | Description | +|----------------|-------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| name | No | Name of checkbox list (defaults to 'checkbox') | +| values | Yes, unless using options attribute | An array of values for checkbox buttons | +| output | Yes, unless using options attribute | An array of output for checkbox buttons | +| selected | No | The selected checkbox element(s) as a string or array | +| options | Yes, unless using values and output | An associative array of values and output | +| separator | No | String of text to separate each checkbox item | +| assign | No | Assign checkbox tags to an array instead of output | +| labels | No | Add -tags to the output (defaults to true) | +| label\_ids | No | Add id-attributes to and to the output (defaults to false) | +| escape | No | Escape the output / content (values are always escaped) (defaults to true) | +| strict | No | Will make the "extra" attributes *disabled* and *readonly* only be set, if they were supplied with either boolean *TRUE* or string *"disabled"* and *"readonly"* respectively (defaults to false) | + +- Required attributes are `values` and `output`, unless you use `options` instead. + +- All output is XHTML compliant. + +- All parameters that are not in the list above are printed as + name/value-pairs inside each of the created -tags. + +## Examples +```php +assign('cust_ids', array(1000,1001,1002,1003)); +$smarty->assign('cust_names', array( + 'Joe Schmoe', + 'Jack Smith', + 'Jane Johnson', + 'Charlie Brown') + ); +$smarty->assign('customer_id', 1001); +``` + +where template is + +```smarty +{html_checkboxes name='id' values=$cust_ids output=$cust_names selected=$customer_id separator='
'} +``` + +or where PHP code is: + +```php +assign( + 'cust_checkboxes', + [ + 1000 => 'Joe Schmoe', + 1001 => 'Jack Smith', + 1002 => 'Jane Johnson', + 1003 => 'Charlie Brown', + ] +); +$smarty->assign('customer_id', 1001); +``` + +and the template is + +```smarty +{html_checkboxes name='id' options=$cust_checkboxes selected=$customer_id separator='
'} +``` + +both examples will output: + +```html +
+ +
+
+
+``` + + +```php +assign('contact_types',$db->getAssoc($sql)); + +$sql = 'select contact_id, contact_type_id, contact ' + .'from contacts where contact_id=12'; +$smarty->assign('contact',$db->getRow($sql)); +``` + +The results of the database queries above would be output with. + +```smarty +{html_checkboxes name='contact_type_id' options=$contact_types selected=$contact.contact_type_id separator='
'} +``` + +See also [`{html_radios}`](./language-function-html-radios.md) and +[`{html_options}`](./language-function-html-options.md) diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md new file mode 100644 index 0000000..0ae02ca --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md @@ -0,0 +1,58 @@ +# {html_image} + +`{html_image}` is a [custom function](index.md) that +generates an HTML `` tag. The `height` and `width` are +automatically calculated from the image file if they are not supplied. + +## Attributes + +| Attribute Name | Required | Description | +|----------------|----------|-------------------------------------------------------------------------| +| file | Yes | name/path to image | +| height | No | Height to display image (defaults to actual image height) | +| width | No | Width to display image (defaults to actual image width) | +| basedir | no | Directory to base relative paths from (defaults to web server doc root) | +| alt | no | Alternative description of the image | +| href | no | href value to link the image to | +| path\_prefix | no | Prefix for output path | + +- `basedir` is the base directory that relative image paths are based + from. If not given, the web server's document root + `$_ENV['DOCUMENT_ROOT']` is used as the base. If security is + enabled, then the image must be located in the `$secure_dir` path of + the security policy. See the [Security](../../api/security.md) + section for details. + +- `href` is the href value to link the image to. If link is supplied, + an `` tag is placed around the image tag. + +- `path_prefix` is an optional prefix string you can give the output + path. This is useful if you want to supply a different server name + for the image. + +- All parameters that are not in the list above are printed as + name/value-pairs inside the created `` tag. + +> **Note** +> +> `{html_image}` requires a hit to the disk to read the image and +> calculate the height and width. If you don't use template +> [caching](../../api/caching/basics.md), it is generally better to avoid `{html_image}` +> and leave image tags static for optimal performance. + +## Examples + +```smarty +{html_image file='pumpkin.jpg'} +{html_image file='/path/from/docroot/pumpkin.jpg'} +{html_image file='../path/relative/to/currdir/pumpkin.jpg'} +``` + +Example output of the above template would be: + +```html + + + +``` + diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-options.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-options.md new file mode 100644 index 0000000..a63ccc5 --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-options.md @@ -0,0 +1,146 @@ +# {html_options} + +`{html_options}` is a [custom function](index.md) that +creates the html `` + tags are created, otherwise ONLY the ``, and display the groups. Recursion is supported with + ``. + +- All parameters that are not in the list above are printed as + name/value-pairs inside the `` tags. + +```smarty +{html_options name=foo options=$myOptions selected=$mySelect} +``` + +Output of the above example would be: + +```html + +``` + +```php +assign('cust_ids', [56,92,13]); +$smarty->assign('cust_names', [ + 'Joe Schmoe', + 'Jane Johnson', + 'Charlie Brown']); +$smarty->assign('customer_id', 92); +``` + +The above arrays would be output with the following template (note the +use of the php [`count()`](https://www.php.net/function.count) function as a +modifier to set the select size). + +```smarty + +``` + +The above example would output: + +```html + +``` + +```php +assign('contact_types',$db->getAssoc($sql)); + +$sql = 'select contact_id, name, email, contact_type_id + from contacts where contact_id='.$contact_id; +$smarty->assign('contact',$db->getRow($sql)); + +``` + +Where a template could be as follows. Note the use of the +[`truncate`](../language-modifiers/language-modifier-truncate.md) modifier. + +```smarty + +``` + +```php + 'Golf', 9 => 'Cricket',7 => 'Swim'); +$arr['Rest'] = array(3 => 'Sauna',1 => 'Massage'); +$smarty->assign('lookups', $arr); +$smarty->assign('fav', 7); +``` + +The script above and the following template + +```smarty +{html_options name=foo options=$lookups selected=$fav} +``` + +would output: + +```html + +``` + +See also [`{html_checkboxes}`](./language-function-html-checkboxes.md) and +[`{html_radios}`](./language-function-html-radios.md) diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-radios.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-radios.md new file mode 100644 index 0000000..af8ecda --- /dev/null +++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-radios.md @@ -0,0 +1,104 @@ +# {html_radios} + +`{html_radios}` is a [custom function](index.md) that +creates an HTML radio button group. It also takes care of which item is +selected by default as well. + +## Attributes + +| Attribute Name | Required | Description | +|----------------|-------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| name | No | Name of radio list | +| values | Yes, unless using options attribute | An array of values for radio buttons | +| output | Yes, unless using options attribute | An array of output for radio buttons | +| selected | No | The selected radio element | +| options | Yes, unless using values and output | An associative array of values and output | +| separator | No | String of text to separate each radio item | +| assign | No | Assign radio tags to an array instead of output | +| labels | No | Add