예제 #1
0
 function set_data($question)
 {
     $formdata = array();
     //fill out all data sets and also the fields for the next item to add.
     $j = $this->noofitems * count($this->datasetdefs);
     for ($itemnumber = $this->noofitems; $itemnumber >= 1; $itemnumber--) {
         $data = array();
         foreach ($this->datasetdefs as $defid => $datasetdef) {
             if (isset($datasetdef->items[$itemnumber])) {
                 $formdata["number[{$j}]"] = $datasetdef->items[$itemnumber]->value;
                 $formdata["definition[{$j}]"] = $defid;
                 $formdata["itemid[{$j}]"] = $datasetdef->items[$itemnumber]->id;
                 $data[$datasetdef->name] = $datasetdef->items[$itemnumber]->value;
             }
             $j--;
         }
         $formdata['answercomment[' . $itemnumber . ']'] = $this->qtypeobj->comment_on_datasetitems($this->question, $data, $itemnumber);
     }
     $formdata['nextpageparam[forceregeneration]'] = $this->regenerate;
     $formdata['selectdelete'] = '1';
     $formdata['selectadd'] = '1';
     $j = $this->noofitems * count($this->datasetdefs) + 1;
     $data = array();
     // data for comment_on_datasetitems later
     //dataset generation dafaults
     if ($this->qtypeobj->supports_dataset_item_generation()) {
         $itemnumber = $this->noofitems + 1;
         foreach ($this->datasetdefs as $defid => $datasetdef) {
             $formdata["number[{$j}]"] = $this->qtypeobj->generate_dataset_item($datasetdef->options);
             $formdata["definition[{$j}]"] = $defid;
             $formdata["itemid[{$j}]"] = isset($datasetdef->items[$itemnumber]) ? $datasetdef->items[$itemnumber]->id : 0;
             $data[$datasetdef->name] = $formdata["number[{$j}]"];
             $j++;
         }
     }
     //existing records override generated data depending on radio element
     $j = $this->noofitems * count($this->datasetdefs) + 1;
     if (!$this->regenerate) {
         $idx = 1;
         $itemnumber = $this->noofitems + 1;
         foreach ($this->datasetdefs as $defid => $datasetdef) {
             if (isset($datasetdef->items[$itemnumber])) {
                 $formdata["number[{$j}]"] = $datasetdef->items[$itemnumber]->value;
                 $formdata["definition[{$j}]"] = $defid;
                 $formdata["itemid[{$j}]"] = $datasetdef->items[$itemnumber]->id;
                 $data[$datasetdef->name] = $datasetdef->items[$itemnumber]->value;
             }
             $j++;
         }
     }
     //default answercomment will get ignored if answer element is not in the form.
     $formdata['answercomment[' . ($this->noofitems + 1) . ']'] = $this->qtypeobj->comment_on_datasetitems($this->question, $data, $this->noofitems + 1);
     $formdata = $this->qtypeobj->custom_generator_set_data($this->datasetdefs, $formdata);
     parent::set_data((object) ($formdata + (array) $question));
 }
