From 253063a29b648b3d544bec4d20c47765161a62bc Mon Sep 17 00:00:00 2001 From: Eloy Lafuente Date: Wed, 5 May 2010 13:16:25 +0000 Subject: [PATCH] MDL-22151 backup - added survey module backup --- .../backup_survey_activity_task.class.php | 67 ++++++++++++++++ .../backup/moodle2/backup_survey_stepslib.php | 79 +++++++++++++++++++ mod/survey/lib.php | 3 +- 3 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 mod/survey/backup/moodle2/backup_survey_activity_task.class.php create mode 100644 mod/survey/backup/moodle2/backup_survey_stepslib.php diff --git a/mod/survey/backup/moodle2/backup_survey_activity_task.class.php b/mod/survey/backup/moodle2/backup_survey_activity_task.class.php new file mode 100644 index 00000000000..6a8dd697dc3 --- /dev/null +++ b/mod/survey/backup/moodle2/backup_survey_activity_task.class.php @@ -0,0 +1,67 @@ +. + +/** + * @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/survey/backup/moodle2/backup_survey_stepslib.php'); // Because it exists (must) + +/** + * survey backup task that provides all the settings and steps to perform one + * complete backup of the activity + */ +class backup_survey_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() { + // Choice only has one structure step + $this->add_step(new backup_survey_activity_structure_step('survey_structure', 'survey.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 surveys + $search="/(".$base."\/mod\/survey\/index.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@SURVEYINDEX*$2@$', $content); + + // Link to survey view by moduleid + $search="/(".$base."\/mod\/survey\/view.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@SURVEYVIEWBYID*$2@$', $content); + + return $content; + } +} diff --git a/mod/survey/backup/moodle2/backup_survey_stepslib.php b/mod/survey/backup/moodle2/backup_survey_stepslib.php new file mode 100644 index 00000000000..de5d3372bb4 --- /dev/null +++ b/mod/survey/backup/moodle2/backup_survey_stepslib.php @@ -0,0 +1,79 @@ +. + +/** + * @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_survey_activity_task + */ + +/** + * Define the complete survey structure for backup, with file and id annotations + */ +class backup_survey_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 + $survey = new backup_nested_element('survey', array('id'), array( + 'name', 'intro', 'introformat', 'template', + 'questions', 'days', 'timecreated', 'timemodified')); + + $answers = new backup_nested_element('answers'); + + $answer = new backup_nested_element('anwser', array('id'), array( + 'userid', 'question', 'time', 'answer1', + 'answer2')); + + $analysis = new backup_nested_element('analysis'); + + $analys = new backup_nested_element('analys', array('id'), array( + 'userid', 'notes')); + + // Build the tree + $survey->add_child($answers); + $answers->add_child($answer); + + $survey->add_child($analysis); + $analysis->add_child($analys); + + // Define sources + $survey->set_source_table('survey', array('id' => backup::VAR_ACTIVITYID)); + + $answer->set_source_table('survey_answers', array('survey' => backup::VAR_PARENTID)); + + $analys->set_source_table('survey_analysis', array('survey' => backup::VAR_PARENTID)); + + // Define id annotations + $answer->annotate_ids('user', 'userid'); + $analys->annotate_ids('user', 'userid'); + + // Define file annotations + $survey->annotate_files(array('survey_intro'), null); // This file area hasn't itemid + + // Return the root element (survey), wrapped into standard activity structure + return $this->prepare_activity_structure($survey); + } +} diff --git a/mod/survey/lib.php b/mod/survey/lib.php index 056ed9b4a59..a1828a1ef08 100644 --- a/mod/survey/lib.php +++ b/mod/survey/lib.php @@ -795,6 +795,7 @@ function survey_supports($feature) { case FEATURE_COMPLETION_TRACKS_VIEWS: return true; case FEATURE_GRADE_HAS_GRADE: return true; case FEATURE_GRADE_OUTCOMES: return true; + case FEATURE_BACKUP_MOODLE2: return true; default: return null; } @@ -852,4 +853,4 @@ function survey_extend_settings_navigation($settings, $surveynode) { $surveynode->add(get_string('downloadresults', 'survey'), $url); } } -} \ No newline at end of file +} -- 2.43.0