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; }
protected function add_questions(ImsQtiWriter $writer, $quizz, $questions) { foreach ($questions as $path => $question) { $filename = basename($path); $ref = $writer->add_assessmentItemRef('ID_' . $question->id, $filename, '', $required = true); $weight = $this->get_grade($quizz->id, $question->id); $ref->add_weight(null, $weight); } }
protected function add_interaction(ImsQtiWriter $body, $question) { $result = $body->add_choiceInteraction(); foreach ($question->options->answers as $answer) { $identifier = $answer->answer; $choice = $result->add_simpleChoice($identifier); $choice->add_flow($answer->answer); } return $result; }
protected function add_body(ImsQtiWriter $item, $question) { $result = $item->add_itemBody(); $text = $this->translate_question_text($question->questiontext, $question->questiontextformat, $question); foreach ($question->options->questions as $index => $subquestion) { $subquestion_id = "{#{$index}}"; $subquestion_xml = $this->get_subquestion_xml($subquestion); $text = str_replace($subquestion_id, $subquestion_xml, $text); } $result->add_xml($text); return $result; }
protected function add_answer_feedback_processing(ImsQtiWriter $response_processing, $question) { $result = $response_processing->add_responseCondition(); $response_id = ImsQtiWriter::RESPONSE; $outcome_id = ImsQtiWriter::FEEDBACK; $if = $result->add_responseIf(); $if->add_isNull()->add_variable($response_id); $if->add_setOutcomeValue($outcome_id)->add_baseValue(ImsQtiWriter::BASETYPE_IDENTIFIER, 'FEEDBACK_ID_ELSE'); $count = 0; foreach ($question->options->answers as $answer) { $id = 'FEEDBACK_ID_' . ++$count; $formula_serializer = new CalculatedFormulaSerializer(); if ($formula = $formula_serializer->parse($answer->answer)) { //tolerance mode geometric not supported by QTI $tolerance_mode = $answer->tolerancetype == 1 ? ImsQtiWriter::TOLERANCE_MODE_RELATIVE : ImsQtiWriter::TOLERANCE_MODE_ABSOLUTE; $elseif = $result->add_responseElseIf(); $equal = $elseif->add_equal($tolerance_mode, $answer->tolerance, $answer->tolerance); $equal->add_flow($formula); $product = $equal->add_product(); $product->add_variable($response_id); $product->add_variable(self::UNIT_MULTIPLIER); $elseif->add_setOutcomeValue($outcome_id)->add_baseValue(ImsQtiWriter::BASETYPE_IDENTIFIER, $id); } } $else = $result->add_responseElse(); $else->add_setOutcomeValue($outcome_id)->add_baseValue(ImsQtiWriter::BASETYPE_IDENTIFIER, 'FEEDBACK_ID_ELSE'); return $result; }
/** * Serialize additional information not or not well supported by QTI. * Used for reimport. */ protected function add_question_data(ImsQtiWriter $item, $question) { $id = self::MOODLE_QUESTION_DATA; $value = 'true'; $q = clone $question; $q = $this->get_question_data($q); $text = serialize($q); $result = $item->add_modalFeedback($id, $value, 'show')->add_text($text); return $result; }
protected function add_interaction(ImsQtiWriter $body, $question) { return $body->add_extendedTextInteraction(); }
protected function add_overall_feedback(ImsQtiWriter $item, $question) { if (!isset($question->options) || !isset($question->options->incorrectfeedback)) { return false; } $text = $this->translate_feedback_text($question->options->incorrectfeedback, self::FORMAT_HTML, $question); $item->add_modalFeedback(self::OVERALL_FEEDBACK, self::FEEDBACK_INCORRECT, 'show')->add_flow($text); $text = $this->translate_feedback_text($question->options->correctfeedback, self::FORMAT_HTML, $question); $item->add_modalFeedback(self::OVERALL_FEEDBACK, self::FEEDBACK_CORRECT, 'show')->add_flow($text); $text = $this->translate_feedback_text($question->options->partiallycorrectfeedback, self::FORMAT_HTML, $question); $item->add_modalFeedback(self::OVERALL_FEEDBACK, self::FEEDBACK_PARTIALY_CORRECT, 'show')->add_flow($text); }
public function add_interaction(ImsQtiWriter $item, $question) { $shuffle = $question->options->shuffleanswers; $response_id = $this->response_id($question); $result = $item->add_inlineChoiceInteraction($response_id, $shuffle); foreach ($question->options->answers as $answer) { $answer_id = $this->answer_id($answer); $result->add_inlineChoice($answer_id)->add_flow($answer->answer); } return $result; }
public function add_interaction(ImsQtiWriter $item, $question) { $expectedLength = 0; foreach ($question->options->answers as $answer) { $expectedLength = max($expectedLength, strlen($answer->answer)); } $response_id = $this->response_id($question); $result = $item->add_textEntryInteraction($response_id, '', '', $expectedLength); return $result; }
protected function add_interaction(ImsQtiWriter $body, $question) { $max_choices = $question->options->single ? 1 : 0; $shuffle = $question->options->shuffleanswers; $result = $body->add_choiceInteraction(ImsQtiWriter::RESPONSE, $max_choices, $shuffle); $count = 0; foreach ($question->options->answers as $answer) { $identifier = 'ID_' . ++$count; $choice = $result->add_simpleChoice($identifier); $text = $this->translate_question_text($answer->answer, self::FORMAT_HTML, $question); $choice->add_flow($text); } return $result; }
public function add_interaction(ImsQtiWriter $item, $question) { $response_id = $this->response_id($question); $result = $item->add_textEntryInteraction($response_id); $instructions = $question->options->instructions; if (!empty($instructions)) { $body->add_rubricBlock(ImsQtiWriter::VIEW_ALL)->add_flow($instructions); } return $result; }
public function add_score_declaration(ImsQtiWriter $item, $question) { $score = $question->defaultgrade; $cardinality = ImsQtiWriter::CARDINALITY_SINGLE; $id = $this->score_id($question); $base_type = is_int($score) ? ImsQtiWriter::BASETYPE_INTEGER : ImsQtiWriter::BASETYPE_FLOAT; $result = $item->add_outcomeDeclaration($id, $cardinality, $base_type, $score); $result->add_defaultValue()->add_value(0); return $result; }