set_url('/mod/quiz/comment.php', array('attempt'=>$attemptid, 'question'=>$questionid)); $attemptobj = quiz_attempt::create($attemptid); /// Can only grade finished attempts. if (!$attemptobj->is_finished()) { print_error('attemptclosed', 'quiz'); } /// Check login and permissions. require_login($attemptobj->get_courseid(), false, $attemptobj->get_cm()); $attemptobj->require_capability('mod/quiz:grade'); /// Load the questions and states. $questionids = array($questionid); $attemptobj->load_questions($questionids); $attemptobj->load_question_states($questionids); /// Log this action. add_to_log($attemptobj->get_courseid(), 'quiz', 'manualgrade', 'comment.php?attempt=' . $attemptobj->get_attemptid() . '&question=' . $questionid, $attemptobj->get_quizid(), $attemptobj->get_cmid()); /// Print the page header $PAGE->set_pagelayout('popup'); echo $OUTPUT->header(); echo $OUTPUT->heading(format_string($attemptobj->get_question($questionid)->name)); /// Process any data that was submitted. if ($data = data_submitted() and confirm_sesskey()) { $error = $attemptobj->process_comment($questionid, $data->response['comment'], $data->response['grade']); /// If success, notify and print a close button. if (!is_string($error)) { echo $OUTPUT->notification(get_string('changessaved'), 'notifysuccess'); close_window(2, true); } /// Otherwise, display the error and fall throug to re-display the form. echo $OUTPUT->notification($error); } /// Print the comment form. echo '