Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
6 / 6
CRAP
100.00% covered (success)
100.00%
1 / 1
LanguageMiddleware
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
6 / 6
13
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 process
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
7
 getSupportedLanguages
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getDefaultLanguage
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getFallbackLanguage
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 normalizeLanguage
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace BO\Zmscitizenapi\Middleware;
6
7use Psr\Http\Message\ResponseInterface;
8use Psr\Http\Message\ServerRequestInterface;
9use Psr\Http\Server\MiddlewareInterface;
10use Psr\Http\Server\RequestHandlerInterface;
11use BO\Zmscitizenapi\Services\Core\LoggerService;
12
13class LanguageMiddleware implements MiddlewareInterface
14{
15    private const SUPPORTED_LANGUAGES = ['de', 'en', 'ua'];
16// Add more languages here
17    private const DEFAULT_LANGUAGE = 'de';
18    private const FALLBACK_LANGUAGE = 'en';
19    private LoggerService $logger;
20    public function __construct(LoggerService $logger)
21    {
22        $this->logger = $logger;
23    }
24
25    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
26    {
27        $uri = $request->getUri()->getPath();
28        $parts = explode('/', trim($uri, '/'));
29
30        if (
31            count($parts) >= 3 &&
32            $parts[0] === 'terminvereinbarung' &&
33            $parts[1] === 'api' &&
34            $parts[2] === 'citizen'
35        ) {
36            $language = isset($parts[3]) && in_array($parts[3], self::SUPPORTED_LANGUAGES)
37                ? $parts[3]
38                : self::DEFAULT_LANGUAGE;
39            $request = $request->withAttribute('language', $language);
40        }
41
42        return $handler->handle($request);
43    }
44
45    /**
46     * Get supported languages
47     * @return array
48     */
49    public static function getSupportedLanguages(): array
50    {
51        return self::SUPPORTED_LANGUAGES;
52    }
53
54    /**
55     * Get default language
56     * @return string
57     */
58    public static function getDefaultLanguage(): string
59    {
60        return self::DEFAULT_LANGUAGE;
61    }
62
63    /**
64     * Get fallback language
65     * @return string
66     */
67    public static function getFallbackLanguage(): string
68    {
69        return self::FALLBACK_LANGUAGE;
70    }
71
72    /**
73     * Normalize language code
74     * @param string|null $language
75     * @return string
76     */
77    public static function normalizeLanguage(?string $language): string
78    {
79        $language = strtolower($language ?? self::DEFAULT_LANGUAGE);
80        return in_array($language, self::SUPPORTED_LANGUAGES) ? $language : self::DEFAULT_LANGUAGE;
81    }
82}