Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
80.00% |
32 / 40 |
|
0.00% |
0 / 1 |
CRAP | |
0.00% |
0 / 1 |
ProcessListByClusterAndDate | |
80.00% |
32 / 40 |
|
0.00% |
0 / 1 |
8.51 | |
0.00% |
0 / 1 |
readResponse | |
80.00% |
32 / 40 |
|
0.00% |
0 / 1 |
8.51 |
1 | <?php |
2 | |
3 | /** |
4 | * @package ZMS API |
5 | * @copyright BerlinOnline Stadtportal GmbH & Co. KG |
6 | **/ |
7 | |
8 | namespace BO\Zmsapi; |
9 | |
10 | use BO\Slim\Render; |
11 | use BO\Mellon\Validator; |
12 | use BO\Zmsdb\Cluster as Query; |
13 | use BO\Zmsdb\ProcessStatusArchived; |
14 | use BO\Zmsentities\Collection\ProcessList as ProcessListCollection; |
15 | use BO\Zmsentities\Collection\QueueList; |
16 | |
17 | class 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 | } |