public function validation($fromform, $files)
 {
     $errors = parent::validation($fromform, $files);
     if (empty($fromform['makecopy']) && isset($this->question->id) && ($this->question->formoptions->canedit || $this->question->formoptions->cansaveasnew) && empty($fromform['usecurrentcat']) && !$this->question->formoptions->canmove) {
         $errors['currentgrp'] = get_string('nopermissionmove', 'question');
     }
     // Default mark.
     if (array_key_exists('defaultmark', $fromform) && $fromform['defaultmark'] < 0) {
         $errors['defaultmark'] = get_string('defaultmarkmustbepositive', 'question');
     }
     return $errors;
 }
 public function set_data($question)
 {
     $formdata = array();
     $fromform = new stdClass();
     if (isset($question->options)) {
         $answers = $question->options->answers;
         if (count($answers)) {
             if (optional_param('updateanswers', false, PARAM_BOOL) || optional_param('updatedatasets', false, PARAM_BOOL)) {
                 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($this->qtypeobj, $question->id, $question->questiontext, $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 defaults.
     if ($this->qtypeobj->supports_dataset_item_generation()) {
         $itemnumber = $this->noofitems + 1;
         foreach ($this->datasetdefs as $defid => $datasetdef) {
             if (!optional_param('updatedatasets', false, PARAM_BOOL) && !optional_param('updateanswers', false, PARAM_BOOL)) {
                 $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', false, PARAM_BOOL) && !optional_param('updateanswers', false, PARAM_BOOL)) {
         $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++;
         }
     }
     $comment = $this->qtypeobj->comment_on_datasetitems($this->qtypeobj, $question->id, $question->questiontext, $answers, $data, $this->noofitems + 1);
     if (isset($comment->outsidelimit) && $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_calculated') . '</span>';
     }
     $formdata = $this->qtypeobj->custom_generator_set_data($this->datasetdefs, $formdata);
     parent::set_data((object) ($formdata + (array) $question));
 }
예제 #3
0
 public function validation($data, $files) {
     $errors = parent::validation($data, $files);
     $datasets = $data['dataset'];
     $countvalid = 0;
     foreach ($datasets as $key => $dataset) {
         if ($dataset != '0') {
             $countvalid++;
         }
     }
     if (!$countvalid) {
         foreach ($datasets as $key => $dataset) {
             $errors['dataset['.$key.']'] =
                     get_string('atleastonerealdataset', 'qtype_calculated');
         }
     }
     return $errors;
 }
예제 #4
0
 public function validation($fromform, $files) {
     $errors = parent::validation($fromform, $files);
     if (empty($fromform['makecopy']) && isset($this->question->id)
             && ($this->question->formoptions->canedit ||
                     $this->question->formoptions->cansaveasnew)
             && empty($fromform['usecurrentcat']) && !$this->question->formoptions->canmove) {
         $errors['currentgrp'] = get_string('nopermissionmove', 'question');
     }
     return $errors;
 }