You are here

function date_select_validate in Date 6.2

Same name and namespace in other branches
  1. 5.2 date_api_elements.inc \date_select_validate()
  2. 6 date_api_elements.inc \date_select_validate()
  3. 7.3 date_api/date_api_elements.inc \date_select_validate()
  4. 7 date_api/date_api_elements.inc \date_select_validate()
  5. 7.2 date_api/date_api_elements.inc \date_select_validate()

Validation function for date selector.

When used as a Views widget, the validation step always gets triggered, even with no form submission. Before form submission $element['#value'] contains a string, after submission it contains an array.

1 string reference to 'date_select_validate'
date_select_process in ./date_api_elements.inc
Flexible date/time drop-down selector.

File

./date_api_elements.inc, line 371
Date API elements themes and validation. This file is only included during the edit process to reduce memory usage.

Code

function date_select_validate($element, &$form_state) {
  if (is_string($element['#value'])) {
    return;
  }

  // Strip field labels out of the results.
  foreach ($element['#value'] as $field => $field_value) {
    if (drupal_substr($field_value, 0, 1) == '-') {
      $element['#value'][$field] = '';
    }
  }
  $error_field = implode('][', $element['#parents']);
  $errors = array();
  $label = !empty($element['#date_title']) ? $element['#date_title'] : (!empty($element['#title']) ? $element['#title'] : '');
  if (in_array('year', $element['#granularity']) && ($element['#required'] || !empty($element['#value']['year']))) {
    if ($element['#value']['year'] < variable_get('date_min_year', 1) || $element['#value']['year'] > variable_get('date_max_year', 4000)) {
      $errors[] = t('The year must be a number between %min and %max.', array(
        '%min' => variable_get('date_min_year', 1),
        '%max' => variable_get('date_max_year', 4000),
      ));
    }
    else {
      $year = $element['#value']['year'];
    }
  }
  if (in_array('month', $element['#granularity']) && ($element['#required'] || !empty($element['#value']['month']))) {
    if ($element['#value']['month'] < 1 || $element['#value']['month'] > 12) {
      $errors[] = t('The month must be a number between 1 and 12.');
    }
    else {
      $month = $element['#value']['month'];
    }
  }
  if (in_array('day', $element['#granularity']) && ($element['#required'] || !empty($element['#value']['day']))) {
    $min = 1;
    $max = isset($year) && isset($month) ? date_days_in_month($year, $month) : 31;
    if ($element['#value']['day'] < $min || $element['#value']['day'] > $max) {
      $errors[] = t('The day must be a number between !min and !max.', array(
        '!min' => $min,
        '!max' => $max,
      ));
    }
  }
  if (in_array('hour', $element['#granularity']) && ($element['#required'] || !empty($element['#value']['hour']))) {
    $min = isset($element['#value']['ampm']) ? 1 : 0;
    $max = isset($element['#value']['ampm']) ? 12 : 23;
    if ($element['#value']['hour'] < $min || $element['#value']['hour'] > $max) {
      $errors[] = t('The hour must be a number between !min and !max.', array(
        '!min' => $min,
        '!max' => $max,
      ));
    }
  }
  if (in_array('minute', $element['#granularity']) && ($element['#required'] || !empty($element['#value']['minute']))) {
    $min = 0;
    $max = 59;
    if ($element['#value']['minute'] < $min || $element['#value']['minute'] > $max) {
      $errors[] = t('The minute must be a number between !min and !max.', array(
        '!min' => $min,
        '!max' => $max,
      ));
    }
  }
  if (in_array('second', $element['#granularity']) && ($element['#required'] || !empty($element['#value']['second']))) {
    $min = 0;
    $max = 59;
    if ($element['#value']['second'] < $min || $element['#value']['second'] > $max) {
      $errors[] = t('The second must be a number between !min and !max.', array(
        '!min' => $min,
        '!max' => $max,
      ));
    }
  }
  if (isset($element['#value']['ampm'])) {
    if ($element['#value']['ampm'] == 'pm' && $element['#value']['hour'] < 12) {
      $element['#value']['hour'] += 12;
    }
    elseif ($element['#value']['ampm'] == 'am' && $element['#value']['hour'] == 12) {
      $element['#value']['hour'] -= 12;
    }
  }
  $value = date_select_input_value($element);
  if (empty($value) && empty($errors) && $element['#required']) {
    $errors[] = t('A valid value is required.');
  }
  if (!empty($errors)) {
    array_unshift($errors, t('Field %field has errors.', array(
      '%field' => $label,
    )));
    form_set_error($error_field, implode(' ', $errors));
  }

  // If there are no errors and the value is valid, set it.
  if (empty($errors) && !empty($value)) {
    form_set_value($element, $value, $form_state);
  }
  else {
    form_set_value($element, NULL, $form_state);
  }
}