You are here

function quiz_views_handler_argument_quiz_nid::subselect_vids in Quiz 8.4

Same name and namespace in other branches
  1. 6.6 includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc \quiz_views_handler_argument_quiz_nid::subselect_vids()
  2. 6.3 includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc \quiz_views_handler_argument_quiz_nid::subselect_vids()
  3. 6.4 includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc \quiz_views_handler_argument_quiz_nid::subselect_vids()
  4. 6.5 includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc \quiz_views_handler_argument_quiz_nid::subselect_vids()
  5. 7.6 includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc \quiz_views_handler_argument_quiz_nid::subselect_vids()
  6. 7 includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc \quiz_views_handler_argument_quiz_nid::subselect_vids()
  7. 7.4 includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc \quiz_views_handler_argument_quiz_nid::subselect_vids()

Helper method to retrieve the vid(s) the final view query should actually be run against.

Would be done in pre_query(), but $this->argument is not yet available at that time. So, called from set_argument().

2 calls to quiz_views_handler_argument_quiz_nid::subselect_vids()
quiz_views_handler_argument_quiz_nid::query in includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc
Override the default behavior of query() to introduce the medial step of retrieving vids from the provided nids.
quiz_views_handler_argument_quiz_nid::set_argument in includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc
Set up the argument with the vids extracted from nids.

File

includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc, line 116

Class

quiz_views_handler_argument_quiz_nid

Code

function subselect_vids() {
  $query = db_select('quiz_node_properties', 'qnp');
  if (count($this->value) > 1) {

    // Guaranteed to produce multiple values; therefore may need the group by
    $use_group_by = TRUE;
    $operator = empty($this->options['not']) ? 'IN' : 'NOT IN';
    $query
      ->condition('nid', $this->value, $operator);
  }
  else {

    // Multiple values only possible with a NOT; only then do we need group by
    $use_group_by = !empty($this->options['not']);
    $operator = empty($this->options['not']) ? '=' : '!=';
    $query
      ->condition('nid', reset($this->value), $operator);
  }
  switch ($this->options['which_vid']) {
    case 'initial':

      // SQL operation for getting the initial vids based on view config settings
      $query
        ->addExpression('MIN(vid)', 'vid');
      break;
    case 'latest':

      // SQL operation for getting the latest vids based on view config settings
      $query
        ->addExpression('MAX(vid)', 'vid');
      break;
    default:

      // Get them all
      $query
        ->addField('qnp', 'vid');
      break;
  }
  if ($use_group_by) {
    $query
      ->groupBy('nid');
  }
  $result = $query
    ->execute();
  $this->nid_field = $this->vid_field;
  $this->corresponding_vids = array();
  foreach ($result as $item) {
    $this->corresponding_vids[] = $item->vid;
  }
  return count($this->corresponding_vids) > 1;
}