MDL-46481 backup: implemented quick backup process (one click)

This commit is contained in:
Sam Hemelryk 2014-07-23 12:28:54 +12:00
parent 6597413d41
commit f3973676e8
5 changed files with 75 additions and 5 deletions

View File

@ -55,11 +55,24 @@ abstract class backup_moodleform extends base_moodleform {
} }
/** /**
* Initial backup user interface stage moodleform. * Initial backup user interface stage moodleform.
*
* Nothing to override we only need it defined so that moodleform doesn't get confused
* between stages.
*/ */
class backup_initial_form extends backup_moodleform {} class backup_initial_form extends backup_moodleform {
/**
* We override the initial form to offer a one click backup option.
*/
public function definition() {
$mform = $this->_form;
$mform->addElement('header', 'backupheading', get_string('backup'));
$mform->addElement('html', html_writer::tag('p', get_string('performoneclickbackup_desc', 'backup')));
$mform->addElement('submit', 'oneclickbackup', get_string('performoneclickbackup', 'backup'));
parent::definition();
$mform->setDisableShortforms(false);
}
}
/** /**
* Schema backup user interface stage moodleform. * Schema backup user interface stage moodleform.
* *

View File

@ -62,6 +62,12 @@ abstract class backup_ui_stage extends base_ui_stage {
*/ */
class backup_ui_stage_initial extends backup_ui_stage { class backup_ui_stage_initial extends backup_ui_stage {
/**
* When set to true we skip all stages and jump to immediately processing the backup.
* @var bool
*/
protected $oneclickbackup = false;
/** /**
* Initial backup stage constructor * Initial backup stage constructor
* @param backup_ui $ui * @param backup_ui $ui
@ -86,6 +92,9 @@ class backup_ui_stage_initial extends backup_ui_stage {
$data = $form->get_data(); $data = $form->get_data();
if ($data && confirm_sesskey()) { if ($data && confirm_sesskey()) {
if (isset($data->oneclickbackup)) {
$this->oneclickbackup = true;
}
$tasks = $this->ui->get_tasks(); $tasks = $this->ui->get_tasks();
$changes = 0; $changes = 0;
foreach ($tasks as &$task) { foreach ($tasks as &$task) {
@ -112,6 +121,42 @@ class backup_ui_stage_initial extends backup_ui_stage {
} }
} }
/**
* Gets the next stage for the backup.
*
* We override this function to implement the one click backup.
* When the user performs a one click backup we jump straight to the final stage.
*
* @return int
*/
public function get_next_stage() {
if ($this->oneclickbackup) {
// Its a one click backup.
// The default filename is backup.mbz, this normally gets set to something useful in the confirmation stage.
// because we skipped that stage we must manually set this to a useful value.
$tasks = $this->ui->get_tasks();
foreach ($tasks as $task) {
if ($task instanceof backup_root_task) {
// Find the filename setting.
$setting = $task->get_setting('filename');
if ($setting) {
// Use the helper objects to get a useful name.
$filename = backup_plan_dbops::get_default_backup_filename(
$this->ui->get_format(),
$this->ui->get_type(),
$this->ui->get_controller_id(),
$this->ui->get_setting_value('users'),
$this->ui->get_setting_value('anonymize')
);
$setting->set_value($filename);
}
}
}
return backup_ui::STAGE_FINAL;
}
return parent::get_next_stage();
}
/** /**
* Initialises the backup_moodleform instance for this stage * Initialises the backup_moodleform instance for this stage
* *
@ -130,6 +175,7 @@ class backup_ui_stage_initial extends backup_ui_stage {
// For the initial stage we are only interested in the root settings // For the initial stage we are only interested in the root settings
if ($task instanceof backup_root_task) { if ($task instanceof backup_root_task) {
$form->add_heading('rootsettings', get_string('rootsettings', 'backup')); $form->add_heading('rootsettings', get_string('rootsettings', 'backup'));
$form->collapse_heading('rootsettings');
$settings = $task->get_settings(); $settings = $task->get_settings();
// First add all settings except the filename setting // First add all settings except the filename setting
foreach ($settings as &$setting) { foreach ($settings as &$setting) {

View File

@ -369,4 +369,13 @@ abstract class base_moodleform extends moodleform {
$this->definition_after_data(); $this->definition_after_data();
} }
} }
/**
* Can be used to collapse a heading from outside of this form.
*
* @param string $heading
*/
public function collapse_heading($heading) {
$this->_form->setExpanded($heading, false);
}
} }

View File

@ -84,7 +84,7 @@ abstract class base_ui_stage {
* The next stage * The next stage
* @return int * @return int
*/ */
final public function get_next_stage() { public function get_next_stage() {
return floor($this->stage*2); return floor($this->stage*2);
} }
/** /**

View File

@ -177,6 +177,8 @@ $string['moreresults'] = 'There are too many results, enter a more specific sear
$string['nomatchingcourses'] = 'There are no courses to display'; $string['nomatchingcourses'] = 'There are no courses to display';
$string['norestoreoptions'] = 'There are no categories or existing courses you can restore to.'; $string['norestoreoptions'] = 'There are no categories or existing courses you can restore to.';
$string['originalwwwroot'] = 'URL of backup'; $string['originalwwwroot'] = 'URL of backup';
$string['performoneclickbackup'] = 'Perform quick backup';
$string['performoneclickbackup_desc'] = 'Clicking this will create a backup using the current settings. If you wish to proceed through each stage of the backup individually use the controls at the bottom of the form.';
$string['previousstage'] = 'Previous'; $string['previousstage'] = 'Previous';
$string['preparingui'] = 'Preparing to display page'; $string['preparingui'] = 'Preparing to display page';
$string['preparingdata'] = 'Preparing data'; $string['preparingdata'] = 'Preparing data';