aboutsummaryrefslogtreecommitdiff
path: root/backup
diff options
context:
space:
mode:
Diffstat (limited to 'backup')
-rw-r--r--backup/moodle1/lib.php79
-rw-r--r--backup/moodle2/backup_qtype_algebra_plugin.class.php63
-rw-r--r--backup/moodle2/restore_qtype_algebra_plugin.class.php106
3 files changed, 248 insertions, 0 deletions
diff --git a/backup/moodle1/lib.php b/backup/moodle1/lib.php
new file mode 100644
index 0000000..d9a6406
--- /dev/null
+++ b/backup/moodle1/lib.php
@@ -0,0 +1,79 @@
+<?php
+
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * @package qtype
+ * @subpackage algebra
+ * @copyright 2011 David Mudrak <david@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Multichoice question type conversion handler
+ */
+class moodle1_qtype_algebra_handler extends moodle1_qtype_handler {
+
+ /**
+ * @return array
+ */
+ public function get_question_subpaths() {
+ return array(
+ 'ANSWERS/ANSWER',
+ 'ALGEBRA',
+ 'ALGEBRA/VARLIST/VARIABLE'
+ );
+ }
+
+ /**
+ * Appends the algebra specific information to the question
+ */
+ public function process_question(array $data, array $raw) {
+ // convert and write the answers first
+ if (isset($data['answers'])) {
+ $this->write_answers($data['answers'], $this->pluginname);
+ }
+
+ // convert and write the algebra variables
+ if (isset($data['algebra'][0]['varlist']['variable'])) {
+ $variables = $data['algebra'][0]['varlist']['variable'];
+ } else {
+ $variables = array();
+ }
+ $this->xmlwriter->begin_tag('algebra_variables');
+ foreach ($variables as $variable) {
+ $this->xmlwriter->begin_tag('algebra_variable', array('id' => $this->converter->get_nextid()));
+ $this->xmlwriter->full_tag('name', $variable['name']);
+ $this->xmlwriter->full_tag('min', $variable['min']);
+ $this->xmlwriter->full_tag('max', $variable['max']);
+ $this->xmlwriter->end_tag('algebra_variable');
+ }
+ $this->xmlwriter->end_tag('algebra_variables');
+
+ // and finally the algebra options
+ $options = $data['algebra'][0];
+ $this->xmlwriter->begin_tag('algebra', array('id' => $this->converter->get_nextid()));
+ $this->xmlwriter->full_tag('compareby', $options['compareby']);
+ $this->xmlwriter->full_tag('nchecks', $options['nchecks']);
+ $this->xmlwriter->full_tag('tolerance', $options['tolerance']);
+ $this->xmlwriter->full_tag('disallow', $options['disallow']);
+ $this->xmlwriter->full_tag('allowedfuncs', $options['allowedfuncs']);
+ $this->xmlwriter->full_tag('answerprefix', $options['answerprefix']);
+ $this->xmlwriter->end_tag('algebra');
+ }
+}
diff --git a/backup/moodle2/backup_qtype_algebra_plugin.class.php b/backup/moodle2/backup_qtype_algebra_plugin.class.php
new file mode 100644
index 0000000..9e08467
--- /dev/null
+++ b/backup/moodle2/backup_qtype_algebra_plugin.class.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Moodle algebra question type class.
+ *
+ * @copyright &copy; 2010 Hon Wai, Lau
+ * @author Hon Wai, Lau <lau65536@gmail.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License version 3
+ * @package questionbank
+ * @subpackage questiontypes
+ * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Provides the information to backup algebra questions
+ */
+class backup_qtype_algebra_plugin extends backup_qtype_plugin {
+
+ /**
+ * Returns the qtype information to attach to question element
+ */
+ protected function define_question_plugin_structure() {
+
+ // Define the virtual plugin element with the condition to fulfill
+ $plugin = $this->get_plugin_element(null, '../../qtype', 'algebra');
+
+ // Create one standard named plugin element (the visible container)
+ $pluginwrapper = new backup_nested_element($this->get_recommended_name());
+
+ // connect the visible container ASAP
+ $plugin->add_child($pluginwrapper);
+
+ // This qtype uses standard question_answers, add them here
+ // to the tree before any other information that will use them
+ $this->add_question_question_answers($pluginwrapper);
+
+ // Now create the qtype own structures
+
+ $algebravariables = new backup_nested_element('algebra_variables');
+
+ $algebravariable = new backup_nested_element('algebra_variable', array('id'), array(
+ 'name', 'min', 'max'));
+
+ $algebra = new backup_nested_element('algebra', array('id'), array(
+ 'compareby', 'nchecks', 'tolerance',
+ 'disallow', 'allowedfuncs', 'answerprefix'));
+
+ // Now the own qtype tree
+ $pluginwrapper->add_child($algebravariables);
+ $algebravariables->add_child($algebravariable);
+ $pluginwrapper->add_child($algebra);
+
+ // set source to populate the data
+ $algebra->set_source_table('question_algebra', array('questionid' => backup::VAR_PARENTID));
+ $algebravariable->set_source_table('question_algebra_variables', array('question' => backup::VAR_PARENTID));
+
+ // don't need to annotate ids nor files
+
+ return $plugin;
+ }
+}
diff --git a/backup/moodle2/restore_qtype_algebra_plugin.class.php b/backup/moodle2/restore_qtype_algebra_plugin.class.php
new file mode 100644
index 0000000..5c2d567
--- /dev/null
+++ b/backup/moodle2/restore_qtype_algebra_plugin.class.php
@@ -0,0 +1,106 @@
+<?php
+
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * @package moodlecore
+ * @subpackage backup-moodle2
+ * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
+ * @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 algebra qtype plugin
+ */
+class restore_qtype_algebra_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();
+
+ // This qtype uses question_answers, add them
+ $this->add_question_question_answers($paths);
+
+ // Add own qtype stuff
+ $elename = 'algebravariable';
+ $elepath = $this->get_pathfor('/algebra_variables/algebra_variable'); // we used get_recommended_name() so this works
+ $paths[] = new restore_path_element($elename, $elepath);
+ $elename = 'algebra';
+ $elepath = $this->get_pathfor('/algebra'); // we used get_recommended_name() so this works
+ $paths[] = new restore_path_element($elename, $elepath);
+
+ return $paths; // And we return the interesting paths
+ }
+
+ /**
+ * Process the qtype/algebra element
+ */
+ public function process_algebra($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 question_algebra too
+ if ($questioncreated) {
+ // Adjust some columns
+ $data->questionid = $newquestionid;
+ // Insert record
+ $newitemid = $DB->insert_record('question_algebra', $data);
+ // Create mapping (needed for decoding links)
+ $this->set_mapping('question_algebra', $oldid, $newitemid);
+ } else {
+ // Nothing to remap if the question already existed
+ }
+ }
+
+ /**
+ * Process the qtype/algebravariable element
+ */
+ public function process_algebravariable($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 question_algebra_variables too
+ if ($questioncreated) {
+ // Adjust some columns
+ $data->question = $newquestionid;
+ // Insert record
+ $newitemid = $DB->insert_record('question_algebra_variables', $data);
+ // Create mapping
+ $this->set_mapping('question_algebra_variable', $oldid, $newitemid);
+ } else {
+ // Nothing to remap if the question already existed
+ }
+ }
+}