function _date_views_query_alter in Date 5.2
Same name and namespace in other branches
- 5 date_views.inc \_date_views_query_alter()
Implementation of hook_views_query().
Used to make sure Date Browser view defaults to current date if no date selected
1 call to _date_views_query_alter()
- date_views_query_alter in date/
date.module
File
- date/
date_views.inc, line 576
Code
function _date_views_query_alter(&$query, &$view) {
require_once './' . drupal_get_path('module', 'date_api') . '/date_api_sql.inc';
$date_views_browser_views = date_views_browser_get_views();
if (in_array($view->name, array_keys($date_views_browser_views))) {
$name = explode(':', $view->argument[0]['type']);
$tofield_name = trim($name[1]);
$field_name = drupal_substr($tofield_name, 0, 3) == 'to|' ? drupal_substr($tofield_name, 3) : $tofield_name;
$value = $field_name != $tofield_name ? 'value2' : 'value';
$field = content_fields($field_name);
$db_info = content_database_info($field);
$table = 'node_data_' . $field['field_name'];
$date_handler = new date_sql_handler();
$date_handler
->construct($field['type']);
date_views_set_timezone($date_handler, $field);
$view->date_handler = $date_handler;
// Add a combo FROM|TO date field to the query
$value = $db_info['columns']['value']['column'];
$value2 = !empty($db_info['columns']['value2']['column']) ? $db_info['columns']['value2']['column'] : $db_info['columns']['value']['column'];
$value1 = $table . '.' . $value;
$value2 = date_sql_coalesce(array(
$table . '.' . $value2,
$table . '.' . $value,
));
$combo = date_sql_concat(array(
$value1,
"'|'",
$value2,
)) . ' AS date_combo ';
$query
->add_field($combo, NULL);
$path = explode('/', $view->url);
$pos = sizeof($path);
if ($view->build_type == 'block' || arg($pos) == '') {
$arg = NULL;
}
else {
$arg = arg($pos);
}
// If no argument is specified, the argument handling won't get executed.
// Add the current date range to the query.
if ($arg == NULL) {
$period = $view->argument[0]['options'];
$format = $date_handler
->views_formats($period, 'sql');
$arg = date_views_browser_period_arg(NULL, $view->argument[0]['options']);
if ($range = $view->date_handler
->arg_range($arg)) {
$query
->ensure_table($table);
$query
->add_field('nid', 'node');
$query
->add_field($value, $table);
$sql_field = "{$table}.{$value}";
$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)));
}
}
else {
$range = $view->date_handler
->arg_range($arg);
}
$view->min_date = $range[0];
$view->max_date = $range[1];
if (empty($view->date_fields)) {
$view->date_fields = array();
}
$view->date_fields[] = $field_name;
}
}