diff --git a/backup/util/ui/backup_moodleform.class.php b/backup/util/ui/backup_moodleform.class.php index 3b66dc5be30..f00f0c91d59 100644 --- a/backup/util/ui/backup_moodleform.class.php +++ b/backup/util/ui/backup_moodleform.class.php @@ -55,11 +55,24 @@ abstract class backup_moodleform extends base_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. * diff --git a/backup/util/ui/backup_ui_stage.class.php b/backup/util/ui/backup_ui_stage.class.php index 257a2ec10d6..2b528807f12 100644 --- a/backup/util/ui/backup_ui_stage.class.php +++ b/backup/util/ui/backup_ui_stage.class.php @@ -62,6 +62,12 @@ abstract class backup_ui_stage extends base_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 * @param backup_ui $ui @@ -86,6 +92,9 @@ class backup_ui_stage_initial extends backup_ui_stage { $data = $form->get_data(); if ($data && confirm_sesskey()) { + if (isset($data->oneclickbackup)) { + $this->oneclickbackup = true; + } $tasks = $this->ui->get_tasks(); $changes = 0; 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 * @@ -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 if ($task instanceof backup_root_task) { $form->add_heading('rootsettings', get_string('rootsettings', 'backup')); + $form->collapse_heading('rootsettings'); $settings = $task->get_settings(); // First add all settings except the filename setting foreach ($settings as &$setting) { diff --git a/backup/util/ui/base_moodleform.class.php b/backup/util/ui/base_moodleform.class.php index 262142e646d..b35843691cf 100644 --- a/backup/util/ui/base_moodleform.class.php +++ b/backup/util/ui/base_moodleform.class.php @@ -369,4 +369,13 @@ abstract class base_moodleform extends moodleform { $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); + } } diff --git a/backup/util/ui/base_ui_stage.class.php b/backup/util/ui/base_ui_stage.class.php index 71b90dd97a4..85f99a2540c 100644 --- a/backup/util/ui/base_ui_stage.class.php +++ b/backup/util/ui/base_ui_stage.class.php @@ -84,7 +84,7 @@ abstract class base_ui_stage { * The next stage * @return int */ - final public function get_next_stage() { + public function get_next_stage() { return floor($this->stage*2); } /** diff --git a/lang/en/backup.php b/lang/en/backup.php index f72413c797e..61f6cb63ba8 100644 --- a/lang/en/backup.php +++ b/lang/en/backup.php @@ -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['norestoreoptions'] = 'There are no categories or existing courses you can restore to.'; $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['preparingui'] = 'Preparing to display page'; $string['preparingdata'] = 'Preparing data';