Skip to content

Commit

Permalink
Merge pull request #144 from magento-connect/MAGETWO-45093-Magento-is…
Browse files Browse the repository at this point in the history
…-stuck-in-Maintenance-mode-if-Backup-is-created-during-disabling-module-via-Web-Setup-Wizard

[Connect] Bug Fixes
  • Loading branch information
Kopylova,Olga(okopylova) committed Nov 12, 2015
2 parents 63d0026 + 09821e9 commit 976b720
Show file tree
Hide file tree
Showing 18 changed files with 231 additions and 53 deletions.
1 change: 1 addition & 0 deletions app/code/Magento/Backend/Model/Session/AdminConfig.php
Expand Up @@ -84,6 +84,7 @@ public function __construct(
$adminPath = $this->extractAdminPath();
$this->setCookiePath($adminPath);
$this->setName($sessionName);
$this->setCookieSecure($this->_httpRequest->isSecure());
}

/**
Expand Down
Expand Up @@ -105,12 +105,14 @@ public function testSetCookiePathNonDefault()
}

/**
* Test for setting session name for admin
*
* Test for setting session name and secure_cookie for admin
* @dataProvider requestSecureDataProvider
* @param $secureRequest
*/
public function testSetSessionNameByConstructor()
public function testSetSessionSettingsByConstructor($secureRequest)
{
$sessionName = 'admin';
$this->requestMock->expects($this->once())->method('isSecure')->willReturn($secureRequest);

$validatorMock = $this->getMockBuilder('Magento\Framework\Validator\ValidatorInterface')
->disableOriginalConstructor()
Expand All @@ -136,5 +138,11 @@ public function testSetSessionNameByConstructor()
]
);
$this->assertSame($sessionName, $adminConfig->getName());
$this->assertSame($secureRequest, $adminConfig->getCookieSecure());
}

public function requestSecureDataProvider()
{
return [[true], [false]];
}
}
18 changes: 0 additions & 18 deletions lib/internal/Magento/Framework/Setup/BackupRollback.php
Expand Up @@ -197,7 +197,6 @@ public function codeRollback($rollbackFile, $type = Factory::TYPE_FILESYSTEM)
*/
public function dbBackup($time)
{
$this->setAreaCode();
/** @var \Magento\Framework\Backup\Db $dbBackup */
$dbBackup = $this->objectManager->create('Magento\Framework\Backup\Db');
$dbBackup->setRootDir($this->directoryList->getRoot());
Expand Down Expand Up @@ -233,7 +232,6 @@ public function dbRollback($rollbackFile)
if (!$this->file->isExists($this->backupsDir . '/' . $rollbackFile)) {
throw new LocalizedException(new Phrase('The rollback file does not exist.'));
}
$this->setAreaCode();
/** @var \Magento\Framework\Backup\Db $dbRollback */
$dbRollback = $this->objectManager->create('Magento\Framework\Backup\Db');
$dbRollback->setRootDir($this->directoryList->getRoot());
Expand All @@ -253,22 +251,6 @@ public function dbRollback($rollbackFile)
$this->log->logSuccess('DB rollback completed successfully.');
}

/**
* Sets area code to start a session for database backup and rollback
*
* @return void
*/
private function setAreaCode()
{
$areaCode = 'adminhtml';
/** @var \Magento\Framework\App\State $appState */
$appState = $this->objectManager->get('Magento\Framework\App\State');
$appState->setAreaCode($areaCode);
/** @var \Magento\Framework\ObjectManager\ConfigLoaderInterface $configLoader */
$configLoader = $this->objectManager->get('Magento\Framework\ObjectManager\ConfigLoaderInterface');
$this->objectManager->configure($configLoader->load($areaCode));
}

