public function import_from_xml($data, $question, qformat_xml $format, $extra = null) { if (!isset($data['@']['type']) || $data['@']['type'] != 'gapselect') { return false; } $question = $format->import_headers($data); $question->qtype = 'gapselect'; $question->shuffleanswers = $format->trans_single($format->getpath($data, array('#', 'shuffleanswers', 0, '#'), 1)); if (!empty($data['#']['selectoption'])) { // Modern XML format. $selectoptions = $data['#']['selectoption']; $question->answer = array(); $question->selectgroup = array(); foreach ($data['#']['selectoption'] as $selectoptionxml) { $question->choices[] = array('answer' => $format->getpath($selectoptionxml, array('#', 'text', 0, '#'), '', true), 'choicegroup' => $format->getpath($selectoptionxml, array('#', 'group', 0, '#'), 1)); } } else { // Legacy format containing PHP serialisation. foreach ($data['#']['answer'] as $answerxml) { $ans = $format->import_answer($answerxml); $question->choices[] = array('answer' => $ans->answer, 'choicegroup' => $ans->feedback); } } $format->import_combined_feedback($question, $data, true); $format->import_hints($question, $data, true, false, $format->get_format($question->questiontextformat)); return $question; }
public function import_from_xml($data, $question, qformat_xml $format, $extra = null) { if (!isset($data['@']['type']) || $data['@']['type'] != 'ddwtos') { return false; } $question = $format->import_headers($data); $question->qtype = 'ddwtos'; $question->shuffleanswers = $format->trans_single($format->getpath($data, array('#', 'shuffleanswers', 0, '#'), 1)); if (!empty($data['#']['dragbox'])) { // Modern XML format. $dragboxes = $data['#']['dragbox']; $question->answer = array(); $question->draggroup = array(); $question->infinite = array(); foreach ($data['#']['dragbox'] as $dragboxxml) { $question->choices[] = array('answer' => $format->getpath($dragboxxml, array('#', 'text', 0, '#'), '', true), 'choicegroup' => $format->getpath($dragboxxml, array('#', 'group', 0, '#'), 1), 'infinite' => array_key_exists('infinite', $dragboxxml['#'])); } } else { // Legacy format containing PHP serialisation. foreach ($data['#']['answer'] as $answerxml) { $ans = $format->import_answer($answerxml); $options = unserialize(stripslashes($ans->feedback['text'])); $question->choices[] = array('answer' => $ans->answer, 'choicegroup' => $options->draggroup, 'infinite' => $options->infinite); } } $format->import_combined_feedback($question, $data, true); $format->import_hints($question, $data, true, false, $format->get_format($question->questiontextformat)); return $question; }
public function import_from_xml($data, $question, qformat_xml $format, $extra=null) { $question_type = $data['@']['type']; if ($question_type != $this->name()) { return false; } $extraquestionfields = $this->extra_question_fields(); if (!is_array($extraquestionfields)) { return false; } // Omit table name. array_shift($extraquestionfields); $qo = $format->import_headers($data); $qo->qtype = $question_type; foreach ($extraquestionfields as $field) { $qo->$field = $format->getpath($data, array('#', $field, 0, '#'), ''); } // Run through the answers. $answers = $data['#']['answer']; $a_count = 0; $extraanswersfields = $this->extra_answer_fields(); if (is_array($extraanswersfields)) { array_shift($extraanswersfields); } foreach ($answers as $answer) { $ans = $format->import_answer($answer); if (!$this->has_html_answers()) { $qo->answer[$a_count] = $ans->answer['text']; } else { $qo->answer[$a_count] = $ans->answer; } $qo->fraction[$a_count] = $ans->fraction; $qo->feedback[$a_count] = $ans->feedback; if (is_array($extraanswersfields)) { foreach ($extraanswersfields as $field) { $qo->{$field}[$a_count] = $format->getpath($answer, array('#', $field, 0, '#'), ''); } } ++$a_count; } return $qo; }
/** * Provide import functionality for xml format * @param data mixed the segment of data containing the question * @param question object question object processed (so far) by standard import code * @param format object the format object so that helper methods can be used (in particular error()) * @param extra mixed any additional format specific data that may be passed by the format (see format code for info) * @return object question object suitable for save_options() call or false if cannot handle */ public function import_from_xml($data, $question, qformat_xml $format, $extra = null) { // Check question is for us. if (!isset($data['@']['type']) || $data['@']['type'] != 'multichoiceset') { return false; } $question = $format->import_headers($data); $question->qtype = 'multichoiceset'; $question->shuffleanswers = $format->trans_single($format->getpath($data, array('#', 'shuffleanswers', 0, '#'), 1)); $question->answernumbering = $format->getpath($data, array('#', 'answernumbering', 0, '#'), 'abc'); $question->correctfeedback = array(); $question->correctfeedback['text'] = $format->getpath($data, array('#', 'correctfeedback', 0, '#', 'text', 0, '#'), '', true); $question->correctfeedback['format'] = $format->trans_format($format->getpath($data, array('#', 'correctfeedback', 0, '@', 'format'), $format->get_format($question->questiontextformat))); $question->correctfeedback['files'] = array(); // Restore files in correctfeedback. $files = $format->getpath($data, array('#', 'correctfeedback', 0, '#', 'file'), array(), false); foreach ($files as $file) { $filesdata = new stdclass(); $filesdata->content = $file['#']; $filesdata->encoding = $file['@']['encoding']; $filesdata->name = $file['@']['name']; $question->correctfeedback['files'][] = $filesdata; } $question->incorrectfeedback = array(); $question->incorrectfeedback['text'] = $format->getpath($data, array('#', 'incorrectfeedback', 0, '#', 'text', 0, '#'), '', true); $question->incorrectfeedback['format'] = $format->trans_format($format->getpath($data, array('#', 'incorrectfeedback', 0, '@', 'format'), $format->get_format($question->questiontextformat))); $question->incorrectfeedback['files'] = array(); // Restore files in incorrectfeedback. $files = $format->getpath($data, array('#', 'incorrectfeedback', 0, '#', 'file'), array(), false); foreach ($files as $file) { $filesdata = new stdclass(); $filesdata->content = $file['#']; $filesdata->encoding = $file['@']['encoding']; $filesdata->name = $file['@']['name']; $question->incorrectfeedback['files'][] = $filesdata; } $question->shownumcorrect = array_key_exists('shownumcorrect', $data['#']); // Run through the answers. $answers = $data['#']['answer']; foreach ($answers as $answer) { $ans = $format->import_answer($answer, true, $format->get_format($question->questiontextformat)); $question->answer[] = $ans->answer; $question->correctanswer[] = !empty($ans->fraction); $question->feedback[] = $ans->feedback; // Backwards compatibility. if (array_key_exists('correctanswer', $answer['#'])) { $key = end(array_keys($question->correctanswer)); $question->correctanswer[$key] = $format->getpath($answer, array('#', 'correctanswer', 0, '#'), 0); } } $format->import_hints($question, $data, true, true, $format->get_format($question->questiontextformat)); // Get extra choicefeedback setting from each hint. if (!empty($question->hintoptions)) { foreach ($question->hintoptions as $key => $options) { $question->hintshowchoicefeedback[$key] = !empty($options); } } return $question; }
public function import_from_xml($data, $question, qformat_xml $format, $extra = null) { global $CFG; if (!array_key_exists('@', $data)) { return false; } if (!array_key_exists('type', $data['@'])) { return false; } if ($data['@']['type'] == 'jme') { // Get common parts. $question = $format->import_headers($data); // Header parts particular to jme. $question->qtype = 'jme'; $question->jmeoptions = $format->getpath($data, array('#', 'jmeoptions', 0, '#'), $CFG->qtype_jme_options); $question->width = $format->getpath($data, array('#', 'width', 0, '#'), QTYPE_JME_APPLET_WIDTH); $question->height = $format->getpath($data, array('#', 'height', 0, '#'), QTYPE_JME_APPLET_HEIGHT); // Run through the answers. $answers = $data['#']['answer']; $anscount = 0; foreach ($answers as $answer) { $ans = $format->import_answer($answer); $question->answer[$anscount] = $ans->answer['text']; $question->fraction[$anscount] = $ans->fraction; $question->feedback[$anscount] = $ans->feedback; ++$anscount; } $format->import_hints($question, $data); return $question; } return false; }
function import_from_xml($data, $question, qformat_xml $format, $extra = null) { // check question is for us/// $qtype = $data['@']['type']; if ($qtype == 'regexp') { $qo = $format->import_headers($data); // header parts particular to regexp $qo->qtype = "regexp"; $qo->usehint = 0; // get usehint $qo->usehint = $format->getpath($data, array('#', 'usehint', 0, '#'), $qo->usehint); // get usecase $qo->usecase = $format->getpath($data, array('#', 'usecase', 0, '#'), $qo->usecase); // get studentshowalternate $qo->studentshowalternate = $format->getpath($data, array('#', 'studentshowalternate', 0, '#'), $qo->studentshowalternate); // run through the answers $answers = $data['#']['answer']; $a_count = 0; foreach ($answers as $answer) { $ans = $format->import_answer($answer); $qo->answer[$a_count] = $ans->answer['text']; $qo->fraction[$a_count] = $ans->fraction; $qo->feedback[$a_count] = $ans->feedback; ++$a_count; } return $qo; } else { return false; } }