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