/**
* Get paths that should be excluded during iterative searches for locations for code backup only
*
Expand Down
9 changes: 8 additions & 1 deletion setup/pub/magento/setup/complete-backup.js
Expand Up @@ -10,7 +10,7 @@ angular.module('complete-backup', ['ngStorage'])
if ($localStorage.backupInfo) {
$scope.backupInfoPassed = $localStorage.backupInfo;
}

$scope.type = $state.current.type;

$scope.progressCounter = BACKUPCOUNTER;
Expand Down Expand Up @@ -111,13 +111,20 @@ angular.module('complete-backup', ['ngStorage'])
$scope.files = files;
$scope.updateOnProcessed($scope.create.responseType);
$scope.stopProgress();
$scope.disableMeintenanceMode();
},
fail: function() {
$scope.requestFailedHandler($scope.create);
$scope.disableMeintenanceMode();
}
}
};

$scope.disableMeintenanceMode = function() {
$http.post('index.php/maintenance/index', {'disable' : true}).success(function(data) {
});
};

$scope.isCompleted = function() {
return $scope.maintenance.processed
&& $scope.check.processed
Expand Down
17 changes: 17 additions & 0 deletions setup/src/Magento/Setup/Console/Command/BackupCommand.php
Expand Up @@ -132,6 +132,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
$inputOptionProvided = true;
}
if ($input->getOption(self::INPUT_KEY_DB)) {
$this->setAreaCode();
$backupHandler->dbBackup($time);
$inputOptionProvided = true;
}
Expand All @@ -147,4 +148,20 @@ protected function execute(InputInterface $input, OutputInterface $output)
$this->maintenanceMode->set(false);
}
}

/**
* Sets area code to start a session for database backup and rollback
*
* @return void
*/
private function setAreaCode()
{
$areaCode = 'adminhtml';
/** @var \Magento\Framework\App\State $appState */
$appState = $this->objectManager->get('Magento\Framework\App\State');
$appState->setAreaCode($areaCode);
/** @var \Magento\Framework\ObjectManager\ConfigLoaderInterface $configLoader */
$configLoader = $this->objectManager->get('Magento\Framework\ObjectManager\ConfigLoaderInterface');
$this->objectManager->configure($configLoader->load($areaCode));
}
}
17 changes: 17 additions & 0 deletions setup/src/Magento/Setup/Console/Command/ModuleUninstallCommand.php
Expand Up @@ -280,6 +280,7 @@ private function takeBackup(InputInterface $input, OutputInterface $output)
}
if ($input->getOption(self::INPUT_KEY_BACKUP_DB)) {
$dbBackup = $this->backupRollbackFactory->create($output);
$this->setAreaCode();
$dbBackup->dbBackup($time);
}
}
Expand Down Expand Up @@ -359,4 +360,20 @@ private function checkDependencies(array $modules)
}
return $messages;
}

/**
* Sets area code to start a session for database backup and rollback
*
* @return void
*/
private function setAreaCode()
{
$areaCode = 'adminhtml';
/** @var \Magento\Framework\App\State $appState */
$appState = $this->objectManager->get('Magento\Framework\App\State');
$appState->setAreaCode($areaCode);
/** @var \Magento\Framework\ObjectManager\ConfigLoaderInterface $configLoader */
$configLoader = $this->objectManager->get('Magento\Framework\ObjectManager\ConfigLoaderInterface');
$this->objectManager->configure($configLoader->load($areaCode));
}
}
17 changes: 17 additions & 0 deletions setup/src/Magento/Setup/Console/Command/RollbackCommand.php
Expand Up @@ -157,6 +157,7 @@ private function doRollback(InputInterface $input, OutputInterface $output)
$inputOptionProvided = true;
}
if ($input->getOption(self::INPUT_KEY_DB_BACKUP_FILE)) {
$this->setAreaCode();
$rollbackHandler->dbRollback($input->getOption(self::INPUT_KEY_DB_BACKUP_FILE));
$inputOptionProvided = true;
}
Expand All @@ -166,4 +167,20 @@ private function doRollback(InputInterface $input, OutputInterface $output)
);
}
}

/**
* Sets area code to start a session for database backup and rollback
*
* @return void
*/
private function setAreaCode()
{
$areaCode = 'adminhtml';
/** @var \Magento\Framework\App\State $appState */
$appState = $this->objectManager->get('Magento\Framework\App\State');
$appState->setAreaCode($areaCode);
/** @var \Magento\Framework\ObjectManager\ConfigLoaderInterface $configLoader */
$configLoader = $this->objectManager->get('Magento\Framework\ObjectManager\ConfigLoaderInterface');
$this->objectManager->configure($configLoader->load($areaCode));
}
}
5 changes: 4 additions & 1 deletion setup/src/Magento/Setup/Controller/Maintenance.php
Expand Up @@ -8,6 +8,7 @@
use Magento\Framework\App\MaintenanceMode;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\JsonModel;
use Zend\Json\Json;

