You are here

function date_views_field_handler_group in Date 5.2

2 calls to date_views_field_handler_group()
date_views_field_handler_first in date/date_views.inc
date_views_field_handler_last in date/date_views.inc

File

date/date_views.inc, line 41

Code

function date_views_field_handler_group($field_info, $field_data, $value, $data, $from = 0, $count = 'all', $order = 'ASC') {
  $view = $GLOBALS['current_view'];
  $handler = $field_data['handler'];
  $field = $field_info['content_field'];
  $items = array();
  if ($field['multiple']) {
    $table_alias = "node_data_{$field['field_name']}";
    foreach ($field_info['content_db_info']['columns'] as $column => $attributes) {
      $query_columns[] = "{$table_alias}.{$attributes['column']} AS {$column}";
    }
    $query_columns[] = "{$table_alias}.delta AS delta";

    // If the view has a minimum/maximum date, limited the grouped
    // values to the date range.
    $where = '';
    if (!empty($view->date_handler) && !empty($view->min_date)) {
      $date_handler = $view->date_handler;
      $sql_field = $field_data['fullname'];
      $replace = date_api_views_query_substitutions($view);
      $sql1 = $date_handler
        ->sql_where_date('DATE', $sql_field, ">=", date_format($view->min_date, DATE_FORMAT_DATETIME));
      $sql2 = $date_handler
        ->sql_where_date('DATE', $sql_field, "<=", date_format($view->max_date, DATE_FORMAT_DATETIME));
      $where = ' AND ' . strtr($sql1, $replace) . ' AND ' . strtr($sql2, $replace);
    }

    // Note : this query doesn't need to run through db_rewrite_sql, since the
    // nids we retrieve have been selected by the views query, which already takes
    // care of this.
    $query = "SELECT " . implode(', ', $query_columns) . " FROM {node} node" . " LEFT JOIN {" . $field_info['content_db_info']['table'] . "} {$table_alias} ON node.vid = {$table_alias}.vid" . " WHERE node.nid = " . $data->nid . $where . " ORDER BY {$table_alias}.delta {$order}";

    // Select all deltas or only a subset.
    // Currently only 'all' and first / last items are proposed to the user.
    $result = $count == 'all' ? db_query($query) : db_query_range($query, $from, $count);
    while ($item = db_fetch_array($result)) {
      $item['#delta'] = $item[delta];
      unset($item['delta']);
      if ($field['repeat'] && $handler == 'date_views_field_handler_group') {
        $data->date_repeat_show = TRUE;
      }
      $items[] = content_format($field, $item, $field_data['options'], $data);
    }
    return theme('content_view_multiple_field', $items, $field, $data);
  }
  else {
    return date_views_field_handler_ungroup($field_info, $field_data, $value, $data);
  }
}