function set_data($question)
 {
     if (isset($question->options)) {
         $answers = $question->options->answers;
         if (count($answers)) {
             $key = 0;
             foreach ($answers 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;
                 $default_values['feedback[' . $key . ']'] = $answer->feedback;
                 $key++;
             }
         }
         $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++;
             }
         }
     }
     $default_values['submitbutton'] = get_string('nextpage', 'qtype_calculated');
     $default_values['makecopy'] = get_string('makecopynextpage', 'qtype_calculated');
     /* 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');
     }
     if ($value = $el->getSelected()) {
         $qu->category = $value[0];
     } else {
         $qu->category = $question->category;
         // on load  $question->category is set by question.php
     }
     $html2 = $this->qtypeobj->print_dataset_definitions_category($qu);
     $this->_form->_elements[$this->_form->_elementIndex['listcategory']]->_text = $html2;
     $question = (object) ((array) $question + $default_values);
     parent::set_data($question);
 }
 function data_preprocessing($question)
 {
     global $QTYPES;
     $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, $this->context->id, 'question', 'answerfeedback', !empty($answer->id) ? (int) $answer->id : null, $this->fileoptions, $answer->feedback);
                 $default_values['feedback[' . $key . ']']['format'] = $answer->feedbackformat;
                 $default_values['feedback[' . $key . ']']['itemid'] = $draftid;
                 $key++;
             }
         }
         $default_values['synchronize'] = $question->options->synchronize;
         // set unit data, prepare files in instruction area
         $QTYPES['numerical']->set_numerical_unit_data($this, $question, $default_values);
     }
     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';
     /* 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');
     }
     if ($value = $el->getSelected()) {
         $qu->category = $value[0];
     } else {
         $qu->category = $question->category;
         // on load  $question->category is set by question.php
     }
     $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;
 }