• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

eliashaeussler / typo3-badges / 10868853238

15 Sep 2024 12:49AM UTC coverage: 98.95%. Remained the same
10868853238

push

github

web-flow
[TASK] Update all dependencies

471 of 476 relevant lines covered (98.95%)

7.48 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/src/Controller/AbstractBadgeController.php
1
<?php
2

3
declare(strict_types=1);
4

5
/*
6
 * This file is part of the Symfony project "eliashaeussler/typo3-badges".
7
 *
8
 * Copyright (C) 2021-2024 Elias Häußler <elias@haeussler.dev>
9
 *
10
 * This program is free software: you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation, either version 3 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22
 */
23

24
namespace App\Controller;
25

26
use App\Badge\Provider\BadgeProviderFactory;
27
use App\Entity\Badge;
28
use App\Exception\InvalidProviderException;
29
use App\Service\BadgeService;
30
use DateTime;
31
use Symfony\Component\HttpFoundation\Request;
32
use Symfony\Component\HttpFoundation\Response;
33
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
34
use Symfony\Contracts\Service\Attribute\Required;
35

36
/**
37
 * AbstractBadgeController.
38
 *
39
 * @author Elias Häußler <elias@haeussler.dev>
40
 * @license GPL-3.0-or-later
41
 */
42
abstract class AbstractBadgeController
43
{
44
    use CacheableResponseTrait;
45

46
    protected const DEFAULT_CONTENT_TYPE = 'image/svg+xml; charset=utf-8';
47

48
    protected BadgeProviderFactory $badgeProviderFactory;
49
    protected BadgeService $badgeService;
50

51
    #[Required]
30✔
52
    public function setBadgeProviderFactory(BadgeProviderFactory $badgeProviderFactory): void
53
    {
54
        $this->badgeProviderFactory = $badgeProviderFactory;
30✔
55
    }
56

57
    #[Required]
9✔
58
    public function setBadgeService(BadgeService $badgeService): void
59
    {
60
        $this->badgeService = $badgeService;
9✔
61
    }
62

63
    protected function getBadgeResponse(
24✔
64
        Request $request,
65
        Badge $badge,
66
        ?string $provider = null,
67
        ?DateTime $cacheExpirationDate = null,
68
    ): Response {
69
        try {
70
            $providerClass = $this->badgeProviderFactory->get($provider);
24✔
71
        } catch (InvalidProviderException $e) {
1✔
72
            throw new NotFoundHttpException($e->getMessage());
1✔
73
        }
74

75
        if ('svg' === $request->getRequestFormat()) {
23✔
76
            $badgeResponse = $this->badgeService->get($badge, $providerClass);
1✔
77
            $contentType = $badgeResponse->getHeader('Content-Type')[0] ?? self::DEFAULT_CONTENT_TYPE;
1✔
78

79
            return new Response(
1✔
80
                $badgeResponse->getBody(),
1✔
81
                Response::HTTP_OK,
1✔
82
                [
1✔
83
                    'Content-Type' => $contentType,
1✔
84
                ],
1✔
85
            );
1✔
86
        }
87

88
        $response = $providerClass->createResponse($badge);
22✔
89

90
        if (null !== $cacheExpirationDate) {
22✔
91
            $this->markResponseAsCacheable($response, $cacheExpirationDate);
16✔
92
        }
93

94
        return $response;
22✔
95
    }
96
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc