mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
remove Required Refactoring see MC-19410 comments phpcs:disable Magento2.Exceptions.ThrowCatch
156 lines
5.9 KiB
PHP
156 lines
5.9 KiB
PHP
<?php
|
|
/**
|
|
*
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Backup\Controller\Adminhtml\Index;
|
|
|
|
use Magento\Framework\App\Action\HttpPostActionInterface;
|
|
use Magento\Framework\App\Filesystem\DirectoryList;
|
|
use Magento\Framework\Filesystem;
|
|
|
|
/**
|
|
* Backup rollback controller.
|
|
*
|
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
|
*/
|
|
class Rollback extends \Magento\Backup\Controller\Adminhtml\Index implements HttpPostActionInterface
|
|
{
|
|
/**
|
|
* Rollback Action
|
|
*
|
|
* @return void|\Magento\Backend\App\Action
|
|
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
|
|
* @SuppressWarnings(PHPMD.NPathComplexity)
|
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
|
*/
|
|
public function execute()
|
|
{
|
|
if (!$this->_objectManager->get(\Magento\Backup\Helper\Data::class)->isRollbackAllowed()) {
|
|
$this->_forward('denied');
|
|
}
|
|
|
|
if (!$this->getRequest()->isAjax()) {
|
|
return $this->_redirect('*/*/index');
|
|
}
|
|
|
|
$helper = $this->_objectManager->get(\Magento\Backup\Helper\Data::class);
|
|
$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::class)
|
|
);
|
|
|
|
$this->_coreRegistry->register('backup_manager', $backupManager);
|
|
|
|
$passwordValid = $this->_objectManager->create(
|
|
\Magento\Backup\Model\Backup::class
|
|
)->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')) {
|
|
$this->maintenanceMode->set(true);
|
|
|
|
if (!$this->maintenanceMode->isOn()) {
|
|
$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::class);
|
|
$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::class)->info($e->getMessage());
|
|
$errorMsg = __('You need more permissions to perform a rollback.');
|
|
} catch (\Exception $e) {
|
|
$this->_objectManager->get(\Psr\Log\LoggerInterface::class)->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());
|
|
}
|
|
}
|