_objectManager->get('Magento\Backup\Helper\Data')->isRollbackAllowed()) { $this->_forward('denied'); } if (!$this->getRequest()->isAjax()) { return $this->_redirect('*/*/index'); } $helper = $this->_objectManager->get('Magento\Backup\Helper\Data'); $response = new \Magento\Framework\DataObject(); try { /* @var $backup \Magento\Backup\Model\Backup */ $backup = $this->_backupModelFactory->create( $this->getRequest()->getParam('time'), $this->getRequest()->getParam('type') ); if (!$backup->getTime() || !$backup->exists()) { return $this->_redirect('backup/*'); } if (!$backup->getTime()) { throw new \Magento\Framework\Backup\Exception\CantLoadSnapshot(__('Can\'t load snapshot archive')); } $type = $backup->getType(); $backupManager = $this->_backupFactory->create( $type )->setBackupExtension( $helper->getExtensionByType($type) )->setTime( $backup->getTime() )->setBackupsDir( $helper->getBackupsDir() )->setName( $backup->getName(), false )->setResourceModel( $this->_objectManager->create('Magento\Backup\Model\ResourceModel\Db') ); $this->_coreRegistry->register('backup_manager', $backupManager); $passwordValid = $this->_objectManager->create( 'Magento\Backup\Model\Backup' )->validateUserPassword( $this->getRequest()->getParam('password') ); if (!$passwordValid) { $response->setError(__('Please correct the password.')); $backupManager->setErrorMessage(__('Please correct the password.')); return $this->getResponse()->representJson($response->toJson()); } if ($this->getRequest()->getParam('maintenance_mode')) { if (!$this->maintenanceMode->set(true)) { $response->setError( __( 'You need more permissions to activate maintenance mode right now.' ) . ' ' . __( 'To complete the rollback, please deselect ' . '"Put store into maintenance mode" or update your permissions.' ) ); $backupManager->setErrorMessage( __('Something went wrong while putting your store into maintenance mode.') ); return $this->getResponse()->representJson($response->toJson()); } } if ($type != \Magento\Framework\Backup\Factory::TYPE_DB) { /** @var Filesystem $filesystem */ $filesystem = $this->_objectManager->get('Magento\Framework\Filesystem'); $backupManager->setRootDir($filesystem->getDirectoryRead(DirectoryList::ROOT)->getAbsolutePath()) ->addIgnorePaths($helper->getRollbackIgnorePaths()); if ($this->getRequest()->getParam('use_ftp', false)) { $backupManager->setUseFtp( $this->getRequest()->getParam('ftp_host', ''), $this->getRequest()->getParam('ftp_user', ''), $this->getRequest()->getParam('ftp_pass', ''), $this->getRequest()->getParam('ftp_path', '') ); } } $backupManager->rollback(); $helper->invalidateCache(); $adminSession = $this->_getSession(); $adminSession->destroy(); $response->setRedirectUrl($this->getUrl('*')); } catch (\Magento\Framework\Backup\Exception\CantLoadSnapshot $e) { $errorMsg = __('We can\'t find the backup file.'); } catch (\Magento\Framework\Backup\Exception\FtpConnectionFailed $e) { $errorMsg = __('We can\'t connect to the FTP right now.'); } catch (\Magento\Framework\Backup\Exception\FtpValidationFailed $e) { $errorMsg = __('Failed to validate FTP.'); } catch (\Magento\Framework\Backup\Exception\NotEnoughPermissions $e) { $this->_objectManager->get('Psr\Log\LoggerInterface')->info($e->getMessage()); $errorMsg = __('You need more permissions to perform a rollback.'); } catch (\Exception $e) { $this->_objectManager->get('Psr\Log\LoggerInterface')->info($e->getMessage()); $errorMsg = __('Failed to rollback.'); } if (!empty($errorMsg)) { $response->setError($errorMsg); $backupManager->setErrorMessage($errorMsg); } if ($this->getRequest()->getParam('maintenance_mode')) { $this->maintenanceMode->set(false); } $this->getResponse()->representJson($response->toJson()); } }