smarty/plugins/function.html_select_time.php
changeset 0 c63de9eb7045
equal deleted inserted replaced
-1:000000000000 0:c63de9eb7045
       
     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 ?>