/** * Create a question_attempt_with_restricted_history * @param question_attempt $baseqa The question_attempt to make a restricted version of. * @param int $lastseq the index of the last step to include. * @param string $preferredbehaviour the preferred behaviour. It is slightly * annoyting that this needs to be passed, but unavoidable for now. */ public function __construct(question_attempt $baseqa, $lastseq, $preferredbehaviour) { $this->baseqa = $baseqa->get_full_qa(); if ($lastseq < 0 || $lastseq >= $this->baseqa->get_num_steps()) { throw new coding_exception('$lastseq out of range', $lastseq); } $this->steps = array_slice($this->baseqa->steps, 0, $lastseq + 1); $this->observer = new question_usage_null_observer(); // This should be a straight copy of all the remaining fields. $this->id = $this->baseqa->id; $this->usageid = $this->baseqa->usageid; $this->slot = $this->baseqa->slot; $this->question = $this->baseqa->question; $this->maxmark = $this->baseqa->maxmark; $this->minfraction = $this->baseqa->minfraction; $this->maxfraction = $this->baseqa->maxfraction; $this->questionsummary = $this->baseqa->questionsummary; $this->responsesummary = $this->baseqa->responsesummary; $this->rightanswer = $this->baseqa->rightanswer; $this->flagged = $this->baseqa->flagged; // Except behaviour, where we need to create a new one. $this->behaviour = question_engine::make_behaviour($this->baseqa->get_behaviour_name(), $this, $preferredbehaviour); }