protected function add_interaction(ImsQtiWriter $body, $question) { $question_count = 0; foreach ($question->options->subquestions as $subquestion) { if (!empty($subquestion->questiontext)) { $question_count++; } } $result = $body->add_matchInteraction(ImsQtiWriter::RESPONSE, $question_count, $question->options->shuffleanswers); $questions = $result->add_simpleMatchSet(); $answers = $result->add_simpleMatchSet(); $question_score = $question->defaultgrade / $question_count; $count = 0; foreach ($question->options->subquestions as $subquestion) { ++$count; $question_id = 'Q_' . $count; $answer_id = 'A_' . $count; if ($has_question = !empty($subquestion->questiontext)) { $questions->add_simpleAssociableChoice($question_id, false, array(), 1)->add_flow($subquestion->questiontext); } if ($has_answer = !empty($subquestion->answertext)) { $answers->add_simpleAssociableChoice($answer_id, false, array(), 1)->add_flow($subquestion->answertext); } if ($has_question && $has_answer) { $key = "{$question_id} {$answer_id}"; $this->mapping->add_mapEntry($key, $question_score); $this->correct_response->add_value($key); } } return $result; }