source: trunk/include/smarty/libs/plugins/function.html_select_time.php @ 23384

Last change on this file since 23384 was 23384, checked in by rvelices, 11 years ago

smarty 3 - first pass for tests

  • Property svn:eol-style set to LF
File size: 12.9 KB
Line 
1<?php
2/**
3 * Smarty plugin
4 *
5 * @package Smarty
6 * @subpackage PluginsFunction
7 */
8
9/**
10 * @ignore
11 */
12require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
13/**
14 * @ignore
15 */
16require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
17
18/**
19 * Smarty {html_select_time} function plugin
20 *
21 * Type:     function<br>
22 * Name:     html_select_time<br>
23 * Purpose:  Prints the dropdowns for time selection
24 *
25 * @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time}
26 *          (Smarty online manual)
27 * @author Roberto Berto <roberto@berto.net>
28 * @author Monte Ohrt <monte AT ohrt DOT com>
29 * @param array                    $params   parameters
30 * @param Smarty_Internal_Template $template template object
31 * @return string
32 * @uses smarty_make_timestamp()
33 */
34function smarty_function_html_select_time($params, $template)
35{
36    $prefix = "Time_";
37    $field_array = null;
38    $field_separator = "\n";
39    $option_separator = "\n";
40    $time = null;
41
42    $display_hours = true;
43    $display_minutes = true;
44    $display_seconds = true;
45    $display_meridian = true;
46
47    $hour_format = '%02d';
48    $hour_value_format = '%02d';
49    $minute_format = '%02d';
50    $minute_value_format = '%02d';
51    $second_format = '%02d';
52    $second_value_format = '%02d';
53
54    $hour_size = null;
55    $minute_size = null;
56    $second_size = null;
57    $meridian_size = null;
58
59    $all_empty = null;
60    $hour_empty = null;
61    $minute_empty = null;
62    $second_empty = null;
63    $meridian_empty = null;
64
65    $all_id = null;
66    $hour_id = null;
67    $minute_id = null;
68    $second_id = null;
69    $meridian_id = null;
70
71    $use_24_hours = true;
72    $minute_interval = 1;
73    $second_interval = 1;
74
75    $extra_attrs = '';
76    $all_extra = null;
77    $hour_extra = null;
78    $minute_extra = null;
79    $second_extra = null;
80    $meridian_extra = null;
81
82    foreach ($params as $_key => $_value) {
83        switch ($_key) {
84            case 'time':
85                if (!is_array($_value) && $_value !== null) {
86                    $time = smarty_make_timestamp($_value);
87                }
88                break;
89
90            case 'prefix':
91            case 'field_array':
92
93            case 'field_separator':
94            case 'option_separator':
95
96            case 'all_extra':
97            case 'hour_extra':
98            case 'minute_extra':
99            case 'second_extra':
100            case 'meridian_extra':
101
102            case 'all_empty':
103            case 'hour_empty':
104            case 'minute_empty':
105            case 'second_empty':
106            case 'meridian_empty':
107
108            case 'all_id':
109            case 'hour_id':
110            case 'minute_id':
111            case 'second_id':
112            case 'meridian_id':
113
114            case 'hour_format':
115            case 'hour_value_format':
116            case 'minute_format':
117            case 'minute_value_format':
118            case 'second_format':
119            case 'second_value_format':
120                $$_key = (string)$_value;
121                break;
122
123            case 'display_hours':
124            case 'display_minutes':
125            case 'display_seconds':
126            case 'display_meridian':
127            case 'use_24_hours':
128                $$_key = (bool)$_value;
129                break;
130
131            case 'minute_interval':
132            case 'second_interval':
133
134            case 'hour_size':
135            case 'minute_size':
136            case 'second_size':
137            case 'meridian_size':
138                $$_key = (int)$_value;
139                break;
140
141            default:
142                if (!is_array($_value)) {
143                    $extra_attrs .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_value) . '"';
144                } else {
145                    trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
146                }
147                break;
148        }
149    }
150
151    if (isset($params['time']) && is_array($params['time'])) {
152        if (isset($params['time'][$prefix . 'Hour'])) {
153            // $_REQUEST[$field_array] given
154            foreach (array('H' => 'Hour',  'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
155                $_variableName = '_' . strtolower($_elementName);
156                $$_variableName = isset($params['time'][$prefix . $_elementName])
157                    ? $params['time'][$prefix . $_elementName]
158                    : date($_elementKey);
159            }
160            $_meridian = isset($params['time'][$prefix . 'Meridian'])
161                ? (' ' . $params['time'][$prefix . 'Meridian'])
162                : '';
163            $time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian );
164            list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
165        } elseif (isset($params['time'][$field_array][$prefix . 'Hour'])) {
166            // $_REQUEST given
167            foreach (array('H' => 'Hour',  'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
168                $_variableName = '_' . strtolower($_elementName);
169                $$_variableName = isset($params['time'][$field_array][$prefix . $_elementName])
170                    ? $params['time'][$field_array][$prefix . $_elementName]
171                    : date($_elementKey);
172            }
173            $_meridian = isset($params['time'][$field_array][$prefix . 'Meridian'])
174                ? (' ' . $params['time'][$field_array][$prefix . 'Meridian'])
175                : '';
176            $time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian );
177            list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
178        } else {
179            // no date found, use NOW
180            list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d'));
181        }
182    } elseif ($time === null) {
183        if (array_key_exists('time', $params)) {
184            $_hour = $_minute = $_second = $time = null;
185        } else {
186            list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s'));
187        }
188    } else {
189        list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
190    }
191
192    // generate hour <select>
193    if ($display_hours) {
194        $_html_hours = '';
195        $_extra = '';
196        $_name = $field_array ? ($field_array . '[' . $prefix . 'Hour]') : ($prefix . 'Hour');
197        if ($all_extra) {
198            $_extra .= ' ' . $all_extra;
199        }
200        if ($hour_extra) {
201            $_extra .= ' ' . $hour_extra;
202        }
203
204        $_html_hours = '<select name="' . $_name . '"';
205        if ($hour_id !== null || $all_id !== null) {
206            $_html_hours .= ' id="' . smarty_function_escape_special_chars(
207                $hour_id !== null ? ( $hour_id ? $hour_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
208            ) . '"';
209        }
210        if ($hour_size) {
211            $_html_hours .= ' size="' . $hour_size . '"';
212        }
213        $_html_hours .= $_extra . $extra_attrs . '>' . $option_separator;
214
215        if (isset($hour_empty) || isset($all_empty)) {
216            $_html_hours .= '<option value="">' . ( isset($hour_empty) ? $hour_empty : $all_empty ) . '</option>' . $option_separator;
217        }
218
219        $start = $use_24_hours ? 0 : 1;
220        $end = $use_24_hours ? 23 : 12;
221        for ($i=$start; $i <= $end; $i++) {
222            $_val = sprintf('%02d', $i);
223            $_text = $hour_format == '%02d' ? $_val : sprintf($hour_format, $i);
224            $_value = $hour_value_format == '%02d' ? $_val : sprintf($hour_value_format, $i);
225
226            if (!$use_24_hours) {
227                $_hour12 = $_hour == 0
228                    ? 12
229                    : ($_hour <= 12 ? $_hour : $_hour -12);
230            }
231
232            $selected = $_hour !== null ? ($use_24_hours ? $_hour == $_val : $_hour12 == $_val) : null;
233            $_html_hours .= '<option value="' . $_value . '"'
234                . ($selected ? ' selected="selected"' : '')
235                . '>' . $_text . '</option>' . $option_separator;
236        }
237
238        $_html_hours .= '</select>';
239    }
240
241    // generate minute <select>
242    if ($display_minutes) {
243        $_html_minutes = '';
244        $_extra = '';
245        $_name = $field_array ? ($field_array . '[' . $prefix . 'Minute]') : ($prefix . 'Minute');
246        if ($all_extra) {
247            $_extra .= ' ' . $all_extra;
248        }
249        if ($minute_extra) {
250            $_extra .= ' ' . $minute_extra;
251        }
252
253        $_html_minutes = '<select name="' . $_name . '"';
254        if ($minute_id !== null || $all_id !== null) {
255            $_html_minutes .= ' id="' . smarty_function_escape_special_chars(
256                $minute_id !== null ? ( $minute_id ? $minute_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
257            ) . '"';
258        }
259        if ($minute_size) {
260            $_html_minutes .= ' size="' . $minute_size . '"';
261        }
262        $_html_minutes .= $_extra . $extra_attrs . '>' . $option_separator;
263
264        if (isset($minute_empty) || isset($all_empty)) {
265            $_html_minutes .= '<option value="">' . ( isset($minute_empty) ? $minute_empty : $all_empty ) . '</option>' . $option_separator;
266        }
267
268        $selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null;
269        for ($i=0; $i <= 59; $i += $minute_interval) {
270            $_val = sprintf('%02d', $i);
271            $_text = $minute_format == '%02d' ? $_val : sprintf($minute_format, $i);
272            $_value = $minute_value_format == '%02d' ? $_val : sprintf($minute_value_format, $i);
273            $_html_minutes .= '<option value="' . $_value . '"'
274                . ($selected === $i ? ' selected="selected"' : '')
275                . '>' . $_text . '</option>' . $option_separator;
276        }
277
278        $_html_minutes .= '</select>';
279    }
280
281    // generate second <select>
282    if ($display_seconds) {
283        $_html_seconds = '';
284        $_extra = '';
285        $_name = $field_array ? ($field_array . '[' . $prefix . 'Second]') : ($prefix . 'Second');
286        if ($all_extra) {
287            $_extra .= ' ' . $all_extra;
288        }
289        if ($second_extra) {
290            $_extra .= ' ' . $second_extra;
291        }
292
293        $_html_seconds = '<select name="' . $_name . '"';
294        if ($second_id !== null || $all_id !== null) {
295            $_html_seconds .= ' id="' . smarty_function_escape_special_chars(
296                $second_id !== null ? ( $second_id ? $second_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
297            ) . '"';
298        }
299        if ($second_size) {
300            $_html_seconds .= ' size="' . $second_size . '"';
301        }
302        $_html_seconds .= $_extra . $extra_attrs . '>' . $option_separator;
303
304        if (isset($second_empty) || isset($all_empty)) {
305            $_html_seconds .= '<option value="">' . ( isset($second_empty) ? $second_empty : $all_empty ) . '</option>' . $option_separator;
306        }
307
308        $selected = $_second !== null ? ($_second - $_second % $second_interval) : null;
309        for ($i=0; $i <= 59; $i += $second_interval) {
310            $_val = sprintf('%02d', $i);
311            $_text = $second_format == '%02d' ? $_val : sprintf($second_format, $i);
312            $_value = $second_value_format == '%02d' ? $_val : sprintf($second_value_format, $i);
313            $_html_seconds .= '<option value="' . $_value . '"'
314                . ($selected === $i ? ' selected="selected"' : '')
315                . '>' . $_text . '</option>' . $option_separator;
316        }
317
318        $_html_seconds .= '</select>';
319    }
320
321    // generate meridian <select>
322    if ($display_meridian && !$use_24_hours) {
323        $_html_meridian = '';
324        $_extra = '';
325        $_name = $field_array ? ($field_array . '[' . $prefix . 'Meridian]') : ($prefix . 'Meridian');
326        if ($all_extra) {
327            $_extra .= ' ' . $all_extra;
328        }
329        if ($meridian_extra) {
330            $_extra .= ' ' . $meridian_extra;
331        }
332
333        $_html_meridian = '<select name="' . $_name . '"';
334        if ($meridian_id !== null || $all_id !== null) {
335            $_html_meridian .= ' id="' . smarty_function_escape_special_chars(
336                $meridian_id !== null ? ( $meridian_id ? $meridian_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
337            ) . '"';
338        }
339        if ($meridian_size) {
340            $_html_meridian .= ' size="' . $meridian_size . '"';
341        }
342        $_html_meridian .= $_extra . $extra_attrs . '>' . $option_separator;
343
344        if (isset($meridian_empty) || isset($all_empty)) {
345            $_html_meridian .= '<option value="">' . ( isset($meridian_empty) ? $meridian_empty : $all_empty ) . '</option>' . $option_separator;
346        }
347
348        $_html_meridian .= '<option value="am"'. ($_hour < 12 ? ' selected="selected"' : '') .'>AM</option>' . $option_separator
349            . '<option value="pm"'. ($_hour < 12 ? '' : ' selected="selected"') .'>PM</option>' . $option_separator
350            . '</select>';
351    }
352
353    $_html = '';
354    foreach (array('_html_hours', '_html_minutes', '_html_seconds', '_html_meridian') as $k) {
355        if (isset($$k)) {
356            if ($_html) {
357                $_html .= $field_separator;
358            }
359            $_html .= $$k;
360        }
361    }
362
363    return $_html;
364}
365
366?>
Note: See TracBrowser for help on using the repository browser.