From 5317f30a2b65a6a8b369f04108ead2276e34bce2 Mon Sep 17 00:00:00 2001 From: Hendrik Ficken Date: Thu, 11 Jun 2026 11:33:44 +0200 Subject: [PATCH 1/3] [TASK] Add TYPO3 v14 compatibility --- Classes/LinkHandler/PageLinkHandler.php | 13 ++++++++----- composer.json | 2 +- ext_emconf.php | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Classes/LinkHandler/PageLinkHandler.php b/Classes/LinkHandler/PageLinkHandler.php index 75ffc67..f3f4dee 100644 --- a/Classes/LinkHandler/PageLinkHandler.php +++ b/Classes/LinkHandler/PageLinkHandler.php @@ -22,6 +22,7 @@ use TYPO3\CMS\Core\Database\Query\Restriction\WorkspaceRestriction; use TYPO3\CMS\Core\Exception\SiteNotFoundException; use TYPO3\CMS\Core\Imaging\Icon; +use TYPO3\CMS\Core\Imaging\IconSize; use TYPO3\CMS\Core\LinkHandling\LinkService; use TYPO3\CMS\Core\Site\Entity\SiteLanguage; use TYPO3\CMS\Core\Site\SiteFinder; @@ -84,10 +85,12 @@ protected function getRecordsOnExpandedPage($pageId) $languages = $this->getAllLanguages($pageId); $availableLanguages = []; $languageIds = []; + $iconSizeSmall = class_exists(IconSize::class) ? IconSize::SMALL : constant(Icon::class . '::SIZE_SMALL'); + foreach ($languages as $language) { $availableLanguages[$language->getLanguageId()] = [ 'title' => $language->getTitle(), - 'flag' => $this->iconFactory->getIcon($language->getFlagIdentifier(), Icon::SIZE_SMALL), + 'flag' => $this->iconFactory->getIcon($language->getFlagIdentifier(), $iconSizeSmall), ]; if ($language->getLanguageId() > -1) { $availableLanguages[$language->getLanguageId()]['url'] = $this->linkService->asString([ @@ -113,7 +116,7 @@ protected function getRecordsOnExpandedPage($pageId) $this->view->assign('activePageLink', $this->linkService->asString(['type' => LinkService::TYPE_PAGE, 'pageuid' => $pageId])); } $this->view->assign('activePageTitle', BackendUtility::getRecordTitle('pages', $activePageRecord, true)); - $this->view->assign('activePageIcon', $this->iconFactory->getIconForRecord('pages', $activePageRecord, Icon::SIZE_SMALL)->render()); + $this->view->assign('activePageIcon', $this->iconFactory->getIconForRecord('pages', $activePageRecord, $iconSizeSmall)->render()); // Look up tt_content elements from the expanded page $queryBuilder = $this->connectionPool->getQueryBuilderForTable('tt_content'); @@ -156,7 +159,7 @@ protected function getRecordsOnExpandedPage($pageId) $groupedContentElements = []; $groupedContentElements[-1] = [ 'label' => $languages[-1]['title'], - 'flag' => $this->iconFactory->getIcon($languages[-1]['flagIcon'], Icon::SIZE_SMALL), + 'flag' => $this->iconFactory->getIcon($languages[-1]['flagIcon'], $iconSizeSmall), 'items' => [], ]; foreach ($contentElements as &$contentElement) { @@ -164,7 +167,7 @@ protected function getRecordsOnExpandedPage($pageId) if (!isset($groupedContentElements[$languageId])) { $groupedContentElements[$languageId] = [ 'label' => $languages[$languageId]['title'], - 'flag' => $this->iconFactory->getIcon($languages[$languageId]['flagIcon'], Icon::SIZE_SMALL), + 'flag' => $this->iconFactory->getIcon($languages[$languageId]['flagIcon'], $iconSizeSmall), 'items' => [], ]; } @@ -179,7 +182,7 @@ protected function getRecordsOnExpandedPage($pageId) $contentElement['url'] = $this->linkService->asString(['type' => LinkService::TYPE_PAGE, 'parameters' => '&L=' . $languageId, 'pageuid' => (int)$pageId, 'fragment' => $contentElement['uid']]); $contentElement['isSelected'] = !empty($this->linkParts) && (int)($this->linkParts['url']['fragment'] ?? 0) === (int)$contentElement['uid']; - $contentElement['icon'] = $this->iconFactory->getIconForRecord('tt_content', $contentElement, Icon::SIZE_SMALL)->render(); + $contentElement['icon'] = $this->iconFactory->getIconForRecord('tt_content', $contentElement, $iconSizeSmall)->render(); $contentElement['title'] = BackendUtility::getRecordTitle('tt_content', $contentElement, true); $groupedContentElements[$languageId]['items'][$colPos]['items'][] = $contentElement; if ($languageId === 0) { diff --git a/composer.json b/composer.json index f0e6caa..7ef2753 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ "Language" ], "require": { - "typo3/cms-backend": "^12.4 || ^13.4" + "typo3/cms-backend": "^12.4 || ^13.4 || ^14.3" }, "autoload": { "psr-4": { diff --git a/ext_emconf.php b/ext_emconf.php index 3ccbbd2..c5ff8d0 100644 --- a/ext_emconf.php +++ b/ext_emconf.php @@ -11,7 +11,7 @@ 'author_company' => 'b13 GmbH', 'constraints' => [ 'depends' => [ - 'typo3' => '12.4.27-13.99.99', + 'typo3' => '12.4.27-14.3.99', ], ], ]; From dbdb3637f53ae63efec42008c313be3cffb93447 Mon Sep 17 00:00:00 2001 From: Hendrik Ficken Date: Thu, 11 Jun 2026 15:47:02 +0200 Subject: [PATCH 2/3] [TASK] Adjust ci workflows for TYPO3 v14 --- .github/workflows/ci.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 19117ad..e3dcb8e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,11 +8,8 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - TYPO3: [12, 13] - PHP: [ 8.2, 8.3 ] - include: - - TYPO3: 13 - php: 8.4 + TYPO3: [12, 13, 14] + PHP: [ 8.2, 8.3, 8.4 ] steps: - name: Checkout @@ -33,10 +30,15 @@ jobs: path: ~/.composer/cache key: dependencies-composer-${{ hashFiles('composer.json') }} + - name: Install composer dependencies TYPO3 14 + if: matrix.TYPO3 == 14 + run: | + composer install --no-progress --no-interaction + - name: Install composer dependencies TYPO3 13 if: matrix.TYPO3 == 13 run: | - composer install --no-progress --no-interaction + composer require typo3/cms-backend:^13.4 --no-progress --no-interaction --dev - name: Install composer dependencies TYPO3 12 if: matrix.TYPO3 == 12 From cfa686f43146574db38062aad30b1dfb564b2e31 Mon Sep 17 00:00:00 2001 From: Hendrik Ficken Date: Mon, 13 Jul 2026 09:14:30 +0200 Subject: [PATCH 3/3] [TASK] Drop v12 support. --- .github/workflows/ci.yml | 7 +------ composer.json | 2 +- ext_emconf.php | 2 +- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e3dcb8e..6d1c850 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - TYPO3: [12, 13, 14] + TYPO3: [13, 14] PHP: [ 8.2, 8.3, 8.4 ] steps: @@ -40,11 +40,6 @@ jobs: run: | composer require typo3/cms-backend:^13.4 --no-progress --no-interaction --dev - - name: Install composer dependencies TYPO3 12 - if: matrix.TYPO3 == 12 - run: | - composer require typo3/cms-backend:^12.4 --no-progress --no-interaction --dev -W - - name: Phpstan run: .Build/bin/phpstan analyze -c Build/phpstan.neon diff --git a/composer.json b/composer.json index 7ef2753..a3ec484 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ "Language" ], "require": { - "typo3/cms-backend": "^12.4 || ^13.4 || ^14.3" + "typo3/cms-backend": "^13.4 || ^14.3" }, "autoload": { "psr-4": { diff --git a/ext_emconf.php b/ext_emconf.php index c5ff8d0..927fa47 100644 --- a/ext_emconf.php +++ b/ext_emconf.php @@ -11,7 +11,7 @@ 'author_company' => 'b13 GmbH', 'constraints' => [ 'depends' => [ - 'typo3' => '12.4.27-14.3.99', + 'typo3' => '13.4.0-14.3.99', ], ], ];