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

Yoast / Yoast-SEO-for-TYPO3 / 13327579701

14 Feb 2025 10:43AM UTC coverage: 1.276%. First build
13327579701

push

github

web-flow
Merge pull request #597 from Yoast/feature/v11

[FEATURE] Release 11.0.0

21 of 894 new or added lines in 76 files covered. (2.35%)

35 of 2744 relevant lines covered (1.28%)

0.04 hits per line

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

0.0
/Classes/Service/Overview/LanguageMenu/LanguageMenuFactory.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace YoastSeoForTypo3\YoastSeo\Service\Overview\LanguageMenu;
6

7
use TYPO3\CMS\Backend\Template\Components\Menu\Menu;
8
use TYPO3\CMS\Backend\Template\ModuleTemplate;
9
use TYPO3\CMS\Core\Exception\SiteNotFoundException;
10
use TYPO3\CMS\Core\Site\Entity\SiteLanguage;
11
use TYPO3\CMS\Core\Site\SiteFinder;
12
use TYPO3\CMS\Extbase\Mvc\RequestInterface;
13
use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder;
14
use YoastSeoForTypo3\YoastSeo\Controller\OverviewController;
15
use YoastSeoForTypo3\YoastSeo\Service\Overview\Dto\LanguageMenuItem;
16
use YoastSeoForTypo3\YoastSeo\Traits\BackendUserTrait;
17
use YoastSeoForTypo3\YoastSeo\Traits\LanguageServiceTrait;
18

19
class LanguageMenuFactory
20
{
21
    use BackendUserTrait;
22
    use LanguageServiceTrait;
23

24
    protected RequestInterface $request;
25
    protected ModuleTemplate $moduleTemplate;
26
    protected int $pageUid;
27

28
    public function __construct(
29
        protected SiteFinder $siteFinder,
30
        protected UriBuilder $uriBuilder
NEW
31
    ) {}
×
32

33
    public function create(
34
        RequestInterface $request,
35
        ModuleTemplate $moduleTemplate,
36
        int $pageUid
37
    ): ?Menu {
38
        try {
39
            $site = $this->siteFinder->getSiteByPageId($pageUid);
×
40
        } catch (SiteNotFoundException) {
×
41
            return null;
×
42
        }
43

44
        $languages = $site->getAvailableLanguages($this->getBackendUser());
×
45
        if (empty($languages)) {
×
46
            return null;
×
47
        }
48

49
        $this->request = $request;
×
50
        $this->moduleTemplate = $moduleTemplate;
×
51
        $this->pageUid = $pageUid;
×
52

53
        return $this->buildLanguageMenu($languages);
×
54
    }
55

56
    /**
57
     * @param SiteLanguage[] $languages
58
     */
59
    protected function buildLanguageMenu(
60
        array $languages
61
    ): Menu {
62
        $languageMenu = $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->makeMenu();
×
63
        $languageMenu->setIdentifier('languageMenu');
×
64
        $languageMenu->setLabel(
×
65
            $this->getLanguageService()->sL(
×
66
                'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language'
×
67
            )
×
68
        );
×
69
        foreach ($this->getLanguageMenuItems($languages) as $languageMenuItem) {
×
70
            $menuItem = $languageMenu
×
71
                ->makeMenuItem()
×
72
                ->setTitle($languageMenuItem->getTitle())
×
73
                ->setHref($languageMenuItem->getHref())
×
74
                ->setActive($languageMenuItem->isActive());
×
75
            $languageMenu->addMenuItem($menuItem);
×
76
        }
77
        return $languageMenu;
×
78
    }
79

80
    /**
81
     * @param SiteLanguage[] $languages
82
     * @return LanguageMenuItem[]
83
     */
84
    protected function getLanguageMenuItems(
85
        array $languages
86
    ): array {
87
        $arguments = $this->getArguments();
×
88

89
        $filter = $arguments['filter'] ?? '';
×
90
        $returnUrl = $arguments['returnUrl'] ?? '';
×
91
        $items = [];
×
92
        foreach ($languages as $language) {
×
93
            $url = $this->uriBuilder
×
94
                ->reset()
×
95
                ->setRequest($this->request)
×
96
                ->setTargetPageUid($this->pageUid)
×
97
                ->setArguments([
×
NEW
98
                    OverviewController::REQUEST_ARGUMENT => [
×
99
                        'filter' => $filter,
×
100
                        'language' => $language->getLanguageId(),
×
101
                        'returnUrl' => $returnUrl,
×
102
                        'controller' => 'Overview',
×
103
                    ],
×
104
                ])
×
105
                ->build();
×
106
            $items[] = new LanguageMenuItem(
×
107
                $language->getTitle(),
×
108
                $url,
×
109
                (int)($arguments['language'] ?? 0) === $language->getLanguageId()
×
110
            );
×
111
        }
112
        return $items;
×
113
    }
114

115
    /**
116
     * @return array<string, mixed>
117
     */
118
    protected function getArguments(): array
119
    {
NEW
120
        return $this->request->getArguments()[OverviewController::REQUEST_ARGUMENT] ?? $this->request->getArguments();
×
121
    }
122
}
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

© 2026 Coveralls, Inc