Completed
Push — qa-cumulative-ezp-31278-31279-... ( f57b9c...05fe70 )
by
unknown
14:35
created

ComplexConfigProcessor::processComplexSetting()   B

Complexity

Conditions 7
Paths 8

Size

Total Lines 39

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
nc 8
nop 1
dl 0
loc 39
rs 8.3626
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
    private const DEFAULT_NAMESPACE = 'ezsettings';
19
20
    /** @var \eZ\Publish\Core\MVC\ConfigResolverInterface */
21
    private $configResolver;
22
23
    /** @var \eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessService */
24
    private $siteAccessService;
25
26
    public function __construct(
27
        ConfigResolverInterface $configResolver,
28
        SiteAccessService $siteAccessService
29
    ) {
30
        $this->configResolver = $configResolver;
31
        $this->siteAccessService = $siteAccessService;
32
    }
33
34
    public function processComplexSetting(string $setting): string
35
    {
36
        $siteAccessName = $this->siteAccessService->getCurrent()->name;
37
38
        if (!$this->configResolver->hasParameter($setting, null, $siteAccessName)) {
39
            throw new ParameterNotFoundException($setting, null, [$siteAccessName]);
40
        }
41
42
        $complexSettingParser = new ComplexSettingParser();
43
        $settingValue = $this->configResolver->getParameter($setting, null, $siteAccessName);
44
45
        if (!$complexSettingParser->containsDynamicSettings($settingValue)) {
46
            return $settingValue;
47
        }
48
49
        // we kind of need to process this as well, don't we ?
50
        if ($complexSettingParser->isDynamicSetting($settingValue)) {
51
            $parts = $complexSettingParser->parseDynamicSetting($settingValue);
52
53
            return $this->configResolver->getParameter($parts['param'], null, $siteAccessName);
54
        }
55
56
        $value = $settingValue;
57
        foreach ($complexSettingParser->parseComplexSetting($settingValue) as $dynamicSetting) {
58
            $parts = $complexSettingParser->parseDynamicSetting($dynamicSetting);
59
            if (!isset($parts['namespace'])) {
60
                $parts['namespace'] = self::DEFAULT_NAMESPACE;
61
            }
62
            if (!isset($parts['scope'])) {
63
                $parts['scope'] = $siteAccessName;
64
            }
65
66
            $dynamicSettingValue = $this->configResolver->getParameter($parts['param'], $parts['namespace'], $parts['scope']);
67
68
            $value = str_replace($dynamicSetting, $dynamicSettingValue, $value);
69
        }
70
71
        return $value;
72
    }
73
}
74