From 5a06da3c7099164ffd6a49cf27e9a8969c4c35a3 Mon Sep 17 00:00:00 2001 From: Eloy Lafuente Date: Tue, 4 May 2010 18:28:31 +0000 Subject: [PATCH] MDL-22151 backup - implement imscp backup. Incomplete. See MDL-22315 --- .../backup_imscp_activity_task.class.php | 67 ++++++++++++++++++ .../backup/moodle2/backup_imscp_stepslib.php | 70 +++++++++++++++++++ mod/imscp/lib.php | 3 +- 3 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 mod/imscp/backup/moodle2/backup_imscp_activity_task.class.php create mode 100644 mod/imscp/backup/moodle2/backup_imscp_stepslib.php diff --git a/mod/imscp/backup/moodle2/backup_imscp_activity_task.class.php b/mod/imscp/backup/moodle2/backup_imscp_activity_task.class.php new file mode 100644 index 00000000000..90ac74b32e4 --- /dev/null +++ b/mod/imscp/backup/moodle2/backup_imscp_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/imscp/backup/moodle2/backup_imscp_stepslib.php'); // Because it exists (must) + +/** + * imscp backup task that provides all the settings and steps to perform one + * complete backup of the activity + */ +class backup_imscp_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_imscp_activity_structure_step('imscp_structure', 'imscp.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 imscps + $search="/(".$base."\/mod\/imscp\/index.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@IMSCPINDEX*$2@$', $content); + + // Link to imscp view by moduleid + $search="/(".$base."\/mod\/imscp\/view.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@IMSCPVIEWBYID*$2@$', $content); + + return $content; + } +} diff --git a/mod/imscp/backup/moodle2/backup_imscp_stepslib.php b/mod/imscp/backup/moodle2/backup_imscp_stepslib.php new file mode 100644 index 00000000000..b9b4dff7b1b --- /dev/null +++ b/mod/imscp/backup/moodle2/backup_imscp_stepslib.php @@ -0,0 +1,70 @@ +. + +/** + * @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_imscp_activity_task + */ + +/** + * Define the complete imscp structure for backup, with file and id annotations + */ +class backup_imscp_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 + $imscp = new backup_nested_element('imscp', array('id'), array( + 'name', 'intro', 'introformat', 'revision', + 'keepold', 'structure', 'timemodified')); + + // Build the tree + // (love this) + + // Define sources + $imscp->set_source_table('imscp', array('id' => backup::VAR_ACTIVITYID)); + + // Define id annotations + // (none) + + // Define file annotations + $imscp->annotate_files(array('imscp_intro'), null); // This file area hasn't itemid + /** + * Don't annotate contents for now. It breaks backup as far as it's using itemid for storing + * revisions. Each element only can have one files anotation and itemid must be null or id for all them + * To be able to backup this properly we must sort of of these: + * * take out those revisions from imscp + * * if want to implement them properly, create imscp_revisions and associate contents there + * * change backup so each file_area can have its own itemid (no good idea form my structured mind) + * + * TODO: To decide MDL-22315 comments about this. + */ + // $imscp->annotate_files(array('imscp_content'), 'revision'); // This file area uses 'revision' as itemid + + // Return the root element (imscp), wrapped into standard activity structure + return $this->prepare_activity_structure($imscp); + } +} diff --git a/mod/imscp/lib.php b/mod/imscp/lib.php index de46257822c..b6f53c9bc83 100644 --- a/mod/imscp/lib.php +++ b/mod/imscp/lib.php @@ -38,6 +38,7 @@ function imscp_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; } @@ -392,4 +393,4 @@ function imscp_extend_navigation($navigation, $course, $module, $cm) { * you content. */ $navigation->nodetype = navigation_node::NODETYPE_LEAF; -} \ No newline at end of file +}