From e6674da8ff87cc4e448b902c3abf65b79e6a5a89 Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Wed, 21 Sep 2011 15:31:12 +0100 Subject: [PATCH] MDL-28424 Reviewing a quiz in 'secure mode' gives a fatal error. The problem was when output was being started in relation to when the fake block was added. Took the opportunity to clean up the quiz renderer API a bit. --- mod/quiz/accessrules.php | 4 +--- mod/quiz/attempt.php | 6 +----- mod/quiz/module.js | 2 +- mod/quiz/renderer.php | 8 +++++++- mod/quiz/summary.php | 12 ++---------- 5 files changed, 12 insertions(+), 20 deletions(-) diff --git a/mod/quiz/accessrules.php b/mod/quiz/accessrules.php index 107eae631e6..ec0d8205a14 100644 --- a/mod/quiz/accessrules.php +++ b/mod/quiz/accessrules.php @@ -723,12 +723,11 @@ class password_access_rule extends quiz_access_rule_base { $PAGE->set_title($this->_quizobj->get_course()->shortname . ': ' . format_string($this->_quizobj->get_quiz_name())); $PAGE->set_cacheable(false); - echo $OUTPUT->header(); } else { $PAGE->set_title(format_string($this->_quizobj->get_quiz_name())); - echo $OUTPUT->header(); } + echo $OUTPUT->header(); if (trim(strip_tags($this->_quiz->intro))) { $output .= $OUTPUT->box(format_module_intro('quiz', $this->_quiz, $this->_quizobj->get_cmid()), 'generalbox', 'intro'); @@ -838,7 +837,6 @@ class securewindow_access_rule extends quiz_access_rule_base { $PAGE->add_body_class('quiz-secure-window'); $PAGE->requires->js_init_call('M.mod_quiz.secure_window.init', null, false, quiz_get_js_module()); - echo $OUTPUT->header(); } } diff --git a/mod/quiz/attempt.php b/mod/quiz/attempt.php index b7702588525..5afa75e472d 100644 --- a/mod/quiz/attempt.php +++ b/mod/quiz/attempt.php @@ -114,11 +114,9 @@ if ($accessmanager->securewindow_required($attemptobj->is_preview_user())) { $PAGE->set_title($attemptobj->get_course()->shortname . ': ' . format_string($attemptobj->get_quiz_name())); $PAGE->set_cacheable(false); - echo $OUTPUT->header(); } else { $PAGE->set_title(format_string($attemptobj->get_quiz_name())); - echo $OUTPUT->header(); } if ($attemptobj->is_last_page($page)) { @@ -127,7 +125,5 @@ if ($attemptobj->is_last_page($page)) { $nextpage = $page + 1; } -echo $output->attempt_page($attemptobj, $page, $accessmanager, $messages, $slots, $id, $nextpage); - $accessmanager->show_attempt_timer_if_needed($attemptobj->get_attempt(), time()); -echo $OUTPUT->footer(); +echo $output->attempt_page($attemptobj, $page, $accessmanager, $messages, $slots, $id, $nextpage); diff --git a/mod/quiz/module.js b/mod/quiz/module.js index 457810b19b0..4db04d5b735 100644 --- a/mod/quiz/module.js +++ b/mod/quiz/module.js @@ -113,7 +113,7 @@ M.mod_quiz.timer = { var minutes = Math.floor(secondsleft/60); secondsleft -= minutes*60; var seconds = secondsleft; - Y.one('#quiz-time-left').setContent('' + hours + ':' + + Y.one('#quiz-time-left').setContent(hours + ':' + M.mod_quiz.timer.two_digit(minutes) + ':' + M.mod_quiz.timer.two_digit(seconds)); diff --git a/mod/quiz/renderer.php b/mod/quiz/renderer.php index 20ddf693a0f..cd8333cb3c3 100644 --- a/mod/quiz/renderer.php +++ b/mod/quiz/renderer.php @@ -259,7 +259,7 @@ class mod_quiz_renderer extends plugin_renderer_base { * @return string HTML content. */ public function countdown_timer() { - return html_writer::tag('div', get_string('timeleft', 'quiz') . + return html_writer::tag('div', get_string('timeleft', 'quiz') . ' ' . html_writer::tag('span', '', array('id' => 'quiz-time-left')), array('id' => 'quiz-timer')); } @@ -376,8 +376,10 @@ class mod_quiz_renderer extends plugin_renderer_base { public function attempt_page($attemptobj, $page, $accessmanager, $messages, $slots, $id, $nextpage) { $output = ''; + $output .= $this->header(); $output .= $this->quiz_notices($messages); $output .= $this->attempt_form($attemptobj, $page, $slots, $id, $nextpage); + $output .= $this->footer(); return $output; } @@ -479,8 +481,12 @@ class mod_quiz_renderer extends plugin_renderer_base { */ public function summary_page($attemptobj, $displayoptions) { $output = ''; + $output .= $this->header(); + $output .= $this->heading(format_string($attemptobj->get_quiz_name())); + $output .= $this->heading(get_string('summaryofattempt', 'quiz'), 3); $output .= $this->summary_table($attemptobj, $displayoptions); $output .= $this->summary_page_controls($attemptobj); + $output .= $this->footer(); return $output; } diff --git a/mod/quiz/summary.php b/mod/quiz/summary.php index 40a765fbc24..1cada4656ba 100644 --- a/mod/quiz/summary.php +++ b/mod/quiz/summary.php @@ -77,7 +77,6 @@ if (empty($attemptobj->get_quiz()->showblocks)) { $PAGE->blocks->show_only_fake_blocks(); } -$title = get_string('summaryofattempt', 'quiz'); if ($accessmanager->securewindow_required($attemptobj->is_preview_user())) { $accessmanager->setup_secure_page($attemptobj->get_course()->shortname . ': ' . format_string($attemptobj->get_quiz_name()), ''); @@ -86,20 +85,13 @@ if ($accessmanager->securewindow_required($attemptobj->is_preview_user())) { format_string($attemptobj->get_quiz_name())); $PAGE->set_heading($attemptobj->get_course()->fullname); $PAGE->set_cacheable(false); - echo $OUTPUT->header(); } else { - $PAGE->navbar->add($title); + $PAGE->navbar->add(get_string('summaryofattempt', 'quiz')); $PAGE->set_title(format_string($attemptobj->get_quiz_name())); $PAGE->set_heading($attemptobj->get_course()->fullname); - echo $OUTPUT->header(); } // Print heading. -echo $OUTPUT->heading(format_string($attemptobj->get_quiz_name())); -echo $OUTPUT->heading($title, 3); -echo $output->summary_page($attemptobj, $displayoptions); - -// Finish the page $accessmanager->show_attempt_timer_if_needed($attemptobj->get_attempt(), time()); -echo $OUTPUT->footer(); +echo $output->summary_page($attemptobj, $displayoptions);