source: trunk/include/smarty/libs/plugins/function.html_select_time.php @ 3282

Last change on this file since 3282 was 3282, checked in by plg, 16 years ago

change: according to topic:15067, svn:keywords property was removed

  • Property svn:eol-style set to LF
File size: 7.1 KB
Line 
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 */
24function 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?>
Note: See TracBrowser for help on using the repository browser.