Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
80.00% covered (warning)
80.00%
32 / 40
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
ProcessListByClusterAndDate
80.00% covered (warning)
80.00%
32 / 40
0.00% covered (danger)
0.00%
0 / 1
8.51
0.00% covered (danger)
0.00%
0 / 1
 readResponse
80.00% covered (warning)
80.00%
32 / 40
0.00% covered (danger)
0.00%
0 / 1
8.51
1<?php
2
3/**
4 * @package ZMS API
5 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
6 **/
7
8namespace BO\Zmsapi;
9
10use BO\Slim\Render;
11use BO\Mellon\Validator;
12use BO\Zmsdb\Cluster as Query;
13use BO\Zmsdb\ProcessStatusArchived;
14use BO\Zmsentities\Collection\ProcessList as ProcessListCollection;
15use BO\Zmsentities\Collection\QueueList;
16
17class ProcessListByClusterAndDate extends BaseController
18{
19    /**
20     * @SuppressWarnings(Param)
21     * @return String
22     */
23    public function readResponse(
24        \Psr\Http\Message\RequestInterface $request,
25        \Psr\Http\Message\ResponseInterface $response,
26        array $args
27    ) {
28        (new Helper\User($request))->checkRights('basic');
29        $resolveReferences = Validator::param('resolveReferences')->isNumber()->setDefault(0)->getValue();
30        $showWeek = Validator::param('showWeek')->isNumber()->setDefault(0)->getValue();
31        $dateTime = new \BO\Zmsentities\Helper\DateTime($args['date']);
32        $dateTime = $dateTime->modify(\App::$now->format('H:i'));
33        $dates = [$dateTime];
34
35        if ($showWeek) {
36            $dates = [];
37            $startDate = clone $dateTime->modify('Monday this week');
38            $endDate = clone $dateTime->modify('Sunday this week');
39
40            while ($startDate <= $endDate) {
41                $dates[] = $startDate;
42                $startDate = $startDate->modify('+1 day');
43            }
44        }
45
46        $query = new Query();
47        $cluster = $query->readEntity($args['id'], 0);
48        if (! $cluster) {
49            throw new Exception\Cluster\ClusterNotFound();
50        }
51
52        $queueList = new QueueList();
53        foreach ($dates as $date) {
54            $dateQueueList = $query->readQueueList(
55                $cluster->id,
56                $date,
57                $resolveReferences ? $resolveReferences + 1 : 1
58            );
59
60            if (! $dateQueueList) {
61                continue;
62            }
63
64            /** @var QueueList $dateQueueList */
65            $queueList->addList($dateQueueList);
66        }
67
68        $allArchivedProcesses = new ProcessListCollection();
69        $scopeIds = $cluster->scopes->getIds();
70
71        $archivedProcesses =
72            (new ProcessStatusArchived())->readListByScopesAndDates($scopeIds, $dates);
73
74        if ($archivedProcesses instanceof ProcessListCollection) {
75            $allArchivedProcesses = $archivedProcesses;
76        } else {
77            error_log("Expected ProcessListCollection, received " . gettype($archivedProcesses));
78        }
79
80        $message = Response\Message::create($request);
81        $message->data = $queueList->toProcessList()->withResolveLevel($resolveReferences);
82
83        // Add all archived processes to the response data
84        $message->data->addData($allArchivedProcesses);
85
86        $response = Render::withLastModified($response, time(), '0');
87        $response = Render::withJson($response, $message, 200);
88        return $response;
89    }
90}