1 <?php 2 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/>. 17 18 /** 19 * Defines backup_final_task class 20 * 21 * @package core_backup 22 * @subpackage moodle2 23 * @category backup 24 * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com} 25 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 26 */ 27 28 defined('MOODLE_INTERNAL') || die(); 29 30 /** 31 * Final task that provides all the final steps necessary in order to finish one 32 * backup (mainly gathering references and creating the main xml) apart from 33 * some final cleaning 34 * 35 * TODO: Finish phpdocs 36 */ 37 class backup_final_task extends backup_task { 38 39 /** 40 * Create all the steps that will be part of this task 41 */ 42 public function build() { 43 global $CFG; 44 45 // Set the backup::VAR_CONTEXTID setting to course context as far as next steps require that 46 $coursectxid = context_course::instance($this->get_courseid())->id; 47 $this->add_setting(new backup_activity_generic_setting(backup::VAR_CONTEXTID, base_setting::IS_INTEGER, $coursectxid)); 48 49 // Set the backup::VAR_COURSEID setting to course, we'll need that in some steps 50 $courseid = $this->get_courseid(); 51 $this->add_setting(new backup_activity_generic_setting(backup::VAR_COURSEID, base_setting::IS_INTEGER, $courseid)); 52 53 // Generate the groups file with the final annotated groups and groupings 54 // including membership based on setting 55 $this->add_step(new backup_groups_structure_step('groups', 'groups.xml')); 56 57 // Generate the questions file with the final annotated question_categories 58 $this->add_step(new backup_questions_structure_step('questions', 'questions.xml')); 59 60 // Annotate all the question files for the already annotated question 61 // categories (this is performed here and not in the structure step because 62 // it involves multiple contexts and as far as we are always backup-ing 63 // complete question banks we don't need to restrict at all and can be 64 // done in a single pass 65 $this->add_step(new backup_annotate_all_question_files('question_files')); 66 67 // Annotate all the user files (conditionally) (profile and icon files) 68 // Because each user has its own context, we need a separate/specialised step here 69 // This step also ensures that the contexts for all the users exist, so next 70 // step can be safely executed (join between users and contexts) 71 // Not executed if backup is without users of anonymized 72 if (($this->get_setting_value('users') || !empty($this->get_kept_roles())) && !$this->get_setting_value('anonymize')) { 73 $this->add_step(new backup_annotate_all_user_files('user_files')); 74 } 75 76 // Generate the users file (conditionally) with the final annotated users 77 // including custom profile fields, preferences, tags, role assignments and 78 // overrides 79 if ($this->get_setting_value('users') || !empty($this->get_kept_roles())) { 80 $this->add_step(new backup_users_structure_step('users', 'users.xml')); 81 } 82 83 // Generate the top roles file with all the final annotated roles 84 // that have been detected along the whole process. It's just 85 // the list of role definitions (no assignments nor permissions) 86 $this->add_step(new backup_final_roles_structure_step('roleslist', 'roles.xml')); 87 88 // Generate the gradebook file with categories and course grade items. Do it conditionally, using 89 // execute_condition() so only will be excuted if ALL module grade_items in course have been exported 90 $this->add_step(new backup_gradebook_structure_step('course_gradebook','gradebook.xml')); 91 92 // Generate the grade history file, conditionally. 93 $this->add_step(new backup_grade_history_structure_step('course_grade_history','grade_history.xml')); 94 95 // Generate the course completion 96 $this->add_step(new backup_course_completion_structure_step('course_completion', 'completion.xml')); 97 98 // Conditionally generate the badges file. 99 if ($this->get_setting_value('badges')) { 100 $this->add_step(new backup_badges_structure_step('course_badges', 'badges.xml')); 101 } 102 103 // Generate the scales file with all the (final) annotated scales 104 $this->add_step(new backup_final_scales_structure_step('scaleslist', 'scales.xml')); 105 106 // Generate the outcomes file with all the (final) annotated outcomes 107 $this->add_step(new backup_final_outcomes_structure_step('outcomeslist', 'outcomes.xml')); 108 109 // Migrate the pending annotations to final (prev steps may have added some files) 110 // This must be executed before backup files 111 $this->add_step(new move_inforef_annotations_to_final('migrate_inforef')); 112 113 // Generate the files.xml file with all the (final) annotated files. At the same 114 // time copy all the files from moodle storage to backup storage (uses custom 115 // backup_nested_element for that) 116 $this->add_step(new backup_final_files_structure_step('fileslist', 'files.xml')); 117 118 // Write the main moodle_backup.xml file, with all the information related 119 // to the backup, settings, license, versions and other useful information 120 $this->add_step(new backup_main_structure_step('mainfile', 'moodle_backup.xml')); 121 122 require_once($CFG->dirroot . '/backup/util/helper/convert_helper.class.php'); 123 124 // Look for converter steps only in type course and mode general backup operations. 125 $conversion = false; 126 if ($this->plan->get_type() == backup::TYPE_1COURSE and $this->plan->get_mode() == backup::MODE_GENERAL) { 127 $converters = convert_helper::available_converters(false); 128 foreach ($converters as $value) { 129 if ($this->get_setting_value($value)) { 130 // Zip class. 131 $zip_contents = "{$value}_zip_contents"; 132 $store_backup_file = "{$value}_store_backup_file"; 133 $convert = "{$value}_backup_convert"; 134 135 $this->add_step(new $convert("package_convert_{$value}")); 136 $this->add_step(new $zip_contents("zip_contents_{$value}")); 137 $this->add_step(new $store_backup_file("save_backupfile_{$value}")); 138 if (!$conversion) { 139 $conversion = true; 140 } 141 } 142 } 143 } 144 145 // On backup::MODE_IMPORT, we don't have to zip nor store the the file, skip these steps 146 if (($this->plan->get_mode() != backup::MODE_IMPORT) && !$conversion) { 147 // Generate the zip file (mbz extension) 148 $this->add_step(new backup_zip_contents('zip_contents')); 149 150 // Copy the generated zip (.mbz) file to final destination 151 $this->add_step(new backup_store_backup_file('save_backupfile')); 152 } 153 154 // Clean the temp dir (conditionally) and drop temp tables 155 $cleanstep = new drop_and_clean_temp_stuff('drop_and_clean_temp_stuff'); 156 // Decide about to delete the temp dir (based on backup::MODE_IMPORT) 157 $cleanstep->skip_cleaning_temp_dir($this->plan->get_mode() == backup::MODE_IMPORT); 158 $this->add_step($cleanstep); 159 160 $this->built = true; 161 } 162 163 public function get_weight() { 164 // The final task takes ages, so give it 20 times the weight of a normal task. 165 return 20; 166 } 167 168 // Protected API starts here 169 170 /** 171 * Define the common setting that any backup type will have 172 */ 173 protected function define_settings() { 174 // This task has not settings (could have them, like destination or so in the future, let's see) 175 } 176 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body