public function run()
 {
     $fs = new FW_Backup_Helper_File_System();
     $db = new FW_Backup_Helper_Database();
     $auto_install_dir = $this->backup()->get_auto_install_dir();
     $upload_dir = wp_upload_dir();
     $upload_dir = $upload_dir['basedir'];
     // This forces *Restore* page to be opened event if
     // request_filesystem_credentials is not required. In the
     // latter case JavaScript will submit the page automatically
     // which opens up a *Restore in Progress* popup.
     if ($_SERVER['REQUEST_METHOD'] != 'POST') {
         throw new FW_Backup_Exception_Method_Not_Allowed();
     }
     $restore = new FW_Backup_Process_Restore();
     $restore->request_filesystem_credentials();
     // Increase time limit. Run, until user cancelled
     set_time_limit(0);
     try {
         $fs->check_permissions();
         // Do Full Backup before Auto Install
         if (apply_filters('fw_ext_backup_do_backup_on_demo_content_install', true)) {
             @set_time_limit(30 * 60);
             $this->backup()->action()->do_backup_background_cron('cron_full');
         }
         // Replace uploads directory
         $t = $fs->replace($fs->map($upload_dir), $fs->map("{$auto_install_dir}/uploads"));
         // Move backup directory from trashed dir into new upload dir
         if ($t) {
             $fs->move_existing("{$t}/backup", $fs->map("{$upload_dir}/backup"));
             // Remove trashed dir because we made Full Backup of the site
             $fs->rmdir($t);
         }
         if (file_exists("{$auto_install_dir}/database.txt")) {
             $file_with_sql = "{$auto_install_dir}/database.txt";
         } else {
             $file_with_sql = "{$auto_install_dir}/database.sql";
         }
         $db->import($file_with_sql, true, true, true);
     } catch (FW_Backup_Exception $exception) {
         FW_Flash_Messages::add('auto-install', $exception->getMessage(), 'error');
         // otherwise flash messages wont show
         wp_redirect($this->backup()->action()->url_backup_auto_install_page());
         exit;
     }
     if ($this->backup()->get_config('image_recovery')) {
         $image_recovery = new FW_Backup_Image_Recovery();
         $image_recovery->generate_attachment_images();
     }
     do_action('fw_ext_backup_after_import_demo_content');
     // get rid of update notifications
     wp_redirect(admin_url('update-core.php?force-check=1&auto-install-redirect=' . esc_url(admin_url())));
     exit;
 }
 private function do_backup_restore($post_id)
 {
     try {
         $process = new FW_Backup_Process_Restore();
         $process->run($post_id);
     } catch (FW_Backup_Exception_Request_File_System_Credentials $exception) {
         $this->backup()->set_request_filesystem_credentials($exception->get_html());
         return;
     } catch (FW_Backup_Exception_Method_Not_Allowed $exception) {
         return;
     } catch (FW_Backup_Exception $exception) {
         FW_Flash_Messages::add('backup-restore', $exception->getMessage(), 'error');
     }
     wp_redirect($this->url_backup_page());
     exit;
 }