You are here

function _quiz_build_categorized_question_list in Quiz 7.4

Same name and namespace in other branches
  1. 6.4 quiz.module \_quiz_build_categorized_question_list()
  2. 7.6 quiz.module \_quiz_build_categorized_question_list()
  3. 7 quiz.module \_quiz_build_categorized_question_list()
  4. 7.5 quiz.module \_quiz_build_categorized_question_list()

Builds the questionlist for quizzes with categorized random questions

See also

quiz_build_question_list()

Related topics

1 call 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.

File

./quiz.module, line 3104
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',
    ));
    $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()');
    $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 FALSE;
    }
  }
  return $questions;
}