/** * Creates the backup_schema_form instance for this stage * * @return backup_schema_form */ protected function initialise_stage_form() { global $PAGE; if ($this->stageform === null) { $form = new backup_schema_form($this, $PAGE->url); $tasks = $this->ui->get_tasks(); $content = ''; $courseheading = false; $add_settings = array(); $dependencies = array(); foreach ($tasks as $task) { if (!$task instanceof backup_root_task) { if (!$courseheading) { // If we havn't already display a course heading to group nicely $form->add_heading('coursesettings', get_string('includeactivities', 'backup')); $courseheading = true; } // First add each setting foreach ($task->get_settings() as $setting) { $add_settings[] = array($setting, $task); } // The add all the dependencies foreach ($task->get_settings() as $setting) { $dependencies[] = $setting; } } else { if ($this->ui->enforce_changed_dependencies()) { // Only show these settings if dependencies changed them. // Add a root settings heading to group nicely $form->add_heading('rootsettings', get_string('rootsettings', 'backup')); // Iterate all settings and add them to the form as a fixed // setting. We only want schema settings to be editable foreach ($task->get_settings() as $setting) { if ($setting->get_name() != 'filename') { $form->add_fixed_setting($setting, $task); } } } } } $form->add_settings($add_settings); foreach ($dependencies as $depsetting) { $form->add_dependencies($depsetting); } $this->stageform = $form; } return $this->stageform; }
/** * Creates the backup_schema_form instance for this stage * * @return backup_schema_form */ protected function initialise_stage_form() { global $PAGE; if ($this->stageform === null) { $form = new backup_schema_form($this, $PAGE->url); $tasks = $this->ui->get_tasks(); $content = ''; $courseheading = false; $add_settings = array(); $dependencies = array(); // Track progress through each stage. $progress = $this->ui->get_controller()->get_progress(); $progress->start_progress('Initialise stage form', 3); // Get settings for all tasks. $progress->start_progress('', count($tasks)); $done = 1; foreach ($tasks as $task) { if (!$task instanceof backup_root_task) { if (!$courseheading) { // If we havn't already display a course heading to group nicely $form->add_heading('coursesettings', get_string('includeactivities', 'backup')); $courseheading = true; } // First add each setting foreach ($task->get_settings() as $setting) { $add_settings[] = array($setting, $task); } // The add all the dependencies foreach ($task->get_settings() as $setting) { $dependencies[] = $setting; } } else { if ($this->ui->enforce_changed_dependencies()) { // Only show these settings if dependencies changed them. // Add a root settings heading to group nicely $form->add_heading('rootsettings', get_string('rootsettings', 'backup')); // Iterate all settings and add them to the form as a fixed // setting. We only want schema settings to be editable foreach ($task->get_settings() as $setting) { if ($setting->get_name() != 'filename') { $form->add_fixed_setting($setting, $task); } } } } // Update progress. $progress->progress($done++); } $progress->end_progress(); // Add settings for tasks in batches of up to 1000. Adding settings // in larger batches improves performance, but if it takes too long, // we won't be able to update the progress bar so the backup might // time out. 1000 is chosen to balance this. $numsettings = count($add_settings); $progress->start_progress('', ceil($numsettings / self::MAX_SETTINGS_BATCH)); $start = 0; $done = 1; while ($start < $numsettings) { $length = min(self::MAX_SETTINGS_BATCH, $numsettings - $start); $form->add_settings(array_slice($add_settings, $start, $length)); $start += $length; $progress->progress($done++); } $progress->end_progress(); $progress->start_progress('', count($dependencies)); $done = 1; foreach ($dependencies as $depsetting) { $form->add_dependencies($depsetting); $progress->progress($done++); } $progress->end_progress(); // End overall progress through creating form. $progress->end_progress(); $this->stageform = $form; } return $this->stageform; }