function _date_views_filter_handler in Date 5
Same name and namespace in other branches
- 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);
}