123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Deploy\Model;
- use Magento\Deploy\App\Mode\ConfigProvider;
- use Magento\Framework\App\Config\ScopeConfigInterface;
- use Magento\Framework\App\Console\MaintenanceModeEnabler;
- use Magento\Framework\App\DeploymentConfig\Reader;
- use Magento\Framework\App\DeploymentConfig\Writer;
- use Magento\Framework\App\Filesystem\DirectoryList;
- use Magento\Framework\App\MaintenanceMode;
- use Magento\Framework\App\State;
- use Magento\Framework\Config\File\ConfigFilePool;
- use Symfony\Component\Console\Input\InputInterface;
- use Symfony\Component\Console\Output\OutputInterface;
- use Magento\Config\Console\Command\ConfigSet\ProcessorFacadeFactory;
- use Magento\Config\Console\Command\EmulatedAdminhtmlAreaProcessor;
- use Magento\Framework\Exception\LocalizedException;
- use Magento\Framework\App\ObjectManager;
- /**
- * A class to manage Magento modes
- *
- * @SuppressWarnings("PMD.CouplingBetweenObjects")
- * @SuppressWarnings("PMD.ExcessiveParameterList")
- */
- class Mode
- {
- /**
- * @var InputInterface
- */
- private $input;
- /**
- * @var OutputInterface
- */
- protected $output;
- /**
- * @var Writer
- */
- private $writer;
- /**
- * @var Reader
- */
- private $reader;
- /**
- * @var Filesystem
- */
- private $filesystem;
- /**
- * @var ConfigProvider
- */
- private $configProvider;
- /**
- * The factory for processor facade.
- *
- * @var ProcessorFacadeFactory
- */
- private $processorFacadeFactory;
- /**
- * Emulator adminhtml area for CLI command.
- *
- * @var EmulatedAdminhtmlAreaProcessor
- */
- private $emulatedAreaProcessor;
- /**
- * @var MaintenanceModeEnabler
- */
- private $maintenanceModeEnabler;
- /**
- * @param InputInterface $input
- * @param OutputInterface $output
- * @param Writer $writer
- * @param Reader $reader
- * @param MaintenanceMode $maintenanceMode deprecated, use $maintenanceModeEnabler instead
- * @param Filesystem $filesystem
- * @param ConfigProvider $configProvider
- * @param ProcessorFacadeFactory $processorFacadeFactory
- * @param EmulatedAdminhtmlAreaProcessor $emulatedAreaProcessor
- * @param MaintenanceModeEnabler $maintenanceModeEnabler
- *
- * @SuppressWarnings(PHPMD.UnusedFormalParameter)
- */
- public function __construct(
- InputInterface $input,
- OutputInterface $output,
- Writer $writer,
- Reader $reader,
- MaintenanceMode $maintenanceMode,
- Filesystem $filesystem,
- ConfigProvider $configProvider = null,
- ProcessorFacadeFactory $processorFacadeFactory = null,
- EmulatedAdminhtmlAreaProcessor $emulatedAreaProcessor = null,
- MaintenanceModeEnabler $maintenanceModeEnabler = null
- ) {
- $this->input = $input;
- $this->output = $output;
- $this->writer = $writer;
- $this->reader = $reader;
- $this->filesystem = $filesystem;
- $this->configProvider =
- $configProvider ?: ObjectManager::getInstance()->get(ConfigProvider::class);
- $this->processorFacadeFactory =
- $processorFacadeFactory ?: ObjectManager::getInstance()->get(ProcessorFacadeFactory::class);
- $this->emulatedAreaProcessor =
- $emulatedAreaProcessor ?: ObjectManager::getInstance()->get(EmulatedAdminhtmlAreaProcessor::class);
- $this->maintenanceModeEnabler =
- $maintenanceModeEnabler ?: ObjectManager::getInstance()->get(MaintenanceModeEnabler::class);
- }
- /**
- * Enable production mode
- *
- * @throws LocalizedException
- * @return void
- */
- public function enableProductionMode()
- {
- $this->maintenanceModeEnabler->executeInMaintenanceMode(
- function () {
- $previousMode = $this->getMode();
- try {
- // We have to turn on production mode before generation.
- // We need this to enable generation of the "min" files.
- $this->setStoreMode(State::MODE_PRODUCTION);
- $this->filesystem->regenerateStatic($this->output);
- } catch (LocalizedException $e) {
- // We have to return store mode to previous state in case of error.
- $this->setStoreMode($previousMode);
- throw $e;
- }
- },
- $this->output,
- false
- );
- }
- /**
- * Only lock static resource locations and set store mode, without handling static content
- *
- * @return void
- */
- public function enableProductionModeMinimal()
- {
- $this->setStoreMode(State::MODE_PRODUCTION);
- }
- /**
- * Enable Developer mode
- *
- * @return void
- */
- public function enableDeveloperMode()
- {
- $this->filesystem->cleanupFilesystem(
- [
- DirectoryList::CACHE,
- DirectoryList::GENERATED_CODE,
- DirectoryList::GENERATED_METADATA,
- DirectoryList::TMP_MATERIALIZATION_DIR,
- DirectoryList::STATIC_VIEW,
- ]
- );
- $this->setStoreMode(State::MODE_DEVELOPER);
- }
- /**
- * Enable Default mode.
- *
- * @return void
- */
- public function enableDefaultMode()
- {
- $this->filesystem->cleanupFilesystem(
- [
- DirectoryList::CACHE,
- DirectoryList::GENERATED_CODE,
- DirectoryList::GENERATED_METADATA,
- DirectoryList::TMP_MATERIALIZATION_DIR,
- DirectoryList::STATIC_VIEW,
- ]
- );
- $this->setStoreMode(State::MODE_DEFAULT);
- }
- /**
- * Get current mode information
- *
- * @return string
- * @throws \Exception
- */
- public function getMode()
- {
- $env = $this->reader->load();
- return isset($env[State::PARAM_MODE]) ? $env[State::PARAM_MODE] : null;
- }
- /**
- * Store mode in env.php
- *
- * @param string $mode
- * @return void
- */
- protected function setStoreMode($mode)
- {
- $this->saveAppConfigs($mode);
- $data = [
- ConfigFilePool::APP_ENV => [
- State::PARAM_MODE => $mode
- ]
- ];
- $this->writer->saveConfig($data);
- }
- /**
- * Save application configs while switching mode
- *
- * @param string $mode
- * @return void
- */
- private function saveAppConfigs($mode)
- {
- $configs = $this->configProvider->getConfigs($this->getMode(), $mode);
- foreach ($configs as $path => $value) {
- $this->emulatedAreaProcessor->process(function () use ($path, $value) {
- $this->processorFacadeFactory->create()->processWithLockTarget(
- $path,
- $value,
- ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
- null,
- true
- );
- });
- $this->output->writeln('Config "' . $path . ' = ' . $value . '" has been saved.');
- }
- }
- }
|