Пример #1
0
 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);
         }
     }
 }
Пример #3
0
 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);
 }
Пример #4
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);
 }