diff --git a/mod/quiz/renderer.php b/mod/quiz/renderer.php index 2f518ebd999..e957156bbc7 100644 --- a/mod/quiz/renderer.php +++ b/mod/quiz/renderer.php @@ -352,7 +352,7 @@ class mod_quiz_renderer extends plugin_renderer_base { return ''; } return $this->box($this->heading(get_string('accessnoticesheader', 'quiz'), 3) . - $this->access_messages($messages), 'quizaccessnotices'); + $this->access_messages($messages), 'quizaccessnotices'); } /** @@ -538,17 +538,22 @@ class mod_quiz_renderer extends plugin_renderer_base { * @param array $quiz Array conting quiz data * @param int $cm Course Module ID * @param int $context The page context ID - * @param array $messages Array contining any maeeages + * @param array $infomessages information about this quiz * @param mod_quiz_view_object $viewobj - * @param string $buttontext + * @param string $buttontext text for the start/continue attempt button, if + * it should be shown. + * @param array $infomessages further information about why the student cannot + * attempt this quiz now, if appicable this quiz */ - public function view_page($course, $quiz, $cm, $context, $messages, $viewobj, $buttontext) { + public function view_page($course, $quiz, $cm, $context, $infomessages, $viewobj, + $buttontext, $preventmessages) { $output = ''; - $output .= $this->view_information($course, $quiz, $cm, $context, $messages); + $output .= $this->view_information($course, $quiz, $cm, $context, $infomessages); $output .= $this->view_table($quiz, $context, $viewobj); $output .= $this->view_best_score($viewobj); $output .= $this->view_result_info($quiz, $context, $cm, $viewobj); - $output .= $this->view_attempt_button($course, $quiz, $cm, $context, $viewobj, $buttontext); + $output .= $this->view_attempt_button($course, $quiz, $cm, $context, $viewobj, + $buttontext, $preventmessages); return $output; } @@ -610,9 +615,7 @@ class mod_quiz_renderer extends plugin_renderer_base { 'intro'); } - $output .= $this->box_start('quizinfo'); - $this->access_messages($messages); - $output .= $this->box_end(); + $output .= $this->box($this->access_messages($messages), 'quizinfo'); // Show number of attempts summary to those who can view reports. if (has_capability('mod/quiz:viewreports', $context)) { @@ -855,7 +858,8 @@ class mod_quiz_renderer extends plugin_renderer_base { * @param mod_quiz_view_object $viewobj * @param string $buttontext */ - public function view_attempt_button($course, $quiz, $cm, $context, $viewobj, $buttontext) { + public function view_attempt_button($course, $quiz, $cm, $context, $viewobj, + $buttontext, $preventmessages) { $output = ''; // Determine if we should be showing a start/continue attempt button, // or a button to go back to the course page. @@ -866,6 +870,10 @@ class mod_quiz_renderer extends plugin_renderer_base { $output .= quiz_no_questions_message($quiz, $cm, $context); } + if ($preventmessages) { + $output .= $this->access_messages($preventmessages); + } + if ($buttontext) { $output .= $viewobj->accessmanager->print_start_attempt_button($viewobj->canpreview, $buttontext, $viewobj->unfinished); diff --git a/mod/quiz/view.php b/mod/quiz/view.php index 9f6ced0546c..642e8bf5d84 100644 --- a/mod/quiz/view.php +++ b/mod/quiz/view.php @@ -162,14 +162,15 @@ $viewobj->unfinished = $unfinished; $viewobj->lastfinishedattempt = $lastfinishedattempt; // Display information about this quiz. -$messages = $viewobj->accessmanager->describe_rules(); +$infomessages = $viewobj->accessmanager->describe_rules(); if ($quiz->attempts != 1) { - $messages[] = get_string('gradingmethod', 'quiz', + $infomessages[] = get_string('gradingmethod', 'quiz', quiz_get_grading_option_name($quiz->grademethod)); } // This will be set something if as start/continue attempt button should appear. $buttontext = ''; +$preventmessages = array(); if (!quiz_clean_layout($quiz->questions, true)) { $buttontext = ''; @@ -183,10 +184,10 @@ if (!quiz_clean_layout($quiz->questions, true)) { } else { if ($viewobj->canattempt) { - $messages = $viewobj->accessmanager->prevent_new_attempt($viewobj->numattempts, + $preventmessages = $viewobj->accessmanager->prevent_new_attempt($viewobj->numattempts, $viewobj->lastfinishedattempt); - if ($messages) { - $this->access_messages($messages); + if ($preventmessages) { + $buttontext = ''; } else if ($viewobj->numattempts == 0) { $buttontext = get_string('attemptquiznow', 'quiz'); } else { @@ -204,8 +205,7 @@ if (!quiz_clean_layout($quiz->questions, true)) { if (!$viewobj->moreattempts) { $buttontext = ''; } else if ($viewobj->canattempt - && $messages = $viewobj->accessmanager->prevent_access()) { - $this->access_messages($messages); + && $preventmessages = $viewobj->accessmanager->prevent_access()) { $buttontext = ''; } } @@ -215,13 +215,14 @@ echo $OUTPUT->header(); // Guests can't do a quiz, so offer them a choice of logging in or going back. if (isguestuser()) { - echo $output->view_page_guest($course, $quiz, $cm, $context, $messages, $viewobj); + echo $output->view_page_guest($course, $quiz, $cm, $context, $infomessages, $viewobj); } else if (!isguestuser() && !($viewobj->canattempt || $viewobj->canpreview || $viewobj->canreviewmine)) { // If they are not enrolled in this course in a good enough role, tell them to enrol. - echo $output->view_page_notenrolled($course, $quiz, $cm, $context, $messages, $viewobj); + echo $output->view_page_notenrolled($course, $quiz, $cm, $context, $infomessages, $viewobj); } else { - echo $output->view_page($course, $quiz, $cm, $context, $messages, $viewobj, $buttontext); + echo $output->view_page($course, $quiz, $cm, $context, $infomessages, $viewobj, + $buttontext, $preventmessages); } echo $OUTPUT->footer();