public function on_generate_response_processing() { parent::on_generate_response_processing(); //respconditions /** * General unconditional feedback must be added as a first respcondition * without any condition and just displayfeedback (if exists) */ cc_assesment_helper::add_respcondition($this->qresprocessing, 'General feedback', $this->general_feedback, null, true); //success condition /** * For all question types outside of the Essay question, scoring is done in a * single <respcondition> with a continue flag set to No. The outcome is always * a variable named SCORE which value must be set to 100 in case of correct answer. * Partial scores (not 0 or 100) are not supported. */ $qrespcondition = new cc_assesment_respconditiontype(); $qrespcondition->set_title('Correct'); $this->qresprocessing->add_respcondition($qrespcondition); $qrespcondition->enable_continue(false); $qsetvar = new cc_assignment_setvartype(100); $qrespcondition->add_setvar($qsetvar); //define the condition for success $qconditionvar = new cc_assignment_conditionvar(); $qrespcondition->set_conditionvar($qconditionvar); //create root and condition $qandcondition = new cc_assignment_conditionvar_andtype(); $qconditionvar->set_and($qandcondition); foreach ($this->answerlist as $ident => $refid) { $qvarequal = new cc_assignment_conditionvar_varequaltype($ident); $qvarequal->enable_case(); if ($refid[1]) { $qandcondition->set_varequal($qvarequal); } else { $qandcondition->set_not($qvarequal); } $qvarequal->set_respident($this->qresponse_lid->get_ident()); } $qdisplayfeedback = new cc_assignment_displayfeedbacktype(); $qrespcondition->add_displayfeedback($qdisplayfeedback); $qdisplayfeedback->set_feedbacktype(cc_qti_values::Response); //TODO: this needs to be fixed reset($this->correct_feedbacks); $ident = key($this->correct_feedbacks); $qdisplayfeedback->set_linkrefid($ident); //rest of the conditions foreach ($this->answerlist as $ident => $refid) { cc_assesment_helper::add_response_condition($this->qresprocessing, 'Incorrect feedback', $refid[0], $this->general_feedback, $this->qresponse_lid->get_ident()); } //Final element for incorrect feedback reset($this->incorrect_feedbacks); $ident = key($this->incorrect_feedbacks); cc_assesment_helper::add_respcondition($this->qresprocessing, 'Incorrect feedback', $ident, 0); }
public function generate(XMLGenericDocument &$doc, DOMNode &$item, $namespace) { $node = $doc->append_new_element_ns($item, $namespace, cc_qti_tags::conditionvar); if (!empty($this->and)) { $this->and->generate($doc, $node, $namespace); } if (!empty($this->other)) { $this->other->generate($doc, $node, $namespace); } if (!empty($this->varequal)) { $this->varequal->generate($doc, $node, $namespace); } if (!empty($this->varsubstring)) { $this->varsubstring->generate($doc, $node, $namespace); } }