Пример #1
0
/**
 * 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;
}
Пример #2
0
/**
 * 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;
}