Completed
Push — master ( 92edcc...696b01 )
by Łukasz
27:46 queued 14:09
created

StaticSiteAccessProvider::createSiteAccess()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 1
dl 0
loc 12
rs 9.8666
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\Publish\Core\MVC\Symfony\SiteAccess\Provider;
10
11
use eZ\Publish\Core\Base\Exceptions\NotFoundException;
12
use eZ\Publish\Core\MVC\Symfony\SiteAccess;
13
use eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessProviderInterface;
14
use eZ\Publish\Core\MVC\Symfony\SiteAccessGroup;
15
use Traversable;
16
17
/**
18
 * @internal For internal use only, do not rely on this class.
19
 *           Be aware this should be regarded as experimental feature.
20
 *           As in, method signatures and behavior might change in the future.
21
 */
22
final class StaticSiteAccessProvider implements SiteAccessProviderInterface
23
{
24
    /** @var string[] */
25
    private $siteAccessList;
26
27
    /** @var string[] */
28
    private $groupsBySiteAccess;
29
30
    /**
31
     * @param string[] $siteAccessList
32
     * @param string[] $groupsBySiteAccess
33
     */
34
    public function __construct(
35
        array $siteAccessList,
36
        array $groupsBySiteAccess = []
37
    ) {
38
        $this->siteAccessList = $siteAccessList;
39
        $this->groupsBySiteAccess = $groupsBySiteAccess;
40
    }
41
42
    public function getSiteAccesses(): Traversable
43
    {
44
        foreach ($this->siteAccessList as $name) {
45
            yield $this->createSiteAccess($name);
46
        }
47
48
        yield from [];
49
    }
50
51
    public function isDefined(string $name): bool
52
    {
53
        return \in_array($name, $this->siteAccessList, true);
54
    }
55
56
    public function getSiteAccess(string $name): SiteAccess
57
    {
58
        if ($this->isDefined($name)) {
59
            return $this->createSiteAccess($name);
60
        }
61
62
        throw new NotFoundException('Site Access', $name);
63
    }
64
65
    private function createSiteAccess(string $name): SiteAccess
66
    {
67
        $siteAccess = new SiteAccess($name, SiteAccess::DEFAULT_MATCHING_TYPE, null, self::class);
68
        $siteAccess->groups = array_map(
69
            static function ($groupName) {
70
                return new SiteAccessGroup($groupName);
71
            },
72
            $this->groupsBySiteAccess[$name] ?? []
73
        );
74
75
        return $siteAccess;
76
    }
77
}
78