You are here

function quiz_calculate_personality_score in Quiz 6.6

Same name and namespace in other branches
  1. 6.3 quiz.module \quiz_calculate_personality_score()
  2. 6.5 quiz.module \quiz_calculate_personality_score()

Calculates score for a personality quiz.

1 call to quiz_calculate_personality_score()
quiz_calculate_score in ./quiz.module
Calculates the score user received on quiz.

File

./quiz.module, line 1738
Quiz Module

Code

function quiz_calculate_personality_score($quiz, $rid) {
  $sql = 'SELECT qnr.child_nid, qnr.child_vid , n.type
    FROM {quiz_node_relationship} qnr
    INNER JOIN {node} n ON n.nid = qnr.child_nid
    WHERE qnr.parent_nid = %d';
  $results = db_query($sql, $quiz->nid);
  $count = 0;
  $scores = array();
  $options = array();
  while ($question = db_fetch_object($results)) {
    $function = $question->type . '_quiz_personality_question_score';
    if (function_exists($function)) {
      $option_id = $function($quiz, $question->child_nid, $question->child_vid, $rid);
      $options[$option_id] = isset($options[$option_id]) ? $options[$option_id] + 1 : 1;
    }
    ++$count;
  }

  // Figure out the most popular option:
  $best = new stdClass();
  $best->id = NULL;
  $best->count = 0;
  foreach ($options as $id => $number) {
    if ($number >= $best->count) {
      $best->id = $id;
      $best->count = $number;
    }
  }

  // Return total number of questions and the option_summary for the best option.
  return array(
    'question_count' => $count,
    'result_option' => $best->id,
  );
}