/[cvs]/nfo/php/libs/net.php.smarty/plugins/function.html_select_date.php
ViewVC logotype

Annotation of /nfo/php/libs/net.php.smarty/plugins/function.html_select_date.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (hide annotations)
Wed Jun 16 21:58:16 2004 UTC (20 years, 2 months ago) by joko
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +144 -71 lines
updated to smarty-2.6.3

1 cvsjoko 1.1 <?php
2 joko 1.2 /**
3 cvsjoko 1.1 * Smarty plugin
4 joko 1.2 * @package Smarty
5     * @subpackage plugins
6     */
7    
8     /**
9     * Smarty {html_select_date} plugin
10     *
11     * Type: function<br>
12     * Name: html_select_date<br>
13 cvsjoko 1.1 * Purpose: Prints the dropdowns for date selection.
14     *
15 joko 1.2 * ChangeLog:<br>
16     * - 1.0 initial release
17     * - 1.1 added support for +/- N syntax for begin
18 cvsjoko 1.1 * and end year values. (Monte)
19 joko 1.2 * - 1.2 added support for yyyy-mm-dd syntax for
20 cvsjoko 1.1 * time value. (Jan Rosier)
21 joko 1.2 * - 1.3 added support for choosing format for
22 cvsjoko 1.1 * month values (Gary Loescher)
23 joko 1.2 * - 1.3.1 added support for choosing format for
24     * day values (Marcus Bointon)
25     * @link http://smarty.php.net/manual/en/language.function.html.select.date.php {html_select_date}
26     * (Smarty online manual)
27     * @version 1.3.1
28     * @author Andrei Zmievski
29     * @param array
30     * @param Smarty
31     * @return string
32 cvsjoko 1.1 */
33     function smarty_function_html_select_date($params, &$smarty)
34     {
35 joko 1.2 require_once $smarty->_get_plugin_filepath('shared','make_timestamp');
36     require_once $smarty->_get_plugin_filepath('function','html_options');
37 cvsjoko 1.1 /* Default values. */
38     $prefix = "Date_";
39     $start_year = strftime("%Y");
40     $end_year = $start_year;
41     $display_days = true;
42     $display_months = true;
43     $display_years = true;
44     $month_format = "%B";
45     /* Write months as numbers by default GL */
46     $month_value_format = "%m";
47     $day_format = "%02d";
48 joko 1.2 /* Write day values using this format MB */
49     $day_value_format = "%d";
50 cvsjoko 1.1 $year_as_text = false;
51     /* Display years in reverse order? Ie. 2000,1999,.... */
52     $reverse_years = false;
53     /* Should the select boxes be part of an array when returned from PHP?
54     e.g. setting it to "birthday", would create "birthday[Day]",
55     "birthday[Month]" & "birthday[Year]". Can be combined with prefix */
56     $field_array = null;
57     /* <select size>'s of the different <select> tags.
58     If not set, uses default dropdown. */
59     $day_size = null;
60     $month_size = null;
61     $year_size = null;
62     /* Unparsed attributes common to *ALL* the <select>/<input> tags.
63     An example might be in the template: all_extra ='class ="foo"'. */
64     $all_extra = null;
65     /* Separate attributes for the tags. */
66     $day_extra = null;
67     $month_extra = null;
68     $year_extra = null;
69     /* Order in which to display the fields.
70     "D" -> day, "M" -> month, "Y" -> year. */
71 joko 1.2 $field_order = 'MDY';
72 cvsjoko 1.1 /* String printed between the different fields. */
73     $field_separator = "\n";
74 joko 1.2 $time = time();
75     $all_empty = null;
76     $day_empty = null;
77     $month_empty = null;
78     $year_empty = null;
79    
80     foreach ($params as $_key=>$_value) {
81     switch ($_key) {
82     case 'prefix':
83     case 'time':
84     case 'start_year':
85     case 'end_year':
86     case 'month_format':
87     case 'day_format':
88     case 'day_value_format':
89     case 'field_array':
90     case 'day_size':
91     case 'month_size':
92     case 'year_size':
93     case 'all_extra':
94     case 'day_extra':
95     case 'month_extra':
96     case 'year_extra':
97     case 'field_order':
98     case 'field_separator':
99     case 'month_value_format':
100     case 'month_empty':
101     case 'day_empty':
102     case 'year_empty':
103     $$_key = (string)$_value;
104     break;
105    
106     case 'all_empty':
107     $$_key = (string)$_value;
108     $day_empty = $month_empty = $year_empty = $all_empty;
109     break;
110    
111     case 'display_days':
112     case 'display_months':
113     case 'display_years':
114     case 'year_as_text':
115     case 'reverse_years':
116     $$_key = (bool)$_value;
117     break;
118 cvsjoko 1.1
119 joko 1.2 default:
120     $smarty->trigger_error("[html_select_date] unknown parameter $_key", E_USER_WARNING);
121    
122     }
123     }
124 cvsjoko 1.1
125 joko 1.2 // If $time is not in format yyyy-mm-dd
126     if (!preg_match('/^\d{0,4}-\d{0,2}-\d{0,2}$/', $time)) {
127     // then $time is empty or unix timestamp or mysql timestamp
128     // using smarty_make_timestamp to get an unix timestamp and
129     // strftime to make yyyy-mm-dd
130     $time = strftime('%Y-%m-%d', smarty_make_timestamp($time));
131     }
132     // Now split this in pieces, which later can be used to set the select
133     $time = explode("-", $time);
134    
135     // make syntax "+N" or "-N" work with start_year and end_year
136     if (preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match)) {
137     if ($match[1] == '+') {
138     $end_year = strftime('%Y') + $match[2];
139     } else {
140     $end_year = strftime('%Y') - $match[2];
141     }
142     }
143     if (preg_match('!^(\+|\-)\s*(\d+)$!', $start_year, $match)) {
144     if ($match[1] == '+') {
145     $start_year = strftime('%Y') + $match[2];
146     } else {
147     $start_year = strftime('%Y') - $match[2];
148     }
149     }
150 cvsjoko 1.1
151     $field_order = strtoupper($field_order);
152    
153     $html_result = $month_result = $day_result = $year_result = "";
154    
155     if ($display_months) {
156     $month_names = array();
157     $month_values = array();
158 joko 1.2 if(isset($month_empty)) {
159     $month_names[''] = $month_empty;
160     $month_values[''] = '';
161     }
162 cvsjoko 1.1 for ($i = 1; $i <= 12; $i++) {
163 joko 1.2 $month_names[$i] = strftime($month_format, mktime(0, 0, 0, $i, 1, 2000));
164     $month_values[$i] = strftime($month_value_format, mktime(0, 0, 0, $i, 1, 2000));
165 cvsjoko 1.1 }
166    
167     $month_result .= '<select name=';
168     if (null !== $field_array){
169     $month_result .= '"' . $field_array . '[' . $prefix . 'Month]"';
170     } else {
171     $month_result .= '"' . $prefix . 'Month"';
172     }
173     if (null !== $month_size){
174     $month_result .= ' size="' . $month_size . '"';
175     }
176     if (null !== $month_extra){
177     $month_result .= ' ' . $month_extra;
178     }
179     if (null !== $all_extra){
180     $month_result .= ' ' . $all_extra;
181     }
182     $month_result .= '>'."\n";
183 joko 1.2
184 cvsjoko 1.1 $month_result .= smarty_function_html_options(array('output' => $month_names,
185     'values' => $month_values,
186 joko 1.2 'selected' => $a=$time[1] ? strftime($month_value_format, mktime(0, 0, 0, (int)$time[1], 1, 2000)) : '',
187 cvsjoko 1.1 'print_result' => false),
188     $smarty);
189     $month_result .= '</select>';
190     }
191    
192     if ($display_days) {
193     $days = array();
194 joko 1.2 if (isset($day_empty)) {
195     $days[''] = $day_empty;
196     $day_values[''] = '';
197     }
198     for ($i = 1; $i <= 31; $i++) {
199 cvsjoko 1.1 $days[] = sprintf($day_format, $i);
200 joko 1.2 $day_values[] = sprintf($day_value_format, $i);
201     }
202 cvsjoko 1.1
203     $day_result .= '<select name=';
204     if (null !== $field_array){
205     $day_result .= '"' . $field_array . '[' . $prefix . 'Day]"';
206     } else {
207     $day_result .= '"' . $prefix . 'Day"';
208     }
209     if (null !== $day_size){
210     $day_result .= ' size="' . $day_size . '"';
211     }
212     if (null !== $all_extra){
213     $day_result .= ' ' . $all_extra;
214     }
215     if (null !== $day_extra){
216     $day_result .= ' ' . $day_extra;
217     }
218     $day_result .= '>'."\n";
219     $day_result .= smarty_function_html_options(array('output' => $days,
220 joko 1.2 'values' => $day_values,
221 cvsjoko 1.1 'selected' => $time[2],
222     'print_result' => false),
223     $smarty);
224     $day_result .= '</select>';
225     }
226    
227     if ($display_years) {
228     if (null !== $field_array){
229     $year_name = $field_array . '[' . $prefix . 'Year]';
230     } else {
231     $year_name = $prefix . 'Year';
232     }
233     if ($year_as_text) {
234     $year_result .= '<input type="text" name="' . $year_name . '" value="' . $time[0] . '" size="4" maxlength="4"';
235     if (null !== $all_extra){
236     $year_result .= ' ' . $all_extra;
237     }
238     if (null !== $year_extra){
239     $year_result .= ' ' . $year_extra;
240     }
241     $year_result .= '>';
242     } else {
243     $years = range((int)$start_year, (int)$end_year);
244     if ($reverse_years) {
245     rsort($years, SORT_NUMERIC);
246     }
247 joko 1.2 $yearvals = $years;
248     if(isset($year_empty)) {
249     array_unshift($years, $year_empty);
250     array_unshift($yearvals, '');
251     }
252 cvsjoko 1.1 $year_result .= '<select name="' . $year_name . '"';
253     if (null !== $year_size){
254     $year_result .= ' size="' . $year_size . '"';
255     }
256     if (null !== $all_extra){
257     $year_result .= ' ' . $all_extra;
258     }
259     if (null !== $year_extra){
260     $year_result .= ' ' . $year_extra;
261     }
262     $year_result .= '>'."\n";
263     $year_result .= smarty_function_html_options(array('output' => $years,
264 joko 1.2 'values' => $yearvals,
265 cvsjoko 1.1 'selected' => $time[0],
266     'print_result' => false),
267     $smarty);
268     $year_result .= '</select>';
269     }
270     }
271    
272     // Loop thru the field_order field
273     for ($i = 0; $i <= 2; $i++){
274 joko 1.2 $c = substr($field_order, $i, 1);
275     switch ($c){
276     case 'D':
277     $html_result .= $day_result;
278     break;
279    
280     case 'M':
281     $html_result .= $month_result;
282     break;
283    
284     case 'Y':
285     $html_result .= $year_result;
286     break;
287     }
288     // Add the field seperator
289     if($i != 2) {
290     $html_result .= $field_separator;
291     }
292 cvsjoko 1.1 }
293    
294 joko 1.2 return $html_result;
295 cvsjoko 1.1 }
296    
297     /* vim: set expandtab: */
298    
299     ?>

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed