Situations::export()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 18
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 11
c 1
b 0
f 0
dl 0
loc 18
ccs 14
cts 14
cp 1
rs 9.9
cc 2
nc 2
nop 1
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Swis\Melvin\Api;
6
7
use Swis\Melvin\Client;
8
use Swis\Melvin\Parsers\AttachmentParser;
9
use Swis\Melvin\Parsers\ContactParser;
10
use Swis\Melvin\Parsers\DetourParser;
11
use Swis\Melvin\Parsers\GeometryParser;
12
use Swis\Melvin\Parsers\PeriodParser;
13
use Swis\Melvin\Parsers\RestrictionParser;
14
use Swis\Melvin\Parsers\SituationParser;
15
use Swis\Melvin\Parsers\UrlParser;
16
use Swis\Melvin\SituationFilterParameters;
17
18
class Situations extends AbstractApi
19
{
20
    protected SituationParser $situationParser;
21
22 6
    public function __construct(Client $client, ?SituationParser $situationParser = null)
23
    {
24 6
        parent::__construct($client);
25
26 6
        $geometryParser = new GeometryParser();
27 6
        $this->situationParser = $situationParser ?? new SituationParser(
28 6
            $geometryParser,
29 6
            new PeriodParser(),
30 6
            new AttachmentParser(),
31 6
            new RestrictionParser($geometryParser),
32 6
            new DetourParser($geometryParser),
33 6
            new ContactParser(),
34 6
            new UrlParser()
35 3
        );
36 3
    }
37
38
    /**
39
     * @return \Swis\Melvin\Models\Situation[]
40
     */
41 6
    public function export(?SituationFilterParameters $parameters = null): array
42
    {
43 6
        $result = $this->getHttpClient()->request('POST', 'export', $parameters);
44
45 6
        $situations = [];
46 6
        foreach ($result->features as $feature) {
47 6
            $situations[$feature->id][str_replace('EXTERNAL_', '', $feature->properties->type)][] = $feature;
48
        }
49
50 6
        return array_map(
51 6
            function (array $situation) {
52 6
                return $this->situationParser->parse(
53 6
                    $situation['SITUATION'][0],
54 6
                    $situation['RESTRICTION'] ?? [],
55 6
                    $situation['DETOUR'] ?? []
56 3
                );
57 6
            },
58 6
            array_values($situations)
59 3
        );
60
    }
61
}
62