You are here

function _date_validation_date_range_check_data in Field Validation 7

1 call to _date_validation_date_range_check_data()
date_validation_field_validation_validate in date_validation/date_validation.validators.inc
Implements hook_field_validation_validate().

File

date_validation/date_validation.validators.inc, line 115
Provides validation functionality and hooks

Code

function _date_validation_date_range_check_data($data) {
  $date_range = array(
    'unit' => 'global',
    'start_contain' => TRUE,
    'start' => '',
    'end' => '',
    'end_contain' => TRUE,
    'less' => FALSE,
  );

  // if no value was specified, don't validate
  if ($data == '') {
    return $date_range;
  }
  if (strpos($data, '}') !== FALSE) {
    list($first, $second) = explode('}', $data);

    //remove space
    $first = trim($first);

    //remove "{"
    $first = substr($first, 1);
    $date_range['unit'] = trim($first);
    list($start_raw, $end_raw) = explode(',', $second);

    //remove space
    $start_raw = trim($start_raw);
    $end_raw = trim($end_raw);
    $start_contain = substr($start_raw, 0, 1);
    if ($start_contain == '[') {
      $date_range['start_contain'] = TRUE;
    }
    elseif ($start_contain == '(') {
      $date_range['start_contain'] = FALSE;
    }
    $start = substr($start_raw, 1);
    $date_range['start'] = trim($start);
    $end = substr($end_raw, 0, strlen($end_raw) - 1);
    $date_range['end'] = trim($end);
    $end_contain = substr($end_raw, strlen($end_raw) - 1, 1);
    if ($end_contain == ']') {
      $date_range['end_contain'] = TRUE;
    }
    elseif ($end_contain == ')') {
      $date_range['end_contain'] = FALSE;
    }

    //support php date format when unit = 'global'
    if ($date_range['unit'] == 'global') {
      $date_range['start'] = strtotime($date_range['start']);
      $date_range['start'] = date("Y-m-d H:i:s", $date_range['start']);
      $date_range['end'] = strtotime($date_range['end']);
      $date_range['end'] = date("Y-m-d H:i:s", $date_range['end']);
    }

    //if end less than start, reverse;

    //then we could support: {year}(10-10 08:30:00, 02-13 20:30:00]
    if ($date_range['end'] < $date_range['start']) {
      $date_range['less'] = TRUE;
      $start = $date_range['start'];
      $start_contain = $date_range['start_contain'];
      $date_range['start'] = $date_range['end'];
      $date_range['end'] = $start;
      $date_range['start_contain'] = $date_range['end_contain'] ? FALSE : TRUE;
      $date_range['end_contain'] = $start_contain ? FALSE : TRUE;
    }
  }
  return $date_range;
}