/** * Test quiz_view * @return void */ public function test_quiz_view() { global $CFG; $CFG->enablecompletion = 1; $this->resetAfterTest(); $this->setAdminUser(); // Setup test data. $course = $this->getDataGenerator()->create_course(array('enablecompletion' => 1)); $quiz = $this->getDataGenerator()->create_module('quiz', array('course' => $course->id), array('completion' => 2, 'completionview' => 1)); $context = context_module::instance($quiz->cmid); $cm = get_coursemodule_from_instance('quiz', $quiz->id); // Trigger and capture the event. $sink = $this->redirectEvents(); quiz_view($quiz, $course, $cm, $context); $events = $sink->get_events(); // 2 additional events thanks to completion. $this->assertCount(3, $events); $event = array_shift($events); // Checking that the event contains the expected values. $this->assertInstanceOf('\\mod_quiz\\event\\course_module_viewed', $event); $this->assertEquals($context, $event->get_context()); $moodleurl = new \moodle_url('/mod/quiz/view.php', array('id' => $cm->id)); $this->assertEquals($moodleurl, $event->get_url()); $this->assertEventContextNotUsed($event); $this->assertNotEmpty($event->get_name()); // Check completion status. $completion = new completion_info($course); $completiondata = $completion->get_data($cm); $this->assertEquals(1, $completiondata->completionstate); }
} // Check login and get context. require_login($course, false, $cm); $context = context_module::instance($cm->id); require_capability('mod/quiz:view', $context); // Cache some other capabilities we use several times. $canattempt = has_capability('mod/quiz:attempt', $context); $canreviewmine = has_capability('mod/quiz:reviewmyattempts', $context); $canpreview = has_capability('mod/quiz:preview', $context); // Create an object to manage all the other (non-roles) access rules. $timenow = time(); $quizobj = quiz::create($cm->instance, $USER->id); $accessmanager = new quiz_access_manager($quizobj, $timenow, has_capability('mod/quiz:ignoretimelimits', $context, null, false)); $quiz = $quizobj->get_quiz(); // Trigger course_module_viewed event and completion. quiz_view($quiz, $course, $cm, $context); // Initialize $PAGE, compute blocks. $PAGE->set_url('/mod/quiz/view.php', array('id' => $cm->id)); // Create view object which collects all the information the renderer will need. $viewobj = new mod_quiz_view_object(); $viewobj->accessmanager = $accessmanager; $viewobj->canreviewmine = $canreviewmine; // Get this user's attempts. $attempts = quiz_get_user_attempts($quiz->id, $USER->id, 'finished', true); $lastfinishedattempt = end($attempts); $unfinished = false; $unfinishedattemptid = null; if ($unfinishedattempt = quiz_get_user_attempt_unfinished($quiz->id, $USER->id)) { $attempts[] = $unfinishedattempt; // If the attempt is now overdue, deal with that - and pass isonline = false. // We want the student notified in this case.
/** * Trigger the course module viewed event and update the module completion status. * * @param int $quizid quiz instance id * @return array of warnings and status result * @since Moodle 3.1 * @throws moodle_exception */ public static function view_quiz($quizid) { global $DB; $params = self::validate_parameters(self::view_quiz_parameters(), array('quizid' => $quizid)); $warnings = array(); list($quiz, $course, $cm, $context) = self::validate_quiz($params['quizid']); // Trigger course_module_viewed event and completion. quiz_view($quiz, $course, $cm, $context); $result = array(); $result['status'] = true; $result['warnings'] = $warnings; return $result; }
/** * Trigger the course module viewed event and update the module completion status. * * @param int $quizid quiz instance id * @return array of warnings and status result * @since Moodle 3.1 * @throws moodle_exception */ public static function view_quiz($quizid) { global $DB; $params = self::validate_parameters(self::view_quiz_parameters(), array('quizid' => $quizid)); $warnings = array(); // Request and permission validation. $quiz = $DB->get_record('quiz', array('id' => $params['quizid']), '*', MUST_EXIST); list($course, $cm) = get_course_and_cm_from_instance($quiz, 'quiz'); $context = context_module::instance($cm->id); self::validate_context($context); // Trigger course_module_viewed event and completion. quiz_view($quiz, $course, $cm, $context); $result = array(); $result['status'] = true; $result['warnings'] = $warnings; return $result; }