function quiz_calculate_score in Quiz 7.5
Same name and namespace in other branches
- 8.4 quiz.module \quiz_calculate_score()
- 5.2 quiz.module \quiz_calculate_score()
- 5 quiz.module \quiz_calculate_score()
- 6.6 quiz.module \quiz_calculate_score()
- 6.2 quiz.module \quiz_calculate_score()
- 6.3 quiz.module \quiz_calculate_score()
- 6.4 quiz.module \quiz_calculate_score()
- 6.5 quiz.module \quiz_calculate_score()
- 7.6 quiz.module \quiz_calculate_score()
- 7 quiz.module \quiz_calculate_score()
- 7.4 quiz.module \quiz_calculate_score()
Calculates the score user received on quiz.
Parameters
$quiz: The quiz node.
$result_id: Quiz result ID.
Return value
array Contains five elements:
- question_count
- possible_score
- numeric_score
- percentage_score
- is_evaluated
Related topics
3 calls to quiz_calculate_score()
- QuizResultController::buildContent in includes/QuizResultController.class.inc 
- Implements EntityAPIControllerInterface.
- quiz_end_scoring in ./quiz.module 
- Score a completed quiz.
- quiz_update_total_score in ./quiz.module 
- Update a score for a quiz.
File
- ./quiz.module, line 2323 
- quiz.module Main file for the Quiz module.
Code
function quiz_calculate_score($result_id) {
  $quiz_result_answers = entity_load('quiz_result_answer', FALSE, array(
    'result_id' => $result_id,
  ));
  $numeric_score = $possible_score = 0;
  $is_evaluated = 1;
  foreach ($quiz_result_answers as $quiz_result_answer) {
    $question_node = node_load($quiz_result_answer->question_nid, $quiz_result_answer->question_vid);
    // points_awarded is pre-scaled when the question is answered, so we just
    // need to find what max score it was scaled to.
    $weighted_score = $quiz_result_answer->points_awarded;
    $QuizQuestionResponse = _quiz_question_response_get_instance($result_id, $question_node);
    // Get the adjusted max score.
    $max_score = $QuizQuestionResponse
      ->getMaxScore();
    $numeric_score += $weighted_score;
    $possible_score += $max_score;
    if (!$QuizQuestionResponse
      ->isEvaluated()) {
      $is_evaluated = 0;
    }
  }
  return array(
    'question_count' => count($quiz_result_answers),
    'possible_score' => $possible_score,
    'numeric_score' => $numeric_score,
    'percentage_score' => $possible_score == 0 ? 0 : round($numeric_score * 100 / $possible_score),
    'is_evaluated' => $is_evaluated,
  );
}