function date_api_filter_handler::query in Date 6.2
Custom implementation of query() so we can get the AND and OR methods in the right places.
File
- includes/
date_api_filter_handler.inc, line 450 - Date Views filter handler.
Class
- date_api_filter_handler
- A flexible, configurable date filter.
Code
function query() {
$this
->get_query_fields();
if (!empty($this->query_fields)) {
foreach ((array) $this->query_fields as $query_field) {
$field = $query_field['field'];
if (!isset($this->query->table_queue[$field['table_name']])) {
if ($field['table_name'] != $this->table || !empty($this->relationship)) {
$this->related_table_alias = $this->query
->ensure_table($field['table_name'], $this->relationship);
}
}
$table_alias = !empty($this->related_table_alias) ? $this->related_table_alias : $field['table_name'];
$query_field['field']['fullname'] = $table_alias . '.' . $query_field['field']['field_name'];
$sql = '';
$sql_parts = array();
switch ($this->operator) {
case 'between':
$sql_parts[] = $this
->date_filter('min', $query_field, '>=');
$sql_parts[] = $this
->date_filter('max', $query_field, '<=');
$sql = implode(' AND ', array_filter($sql_parts));
break;
case 'not between':
$sql_parts[] = $this
->date_filter('min', $query_field, '<');
$sql_parts[] = $this
->date_filter('max', $query_field, '>');
$sql = implode(' OR ', array_filter($sql_parts));
break;
case 'contains':
$query_field['field']['fullname'] = str_replace($field['table_name'] . '_', $table_alias . '.', $field['fromto'][0]);
$sql_parts[] = $this
->date_filter('value', $query_field, '<=');
$query_field['field']['fullname'] = str_replace($field['table_name'] . '_', $table_alias . '.', $field['fromto'][1]);
$sql_parts[] = $this
->date_filter('value', $query_field, '>=');
$sql = implode(' AND ', array_filter($sql_parts));
break;
default:
$sql = $this
->date_filter('value', $query_field, $this->operator);
break;
}
if (!empty($sql)) {
// Use set_where_group() with the selected date_method
// of 'AND' or 'OR' to combine the field WHERE clauses.
$this->query
->set_where_group($this->options['date_method'], 'date');
$this->query
->add_where('date', $sql);
}
}
}
}