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 | ?> |
---|