You are here

public function field_validation_date_range2_validator::validate in Field Validation 7.2

Validate field.

Overrides field_validation_validator::validate

File

plugins/validator/field_validation_date_range2_validator.inc, line 20

Class

field_validation_date_range2_validator

Code

public function validate() {
  $data = $this->value;
  if ($data != '') {
    $flag = FALSE;
    $settings = $this->rule->settings;
    $cycle = $settings['cycle'];

    // support date, datetime
    if (!is_numeric($data)) {
      $data = strtotime($data);
    }
    $date_str = date("Y-m-d H:i:s", $data);
    if ($cycle == 'global') {

      //Support token value and value2, for example "value + 1 day".
      $value = isset($this->item['value']) ? $this->item['value'] : '';
      $value2 = isset($this->item['value2']) ? $this->item['value2'] : '';

      // support date, datetime
      if (!is_numeric($value)) {
        $value = strtotime($value);
      }
      $value = date("Y-m-d H:i:s", $value);

      // support date, datetime
      if (!is_numeric($value2)) {
        $value2 = strtotime($value2);
      }
      $value2 = date("Y-m-d H:i:s", $value2);
      $tokens = array(
        'value' => $value,
        'value2' => $value2,
      );
      if (!empty($settings['min'])) {
        $settings['min'] = strtr($settings['min'], $tokens);
        $settings['min'] = strtotime($settings['min']);
        $settings['min'] = date("Y-m-d H:i:s", $settings['min']);
      }
      if (!empty($settings['max'])) {
        $settings['max'] = strtr($settings['max'], $tokens);
        $settings['max'] = strtotime($settings['max']);
        $settings['max'] = date("Y-m-d H:i:s", $settings['max']);
      }
    }
    if ($cycle == 'year') {
      $date_str = substr($date_str, 5);
    }
    elseif ($cycle == 'month') {
      $date_str = substr($date_str, 8);
    }
    elseif ($cycle == 'week') {
      $week_day = date('w', strtotime($date_str));
      $date_str = substr($date_str, 10);
      $date_str = $week_day . $date_str;
    }
    elseif ($cycle == 'day') {
      $date_str = substr($date_str, 11);
    }
    elseif ($cycle == 'hour') {
      $date_str = substr($date_str, 14);
    }
    elseif ($cycle == 'minute') {
      $date_str = substr($date_str, 17);
    }
    if (!empty($settings['min']) && $date_str < $settings['min']) {
      $flag = TRUE;
    }
    if (!empty($settings['max']) && $date_str > $settings['max']) {
      $flag = TRUE;
    }
    if (!empty($settings['reverse'])) {
      $flag = $flag ? FALSE : TRUE;
    }
    if ($flag) {
      $this
        ->set_error();
    }
  }
}