From bdac1cb2e19f1bae7e8a9ecf52d42c9cf60cb11f Mon Sep 17 00:00:00 2001 From: Uwe Tews Date: Sat, 18 Oct 2014 00:53:39 +0200 Subject: [PATCH] Upload 3.1.20 --- composer.json | 2 +- libs/Smarty.class.php | 4 +- libs/change_log.txt | 2390 +++++++++ libs/libs/Smarty.class.php | 1674 ++++++ libs/libs/SmartyBC.class.php | 467 ++ libs/libs/debug.tpl | 137 + libs/libs/plugins/block.textformat.php | 110 + libs/libs/plugins/function.counter.php | 78 + libs/libs/plugins/function.cycle.php | 107 + libs/libs/plugins/function.fetch.php | 221 + .../libs/plugins/function.html_checkboxes.php | 237 + libs/libs/plugins/function.html_image.php | 163 + libs/libs/plugins/function.html_options.php | 196 + libs/libs/plugins/function.html_radios.php | 221 + .../plugins/function.html_select_date.php | 387 ++ .../plugins/function.html_select_time.php | 364 ++ libs/libs/plugins/function.html_table.php | 176 + libs/libs/plugins/function.mailto.php | 155 + libs/libs/plugins/function.math.php | 91 + libs/libs/plugins/modifier.capitalize.php | 90 + libs/libs/plugins/modifier.date_format.php | 65 + .../libs/plugins/modifier.debug_print_var.php | 104 + libs/libs/plugins/modifier.escape.php | 198 + libs/libs/plugins/modifier.regex_replace.php | 57 + libs/libs/plugins/modifier.replace.php | 34 + libs/libs/plugins/modifier.spacify.php | 27 + libs/libs/plugins/modifier.truncate.php | 64 + libs/libs/plugins/modifiercompiler.cat.php | 29 + .../modifiercompiler.count_characters.php | 32 + .../modifiercompiler.count_paragraphs.php | 27 + .../modifiercompiler.count_sentences.php | 27 + .../plugins/modifiercompiler.count_words.php | 31 + .../libs/plugins/modifiercompiler.default.php | 35 + libs/libs/plugins/modifiercompiler.escape.php | 126 + .../plugins/modifiercompiler.from_charset.php | 33 + libs/libs/plugins/modifiercompiler.indent.php | 33 + libs/libs/plugins/modifiercompiler.lower.php | 31 + .../libs/plugins/modifiercompiler.noprint.php | 21 + .../modifiercompiler.string_format.php | 25 + libs/libs/plugins/modifiercompiler.strip.php | 33 + .../plugins/modifiercompiler.strip_tags.php | 29 + .../plugins/modifiercompiler.to_charset.php | 33 + .../plugins/modifiercompiler.unescape.php | 50 + libs/libs/plugins/modifiercompiler.upper.php | 29 + .../plugins/modifiercompiler.wordwrap.php | 47 + .../plugins/outputfilter.trimwhitespace.php | 90 + .../plugins/shared.escape_special_chars.php | 53 + .../plugins/shared.literal_compiler_param.php | 35 + libs/libs/plugins/shared.make_timestamp.php | 43 + libs/libs/plugins/shared.mb_str_replace.php | 55 + libs/libs/plugins/shared.mb_unicode.php | 54 + libs/libs/plugins/shared.mb_wordwrap.php | 73 + .../variablefilter.htmlspecialchars.php | 19 + libs/libs/sysplugins/smarty_cacheresource.php | 442 ++ .../smarty_cacheresource_custom.php | 284 + .../smarty_cacheresource_keyvaluestore.php | 493 ++ libs/libs/sysplugins/smarty_config_source.php | 94 + .../smarty_internal_cacheresource_file.php | 297 ++ .../smarty_internal_compile_append.php | 50 + .../smarty_internal_compile_assign.php | 86 + .../smarty_internal_compile_block.php | 444 ++ .../smarty_internal_compile_break.php | 75 + .../smarty_internal_compile_call.php | 127 + .../smarty_internal_compile_capture.php | 96 + .../smarty_internal_compile_config_load.php | 82 + .../smarty_internal_compile_continue.php | 75 + .../smarty_internal_compile_debug.php | 41 + .../smarty_internal_compile_eval.php | 71 + .../smarty_internal_compile_extends.php | 85 + .../smarty_internal_compile_for.php | 145 + .../smarty_internal_compile_foreach.php | 229 + .../smarty_internal_compile_function.php | 167 + .../sysplugins/smarty_internal_compile_if.php | 210 + .../smarty_internal_compile_include.php | 265 + .../smarty_internal_compile_include_php.php | 107 + .../smarty_internal_compile_insert.php | 140 + .../smarty_internal_compile_ldelim.php | 39 + .../smarty_internal_compile_nocache.php | 70 + ..._internal_compile_private_block_plugin.php | 85 + ...ternal_compile_private_function_plugin.php | 71 + ...arty_internal_compile_private_modifier.php | 139 + ..._compile_private_object_block_function.php | 86 + ...ternal_compile_private_object_function.php | 84 + ...ernal_compile_private_print_expression.php | 151 + ...ernal_compile_private_registered_block.php | 111 + ...al_compile_private_registered_function.php | 79 + ...ernal_compile_private_special_variable.php | 114 + .../smarty_internal_compile_rdelim.php | 39 + .../smarty_internal_compile_section.php | 206 + .../smarty_internal_compile_setfilter.php | 70 + .../smarty_internal_compile_while.php | 93 + .../smarty_internal_compilebase.php | 174 + .../sysplugins/smarty_internal_config.php | 306 ++ .../smarty_internal_config_file_compiler.php | 159 + .../smarty_internal_configfilelexer.php | 646 +++ .../smarty_internal_configfileparser.php | 1042 ++++ libs/libs/sysplugins/smarty_internal_data.php | 576 +++ .../libs/sysplugins/smarty_internal_debug.php | 254 + .../smarty_internal_filter_handler.php | 67 + .../smarty_internal_function_call_handler.php | 52 + .../smarty_internal_get_include_path.php | 46 + .../smarty_internal_nocache_insert.php | 51 + .../sysplugins/smarty_internal_parsetree.php | 394 ++ .../smarty_internal_resource_eval.php | 96 + .../smarty_internal_resource_extends.php | 112 + .../smarty_internal_resource_file.php | 89 + .../smarty_internal_resource_php.php | 119 + .../smarty_internal_resource_registered.php | 98 + .../smarty_internal_resource_stream.php | 81 + .../smarty_internal_resource_string.php | 97 + ...smarty_internal_smartytemplatecompiler.php | 140 + .../sysplugins/smarty_internal_template.php | 737 +++ .../smarty_internal_templatebase.php | 860 ++++ .../smarty_internal_templatecompilerbase.php | 823 +++ .../smarty_internal_templatelexer.php | 1591 ++++++ .../smarty_internal_templateparser.php | 4546 +++++++++++++++++ .../sysplugins/smarty_internal_utility.php | 837 +++ .../sysplugins/smarty_internal_write_file.php | 86 + libs/libs/sysplugins/smarty_resource.php | 912 ++++ .../sysplugins/smarty_resource_custom.php | 95 + .../sysplugins/smarty_resource_recompiled.php | 33 + .../sysplugins/smarty_resource_uncompiled.php | 41 + libs/libs/sysplugins/smarty_security.php | 480 ++ 123 files changed, 30091 insertions(+), 3 deletions(-) create mode 100644 libs/change_log.txt create mode 100644 libs/libs/Smarty.class.php create mode 100644 libs/libs/SmartyBC.class.php create mode 100644 libs/libs/debug.tpl create mode 100644 libs/libs/plugins/block.textformat.php create mode 100644 libs/libs/plugins/function.counter.php create mode 100644 libs/libs/plugins/function.cycle.php create mode 100644 libs/libs/plugins/function.fetch.php create mode 100644 libs/libs/plugins/function.html_checkboxes.php create mode 100644 libs/libs/plugins/function.html_image.php create mode 100644 libs/libs/plugins/function.html_options.php create mode 100644 libs/libs/plugins/function.html_radios.php create mode 100644 libs/libs/plugins/function.html_select_date.php create mode 100644 libs/libs/plugins/function.html_select_time.php create mode 100644 libs/libs/plugins/function.html_table.php create mode 100644 libs/libs/plugins/function.mailto.php create mode 100644 libs/libs/plugins/function.math.php create mode 100644 libs/libs/plugins/modifier.capitalize.php create mode 100644 libs/libs/plugins/modifier.date_format.php create mode 100644 libs/libs/plugins/modifier.debug_print_var.php create mode 100644 libs/libs/plugins/modifier.escape.php create mode 100644 libs/libs/plugins/modifier.regex_replace.php create mode 100644 libs/libs/plugins/modifier.replace.php create mode 100644 libs/libs/plugins/modifier.spacify.php create mode 100644 libs/libs/plugins/modifier.truncate.php create mode 100644 libs/libs/plugins/modifiercompiler.cat.php create mode 100644 libs/libs/plugins/modifiercompiler.count_characters.php create mode 100644 libs/libs/plugins/modifiercompiler.count_paragraphs.php create mode 100644 libs/libs/plugins/modifiercompiler.count_sentences.php create mode 100644 libs/libs/plugins/modifiercompiler.count_words.php create mode 100644 libs/libs/plugins/modifiercompiler.default.php create mode 100644 libs/libs/plugins/modifiercompiler.escape.php create mode 100644 libs/libs/plugins/modifiercompiler.from_charset.php create mode 100644 libs/libs/plugins/modifiercompiler.indent.php create mode 100644 libs/libs/plugins/modifiercompiler.lower.php create mode 100644 libs/libs/plugins/modifiercompiler.noprint.php create mode 100644 libs/libs/plugins/modifiercompiler.string_format.php create mode 100644 libs/libs/plugins/modifiercompiler.strip.php create mode 100644 libs/libs/plugins/modifiercompiler.strip_tags.php create mode 100644 libs/libs/plugins/modifiercompiler.to_charset.php create mode 100644 libs/libs/plugins/modifiercompiler.unescape.php create mode 100644 libs/libs/plugins/modifiercompiler.upper.php create mode 100644 libs/libs/plugins/modifiercompiler.wordwrap.php create mode 100644 libs/libs/plugins/outputfilter.trimwhitespace.php create mode 100644 libs/libs/plugins/shared.escape_special_chars.php create mode 100644 libs/libs/plugins/shared.literal_compiler_param.php create mode 100644 libs/libs/plugins/shared.make_timestamp.php create mode 100644 libs/libs/plugins/shared.mb_str_replace.php create mode 100644 libs/libs/plugins/shared.mb_unicode.php create mode 100644 libs/libs/plugins/shared.mb_wordwrap.php create mode 100644 libs/libs/plugins/variablefilter.htmlspecialchars.php create mode 100644 libs/libs/sysplugins/smarty_cacheresource.php create mode 100644 libs/libs/sysplugins/smarty_cacheresource_custom.php create mode 100644 libs/libs/sysplugins/smarty_cacheresource_keyvaluestore.php create mode 100644 libs/libs/sysplugins/smarty_config_source.php create mode 100644 libs/libs/sysplugins/smarty_internal_cacheresource_file.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_append.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_assign.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_block.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_break.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_call.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_capture.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_config_load.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_continue.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_debug.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_eval.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_extends.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_for.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_foreach.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_function.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_if.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_include.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_include_php.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_insert.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_ldelim.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_nocache.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_private_block_plugin.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_private_function_plugin.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_private_modifier.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_private_object_block_function.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_private_object_function.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_private_print_expression.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_private_registered_block.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_private_registered_function.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_private_special_variable.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_rdelim.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_section.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_setfilter.php create mode 100644 libs/libs/sysplugins/smarty_internal_compile_while.php create mode 100644 libs/libs/sysplugins/smarty_internal_compilebase.php create mode 100644 libs/libs/sysplugins/smarty_internal_config.php create mode 100644 libs/libs/sysplugins/smarty_internal_config_file_compiler.php create mode 100644 libs/libs/sysplugins/smarty_internal_configfilelexer.php create mode 100644 libs/libs/sysplugins/smarty_internal_configfileparser.php create mode 100644 libs/libs/sysplugins/smarty_internal_data.php create mode 100644 libs/libs/sysplugins/smarty_internal_debug.php create mode 100644 libs/libs/sysplugins/smarty_internal_filter_handler.php create mode 100644 libs/libs/sysplugins/smarty_internal_function_call_handler.php create mode 100644 libs/libs/sysplugins/smarty_internal_get_include_path.php create mode 100644 libs/libs/sysplugins/smarty_internal_nocache_insert.php create mode 100644 libs/libs/sysplugins/smarty_internal_parsetree.php create mode 100644 libs/libs/sysplugins/smarty_internal_resource_eval.php create mode 100644 libs/libs/sysplugins/smarty_internal_resource_extends.php create mode 100644 libs/libs/sysplugins/smarty_internal_resource_file.php create mode 100644 libs/libs/sysplugins/smarty_internal_resource_php.php create mode 100644 libs/libs/sysplugins/smarty_internal_resource_registered.php create mode 100644 libs/libs/sysplugins/smarty_internal_resource_stream.php create mode 100644 libs/libs/sysplugins/smarty_internal_resource_string.php create mode 100644 libs/libs/sysplugins/smarty_internal_smartytemplatecompiler.php create mode 100644 libs/libs/sysplugins/smarty_internal_template.php create mode 100644 libs/libs/sysplugins/smarty_internal_templatebase.php create mode 100644 libs/libs/sysplugins/smarty_internal_templatecompilerbase.php create mode 100644 libs/libs/sysplugins/smarty_internal_templatelexer.php create mode 100644 libs/libs/sysplugins/smarty_internal_templateparser.php create mode 100644 libs/libs/sysplugins/smarty_internal_utility.php create mode 100644 libs/libs/sysplugins/smarty_internal_write_file.php create mode 100644 libs/libs/sysplugins/smarty_resource.php create mode 100644 libs/libs/sysplugins/smarty_resource_custom.php create mode 100644 libs/libs/sysplugins/smarty_resource_recompiled.php create mode 100644 libs/libs/sysplugins/smarty_resource_uncompiled.php create mode 100644 libs/libs/sysplugins/smarty_security.php diff --git a/composer.json b/composer.json index 8abcfe90..dd30e0a8 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ "support": { "irc": "irc://irc.freenode.org/smarty", "issues": "http://code.google.com/p/smarty-php/issues/list", - "forum": "http://www.smarty.net/forums/", + "forum": "http://www.smarty.net/forums/" }, "require": { "php": ">=5.2" diff --git a/libs/Smarty.class.php b/libs/Smarty.class.php index 48df3556..dfc92bac 100644 --- a/libs/Smarty.class.php +++ b/libs/Smarty.class.php @@ -23,7 +23,7 @@ * @author Uwe Tews * @author Rodney Rehm * @package Smarty - * @version 3.1.21 + * @version 3.1.20 */ /** @@ -109,7 +109,7 @@ class Smarty extends Smarty_Internal_TemplateBase /** * smarty version */ - const SMARTY_VERSION = 'Smarty-3.1.21'; + const SMARTY_VERSION = 'Smarty-3.1.20'; /** * define variable scopes diff --git a/libs/change_log.txt b/libs/change_log.txt new file mode 100644 index 00000000..3f3c6456 --- /dev/null +++ b/libs/change_log.txt @@ -0,0 +1,2390 @@ + ===== 3.1.20 ===== (10.09.2014) + 08.10.2014 + - bugfix security mode of " diff --git a/libs/libs/plugins/block.textformat.php b/libs/libs/plugins/block.textformat.php new file mode 100644 index 00000000..abf54493 --- /dev/null +++ b/libs/libs/plugins/block.textformat.php @@ -0,0 +1,110 @@ + + * Name: textformat
+ * Purpose: format text a certain way with preset styles + * or custom wrap/indent settings
+ * Params: + *
+ * - style         - string (email)
+ * - indent        - integer (0)
+ * - wrap          - integer (80)
+ * - wrap_char     - string ("\n")
+ * - indent_char   - string (" ")
+ * - wrap_boundary - boolean (true)
+ * 
+ * + * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat} + * (Smarty online manual) + * + * @param array $params parameters + * @param string $content contents of the block + * @param Smarty_Internal_Template $template template object + * @param boolean &$repeat repeat flag + * + * @return string content re-formatted + * @author Monte Ohrt + */ +function smarty_block_textformat($params, $content, $template, &$repeat) +{ + if (is_null($content)) { + return; + } + + $style = null; + $indent = 0; + $indent_first = 0; + $indent_char = ' '; + $wrap = 80; + $wrap_char = "\n"; + $wrap_cut = false; + $assign = null; + + foreach ($params as $_key => $_val) { + switch ($_key) { + case 'style': + case 'indent_char': + case 'wrap_char': + case 'assign': + $$_key = (string) $_val; + break; + + case 'indent': + case 'indent_first': + case 'wrap': + $$_key = (int) $_val; + break; + + case 'wrap_cut': + $$_key = (bool) $_val; + break; + + default: + trigger_error("textformat: unknown attribute '$_key'"); + } + } + + if ($style == 'email') { + $wrap = 72; + } + // split into paragraphs + $_paragraphs = preg_split('![\r\n]{2}!', $content); + + foreach ($_paragraphs as &$_paragraph) { + if (!$_paragraph) { + continue; + } + // convert mult. spaces & special chars to single space + $_paragraph = preg_replace(array('!\s+!' . Smarty::$_UTF8_MODIFIER, '!(^\s+)|(\s+$)!' . Smarty::$_UTF8_MODIFIER), array(' ', ''), $_paragraph); + // indent first line + if ($indent_first > 0) { + $_paragraph = str_repeat($indent_char, $indent_first) . $_paragraph; + } + // wordwrap sentences + if (Smarty::$_MBSTRING) { + require_once(SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'); + $_paragraph = smarty_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); + } else { + $_paragraph = wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); + } + // indent lines + if ($indent > 0) { + $_paragraph = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraph); + } + } + $_output = implode($wrap_char . $wrap_char, $_paragraphs); + + if ($assign) { + $template->assign($assign, $_output); + } else { + return $_output; + } +} diff --git a/libs/libs/plugins/function.counter.php b/libs/libs/plugins/function.counter.php new file mode 100644 index 00000000..4da85a14 --- /dev/null +++ b/libs/libs/plugins/function.counter.php @@ -0,0 +1,78 @@ + + * Name: counter
+ * Purpose: print out a counter value + * + * @author Monte Ohrt + * @link http://www.smarty.net/manual/en/language.function.counter.php {counter} + * (Smarty online manual) + * + * @param array $params parameters + * @param Smarty_Internal_Template $template template object + * + * @return string|null + */ +function smarty_function_counter($params, $template) +{ + static $counters = array(); + + $name = (isset($params['name'])) ? $params['name'] : 'default'; + if (!isset($counters[$name])) { + $counters[$name] = array( + 'start' => 1, + 'skip' => 1, + 'direction' => 'up', + 'count' => 1 + ); + } + $counter =& $counters[$name]; + + if (isset($params['start'])) { + $counter['start'] = $counter['count'] = (int) $params['start']; + } + + if (!empty($params['assign'])) { + $counter['assign'] = $params['assign']; + } + + if (isset($counter['assign'])) { + $template->assign($counter['assign'], $counter['count']); + } + + if (isset($params['print'])) { + $print = (bool) $params['print']; + } else { + $print = empty($counter['assign']); + } + + if ($print) { + $retval = $counter['count']; + } else { + $retval = null; + } + + if (isset($params['skip'])) { + $counter['skip'] = $params['skip']; + } + + if (isset($params['direction'])) { + $counter['direction'] = $params['direction']; + } + + if ($counter['direction'] == "down") { + $counter['count'] -= $counter['skip']; + } else { + $counter['count'] += $counter['skip']; + } + + return $retval; +} diff --git a/libs/libs/plugins/function.cycle.php b/libs/libs/plugins/function.cycle.php new file mode 100644 index 00000000..8dc5cd9d --- /dev/null +++ b/libs/libs/plugins/function.cycle.php @@ -0,0 +1,107 @@ + + * Name: cycle
+ * Date: May 3, 2002
+ * Purpose: cycle through given values
+ * Params: + *
+ * - name      - name of cycle (optional)
+ * - values    - comma separated list of values to cycle, or an array of values to cycle
+ *               (this can be left out for subsequent calls)
+ * - reset     - boolean - resets given var to true
+ * - print     - boolean - print var or not. default is true
+ * - advance   - boolean - whether or not to advance the cycle
+ * - delimiter - the value delimiter, default is ","
+ * - assign    - boolean, assigns to template var instead of printed.
+ * 
+ * Examples:
+ *
+ * {cycle values="#eeeeee,#d0d0d0d"}
+ * {cycle name=row values="one,two,three" reset=true}
+ * {cycle name=row}
+ * 
+ * + * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle} + * (Smarty online manual) + * @author Monte Ohrt + * @author credit to Mark Priatel + * @author credit to Gerard + * @author credit to Jason Sweat + * @version 1.3 + * + * @param array $params parameters + * @param Smarty_Internal_Template $template template object + * + * @return string|null + */ + +function smarty_function_cycle($params, $template) +{ + static $cycle_vars; + + $name = (empty($params['name'])) ? 'default' : $params['name']; + $print = (isset($params['print'])) ? (bool) $params['print'] : true; + $advance = (isset($params['advance'])) ? (bool) $params['advance'] : true; + $reset = (isset($params['reset'])) ? (bool) $params['reset'] : false; + + if (!isset($params['values'])) { + if (!isset($cycle_vars[$name]['values'])) { + trigger_error("cycle: missing 'values' parameter"); + + return; + } + } else { + if (isset($cycle_vars[$name]['values']) + && $cycle_vars[$name]['values'] != $params['values'] + ) { + $cycle_vars[$name]['index'] = 0; + } + $cycle_vars[$name]['values'] = $params['values']; + } + + if (isset($params['delimiter'])) { + $cycle_vars[$name]['delimiter'] = $params['delimiter']; + } elseif (!isset($cycle_vars[$name]['delimiter'])) { + $cycle_vars[$name]['delimiter'] = ','; + } + + if (is_array($cycle_vars[$name]['values'])) { + $cycle_array = $cycle_vars[$name]['values']; + } else { + $cycle_array = explode($cycle_vars[$name]['delimiter'], $cycle_vars[$name]['values']); + } + + if (!isset($cycle_vars[$name]['index']) || $reset) { + $cycle_vars[$name]['index'] = 0; + } + + if (isset($params['assign'])) { + $print = false; + $template->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]); + } + + if ($print) { + $retval = $cycle_array[$cycle_vars[$name]['index']]; + } else { + $retval = null; + } + + if ($advance) { + if ($cycle_vars[$name]['index'] >= count($cycle_array) - 1) { + $cycle_vars[$name]['index'] = 0; + } else { + $cycle_vars[$name]['index'] ++; + } + } + + return $retval; +} diff --git a/libs/libs/plugins/function.fetch.php b/libs/libs/plugins/function.fetch.php new file mode 100644 index 00000000..3506d4a8 --- /dev/null +++ b/libs/libs/plugins/function.fetch.php @@ -0,0 +1,221 @@ + + * Name: fetch
+ * Purpose: fetch file, web or ftp data and display results + * + * @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch} + * (Smarty online manual) + * @author Monte Ohrt + * + * @param array $params parameters + * @param Smarty_Internal_Template $template template object + * + * @throws SmartyException + * @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable + */ +function smarty_function_fetch($params, $template) +{ + if (empty($params['file'])) { + trigger_error("[plugin] fetch parameter 'file' cannot be empty", E_USER_NOTICE); + + return; + } + + // strip file protocol + if (stripos($params['file'], 'file://') === 0) { + $params['file'] = substr($params['file'], 7); + } + + $protocol = strpos($params['file'], '://'); + if ($protocol !== false) { + $protocol = strtolower(substr($params['file'], 0, $protocol)); + } + + if (isset($template->smarty->security_policy)) { + if ($protocol) { + // remote resource (or php stream, …) + if (!$template->smarty->security_policy->isTrustedUri($params['file'])) { + return; + } + } else { + // local file + if (!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) { + return; + } + } + } + + $content = ''; + if ($protocol == 'http') { + // http fetch + if ($uri_parts = parse_url($params['file'])) { + // set defaults + $host = $server_name = $uri_parts['host']; + $timeout = 30; + $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; + $agent = "Smarty Template Engine " . Smarty::SMARTY_VERSION; + $referer = ""; + $uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/'; + $uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : ''; + $_is_proxy = false; + if (empty($uri_parts['port'])) { + $port = 80; + } else { + $port = $uri_parts['port']; + } + if (!empty($uri_parts['user'])) { + $user = $uri_parts['user']; + } + if (!empty($uri_parts['pass'])) { + $pass = $uri_parts['pass']; + } + // loop through parameters, setup headers + foreach ($params as $param_key => $param_value) { + switch ($param_key) { + case "file": + case "assign": + case "assign_headers": + break; + case "user": + if (!empty($param_value)) { + $user = $param_value; + } + break; + case "pass": + if (!empty($param_value)) { + $pass = $param_value; + } + break; + case "accept": + if (!empty($param_value)) { + $accept = $param_value; + } + break; + case "header": + if (!empty($param_value)) { + if (!preg_match('![\w\d-]+: .+!', $param_value)) { + trigger_error("[plugin] invalid header format '" . $param_value . "'", E_USER_NOTICE); + + return; + } else { + $extra_headers[] = $param_value; + } + } + break; + case "proxy_host": + if (!empty($param_value)) { + $proxy_host = $param_value; + } + break; + case "proxy_port": + if (!preg_match('!\D!', $param_value)) { + $proxy_port = (int) $param_value; + } else { + trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE); + + return; + } + break; + case "agent": + if (!empty($param_value)) { + $agent = $param_value; + } + break; + case "referer": + if (!empty($param_value)) { + $referer = $param_value; + } + break; + case "timeout": + if (!preg_match('!\D!', $param_value)) { + $timeout = (int) $param_value; + } else { + trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE); + + return; + } + break; + default: + trigger_error("[plugin] unrecognized attribute '" . $param_key . "'", E_USER_NOTICE); + + return; + } + } + if (!empty($proxy_host) && !empty($proxy_port)) { + $_is_proxy = true; + $fp = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout); + } else { + $fp = fsockopen($server_name, $port, $errno, $errstr, $timeout); + } + + if (!$fp) { + trigger_error("[plugin] unable to fetch: $errstr ($errno)", E_USER_NOTICE); + + return; + } else { + if ($_is_proxy) { + fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n"); + } else { + fputs($fp, "GET $uri HTTP/1.0\r\n"); + } + if (!empty($host)) { + fputs($fp, "Host: $host\r\n"); + } + if (!empty($accept)) { + fputs($fp, "Accept: $accept\r\n"); + } + if (!empty($agent)) { + fputs($fp, "User-Agent: $agent\r\n"); + } + if (!empty($referer)) { + fputs($fp, "Referer: $referer\r\n"); + } + if (isset($extra_headers) && is_array($extra_headers)) { + foreach ($extra_headers as $curr_header) { + fputs($fp, $curr_header . "\r\n"); + } + } + if (!empty($user) && !empty($pass)) { + fputs($fp, "Authorization: BASIC " . base64_encode("$user:$pass") . "\r\n"); + } + + fputs($fp, "\r\n"); + while (!feof($fp)) { + $content .= fgets($fp, 4096); + } + fclose($fp); + $csplit = preg_split("!\r\n\r\n!", $content, 2); + + $content = $csplit[1]; + + if (!empty($params['assign_headers'])) { + $template->assign($params['assign_headers'], preg_split("!\r\n!", $csplit[0])); + } + } + } else { + trigger_error("[plugin fetch] unable to parse URL, check syntax", E_USER_NOTICE); + + return; + } + } else { + $content = @file_get_contents($params['file']); + if ($content === false) { + throw new SmartyException("{fetch} cannot read resource '" . $params['file'] . "'"); + } + } + + if (!empty($params['assign'])) { + $template->assign($params['assign'], $content); + } else { + return $content; + } +} diff --git a/libs/libs/plugins/function.html_checkboxes.php b/libs/libs/plugins/function.html_checkboxes.php new file mode 100644 index 00000000..d7868036 --- /dev/null +++ b/libs/libs/plugins/function.html_checkboxes.php @@ -0,0 +1,237 @@ + + * Type: function
+ * Name: html_checkboxes
+ * Date: 24.Feb.2003
+ * Purpose: Prints out a list of checkbox input types
+ * Examples: + *
+ * {html_checkboxes values=$ids output=$names}
+ * {html_checkboxes values=$ids name='box' separator='
' output=$names} + * {html_checkboxes values=$ids checked=$checked separator='
' output=$names} + *
+ * Params: + *
+ * - name       (optional) - string default "checkbox"
+ * - values     (required) - array
+ * - options    (optional) - associative array
+ * - checked    (optional) - array default not set
+ * - separator  (optional) - ie 
or   + * - output (optional) - the output next to each checkbox + * - assign (optional) - assign the output as an array to this variable + * - escape (optional) - escape the content (not value), defaults to true + *
+ * + * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} + * (Smarty online manual) + * @author Christopher Kvarme + * @author credits to Monte Ohrt + * @version 1.0 + * + * @param array $params parameters + * @param object $template template object + * + * @return string + * @uses smarty_function_escape_special_chars() + */ +function smarty_function_html_checkboxes($params, $template) +{ + require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); + + $name = 'checkbox'; + $values = null; + $options = null; + $selected = array(); + $separator = ''; + $escape = true; + $labels = true; + $label_ids = false; + $output = null; + + $extra = ''; + + foreach ($params as $_key => $_val) { + switch ($_key) { + case 'name': + case 'separator': + $$_key = (string) $_val; + break; + + case 'escape': + case 'labels': + case 'label_ids': + $$_key = (bool) $_val; + break; + + case 'options': + $$_key = (array) $_val; + break; + + case 'values': + case 'output': + $$_key = array_values((array) $_val); + break; + + case 'checked': + case 'selected': + if (is_array($_val)) { + $selected = array(); + foreach ($_val as $_sel) { + if (is_object($_sel)) { + if (method_exists($_sel, "__toString")) { + $_sel = smarty_function_escape_special_chars((string) $_sel->__toString()); + } else { + trigger_error("html_checkboxes: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE); + continue; + } + } else { + $_sel = smarty_function_escape_special_chars((string) $_sel); + } + $selected[$_sel] = true; + } + } elseif (is_object($_val)) { + if (method_exists($_val, "__toString")) { + $selected = smarty_function_escape_special_chars((string) $_val->__toString()); + } else { + trigger_error("html_checkboxes: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE); + } + } else { + $selected = smarty_function_escape_special_chars((string) $_val); + } + break; + + case 'checkboxes': + trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', E_USER_WARNING); + $options = (array) $_val; + break; + + case 'assign': + break; + + case 'strict': + break; + + case 'disabled': + case 'readonly': + if (!empty($params['strict'])) { + if (!is_scalar($_val)) { + trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE); + } + + if ($_val === true || $_val === $_key) { + $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"'; + } + + break; + } + // omit break; to fall through! + + default: + if (!is_array($_val)) { + $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; + } else { + trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; + } + } + + if (!isset($options) && !isset($values)) { + return ''; + } /* raise error here? */ + + $_html_result = array(); + + if (isset($options)) { + foreach ($options as $_key => $_val) { + $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); + } + } else { + foreach ($values as $_i => $_key) { + $_val = isset($output[$_i]) ? $output[$_i] : ''; + $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); + } + } + + if (!empty($params['assign'])) { + $template->assign($params['assign'], $_html_result); + } else { + return implode("\n", $_html_result); + } +} + +function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape = true) +{ + $_output = ''; + + if (is_object($value)) { + if (method_exists($value, "__toString")) { + $value = (string) $value->__toString(); + } else { + trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE); + + return ''; + } + } else { + $value = (string) $value; + } + + if (is_object($output)) { + if (method_exists($output, "__toString")) { + $output = (string) $output->__toString(); + } else { + trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE); + + return ''; + } + } else { + $output = (string) $output; + } + + if ($labels) { + if ($label_ids) { + $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value)); + $_output .= '