File: /home/petsclubcc/magento/setup/src/Magento/Setup/Controller/Install.php
<?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.');
}
}
}