SubThemeUnserializer   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 44
rs 10
c 0
b 0
f 0
wmc 7

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A unserializeContextArray() 0 12 4
A createFromArray() 0 8 2
1
<?php
2
3
4
namespace TheCodingMachine\CMS\Serializer;
5
6
7
use TheCodingMachine\CMS\Theme\SubThemeDescriptor;
8
use TheCodingMachine\CMS\Theme\ThemeDescriptorInterface;
9
use TheCodingMachine\CMS\Theme\TwigThemeDescriptor;
10
11
class SubThemeUnserializer implements ThemeUnserializerInterface
12
{
13
    /**
14
     * @var BlockUnserializer
15
     */
16
    private $blockUnserializer;
17
    /**
18
     * @var AggregateThemeUnserializer
19
     */
20
    private $aggregateThemeUnserializer;
21
22
    public function __construct(BlockUnserializer $blockUnserializer, AggregateThemeUnserializer $aggregateThemeUnserializer)
23
    {
24
25
        $this->blockUnserializer = $blockUnserializer;
26
        $this->aggregateThemeUnserializer = $aggregateThemeUnserializer;
27
    }
28
29
    public function createFromArray(array $arr): ThemeDescriptorInterface
30
    {
31
        $additionalContext = $arr['additionalContext'];
32
        foreach ($additionalContext as $key => &$value) {
33
            $value = $this->unserializeContextArray($value);
34
        }
35
36
        return new SubThemeDescriptor($this->aggregateThemeUnserializer->createFromArray($arr['theme']), $additionalContext);
37
    }
38
39
    /**
40
     * @param mixed $value
41
     * @return mixed
42
     */
43
    private function unserializeContextArray($value)
44
    {
45
        if (is_array($value)) {
46
            if (isset($value['context'])) {
47
                $value = $this->blockUnserializer->createFromArray($value);
48
            } else {
49
                foreach ($value as &$item) {
50
                    $item = $this->unserializeContextArray($item);
51
                }
52
            }
53
        }
54
        return $value;
55
    }
56
}
57