You are here

function date_api_filter_handler::date_filter in Date 6

Same name and namespace in other branches
  1. 6.2 includes/date_api_filter_handler.inc \date_api_filter_handler::date_filter()
2 calls to date_api_filter_handler::date_filter()
date_api_filter_handler::op_between in ./date_api.views.inc
date_api_filter_handler::op_simple in ./date_api.views.inc

File

./date_api.views.inc, line 781
Defines date-related Views data and plugins:

Class

date_api_filter_handler
A flexible, configurable date filter.

Code

function date_filter($prefix, $field, $operator) {
  $handler = $this->date_handler;
  $granularity = $handler->granularity;
  $parts = $handler
    ->date_parts();
  $filter_parts = $handler
    ->date_parts($handler->granularity);
  $adjustment = 0;
  if (!empty($this->value[$prefix . 'adjustment'])) {
    $adjustment = strtotime($this->value[$prefix . 'adjustment'], 0);

    // See if there are any filters other than the adjustment.
    // If not, compare to NOW() and return.
    if ($this->options['adjustment_field'] == 2) {
      $sql = $handler
        ->sql_field($field, 0) . " {$operator} " . $handler
        ->sql_field('NOW', $adjustment);
      $this->query
        ->add_where($this->options['group'], $sql);
      return;
    }
  }
  $format = '';
  $selected = array();
  $separators = $handler
    ->part_info('sep');
  $formats = $handler
    ->part_info('format');
  foreach ($filter_parts as $key => $part) {
    $sep = $separators[$key];
    $pattern = $key == 'year' ? '%04d' : '%02d';
    if (is_numeric($this->value[$prefix . $key]) || $this->value[$prefix . $key] == 'now') {
      $format .= !empty($format) ? $sep : '';
      $format .= $formats[$key];
    }
    if (is_numeric($this->value[$prefix . $key])) {
      $selected[$key] = sprintf($pattern, check_plain($this->value[$prefix . $key]));
    }
    elseif ($this->value[$prefix . $key] == 'now') {
      $selected[$key] = date($formats[$key]);
    }
    else {

      // When we hit an empty (all values) option in the middle of
      // our date parts, stop and start a new query.
      if ($format > '' && $format != $sep) {
        $date = date_make_date($handler
          ->complete_date($selected));
        $value = date_format($date, $format);
        $sql = $handler
          ->sql_where_format($format, $field, $operator, $value);
        $this->query
          ->add_where($this->options['group'], $sql);
      }
      $format = '';
      $selected = array();
    }
  }
  if ($format > '' && $format != $sep) {
    $date = date_make_date($handler
      ->complete_date($selected));
    $value = date_format($date, $format);
    $sql = $handler
      ->sql_where_format($format, $field, $operator, $value);
    $this->query
      ->add_where($this->options['group'], $sql);
  }
  return;
}