/** * Provides a date picker, in the form of three dropdowns. * * @param Pieform $form The form to render the element for * @param array $element The element to render * @return string The HTML for the element */ function pieform_element_date(Pieform $form, $element) { /*{{{*/ $result = ''; $name = $element['name']; $element['minyear'] = isset($element['minyear']) ? intval($element['minyear']) : 1950; $element['maxyear'] = isset($element['maxyear']) ? intval($element['maxyear']) : 2050; $required = !empty($element['rules']['required']); if ($required && !isset($element['defaultvalue'])) { $element['defaultvalue'] = time(); } // Year $value = pieform_element_date_get_timeperiod_value('year', $element['minyear'], $element['maxyear'], $element, $form); $year = '<select name="' . $name . '_year" id="' . $name . '_year"' . (!$required && !isset($element['defaultvalue']) ? ' disabled="disabled"' : '') . ' tabindex="' . $element['tabindex'] . "\">\n"; for ($i = $element['minyear']; $i <= $element['maxyear']; $i++) { $year .= "\t<option value=\"{$i}\"" . ($value == $i ? ' selected="selected"' : '') . ">{$i}</option>\n"; } $year .= "</select>\n"; // Month $value = pieform_element_date_get_timeperiod_value('month', 1, 12, $element, $form); $month = '<select name="' . $name . '_month" id="' . $name . '_month"' . (!$required && !isset($element['defaultvalue']) ? ' disabled="disabled"' : '') . ' tabindex="' . $element['tabindex'] . "\">\n"; for ($i = 1; $i <= 12; $i++) { $month .= "\t<option value=\"{$i}\"" . ($value == $i ? ' selected="selected"' : '') . '>' . date('M', strtotime("2000-{$i}-01")) . "</option>\n"; } $month .= "</select>\n"; // Day $value = pieform_element_date_get_timeperiod_value('day', 1, 31, $element, $form); $day = '<select name="' . $name . '_day" id="' . $name . '_day"' . (!$required && !isset($element['defaultvalue']) ? ' disabled="disabled"' : '') . ' tabindex="' . $element['tabindex'] . "\">\n"; for ($i = 1; $i <= 31; $i++) { $day .= "\t<option value=\"{$i}\"" . ($value == $i ? ' selected="selected"' : '') . ">{$i}</option>\n"; } $day .= '</select>'; $result = $year . $month . $day; // Optional control if (!$required) { $optional = <<<EOF <script type="text/javascript"> function {$name}_toggle(x) { if ( x.checked ) { \$('{$name}_day').disabled = true; \$('{$name}_month').disabled = true; \$('{$name}_year').disabled = true; } else { \$('{$name}_day').disabled = false; \$('{$name}_month').disabled = false; \$('{$name}_year').disabled = false; } } </script> EOF; // @todo this needs cleaning up, namely: // - get_string is a mahara-ism // - 'optional' => true should be 'required' => false shouldn't it? $optional .= ' ' . $form->i18n('element', 'date', 'or', $element) . ' <input type="checkbox" ' . (isset($element['defaultvalue']) ? '' : 'checked="checked" ') . 'name="' . $name . '_optional" id="' . $name . '_optional" onchange="' . $name . '_toggle(this)" ' . 'tabindex="' . $element['tabindex'] . '">'; $optional .= ' <label for="' . $name . '_optional">' . $form->i18n('element', 'date', 'notspecified', $element); $result .= $optional; } return $result; }
/** * Provides a date picker, in the form of three dropdowns. * * @param Pieform $form The form to render the element for * @param array $element The element to render * @return string The HTML for the element */ function pieform_element_date(Pieform $form, $element) { /*{{{*/ $result = ''; $name = Pieform::hsc($element['name']); $element['minyear'] = isset($element['minyear']) ? intval($element['minyear']) : 1950; $element['maxyear'] = isset($element['maxyear']) ? intval($element['maxyear']) : 2050; $showtime = isset($element['time']) ? $element['time'] : false; $required = !empty($element['rules']['required']); if ($required && !isset($element['defaultvalue'])) { $element['defaultvalue'] = time(); } $global = $form->get_property('method') == 'get' ? $_GET : $_POST; $dateisset = isset($element['defaultvalue']); // Optional control if (!$required) { $optional = <<<EOF <script type="application/javascript"> function {$name}_toggle(x) { var elements = [ \$('{$name}_hour'), \$('{$name}_minute'), \$('{$name}_day'), \$('{$name}_month'), \$('{$name}_year') ]; for (var i in elements) { if (elements[i]) elements[i].disabled = !x.checked; } } </script> EOF; $dateisset = $dateisset || (isset($element['value']['year']) || isset($global[$element['name'] . '_year'])) && (isset($element['value']['month']) || isset($global[$element['name'] . '_month'])) && (isset($element['value']['day']) || isset($global[$element['name'] . '_day'])); $optional .= ' <input type="checkbox" ' . ($dateisset ? 'checked="checked"' : '') . 'name="' . $name . '_optional" id="' . $name . '_optional" onchange="' . $name . '_toggle(this)" ' . 'tabindex="' . Pieform::hsc($element['tabindex']) . '">'; $optional .= ' <label for="' . $name . '_optional">' . $form->i18n('element', 'date', 'specify', $element) . ': ' . Pieform::hsc($element['title']) . '</label> '; $result .= $optional; } // Year $value = pieform_element_date_get_timeperiod_value('year', $element['minyear'], $element['maxyear'], $element, $form); $year = '<label for="' . $name . '_year" class="accessible-hidden sr-only">' . get_string('year') . '</label>'; $year .= '<span class="picker first"><select class="form-control select" name="' . $name . '_year" id="' . $name . '_year"' . (!$required && !$dateisset ? ' disabled="disabled"' : '') . ' tabindex="' . Pieform::hsc($element['tabindex']) . '"'; if (isset($element['description'])) { $year .= ' aria-describedby="' . $form->element_descriptors($element) . '"'; } $year .= ">\n"; for ($i = $element['minyear']; $i <= $element['maxyear']; $i++) { $year .= "\t<option value=\"{$i}\"" . ($value == $i ? ' selected="selected"' : '') . ">{$i}</option>\n"; } $year .= "</select></span>\n"; // Month $value = pieform_element_date_get_timeperiod_value('month', 1, 12, $element, $form); $month = '<label for="' . $name . '_month" class="accessible-hidden sr-only">' . get_string('month') . '</label>'; $month .= '<span class="picker"><select class="form-control select" name="' . $name . '_month" id="' . $name . '_month"' . (!$required && !$dateisset ? ' disabled="disabled"' : '') . ' tabindex="' . Pieform::hsc($element['tabindex']) . '"'; if (isset($element['description'])) { $month .= ' aria-describedby="' . $form->element_descriptors($element) . '"'; } $month .= ">\n"; $monthnames = explode(',', $form->i18n('element', 'date', 'monthnames', $element)); for ($i = 1; $i <= 12; $i++) { $month .= "\t<option value=\"{$i}\"" . ($value == $i ? ' selected="selected"' : '') . '>' . $monthnames[$i - 1] . "</option>\n"; } $month .= "</select></span>\n"; // Day $value = pieform_element_date_get_timeperiod_value('day', 1, 31, $element, $form); $day = '<label for="' . $name . '_day" class="accessible-hidden sr-only">' . get_string('day') . '</label>'; $day .= '<span class="picker"><select class="form-control select" name="' . $name . '_day" id="' . $name . '_day"' . (!$required && !$dateisset ? ' disabled="disabled"' : '') . ' tabindex="' . Pieform::hsc($element['tabindex']) . '"'; if (isset($element['description'])) { $day .= ' aria-describedby="' . $form->element_descriptors($element) . '"'; } $day .= ">\n"; for ($i = 1; $i <= 31; $i++) { $day .= "\t<option value=\"{$i}\"" . ($value == $i ? ' selected="selected"' : '') . ">{$i}</option>\n"; } $day .= '</select></span>'; if ($showtime) { // Hour $value = pieform_element_date_get_timeperiod_value('hour', 0, 23, $element, $form); $label = get_string('datepicker_hourText'); $hour = '<label for="' . $name . '_hour" class="accessible-hidden sr-only">' . $label . '</label>'; $hour .= '<span class="picker"><select class="form-control select" name="' . $name . '_hour" id="' . $name . '_hour"' . (!$required && !$dateisset ? ' disabled="disabled"' : '') . ' tabindex="' . Pieform::hsc($element['tabindex']) . '"'; if (isset($element['description'])) { $hour .= ' aria-describedby="' . $form->element_descriptors($element) . '"'; } $hour .= ">\n"; for ($i = 0; $i <= 23; $i++) { $hour .= "\t<option value=\"{$i}\"" . ($value == $i ? ' selected="selected"' : '') . ">" . sprintf('%02d', $i) . "</option>\n"; } $hour .= '</select></span>'; // Minute $value = pieform_element_date_get_timeperiod_value('minute', 0, 59, $element, $form); $label = get_string('datepicker_minuteText'); $minute = '<label for="' . $name . '_minute" class="accessible-hidden sr-only">' . $label . '</label>'; $minute .= '<span class="picker date"><select class="form-control select" name="' . $name . '_minute" id="' . $name . '_minute"' . (!$required && !$dateisset ? ' disabled="disabled"' : '') . ' tabindex="' . Pieform::hsc($element['tabindex']) . '"'; if (isset($element['description'])) { $minute .= ' aria-describedby="' . $form->element_descriptors($element) . '"'; } $minute .= ">\n"; for ($i = 0; $i <= 59; $i++) { $minute .= "\t<option value=\"{$i}\"" . ($value == $i ? ' selected="selected"' : '') . ">" . sprintf('%02d', $i) . "</option>\n"; } $minute .= '</select></span>'; $at = ' ' . $form->i18n('element', 'date', 'at', $element) . ' '; $result .= $year . $month . $day . $at . $hour . $minute; } else { $result .= $year . $month . $day; } return $result; }