/** * add the questions to the question usage * This is called by the question_attmept class on construct of a new attempt * * @param \question_usage_by_activity $quba * * @return array */ public function add_questions_to_quba(\question_usage_by_activity $quba) { // we need the questionids of our questions $questionids = array(); foreach ($this->qbankOrderedQuestions as $qbankquestion) { /** @var activequiz_question $qbankquestion */ if (!in_array($qbankquestion->getQuestion()->id, $questionids)) { $questionids[] = $qbankquestion->getQuestion()->id; } } $questions = question_load_questions($questionids); // loop through the ordered question bank questions and add them to the quba // object $attemptlayout = array(); foreach ($this->qbankOrderedQuestions as $qbankquestion) { $questionid = $qbankquestion->getQuestion()->id; $q = \question_bank::make_question($questions[$questionid]); $attemptlayout[$qbankquestion->getId()] = $quba->add_question($q, $qbankquestion->getPoints()); } // start the questions in the quba $quba->start_all_questions(); /** * return the attempt layout which is a set of ids that are the slot ids from the question engine usage by activity instance * these are what are used during an actual attempt rather than the questionid themselves, since the question engine will handle * the translation */ return $attemptlayout; }