1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * This file contains the backup user interface class 19 * 20 * @package core_backup 21 * @copyright 2010 Sam Hemelryk 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 /** 26 * This is the backup user interface class 27 * 28 * The backup user interface class manages the user interface and backup for Moodle. 29 * 30 * @package core_backup 31 * @copyright 2010 Sam Hemelryk 32 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 33 */ 34 class backup_ui extends base_ui { 35 /** 36 * The stages of the backup user interface. 37 * The initial stage of the backup - settings are here. 38 */ 39 const STAGE_INITIAL = 1; 40 41 /** 42 * The stages of the backup user interface. 43 * The schema stage of the backup - here you choose the bits you include. 44 */ 45 const STAGE_SCHEMA = 2; 46 47 /** 48 * The stages of the backup user interface. 49 * The confirmation stage of the backup. 50 */ 51 const STAGE_CONFIRMATION = 4; 52 53 /** 54 * The stages of the backup user interface. 55 * The final stage of the backup - where it is being processed. 56 */ 57 const STAGE_FINAL = 8; 58 59 /** 60 * The stages of the backup user interface. 61 * The backup is now complete. 62 */ 63 const STAGE_COMPLETE = 16; 64 65 /** 66 * If set to true the current stage is skipped. 67 * @var bool 68 */ 69 protected static $skipcurrentstage = false; 70 71 /** 72 * Intialises what ever stage is requested. If none are requested we check 73 * params for 'stage' and default to initial 74 * 75 * @param int $stage The desired stage to intialise or null for the default 76 * @param array $params 77 * @return backup_ui_stage_initial|backup_ui_stage_schema|backup_ui_stage_confirmation|backup_ui_stage_final 78 */ 79 protected function initialise_stage($stage = null, array $params = null) { 80 if ($stage == null) { 81 $stage = optional_param('stage', self::STAGE_INITIAL, PARAM_INT); 82 } 83 if (self::$skipcurrentstage) { 84 $stage *= 2; 85 } 86 switch ($stage) { 87 case backup_ui::STAGE_INITIAL: 88 $stage = new backup_ui_stage_initial($this, $params); 89 break; 90 case backup_ui::STAGE_SCHEMA: 91 $stage = new backup_ui_stage_schema($this, $params); 92 break; 93 case backup_ui::STAGE_CONFIRMATION: 94 $stage = new backup_ui_stage_confirmation($this, $params); 95 break; 96 case backup_ui::STAGE_FINAL: 97 $stage = new backup_ui_stage_final($this, $params); 98 break; 99 default: 100 $stage = false; 101 break; 102 } 103 return $stage; 104 } 105 106 /** 107 * Returns the backup id 108 * @return string 109 */ 110 public function get_uniqueid() { 111 return $this->get_backupid(); 112 } 113 114 /** 115 * Gets the backup id from the controller 116 * @return string 117 */ 118 public function get_backupid() { 119 return $this->controller->get_backupid(); 120 } 121 122 /** 123 * Executes the backup plan 124 * @throws backup_ui_exception when the steps are wrong. 125 * @return bool 126 */ 127 public function execute() { 128 if ($this->progress >= self::PROGRESS_EXECUTED) { 129 throw new backup_ui_exception('backupuialreadyexecuted'); 130 } 131 if ($this->stage->get_stage() < self::STAGE_FINAL) { 132 throw new backup_ui_exception('backupuifinalisedbeforeexecute'); 133 } 134 $this->progress = self::PROGRESS_EXECUTED; 135 $this->controller->finish_ui(); 136 $this->controller->execute_plan(); 137 $this->stage = new backup_ui_stage_complete($this, $this->stage->get_params(), $this->controller->get_results()); 138 return true; 139 } 140 141 /** 142 * Loads the backup controller if we are tracking one 143 * @param string $backupid 144 * @return backup_controller|false 145 */ 146 final public static function load_controller($backupid = false) { 147 // Get the backup id optional param. 148 if ($backupid) { 149 try { 150 // Try to load the controller with it. 151 // If it fails at this point it is likely because this is the first load. 152 $controller = backup_controller::load_controller($backupid); 153 return $controller; 154 } catch (Exception $e) { 155 return false; 156 } 157 } 158 return $backupid; 159 } 160 161 /** 162 * Gets an array of progress bar items that can be displayed through the backup renderer. 163 * @return array Array of items for the progress bar 164 */ 165 public function get_progress_bar() { 166 global $PAGE; 167 168 $stage = self::STAGE_COMPLETE; 169 $currentstage = $this->stage->get_stage(); 170 $items = array(); 171 while ($stage > 0) { 172 $classes = array('backup_stage'); 173 if (floor($stage / 2) == $currentstage) { 174 $classes[] = 'backup_stage_next'; 175 } else if ($stage == $currentstage) { 176 $classes[] = 'backup_stage_current'; 177 } else if ($stage < $currentstage) { 178 $classes[] = 'backup_stage_complete'; 179 } 180 $item = array('text' => strlen(decbin($stage)).'. '.get_string('currentstage'.$stage, 'backup'), 'class' => join(' ', $classes)); 181 if ($stage < $currentstage && $currentstage < self::STAGE_COMPLETE && (!self::$skipcurrentstage || ($stage * 2) != $currentstage)) { 182 $params = $this->stage->get_params(); 183 if (empty($params)) { 184 $params = array(); 185 } 186 $params = array_merge($params, array('backup' => $this->get_backupid(), 'stage' => $stage)); 187 $item['link'] = new moodle_url($PAGE->url, $params); 188 } 189 array_unshift($items, $item); 190 $stage = floor($stage / 2); 191 } 192 return $items; 193 } 194 /** 195 * Gets the name related to the operation of this UI 196 * @return string 197 */ 198 public function get_name() { 199 return 'backup'; 200 } 201 /** 202 * Gets the id of the first stage this UI is reponsible for 203 * @return int 204 */ 205 public function get_first_stage_id() { 206 return self::STAGE_INITIAL; 207 } 208 /** 209 * If called with default arg the current stage gets skipped. 210 * @static 211 * @param bool $setting Set to true (default) if you want to skip this stage, false otherwise. 212 */ 213 public static function skip_current_stage($setting = true) { 214 self::$skipcurrentstage = $setting; 215 } 216 } 217 218 /** 219 * Backup user interface exception. Modelled off the backup_exception class 220 * 221 * @package core_backup 222 * @copyright 2010 Sam Hemelryk 223 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 224 */ 225 class backup_ui_exception extends base_ui_exception {}
title
Description
Body
title
Description
Body
title
Description
Body
title
Body