mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
138 lines
3.9 KiB
PHP
138 lines
3.9 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Deploy\Model;
|
|
|
|
use Magento\Config\App\Config\Type\System;
|
|
use Magento\Framework\App\Config\ScopeConfigInterface;
|
|
use Magento\Framework\App\Config\Value;
|
|
use Magento\Framework\App\DeploymentConfig\Writer;
|
|
use Magento\Framework\App\ObjectManager;
|
|
use Magento\Framework\Config\File\ConfigFilePool;
|
|
use Magento\Framework\Stdlib\ArrayManager;
|
|
use Magento\Config\Model\PreparedValueFactory;
|
|
|
|
/**
|
|
* Class ConfigWriter. Save configuration values into config file.
|
|
*/
|
|
class ConfigWriter
|
|
{
|
|
/**
|
|
* @var Writer
|
|
*/
|
|
private $writer;
|
|
|
|
/**
|
|
* @var ArrayManager
|
|
*/
|
|
private $arrayManager;
|
|
|
|
/**
|
|
* Creates a prepared instance of Value.
|
|
*
|
|
* @var PreparedValueFactory
|
|
*/
|
|
private $preparedValueFactory;
|
|
|
|
/**
|
|
* @param Writer $writer
|
|
* @param ArrayManager $arrayManager
|
|
* @param PreparedValueFactory|null $valueFactory Creates a prepared instance of Value
|
|
*/
|
|
public function __construct(
|
|
Writer $writer,
|
|
ArrayManager $arrayManager,
|
|
PreparedValueFactory $valueFactory = null
|
|
) {
|
|
$this->writer = $writer;
|
|
$this->arrayManager = $arrayManager;
|
|
$this->preparedValueFactory = $valueFactory ?: ObjectManager::getInstance()->get(PreparedValueFactory::class);
|
|
}
|
|
|
|
/**
|
|
* Save given list of configuration values into config file.
|
|
*
|
|
* @param array $values the configuration values (path-value pairs) to be saved.
|
|
* @param string $scope scope in which configuration would be saved.
|
|
* @param string|null $scopeCode
|
|
* @return void
|
|
*/
|
|
public function save(array $values, $scope = ScopeConfigInterface::SCOPE_TYPE_DEFAULT, $scopeCode = null)
|
|
{
|
|
$config = [];
|
|
$pathPrefix = $this->getPathPrefix($scope, $scopeCode);
|
|
|
|
$values = array_filter(
|
|
$values,
|
|
function ($value) {
|
|
return $value !== null;
|
|
}
|
|
);
|
|
|
|
foreach ($values as $configPath => $configValue) {
|
|
$fullConfigPath = $pathPrefix . $configPath;
|
|
$backendModel = $this->preparedValueFactory->create($configPath, $configValue, $scope, $scopeCode);
|
|
|
|
if ($backendModel instanceof Value) {
|
|
$backendModel->validateBeforeSave();
|
|
$backendModel->beforeSave();
|
|
$configValue = $backendModel->getValue();
|
|
$backendModel->afterSave();
|
|
}
|
|
|
|
$config = $this->setConfig($config, $fullConfigPath, $configValue);
|
|
}
|
|
|
|
$this->writer->saveConfig(
|
|
[ConfigFilePool::APP_ENV => $config]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Apply configuration value into configuration array by given path.
|
|
* Ignore values that equal to null.
|
|
*
|
|
* @param array $config
|
|
* @param string $configPath
|
|
* @param string $configValue
|
|
* @return array
|
|
*/
|
|
private function setConfig(array $config, $configPath, $configValue)
|
|
{
|
|
if ($configValue === null) {
|
|
return $config;
|
|
}
|
|
|
|
$config = $this->arrayManager->set(
|
|
$configPath,
|
|
$config,
|
|
$configValue
|
|
);
|
|
|
|
return $config;
|
|
}
|
|
|
|
/**
|
|
* Generate config prefix from given $scope and $scopeCode.
|
|
* If $scope isn't equal to 'default' and $scopeCode isn't empty put $scopeCode into prefix path,
|
|
* otherwise ignore $scopeCode.
|
|
*
|
|
* @param string $scope
|
|
* @param string $scopeCode
|
|
* @return string
|
|
*/
|
|
private function getPathPrefix($scope, $scopeCode)
|
|
{
|
|
$pathPrefixes = [System::CONFIG_TYPE, $scope];
|
|
if ($scope !== ScopeConfigInterface::SCOPE_TYPE_DEFAULT
|
|
&& !empty($scopeCode)
|
|
) {
|
|
$pathPrefixes[] = $scopeCode;
|
|
}
|
|
|
|
return implode('/', $pathPrefixes) . '/';
|
|
}
|
|
}
|