Example #1
0
 /**
  * build an input field in a form to select date and/or time
  *
  * Type can have one of following values:
  * - 'date' - to enter a date
  * - 'date_time' - to enter a date and time at once
  * - 'day_month_year' - to remember date, month and year, in that order
  * - 'month_year' - to remember only month and year, but not date in month, nor time
  *
  * @param string the field name and id
  * @param string value to display to the surfer
  * @param string input type
  * @param string some javascript code to be put in onchange="..." attribute
  * @return the HTML to display
  *
  */
 public static function &build_input_time($name, $value, $type, $onchange = NULL)
 {
     global $context;
     // some javascript to call on change
     if ($onchange) {
         $onchange = ' onchange="' . $onchange . '" ';
     } else {
         $onchange = '';
     }
     switch ($type) {
         case 'date':
             // do not display 0s on screen
             if ($value <= '0000-00-00') {
                 $value = '';
             }
             // date stamps are handled in regular text fields
             $text = '<input type="text" name="' . $name . '" id="' . $name . '" class="date-picker" value="' . encode_field($value) . '" size="20" maxlength="255" ' . $onchange . ' />';
             // fuse not to load script twice
             static $fuse_date = false;
             if (!$fuse_date) {
                 // load fr localization
                 // initialize datetimepicker on page loading
                 Page::insert_script('$(function() {' . "\n" . '      $(".date-picker").datepicker({dateFormat: "yy-mm-dd"});' . "\n" . '});' . "\n");
             }
             $fuse_date = true;
             return $text;
         case 'date_time':
             // do not display 0s on screen
             if ($value <= '0000-00-00 00:00:00') {
                 $value = '';
             }
             // date stamps are handled in regular text fields
             $text = '<input type="text" name="' . $name . '" id="' . $name . '" class="date-time-picker" value="' . encode_field($value) . '" size="20" maxlength="255" ' . $onchange . ' />';
             // fuse not to load script twice
             static $fuse_datetime = false;
             if (!$fuse_datetime) {
                 // load fr localization
                 // initialize datetimepicker on page loading
                 Page::insert_script('$(function() {' . "\n" . '      $(".date-time-picker").datetimepicker({dateFormat: "yy-mm-dd"});' . "\n" . '});' . "\n");
                 // load the timepicker library to extend datepicker
                 $context['javascript']['timepicker'] = TRUE;
             }
             $fuse_datetime = true;
             return $text;
         case 'day_month_year':
             // do not display 0s on screen
             if ($value <= '0000-00-00 00:00:00') {
                 $value = '';
             }
             // date stamps are handled in regular text fields
             $text = '<input type="text" name="' . $name . '" id="' . $name . '" value="' . encode_field($value) . '" size="20" maxlength="255" />' . '<img src="' . $context['url_to_root'] . 'included/jscalendar/img.gif" id="' . $name . '_trigger" style="border: none; cursor: pointer;" title="Date selector" onmouseover="this.style.background=\'red\'; javascript:Calendar.setup({inputField:\'' . $name . '\',ifFormat:\'%d/%m/%Y \',showsTime:false,timeFormat:\'24\',button:\'' . $name . '_trigger\',align:\'CC\',singleClick:true});"  onmouseout="this.style.background=\'\'" alt="" />';
             // load the jscalendar library
             $context['javascript']['calendar'] = TRUE;
             return $text;
         case 'month_year':
             // do not display 0s on screen
             if ($value <= '0000-00-00') {
                 $value = '';
             }
             // date stamps are handled in regular text fields
             $text = '<input type="text" name="' . $name . '" id="' . $name . '" class="month-year-picker" value="' . encode_field($value) . '" size="20" maxlength="255" ' . $onchange . ' />';
             Page::insert_script('$(function() {' . "\n" . '$(".month-year-picker").datepicker({' . 'changeMonth:true, ' . 'changeYear:true,' . 'showButtonPanel:true,' . 'dateFormat: "yy-mm",' . 'beforeShow: function(el, dp) {
                                 $("#ui-datepicker-div").addClass("hide-calendar");
                                 var datestr;
                                 if ((datestr = $(this).val()).length > 0) {
                                     year = datestr.substring(0, 4);
                                     month = parseInt(datestr.substring(5));
                                     console.log(year + " " + month);
                                     $(this).datepicker("option", "defaultDate", new Date(year, month-1, 1));
                                 }
                             },' . 'onClose: function(dateText, inst) { 
                                 var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
                                 var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
                                 $(this).datepicker("setDate", new Date(year, month, 1));
                                 }' . '});' . "\n" . '});' . "\n");
             Page::insert_style(".hide-calendar .ui-datepicker-calendar {display: none;}");
             return $text;
         case 'time':
             $text = '<input type="text" name="' . $name . '" id="' . $name . '" class="time-picker" value="' . encode_field($value) . '" size="20" maxlength="255" ' . $onchange . ' />';
             // fuse not to load script twice
             static $fuse_time = false;
             if (!$fuse_time) {
                 // load fr localization
                 // initialize datetimepicker on page loading
                 Page::insert_script('$(function() {' . "\n" . '      $(".time-picker").timepicker();' . "\n" . '});' . "\n");
                 // load the timepicker library to extend datepicker
                 $context['javascript']['timepicker'] = TRUE;
             }
             return $text;
         default:
             $text = 'Unknown type ' . $type . ' submitted to Skin::build_input()';
             return $text;
     }
 }