public function on_generate_response_processing() { parent::on_generate_response_processing(); // Response conditions. if (!empty($this->general_feedback)) { $qrespcondition = new cc_assesment_respconditiontype(); $qrespcondition->set_title('General feedback'); $this->qresprocessing->add_respcondition($qrespcondition); // Define the condition for success. $qconditionvar = new cc_assignment_conditionvar(); $qrespcondition->set_conditionvar($qconditionvar); $qother = new cc_assignment_conditionvar_othertype(); $qconditionvar->set_other($qother); $qdisplayfeedback = new cc_assignment_displayfeedbacktype(); $qrespcondition->add_displayfeedback($qdisplayfeedback); $qdisplayfeedback->set_feedbacktype(cc_qti_values::Response); $qdisplayfeedback->set_linkrefid('general_fb'); } }
public function on_generate_response_processing() { parent::on_generate_response_processing(); // Response conditions. // General unconditional feedback must be added as a first respcondition // without any condition and just displayfeedback (if exists). if (!empty($this->general_feedback)) { $qrespcondition = new cc_assesment_respconditiontype(); $qrespcondition->set_title('General feedback'); $this->qresprocessing->add_respcondition($qrespcondition); $qrespcondition->enable_continue(); // Define the condition for success. $qconditionvar = new cc_assignment_conditionvar(); $qrespcondition->set_conditionvar($qconditionvar); $qother = new cc_assignment_conditionvar_othertype(); $qconditionvar->set_other($qother); $qdisplayfeedback = new cc_assignment_displayfeedbacktype(); $qrespcondition->add_displayfeedback($qdisplayfeedback); $qdisplayfeedback->set_feedbacktype(cc_qti_values::Response); $qdisplayfeedback->set_linkrefid('general_fb'); } // 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); // TODO: recheck this. $qvarequal = new cc_assignment_conditionvar_varequaltype($this->correct_answer_ident); $qconditionvar->set_varequal($qvarequal); $qvarequal->set_respident($this->qresponse_lid->get_ident()); if (array_key_exists($this->correct_answer_ident, $this->answerlist)) { $qdisplayfeedback = new cc_assignment_displayfeedbacktype(); $qrespcondition->add_displayfeedback($qdisplayfeedback); $qdisplayfeedback->set_feedbacktype(cc_qti_values::Response); $qdisplayfeedback->set_linkrefid($this->answerlist[$this->correct_answer_ident]); } foreach ($this->correct_feedbacks as $ident) { $qdisplayfeedback = new cc_assignment_displayfeedbacktype(); $qrespcondition->add_displayfeedback($qdisplayfeedback); $qdisplayfeedback->set_feedbacktype(cc_qti_values::Response); $qdisplayfeedback->set_linkrefid($ident); } // Rest of the conditions. foreach ($this->answerlist as $ident => $refid) { if ($ident == $this->correct_answer_ident) { continue; } $qrespcondition = new cc_assesment_respconditiontype(); $this->qresprocessing->add_respcondition($qrespcondition); $qsetvar = new cc_assignment_setvartype(0); $qrespcondition->add_setvar($qsetvar); // Define the condition for fail. $qconditionvar = new cc_assignment_conditionvar(); $qrespcondition->set_conditionvar($qconditionvar); $qvarequal = new cc_assignment_conditionvar_varequaltype($ident); $qconditionvar->set_varequal($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); $qdisplayfeedback->set_linkrefid($refid); foreach ($this->incorrect_feedbacks as $ident) { $qdisplayfeedback = new cc_assignment_displayfeedbacktype(); $qrespcondition->add_displayfeedback($qdisplayfeedback); $qdisplayfeedback->set_feedbacktype(cc_qti_values::Response); $qdisplayfeedback->set_linkrefid($ident); } } }
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 on_generate_response_processing() { parent::on_generate_response_processing(); // General unconditional feedback must be added as a first respcondition // without any condition and just displayfeedback (if exists). if (!empty($this->general_feedback)) { $qrespcondition = new cc_assesment_respconditiontype(); $qrespcondition->set_title('General feedback'); $this->qresprocessing->add_respcondition($qrespcondition); $qrespcondition->enable_continue(); // Define the condition for success. $qconditionvar = new cc_assignment_conditionvar(); $qrespcondition->set_conditionvar($qconditionvar); $qother = new cc_assignment_conditionvar_othertype(); $qconditionvar->set_other($qother); $qdisplayfeedback = new cc_assignment_displayfeedbacktype(); $qrespcondition->add_displayfeedback($qdisplayfeedback); $qdisplayfeedback->set_feedbacktype(cc_qti_values::Response); $qdisplayfeedback->set_linkrefid('general_fb'); } // Answer separate conditions. $correct_responses = $this->questions->nodeList('plugin_qtype_shortanswer_question//answer[fraction=1]', $this->question_node); $incorrect_responses = $this->questions->nodeList('plugin_qtype_shortanswer_question//answer[fraction<1]', $this->question_node); $items = array(array($correct_responses, $this->correct_feedbacks), array($incorrect_responses, $this->incorrect_feedbacks)); foreach ($items as $respfeed) { foreach ($respfeed[0] as $coresponse) { $qrespcondition = new cc_assesment_respconditiontype(); $qrespcondition->enable_continue(); $this->qresprocessing->add_respcondition($qrespcondition); $qconditionvar = new cc_assignment_conditionvar(); $qrespcondition->set_conditionvar($qconditionvar); $respc = $this->questions->nodeValue('answertext', $coresponse); $resid = $this->questions->nodeValue('@id', $coresponse); $qvarequal = new cc_assignment_conditionvar_varequaltype($respc); $qconditionvar->set_varequal($qvarequal); $qvarequal->set_respident('response'); $qvarequal->enable_case(false); if (!empty($respfeed[1][$resid])) { $qdisplayfeedback = new cc_assignment_displayfeedbacktype(); $qrespcondition->add_displayfeedback($qdisplayfeedback); $qdisplayfeedback->set_feedbacktype(cc_qti_values::Response); $qdisplayfeedback->set_linkrefid($respfeed[1][$resid]); } } } // 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); foreach ($correct_responses as $coresponse) { $respc = $this->questions->nodeValue('answertext', $coresponse); $qvarequal = new cc_assignment_conditionvar_varequaltype($respc); $qconditionvar->set_varequal($qvarequal); $qvarequal->set_respident('response'); $qvarequal->enable_case(false); } // Add incorrect handling. $qrespcondition = new cc_assesment_respconditiontype(); $this->qresprocessing->add_respcondition($qrespcondition); $qrespcondition->enable_continue(false); // Define the condition for failure. $qconditionvar = new cc_assignment_conditionvar(); $qrespcondition->set_conditionvar($qconditionvar); $qother = new cc_assignment_conditionvar_othertype(); $qconditionvar->set_other($qother); $qsetvar = new cc_assignment_setvartype(0); $qrespcondition->add_setvar($qsetvar); }