protected function add_unit_processing(ImsQtiWriter $response_processing, $question) { $show_units = $question->options->showunits; if ($show_units == self::UNIT_HIDE || $show_units == self::UNIT_READONLY) { return null; } $response = self::UNIT; $outcome = self::UNIT_MULTIPLIER; $result = $response_processing->add_responseCondition(); $if = $result->add_responseIf(); $if->add_isNull()->add_variable($response); $if->add_setOutcomeValue($outcome)->add_baseValue(ImsQtiWriter::BASETYPE_FLOAT, 1); $result->add_responseElse()->add_setOutcomeValue($outcome)->add_mapResponse($response); return $result; }
protected function add_overall_feedback_processing(ImsQtiWriter $processing, $question) { $processing->add_standard_response_map_response(ImsQtiWriter::RESPONSE, self::PARTIAL_SCORE); $result = $processing->add_responseCondition(); $if = $result->add_responseIf(); $lte = $if->add_lte(); $lte->add_variable(self::PARTIAL_SCORE); $lte->add_baseValue(ImsQtiWriter::BASETYPE_FLOAT, 0); $if->add_setOutcomeValue(self::OVERALL_FEEDBACK)->add_baseValue(ImsQtiWriter::BASETYPE_IDENTIFIER, self::FEEDBACK_INCORRECT); $elseif = $result->add_responseElseIf(); $gte = $elseif->add_gte(); $gte->add_variable(self::PARTIAL_SCORE); $gte->add_baseValue(ImsQtiWriter::BASETYPE_FLOAT, $question->defaultgrade); $elseif->add_setOutcomeValue(self::OVERALL_FEEDBACK)->add_baseValue(ImsQtiWriter::BASETYPE_IDENTIFIER, self::FEEDBACK_CORRECT); $else = $result->add_responseElse(); $else->add_setOutcomeValue(self::OVERALL_FEEDBACK)->add_baseValue(ImsQtiWriter::BASETYPE_IDENTIFIER, self::FEEDBACK_PARTIALY_CORRECT); return $result; }
protected function add_add_penalty(ImsQtiWriter $processing, $question, $input_id = ImsQtiWriter::SCORE, $score_id = ImsQtiWriter::SCORE, $penalty_id = self::PENALTY) { if (!$this->has_penalty($question)) { return null; } $result = $processing->add_setOutcomeValue($score_id); $sum = $result->add_subtract(); $sum->add_variable($input_id); $sum->add_variable($penalty_id); $result = $processing->add_responseCondition(); $if = $result->add_responseIf(); $lt = $if->add_lt(); $lt->add_variable($input_id); $lt->add_baseValue(ImsQtiWriter::BASETYPE_FLOAT, 0); $if->add_setOutcomeValue($input_id)->add_baseValue(ImsQtiWriter::BASETYPE_FLOAT, 0); return $result; }
public function add_score_processing(ImsQtiWriter $response_processing, $question) { $result = $response_processing->add_responseCondition(); $response_id = $this->response_id($question); $score_id = $this->score_id($question); $if = $result->add_responseIf(); $if->add_isNull()->add_variable($response_id); $if->add_setOutcomeValue($score_id)->add_baseValue(ImsQtiWriter::BASETYPE_FLOAT, 0); foreach ($question->options->answers as $answer) { $score = $answer->fraction * $question->defaultgrade; $elseif = $result->add_responseElseIf(); if (ShortanswerUtil::is_regex($answer->answer)) { $pattern = ShortanswerUtil::translate_regex($answer->answer, $question->options->usecase); $elseif->add_patternMatch($pattern)->add_variable($response_id); } else { $match = $elseif->add_stringMatch($question->options->usecase); $match->add_variable($response_id); $match->add_baseValue(Qti::BASETYPE_STRING, $answer->answer); } $elseif->add_setOutcomeValue($score_id)->add_baseValue(ImsQtiWriter::BASETYPE_FLOAT, $score); /* $score = $answer->fraction * $question->defaultgrade; $pattern = ShortanswerUtil::translate_regex($answer->answer, $question->options->usecase); $elseif = $result->add_responseElseIf(); $elseif->add_patternMatch($pattern)->add_variable($response_id); $elseif->add_setOutcomeValue($score_id)->add_baseValue(ImsQtiWriter::BASETYPE_FLOAT, $score); */ } $else = $result->add_responseElse(); $else->add_setOutcomeValue($score_id)->add_baseValue(ImsQtiWriter::BASETYPE_FLOAT, 0); return $result; }
public function add_score_processing(ImsQtiWriter $response_processing, $question) { $result = $response_processing->add_responseCondition(); $response_id = $this->response_id($question); $outcome_id = $this->score_id($question); $if = $result->add_responseIf(); $if->add_isNull()->add_variable($response_id); $if->add_setOutcomeValue($outcome_id)->add_baseValue(ImsQtiWriter::BASETYPE_FLOAT, 0); foreach ($question->options->answers as $answer) { if (is_numeric($answer->answer)) { //could be set to * $score = $answer->fraction * $question->defaultgrade; $tolerance_mode = ImsQtiWriter::TOLERANCE_MODE_ABSOLUTE; $elseif = $result->add_responseElseIf(); $equal = $elseif->add_equal($tolerance_mode, $answer->tolerance, $answer->tolerance); $equal->add_baseValue(ImsQtiWriter::BASETYPE_FLOAT, $answer->answer); $equal->add_variable($response_id); $elseif->add_setOutcomeValue($outcome_id)->add_baseValue(ImsQtiWriter::BASETYPE_FLOAT, $score); } } $else = $result->add_responseElse(); $else->add_setOutcomeValue($outcome_id)->add_baseValue(ImsQtiWriter::BASETYPE_FLOAT, 0); 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; }