function _quiz_build_categorized_question_list in Quiz 7.5
Same name and namespace in other branches
- 6.4 quiz.module \_quiz_build_categorized_question_list()
- 7.6 quiz.module \_quiz_build_categorized_question_list()
- 7 quiz.module \_quiz_build_categorized_question_list()
- 7.4 quiz.module \_quiz_build_categorized_question_list()
Builds the questionlist for quizzes with categorized random questions.
See also
Related topics
2 calls to _quiz_build_categorized_question_list()
- quiz_build_question_list in ./
quiz.module - Retrieves a list of questions (to be taken) for a given quiz.
- _quiz_categorized_existing_terms_form in ./
quiz.admin.inc
File
- ./
quiz.module, line 2476 - quiz.module Main file for the Quiz module.
Code
function _quiz_build_categorized_question_list($quiz) {
$terms = _quiz_get_terms($quiz->vid);
$questions = array();
$nids = array();
$question_types = array_keys(quiz_get_question_types());
if (empty($question_types)) {
return array();
}
$total_count = 0;
foreach ($terms as $term) {
$query = db_select('node', 'n');
$query
->join('taxonomy_index', 'tn', 'n.nid = tn.nid');
$query
->fields('n', array(
'nid',
'vid',
'type',
));
$query
->fields('tn', array(
'tid',
));
$query
->condition('n.status', 1, '=');
$query
->condition('n.type', $question_types, 'IN');
$query
->condition('tn.tid', $term->tid, '=');
if (!empty($nids)) {
$query
->condition('n.nid', $nids, 'NOT IN');
}
$query
->range(0, $term->number);
$query
->orderBy('RAND()');
$query
->addTag('quiz_build_categorized_questions');
$result = $query
->execute();
$count = 0;
while ($question = $result
->fetchAssoc()) {
$count++;
$question['tid'] = $term->tid;
$question['number'] = $count + $total_count;
$questions[] = $question;
$nids[] = $question['nid'];
}
$total_count += $count;
if ($count < $term->number) {
// Not enough questions.
return array();
}
}
return $questions;
}