Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 45
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
UpdateMyPanini2024Endpoint
0.00% covered (danger)
0.00%
0 / 45
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 1
 handle
0.00% covered (danger)
0.00%
0 / 45
0.00% covered (danger)
0.00%
0 / 1
56
1<?php
2
3namespace Olz\Apps\Panini2024\Endpoints;
4
5use Olz\Api\OlzTypedEndpoint;
6use Olz\Apps\Panini2024\Panini2024Constants;
7use Olz\Entity\Panini2024\Panini2024Picture;
8use PhpTypeScriptApi\HttpError;
9
10/**
11 * @phpstan-type OlzPanini2024PictureData array{
12 *   id?: ?int<1, max>,
13 *   line1: non-empty-string,
14 *   line2: non-empty-string,
15 *   residence: non-empty-string,
16 *   uploadId: non-empty-string,
17 *   onOff: bool,
18 *   info1: non-empty-string,
19 *   info2: non-empty-string,
20 *   info3: non-empty-string,
21 *   info4: non-empty-string,
22 *   info5: non-empty-string,
23 * }
24 *
25 * @extends OlzTypedEndpoint<
26 *   array{data: OlzPanini2024PictureData},
27 *   array{status: 'OK'|'ERROR'}
28 * >
29 */
30class UpdateMyPanini2024Endpoint extends OlzTypedEndpoint {
31    protected function handle(mixed $input): mixed {
32        $this->checkPermission('any');
33
34        $current_user = $this->authUtils()->getCurrentUser();
35        $panini_repo = $this->entityManager()->getRepository(Panini2024Picture::class);
36        $now_datetime = new \DateTime($this->dateUtils()->getIsoNow());
37        $data_path = $this->envUtils()->getDataPath();
38        $deadline_datetime = new \DateTime(Panini2024Constants::UPDATE_DEADLINE);
39
40        $has_admin_access = $this->authUtils()->hasPermission('all');
41        if ($now_datetime > $deadline_datetime && !$has_admin_access) {
42            throw new HttpError(400, "Zu spät!");
43        }
44
45        $input_data = $input['data'];
46        $id = $input_data['id'] ?? null;
47        if ($id) {
48            $picture = $panini_repo->findOneBy(['id' => $id]);
49            if (!$picture) {
50                throw new HttpError(404, "No such panini picture.");
51            }
52        } else {
53            $picture = new Panini2024Picture();
54            $picture->setOwnerUser($current_user);
55            $picture->setOwnerRole(null);
56            $picture->setCreatedAt($now_datetime);
57            $picture->setCreatedByUser($current_user);
58            $picture->setLastModifiedAt($now_datetime);
59            $picture->setLastModifiedByUser($current_user);
60        }
61        $picture->setLine1($input_data['line1']);
62        $picture->setLine2($input_data['line2']);
63        $picture->setAssociation($input_data['residence']);
64        $picture->setImgSrc($input_data['uploadId']);
65        $picture->setImgStyle('width:100%; top:0%; left:0%;');
66        $picture->setIsLandscape(false);
67        $picture->setHasTop(false);
68        $picture->setInfos([
69            $input_data['info1'],
70            $input_data['info2'],
71            $input_data['info3'],
72            $input_data['info4'],
73            $input_data['info5'],
74        ]);
75        $picture->setOnOff($input_data['onOff'] ? 1 : 0);
76        $this->entityManager()->persist($picture);
77        $this->entityManager()->flush();
78
79        $panini_id = $picture->getId();
80
81        $portraits_path = "{$data_path}panini_data/portraits/{$panini_id}/";
82        $valid_upload_id = $this->uploadUtils()->getValidUploadId($input_data['uploadId']);
83        if ($valid_upload_id) {
84            $this->uploadUtils()->overwriteUploads([$valid_upload_id], $portraits_path);
85        }
86
87        return ['status' => 'OK'];
88    }
89}