You are here

function _date_views_argument_filter in Date 5.2

Views values vary depending on the op: $op = 'filter' $argtype = array of arg settings $query = views object $arg = argument value

File

date/date_views.inc, line 396

Code

function _date_views_argument_filter(&$query, $argtype, $arg, $field_type) {
  $field_name = _date_views_arg_field_name($argtype['type']);
  $field = content_fields($field_name);
  $db_info = content_database_info($field);
  $value = substr($field_name, -1) == 2 ? 'value2' : 'value';
  $value = $db_info['columns'][$value]['column'];
  $table = 'node_data_' . $field['field_name'];
  $sql_field = "{$table}.{$value}";
  $query->sql_field_name = $sql_field;
  $date_handler = new date_sql_handler();
  $date_handler
    ->construct($field_type);
  $range = $date_handler
    ->arg_range($arg);
  $date_handler->granularity = $date_handler
    ->arg_granularity($arg);
  date_views_set_timezone($date_handler, $field);
  $query->date_handler = $date_handler;
  $query
    ->ensure_table($table);
  $query
    ->add_field($value, $table);
  if ($field['tz_handling'] == 'date') {
    $query
      ->add_field($db_info['columns']['timezone']['column'], $table);
    $query
      ->add_field($db_info['columns']['offset']['column'], $table);
  }
  if ($date_handler->granularity != 'week') {
    $format = $date_handler
      ->views_formats($date_handler->granularity, 'sql');
    $query
      ->add_where($date_handler
      ->sql_where_format($format, $sql_field, '>=', date_format($range[0], $format)));
    $query
      ->add_where($date_handler
      ->sql_where_format($format, $sql_field, '<=', date_format($range[1], $format)));
  }
  else {
    $query
      ->add_where($date_handler
      ->sql_where_date('DATE', $sql_field, ">=", date_format($range[0], DATE_FORMAT_DATETIME)));
    $query
      ->add_where($date_handler
      ->sql_where_date('DATE', $sql_field, "<", date_format($range[1], DATE_FORMAT_DATETIME)));
  }
}