MDL-22135 - logs restore, course and activities + cleanup
[moodle.git] / backup / moodle2 / restore_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  * restore like gradebook, interlinks... apart from some final cleaning
28  *
29  * TODO: Finish phpdocs
30  */
31 class restore_final_task extends restore_task {
33     /**
34      * Create all the steps that will be part of this task
35      */
36     public function build() {
38         // Move all the CONTEXT_MODULE question qcats to their
39         // final (newly created) module context
40         $this->add_step(new restore_move_module_questions_categories('move_module_question_categories'));
42         // Create all the question files now that every question is in place
43         // and every category has its final contextid associated
44         $this->add_step(new restore_create_question_files('create_question_files'));
46         // Review all the block_position records in backup_ids in order
47         // match them now that all the contexts are created populating DB
48         // as needed. Only if we are restoring blocks.
49         if ($this->get_setting_value('blocks')) {
50             $this->add_step(new restore_review_pending_block_positions('review_block_positions'));
51         }
53         // Gradebook. Don't restore the gradebook unless activities are being restored.
54         if ($this->get_setting_value('activities')) {
55             $this->add_step(new restore_gradebook_structure_step('gradebook_step','gradebook.xml'));
56         }
58         // Course completion
59         $this->add_step(new restore_course_completion_structure_step('course_completion', 'completion.xml'));
61         // Review all the module_availability records in backup_ids in order
62         // to match them with existing modules / grade items.
63         $this->add_step(new restore_process_course_modules_availability('process_modules_availability'));
65         // Decode all the interlinks
66         $this->add_step(new restore_decode_interlinks('decode_interlinks'));
68         // Restore course logs (conditionally). They are restored here because we need all
69         // the activities to be already restored
70         if ($this->get_setting_value('logs')) {
71             $this->add_step(new restore_course_logs_structure_step('course_logs', 'course/logs.xml'));
72         }
74         // Rebuild course cache to see results, whoah!
75         $this->add_step(new restore_rebuild_course_cache('rebuild_course_cache'));
77         // Review all the executed tasks having one after_restore method
78         // executing it to perform some final adjustments of information
79         // not available when the task was executed.
80         // This step is always the last one before the one cleaning the temp stuff!
81         $this->add_step(new restore_execute_after_restore('executing_after_restore'));
83         // Clean the temp dir (conditionally) and drop temp table
84         $this->add_step(new restore_drop_and_clean_temp_stuff('drop_and_clean_temp_stuff'));
86         $this->built = true;
87     }
89     /**
90      * Special method, only available in the restore_final_task, able to invoke the
91      * restore_plan execute_after_restore() method, so restore_execute_after_restore step
92      * will be able to launch all the after_restore() methods of the executed tasks
93      */
94     public function launch_execute_after_restore() {
95         $this->plan->execute_after_restore();
96     }
98     /**
99      * Define the restore log rules that will be applied
100      * by the {@link restore_logs_processor} when restoring
101      * course logs. It must return one array
102      * of {@link restore_log_rule} objects
103      *
104      * Note these are course logs, but are defined and restored
105      * in final task because we need all the activities to be
106      * restored in order to handle some log records properly
107      */
108     static public function define_restore_log_rules() {
109         $rules = array();
111         // module 'course' rules
112         $rules[] = new restore_log_rule('course', 'view', 'view.php?id={course}', '{course}');
113         $rules[] = new restore_log_rule('course', 'guest', 'view.php?id={course}', null);
114         $rules[] = new restore_log_rule('course', 'user report', 'user.php?id={course}&user={user}&mode=[mode]', null);
115         $rules[] = new restore_log_rule('course', 'add mod', '../mod/[modname]/view.php?id={course_module}', '[modname] {[modname]}');
116         $rules[] = new restore_log_rule('course', 'update mod', '../mod/[modname]/view.php?id={course_module}', '[modname] {[modname]}');
117         $rules[] = new restore_log_rule('course', 'delete mod', 'view.php?id={course}', null);
118         $rules[] = new restore_log_rule('course', 'update', 'view.php?id={course}', '');
119         $rules[] = new restore_log_rule('course', 'enrol', 'view.php?id={course}', '{user}');
120         $rules[] = new restore_log_rule('course', 'unenrol', 'view.php?id={course}', '{user}');
121         $rules[] = new restore_log_rule('course', 'editsection', 'editsection.php?id={course_section}', null);
122         $rules[] = new restore_log_rule('course', 'new', 'view.php?id={course}', '');
123         $rules[] = new restore_log_rule('course', 'recent', 'recent.php?id={course}', '');
124         $rules[] = new restore_log_rule('course', 'report log', 'report/log/index.php?id={course}', '{course}');
125         $rules[] = new restore_log_rule('course', 'report live', 'report/live/index.php?id={course}', '{course}');
126         $rules[] = new restore_log_rule('course', 'report outline', 'report/outline/index.php?id={course}', '{course}');
127         $rules[] = new restore_log_rule('course', 'report participation', 'report/participation/index.php?id={course}', '{course}');
128         $rules[] = new restore_log_rule('course', 'report stats', 'report/stats/index.php?id={course}', '{course}');
130         // module 'user' rules
131         $rules[] = new restore_log_rule('user', 'view', 'view.php?id={user}&course={course}', '{user}');
132         $rules[] = new restore_log_rule('user', 'change password', 'view.php?id={user}&course={course}', '{user}');
133         $rules[] = new restore_log_rule('user', 'login', 'view.php?id={user}&course={course}', '{user}');
134         $rules[] = new restore_log_rule('user', 'logout', 'view.php?id={user}&course={course}', '{user}');
135         $rules[] = new restore_log_rule('user', 'view all', 'index.php?id={course}', '');
136         $rules[] = new restore_log_rule('user', 'update', 'view.php?id={user}&course={course}', '');
138         // rules from other tasks (activities) not belonging to one module instance (cmid = 0), so are restored here
139         $rules = array_merge($rules, restore_logs_processor::register_log_rules_for_course());
141         // TODO: Other logs like 'calendar', 'upload'... will go here
143         return $rules;
144     }
147 // Protected API starts here
149     /**
150      * Define the common setting that any restore type will have
151      */
152     protected function define_settings() {
153         // This task has not settings (could have them, like destination or so in the future, let's see)
154     }