Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
72.50% covered (warning)
72.50%
29 / 40
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ProcessDelete
72.50% covered (warning)
72.50%
29 / 40
66.67% covered (warning)
66.67%
2 / 3
14.99
0.00% covered (danger)
0.00%
0 / 1
 readResponse
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
1 / 1
5
 writeMails
8.33% covered (danger)
8.33%
1 / 12
0.00% covered (danger)
0.00%
0 / 1
16.32
 testProcessData
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
3
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\Zmsdb\Process;
12use BO\Zmsdb\Mail;
13use BO\Zmsdb\Config;
14use BO\Mellon\Validator;
15
16/**
17 * @SuppressWarnings(CouplingBetweenObjects)
18 */
19class ProcessDelete 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    ) {
31        $workstation = (new Helper\User($request))->readWorkstation();
32        \BO\Zmsdb\Connection\Select::getWriteConnection();
33        $process = (new Process())->readEntity($args['id'], new \BO\Zmsdb\Helper\NoAuth(), 2);
34        $this->testProcessData($process, $args['authKey']);
35        if ('reserved' == $process->status) {
36            if (!(new Process())->writeBlockedEntity($process, false, $workstation->getUseraccount())) {
37                throw new Exception\Process\ProcessDeleteFailed(); // @codeCoverageIgnore
38            }
39            $processDeleted = $process;
40        } else {
41            (new \BO\Zmsdb\OverviewCalendar())->perform(
42                \BO\Zmsdb\Query\OverviewCalendar::CANCEL_BY_PROCESS,
43                ['process_id' => (int)$process->id]
44            );
45
46            $processDeleted = (new Process())->writeCanceledEntity(
47                $args['id'],
48                $args['authKey'],
49                null,
50                $workstation->getUseraccount()
51            );
52            if (!$processDeleted || !$processDeleted->hasId()) {
53                throw new Exception\Process\ProcessDeleteFailed(); // @codeCoverageIgnore
54            }
55        }
56        $this->writeMails($request, $process);
57        $message = Response\Message::create($request);
58        $message->data = $processDeleted;
59
60        $response = Render::withLastModified($response, time(), '0');
61        $response = Render::withJson($response, $message->setUpdatedMetaData(), $message->getStatuscode());
62        return $response;
63    }
64
65    protected function writeMails($request, $process)
66    {
67        if ($process->hasScopeAdmin() && $process->sendAdminMailOnDeleted() && $process->getStatus() !== 'blocked') {
68            $authority = $request->getUri()->getAuthority();
69            $validator = $request->getAttribute('validator');
70            $initiator = $validator->getParameter('initiator')
71                ->isString()
72                ->setDefault("$authority API-User")
73                ->getValue();
74            $config = (new Config())->readEntity();
75            $mail = (new \BO\Zmsentities\Mail())
76                ->setTemplateProvider(new \BO\Zmsdb\Helper\MailTemplateProvider($process))
77                ->toResolvedEntity($process, $config, 'deleted', $initiator);
78            (new Mail())->writeInQueueWithAdmin($mail, \App::$now);
79        }
80    }
81
82    protected function testProcessData($process, $authKey)
83    {
84        if (!$process) {
85            throw new Exception\Process\ProcessNotFound();
86        }
87        if ($process['authKey'] !== $authKey) {
88            throw new Exception\Process\AuthKeyMatchFailed();
89        }
90    }
91}