예제 #2
0
 function set_data($question)
 {
     $formdata = array();
     $fromform = new stdClass();
     if (isset($question->options)) {
         $answers = $question->options->answers;
         if (count($answers)) {
             if (optional_param('updateanswers', '', PARAM_RAW) != '' || optional_param('updatedatasets', '', PARAM_RAW) != '') {
                 foreach ($answers as $key => $answer) {
                     $fromform->tolerance[$key] = $this->_form->getElementValue('tolerance[' . $key . ']');
                     $answer->tolerance = $fromform->tolerance[$key];
                     $fromform->tolerancetype[$key] = $this->_form->getElementValue('tolerancetype[' . $key . ']');
                     if (is_array($fromform->tolerancetype[$key])) {
                         $fromform->tolerancetype[$key] = $fromform->tolerancetype[$key][0];
                     }
                     $answer->tolerancetype = $fromform->tolerancetype[$key];
                     $fromform->correctanswerlength[$key] = $this->_form->getElementValue('correctanswerlength[' . $key . ']');
                     if (is_array($fromform->correctanswerlength[$key])) {
                         $fromform->correctanswerlength[$key] = $fromform->correctanswerlength[$key][0];
                     }
                     $answer->correctanswerlength = $fromform->correctanswerlength[$key];
                     $fromform->correctanswerformat[$key] = $this->_form->getElementValue('correctanswerformat[' . $key . ']');
                     if (is_array($fromform->correctanswerformat[$key])) {
                         $fromform->correctanswerformat[$key] = $fromform->correctanswerformat[$key][0];
                     }
                     $answer->correctanswerformat = $fromform->correctanswerformat[$key];
                 }
                 $this->qtypeobj->save_question_calculated($question, $fromform);
             } else {
                 foreach ($answers as $key => $answer) {
                     $formdata['tolerance[' . $key . ']'] = $answer->tolerance;
                     $formdata['tolerancetype[' . $key . ']'] = $answer->tolerancetype;
                     $formdata['correctanswerlength[' . $key . ']'] = $answer->correctanswerlength;
                     $formdata['correctanswerformat[' . $key . ']'] = $answer->correctanswerformat;
                 }
             }
         }
     }
     //fill out all data sets and also the fields for the next item to add.
     $j = $this->noofitems * count($this->datasetdefs);
     for ($itemnumber = $this->noofitems; $itemnumber >= 1; $itemnumber--) {
         $data = array();
         foreach ($this->datasetdefs as $defid => $datasetdef) {
             if (isset($datasetdef->items[$itemnumber])) {
                 $formdata["number[{$j}]"] = $datasetdef->items[$itemnumber]->value;
                 $formdata["definition[{$j}]"] = $defid;
                 $formdata["itemid[{$j}]"] = $datasetdef->items[$itemnumber]->id;
                 $data[$datasetdef->name] = $datasetdef->items[$itemnumber]->value;
             }
             $j--;
         }
         $comment = $this->qtypeobj->comment_on_datasetitems($question->id, $answers, $data, $itemnumber);
         if ($comment->outsidelimit) {
             $this->outsidelimit = $comment->outsidelimit;
         }
         $totalcomment = '';
         foreach ($question->options->answers as $key => $answer) {
             $totalcomment .= $comment->stranswers[$key] . '<br/>';
         }
         $formdata['answercomment[' . $itemnumber . ']'] = $totalcomment;
     }
     $formdata['nextpageparam[forceregeneration]'] = $this->regenerate;
     $formdata['selectdelete'] = '1';
     $formdata['selectadd'] = '1';
     $j = $this->noofitems * count($this->datasetdefs) + 1;
     $data = array();
     // data for comment_on_datasetitems later
     //dataset generation dafaults
     if ($this->qtypeobj->supports_dataset_item_generation()) {
         $itemnumber = $this->noofitems + 1;
         foreach ($this->datasetdefs as $defid => $datasetdef) {
             if (optional_param('updatedatasets', '', PARAM_RAW) == '' && optional_param('updateanswers', '', PARAM_RAW) == '') {
                 $formdata["number[{$j}]"] = $this->qtypeobj->generate_dataset_item($datasetdef->options);
             } else {
                 $formdata["number[{$j}]"] = $this->_form->getElementValue("number[{$j}]");
             }
             $formdata["definition[{$j}]"] = $defid;
             $formdata["itemid[{$j}]"] = isset($datasetdef->items[$itemnumber]) ? $datasetdef->items[$itemnumber]->id : 0;
             $data[$datasetdef->name] = $formdata["number[{$j}]"];
             $j++;
         }
     }
     //existing records override generated data depending on radio element
     $j = $this->noofitems * count($this->datasetdefs) + 1;
     if (!$this->regenerate && (optional_param('updatedatasets', '', PARAM_RAW) == '' && optional_param('updateanswers', '', PARAM_RAW) == '')) {
         $idx = 1;
         $itemnumber = $this->noofitems + 1;
         foreach ($this->datasetdefs as $defid => $datasetdef) {
             if (isset($datasetdef->items[$itemnumber])) {
                 $formdata["number[{$j}]"] = $datasetdef->items[$itemnumber]->value;
                 $formdata["definition[{$j}]"] = $defid;
                 $formdata["itemid[{$j}]"] = $datasetdef->items[$itemnumber]->id;
                 $data[$datasetdef->name] = $datasetdef->items[$itemnumber]->value;
             }
             $j++;
         }
     }
     //default answercomment will get ignored if answer element is not in the form.
     $comment = $this->qtypeobj->comment_on_datasetitems($question->id, $answers, $data, $this->noofitems + 1);
     if ($comment->outsidelimit) {
         $this->outsidelimit = $comment->outsidelimit;
     }
     $key1 = 1;
     foreach ($question->options->answers as $key => $answer) {
         $formdata['answercomment[' . ($this->noofitems + $key1) . ']'] = $comment->stranswers[$key];
         $key1++;
     }
     if ($this->outsidelimit) {
         $formdata['outsidelimit'] = '<span class="error">' . get_string('oneanswertrueansweroutsidelimits', 'qtype_datasetdependent') . '</span>';
     }
     $formdata = $this->qtypeobj->custom_generator_set_data($this->datasetdefs, $formdata);
     parent::set_data((object) ($formdata + (array) $question));
 }