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)); }
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; }
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; }