You are here

function views_extra_handlers_query_alter in Extra Views Handlers 7

File

./views_extra_handlers.module, line 60
Provides a generic but powerful API for web services.

Code

function views_extra_handlers_query_alter($query) {
  $view = views_get_current_view();
  if (isset($view->field) && !empty($view->field)) {
    foreach ($view->field as $field_name => $field_obj) {
      $handler = $field_obj->definition['handler'];
      if ($handler == "views_extra_handlers_handler_field_query_alter") {
        $groupby_remove_arr = explode(",", $field_obj->options['veh_groupby']['veh_remove']);
        $groupby_add_arr = explode(",", $field_obj->options['veh_groupby']['veh_add']);
        if (isset($query->alterMetaData)) {
          if (isset($query->alterMetaData['view'])) {

            //Get a list of all 'group by' in the query
            $fields =& $query
              ->getGroupBy();
            if (!empty($field_obj->options['veh_groupby']['veh_remove'])) {
              foreach ($groupby_remove_arr as $groupby_remove) {
                unset($fields[trim($groupby_remove)]);
              }
            }
            if (!empty($field_obj->options['veh_groupby']['veh_add'])) {
              foreach ($groupby_add_arr as $groupby_add) {
                $query
                  ->groupBy($groupby_add);
              }
            }
            if (!empty($field_obj->options['veh_orderby']['veh_orderby_date'])) {
              $date_field_alias = $field_obj->options['veh_orderby']['veh_orderby_date'];
              $sort_order =& $query
                ->getOrderBy();
              unset($sort_order[$date_field_alias]);
              $sort_order["(CASE WHEN {$date_field_alias} < CURRENT_TIMESTAMP\n                    THEN 1\n                    ELSE 0\n               END)"] = 'ASC';
              $sort_order["(CASE WHEN {$date_field_alias} < CURRENT_TIMESTAMP THEN {$date_field_alias} END)"] = 'DESC';
              $sort_order["(CASE WHEN {$date_field_alias} >= CURRENT_TIMESTAMP THEN {$date_field_alias} END)"] = 'ASC';
            }
            if (!empty($field_obj->options['veh_orderby']['veh_orderby_custom'])) {
              $custom_orderby = $field_obj->options['veh_orderby']['veh_orderby_custom'];
              $custom_orderby_direction = $field_obj->options['veh_orderby']['veh_orderby_direction'];
              $sort_order_custom =& $query
                ->getOrderBy();
              $sort_order_custom[$custom_orderby] = $custom_orderby_direction;
            }
          }
        }
      }
    }
  }
}