You are here

function _datex_date_popup_field_element_validate_callback in Datex 7.3

Form element validation callback for date popup form element.

1 string reference to '_datex_date_popup_field_element_validate_callback'
datex_element_info_alter in ./datex_date.inc
Adds datex as a date form element validator.

File

datex_popup/datex_popup.module, line 143

Code

function _datex_date_popup_field_element_validate_callback(&$element, &$fs) {
  if (date_hidden_element($element)) {
    return;
  }
  $greg = FALSE;
  $calendar = _datex_date_field_calendar($element);
  $calendar = _datex_date_field_calendar($element);
  if (!$calendar) {
    $calendar = datex_factory();
    if (!$calendar) {
      $calendar = datex_factory(NULL, 'en');
    }
    $greg = $calendar
      ->getCalendarName() !== 'persian';
  }
  $date_fmt = date_popup_date_format($element);
  $time_fmt = date_popup_time_format($element);
  $dg = date_popup_date_granularity($element);
  $tg = date_popup_time_granularity($element);
  $input = _datex_get_fs($element, $fs, NULL, TRUE);
  $has_date_input = $input && isset($input['date']) && !empty($input['date']);
  $has_time_input = $input && isset($input['time']) && !empty($input['time']);
  $has_default = !empty($element['#default_value']);
  $def = date_default_date($element);
  $has_month = in_array('month', $dg);
  $has_day = in_array('day', $dg);
  list($from, $to) = date_range_years($element['#date_year_range']);
  $from = _datex_popup_year_to_timestamp($calendar, $from, $greg) . '000';
  $to = _datex_popup_year_to_timestamp($calendar, $to, $greg) . '000';
  if (!$greg && !$has_month) {
    $def
      ->setDate($def
      ->format('Y'), 6, $def
      ->format('j'));
  }
  if (!$greg && !$has_day) {
    $def
      ->setDate($def
      ->format('Y'), $def
      ->format('n'), 25);
  }
  $calendar
    ->setTimestamp($def
    ->getTimestamp());

  // Remove minute/second, if there should be none.
  $v = _datex_get_fs($element, $fs, 'time', TRUE);
  if ($v) {
    if (count(explode(':', $v)) === 3 && !in_array('second', $tg, TRUE)) {
      $v = explode(':', $v);
      unset($v[2]);
      $v = implode(':', $v);
      _datex_set_fs($element, $fs, $v, 'time', TRUE);
    }
    if (count(explode(':', $v)) === 2 && !in_array('minute', $tg, TRUE)) {
      $v = explode(':', $v);
      unset($v[1]);
      $v = implode(':', $v);
      _datex_set_fs($element, $fs, $v, 'time', TRUE);
    }
  }
  $v = _datex_get_fs($element, $fs, 'time', FALSE);
  if ($v) {
    if (count(explode(':', $v)) === 3 && !in_array('second', $tg, TRUE)) {
      $v = explode(':', $v);
      unset($v[2]);
      $v = implode(':', $v);
      _datex_set_fs($element, $fs, $v, 'time', FALSE);
    }
    if (count(explode(':', $v)) === 2 && !in_array('minute', $tg, TRUE)) {
      $v = explode(':', $v);
      unset($v[1]);
      $v = implode(':', $v);
      _datex_set_fs($element, $fs, $v, 'time', FALSE);
    }
  }
  $parse = $has_date_input ? _datex_popup_parse($calendar, $input['date'], $dg) : NULL;
  if ($parse === NULL) {

    // Let date_popup handle this.
    return;
  }
  if ($parse === FALSE) {
    form_set_error($element['#name'], t('Invalid date'));
    return;
  }
  $v = $calendar
    ->xFormat($date_fmt);
  _datex_set_fs($element, $fs, $v, 'date', TRUE);
  _datex_set_fs($element, $fs, $v, 'date', FALSE);
}