HierarchicalSerializer::serialize()   D
last analyzed

Complexity

Conditions 9
Paths 36

Size

Total Lines 44
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 32
CRAP Score 9

Importance

Changes 0
Metric Value
dl 0
loc 44
ccs 32
cts 32
cp 1
rs 4.909
c 0
b 0
f 0
cc 9
eloc 26
nc 36
nop 2
crap 9
1
<?php
2
3
namespace leandrogehlen\exporter\serializers;
4
5
/**
6
 * Formats the given data into an column size or separator char response content.
7
 *
8
 * @author Leandro Guindani Gehlen <[email protected]>
9
 */
10
abstract class HierarchicalSerializer extends Serializer
11
{
12
13
    /**
14
     * @inheritdoc
15
     */
16 2
    public function serialize($sessions, $master = [])
17
    {
18 2
        $result = [];
19 2
        foreach ($sessions as $session) {
20 2
            if ($session->visible) {
21 2
                $data = [];
22
23 2
                $provider = $this->exporter->findProvider($session->provider);
24 2
                $rows = $this->executeProvider($provider, $master);
25
26 2
                $owner = $session->owner;
27 2
                $sameProvider = ($owner !== null) ? ($session->provider == $owner->provider) : false;
28
29 2
                foreach ($rows as $row) {
30 2
                    $record = [];
31
32 2
                    if ($sameProvider) {
33 2
                        $row = $master;
34 2
                    }
35
36 2
                    foreach ($session->columns as $column) {
37 2
                        $value = $this->extractValue($column, $row);
38 2
                        $record[$column->name] = $value;
39 2
                    }
40
41 2
                    $record = $this->beforeSerializeRow($record, $session);
42 2
                    $children = $this->serialize($session->sessions, $row);
43 2
                    if (!empty($children)) {
44 2
                        $record = array_merge($record, $children);
45 2
                    }
46
47 2
                    if ($sameProvider) {
48 2
                        $data = $record;
49 2
                        break;
50
                    }
51
52 2
                    $data[] = $record;
53 2
                }
54
55 2
                $result[$session->name] = $data;
56 2
            }
57 2
        }
58 2
        return $result;
59
    }
60
}
61