diff --git a/mod/quiz/index.php b/mod/quiz/index.php index 132740445ab..29e4843caa7 100644 --- a/mod/quiz/index.php +++ b/mod/quiz/index.php @@ -89,6 +89,13 @@ array_push($align, 'left'); } $showing = 'scores'; // default + + $scores = $DB->get_records_sql_menu(' + SELECT qg.quiz, qg.grade + FROM {quiz_grades} qg + JOIN {quiz} q ON q.id = qg.quiz + WHERE q.course = ?', + $course->id); } $table = new html_table(); @@ -141,18 +148,20 @@ } else if ($showing == 'scores') { // Grade and feedback. - $bestgrade = quiz_get_best_grade($quiz, $USER->id); $attempts = quiz_get_user_attempts($quiz->id, $USER->id, 'all'); list($someoptions, $alloptions) = quiz_get_combined_reviewoptions($quiz, $attempts, $context); $grade = ''; $feedback = ''; - if ($quiz->grade && !is_null($bestgrade)) { + if ($quiz->grade && array_key_exists($quiz->id, $scores)) { if ($alloptions->scores) { - $grade = "$bestgrade / $quiz->grade"; + $a = new stdClass; + $a->grade = quiz_format_grade($quiz, $scores[$quiz->id]); + $a->maxgrade = quiz_format_grade($quiz, $quiz->grade); + $grade = get_string('outofshort', 'quiz', $a); } if ($alloptions->overallfeedback) { - $feedback = quiz_feedback_for_grade($bestgrade, $quiz->id); + $feedback = quiz_feedback_for_grade($scores[$quiz->id], $quiz->id); } } $data[] = $grade; diff --git a/mod/quiz/lib.php b/mod/quiz/lib.php index 3f43782d10e..82e47139aa2 100644 --- a/mod/quiz/lib.php +++ b/mod/quiz/lib.php @@ -401,8 +401,7 @@ function quiz_has_grades($quiz) { /** * Get the best current grade for a particular user in a quiz. * - * @global object - * @param object $quiz the quiz object. + * @param object $quiz the quiz settings. * @param integer $userid the id of the user. * @return float the user's current grade for this quiz, or NULL if this user does * not have a grade on this quiz. @@ -412,11 +411,11 @@ function quiz_get_best_grade($quiz, $userid) { $grade = $DB->get_field('quiz_grades', 'grade', array('quiz' => $quiz->id, 'userid' => $userid)); // Need to detect errors/no result, without catching 0 scores. - if (is_numeric($grade)) { - return quiz_format_grade($quiz, $grade); - } else { - return NULL; + if ($grade === false) { + return null; } + + return $grade + 0; // Convert to number. } /** diff --git a/mod/quiz/review.php b/mod/quiz/review.php index 944ac1da8c3..acc8d3b1de9 100644 --- a/mod/quiz/review.php +++ b/mod/quiz/review.php @@ -175,7 +175,7 @@ } /// Show scores (if the user is allowed to see scores at the moment). - $grade = quiz_rescale_grade($attempt->sumgrades, $quiz); + $grade = quiz_rescale_grade($attempt->sumgrades, $quiz, false); if ($options->scores) { if (quiz_has_grades($quiz)) { if($overtime) { @@ -194,7 +194,7 @@ /// Now the scaled grade. $a = new stdClass; - $a->grade = '' . $grade . ''; + $a->grade = '' . quiz_format_grade($quiz, $grade) . ''; $a->maxgrade = quiz_format_grade($quiz, $quiz->grade); $a->percent = '' . round(($attempt->sumgrades/$quiz->sumgrades)*100, 0) . ''; $rows[] = '