/** * Regrade a question in this usage. This replays the sequence of submitted * actions to recompute the outcomes. * @param int $slot the number used to identify this question within this usage. * @param bool $finished whether the question attempt should be forced to be finished * after the regrade, or whether it may still be in progress (default false). * @param number $newmaxmark (optional) if given, will change the max mark while regrading. */ public function regrade_question($slot, $finished = false, $newmaxmark = null) { $oldqa = $this->get_question_attempt($slot); if (is_null($newmaxmark)) { $newmaxmark = $oldqa->get_max_mark(); } $newqa = new question_attempt($oldqa->get_question(), $oldqa->get_usage_id(), $this->observer, $newmaxmark); $newqa->set_database_id($oldqa->get_database_id()); $newqa->set_slot($oldqa->get_slot()); $newqa->regrade($oldqa, $finished); $this->questionattempts[$slot] = $newqa; $this->observer->notify_attempt_modified($newqa); }