diff options
Diffstat (limited to 'include/smarty/libs/plugins/function.html_select_time.php')
-rw-r--r-- | include/smarty/libs/plugins/function.html_select_time.php | 430 |
1 files changed, 301 insertions, 129 deletions
diff --git a/include/smarty/libs/plugins/function.html_select_time.php b/include/smarty/libs/plugins/function.html_select_time.php index 2e5be7efe..9fb8038e4 100644 --- a/include/smarty/libs/plugins/function.html_select_time.php +++ b/include/smarty/libs/plugins/function.html_select_time.php @@ -1,10 +1,19 @@ <?php /** * Smarty plugin + * * @package Smarty - * @subpackage plugins + * @subpackage PluginsFunction */ +/** + * @ignore + */ +require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); +/** + * @ignore + */ +require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); /** * Smarty {html_select_time} function plugin @@ -12,50 +21,102 @@ * Type: function<br> * Name: html_select_time<br> * Purpose: Prints the dropdowns for time selection - * @link http://smarty.php.net/manual/en/language.function.html.select.time.php {html_select_time} + * + * @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time} * (Smarty online manual) * @author Roberto Berto <roberto@berto.net> - * @credits Monte Ohrt <monte AT ohrt DOT com> - * @param array - * @param Smarty + * @author Monte Ohrt <monte AT ohrt DOT com> + * @param array $params parameters + * @param Smarty_Internal_Template $template template object * @return string * @uses smarty_make_timestamp() */ -function smarty_function_html_select_time($params, &$smarty) +function smarty_function_html_select_time($params, $template) { - require_once $smarty->_get_plugin_filepath('shared','make_timestamp'); - require_once $smarty->_get_plugin_filepath('function','html_options'); - /* Default values. */ - $prefix = "Time_"; - $time = time(); - $display_hours = true; - $display_minutes = true; - $display_seconds = true; - $display_meridian = true; - $use_24_hours = true; - $minute_interval = 1; - $second_interval = 1; - /* Should the select boxes be part of an array when returned from PHP? - e.g. setting it to "birthday", would create "birthday[Hour]", - "birthday[Minute]", "birthday[Seconds]" & "birthday[Meridian]". - Can be combined with prefix. */ - $field_array = null; - $all_extra = null; - $hour_extra = null; - $minute_extra = null; - $second_extra = null; - $meridian_extra = null; - - foreach ($params as $_key=>$_value) { + $prefix = "Time_"; + $field_array = null; + $field_separator = "\n"; + $option_separator = "\n"; + $time = null; + + $display_hours = true; + $display_minutes = true; + $display_seconds = true; + $display_meridian = true; + + $hour_format = '%02d'; + $hour_value_format = '%02d'; + $minute_format = '%02d'; + $minute_value_format = '%02d'; + $second_format = '%02d'; + $second_value_format = '%02d'; + + $hour_size = null; + $minute_size = null; + $second_size = null; + $meridian_size = null; + + $all_empty = null; + $hour_empty = null; + $minute_empty = null; + $second_empty = null; + $meridian_empty = null; + + $all_id = null; + $hour_id = null; + $minute_id = null; + $second_id = null; + $meridian_id = null; + + $use_24_hours = true; + $minute_interval = 1; + $second_interval = 1; + + $extra_attrs = ''; + $all_extra = null; + $hour_extra = null; + $minute_extra = null; + $second_extra = null; + $meridian_extra = null; + + foreach ($params as $_key => $_value) { switch ($_key) { - case 'prefix': case 'time': + if (!is_array($_value) && $_value !== null) { + $time = smarty_make_timestamp($_value); + } + break; + + case 'prefix': case 'field_array': + + case 'field_separator': + case 'option_separator': + case 'all_extra': case 'hour_extra': case 'minute_extra': case 'second_extra': case 'meridian_extra': + + case 'all_empty': + case 'hour_empty': + case 'minute_empty': + case 'second_empty': + case 'meridian_empty': + + case 'all_id': + case 'hour_id': + case 'minute_id': + case 'second_id': + case 'meridian_id': + + case 'hour_format': + case 'hour_value_format': + case 'minute_format': + case 'minute_value_format': + case 'second_format': + case 'second_value_format': $$_key = (string)$_value; break; @@ -69,126 +130,237 @@ function smarty_function_html_select_time($params, &$smarty) case 'minute_interval': case 'second_interval': + + case 'hour_size': + case 'minute_size': + case 'second_size': + case 'meridian_size': $$_key = (int)$_value; break; default: - $smarty->trigger_error("[html_select_time] unknown parameter $_key", E_USER_WARNING); + if (!is_array($_value)) { + $extra_attrs .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_value) . '"'; + } else { + trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE); + } + break; } } - $time = smarty_make_timestamp($time); - - $html_result = ''; + if (isset($params['time']) && is_array($params['time'])) { + if (isset($params['time'][$prefix . 'Hour'])) { + // $_REQUEST[$field_array] given + foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) { + $_variableName = '_' . strtolower($_elementName); + $$_variableName = isset($params['time'][$prefix . $_elementName]) + ? $params['time'][$prefix . $_elementName] + : date($_elementKey); + } + $_meridian = isset($params['time'][$prefix . 'Meridian']) + ? (' ' . $params['time'][$prefix . 'Meridian']) + : ''; + $time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian ); + list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time)); + } elseif (isset($params['time'][$field_array][$prefix . 'Hour'])) { + // $_REQUEST given + foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) { + $_variableName = '_' . strtolower($_elementName); + $$_variableName = isset($params['time'][$field_array][$prefix . $_elementName]) + ? $params['time'][$field_array][$prefix . $_elementName] + : date($_elementKey); + } + $_meridian = isset($params['time'][$field_array][$prefix . 'Meridian']) + ? (' ' . $params['time'][$field_array][$prefix . 'Meridian']) + : ''; + $time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian ); + list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time)); + } else { + // no date found, use NOW + list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d')); + } + } elseif ($time === null) { + if (array_key_exists('time', $params)) { + $_hour = $_minute = $_second = $time = null; + } else { + list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s')); + } + } else { + list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time)); + } + // generate hour <select> if ($display_hours) { - $hours = $use_24_hours ? range(0, 23) : range(1, 12); - $hour_fmt = $use_24_hours ? '%H' : '%I'; - for ($i = 0, $for_max = count($hours); $i < $for_max; $i++) - $hours[$i] = sprintf('%02d', $hours[$i]); - $html_result .= '<select name='; - if (null !== $field_array) { - $html_result .= '"' . $field_array . '[' . $prefix . 'Hour]"'; - } else { - $html_result .= '"' . $prefix . 'Hour"'; + $_html_hours = ''; + $_extra = ''; + $_name = $field_array ? ($field_array . '[' . $prefix . 'Hour]') : ($prefix . 'Hour'); + if ($all_extra) { + $_extra .= ' ' . $all_extra; } - if (null !== $hour_extra){ - $html_result .= ' ' . $hour_extra; + if ($hour_extra) { + $_extra .= ' ' . $hour_extra; + } + + $_html_hours = '<select name="' . $_name . '"'; + if ($hour_id !== null || $all_id !== null) { + $_html_hours .= ' id="' . smarty_function_escape_special_chars( + $hour_id !== null ? ( $hour_id ? $hour_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) + ) . '"'; } - if (null !== $all_extra){ - $html_result .= ' ' . $all_extra; + if ($hour_size) { + $_html_hours .= ' size="' . $hour_size . '"'; + } + $_html_hours .= $_extra . $extra_attrs . '>' . $option_separator; + + if (isset($hour_empty) || isset($all_empty)) { + $_html_hours .= '<option value="">' . ( isset($hour_empty) ? $hour_empty : $all_empty ) . '</option>' . $option_separator; + } + + $start = $use_24_hours ? 0 : 1; + $end = $use_24_hours ? 23 : 12; + for ($i=$start; $i <= $end; $i++) { + $_val = sprintf('%02d', $i); + $_text = $hour_format == '%02d' ? $_val : sprintf($hour_format, $i); + $_value = $hour_value_format == '%02d' ? $_val : sprintf($hour_value_format, $i); + + if (!$use_24_hours) { + $_hour12 = $_hour == 0 + ? 12 + : ($_hour <= 12 ? $_hour : $_hour -12); + } + + $selected = $_hour !== null ? ($use_24_hours ? $_hour == $_val : $_hour12 == $_val) : null; + $_html_hours .= '<option value="' . $_value . '"' + . ($selected ? ' selected="selected"' : '') + . '>' . $_text . '</option>' . $option_separator; } - $html_result .= '>'."\n"; - $html_result .= smarty_function_html_options(array('output' => $hours, - 'values' => $hours, - 'selected' => strftime($hour_fmt, $time), - 'print_result' => false), - $smarty); - $html_result .= "</select>\n"; + + $_html_hours .= '</select>'; } + // generate minute <select> if ($display_minutes) { - $all_minutes = range(0, 59); - for ($i = 0, $for_max = count($all_minutes); $i < $for_max; $i+= $minute_interval) - $minutes[] = sprintf('%02d', $all_minutes[$i]); - $selected = intval(floor(strftime('%M', $time) / $minute_interval) * $minute_interval); - $html_result .= '<select name='; - if (null !== $field_array) { - $html_result .= '"' . $field_array . '[' . $prefix . 'Minute]"'; - } else { - $html_result .= '"' . $prefix . 'Minute"'; - } - if (null !== $minute_extra){ - $html_result .= ' ' . $minute_extra; - } - if (null !== $all_extra){ - $html_result .= ' ' . $all_extra; - } - $html_result .= '>'."\n"; - - $html_result .= smarty_function_html_options(array('output' => $minutes, - 'values' => $minutes, - 'selected' => $selected, - 'print_result' => false), - $smarty); - $html_result .= "</select>\n"; + $_html_minutes = ''; + $_extra = ''; + $_name = $field_array ? ($field_array . '[' . $prefix . 'Minute]') : ($prefix . 'Minute'); + if ($all_extra) { + $_extra .= ' ' . $all_extra; + } + if ($minute_extra) { + $_extra .= ' ' . $minute_extra; + } + + $_html_minutes = '<select name="' . $_name . '"'; + if ($minute_id !== null || $all_id !== null) { + $_html_minutes .= ' id="' . smarty_function_escape_special_chars( + $minute_id !== null ? ( $minute_id ? $minute_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) + ) . '"'; + } + if ($minute_size) { + $_html_minutes .= ' size="' . $minute_size . '"'; + } + $_html_minutes .= $_extra . $extra_attrs . '>' . $option_separator; + + if (isset($minute_empty) || isset($all_empty)) { + $_html_minutes .= '<option value="">' . ( isset($minute_empty) ? $minute_empty : $all_empty ) . '</option>' . $option_separator; + } + + $selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null; + for ($i=0; $i <= 59; $i += $minute_interval) { + $_val = sprintf('%02d', $i); + $_text = $minute_format == '%02d' ? $_val : sprintf($minute_format, $i); + $_value = $minute_value_format == '%02d' ? $_val : sprintf($minute_value_format, $i); + $_html_minutes .= '<option value="' . $_value . '"' + . ($selected === $i ? ' selected="selected"' : '') + . '>' . $_text . '</option>' . $option_separator; + } + + $_html_minutes .= '</select>'; } + // generate second <select> if ($display_seconds) { - $all_seconds = range(0, 59); - for ($i = 0, $for_max = count($all_seconds); $i < $for_max; $i+= $second_interval) - $seconds[] = sprintf('%02d', $all_seconds[$i]); - $selected = intval(floor(strftime('%S', $time) / $second_interval) * $second_interval); - $html_result .= '<select name='; - if (null !== $field_array) { - $html_result .= '"' . $field_array . '[' . $prefix . 'Second]"'; - } else { - $html_result .= '"' . $prefix . 'Second"'; - } - - if (null !== $second_extra){ - $html_result .= ' ' . $second_extra; - } - if (null !== $all_extra){ - $html_result .= ' ' . $all_extra; - } - $html_result .= '>'."\n"; - - $html_result .= smarty_function_html_options(array('output' => $seconds, - 'values' => $seconds, - 'selected' => $selected, - 'print_result' => false), - $smarty); - $html_result .= "</select>\n"; + $_html_seconds = ''; + $_extra = ''; + $_name = $field_array ? ($field_array . '[' . $prefix . 'Second]') : ($prefix . 'Second'); + if ($all_extra) { + $_extra .= ' ' . $all_extra; + } + if ($second_extra) { + $_extra .= ' ' . $second_extra; + } + + $_html_seconds = '<select name="' . $_name . '"'; + if ($second_id !== null || $all_id !== null) { + $_html_seconds .= ' id="' . smarty_function_escape_special_chars( + $second_id !== null ? ( $second_id ? $second_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) + ) . '"'; + } + if ($second_size) { + $_html_seconds .= ' size="' . $second_size . '"'; + } + $_html_seconds .= $_extra . $extra_attrs . '>' . $option_separator; + + if (isset($second_empty) || isset($all_empty)) { + $_html_seconds .= '<option value="">' . ( isset($second_empty) ? $second_empty : $all_empty ) . '</option>' . $option_separator; + } + + $selected = $_second !== null ? ($_second - $_second % $second_interval) : null; + for ($i=0; $i <= 59; $i += $second_interval) { + $_val = sprintf('%02d', $i); + $_text = $second_format == '%02d' ? $_val : sprintf($second_format, $i); + $_value = $second_value_format == '%02d' ? $_val : sprintf($second_value_format, $i); + $_html_seconds .= '<option value="' . $_value . '"' + . ($selected === $i ? ' selected="selected"' : '') + . '>' . $_text . '</option>' . $option_separator; + } + + $_html_seconds .= '</select>'; } + // generate meridian <select> if ($display_meridian && !$use_24_hours) { - $html_result .= '<select name='; - if (null !== $field_array) { - $html_result .= '"' . $field_array . '[' . $prefix . 'Meridian]"'; - } else { - $html_result .= '"' . $prefix . 'Meridian"'; - } - - if (null !== $meridian_extra){ - $html_result .= ' ' . $meridian_extra; - } - if (null !== $all_extra){ - $html_result .= ' ' . $all_extra; - } - $html_result .= '>'."\n"; - - $html_result .= smarty_function_html_options(array('output' => array('AM', 'PM'), - 'values' => array('am', 'pm'), - 'selected' => strtolower(strftime('%p', $time)), - 'print_result' => false), - $smarty); - $html_result .= "</select>\n"; + $_html_meridian = ''; + $_extra = ''; + $_name = $field_array ? ($field_array . '[' . $prefix . 'Meridian]') : ($prefix . 'Meridian'); + if ($all_extra) { + $_extra .= ' ' . $all_extra; + } + if ($meridian_extra) { + $_extra .= ' ' . $meridian_extra; + } + + $_html_meridian = '<select name="' . $_name . '"'; + if ($meridian_id !== null || $all_id !== null) { + $_html_meridian .= ' id="' . smarty_function_escape_special_chars( + $meridian_id !== null ? ( $meridian_id ? $meridian_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) + ) . '"'; + } + if ($meridian_size) { + $_html_meridian .= ' size="' . $meridian_size . '"'; + } + $_html_meridian .= $_extra . $extra_attrs . '>' . $option_separator; + + if (isset($meridian_empty) || isset($all_empty)) { + $_html_meridian .= '<option value="">' . ( isset($meridian_empty) ? $meridian_empty : $all_empty ) . '</option>' . $option_separator; + } + + $_html_meridian .= '<option value="am"'. ($_hour < 12 ? ' selected="selected"' : '') .'>AM</option>' . $option_separator + . '<option value="pm"'. ($_hour < 12 ? '' : ' selected="selected"') .'>PM</option>' . $option_separator + . '</select>'; } - return $html_result; -} + $_html = ''; + foreach (array('_html_hours', '_html_minutes', '_html_seconds', '_html_meridian') as $k) { + if (isset($$k)) { + if ($_html) { + $_html .= $field_separator; + } + $_html .= $$k; + } + } -/* vim: set expandtab: */ + return $_html; +} -?> +?>
\ No newline at end of file |