Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
6.67% covered (danger)
6.67%
1 / 15
25.00% covered (danger)
25.00%
1 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
OwnerResolver
6.67% covered (danger)
6.67%
1 / 15
25.00% covered (danger)
25.00%
1 / 4
109.38
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 asset
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
6
 nodePath
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
12
 localize
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
30
1<?php
2
3declare(strict_types=1);
4
5namespace Cosray\Richtext;
6
7use Cosray\Assets\Asset;
8use Cosray\Field\Field;
9use Cosray\Field\Owner;
10use Override;
11
12/**
13 * Production resolver backed by a field owner: assets from the
14 * catalog repository, node paths from `url_paths`, locale maps
15 * resolved along the owner's locale fallback chain.
16 */
17final class OwnerResolver implements Resolver
18{
19    public function __construct(
20        private readonly Owner $owner,
21    ) {}
22
23    #[Override]
24    public function asset(string $uid): ?Asset
25    {
26        return $uid === '' ? null : $this->owner->assets()->get($uid);
27    }
28
29    #[Override]
30    public function nodePath(string $uid): ?string
31    {
32        $map = $this->owner->paths()->map($uid);
33
34        if ($map === []) {
35            return null;
36        }
37
38        $path = $this->localize($map);
39
40        return is_string($path) ? $path : null;
41    }
42
43    /** @param array<mixed> $map */
44    #[Override]
45    public function localize(array $map): mixed
46    {
47        $locale = $this->owner->locale();
48
49        while ($locale) {
50            if (
51                ($map[$locale->id] ?? null) !== null
52                && $map[$locale->id] !== ''
53                && $map[$locale->id] !== []
54            ) {
55                return $map[$locale->id];
56            }
57
58            $locale = $locale->fallback();
59        }
60
61        return $map[Field::NEUTRAL_LOCALE] ?? null;
62    }
63}