Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
97.78% covered (success)
97.78%
88 / 90
33.33% covered (danger)
33.33%
1 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ProcessSearch
97.78% covered (success)
97.78%
88 / 90
33.33% covered (danger)
33.33%
1 / 3
21
0.00% covered (danger)
0.00%
0 / 1
 readResponse
100.00% covered (success)
100.00%
74 / 74
100.00% covered (success)
100.00%
1 / 1
10
 filterProcessListForUserRights
85.71% covered (warning)
85.71%
6 / 7
0.00% covered (danger)
0.00%
0 / 1
4.05
 filterLogListForUserRights
88.89% covered (warning)
88.89%
8 / 9
0.00% covered (danger)
0.00%
0 / 1
7.07
1<?php
2
3/**
4 * @package Zmsadmin
5 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
6 **/
7
8namespace BO\Zmsadmin;
9
10use BO\Zmsentities\Collection\LogList;
11use BO\Zmsentities\Collection\ProcessList;
12use DateTime;
13
14/**
15  * Handle requests concerning services
16  *
17  */
18class ProcessSearch extends BaseController
19{
20    /**
21     * @SuppressWarnings(Param)
22     * @return \Psr\Http\Message\ResponseInterface
23     */
24    #[\Override]
25    public function readResponse(
26        \Psr\Http\Message\RequestInterface $request,
27        \Psr\Http\Message\ResponseInterface $response,
28        array $args
29    ): \Psr\Http\Message\ResponseInterface {
30        $workstation = \App::$http->readGetResult('/workstation/', ['resolveReferences' => 2])->getEntity();
31        $validator = $request->getAttribute('validator');
32        $queryString = $validator->getParameter('query')
33            ->isString()
34            ->getValue();
35        $page = $validator->getParameter('page')
36            ->isNumber()
37            ->setDefault(1)
38            ->getValue();
39        $service = $validator->getParameter('service')
40            ->isString()
41            ->setDefault('')
42            ->getValue();
43        $provider = $validator->getParameter('provider')
44            ->isString()
45            ->setDefault('')
46            ->getValue();
47        $date = $validator->getParameter('date')
48            ->isString()
49            ->setDefault(null)
50            ->getValue();
51        $userAction = $validator->getParameter('user')
52            ->isNumber()
53            ->setDefault(0)
54            ->getValue();
55        $perPage = $validator->getParameter('perPage')
56            ->isNumber()
57            ->setDefault(100)
58            ->getValue();
59        $processList = !empty($queryString) ? \App::$http->readGetResult('/process/search/', [
60            'query' => $queryString,
61            'resolveReferences' => 1,
62        ])->getCollection() : new ProcessList();
63
64        $scopeIds = $workstation->getUseraccount()->getDepartmentList()->getUniqueScopeList()->getIds();
65        if (!empty($processList) && !$workstation->hasSuperUseraccount()) {
66            $processList = $this->filterProcessListForUserRights($processList, $scopeIds);
67        }
68
69        if ($workstation->hasAuditAccount()) {
70            $queryString = urlencode($queryString);
71            $logList = \App::$http
72                ->readGetResult("/log/process/", [
73                        'searchQuery' => $queryString,
74                        'page' => $page,
75                        'perPage' => $perPage,
76                        'service' => $service ? trim($service) : null,
77                        'provider' => $provider ? trim($provider) : null,
78                        'userAction' => (int) $userAction,
79                        'date' => $date
80                    ])
81                ->getCollection();
82            $logList = $this->filterLogListForUserRights($logList, $scopeIds);
83        }
84
85        $processList = $processList ?? new \BO\Zmsentities\Collection\ProcessList();
86        $processListOther = new \BO\Zmsentities\Collection\ProcessList();
87        if (!$workstation->hasSuperUseraccount()) {
88            $processListOther = $processList->withOutScopeId($workstation->scope['id']);
89            $processList = $processList->withScopeId($workstation->scope['id']);
90        }
91        return \BO\Slim\Render::withHtml(
92            $response,
93            'page/search.twig',
94            array(
95                'title' => 'Suche',
96                'service' => $service ? trim($service) : null,
97                'provider' => $provider ? trim($provider) : null,
98                'userAction' => (int) $userAction,
99                'date' => $date,
100                'page' => $page,
101                'perPage' => $perPage,
102                'workstation' => $workstation,
103                'processList' => $processList,
104                'processListOther' => $processListOther,
105                'logList' => $logList ?? [],
106                'searchProcessQuery' => urldecode($queryString),
107                'menuActive' => 'search'
108            )
109        );
110    }
111
112    private function filterProcessListForUserRights(?ProcessList $processList, array $scopeIds)
113    {
114        if (empty($processList)) {
115            return new ProcessList();
116        }
117
118        $list = new ProcessList();
119
120        foreach ($processList as $process) {
121            if (in_array($process->scope->id, $scopeIds)) {
122                $list->addEntity(clone $process);
123            }
124        }
125
126        return $list;
127    }
128
129    private function filterLogListForUserRights(?LogList $logList, array $scopeIds)
130    {
131        if (!isset($logList) || !$logList) {
132            $logList = new LogList();
133        }
134
135        $list = new LogList();
136
137        foreach ($logList as $log) {
138            $data = isset($log->data) ? json_decode($log->data, true) : null;
139            $log->data = $data;
140
141            if (isset($log->scope_id) && in_array($log->scope_id, $scopeIds)) {
142                $list->addEntity(clone $log);
143            }
144        }
145
146        return $list;
147    }
148}