Merge branch 'MDL-27868' of git://github.com/timhunt/moodle
This commit is contained in:
@@ -163,68 +163,38 @@ class qtype_calculated_edit_form extends qtype_numerical_edit_form {
|
||||
}
|
||||
|
||||
public function data_preprocessing($question) {
|
||||
$default_values = array();
|
||||
if (isset($question->options)) {
|
||||
$answers = $question->options->answers;
|
||||
if (count($answers)) {
|
||||
$key = 0;
|
||||
foreach ($answers as $answer) {
|
||||
$draftid = file_get_submitted_draft_itemid('feedback['.$key.']');
|
||||
$default_values['answer['.$key.']'] = $answer->answer;
|
||||
$default_values['fraction['.$key.']'] = $answer->fraction;
|
||||
$default_values['tolerance['.$key.']'] = $answer->tolerance;
|
||||
$default_values['tolerancetype['.$key.']'] = $answer->tolerancetype;
|
||||
$default_values['correctanswerlength['.$key.']'] = $answer->correctanswerlength;
|
||||
$default_values['correctanswerformat['.$key.']'] = $answer->correctanswerformat;
|
||||
$default_values['feedback['.$key.']'] = array();
|
||||
$default_values['feedback['.$key.']']['text'] = file_prepare_draft_area(
|
||||
$draftid, // draftid
|
||||
$this->context->id, // context
|
||||
'question', // component
|
||||
'answerfeedback', // filarea
|
||||
!empty($answer->id)?(int)$answer->id:null, // itemid
|
||||
$this->fileoptions, // options
|
||||
$answer->feedback // text
|
||||
);
|
||||
$default_values['feedback['.$key.']']['format'] = $answer->feedbackformat;
|
||||
$default_values['feedback['.$key.']']['itemid'] = $draftid;
|
||||
$key++;
|
||||
}
|
||||
}
|
||||
$default_values['synchronize'] = $question->options->synchronize;
|
||||
}
|
||||
if (isset($question->options->single)) {
|
||||
$default_values['single'] = $question->options->single;
|
||||
$default_values['answernumbering'] = $question->options->answernumbering;
|
||||
$default_values['shuffleanswers'] = $question->options->shuffleanswers;
|
||||
// prepare feedback editor to display files in draft area
|
||||
}
|
||||
$default_values['submitbutton'] = get_string('nextpage', 'qtype_calculated');
|
||||
$default_values['makecopy'] = get_string('makecopynextpage', 'qtype_calculated');
|
||||
$default_values['returnurl'] = '0';
|
||||
|
||||
$qu = new stdClass();
|
||||
$el = new stdClass();
|
||||
/* no need to call elementExists() here */
|
||||
if ($this->_form->elementExists('category')) {
|
||||
$el = $this->_form->getElement('category');
|
||||
} else {
|
||||
$el = $this->_form->getElement('categorymoveto');
|
||||
}
|
||||
if ($value = $el->getSelected()) {
|
||||
$qu->category = $value[0];
|
||||
} else {
|
||||
// on load $question->category is set by question.php
|
||||
$qu->category = $question->category;
|
||||
}
|
||||
$html2 = $this->qtypeobj->print_dataset_definitions_category($qu);
|
||||
$this->_form->_elements[$this->_form->_elementIndex['listcategory']]->_text = $html2;
|
||||
$question = (object)((array)$question + $default_values);
|
||||
|
||||
$question = parent::data_preprocessing($question);
|
||||
$question = $this->data_preprocessing_answers($question);
|
||||
$question = $this->data_preprocessing_hints($question);
|
||||
$question = $this->data_preprocessing_units($question);
|
||||
$question = $this->data_preprocessing_unit_options($question);
|
||||
|
||||
if (isset($question->options->synchronize)) {
|
||||
$question->synchronize = $question->options->synchronize;
|
||||
}
|
||||
|
||||
return $question;
|
||||
}
|
||||
|
||||
protected function data_preprocessing_answers($question) {
|
||||
$question = parent::data_preprocessing_answers($question);
|
||||
if (empty($question->options->answers)) {
|
||||
return $question;
|
||||
}
|
||||
|
||||
$key = 0;
|
||||
foreach ($question->options->answers as $answer) {
|
||||
// See comment in the parent method about this hack.
|
||||
unset($this->_form->_defaultValues["tolerancetype[$key]"]);
|
||||
unset($this->_form->_defaultValues["correctanswerlength[$key]"]);
|
||||
unset($this->_form->_defaultValues["correctanswerformat[$key]"]);
|
||||
|
||||
$question->tolerancetype[$key] = $answer->tolerancetype;
|
||||
$question->correctanswerlength[$key] = $answer->correctanswerlength;
|
||||
$question->correctanswerformat[$key] = $answer->correctanswerformat;
|
||||
$key++;
|
||||
}
|
||||
|
||||
return $question;
|
||||
}
|
||||
|
||||
|
||||
@@ -183,104 +183,42 @@ class qtype_calculatedmulti_edit_form extends question_edit_form {
|
||||
}
|
||||
|
||||
public function data_preprocessing($question) {
|
||||
$default_values['multichoice']= $this->editasmultichoice;
|
||||
$question = parent::data_preprocessing($question);
|
||||
$question = $this->data_preprocessing_answers($question, true);
|
||||
$question = $this->data_preprocessing_combined_feedback($question, true);
|
||||
$question = $this->data_preprocessing_hints($question, true, true);
|
||||
|
||||
if (isset($question->options)) {
|
||||
$answers = $question->options->answers;
|
||||
if (count($answers)) {
|
||||
$key = 0;
|
||||
foreach ($answers as $answer) {
|
||||
$draftid = file_get_submitted_draft_itemid('feedback['.$key.']');
|
||||
$default_values['answer['.$key.']'] = $answer->answer;
|
||||
$default_values['fraction['.$key.']'] = $answer->fraction;
|
||||
$default_values['tolerance['.$key.']'] = $answer->tolerance;
|
||||
$default_values['tolerancetype['.$key.']'] = $answer->tolerancetype;
|
||||
$default_values['correctanswerlength['.$key.']'] = $answer->correctanswerlength;
|
||||
$default_values['correctanswerformat['.$key.']'] = $answer->correctanswerformat;
|
||||
$default_values['feedback['.$key.']'] = array();
|
||||
// prepare draftarea
|
||||
$default_values['feedback['.$key.']']['text'] = file_prepare_draft_area(
|
||||
$draftid, $this->context->id, 'question', 'answerfeedback',
|
||||
empty($answer->id) ? null : (int) $answer->id,
|
||||
$this->fileoptions, $answer->feedback);
|
||||
$default_values['feedback['.$key.']']['format'] = $answer->feedbackformat;
|
||||
$default_values['feedback['.$key.']']['itemid'] = $draftid;
|
||||
$key++;
|
||||
}
|
||||
}
|
||||
$default_values['synchronize'] = $question->options->synchronize;
|
||||
$question->synchronize = $question->options->synchronize;
|
||||
$question->single = $question->options->single;
|
||||
$question->answernumbering = $question->options->answernumbering;
|
||||
$question->shuffleanswers = $question->options->shuffleanswers;
|
||||
}
|
||||
|
||||
if (isset($question->options->units)) {
|
||||
$units = array_values($question->options->units);
|
||||
// make sure the default unit is at index 0
|
||||
usort($units, create_function('$a, $b',
|
||||
'if (1.0 === (float)$a->multiplier) { return -1; } else '.
|
||||
'if (1.0 === (float)$b->multiplier) { return 1; } else { return 0; }'));
|
||||
if (count($units)) {
|
||||
$key = 0;
|
||||
foreach ($units as $unit) {
|
||||
$default_values['unit['.$key.']'] = $unit->unit;
|
||||
$default_values['multiplier['.$key.']'] = $unit->multiplier;
|
||||
$key++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($question->options->single)) {
|
||||
$default_values['single'] = $question->options->single;
|
||||
$default_values['answernumbering'] = $question->options->answernumbering;
|
||||
$default_values['shuffleanswers'] = $question->options->shuffleanswers;
|
||||
}
|
||||
$default_values['submitbutton'] = get_string('nextpage', 'qtype_calculated');
|
||||
$default_values['makecopy'] = get_string('makecopynextpage', 'qtype_calculated');
|
||||
return $question;
|
||||
}
|
||||
|
||||
// prepare draft files
|
||||
foreach (array('correctfeedback', 'partiallycorrectfeedback',
|
||||
'incorrectfeedback') as $feedbackname) {
|
||||
if (!isset($question->options->$feedbackname)) {
|
||||
continue;
|
||||
}
|
||||
$text = $question->options->$feedbackname;
|
||||
$draftid = file_get_submitted_draft_itemid($feedbackname);
|
||||
$feedbackformat = $feedbackname . 'format';
|
||||
$format = $question->options->$feedbackformat;
|
||||
$default_values[$feedbackname] = array();
|
||||
$default_values[$feedbackname]['text'] = file_prepare_draft_area(
|
||||
$draftid, // draftid
|
||||
$this->context->id, // context
|
||||
'qtype_calculatedmulti', // component
|
||||
$feedbackname, // filarea
|
||||
!empty($question->id)?(int)$question->id:null, // itemid
|
||||
$this->fileoptions, // options
|
||||
$text // text
|
||||
);
|
||||
$default_values[$feedbackname]['format'] = $format;
|
||||
$default_values[$feedbackname]['itemid'] = $draftid;
|
||||
protected function data_preprocessing_answers($question) {
|
||||
$question = parent::data_preprocessing_answers($question);
|
||||
if (empty($question->options->answers)) {
|
||||
return $question;
|
||||
}
|
||||
/**
|
||||
* set the wild cards category display given that on loading the category element is
|
||||
* unselected when processing this function but have a valid value when processing the
|
||||
* update category button. The value can be obtain by
|
||||
* $qu->category = $this->_form->_elements[$this->_form->
|
||||
* _elementIndex['category']]->_values[0];
|
||||
* but is coded using existing functions
|
||||
*/
|
||||
$qu = new stdClass();
|
||||
$el = new stdClass();
|
||||
// no need to call elementExists() here.
|
||||
if ($this->_form->elementExists('category')) {
|
||||
$el = $this->_form->getElement('category');
|
||||
} else {
|
||||
$el = $this->_form->getElement('categorymoveto');
|
||||
|
||||
$key = 0;
|
||||
foreach ($question->options->answers as $answer) {
|
||||
// See comment in the parent method about this hack.
|
||||
unset($this->_form->_defaultValues["tolerance[$key]"]);
|
||||
unset($this->_form->_defaultValues["tolerancetype[$key]"]);
|
||||
unset($this->_form->_defaultValues["correctanswerlength[$key]"]);
|
||||
unset($this->_form->_defaultValues["correctanswerformat[$key]"]);
|
||||
|
||||
$question->tolerance[$key] = $answer->tolerance;
|
||||
$question->tolerancetype[$key] = $answer->tolerancetype;
|
||||
$question->correctanswerlength[$key] = $answer->correctanswerlength;
|
||||
$question->correctanswerformat[$key] = $answer->correctanswerformat;
|
||||
$key++;
|
||||
}
|
||||
if ($value = $el->getSelected()) {
|
||||
$qu->category = $value[0];
|
||||
} else {
|
||||
// on load $question->category is set by question.php
|
||||
$qu->category = $question->category;
|
||||
}
|
||||
$html2 = $this->qtypeobj->print_dataset_definitions_category($qu);
|
||||
$this->_form->_elements[$this->_form->_elementIndex['listcategory']]->_text = $html2;
|
||||
$question = (object)((array)$question + $default_values);
|
||||
|
||||
return $question;
|
||||
}
|
||||
|
||||
|
||||
@@ -607,47 +607,15 @@ class qtype_calculatedsimple_edit_form extends qtype_calculated_edit_form {
|
||||
}
|
||||
|
||||
public function data_preprocessing($question) {
|
||||
$answer = $this->answer;
|
||||
$default_values = array();
|
||||
if (count($answer)) {
|
||||
$key = 0;
|
||||
foreach ($answer as $answer) {
|
||||
$default_values['answer['.$key.']'] = $answer->answer;
|
||||
$default_values['fraction['.$key.']'] = $answer->fraction;
|
||||
$default_values['tolerance['.$key.']'] = $answer->tolerance;
|
||||
$default_values['tolerancetype['.$key.']'] = $answer->tolerancetype;
|
||||
$default_values['correctanswerlength['.$key.']'] = $answer->correctanswerlength;
|
||||
$default_values['correctanswerformat['.$key.']'] = $answer->correctanswerformat;
|
||||
|
||||
// prepare draft files
|
||||
$draftid = file_get_submitted_draft_itemid('feedback['.$key.']');
|
||||
$default_values['feedback['.$key.']']['text'] = file_prepare_draft_area(
|
||||
$draftid, // draftid
|
||||
$this->context->id, // context
|
||||
'question', // component
|
||||
'answerfeedback', // filarea
|
||||
!empty($answer->id)?(int)$answer->id:null, // itemid
|
||||
$this->fileoptions, // options
|
||||
!empty($answer->feedback)?$answer->feedback:'' // text
|
||||
);
|
||||
$default_values['feedback['.$key.']']['format'] = !empty($answer->feedbackformat) ?
|
||||
$answer->feedbackformat : editors_get_preferred_format();
|
||||
$default_values['feedback['.$key.']']['itemid'] = $draftid;
|
||||
|
||||
$key++;
|
||||
}
|
||||
}
|
||||
$default_values['synchronize'] = 0;
|
||||
|
||||
$formdata = array();
|
||||
$fromform = new stdClass();
|
||||
//this should be done before the elements are created and stored as $this->formdata;
|
||||
//fill out all data sets and also the fields for the next item to add.
|
||||
$question = (object)((array)$question + $default_values+$this->formdata);
|
||||
|
||||
$question = parent::data_preprocessing($question);
|
||||
$question = $this->data_preprocessing_answers($question);
|
||||
$question = $this->data_preprocessing_hints($question);
|
||||
$question = $this->data_preprocessing_units($question);
|
||||
$question = $this->data_preprocessing_unit_options($question);
|
||||
|
||||
// This is a bit ugly, but it loads all the dataset values.
|
||||
$question = (object)((array)$question + $this->formdata);
|
||||
|
||||
return $question;
|
||||
}
|
||||
|
||||
|
||||
@@ -178,6 +178,9 @@ class qtype_numerical_edit_form extends question_edit_form {
|
||||
|
||||
$key = 0;
|
||||
foreach ($question->options->answers as $answer) {
|
||||
// See comment in the parent method about this hack.
|
||||
unset($this->_form->_defaultValues["tolerance[$key]"]);
|
||||
|
||||
$question->tolerance[$key] = $answer->tolerance;
|
||||
$key++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user