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,
);
}