From 40377b188b3486ac4cebf188d1cff4eacb590259 Mon Sep 17 00:00:00 2001 From: mjollnir_ Date: Tue, 18 Apr 2006 22:55:28 +0000 Subject: [PATCH] mod/quiz/index changes to only display quiz grades when teacher allows Changes to index.php to only allow student to view overall quiz scores when teacher has not set options forbidding this, and it can't give away what scores were for attempts where results should still be hidden. Credit: Peter Bulmer peterbulmer@catalyst.net.nz --- mod/quiz/index.php | 9 ++++++++- mod/quiz/locallib.php | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/mod/quiz/index.php b/mod/quiz/index.php index 71c0f33537..e8f2986f8e 100644 --- a/mod/quiz/index.php +++ b/mod/quiz/index.php @@ -112,10 +112,17 @@ $gradecol = ""; } } else { + // If student has no grade for this quiz, + // or the quiz has no grade, display nothing in grade col if ($bestgrade === NULL || $quiz->grade == 0) { $gradecol = ""; } else { - $gradecol = "$bestgrade / $quiz->grade"; + //If all quiz's attempts have visible results, show bestgrade + if(all_attempt_results_visible($quiz, $USER)) { + $gradecol = "$bestgrade / $quiz->grade"; + } else { + $gradecol = ""; + } } } diff --git a/mod/quiz/locallib.php b/mod/quiz/locallib.php index 5fcea170a4..afd7670858 100644 --- a/mod/quiz/locallib.php +++ b/mod/quiz/locallib.php @@ -550,5 +550,31 @@ function quiz_get_reviewoptions($quiz, $attempt, $isteacher=false) { return $options; } +//////////////////////////////////////////////////////////////////////////////// +/** +* Return boolean indicating if the quiz has attempts with hidden grades +* +* Selects all attempts matching specified quiz & user, and examines each to +* check they all have visible results. +* @return boolean If the quiz has attempts without visible results +* @param object $quiz The quiz being examined +* @param object $user The user concerned +*/ +function all_attempt_results_visible($quiz, $user) { + global $CFG; + $sql = 'SELECT timefinish, preview FROM '.$CFG->prefix.'quiz_attempts qa'. + ' WHERE qa.quiz='.$quiz->id.' AND qa.userid='.$user->id. + ' ORDER BY id DESC'; + $attempts = get_records_sql($sql); + foreach ($attempts as $attempt) { + $attemptoptions = quiz_get_reviewoptions($quiz, $attempt); + //if any attempt has scores option not set, not all attempt results are + //visible + if (!$attemptoptions->scores) { + return false; + } + } + return true; +} ?> -- 2.39.5