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