|
1 <?php |
|
2 /** |
|
3 * Smarty plugin |
|
4 * @package Smarty |
|
5 * @subpackage plugins |
|
6 */ |
|
7 |
|
8 |
|
9 /** |
|
10 * Smarty {html_select_time} function plugin |
|
11 * |
|
12 * Type: function<br> |
|
13 * Name: html_select_time<br> |
|
14 * Purpose: Prints the dropdowns for time selection |
|
15 * @link http://smarty.php.net/manual/en/language.function.html.select.time.php {html_select_time} |
|
16 * (Smarty online manual) |
|
17 * @author Roberto Berto <roberto@berto.net> |
|
18 * @credits Monte Ohrt <monte AT ohrt DOT com> |
|
19 * @param array |
|
20 * @param Smarty |
|
21 * @return string |
|
22 * @uses smarty_make_timestamp() |
|
23 */ |
|
24 function smarty_function_html_select_time($params, &$smarty) |
|
25 { |
|
26 require_once $smarty->_get_plugin_filepath('shared','make_timestamp'); |
|
27 require_once $smarty->_get_plugin_filepath('function','html_options'); |
|
28 /* Default values. */ |
|
29 $prefix = "Time_"; |
|
30 $time = time(); |
|
31 $display_hours = true; |
|
32 $display_minutes = true; |
|
33 $display_seconds = true; |
|
34 $display_meridian = true; |
|
35 $use_24_hours = true; |
|
36 $minute_interval = 1; |
|
37 $second_interval = 1; |
|
38 /* Should the select boxes be part of an array when returned from PHP? |
|
39 e.g. setting it to "birthday", would create "birthday[Hour]", |
|
40 "birthday[Minute]", "birthday[Seconds]" & "birthday[Meridian]". |
|
41 Can be combined with prefix. */ |
|
42 $field_array = null; |
|
43 $all_extra = null; |
|
44 $hour_extra = null; |
|
45 $minute_extra = null; |
|
46 $second_extra = null; |
|
47 $meridian_extra = null; |
|
48 |
|
49 foreach ($params as $_key=>$_value) { |
|
50 switch ($_key) { |
|
51 case 'prefix': |
|
52 case 'time': |
|
53 case 'field_array': |
|
54 case 'all_extra': |
|
55 case 'hour_extra': |
|
56 case 'minute_extra': |
|
57 case 'second_extra': |
|
58 case 'meridian_extra': |
|
59 $$_key = (string)$_value; |
|
60 break; |
|
61 |
|
62 case 'display_hours': |
|
63 case 'display_minutes': |
|
64 case 'display_seconds': |
|
65 case 'display_meridian': |
|
66 case 'use_24_hours': |
|
67 $$_key = (bool)$_value; |
|
68 break; |
|
69 |
|
70 case 'minute_interval': |
|
71 case 'second_interval': |
|
72 $$_key = (int)$_value; |
|
73 break; |
|
74 |
|
75 default: |
|
76 $smarty->trigger_error("[html_select_time] unknown parameter $_key", E_USER_WARNING); |
|
77 } |
|
78 } |
|
79 |
|
80 $time = smarty_make_timestamp($time); |
|
81 |
|
82 $html_result = ''; |
|
83 |
|
84 if ($display_hours) { |
|
85 $hours = $use_24_hours ? range(0, 23) : range(1, 12); |
|
86 $hour_fmt = $use_24_hours ? '%H' : '%I'; |
|
87 for ($i = 0, $for_max = count($hours); $i < $for_max; $i++) |
|
88 $hours[$i] = sprintf('%02d', $hours[$i]); |
|
89 $html_result .= '<select name='; |
|
90 if (null !== $field_array) { |
|
91 $html_result .= '"' . $field_array . '[' . $prefix . 'Hour]"'; |
|
92 } else { |
|
93 $html_result .= '"' . $prefix . 'Hour"'; |
|
94 } |
|
95 if (null !== $hour_extra){ |
|
96 $html_result .= ' ' . $hour_extra; |
|
97 } |
|
98 if (null !== $all_extra){ |
|
99 $html_result .= ' ' . $all_extra; |
|
100 } |
|
101 $html_result .= '>'."\n"; |
|
102 $html_result .= smarty_function_html_options(array('output' => $hours, |
|
103 'values' => $hours, |
|
104 'selected' => strftime($hour_fmt, $time), |
|
105 'print_result' => false), |
|
106 $smarty); |
|
107 $html_result .= "</select>\n"; |
|
108 } |
|
109 |
|
110 if ($display_minutes) { |
|
111 $all_minutes = range(0, 59); |
|
112 for ($i = 0, $for_max = count($all_minutes); $i < $for_max; $i+= $minute_interval) |
|
113 $minutes[] = sprintf('%02d', $all_minutes[$i]); |
|
114 $selected = intval(floor(strftime('%M', $time) / $minute_interval) * $minute_interval); |
|
115 $html_result .= '<select name='; |
|
116 if (null !== $field_array) { |
|
117 $html_result .= '"' . $field_array . '[' . $prefix . 'Minute]"'; |
|
118 } else { |
|
119 $html_result .= '"' . $prefix . 'Minute"'; |
|
120 } |
|
121 if (null !== $minute_extra){ |
|
122 $html_result .= ' ' . $minute_extra; |
|
123 } |
|
124 if (null !== $all_extra){ |
|
125 $html_result .= ' ' . $all_extra; |
|
126 } |
|
127 $html_result .= '>'."\n"; |
|
128 |
|
129 $html_result .= smarty_function_html_options(array('output' => $minutes, |
|
130 'values' => $minutes, |
|
131 'selected' => $selected, |
|
132 'print_result' => false), |
|
133 $smarty); |
|
134 $html_result .= "</select>\n"; |
|
135 } |
|
136 |
|
137 if ($display_seconds) { |
|
138 $all_seconds = range(0, 59); |
|
139 for ($i = 0, $for_max = count($all_seconds); $i < $for_max; $i+= $second_interval) |
|
140 $seconds[] = sprintf('%02d', $all_seconds[$i]); |
|
141 $selected = intval(floor(strftime('%S', $time) / $second_interval) * $second_interval); |
|
142 $html_result .= '<select name='; |
|
143 if (null !== $field_array) { |
|
144 $html_result .= '"' . $field_array . '[' . $prefix . 'Second]"'; |
|
145 } else { |
|
146 $html_result .= '"' . $prefix . 'Second"'; |
|
147 } |
|
148 |
|
149 if (null !== $second_extra){ |
|
150 $html_result .= ' ' . $second_extra; |
|
151 } |
|
152 if (null !== $all_extra){ |
|
153 $html_result .= ' ' . $all_extra; |
|
154 } |
|
155 $html_result .= '>'."\n"; |
|
156 |
|
157 $html_result .= smarty_function_html_options(array('output' => $seconds, |
|
158 'values' => $seconds, |
|
159 'selected' => $selected, |
|
160 'print_result' => false), |
|
161 $smarty); |
|
162 $html_result .= "</select>\n"; |
|
163 } |
|
164 |
|
165 if ($display_meridian && !$use_24_hours) { |
|
166 $html_result .= '<select name='; |
|
167 if (null !== $field_array) { |
|
168 $html_result .= '"' . $field_array . '[' . $prefix . 'Meridian]"'; |
|
169 } else { |
|
170 $html_result .= '"' . $prefix . 'Meridian"'; |
|
171 } |
|
172 |
|
173 if (null !== $meridian_extra){ |
|
174 $html_result .= ' ' . $meridian_extra; |
|
175 } |
|
176 if (null !== $all_extra){ |
|
177 $html_result .= ' ' . $all_extra; |
|
178 } |
|
179 $html_result .= '>'."\n"; |
|
180 |
|
181 $html_result .= smarty_function_html_options(array('output' => array('AM', 'PM'), |
|
182 'values' => array('am', 'pm'), |
|
183 'selected' => strtolower(strftime('%p', $time)), |
|
184 'print_result' => false), |
|
185 $smarty); |
|
186 $html_result .= "</select>\n"; |
|
187 } |
|
188 |
|
189 return $html_result; |
|
190 } |
|
191 |
|
192 /* vim: set expandtab: */ |
|
193 |
|
194 ?> |