123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <?php
- /**
- * Application configuration object. Used to access configuration when application is initialized and installed.
- *
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\TestFramework\App;
- use Magento\Framework\App\Config\ScopeCodeResolver;
- use Magento\Framework\App\Config\ScopeConfigInterface;
- use Magento\Framework\DataObject;
- use Magento\TestFramework\ObjectManager;
- /**
- * @inheritdoc
- */
- class Config extends \Magento\Framework\App\Config
- {
- /**
- * @var DataObject[]
- */
- private $data;
- /**
- * @var ScopeCodeResolver
- */
- private $scopeCodeResolver;
- /**
- * Initialize data object with all settings data
- *
- * @param array $data
- * @param string $configType
- * @return void
- */
- private function setData(array $data, $configType)
- {
- $this->data[$configType] = new DataObject($data);
- }
- /**
- * Retrieve Scope Code Resolver
- *
- * @return ScopeCodeResolver
- */
- private function getScopeCodeResolver()
- {
- if (!$this->scopeCodeResolver) {
- $this->scopeCodeResolver = ObjectManager::getInstance()->get(ScopeCodeResolver::class);
- }
- return $this->scopeCodeResolver;
- }
- /**
- * Set config value in the corresponding config scope
- *
- * @param string $path
- * @param mixed $value
- * @param string $scope
- * @param null|string $scopeCode
- * @return void
- */
- public function setValue(
- $path,
- $value,
- $scope = ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
- $scopeCode = null
- ) {
- $result = $this->get('system');
- if ($scope === 'store') {
- $scope = 'stores';
- } elseif ($scope === 'website') {
- $scope = 'websites';
- }
- if (empty($scopeCode)) {
- $scopeCode = $this->getScopeCodeResolver()->resolve($scope, $scopeCode);
- }
- $keys = explode('/', $path);
- if ($scope !== ScopeConfigInterface::SCOPE_TYPE_DEFAULT) {
- $searchKeys = array_merge([$scope, $scopeCode], $keys);
- } else {
- $searchKeys = array_merge([$scope], $keys);
- }
- $this->updateResult($searchKeys, $result, $value);
- $this->setData($result, 'system');
- }
- /**
- * Recursively update results in global variable, which hold configs
- *
- * @param array $keys
- * @param array $result
- * @param mixed $value
- * @return void
- */
- private function updateResult(array $keys, & $result, $value)
- {
- $key = array_shift($keys);
- if (empty($keys)) {
- $result[$key] = $value;
- } else {
- $this->updateResult($keys, $result[$key], $value);
- }
- }
- /**
- * Flush all muted settings
- *
- * @return void
- */
- public function clean()
- {
- $this->data = null;
- $this->scopeCodeResolver = null;
- parent::clean();
- }
- /**
- * @inheritdoc
- */
- public function get($configType, $path = null, $default = null)
- {
- $path = $path === null ? '' : $path;
- if (!isset($this->data[$configType]) || $this->data[$configType]->getData($path) === null) {
- return parent::get($configType, $path, $default);
- }
- return $this->data[$configType]->getData($path);
- }
- }
|