/setup/src/Magento/Setup/Controller/Install.php
https://gitlab.com/axeltizon/magento-demopoweraccess · PHP · 173 lines · 98 code · 15 blank · 60 comment · 4 complexity · c1e409ecdb77446aef37347325a25346 MD5 · raw file
- <?php
- /**
- * Copyright © 2016 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Setup\Controller;
- use Magento\Framework\App\DeploymentConfig;
- use Magento\Framework\Config\ConfigOptionsListConstants as SetupConfigOptionsList;
- use Magento\SampleData;
- use Magento\Setup\Model\Installer;
- use Magento\Setup\Model\Installer\ProgressFactory;
- use Magento\Setup\Model\InstallerFactory;
- use Magento\Setup\Model\RequestDataConverter;
- use Magento\Setup\Model\WebLogger;
- use Zend\Json\Json;
- use Zend\Mvc\Controller\AbstractActionController;
- use Zend\View\Model\JsonModel;
- use Zend\View\Model\ViewModel;
- /**
- * Install controller
- *
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class Install extends AbstractActionController
- {
- /**
- * @var WebLogger
- */
- private $log;
- /**
- * @var Installer
- */
- private $installer;
- /**
- * @var ProgressFactory
- */
- private $progressFactory;
- /**
- * @var \Magento\Framework\Setup\SampleData\State
- */
- protected $sampleDataState;
- /**
- * @var \Magento\Framework\App\DeploymentConfig
- */
- private $deploymentConfig;
- /**
- * @var RequestDataConverter
- */
- private $requestDataConverter;
- /**
- * Default Constructor
- *
- * @param WebLogger $logger
- * @param InstallerFactory $installerFactory
- * @param ProgressFactory $progressFactory
- * @param \Magento\Framework\Setup\SampleData\State $sampleDataState
- * @param \Magento\Framework\App\DeploymentConfig $deploymentConfig
- * @param RequestDataConverter $requestDataConverter
- */
- public function __construct(
- WebLogger $logger,
- InstallerFactory $installerFactory,
- ProgressFactory $progressFactory,
- \Magento\Framework\Setup\SampleData\State $sampleDataState,
- DeploymentConfig $deploymentConfig,
- RequestDataConverter $requestDataConverter
- ) {
- $this->log = $logger;
- $this->installer = $installerFactory->create($logger);
- $this->progressFactory = $progressFactory;
- $this->sampleDataState = $sampleDataState;
- $this->deploymentConfig = $deploymentConfig;
- $this->requestDataConverter = $requestDataConverter;
- }
- /**
- * @return ViewModel
- */
- public function indexAction()
- {
- $view = new ViewModel;
- $view->setTerminal(true);
- return $view;
- }
- /**
- * Index Action
- *
- * @return JsonModel
- */
- public function startAction()
- {
- $this->log->clear();
- $json = new JsonModel;
- try {
- $this->checkForPriorInstall();
- $content = $this->getRequest()->getContent();
- $source = $content ? $source = Json::decode($content, Json::TYPE_ARRAY) : [];
- $data = $this->requestDataConverter->convert($source);
- $this->installer->install($data);
- $json->setVariable(
- 'key',
- $this->installer->getInstallInfo()[SetupConfigOptionsList::KEY_ENCRYPTION_KEY]
- );
- $json->setVariable('success', true);
- if ($this->sampleDataState->hasError()) {
- $json->setVariable('isSampleDataError', true);
- }
- $json->setVariable('messages', $this->installer->getInstallInfo()[Installer::INFO_MESSAGE]);
- } catch (\Exception $e) {
- $this->log->logError($e);
- $json->setVariable('messages', $e->getMessage());
- $json->setVariable('success', false);
- }
- return $json;
- }
- /**
- * Checks progress of installation
- *
- * @return JsonModel
- */
- public function progressAction()
- {
- $percent = 0;
- $success = false;
- $contents = [];
- $json = new JsonModel();
- // Depending upon the install environment and network latency, there is a possibility that
- // "progress" check request may arrive before the Install POST request. In that case
- // "install.log" file may not be created yet. Check the "install.log" is created before
- // trying to read from it.
- if (!$this->log->logfileExists()) {
- return $json->setVariables(['progress' => $percent, 'success' => true, 'console' => $contents]);
- }
- try {
- $progress = $this->progressFactory->createFromLog($this->log);
- $percent = sprintf('%d', $progress->getRatio() * 100);
- $success = true;
- $contents = $this->log->get();
- if ($this->sampleDataState->hasError()) {
- $json->setVariable('isSampleDataError', true);
- }
- } catch (\Exception $e) {
- $contents = [(string)$e];
- }
- return $json->setVariables(['progress' => $percent, 'success' => $success, 'console' => $contents]);
- }
- /**
- * Checks for prior install
- *
- * @return void
- * @throws \Magento\Setup\Exception
- */
- private function checkForPriorInstall()
- {
- if ($this->deploymentConfig->isAvailable()) {
- throw new \Magento\Setup\Exception('Magento application is already installed.');
- }
- }
- }