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