]> git.mxchange.org Git - friendica.git/blob - library/Smarty/libs/plugins/function.html_select_time.php
Add Smarty to Composer
[friendica.git] / library / Smarty / libs / plugins / function.html_select_time.php
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  * Type:     function<br>
21  * Name:     html_select_time<br>
22  * Purpose:  Prints the dropdowns for time selection
23  *
24  * @link     http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time}
25  *           (Smarty online manual)
26  * @author   Roberto Berto <roberto@berto.net>
27  * @author   Monte Ohrt <monte AT ohrt DOT com>
28  *
29  * @param array $params parameters
30  *
31  * @return string
32  * @uses     smarty_make_timestamp()
33  */
34 function smarty_function_html_select_time($params)
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 > 0 && $_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 }