public function show_attempt_timer_if_needed($attempt, $timenow) { global $PAGE; $timeleft = false; foreach ($this->_rules as $rule) { $ruletimeleft = $rule->time_left($attempt, $timenow); if ($ruletimeleft !== false && ($timeleft === false || $ruletimeleft < $timeleft)) { $timeleft = $ruletimeleft; } } if ($timeleft !== false) { // Make sure the timer starts just above zero. If $timeleft was <= 0, then // this will just have the effect of causing the quiz to be submitted immediately. $timerstartvalue = max($timeleft, 1); $PAGE->requires->js_init_call('M.mod_quiz.timer.init', array($timerstartvalue), false, reader_get_js_module()); } }
// Check the access rules. $output = $PAGE->get_renderer('mod_quiz'); $accessmanager = $attemptobj->get_access_manager(time()); $messages = $accessmanager->prevent_access(); $pagetext = $page + 1; $logtext = "readerID {$attemptobj->readerobj->reader->id}; reader quiz {$attemptobj->readerobj->book->id}; page: {$pagetext}"; add_to_log($attemptobj->readerobj->course->id, "reader", "view attempt: " . addslashes($attemptobj->readerobj->book->name), "view.php?id={$id}", $logtext); // Get the list of questions needed by this page. $slots = $attemptobj->get_slots($page); // Check. if (empty($slots)) { throw new moodle_reader_exception($attemptobj->get_readerobj(), 'noquestionsfound'); } // Initialise the JavaScript. $headtags = $attemptobj->get_html_head_contributions($page); $PAGE->requires->js_init_call('M.mod_quiz.init_attempt_form', null, false, reader_get_js_module()); $PAGE->requires->css('/mod/reader/css/timer.css'); // Arrange for the navigation to be displayed. $headtags = $attemptobj->get_html_head_contributions($page); $PAGE->set_heading($attemptobj->get_course()->fullname); $PAGE->set_title(format_string($attemptobj->get_reader_name())); $PAGE->requires->js('/mod/reader/js/timer.js'); if ($attemptobj->is_last_page($page)) { $nextpage = -1; } else { $nextpage = $page + 1; } $accessmanager->show_attempt_timer_if_needed($attemptobj->get_attempt(), time()); if ($attemptobj->readerobj->reader->timelimit > 0) { $totaltimertime = $attemptobj->readerobj->reader->timelimit * 60 - (time() - $attemptobj->attempt->timestart); if ($totaltimertime < 0) {