From 6417841e2092dafa071292cebe95cd960978b742 Mon Sep 17 00:00:00 2001 From: Thomas Eiling Date: Wed, 30 Mar 2016 22:55:31 +0200 Subject: [PATCH 1/9] adding composer.json and a basic configuration removing smarty from git and load it via composer --- .gitignore | 1 + htdocs/composer.json | 34 + htdocs/composer.lock | 1234 +++++++++ htdocs/editcache.php | 1931 +++++++------- htdocs/index.php | 1 + htdocs/lib/common.inc.php | 1584 ++++++----- htdocs/lib2/OcHTMLPurifier.class.php | 1 - htdocs/lib2/OcSmarty.class.php | 24 +- htdocs/lib2/mail.class.php | 4 +- htdocs/lib2/smarty/Config_File.class.php | 393 --- htdocs/lib2/smarty/Smarty.class.php | 1960 -------------- htdocs/lib2/smarty/Smarty_Compiler.class.php | 2365 ----------------- htdocs/lib2/smarty/debug.tpl | 157 -- htdocs/lib2/smarty/index.html | 0 .../core.assemble_plugin_filepath.php | 67 - .../core.assign_smarty_interface.php | 43 - .../internals/core.create_dir_structure.php | 79 - .../internals/core.display_debug_console.php | 61 - .../internals/core.get_include_path.php | 44 - .../smarty/internals/core.get_microtime.php | 23 - .../internals/core.get_php_resource.php | 80 - .../lib2/smarty/internals/core.is_secure.php | 59 - .../lib2/smarty/internals/core.is_trusted.php | 47 - .../smarty/internals/core.load_plugins.php | 125 - .../internals/core.load_resource_plugin.php | 74 - .../internals/core.process_cached_inserts.php | 71 - .../core.process_compiled_include.php | 37 - .../smarty/internals/core.read_cache_file.php | 101 - htdocs/lib2/smarty/internals/core.rm_auto.php | 74 - htdocs/lib2/smarty/internals/core.rmdir.php | 54 - .../internals/core.run_insert_handler.php | 71 - .../internals/core.smarty_include_php.php | 50 - .../internals/core.write_cache_file.php | 96 - .../internals/core.write_compiled_include.php | 91 - .../core.write_compiled_resource.php | 35 - .../lib2/smarty/internals/core.write_file.php | 54 - htdocs/lib2/smarty/internals/index.html | 0 .../lib2/smarty/ocplugins/block.nocache.php | 50 - htdocs/lib2/smarty/ocplugins/block.t.php | 85 - .../ocplugins/function.array_search.php | 22 - .../smarty/ocplugins/function.coordinput.php | 72 - .../lib2/smarty/ocplugins/function.season.php | 42 - htdocs/lib2/smarty/ocplugins/index.html | 0 .../smarty/ocplugins/modifier.hyperlink.php | 58 - .../smarty/ocplugins/modifier.rot13html.php | 68 - .../smarty/ocplugins/outputfilter.session.php | 55 - htdocs/lib2/smarty/ocplugins/prefilter.t.php | 261 -- .../lib2/smarty/plugins/block.textformat.php | 103 - .../lib2/smarty/plugins/compiler.assign.php | 40 - .../plugins/function.assign_debug_info.php | 40 - .../smarty/plugins/function.config_load.php | 142 - .../lib2/smarty/plugins/function.counter.php | 80 - htdocs/lib2/smarty/plugins/function.cycle.php | 102 - htdocs/lib2/smarty/plugins/function.debug.php | 35 - htdocs/lib2/smarty/plugins/function.eval.php | 49 - htdocs/lib2/smarty/plugins/function.fetch.php | 221 -- .../plugins/function.html_checkboxes.php | 143 - .../smarty/plugins/function.html_image.php | 142 - .../smarty/plugins/function.html_options.php | 122 - .../smarty/plugins/function.html_radios.php | 156 -- .../plugins/function.html_select_date.php | 331 --- .../plugins/function.html_select_time.php | 194 -- .../smarty/plugins/function.html_table.php | 177 -- .../lib2/smarty/plugins/function.mailto.php | 165 -- htdocs/lib2/smarty/plugins/function.math.php | 85 - htdocs/lib2/smarty/plugins/function.popup.php | 119 - .../smarty/plugins/function.popup_init.php | 40 - htdocs/lib2/smarty/plugins/index.html | 0 .../smarty/plugins/modifier.capitalize.php | 43 - htdocs/lib2/smarty/plugins/modifier.cat.php | 33 - .../plugins/modifier.count_characters.php | 32 - .../plugins/modifier.count_paragraphs.php | 29 - .../plugins/modifier.count_sentences.php | 29 - .../smarty/plugins/modifier.count_words.php | 33 - .../smarty/plugins/modifier.date_format.php | 58 - .../plugins/modifier.debug_print_var.php | 90 - .../lib2/smarty/plugins/modifier.default.php | 32 - .../lib2/smarty/plugins/modifier.escape.php | 93 - .../lib2/smarty/plugins/modifier.indent.php | 28 - htdocs/lib2/smarty/plugins/modifier.lower.php | 26 - htdocs/lib2/smarty/plugins/modifier.nl2br.php | 35 - .../smarty/plugins/modifier.regex_replace.php | 48 - .../lib2/smarty/plugins/modifier.replace.php | 30 - .../lib2/smarty/plugins/modifier.spacify.php | 30 - .../smarty/plugins/modifier.string_format.php | 29 - htdocs/lib2/smarty/plugins/modifier.strip.php | 33 - .../smarty/plugins/modifier.strip_tags.php | 32 - .../plugins/modifier.to_readable_size.php | 50 - .../lib2/smarty/plugins/modifier.truncate.php | 50 - htdocs/lib2/smarty/plugins/modifier.upper.php | 26 - .../lib2/smarty/plugins/modifier.wordwrap.php | 29 - .../plugins/outputfilter.trimwhitespace.php | 75 - .../plugins/shared.escape_special_chars.php | 31 - .../smarty/plugins/shared.make_timestamp.php | 46 - htdocs/libse/ChildWp/Presenter.php | 2 +- htdocs/libse/Coordinate/Type.php | 2 +- htdocs/libse/Language/Translator.php | 2 +- htdocs/src/Oc/SmartyPlugins/block.nocache.php | 49 + htdocs/src/Oc/SmartyPlugins/block.t.php | 85 + .../SmartyPlugins/function.array_search.php | 21 + .../Oc/SmartyPlugins/function.coordinput.php | 94 + .../Oc/SmartyPlugins}/function.count.php | 5 +- .../Oc/SmartyPlugins}/function.instr.php | 6 +- .../Oc/SmartyPlugins}/function.nccacheid.php | 4 +- .../Oc/SmartyPlugins}/function.rand.php | 11 +- .../Oc/SmartyPlugins}/function.repeat.php | 6 - .../src/Oc/SmartyPlugins/function.season.php | 105 + .../SmartyPlugins}/modifier.base64encode.php | 10 +- .../Oc/SmartyPlugins}/modifier.escapejs.php | 16 +- .../SmartyPlugins}/modifier.format_hour.php | 12 +- .../Oc/SmartyPlugins/modifier.hyperlink.php | 82 + .../Oc/SmartyPlugins}/modifier.nbsp.php | 8 +- .../Oc/SmartyPlugins/modifier.rot13html.php | 64 + .../Oc/SmartyPlugins}/modifier.smiley.php | 5 +- .../Oc/SmartyPlugins}/modifier.sprintf.php | 6 +- .../Oc/SmartyPlugins}/modifier.stripcrlf.php | 10 +- .../Oc/SmartyPlugins}/modifier.urlencode.php | 5 +- .../Oc/SmartyPlugins/outputfilter.session.php | 70 + htdocs/src/Oc/SmartyPlugins/prefilter.t.php | 311 +++ 119 files changed, 4023 insertions(+), 12362 deletions(-) create mode 100644 htdocs/composer.json create mode 100644 htdocs/composer.lock delete mode 100644 htdocs/lib2/smarty/Config_File.class.php delete mode 100644 htdocs/lib2/smarty/Smarty.class.php delete mode 100644 htdocs/lib2/smarty/Smarty_Compiler.class.php delete mode 100644 htdocs/lib2/smarty/debug.tpl delete mode 100644 htdocs/lib2/smarty/index.html delete mode 100644 htdocs/lib2/smarty/internals/core.assemble_plugin_filepath.php delete mode 100644 htdocs/lib2/smarty/internals/core.assign_smarty_interface.php delete mode 100644 htdocs/lib2/smarty/internals/core.create_dir_structure.php delete mode 100644 htdocs/lib2/smarty/internals/core.display_debug_console.php delete mode 100644 htdocs/lib2/smarty/internals/core.get_include_path.php delete mode 100644 htdocs/lib2/smarty/internals/core.get_microtime.php delete mode 100644 htdocs/lib2/smarty/internals/core.get_php_resource.php delete mode 100644 htdocs/lib2/smarty/internals/core.is_secure.php delete mode 100644 htdocs/lib2/smarty/internals/core.is_trusted.php delete mode 100644 htdocs/lib2/smarty/internals/core.load_plugins.php delete mode 100644 htdocs/lib2/smarty/internals/core.load_resource_plugin.php delete mode 100644 htdocs/lib2/smarty/internals/core.process_cached_inserts.php delete mode 100644 htdocs/lib2/smarty/internals/core.process_compiled_include.php delete mode 100644 htdocs/lib2/smarty/internals/core.read_cache_file.php delete mode 100644 htdocs/lib2/smarty/internals/core.rm_auto.php delete mode 100644 htdocs/lib2/smarty/internals/core.rmdir.php delete mode 100644 htdocs/lib2/smarty/internals/core.run_insert_handler.php delete mode 100644 htdocs/lib2/smarty/internals/core.smarty_include_php.php delete mode 100644 htdocs/lib2/smarty/internals/core.write_cache_file.php delete mode 100644 htdocs/lib2/smarty/internals/core.write_compiled_include.php delete mode 100644 htdocs/lib2/smarty/internals/core.write_compiled_resource.php delete mode 100644 htdocs/lib2/smarty/internals/core.write_file.php delete mode 100644 htdocs/lib2/smarty/internals/index.html delete mode 100644 htdocs/lib2/smarty/ocplugins/block.nocache.php delete mode 100644 htdocs/lib2/smarty/ocplugins/block.t.php delete mode 100644 htdocs/lib2/smarty/ocplugins/function.array_search.php delete mode 100644 htdocs/lib2/smarty/ocplugins/function.coordinput.php delete mode 100644 htdocs/lib2/smarty/ocplugins/function.season.php delete mode 100644 htdocs/lib2/smarty/ocplugins/index.html delete mode 100644 htdocs/lib2/smarty/ocplugins/modifier.hyperlink.php delete mode 100644 htdocs/lib2/smarty/ocplugins/modifier.rot13html.php delete mode 100644 htdocs/lib2/smarty/ocplugins/outputfilter.session.php delete mode 100644 htdocs/lib2/smarty/ocplugins/prefilter.t.php delete mode 100644 htdocs/lib2/smarty/plugins/block.textformat.php delete mode 100644 htdocs/lib2/smarty/plugins/compiler.assign.php delete mode 100644 htdocs/lib2/smarty/plugins/function.assign_debug_info.php delete mode 100644 htdocs/lib2/smarty/plugins/function.config_load.php delete mode 100644 htdocs/lib2/smarty/plugins/function.counter.php delete mode 100644 htdocs/lib2/smarty/plugins/function.cycle.php delete mode 100644 htdocs/lib2/smarty/plugins/function.debug.php delete mode 100644 htdocs/lib2/smarty/plugins/function.eval.php delete mode 100644 htdocs/lib2/smarty/plugins/function.fetch.php delete mode 100644 htdocs/lib2/smarty/plugins/function.html_checkboxes.php delete mode 100644 htdocs/lib2/smarty/plugins/function.html_image.php delete mode 100644 htdocs/lib2/smarty/plugins/function.html_options.php delete mode 100644 htdocs/lib2/smarty/plugins/function.html_radios.php delete mode 100644 htdocs/lib2/smarty/plugins/function.html_select_date.php delete mode 100644 htdocs/lib2/smarty/plugins/function.html_select_time.php delete mode 100644 htdocs/lib2/smarty/plugins/function.html_table.php delete mode 100644 htdocs/lib2/smarty/plugins/function.mailto.php delete mode 100644 htdocs/lib2/smarty/plugins/function.math.php delete mode 100644 htdocs/lib2/smarty/plugins/function.popup.php delete mode 100644 htdocs/lib2/smarty/plugins/function.popup_init.php delete mode 100644 htdocs/lib2/smarty/plugins/index.html delete mode 100644 htdocs/lib2/smarty/plugins/modifier.capitalize.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.cat.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.count_characters.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.count_paragraphs.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.count_sentences.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.count_words.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.date_format.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.debug_print_var.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.default.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.escape.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.indent.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.lower.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.nl2br.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.regex_replace.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.replace.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.spacify.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.string_format.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.strip.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.strip_tags.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.to_readable_size.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.truncate.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.upper.php delete mode 100644 htdocs/lib2/smarty/plugins/modifier.wordwrap.php delete mode 100644 htdocs/lib2/smarty/plugins/outputfilter.trimwhitespace.php delete mode 100644 htdocs/lib2/smarty/plugins/shared.escape_special_chars.php delete mode 100644 htdocs/lib2/smarty/plugins/shared.make_timestamp.php create mode 100644 htdocs/src/Oc/SmartyPlugins/block.nocache.php create mode 100644 htdocs/src/Oc/SmartyPlugins/block.t.php create mode 100644 htdocs/src/Oc/SmartyPlugins/function.array_search.php create mode 100644 htdocs/src/Oc/SmartyPlugins/function.coordinput.php rename htdocs/{lib2/smarty/ocplugins => src/Oc/SmartyPlugins}/function.count.php (95%) rename htdocs/{lib2/smarty/ocplugins => src/Oc/SmartyPlugins}/function.instr.php (71%) rename htdocs/{lib2/smarty/ocplugins => src/Oc/SmartyPlugins}/function.nccacheid.php (96%) rename htdocs/{lib2/smarty/ocplugins => src/Oc/SmartyPlugins}/function.rand.php (59%) rename htdocs/{lib2/smarty/ocplugins => src/Oc/SmartyPlugins}/function.repeat.php (73%) create mode 100644 htdocs/src/Oc/SmartyPlugins/function.season.php rename htdocs/{lib2/smarty/ocplugins => src/Oc/SmartyPlugins}/modifier.base64encode.php (86%) rename htdocs/{lib2/smarty/ocplugins => src/Oc/SmartyPlugins}/modifier.escapejs.php (53%) rename htdocs/{lib2/smarty/ocplugins => src/Oc/SmartyPlugins}/modifier.format_hour.php (74%) create mode 100644 htdocs/src/Oc/SmartyPlugins/modifier.hyperlink.php rename htdocs/{lib2/smarty/ocplugins => src/Oc/SmartyPlugins}/modifier.nbsp.php (96%) create mode 100644 htdocs/src/Oc/SmartyPlugins/modifier.rot13html.php rename htdocs/{lib2/smarty/ocplugins => src/Oc/SmartyPlugins}/modifier.smiley.php (64%) rename htdocs/{lib2/smarty/ocplugins => src/Oc/SmartyPlugins}/modifier.sprintf.php (96%) rename htdocs/{lib2/smarty/ocplugins => src/Oc/SmartyPlugins}/modifier.stripcrlf.php (82%) rename htdocs/{lib2/smarty/ocplugins => src/Oc/SmartyPlugins}/modifier.urlencode.php (90%) create mode 100644 htdocs/src/Oc/SmartyPlugins/outputfilter.session.php create mode 100644 htdocs/src/Oc/SmartyPlugins/prefilter.t.php diff --git a/.gitignore b/.gitignore index b53e896ca..82438566a 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,4 @@ /local/ocxml11client/settings.php /.idea/ /.vagrant/ +/htdocs/vendor diff --git a/htdocs/composer.json b/htdocs/composer.json new file mode 100644 index 000000000..a43912875 --- /dev/null +++ b/htdocs/composer.json @@ -0,0 +1,34 @@ +{ + "name": "opencaching/oc-server", + "description": "opencaching.de source code", + "require": { + "php": ">=5.3.0", + "ezyang/htmlpurifier": "v4.5.0", + "smarty/smarty": "~2.6", + "symfony/dependency-injection": "~2.6", + "symfony/yaml": "~2.6", + "symfony/config": "~2.6" + }, + "require-dev": { + "phpunit/phpunit": "4.8.*" + }, + "autoload": { + "psr-4": { + "Oc\\": "src/Oc" + }, + "psr-0":{ + "Cache\\": "libse", + "CacheNote\\": "libse", + "ChildWp\\": "libse", + "Coordinate\\": "libse", + "Language\\": "libse", + "Validator\\": "libse" + } + , + "classmap": [ + "lib2/", + "lib2/logic/", + "libse/" + ] + } +} diff --git a/htdocs/composer.lock b/htdocs/composer.lock new file mode 100644 index 000000000..15e394329 --- /dev/null +++ b/htdocs/composer.lock @@ -0,0 +1,1234 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "hash": "1cb9567d8ab1c0988983fbdb5ca08c0b", + "content-hash": "fea5021a19d15c3054619ddb851e12cc", + "packages": [ + { + "name": "ezyang/htmlpurifier", + "version": "v4.5.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "d516e2f8de435ea78cc6152abc425d3ff2c4d289" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/d516e2f8de435ea78cc6152abc425d3ff2c4d289", + "reference": "d516e2f8de435ea78cc6152abc425d3ff2c4d289", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "type": "library", + "autoload": { + "psr-0": { + "HTMLPurifier": "library/" + }, + "files": [ + "library/HTMLPurifier.composer.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], + "time": "2013-02-18 00:04:08" + }, + { + "name": "smarty/smarty", + "version": "v2.6.29", + "source": { + "type": "git", + "url": "https://github.com/smarty-php/smarty.git", + "reference": "47fa66cdcf0bde5c44923fb0e15dd0921f8d3a83" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/47fa66cdcf0bde5c44923fb0e15dd0921f8d3a83", + "reference": "47fa66cdcf0bde5c44923fb0e15dd0921f8d3a83", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6.x-dev" + } + }, + "autoload": { + "classmap": [ + "libs/Smarty.class.php", + "libs/Smarty_Compiler.class.php", + "libs/Config_File.class.php" + ] + }, + "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" + } + ], + "description": "Smarty - the compiling PHP template engine", + "homepage": "http://www.smarty.net", + "keywords": [ + "templating" + ], + "time": "2015-06-21 13:10:14" + }, + { + "name": "symfony/config", + "version": "v2.8.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "5273f4724dc5288fe7a33cb08077ab9852621f2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/5273f4724dc5288fe7a33cb08077ab9852621f2c", + "reference": "5273f4724dc5288fe7a33cb08077ab9852621f2c", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/filesystem": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2016-03-04 07:54:35" + }, + { + "name": "symfony/dependency-injection", + "version": "v2.8.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "f7b4a498e679fa440b16facb934680a1527ed48c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f7b4a498e679fa440b16facb934680a1527ed48c", + "reference": "f7b4a498e679fa440b16facb934680a1527ed48c", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "conflict": { + "symfony/expression-language": "<2.6" + }, + "require-dev": { + "symfony/config": "~2.2|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/yaml": "~2.1|~3.0.0" + }, + "suggest": { + "symfony/config": "", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "time": "2016-03-21 07:27:21" + }, + { + "name": "symfony/filesystem", + "version": "v3.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "f82499a459dcade2ea56df94cc58b19c8bde3d20" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/f82499a459dcade2ea56df94cc58b19c8bde3d20", + "reference": "f82499a459dcade2ea56df94cc58b19c8bde3d20", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2016-03-27 10:24:39" + }, + { + "name": "symfony/yaml", + "version": "v2.8.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "584e52cb8f788a887553ba82db6caacb1d6260bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/584e52cb8f788a887553ba82db6caacb1d6260bb", + "reference": "584e52cb8f788a887553ba82db6caacb1d6260bb", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2016-03-04 07:54:35" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14 21:17:01" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "time": "2015-02-03 12:10:50" + }, + { + "name": "phpspec/prophecy", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3c91bdf81797d725b14cb62906f9a4ce44235972", + "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "~2.0", + "sebastian/comparator": "~1.1", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "phpspec/phpspec": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2016-02-15 07:46:21" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06 15:47:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2015-06-21 13:08:43" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21 13:50:34" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", + "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2015-06-21 08:01:12" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2015-09-15 10:49:45" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.24", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "a1066c562c52900a142a0e2bbf0582994671385e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1066c562c52900a142a0e2bbf0582994671385e", + "reference": "a1066c562c52900a142a0e2bbf0582994671385e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": ">=1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.1", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2016-03-14 06:16:08" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02 06:51:40" + }, + { + "name": "sebastian/comparator", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2015-07-26 15:48:44" + }, + { + "name": "sebastian/diff", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2015-12-08 07:14:41" + }, + { + "name": "sebastian/environment", + "version": "1.3.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf", + "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-02-26 18:40:46" + }, + { + "name": "sebastian/exporter", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "7ae5513327cb536431847bcc0c10edba2701064e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", + "reference": "7ae5513327cb536431847bcc0c10edba2701064e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2015-06-21 07:55:53" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12 03:26:01" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2015-11-11 19:50:13" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21 13:59:46" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.3.0" + }, + "platform-dev": [] +} diff --git a/htdocs/editcache.php b/htdocs/editcache.php index 6beb9300d..1d48c682d 100644 --- a/htdocs/editcache.php +++ b/htdocs/editcache.php @@ -1,92 +1,106 @@ getChildWps($cacheid); - $ret = ''; + global $waypointline; + global $waypointlines; + global $nowaypoints; + + $wphandler = new ChildWp_Handler(); + $waypoints = $wphandler->getChildWps($cacheid); + $ret = ''; + + if (!empty($waypoints)) { + $formatter = new Coordinate_Formatter(); + + foreach ($waypoints as $waypoint) { + $tmpline = $waypointline; + + $tmpline = mb_ereg_replace( + '{wp_image}', + htmlspecialchars($waypoint['image'], ENT_COMPAT, 'UTF-8'), + $tmpline + ); + $tmpline = mb_ereg_replace('{wp_type}', htmlspecialchars($waypoint['name'], ENT_COMPAT, 'UTF-8'), $tmpline); + $htmlcoordinate = $formatter->formatHtml( + $waypoint['coordinate'], + '' + ); + $tmpline = mb_ereg_replace('{wp_coordinate}', $htmlcoordinate, $tmpline); + $tmpline = mb_ereg_replace( + '{wp_description}', + htmlspecialchars(trim($waypoint['description']), ENT_COMPAT, 'UTF-8'), + $tmpline + ); + $tmpline = mb_ereg_replace( + '{wp_show_description}', + mb_ereg_replace('\r\n', '
', htmlspecialchars($waypoint['description'], ENT_COMPAT, 'UTF-8')), + $tmpline + ); + $tmpline = mb_ereg_replace('{cacheid}', htmlspecialchars($cacheid, ENT_COMPAT, 'UTF-8'), $tmpline); + $tmpline = mb_ereg_replace( + '{childid}', + htmlspecialchars($waypoint['childid'], ENT_COMPAT, 'UTF-8'), + $tmpline + ); + + $ret .= $tmpline; + } + + $ret = mb_ereg_replace('{lines}', $ret, $waypointlines); + + return $ret; + } - if (!empty($waypoints)) - { - $formatter = new Coordinate_Formatter(); + return $nowaypoints; +} - foreach ($waypoints as $waypoint) +//Preprocessing +if ($error == false) { + //cacheid + $cache_id = 0; + if (isset($_REQUEST['cacheid'])) // Ocprop { - $tmpline = $waypointline; - - $tmpline = mb_ereg_replace('{wp_image}', htmlspecialchars($waypoint['image'], ENT_COMPAT, 'UTF-8'), $tmpline); - $tmpline = mb_ereg_replace('{wp_type}', htmlspecialchars($waypoint['name'], ENT_COMPAT, 'UTF-8'), $tmpline); - $htmlcoordinate = $formatter->formatHtml($waypoint['coordinate'], ''); - $tmpline = mb_ereg_replace('{wp_coordinate}', $htmlcoordinate, $tmpline); - $tmpline = mb_ereg_replace('{wp_description}', htmlspecialchars(trim($waypoint['description']), ENT_COMPAT, 'UTF-8'), $tmpline); - $tmpline = mb_ereg_replace('{wp_show_description}', mb_ereg_replace('\r\n','
',htmlspecialchars($waypoint['description'], ENT_COMPAT, 'UTF-8')), $tmpline); - $tmpline = mb_ereg_replace('{cacheid}', htmlspecialchars($cacheid, ENT_COMPAT, 'UTF-8'), $tmpline); - $tmpline = mb_ereg_replace('{childid}', htmlspecialchars($waypoint['childid'], ENT_COMPAT, 'UTF-8'), $tmpline); - - $ret .= $tmpline; + $cache_id = $_REQUEST['cacheid']; } - $ret = mb_ereg_replace('{lines}', $ret, $waypointlines); - - return $ret; - } - - return $nowaypoints; -} - - //Preprocessing - if ($error == false) - { - //cacheid - $cache_id = 0; - if (isset($_REQUEST['cacheid'])) // Ocprop - { - $cache_id = $_REQUEST['cacheid']; - } - - if ($usr === false) - { - $tplname = 'login'; - - tpl_set_var('username', ''); - tpl_set_var('target', 'editcache.php?cacheid=' . urlencode($cache_id)); - tpl_set_var('message_start', ""); - tpl_set_var('message_end', ""); - tpl_set_var('message', $login_required); - tpl_set_var('helplink', helppagelink('login')); - } - else - { - $cache_rs = sql(" + if ($usr === false) { + $tplname = 'login'; + + tpl_set_var('username', ''); + tpl_set_var('target', 'editcache.php?cacheid=' . urlencode($cache_id)); + tpl_set_var('message_start', ""); + tpl_set_var('message_end', ""); + tpl_set_var('message', $login_required); + tpl_set_var('helplink', helppagelink('login')); + } else { + $cache_rs = sql( + " SELECT `caches`.`uuid`, `caches`.`user_id`, @@ -116,535 +130,574 @@ function getWaypoints($cacheid) INNER JOIN `user` ON `caches`.`user_id`=`user`.`user_id` LEFT JOIN `stat_caches` ON `caches`.`cache_id`=`stat_caches`.`cache_id` WHERE `caches`.`cache_id`='&1'", - $cache_id); - $cache_record = sql_fetch_array($cache_rs); - sql_free_result($cache_rs); - - if ($cache_record !== false) - { - if ($cache_record['user_id'] == $usr['userid'] || $login->listingAdmin()) - { - $tplname = 'editcache'; - - require($stylepath . '/editcache.inc.php'); - - if ($cache_record['node'] != $oc_nodeid) - { - tpl_errorMsg('editcache', $error_wrong_node); - exit; - } - - //here we read all used information from the form if submitted, otherwise from DB - $cache_name = trim(isset($_POST['name']) ? $_POST['name'] : $cache_record['name']); // Ocprop - $cache_type = isset($_POST['type']) ? $_POST['type'] : $cache_record['type']; - if (!isset($_POST['size'])) - { - if ($cache_type == 4 || $cache_type == 5) - { - $sel_size = 7; - } - else - { - $sel_size = $cache_record['size']; - } - } - else - { - $sel_size = isset($_POST['size']) ? $_POST['size'] : $cache_record['size']; - } - $cache_hidden_day = isset($_POST['hidden_day']) ? $_POST['hidden_day'] : date('d', strtotime($cache_record['date_hidden'])); // Ocprop - $cache_hidden_month = isset($_POST['hidden_month']) ? $_POST['hidden_month'] : date('m', strtotime($cache_record['date_hidden'])); // Ocprop - $cache_hidden_year = isset($_POST['hidden_year']) ? $_POST['hidden_year'] : date('Y', strtotime($cache_record['date_hidden'])); // Ocprop - - if(is_null($cache_record['date_activate'])) - { - $cache_activate_day = isset($_POST['activate_day']) ? $_POST['activate_day'] : date('d'); - $cache_activate_month = isset($_POST['activate_month']) ? $_POST['activate_month'] : date('m'); - $cache_activate_year = isset($_POST['activate_year']) ? $_POST['activate_year'] : date('Y'); - $cache_activate_hour = isset($_POST['activate_hour']) ? $_POST['activate_hour'] : date('H'); - } - else - { - $cache_activate_day = isset($_POST['activate_day']) ? $_POST['activate_day'] : date('d', strtotime($cache_record['date_activate'])); - $cache_activate_month = isset($_POST['activate_month']) ? $_POST['activate_month'] : date('m', strtotime($cache_record['date_activate'])); - $cache_activate_year = isset($_POST['activate_year']) ? $_POST['activate_year'] : date('Y', strtotime($cache_record['date_activate'])); - $cache_activate_hour = isset($_POST['activate_hour']) ? $_POST['activate_hour'] : date('H', strtotime($cache_record['date_activate'])); - } - - $cache_difficulty = isset($_POST['difficulty']) ? $_POST['difficulty'] : $cache_record['difficulty']; // Ocprop - $cache_terrain = isset($_POST['terrain']) ? $_POST['terrain'] : $cache_record['terrain']; // Ocprop - $cache_country = isset($_POST['country']) ? $_POST['country'] : $cache_record['country']; // Ocprop - $show_all_countries = isset($_POST['show_all_countries']) ? $_POST['show_all_countries'] : 0; - $status = isset($_POST['status']) ? $_POST['status'] : $cache_record['status']; // Ocprop - $status_old = $cache_record['status']; - $search_time = isset($_POST['search_time']) ? $_POST['search_time'] : $cache_record['search_time']; - $way_length = isset($_POST['way_length']) ? $_POST['way_length'] : $cache_record['way_length']; - - if($status_old == 5 && $status == 5) - { - if(isset($_POST['publish'])) // Ocprop - { - $publish = $_POST['publish']; - if(!($publish == 'now' || $publish == 'later' || $publish == 'notnow')) - { - // somebody messed up the POST-data, so we do not publish the cache, since he isn't published right now (status=5) - $publish = 'notnow'; - } - if ($publish == 'now') - $status = 1; - } - else - { - if(is_null($cache_record['date_activate'])) - { - $publish = 'notnow'; - } - else - { - $publish = 'later'; - } - } - } - else - { - $publish = isset($_POST['publish']) ? $_POST['publish'] : 'now'; - if(!($publish == 'now' || $publish == 'later' || $publish == 'notnow')) - { - // somebody messed up the POST-data, so the cache has to be published (status<5) - $publish = 'now'; - } - } - - $bAdmin = sqlValue("SELECT `admin` FROM `user` WHERE `user_id` = &1", 0, $usr['userid']); - - if ($status == 7 && ($bAdmin & ADMIN_USER) != ADMIN_USER) - { - $status = $status_old; - } - - if ($status_old == 7) // cache is locked - { - // only admins can change status of locked caches - if (($bAdmin & ADMIN_USER) != ADMIN_USER) - { - // no status change allowed for normal user - $status = $status_old; - } - } - - $search_time = mb_ereg_replace(',', '.', $search_time); - $way_length = mb_ereg_replace(',', '.', $way_length); - - if (mb_strpos($search_time, ':') == mb_strlen($search_time) - 3) - { - $st_hours = mb_substr($search_time, 0, mb_strpos($search_time, ':')); - $st_minutes = mb_substr($search_time, mb_strlen($st_hours) + 1); - - if (is_numeric($st_hours) && is_numeric($st_minutes)) - { - if (($st_minutes >= 0) && ($st_minutes < 60)) - { - $search_time = $st_hours + $st_minutes / 60; - } - } - } - - $log_pw = isset($_POST['log_pw']) ? mb_substr($_POST['log_pw'], 0, 20) : $cache_record['logpw']; - // fix #4356: gc waypoints are frequently copy&pasted with leading spaces - $wp_gc = isset($_POST['wp_gc']) ? strtoupper(trim($_POST['wp_gc'])) : $cache_record['wp_gc']; // Ocprop - $showlists = isset($_POST['showlists']) ? 1 : $cache_record['show_cachelists'] + 0; - $protect_old_coords = isset($_POST['protect_old_coords']) ? 1 : $cache_record['protect_old_coords'] + 0; - - // name - $name_not_ok = false; - if($cache_name == "") - { - $name_not_ok = true; - } - - if (isset($_POST['latNS'])) - { - //get coords from post-form - $coords_latNS = $_POST['latNS']; // Ocprop - $coords_lonEW = $_POST['lonEW']; // Ocprop - $coords_lat_h = $_POST['lat_h']; // Ocprop - $coords_lon_h = $_POST['lon_h']; // Ocprop - $coords_lat_min = $_POST['lat_min']; // Ocprop - $coords_lon_min = $_POST['lon_min']; // Ocprop - } - else - { - //get coords from DB - $coords_lon = $cache_record['longitude']; - $coords_lat = $cache_record['latitude']; - - if ($coords_lon < 0) - { - $coords_lonEW = 'W'; - $coords_lon = -$coords_lon; - } - else - { - $coords_lonEW = 'E'; - } - - if ($coords_lat < 0) - { - $coords_latNS = 'S'; - $coords_lat = -$coords_lat; - } - else - { - $coords_latNS = 'N'; - } - - $coords_lat_h = floor($coords_lat); - $coords_lon_h = floor($coords_lon); - - $coords_lat_min = sprintf("%02.3f", round(($coords_lat - $coords_lat_h) * 60, 3)); - $coords_lon_min = sprintf("%02.3f", round(($coords_lon - $coords_lon_h) * 60, 3)); - } - - //here we validate the data - - //coords - $lon_not_ok = false; - - if (!mb_ereg_match('^[0-9]{1,3}$', $coords_lon_h)) - { - $lon_not_ok = true; - } - else - { - $lon_not_ok = (($coords_lon_h >= 0) && ($coords_lon_h < 180)) ? false : true; - } - - if (is_numeric($coords_lon_min)) - { - // important: use here |= - $lon_not_ok |= (($coords_lon_min >= 0) && ($coords_lon_min < 60)) ? false : true; - } - else - { - $lon_not_ok = true; - } - - //same with lat - $lat_not_ok = false; - - if (!mb_ereg_match('^[0-9]{1,3}$', $coords_lat_h)) - { - $lat_not_ok = true; - } - else - { - $lat_not_ok = (($coords_lat_h >= 0) && ($coords_lat_h < 180)) ? false : true; - } - - if (is_numeric($coords_lat_min)) - { - // important: use here |= - $lat_not_ok |= (($coords_lat_min >= 0) && ($coords_lat_min < 60)) ? false : true; - } - else - { - $lat_not_ok = true; - } - - //check effort - $time_not_ok = true; - tpl_set_var('effort_message', ''); - if (is_numeric($search_time) || ($search_time == '')) - { - $time_not_ok = false; - } - if ($time_not_ok) - { - tpl_set_var('effort_message', $time_not_ok_message); - $error = true; - } - $way_length_not_ok =true; - if (is_numeric($way_length) || ($way_length == '')) - { - $way_length_not_ok = false; - } - if ($way_length_not_ok) - { - tpl_set_var('effort_message', $way_length_not_ok_message); - $error = true; - } - - //check GC waypoint - $wpgc_not_ok = $wp_gc != "" && !preg_match("/^(?:GC|CX)[0-9A-Z]{3,6}$/", $wp_gc); - if ($wpgc_not_ok) - { - $error = true; - } - - //check hidden_since - $hidden_date_not_ok = true; - if (is_numeric($cache_hidden_day) && is_numeric($cache_hidden_month) && is_numeric($cache_hidden_year)) - { - $hidden_date_not_ok = (checkdate($cache_hidden_month, $cache_hidden_day, $cache_hidden_year) == false); - } - - //check date_activate - if($status == 5) - { - $activate_date_not_ok = true; - if (is_numeric($cache_activate_day) && is_numeric($cache_activate_month) && is_numeric($cache_activate_year) && is_numeric($cache_activate_hour)) - { - $activate_date_not_ok = ((checkdate($cache_activate_month, $cache_activate_day, $cache_activate_year) == false) || $cache_activate_hour < 0 || $cache_activate_hour > 23); - } - } - else - { - $activate_date_not_ok = false; - } - - //check status and publish options - if(($status == 5 && $publish == 'now') || ($status != 5 && ($publish == 'later' || $publish == 'notnow'))) - { - tpl_set_var('status_message', $status_message); - $status_not_ok = true; - } - else - { - tpl_set_var('status_message', ''); - $status_not_ok = false; - } - - //check cache size - $size_not_ok = false; - if ($sel_size != 7 && ($cache_type == 4 || $cache_type == 5)) - { - $error = true; - $size_not_ok = true; - } - - //difficulty / terrain - $diff_not_ok = false; - tpl_set_var('diff_message', ''); - if ($cache_difficulty < 2 || $cache_difficulty > 10 || $cache_terrain < 2 || $cache_terrain > 10) - { - tpl_set_var('diff_message', $diff_not_ok_message); - $error = true; - $diff_not_ok = true; - } - - // cache-attributes - $attribs_not_ok = false; - if (isset($_POST['cache_attribs'])) - { - $cache_attribs = mb_split(';', $_POST['cache_attribs']); - } - else - { - // get attribs for this cache from db - $rs = sql("SELECT `attrib_id` FROM `caches_attributes` WHERE `cache_id`='&1'", $cache_id); - if(mysql_num_rows($rs) > 0) - { - unset($cache_attribs); - while($record = sql_fetch_array($rs)) - { - $cache_attribs[] = $record['attrib_id']; - } - unset($record); - } - else - { - $cache_attribs = array(); - } - sql_free_result($rs); - } - - if (in_array(ATTRIB_ID_SAFARI,$cache_attribs) && $cache_type != 4) - { - tpl_set_var('safari_message', $safari_not_allowed_message); - $error = true; - $attribs_not_ok = true; - } - else - tpl_set_var('safari_message', ''); - - //try to save to DB? - if (isset($_POST['submit'])) // Ocprop - { - //all validations ok? - if (!($hidden_date_not_ok || $lat_not_ok || $lon_not_ok || $name_not_ok || $time_not_ok || $way_length_not_ok || $size_not_ok || $activate_date_not_ok || $status_not_ok || $diff_not_ok || $attribs_not_ok || $wpgc_not_ok)) - { - $cache_lat = $coords_lat_h + $coords_lat_min / 60; - if ($coords_latNS == 'S') $cache_lat = -$cache_lat; - - $cache_lon = $coords_lon_h + $coords_lon_min / 60; - if ($coords_lonEW == 'W') $cache_lon = -$cache_lon; - - if($publish == 'now') - { - $activation_date = 'NULL'; - } - elseif($publish == 'later') - { - $status = 5; - $activation_date = "'".sql_escape(date('Y-m-d H:i:s', mktime($cache_activate_hour, 0, 0, $cache_activate_month, $cache_activate_day, $cache_activate_year)))."'"; - } - elseif($publish == 'notnow') - { - $status = 5; - $activation_date = 'NULL'; - } - else - { - // should never happen - $activation_date = 'NULL'; - } - - // check for Ocprop data to ignore - if ($ocpropping) - { - $rs = sql("SELECT `type`, `size` FROM `caches` WHERE `cache_id`='&1'", $cache_id); - if ($r = sql_fetch_assoc($rs)) - { - if ($r['type'] == 8 && $cache_type == 7) - $cache_type = 8; - if ($r['type'] == 10 && $cache_type == 2) - $cache_type = 10; - if ($r['size'] == 8 && ($sel_size == 1 || $sel_size == 2)) - $sel_size = 8; - } - sql_free_result($rs); - } - - // fix showlists setting - if (!isset($_POST['showlists'])) $showlists = 0; - if (!isset($_POST['protect_old_coords'])) $protect_old_coords = 0; - - // save to DB - // Status update will trigger touching the last_modified date of all depending records. - // Status change via editcache.php is no longer available via the user interface, - // but still used by Ocprop and maybe other tools. - sql("SET @STATUS_CHANGE_USER_ID='&1'", $usr['userid']); - sql("UPDATE `caches` SET `name`='&1', `longitude`='&2', `latitude`='&3', `type`='&4', `date_hidden`='&5', `country`='&6', `size`='&7', `difficulty`='&8', `terrain`='&9', `status`='&10', `search_time`='&11', `way_length`='&12', `logpw`='&13', `wp_gc`='&14', `show_cachelists`='&15', `protect_old_coords`='&16', `date_activate` = $activation_date WHERE `cache_id`='&17'", $cache_name, $cache_lon, $cache_lat, $cache_type, date('Y-m-d', mktime(0, 0, 0, $cache_hidden_month, $cache_hidden_day, $cache_hidden_year)), $cache_country, $sel_size, $cache_difficulty, $cache_terrain, $status, $search_time, $way_length, $log_pw, $wp_gc, $showlists, $protect_old_coords, $cache_id); - - // send notification on admin intervention - if ($cache_record['user_id'] != $usr['userid'] && - $opt['logic']['admin']['listingadmin_notification'] != '') - { - mail( - $opt['logic']['admin']['listingadmin_notification'], - mb_ereg_replace('{occode}', $cache_record['wp_oc'], - mb_ereg_replace('{username}', $usr['username'], - t('Cache listing {occode} has been modified by {username}'))), - t('The modifications can be checked via vandalism restore function.')); - } - - // generate status-change log - if ($status != $status_old && $status_old != 5) - { - switch ($status) - { - case 1: $logtype = 10; break; - case 2: $logtype = 11; break; - case 3: $logtype = 9; break; - case 6: $logtype = 13; break; - default: $logtype = 0; // ??? - } - if ($logtype > 0) - { - sql("INSERT INTO `cache_logs` (`node`, `cache_id`, `user_id`, `type`, `date`) + $cache_id + ); + $cache_record = sql_fetch_array($cache_rs); + sql_free_result($cache_rs); + + if ($cache_record !== false) { + if ($cache_record['user_id'] == $usr['userid'] || $login->listingAdmin()) { + $tplname = 'editcache'; + + require($stylepath . '/editcache.inc.php'); + + if ($cache_record['node'] != $oc_nodeid) { + tpl_errorMsg('editcache', $error_wrong_node); + exit; + } + + //here we read all used information from the form if submitted, otherwise from DB + $cache_name = trim(isset($_POST['name']) ? $_POST['name'] : $cache_record['name']); // Ocprop + $cache_type = isset($_POST['type']) ? $_POST['type'] : $cache_record['type']; + if (!isset($_POST['size'])) { + if ($cache_type == 4 || $cache_type == 5) { + $sel_size = 7; + } else { + $sel_size = $cache_record['size']; + } + } else { + $sel_size = isset($_POST['size']) ? $_POST['size'] : $cache_record['size']; + } + $cache_hidden_day = isset($_POST['hidden_day']) ? $_POST['hidden_day'] : date( + 'd', + strtotime($cache_record['date_hidden']) + ); // Ocprop + $cache_hidden_month = isset($_POST['hidden_month']) ? $_POST['hidden_month'] : date( + 'm', + strtotime($cache_record['date_hidden']) + ); // Ocprop + $cache_hidden_year = isset($_POST['hidden_year']) ? $_POST['hidden_year'] : date( + 'Y', + strtotime($cache_record['date_hidden']) + ); // Ocprop + + if (is_null($cache_record['date_activate'])) { + $cache_activate_day = isset($_POST['activate_day']) ? $_POST['activate_day'] : date('d'); + $cache_activate_month = isset($_POST['activate_month']) ? $_POST['activate_month'] : date('m'); + $cache_activate_year = isset($_POST['activate_year']) ? $_POST['activate_year'] : date('Y'); + $cache_activate_hour = isset($_POST['activate_hour']) ? $_POST['activate_hour'] : date('H'); + } else { + $cache_activate_day = isset($_POST['activate_day']) ? $_POST['activate_day'] : date( + 'd', + strtotime($cache_record['date_activate']) + ); + $cache_activate_month = isset($_POST['activate_month']) ? $_POST['activate_month'] : date( + 'm', + strtotime($cache_record['date_activate']) + ); + $cache_activate_year = isset($_POST['activate_year']) ? $_POST['activate_year'] : date( + 'Y', + strtotime($cache_record['date_activate']) + ); + $cache_activate_hour = isset($_POST['activate_hour']) ? $_POST['activate_hour'] : date( + 'H', + strtotime($cache_record['date_activate']) + ); + } + + $cache_difficulty = isset($_POST['difficulty']) ? $_POST['difficulty'] : $cache_record['difficulty']; // Ocprop + $cache_terrain = isset($_POST['terrain']) ? $_POST['terrain'] : $cache_record['terrain']; // Ocprop + $cache_country = isset($_POST['country']) ? $_POST['country'] : $cache_record['country']; // Ocprop + $show_all_countries = isset($_POST['show_all_countries']) ? $_POST['show_all_countries'] : 0; + $status = isset($_POST['status']) ? $_POST['status'] : $cache_record['status']; // Ocprop + $status_old = $cache_record['status']; + $search_time = isset($_POST['search_time']) ? $_POST['search_time'] : $cache_record['search_time']; + $way_length = isset($_POST['way_length']) ? $_POST['way_length'] : $cache_record['way_length']; + + if ($status_old == 5 && $status == 5) { + if (isset($_POST['publish'])) // Ocprop + { + $publish = $_POST['publish']; + if (!($publish == 'now' || $publish == 'later' || $publish == 'notnow')) { + // somebody messed up the POST-data, so we do not publish the cache, since he isn't published right now (status=5) + $publish = 'notnow'; + } + if ($publish == 'now') { + $status = 1; + } + } else { + if (is_null($cache_record['date_activate'])) { + $publish = 'notnow'; + } else { + $publish = 'later'; + } + } + } else { + $publish = isset($_POST['publish']) ? $_POST['publish'] : 'now'; + if (!($publish == 'now' || $publish == 'later' || $publish == 'notnow')) { + // somebody messed up the POST-data, so the cache has to be published (status<5) + $publish = 'now'; + } + } + + $bAdmin = sqlValue("SELECT `admin` FROM `user` WHERE `user_id` = &1", 0, $usr['userid']); + + if ($status == 7 && ($bAdmin & ADMIN_USER) != ADMIN_USER) { + $status = $status_old; + } + + if ($status_old == 7) // cache is locked + { + // only admins can change status of locked caches + if (($bAdmin & ADMIN_USER) != ADMIN_USER) { + // no status change allowed for normal user + $status = $status_old; + } + } + + $search_time = mb_ereg_replace(',', '.', $search_time); + $way_length = mb_ereg_replace(',', '.', $way_length); + + if (mb_strpos($search_time, ':') == mb_strlen($search_time) - 3) { + $st_hours = mb_substr($search_time, 0, mb_strpos($search_time, ':')); + $st_minutes = mb_substr($search_time, mb_strlen($st_hours) + 1); + + if (is_numeric($st_hours) && is_numeric($st_minutes)) { + if (($st_minutes >= 0) && ($st_minutes < 60)) { + $search_time = $st_hours + $st_minutes / 60; + } + } + } + + $log_pw = isset($_POST['log_pw']) ? mb_substr($_POST['log_pw'], 0, 20) : $cache_record['logpw']; + // fix #4356: gc waypoints are frequently copy&pasted with leading spaces + $wp_gc = isset($_POST['wp_gc']) ? strtoupper(trim($_POST['wp_gc'])) : $cache_record['wp_gc']; // Ocprop + $showlists = isset($_POST['showlists']) ? 1 : $cache_record['show_cachelists'] + 0; + $protect_old_coords = isset($_POST['protect_old_coords']) ? 1 : $cache_record['protect_old_coords'] + 0; + + // name + $name_not_ok = false; + if ($cache_name == "") { + $name_not_ok = true; + } + + if (isset($_POST['latNS'])) { + //get coords from post-form + $coords_latNS = $_POST['latNS']; // Ocprop + $coords_lonEW = $_POST['lonEW']; // Ocprop + $coords_lat_h = $_POST['lat_h']; // Ocprop + $coords_lon_h = $_POST['lon_h']; // Ocprop + $coords_lat_min = $_POST['lat_min']; // Ocprop + $coords_lon_min = $_POST['lon_min']; // Ocprop + } else { + //get coords from DB + $coords_lon = $cache_record['longitude']; + $coords_lat = $cache_record['latitude']; + + if ($coords_lon < 0) { + $coords_lonEW = 'W'; + $coords_lon = - $coords_lon; + } else { + $coords_lonEW = 'E'; + } + + if ($coords_lat < 0) { + $coords_latNS = 'S'; + $coords_lat = - $coords_lat; + } else { + $coords_latNS = 'N'; + } + + $coords_lat_h = floor($coords_lat); + $coords_lon_h = floor($coords_lon); + + $coords_lat_min = sprintf("%02.3f", round(($coords_lat - $coords_lat_h) * 60, 3)); + $coords_lon_min = sprintf("%02.3f", round(($coords_lon - $coords_lon_h) * 60, 3)); + } + + //here we validate the data + + //coords + $lon_not_ok = false; + + if (!mb_ereg_match('^[0-9]{1,3}$', $coords_lon_h)) { + $lon_not_ok = true; + } else { + $lon_not_ok = (($coords_lon_h >= 0) && ($coords_lon_h < 180)) ? false : true; + } + + if (is_numeric($coords_lon_min)) { + // important: use here |= + $lon_not_ok |= (($coords_lon_min >= 0) && ($coords_lon_min < 60)) ? false : true; + } else { + $lon_not_ok = true; + } + + //same with lat + $lat_not_ok = false; + + if (!mb_ereg_match('^[0-9]{1,3}$', $coords_lat_h)) { + $lat_not_ok = true; + } else { + $lat_not_ok = (($coords_lat_h >= 0) && ($coords_lat_h < 180)) ? false : true; + } + + if (is_numeric($coords_lat_min)) { + // important: use here |= + $lat_not_ok |= (($coords_lat_min >= 0) && ($coords_lat_min < 60)) ? false : true; + } else { + $lat_not_ok = true; + } + + //check effort + $time_not_ok = true; + tpl_set_var('effort_message', ''); + if (is_numeric($search_time) || ($search_time == '')) { + $time_not_ok = false; + } + if ($time_not_ok) { + tpl_set_var('effort_message', $time_not_ok_message); + $error = true; + } + $way_length_not_ok = true; + if (is_numeric($way_length) || ($way_length == '')) { + $way_length_not_ok = false; + } + if ($way_length_not_ok) { + tpl_set_var('effort_message', $way_length_not_ok_message); + $error = true; + } + + //check GC waypoint + $wpgc_not_ok = $wp_gc != "" && !preg_match("/^(?:GC|CX)[0-9A-Z]{3,6}$/", $wp_gc); + if ($wpgc_not_ok) { + $error = true; + } + + //check hidden_since + $hidden_date_not_ok = true; + if (is_numeric($cache_hidden_day) && is_numeric($cache_hidden_month) && is_numeric( + $cache_hidden_year + ) + ) { + $hidden_date_not_ok = (checkdate( + $cache_hidden_month, + $cache_hidden_day, + $cache_hidden_year + ) == false); + } + + //check date_activate + if ($status == 5) { + $activate_date_not_ok = true; + if (is_numeric($cache_activate_day) && is_numeric($cache_activate_month) && is_numeric( + $cache_activate_year + ) && is_numeric($cache_activate_hour) + ) { + $activate_date_not_ok = ((checkdate( + $cache_activate_month, + $cache_activate_day, + $cache_activate_year + ) == false) || $cache_activate_hour < 0 || $cache_activate_hour > 23); + } + } else { + $activate_date_not_ok = false; + } + + //check status and publish options + if (($status == 5 && $publish == 'now') || ($status != 5 && ($publish == 'later' || $publish == 'notnow'))) { + tpl_set_var('status_message', $status_message); + $status_not_ok = true; + } else { + tpl_set_var('status_message', ''); + $status_not_ok = false; + } + + //check cache size + $size_not_ok = false; + if ($sel_size != 7 && ($cache_type == 4 || $cache_type == 5)) { + $error = true; + $size_not_ok = true; + } + + //difficulty / terrain + $diff_not_ok = false; + tpl_set_var('diff_message', ''); + if ($cache_difficulty < 2 || $cache_difficulty > 10 || $cache_terrain < 2 || $cache_terrain > 10) { + tpl_set_var('diff_message', $diff_not_ok_message); + $error = true; + $diff_not_ok = true; + } + + // cache-attributes + $attribs_not_ok = false; + if (isset($_POST['cache_attribs'])) { + $cache_attribs = mb_split(';', $_POST['cache_attribs']); + } else { + // get attribs for this cache from db + $rs = sql("SELECT `attrib_id` FROM `caches_attributes` WHERE `cache_id`='&1'", $cache_id); + if (mysql_num_rows($rs) > 0) { + unset($cache_attribs); + while ($record = sql_fetch_array($rs)) { + $cache_attribs[] = $record['attrib_id']; + } + unset($record); + } else { + $cache_attribs = []; + } + sql_free_result($rs); + } + + if (in_array(ATTRIB_ID_SAFARI, $cache_attribs) && $cache_type != 4) { + tpl_set_var('safari_message', $safari_not_allowed_message); + $error = true; + $attribs_not_ok = true; + } else { + tpl_set_var('safari_message', ''); + } + + //try to save to DB? + if (isset($_POST['submit'])) // Ocprop + { + //all validations ok? + if (!($hidden_date_not_ok || $lat_not_ok || $lon_not_ok || $name_not_ok || $time_not_ok || $way_length_not_ok || $size_not_ok || $activate_date_not_ok || $status_not_ok || $diff_not_ok || $attribs_not_ok || $wpgc_not_ok)) { + $cache_lat = $coords_lat_h + $coords_lat_min / 60; + if ($coords_latNS == 'S') { + $cache_lat = - $cache_lat; + } + + $cache_lon = $coords_lon_h + $coords_lon_min / 60; + if ($coords_lonEW == 'W') { + $cache_lon = - $cache_lon; + } + + if ($publish == 'now') { + $activation_date = 'NULL'; + } elseif ($publish == 'later') { + $status = 5; + $activation_date = "'" . sql_escape( + date( + 'Y-m-d H:i:s', + mktime( + $cache_activate_hour, + 0, + 0, + $cache_activate_month, + $cache_activate_day, + $cache_activate_year + ) + ) + ) . "'"; + } elseif ($publish == 'notnow') { + $status = 5; + $activation_date = 'NULL'; + } else { + // should never happen + $activation_date = 'NULL'; + } + + // check for Ocprop data to ignore + if ($ocpropping) { + $rs = sql("SELECT `type`, `size` FROM `caches` WHERE `cache_id`='&1'", $cache_id); + if ($r = sql_fetch_assoc($rs)) { + if ($r['type'] == 8 && $cache_type == 7) { + $cache_type = 8; + } + if ($r['type'] == 10 && $cache_type == 2) { + $cache_type = 10; + } + if ($r['size'] == 8 && ($sel_size == 1 || $sel_size == 2)) { + $sel_size = 8; + } + } + sql_free_result($rs); + } + + // fix showlists setting + if (!isset($_POST['showlists'])) { + $showlists = 0; + } + if (!isset($_POST['protect_old_coords'])) { + $protect_old_coords = 0; + } + + // save to DB + // Status update will trigger touching the last_modified date of all depending records. + // Status change via editcache.php is no longer available via the user interface, + // but still used by Ocprop and maybe other tools. + sql("SET @STATUS_CHANGE_USER_ID='&1'", $usr['userid']); + sql( + "UPDATE `caches` SET `name`='&1', `longitude`='&2', `latitude`='&3', `type`='&4', `date_hidden`='&5', `country`='&6', `size`='&7', `difficulty`='&8', `terrain`='&9', `status`='&10', `search_time`='&11', `way_length`='&12', `logpw`='&13', `wp_gc`='&14', `show_cachelists`='&15', `protect_old_coords`='&16', `date_activate` = $activation_date WHERE `cache_id`='&17'", + $cache_name, + $cache_lon, + $cache_lat, + $cache_type, + date('Y-m-d', mktime(0, 0, 0, $cache_hidden_month, $cache_hidden_day, $cache_hidden_year)), + $cache_country, + $sel_size, + $cache_difficulty, + $cache_terrain, + $status, + $search_time, + $way_length, + $log_pw, + $wp_gc, + $showlists, + $protect_old_coords, + $cache_id + ); + + // send notification on admin intervention + if ($cache_record['user_id'] != $usr['userid'] && + $opt['logic']['admin']['listingadmin_notification'] != '' + ) { + mail( + $opt['logic']['admin']['listingadmin_notification'], + mb_ereg_replace( + '{occode}', + $cache_record['wp_oc'], + mb_ereg_replace( + '{username}', + $usr['username'], + t('Cache listing {occode} has been modified by {username}') + ) + ), + t('The modifications can be checked via vandalism restore function.') + ); + } + + // generate status-change log + if ($status != $status_old && $status_old != 5) { + switch ($status) { + case 1: + $logtype = 10; + break; + case 2: + $logtype = 11; + break; + case 3: + $logtype = 9; + break; + case 6: + $logtype = 13; + break; + default: + $logtype = 0; // ??? + } + if ($logtype > 0) { + sql( + "INSERT INTO `cache_logs` (`node`, `cache_id`, `user_id`, `type`, `date`) VALUES ('&1','&2','&3','&4','&5')", - $oc_nodeid, $cache_id, $usr['userid'], $logtype, date('Y-m-d')); - // notifications will be automatically generated - } - } - - // do not use slave server for the next time ... - db_slave_exclude(); - - // update cache attributes - $attriblist = "999"; - for ($i=0; $i 0) - { - sql("INSERT IGNORE INTO `caches_attributes` (`cache_id`, `attrib_id`) VALUES('&1', '&2')", $cache_id, $cache_attribs[$i]+0); - $attriblist .= "," . ($cache_attribs[$i]+0); - } - } - - sql("DELETE FROM `caches_attributes` WHERE `cache_id`='&1' AND `attrib_id` NOT IN (" . $attriblist . ")", - // SQL injections in $attriblist prevented by adding 0 above - $cache_id); - - //call eventhandler - require_once($opt['rootpath'] . 'lib/eventhandler.inc.php'); - event_edit_cache($cache_id, $usr['userid']+0); - - // if old status is not yet published and new status is published => notify-event - if ($status_old == 5 && $status != 5) - { - event_notify_new_cache($cache_id); - } - - //display cache-page - tpl_redirect('viewcache.php?cacheid=' . urlencode($cache_id)); - // Ocprop: Location:\s*$viewcacheUrl\?cacheid=([0-9]+) - // (s.a. tpl_redirect() in common.inc.php - exit; - } - } - elseif (isset($_POST['show_all_countries_submit'])) - { - $show_all_countries = 1; - } - - //here we only set up the template variables - - //build countrylist - $countriesoptions = ''; - - //check if selected country is in list_default - if ($show_all_countries == 0) - { - $rs = sql("SELECT `show` FROM `countries_list_default` WHERE `show`='&1' AND `lang`='&2'", $cache_country, $locale); - if (mysql_num_rows($rs) == 0) $show_all_countries = 1; - sql_free_result($rs); - } - - //get the record - if ($show_all_countries == 0) - $rs = sql("SELECT `countries`.`short`, IFNULL(`sys_trans_text`.`text`, `countries`.`name`) AS `name` FROM `countries` INNER JOIN `countries_list_default` ON `countries_list_default`.`show`=`countries`.`short` LEFT JOIN `sys_trans` ON `countries`.`trans_id`=`sys_trans`.`id` LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='&1' WHERE `countries_list_default`.`lang`='&1' ORDER BY `name` ASC", $locale); - else - $rs = sql("SELECT `countries`.`short`, IFNULL(`sys_trans_text`.`text`, `countries`.`name`) AS `name` FROM `countries` LEFT JOIN `sys_trans` ON `countries`.`trans_id`=`sys_trans`.`id` LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='&1' ORDER BY `name` ASC", $locale); - - while ($record = sql_fetch_assoc($rs)) - { - $sSelected = ($record['short'] == $cache_country) ? ' selected="selected"' : ''; - $countriesoptions .= '' . "\n"; - } - tpl_set_var('countryoptions', $countriesoptions); - sql_free_result($rs); - - // cache-attributes - $bBeginLine = true; - $nPrevLineAttrCount = 0; - $nLineAttrCount = 0; - - $cache_attrib_list = ''; - $cache_attrib_array = ''; - $cache_attribs_string = ''; - - $rsAttrGroup = sql("SELECT `attribute_groups`.`id`, IFNULL(`sys_trans_text`.`text`, `attribute_groups`.`name`) AS `name`, `attribute_categories`.`color` + $oc_nodeid, + $cache_id, + $usr['userid'], + $logtype, + date('Y-m-d') + ); + // notifications will be automatically generated + } + } + + // do not use slave server for the next time ... + db_slave_exclude(); + + // update cache attributes + $attriblist = "999"; + for ($i = 0; $i < count($cache_attribs); $i ++) { + if ($cache_attribs[$i] + 0 > 0) { + sql( + "INSERT IGNORE INTO `caches_attributes` (`cache_id`, `attrib_id`) VALUES('&1', '&2')", + $cache_id, + $cache_attribs[$i] + 0 + ); + $attriblist .= "," . ($cache_attribs[$i] + 0); + } + } + + sql( + "DELETE FROM `caches_attributes` WHERE `cache_id`='&1' AND `attrib_id` NOT IN (" . $attriblist . ")", + // SQL injections in $attriblist prevented by adding 0 above + $cache_id + ); + + //call eventhandler + require_once($opt['rootpath'] . 'lib/eventhandler.inc.php'); + event_edit_cache($cache_id, $usr['userid'] + 0); + + // if old status is not yet published and new status is published => notify-event + if ($status_old == 5 && $status != 5) { + event_notify_new_cache($cache_id); + } + + //display cache-page + tpl_redirect('viewcache.php?cacheid=' . urlencode($cache_id)); + // Ocprop: Location:\s*$viewcacheUrl\?cacheid=([0-9]+) + // (s.a. tpl_redirect() in common.inc.php + exit; + } + } elseif (isset($_POST['show_all_countries_submit'])) { + $show_all_countries = 1; + } + + //here we only set up the template variables + + //build countrylist + $countriesoptions = ''; + + //check if selected country is in list_default + if ($show_all_countries == 0) { + $rs = sql( + "SELECT `show` FROM `countries_list_default` WHERE `show`='&1' AND `lang`='&2'", + $cache_country, + $locale + ); + if (mysql_num_rows($rs) == 0) { + $show_all_countries = 1; + } + sql_free_result($rs); + } + + //get the record + if ($show_all_countries == 0) { + $rs = sql( + "SELECT `countries`.`short`, IFNULL(`sys_trans_text`.`text`, `countries`.`name`) AS `name` FROM `countries` INNER JOIN `countries_list_default` ON `countries_list_default`.`show`=`countries`.`short` LEFT JOIN `sys_trans` ON `countries`.`trans_id`=`sys_trans`.`id` LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='&1' WHERE `countries_list_default`.`lang`='&1' ORDER BY `name` ASC", + $locale + ); + } else { + $rs = sql( + "SELECT `countries`.`short`, IFNULL(`sys_trans_text`.`text`, `countries`.`name`) AS `name` FROM `countries` LEFT JOIN `sys_trans` ON `countries`.`trans_id`=`sys_trans`.`id` LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='&1' ORDER BY `name` ASC", + $locale + ); + } + + while ($record = sql_fetch_assoc($rs)) { + $sSelected = ($record['short'] == $cache_country) ? ' selected="selected"' : ''; + $countriesoptions .= '' . "\n"; + } + tpl_set_var('countryoptions', $countriesoptions); + sql_free_result($rs); + + // cache-attributes + $bBeginLine = true; + $nPrevLineAttrCount = 0; + $nLineAttrCount = 0; + + $cache_attrib_list = ''; + $cache_attrib_array = ''; + $cache_attribs_string = ''; + + $rsAttrGroup = sql( + "SELECT `attribute_groups`.`id`, IFNULL(`sys_trans_text`.`text`, `attribute_groups`.`name`) AS `name`, `attribute_categories`.`color` FROM `attribute_groups` INNER JOIN `attribute_categories` ON `attribute_groups`.`category_id`=`attribute_categories`.`id` LEFT JOIN `sys_trans` ON `attribute_groups`.`trans_id`=`sys_trans`.`id` LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='&1' - ORDER BY `attribute_groups`.`category_id` ASC, `attribute_groups`.`id` ASC", $locale); - while ($rAttrGroup = sql_fetch_assoc($rsAttrGroup)) - { - $group_line = ''; - - $rs = sql("SELECT `cache_attrib`.`id`, IFNULL(`ttname`.`text`, `cache_attrib`.`name`) AS `name`, `cache_attrib`.`icon_undef`, `cache_attrib`.`icon_large`, + ORDER BY `attribute_groups`.`category_id` ASC, `attribute_groups`.`id` ASC", + $locale + ); + while ($rAttrGroup = sql_fetch_assoc($rsAttrGroup)) { + $group_line = ''; + + $rs = sql( + "SELECT `cache_attrib`.`id`, IFNULL(`ttname`.`text`, `cache_attrib`.`name`) AS `name`, `cache_attrib`.`icon_undef`, `cache_attrib`.`icon_large`, IFNULL(`ttdesc`.`text`, `cache_attrib`.`html_desc`) AS `html_desc` FROM `cache_attrib` LEFT JOIN `caches_attributes` ON `cache_attrib`.`id`=`caches_attributes`.`attrib_id` AND `caches_attributes`.`cache_id`='&2' @@ -655,328 +708,382 @@ function getWaypoints($cacheid) WHERE `cache_attrib`.`group_id`='&3' AND NOT IFNULL(`cache_attrib`.`hidden`, 0)=1 AND (`cache_attrib`.`selectable`!=0 OR `caches_attributes`.`cache_id`='&2') - ORDER BY `cache_attrib`.`group_id` ASC, `cache_attrib`.`id` ASC", $locale, $cache_id, $rAttrGroup['id']); - while($record = sql_fetch_array($rs)) - { - $line = $cache_attrib_pic; - - $line = mb_ereg_replace('{attrib_id}', $record['id'], $line); - $line = mb_ereg_replace('{attrib_text}', escape_javascript($record['name']), $line); - if (in_array($record['id'], $cache_attribs)) - $line = mb_ereg_replace('{attrib_pic}', $record['icon_large'], $line); - else - $line = mb_ereg_replace('{attrib_pic}', $record['icon_undef'], $line); - $line = mb_ereg_replace('{html_desc}', escape_javascript($record['html_desc']), $line); - $line = mb_ereg_replace('{name}', escape_javascript($record['name']), $line); - $line = mb_ereg_replace('{color}', $rAttrGroup['color'], $line); - $group_line .= $line; - $nLineAttrCount++; - - $line = $cache_attrib_js; - $line = mb_ereg_replace('{id}', $record['id'], $line); - if (in_array($record['id'], $cache_attribs)) - $line = mb_ereg_replace('{selected}', 1, $line); - else - $line = mb_ereg_replace('{selected}', 0, $line); - $line = mb_ereg_replace('{img_undef}', $record['icon_undef'], $line); - $line = mb_ereg_replace('{img_large}', $record['icon_large'], $line); - if ($cache_attrib_array != '') $cache_attrib_array .= ','; - $cache_attrib_array .= $line; - - if (in_array($record['id'], $cache_attribs)) - { - if ($cache_attribs_string != '') $cache_attribs_string .= ';'; - $cache_attribs_string .= $record['id']; - } - } - sql_free_result($rs); - - if ($group_line != '') - { - $group_img = $cache_attrib_group; - $group_img = mb_ereg_replace('{color}', $rAttrGroup['color'], $group_img); - $group_img = mb_ereg_replace('{attribs}', $group_line, $group_img); - $group_img = mb_ereg_replace('{name}', htmlspecialchars($rAttrGroup['name'], ENT_COMPAT, 'UTF-8'), $group_img); - - if ($bBeginLine == true) - { - $cache_attrib_list .= '
'; - $bBeginLine = false; - } - - $cache_attrib_list .= $group_img; - $nPrevLineAttrCount += $nLineAttrCount; - - $nLineAttrCount = 0; - } - } - sql_free_result($rsAttrGroup); - if ($bBeginLine == false) - $cache_attrib_list .= '
'; - - tpl_set_var('cache_attrib_list', $cache_attrib_list); - tpl_set_var('jsattributes_array', $cache_attrib_array); - tpl_set_var('cache_attribs', $cache_attribs_string); - - //difficulty - $difficulty_options = ''; - for ($i = 2; $i <= 10; $i++) - { - if ($cache_difficulty == $i) - { - $difficulty_options .= ''; - } - else - { - $difficulty_options .= ''; - } - $difficulty_options .= "\n"; - } - tpl_set_var('difficultyoptions', $difficulty_options); - - //build terrain options - $terrain_options = ''; - for ($i = 2; $i <= 10; $i++) - { - if ($cache_terrain == $i) - { - $terrain_options .= ''; - } - else - { - $terrain_options .= ''; - } - $terrain_options .= "\n"; - } - tpl_set_var('terrainoptions', $terrain_options); - - //build typeoptions - $types = ''; - $rsTypes = sql("SELECT `cache_type`.`id`, IFNULL(`sys_trans_text`.`text`, `cache_type`.`en`) AS `name` + ORDER BY `cache_attrib`.`group_id` ASC, `cache_attrib`.`id` ASC", + $locale, + $cache_id, + $rAttrGroup['id'] + ); + while ($record = sql_fetch_array($rs)) { + $line = $cache_attrib_pic; + + $line = mb_ereg_replace('{attrib_id}', $record['id'], $line); + $line = mb_ereg_replace('{attrib_text}', escape_javascript($record['name']), $line); + if (in_array($record['id'], $cache_attribs)) { + $line = mb_ereg_replace('{attrib_pic}', $record['icon_large'], $line); + } else { + $line = mb_ereg_replace('{attrib_pic}', $record['icon_undef'], $line); + } + $line = mb_ereg_replace('{html_desc}', escape_javascript($record['html_desc']), $line); + $line = mb_ereg_replace('{name}', escape_javascript($record['name']), $line); + $line = mb_ereg_replace('{color}', $rAttrGroup['color'], $line); + $group_line .= $line; + $nLineAttrCount ++; + + $line = $cache_attrib_js; + $line = mb_ereg_replace('{id}', $record['id'], $line); + if (in_array($record['id'], $cache_attribs)) { + $line = mb_ereg_replace('{selected}', 1, $line); + } else { + $line = mb_ereg_replace('{selected}', 0, $line); + } + $line = mb_ereg_replace('{img_undef}', $record['icon_undef'], $line); + $line = mb_ereg_replace('{img_large}', $record['icon_large'], $line); + if ($cache_attrib_array != '') { + $cache_attrib_array .= ','; + } + $cache_attrib_array .= $line; + + if (in_array($record['id'], $cache_attribs)) { + if ($cache_attribs_string != '') { + $cache_attribs_string .= ';'; + } + $cache_attribs_string .= $record['id']; + } + } + sql_free_result($rs); + + if ($group_line != '') { + $group_img = $cache_attrib_group; + $group_img = mb_ereg_replace('{color}', $rAttrGroup['color'], $group_img); + $group_img = mb_ereg_replace('{attribs}', $group_line, $group_img); + $group_img = mb_ereg_replace( + '{name}', + htmlspecialchars($rAttrGroup['name'], ENT_COMPAT, 'UTF-8'), + $group_img + ); + + if ($bBeginLine == true) { + $cache_attrib_list .= '
'; + $bBeginLine = false; + } + + $cache_attrib_list .= $group_img; + $nPrevLineAttrCount += $nLineAttrCount; + + $nLineAttrCount = 0; + } + } + sql_free_result($rsAttrGroup); + if ($bBeginLine == false) { + $cache_attrib_list .= '
'; + } + + tpl_set_var('cache_attrib_list', $cache_attrib_list); + tpl_set_var('jsattributes_array', $cache_attrib_array); + tpl_set_var('cache_attribs', $cache_attribs_string); + + //difficulty + $difficulty_options = ''; + for ($i = 2; $i <= 10; $i ++) { + if ($cache_difficulty == $i) { + $difficulty_options .= ''; + } else { + $difficulty_options .= ''; + } + $difficulty_options .= "\n"; + } + tpl_set_var('difficultyoptions', $difficulty_options); + + //build terrain options + $terrain_options = ''; + for ($i = 2; $i <= 10; $i ++) { + if ($cache_terrain == $i) { + $terrain_options .= ''; + } else { + $terrain_options .= ''; + } + $terrain_options .= "\n"; + } + tpl_set_var('terrainoptions', $terrain_options); + + //build typeoptions + $types = ''; + $rsTypes = sql( + "SELECT `cache_type`.`id`, IFNULL(`sys_trans_text`.`text`, `cache_type`.`en`) AS `name` FROM `cache_type` LEFT JOIN `sys_trans` ON `cache_type`.`trans_id`=`sys_trans`.`id` LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='" . sql_escape($locale) . "' - ORDER BY `cache_type`.`ordinal` ASC"); - while ($rType = sql_fetch_assoc($rsTypes)) - { - $sSelected = ($rType['id'] == $cache_type) ? ' selected="selected"' : ''; - $types .= ''; - } - sql_free_result($rsTypes); - tpl_set_var('typeoptions', $types); - - //build sizeoptions - $sizes = ''; - $rsSizes = sql("SELECT `cache_size`.`id`, IFNULL(`sys_trans_text`.`text`, `cache_size`.`name`) AS `name` + ORDER BY `cache_type`.`ordinal` ASC" + ); + while ($rType = sql_fetch_assoc($rsTypes)) { + $sSelected = ($rType['id'] == $cache_type) ? ' selected="selected"' : ''; + $types .= ''; + } + sql_free_result($rsTypes); + tpl_set_var('typeoptions', $types); + + //build sizeoptions + $sizes = ''; + $rsSizes = sql( + "SELECT `cache_size`.`id`, IFNULL(`sys_trans_text`.`text`, `cache_size`.`name`) AS `name` FROM `cache_size` LEFT JOIN `sys_trans` ON `cache_size`.`trans_id`=`sys_trans`.`id` LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='" . sql_escape($locale) . "' - ORDER BY `cache_size`.`ordinal` ASC"); - while ($rSize = sql_fetch_assoc($rsSizes)) - { - $sSelected = ($rSize['id'] == $sel_size) ? ' selected="selected"' : ''; - $sizes .= ''; - } - sql_free_result($rsSizes); - tpl_set_var('sizeoptions', $sizes); - - //Cachedescs - $desclangs = mb_split(',', $cache_record['desc_languages']); - $cache_descs = ''; - $gc_com_refs = false; - foreach ($desclangs AS $desclang) - { - if (count($desclangs) > 1) - { - $remove_url = 'removedesc.php?cacheid=' . urlencode($cache_id) . '&desclang=' . urlencode($desclang); - $removedesc = ' [' . $remove . ']'; - } - else - { - $removedesc = ''; - } - - $resp = sql("SELECT `desc` FROM `cache_desc` WHERE `cache_id`='&1' AND `language`='&2'", $cache_id, $desclang); - $row = sql_fetch_array($resp); - if(mb_strpos($row['desc'], "http://img.groundspeak.com/") !== false) - $gc_com_refs = true; - sql_free_result($resp); - - $edit_url = 'editdesc.php?cacheid=' . urlencode($cache_id) . '&desclang=' . urlencode($desclang); - - $cache_descs .= '' . htmlspecialchars(db_LanguageFromShort($desclang), ENT_COMPAT, 'UTF-8') . ' [' . $edit . ']' . $removedesc . ''; - } - tpl_set_var('cache_descs', $cache_descs); - - if($gc_com_refs) - { - tpl_set_var('gc_com_refs_start', ""); - tpl_set_var('gc_com_refs_end', ""); - } - else - { - tpl_set_var('gc_com_refs_start', ""); - } - - //Status - $statusoptions = ''; - if ($status_old != 7) - { - $rsStatus = sql("SELECT `cache_status`.`id`, IFNULL(`sys_trans_text`.`text`, `cache_status`.`name`) AS `name` + ORDER BY `cache_size`.`ordinal` ASC" + ); + while ($rSize = sql_fetch_assoc($rsSizes)) { + $sSelected = ($rSize['id'] == $sel_size) ? ' selected="selected"' : ''; + $sizes .= ''; + } + sql_free_result($rsSizes); + tpl_set_var('sizeoptions', $sizes); + + //Cachedescs + $desclangs = mb_split(',', $cache_record['desc_languages']); + $cache_descs = ''; + $gc_com_refs = false; + foreach ($desclangs AS $desclang) { + if (count($desclangs) > 1) { + $remove_url = 'removedesc.php?cacheid=' . urlencode($cache_id) . '&desclang=' . urlencode( + $desclang + ); + $removedesc = ' [' . $remove . ']'; + } else { + $removedesc = ''; + } + + $resp = sql( + "SELECT `desc` FROM `cache_desc` WHERE `cache_id`='&1' AND `language`='&2'", + $cache_id, + $desclang + ); + $row = sql_fetch_array($resp); + if (mb_strpos($row['desc'], "http://img.groundspeak.com/") !== false) { + $gc_com_refs = true; + } + sql_free_result($resp); + + $edit_url = 'editdesc.php?cacheid=' . urlencode($cache_id) . '&desclang=' . urlencode($desclang); + + $cache_descs .= '' . htmlspecialchars( + db_LanguageFromShort($desclang), + ENT_COMPAT, + 'UTF-8' + ) . ' [' . $edit . ']' . $removedesc . ''; + } + tpl_set_var('cache_descs', $cache_descs); + + if ($gc_com_refs) { + tpl_set_var('gc_com_refs_start', ""); + tpl_set_var('gc_com_refs_end', ""); + } else { + tpl_set_var('gc_com_refs_start', ""); + } + + //Status + $statusoptions = ''; + if ($status_old != 7) { + $rsStatus = sql( + "SELECT `cache_status`.`id`, IFNULL(`sys_trans_text`.`text`, `cache_status`.`name`) AS `name` FROM `cache_status` LEFT JOIN `sys_trans` ON `cache_status`.`trans_id`=`sys_trans`.`id` LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='" . sql_escape($locale) . "' - WHERE `cache_status`.`id` NOT IN (4, 5, 7) OR `cache_status`.`id`='" . sql_escape($status_old+0) . "' - ORDER BY `cache_status`.`id` ASC"); - while ($rStatus = sql_fetch_assoc($rsStatus)) - { - $sSelected = ($rStatus['id'] == $status) ? ' selected="selected"' : ''; - if ($sSelected != '' || $status_old == 5) - $statusoptions .= ''; - } - sql_free_result($rsStatus); - } - else - { - $statusoptions .= ''; - } - tpl_set_var('statusoptions', $statusoptions); - tpl_set_var('statuschange', $status_old == 5 ? '' : mb_ereg_replace('%1',$cache_id,$status_change)); - - // show activation form? - if($status_old == 5) // status = not yet published - { - $tmp = $activation_form; - - $tmp = mb_ereg_replace('{activate_day}', htmlspecialchars($cache_activate_day, ENT_COMPAT, 'UTF-8'), $tmp); - $tmp = mb_ereg_replace('{activate_month}', htmlspecialchars($cache_activate_month, ENT_COMPAT, 'UTF-8'), $tmp); - $tmp = mb_ereg_replace('{activate_year}', htmlspecialchars($cache_activate_year, ENT_COMPAT, 'UTF-8'), $tmp); - $tmp = mb_ereg_replace('{publish_now_checked}', ($publish == 'now') ? 'checked' : '', $tmp); - $tmp = mb_ereg_replace('{publish_later_checked}', ($publish == 'later') ? 'checked' : '', $tmp); - $tmp = mb_ereg_replace('{publish_notnow_checked}', ($publish == 'notnow') ? 'checked' : '', $tmp); - - $activation_hours = ''; - for ($i = 0; $i <= 23; $i++) - { - if ($cache_activate_hour == $i) - { - $activation_hours .= ''; - } - else - { - $activation_hours .= ''; - } - $activation_hours .= "\n"; - } - $tmp = mb_ereg_replace('{activation_hours}', $activation_hours, $tmp); - - if($activate_date_not_ok) - { - $tmp = mb_ereg_replace('{activate_on_message}', $date_message, $tmp); - } - else - { - $tmp = mb_ereg_replace('{activate_on_message}', '', $tmp); - } - - tpl_set_var('activation_form', $tmp); - } - else - { - tpl_set_var('activation_form', ''); - } - - if ($cache_record['picture'] > 0) - { - $pictures = ''; - $rspictures = sql("SELECT `url`, `title`, `uuid` FROM `pictures` WHERE `object_id`='&1' AND `object_type`=2 ORDER BY `seq`", $cache_id); - - for ($i = 0; $i < mysql_num_rows($rspictures); $i++) - { - $tmpline = ($i == 0 ? $pictureline0 : $pictureline); - $pic_record = sql_fetch_array($rspictures); - - $tmpline = mb_ereg_replace('{link}', htmlspecialchars($pic_record['url'], ENT_COMPAT, 'UTF-8'), $tmpline); - $tmpline = mb_ereg_replace('{title}', htmlspecialchars($pic_record['title'], ENT_COMPAT, 'UTF-8'), $tmpline); - $tmpline = mb_ereg_replace('{uuid}', htmlspecialchars($pic_record['uuid'], ENT_COMPAT, 'UTF-8'), $tmpline); - - $pictures .= $tmpline; - } - - $pictures = mb_ereg_replace('{lines}', $pictures, $picturelines); - mysql_free_result($rspictures); - tpl_set_var('pictures', $pictures); - } - else - tpl_set_var('pictures', $nopictures); - tpl_set_var('gc_com_msg2', mb_ereg_replace('%1', $opt['page']['sitename'], $gc_com_msg2)); - - tpl_set_var('waypoints', getWaypoints($cache_id)); - - tpl_set_var('cacheid', htmlspecialchars($cache_id, ENT_COMPAT, 'UTF-8')); - tpl_set_var('name', htmlspecialchars($cache_name, ENT_COMPAT, 'UTF-8')); - - tpl_set_var('ownername', htmlspecialchars($cache_record['username'], ENT_COMPAT, 'UTF-8')); - - tpl_set_var('date_day', htmlspecialchars($cache_hidden_day, ENT_COMPAT, 'UTF-8')); - tpl_set_var('date_month', htmlspecialchars($cache_hidden_month, ENT_COMPAT, 'UTF-8')); - tpl_set_var('date_year', htmlspecialchars($cache_hidden_year, ENT_COMPAT, 'UTF-8')); - - tpl_set_var('selLatN', ($coords_latNS == 'N') ? ' selected="selected"' : ''); - tpl_set_var('selLatS', ($coords_latNS == 'S') ? ' selected="selected"' : ''); - tpl_set_var('selLonE', ($coords_lonEW == 'E') ? ' selected="selected"' : ''); - tpl_set_var('selLonW', ($coords_lonEW == 'W') ? ' selected="selected"' : ''); - tpl_set_var('lat_h', htmlspecialchars($coords_lat_h, ENT_COMPAT, 'UTF-8')); - tpl_set_var('lat_min', htmlspecialchars($coords_lat_min, ENT_COMPAT, 'UTF-8')); - tpl_set_var('lon_h', htmlspecialchars($coords_lon_h, ENT_COMPAT, 'UTF-8')); - tpl_set_var('lon_min', htmlspecialchars($coords_lon_min, ENT_COMPAT, 'UTF-8')); - - tpl_set_var('name_message', ($name_not_ok == true) ? $name_message : ''); - tpl_set_var('lon_message', ($lon_not_ok == true) ? $coords_message : ''); - tpl_set_var('lat_message', ($lat_not_ok == true) ? $coords_message : ''); - tpl_set_var('date_message', ($hidden_date_not_ok == true) ? $date_message : ''); - tpl_set_var('size_message', ($size_not_ok == true) ? $sizemismatch_message : ''); - tpl_set_var('wpgc_message', ($wpgc_not_ok == true) ? $bad_wpgc_message : ''); - - if($lon_not_ok || $lat_not_ok || $hidden_date_not_ok || $name_not_ok) - tpl_set_var('general_message', $error_general); - else - tpl_set_var('general_message', ""); - - tpl_set_var('cacheid_urlencode', htmlspecialchars(urlencode($cache_id), ENT_COMPAT, 'UTF-8')); - tpl_set_var('cacheuuid_urlencode', htmlspecialchars(urlencode($cache_record['uuid']), ENT_COMPAT, 'UTF-8')); - tpl_set_var('show_all_countries', $show_all_countries); - tpl_set_var('show_all_countries_submit', ($show_all_countries == 0) ? $all_countries_submit: ''); - - $st_hours = floor($search_time); - $st_minutes = sprintf('%02.0F', ($search_time - $st_hours) * 60); - - tpl_set_var('search_time', $st_hours . ':' . $st_minutes); - - tpl_set_var('way_length', $way_length); - tpl_set_var('log_pw', htmlspecialchars($log_pw, ENT_COMPAT, 'UTF-8')); - tpl_set_var('wp_gc', htmlspecialchars($wp_gc, ENT_COMPAT, 'UTF-8')); - tpl_set_var('showlists_checked', $showlists ? 'checked="checked"' : ''); - tpl_set_var('protectcoords_checked', $protect_old_coords ? 'checked="checked"' : ''); - - tpl_set_var('reset', $reset); // obsolete - tpl_set_var('submit', $submit); - } - else - { - //TODO: not the owner - } - } - else - { - //TODO: cache not exist - } - } - } - - //make the template and send it out - tpl_BuildTemplate(); + WHERE `cache_status`.`id` NOT IN (4, 5, 7) OR `cache_status`.`id`='" . sql_escape( + $status_old + 0 + ) . "' + ORDER BY `cache_status`.`id` ASC" + ); + while ($rStatus = sql_fetch_assoc($rsStatus)) { + $sSelected = ($rStatus['id'] == $status) ? ' selected="selected"' : ''; + if ($sSelected != '' || $status_old == 5) { + $statusoptions .= ''; + } + } + sql_free_result($rsStatus); + } else { + $statusoptions .= ''; + } + tpl_set_var('statusoptions', $statusoptions); + tpl_set_var('statuschange', $status_old == 5 ? '' : mb_ereg_replace('%1', $cache_id, $status_change)); + + // show activation form? + if ($status_old == 5) // status = not yet published + { + $tmp = $activation_form; + + $tmp = mb_ereg_replace( + '{activate_day}', + htmlspecialchars($cache_activate_day, ENT_COMPAT, 'UTF-8'), + $tmp + ); + $tmp = mb_ereg_replace( + '{activate_month}', + htmlspecialchars($cache_activate_month, ENT_COMPAT, 'UTF-8'), + $tmp + ); + $tmp = mb_ereg_replace( + '{activate_year}', + htmlspecialchars($cache_activate_year, ENT_COMPAT, 'UTF-8'), + $tmp + ); + $tmp = mb_ereg_replace('{publish_now_checked}', ($publish == 'now') ? 'checked' : '', $tmp); + $tmp = mb_ereg_replace('{publish_later_checked}', ($publish == 'later') ? 'checked' : '', $tmp); + $tmp = mb_ereg_replace('{publish_notnow_checked}', ($publish == 'notnow') ? 'checked' : '', $tmp); + + $activation_hours = ''; + for ($i = 0; $i <= 23; $i ++) { + if ($cache_activate_hour == $i) { + $activation_hours .= ''; + } else { + $activation_hours .= ''; + } + $activation_hours .= "\n"; + } + $tmp = mb_ereg_replace('{activation_hours}', $activation_hours, $tmp); + + if ($activate_date_not_ok) { + $tmp = mb_ereg_replace('{activate_on_message}', $date_message, $tmp); + } else { + $tmp = mb_ereg_replace('{activate_on_message}', '', $tmp); + } + + tpl_set_var('activation_form', $tmp); + } else { + tpl_set_var('activation_form', ''); + } + + if ($cache_record['picture'] > 0) { + $pictures = ''; + $rspictures = sql( + "SELECT `url`, `title`, `uuid` FROM `pictures` WHERE `object_id`='&1' AND `object_type`=2 ORDER BY `seq`", + $cache_id + ); + + for ($i = 0; $i < mysql_num_rows($rspictures); $i ++) { + $tmpline = ($i == 0 ? $pictureline0 : $pictureline); + $pic_record = sql_fetch_array($rspictures); + + $tmpline = mb_ereg_replace( + '{link}', + htmlspecialchars($pic_record['url'], ENT_COMPAT, 'UTF-8'), + $tmpline + ); + $tmpline = mb_ereg_replace( + '{title}', + htmlspecialchars($pic_record['title'], ENT_COMPAT, 'UTF-8'), + $tmpline + ); + $tmpline = mb_ereg_replace( + '{uuid}', + htmlspecialchars($pic_record['uuid'], ENT_COMPAT, 'UTF-8'), + $tmpline + ); + + $pictures .= $tmpline; + } + + $pictures = mb_ereg_replace('{lines}', $pictures, $picturelines); + mysql_free_result($rspictures); + tpl_set_var('pictures', $pictures); + } else { + tpl_set_var('pictures', $nopictures); + } + tpl_set_var('gc_com_msg2', mb_ereg_replace('%1', $opt['page']['sitename'], $gc_com_msg2)); + + tpl_set_var('waypoints', getWaypoints($cache_id)); + + tpl_set_var('cacheid', htmlspecialchars($cache_id, ENT_COMPAT, 'UTF-8')); + tpl_set_var('name', htmlspecialchars($cache_name, ENT_COMPAT, 'UTF-8')); + + tpl_set_var('ownername', htmlspecialchars($cache_record['username'], ENT_COMPAT, 'UTF-8')); + + tpl_set_var('date_day', htmlspecialchars($cache_hidden_day, ENT_COMPAT, 'UTF-8')); + tpl_set_var('date_month', htmlspecialchars($cache_hidden_month, ENT_COMPAT, 'UTF-8')); + tpl_set_var('date_year', htmlspecialchars($cache_hidden_year, ENT_COMPAT, 'UTF-8')); + + tpl_set_var('selLatN', ($coords_latNS == 'N') ? ' selected="selected"' : ''); + tpl_set_var('selLatS', ($coords_latNS == 'S') ? ' selected="selected"' : ''); + tpl_set_var('selLonE', ($coords_lonEW == 'E') ? ' selected="selected"' : ''); + tpl_set_var('selLonW', ($coords_lonEW == 'W') ? ' selected="selected"' : ''); + tpl_set_var('lat_h', htmlspecialchars($coords_lat_h, ENT_COMPAT, 'UTF-8')); + tpl_set_var('lat_min', htmlspecialchars($coords_lat_min, ENT_COMPAT, 'UTF-8')); + tpl_set_var('lon_h', htmlspecialchars($coords_lon_h, ENT_COMPAT, 'UTF-8')); + tpl_set_var('lon_min', htmlspecialchars($coords_lon_min, ENT_COMPAT, 'UTF-8')); + + tpl_set_var('name_message', ($name_not_ok == true) ? $name_message : ''); + tpl_set_var('lon_message', ($lon_not_ok == true) ? $coords_message : ''); + tpl_set_var('lat_message', ($lat_not_ok == true) ? $coords_message : ''); + tpl_set_var('date_message', ($hidden_date_not_ok == true) ? $date_message : ''); + tpl_set_var('size_message', ($size_not_ok == true) ? $sizemismatch_message : ''); + tpl_set_var('wpgc_message', ($wpgc_not_ok == true) ? $bad_wpgc_message : ''); + + if ($lon_not_ok || $lat_not_ok || $hidden_date_not_ok || $name_not_ok) { + tpl_set_var('general_message', $error_general); + } else { + tpl_set_var('general_message', ""); + } + + tpl_set_var('cacheid_urlencode', htmlspecialchars(urlencode($cache_id), ENT_COMPAT, 'UTF-8')); + tpl_set_var( + 'cacheuuid_urlencode', + htmlspecialchars(urlencode($cache_record['uuid']), ENT_COMPAT, 'UTF-8') + ); + tpl_set_var('show_all_countries', $show_all_countries); + tpl_set_var('show_all_countries_submit', ($show_all_countries == 0) ? $all_countries_submit : ''); + + $st_hours = floor($search_time); + $st_minutes = sprintf('%02.0F', ($search_time - $st_hours) * 60); + + tpl_set_var('search_time', $st_hours . ':' . $st_minutes); + + tpl_set_var('way_length', $way_length); + tpl_set_var('log_pw', htmlspecialchars($log_pw, ENT_COMPAT, 'UTF-8')); + tpl_set_var('wp_gc', htmlspecialchars($wp_gc, ENT_COMPAT, 'UTF-8')); + tpl_set_var('showlists_checked', $showlists ? 'checked="checked"' : ''); + tpl_set_var('protectcoords_checked', $protect_old_coords ? 'checked="checked"' : ''); + + tpl_set_var('reset', $reset); // obsolete + tpl_set_var('submit', $submit); + } else { + //TODO: not the owner + } + } else { + //TODO: cache not exist + } + } +} + +//make the template and send it out +tpl_BuildTemplate(); diff --git a/htdocs/index.php b/htdocs/index.php index b9f2edcf6..56cffaa7c 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -5,6 +5,7 @@ * Unicode Reminder メモ ***************************************************************************/ +require_once(__DIR__.'/vendor/autoload.php'); require('./lib2/web.inc.php'); require('./lib2/logic/logpics.inc.php'); $sUserCountry = $login->getUserCountry(); diff --git a/htdocs/lib/common.inc.php b/htdocs/lib/common.inc.php index 0a2010825..95bf169e2 100644 --- a/htdocs/lib/common.inc.php +++ b/htdocs/lib/common.inc.php @@ -1,506 +1,487 @@ start(); - - function load_domain_settings() - { - global $opt, $style; - - $domain = $opt['page']['domain']; - - if (isset($opt['domain'][$domain]['style'])) - $style = $opt['domain'][$domain]['style']; - if (isset($opt['domain'][$domain]['cookiedomain'])) - $opt['cookie']['domain'] = $opt['domain'][$domain]['cookiedomain']; - - set_common_domain_config($opt); - } - - // get the language from a given shortage - // on success return the name, otherwise false - function db_LanguageFromShort($langcode) - { - global $dblink, $locale; - - //no databse connection? - if ($dblink === false) return false; - - //select the right record - $rs = sql("SELECT IFNULL(`sys_trans_text`.`text`, `languages`.`name`) AS `text` FROM `languages` LEFT JOIN `sys_trans` ON `languages`.`trans_id`=`sys_trans`.`id` LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='&1' WHERE `languages`.`short`='&2'", $locale, $langcode); - if (mysql_num_rows($rs) > 0) - { - $record = sql_fetch_array($rs); - - //return the language - return $record['text']; - } - else - { - //language not found - return false; - } - } - - //get the stored settings and authentification data from the cookie - function load_cookie_settings() - { - global $cookie, $lang, $style; - - //speach - if ($cookie->is_set('lang')) - { - $lang = $cookie->get('lang'); - } - - //style - if ($cookie->is_set('style')) - { - $style = $cookie->get('style'); - } - } - - //store the cookie vars - function write_cookie_settings() - { - global $cookie, $lang, $style; - - //language - $cookie->set('lang', $lang); - - //style - $cookie->set('style', $style); - - //send cookie - $cookie->header(); - } - - //returns the cookie value, otherwise false - function get_cookie_setting($name) - { - global $cookie; - - if ($cookie->is_set($name)) - { - return $cookie->get($name); - } - else - { - return false; - } - } - - //sets the cookie value - function set_cookie_setting($name, $value) - { - global $cookie; - $cookie->set($name, $value); - } - - //set a template replacement - //set no_eval true to prevent this contents from php-parsing. - //Important when replacing something that the user has posted - //in HTML code and could contain \<\? php-Code \?\> - function tpl_set_var($name, $value, $no_eval = true) - { - global $vars, $no_eval_vars; - $vars[$name] = $value; - $no_eval_vars[$name] = $no_eval; - } - - //get a template replacement, otherwise false - function tpl_get_var($name) - { - global $vars; - - if (isset($vars[$name])) - { - return $vars[$name]; - } - else - { - return false; - } - } - - //clear all template vars - function tpl_clear_vars() - { - unset($GLOBALS['vars']); - unset($GLOBALS['no_eval_vars']); - } - - //page function replaces {functionsbox} in main template - function tpl_set_page_function($id, $html_code) - { - global $page_functions; - - $page_functions[$id] = $html_code; - } - - function tpl_unset_page_function($id) - { - global $page_functions; - - unset($page_functions[$id]); - } - - function tpl_clear_page_functions() - { - unset($GLOBALS['page_functions']); - } - - //read the templates and echo it to the user - function tpl_BuildTemplate($dbdisconnect=true) - { - //template handling vars - global $style, $stylepath, $tplname, $vars, $langpath, $locale, $opt, $oc_nodeid, $translate, $usr; - //language specific expression - global $error_pagenotexist; - //only for debbuging - global $b, $bScriptExecution; - // country dropdown - global $tpl_usercountries; - - tpl_set_var('screen_css_time',filemtime($opt['rootpath'] . "resource2/" . $style . "/css/style_screen.css")); - tpl_set_var('screen_msie_css_time',filemtime($opt['rootpath'] . "resource2/" . $style . "/css/style_screen_msie.css")); - tpl_set_var('print_css_time',filemtime($opt['rootpath'] . "resource2/" . $style . "/css/style_print.css")); - - if (isset($bScriptExecution)) - { - $bScriptExecution->Stop(); - tpl_set_var('scripttime', sprintf('%1.3f', $bScriptExecution->Diff())); - } - else - tpl_set_var('scripttime', sprintf('%1.3f', 0)); - - tpl_set_var('sponsorbottom', $opt['page']['sponsor']['bottom']); - - if (isset($opt['locale'][$locale]['page']['subtitle1'])) $opt['page']['subtitle1'] = $opt['locale'][$locale]['page']['subtitle1']; - if (isset($opt['locale'][$locale]['page']['subtitle2'])) $opt['page']['subtitle2'] = $opt['locale'][$locale]['page']['subtitle2']; - tpl_set_var('opt_page_subtitle1', $opt['page']['subtitle1']); - tpl_set_var('opt_page_subtitle2', $opt['page']['subtitle2']); - tpl_set_var('opt_page_title', $opt['page']['title']); - - if ($opt['logic']['license']['disclaimer']) - { - if (isset($opt['locale'][$locale]['page']['license_url'])) - $lurl = $opt['locale'][$locale]['page']['license_url']; - else - $lurl = $opt['locale']['EN']['page']['license_url']; - - if (isset($opt['locale'][$locale]['page']['license'])) - $ltext = $opt['locale'][$locale]['page']['license']; - else - $ltext = $opt['locale']['EN']['page']['license']; - - $ltext = mb_ereg_replace('%1', $lurl, $ltext); - $ltext = mb_ereg_replace('{site}', $opt['page']['sitename'], $ltext); - - $ld = '' . - '
' .$ltext. '
'; - tpl_set_var('license_disclaimer', $ld); - } - else - tpl_set_var('license_disclaimer',''); - - $bTemplateBuild = new Cbench; - $bTemplateBuild->Start(); - - //set {functionsbox} - global $page_functions, $functionsbox_start_tag, $functionsbox_middle_tag, $functionsbox_end_tag; - - if (isset($page_functions)) - { - $functionsbox = $functionsbox_start_tag; - foreach ($page_functions AS $func) - { - if ($functionsbox != $functionsbox_start_tag) - { - $functionsbox .= $functionsbox_middle_tag; - } - $functionsbox .= $func; - } - $functionsbox .= $functionsbox_end_tag; - - tpl_set_var('functionsbox', $functionsbox); - } - - /* prepare user country selection - */ - $tpl_usercountries = array(); - $rsUserCountries = sql("SELECT `countries_options`.`country`, + global $opt; + + if (!preg_match('/^[\w]{1,}$/', $class_name)) { + return; + } + + $class_name = str_replace('_', '/', $class_name); + + $file = $opt['rootpath'] . 'libse/' . $class_name . '.php'; + if (file_exists($file)) { + require_once($file); + } +} + + +if (isset($opt['rootpath'])) { + $rootpath = $opt['rootpath']; +} else { + if (isset($rootpath)) { + $opt['rootpath'] = $rootpath; + } else { + $rootpath = './'; + $opt['rootpath'] = $rootpath; + } +} + +// we are in HTML-mode ... maybe plain (for CLI scripts) +global $interface_output, $bScriptExecution; +$interface_output = 'html'; + +// set default CSS +tpl_set_var('css', 'main.css'); + +//detecting errors +$error = false; + +//no slashes in variables! originally from phpBB2 copied +@set_magic_quotes_runtime(0); // Disable magic_quotes_runtime + +if (get_magic_quotes_gpc()) { + if (is_array($_GET)) { + while (list($k, $v) = each($_GET)) { + if (is_array($_GET[$k])) { + while (list($k2, $v2) = each($_GET[$k])) { + $_GET[$k][$k2] = stripslashes($v2); + } + @reset($_GET[$k]); + } else { + $_GET[$k] = stripslashes($v); + } + } + @reset($_GET); + } + + if (is_array($_POST)) { + while (list($k, $v) = each($_POST)) { + if (is_array($_POST[$k])) { + while (list($k2, $v2) = each($_POST[$k])) { + $_POST[$k][$k2] = stripslashes($v2); + } + @reset($_POST[$k]); + } else { + $_POST[$k] = stripslashes($v); + } + } + @reset($_POST); + } + + if (is_array($HTTP_COOKIE_VARS)) { + while (list($k, $v) = each($HTTP_COOKIE_VARS)) { + if (is_array($HTTP_COOKIE_VARS[$k])) { + while (list($k2, $v2) = each($HTTP_COOKIE_VARS[$k])) { + $HTTP_COOKIE_VARS[$k][$k2] = stripslashes($v2); + } + @reset($HTTP_COOKIE_VARS[$k]); + } else { + $HTTP_COOKIE_VARS[$k] = stripslashes($v); + } + } + @reset($HTTP_COOKIE_VARS); + } +} + +if (!isset($rootpath)) { + $rootpath = './'; +} +require_once($rootpath . 'lib/clicompatbase.inc.php'); + +// enforce http or https? +if (isset($opt['gui']) && $opt['gui'] == GUI_HTML) { + if ($opt['page']['https']['mode'] == HTTPS_DISABLED) { + if ($opt['page']['https']['active']) { + header('Location: http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']); + } + $opt['page']['force_https_login'] = false; + } else { + if ($opt['page']['https']['mode'] == HTTPS_ENFORCED) { + if (!$opt['page']['https']['active']) { + header('Location: https://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']); + } + $opt['page']['force_https_login'] = true; + } + } +} + +// load domain specific settings +load_domain_settings(); + +// load HTML specific includes +require_once($rootpath . 'lib/cookie.class.php'); + +//site in service? +if ($site_in_service == false) { + header('Content-type: text/html; charset=utf-8'); + $page_content = read_file($rootpath . 'html/outofservice.tpl.php'); + die($page_content); +} + +//by default, use start template +if (!isset($tplname)) { + $tplname = 'start'; +} + +//restore cookievars[] +load_cookie_settings(); + +//language changed? +if (isset($_POST['lang'])) { + $lang = $_POST['lang']; +} +if (isset($_GET['lang'])) { + $lang = $_GET['lang']; +} + +//are there files for this language? +if (!file_exists($rootpath . 'lang/' . $lang . '/')) { + die('Critical Error: The specified language does not exist!'); +} + +//style changed? +if (isset($_POST['style'])) { + $style = $_POST['style']; +} +if (isset($_GET['style'])) { + $style = $_GET['style']; +} + +//does the style exist? +if (!file_exists($rootpath . 'lang/' . $lang . '/' . $style . '/')) { + $style = 'ocstyle'; +} + +if (!file_exists($rootpath . 'lang/' . $lang . '/' . $style . '/')) { + die('Critical Error: The specified style does not exist!'); +} + +//set up the language path +if (!isset($langpath)) { + $langpath = $rootpath . 'lang/' . $lang; +} + +//set up the style path +if (!isset($stylepath)) { + $stylepath = $langpath . '/' . $style; +} + +//load gettext translation +load_gettext(); + +//open a databse connection +db_connect(); + +require($opt['rootpath'] . 'lib/auth.inc.php'); +require_once($opt['rootpath'] . 'lib2/translate.class.php'); + +//load language specific strings +require_once($langpath . '/expressions.inc.php'); + +//set up the defaults for the main template +require_once($stylepath . '/varset.inc.php'); + +if ($dblink === false) { + //error while connecting to the database + $error = true; + + //set up error report + tpl_set_var('error_msg', htmlspecialchars(mysql_error(), ENT_COMPAT, 'UTF-8')); + tpl_set_var('tplname', $tplname); + $tplname = 'error'; +} else { + //user authenification from cookie + auth_user(); + if ($usr == false) { + //no user logged in + if (isset($_POST['target'])) { + $target = $_POST['target']; + } elseif (isset($_REQUEST['target'])) { + $target = $_REQUEST['target']; + } elseif (isset($_GET['target'])) { + $target = $_GET['target']; + } else { + $target = '{target}'; + } + $sLoggedOut = mb_ereg_replace('{target}', $target, $sLoggedOut); + tpl_set_var('loginbox', $sLoggedOut); + tpl_set_var( + 'login_url', + ($opt['page']['https']['force_login'] ? $opt['page']['absolute_https_url'] : '') . 'login.php' + ); + } else { + //user logged in + $sTmpString = mb_ereg_replace('{username}', $usr['username'], $sLoggedIn); + tpl_set_var('loginbox', $sTmpString); + unset($sTmpString); + } +} + +// are we Ocprop? +$ocpropping = isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], "Ocprop/") !== false; + +// zeitmessung +require_once($rootpath . 'lib/bench.inc.php'); +$bScriptExecution = new Cbench; +$bScriptExecution->start(); + +function load_domain_settings() +{ + global $opt, $style; + + $domain = $opt['page']['domain']; + + if (isset($opt['domain'][$domain]['style'])) { + $style = $opt['domain'][$domain]['style']; + } + if (isset($opt['domain'][$domain]['cookiedomain'])) { + $opt['cookie']['domain'] = $opt['domain'][$domain]['cookiedomain']; + } + + set_common_domain_config($opt); +} + +// get the language from a given shortage +// on success return the name, otherwise false +function db_LanguageFromShort($langcode) +{ + global $dblink, $locale; + + //no databse connection? + if ($dblink === false) { + return false; + } + + //select the right record + $rs = sql( + "SELECT IFNULL(`sys_trans_text`.`text`, `languages`.`name`) AS `text` + FROM `languages` + LEFT JOIN `sys_trans` ON `languages`.`trans_id`=`sys_trans`.`id` + LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='&1' + WHERE `languages`.`short`='&2'", + $locale, + $langcode + ); + if (mysql_num_rows($rs) > 0) { + $record = sql_fetch_array($rs); + + //return the language + return $record['text']; + } else { + //language not found + return false; + } +} + +//get the stored settings and authentification data from the cookie +function load_cookie_settings() +{ + global $cookie, $lang, $style; + + //speach + if ($cookie->is_set('lang')) { + $lang = $cookie->get('lang'); + } + + //style + if ($cookie->is_set('style')) { + $style = $cookie->get('style'); + } +} + +//store the cookie vars +function write_cookie_settings() +{ + global $cookie, $lang, $style; + + //language + $cookie->set('lang', $lang); + + //style + $cookie->set('style', $style); + + //send cookie + $cookie->header(); +} + +//returns the cookie value, otherwise false +function get_cookie_setting($name) +{ + global $cookie; + + if ($cookie->is_set($name)) { + return $cookie->get($name); + } else { + return false; + } +} + +//sets the cookie value +function set_cookie_setting($name, $value) +{ + global $cookie; + $cookie->set($name, $value); +} + +//set a template replacement +//set no_eval true to prevent this contents from php-parsing. +//Important when replacing something that the user has posted +//in HTML code and could contain \<\? php-Code \?\> +function tpl_set_var($name, $value, $no_eval = true) +{ + global $vars, $no_eval_vars; + $vars[$name] = $value; + $no_eval_vars[$name] = $no_eval; +} + +//get a template replacement, otherwise false +function tpl_get_var($name) +{ + global $vars; + + if (isset($vars[$name])) { + return $vars[$name]; + } else { + return false; + } +} + +//clear all template vars +function tpl_clear_vars() +{ + unset($GLOBALS['vars']); + unset($GLOBALS['no_eval_vars']); +} + +//page function replaces {functionsbox} in main template +function tpl_set_page_function($id, $html_code) +{ + global $page_functions; + + $page_functions[$id] = $html_code; +} + +function tpl_unset_page_function($id) +{ + global $page_functions; + + unset($page_functions[$id]); +} + +function tpl_clear_page_functions() +{ + unset($GLOBALS['page_functions']); +} + +//read the templates and echo it to the user +function tpl_BuildTemplate($dbdisconnect = true) +{ + //template handling vars + global $style, $stylepath, $tplname, $vars, $langpath, $locale, $opt, $oc_nodeid, $translate, $usr; + //language specific expression + global $error_pagenotexist; + //only for debbuging + global $b, $bScriptExecution; + // country dropdown + global $tpl_usercountries; + + tpl_set_var('screen_css_time', filemtime($opt['rootpath'] . "resource2/" . $style . "/css/style_screen.css")); + tpl_set_var( + 'screen_msie_css_time', + filemtime($opt['rootpath'] . "resource2/" . $style . "/css/style_screen_msie.css") + ); + tpl_set_var('print_css_time', filemtime($opt['rootpath'] . "resource2/" . $style . "/css/style_print.css")); + + if (isset($bScriptExecution)) { + $bScriptExecution->Stop(); + tpl_set_var('scripttime', sprintf('%1.3f', $bScriptExecution->Diff())); + } else { + tpl_set_var('scripttime', sprintf('%1.3f', 0)); + } + + tpl_set_var('sponsorbottom', $opt['page']['sponsor']['bottom']); + + if (isset($opt['locale'][$locale]['page']['subtitle1'])) { + $opt['page']['subtitle1'] = $opt['locale'][$locale]['page']['subtitle1']; + } + if (isset($opt['locale'][$locale]['page']['subtitle2'])) { + $opt['page']['subtitle2'] = $opt['locale'][$locale]['page']['subtitle2']; + } + tpl_set_var('opt_page_subtitle1', $opt['page']['subtitle1']); + tpl_set_var('opt_page_subtitle2', $opt['page']['subtitle2']); + tpl_set_var('opt_page_title', $opt['page']['title']); + + if ($opt['logic']['license']['disclaimer']) { + if (isset($opt['locale'][$locale]['page']['license_url'])) { + $lurl = $opt['locale'][$locale]['page']['license_url']; + } else { + $lurl = $opt['locale']['EN']['page']['license_url']; + } + + if (isset($opt['locale'][$locale]['page']['license'])) { + $ltext = $opt['locale'][$locale]['page']['license']; + } else { + $ltext = $opt['locale']['EN']['page']['license']; + } + + $ltext = mb_ereg_replace('%1', $lurl, $ltext); + $ltext = mb_ereg_replace('{site}', $opt['page']['sitename'], $ltext); + + $ld = '' . + '
' . $ltext . '
'; + tpl_set_var('license_disclaimer', $ld); + } else { + tpl_set_var('license_disclaimer', ''); + } + + $bTemplateBuild = new Cbench; + $bTemplateBuild->Start(); + + //set {functionsbox} + global $page_functions, $functionsbox_start_tag, $functionsbox_middle_tag, $functionsbox_end_tag; + + if (isset($page_functions)) { + $functionsbox = $functionsbox_start_tag; + foreach ($page_functions as $func) { + if ($functionsbox != $functionsbox_start_tag) { + $functionsbox .= $functionsbox_middle_tag; + } + $functionsbox .= $func; + } + $functionsbox .= $functionsbox_end_tag; + + tpl_set_var('functionsbox', $functionsbox); + } + + /* prepare user country selection + */ + $tpl_usercountries = []; + $rsUserCountries = sql( + "SELECT `countries_options`.`country`, IF(`countries_options`.`nodeId`='&1', 1, IF(`countries_options`.`nodeId`!=0, 2, 3)) AS `group`, IFNULL(`sys_trans_text`.`text`, `countries`.`name`) AS `name` FROM `countries_options` @@ -509,269 +490,276 @@ function tpl_BuildTemplate($dbdisconnect=true) LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='&2' WHERE `countries_options`.`display`=1 ORDER BY `group` ASC, - IFNULL(`sys_trans_text`.`text`, `countries`.`name`) ASC", $oc_nodeid, $locale); - while ($rUserCountries = sql_fetch_assoc($rsUserCountries)) - $tpl_usercountries[] = $rUserCountries; - sql_free_result($rsUserCountries); - - //include language specific expressions, so that they are available in the template code - include $langpath . '/expressions.inc.php'; - - //load main template - tpl_set_var('backgroundimage','
 
 
'); - tpl_set_var('bodystyle',''); - - if (isset($_REQUEST['print']) && $_REQUEST['print'] == 'y') - $sCode = read_file($stylepath . '/main_print.tpl.php'); - else if (isset($_REQUEST['popup']) && $_REQUEST['popup'] == 'y') - $sCode = read_file($stylepath . '/popup.tpl.php'); - else - $sCode = read_file($stylepath . '/main.tpl.php'); - $sCode = '?>' . $sCode; - - //does template exist? - if (!file_exists($stylepath . '/' . $tplname . '.tpl.php')) - { - //set up the error template - $error = true; - tpl_set_var('error_msg', htmlspecialchars($error_pagenotexist, ENT_COMPAT, 'UTF-8')); - tpl_set_var('tplname', $tplname); - $tplname = 'error'; - } - - //read the template - $sTemplate = read_file($stylepath . '/' . $tplname . '.tpl.php'); - $sCode = mb_ereg_replace('{template}', $sTemplate, $sCode); - - //process translations - $sCode = tpl_do_translation($sCode); - - //process the template replacements - $sCode = tpl_do_replace($sCode); - - //store the cookie - write_cookie_settings(); - - //send http-no-caching-header - http_write_no_cache(); - - // write UTF8-Header - header('Content-type: text/html; charset=utf-8'); - - //run the template code - eval($sCode); - - //disconnect the database - if ($dbdisconnect) db_disconnect(); - } - - function http_write_no_cache() - { - // HTTP/1.1 - header("Cache-Control: no-store, no-cache, must-revalidate"); - header("Cache-Control: post-check=0, pre-check=0", false); - // HTTP/1.0 - header("Pragma: no-cache"); - // Date in the past - header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); - // always modified - header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); - } - - //redirect to another site to display, i.e. to view a cache after logging - function tpl_redirect($page) - { - global $absolute_server_URI; - - write_cookie_settings(); - http_write_no_cache(); - - if (!preg_match('/^https?:/i', $page)) - header("Location: " . $absolute_server_URI . $page); - else - header("Location: " . $page); - - exit; - } - - //process the template replacements - //no_eval_replace - if true, variables will be replaced that are - // marked as "no_eval" - function tpl_do_replace($str) - { - global $vars, $no_eval_vars; - - if (is_array($vars)) - { - foreach ($vars as $varname=>$varvalue) - { - if ($no_eval_vars[$varname] == false) - { - $str = mb_ereg_replace('{' . $varname . '}', $varvalue, $str); - } - else - { - $replave_var_name = 'tpl_replace_var_' . $varname; - - global $$replave_var_name; - $$replave_var_name = $varvalue; - - //replace using php-echo - $str = mb_ereg_replace('{' . $varname . '}', '', $str); - } - } - } - - return $str; - } - - function tpl_errorMsg($tplnameError, $msg) - { - global $tplname; - - $tplname = 'error'; - tpl_set_var('error_msg', $msg); - tpl_set_var('tplname', $tplnameError); - - tpl_BuildTemplate(); - exit; - } - - - function load_gettext() - { - global $cookie, $opt, $rootpath, $locale; - - $locale = $cookie->get('locale'); - if (!isset($opt['locale'][$locale])) - $locale = $opt['template']['default']['locale']; - $opt['template']['locale'] = $locale; - - bindtextdomain('messages', $rootpath . '/cache2/translate'); - set_php_locale(); - textdomain('messages'); - } - - function tpl_do_translation($sCode) - { - global $opt, $style, $tplname; - - $sResultCode = ''; - $nCurrentPos = 0; - while ($nCurrentPos < mb_strlen($sCode)) - { - $nStartOfHTML = mb_strpos($sCode, '?>', $nCurrentPos); - if ($nStartOfHTML === false) - { - $sResultCode .= mb_substr($sCode, $nCurrentPos, mb_strlen($sCode) - $nCurrentPos); - $nCurrentPos = mb_strlen($sCode); - } - else - { - $nEndOfHTML = mb_strpos($sCode, 't($str, '', basename(__FILE__), __LINE__); - $args = func_get_args(); - for ($nIndex=count($args)-1; $nIndex>0; $nIndex--) - $str = str_replace('%' . $nIndex, $args[$nIndex], $str); - - return $str; - } - - function t_prepare_text($text) - { - $text = mb_ereg_replace("\t", ' ', $text); - $text = mb_ereg_replace("\r", ' ', $text); - $text = mb_ereg_replace("\n", ' ', $text); - while (mb_strpos($text, ' ') !== false) - $text = mb_ereg_replace(' ', ' ', $text); - - return $text; - } - - function getUserCountry() - { - global $opt, $cookie, $usr; - - // language specified in cookie? - if ($cookie->is_set('usercountry')) - { - $sCountry = $cookie->get('usercountry', null); - if ($sCountry != null) - return $sCountry; - } - - // user specified a country? - if (isset($usr) && ($usr !== false)) - { - $sCountry = sqlValue("SELECT `country` FROM `user` WHERE `user_id`='" . ($usr['userid']+0) . "'", null); - if ($sCountry != null) - return $sCountry; - } - - // default country of this language - // - // disabled: produces unexpected results on multi-domains without translation, - // and will confusingly switch country when switching language -- following 3.9.2015 - // - // if (isset($opt['template']['locale']) && isset($opt['locale'][$opt['template']['locale']]['country'])) - // return $opt['locale'][$opt['template']['locale']]['country']; - - // default country of installation (or domain) - if (isset($opt['template']['default']['country'])) - return $opt['template']['default']['country']; - - // country could not be determined by the above checks -> return "GB" - return 'GB'; - } + IFNULL(`sys_trans_text`.`text`, `countries`.`name`) ASC", + $oc_nodeid, + $locale + ); + while ($rUserCountries = sql_fetch_assoc($rsUserCountries)) { + $tpl_usercountries[] = $rUserCountries; + } + sql_free_result($rsUserCountries); + + //include language specific expressions, so that they are available in the template code + include $langpath . '/expressions.inc.php'; + + //load main template + tpl_set_var('backgroundimage', '
 
 
'); + tpl_set_var('bodystyle', ''); + + if (isset($_REQUEST['print']) && $_REQUEST['print'] == 'y') { + $sCode = read_file($stylepath . '/main_print.tpl.php'); + } else { + if (isset($_REQUEST['popup']) && $_REQUEST['popup'] == 'y') { + $sCode = read_file($stylepath . '/popup.tpl.php'); + } else { + $sCode = read_file($stylepath . '/main.tpl.php'); + } + } + $sCode = '?>' . $sCode; + + //does template exist? + if (!file_exists($stylepath . '/' . $tplname . '.tpl.php')) { + //set up the error template + $error = true; + tpl_set_var('error_msg', htmlspecialchars($error_pagenotexist, ENT_COMPAT, 'UTF-8')); + tpl_set_var('tplname', $tplname); + $tplname = 'error'; + } + + //read the template + $sTemplate = read_file($stylepath . '/' . $tplname . '.tpl.php'); + $sCode = mb_ereg_replace('{template}', $sTemplate, $sCode); + + //process translations + $sCode = tpl_do_translation($sCode); + + //process the template replacements + $sCode = tpl_do_replace($sCode); + + //store the cookie + write_cookie_settings(); + + //send http-no-caching-header + http_write_no_cache(); + + // write UTF8-Header + header('Content-type: text/html; charset=utf-8'); + + //run the template code + eval($sCode); + + //disconnect the database + if ($dbdisconnect) { + db_disconnect(); + } +} + +function http_write_no_cache() +{ + // HTTP/1.1 + header("Cache-Control: no-store, no-cache, must-revalidate"); + header("Cache-Control: post-check=0, pre-check=0", false); + // HTTP/1.0 + header("Pragma: no-cache"); + // Date in the past + header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); + // always modified + header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); +} + +//redirect to another site to display, i.e. to view a cache after logging +function tpl_redirect($page) +{ + global $absolute_server_URI; + + write_cookie_settings(); + http_write_no_cache(); + + if (!preg_match('/^https?:/i', $page)) { + header("Location: " . $absolute_server_URI . $page); + } else { + header("Location: " . $page); + } + + exit; +} + +//process the template replacements +//no_eval_replace - if true, variables will be replaced that are +// marked as "no_eval" +function tpl_do_replace($str) +{ + global $vars, $no_eval_vars; + + if (is_array($vars)) { + foreach ($vars as $varname => $varvalue) { + if ($no_eval_vars[$varname] == false) { + $str = mb_ereg_replace('{' . $varname . '}', $varvalue, $str); + } else { + $replave_var_name = 'tpl_replace_var_' . $varname; + + global $$replave_var_name; + $$replave_var_name = $varvalue; + + //replace using php-echo + $str = mb_ereg_replace( + '{' . $varname . '}', + '', + $str + ); + } + } + } + + return $str; +} + +function tpl_errorMsg($tplnameError, $msg) +{ + global $tplname; + + $tplname = 'error'; + tpl_set_var('error_msg', $msg); + tpl_set_var('tplname', $tplnameError); + + tpl_BuildTemplate(); + exit; +} + + +function load_gettext() +{ + global $cookie, $opt, $rootpath, $locale; + + $locale = $cookie->get('locale'); + if (!isset($opt['locale'][$locale])) { + $locale = $opt['template']['default']['locale']; + } + $opt['template']['locale'] = $locale; + + bindtextdomain('messages', $rootpath . '/cache2/translate'); + set_php_locale(); + textdomain('messages'); +} + +function tpl_do_translation($sCode) +{ + global $opt, $style, $tplname; + + $sResultCode = ''; + $nCurrentPos = 0; + while ($nCurrentPos < mb_strlen($sCode)) { + $nStartOfHTML = mb_strpos($sCode, '?>', $nCurrentPos); + if ($nStartOfHTML === false) { + $sResultCode .= mb_substr($sCode, $nCurrentPos, mb_strlen($sCode) - $nCurrentPos); + $nCurrentPos = mb_strlen($sCode); + } else { + $nEndOfHTML = mb_strpos($sCode, 't($str, '', basename(__FILE__), __LINE__); + $args = func_get_args(); + for ($nIndex = count($args) - 1; $nIndex > 0; $nIndex --) { + $str = str_replace('%' . $nIndex, $args[$nIndex], $str); + } + + return $str; +} + +function t_prepare_text($text) +{ + $text = mb_ereg_replace("\t", ' ', $text); + $text = mb_ereg_replace("\r", ' ', $text); + $text = mb_ereg_replace("\n", ' ', $text); + while (mb_strpos($text, ' ') !== false) { + $text = mb_ereg_replace(' ', ' ', $text); + } + + return $text; +} + +function getUserCountry() +{ + global $opt, $cookie, $usr; + + // language specified in cookie? + if ($cookie->is_set('usercountry')) { + $sCountry = $cookie->get('usercountry', null); + if ($sCountry != null) { + return $sCountry; + } + } + + // user specified a country? + if (isset($usr) && ($usr !== false)) { + $sCountry = sqlValue("SELECT `country` FROM `user` WHERE `user_id`='" . ($usr['userid'] + 0) . "'", null); + if ($sCountry != null) { + return $sCountry; + } + } + + // default country of this language + // + // disabled: produces unexpected results on multi-domains without translation, + // and will confusingly switch country when switching language -- following 3.9.2015 + // + // if (isset($opt['template']['locale']) && isset($opt['locale'][$opt['template']['locale']]['country'])) + // return $opt['locale'][$opt['template']['locale']]['country']; + + // default country of installation (or domain) + if (isset($opt['template']['default']['country'])) { + return $opt['template']['default']['country']; + } + + // country could not be determined by the above checks -> return "GB" + return 'GB'; +} // external help embedding @@ -780,44 +768,52 @@ function getUserCountry() // see corresponding function in lib2/common.inc.php function helppagelink($ocpage) { - global $opt, $locale, $translate; - - $help_locale = $locale; - $rs = sql("SELECT `helppage` FROM `helppages` WHERE `ocpage`='&1' AND `language`='&2'", - $ocpage, $help_locale); - if (mysql_num_rows($rs) == 0) - { - mysql_free_result($rs); - $rs = sql("SELECT `helppage` FROM `helppages` WHERE `ocpage`='&1' AND `language`='*'", - $ocpage); - } - if (mysql_num_rows($rs) == 0) - { - mysql_free_result($rs); - $rs = sql("SELECT `helppage` FROM `helppages` WHERE `ocpage`='&1' AND `language`='&2'", - $ocpage, $opt['template']['default']['fallback_locale']); - if (mysql_num_rows($rs) > 0) - $help_locale = $opt['template']['default']['fallback_locale']; - } - - if (mysql_num_rows($rs) > 0) - { - $record = sql_fetch_array($rs); - $helppage = $record['helppage']; - } - else - $helppage = ""; - mysql_free_result($rs); - - $imgtitle = $translate->t('Instructions', '', basename(__FILE__), __LINE__); - $imgtitle = "alt='" . $imgtitle . "' title='" . $imgtitle . "'"; - - if (substr($helppage,0,1) == "!") - return ""; - else - if ($helppage != "" && isset($opt['locale'][$help_locale]['helpwiki'])) - return ""; - - return ""; + global $opt, $locale, $translate; + + $help_locale = $locale; + $rs = sql( + "SELECT `helppage` FROM `helppages` WHERE `ocpage`='&1' AND `language`='&2'", + $ocpage, + $help_locale + ); + if (mysql_num_rows($rs) == 0) { + mysql_free_result($rs); + $rs = sql( + "SELECT `helppage` FROM `helppages` WHERE `ocpage`='&1' AND `language`='*'", + $ocpage + ); + } + if (mysql_num_rows($rs) == 0) { + mysql_free_result($rs); + $rs = sql( + "SELECT `helppage` FROM `helppages` WHERE `ocpage`='&1' AND `language`='&2'", + $ocpage, + $opt['template']['default']['fallback_locale'] + ); + if (mysql_num_rows($rs) > 0) { + $help_locale = $opt['template']['default']['fallback_locale']; + } + } + + if (mysql_num_rows($rs) > 0) { + $record = sql_fetch_array($rs); + $helppage = $record['helppage']; + } else { + $helppage = ""; + } + mysql_free_result($rs); + + $imgtitle = $translate->t('Instructions', '', basename(__FILE__), __LINE__); + $imgtitle = "alt='" . $imgtitle . "' title='" . $imgtitle . "'"; + + if (substr($helppage, 0, 1) == "!") { + return ""; + } else { + if ($helppage != "" && isset($opt['locale'][$help_locale]['helpwiki'])) { + return ""; + } + } + + return ''; } diff --git a/htdocs/lib2/OcHTMLPurifier.class.php b/htdocs/lib2/OcHTMLPurifier.class.php index ec63c1d40..1782f6aea 100755 --- a/htdocs/lib2/OcHTMLPurifier.class.php +++ b/htdocs/lib2/OcHTMLPurifier.class.php @@ -5,7 +5,6 @@ * Unicode Reminder メモ ***************************************************************************/ -require_once(__DIR__ . '/HTMLPurifier/library/HTMLPurifier.auto.php'); require_once(__DIR__ . '/Net/IDNA2.php'); // !! THIS CODE IS ALSO USED IN OKAPI !! diff --git a/htdocs/lib2/OcSmarty.class.php b/htdocs/lib2/OcSmarty.class.php index f801d1a14..531920c20 100644 --- a/htdocs/lib2/OcSmarty.class.php +++ b/htdocs/lib2/OcSmarty.class.php @@ -7,7 +7,8 @@ * Inherit Smarty-Class and extend it ***************************************************************************/ -require_once($opt['rootpath'] . 'lib2/smarty/Smarty.class.php'); +// require_once($opt['rootpath'] . 'lib2/smarty/Smarty.class.php'); +require_once(__DIR__ . '/../vendor/autoload.php'); require_once($opt['rootpath'] . 'lib2/db.inc.php'); require_once($opt['rootpath'] . 'lib2/logic/labels.inc.php'); @@ -33,11 +34,11 @@ class OcSmarty extends Smarty // url to call if login is required public $target = ''; - public $header_javascript = array(); - public $body_load = array(); - public $body_unload = array(); + public $header_javascript = []; + public $body_load = []; + public $body_unload = []; - public function OcSmarty() + public function __construct() { global $opt, $sqldebugger; require_once($opt['rootpath'] . 'lib2/bench.inc.php'); @@ -48,17 +49,17 @@ public function OcSmarty() $this->template_dir = $opt['stylepath']; $this->compile_dir = $opt['rootpath'] . 'cache2/smarty/compiled/'; $this->cache_dir = $opt['rootpath'] . 'cache2/smarty/cache/'; - $this->plugins_dir = array( + $this->plugins_dir = [ 'plugins', - 'ocplugins' - ); + __DIR__ . '/../src/Oc/SmartyPlugins' + ]; // disable caching ... if caching is enabled, 1 hour is default $this->caching = false; $this->cache_lifetime = 3600; // default // register additional functions - require_once($opt['rootpath'] . 'lib2/smarty/ocplugins/block.nocache.php'); + require_once(__DIR__ . '/../src/Oc/SmartyPlugins/block.nocache.php'); $this->register_block('nocache', 'smarty_block_nocache', false); $this->load_filter('pre', 't'); @@ -469,8 +470,9 @@ public function redirect_login() global $opt; // we cannot redirect the POST-data - if (count($_POST) > 0) + if (count($_POST) > 0) { $this->error(ERROR_LOGIN_REQUIRED); + } // ok ... redirect the get-data $target = ($opt['page']['https']['force_login'] ? 'https' : $opt['page']['protocol']) @@ -480,7 +482,7 @@ public function redirect_login() public function assign_rs($name, $rs) { - $items = array(); + $items = []; while ($r = sql_fetch_assoc($rs)) { $items[] = $r; } diff --git a/htdocs/lib2/mail.class.php b/htdocs/lib2/mail.class.php index f1f09898e..925be39bd 100644 --- a/htdocs/lib2/mail.class.php +++ b/htdocs/lib2/mail.class.php @@ -5,7 +5,7 @@ * Unicode Reminder メモ ***************************************************************************/ -require_once($opt['rootpath'] . 'lib2/smarty/Smarty.class.php'); +require_once(__DIR__. '/../vendor/autoload.php'); class mail extends Smarty { @@ -31,7 +31,7 @@ public function mail() $this->compile_dir = $opt['rootpath'] . 'cache2/smarty/compiled/'; $this->plugins_dir = [ 'plugins', - 'ocplugins' + __DIR__ . '/../src/Oc/SmartyPlugins' ]; // disable caching ... diff --git a/htdocs/lib2/smarty/Config_File.class.php b/htdocs/lib2/smarty/Config_File.class.php deleted file mode 100644 index 5787ad15f..000000000 --- a/htdocs/lib2/smarty/Config_File.class.php +++ /dev/null @@ -1,393 +0,0 @@ - - * @access public - * @package Smarty - */ - -/* $Id: Config_File.class.php 3149 2009-05-23 20:59:25Z monte.ohrt $ */ - -/** - * Config file reading class - * @package Smarty - */ -class Config_File { - /**#@+ - * Options - * @var boolean - */ - /** - * Controls whether variables with the same name overwrite each other. - */ - var $overwrite = true; - - /** - * Controls whether config values of on/true/yes and off/false/no get - * converted to boolean values automatically. - */ - var $booleanize = true; - - /** - * Controls whether hidden config sections/vars are read from the file. - */ - var $read_hidden = true; - - /** - * Controls whether or not to fix mac or dos formatted newlines. - * If set to true, \r or \r\n will be changed to \n. - */ - var $fix_newlines = true; - /**#@-*/ - - /** @access private */ - var $_config_path = ""; - var $_config_data = array(); - /**#@-*/ - - /** - * Constructs a new config file class. - * - * @param string $config_path (optional) path to the config files - */ - function Config_File($config_path = NULL) - { - if (isset($config_path)) - $this->set_path($config_path); - } - - - /** - * Set the path where configuration files can be found. - * - * @param string $config_path path to the config files - */ - function set_path($config_path) - { - if (!empty($config_path)) { - if (!is_string($config_path) || !file_exists($config_path) || !is_dir($config_path)) { - $this->_trigger_error_msg("Bad config file path '$config_path'"); - return; - } - if(substr($config_path, -1) != DIRECTORY_SEPARATOR) { - $config_path .= DIRECTORY_SEPARATOR; - } - - $this->_config_path = $config_path; - } - } - - - /** - * Retrieves config info based on the file, section, and variable name. - * - * @param string $file_name config file to get info for - * @param string $section_name (optional) section to get info for - * @param string $var_name (optional) variable to get info for - * @return string|array a value or array of values - */ - function get($file_name, $section_name = NULL, $var_name = NULL) - { - if (empty($file_name)) { - $this->_trigger_error_msg('Empty config file name'); - return; - } else { - $file_name = $this->_config_path . $file_name; - if (!isset($this->_config_data[$file_name])) - $this->load_file($file_name, false); - } - - if (!empty($var_name)) { - if (empty($section_name)) { - return $this->_config_data[$file_name]["vars"][$var_name]; - } else { - if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name])) - return $this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name]; - else - return array(); - } - } else { - if (empty($section_name)) { - return (array)$this->_config_data[$file_name]["vars"]; - } else { - if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"])) - return (array)$this->_config_data[$file_name]["sections"][$section_name]["vars"]; - else - return array(); - } - } - } - - - /** - * Retrieves config info based on the key. - * - * @param $file_name string config key (filename/section/var) - * @return string|array same as get() - * @uses get() retrieves information from config file and returns it - */ - function &get_key($config_key) - { - list($file_name, $section_name, $var_name) = explode('/', $config_key, 3); - $result = &$this->get($file_name, $section_name, $var_name); - return $result; - } - - /** - * Get all loaded config file names. - * - * @return array an array of loaded config file names - */ - function get_file_names() - { - return array_keys($this->_config_data); - } - - - /** - * Get all section names from a loaded file. - * - * @param string $file_name config file to get section names from - * @return array an array of section names from the specified file - */ - function get_section_names($file_name) - { - $file_name = $this->_config_path . $file_name; - if (!isset($this->_config_data[$file_name])) { - $this->_trigger_error_msg("Unknown config file '$file_name'"); - return; - } - - return array_keys($this->_config_data[$file_name]["sections"]); - } - - - /** - * Get all global or section variable names. - * - * @param string $file_name config file to get info for - * @param string $section_name (optional) section to get info for - * @return array an array of variables names from the specified file/section - */ - function get_var_names($file_name, $section = NULL) - { - if (empty($file_name)) { - $this->_trigger_error_msg('Empty config file name'); - return; - } else if (!isset($this->_config_data[$file_name])) { - $this->_trigger_error_msg("Unknown config file '$file_name'"); - return; - } - - if (empty($section)) - return array_keys($this->_config_data[$file_name]["vars"]); - else - return array_keys($this->_config_data[$file_name]["sections"][$section]["vars"]); - } - - - /** - * Clear loaded config data for a certain file or all files. - * - * @param string $file_name file to clear config data for - */ - function clear($file_name = NULL) - { - if ($file_name === NULL) - $this->_config_data = array(); - else if (isset($this->_config_data[$file_name])) - $this->_config_data[$file_name] = array(); - } - - - /** - * Load a configuration file manually. - * - * @param string $file_name file name to load - * @param boolean $prepend_path whether current config path should be - * prepended to the filename - */ - function load_file($file_name, $prepend_path = true) - { - if ($prepend_path && $this->_config_path != "") - $config_file = $this->_config_path . $file_name; - else - $config_file = $file_name; - - ini_set('track_errors', true); - $fp = @fopen($config_file, "r"); - if (!is_resource($fp)) { - $this->_trigger_error_msg("Could not open config file '$config_file'"); - return false; - } - - $contents = ($size = filesize($config_file)) ? fread($fp, $size) : ''; - fclose($fp); - - $this->_config_data[$config_file] = $this->parse_contents($contents); - return true; - } - - /** - * Store the contents of a file manually. - * - * @param string $config_file file name of the related contents - * @param string $contents the file-contents to parse - */ - function set_file_contents($config_file, $contents) - { - $this->_config_data[$config_file] = $this->parse_contents($contents); - return true; - } - - /** - * parse the source of a configuration file manually. - * - * @param string $contents the file-contents to parse - */ - function parse_contents($contents) - { - if($this->fix_newlines) { - // fix mac/dos formatted newlines - $contents = preg_replace('!\r\n?!', "\n", $contents); - } - - $config_data = array(); - $config_data['sections'] = array(); - $config_data['vars'] = array(); - - /* reference to fill with data */ - $vars =& $config_data['vars']; - - /* parse file line by line */ - preg_match_all('!^.*\r?\n?!m', $contents, $match); - $lines = $match[0]; - for ($i=0, $count=count($lines); $i<$count; $i++) { - $line = $lines[$i]; - if (empty($line)) continue; - - if ( substr($line, 0, 1) == '[' && preg_match('!^\[(.*?)\]!', $line, $match) ) { - /* section found */ - if (substr($match[1], 0, 1) == '.') { - /* hidden section */ - if ($this->read_hidden) { - $section_name = substr($match[1], 1); - } else { - /* break reference to $vars to ignore hidden section */ - unset($vars); - $vars = array(); - continue; - } - } else { - $section_name = $match[1]; - } - if (!isset($config_data['sections'][$section_name])) - $config_data['sections'][$section_name] = array('vars' => array()); - $vars =& $config_data['sections'][$section_name]['vars']; - continue; - } - - if (preg_match('/^\s*(\.?\w+)\s*=\s*(.*)/s', $line, $match)) { - /* variable found */ - $var_name = rtrim($match[1]); - if (strpos($match[2], '"""') === 0) { - /* handle multiline-value */ - $lines[$i] = substr($match[2], 3); - $var_value = ''; - while ($i<$count) { - if (($pos = strpos($lines[$i], '"""')) === false) { - $var_value .= $lines[$i++]; - } else { - /* end of multiline-value */ - $var_value .= substr($lines[$i], 0, $pos); - break; - } - } - $booleanize = false; - - } else { - /* handle simple value */ - $var_value = preg_replace('/^([\'"])(.*)\1$/', '\2', rtrim($match[2])); - $booleanize = $this->booleanize; - - } - $this->_set_config_var($vars, $var_name, $var_value, $booleanize); - } - /* else unparsable line / means it is a comment / means ignore it */ - } - return $config_data; - } - - /**#@+ @access private */ - /** - * @param array &$container - * @param string $var_name - * @param mixed $var_value - * @param boolean $booleanize determines whether $var_value is converted to - * to true/false - */ - function _set_config_var(&$container, $var_name, $var_value, $booleanize) - { - if (substr($var_name, 0, 1) == '.') { - if (!$this->read_hidden) - return; - else - $var_name = substr($var_name, 1); - } - - if (!preg_match("/^[a-zA-Z_]\w*$/", $var_name)) { - $this->_trigger_error_msg("Bad variable name '$var_name'"); - return; - } - - if ($booleanize) { - if (preg_match("/^(on|true|yes)$/i", $var_value)) - $var_value = true; - else if (preg_match("/^(off|false|no)$/i", $var_value)) - $var_value = false; - } - - if (!isset($container[$var_name]) || $this->overwrite) - $container[$var_name] = $var_value; - else { - settype($container[$var_name], 'array'); - $container[$var_name][] = $var_value; - } - } - - /** - * @uses trigger_error() creates a PHP warning/error - * @param string $error_msg - * @param integer $error_type one of - */ - function _trigger_error_msg($error_msg, $error_type = E_USER_WARNING) - { - trigger_error("Config_File error: $error_msg", $error_type); - } - /**#@-*/ -} - -?> diff --git a/htdocs/lib2/smarty/Smarty.class.php b/htdocs/lib2/smarty/Smarty.class.php deleted file mode 100644 index 0fbdf856f..000000000 --- a/htdocs/lib2/smarty/Smarty.class.php +++ /dev/null @@ -1,1960 +0,0 @@ - - * @author Andrei Zmievski - * @package Smarty - * @version 2.6.26 - */ - -/* $Id: Smarty.class.php 3163 2009-06-17 14:39:24Z monte.ohrt $ */ - -/** - * DIR_SEP isn't used anymore, but third party apps might - */ -if(!defined('DIR_SEP')) { - define('DIR_SEP', DIRECTORY_SEPARATOR); -} - -/** - * set SMARTY_DIR to absolute path to Smarty library files. - * if not defined, include_path will be used. Sets SMARTY_DIR only if user - * application has not already defined it. - */ - -if (!defined('SMARTY_DIR')) { - define('SMARTY_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR); -} - -if (!defined('SMARTY_CORE_DIR')) { - define('SMARTY_CORE_DIR', SMARTY_DIR . 'internals' . DIRECTORY_SEPARATOR); -} - -define('SMARTY_PHP_PASSTHRU', 0); -define('SMARTY_PHP_QUOTE', 1); -define('SMARTY_PHP_REMOVE', 2); -define('SMARTY_PHP_ALLOW', 3); - -/** - * @package Smarty - */ -class Smarty -{ - /**#@+ - * Smarty Configuration Section - */ - - /** - * The name of the directory where templates are located. - * - * @var string - */ - var $template_dir = 'templates'; - - /** - * The directory where compiled templates are located. - * - * @var string - */ - var $compile_dir = 'templates_c'; - - /** - * The directory where config files are located. - * - * @var string - */ - var $config_dir = 'configs'; - - /** - * An array of directories searched for plugins. - * - * @var array - */ - var $plugins_dir = array('plugins'); - - /** - * If debugging is enabled, a debug console window will display - * when the page loads (make sure your browser allows unrequested - * popup windows) - * - * @var boolean - */ - var $debugging = false; - - /** - * When set, smarty does uses this value as error_reporting-level. - * - * @var integer - */ - var $error_reporting = null; - - /** - * This is the path to the debug console template. If not set, - * the default one will be used. - * - * @var string - */ - var $debug_tpl = ''; - - /** - * This determines if debugging is enable-able from the browser. - *
    - *
  • NONE => no debugging control allowed
  • - *
  • URL => enable debugging when SMARTY_DEBUG is found in the URL.
  • - *
- * @link http://www.foo.dom/index.php?SMARTY_DEBUG - * @var string - */ - var $debugging_ctrl = 'NONE'; - - /** - * This tells Smarty whether to check for recompiling or not. Recompiling - * does not need to happen unless a template or config file is changed. - * Typically you enable this during development, and disable for - * production. - * - * @var boolean - */ - var $compile_check = true; - - /** - * This forces templates to compile every time. Useful for development - * or debugging. - * - * @var boolean - */ - var $force_compile = false; - - /** - * This enables template caching. - *
    - *
  • 0 = no caching
  • - *
  • 1 = use class cache_lifetime value
  • - *
  • 2 = use cache_lifetime in cache file
  • - *
- * @var integer - */ - var $caching = 0; - - /** - * The name of the directory for cache files. - * - * @var string - */ - var $cache_dir = 'cache'; - - /** - * This is the number of seconds cached content will persist. - *
    - *
  • 0 = always regenerate cache
  • - *
  • -1 = never expires
  • - *
- * - * @var integer - */ - var $cache_lifetime = 3600; - - /** - * Only used when $caching is enabled. If true, then If-Modified-Since headers - * are respected with cached content, and appropriate HTTP headers are sent. - * This way repeated hits to a cached page do not send the entire page to the - * client every time. - * - * @var boolean - */ - var $cache_modified_check = false; - - /** - * This determines how Smarty handles "" tags in templates. - * possible values: - *
    - *
  • SMARTY_PHP_PASSTHRU -> print tags as plain text
  • - *
  • SMARTY_PHP_QUOTE -> escape tags as entities
  • - *
  • SMARTY_PHP_REMOVE -> remove php tags
  • - *
  • SMARTY_PHP_ALLOW -> execute php tags
  • - *
- * - * @var integer - */ - var $php_handling = SMARTY_PHP_PASSTHRU; - - /** - * This enables template security. When enabled, many things are restricted - * in the templates that normally would go unchecked. This is useful when - * untrusted parties are editing templates and you want a reasonable level - * of security. (no direct execution of PHP in templates for example) - * - * @var boolean - */ - var $security = false; - - /** - * This is the list of template directories that are considered secure. This - * is used only if {@link $security} is enabled. One directory per array - * element. {@link $template_dir} is in this list implicitly. - * - * @var array - */ - var $secure_dir = array(); - - /** - * These are the security settings for Smarty. They are used only when - * {@link $security} is enabled. - * - * @var array - */ - var $security_settings = array( - 'PHP_HANDLING' => false, - 'IF_FUNCS' => array('array', 'list', - 'isset', 'empty', - 'count', 'sizeof', - 'in_array', 'is_array', - 'true', 'false', 'null'), - 'INCLUDE_ANY' => false, - 'PHP_TAGS' => false, - 'MODIFIER_FUNCS' => array('count'), - 'ALLOW_CONSTANTS' => false, - 'ALLOW_SUPER_GLOBALS' => true - ); - - /** - * This is an array of directories where trusted php scripts reside. - * {@link $security} is disabled during their inclusion/execution. - * - * @var array - */ - var $trusted_dir = array(); - - /** - * The left delimiter used for the template tags. - * - * @var string - */ - var $left_delimiter = '{'; - - /** - * The right delimiter used for the template tags. - * - * @var string - */ - var $right_delimiter = '}'; - - /** - * The order in which request variables are registered, similar to - * variables_order in php.ini E = Environment, G = GET, P = POST, - * C = Cookies, S = Server - * - * @var string - */ - var $request_vars_order = 'EGPCS'; - - /** - * Indicates wether $HTTP_*_VARS[] (request_use_auto_globals=false) - * are uses as request-vars or $_*[]-vars. note: if - * request_use_auto_globals is true, then $request_vars_order has - * no effect, but the php-ini-value "gpc_order" - * - * @var boolean - */ - var $request_use_auto_globals = true; - - /** - * Set this if you want different sets of compiled files for the same - * templates. This is useful for things like different languages. - * Instead of creating separate sets of templates per language, you - * set different compile_ids like 'en' and 'de'. - * - * @var string - */ - var $compile_id = null; - - /** - * This tells Smarty whether or not to use sub dirs in the cache/ and - * templates_c/ directories. sub directories better organized, but - * may not work well with PHP safe mode enabled. - * - * @var boolean - * - */ - var $use_sub_dirs = false; - - /** - * This is a list of the modifiers to apply to all template variables. - * Put each modifier in a separate array element in the order you want - * them applied. example: array('escape:"htmlall"'); - * - * @var array - */ - var $default_modifiers = array(); - - /** - * This is the resource type to be used when not specified - * at the beginning of the resource path. examples: - * $smarty->display('file:index.tpl'); - * $smarty->display('db:index.tpl'); - * $smarty->display('index.tpl'); // will use default resource type - * {include file="file:index.tpl"} - * {include file="db:index.tpl"} - * {include file="index.tpl"} {* will use default resource type *} - * - * @var array - */ - var $default_resource_type = 'file'; - - /** - * The function used for cache file handling. If not set, built-in caching is used. - * - * @var null|string function name - */ - var $cache_handler_func = null; - - /** - * This indicates which filters are automatically loaded into Smarty. - * - * @var array array of filter names - */ - var $autoload_filters = array(); - - /**#@+ - * @var boolean - */ - /** - * This tells if config file vars of the same name overwrite each other or not. - * if disabled, same name variables are accumulated in an array. - */ - var $config_overwrite = true; - - /** - * This tells whether or not to automatically booleanize config file variables. - * If enabled, then the strings "on", "true", and "yes" are treated as boolean - * true, and "off", "false" and "no" are treated as boolean false. - */ - var $config_booleanize = true; - - /** - * This tells whether hidden sections [.foobar] are readable from the - * tempalates or not. Normally you would never allow this since that is - * the point behind hidden sections: the application can access them, but - * the templates cannot. - */ - var $config_read_hidden = false; - - /** - * This tells whether or not automatically fix newlines in config files. - * It basically converts \r (mac) or \r\n (dos) to \n - */ - var $config_fix_newlines = true; - /**#@-*/ - - /** - * If a template cannot be found, this PHP function will be executed. - * Useful for creating templates on-the-fly or other special action. - * - * @var string function name - */ - var $default_template_handler_func = ''; - - /** - * The file that contains the compiler class. This can a full - * pathname, or relative to the php_include path. - * - * @var string - */ - var $compiler_file = 'Smarty_Compiler.class.php'; - - /** - * The class used for compiling templates. - * - * @var string - */ - var $compiler_class = 'Smarty_Compiler'; - - /** - * The class used to load config vars. - * - * @var string - */ - var $config_class = 'Config_File'; - -/**#@+ - * END Smarty Configuration Section - * There should be no need to touch anything below this line. - * @access private - */ - /** - * where assigned template vars are kept - * - * @var array - */ - var $_tpl_vars = array(); - - /** - * stores run-time $smarty.* vars - * - * @var null|array - */ - var $_smarty_vars = null; - - /** - * keeps track of sections - * - * @var array - */ - var $_sections = array(); - - /** - * keeps track of foreach blocks - * - * @var array - */ - var $_foreach = array(); - - /** - * keeps track of tag hierarchy - * - * @var array - */ - var $_tag_stack = array(); - - /** - * configuration object - * - * @var Config_file - */ - var $_conf_obj = null; - - /** - * loaded configuration settings - * - * @var array - */ - var $_config = array(array('vars' => array(), 'files' => array())); - - /** - * md5 checksum of the string 'Smarty' - * - * @var string - */ - var $_smarty_md5 = 'f8d698aea36fcbead2b9d5359ffca76f'; - - /** - * Smarty version number - * - * @var string - */ - var $_version = '2.6.26'; - - /** - * current template inclusion depth - * - * @var integer - */ - var $_inclusion_depth = 0; - - /** - * for different compiled templates - * - * @var string - */ - var $_compile_id = null; - - /** - * text in URL to enable debug mode - * - * @var string - */ - var $_smarty_debug_id = 'SMARTY_DEBUG'; - - /** - * debugging information for debug console - * - * @var array - */ - var $_smarty_debug_info = array(); - - /** - * info that makes up a cache file - * - * @var array - */ - var $_cache_info = array(); - - /** - * default file permissions - * - * @var integer - */ - var $_file_perms = 0644; - - /** - * default dir permissions - * - * @var integer - */ - var $_dir_perms = 0771; - - /** - * registered objects - * - * @var array - */ - var $_reg_objects = array(); - - /** - * table keeping track of plugins - * - * @var array - */ - var $_plugins = array( - 'modifier' => array(), - 'function' => array(), - 'block' => array(), - 'compiler' => array(), - 'prefilter' => array(), - 'postfilter' => array(), - 'outputfilter' => array(), - 'resource' => array(), - 'insert' => array()); - - - /** - * cache serials - * - * @var array - */ - var $_cache_serials = array(); - - /** - * name of optional cache include file - * - * @var string - */ - var $_cache_include = null; - - /** - * indicate if the current code is used in a compiled - * include - * - * @var string - */ - var $_cache_including = false; - - /**#@-*/ - /** - * The class constructor. - */ - function Smarty() - { - $this->assign('SCRIPT_NAME', isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] - : @$GLOBALS['HTTP_SERVER_VARS']['SCRIPT_NAME']); - } - - /** - * assigns values to template variables - * - * @param array|string $tpl_var the template variable name(s) - * @param mixed $value the value to assign - */ - function assign($tpl_var, $value = null) - { - if (is_array($tpl_var)){ - foreach ($tpl_var as $key => $val) { - if ($key != '') { - $this->_tpl_vars[$key] = $val; - } - } - } else { - if ($tpl_var != '') - $this->_tpl_vars[$tpl_var] = $value; - } - } - - /** - * assigns values to template variables by reference - * - * @param string $tpl_var the template variable name - * @param mixed $value the referenced value to assign - */ - function assign_by_ref($tpl_var, &$value) - { - if ($tpl_var != '') - $this->_tpl_vars[$tpl_var] = &$value; - } - - /** - * appends values to template variables - * - * @param array|string $tpl_var the template variable name(s) - * @param mixed $value the value to append - */ - function append($tpl_var, $value=null, $merge=false) - { - if (is_array($tpl_var)) { - // $tpl_var is an array, ignore $value - foreach ($tpl_var as $_key => $_val) { - if ($_key != '') { - if(!@is_array($this->_tpl_vars[$_key])) { - settype($this->_tpl_vars[$_key],'array'); - } - if($merge && is_array($_val)) { - foreach($_val as $_mkey => $_mval) { - $this->_tpl_vars[$_key][$_mkey] = $_mval; - } - } else { - $this->_tpl_vars[$_key][] = $_val; - } - } - } - } else { - if ($tpl_var != '' && isset($value)) { - if(!@is_array($this->_tpl_vars[$tpl_var])) { - settype($this->_tpl_vars[$tpl_var],'array'); - } - if($merge && is_array($value)) { - foreach($value as $_mkey => $_mval) { - $this->_tpl_vars[$tpl_var][$_mkey] = $_mval; - } - } else { - $this->_tpl_vars[$tpl_var][] = $value; - } - } - } - } - - /** - * appends values to template variables by reference - * - * @param string $tpl_var the template variable name - * @param mixed $value the referenced value to append - */ - function append_by_ref($tpl_var, &$value, $merge=false) - { - if ($tpl_var != '' && isset($value)) { - if(!@is_array($this->_tpl_vars[$tpl_var])) { - settype($this->_tpl_vars[$tpl_var],'array'); - } - if ($merge && is_array($value)) { - foreach($value as $_key => $_val) { - $this->_tpl_vars[$tpl_var][$_key] = &$value[$_key]; - } - } else { - $this->_tpl_vars[$tpl_var][] = &$value; - } - } - } - - - /** - * clear the given assigned template variable. - * - * @param string $tpl_var the template variable to clear - */ - function clear_assign($tpl_var) - { - if (is_array($tpl_var)) - foreach ($tpl_var as $curr_var) - unset($this->_tpl_vars[$curr_var]); - else - unset($this->_tpl_vars[$tpl_var]); - } - - - /** - * Registers custom function to be used in templates - * - * @param string $function the name of the template function - * @param string $function_impl the name of the PHP function to register - */ - function register_function($function, $function_impl, $cacheable=true, $cache_attrs=null) - { - $this->_plugins['function'][$function] = - array($function_impl, null, null, false, $cacheable, $cache_attrs); - - } - - /** - * Unregisters custom function - * - * @param string $function name of template function - */ - function unregister_function($function) - { - unset($this->_plugins['function'][$function]); - } - - /** - * Registers object to be used in templates - * - * @param string $object name of template object - * @param object &$object_impl the referenced PHP object to register - * @param null|array $allowed list of allowed methods (empty = all) - * @param boolean $smarty_args smarty argument format, else traditional - * @param null|array $block_functs list of methods that are block format - */ - function register_object($object, &$object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) - { - settype($allowed, 'array'); - settype($smarty_args, 'boolean'); - $this->_reg_objects[$object] = - array(&$object_impl, $allowed, $smarty_args, $block_methods); - } - - /** - * Unregisters object - * - * @param string $object name of template object - */ - function unregister_object($object) - { - unset($this->_reg_objects[$object]); - } - - - /** - * Registers block function to be used in templates - * - * @param string $block name of template block - * @param string $block_impl PHP function to register - */ - function register_block($block, $block_impl, $cacheable=true, $cache_attrs=null) - { - $this->_plugins['block'][$block] = - array($block_impl, null, null, false, $cacheable, $cache_attrs); - } - - /** - * Unregisters block function - * - * @param string $block name of template function - */ - function unregister_block($block) - { - unset($this->_plugins['block'][$block]); - } - - /** - * Registers compiler function - * - * @param string $function name of template function - * @param string $function_impl name of PHP function to register - */ - function register_compiler_function($function, $function_impl, $cacheable=true) - { - $this->_plugins['compiler'][$function] = - array($function_impl, null, null, false, $cacheable); - } - - /** - * Unregisters compiler function - * - * @param string $function name of template function - */ - function unregister_compiler_function($function) - { - unset($this->_plugins['compiler'][$function]); - } - - /** - * Registers modifier to be used in templates - * - * @param string $modifier name of template modifier - * @param string $modifier_impl name of PHP function to register - */ - function register_modifier($modifier, $modifier_impl) - { - $this->_plugins['modifier'][$modifier] = - array($modifier_impl, null, null, false); - } - - /** - * Unregisters modifier - * - * @param string $modifier name of template modifier - */ - function unregister_modifier($modifier) - { - unset($this->_plugins['modifier'][$modifier]); - } - - /** - * Registers a resource to fetch a template - * - * @param string $type name of resource - * @param array $functions array of functions to handle resource - */ - function register_resource($type, $functions) - { - if (count($functions)==4) { - $this->_plugins['resource'][$type] = - array($functions, false); - - } elseif (count($functions)==5) { - $this->_plugins['resource'][$type] = - array(array(array(&$functions[0], $functions[1]) - ,array(&$functions[0], $functions[2]) - ,array(&$functions[0], $functions[3]) - ,array(&$functions[0], $functions[4])) - ,false); - - } else { - $this->trigger_error("malformed function-list for '$type' in register_resource"); - - } - } - - /** - * Unregisters a resource - * - * @param string $type name of resource - */ - function unregister_resource($type) - { - unset($this->_plugins['resource'][$type]); - } - - /** - * Registers a prefilter function to apply - * to a template before compiling - * - * @param callback $function - */ - function register_prefilter($function) - { - $this->_plugins['prefilter'][$this->_get_filter_name($function)] - = array($function, null, null, false); - } - - /** - * Unregisters a prefilter function - * - * @param callback $function - */ - function unregister_prefilter($function) - { - unset($this->_plugins['prefilter'][$this->_get_filter_name($function)]); - } - - /** - * Registers a postfilter function to apply - * to a compiled template after compilation - * - * @param callback $function - */ - function register_postfilter($function) - { - $this->_plugins['postfilter'][$this->_get_filter_name($function)] - = array($function, null, null, false); - } - - /** - * Unregisters a postfilter function - * - * @param callback $function - */ - function unregister_postfilter($function) - { - unset($this->_plugins['postfilter'][$this->_get_filter_name($function)]); - } - - /** - * Registers an output filter function to apply - * to a template output - * - * @param callback $function - */ - function register_outputfilter($function) - { - $this->_plugins['outputfilter'][$this->_get_filter_name($function)] - = array($function, null, null, false); - } - - /** - * Unregisters an outputfilter function - * - * @param callback $function - */ - function unregister_outputfilter($function) - { - unset($this->_plugins['outputfilter'][$this->_get_filter_name($function)]); - } - - /** - * load a filter of specified type and name - * - * @param string $type filter type - * @param string $name filter name - */ - function load_filter($type, $name) - { - switch ($type) { - case 'output': - $_params = array('plugins' => array(array($type . 'filter', $name, null, null, false))); - require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); - smarty_core_load_plugins($_params, $this); - break; - - case 'pre': - case 'post': - if (!isset($this->_plugins[$type . 'filter'][$name])) - $this->_plugins[$type . 'filter'][$name] = false; - break; - } - } - - /** - * clear cached content for the given template and cache id - * - * @param string $tpl_file name of template file - * @param string $cache_id name of cache_id - * @param string $compile_id name of compile_id - * @param string $exp_time expiration time - * @return boolean - */ - function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null) - { - - if (!isset($compile_id)) - $compile_id = $this->compile_id; - - if (!isset($tpl_file)) - $compile_id = null; - - $_auto_id = $this->_get_auto_id($cache_id, $compile_id); - - if (!empty($this->cache_handler_func)) { - return call_user_func_array($this->cache_handler_func, - array('clear', &$this, &$dummy, $tpl_file, $cache_id, $compile_id, $exp_time)); - } else { - $_params = array('auto_base' => $this->cache_dir, - 'auto_source' => $tpl_file, - 'auto_id' => $_auto_id, - 'exp_time' => $exp_time); - require_once(SMARTY_CORE_DIR . 'core.rm_auto.php'); - return smarty_core_rm_auto($_params, $this); - } - - } - - - /** - * clear the entire contents of cache (all templates) - * - * @param string $exp_time expire time - * @return boolean results of {@link smarty_core_rm_auto()} - */ - function clear_all_cache($exp_time = null) - { - return $this->clear_cache(null, null, null, $exp_time); - } - - - /** - * test to see if valid cache exists for this template - * - * @param string $tpl_file name of template file - * @param string $cache_id - * @param string $compile_id - * @return string|false results of {@link _read_cache_file()} - */ - function is_cached($tpl_file, $cache_id = null, $compile_id = null) - { - if (!$this->caching) - return false; - - if (!isset($compile_id)) - $compile_id = $this->compile_id; - - $_params = array( - 'tpl_file' => $tpl_file, - 'cache_id' => $cache_id, - 'compile_id' => $compile_id - ); - require_once(SMARTY_CORE_DIR . 'core.read_cache_file.php'); - return smarty_core_read_cache_file($_params, $this); - } - - - /** - * clear all the assigned template variables. - * - */ - function clear_all_assign() - { - $this->_tpl_vars = array(); - } - - /** - * clears compiled version of specified template resource, - * or all compiled template files if one is not specified. - * This function is for advanced use only, not normally needed. - * - * @param string $tpl_file - * @param string $compile_id - * @param string $exp_time - * @return boolean results of {@link smarty_core_rm_auto()} - */ - function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null) - { - if (!isset($compile_id)) { - $compile_id = $this->compile_id; - } - $_params = array('auto_base' => $this->compile_dir, - 'auto_source' => $tpl_file, - 'auto_id' => $compile_id, - 'exp_time' => $exp_time, - 'extensions' => array('.inc', '.php')); - require_once(SMARTY_CORE_DIR . 'core.rm_auto.php'); - return smarty_core_rm_auto($_params, $this); - } - - /** - * Checks whether requested template exists. - * - * @param string $tpl_file - * @return boolean - */ - function template_exists($tpl_file) - { - $_params = array('resource_name' => $tpl_file, 'quiet'=>true, 'get_source'=>false); - return $this->_fetch_resource_info($_params); - } - - /** - * Returns an array containing template variables - * - * @param string $name - * @param string $type - * @return array - */ - function &get_template_vars($name=null) - { - if(!isset($name)) { - return $this->_tpl_vars; - } elseif(isset($this->_tpl_vars[$name])) { - return $this->_tpl_vars[$name]; - } else { - // var non-existant, return valid reference - $_tmp = null; - return $_tmp; - } - } - - /** - * Returns an array containing config variables - * - * @param string $name - * @param string $type - * @return array - */ - function &get_config_vars($name=null) - { - if(!isset($name) && is_array($this->_config[0])) { - return $this->_config[0]['vars']; - } else if(isset($this->_config[0]['vars'][$name])) { - return $this->_config[0]['vars'][$name]; - } else { - // var non-existant, return valid reference - $_tmp = null; - return $_tmp; - } - } - - /** - * trigger Smarty error - * - * @param string $error_msg - * @param integer $error_type - */ - function trigger_error($error_msg, $error_type = E_USER_WARNING) - { - trigger_error("Smarty error: $error_msg", $error_type); - } - - - /** - * executes & displays the template results - * - * @param string $resource_name - * @param string $cache_id - * @param string $compile_id - */ - function display($resource_name, $cache_id = null, $compile_id = null) - { - $this->fetch($resource_name, $cache_id, $compile_id, true); - } - - /** - * executes & returns or displays the template results - * - * @param string $resource_name - * @param string $cache_id - * @param string $compile_id - * @param boolean $display - */ - function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false) - { - static $_cache_info = array(); - - $_smarty_old_error_level = $this->debugging ? error_reporting() : error_reporting(isset($this->error_reporting) - ? $this->error_reporting : error_reporting() & ~E_NOTICE); - - if (!$this->debugging && $this->debugging_ctrl == 'URL') { - $_query_string = $this->request_use_auto_globals ? $_SERVER['QUERY_STRING'] : $GLOBALS['HTTP_SERVER_VARS']['QUERY_STRING']; - if (@strstr($_query_string, $this->_smarty_debug_id)) { - if (@strstr($_query_string, $this->_smarty_debug_id . '=on')) { - // enable debugging for this browser session - @setcookie('SMARTY_DEBUG', true); - $this->debugging = true; - } elseif (@strstr($_query_string, $this->_smarty_debug_id . '=off')) { - // disable debugging for this browser session - @setcookie('SMARTY_DEBUG', false); - $this->debugging = false; - } else { - // enable debugging for this page - $this->debugging = true; - } - } else { - $this->debugging = (bool)($this->request_use_auto_globals ? @$_COOKIE['SMARTY_DEBUG'] : @$GLOBALS['HTTP_COOKIE_VARS']['SMARTY_DEBUG']); - } - } - - if ($this->debugging) { - // capture time for debugging info - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $_debug_start_time = smarty_core_get_microtime($_params, $this); - $this->_smarty_debug_info[] = array('type' => 'template', - 'filename' => $resource_name, - 'depth' => 0); - $_included_tpls_idx = count($this->_smarty_debug_info) - 1; - } - - if (!isset($compile_id)) { - $compile_id = $this->compile_id; - } - - $this->_compile_id = $compile_id; - $this->_inclusion_depth = 0; - - if ($this->caching) { - // save old cache_info, initialize cache_info - array_push($_cache_info, $this->_cache_info); - $this->_cache_info = array(); - $_params = array( - 'tpl_file' => $resource_name, - 'cache_id' => $cache_id, - 'compile_id' => $compile_id, - 'results' => null - ); - require_once(SMARTY_CORE_DIR . 'core.read_cache_file.php'); - if (smarty_core_read_cache_file($_params, $this)) { - $_smarty_results = $_params['results']; - if (!empty($this->_cache_info['insert_tags'])) { - $_params = array('plugins' => $this->_cache_info['insert_tags']); - require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); - smarty_core_load_plugins($_params, $this); - $_params = array('results' => $_smarty_results); - require_once(SMARTY_CORE_DIR . 'core.process_cached_inserts.php'); - $_smarty_results = smarty_core_process_cached_inserts($_params, $this); - } - if (!empty($this->_cache_info['cache_serials'])) { - $_params = array('results' => $_smarty_results); - require_once(SMARTY_CORE_DIR . 'core.process_compiled_include.php'); - $_smarty_results = smarty_core_process_compiled_include($_params, $this); - } - - - if ($display) { - if ($this->debugging) - { - // capture time for debugging info - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $this->_smarty_debug_info[$_included_tpls_idx]['exec_time'] = smarty_core_get_microtime($_params, $this) - $_debug_start_time; - require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php'); - $_smarty_results .= smarty_core_display_debug_console($_params, $this); - } - if ($this->cache_modified_check) { - $_server_vars = ($this->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS']; - $_last_modified_date = @substr($_server_vars['HTTP_IF_MODIFIED_SINCE'], 0, strpos($_server_vars['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3); - $_gmt_mtime = gmdate('D, d M Y H:i:s', $this->_cache_info['timestamp']).' GMT'; - if (@count($this->_cache_info['insert_tags']) == 0 - && !$this->_cache_serials - && $_gmt_mtime == $_last_modified_date) { - if (php_sapi_name()=='cgi') - header('Status: 304 Not Modified'); - else - header('HTTP/1.1 304 Not Modified'); - - } else { - header('Last-Modified: '.$_gmt_mtime); - echo $_smarty_results; - } - } else { - echo $_smarty_results; - } - error_reporting($_smarty_old_error_level); - // restore initial cache_info - $this->_cache_info = array_pop($_cache_info); - return true; - } else { - error_reporting($_smarty_old_error_level); - // restore initial cache_info - $this->_cache_info = array_pop($_cache_info); - return $_smarty_results; - } - } else { - $this->_cache_info['template'][$resource_name] = true; - if ($this->cache_modified_check && $display) { - header('Last-Modified: '.gmdate('D, d M Y H:i:s', time()).' GMT'); - } - } - } - - // load filters that are marked as autoload - if (count($this->autoload_filters)) { - foreach ($this->autoload_filters as $_filter_type => $_filters) { - foreach ($_filters as $_filter) { - $this->load_filter($_filter_type, $_filter); - } - } - } - - $_smarty_compile_path = $this->_get_compile_path($resource_name); - - // if we just need to display the results, don't perform output - // buffering - for speed - $_cache_including = $this->_cache_including; - $this->_cache_including = false; - if ($display && !$this->caching && count($this->_plugins['outputfilter']) == 0) { - if ($this->_is_compiled($resource_name, $_smarty_compile_path) - || $this->_compile_resource($resource_name, $_smarty_compile_path)) - { - include($_smarty_compile_path); - } - } else { - ob_start(); - if ($this->_is_compiled($resource_name, $_smarty_compile_path) - || $this->_compile_resource($resource_name, $_smarty_compile_path)) - { - include($_smarty_compile_path); - } - $_smarty_results = ob_get_contents(); - ob_end_clean(); - - foreach ((array)$this->_plugins['outputfilter'] as $_output_filter) { - $_smarty_results = call_user_func_array($_output_filter[0], array($_smarty_results, &$this)); - } - } - - if ($this->caching) { - $_params = array('tpl_file' => $resource_name, - 'cache_id' => $cache_id, - 'compile_id' => $compile_id, - 'results' => $_smarty_results); - require_once(SMARTY_CORE_DIR . 'core.write_cache_file.php'); - smarty_core_write_cache_file($_params, $this); - require_once(SMARTY_CORE_DIR . 'core.process_cached_inserts.php'); - $_smarty_results = smarty_core_process_cached_inserts($_params, $this); - - if ($this->_cache_serials) { - // strip nocache-tags from output - $_smarty_results = preg_replace('!(\{/?nocache\:[0-9a-f]{32}#\d+\})!s' - ,'' - ,$_smarty_results); - } - // restore initial cache_info - $this->_cache_info = array_pop($_cache_info); - } - $this->_cache_including = $_cache_including; - - if ($display) { - if (isset($_smarty_results)) { echo $_smarty_results; } - if ($this->debugging) { - // capture time for debugging info - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $this->_smarty_debug_info[$_included_tpls_idx]['exec_time'] = (smarty_core_get_microtime($_params, $this) - $_debug_start_time); - require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php'); - echo smarty_core_display_debug_console($_params, $this); - } - error_reporting($_smarty_old_error_level); - return; - } else { - error_reporting($_smarty_old_error_level); - if (isset($_smarty_results)) { return $_smarty_results; } - } - } - - /** - * load configuration values - * - * @param string $file - * @param string $section - * @param string $scope - */ - function config_load($file, $section = null, $scope = 'global') - { - require_once($this->_get_plugin_filepath('function', 'config_load')); - smarty_function_config_load(array('file' => $file, 'section' => $section, 'scope' => $scope), $this); - } - - /** - * return a reference to a registered object - * - * @param string $name - * @return object - */ - function &get_registered_object($name) { - if (!isset($this->_reg_objects[$name])) - $this->_trigger_fatal_error("'$name' is not a registered object"); - - if (!is_object($this->_reg_objects[$name][0])) - $this->_trigger_fatal_error("registered '$name' is not an object"); - - return $this->_reg_objects[$name][0]; - } - - /** - * clear configuration values - * - * @param string $var - */ - function clear_config($var = null) - { - if(!isset($var)) { - // clear all values - $this->_config = array(array('vars' => array(), - 'files' => array())); - } else { - unset($this->_config[0]['vars'][$var]); - } - } - - /** - * get filepath of requested plugin - * - * @param string $type - * @param string $name - * @return string|false - */ - function _get_plugin_filepath($type, $name) - { - $_params = array('type' => $type, 'name' => $name); - require_once(SMARTY_CORE_DIR . 'core.assemble_plugin_filepath.php'); - return smarty_core_assemble_plugin_filepath($_params, $this); - } - - /** - * test if resource needs compiling - * - * @param string $resource_name - * @param string $compile_path - * @return boolean - */ - function _is_compiled($resource_name, $compile_path) - { - if (!$this->force_compile && file_exists($compile_path)) { - if (!$this->compile_check) { - // no need to check compiled file - return true; - } else { - // get file source and timestamp - $_params = array('resource_name' => $resource_name, 'get_source'=>false); - if (!$this->_fetch_resource_info($_params)) { - return false; - } - if ($_params['resource_timestamp'] <= filemtime($compile_path)) { - // template not expired, no recompile - return true; - } else { - // compile template - return false; - } - } - } else { - // compiled template does not exist, or forced compile - return false; - } - } - - /** - * compile the template - * - * @param string $resource_name - * @param string $compile_path - * @return boolean - */ - function _compile_resource($resource_name, $compile_path) - { - $_params = array('resource_name' => $resource_name); - if (!$this->_fetch_resource_info($_params)) { - return false; - } - - $_source_content = $_params['source_content']; - $_cache_include = substr($compile_path, 0, -4).'.inc'; - - if ($this->_compile_source($resource_name, $_source_content, $_compiled_content, $_cache_include)) { - // if a _cache_serial was set, we also have to write an include-file: - if ($this->_cache_include_info) { - require_once(SMARTY_CORE_DIR . 'core.write_compiled_include.php'); - smarty_core_write_compiled_include(array_merge($this->_cache_include_info, array('compiled_content'=>$_compiled_content, 'resource_name'=>$resource_name)), $this); - } - - $_params = array('compile_path'=>$compile_path, 'compiled_content' => $_compiled_content); - require_once(SMARTY_CORE_DIR . 'core.write_compiled_resource.php'); - smarty_core_write_compiled_resource($_params, $this); - - return true; - } else { - return false; - } - - } - - /** - * compile the given source - * - * @param string $resource_name - * @param string $source_content - * @param string $compiled_content - * @return boolean - */ - function _compile_source($resource_name, &$source_content, &$compiled_content, $cache_include_path=null) - { - if (file_exists(SMARTY_DIR . $this->compiler_file)) { - require_once(SMARTY_DIR . $this->compiler_file); - } else { - // use include_path - require_once($this->compiler_file); - } - - - $smarty_compiler = new $this->compiler_class; - - $smarty_compiler->template_dir = $this->template_dir; - $smarty_compiler->compile_dir = $this->compile_dir; - $smarty_compiler->plugins_dir = $this->plugins_dir; - $smarty_compiler->config_dir = $this->config_dir; - $smarty_compiler->force_compile = $this->force_compile; - $smarty_compiler->caching = $this->caching; - $smarty_compiler->php_handling = $this->php_handling; - $smarty_compiler->left_delimiter = $this->left_delimiter; - $smarty_compiler->right_delimiter = $this->right_delimiter; - $smarty_compiler->_version = $this->_version; - $smarty_compiler->security = $this->security; - $smarty_compiler->secure_dir = $this->secure_dir; - $smarty_compiler->security_settings = $this->security_settings; - $smarty_compiler->trusted_dir = $this->trusted_dir; - $smarty_compiler->use_sub_dirs = $this->use_sub_dirs; - $smarty_compiler->_reg_objects = &$this->_reg_objects; - $smarty_compiler->_plugins = &$this->_plugins; - $smarty_compiler->_tpl_vars = &$this->_tpl_vars; - $smarty_compiler->default_modifiers = $this->default_modifiers; - $smarty_compiler->compile_id = $this->_compile_id; - $smarty_compiler->_config = $this->_config; - $smarty_compiler->request_use_auto_globals = $this->request_use_auto_globals; - - if (isset($cache_include_path) && isset($this->_cache_serials[$cache_include_path])) { - $smarty_compiler->_cache_serial = $this->_cache_serials[$cache_include_path]; - } - $smarty_compiler->_cache_include = $cache_include_path; - - - $_results = $smarty_compiler->_compile_file($resource_name, $source_content, $compiled_content); - - if ($smarty_compiler->_cache_serial) { - $this->_cache_include_info = array( - 'cache_serial'=>$smarty_compiler->_cache_serial - ,'plugins_code'=>$smarty_compiler->_plugins_code - ,'include_file_path' => $cache_include_path); - - } else { - $this->_cache_include_info = null; - - } - - return $_results; - } - - /** - * Get the compile path for this resource - * - * @param string $resource_name - * @return string results of {@link _get_auto_filename()} - */ - function _get_compile_path($resource_name) - { - return $this->_get_auto_filename($this->compile_dir, $resource_name, - $this->_compile_id) . '.php'; - } - - /** - * fetch the template info. Gets timestamp, and source - * if get_source is true - * - * sets $source_content to the source of the template, and - * $resource_timestamp to its time stamp - * @param string $resource_name - * @param string $source_content - * @param integer $resource_timestamp - * @param boolean $get_source - * @param boolean $quiet - * @return boolean - */ - - function _fetch_resource_info(&$params) - { - if(!isset($params['get_source'])) { $params['get_source'] = true; } - if(!isset($params['quiet'])) { $params['quiet'] = false; } - - $_return = false; - $_params = array('resource_name' => $params['resource_name']) ; - if (isset($params['resource_base_path'])) - $_params['resource_base_path'] = $params['resource_base_path']; - else - $_params['resource_base_path'] = $this->template_dir; - - if ($this->_parse_resource_name($_params)) { - $_resource_type = $_params['resource_type']; - $_resource_name = $_params['resource_name']; - switch ($_resource_type) { - case 'file': - if ($params['get_source']) { - $params['source_content'] = $this->_read_file($_resource_name); - } - $params['resource_timestamp'] = filemtime($_resource_name); - $_return = is_file($_resource_name) && is_readable($_resource_name); - break; - - default: - // call resource functions to fetch the template source and timestamp - if ($params['get_source']) { - $_source_return = isset($this->_plugins['resource'][$_resource_type]) && - call_user_func_array($this->_plugins['resource'][$_resource_type][0][0], - array($_resource_name, &$params['source_content'], &$this)); - } else { - $_source_return = true; - } - - $_timestamp_return = isset($this->_plugins['resource'][$_resource_type]) && - call_user_func_array($this->_plugins['resource'][$_resource_type][0][1], - array($_resource_name, &$params['resource_timestamp'], &$this)); - - $_return = $_source_return && $_timestamp_return; - break; - } - } - - if (!$_return) { - // see if we can get a template with the default template handler - if (!empty($this->default_template_handler_func)) { - if (!is_callable($this->default_template_handler_func)) { - $this->trigger_error("default template handler function \"$this->default_template_handler_func\" doesn't exist."); - } else { - $_return = call_user_func_array( - $this->default_template_handler_func, - array($_params['resource_type'], $_params['resource_name'], &$params['source_content'], &$params['resource_timestamp'], &$this)); - } - } - } - - if (!$_return) { - if (!$params['quiet']) { - $this->trigger_error('unable to read resource: "' . $params['resource_name'] . '"'); - } - } else if ($_return && $this->security) { - require_once(SMARTY_CORE_DIR . 'core.is_secure.php'); - if (!smarty_core_is_secure($_params, $this)) { - if (!$params['quiet']) - $this->trigger_error('(secure mode) accessing "' . $params['resource_name'] . '" is not allowed'); - $params['source_content'] = null; - $params['resource_timestamp'] = null; - return false; - } - } - return $_return; - } - - - /** - * parse out the type and name from the resource - * - * @param string $resource_base_path - * @param string $resource_name - * @param string $resource_type - * @param string $resource_name - * @return boolean - */ - - function _parse_resource_name(&$params) - { - - // split tpl_path by the first colon - $_resource_name_parts = explode(':', $params['resource_name'], 2); - - if (count($_resource_name_parts) == 1) { - // no resource type given - $params['resource_type'] = $this->default_resource_type; - $params['resource_name'] = $_resource_name_parts[0]; - } else { - if(strlen($_resource_name_parts[0]) == 1) { - // 1 char is not resource type, but part of filepath - $params['resource_type'] = $this->default_resource_type; - $params['resource_name'] = $params['resource_name']; - } else { - $params['resource_type'] = $_resource_name_parts[0]; - $params['resource_name'] = $_resource_name_parts[1]; - } - } - - if ($params['resource_type'] == 'file') { - if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $params['resource_name'])) { - // relative pathname to $params['resource_base_path'] - // use the first directory where the file is found - foreach ((array)$params['resource_base_path'] as $_curr_path) { - $_fullpath = $_curr_path . DIRECTORY_SEPARATOR . $params['resource_name']; - if (file_exists($_fullpath) && is_file($_fullpath)) { - $params['resource_name'] = $_fullpath; - return true; - } - // didn't find the file, try include_path - $_params = array('file_path' => $_fullpath); - require_once(SMARTY_CORE_DIR . 'core.get_include_path.php'); - if(smarty_core_get_include_path($_params, $this)) { - $params['resource_name'] = $_params['new_file_path']; - return true; - } - } - return false; - } else { - /* absolute path */ - return file_exists($params['resource_name']); - } - } elseif (empty($this->_plugins['resource'][$params['resource_type']])) { - $_params = array('type' => $params['resource_type']); - require_once(SMARTY_CORE_DIR . 'core.load_resource_plugin.php'); - smarty_core_load_resource_plugin($_params, $this); - } - - return true; - } - - - /** - * Handle modifiers - * - * @param string|null $modifier_name - * @param array|null $map_array - * @return string result of modifiers - */ - function _run_mod_handler() - { - $_args = func_get_args(); - list($_modifier_name, $_map_array) = array_splice($_args, 0, 2); - list($_func_name, $_tpl_file, $_tpl_line) = - $this->_plugins['modifier'][$_modifier_name]; - - $_var = $_args[0]; - foreach ($_var as $_key => $_val) { - $_args[0] = $_val; - $_var[$_key] = call_user_func_array($_func_name, $_args); - } - return $_var; - } - - /** - * Remove starting and ending quotes from the string - * - * @param string $string - * @return string - */ - function _dequote($string) - { - if ((substr($string, 0, 1) == "'" || substr($string, 0, 1) == '"') && - substr($string, -1) == substr($string, 0, 1)) - return substr($string, 1, -1); - else - return $string; - } - - - /** - * read in a file - * - * @param string $filename - * @return string - */ - function _read_file($filename) - { - if ( file_exists($filename) && is_readable($filename) && ($fd = @fopen($filename, 'rb')) ) { - $contents = ''; - while (!feof($fd)) { - $contents .= fread($fd, 8192); - } - fclose($fd); - return $contents; - } else { - return false; - } - } - - /** - * get a concrete filename for automagically created content - * - * @param string $auto_base - * @param string $auto_source - * @param string $auto_id - * @return string - * @staticvar string|null - * @staticvar string|null - */ - function _get_auto_filename($auto_base, $auto_source = null, $auto_id = null) - { - $_compile_dir_sep = $this->use_sub_dirs ? DIRECTORY_SEPARATOR : '^'; - $_return = $auto_base . DIRECTORY_SEPARATOR; - - if(isset($auto_id)) { - // make auto_id safe for directory names - $auto_id = str_replace('%7C',$_compile_dir_sep,(urlencode($auto_id))); - // split into separate directories - $_return .= $auto_id . $_compile_dir_sep; - } - - if(isset($auto_source)) { - // make source name safe for filename - $_filename = urlencode(basename($auto_source)); - $_crc32 = sprintf('%08X', crc32($auto_source)); - // prepend %% to avoid name conflicts with - // with $params['auto_id'] names - $_crc32 = substr($_crc32, 0, 2) . $_compile_dir_sep . - substr($_crc32, 0, 3) . $_compile_dir_sep . $_crc32; - $_return .= '%%' . $_crc32 . '%%' . $_filename; - } - - return $_return; - } - - /** - * unlink a file, possibly using expiration time - * - * @param string $resource - * @param integer $exp_time - */ - function _unlink($resource, $exp_time = null) - { - if(isset($exp_time)) { - if(time() - @filemtime($resource) >= $exp_time) { - return @unlink($resource); - } - } else { - return @unlink($resource); - } - } - - /** - * returns an auto_id for auto-file-functions - * - * @param string $cache_id - * @param string $compile_id - * @return string|null - */ - function _get_auto_id($cache_id=null, $compile_id=null) { - if (isset($cache_id)) - return (isset($compile_id)) ? $cache_id . '|' . $compile_id : $cache_id; - elseif(isset($compile_id)) - return $compile_id; - else - return null; - } - - /** - * trigger Smarty plugin error - * - * @param string $error_msg - * @param string $tpl_file - * @param integer $tpl_line - * @param string $file - * @param integer $line - * @param integer $error_type - */ - function _trigger_fatal_error($error_msg, $tpl_file = null, $tpl_line = null, - $file = null, $line = null, $error_type = E_USER_ERROR) - { - if(isset($file) && isset($line)) { - $info = ' ('.basename($file).", line $line)"; - } else { - $info = ''; - } - if (isset($tpl_line) && isset($tpl_file)) { - $this->trigger_error('[in ' . $tpl_file . ' line ' . $tpl_line . "]: $error_msg$info", $error_type); - } else { - $this->trigger_error($error_msg . $info, $error_type); - } - } - - - /** - * callback function for preg_replace, to call a non-cacheable block - * @return string - */ - function _process_compiled_include_callback($match) { - $_func = '_smarty_tplfunc_'.$match[2].'_'.$match[3]; - ob_start(); - $_func($this); - $_ret = ob_get_contents(); - ob_end_clean(); - return $_ret; - } - - - /** - * called for included templates - * - * @param string $_smarty_include_tpl_file - * @param string $_smarty_include_vars - */ - - // $_smarty_include_tpl_file, $_smarty_include_vars - - function _smarty_include($params) - { - if ($this->debugging) { - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $debug_start_time = smarty_core_get_microtime($_params, $this); - $this->_smarty_debug_info[] = array('type' => 'template', - 'filename' => $params['smarty_include_tpl_file'], - 'depth' => ++$this->_inclusion_depth); - $included_tpls_idx = count($this->_smarty_debug_info) - 1; - } - - $this->_tpl_vars = array_merge($this->_tpl_vars, $params['smarty_include_vars']); - - // config vars are treated as local, so push a copy of the - // current ones onto the front of the stack - array_unshift($this->_config, $this->_config[0]); - - $_smarty_compile_path = $this->_get_compile_path($params['smarty_include_tpl_file']); - - - if ($this->_is_compiled($params['smarty_include_tpl_file'], $_smarty_compile_path) - || $this->_compile_resource($params['smarty_include_tpl_file'], $_smarty_compile_path)) - { - include($_smarty_compile_path); - } - - // pop the local vars off the front of the stack - array_shift($this->_config); - - $this->_inclusion_depth--; - - if ($this->debugging) { - // capture time for debugging info - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $this->_smarty_debug_info[$included_tpls_idx]['exec_time'] = smarty_core_get_microtime($_params, $this) - $debug_start_time; - } - - if ($this->caching) { - $this->_cache_info['template'][$params['smarty_include_tpl_file']] = true; - } - } - - - /** - * get or set an array of cached attributes for function that is - * not cacheable - * @return array - */ - function &_smarty_cache_attrs($cache_serial, $count) { - $_cache_attrs =& $this->_cache_info['cache_attrs'][$cache_serial][$count]; - - if ($this->_cache_including) { - /* return next set of cache_attrs */ - $_return = current($_cache_attrs); - next($_cache_attrs); - return $_return; - - } else { - /* add a reference to a new set of cache_attrs */ - $_cache_attrs[] = array(); - return $_cache_attrs[count($_cache_attrs)-1]; - - } - - } - - - /** - * wrapper for include() retaining $this - * @return mixed - */ - function _include($filename, $once=false, $params=null) - { - if ($once) { - return include_once($filename); - } else { - return include($filename); - } - } - - - /** - * wrapper for eval() retaining $this - * @return mixed - */ - function _eval($code, $params=null) - { - return eval($code); - } - - /** - * Extracts the filter name from the given callback - * - * @param callback $function - * @return string - */ - function _get_filter_name($function) - { - if (is_array($function)) { - $_class_name = (is_object($function[0]) ? - get_class($function[0]) : $function[0]); - return $_class_name . '_' . $function[1]; - } - else { - return $function; - } - } - - /**#@-*/ - -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/Smarty_Compiler.class.php b/htdocs/lib2/smarty/Smarty_Compiler.class.php deleted file mode 100644 index 1178b84d0..000000000 --- a/htdocs/lib2/smarty/Smarty_Compiler.class.php +++ /dev/null @@ -1,2365 +0,0 @@ - - * @author Andrei Zmievski - * @version 2.6.26 - * @copyright 2001-2005 New Digital Group, Inc. - * @package Smarty - */ - -/* $Id: Smarty_Compiler.class.php 3163 2009-06-17 14:39:24Z monte.ohrt $ */ - -/** - * Template compiling class - * @package Smarty - */ -class Smarty_Compiler extends Smarty { - - // internal vars - /**#@+ - * @access private - */ - var $_folded_blocks = array(); // keeps folded template blocks - var $_current_file = null; // the current template being compiled - var $_current_line_no = 1; // line number for error messages - var $_capture_stack = array(); // keeps track of nested capture buffers - var $_plugin_info = array(); // keeps track of plugins to load - var $_init_smarty_vars = false; - var $_permitted_tokens = array('true','false','yes','no','on','off','null'); - var $_db_qstr_regexp = null; // regexps are setup in the constructor - var $_si_qstr_regexp = null; - var $_qstr_regexp = null; - var $_func_regexp = null; - var $_reg_obj_regexp = null; - var $_var_bracket_regexp = null; - var $_num_const_regexp = null; - var $_dvar_guts_regexp = null; - var $_dvar_regexp = null; - var $_cvar_regexp = null; - var $_svar_regexp = null; - var $_avar_regexp = null; - var $_mod_regexp = null; - var $_var_regexp = null; - var $_parenth_param_regexp = null; - var $_func_call_regexp = null; - var $_obj_ext_regexp = null; - var $_obj_start_regexp = null; - var $_obj_params_regexp = null; - var $_obj_call_regexp = null; - var $_cacheable_state = 0; - var $_cache_attrs_count = 0; - var $_nocache_count = 0; - var $_cache_serial = null; - var $_cache_include = null; - - var $_strip_depth = 0; - var $_additional_newline = "\n"; - - /**#@-*/ - /** - * The class constructor. - */ - function Smarty_Compiler() - { - // matches double quoted strings: - // "foobar" - // "foo\"bar" - $this->_db_qstr_regexp = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"'; - - // matches single quoted strings: - // 'foobar' - // 'foo\'bar' - $this->_si_qstr_regexp = '\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\''; - - // matches single or double quoted strings - $this->_qstr_regexp = '(?:' . $this->_db_qstr_regexp . '|' . $this->_si_qstr_regexp . ')'; - - // matches bracket portion of vars - // [0] - // [foo] - // [$bar] - $this->_var_bracket_regexp = '\[\$?[\w\.]+\]'; - - // matches numerical constants - // 30 - // -12 - // 13.22 - $this->_num_const_regexp = '(?:\-?\d+(?:\.\d+)?)'; - - // matches $ vars (not objects): - // $foo - // $foo.bar - // $foo.bar.foobar - // $foo[0] - // $foo[$bar] - // $foo[5][blah] - // $foo[5].bar[$foobar][4] - $this->_dvar_math_regexp = '(?:[\+\*\/\%]|(?:-(?!>)))'; - $this->_dvar_math_var_regexp = '[\$\w\.\+\-\*\/\%\d\>\[\]]'; - $this->_dvar_guts_regexp = '\w+(?:' . $this->_var_bracket_regexp - . ')*(?:\.\$?\w+(?:' . $this->_var_bracket_regexp . ')*)*(?:' . $this->_dvar_math_regexp . '(?:' . $this->_num_const_regexp . '|' . $this->_dvar_math_var_regexp . ')*)?'; - $this->_dvar_regexp = '\$' . $this->_dvar_guts_regexp; - - // matches config vars: - // #foo# - // #foobar123_foo# - $this->_cvar_regexp = '\#\w+\#'; - - // matches section vars: - // %foo.bar% - $this->_svar_regexp = '\%\w+\.\w+\%'; - - // matches all valid variables (no quotes, no modifiers) - $this->_avar_regexp = '(?:' . $this->_dvar_regexp . '|' - . $this->_cvar_regexp . '|' . $this->_svar_regexp . ')'; - - // matches valid variable syntax: - // $foo - // $foo - // #foo# - // #foo# - // "text" - // "text" - $this->_var_regexp = '(?:' . $this->_avar_regexp . '|' . $this->_qstr_regexp . ')'; - - // matches valid object call (one level of object nesting allowed in parameters): - // $foo->bar - // $foo->bar() - // $foo->bar("text") - // $foo->bar($foo, $bar, "text") - // $foo->bar($foo, "foo") - // $foo->bar->foo() - // $foo->bar->foo->bar() - // $foo->bar($foo->bar) - // $foo->bar($foo->bar()) - // $foo->bar($foo->bar($blah,$foo,44,"foo",$foo[0].bar)) - $this->_obj_ext_regexp = '\->(?:\$?' . $this->_dvar_guts_regexp . ')'; - $this->_obj_restricted_param_regexp = '(?:' - . '(?:' . $this->_var_regexp . '|' . $this->_num_const_regexp . ')(?:' . $this->_obj_ext_regexp . '(?:\((?:(?:' . $this->_var_regexp . '|' . $this->_num_const_regexp . ')' - . '(?:\s*,\s*(?:' . $this->_var_regexp . '|' . $this->_num_const_regexp . '))*)?\))?)*)'; - $this->_obj_single_param_regexp = '(?:\w+|' . $this->_obj_restricted_param_regexp . '(?:\s*,\s*(?:(?:\w+|' - . $this->_var_regexp . $this->_obj_restricted_param_regexp . ')))*)'; - $this->_obj_params_regexp = '\((?:' . $this->_obj_single_param_regexp - . '(?:\s*,\s*' . $this->_obj_single_param_regexp . ')*)?\)'; - $this->_obj_start_regexp = '(?:' . $this->_dvar_regexp . '(?:' . $this->_obj_ext_regexp . ')+)'; - $this->_obj_call_regexp = '(?:' . $this->_obj_start_regexp . '(?:' . $this->_obj_params_regexp . ')?(?:' . $this->_dvar_math_regexp . '(?:' . $this->_num_const_regexp . '|' . $this->_dvar_math_var_regexp . ')*)?)'; - - // matches valid modifier syntax: - // |foo - // |@foo - // |foo:"bar" - // |foo:$bar - // |foo:"bar":$foobar - // |foo|bar - // |foo:$foo->bar - $this->_mod_regexp = '(?:\|@?\w+(?::(?:\w+|' . $this->_num_const_regexp . '|' - . $this->_obj_call_regexp . '|' . $this->_avar_regexp . '|' . $this->_qstr_regexp .'))*)'; - - // matches valid function name: - // foo123 - // _foo_bar - $this->_func_regexp = '[a-zA-Z_]\w*'; - - // matches valid registered object: - // foo->bar - $this->_reg_obj_regexp = '[a-zA-Z_]\w*->[a-zA-Z_]\w*'; - - // matches valid parameter values: - // true - // $foo - // $foo|bar - // #foo# - // #foo#|bar - // "text" - // "text"|bar - // $foo->bar - $this->_param_regexp = '(?:\s*(?:' . $this->_obj_call_regexp . '|' - . $this->_var_regexp . '|' . $this->_num_const_regexp . '|\w+)(?>' . $this->_mod_regexp . '*)\s*)'; - - // matches valid parenthesised function parameters: - // - // "text" - // $foo, $bar, "text" - // $foo|bar, "foo"|bar, $foo->bar($foo)|bar - $this->_parenth_param_regexp = '(?:\((?:\w+|' - . $this->_param_regexp . '(?:\s*,\s*(?:(?:\w+|' - . $this->_param_regexp . ')))*)?\))'; - - // matches valid function call: - // foo() - // foo_bar($foo) - // _foo_bar($foo,"bar") - // foo123($foo,$foo->bar(),"foo") - $this->_func_call_regexp = '(?:' . $this->_func_regexp . '\s*(?:' - . $this->_parenth_param_regexp . '))'; - } - - /** - * compile a resource - * - * sets $compiled_content to the compiled source - * @param string $resource_name - * @param string $source_content - * @param string $compiled_content - * @return true - */ - function _compile_file($resource_name, $source_content, &$compiled_content) - { - - if ($this->security) { - // do not allow php syntax to be executed unless specified - if ($this->php_handling == SMARTY_PHP_ALLOW && - !$this->security_settings['PHP_HANDLING']) { - $this->php_handling = SMARTY_PHP_PASSTHRU; - } - } - - $this->_load_filters(); - - $this->_current_file = $resource_name; - $this->_current_line_no = 1; - $ldq = preg_quote($this->left_delimiter, '~'); - $rdq = preg_quote($this->right_delimiter, '~'); - - // run template source through prefilter functions - if (count($this->_plugins['prefilter']) > 0) { - foreach ($this->_plugins['prefilter'] as $filter_name => $prefilter) { - if ($prefilter === false) continue; - if ($prefilter[3] || is_callable($prefilter[0])) { - $source_content = call_user_func_array($prefilter[0], - array($source_content, &$this)); - $this->_plugins['prefilter'][$filter_name][3] = true; - } else { - $this->_trigger_fatal_error("[plugin] prefilter '$filter_name' is not implemented"); - } - } - } - - /* fetch all special blocks */ - $search = "~{$ldq}\*(.*?)\*{$rdq}|{$ldq}\s*literal\s*{$rdq}(.*?){$ldq}\s*/literal\s*{$rdq}|{$ldq}\s*php\s*{$rdq}(.*?){$ldq}\s*/php\s*{$rdq}~s"; - - preg_match_all($search, $source_content, $match, PREG_SET_ORDER); - $this->_folded_blocks = $match; - reset($this->_folded_blocks); - - /* replace special blocks by "{php}" */ - $source_content = preg_replace($search.'e', "'" - . $this->_quote_replace($this->left_delimiter) . 'php' - . "' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'" - . $this->_quote_replace($this->right_delimiter) - . "'" - , $source_content); - - /* Gather all template tags. */ - preg_match_all("~{$ldq}\s*(.*?)\s*{$rdq}~s", $source_content, $_match); - $template_tags = $_match[1]; - /* Split content by template tags to obtain non-template content. */ - $text_blocks = preg_split("~{$ldq}.*?{$rdq}~s", $source_content); - - /* loop through text blocks */ - for ($curr_tb = 0, $for_max = count($text_blocks); $curr_tb < $for_max; $curr_tb++) { - /* match anything resembling php tags */ - if (preg_match_all('~(<\?(?:\w+|=)?|\?>|language\s*=\s*[\"\']?\s*php\s*[\"\']?)~is', $text_blocks[$curr_tb], $sp_match)) { - /* replace tags with placeholders to prevent recursive replacements */ - $sp_match[1] = array_unique($sp_match[1]); - usort($sp_match[1], '_smarty_sort_length'); - for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++) { - $text_blocks[$curr_tb] = str_replace($sp_match[1][$curr_sp],'%%%SMARTYSP'.$curr_sp.'%%%',$text_blocks[$curr_tb]); - } - /* process each one */ - for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++) { - if ($this->php_handling == SMARTY_PHP_PASSTHRU) { - /* echo php contents */ - $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', ''."\n", $text_blocks[$curr_tb]); - } else if ($this->php_handling == SMARTY_PHP_QUOTE) { - /* quote php tags */ - $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', htmlspecialchars($sp_match[1][$curr_sp]), $text_blocks[$curr_tb]); - } else if ($this->php_handling == SMARTY_PHP_REMOVE) { - /* remove php tags */ - $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', '', $text_blocks[$curr_tb]); - } else { - /* SMARTY_PHP_ALLOW, but echo non php starting tags */ - $sp_match[1][$curr_sp] = preg_replace('~(<\?(?!php|=|$))~i', ''."\n", $sp_match[1][$curr_sp]); - $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', $sp_match[1][$curr_sp], $text_blocks[$curr_tb]); - } - } - } - } - - /* Compile the template tags into PHP code. */ - $compiled_tags = array(); - for ($i = 0, $for_max = count($template_tags); $i < $for_max; $i++) { - $this->_current_line_no += substr_count($text_blocks[$i], "\n"); - $compiled_tags[] = $this->_compile_tag($template_tags[$i]); - $this->_current_line_no += substr_count($template_tags[$i], "\n"); - } - if (count($this->_tag_stack)>0) { - list($_open_tag, $_line_no) = end($this->_tag_stack); - $this->_syntax_error("unclosed tag \{$_open_tag} (opened line $_line_no).", E_USER_ERROR, __FILE__, __LINE__); - return; - } - - /* Reformat $text_blocks between 'strip' and '/strip' tags, - removing spaces, tabs and newlines. */ - $strip = false; - for ($i = 0, $for_max = count($compiled_tags); $i < $for_max; $i++) { - if ($compiled_tags[$i] == '{strip}') { - $compiled_tags[$i] = ''; - $strip = true; - /* remove leading whitespaces */ - $text_blocks[$i + 1] = ltrim($text_blocks[$i + 1]); - } - if ($strip) { - /* strip all $text_blocks before the next '/strip' */ - for ($j = $i + 1; $j < $for_max; $j++) { - /* remove leading and trailing whitespaces of each line */ - $text_blocks[$j] = preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $text_blocks[$j]); - if ($compiled_tags[$j] == '{/strip}') { - /* remove trailing whitespaces from the last text_block */ - $text_blocks[$j] = rtrim($text_blocks[$j]); - } - $text_blocks[$j] = ""\'", "\\"=>"\\\\")) . "'; ?>"; - if ($compiled_tags[$j] == '{/strip}') { - $compiled_tags[$j] = "\n"; /* slurped by php, but necessary - if a newline is following the closing strip-tag */ - $strip = false; - $i = $j; - break; - } - } - } - } - $compiled_content = ''; - - $tag_guard = '%%%SMARTYOTG' . md5(uniqid(rand(), true)) . '%%%'; - - /* Interleave the compiled contents and text blocks to get the final result. */ - for ($i = 0, $for_max = count($compiled_tags); $i < $for_max; $i++) { - if ($compiled_tags[$i] == '') { - // tag result empty, remove first newline from following text block - $text_blocks[$i+1] = preg_replace('~^(\r\n|\r|\n)~', '', $text_blocks[$i+1]); - } - // replace legit PHP tags with placeholder - $text_blocks[$i] = str_replace('\n", $compiled_content); - $compiled_content = preg_replace("~(?\n", $compiled_content); - - // recover legit tags - $compiled_content = str_replace($tag_guard, '_cache_serial)) { - $compiled_content = "_cache_serials['".$this->_cache_include."'] = '".$this->_cache_serial."'; ?>" . $compiled_content; - } - - // run compiled template through postfilter functions - if (count($this->_plugins['postfilter']) > 0) { - foreach ($this->_plugins['postfilter'] as $filter_name => $postfilter) { - if ($postfilter === false) continue; - if ($postfilter[3] || is_callable($postfilter[0])) { - $compiled_content = call_user_func_array($postfilter[0], - array($compiled_content, &$this)); - $this->_plugins['postfilter'][$filter_name][3] = true; - } else { - $this->_trigger_fatal_error("Smarty plugin error: postfilter '$filter_name' is not implemented"); - } - } - } - - // put header at the top of the compiled template - $template_header = "_version.", created on ".strftime("%Y-%m-%d %H:%M:%S")."\n"; - $template_header .= " compiled from ".strtr(urlencode($resource_name), array('%2F'=>'/', '%3A'=>':'))." */ ?>\n"; - - /* Emit code to load needed plugins. */ - $this->_plugins_code = ''; - if (count($this->_plugin_info)) { - $_plugins_params = "array('plugins' => array("; - foreach ($this->_plugin_info as $plugin_type => $plugins) { - foreach ($plugins as $plugin_name => $plugin_info) { - $_plugins_params .= "array('$plugin_type', '$plugin_name', '" . strtr($plugin_info[0], array("'" => "\\'", "\\" => "\\\\")) . "', $plugin_info[1], "; - $_plugins_params .= $plugin_info[2] ? 'true),' : 'false),'; - } - } - $_plugins_params .= '))'; - $plugins_code = "\n"; - $template_header .= $plugins_code; - $this->_plugin_info = array(); - $this->_plugins_code = $plugins_code; - } - - if ($this->_init_smarty_vars) { - $template_header .= "\n"; - $this->_init_smarty_vars = false; - } - - $compiled_content = $template_header . $compiled_content; - return true; - } - - /** - * Compile a template tag - * - * @param string $template_tag - * @return string - */ - function _compile_tag($template_tag) - { - /* Matched comment. */ - if (substr($template_tag, 0, 1) == '*' && substr($template_tag, -1) == '*') - return ''; - - /* Split tag into two three parts: command, command modifiers and the arguments. */ - if(! preg_match('~^(?:(' . $this->_num_const_regexp . '|' . $this->_obj_call_regexp . '|' . $this->_var_regexp - . '|\/?' . $this->_reg_obj_regexp . '|\/?' . $this->_func_regexp . ')(' . $this->_mod_regexp . '*)) - (?:\s+(.*))?$ - ~xs', $template_tag, $match)) { - $this->_syntax_error("unrecognized tag: $template_tag", E_USER_ERROR, __FILE__, __LINE__); - } - - $tag_command = $match[1]; - $tag_modifier = isset($match[2]) ? $match[2] : null; - $tag_args = isset($match[3]) ? $match[3] : null; - - if (preg_match('~^' . $this->_num_const_regexp . '|' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '$~', $tag_command)) { - /* tag name is a variable or object */ - $_return = $this->_parse_var_props($tag_command . $tag_modifier); - return "" . $this->_additional_newline; - } - - /* If the tag name is a registered object, we process it. */ - if (preg_match('~^\/?' . $this->_reg_obj_regexp . '$~', $tag_command)) { - return $this->_compile_registered_object_tag($tag_command, $this->_parse_attrs($tag_args), $tag_modifier); - } - - switch ($tag_command) { - case 'include': - return $this->_compile_include_tag($tag_args); - - case 'include_php': - return $this->_compile_include_php_tag($tag_args); - - case 'if': - $this->_push_tag('if'); - return $this->_compile_if_tag($tag_args); - - case 'else': - list($_open_tag) = end($this->_tag_stack); - if ($_open_tag != 'if' && $_open_tag != 'elseif') - $this->_syntax_error('unexpected {else}', E_USER_ERROR, __FILE__, __LINE__); - else - $this->_push_tag('else'); - return ''; - - case 'elseif': - list($_open_tag) = end($this->_tag_stack); - if ($_open_tag != 'if' && $_open_tag != 'elseif') - $this->_syntax_error('unexpected {elseif}', E_USER_ERROR, __FILE__, __LINE__); - if ($_open_tag == 'if') - $this->_push_tag('elseif'); - return $this->_compile_if_tag($tag_args, true); - - case '/if': - $this->_pop_tag('if'); - return ''; - - case 'capture': - return $this->_compile_capture_tag(true, $tag_args); - - case '/capture': - return $this->_compile_capture_tag(false); - - case 'ldelim': - return $this->left_delimiter; - - case 'rdelim': - return $this->right_delimiter; - - case 'section': - $this->_push_tag('section'); - return $this->_compile_section_start($tag_args); - - case 'sectionelse': - $this->_push_tag('sectionelse'); - return ""; - break; - - case '/section': - $_open_tag = $this->_pop_tag('section'); - if ($_open_tag == 'sectionelse') - return ""; - else - return ""; - - case 'foreach': - $this->_push_tag('foreach'); - return $this->_compile_foreach_start($tag_args); - break; - - case 'foreachelse': - $this->_push_tag('foreachelse'); - return ""; - - case '/foreach': - $_open_tag = $this->_pop_tag('foreach'); - if ($_open_tag == 'foreachelse') - return ""; - else - return ""; - break; - - case 'strip': - case '/strip': - if (substr($tag_command, 0, 1)=='/') { - $this->_pop_tag('strip'); - if (--$this->_strip_depth==0) { /* outermost closing {/strip} */ - $this->_additional_newline = "\n"; - return '{' . $tag_command . '}'; - } - } else { - $this->_push_tag('strip'); - if ($this->_strip_depth++==0) { /* outermost opening {strip} */ - $this->_additional_newline = ""; - return '{' . $tag_command . '}'; - } - } - return ''; - - case 'php': - /* handle folded tags replaced by {php} */ - list(, $block) = each($this->_folded_blocks); - $this->_current_line_no += substr_count($block[0], "\n"); - /* the number of matched elements in the regexp in _compile_file() - determins the type of folded tag that was found */ - switch (count($block)) { - case 2: /* comment */ - return ''; - - case 3: /* literal */ - return ""\'", "\\"=>"\\\\")) . "'; ?>" . $this->_additional_newline; - - case 4: /* php */ - if ($this->security && !$this->security_settings['PHP_TAGS']) { - $this->_syntax_error("(secure mode) php tags not permitted", E_USER_WARNING, __FILE__, __LINE__); - return; - } - return ''; - } - break; - - case 'insert': - return $this->_compile_insert_tag($tag_args); - - default: - if ($this->_compile_compiler_tag($tag_command, $tag_args, $output)) { - return $output; - } else if ($this->_compile_block_tag($tag_command, $tag_args, $tag_modifier, $output)) { - return $output; - } else if ($this->_compile_custom_tag($tag_command, $tag_args, $tag_modifier, $output)) { - return $output; - } else { - $this->_syntax_error("unrecognized tag '$tag_command'", E_USER_ERROR, __FILE__, __LINE__); - } - - } - } - - - /** - * compile the custom compiler tag - * - * sets $output to the compiled custom compiler tag - * @param string $tag_command - * @param string $tag_args - * @param string $output - * @return boolean - */ - function _compile_compiler_tag($tag_command, $tag_args, &$output) - { - $found = false; - $have_function = true; - - /* - * First we check if the compiler function has already been registered - * or loaded from a plugin file. - */ - if (isset($this->_plugins['compiler'][$tag_command])) { - $found = true; - $plugin_func = $this->_plugins['compiler'][$tag_command][0]; - if (!is_callable($plugin_func)) { - $message = "compiler function '$tag_command' is not implemented"; - $have_function = false; - } - } - /* - * Otherwise we need to load plugin file and look for the function - * inside it. - */ - else if ($plugin_file = $this->_get_plugin_filepath('compiler', $tag_command)) { - $found = true; - - include_once $plugin_file; - - $plugin_func = 'smarty_compiler_' . $tag_command; - if (!is_callable($plugin_func)) { - $message = "plugin function $plugin_func() not found in $plugin_file\n"; - $have_function = false; - } else { - $this->_plugins['compiler'][$tag_command] = array($plugin_func, null, null, null, true); - } - } - - /* - * True return value means that we either found a plugin or a - * dynamically registered function. False means that we didn't and the - * compiler should now emit code to load custom function plugin for this - * tag. - */ - if ($found) { - if ($have_function) { - $output = call_user_func_array($plugin_func, array($tag_args, &$this)); - if($output != '') { - $output = '_push_cacheable_state('compiler', $tag_command) - . $output - . $this->_pop_cacheable_state('compiler', $tag_command) . ' ?>'; - } - } else { - $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__); - } - return true; - } else { - return false; - } - } - - - /** - * compile block function tag - * - * sets $output to compiled block function tag - * @param string $tag_command - * @param string $tag_args - * @param string $tag_modifier - * @param string $output - * @return boolean - */ - function _compile_block_tag($tag_command, $tag_args, $tag_modifier, &$output) - { - if (substr($tag_command, 0, 1) == '/') { - $start_tag = false; - $tag_command = substr($tag_command, 1); - } else - $start_tag = true; - - $found = false; - $have_function = true; - - /* - * First we check if the block function has already been registered - * or loaded from a plugin file. - */ - if (isset($this->_plugins['block'][$tag_command])) { - $found = true; - $plugin_func = $this->_plugins['block'][$tag_command][0]; - if (!is_callable($plugin_func)) { - $message = "block function '$tag_command' is not implemented"; - $have_function = false; - } - } - /* - * Otherwise we need to load plugin file and look for the function - * inside it. - */ - else if ($plugin_file = $this->_get_plugin_filepath('block', $tag_command)) { - $found = true; - - include_once $plugin_file; - - $plugin_func = 'smarty_block_' . $tag_command; - if (!function_exists($plugin_func)) { - $message = "plugin function $plugin_func() not found in $plugin_file\n"; - $have_function = false; - } else { - $this->_plugins['block'][$tag_command] = array($plugin_func, null, null, null, true); - - } - } - - if (!$found) { - return false; - } else if (!$have_function) { - $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__); - return true; - } - - /* - * Even though we've located the plugin function, compilation - * happens only once, so the plugin will still need to be loaded - * at runtime for future requests. - */ - $this->_add_plugin('block', $tag_command); - - if ($start_tag) - $this->_push_tag($tag_command); - else - $this->_pop_tag($tag_command); - - if ($start_tag) { - $output = '_push_cacheable_state('block', $tag_command); - $attrs = $this->_parse_attrs($tag_args); - $_cache_attrs=''; - $arg_list = $this->_compile_arg_list('block', $tag_command, $attrs, $_cache_attrs); - $output .= "$_cache_attrs\$this->_tag_stack[] = array('$tag_command', array(".implode(',', $arg_list).')); '; - $output .= '$_block_repeat=true;' . $this->_compile_plugin_call('block', $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][1], null, $this, $_block_repeat);'; - $output .= 'while ($_block_repeat) { ob_start(); ?>'; - } else { - $output = '_compile_plugin_call('block', $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][1], $_block_content, $this, $_block_repeat)'; - if ($tag_modifier != '') { - $this->_parse_modifiers($_out_tag_text, $tag_modifier); - } - $output .= '$_block_repeat=false;echo ' . $_out_tag_text . '; } '; - $output .= " array_pop(\$this->_tag_stack); " . $this->_pop_cacheable_state('block', $tag_command) . '?>'; - } - - return true; - } - - - /** - * compile custom function tag - * - * @param string $tag_command - * @param string $tag_args - * @param string $tag_modifier - * @return string - */ - function _compile_custom_tag($tag_command, $tag_args, $tag_modifier, &$output) - { - $found = false; - $have_function = true; - - /* - * First we check if the custom function has already been registered - * or loaded from a plugin file. - */ - if (isset($this->_plugins['function'][$tag_command])) { - $found = true; - $plugin_func = $this->_plugins['function'][$tag_command][0]; - if (!is_callable($plugin_func)) { - $message = "custom function '$tag_command' is not implemented"; - $have_function = false; - } - } - /* - * Otherwise we need to load plugin file and look for the function - * inside it. - */ - else if ($plugin_file = $this->_get_plugin_filepath('function', $tag_command)) { - $found = true; - - include_once $plugin_file; - - $plugin_func = 'smarty_function_' . $tag_command; - if (!function_exists($plugin_func)) { - $message = "plugin function $plugin_func() not found in $plugin_file\n"; - $have_function = false; - } else { - $this->_plugins['function'][$tag_command] = array($plugin_func, null, null, null, true); - - } - } - - if (!$found) { - return false; - } else if (!$have_function) { - $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__); - return true; - } - - /* declare plugin to be loaded on display of the template that - we compile right now */ - $this->_add_plugin('function', $tag_command); - - $_cacheable_state = $this->_push_cacheable_state('function', $tag_command); - $attrs = $this->_parse_attrs($tag_args); - $_cache_attrs = ''; - $arg_list = $this->_compile_arg_list('function', $tag_command, $attrs, $_cache_attrs); - - $output = $this->_compile_plugin_call('function', $tag_command).'(array('.implode(',', $arg_list)."), \$this)"; - if($tag_modifier != '') { - $this->_parse_modifiers($output, $tag_modifier); - } - - if($output != '') { - $output = '_pop_cacheable_state('function', $tag_command) . "?>" . $this->_additional_newline; - } - - return true; - } - - /** - * compile a registered object tag - * - * @param string $tag_command - * @param array $attrs - * @param string $tag_modifier - * @return string - */ - function _compile_registered_object_tag($tag_command, $attrs, $tag_modifier) - { - if (substr($tag_command, 0, 1) == '/') { - $start_tag = false; - $tag_command = substr($tag_command, 1); - } else { - $start_tag = true; - } - - list($object, $obj_comp) = explode('->', $tag_command); - - $arg_list = array(); - if(count($attrs)) { - $_assign_var = false; - foreach ($attrs as $arg_name => $arg_value) { - if($arg_name == 'assign') { - $_assign_var = $arg_value; - unset($attrs['assign']); - continue; - } - if (is_bool($arg_value)) - $arg_value = $arg_value ? 'true' : 'false'; - $arg_list[] = "'$arg_name' => $arg_value"; - } - } - - if($this->_reg_objects[$object][2]) { - // smarty object argument format - $args = "array(".implode(',', (array)$arg_list)."), \$this"; - } else { - // traditional argument format - $args = implode(',', array_values($attrs)); - if (empty($args)) { - $args = ''; - } - } - - $prefix = ''; - $postfix = ''; - $newline = ''; - if(!is_object($this->_reg_objects[$object][0])) { - $this->_trigger_fatal_error("registered '$object' is not an object" , $this->_current_file, $this->_current_line_no, __FILE__, __LINE__); - } elseif(!empty($this->_reg_objects[$object][1]) && !in_array($obj_comp, $this->_reg_objects[$object][1])) { - $this->_trigger_fatal_error("'$obj_comp' is not a registered component of object '$object'", $this->_current_file, $this->_current_line_no, __FILE__, __LINE__); - } elseif(method_exists($this->_reg_objects[$object][0], $obj_comp)) { - // method - if(in_array($obj_comp, $this->_reg_objects[$object][3])) { - // block method - if ($start_tag) { - $prefix = "\$this->_tag_stack[] = array('$obj_comp', $args); "; - $prefix .= "\$_block_repeat=true; \$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], null, \$this, \$_block_repeat); "; - $prefix .= "while (\$_block_repeat) { ob_start();"; - $return = null; - $postfix = ''; - } else { - $prefix = "\$_obj_block_content = ob_get_contents(); ob_end_clean(); \$_block_repeat=false;"; - $return = "\$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], \$_obj_block_content, \$this, \$_block_repeat)"; - $postfix = "} array_pop(\$this->_tag_stack);"; - } - } else { - // non-block method - $return = "\$this->_reg_objects['$object'][0]->$obj_comp($args)"; - } - } else { - // property - $return = "\$this->_reg_objects['$object'][0]->$obj_comp"; - } - - if($return != null) { - if($tag_modifier != '') { - $this->_parse_modifiers($return, $tag_modifier); - } - - if(!empty($_assign_var)) { - $output = "\$this->assign('" . $this->_dequote($_assign_var) ."', $return);"; - } else { - $output = 'echo ' . $return . ';'; - $newline = $this->_additional_newline; - } - } else { - $output = ''; - } - - return '" . $newline; - } - - /** - * Compile {insert ...} tag - * - * @param string $tag_args - * @return string - */ - function _compile_insert_tag($tag_args) - { - $attrs = $this->_parse_attrs($tag_args); - $name = $this->_dequote($attrs['name']); - - if (empty($name)) { - return $this->_syntax_error("missing insert name", E_USER_ERROR, __FILE__, __LINE__); - } - - if (!preg_match('~^\w+$~', $name)) { - return $this->_syntax_error("'insert: 'name' must be an insert function name", E_USER_ERROR, __FILE__, __LINE__); - } - - if (!empty($attrs['script'])) { - $delayed_loading = true; - } else { - $delayed_loading = false; - } - - foreach ($attrs as $arg_name => $arg_value) { - if (is_bool($arg_value)) - $arg_value = $arg_value ? 'true' : 'false'; - $arg_list[] = "'$arg_name' => $arg_value"; - } - - $this->_add_plugin('insert', $name, $delayed_loading); - - $_params = "array('args' => array(".implode(', ', (array)$arg_list)."))"; - - return "" . $this->_additional_newline; - } - - /** - * Compile {include ...} tag - * - * @param string $tag_args - * @return string - */ - function _compile_include_tag($tag_args) - { - $attrs = $this->_parse_attrs($tag_args); - $arg_list = array(); - - if (empty($attrs['file'])) { - $this->_syntax_error("missing 'file' attribute in include tag", E_USER_ERROR, __FILE__, __LINE__); - } - - foreach ($attrs as $arg_name => $arg_value) { - if ($arg_name == 'file') { - $include_file = $arg_value; - continue; - } else if ($arg_name == 'assign') { - $assign_var = $arg_value; - continue; - } - if (is_bool($arg_value)) - $arg_value = $arg_value ? 'true' : 'false'; - $arg_list[] = "'$arg_name' => $arg_value"; - } - - $output = '_tpl_vars;\n"; - - - $_params = "array('smarty_include_tpl_file' => " . $include_file . ", 'smarty_include_vars' => array(".implode(',', (array)$arg_list)."))"; - $output .= "\$this->_smarty_include($_params);\n" . - "\$this->_tpl_vars = \$_smarty_tpl_vars;\n" . - "unset(\$_smarty_tpl_vars);\n"; - - if (isset($assign_var)) { - $output .= "\$this->assign(" . $assign_var . ", ob_get_contents()); ob_end_clean();\n"; - } - - $output .= ' ?>'; - - return $output; - - } - - /** - * Compile {include ...} tag - * - * @param string $tag_args - * @return string - */ - function _compile_include_php_tag($tag_args) - { - $attrs = $this->_parse_attrs($tag_args); - - if (empty($attrs['file'])) { - $this->_syntax_error("missing 'file' attribute in include_php tag", E_USER_ERROR, __FILE__, __LINE__); - } - - $assign_var = (empty($attrs['assign'])) ? '' : $this->_dequote($attrs['assign']); - $once_var = (empty($attrs['once']) || $attrs['once']=='false') ? 'false' : 'true'; - - $arg_list = array(); - foreach($attrs as $arg_name => $arg_value) { - if($arg_name != 'file' AND $arg_name != 'once' AND $arg_name != 'assign') { - if(is_bool($arg_value)) - $arg_value = $arg_value ? 'true' : 'false'; - $arg_list[] = "'$arg_name' => $arg_value"; - } - } - - $_params = "array('smarty_file' => " . $attrs['file'] . ", 'smarty_assign' => '$assign_var', 'smarty_once' => $once_var, 'smarty_include_vars' => array(".implode(',', $arg_list)."))"; - - return "" . $this->_additional_newline; - } - - - /** - * Compile {section ...} tag - * - * @param string $tag_args - * @return string - */ - function _compile_section_start($tag_args) - { - $attrs = $this->_parse_attrs($tag_args); - $arg_list = array(); - - $output = '_syntax_error("missing section name", E_USER_ERROR, __FILE__, __LINE__); - } - - $output .= "unset(\$this->_sections[$section_name]);\n"; - $section_props = "\$this->_sections[$section_name]"; - - foreach ($attrs as $attr_name => $attr_value) { - switch ($attr_name) { - case 'loop': - $output .= "{$section_props}['loop'] = is_array(\$_loop=$attr_value) ? count(\$_loop) : max(0, (int)\$_loop); unset(\$_loop);\n"; - break; - - case 'show': - if (is_bool($attr_value)) - $show_attr_value = $attr_value ? 'true' : 'false'; - else - $show_attr_value = "(bool)$attr_value"; - $output .= "{$section_props}['show'] = $show_attr_value;\n"; - break; - - case 'name': - $output .= "{$section_props}['$attr_name'] = $attr_value;\n"; - break; - - case 'max': - case 'start': - $output .= "{$section_props}['$attr_name'] = (int)$attr_value;\n"; - break; - - case 'step': - $output .= "{$section_props}['$attr_name'] = ((int)$attr_value) == 0 ? 1 : (int)$attr_value;\n"; - break; - - default: - $this->_syntax_error("unknown section attribute - '$attr_name'", E_USER_ERROR, __FILE__, __LINE__); - break; - } - } - - if (!isset($attrs['show'])) - $output .= "{$section_props}['show'] = true;\n"; - - if (!isset($attrs['loop'])) - $output .= "{$section_props}['loop'] = 1;\n"; - - if (!isset($attrs['max'])) - $output .= "{$section_props}['max'] = {$section_props}['loop'];\n"; - else - $output .= "if ({$section_props}['max'] < 0)\n" . - " {$section_props}['max'] = {$section_props}['loop'];\n"; - - if (!isset($attrs['step'])) - $output .= "{$section_props}['step'] = 1;\n"; - - if (!isset($attrs['start'])) - $output .= "{$section_props}['start'] = {$section_props}['step'] > 0 ? 0 : {$section_props}['loop']-1;\n"; - else { - $output .= "if ({$section_props}['start'] < 0)\n" . - " {$section_props}['start'] = max({$section_props}['step'] > 0 ? 0 : -1, {$section_props}['loop'] + {$section_props}['start']);\n" . - "else\n" . - " {$section_props}['start'] = min({$section_props}['start'], {$section_props}['step'] > 0 ? {$section_props}['loop'] : {$section_props}['loop']-1);\n"; - } - - $output .= "if ({$section_props}['show']) {\n"; - if (!isset($attrs['start']) && !isset($attrs['step']) && !isset($attrs['max'])) { - $output .= " {$section_props}['total'] = {$section_props}['loop'];\n"; - } else { - $output .= " {$section_props}['total'] = min(ceil(({$section_props}['step'] > 0 ? {$section_props}['loop'] - {$section_props}['start'] : {$section_props}['start']+1)/abs({$section_props}['step'])), {$section_props}['max']);\n"; - } - $output .= " if ({$section_props}['total'] == 0)\n" . - " {$section_props}['show'] = false;\n" . - "} else\n" . - " {$section_props}['total'] = 0;\n"; - - $output .= "if ({$section_props}['show']):\n"; - $output .= " - for ({$section_props}['index'] = {$section_props}['start'], {$section_props}['iteration'] = 1; - {$section_props}['iteration'] <= {$section_props}['total']; - {$section_props}['index'] += {$section_props}['step'], {$section_props}['iteration']++):\n"; - $output .= "{$section_props}['rownum'] = {$section_props}['iteration'];\n"; - $output .= "{$section_props}['index_prev'] = {$section_props}['index'] - {$section_props}['step'];\n"; - $output .= "{$section_props}['index_next'] = {$section_props}['index'] + {$section_props}['step'];\n"; - $output .= "{$section_props}['first'] = ({$section_props}['iteration'] == 1);\n"; - $output .= "{$section_props}['last'] = ({$section_props}['iteration'] == {$section_props}['total']);\n"; - - $output .= "?>"; - - return $output; - } - - - /** - * Compile {foreach ...} tag. - * - * @param string $tag_args - * @return string - */ - function _compile_foreach_start($tag_args) - { - $attrs = $this->_parse_attrs($tag_args); - $arg_list = array(); - - if (empty($attrs['from'])) { - return $this->_syntax_error("foreach: missing 'from' attribute", E_USER_ERROR, __FILE__, __LINE__); - } - $from = $attrs['from']; - - if (empty($attrs['item'])) { - return $this->_syntax_error("foreach: missing 'item' attribute", E_USER_ERROR, __FILE__, __LINE__); - } - $item = $this->_dequote($attrs['item']); - if (!preg_match('~^\w+$~', $item)) { - return $this->_syntax_error("foreach: 'item' must be a variable name (literal string)", E_USER_ERROR, __FILE__, __LINE__); - } - - if (isset($attrs['key'])) { - $key = $this->_dequote($attrs['key']); - if (!preg_match('~^\w+$~', $key)) { - return $this->_syntax_error("foreach: 'key' must to be a variable name (literal string)", E_USER_ERROR, __FILE__, __LINE__); - } - $key_part = "\$this->_tpl_vars['$key'] => "; - } else { - $key = null; - $key_part = ''; - } - - if (isset($attrs['name'])) { - $name = $attrs['name']; - } else { - $name = null; - } - - $output = '_foreach[$name]"; - $output .= "{$foreach_props} = array('total' => count(\$_from), 'iteration' => 0);\n"; - $output .= "if ({$foreach_props}['total'] > 0):\n"; - $output .= " foreach (\$_from as $key_part\$this->_tpl_vars['$item']):\n"; - $output .= " {$foreach_props}['iteration']++;\n"; - } else { - $output .= "if (count(\$_from)):\n"; - $output .= " foreach (\$_from as $key_part\$this->_tpl_vars['$item']):\n"; - } - $output .= '?>'; - - return $output; - } - - - /** - * Compile {capture} .. {/capture} tags - * - * @param boolean $start true if this is the {capture} tag - * @param string $tag_args - * @return string - */ - - function _compile_capture_tag($start, $tag_args = '') - { - $attrs = $this->_parse_attrs($tag_args); - - if ($start) { - $buffer = isset($attrs['name']) ? $attrs['name'] : "'default'"; - $assign = isset($attrs['assign']) ? $attrs['assign'] : null; - $append = isset($attrs['append']) ? $attrs['append'] : null; - - $output = ""; - $this->_capture_stack[] = array($buffer, $assign, $append); - } else { - list($buffer, $assign, $append) = array_pop($this->_capture_stack); - $output = "_smarty_vars['capture'][$buffer] = ob_get_contents(); "; - if (isset($assign)) { - $output .= " \$this->assign($assign, ob_get_contents());"; - } - if (isset($append)) { - $output .= " \$this->append($append, ob_get_contents());"; - } - $output .= "ob_end_clean(); ?>"; - } - - return $output; - } - - /** - * Compile {if ...} tag - * - * @param string $tag_args - * @param boolean $elseif if true, uses elseif instead of if - * @return string - */ - function _compile_if_tag($tag_args, $elseif = false) - { - - /* Tokenize args for 'if' tag. */ - preg_match_all('~(?> - ' . $this->_obj_call_regexp . '(?:' . $this->_mod_regexp . '*)? | # valid object call - ' . $this->_var_regexp . '(?:' . $this->_mod_regexp . '*)? | # var or quoted string - \-?0[xX][0-9a-fA-F]+|\-?\d+(?:\.\d+)?|\.\d+|!==|===|==|!=|<>|<<|>>|<=|>=|\&\&|\|\||\(|\)|,|\!|\^|=|\&|\~|<|>|\||\%|\+|\-|\/|\*|\@ | # valid non-word token - \b\w+\b | # valid word token - \S+ # anything else - )~x', $tag_args, $match); - - $tokens = $match[0]; - - if(empty($tokens)) { - $_error_msg = $elseif ? "'elseif'" : "'if'"; - $_error_msg .= ' statement requires arguments'; - $this->_syntax_error($_error_msg, E_USER_ERROR, __FILE__, __LINE__); - } - - - // make sure we have balanced parenthesis - $token_count = array_count_values($tokens); - if(isset($token_count['(']) && $token_count['('] != $token_count[')']) { - $this->_syntax_error("unbalanced parenthesis in if statement", E_USER_ERROR, __FILE__, __LINE__); - } - - $is_arg_stack = array(); - - for ($i = 0; $i < count($tokens); $i++) { - - $token = &$tokens[$i]; - - switch (strtolower($token)) { - case '!': - case '%': - case '!==': - case '==': - case '===': - case '>': - case '<': - case '!=': - case '<>': - case '<<': - case '>>': - case '<=': - case '>=': - case '&&': - case '||': - case '|': - case '^': - case '&': - case '~': - case ')': - case ',': - case '+': - case '-': - case '*': - case '/': - case '@': - break; - - case 'eq': - $token = '=='; - break; - - case 'ne': - case 'neq': - $token = '!='; - break; - - case 'lt': - $token = '<'; - break; - - case 'le': - case 'lte': - $token = '<='; - break; - - case 'gt': - $token = '>'; - break; - - case 'ge': - case 'gte': - $token = '>='; - break; - - case 'and': - $token = '&&'; - break; - - case 'or': - $token = '||'; - break; - - case 'not': - $token = '!'; - break; - - case 'mod': - $token = '%'; - break; - - case '(': - array_push($is_arg_stack, $i); - break; - - case 'is': - /* If last token was a ')', we operate on the parenthesized - expression. The start of the expression is on the stack. - Otherwise, we operate on the last encountered token. */ - if ($tokens[$i-1] == ')') { - $is_arg_start = array_pop($is_arg_stack); - if ($is_arg_start != 0) { - if (preg_match('~^' . $this->_func_regexp . '$~', $tokens[$is_arg_start-1])) { - $is_arg_start--; - } - } - } else - $is_arg_start = $i-1; - /* Construct the argument for 'is' expression, so it knows - what to operate on. */ - $is_arg = implode(' ', array_slice($tokens, $is_arg_start, $i - $is_arg_start)); - - /* Pass all tokens from next one until the end to the - 'is' expression parsing function. The function will - return modified tokens, where the first one is the result - of the 'is' expression and the rest are the tokens it - didn't touch. */ - $new_tokens = $this->_parse_is_expr($is_arg, array_slice($tokens, $i+1)); - - /* Replace the old tokens with the new ones. */ - array_splice($tokens, $is_arg_start, count($tokens), $new_tokens); - - /* Adjust argument start so that it won't change from the - current position for the next iteration. */ - $i = $is_arg_start; - break; - - default: - if(preg_match('~^' . $this->_func_regexp . '$~', $token) ) { - // function call - if($this->security && - !in_array($token, $this->security_settings['IF_FUNCS'])) { - $this->_syntax_error("(secure mode) '$token' not allowed in if statement", E_USER_ERROR, __FILE__, __LINE__); - } - } elseif(preg_match('~^' . $this->_var_regexp . '$~', $token) && (strpos('+-*/^%&|', substr($token, -1)) === false) && isset($tokens[$i+1]) && $tokens[$i+1] == '(') { - // variable function call - $this->_syntax_error("variable function call '$token' not allowed in if statement", E_USER_ERROR, __FILE__, __LINE__); - } elseif(preg_match('~^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' . $this->_mod_regexp . '*)$~', $token)) { - // object or variable - $token = $this->_parse_var_props($token); - } elseif(is_numeric($token)) { - // number, skip it - } else { - $this->_syntax_error("unidentified token '$token'", E_USER_ERROR, __FILE__, __LINE__); - } - break; - } - } - - if ($elseif) - return ''; - else - return ''; - } - - - function _compile_arg_list($type, $name, $attrs, &$cache_code) { - $arg_list = array(); - - if (isset($type) && isset($name) - && isset($this->_plugins[$type]) - && isset($this->_plugins[$type][$name]) - && empty($this->_plugins[$type][$name][4]) - && is_array($this->_plugins[$type][$name][5]) - ) { - /* we have a list of parameters that should be cached */ - $_cache_attrs = $this->_plugins[$type][$name][5]; - $_count = $this->_cache_attrs_count++; - $cache_code = "\$_cache_attrs =& \$this->_smarty_cache_attrs('$this->_cache_serial','$_count');"; - - } else { - /* no parameters are cached */ - $_cache_attrs = null; - } - - foreach ($attrs as $arg_name => $arg_value) { - if (is_bool($arg_value)) - $arg_value = $arg_value ? 'true' : 'false'; - if (is_null($arg_value)) - $arg_value = 'null'; - if ($_cache_attrs && in_array($arg_name, $_cache_attrs)) { - $arg_list[] = "'$arg_name' => (\$this->_cache_including) ? \$_cache_attrs['$arg_name'] : (\$_cache_attrs['$arg_name']=$arg_value)"; - } else { - $arg_list[] = "'$arg_name' => $arg_value"; - } - } - return $arg_list; - } - - /** - * Parse is expression - * - * @param string $is_arg - * @param array $tokens - * @return array - */ - function _parse_is_expr($is_arg, $tokens) - { - $expr_end = 0; - $negate_expr = false; - - if (($first_token = array_shift($tokens)) == 'not') { - $negate_expr = true; - $expr_type = array_shift($tokens); - } else - $expr_type = $first_token; - - switch ($expr_type) { - case 'even': - if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "!(1 & ($is_arg / " . $this->_parse_var_props($expr_arg) . "))"; - } else - $expr = "!(1 & $is_arg)"; - break; - - case 'odd': - if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "(1 & ($is_arg / " . $this->_parse_var_props($expr_arg) . "))"; - } else - $expr = "(1 & $is_arg)"; - break; - - case 'div': - if (@$tokens[$expr_end] == 'by') { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "!($is_arg % " . $this->_parse_var_props($expr_arg) . ")"; - } else { - $this->_syntax_error("expecting 'by' after 'div'", E_USER_ERROR, __FILE__, __LINE__); - } - break; - - default: - $this->_syntax_error("unknown 'is' expression - '$expr_type'", E_USER_ERROR, __FILE__, __LINE__); - break; - } - - if ($negate_expr) { - $expr = "!($expr)"; - } - - array_splice($tokens, 0, $expr_end, $expr); - - return $tokens; - } - - - /** - * Parse attribute string - * - * @param string $tag_args - * @return array - */ - function _parse_attrs($tag_args) - { - - /* Tokenize tag attributes. */ - preg_match_all('~(?:' . $this->_obj_call_regexp . '|' . $this->_qstr_regexp . ' | (?>[^"\'=\s]+) - )+ | - [=] - ~x', $tag_args, $match); - $tokens = $match[0]; - - $attrs = array(); - /* Parse state: - 0 - expecting attribute name - 1 - expecting '=' - 2 - expecting attribute value (not '=') */ - $state = 0; - - foreach ($tokens as $token) { - switch ($state) { - case 0: - /* If the token is a valid identifier, we set attribute name - and go to state 1. */ - if (preg_match('~^\w+$~', $token)) { - $attr_name = $token; - $state = 1; - } else - $this->_syntax_error("invalid attribute name: '$token'", E_USER_ERROR, __FILE__, __LINE__); - break; - - case 1: - /* If the token is '=', then we go to state 2. */ - if ($token == '=') { - $state = 2; - } else - $this->_syntax_error("expecting '=' after attribute name '$last_token'", E_USER_ERROR, __FILE__, __LINE__); - break; - - case 2: - /* If token is not '=', we set the attribute value and go to - state 0. */ - if ($token != '=') { - /* We booleanize the token if it's a non-quoted possible - boolean value. */ - if (preg_match('~^(on|yes|true)$~', $token)) { - $token = 'true'; - } else if (preg_match('~^(off|no|false)$~', $token)) { - $token = 'false'; - } else if ($token == 'null') { - $token = 'null'; - } else if (preg_match('~^' . $this->_num_const_regexp . '|0[xX][0-9a-fA-F]+$~', $token)) { - /* treat integer literally */ - } else if (!preg_match('~^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' . $this->_mod_regexp . ')*$~', $token)) { - /* treat as a string, double-quote it escaping quotes */ - $token = '"'.addslashes($token).'"'; - } - - $attrs[$attr_name] = $token; - $state = 0; - } else - $this->_syntax_error("'=' cannot be an attribute value", E_USER_ERROR, __FILE__, __LINE__); - break; - } - $last_token = $token; - } - - if($state != 0) { - if($state == 1) { - $this->_syntax_error("expecting '=' after attribute name '$last_token'", E_USER_ERROR, __FILE__, __LINE__); - } else { - $this->_syntax_error("missing attribute value", E_USER_ERROR, __FILE__, __LINE__); - } - } - - $this->_parse_vars_props($attrs); - - return $attrs; - } - - /** - * compile multiple variables and section properties tokens into - * PHP code - * - * @param array $tokens - */ - function _parse_vars_props(&$tokens) - { - foreach($tokens as $key => $val) { - $tokens[$key] = $this->_parse_var_props($val); - } - } - - /** - * compile single variable and section properties token into - * PHP code - * - * @param string $val - * @param string $tag_attrs - * @return string - */ - function _parse_var_props($val) - { - $val = trim($val); - - if(preg_match('~^(' . $this->_obj_call_regexp . '|' . $this->_dvar_regexp . ')(' . $this->_mod_regexp . '*)$~', $val, $match)) { - // $ variable or object - $return = $this->_parse_var($match[1]); - $modifiers = $match[2]; - if (!empty($this->default_modifiers) && !preg_match('~(^|\|)smarty:nodefaults($|\|)~',$modifiers)) { - $_default_mod_string = implode('|',(array)$this->default_modifiers); - $modifiers = empty($modifiers) ? $_default_mod_string : $_default_mod_string . '|' . $modifiers; - } - $this->_parse_modifiers($return, $modifiers); - return $return; - } elseif (preg_match('~^' . $this->_db_qstr_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { - // double quoted text - preg_match('~^(' . $this->_db_qstr_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match); - $return = $this->_expand_quoted_text($match[1]); - if($match[2] != '') { - $this->_parse_modifiers($return, $match[2]); - } - return $return; - } - elseif(preg_match('~^' . $this->_num_const_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { - // numerical constant - preg_match('~^(' . $this->_num_const_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match); - if($match[2] != '') { - $this->_parse_modifiers($match[1], $match[2]); - return $match[1]; - } - } - elseif(preg_match('~^' . $this->_si_qstr_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { - // single quoted text - preg_match('~^(' . $this->_si_qstr_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match); - if($match[2] != '') { - $this->_parse_modifiers($match[1], $match[2]); - return $match[1]; - } - } - elseif(preg_match('~^' . $this->_cvar_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { - // config var - return $this->_parse_conf_var($val); - } - elseif(preg_match('~^' . $this->_svar_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) { - // section var - return $this->_parse_section_prop($val); - } - elseif(!in_array($val, $this->_permitted_tokens) && !is_numeric($val)) { - // literal string - return $this->_expand_quoted_text('"' . strtr($val, array('\\' => '\\\\', '"' => '\\"')) .'"'); - } - return $val; - } - - /** - * expand quoted text with embedded variables - * - * @param string $var_expr - * @return string - */ - function _expand_quoted_text($var_expr) - { - // if contains unescaped $, expand it - if(preg_match_all('~(?:\`(?_dvar_guts_regexp . '(?:' . $this->_obj_ext_regexp . ')*\`)|(?:(?_parse_var(str_replace('`','',$_var)) . ')."'; - } - $var_expr = strtr($var_expr, $_replace); - $_return = preg_replace('~\.""|(?_dvar_math_regexp.'|'.$this->_qstr_regexp.')~', $var_expr, -1, PREG_SPLIT_DELIM_CAPTURE); - - if(count($_math_vars) > 1) { - $_first_var = ""; - $_complete_var = ""; - $_output = ""; - // simple check if there is any math, to stop recursion (due to modifiers with "xx % yy" as parameter) - foreach($_math_vars as $_k => $_math_var) { - $_math_var = $_math_vars[$_k]; - - if(!empty($_math_var) || is_numeric($_math_var)) { - // hit a math operator, so process the stuff which came before it - if(preg_match('~^' . $this->_dvar_math_regexp . '$~', $_math_var)) { - $_has_math = true; - if(!empty($_complete_var) || is_numeric($_complete_var)) { - $_output .= $this->_parse_var($_complete_var); - } - - // just output the math operator to php - $_output .= $_math_var; - - if(empty($_first_var)) - $_first_var = $_complete_var; - - $_complete_var = ""; - } else { - $_complete_var .= $_math_var; - } - } - } - if($_has_math) { - if(!empty($_complete_var) || is_numeric($_complete_var)) - $_output .= $this->_parse_var($_complete_var); - - // get the modifiers working (only the last var from math + modifier is left) - $var_expr = $_complete_var; - } - } - - // prevent cutting of first digit in the number (we _definitly_ got a number if the first char is a digit) - if(is_numeric(substr($var_expr, 0, 1))) - $_var_ref = $var_expr; - else - $_var_ref = substr($var_expr, 1); - - if(!$_has_math) { - - // get [foo] and .foo and ->foo and (...) pieces - preg_match_all('~(?:^\w+)|' . $this->_obj_params_regexp . '|(?:' . $this->_var_bracket_regexp . ')|->\$?\w+|\.\$?\w+|\S+~', $_var_ref, $match); - - $_indexes = $match[0]; - $_var_name = array_shift($_indexes); - - /* Handle $smarty.* variable references as a special case. */ - if ($_var_name == 'smarty') { - /* - * If the reference could be compiled, use the compiled output; - * otherwise, fall back on the $smarty variable generated at - * run-time. - */ - if (($smarty_ref = $this->_compile_smarty_ref($_indexes)) !== null) { - $_output = $smarty_ref; - } else { - $_var_name = substr(array_shift($_indexes), 1); - $_output = "\$this->_smarty_vars['$_var_name']"; - } - } elseif(is_numeric($_var_name) && is_numeric(substr($var_expr, 0, 1))) { - // because . is the operator for accessing arrays thru inidizes we need to put it together again for floating point numbers - if(count($_indexes) > 0) - { - $_var_name .= implode("", $_indexes); - $_indexes = array(); - } - $_output = $_var_name; - } else { - $_output = "\$this->_tpl_vars['$_var_name']"; - } - - foreach ($_indexes as $_index) { - if (substr($_index, 0, 1) == '[') { - $_index = substr($_index, 1, -1); - if (is_numeric($_index)) { - $_output .= "[$_index]"; - } elseif (substr($_index, 0, 1) == '$') { - if (strpos($_index, '.') !== false) { - $_output .= '[' . $this->_parse_var($_index) . ']'; - } else { - $_output .= "[\$this->_tpl_vars['" . substr($_index, 1) . "']]"; - } - } else { - $_var_parts = explode('.', $_index); - $_var_section = $_var_parts[0]; - $_var_section_prop = isset($_var_parts[1]) ? $_var_parts[1] : 'index'; - $_output .= "[\$this->_sections['$_var_section']['$_var_section_prop']]"; - } - } else if (substr($_index, 0, 1) == '.') { - if (substr($_index, 1, 1) == '$') - $_output .= "[\$this->_tpl_vars['" . substr($_index, 2) . "']]"; - else - $_output .= "['" . substr($_index, 1) . "']"; - } else if (substr($_index,0,2) == '->') { - if(substr($_index,2,2) == '__') { - $this->_syntax_error('call to internal object members is not allowed', E_USER_ERROR, __FILE__, __LINE__); - } elseif($this->security && substr($_index, 2, 1) == '_') { - $this->_syntax_error('(secure) call to private object member is not allowed', E_USER_ERROR, __FILE__, __LINE__); - } elseif (substr($_index, 2, 1) == '$') { - if ($this->security) { - $this->_syntax_error('(secure) call to dynamic object member is not allowed', E_USER_ERROR, __FILE__, __LINE__); - } else { - $_output .= '->{(($_var=$this->_tpl_vars[\''.substr($_index,3).'\']) && substr($_var,0,2)!=\'__\') ? $_var : $this->trigger_error("cannot access property \\"$_var\\"")}'; - } - } else { - $_output .= $_index; - } - } elseif (substr($_index, 0, 1) == '(') { - $_index = $this->_parse_parenth_args($_index); - $_output .= $_index; - } else { - $_output .= $_index; - } - } - } - - return $_output; - } - - /** - * parse arguments in function call parenthesis - * - * @param string $parenth_args - * @return string - */ - function _parse_parenth_args($parenth_args) - { - preg_match_all('~' . $this->_param_regexp . '~',$parenth_args, $match); - $orig_vals = $match = $match[0]; - $this->_parse_vars_props($match); - $replace = array(); - for ($i = 0, $count = count($match); $i < $count; $i++) { - $replace[$orig_vals[$i]] = $match[$i]; - } - return strtr($parenth_args, $replace); - } - - /** - * parse configuration variable expression into PHP code - * - * @param string $conf_var_expr - */ - function _parse_conf_var($conf_var_expr) - { - $parts = explode('|', $conf_var_expr, 2); - $var_ref = $parts[0]; - $modifiers = isset($parts[1]) ? $parts[1] : ''; - - $var_name = substr($var_ref, 1, -1); - - $output = "\$this->_config[0]['vars']['$var_name']"; - - $this->_parse_modifiers($output, $modifiers); - - return $output; - } - - /** - * parse section property expression into PHP code - * - * @param string $section_prop_expr - * @return string - */ - function _parse_section_prop($section_prop_expr) - { - $parts = explode('|', $section_prop_expr, 2); - $var_ref = $parts[0]; - $modifiers = isset($parts[1]) ? $parts[1] : ''; - - preg_match('!%(\w+)\.(\w+)%!', $var_ref, $match); - $section_name = $match[1]; - $prop_name = $match[2]; - - $output = "\$this->_sections['$section_name']['$prop_name']"; - - $this->_parse_modifiers($output, $modifiers); - - return $output; - } - - - /** - * parse modifier chain into PHP code - * - * sets $output to parsed modified chain - * @param string $output - * @param string $modifier_string - */ - function _parse_modifiers(&$output, $modifier_string) - { - preg_match_all('~\|(@?\w+)((?>:(?:'. $this->_qstr_regexp . '|[^|]+))*)~', '|' . $modifier_string, $_match); - list(, $_modifiers, $modifier_arg_strings) = $_match; - - for ($_i = 0, $_for_max = count($_modifiers); $_i < $_for_max; $_i++) { - $_modifier_name = $_modifiers[$_i]; - - if($_modifier_name == 'smarty') { - // skip smarty modifier - continue; - } - - preg_match_all('~:(' . $this->_qstr_regexp . '|[^:]+)~', $modifier_arg_strings[$_i], $_match); - $_modifier_args = $_match[1]; - - if (substr($_modifier_name, 0, 1) == '@') { - $_map_array = false; - $_modifier_name = substr($_modifier_name, 1); - } else { - $_map_array = true; - } - - if (empty($this->_plugins['modifier'][$_modifier_name]) - && !$this->_get_plugin_filepath('modifier', $_modifier_name) - && function_exists($_modifier_name)) { - if ($this->security && !in_array($_modifier_name, $this->security_settings['MODIFIER_FUNCS'])) { - $this->_trigger_fatal_error("[plugin] (secure mode) modifier '$_modifier_name' is not allowed" , $this->_current_file, $this->_current_line_no, __FILE__, __LINE__); - } else { - $this->_plugins['modifier'][$_modifier_name] = array($_modifier_name, null, null, false); - } - } - $this->_add_plugin('modifier', $_modifier_name); - - $this->_parse_vars_props($_modifier_args); - - if($_modifier_name == 'default') { - // supress notifications of default modifier vars and args - if(substr($output, 0, 1) == '$') { - $output = '@' . $output; - } - if(isset($_modifier_args[0]) && substr($_modifier_args[0], 0, 1) == '$') { - $_modifier_args[0] = '@' . $_modifier_args[0]; - } - } - if (count($_modifier_args) > 0) - $_modifier_args = ', '.implode(', ', $_modifier_args); - else - $_modifier_args = ''; - - if ($_map_array) { - $output = "((is_array(\$_tmp=$output)) ? \$this->_run_mod_handler('$_modifier_name', true, \$_tmp$_modifier_args) : " . $this->_compile_plugin_call('modifier', $_modifier_name) . "(\$_tmp$_modifier_args))"; - - } else { - - $output = $this->_compile_plugin_call('modifier', $_modifier_name)."($output$_modifier_args)"; - - } - } - } - - - /** - * add plugin - * - * @param string $type - * @param string $name - * @param boolean? $delayed_loading - */ - function _add_plugin($type, $name, $delayed_loading = null) - { - if (!isset($this->_plugin_info[$type])) { - $this->_plugin_info[$type] = array(); - } - if (!isset($this->_plugin_info[$type][$name])) { - $this->_plugin_info[$type][$name] = array($this->_current_file, - $this->_current_line_no, - $delayed_loading); - } - } - - - /** - * Compiles references of type $smarty.foo - * - * @param string $indexes - * @return string - */ - function _compile_smarty_ref(&$indexes) - { - /* Extract the reference name. */ - $_ref = substr($indexes[0], 1); - foreach($indexes as $_index_no=>$_index) { - if (substr($_index, 0, 1) != '.' && $_index_no<2 || !preg_match('~^(\.|\[|->)~', $_index)) { - $this->_syntax_error('$smarty' . implode('', array_slice($indexes, 0, 2)) . ' is an invalid reference', E_USER_ERROR, __FILE__, __LINE__); - } - } - - switch ($_ref) { - case 'now': - $compiled_ref = 'time()'; - $_max_index = 1; - break; - - case 'foreach': - array_shift($indexes); - $_var = $this->_parse_var_props(substr($indexes[0], 1)); - $_propname = substr($indexes[1], 1); - $_max_index = 1; - switch ($_propname) { - case 'index': - array_shift($indexes); - $compiled_ref = "(\$this->_foreach[$_var]['iteration']-1)"; - break; - - case 'first': - array_shift($indexes); - $compiled_ref = "(\$this->_foreach[$_var]['iteration'] <= 1)"; - break; - - case 'last': - array_shift($indexes); - $compiled_ref = "(\$this->_foreach[$_var]['iteration'] == \$this->_foreach[$_var]['total'])"; - break; - - case 'show': - array_shift($indexes); - $compiled_ref = "(\$this->_foreach[$_var]['total'] > 0)"; - break; - - default: - unset($_max_index); - $compiled_ref = "\$this->_foreach[$_var]"; - } - break; - - case 'section': - array_shift($indexes); - $_var = $this->_parse_var_props(substr($indexes[0], 1)); - $compiled_ref = "\$this->_sections[$_var]"; - break; - - case 'get': - if ($this->security && !$this->security_settings['ALLOW_SUPER_GLOBALS']) { - $this->_syntax_error("(secure mode) super global access not permitted", - E_USER_WARNING, __FILE__, __LINE__); - return; - } - $compiled_ref = "\$_GET"; - break; - - case 'post': - if ($this->security && !$this->security_settings['ALLOW_SUPER_GLOBALS']) { - $this->_syntax_error("(secure mode) super global access not permitted", - E_USER_WARNING, __FILE__, __LINE__); - return; - } - $compiled_ref = "\$_POST"; - break; - - case 'cookies': - if ($this->security && !$this->security_settings['ALLOW_SUPER_GLOBALS']) { - $this->_syntax_error("(secure mode) super global access not permitted", - E_USER_WARNING, __FILE__, __LINE__); - return; - } - $compiled_ref = "\$_COOKIE"; - break; - - case 'env': - if ($this->security && !$this->security_settings['ALLOW_SUPER_GLOBALS']) { - $this->_syntax_error("(secure mode) super global access not permitted", - E_USER_WARNING, __FILE__, __LINE__); - return; - } - $compiled_ref = "\$_ENV"; - break; - - case 'server': - if ($this->security && !$this->security_settings['ALLOW_SUPER_GLOBALS']) { - $this->_syntax_error("(secure mode) super global access not permitted", - E_USER_WARNING, __FILE__, __LINE__); - return; - } - $compiled_ref = "\$_SERVER"; - break; - - case 'session': - if ($this->security && !$this->security_settings['ALLOW_SUPER_GLOBALS']) { - $this->_syntax_error("(secure mode) super global access not permitted", - E_USER_WARNING, __FILE__, __LINE__); - return; - } - $compiled_ref = "\$_SESSION"; - break; - - /* - * These cases are handled either at run-time or elsewhere in the - * compiler. - */ - case 'request': - if ($this->security && !$this->security_settings['ALLOW_SUPER_GLOBALS']) { - $this->_syntax_error("(secure mode) super global access not permitted", - E_USER_WARNING, __FILE__, __LINE__); - return; - } - if ($this->request_use_auto_globals) { - $compiled_ref = "\$_REQUEST"; - break; - } else { - $this->_init_smarty_vars = true; - } - return null; - - case 'capture': - return null; - - case 'template': - $compiled_ref = "'$this->_current_file'"; - $_max_index = 1; - break; - - case 'version': - $compiled_ref = "'$this->_version'"; - $_max_index = 1; - break; - - case 'const': - if ($this->security && !$this->security_settings['ALLOW_CONSTANTS']) { - $this->_syntax_error("(secure mode) constants not permitted", - E_USER_WARNING, __FILE__, __LINE__); - return; - } - array_shift($indexes); - if (preg_match('!^\.\w+$!', $indexes[0])) { - $compiled_ref = '@' . substr($indexes[0], 1); - } else { - $_val = $this->_parse_var_props(substr($indexes[0], 1)); - $compiled_ref = '@constant(' . $_val . ')'; - } - $_max_index = 1; - break; - - case 'config': - $compiled_ref = "\$this->_config[0]['vars']"; - $_max_index = 3; - break; - - case 'ldelim': - $compiled_ref = "'$this->left_delimiter'"; - break; - - case 'rdelim': - $compiled_ref = "'$this->right_delimiter'"; - break; - - default: - $this->_syntax_error('$smarty.' . $_ref . ' is an unknown reference', E_USER_ERROR, __FILE__, __LINE__); - break; - } - - if (isset($_max_index) && count($indexes) > $_max_index) { - $this->_syntax_error('$smarty' . implode('', $indexes) .' is an invalid reference', E_USER_ERROR, __FILE__, __LINE__); - } - - array_shift($indexes); - return $compiled_ref; - } - - /** - * compiles call to plugin of type $type with name $name - * returns a string containing the function-name or method call - * without the paramter-list that would have follow to make the - * call valid php-syntax - * - * @param string $type - * @param string $name - * @return string - */ - function _compile_plugin_call($type, $name) { - if (isset($this->_plugins[$type][$name])) { - /* plugin loaded */ - if (is_array($this->_plugins[$type][$name][0])) { - return ((is_object($this->_plugins[$type][$name][0][0])) ? - "\$this->_plugins['$type']['$name'][0][0]->" /* method callback */ - : (string)($this->_plugins[$type][$name][0][0]).'::' /* class callback */ - ). $this->_plugins[$type][$name][0][1]; - - } else { - /* function callback */ - return $this->_plugins[$type][$name][0]; - - } - } else { - /* plugin not loaded -> auto-loadable-plugin */ - return 'smarty_'.$type.'_'.$name; - - } - } - - /** - * load pre- and post-filters - */ - function _load_filters() - { - if (count($this->_plugins['prefilter']) > 0) { - foreach ($this->_plugins['prefilter'] as $filter_name => $prefilter) { - if ($prefilter === false) { - unset($this->_plugins['prefilter'][$filter_name]); - $_params = array('plugins' => array(array('prefilter', $filter_name, null, null, false))); - require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); - smarty_core_load_plugins($_params, $this); - } - } - } - if (count($this->_plugins['postfilter']) > 0) { - foreach ($this->_plugins['postfilter'] as $filter_name => $postfilter) { - if ($postfilter === false) { - unset($this->_plugins['postfilter'][$filter_name]); - $_params = array('plugins' => array(array('postfilter', $filter_name, null, null, false))); - require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); - smarty_core_load_plugins($_params, $this); - } - } - } - } - - - /** - * Quote subpattern references - * - * @param string $string - * @return string - */ - function _quote_replace($string) - { - return strtr($string, array('\\' => '\\\\', '$' => '\\$')); - } - - /** - * display Smarty syntax error - * - * @param string $error_msg - * @param integer $error_type - * @param string $file - * @param integer $line - */ - function _syntax_error($error_msg, $error_type = E_USER_ERROR, $file=null, $line=null) - { - $this->_trigger_fatal_error("syntax error: $error_msg", $this->_current_file, $this->_current_line_no, $file, $line, $error_type); - } - - - /** - * check if the compilation changes from cacheable to - * non-cacheable state with the beginning of the current - * plugin. return php-code to reflect the transition. - * @return string - */ - function _push_cacheable_state($type, $name) { - $_cacheable = !isset($this->_plugins[$type][$name]) || $this->_plugins[$type][$name][4]; - if ($_cacheable - || 0<$this->_cacheable_state++) return ''; - if (!isset($this->_cache_serial)) $this->_cache_serial = md5(uniqid('Smarty')); - $_ret = 'if ($this->caching && !$this->_cache_including): echo \'{nocache:' - . $this->_cache_serial . '#' . $this->_nocache_count - . '}\'; endif;'; - return $_ret; - } - - - /** - * check if the compilation changes from non-cacheable to - * cacheable state with the end of the current plugin return - * php-code to reflect the transition. - * @return string - */ - function _pop_cacheable_state($type, $name) { - $_cacheable = !isset($this->_plugins[$type][$name]) || $this->_plugins[$type][$name][4]; - if ($_cacheable - || --$this->_cacheable_state>0) return ''; - return 'if ($this->caching && !$this->_cache_including): echo \'{/nocache:' - . $this->_cache_serial . '#' . ($this->_nocache_count++) - . '}\'; endif;'; - } - - - /** - * push opening tag-name, file-name and line-number on the tag-stack - * @param string the opening tag's name - */ - function _push_tag($open_tag) - { - array_push($this->_tag_stack, array($open_tag, $this->_current_line_no)); - } - - /** - * pop closing tag-name - * raise an error if this stack-top doesn't match with the closing tag - * @param string the closing tag's name - * @return string the opening tag's name - */ - function _pop_tag($close_tag) - { - $message = ''; - if (count($this->_tag_stack)>0) { - list($_open_tag, $_line_no) = array_pop($this->_tag_stack); - if ($close_tag == $_open_tag) { - return $_open_tag; - } - if ($close_tag == 'if' && ($_open_tag == 'else' || $_open_tag == 'elseif' )) { - return $this->_pop_tag($close_tag); - } - if ($close_tag == 'section' && $_open_tag == 'sectionelse') { - $this->_pop_tag($close_tag); - return $_open_tag; - } - if ($close_tag == 'foreach' && $_open_tag == 'foreachelse') { - $this->_pop_tag($close_tag); - return $_open_tag; - } - if ($_open_tag == 'else' || $_open_tag == 'elseif') { - $_open_tag = 'if'; - } elseif ($_open_tag == 'sectionelse') { - $_open_tag = 'section'; - } elseif ($_open_tag == 'foreachelse') { - $_open_tag = 'foreach'; - } - $message = " expected {/$_open_tag} (opened line $_line_no)."; - } - $this->_syntax_error("mismatched tag {/$close_tag}.$message", - E_USER_ERROR, __FILE__, __LINE__); - } - -} - -/** - * compare to values by their string length - * - * @access private - * @param string $a - * @param string $b - * @return 0|-1|1 - */ -function _smarty_sort_length($a, $b) -{ - if($a == $b) - return 0; - - if(strlen($a) == strlen($b)) - return ($a > $b) ? -1 : 1; - - return (strlen($a) > strlen($b)) ? -1 : 1; -} - - -/* vim: set et: */ - -?> diff --git a/htdocs/lib2/smarty/debug.tpl b/htdocs/lib2/smarty/debug.tpl deleted file mode 100644 index c05ef5d0b..000000000 --- a/htdocs/lib2/smarty/debug.tpl +++ /dev/null @@ -1,157 +0,0 @@ -{* Smarty *} -{* debug.tpl, last updated version 2.1.0 *} -{assign_debug_info} -{capture assign=debug_output} - - - - Smarty Debug Console -{literal} - -{/literal} - - - -

Smarty Debug Console

- -

included templates & config files (load time in seconds)

- -
-{section name=templates loop=$_debug_tpls} - {section name=indent loop=$_debug_tpls[templates].depth}   {/section} - - {$_debug_tpls[templates].filename|escape:html} - {if isset($_debug_tpls[templates].exec_time)} - - ({$_debug_tpls[templates].exec_time|string_format:"%.5f"}) - {if %templates.index% eq 0}(total){/if} - - {/if} -
-{sectionelse} -

no templates included

-{/section} -
- -

assigned template variables

- - - {section name=vars loop=$_debug_keys} - - - - {sectionelse} - - {/section} -
{ldelim}${$_debug_keys[vars]|escape:'html'}{rdelim}{$_debug_vals[vars]|@debug_print_var}

no template variables assigned

- -

assigned config file variables (outer template scope)

- - - {section name=config_vars loop=$_debug_config_keys} - - - - {sectionelse} - - {/section} -
{ldelim}#{$_debug_config_keys[config_vars]|escape:'html'}#{rdelim}{$_debug_config_vals[config_vars]|@debug_print_var}

no config vars assigned

- - -{/capture} -{if isset($_smarty_debug_output) and $_smarty_debug_output eq "html"} - {$debug_output} -{else} - -{/if} \ No newline at end of file diff --git a/htdocs/lib2/smarty/index.html b/htdocs/lib2/smarty/index.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/htdocs/lib2/smarty/internals/core.assemble_plugin_filepath.php b/htdocs/lib2/smarty/internals/core.assemble_plugin_filepath.php deleted file mode 100644 index 690d3ddbc..000000000 --- a/htdocs/lib2/smarty/internals/core.assemble_plugin_filepath.php +++ /dev/null @@ -1,67 +0,0 @@ -plugins_dir as $_plugin_dir) { - - $_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename; - - // see if path is relative - if (!preg_match("/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/", $_plugin_dir)) { - $_relative_paths[] = $_plugin_dir; - // relative path, see if it is in the SMARTY_DIR - if (@is_readable(SMARTY_DIR . $_plugin_filepath)) { - $_return = SMARTY_DIR . $_plugin_filepath; - break; - } - } - // try relative to cwd (or absolute) - if (@is_readable($_plugin_filepath)) { - $_return = $_plugin_filepath; - break; - } - } - - if($_return === false) { - // still not found, try PHP include_path - if(isset($_relative_paths)) { - foreach ((array)$_relative_paths as $_plugin_dir) { - - $_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename; - - $_params = array('file_path' => $_plugin_filepath); - require_once(SMARTY_CORE_DIR . 'core.get_include_path.php'); - if(smarty_core_get_include_path($_params, $smarty)) { - $_return = $_params['new_file_path']; - break; - } - } - } - } - $_filepaths_cache[$_plugin_filename] = $_return; - return $_return; -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.assign_smarty_interface.php b/htdocs/lib2/smarty/internals/core.assign_smarty_interface.php deleted file mode 100644 index 7e65a73ec..000000000 --- a/htdocs/lib2/smarty/internals/core.assign_smarty_interface.php +++ /dev/null @@ -1,43 +0,0 @@ - - * Name: assign_smarty_interface
- * Purpose: assign the $smarty interface variable - * @param array Format: null - * @param Smarty - */ -function smarty_core_assign_smarty_interface($params, &$smarty) -{ - if (isset($smarty->_smarty_vars) && isset($smarty->_smarty_vars['request'])) { - return; - } - - $_globals_map = array('g' => 'HTTP_GET_VARS', - 'p' => 'HTTP_POST_VARS', - 'c' => 'HTTP_COOKIE_VARS', - 's' => 'HTTP_SERVER_VARS', - 'e' => 'HTTP_ENV_VARS'); - - $_smarty_vars_request = array(); - - foreach (preg_split('!!', strtolower($smarty->request_vars_order)) as $_c) { - if (isset($_globals_map[$_c])) { - $_smarty_vars_request = array_merge($_smarty_vars_request, $GLOBALS[$_globals_map[$_c]]); - } - } - $_smarty_vars_request = @array_merge($_smarty_vars_request, $GLOBALS['HTTP_SESSION_VARS']); - - $smarty->_smarty_vars['request'] = $_smarty_vars_request; -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.create_dir_structure.php b/htdocs/lib2/smarty/internals/core.create_dir_structure.php deleted file mode 100644 index 3eecc4972..000000000 --- a/htdocs/lib2/smarty/internals/core.create_dir_structure.php +++ /dev/null @@ -1,79 +0,0 @@ -_dir_perms) && !is_dir($_new_dir)) { - $smarty->trigger_error("problem creating directory '" . $_new_dir . "'"); - return false; - } - $_new_dir .= '/'; - } - } -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.display_debug_console.php b/htdocs/lib2/smarty/internals/core.display_debug_console.php deleted file mode 100644 index 1a80f3909..000000000 --- a/htdocs/lib2/smarty/internals/core.display_debug_console.php +++ /dev/null @@ -1,61 +0,0 @@ - - * Name: display_debug_console
- * Purpose: display the javascript debug console window - * @param array Format: null - * @param Smarty - */ -function smarty_core_display_debug_console($params, &$smarty) -{ - // we must force compile the debug template in case the environment - // changed between separate applications. - - if(empty($smarty->debug_tpl)) { - // set path to debug template from SMARTY_DIR - $smarty->debug_tpl = SMARTY_DIR . 'debug.tpl'; - if($smarty->security && is_file($smarty->debug_tpl)) { - $smarty->secure_dir[] = realpath($smarty->debug_tpl); - } - $smarty->debug_tpl = 'file:' . SMARTY_DIR . 'debug.tpl'; - } - - $_ldelim_orig = $smarty->left_delimiter; - $_rdelim_orig = $smarty->right_delimiter; - - $smarty->left_delimiter = '{'; - $smarty->right_delimiter = '}'; - - $_compile_id_orig = $smarty->_compile_id; - $smarty->_compile_id = null; - - $_compile_path = $smarty->_get_compile_path($smarty->debug_tpl); - if ($smarty->_compile_resource($smarty->debug_tpl, $_compile_path)) - { - ob_start(); - $smarty->_include($_compile_path); - $_results = ob_get_contents(); - ob_end_clean(); - } else { - $_results = ''; - } - - $smarty->_compile_id = $_compile_id_orig; - - $smarty->left_delimiter = $_ldelim_orig; - $smarty->right_delimiter = $_rdelim_orig; - - return $_results; -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.get_include_path.php b/htdocs/lib2/smarty/internals/core.get_include_path.php deleted file mode 100644 index 43432412b..000000000 --- a/htdocs/lib2/smarty/internals/core.get_include_path.php +++ /dev/null @@ -1,44 +0,0 @@ - diff --git a/htdocs/lib2/smarty/internals/core.get_microtime.php b/htdocs/lib2/smarty/internals/core.get_microtime.php deleted file mode 100644 index f1a28e042..000000000 --- a/htdocs/lib2/smarty/internals/core.get_microtime.php +++ /dev/null @@ -1,23 +0,0 @@ - diff --git a/htdocs/lib2/smarty/internals/core.get_php_resource.php b/htdocs/lib2/smarty/internals/core.get_php_resource.php deleted file mode 100644 index 786d4e78e..000000000 --- a/htdocs/lib2/smarty/internals/core.get_php_resource.php +++ /dev/null @@ -1,80 +0,0 @@ -trusted_dir; - $smarty->_parse_resource_name($params, $smarty); - - /* - * Find out if the resource exists. - */ - - if ($params['resource_type'] == 'file') { - $_readable = false; - if(file_exists($params['resource_name']) && is_readable($params['resource_name'])) { - $_readable = true; - } else { - // test for file in include_path - $_params = array('file_path' => $params['resource_name']); - require_once(SMARTY_CORE_DIR . 'core.get_include_path.php'); - if(smarty_core_get_include_path($_params, $smarty)) { - $_include_path = $_params['new_file_path']; - $_readable = true; - } - } - } else if ($params['resource_type'] != 'file') { - $_template_source = null; - $_readable = is_callable($smarty->_plugins['resource'][$params['resource_type']][0][0]) - && call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][0], - array($params['resource_name'], &$_template_source, &$smarty)); - } - - /* - * Set the error function, depending on which class calls us. - */ - if (method_exists($smarty, '_syntax_error')) { - $_error_funcc = '_syntax_error'; - } else { - $_error_funcc = 'trigger_error'; - } - - if ($_readable) { - if ($smarty->security) { - require_once(SMARTY_CORE_DIR . 'core.is_trusted.php'); - if (!smarty_core_is_trusted($params, $smarty)) { - $smarty->$_error_funcc('(secure mode) ' . $params['resource_type'] . ':' . $params['resource_name'] . ' is not trusted'); - return false; - } - } - } else { - $smarty->$_error_funcc($params['resource_type'] . ':' . $params['resource_name'] . ' is not readable'); - return false; - } - - if ($params['resource_type'] == 'file') { - $params['php_resource'] = $params['resource_name']; - } else { - $params['php_resource'] = $_template_source; - } - return true; -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.is_secure.php b/htdocs/lib2/smarty/internals/core.is_secure.php deleted file mode 100644 index d54abd432..000000000 --- a/htdocs/lib2/smarty/internals/core.is_secure.php +++ /dev/null @@ -1,59 +0,0 @@ -security || $smarty->security_settings['INCLUDE_ANY']) { - return true; - } - - if ($params['resource_type'] == 'file') { - $_rp = realpath($params['resource_name']); - if (isset($params['resource_base_path'])) { - foreach ((array)$params['resource_base_path'] as $curr_dir) { - if ( ($_cd = realpath($curr_dir)) !== false && - strncmp($_rp, $_cd, strlen($_cd)) == 0 && - substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR ) { - return true; - } - } - } - if (!empty($smarty->secure_dir)) { - foreach ((array)$smarty->secure_dir as $curr_dir) { - if ( ($_cd = realpath($curr_dir)) !== false) { - if($_cd == $_rp) { - return true; - } elseif (strncmp($_rp, $_cd, strlen($_cd)) == 0 && - substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR) { - return true; - } - } - } - } - } else { - // resource is not on local file system - return call_user_func_array( - $smarty->_plugins['resource'][$params['resource_type']][0][2], - array($params['resource_name'], &$smarty)); - } - - return false; -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.is_trusted.php b/htdocs/lib2/smarty/internals/core.is_trusted.php deleted file mode 100644 index 429973158..000000000 --- a/htdocs/lib2/smarty/internals/core.is_trusted.php +++ /dev/null @@ -1,47 +0,0 @@ -trusted_dir)) { - $_rp = realpath($params['resource_name']); - foreach ((array)$smarty->trusted_dir as $curr_dir) { - if (!empty($curr_dir) && is_readable ($curr_dir)) { - $_cd = realpath($curr_dir); - if (strncmp($_rp, $_cd, strlen($_cd)) == 0 - && substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR ) { - $_smarty_trusted = true; - break; - } - } - } - } - - } else { - // resource is not on local file system - $_smarty_trusted = call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][3], - array($params['resource_name'], $smarty)); - } - - return $_smarty_trusted; -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.load_plugins.php b/htdocs/lib2/smarty/internals/core.load_plugins.php deleted file mode 100644 index 6db1dc51d..000000000 --- a/htdocs/lib2/smarty/internals/core.load_plugins.php +++ /dev/null @@ -1,125 +0,0 @@ -_plugins[$_type][$_name]; - - /* - * We do not load plugin more than once for each instance of Smarty. - * The following code checks for that. The plugin can also be - * registered dynamically at runtime, in which case template file - * and line number will be unknown, so we fill them in. - * - * The final element of the info array is a flag that indicates - * whether the dynamically registered plugin function has been - * checked for existence yet or not. - */ - if (isset($_plugin)) { - if (empty($_plugin[3])) { - if (!is_callable($_plugin[0])) { - $smarty->_trigger_fatal_error("[plugin] $_type '$_name' is not implemented", $_tpl_file, $_tpl_line, __FILE__, __LINE__); - } else { - $_plugin[1] = $_tpl_file; - $_plugin[2] = $_tpl_line; - $_plugin[3] = true; - if (!isset($_plugin[4])) $_plugin[4] = true; /* cacheable */ - } - } - continue; - } else if ($_type == 'insert') { - /* - * For backwards compatibility, we check for insert functions in - * the symbol table before trying to load them as a plugin. - */ - $_plugin_func = 'insert_' . $_name; - if (function_exists($_plugin_func)) { - $_plugin = array($_plugin_func, $_tpl_file, $_tpl_line, true, false); - continue; - } - } - - $_plugin_file = $smarty->_get_plugin_filepath($_type, $_name); - - if (! $_found = ($_plugin_file != false)) { - $_message = "could not load plugin file '$_type.$_name.php'\n"; - } - - /* - * If plugin file is found, it -must- provide the properly named - * plugin function. In case it doesn't, simply output the error and - * do not fall back on any other method. - */ - if ($_found) { - include_once $_plugin_file; - - $_plugin_func = 'smarty_' . $_type . '_' . $_name; - if (!function_exists($_plugin_func)) { - $smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", $_tpl_file, $_tpl_line, __FILE__, __LINE__); - continue; - } - } - /* - * In case of insert plugins, their code may be loaded later via - * 'script' attribute. - */ - else if ($_type == 'insert' && $_delayed_loading) { - $_plugin_func = 'smarty_' . $_type . '_' . $_name; - $_found = true; - } - - /* - * Plugin specific processing and error checking. - */ - if (!$_found) { - if ($_type == 'modifier') { - /* - * In case modifier falls back on using PHP functions - * directly, we only allow those specified in the security - * context. - */ - if ($smarty->security && !in_array($_name, $smarty->security_settings['MODIFIER_FUNCS'])) { - $_message = "(secure mode) modifier '$_name' is not allowed"; - } else { - if (!function_exists($_name)) { - $_message = "modifier '$_name' is not implemented"; - } else { - $_plugin_func = $_name; - $_found = true; - } - } - } else if ($_type == 'function') { - /* - * This is a catch-all situation. - */ - $_message = "unknown tag - '$_name'"; - } - } - - if ($_found) { - $smarty->_plugins[$_type][$_name] = array($_plugin_func, $_tpl_file, $_tpl_line, true, true); - } else { - // output error - $smarty->_trigger_fatal_error('[plugin] ' . $_message, $_tpl_file, $_tpl_line, __FILE__, __LINE__); - } - } -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.load_resource_plugin.php b/htdocs/lib2/smarty/internals/core.load_resource_plugin.php deleted file mode 100644 index a7d37d1af..000000000 --- a/htdocs/lib2/smarty/internals/core.load_resource_plugin.php +++ /dev/null @@ -1,74 +0,0 @@ -_plugins['resource'][$params['type']]; - if (isset($_plugin)) { - if (!$_plugin[1] && count($_plugin[0])) { - $_plugin[1] = true; - foreach ($_plugin[0] as $_plugin_func) { - if (!is_callable($_plugin_func)) { - $_plugin[1] = false; - break; - } - } - } - - if (!$_plugin[1]) { - $smarty->_trigger_fatal_error("[plugin] resource '" . $params['type'] . "' is not implemented", null, null, __FILE__, __LINE__); - } - - return; - } - - $_plugin_file = $smarty->_get_plugin_filepath('resource', $params['type']); - $_found = ($_plugin_file != false); - - if ($_found) { /* - * If the plugin file is found, it -must- provide the properly named - * plugin functions. - */ - include_once($_plugin_file); - - /* - * Locate functions that we require the plugin to provide. - */ - $_resource_ops = array('source', 'timestamp', 'secure', 'trusted'); - $_resource_funcs = array(); - foreach ($_resource_ops as $_op) { - $_plugin_func = 'smarty_resource_' . $params['type'] . '_' . $_op; - if (!function_exists($_plugin_func)) { - $smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", null, null, __FILE__, __LINE__); - return; - } else { - $_resource_funcs[] = $_plugin_func; - } - } - - $smarty->_plugins['resource'][$params['type']] = array($_resource_funcs, true); - } -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.process_cached_inserts.php b/htdocs/lib2/smarty/internals/core.process_cached_inserts.php deleted file mode 100644 index 1d78edd93..000000000 --- a/htdocs/lib2/smarty/internals/core.process_cached_inserts.php +++ /dev/null @@ -1,71 +0,0 @@ -_smarty_md5.'{insert_cache (.*)}'.$smarty->_smarty_md5.'!Uis', - $params['results'], $match); - list($cached_inserts, $insert_args) = $match; - - for ($i = 0, $for_max = count($cached_inserts); $i < $for_max; $i++) { - if ($smarty->debugging) { - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $debug_start_time = smarty_core_get_microtime($_params, $smarty); - } - - $args = unserialize($insert_args[$i]); - $name = $args['name']; - - if (isset($args['script'])) { - $_params = array('resource_name' => $smarty->_dequote($args['script'])); - require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); - if(!smarty_core_get_php_resource($_params, $smarty)) { - return false; - } - $resource_type = $_params['resource_type']; - $php_resource = $_params['php_resource']; - - - if ($resource_type == 'file') { - $smarty->_include($php_resource, true); - } else { - $smarty->_eval($php_resource); - } - } - - $function_name = $smarty->_plugins['insert'][$name][0]; - if (empty($args['assign'])) { - $replace = $function_name($args, $smarty); - } else { - $smarty->assign($args['assign'], $function_name($args, $smarty)); - $replace = ''; - } - - $params['results'] = substr_replace($params['results'], $replace, strpos($params['results'], $cached_inserts[$i]), strlen($cached_inserts[$i])); - if ($smarty->debugging) { - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $smarty->_smarty_debug_info[] = array('type' => 'insert', - 'filename' => 'insert_'.$name, - 'depth' => $smarty->_inclusion_depth, - 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $debug_start_time); - } - } - - return $params['results']; -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.process_compiled_include.php b/htdocs/lib2/smarty/internals/core.process_compiled_include.php deleted file mode 100644 index 904d59745..000000000 --- a/htdocs/lib2/smarty/internals/core.process_compiled_include.php +++ /dev/null @@ -1,37 +0,0 @@ -_cache_including; - $smarty->_cache_including = true; - - $_return = $params['results']; - - foreach ($smarty->_cache_info['cache_serials'] as $_include_file_path=>$_cache_serial) { - $smarty->_include($_include_file_path, true); - } - - foreach ($smarty->_cache_info['cache_serials'] as $_include_file_path=>$_cache_serial) { - $_return = preg_replace_callback('!(\{nocache\:('.$_cache_serial.')#(\d+)\})!s', - array(&$smarty, '_process_compiled_include_callback'), - $_return); - } - $smarty->_cache_including = $_cache_including; - return $_return; -} - -?> diff --git a/htdocs/lib2/smarty/internals/core.read_cache_file.php b/htdocs/lib2/smarty/internals/core.read_cache_file.php deleted file mode 100644 index c60e113a7..000000000 --- a/htdocs/lib2/smarty/internals/core.read_cache_file.php +++ /dev/null @@ -1,101 +0,0 @@ -force_compile) { - // force compile enabled, always regenerate - return false; - } - - if (isset($content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']])) { - list($params['results'], $smarty->_cache_info) = $content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']]; - return true; - } - - if (!empty($smarty->cache_handler_func)) { - // use cache_handler function - call_user_func_array($smarty->cache_handler_func, - array('read', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], null)); - } else { - // use local cache file - $_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']); - $_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id); - $params['results'] = $smarty->_read_file($_cache_file); - } - - if (empty($params['results'])) { - // nothing to parse (error?), regenerate cache - return false; - } - - $_contents = $params['results']; - $_info_start = strpos($_contents, "\n") + 1; - $_info_len = (int)substr($_contents, 0, $_info_start - 1); - $_cache_info = unserialize(substr($_contents, $_info_start, $_info_len)); - $params['results'] = substr($_contents, $_info_start + $_info_len); - - if ($smarty->caching == 2 && isset ($_cache_info['expires'])){ - // caching by expiration time - if ($_cache_info['expires'] > -1 && (time() > $_cache_info['expires'])) { - // cache expired, regenerate - return false; - } - } else { - // caching by lifetime - if ($smarty->cache_lifetime > -1 && (time() - $_cache_info['timestamp'] > $smarty->cache_lifetime)) { - // cache expired, regenerate - return false; - } - } - - if ($smarty->compile_check) { - $_params = array('get_source' => false, 'quiet'=>true); - foreach (array_keys($_cache_info['template']) as $_template_dep) { - $_params['resource_name'] = $_template_dep; - if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) { - // template file has changed, regenerate cache - return false; - } - } - - if (isset($_cache_info['config'])) { - $_params = array('resource_base_path' => $smarty->config_dir, 'get_source' => false, 'quiet'=>true); - foreach (array_keys($_cache_info['config']) as $_config_dep) { - $_params['resource_name'] = $_config_dep; - if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) { - // config file has changed, regenerate cache - return false; - } - } - } - } - - $content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']] = array($params['results'], $_cache_info); - - $smarty->_cache_info = $_cache_info; - return true; -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.rm_auto.php b/htdocs/lib2/smarty/internals/core.rm_auto.php deleted file mode 100644 index 66d85cbcd..000000000 --- a/htdocs/lib2/smarty/internals/core.rm_auto.php +++ /dev/null @@ -1,74 +0,0 @@ - $params['auto_base'], - 'level' => 0, - 'exp_time' => $params['exp_time'] - ); - require_once(SMARTY_CORE_DIR . 'core.rmdir.php'); - $_res = smarty_core_rmdir($_params, $smarty); - } else { - $_tname = $smarty->_get_auto_filename($params['auto_base'], $params['auto_source'], $params['auto_id']); - - if(isset($params['auto_source'])) { - if (isset($params['extensions'])) { - $_res = false; - foreach ((array)$params['extensions'] as $_extension) - $_res |= $smarty->_unlink($_tname.$_extension, $params['exp_time']); - } else { - $_res = $smarty->_unlink($_tname, $params['exp_time']); - } - } elseif ($smarty->use_sub_dirs) { - $_params = array( - 'dirname' => $_tname, - 'level' => 1, - 'exp_time' => $params['exp_time'] - ); - require_once(SMARTY_CORE_DIR . 'core.rmdir.php'); - $_res = smarty_core_rmdir($_params, $smarty); - } else { - // remove matching file names - $_res = false; - if ($_handle = opendir($params['auto_base'])) - { - $_res = true; - while (false !== ($_filename = readdir($_handle))) { - if($_filename == '.' || $_filename == '..') { - continue; - } elseif (substr($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, 0, strlen($_tname)) == $_tname) { - $_res &= (bool)$smarty->_unlink($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, $params['exp_time']); - } - } - } - } - } - - return $_res; -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.rmdir.php b/htdocs/lib2/smarty/internals/core.rmdir.php deleted file mode 100644 index 2166c44d2..000000000 --- a/htdocs/lib2/smarty/internals/core.rmdir.php +++ /dev/null @@ -1,54 +0,0 @@ - keep root) - * WARNING: no tests, it will try to remove what you tell it! - * - * @param string $dirname - * @param integer $level - * @param integer $exp_time - * @return boolean - */ - -// $dirname, $level = 1, $exp_time = null - -function smarty_core_rmdir($params, &$smarty) -{ - if(!isset($params['level'])) { $params['level'] = 1; } - if(!isset($params['exp_time'])) { $params['exp_time'] = null; } - - if($_handle = @opendir($params['dirname'])) { - - while (false !== ($_entry = readdir($_handle))) { - if ($_entry != '.' && $_entry != '..') { - if (@is_dir($params['dirname'] . DIRECTORY_SEPARATOR . $_entry)) { - $_params = array( - 'dirname' => $params['dirname'] . DIRECTORY_SEPARATOR . $_entry, - 'level' => $params['level'] + 1, - 'exp_time' => $params['exp_time'] - ); - smarty_core_rmdir($_params, $smarty); - } - else { - $smarty->_unlink($params['dirname'] . DIRECTORY_SEPARATOR . $_entry, $params['exp_time']); - } - } - } - closedir($_handle); - } - - if ($params['level']) { - return @rmdir($params['dirname']); - } - return (bool)$_handle; - -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.run_insert_handler.php b/htdocs/lib2/smarty/internals/core.run_insert_handler.php deleted file mode 100644 index 71c384508..000000000 --- a/htdocs/lib2/smarty/internals/core.run_insert_handler.php +++ /dev/null @@ -1,71 +0,0 @@ -debugging) { - $_params = array(); - $_debug_start_time = smarty_core_get_microtime($_params, $smarty); - } - - if ($smarty->caching) { - $_arg_string = serialize($params['args']); - $_name = $params['args']['name']; - if (!isset($smarty->_cache_info['insert_tags'][$_name])) { - $smarty->_cache_info['insert_tags'][$_name] = array('insert', - $_name, - $smarty->_plugins['insert'][$_name][1], - $smarty->_plugins['insert'][$_name][2], - !empty($params['args']['script']) ? true : false); - } - return $smarty->_smarty_md5."{insert_cache $_arg_string}".$smarty->_smarty_md5; - } else { - if (isset($params['args']['script'])) { - $_params = array('resource_name' => $smarty->_dequote($params['args']['script'])); - require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); - if(!smarty_core_get_php_resource($_params, $smarty)) { - return false; - } - - if ($_params['resource_type'] == 'file') { - $smarty->_include($_params['php_resource'], true); - } else { - $smarty->_eval($_params['php_resource']); - } - unset($params['args']['script']); - } - - $_funcname = $smarty->_plugins['insert'][$params['args']['name']][0]; - $_content = $_funcname($params['args'], $smarty); - if ($smarty->debugging) { - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $smarty->_smarty_debug_info[] = array('type' => 'insert', - 'filename' => 'insert_'.$params['args']['name'], - 'depth' => $smarty->_inclusion_depth, - 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time); - } - - if (!empty($params['args']["assign"])) { - $smarty->assign($params['args']["assign"], $_content); - } else { - return $_content; - } - } -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.smarty_include_php.php b/htdocs/lib2/smarty/internals/core.smarty_include_php.php deleted file mode 100644 index 30c6e7654..000000000 --- a/htdocs/lib2/smarty/internals/core.smarty_include_php.php +++ /dev/null @@ -1,50 +0,0 @@ - $params['smarty_file']); - require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php'); - smarty_core_get_php_resource($_params, $smarty); - $_smarty_resource_type = $_params['resource_type']; - $_smarty_php_resource = $_params['php_resource']; - - if (!empty($params['smarty_assign'])) { - ob_start(); - if ($_smarty_resource_type == 'file') { - $smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']); - } else { - $smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']); - } - $smarty->assign($params['smarty_assign'], ob_get_contents()); - ob_end_clean(); - } else { - if ($_smarty_resource_type == 'file') { - $smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']); - } else { - $smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']); - } - } -} - - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.write_cache_file.php b/htdocs/lib2/smarty/internals/core.write_cache_file.php deleted file mode 100644 index fa3cdd746..000000000 --- a/htdocs/lib2/smarty/internals/core.write_cache_file.php +++ /dev/null @@ -1,96 +0,0 @@ -_cache_info['timestamp'] = time(); - if ($smarty->cache_lifetime > -1){ - // expiration set - $smarty->_cache_info['expires'] = $smarty->_cache_info['timestamp'] + $smarty->cache_lifetime; - } else { - // cache will never expire - $smarty->_cache_info['expires'] = -1; - } - - // collapse nocache.../nocache-tags - if (preg_match_all('!\{(/?)nocache\:[0-9a-f]{32}#\d+\}!', $params['results'], $match, PREG_PATTERN_ORDER)) { - // remove everything between every pair of outermost noache.../nocache-tags - // and replace it by a single nocache-tag - // this new nocache-tag will be replaced by dynamic contents in - // smarty_core_process_compiled_includes() on a cache-read - - $match_count = count($match[0]); - $results = preg_split('!(\{/?nocache\:[0-9a-f]{32}#\d+\})!', $params['results'], -1, PREG_SPLIT_DELIM_CAPTURE); - - $level = 0; - $j = 0; - for ($i=0, $results_count = count($results); $i < $results_count && $j < $match_count; $i++) { - if ($results[$i] == $match[0][$j]) { - // nocache tag - if ($match[1][$j]) { // closing tag - $level--; - unset($results[$i]); - } else { // opening tag - if ($level++ > 0) unset($results[$i]); - } - $j++; - } elseif ($level > 0) { - unset($results[$i]); - } - } - $params['results'] = implode('', $results); - } - $smarty->_cache_info['cache_serials'] = $smarty->_cache_serials; - - // prepend the cache header info into cache file - $_cache_info = serialize($smarty->_cache_info); - $params['results'] = strlen($_cache_info) . "\n" . $_cache_info . $params['results']; - - if (!empty($smarty->cache_handler_func)) { - // use cache_handler function - call_user_func_array($smarty->cache_handler_func, - array('write', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], $smarty->_cache_info['expires'])); - } else { - // use local cache file - - if(!@is_writable($smarty->cache_dir)) { - // cache_dir not writable, see if it exists - if(!@is_dir($smarty->cache_dir)) { - $smarty->trigger_error('the $cache_dir \'' . $smarty->cache_dir . '\' does not exist, or is not a directory.', E_USER_ERROR); - return false; - } - $smarty->trigger_error('unable to write to $cache_dir \'' . realpath($smarty->cache_dir) . '\'. Be sure $cache_dir is writable by the web server user.', E_USER_ERROR); - return false; - } - - $_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']); - $_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id); - $_params = array('filename' => $_cache_file, 'contents' => $params['results'], 'create_dirs' => true); - require_once(SMARTY_CORE_DIR . 'core.write_file.php'); - smarty_core_write_file($_params, $smarty); - return true; - } -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.write_compiled_include.php b/htdocs/lib2/smarty/internals/core.write_compiled_include.php deleted file mode 100644 index c14adb5f4..000000000 --- a/htdocs/lib2/smarty/internals/core.write_compiled_include.php +++ /dev/null @@ -1,91 +0,0 @@ -caching && \!\$this->_cache_including\)\: echo \'\{nocache\:('.$params['cache_serial'].')#(\d+)\}\'; endif;'; - $_tag_end = 'if \(\$this->caching && \!\$this->_cache_including\)\: echo \'\{/nocache\:(\\2)#(\\3)\}\'; endif;'; - - preg_match_all('!('.$_tag_start.'(.*)'.$_tag_end.')!Us', - $params['compiled_content'], $_match_source, PREG_SET_ORDER); - - // no nocache-parts found: done - if (count($_match_source)==0) return; - - // convert the matched php-code to functions - $_include_compiled = "_version.", created on ".strftime("%Y-%m-%d %H:%M:%S")."\n"; - $_include_compiled .= " compiled from " . strtr(urlencode($params['resource_name']), array('%2F'=>'/', '%3A'=>':')) . " */\n\n"; - - $_compile_path = $params['include_file_path']; - - $smarty->_cache_serials[$_compile_path] = $params['cache_serial']; - $_include_compiled .= "\$this->_cache_serials['".$_compile_path."'] = '".$params['cache_serial']."';\n\n?>"; - - $_include_compiled .= $params['plugins_code']; - $_include_compiled .= "= 5.0) ? '_smarty' : 'this'; - for ($_i = 0, $_for_max = count($_match_source); $_i < $_for_max; $_i++) { - $_match =& $_match_source[$_i]; - $source = $_match[4]; - if ($this_varname == '_smarty') { - /* rename $this to $_smarty in the sourcecode */ - $tokens = token_get_all('\n"; - - $_params = array('filename' => $_compile_path, - 'contents' => $_include_compiled, 'create_dirs' => true); - - require_once(SMARTY_CORE_DIR . 'core.write_file.php'); - smarty_core_write_file($_params, $smarty); - return true; -} - - -?> diff --git a/htdocs/lib2/smarty/internals/core.write_compiled_resource.php b/htdocs/lib2/smarty/internals/core.write_compiled_resource.php deleted file mode 100644 index b902eff3c..000000000 --- a/htdocs/lib2/smarty/internals/core.write_compiled_resource.php +++ /dev/null @@ -1,35 +0,0 @@ -compile_dir)) { - // compile_dir not writable, see if it exists - if(!@is_dir($smarty->compile_dir)) { - $smarty->trigger_error('the $compile_dir \'' . $smarty->compile_dir . '\' does not exist, or is not a directory.', E_USER_ERROR); - return false; - } - $smarty->trigger_error('unable to write to $compile_dir \'' . realpath($smarty->compile_dir) . '\'. Be sure $compile_dir is writable by the web server user.', E_USER_ERROR); - return false; - } - - $_params = array('filename' => $params['compile_path'], 'contents' => $params['compiled_content'], 'create_dirs' => true); - require_once(SMARTY_CORE_DIR . 'core.write_file.php'); - smarty_core_write_file($_params, $smarty); - return true; -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/internals/core.write_file.php b/htdocs/lib2/smarty/internals/core.write_file.php deleted file mode 100644 index 8a3a3b398..000000000 --- a/htdocs/lib2/smarty/internals/core.write_file.php +++ /dev/null @@ -1,54 +0,0 @@ - $_dirname); - require_once(SMARTY_CORE_DIR . 'core.create_dir_structure.php'); - smarty_core_create_dir_structure($_params, $smarty); - } - - // write to tmp file, then rename it to avoid file locking race condition - $_tmp_file = tempnam($_dirname, 'wrt'); - - if (!($fd = @fopen($_tmp_file, 'wb'))) { - $_tmp_file = $_dirname . DIRECTORY_SEPARATOR . uniqid('wrt'); - if (!($fd = @fopen($_tmp_file, 'wb'))) { - $smarty->trigger_error("problem writing temporary file '$_tmp_file'"); - return false; - } - } - - fwrite($fd, $params['contents']); - fclose($fd); - - if (DIRECTORY_SEPARATOR == '\\' || !@rename($_tmp_file, $params['filename'])) { - // On platforms and filesystems that cannot overwrite with rename() - // delete the file before renaming it -- because windows always suffers - // this, it is short-circuited to avoid the initial rename() attempt - @unlink($params['filename']); - @rename($_tmp_file, $params['filename']); - } - @chmod($params['filename'], $smarty->_file_perms); - - return true; -} - -/* vim: set expandtab: */ - -?> \ No newline at end of file diff --git a/htdocs/lib2/smarty/internals/index.html b/htdocs/lib2/smarty/internals/index.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/htdocs/lib2/smarty/ocplugins/block.nocache.php b/htdocs/lib2/smarty/ocplugins/block.nocache.php deleted file mode 100644 index 4a617d39b..000000000 --- a/htdocs/lib2/smarty/ocplugins/block.nocache.php +++ /dev/null @@ -1,50 +0,0 @@ -" =$ [...]}...{/nocache} - */ -function smarty_block_nocache($param, $content, &$smarty, &$repeat) -{ - static $counter = array(); - - if ($repeat) - { - if (!isset($param['name'])) - return $content; - - $name = $param['name']; - unset($param['name']); - - if (!isset($counter[$name])) - $counter[$name] = 0; - $counter[$name]++; - - if ($smarty->_cache_including) - { - $param = isset($smarty->_cache_info['cached_vars'][$name][$counter[$name]]) ? $smarty->_cache_info['cached_vars'][$name][$counter[$name]] : array(); - } - else - { - $smarty->_cache_info['cached_vars'][$name][$counter[$name]] = $param; - } - - foreach ($param AS $k => $v) - { - $smarty->_tpl_vars[$k] = $v; - } - } - - return $content; -} diff --git a/htdocs/lib2/smarty/ocplugins/block.t.php b/htdocs/lib2/smarty/ocplugins/block.t.php deleted file mode 100644 index 22ece26d6..000000000 --- a/htdocs/lib2/smarty/ocplugins/block.t.php +++ /dev/null @@ -1,85 +0,0 @@ -assign($params['var'], false); - return ''; - } - - $retval = array_search($params['needle'], $params['haystack']); - $smarty->assign($params['var'], $retval); - return ''; -} diff --git a/htdocs/lib2/smarty/ocplugins/function.coordinput.php b/htdocs/lib2/smarty/ocplugins/function.coordinput.php deleted file mode 100644 index 18ec93b3b..000000000 --- a/htdocs/lib2/smarty/ocplugins/function.coordinput.php +++ /dev/null @@ -1,72 +0,0 @@ -'; - if ($bLatNeg) - { - $retval .= ''; - $retval .= ''; - } - else - { - $retval .= ''; - $retval .= ''; - } - $retval .= ' '; - - $retval .= '° '; - $retval .= ' \''; - - $retval .= '
'; - - $retval .= ' '; - - $retval .= '° '; - $retval .= ' \''; - - return $retval; -} diff --git a/htdocs/lib2/smarty/ocplugins/function.season.php b/htdocs/lib2/smarty/ocplugins/function.season.php deleted file mode 100644 index 2cac0134d..000000000 --- a/htdocs/lib2/smarty/ocplugins/function.season.php +++ /dev/null @@ -1,42 +0,0 @@ - $nTimestamp) - return $params['winter']; //''; - else if (strtotime($seasons[$nIndex][1]) > $nTimestamp) - return $params['spring']; //'resource2/ocstyle/css/seasons/style_spring.css'; - else if (strtotime($seasons[$nIndex][2]) > $nTimestamp) - return $params['summer']; //'resource2/ocstyle/css/seasons/style_summer.css'; - else if (strtotime($seasons[$nIndex][3]) > $nTimestamp) - return $params['autumn']; //'resource2/ocstyle/css/seasons/style_autumn.css'; - } - - return ''; -} diff --git a/htdocs/lib2/smarty/ocplugins/index.html b/htdocs/lib2/smarty/ocplugins/index.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/htdocs/lib2/smarty/ocplugins/modifier.hyperlink.php b/htdocs/lib2/smarty/ocplugins/modifier.hyperlink.php deleted file mode 100644 index a4aea0dd3..000000000 --- a/htdocs/lib2/smarty/ocplugins/modifier.hyperlink.php +++ /dev/null @@ -1,58 +0,0 @@ - - * Name: hyperlink
- * Example: {$text|hyperlink} - * @version 1.0 - * @param string - * @return string - */ -function smarty_modifier_hyperlink($text) -{ - $texti = mb_strtolower($text); - $retval = ''; - $curpos = 0; - $starthttp = mb_strpos($texti, 'http://', $curpos); - $starthttps = mb_strpos($texti, 'https://', $curpos); - if ($starthttp === false || ($starthttps !== false && $starthttps < $starthttp)) - $starthttp = $starthttps; - $endhttp = false; - while (($starthttp !== false) || ($endhttp >= mb_strlen($text))) - { - $endhttp1 = mb_strpos($text, ' ', $starthttp); if ($endhttp1 === false) $endhttp1 = mb_strlen($text); - $endhttp2 = mb_strpos($text, "\n", $starthttp); if ($endhttp2 === false) $endhttp2 = mb_strlen($text); - $endhttp3 = mb_strpos($text, "\r", $starthttp); if ($endhttp3 === false) $endhttp3 = mb_strlen($text); - $endhttp4 = mb_strpos($text, '<', $starthttp); if ($endhttp4 === false) $endhttp4 = mb_strlen($text); - $endhttp5 = mb_strpos($text, '] ', $starthttp); if ($endhttp5 === false) $endhttp5 = mb_strlen($text); - $endhttp6 = mb_strpos($text, ')', $starthttp); if ($endhttp6 === false) $endhttp6 = mb_strlen($text); - $endhttp7 = mb_strpos($text, '. ', $starthttp); if ($endhttp7 === false) $endhttp7 = mb_strlen($text); - - $endhttp = min($endhttp1, $endhttp2, $endhttp3, $endhttp4, $endhttp5, $endhttp6, $endhttp7); - - $retval .= mb_substr($text, $curpos, $starthttp - $curpos); - $url = mb_substr($text, $starthttp, $endhttp - $starthttp); - $retval .= '
' . $url . ''; - - $curpos = $endhttp ; - if ($curpos >= mb_strlen($text)) break; - $starthttp = mb_strpos(mb_strtolower($text), 'http://', $curpos); - $starthttps = mb_strpos($texti, 'https://', $curpos); - if ($starthttp === false || ($starthttps !== false && $starthttps < $starthttp)) - $starthttp = $starthttps; - } - - $retval .= mb_substr($text, $curpos); - - return $retval; -} - -/* vim: set expandtab: */ diff --git a/htdocs/lib2/smarty/ocplugins/modifier.rot13html.php b/htdocs/lib2/smarty/ocplugins/modifier.rot13html.php deleted file mode 100644 index 8e42283f6..000000000 --- a/htdocs/lib2/smarty/ocplugins/modifier.rot13html.php +++ /dev/null @@ -1,68 +0,0 @@ - - * Name: rot13html
- * Example: {$text|rot13html} - * @version 1.0 - * @param string - * @return string - */ -function smarty_modifier_rot13html($str) -{ - $delimiter[0][0] = '&'; // start-char - $delimiter[0][1] = ';'; // end-char - $delimiter[1][0] = '<'; - $delimiter[1][1] = '>'; - $delimiter[2][0] = '['; - $delimiter[2][1] = ']'; - - $retval = ''; - - while (mb_strlen($retval) < mb_strlen($str)) - { - $nNextStart = false; - $sNextEndChar = ''; - foreach ($delimiter AS $del) - { - $nThisStart = mb_strpos($str, $del[0], mb_strlen($retval)); - - if ($nThisStart !== false) - if (($nNextStart > $nThisStart) || ($nNextStart === false)) - { - $nNextStart = $nThisStart; - $sNextEndChar = $del[1]; - } - } - - if ($nNextStart === false) - { - $retval .= str_rot13(mb_substr($str, mb_strlen($retval), mb_strlen($str) - mb_strlen($retval))); - } - else - { - // crypted part - $retval .= str_rot13(mb_substr($str, mb_strlen($retval), $nNextStart - mb_strlen($retval))); - - // uncrypted part - $nNextEnd = mb_strpos($str, $sNextEndChar, $nNextStart); - - if ($nNextEnd === false) - $retval .= mb_substr($str, $nNextStart, mb_strlen($str) - mb_strlen($retval)); - else - $retval .= mb_substr($str, $nNextStart, $nNextEnd - $nNextStart + 1); - } - } - - return $retval; -} - -/* vim: set expandtab: */ diff --git a/htdocs/lib2/smarty/ocplugins/outputfilter.session.php b/htdocs/lib2/smarty/ocplugins/outputfilter.session.php deleted file mode 100644 index 51d72606b..000000000 --- a/htdocs/lib2/smarty/ocplugins/outputfilter.session.php +++ /dev/null @@ -1,55 +0,0 @@ -/i', '', $text); - $text = preg_replace_callback('/href[\s]*=[\s]*([\'"])([^\'"]*\\.php[^\'"]*)([\'"])/i', 'html_insert_sid_callback', $text); - } - } - return $text; -} - -function html_insert_sid_callback($match) -{ - global $opt; - - /* match[1] = ' oder " - * match[2] = url - * match[3] = ' oder " - */ - - // dont add to absolute hyperlinks - if (preg_match('/^(https?:\\/\\/|ftp:\\/\\/)/', $match[2])) - { - if (substr($match[2], 0, strlen($opt['page']['absolute_http_url'])) != $opt['page']['absolute_http_url'] && - substr($match[2], 0, strlen($opt['page']['absolute_https_url'])) != $opt['page']['absolute_https_url']) - return $match[0]; - } - - if (strpos($match[2], '?') === false) - return 'href=' . $match[1] . $match[2] . '?' . urlencode(session_name()) . '=' . urlencode(session_id()) . $match[3]; - else - return 'href=' . $match[1] . $match[2] . '&' . urlencode(session_name()) . '=' . urlencode(session_id()) . $match[3]; -} diff --git a/htdocs/lib2/smarty/ocplugins/prefilter.t.php b/htdocs/lib2/smarty/ocplugins/prefilter.t.php deleted file mode 100644 index 5bc09836d..000000000 --- a/htdocs/lib2/smarty/ocplugins/prefilter.t.php +++ /dev/null @@ -1,261 +0,0 @@ - plural=][ 1=[ 2=[...]]]}{/t} - * - * ... number=1 means "use singluar", number!=1 means "use plural" - * ... plural version of - * ... values of parameters (can be string, number or smarty-variable with modifiers) - * ... text that has to be translated. If no translation exists, this text will be used - * parameters can be used with %1 ... %n - * - * Expamle: - * {t 1="text"}my %1{/t} - * - * If no plural is given, the block will be replaced by the appropriate translation - * If plural is given, and will be translated, but block will persist and - * processed by block.t at rendering time. - * - * Original idea by Sagi Bashari - * see http://sourceforge.net/projects/smarty-gettext/ - * - * Concept was heavily modified by Opencaching.de - * - * Copyright 2007 Opencaching.de - */ - -/* - * Smarty plugin for gettext compilation - * - * Find all {t}...{/t} and translate its input with gettext - * - */ -function smarty_prefilter_t($source, &$smarty) -{ - $output = ''; - $output_start = 0; - - $end = 0; - while (($start = smarty_prefilter_t_strpos_multi($source, array($smarty->left_delimiter . 't ', $smarty->left_delimiter . 't' . $smarty->right_delimiter), $end)) !== false) - { - $end = mb_strpos($source, $smarty->left_delimiter . '/t' . $smarty->right_delimiter, $start); - $block_t = mb_substr($source, $start, $end - $start); - - $messgage_start = mb_strrpos($block_t, '}') + 1; - $block_t = smarty_prefilter_t_process_block(mb_substr($block_t, 0, $messgage_start), mb_substr($block_t, $messgage_start), $smarty, 0); - - $output .= mb_substr($source, $output_start, $start - $output_start); - $output_start = $end + mb_strlen($smarty->left_delimiter . $smarty->right_delimiter) + 2; - - $output .= $block_t; - } - $output .= mb_substr($source, $output_start); - - return $output; -} - -/* $block ... {t[ a=$a|nbsp b="a" ...]} - * - */ -function smarty_prefilter_t_process_block($block, $message, &$smarty, $line) -{ - if ($message != '') - { - $start_attr = mb_strpos($block, ' '); - if ($start_attr !== false) - { - if ((mb_substr($block, 0, 1) != $smarty->left_delimiter) || $start_attr == 1 || mb_substr($block, -1, 1) != $smarty->right_delimiter) - $smarty->_syntax_error("internal processing error: '$block'", E_USER_ERROR, __FILE__, __LINE__); - $block = mb_substr($block, $start_attr + 1, mb_strlen($block) - $start_attr - 2); - - // parse the attributes - $attrs = smarty_prefilter_t_parse_attrs($block, $smarty); - - if (isset($attrs['plural']) && isset($attrs['count'])) - { - $message = smarty_prefilter_t_gettext($message, array(), $smarty, $line); - - if ((mb_substr($attrs['plural'], 0, 1) == '"') && mb_substr($attrs['plural'], -1, 1) == '"') - $attrs['plural'] = mb_substr($attrs['plural'], 1, mb_strlen($attrs['plural'])-2); - $attrs['plural'] = smarty_prefilter_t_gettext($attrs['plural'], array(), $smarty, $line); - - // rebuild block with replaced plural - $block = ''; - foreach ($attrs AS $k => $v) - { - if ($block != '') $block .= ' '; - $block .= $k . '=' . $v; - } - - // pass it to block.t - return $smarty->left_delimiter . 't ' . $block . $smarty->right_delimiter . $message . $smarty->left_delimiter . '/t' . $smarty->right_delimiter; - } - unset($attrs['plural']); - unset($attrs['count']); - - $message = smarty_prefilter_t_gettext($message, $attrs, $smarty, $line); - } - else - { - $message = smarty_prefilter_t_gettext($message, array(), $smarty, $line); - } - } - - return $message; -} - -/** - * Parse attribute string - * copied from Smarty_comiler.class.php - * we need the same source, expect _parse_vars_props at the end - * - * @param string $tag_args - * @return array - */ -function smarty_prefilter_t_parse_attrs($tag_args, &$smarty) -{ - - /* Tokenize tag attributes. */ - preg_match_all('~(?:' . $smarty->_obj_call_regexp . '|' . $smarty->_qstr_regexp . ' | (?>[^"\'=\s]+) - )+ | - [=] - ~x', $tag_args, $match); - $tokens = $match[0]; - - $attrs = array(); - /* Parse state: - 0 - expecting attribute name - 1 - expecting '=' - 2 - expecting attribute value (not '=') */ - $state = 0; - - foreach ($tokens as $token) { - switch ($state) { - case 0: - /* If the token is a valid identifier, we set attribute name - and go to state 1. */ - if (preg_match('~^\w+$~', $token)) { - $attr_name = $token; - $state = 1; - } else - $smarty->_syntax_error("invalid attribute name: '$token'", E_USER_ERROR, __FILE__, __LINE__); - break; - - case 1: - /* If the token is '=', then we go to state 2. */ - if ($token == '=') { - $state = 2; - } else - $smarty->_syntax_error("expecting '=' after attribute name '$last_token'", E_USER_ERROR, __FILE__, __LINE__); - break; - - case 2: - /* If token is not '=', we set the attribute value and go to - state 0. */ - if ($token != '=') { - /* We booleanize the token if it's a non-quoted possible - boolean value. */ - if (preg_match('~^(on|yes|true)$~', $token)) { - $token = 'true'; - } else if (preg_match('~^(off|no|false)$~', $token)) { - $token = 'false'; - } else if ($token == 'null') { - $token = 'null'; - } else if (preg_match('~^' . $smarty->_num_const_regexp . '|0[xX][0-9a-fA-F]+$~', $token)) { - /* treat integer literally */ - } else if (!preg_match('~^' . $smarty->_obj_call_regexp . '|' . $smarty->_var_regexp . '(?:' . $smarty->_mod_regexp . ')*$~', $token)) { - /* treat as a string, double-quote it escaping quotes */ - $token = '"'.addslashes($token).'"'; - } - - $attrs[$attr_name] = $token; - $state = 0; - } else - $smarty->_syntax_error("'=' cannot be an attribute value", E_USER_ERROR, __FILE__, __LINE__); - break; - } - $last_token = $token; - } - - if($state != 0) { - if($state == 1) { - $smarty->_syntax_error("expecting '=' after attribute name '$last_token'", E_USER_ERROR, __FILE__, __LINE__); - } else { - $smarty->_syntax_error("missing attribute value", E_USER_ERROR, __FILE__, __LINE__); - } - } - - // this call would translate the attrs to php code - // we dont need it, because its a prefilter ... - //$smarty->_parse_vars_props($attrs); - - return $attrs; -} - -function smarty_prefilter_t_strpos_multi($haystack, $needles) -{ - $arg = func_get_args(); - $start = false; - - foreach ($needles AS $needle) - { - $thisstart = mb_strpos($haystack, $needle, $arg[2]); - if ($start == false) - $start = $thisstart; - else if ($thisstart == false) - { - } - else if ($start > $thisstart) - $start = $thisstart; - } - - return $start; -} - -function smarty_prefilter_t_gettext($message, $attrs, &$smarty, $line) -{ - global $opt, $translate; - - if (!isset($translate)) - return $message; - - $trans = $translate->t($message, $opt['template']['style'], '', 0); - - // TODO concept escapement - if (isset($attrs['escape'])) unset($attrs['escape']); - if (isset($attrs['plural'])) unset($attrs['plural']); - if (isset($attrs['count'])) unset($attrs['count']); - - // replace params - $number = 1; - foreach ($attrs AS $attr) - { - if (is_numeric($attr)) - $trans = mb_ereg_replace('%' . $number, $attr, $trans); - else - $trans = mb_ereg_replace('%' . $number, $smarty->left_delimiter . $attr . $smarty->right_delimiter, $trans); - - $number++; - } - - return $trans; -} diff --git a/htdocs/lib2/smarty/plugins/block.textformat.php b/htdocs/lib2/smarty/plugins/block.textformat.php deleted file mode 100644 index 8cd010acb..000000000 --- a/htdocs/lib2/smarty/plugins/block.textformat.php +++ /dev/null @@ -1,103 +0,0 @@ - - * Name: textformat
- * Purpose: format text a certain way with preset styles - * or custom wrap/indent settings
- * @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat} - * (Smarty online manual) - * @param array - *
- * Params:   style: string (email)
- *           indent: integer (0)
- *           wrap: integer (80)
- *           wrap_char string ("\n")
- *           indent_char: string (" ")
- *           wrap_boundary: boolean (true)
- * 
- * @author Monte Ohrt - * @param string contents of the block - * @param Smarty clever simulation of a method - * @return string string $content re-formatted - */ -function smarty_block_textformat($params, $content, &$smarty) -{ - if (is_null($content)) { - return; - } - - $style = null; - $indent = 0; - $indent_first = 0; - $indent_char = ' '; - $wrap = 80; - $wrap_char = "\n"; - $wrap_cut = false; - $assign = null; - - foreach ($params as $_key => $_val) { - switch ($_key) { - case 'style': - case 'indent_char': - case 'wrap_char': - case 'assign': - $$_key = (string)$_val; - break; - - case 'indent': - case 'indent_first': - case 'wrap': - $$_key = (int)$_val; - break; - - case 'wrap_cut': - $$_key = (bool)$_val; - break; - - default: - $smarty->trigger_error("textformat: unknown attribute '$_key'"); - } - } - - if ($style == 'email') { - $wrap = 72; - } - - // split into paragraphs - $_paragraphs = preg_split('![\r\n][\r\n]!',$content); - $_output = ''; - - for($_x = 0, $_y = count($_paragraphs); $_x < $_y; $_x++) { - if ($_paragraphs[$_x] == '') { - continue; - } - // convert mult. spaces & special chars to single space - $_paragraphs[$_x] = preg_replace(array('!\s+!','!(^\s+)|(\s+$)!'), array(' ',''), $_paragraphs[$_x]); - // indent first line - if($indent_first > 0) { - $_paragraphs[$_x] = str_repeat($indent_char, $indent_first) . $_paragraphs[$_x]; - } - // wordwrap sentences - $_paragraphs[$_x] = wordwrap($_paragraphs[$_x], $wrap - $indent, $wrap_char, $wrap_cut); - // indent lines - if($indent > 0) { - $_paragraphs[$_x] = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraphs[$_x]); - } - } - $_output = implode($wrap_char . $wrap_char, $_paragraphs); - - return $assign ? $smarty->assign($assign, $_output) : $_output; - -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/plugins/compiler.assign.php b/htdocs/lib2/smarty/plugins/compiler.assign.php deleted file mode 100644 index abef377f8..000000000 --- a/htdocs/lib2/smarty/plugins/compiler.assign.php +++ /dev/null @@ -1,40 +0,0 @@ - - * Name: assign
- * Purpose: assign a value to a template variable - * @link http://smarty.php.net/manual/en/language.custom.functions.php#LANGUAGE.FUNCTION.ASSIGN {assign} - * (Smarty online manual) - * @author Monte Ohrt (initial author) - * @author messju mohr (conversion to compiler function) - * @param string containing var-attribute and value-attribute - * @param Smarty_Compiler - */ -function smarty_compiler_assign($tag_attrs, &$compiler) -{ - $_params = $compiler->_parse_attrs($tag_attrs); - - if (!isset($_params['var'])) { - $compiler->_syntax_error("assign: missing 'var' parameter", E_USER_WARNING); - return; - } - - if (!isset($_params['value'])) { - $compiler->_syntax_error("assign: missing 'value' parameter", E_USER_WARNING); - return; - } - - return "\$this->assign({$_params['var']}, {$_params['value']});"; -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/plugins/function.assign_debug_info.php b/htdocs/lib2/smarty/plugins/function.assign_debug_info.php deleted file mode 100644 index 654049876..000000000 --- a/htdocs/lib2/smarty/plugins/function.assign_debug_info.php +++ /dev/null @@ -1,40 +0,0 @@ - - * Name: assign_debug_info
- * Purpose: assign debug info to the template
- * @author Monte Ohrt - * @param array unused in this plugin, this plugin uses {@link Smarty::$_config}, - * {@link Smarty::$_tpl_vars} and {@link Smarty::$_smarty_debug_info} - * @param Smarty - */ -function smarty_function_assign_debug_info($params, &$smarty) -{ - $assigned_vars = $smarty->_tpl_vars; - ksort($assigned_vars); - if (@is_array($smarty->_config[0])) { - $config_vars = $smarty->_config[0]; - ksort($config_vars); - $smarty->assign("_debug_config_keys", array_keys($config_vars)); - $smarty->assign("_debug_config_vals", array_values($config_vars)); - } - - $included_templates = $smarty->_smarty_debug_info; - - $smarty->assign("_debug_keys", array_keys($assigned_vars)); - $smarty->assign("_debug_vals", array_values($assigned_vars)); - - $smarty->assign("_debug_tpls", $included_templates); -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/plugins/function.config_load.php b/htdocs/lib2/smarty/plugins/function.config_load.php deleted file mode 100644 index db89f638c..000000000 --- a/htdocs/lib2/smarty/plugins/function.config_load.php +++ /dev/null @@ -1,142 +0,0 @@ - - * Name: config_load
- * Purpose: load config file vars - * @link http://smarty.php.net/manual/en/language.function.config.load.php {config_load} - * (Smarty online manual) - * @author Monte Ohrt - * @author messju mohr (added use of resources) - * @param array Format: - *
- * array('file' => required config file name,
- *       'section' => optional config file section to load
- *       'scope' => local/parent/global
- *       'global' => overrides scope, setting to parent if true)
- * 
- * @param Smarty - */ -function smarty_function_config_load($params, &$smarty) -{ - if ($smarty->debugging) { - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $_debug_start_time = smarty_core_get_microtime($_params, $smarty); - } - - $_file = isset($params['file']) ? $smarty->_dequote($params['file']) : null; - $_section = isset($params['section']) ? $smarty->_dequote($params['section']) : null; - $_scope = isset($params['scope']) ? $smarty->_dequote($params['scope']) : 'global'; - $_global = isset($params['global']) ? $smarty->_dequote($params['global']) : false; - - if (!isset($_file) || strlen($_file) == 0) { - $smarty->trigger_error("missing 'file' attribute in config_load tag", E_USER_ERROR, __FILE__, __LINE__); - } - - if (isset($_scope)) { - if ($_scope != 'local' && - $_scope != 'parent' && - $_scope != 'global') { - $smarty->trigger_error("invalid 'scope' attribute value", E_USER_ERROR, __FILE__, __LINE__); - } - } else { - if ($_global) { - $_scope = 'parent'; - } else { - $_scope = 'local'; - } - } - - $_params = array('resource_name' => $_file, - 'resource_base_path' => $smarty->config_dir, - 'get_source' => false); - $smarty->_parse_resource_name($_params); - $_file_path = $_params['resource_type'] . ':' . $_params['resource_name']; - if (isset($_section)) - $_compile_file = $smarty->_get_compile_path($_file_path.'|'.$_section); - else - $_compile_file = $smarty->_get_compile_path($_file_path); - - if($smarty->force_compile || !file_exists($_compile_file)) { - $_compile = true; - } elseif ($smarty->compile_check) { - $_params = array('resource_name' => $_file, - 'resource_base_path' => $smarty->config_dir, - 'get_source' => false); - $_compile = $smarty->_fetch_resource_info($_params) && - $_params['resource_timestamp'] > filemtime($_compile_file); - } else { - $_compile = false; - } - - if($_compile) { - // compile config file - if(!is_object($smarty->_conf_obj)) { - require_once SMARTY_DIR . $smarty->config_class . '.class.php'; - $smarty->_conf_obj = new $smarty->config_class(); - $smarty->_conf_obj->overwrite = $smarty->config_overwrite; - $smarty->_conf_obj->booleanize = $smarty->config_booleanize; - $smarty->_conf_obj->read_hidden = $smarty->config_read_hidden; - $smarty->_conf_obj->fix_newlines = $smarty->config_fix_newlines; - } - - $_params = array('resource_name' => $_file, - 'resource_base_path' => $smarty->config_dir, - $_params['get_source'] = true); - if (!$smarty->_fetch_resource_info($_params)) { - return; - } - $smarty->_conf_obj->set_file_contents($_file, $_params['source_content']); - $_config_vars = array_merge($smarty->_conf_obj->get($_file), - $smarty->_conf_obj->get($_file, $_section)); - if(function_exists('var_export')) { - $_output = ''; - } else { - $_output = ''\\\'', '\\'=>'\\\\')) . '\'); ?>'; - } - $_params = (array('compile_path' => $_compile_file, 'compiled_content' => $_output, 'resource_timestamp' => $_params['resource_timestamp'])); - require_once(SMARTY_CORE_DIR . 'core.write_compiled_resource.php'); - smarty_core_write_compiled_resource($_params, $smarty); - } else { - include($_compile_file); - } - - if ($smarty->caching) { - $smarty->_cache_info['config'][$_file] = true; - } - - $smarty->_config[0]['vars'] = @array_merge($smarty->_config[0]['vars'], $_config_vars); - $smarty->_config[0]['files'][$_file] = true; - - if ($_scope == 'parent') { - $smarty->_config[1]['vars'] = @array_merge($smarty->_config[1]['vars'], $_config_vars); - $smarty->_config[1]['files'][$_file] = true; - } else if ($_scope == 'global') { - for ($i = 1, $for_max = count($smarty->_config); $i < $for_max; $i++) { - $smarty->_config[$i]['vars'] = @array_merge($smarty->_config[$i]['vars'], $_config_vars); - $smarty->_config[$i]['files'][$_file] = true; - } - } - - if ($smarty->debugging) { - $_params = array(); - require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); - $smarty->_smarty_debug_info[] = array('type' => 'config', - 'filename' => $_file.' ['.$_section.'] '.$_scope, - 'depth' => $smarty->_inclusion_depth, - 'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time); - } - -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/plugins/function.counter.php b/htdocs/lib2/smarty/plugins/function.counter.php deleted file mode 100644 index 1f26db5fb..000000000 --- a/htdocs/lib2/smarty/plugins/function.counter.php +++ /dev/null @@ -1,80 +0,0 @@ - - * Name: counter
- * Purpose: print out a counter value - * @author Monte Ohrt - * @link http://smarty.php.net/manual/en/language.function.counter.php {counter} - * (Smarty online manual) - * @param array parameters - * @param Smarty - * @return string|null - */ -function smarty_function_counter($params, &$smarty) -{ - static $counters = array(); - - $name = (isset($params['name'])) ? $params['name'] : 'default'; - if (!isset($counters[$name])) { - $counters[$name] = array( - 'start'=>1, - 'skip'=>1, - 'direction'=>'up', - 'count'=>1 - ); - } - $counter =& $counters[$name]; - - if (isset($params['start'])) { - $counter['start'] = $counter['count'] = (int)$params['start']; - } - - if (!empty($params['assign'])) { - $counter['assign'] = $params['assign']; - } - - if (isset($counter['assign'])) { - $smarty->assign($counter['assign'], $counter['count']); - } - - if (isset($params['print'])) { - $print = (bool)$params['print']; - } else { - $print = empty($counter['assign']); - } - - if ($print) { - $retval = $counter['count']; - } else { - $retval = null; - } - - if (isset($params['skip'])) { - $counter['skip'] = $params['skip']; - } - - if (isset($params['direction'])) { - $counter['direction'] = $params['direction']; - } - - if ($counter['direction'] == "down") - $counter['count'] -= $counter['skip']; - else - $counter['count'] += $counter['skip']; - - return $retval; - -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/plugins/function.cycle.php b/htdocs/lib2/smarty/plugins/function.cycle.php deleted file mode 100644 index fe78bb87d..000000000 --- a/htdocs/lib2/smarty/plugins/function.cycle.php +++ /dev/null @@ -1,102 +0,0 @@ - - * Name: cycle
- * Date: May 3, 2002
- * Purpose: cycle through given values
- * Input: - * - name = name of cycle (optional) - * - values = comma separated list of values to cycle, - * or an array of values to cycle - * (this can be left out for subsequent calls) - * - reset = boolean - resets given var to true - * - print = boolean - print var or not. default is true - * - advance = boolean - whether or not to advance the cycle - * - delimiter = the value delimiter, default is "," - * - assign = boolean, assigns to template var instead of - * printed. - * - * Examples:
- *
- * {cycle values="#eeeeee,#d0d0d0d"}
- * {cycle name=row values="one,two,three" reset=true}
- * {cycle name=row}
- * 
- * @link http://smarty.php.net/manual/en/language.function.cycle.php {cycle} - * (Smarty online manual) - * @author Monte Ohrt - * @author credit to Mark Priatel - * @author credit to Gerard - * @author credit to Jason Sweat - * @version 1.3 - * @param array - * @param Smarty - * @return string|null - */ -function smarty_function_cycle($params, &$smarty) -{ - static $cycle_vars; - - $name = (empty($params['name'])) ? 'default' : $params['name']; - $print = (isset($params['print'])) ? (bool)$params['print'] : true; - $advance = (isset($params['advance'])) ? (bool)$params['advance'] : true; - $reset = (isset($params['reset'])) ? (bool)$params['reset'] : false; - - if (!in_array('values', array_keys($params))) { - if(!isset($cycle_vars[$name]['values'])) { - $smarty->trigger_error("cycle: missing 'values' parameter"); - return; - } - } else { - if(isset($cycle_vars[$name]['values']) - && $cycle_vars[$name]['values'] != $params['values'] ) { - $cycle_vars[$name]['index'] = 0; - } - $cycle_vars[$name]['values'] = $params['values']; - } - - $cycle_vars[$name]['delimiter'] = (isset($params['delimiter'])) ? $params['delimiter'] : ','; - - if(is_array($cycle_vars[$name]['values'])) { - $cycle_array = $cycle_vars[$name]['values']; - } else { - $cycle_array = explode($cycle_vars[$name]['delimiter'],$cycle_vars[$name]['values']); - } - - if(!isset($cycle_vars[$name]['index']) || $reset ) { - $cycle_vars[$name]['index'] = 0; - } - - if (isset($params['assign'])) { - $print = false; - $smarty->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]); - } - - if($print) { - $retval = $cycle_array[$cycle_vars[$name]['index']]; - } else { - $retval = null; - } - - if($advance) { - if ( $cycle_vars[$name]['index'] >= count($cycle_array) -1 ) { - $cycle_vars[$name]['index'] = 0; - } else { - $cycle_vars[$name]['index']++; - } - } - - return $retval; -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/plugins/function.debug.php b/htdocs/lib2/smarty/plugins/function.debug.php deleted file mode 100644 index 43452307b..000000000 --- a/htdocs/lib2/smarty/plugins/function.debug.php +++ /dev/null @@ -1,35 +0,0 @@ - - * Name: debug
- * Date: July 1, 2002
- * Purpose: popup debug window - * @link http://smarty.php.net/manual/en/language.function.debug.php {debug} - * (Smarty online manual) - * @author Monte Ohrt - * @version 1.0 - * @param array - * @param Smarty - * @return string output from {@link Smarty::_generate_debug_output()} - */ -function smarty_function_debug($params, &$smarty) -{ - if (isset($params['output'])) { - $smarty->assign('_smarty_debug_output', $params['output']); - } - require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php'); - return smarty_core_display_debug_console(null, $smarty); -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/plugins/function.eval.php b/htdocs/lib2/smarty/plugins/function.eval.php deleted file mode 100644 index ff0472de2..000000000 --- a/htdocs/lib2/smarty/plugins/function.eval.php +++ /dev/null @@ -1,49 +0,0 @@ - - * Name: eval
- * Purpose: evaluate a template variable as a template
- * @link http://smarty.php.net/manual/en/language.function.eval.php {eval} - * (Smarty online manual) - * @author Monte Ohrt - * @param array - * @param Smarty - */ -function smarty_function_eval($params, &$smarty) -{ - - if (!isset($params['var'])) { - $smarty->trigger_error("eval: missing 'var' parameter"); - return; - } - - if($params['var'] == '') { - return; - } - - $smarty->_compile_source('evaluated template', $params['var'], $_var_compiled); - - ob_start(); - $smarty->_eval('?>' . $_var_compiled); - $_contents = ob_get_contents(); - ob_end_clean(); - - if (!empty($params['assign'])) { - $smarty->assign($params['assign'], $_contents); - } else { - return $_contents; - } -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/plugins/function.fetch.php b/htdocs/lib2/smarty/plugins/function.fetch.php deleted file mode 100644 index 81b1bfc6b..000000000 --- a/htdocs/lib2/smarty/plugins/function.fetch.php +++ /dev/null @@ -1,221 +0,0 @@ - - * Name: fetch
- * Purpose: fetch file, web or ftp data and display results - * @link http://smarty.php.net/manual/en/language.function.fetch.php {fetch} - * (Smarty online manual) - * @author Monte Ohrt - * @param array - * @param Smarty - * @return string|null if the assign parameter is passed, Smarty assigns the - * result to a template variable - */ -function smarty_function_fetch($params, &$smarty) -{ - if (empty($params['file'])) { - $smarty->_trigger_fatal_error("[plugin] parameter 'file' cannot be empty"); - return; - } - - $content = ''; - if ($smarty->security && !preg_match('!^(http|ftp)://!i', $params['file'])) { - $_params = array('resource_type' => 'file', 'resource_name' => $params['file']); - require_once(SMARTY_CORE_DIR . 'core.is_secure.php'); - if(!smarty_core_is_secure($_params, $smarty)) { - $smarty->_trigger_fatal_error('[plugin] (secure mode) fetch \'' . $params['file'] . '\' is not allowed'); - return; - } - - // fetch the file - if($fp = @fopen($params['file'],'r')) { - while(!feof($fp)) { - $content .= fgets ($fp,4096); - } - fclose($fp); - } else { - $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] . '\''); - return; - } - } else { - // not a local file - if(preg_match('!^http://!i',$params['file'])) { - // http fetch - if($uri_parts = parse_url($params['file'])) { - // set defaults - $host = $server_name = $uri_parts['host']; - $timeout = 30; - $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; - $agent = "Smarty Template Engine ".$smarty->_version; - $referer = ""; - $uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/'; - $uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : ''; - $_is_proxy = false; - if(empty($uri_parts['port'])) { - $port = 80; - } else { - $port = $uri_parts['port']; - } - if(!empty($uri_parts['user'])) { - $user = $uri_parts['user']; - } - if(!empty($uri_parts['pass'])) { - $pass = $uri_parts['pass']; - } - // loop through parameters, setup headers - foreach($params as $param_key => $param_value) { - switch($param_key) { - case "file": - case "assign": - case "assign_headers": - break; - case "user": - if(!empty($param_value)) { - $user = $param_value; - } - break; - case "pass": - if(!empty($param_value)) { - $pass = $param_value; - } - break; - case "accept": - if(!empty($param_value)) { - $accept = $param_value; - } - break; - case "header": - if(!empty($param_value)) { - if(!preg_match('![\w\d-]+: .+!',$param_value)) { - $smarty->_trigger_fatal_error("[plugin] invalid header format '".$param_value."'"); - return; - } else { - $extra_headers[] = $param_value; - } - } - break; - case "proxy_host": - if(!empty($param_value)) { - $proxy_host = $param_value; - } - break; - case "proxy_port": - if(!preg_match('!\D!', $param_value)) { - $proxy_port = (int) $param_value; - } else { - $smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'"); - return; - } - break; - case "agent": - if(!empty($param_value)) { - $agent = $param_value; - } - break; - case "referer": - if(!empty($param_value)) { - $referer = $param_value; - } - break; - case "timeout": - if(!preg_match('!\D!', $param_value)) { - $timeout = (int) $param_value; - } else { - $smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'"); - return; - } - break; - default: - $smarty->_trigger_fatal_error("[plugin] unrecognized attribute '".$param_key."'"); - return; - } - } - if(!empty($proxy_host) && !empty($proxy_port)) { - $_is_proxy = true; - $fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout); - } else { - $fp = fsockopen($server_name,$port,$errno,$errstr,$timeout); - } - - if(!$fp) { - $smarty->_trigger_fatal_error("[plugin] unable to fetch: $errstr ($errno)"); - return; - } else { - if($_is_proxy) { - fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n"); - } else { - fputs($fp, "GET $uri HTTP/1.0\r\n"); - } - if(!empty($host)) { - fputs($fp, "Host: $host\r\n"); - } - if(!empty($accept)) { - fputs($fp, "Accept: $accept\r\n"); - } - if(!empty($agent)) { - fputs($fp, "User-Agent: $agent\r\n"); - } - if(!empty($referer)) { - fputs($fp, "Referer: $referer\r\n"); - } - if(isset($extra_headers) && is_array($extra_headers)) { - foreach($extra_headers as $curr_header) { - fputs($fp, $curr_header."\r\n"); - } - } - if(!empty($user) && !empty($pass)) { - fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n"); - } - - fputs($fp, "\r\n"); - while(!feof($fp)) { - $content .= fgets($fp,4096); - } - fclose($fp); - $csplit = split("\r\n\r\n",$content,2); - - $content = $csplit[1]; - - if(!empty($params['assign_headers'])) { - $smarty->assign($params['assign_headers'],split("\r\n",$csplit[0])); - } - } - } else { - $smarty->_trigger_fatal_error("[plugin] unable to parse URL, check syntax"); - return; - } - } else { - // ftp fetch - if($fp = @fopen($params['file'],'r')) { - while(!feof($fp)) { - $content .= fgets ($fp,4096); - } - fclose($fp); - } else { - $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] .'\''); - return; - } - } - - } - - - if (!empty($params['assign'])) { - $smarty->assign($params['assign'],$content); - } else { - return $content; - } -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/plugins/function.html_checkboxes.php b/htdocs/lib2/smarty/plugins/function.html_checkboxes.php deleted file mode 100644 index ed8ad7f33..000000000 --- a/htdocs/lib2/smarty/plugins/function.html_checkboxes.php +++ /dev/null @@ -1,143 +0,0 @@ - - * Type: function
- * Name: html_checkboxes
- * Date: 24.Feb.2003
- * Purpose: Prints out a list of checkbox input types
- * Input:
- * - name (optional) - string default "checkbox" - * - values (required) - array - * - options (optional) - associative array - * - checked (optional) - array default not set - * - separator (optional) - ie
or   - * - output (optional) - the output next to each checkbox - * - assign (optional) - assign the output as an array to this variable - * Examples: - *
- * {html_checkboxes values=$ids output=$names}
- * {html_checkboxes values=$ids name='box' separator='
' output=$names} - * {html_checkboxes values=$ids checked=$checked separator='
' output=$names} - *
- * @link http://smarty.php.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} - * (Smarty online manual) - * @author Christopher Kvarme - * @author credits to Monte Ohrt - * @version 1.0 - * @param array - * @param Smarty - * @return string - * @uses smarty_function_escape_special_chars() - */ -function smarty_function_html_checkboxes($params, &$smarty) -{ - require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); - - $name = 'checkbox'; - $values = null; - $options = null; - $selected = null; - $separator = ''; - $labels = true; - $output = null; - - $extra = ''; - - foreach($params as $_key => $_val) { - switch($_key) { - case 'name': - case 'separator': - $$_key = $_val; - break; - - case 'labels': - $$_key = (bool)$_val; - break; - - case 'options': - $$_key = (array)$_val; - break; - - case 'values': - case 'output': - $$_key = array_values((array)$_val); - break; - - case 'checked': - case 'selected': - $selected = array_map('strval', array_values((array)$_val)); - break; - - case 'checkboxes': - $smarty->trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', E_USER_WARNING); - $options = (array)$_val; - break; - - case 'assign': - break; - - default: - if(!is_array($_val)) { - $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; - } else { - $smarty->trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE); - } - break; - } - } - - if (!isset($options) && !isset($values)) - return ''; /* raise error here? */ - - settype($selected, 'array'); - $_html_result = array(); - - if (isset($options)) { - - foreach ($options as $_key=>$_val) - $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels); - - - } else { - foreach ($values as $_i=>$_key) { - $_val = isset($output[$_i]) ? $output[$_i] : ''; - $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels); - } - - } - - if(!empty($params['assign'])) { - $smarty->assign($params['assign'], $_html_result); - } else { - return implode("\n",$_html_result); - } - -} - -function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels) { - $_output = ''; - if ($labels) $_output .= ''; - $_output .= $separator; - - return $_output; -} - -?> diff --git a/htdocs/lib2/smarty/plugins/function.html_image.php b/htdocs/lib2/smarty/plugins/function.html_image.php deleted file mode 100644 index 9abae72ef..000000000 --- a/htdocs/lib2/smarty/plugins/function.html_image.php +++ /dev/null @@ -1,142 +0,0 @@ - - * Name: html_image
- * Date: Feb 24, 2003
- * Purpose: format HTML tags for the image
- * Input:
- * - file = file (and path) of image (required) - * - height = image height (optional, default actual height) - * - width = image width (optional, default actual width) - * - basedir = base directory for absolute paths, default - * is environment variable DOCUMENT_ROOT - * - path_prefix = prefix for path output (optional, default empty) - * - * Examples: {html_image file="/images/masthead.gif"} - * Output: - * @link http://smarty.php.net/manual/en/language.function.html.image.php {html_image} - * (Smarty online manual) - * @author Monte Ohrt - * @author credits to Duda - wrote first image function - * in repository, helped with lots of functionality - * @version 1.0 - * @param array - * @param Smarty - * @return string - * @uses smarty_function_escape_special_chars() - */ -function smarty_function_html_image($params, &$smarty) -{ - require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); - - $alt = ''; - $file = ''; - $height = ''; - $width = ''; - $extra = ''; - $prefix = ''; - $suffix = ''; - $path_prefix = ''; - $server_vars = ($smarty->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS']; - $basedir = isset($server_vars['DOCUMENT_ROOT']) ? $server_vars['DOCUMENT_ROOT'] : ''; - foreach($params as $_key => $_val) { - switch($_key) { - case 'file': - case 'height': - case 'width': - case 'dpi': - case 'path_prefix': - case 'basedir': - $$_key = $_val; - break; - - case 'alt': - if(!is_array($_val)) { - $$_key = smarty_function_escape_special_chars($_val); - } else { - $smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); - } - break; - - case 'link': - case 'href': - $prefix = ''; - $suffix = ''; - break; - - default: - if(!is_array($_val)) { - $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; - } else { - $smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); - } - break; - } - } - - if (empty($file)) { - $smarty->trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE); - return; - } - - if (substr($file,0,1) == '/') { - $_image_path = $basedir . $file; - } else { - $_image_path = $file; - } - - if(!isset($params['width']) || !isset($params['height'])) { - if(!$_image_data = @getimagesize($_image_path)) { - if(!file_exists($_image_path)) { - $smarty->trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE); - return; - } else if(!is_readable($_image_path)) { - $smarty->trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE); - return; - } else { - $smarty->trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE); - return; - } - } - if ($smarty->security && - ($_params = array('resource_type' => 'file', 'resource_name' => $_image_path)) && - (require_once(SMARTY_CORE_DIR . 'core.is_secure.php')) && - (!smarty_core_is_secure($_params, $smarty)) ) { - $smarty->trigger_error("html_image: (secure) '$_image_path' not in secure directory", E_USER_NOTICE); - } - - if(!isset($params['width'])) { - $width = $_image_data[0]; - } - if(!isset($params['height'])) { - $height = $_image_data[1]; - } - - } - - if(isset($params['dpi'])) { - if(strstr($server_vars['HTTP_USER_AGENT'], 'Mac')) { - $dpi_default = 72; - } else { - $dpi_default = 96; - } - $_resize = $dpi_default/$params['dpi']; - $width = round($width * $_resize); - $height = round($height * $_resize); - } - - return $prefix . ''.$alt.'' . $suffix; -} - -/* vim: set expandtab: */ - -?> diff --git a/htdocs/lib2/smarty/plugins/function.html_options.php b/htdocs/lib2/smarty/plugins/function.html_options.php deleted file mode 100644 index cebadde47..000000000 --- a/htdocs/lib2/smarty/plugins/function.html_options.php +++ /dev/null @@ -1,122 +0,0 @@ - - * Name: html_options
- * Input:
- * - name (optional) - string default "select" - * - values (required if no options supplied) - array - * - options (required if no values supplied) - associative array - * - selected (optional) - string default not set - * - output (required if not options supplied) - array - * Purpose: Prints the list of