RespectLanguageLinkDetailsTrait   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 15
c 1
b 0
f 0
dl 0
loc 30
rs 10
wmc 4

1 Method

Rating   Name   Duplication   Size   Complexity  
A addLanguageParameterByDetection() 0 21 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Lochmueller\LanguageDetection\Service;
6
7
use Lochmueller\LanguageDetection\Handler\Exception\AbstractHandlerException;
8
use Lochmueller\LanguageDetection\Handler\LinkLanguageHandler;
9
use Psr\Http\Message\ServerRequestInterface;
10
use TYPO3\CMS\Core\Http\ServerRequestFactory;
11
use TYPO3\CMS\Core\Http\Uri;
12
use TYPO3\CMS\Core\LinkHandling\LinkService;
13
use TYPO3\CMS\Core\Site\SiteFinder;
14
15
/**
16
 * Inject the needed services or create it by yourself.
17
 */
18
trait RespectLanguageLinkDetailsTrait
19
{
20
    protected SiteFinder $languageSiteFinder;
21
22
    protected LinkLanguageHandler $linkLanguageHandler;
23
24
    /**
25
     * @return mixed[]
26
     */
27
    public function addLanguageParameterByDetection(array $linkDetails, ?ServerRequestInterface $request = null): array
28
    {
29
        if ($linkDetails['type'] !== LinkService::TYPE_PAGE) {
30
            return $linkDetails;
31
        }
32
33
        if ($request === null) {
34
            $request = ServerRequestFactory::fromGlobals();
35
            $request = $request->withMethod('GET')->withUri(new Uri('/'));
36
        }
37
38
        $request = $request->withAttribute('site', $this->languageSiteFinder->getSiteByPageId((int)$linkDetails['pageuid'] ?? 0));
39
40
        try {
41
            $response = $this->linkLanguageHandler->handle($request);
42
43
            $linkDetails['parameters'] = 'L=' . $response->getHeaderLine(LinkLanguageHandler::HEADER_NAME);
44
45
            return $linkDetails;
46
        } catch (AbstractHandlerException $exception) {
47
            return $linkDetails;
48
        }
49
    }
50
}
51