Completed
Push — EZP-31267-io-config-resolver ( f10ddb )
by
unknown
18:38
created

ComplexConfigProcessor::processComplexSetting()   B

Complexity

Conditions 9
Paths 11

Size

Total Lines 46

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 9
nc 11
nop 1
dl 0
loc 46
rs 7.6226
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
5
 * @license For full copyright and license information view LICENSE file distributed with this source code.
6
 */
7
declare(strict_types=1);
8
9
namespace eZ\Bundle\EzPublishCoreBundle\SiteAccess\Config;
10
11
use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\ComplexSettings\ComplexSettingParser;
12
use eZ\Publish\Core\MVC\Exception\ParameterNotFoundException;
13
use eZ\Publish\Core\MVC\ConfigResolverInterface;
14
use eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessService;
15
16
final class ComplexConfigProcessor
17
{
18
    /** @var \eZ\Publish\Core\MVC\ConfigResolverInterface */
19
    private $configResolver;
20
21
    /** @var \eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessService */
22
    private $siteAccessService;
23
24
    public function __construct(
25
        ConfigResolverInterface $configResolver,
26
        SiteAccessService $siteAccessService
27
    ) {
28
        $this->configResolver = $configResolver;
29
        $this->siteAccessService = $siteAccessService;
30
    }
31
32
    public function processComplexSetting(string $setting): string
33
    {
34
        $siteAccessName = $this->siteAccessService->getCurrent()->name;
35
36
        $complexSettingParser = new ComplexSettingParser();
37
38
        if (!$this->configResolver->hasParameter($setting, null, $siteAccessName)) {
39
            throw new ParameterNotFoundException($setting, null, [$siteAccessName]);
40
        }
41
42
        $settingValue = $this->configResolver->getParameter($setting, null, $siteAccessName);
43
44
        if (!$complexSettingParser->containsDynamicSettings($settingValue)) {
45
            return $settingValue;
46
        }
47
48
        // we kind of need to process this as well, don't we ?
49
        if ($complexSettingParser->isDynamicSetting($settingValue)) {
50
            $parts = $complexSettingParser->parseDynamicSetting($settingValue);
51
            if (!isset($parts['namespace'])) {
52
                $parts['namespace'] = 'ezsettings';
53
            }
54
            if (!isset($parts['scope'])) {
55
                $parts['scope'] = $siteAccessName;
56
            }
57
58
            return $this->configResolver->getParameter($parts['param'], null, $siteAccessName);
59
        }
60
61
        $value = $settingValue;
62
        foreach ($complexSettingParser->parseComplexSetting($settingValue) as $dynamicSetting) {
63
            $parts = $complexSettingParser->parseDynamicSetting($dynamicSetting);
64
            if (!isset($parts['namespace'])) {
65
                $parts['namespace'] = 'ezsettings';
66
            }
67
            if (!isset($parts['scope'])) {
68
                $parts['scope'] = $siteAccessName;
69
            }
70
71
            $dynamicSettingValue = $this->configResolver->getParameter($parts['param'], $parts['namespace'], $parts['scope']);
72
73
            $value = str_replace($dynamicSetting, $dynamicSettingValue, $value);
74
        }
75
76
        return $value;
77
    }
78
}
79