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