SubThemeUnserializer::unserializeContextArray()   A
last analyzed

Complexity

Conditions 4
Paths 3

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 7
nc 3
nop 1
dl 0
loc 12
rs 9.2
c 0
b 0
f 0
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