diff --git a/mod/quiz/index.php b/mod/quiz/index.php index 71c0f335375..e8f2986f8e3 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 5fcea170a4f..afd76708581 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; +} ?>