Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
81.16% covered (warning)
81.16%
56 / 69
50.00% covered (danger)
50.00%
2 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
Calldisplay
81.16% covered (warning)
81.16%
56 / 69
50.00% covered (danger)
50.00%
2 / 4
23.95
0.00% covered (danger)
0.00%
0 / 1
 readResolvedEntity
72.41% covered (warning)
72.41%
21 / 29
0.00% covered (danger)
0.00%
0 / 1
8.03
 readResolvedOrganisation
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
3
 readImage
73.68% covered (warning)
73.68%
14 / 19
0.00% covered (danger)
0.00%
0 / 1
5.46
 readContactData
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
6
1<?php
2
3namespace BO\Zmsbackend\Calldisplay\Service;
4
5use BO\Zmsentities\Calldisplay as Entity;
6
7/**
8 *
9 * @SuppressWarnings(CouplingBetweenObjects)
10 */
11class Calldisplay extends \BO\Zmsbackend\Base
12{
13    /**
14     * read Ticketprinter by comma separated buttonlist
15     *
16     * @param \BO\Zmsentities\Ticketprinter $ticketprinter
17     * @param \DateTimeInterface $now
18     *
19     * @return Entity
20     */
21    public function readResolvedEntity(Entity $calldisplay, \DateTimeImmutable $dateTime, $resolveReferences = 0)
22    {
23        if ($calldisplay->hasScopeList()) {
24            $scopeList = new \BO\Zmsentities\Collection\ScopeList();
25            foreach ($calldisplay->scopes as $entity) {
26                $query = new \BO\Zmsbackend\Scope\Service\Scope();
27                $scope = $query->readEntity($entity['id'], $resolveReferences - 1);
28                if (! $scope) {
29                    \App::$log->warning('Calldisplay: skip missing scope id while resolving', [
30                        'scopeId' => $entity['id'],
31                    ]);
32                    continue;
33                }
34                $scopeList->addEntity($scope);
35            }
36            $calldisplay->scopes = $scopeList;
37        }
38        if ($calldisplay->hasClusterList()) {
39            $clusterList = new \BO\Zmsentities\Collection\ClusterList();
40            foreach ($calldisplay->clusters as $entity) {
41                $query = new \BO\Zmsbackend\Cluster\Service\Cluster();
42                $cluster = $query->readEntity($entity['id'], $resolveReferences);
43                if (! $cluster) {
44                    \App::$log->warning('Calldisplay: skip missing cluster id while resolving', [
45                        'clusterId' => $entity['id'],
46                    ]);
47                    continue;
48                }
49                $clusterList->addEntity($cluster);
50            }
51            $calldisplay->clusters = $clusterList;
52        }
53        $calldisplay->setServerTime($dateTime->getTimestamp());
54        $calldisplay->organisation = $this->readResolvedOrganisation($calldisplay);
55        $calldisplay->image = $this->readImage($calldisplay);
56        $calldisplay->contact = $this->readContactData($calldisplay);
57        return $calldisplay->withOutClusterDuplicates();
58    }
59
60    public function readResolvedOrganisation(Entity $entity)
61    {
62        $organisation = null;
63        $query = new \BO\Zmsbackend\Organisation\Service\Organisation();
64        $scope = $entity->getScopeList()->getFirst();
65        $cluster = $entity->getClusterList()->getFirst();
66        if ($scope) {
67            $organisation = $query->readByScopeId($scope->id);
68        } elseif ($cluster) {
69            $organisation = $query->readByClusterId($cluster->id);
70        }
71        return $organisation;
72    }
73
74    public function readImage(Entity $entity)
75    {
76        $name = $entity->getImageName();
77        $image = null;
78        if ($name) {
79            $image = $this->getReader()
80                ->fetchOne((new \BO\Zmsbackend\Calldisplay\Repository\Calldisplay(\BO\Zmsbackend\Query\Base::SELECT))
81                ->getQueryImage(), ['name' => "$name%"]);
82        }
83        if (! $image) {
84            $image = $this->getReader()
85            ->fetchOne((new \BO\Zmsbackend\Calldisplay\Repository\Calldisplay(\BO\Zmsbackend\Query\Base::SELECT))
86                ->getQueryImage(), ['name' => "logo.png"]);
87        }
88
89        if (! is_array($image)) {
90            return [
91                'name' => '',
92                'data' => '',
93                'mime' => '',
94            ];
95        }
96
97        $mime = pathinfo($image['name'] ?? '', PATHINFO_EXTENSION);
98        $image['mime'] = ($mime == 'jpg') ? 'jpeg' : $mime;
99        return $image;
100    }
101
102    public function readContactData(Entity $entity)
103    {
104        $contact = new \BO\Zmsentities\Contact();
105        $contactNames = [];
106        if ($entity->hasClusterList()) {
107            foreach ($entity->getClusterList() as $cluster) {
108                $contactNames[] = $cluster->name;
109            }
110        } elseif ($entity->hasScopeList()) {
111            foreach ($entity->getScopeList() as $scope) {
112                $department = (new \BO\Zmsbackend\Department\Service\Department())->readByScopeId($scope->id);
113                $contactNames[] = $department->name;
114            }
115        }
116
117        $contactNames = array_unique($contactNames);
118        $contact->name = count($contactNames) > 1 ? '' : $contactNames[0];
119
120        return $contact;
121    }
122}