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; }