class Maintenance extends AbstractActionController
{
Expand Down Expand Up @@ -36,7 +37,9 @@ public function __construct(MaintenanceMode $maintenanceMode)
public function indexAction()
{
try {
$this->maintenanceMode->set(true);
$params = Json::decode($this->getRequest()->getContent(), Json::TYPE_ARRAY);
$action = isset($params['disable']) && $params['disable'] ? false : true;
$this->maintenanceMode->set($action);
return new JsonModel(['responseType' => ResponseTypeInterface::RESPONSE_TYPE_SUCCESS]);
} catch (\Exception $e) {
return new JsonModel(
Expand Down
31 changes: 20 additions & 11 deletions setup/src/Magento/Setup/Controller/Session.php
Expand Up @@ -6,23 +6,31 @@
namespace Magento\Setup\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Magento\Setup\Model\ObjectManagerProvider;
use Zend\View\Model\JsonModel;
use Zend\View\Model\ViewModel;

class Session extends AbstractActionController
{
/**
* @var \Magento\Framework\ObjectManagerInterface
* @var \Zend\ServiceManager\ServiceManager
*/
private $objectManager;
private $serviceManager;

/**
* @var \Magento\Setup\Model\ObjectManagerProvider $objectManagerProvider
*/
private $objectManagerProvider;

/**
* @param \Zend\ServiceManager\ServiceManager $serviceManager
* @param \Magento\Setup\Model\ObjectManagerProvider $objectManagerProvider
*/
public function __construct(
ObjectManagerProvider $objectManagerProvider
\Zend\ServiceManager\ServiceManager $serviceManager,
\Magento\Setup\Model\ObjectManagerProvider $objectManagerProvider
) {
$this->objectManager = $objectManagerProvider->get();
$this->serviceManager = $serviceManager;
$this->objectManagerProvider = $objectManagerProvider;
}

/**
Expand All @@ -33,27 +41,28 @@ public function __construct(
public function prolongAction()
{
try {
if ($this->objectManager->get('Magento\Framework\App\DeploymentConfig')->isAvailable()) {
if ($this->serviceManager->get('Magento\Framework\App\DeploymentConfig')->isAvailable()) {
$objectManager = $this->objectManagerProvider->get();
/** @var \Magento\Framework\App\State $adminAppState */
$adminAppState = $this->objectManager->get('Magento\Framework\App\State');
$adminAppState = $objectManager->get('Magento\Framework\App\State');
$adminAppState->setAreaCode(\Magento\Framework\App\Area::AREA_ADMIN);

/* @var \Magento\Backend\Model\Auth\Session $session */
$sessionConfig = $this->objectManager->get('Magento\Backend\Model\Session\AdminConfig');
$sessionConfig = $objectManager->get('Magento\Backend\Model\Session\AdminConfig');
$sessionConfig->setCookiePath('/setup');
$session = $this->objectManager->create(
$session = $objectManager->create(
'Magento\Backend\Model\Auth\Session',
[
'sessionConfig' => $sessionConfig,
'appState' => $adminAppState
]
);
$session->prolong();
return \Zend_Json::encode(['success' => true]);
return new JsonModel(['success' => true]);
}
} catch (\Exception $e) {
}
return \Zend_Json::encode(['success' => false]);
return new JsonModel(['success' => false]);
}

/**
Expand Down
12 changes: 9 additions & 3 deletions setup/src/Magento/Setup/Model/Cron/AbstractJob.php
Expand Up @@ -7,6 +7,7 @@

use Symfony\Component\Console\Output\OutputInterface;
use Magento\Framework\App\Cache;
use Magento\Framework\ObjectManagerInterface;

/**
* Abstract class for jobs run by setup:cron:run command
Expand Down Expand Up @@ -48,6 +49,11 @@ abstract class AbstractJob
*/
protected $status;

/**
* @var ObjectManagerInterface
*/
protected $objectManager;


/**
* Constructor
Expand All @@ -70,9 +76,9 @@ public function __construct(
$this->name = $name;
$this->params = $params;

$objectManager = $objectManagerProvider->get();
$this->cleanupFiles = $objectManager->get('Magento\Framework\App\State\CleanupFiles');
$this->cache = $objectManager->get('Magento\Framework\App\Cache');
$this->objectManager = $objectManagerProvider->get();
$this->cleanupFiles = $this->objectManager->get('Magento\Framework\App\State\CleanupFiles');
$this->cache = $this->objectManager->get('Magento\Framework\App\Cache');
}

/**
Expand Down
Expand Up @@ -39,7 +39,7 @@ class JobComponentUninstall extends AbstractJob
/**
* @var \Magento\Framework\ObjectManagerInterface
*/
private $objectManager;
protected $objectManager;

/**
* @var \Magento\Setup\Model\Updater
Expand Down
17 changes: 17 additions & 0 deletions setup/src/Magento/Setup/Model/Cron/JobDbRollback.php
Expand Up @@ -54,6 +54,7 @@ public function execute()
$rollbackHandler = $this->backupRollbackFactory->create($this->output);
$dbBackupFile = $this->params['backup_file_name'];
if (!empty($dbBackupFile)) {
$this->setAreaCode();
$rollbackHandler->dbRollback(basename($dbBackupFile));
} else {
$this->status->add(
Expand All @@ -70,4 +71,20 @@ public function execute()
);
}
}

/**
* Sets area code to start a session for database backup and rollback
*
* @return void
*/
private function setAreaCode()
{
$areaCode = 'adminhtml';
/** @var \Magento\Framework\App\State $appState */
$appState = $this->objectManager->get('Magento\Framework\App\State');
$appState->setAreaCode($areaCode);
/** @var \Magento\Framework\ObjectManager\ConfigLoaderInterface $configLoader */
$configLoader = $this->objectManager->get('Magento\Framework\ObjectManager\ConfigLoaderInterface');
$this->objectManager->configure($configLoader->load($areaCode));
}
}

0 comments on commit 976b720

Please sign in to comment.