/**
  * Perform the necessary preprocessing for the fields added by
  * {@link add_per_answer_fields()}.
  * @param object $question the data being passed to the form.
  * @return object $question the modified data.
  */
 protected function data_preprocessing_answers($question, $withanswerfiles = false)
 {
     if (empty($question->options->answers)) {
         return $question;
     }
     $key = 0;
     foreach ($question->options->answers as $answer) {
         // answer content & format
         $question->answer[$key] = json_encode(qtype_omerocommon::serialize_to_json_from($answer->answer));
         $question->answerformat[$key] = $answer->answerformat;
         // answer fraction
         $question->fraction[$key] = 0 + $answer->fraction;
         unset($this->_form->_defaultValues["fraction[{$key}]"]);
         // answer feedback
         $question->feedback[$key] = json_encode(qtype_omerocommon::serialize_to_json_from($answer->feedback));
         $question->feedbackformat[$key] = $answer->feedbackformat;
         $question->feedbackimages[$key] = empty($answer->images) ? json_encode(array()) : $answer->images;
         $question->answer_locale_map[$key] = json_encode(qtype_omerocommon::serialize_to_json_from($answer->answer));
         $question->feedback_locale_map[$key] = json_encode(qtype_omerocommon::serialize_to_json_from($answer->feedback));
         $key++;
     }
     // Now process extra answer fields.
     $extraanswerfields = question_bank::get_qtype($question->qtype)->extra_answer_fields();
     if (is_array($extraanswerfields)) {
         // Omit table name.
         array_shift($extraanswerfields);
         $question = $this->data_preprocessing_extra_answer_fields($question, $extraanswerfields);
     }
     return $question;
 }