52778ada9f2f72918588e3e231626a8b664095c7
[moodle.git] / backup / moodle2 / backup_final_task.class.php
1 <?php
3 // This file is part of Moodle - http://moodle.org/
4 //
5 // Moodle is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // Moodle is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
18 /**
19  * @package moodlecore
20  * @subpackage backup-moodle2
21  * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
22  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 /**
26  * Final task that provides all the final steps necessary in order to finish one
27  * backup (mainly gathering references and creating the main xml) apart from
28  * some final cleaning
29  *
30  * TODO: Finish phpdocs
31  */
32 class backup_final_task extends backup_task {
34     /**
35      * Create all the steps that will be part of this task
36      */
37     public function build() {
39         // Set the backup::VAR_CONTEXTID setting to course context as far as next steps require that
40         $coursectxid = get_context_instance(CONTEXT_COURSE, $this->get_courseid())->id;
41         $this->add_setting(new backup_activity_generic_setting(backup::VAR_CONTEXTID, base_setting::IS_INTEGER, $coursectxid));
43         // Generate the groups file with the final annotated groups and groupings
44         // including membership based on setting
45         $this->add_step(new backup_groups_structure_step('groups', 'groups.xml'));
47         // Annotate all the user files (conditionally) (private files, and profile)
48         // Because each user has its own context, we need a separate/specialised step here
49         // This step also ensures that the contexts for all the users exist, so next
50         // step can be safely executed (join between users and contexts)
51         // Not executed if backup is without users of anonymized
52         if ($this->get_setting_value('users') && !$this->get_setting_value('anonymize')) {
53             $this->add_step(new backup_annotate_all_user_files('user_files'));
54         }
56         // Generate the users file (conditonally) with the final annotated users
57         // including custom profile fields, preferences, tags, role assignments and
58         // overrides
59         if ($this->get_setting_value('users')) {
60             $this->add_step(new backup_users_structure_step('users', 'users.xml'));
61         }
63         // Generate the top roles file with all the final annotated roles
64         // that have been detected along the whole process. It's just
65         // the list of role definitions (no assignments nor permissions)
66         $this->add_step(new backup_final_roles_structure_step('roleslist', 'roles.xml'));
68         // Generate the scales file with all the annotated scales
69         $this->add_step(new backup_final_scales_structure_step('scaleslist', 'scales.xml'));
71         // Generate the outcomes file with all the annotated outcomes
72         $this->add_step(new backup_final_outcomes_structure_step('outcomeslist', 'outcomes.xml'));
74         // Migrate the pending annotations to final (prev steps may have added some files)
75         // This must be executed before backup files
76         $this->add_step(new move_inforef_annotations_to_final('migrate_inforef'));
78         // Generate the files.xml file with all the (final) annotated files. At the same
79         // time copy all the files from moodle storage to backup storage (uses custom
80         // backup_nested_element for that)
81         $this->add_step(new backup_final_files_structure_step('fileslist', 'files.xml'));
83         // Write the main moodle_backup.xml file, with all the information related
84         // to the backup, settings, license, versions and other useful information
85         $this->add_step(new backup_main_structure_step('mainfile', 'moodle_backup.xml'));
87         // Generate the zip file
88         $this->add_step(new backup_zip_contents('zip_contents'));
90         // Copy the generated zip file to final destination
91         $this->add_step(new backup_store_backup_file('save_backupfile'));
93         $this->built = true;
94     }
96 // Protected API starts here
98     /**
99      * Define the common setting that any backup type will have
100      */
101     protected function define_settings() {
102         // This task has not settings (could have them, like destination or so in the future, let's see)
103     }