/** * 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; } }