/// Check capabilites. if (!$quizobj->is_preview_user()) { $quizobj->require_capability('mod/quiz:attempt'); } /// Check to see if a new preview was requested. if ($quizobj->is_preview_user() && $forcenew) { /// To force the creation of a new preview, we set a finish time on the /// current attempt (if any). It will then automatically be deleted below $DB->set_field('quiz_attempts', 'timefinish', time(), array('quiz' => $quiz->id, 'userid' => $USER->id)); } /// Look for an existing attempt. $lastattempt = quiz_get_latest_attempt_by_user($quiz->id, $USER->id); if ($lastattempt && !$lastattempt->timefinish) { /// Continuation of an attempt - check password then redirect. $accessmanager->do_password_check($quizobj->is_preview_user()); redirect($quizobj->attempt_url($lastattempt->id)); } /// Get number for the next or unfinished attempt if ($lastattempt && !$lastattempt->preview && !$quizobj->is_preview_user()) { $lastattemptid = $lastattempt->id; $attemptnumber = $lastattempt->attempt + 1; } else { $lastattempt = false; $lastattemptid = false; $attemptnumber = 1; } /// Check access. $messages = $accessmanager->prevent_access() + $accessmanager->prevent_new_attempt($attemptnumber - 1, $lastattempt); if (!$quizobj->is_preview_user() && $messages) { print_error('attempterror', 'quiz', $quizobj->view_url(), $accessmanager->print_messages($messages, true)); }