Code

Readded smarty
[gosa.git] / gosa-core / include / smarty / plugins / function.html_select_time.php
1 <?php
2 /**
3  * Smarty plugin
4  *
5  * @package Smarty
6  * @subpackage PluginsFunction
7  */
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');
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;
42     $display_hours = true;
43     $display_minutes = true;
44     $display_seconds = true;
45     $display_meridian = true;
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';
54     $hour_size = null;
55     $minute_size = null;
56     $second_size = null;
57     $meridian_size = null;
59     $all_empty = null;
60     $hour_empty = null;
61     $minute_empty = null;
62     $second_empty = null;
63     $meridian_empty = null;
65     $all_id = null;
66     $hour_id = null;
67     $minute_id = null;
68     $second_id = null;
69     $meridian_id = null;
71     $use_24_hours = true;
72     $minute_interval = 1;
73     $second_interval = 1;
75     $extra_attrs = '';
76     $all_extra = null;
77     $hour_extra = null;
78     $minute_extra = null;
79     $second_extra = null;
80     $meridian_extra = null;
82     foreach ($params as $_key => $_value) {
83         switch ($_key) {
84             case 'time':
85                 if (!is_array($_value)) {
86                     $time = smarty_make_timestamp($_value);
87                 }
88                 break;
90             case 'prefix':
91             case 'field_array':
93             case 'field_separator':
94             case 'option_separator':
96             case 'all_extra':
97             case 'hour_extra':
98             case 'minute_extra':
99             case 'second_extra':
100             case 'meridian_extra':
102             case 'all_empty':
103             case 'hour_empty':
104             case 'minute_empty':
105             case 'second_empty':
106             case 'meridian_empty':
108             case 'all_id':
109             case 'hour_id':
110             case 'minute_id':
111             case 'second_id':
112             case 'meridian_id':
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;
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;
131             case 'minute_interval':
132             case 'second_interval':
134             case 'hour_size':
135             case 'minute_size':
136             case 'second_size':
137             case 'meridian_size':
138                 $$_key = (int)$_value;
139                 break;
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     }
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         list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s'));
184     } else {
185         list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
186     }
188     // generate hour <select>
189     if ($display_hours) {
190         $_html_hours = '';
191         $_extra = '';
192         $_name = $field_array ? ($field_array . '[' . $prefix . 'Hour]') : ($prefix . 'Hour');
193         if ($all_extra) {
194             $_extra .= ' ' . $all_extra;
195         }
196         if ($hour_extra) {
197             $_extra .= ' ' . $hour_extra;
198         }
200         $_html_hours = '<select name="' . $_name . '"';
201         if ($hour_id !== null || $all_id !== null) {
202             $_html_hours .= ' id="' . smarty_function_escape_special_chars(
203                 $hour_id !== null ? ( $hour_id ? $hour_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
204             ) . '"';
205         }
206         if ($hour_size) {
207             $_html_hours .= ' size="' . $hour_size . '"';
208         }
209         $_html_hours .= $_extra . $extra_attrs . '>' . $option_separator;
211         if (isset($hour_empty) || isset($all_empty)) {
212             $_html_hours .= '<option value="">' . ( isset($hour_empty) ? $hour_empty : $all_empty ) . '</option>' . $option_separator;
213         }
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);
222             if ($use_24_hours) {
223                 $selected = $_hour == $_val;
224             } else {
225                 $_hour12 = $_hour == 0
226                     ? 12
227                     : ($_hour <= 12 ? $_hour : $_hour -12);
228             }
230             $selected = $use_24_hours ? $_hour == $_val : $_hour12 == $_val;
231             $_html_hours .= '<option value="' . $_value . '"'
232                 . ($selected ? ' selected="selected"' : '')
233                 . '>' . $_text . '</option>' . $option_separator;
234         }
236         $_html_hours .= '</select>';
237     }
239     // generate minute <select>
240     if ($display_minutes) {
241         $_html_minutes = '';
242         $_extra = '';
243         $_name = $field_array ? ($field_array . '[' . $prefix . 'Minute]') : ($prefix . 'Minute');
244         if ($all_extra) {
245             $_extra .= ' ' . $all_extra;
246         }
247         if ($minute_extra) {
248             $_extra .= ' ' . $minute_extra;
249         }
251         $_html_minutes = '<select name="' . $_name . '"';
252         if ($minute_id !== null || $all_id !== null) {
253             $_html_minutes .= ' id="' . smarty_function_escape_special_chars(
254                 $minute_id !== null ? ( $minute_id ? $minute_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
255             ) . '"';
256         }
257         if ($minute_size) {
258             $_html_minutes .= ' size="' . $minute_size . '"';
259         }
260         $_html_minutes .= $_extra . $extra_attrs . '>' . $option_separator;
262         if (isset($minute_empty) || isset($all_empty)) {
263             $_html_minutes .= '<option value="">' . ( isset($minute_empty) ? $minute_empty : $all_empty ) . '</option>' . $option_separator;
264         }
266         $selected = $_minute - $_minute % $minute_interval;
267         for ($i=0; $i <= 59; $i += $minute_interval) {
268             $_val = sprintf('%02d', $i);
269             $_text = $minute_format == '%02d' ? $_val : sprintf($minute_format, $i);
270             $_value = $minute_value_format == '%02d' ? $_val : sprintf($minute_value_format, $i);
271             $_html_minutes .= '<option value="' . $_value . '"'
272                 . ($selected == $i ? ' selected="selected"' : '')
273                 . '>' . $_text . '</option>' . $option_separator;
274         }
276         $_html_minutes .= '</select>';
277     }
279     // generate second <select>
280     if ($display_seconds) {
281         $_html_seconds = '';
282         $_extra = '';
283         $_name = $field_array ? ($field_array . '[' . $prefix . 'Second]') : ($prefix . 'Second');
284         if ($all_extra) {
285             $_extra .= ' ' . $all_extra;
286         }
287         if ($second_extra) {
288             $_extra .= ' ' . $second_extra;
289         }
291         $_html_seconds = '<select name="' . $_name . '"';
292         if ($second_id !== null || $all_id !== null) {
293             $_html_seconds .= ' id="' . smarty_function_escape_special_chars(
294                 $second_id !== null ? ( $second_id ? $second_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
295             ) . '"';
296         }
297         if ($second_size) {
298             $_html_seconds .= ' size="' . $second_size . '"';
299         }
300         $_html_seconds .= $_extra . $extra_attrs . '>' . $option_separator;
302         if (isset($second_empty) || isset($all_empty)) {
303             $_html_seconds .= '<option value="">' . ( isset($second_empty) ? $second_empty : $all_empty ) . '</option>' . $option_separator;
304         }
306         $selected = $_second - $_second % $second_interval;
307         for ($i=0; $i <= 59; $i += $second_interval) {
308             $_val = sprintf('%02d', $i);
309             $_text = $second_format == '%02d' ? $_val : sprintf($second_format, $i);
310             $_value = $second_value_format == '%02d' ? $_val : sprintf($second_value_format, $i);
311             $_html_seconds .= '<option value="' . $_value . '"'
312                 . ($selected == $i ? ' selected="selected"' : '')
313                 . '>' . $_text . '</option>' . $option_separator;
314         }
316         $_html_seconds .= '</select>';
317     }
319     // generate meridian <select>
320     if ($display_meridian && !$use_24_hours) {
321         $_html_meridian = '';
322         $_extra = '';
323         $_name = $field_array ? ($field_array . '[' . $prefix . 'Meridian]') : ($prefix . 'Meridian');
324         if ($all_extra) {
325             $_extra .= ' ' . $all_extra;
326         }
327         if ($meridian_extra) {
328             $_extra .= ' ' . $meridian_extra;
329         }
331         $_html_meridian = '<select name="' . $_name . '"';
332         if ($meridian_id !== null || $all_id !== null) {
333             $_html_meridian .= ' id="' . smarty_function_escape_special_chars(
334                 $meridian_id !== null ? ( $meridian_id ? $meridian_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
335             ) . '"';
336         }
337         if ($meridian_size) {
338             $_html_meridian .= ' size="' . $meridian_size . '"';
339         }
340         $_html_meridian .= $_extra . $extra_attrs . '>' . $option_separator;
342         if (isset($meridian_empty) || isset($all_empty)) {
343             $_html_meridian .= '<option value="">' . ( isset($meridian_empty) ? $meridian_empty : $all_empty ) . '</option>' . $option_separator;
344         }
346         $_html_meridian .= '<option value="am"'. ($_hour < 12 ? ' selected="selected"' : '') .'>AM</option>' . $option_separator
347             . '<option value="pm"'. ($_hour < 12 ? '' : ' selected="selected"') .'>PM</option>' . $option_separator
348             . '</select>';
349     }
351     $_html = '';
352     foreach (array('_html_hours', '_html_minutes', '_html_seconds', '_html_meridian') as $k) {
353         if (isset($$k)) {
354             if ($_html) {
355                 $_html .= $field_separator;
356             }
357             $_html .= $$k;
358         }
359     }
361     return $_html;
364 ?>