diff --git a/question/type/ddimageortext/backup/moodle2/backup_qtype_ddimagetoimage_plugin.class.php b/question/type/ddimageortext/backup/moodle2/backup_qtype_ddimagetoimage_plugin.class.php new file mode 100644 index 00000000000..4aeef438677 --- /dev/null +++ b/question/type/ddimageortext/backup/moodle2/backup_qtype_ddimagetoimage_plugin.class.php @@ -0,0 +1,94 @@ +. + +/** + * @package moodlecore + * @subpackage backup-moodle2 + * @copyright 2011 The Open University + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +defined('MOODLE_INTERNAL') || die(); + + +/** + * Provides the information to backup ddimagetoimage questions + * + * @copyright 2011 The Open University + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class backup_qtype_ddimagetoimage_plugin extends backup_qtype_plugin { + + /** + * Returns the qtype information to attach to question element + */ + protected function define_question_plugin_structure() { + + $plugin = $this->get_plugin_element(null, '../../qtype', 'ddimagetoimage'); + + $pluginwrapper = new backup_nested_element($this->get_recommended_name()); + + $plugin->add_child($pluginwrapper); + + $ddimagetoimages = new backup_nested_element('ddimagetoimage', array('id'), array( + 'shuffleanswers', 'correctfeedback', 'correctfeedbackformat', + 'partiallycorrectfeedback', 'partiallycorrectfeedbackformat', + 'incorrectfeedback', 'incorrectfeedbackformat', 'shownumcorrect')); + + $pluginwrapper->add_child($ddimagetoimages); + $drags = new backup_nested_element('drags'); + + $drag = new backup_nested_element('drag', array('id'), + array('no', 'draggroup', 'infinite', 'label')); + $drops = new backup_nested_element('drops'); + + $drop = new backup_nested_element('drop', array('id'), + array('no', 'xleft', 'ytop', 'choice', 'label')); + + + $ddimagetoimages->set_source_table('qtype_ddimagetoimage', + array('questionid' => backup::VAR_PARENTID)); + + $pluginwrapper->add_child($drags); + $drags->add_child($drag); + $pluginwrapper->add_child($drops); + $drops->add_child($drop); + + $drag->set_source_table('qtype_ddimagetoimage_drags', + array('questionid' => backup::VAR_PARENTID)); + + + $drop->set_source_table('qtype_ddimagetoimage_drops', + array('questionid' => backup::VAR_PARENTID)); + + return $plugin; + } + + /** + * Returns one array with filearea => mappingname elements for the qtype + * + * Used by {@link get_components_and_fileareas} to know about all the qtype + * files to be processed both in backup and restore. + */ + public static function get_qtype_fileareas() { + return array( + 'correctfeedback' => 'question_created', + 'partiallycorrectfeedback' => 'question_created', + 'incorrectfeedback' => 'question_created', + + 'bgimage' => 'question_created', + 'dragimage' => 'qtype_ddimagetoimage_drags'); + } +} diff --git a/question/type/ddimageortext/backup/moodle2/restore_qtype_ddimagetoimage_plugin.class.php b/question/type/ddimageortext/backup/moodle2/restore_qtype_ddimagetoimage_plugin.class.php new file mode 100644 index 00000000000..eeb4ac1f289 --- /dev/null +++ b/question/type/ddimageortext/backup/moodle2/restore_qtype_ddimagetoimage_plugin.class.php @@ -0,0 +1,144 @@ +. + +/** + * @package moodlecore + * @subpackage backup-moodle2 + * @copyright 2011 The Open University + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + + +defined('MOODLE_INTERNAL') || die(); + + +/** + * restore plugin class that provides the necessary information + * needed to restore one ddimagetoimage qtype plugin + * + * @copyright 2011 The Open University + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class restore_qtype_ddimagetoimage_plugin extends restore_qtype_plugin { + + /** + * Returns the paths to be handled by the plugin at question level + */ + protected function define_question_plugin_structure() { + + $paths = array(); + + // Add own qtype stuff + $elename = 'ddimagetoimage'; + $elepath = $this->get_pathfor('/ddimagetoimage'); + $paths[] = new restore_path_element($elename, $elepath); + + $elename = 'drag'; + $elepath = $this->get_pathfor('/drags/drag'); + $paths[] = new restore_path_element($elename, $elepath); + + $elename = 'drop'; + $elepath = $this->get_pathfor('/drops/drop'); + $paths[] = new restore_path_element($elename, $elepath); + + return $paths; // And we return the interesting paths + } + + /** + * Process the qtype/ddimagetoimage element + */ + public function process_ddimagetoimage($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + + // Detect if the question is created or mapped + $oldquestionid = $this->get_old_parentid('question'); + $newquestionid = $this->get_new_parentid('question'); + $questioncreated = $this->get_mappingid('question_created', $oldquestionid) ? true : false; + + // If the question has been created by restore, we need to create its qtype_ddimagetoimage too + if ($questioncreated) { + // Adjust some columns + $data->questionid = $newquestionid; + // Insert record + $newitemid = $DB->insert_record('qtype_ddimagetoimage', $data); + // Create mapping (needed for decoding links) + $this->set_mapping('qtype_ddimagetoimage', $oldid, $newitemid); + } + } + + /** + * Process the qtype/drags/drag element + */ + public function process_drag($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + + // Detect if the question is created or mapped + $oldquestionid = $this->get_old_parentid('question'); + $newquestionid = $this->get_new_parentid('question'); + $questioncreated = $this->get_mappingid('question_created', $oldquestionid) ? true : false; + + if ($questioncreated) { + $data->questionid = $newquestionid; + // Insert record + $newitemid = $DB->insert_record('qtype_ddimagetoimage_drags', $data); + // Create mapping (there are files and states based on this) + $this->set_mapping('qtype_ddimagetoimage_drags', $oldid, $newitemid); + + } + } + + /** + * Process the qtype/drags/drag element + */ + public function process_drop($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + + // Detect if the question is created or mapped + $oldquestionid = $this->get_old_parentid('question'); + $newquestionid = $this->get_new_parentid('question'); + $questioncreated = $this->get_mappingid('question_created', $oldquestionid) ? true : false; + + if ($questioncreated) { + $data->questionid = $newquestionid; + // Insert record + $newitemid = $DB->insert_record('qtype_ddimagetoimage_drops', $data); + // Create mapping (there are files and states based on this) + $this->set_mapping('qtype_ddimagetoimage_drops', $oldid, $newitemid); + + } + } + /** + * Return the contents of this qtype to be processed by the links decoder + */ + public static function define_decode_contents() { + + $contents = array(); + + $fields = array('correctfeedback', 'partiallycorrectfeedback', 'incorrectfeedback'); + $contents[] = new restore_decode_content('qtype_ddimagetoimage', $fields, 'question_ddimagetoimage'); + + return $contents; + } +}