function date_api_filter_handler::date_filter in Date 6
Same name and namespace in other branches
- 6.2 includes/date_api_filter_handler.inc \date_api_filter_handler::date_filter()
2 calls to date_api_filter_handler::date_filter()
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;
}