diff --git a/backup_migrate.local_tasks.yml b/backup_migrate.local_tasks.yml new file mode 100644 index 0000000..16b68de --- /dev/null +++ b/backup_migrate.local_tasks.yml @@ -0,0 +1,25 @@ +backup_migrate_tab: + route_name: backup_migrate.export + title: 'Backup' + tab_root_id: backup_migrate_tab + weight: 0 + +backup_migrate_basic_tab: + route_name: backup_migrate.export + title: 'Quick Backup' + tab_root_id: backup_migrate_tab + tab_parent_id: backup_migrate_tab + weight: 0 + +backup_migrate_advanced_tab: + route_name: backup_migrate.advanced + title: 'Advanced Backup' + tab_root_id: backup_migrate_tab + tab_parent_id: backup_migrate_tab + weight: 1 + +backup_migrate_restore_tab: + route_name: backup_migrate.restore + title: 'Restore' + tab_root_id: backup_migrate_tab + weight: 1 diff --git a/backup_migrate.module b/backup_migrate.module index 5dec28a..a13a9df 100644 --- a/backup_migrate.module +++ b/backup_migrate.module @@ -105,46 +105,7 @@ function backup_migrate_menu() { $items[BACKUP_MIGRATE_MENU_PATH] = array( 'title' => 'Backup and Migrate', 'description' => 'Backup/restore your database or migrate data to or from another Drupal site.', - 'page callback' => 'backup_migrate_menu_callback', - 'page arguments' => array('', 'backup_migrate_ui_manual_backup_quick', TRUE), - 'access arguments' => array('access backup and migrate'), - 'type' => MENU_NORMAL_ITEM, - ); - $items[BACKUP_MIGRATE_MENU_PATH . '/export'] = array( - 'title' => 'Backup', - 'description' => 'Backup the database.', - 'page callback' => 'backup_migrate_menu_callback', - 'page arguments' => array('', 'backup_migrate_ui_manual_backup_quick', TRUE), - 'access arguments' => array('access backup and migrate'), - 'weight' => 0, - 'type' => MENU_DEFAULT_LOCAL_TASK, - ); - $items[BACKUP_MIGRATE_MENU_PATH . '/export/quick'] = array( - 'title' => 'Quick Backup', - 'description' => 'Backup the database.', - 'page callback' => 'backup_migrate_menu_callback', - 'page arguments' => array('', 'backup_migrate_ui_manual_backup_quick', TRUE), - 'access arguments' => array('access backup and migrate'), - 'weight' => 0, - 'type' => MENU_DEFAULT_LOCAL_TASK, - ); - $items[BACKUP_MIGRATE_MENU_PATH . '/export/advanced'] = array( - 'title' => 'Advanced Backup', - 'description' => 'Backup the database.', - 'page callback' => 'backup_migrate_menu_callback', - 'page arguments' => array('', 'backup_migrate_ui_manual_backup_advanced', TRUE), - 'access arguments' => array('perform backup'), - 'weight' => 1, - 'type' => MENU_LOCAL_TASK, - ); - $items[BACKUP_MIGRATE_MENU_PATH . '/restore'] = array( - 'title' => 'Restore', - 'description' => 'Restore the database from a previous backup', - 'page callback' => 'backup_migrate_menu_callback', - 'page arguments' => array('', 'backup_migrate_ui_manual_restore', TRUE), - 'access arguments' => array('restore from backup'), - 'weight' => 1, - 'type' => MENU_LOCAL_TASK, + 'route_name' => 'backup_migrate.export', ); backup_migrate_include('crud'); @@ -268,20 +229,6 @@ function backup_migrate_ui_manual_backup_quick() { } /** - * The menu callback for advanced manual backups. - */ -function backup_migrate_ui_manual_backup_advanced() { - backup_migrate_include('profiles'); - $out = array(); - $profile_id = arg(BACKUP_MIGRATE_MENU_DEPTH + 2); - $profile = _backup_migrate_profile_saved_default_profile($profile_id); - - $out[] = drupal_get_form('backup_migrate_ui_manual_backup_load_profile_form', $profile); - $out[] = drupal_get_form('backup_migrate_ui_manual_backup_form', $profile); - return $out; -} - -/** * The backup/export load profile form. */ function backup_migrate_ui_manual_backup_load_profile_form($form, &$form_state, $profile = NULL) { @@ -316,7 +263,7 @@ function backup_migrate_ui_manual_backup_load_profile_form($form, &$form_state, function backup_migrate_ui_manual_backup_load_profile_form_submit($form, &$form_state) { if ($profile = backup_migrate_get_profile($form_state['values']['profile_id'])) { variable_set("backup_migrate_profile_id", $profile->get_id()); - $form_state['redirect'] = BACKUP_MIGRATE_MENU_PATH . '/export/advanced'; + $form_state['redirect'] = BACKUP_MIGRATE_MENU_PATH . '/advanced'; } else { variable_set("backup_migrate_profile_id", NULL); @@ -324,86 +271,6 @@ function backup_migrate_ui_manual_backup_load_profile_form_submit($form, &$form_ } /** - * The quick backup form. - */ -function backup_migrate_ui_manual_quick_backup_form($form, &$form_state) { - backup_migrate_include('profiles', 'destinations'); - drupal_add_js(drupal_get_path('module', 'backup_migrate') .'/backup_migrate.js'); - - $form = array(); - - $form['quickbackup'] = array( - '#type' => 'details', - "#title" => t("Quick Backup"), - "#collapsed" => FALSE, - "#tree" => FALSE, - ); - - $form['quickbackup']['source_id'] = _backup_migrate_get_source_pulldown(variable_get('backup_migrate_source_id', NULL)); - - $form['quickbackup']['destination_id'] = array( - "#type" => "select", - "#title" => t("Destination"), - "#options" => _backup_migrate_get_destination_form_item_options('manual backup'), - "#default_value" => variable_get("backup_migrate_destination_id", "download"), - ); - $profile_options = _backup_migrate_get_profile_form_item_options(); - $form['quickbackup']['profile_id'] = array( - "#type" => "select", - "#title" => t("Settings Profile"), - '#default_value' => variable_get('backup_migrate_profile_id', NULL), - "#options" => $profile_options, - ); - - $form['quickbackup']['submit'] = array( - '#type' => 'submit', - '#value' => t('Backup now'), - '#weight' => 1, - ); - - $form['advanced'] = array( - '#type' => 'markup', - '#markup' => t('For more backup options, try the advanced backup page.', array('!advancedurl' => url(BACKUP_MIGRATE_MENU_PATH . '/export/advanced'))), - ); - - - return $form; -} - -/** - * Validate the quick backup form. - */ -function backup_migrate_ui_manual_quick_backup_form_validate($form, &$form_state) { - if ($form_state['values']['source_id'] == $form_state['values']['destination_id']) { - form_set_error('destination_id', t('A source cannot be backed up to itself. Please pick a different destination for this backup.')); - } -} - -/** - * Submit the quick backup form. - */ -function backup_migrate_ui_manual_quick_backup_form_submit($form, &$form_state) { - backup_migrate_include('profiles', 'destinations'); - if (user_access('perform backup')) { - // For a quick backup use the default settings. - $settings = _backup_migrate_profile_saved_default_profile($form_state['values']['profile_id']); - - // Set the destination to the one chosen in the pulldown. - $settings->destination_id = $form_state['values']['destination_id']; - $settings->source_id = $form_state['values']['source_id']; - - // Save the settings for next time. - variable_set("backup_migrate_source_id", $form_state['values']['source_id']); - variable_set("backup_migrate_destination_id", $form_state['values']['destination_id']); - variable_set("backup_migrate_profile_id", $form_state['values']['profile_id']); - - // Do the backup. - backup_migrate_ui_manual_backup_perform($settings); - } - $form_state['redirect'] = BACKUP_MIGRATE_MENU_PATH; -} - -/** * Theme the quick backup form. */ function theme_backup_migrate_ui_manual_quick_backup_form($form) { @@ -565,79 +432,6 @@ function backup_migrate_ui_manual_backup_perform($settings) { } /** - * The restore/import upload page. - */ -function backup_migrate_ui_manual_restore() { - return drupal_get_form('backup_migrate_ui_manual_restore_form'); -} - -/** - * The restore/import upload form. - */ -function backup_migrate_ui_manual_restore_form() { - backup_migrate_include('filters', 'destinations'); - - $form = array(); - - $sources = _backup_migrate_get_destination_form_item_options('source'); - if (count($sources) > 1) { - $form['source_id'] = array( - "#type" => "select", - "#title" => t("Restore to"), - "#options" => _backup_migrate_get_destination_form_item_options('source'), - "#description" => t("Choose the database to restore to. Any database destinations you have created and any databases specified in your settings.php can be restored to."), - "#default_value" => 'db', - ); - } - else { - $form['source_id'] = array( - "#type" => "value", - "#value" => 'db', - ); - } - - $form['backup_migrate_restore_upload'] = array( - '#title' => t('Upload a Backup File'), - '#type' => 'file', - '#description' => t("Upload a backup file created by this version of this module. For other database backups please use another tool for import. Max file size: %size", array("%size" => format_size(file_upload_max_size()))), - ); - drupal_set_message(t('Restoring will delete some or all of your data and cannot be undone. Always test your backups on a non-production server!'), 'warning', FALSE); - - $form = array_merge_recursive($form, backup_migrate_filters_settings_form(backup_migrate_filters_settings_default('restore'), 'restore')); - // Add the advanced fieldset if there are any fields in it. - if (@$form['advanced']) { - $form['advanced']['#type'] = 'details'; - $form['advanced']['#title'] = t('Advanced Options'); - $form['advanced']['#collapsed'] = true; - } - - $form['submit'] = array( - '#type' => 'submit', - '#value' => t('Restore now'), - ); - if (user_access('access backup files')) { - $form[] = array( - '#type' => 'markup', - '#markup' => t('

Or you can restore one of the files in your saved backup destinations.

', array("!url" => url(BACKUP_MIGRATE_MENU_PATH . "/destination"))), - ); - } - $form['#attributes'] = array('enctype' => 'multipart/form-data'); - return $form; -} - -/** - * The restore submit. Do the restore. - */ -function backup_migrate_ui_manual_restore_form_submit($form, &$form_state) { - $validators = array('file_validate_extensions' => array('gz zip sql mysql bz bz2')); - if ($file = file_save_upload('backup_migrate_restore_upload', $validators)) { - backup_migrate_include('destinations'); - backup_migrate_perform_restore('upload', $file->uri, $form_state['values']); - } - $form_state['redirect'] = BACKUP_MIGRATE_MENU_PATH . '/restore'; -} - -/** * Convert an item to an 'exportable'. */ function backup_migrate_ui_export_form($form, &$form_state, $item) { diff --git a/backup_migrate.routing.yml b/backup_migrate.routing.yml new file mode 100644 index 0000000..8c1a242 --- /dev/null +++ b/backup_migrate.routing.yml @@ -0,0 +1,23 @@ +backup_migrate.export: + path: 'admin/config/system/backup_migrate' + defaults: + _form: '\Drupal\backup_migrate\Form\BackupMigrateExportForm' + _title: 'Backup' + requirements: + _permission: 'perform backup' + +backup_migrate.advanced: + path: 'admin/config/system/backup_migrate/advanced' + defaults: + _form: '\Drupal\backup_migrate\Form\BackupMigrateExportAdvancedForm' + _title: 'Advanced Backup' + requirements: + _permission: 'perform backup' + +backup_migrate.restore: + path: 'admin/config/system/backup_migrate/restore' + defaults: + _form: '\Drupal\backup_migrate\Form\BackupMigrateRestoreForm' + _title: 'Restore' + requirements: + _permission: 'restore from backup' diff --git a/lib/Drupal/backup_migrate/Form/BackupMigrateExportAdvancedForm.php b/lib/Drupal/backup_migrate/Form/BackupMigrateExportAdvancedForm.php new file mode 100644 index 0000000..5e57e81 --- /dev/null +++ b/lib/Drupal/backup_migrate/Form/BackupMigrateExportAdvancedForm.php @@ -0,0 +1,51 @@ + 'details', + "#title" => t("Quick Backup"), + "#collapsed" => FALSE, + "#tree" => FALSE, + ); + + $form['quickbackup']['source_id'] = _backup_migrate_get_source_pulldown(variable_get('backup_migrate_source_id', NULL)); + + $form['quickbackup']['destination_id'] = array( + "#type" => "select", + "#title" => t("Destination"), + "#options" => _backup_migrate_get_destination_form_item_options('manual backup'), + "#default_value" => variable_get("backup_migrate_destination_id", "download"), + ); + $profile_options = _backup_migrate_get_profile_form_item_options(); + $form['quickbackup']['profile_id'] = array( + "#type" => "select", + "#title" => t("Settings Profile"), + '#default_value' => variable_get('backup_migrate_profile_id', NULL), + "#options" => $profile_options, + ); + + $form['quickbackup']['submit'] = array( + '#type' => 'submit', + '#value' => t('Backup now'), + '#weight' => 1, + ); + + $form['advanced'] = array( + '#type' => 'markup', + '#markup' => t('For more backup options, try the advanced backup page.', array('!advancedurl' => url(BACKUP_MIGRATE_MENU_PATH . '/export/advanced'))), + ); + + return $form; + } + + /** + * {@inheritdoc} + */ + public function validateForm(array &$form, array &$form_state) { + if ($form_state['values']['source_id'] == $form_state['values']['destination_id']) { + form_set_error('destination_id', t('A source cannot be backed up to itself. Please pick a different destination for this backup.')); + } + } + + /** + * {@inheritdoc} + */ + public function submitForm(array &$form, array &$form_state) { + backup_migrate_include('profiles', 'destinations'); + if (user_access('perform backup')) { + // For a quick backup use the default settings. + $settings = _backup_migrate_profile_saved_default_profile($form_state['values']['profile_id']); + + // Set the destination to the one chosen in the pulldown. + $settings->destination_id = $form_state['values']['destination_id']; + $settings->source_id = $form_state['values']['source_id']; + + // Save the settings for next time. + variable_set("backup_migrate_source_id", $form_state['values']['source_id']); + variable_set("backup_migrate_destination_id", $form_state['values']['destination_id']); + variable_set("backup_migrate_profile_id", $form_state['values']['profile_id']); + + // Do the backup. + backup_migrate_ui_manual_backup_perform($settings); + } + $form_state['redirect'] = backup_migrate_menu_path; + } + +} diff --git a/lib/Drupal/backup_migrate/Form/BackupMigrateRestoreForm.php b/lib/Drupal/backup_migrate/Form/BackupMigrateRestoreForm.php new file mode 100644 index 0000000..72dd9c7 --- /dev/null +++ b/lib/Drupal/backup_migrate/Form/BackupMigrateRestoreForm.php @@ -0,0 +1,97 @@ + 1) { + $form['source_id'] = array( + "#type" => "select", + "#title" => t("Restore to"), + "#options" => _backup_migrate_get_destination_form_item_options('source'), + "#description" => t("Choose the database to restore to. Any database destinations you have created and any databases specified in your settings.php can be restored to."), + "#default_value" => 'db', + ); + } + else { + $form['source_id'] = array( + "#type" => "value", + "#value" => 'db', + ); + } + + $form['backup_migrate_restore_upload'] = array( + '#title' => t('Upload a Backup File'), + '#type' => 'file', + '#description' => t("Upload a backup file created by this version of this module. For other database backups please use another tool for import. Max file size: %size", array("%size" => format_size(file_upload_max_size()))), + ); + drupal_set_message(t('Restoring will delete some or all of your data and cannot be undone. Always test your backups on a non-production server!'), 'warning', FALSE); + + $form = array_merge_recursive($form, backup_migrate_filters_settings_form(backup_migrate_filters_settings_default('restore'), 'restore')); + // Add the advanced fieldset if there are any fields in it. + if (@$form['advanced']) { + $form['advanced']['#type'] = 'details'; + $form['advanced']['#title'] = t('Advanced Options'); + $form['advanced']['#collapsed'] = true; + } + + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Restore now'), + ); + if (user_access('access backup files')) { + $form[] = array( + '#type' => 'markup', + '#markup' => t('

Or you can restore one of the files in your saved backup destinations.

', array("!url" => url(BACKUP_MIGRATE_MENU_PATH . "/destination"))), + ); + } + $form['#attributes'] = array('enctype' => 'multipart/form-data'); + + return $form; + } + + /** + * {@inheritdoc} + */ + public function validateForm(array &$form, array &$form_state) { + } + + /** + * {@inheritdoc} + */ + public function submitForm(array &$form, array &$form_state) { + $validators = array('file_validate_extensions' => array('gz zip sql mysql bz bz2')); + if ($file = file_save_upload('backup_migrate_restore_upload', $validators)) { + backup_migrate_include('destinations'); + backup_migrate_perform_restore('upload', $file->uri, $form_state['values']); + } + $form_state['redirect'] = BACKUP_MIGRATE_MENU_PATH . '/restore'; + } + +}