Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
91.53% covered (success)
91.53%
54 / 59
75.00% covered (warning)
75.00%
3 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
Calldisplay
91.53% covered (success)
91.53%
54 / 59
75.00% covered (warning)
75.00%
3 / 4
19.22
0.00% covered (danger)
0.00%
0 / 1
 readResolvedEntity
100.00% covered (success)
100.00%
19 / 19
100.00% covered (success)
100.00%
1 / 1
5
 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\Zmsdb;
4
5use BO\Zmsentities\Calldisplay as Entity;
6
7/**
8 *
9 * @SuppressWarnings(CouplingBetweenObjects)
10 */
11class Calldisplay extends 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 Scope();
27                $scope = $query->readEntity($entity['id'], $resolveReferences - 1);
28                /* test in zmsapi CalldisplayGet
29                if (! $scope) {
30                    throw new Exception\Calldisplay\ScopeNotFound();
31                }
32                */
33                $scopeList->addEntity($scope);
34            }
35            $calldisplay->scopes = $scopeList;
36        }
37        if ($calldisplay->hasClusterList()) {
38            $clusterList = new \BO\Zmsentities\Collection\ClusterList();
39            foreach ($calldisplay->clusters as $entity) {
40                $query = new Cluster();
41                $cluster = $query->readEntity($entity['id'], $resolveReferences);
42                /* test in zmsapi CalldisplayGet
43                if (! $cluster) {
44                    throw new Exception\Calldisplay\ClusterNotFound();
45                }
46                */
47                $clusterList->addEntity($cluster);
48            }
49            $calldisplay->clusters = $clusterList;
50        }
51        $calldisplay->setServerTime($dateTime->getTimestamp());
52        $calldisplay->organisation = $this->readResolvedOrganisation($calldisplay);
53        $calldisplay->image = $this->readImage($calldisplay);
54        $calldisplay->contact = $this->readContactData($calldisplay);
55        return $calldisplay->withOutClusterDuplicates();
56    }
57
58    public function readResolvedOrganisation(Entity $entity)
59    {
60        $organisation = null;
61        $query = new Organisation();
62        $scope = $entity->getScopeList()->getFirst();
63        $cluster = $entity->getClusterList()->getFirst();
64        if ($scope) {
65            $organisation = $query->readByScopeId($scope->id);
66        } elseif ($cluster) {
67            $organisation = $query->readByClusterId($cluster->id);
68        }
69        return $organisation;
70    }
71
72    public function readImage(Entity $entity)
73    {
74        $name = $entity->getImageName();
75        $image = null;
76        if ($name) {
77            $image = $this->getReader()
78                ->fetchOne((new Query\Calldisplay(Query\Base::SELECT))
79                ->getQueryImage(), ['name' => "$name%"]);
80        }
81        if (! $image) {
82            $image = $this->getReader()
83            ->fetchOne((new Query\Calldisplay(Query\Base::SELECT))
84                ->getQueryImage(), ['name' => "logo.png"]);
85        }
86
87        if (! is_array($image)) {
88            return [
89                'name' => '',
90                'data' => '',
91                'mime' => '',
92            ];
93        }
94
95        $mime = pathinfo($image['name'] ?? '', PATHINFO_EXTENSION);
96        $image['mime'] = ($mime == 'jpg') ? 'jpeg' : $mime;
97        return $image;
98    }
99
100    public function readContactData(Entity $entity)
101    {
102        $contact = new \BO\Zmsentities\Contact();
103        $contactNames = [];
104        if ($entity->hasClusterList()) {
105            foreach ($entity->getClusterList() as $cluster) {
106                $contactNames[] = $cluster->name;
107            }
108        } elseif ($entity->hasScopeList()) {
109            foreach ($entity->getScopeList() as $scope) {
110                $department = (new Department())->readByScopeId($scope->id);
111                $contactNames[] = $department->name;
112            }
113        }
114
115        $contactNames = array_unique($contactNames);
116        $contact->name = count($contactNames) > 1 ? '' : $contactNames[0];
117
118        return $contact;
119    }
120}