function quiz_views_handler_argument_quiz_nid::subselect_vids in Quiz 8.4
Same name and namespace in other branches
- 6.6 includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc \quiz_views_handler_argument_quiz_nid::subselect_vids()
- 6.3 includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc \quiz_views_handler_argument_quiz_nid::subselect_vids()
- 6.4 includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc \quiz_views_handler_argument_quiz_nid::subselect_vids()
- 6.5 includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc \quiz_views_handler_argument_quiz_nid::subselect_vids()
- 7.6 includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc \quiz_views_handler_argument_quiz_nid::subselect_vids()
- 7 includes/views/handlers/quiz_views_handler_argument_quiz_nid.inc \quiz_views_handler_argument_quiz_nid::subselect_vids()
- 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
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;
}