diff --git a/mod/url/backup/moodle2/backup_url_activity_task.class.php b/mod/url/backup/moodle2/backup_url_activity_task.class.php new file mode 100644 index 00000000000..ffa1e6b7dce --- /dev/null +++ b/mod/url/backup/moodle2/backup_url_activity_task.class.php @@ -0,0 +1,77 @@ +. + +/** + * @package moodlecore + * @subpackage backup-moodle2 + * @copyright 2010 onwards Andrew Davis + * @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) + +require_once($CFG->dirroot . '/mod/url/backup/moodle2/backup_url_stepslib.php'); // Because it exists (must) + +/** + * URL backup task that provides all the settings and steps to perform one + * complete backup of the activity + */ +class backup_url_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() { + $this->add_step(new backup_url_activity_structure_step('url_structure', 'url.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.'/mod/url','#'); + + //Access a list of all links in a course + $pattern = '#'.$base.'/index\.php\?id=([0-9]+)#'; + $replacement = '$@URLVIEWLIST*$2@$'; + $content = preg_replace($pattern, $replacement, $content); + + //Access the link supplying a course module id + $pattern = '#'.$base.'/view\.php\?id=([0-9]+)#'; + $replacement = '$@URLVIEWBYCOURSEMODULE*$2@$'; + $content = preg_replace($pattern, $replacement, $content); + + //Access the link supplying an instance id + $pattern = '#'.$base.'/view\.php\?u=([0-9]+)#'; + $replacement = '$@URLVIEWBYINSTANCEID*$2@$'; + $content = preg_replace($pattern, $replacement, $content); + + return $content; + } +} diff --git a/mod/url/backup/moodle2/backup_url_stepslib.php b/mod/url/backup/moodle2/backup_url_stepslib.php new file mode 100644 index 00000000000..2e1ef32d478 --- /dev/null +++ b/mod/url/backup/moodle2/backup_url_stepslib.php @@ -0,0 +1,60 @@ +. + +/** + * @package moodlecore + * @subpackage backup-moodle2 + * @copyright 2010 onwards Andrew Davis + * @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_url_activity_task + */ + + /** + * Define the complete url structure for backup, with file and id annotations + */ +class backup_url_activity_structure_step extends backup_activity_structure_step { + + protected function define_structure() { + + //the URL module stores no user info + + // Define each element separated + $url = new backup_nested_element('url', array('id'), array( + 'course','name', 'intro', 'introformat', 'externalurl', + 'display', 'displayoptions', 'parameters', 'timemodified')); + + + // Build the tree + //nothing here for URLs + + // Define sources + $url->set_source_table('url', array('id' => backup::VAR_ACTIVITYID)); + + // Define id annotations + //module has no id annotations + + // Define file annotations + $url->annotate_files(array('url_intro'), null); // This file area hasn't itemid + + // Return the root element (url), wrapped into standard activity structure + return $this->prepare_activity_structure($url); + + } +} diff --git a/mod/url/lib.php b/mod/url/lib.php index 05a68db4663..a308be0017d 100644 --- a/mod/url/lib.php +++ b/mod/url/lib.php @@ -38,6 +38,7 @@ function url_supports($feature) { case FEATURE_COMPLETION_TRACKS_VIEWS: return true; case FEATURE_GRADE_HAS_GRADE: return false; case FEATURE_GRADE_OUTCOMES: return false; + case FEATURE_BACKUP_MOODLE2: return true; default: return null; }