You are here

function quiz_calculate_score in Quiz 7.5

Same name and namespace in other branches
  1. 8.4 quiz.module \quiz_calculate_score()
  2. 5.2 quiz.module \quiz_calculate_score()
  3. 5 quiz.module \quiz_calculate_score()
  4. 6.6 quiz.module \quiz_calculate_score()
  5. 6.2 quiz.module \quiz_calculate_score()
  6. 6.3 quiz.module \quiz_calculate_score()
  7. 6.4 quiz.module \quiz_calculate_score()
  8. 6.5 quiz.module \quiz_calculate_score()
  9. 7.6 quiz.module \quiz_calculate_score()
  10. 7 quiz.module \quiz_calculate_score()
  11. 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,
  );
}