You are here

function _date_views_filter_handler in Date 5

Same name and namespace in other branches
  1. 5.2 date/date_views.inc \_date_views_filter_handler()
2 calls to _date_views_filter_handler()
date_views_filter_handler in ./date.module
_date_views_timestamp_filter_handler in ./date_views.inc
Handler for date filter.

File

./date_views.inc, line 139

Code

function _date_views_filter_handler($op, $filter, $filterinfo, &$query, $field_type = 'iso') {
  include_once drupal_get_path('module', 'date_api') . '/date.inc';
  $value = $filter['value'];
  $type = $filterinfo['type'];

  // Do some validation of input values before creating any SQL.
  switch ($type) {
    case 'YEAR':
    case 'MONTH':
    case 'DAY':
      if (empty($value) || !($value == 'now' || is_numeric($value))) {
        return;
      }
      break;
    default:
      if ($field_type == 'int' && (empty($value) || !($value == 'now' || date_is_valid($value, DATE_UNIX)))) {
        return;
      }
      elseif (empty($value) || !($value == 'now' || date_is_valid($value, DATE_ISO))) {
        return;
      }
      break;
  }
  $field = $filterinfo['extra']['field'];
  $column = $filterinfo['extra']['column'];
  $formats = date_get_formats($field);
  $db_info = $filterinfo['content_db_info'];
  $table = 'node_data_' . $field['field_name'];
  $table_field = $db_info['columns'][$column]['column'];

  // When using NOW(), must adjust out the server zone adj which may not match
  // the offset we really want, and add back the right offset.
  // This will be necessary any time the server timezone does not match the site or date zone
  // because the server is going to adjust the value of NOW() for the server timezone.
  switch ($type) {
    case 'DATE':
      $date = $value == 'now' ? date_sql('NOW', 'NOW()', $field_type, intval(date_views_offset($field) + $filter['options'])) : "'" . str_replace('T', ' ', date_custom2iso($value, $formats['input']['text'])) . "'";
      break;
    default:
      $date = $value == 'now' ? date_sql($type, "NOW()", $field_type, intval(date_views_offset($field) + $filter['options'])) : $value;
      break;
  }
  $query
    ->ensure_table($table);
  $query
    ->add_where(date_sql($type, $table . "." . $table_field, $field_type, date_views_offset($field)) . ' ' . $filter['operator'] . ' ' . $date);
}