* @license http://www.gnu.org/copyleft/gpl.html GNU Public License * @package quiz */ require_once dirname(__FILE__) . '/../../config.php'; require_once $CFG->dirroot . '/mod/quiz/locallib.php'; $attemptid = required_param('attempt', PARAM_INT); // The attempt to summarise. $attemptobj = new quiz_attempt($attemptid); /// Check login. require_login($attemptobj->get_courseid(), false, $attemptobj->get_cm()); /// If this is not our own attempt, display an error. if ($attemptobj->get_userid() != $USER->id) { print_error('notyourattempt', 'quiz', $attemptobj->view_url()); } /// If the attempt is alreadyuj closed, redirect them to the review page. if ($attemptobj->is_finished()) { redirect($attemptobj->review_url()); } /// Check access. $accessmanager = $attemptobj->get_access_manager(time()); $messages = $accessmanager->prevent_access(); if (!$attemptobj->is_preview_user() && $messages) { print_error('attempterror', 'quiz', $attemptobj->view_url(), $accessmanager->print_messages($messages, true)); } $accessmanager->do_password_check($attemptobj->is_preview_user()); /// Log this page view. add_to_log($attemptobj->get_courseid(), 'quiz', 'view summary', 'summary.php?attempt=' . $attemptobj->get_attemptid(), $attemptobj->get_quizid(), $attemptobj->get_cmid()); /// Load the questions and states. $attemptobj->load_questions(); $attemptobj->load_question_states(); /// Print the page header
/** * Check that attempt results are as specified in $result. * * @param array $result row of data read from csv file. * @param quiz_attempt $attemptobj the attempt object loaded from db. * @throws coding_exception */ protected function check_attempt_results($result, $attemptobj) { foreach ($result as $fieldname => $value) { if ($value === '!NULL!') { $value = null; } switch ($fieldname) { case 'quizattempt': break; case 'attemptnumber': $this->assertEquals($value, $attemptobj->get_attempt_number()); break; case 'slots': foreach ($value as $slotno => $slottests) { foreach ($slottests as $slotfieldname => $slotvalue) { switch ($slotfieldname) { case 'mark': $this->assertEquals(round($slotvalue, 2), $attemptobj->get_question_mark($slotno), "Mark for slot {$slotno} of attempt {$result['quizattempt']}."); break; default: throw new coding_exception('Unknown slots sub field column in csv file ' . s($slotfieldname)); } } } break; case 'finished': $this->assertEquals((bool) $value, $attemptobj->is_finished()); break; case 'summarks': $this->assertEquals($value, $attemptobj->get_sum_marks(), "Sum of marks of attempt {$result['quizattempt']}."); break; case 'quizgrade': // Check quiz grades. $grades = quiz_get_user_grades($attemptobj->get_quiz(), $attemptobj->get_userid()); $grade = array_shift($grades); $this->assertEquals($value, $grade->rawgrade, "Quiz grade for attempt {$result['quizattempt']}."); break; case 'gradebookgrade': // Check grade book. $gradebookgrades = grade_get_grades($attemptobj->get_courseid(), 'mod', 'quiz', $attemptobj->get_quizid(), $attemptobj->get_userid()); $gradebookitem = array_shift($gradebookgrades->items); $gradebookgrade = array_shift($gradebookitem->grades); $this->assertEquals($value, $gradebookgrade->grade, "Gradebook grade for attempt {$result['quizattempt']}."); break; default: throw new coding_exception('Unknown column in csv file ' . s($fieldname)); } } }