Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
17 / 17 |
|
100.00% |
6 / 6 |
CRAP | |
100.00% |
1 / 1 |
LanguageMiddleware | |
100.00% |
17 / 17 |
|
100.00% |
6 / 6 |
13 | |
100.00% |
1 / 1 |
__construct | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
process | |
100.00% |
11 / 11 |
|
100.00% |
1 / 1 |
7 | |||
getSupportedLanguages | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getDefaultLanguage | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getFallbackLanguage | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
normalizeLanguage | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
2 |
1 | <?php |
2 | |
3 | declare(strict_types=1); |
4 | |
5 | namespace BO\Zmscitizenapi\Middleware; |
6 | |
7 | use Psr\Http\Message\ResponseInterface; |
8 | use Psr\Http\Message\ServerRequestInterface; |
9 | use Psr\Http\Server\MiddlewareInterface; |
10 | use Psr\Http\Server\RequestHandlerInterface; |
11 | use BO\Zmscitizenapi\Services\Core\LoggerService; |
12 | |
13 | class 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 | } |