From b4d91fcb0bfc2c0032d49fdc5bd6d83701c46b23 Mon Sep 17 00:00:00 2001 From: Andreas Grabs Date: Fri, 30 Apr 2010 10:06:22 +0000 Subject: [PATCH] MDL-22151 - implement new moodle2 backup --- .../backup_feedback_activity_task.class.php | 76 ++++++++++ .../moodle2/backup_feedback_settingslib.php | 27 ++++ .../moodle2/backup_feedback_stepslib.php | 139 ++++++++++++++++++ 3 files changed, 242 insertions(+) create mode 100644 mod/feedback/backup/moodle2/backup_feedback_activity_task.class.php create mode 100644 mod/feedback/backup/moodle2/backup_feedback_settingslib.php create mode 100644 mod/feedback/backup/moodle2/backup_feedback_stepslib.php diff --git a/mod/feedback/backup/moodle2/backup_feedback_activity_task.class.php b/mod/feedback/backup/moodle2/backup_feedback_activity_task.class.php new file mode 100644 index 00000000000..f94d14739b7 --- /dev/null +++ b/mod/feedback/backup/moodle2/backup_feedback_activity_task.class.php @@ -0,0 +1,76 @@ +. + +/** + * @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 + */ + +require_once($CFG->dirroot . '/mod/feedback/backup/moodle2/backup_feedback_stepslib.php'); // Because it exists (must) +require_once($CFG->dirroot . '/mod/feedback/backup/moodle2/backup_feedback_settingslib.php'); // Because it exists (optional) + +/** + * feedback backup task that provides all the settings and steps to perform one + * complete backup of the activity + */ +class backup_feedback_activity_task extends backup_activity_task { + + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // feedback only has one structure step + $this->add_step(new backup_feedback_activity_structure_step('feedback structure', 'feedback.xml')); + } + + /** + * Code the transformations to perform in the activity in + * order to get transportable (encoded) links + */ + static public function encode_content_links($content) { + global $CFG; + + $base = preg_quote($CFG->wwwroot,"/"); + + // Link to the list of feedbacks + $search="/(".$base."\/mod\/feedback\/index.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@FEEDBACKINDEX*$2@$', $content); + + // Link to feedback view by moduleid + $search="/(".$base."\/mod\/feedback\/view.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@FEEDBACKVIEWBYID*$2@$', $content); + + // Link to feedback analyis by moduleid + $search="/(".$base."\/mod\/feedback\/analysis.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@FEEDBACKANALYSISBYID*$2@$', $content); + + // Link to feedback entries by moduleid + $search="/(".$base."\/mod\/feedback\/analysis.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@FEEDBACKSHOWENTRIESBYID*$2@$', $content); + + return $content; + } +} diff --git a/mod/feedback/backup/moodle2/backup_feedback_settingslib.php b/mod/feedback/backup/moodle2/backup_feedback_settingslib.php new file mode 100644 index 00000000000..b66e78ab5fe --- /dev/null +++ b/mod/feedback/backup/moodle2/backup_feedback_settingslib.php @@ -0,0 +1,27 @@ +. + +/** + * @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 + */ + + // This activity has not particular settings but the inherited from the generic + // backup_activity_task so here there isn't any class definition, like the ones + // existing in /backup/moodle2/backup_settingslib.php (activities section) diff --git a/mod/feedback/backup/moodle2/backup_feedback_stepslib.php b/mod/feedback/backup/moodle2/backup_feedback_stepslib.php new file mode 100644 index 00000000000..957283dcd60 --- /dev/null +++ b/mod/feedback/backup/moodle2/backup_feedback_stepslib.php @@ -0,0 +1,139 @@ +. + +/** + * @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 + */ + +/** + * Define all the backup steps that will be used by the backup_feedback_activity_task + */ + +/** + * Define the complete feedback structure for backup, with file and id annotations + */ +class backup_feedback_activity_structure_step extends backup_activity_structure_step { + + protected function define_structure() { + + // To know if we are including userinfo + $userinfo = $this->get_setting_value('userinfo'); + + // Define each element separated + $feedback = new backup_nested_element('feedback', array('id'), array( + 'name', + 'intro', + 'introformat', + 'anonymous', + 'email_notification', + 'multiple_submit', + 'autonumbering', + 'site_after_submit', + 'page_after_submit', + 'page_after_submitformat', + 'publish_stats', + 'timeopen', + 'timeclose', + 'timemodified')); + + + $completeds = new backup_nested_element('completeds'); + + $completed = new backup_nested_element('completed', array('id'), array( + 'userid', + 'timemodified', + 'random_response', + 'anonymous_response')); + + $items = new backup_nested_element('items'); + + $item = new backup_nested_element('item', array('id'), array( + 'template', + 'name', + 'label', + 'presentation', + 'typ', + 'hasvalue', + 'position', + 'required')); + + $trackings = new backup_nested_element('trackings'); + + $tracking = new backup_nested_element('tracking', array('id'), array( + 'userid', + 'completed')); + + $values = new backup_nested_element('values'); + + $value = new backup_nested_element('value', array('id'), array( + 'item', + 'template', + 'completed', + 'value')); + + + // Build the tree + $feedback->add_child($completeds); + $completeds->add_child($completed); + + $completed->add_child($values); + $values->add_child($value); + + $feedback->add_child($items); + $items->add_child($item); + + $feedback->add_child($trackings); + $trackings->add_child($tracking); + + // Define sources + $feedback->set_source_table('feedback', array('id' => backup::VAR_ACTIVITYID)); + + // All these source definitions only happen if we are including user info + if ($userinfo) { + $completed->set_source_sql(' + SELECT * + FROM {feedback_completed} + WHERE feedback = ?', + array(backup::VAR_PARENTID)); + + $item->set_source_table('feedback_item', array('feedback' => backup::VAR_PARENTID)); + + $value->set_source_table('feedback_value', array('completed' => backup::VAR_PARENTID)); + + $tracking->set_source_table('feedback_tracking', array('feedback' => backup::VAR_PARENTID)); + } + + // Define id annotations + + $completed->annotate_ids('user', 'userid'); + + $tracking->annotate_ids('user', 'userid'); + + // Define file annotations + + $feedback->annotate_files(array('feedback_intro'), null); // This file area hasn't itemid + + $item->annotate_files(array('feedback_item'), 'id'); + + // Return the root element (feedback), wrapped into standard activity structure + return $this->prepare_activity_structure($feedback); + } + +} -- 2.43.0