diff --git a/mod/imscp/backup/moodle2/backup_imscp_stepslib.php b/mod/imscp/backup/moodle2/backup_imscp_stepslib.php index 64b2d05be8f..ccea8cd751a 100644 --- a/mod/imscp/backup/moodle2/backup_imscp_stepslib.php +++ b/mod/imscp/backup/moodle2/backup_imscp_stepslib.php @@ -52,17 +52,13 @@ class backup_imscp_activity_structure_step extends backup_activity_structure_ste // Define file annotations $imscp->annotate_files('mod_imscp', 'intro', null); // This file area hasn't itemid + $imscp->annotate_files('mod_imscp', 'backup', 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. + * I don't like itemid used for "imaginative" things like "revisions"! + * I don't like itemid used for "imaginative" things like "revisions"! + * I don't like itemid used for "imaginative" things like "revisions"! */ - $imscp->annotate_files('mod_imscp', 'content', null); // TODO: backup everything as is for now, the revision would be the same after restore + $imscp->annotate_files('mod_imscp', 'content', null); // Horrible use of itemid here. Ignoring for backup/restore purposes // Return the root element (imscp), wrapped into standard activity structure return $this->prepare_activity_structure($imscp); diff --git a/mod/imscp/backup/moodle2/restore_imscp_activity_task.class.php b/mod/imscp/backup/moodle2/restore_imscp_activity_task.class.php new file mode 100644 index 00000000000..c8bb4567acc --- /dev/null +++ b/mod/imscp/backup/moodle2/restore_imscp_activity_task.class.php @@ -0,0 +1,75 @@ +. + +/** + * @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(); + +require_once($CFG->dirroot . '/mod/imscp/backup/moodle2/restore_imscp_stepslib.php'); // Because it exists (must) + +/** + * imscp restore task that provides all the settings and steps to perform one + * complete restore of the activity + */ +class restore_imscp_activity_task extends restore_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() { + // imscp only has one structure step + $this->add_step(new restore_imscp_activity_structure_step('imscp_structure', 'imscp.xml')); + } + + /** + * Define the contents in the activity that must be + * processed by the link decoder + */ + static public function define_decode_contents() { + $contents = array(); + + $contents[] = new restore_decode_content('imscp', array('intro'), 'imscp'); + + return $contents; + } + + /** + * Define the decoding rules for links belonging + * to the activity to be executed by the link decoder + */ + static public function define_decode_rules() { + $rules = array(); + + $rules[] = new restore_decode_rule('IMSCPVIEWBYID', '/mod/imscp/view.php?id=$1', 'course_module'); + $rules[] = new restore_decode_rule('IMSCPINDEX', '/mod/imscp/index.php?id=$1', 'course'); + + return $rules; + + } +} diff --git a/mod/imscp/backup/moodle2/restore_imscp_stepslib.php b/mod/imscp/backup/moodle2/restore_imscp_stepslib.php new file mode 100644 index 00000000000..6f9ca44c1c5 --- /dev/null +++ b/mod/imscp/backup/moodle2/restore_imscp_stepslib.php @@ -0,0 +1,68 @@ +. + +/** + * @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 restore steps that will be used by the restore_imscp_activity_task + */ + +/** + * Structure step to restore one imscp activity + */ +class restore_imscp_activity_structure_step extends restore_activity_structure_step { + + protected function define_structure() { + + $paths = array(); + $paths[] = new restore_path_element('imscp', '/activity/imscp'); + + // Return the paths wrapped into standard activity structure + return $this->prepare_activity_structure($paths); + } + + protected function process_imscp($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->course = $this->get_courseid(); + $data->timemodified = $this->apply_date_offset($data->timemodified); + + // insert the imscp record + $newitemid = $DB->insert_record('imscp', $data); + // inmediately after inserting "activity" record, call this + $this->apply_activity_instance($newitemid); + } + + protected function after_execute() { + // Add imscp related files, no need to match by itemname (just internally handled context) + /** + * I don't like itemid used for "imaginative" things like "revisions"! + * I don't like itemid used for "imaginative" things like "revisions"! + * I don't like itemid used for "imaginative" things like "revisions"! + */ + $this->add_related_files('mod_imscp', 'intro', null); + $this->add_related_files('mod_imscp', 'backup', null); + $this->add_related_files('mod_imscp', 'content', null); + } +}