You are here

function votingapi_views_query_alter in Voting API 8.3

Implements hook_views_query_alter().

File

./votingapi.module, line 97
Contains votingapi.module.

Code

function votingapi_views_query_alter(ViewExecutable $view, QueryPluginBase $query) {

  // The code below allows sorting by voting results
  // so that no result (when no one voted) means zero.
  $base_table = $view->storage
    ->get('base_table');
  if ($query
    ->getBaseId() != 'views_query') {
    return;
  }
  $vr_aliases = [];
  foreach ($query->tables[$base_table] as $alias => $table_d) {
    $table_info = $query
      ->getTableInfo($alias);
    if ($table_info['table'] == 'votingapi_result') {
      $vr_aliases[$alias] = TRUE;
    }
  }
  $va_fields = [];
  foreach ($query->fields as $f_name => &$f_data) {
    if (isset($vr_aliases[$f_data['table']]) && $f_data['field'] == 'value') {
      $va_fields[$f_name] = $f_data;
    }
  }
  foreach ($va_fields as $va_field) {
    $query
      ->addField(NULL, 'COALESCE(' . $va_field['table'] . '.value, 0)', $va_field['alias'] . '__coa');
  }
  foreach ($query->orderby as &$order) {
    if (isset($va_fields[$order['field']])) {
      $order['field'] = $va_fields[$order['field']]['alias'] . '__coa';
    }
  }
}