1 | <?php |
---|
2 | /** |
---|
3 | * Smarty plugin |
---|
4 | * |
---|
5 | * @package Smarty |
---|
6 | * @subpackage PluginsFunction |
---|
7 | */ |
---|
8 | |
---|
9 | /** |
---|
10 | * @ignore |
---|
11 | */ |
---|
12 | require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); |
---|
13 | /** |
---|
14 | * @ignore |
---|
15 | */ |
---|
16 | require_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 | */ |
---|
34 | function 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 | ?> |
---|