From 27fb620fdf132b16f0392c703a8e89f31dc6b1ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20M=C3=BCller?= <2566282+brotkrueml@users.noreply.github.com> Date: Sat, 1 Apr 2023 12:08:38 +0200 Subject: [PATCH] [BUGFIX] Avoid error in site configuration with TYPO3 v12.3 This patch also avoids triggering a deprecation notice about TCA migrations in the upcoming v12.4. Resolves: #44 --- CHANGELOG.md | 3 + Classes/Configuration/WidgetsProvider.php | 14 ++- .../SiteConfiguration/Overrides/sites.php | 17 +++- Documentation/Changelog/Index.rst | 6 ++ .../Configuration/WidgetsProviderTest.php | 88 ++++++++++++++++++- composer.json | 4 +- 6 files changed, 122 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f663bed..6e89aec5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed +- Error when opening a site configuration in TYPO3 v12.3 (#44) + ## [2.1.0] - 2023-01-07 ### Added diff --git a/Classes/Configuration/WidgetsProvider.php b/Classes/Configuration/WidgetsProvider.php index 60c42b9a..e90875ae 100644 --- a/Classes/Configuration/WidgetsProvider.php +++ b/Classes/Configuration/WidgetsProvider.php @@ -12,6 +12,7 @@ namespace Brotkrueml\MatomoWidgets\Configuration; use Brotkrueml\MatomoWidgets\Extension; +use TYPO3\CMS\Core\Information\Typo3Version; /** * @internal @@ -52,15 +53,22 @@ public function getWidgetIdentifiers(): array } /** - * @return array + * @return array> */ public function getItemsForTca(): array { + $labelKey = 'label'; + $valueKey = 'value'; + if ((new Typo3Version())->getMajorVersion() < 12) { + $labelKey = 0; + $valueKey = 1; + } + $items = []; foreach ($this->availableWidgets as $identifier => $languageKey) { $items[] = [ - $languageKey, - $identifier, + $labelKey => $languageKey, + $valueKey => $identifier, ]; } diff --git a/Configuration/SiteConfiguration/Overrides/sites.php b/Configuration/SiteConfiguration/Overrides/sites.php index 06c26a5b..b8c341f9 100644 --- a/Configuration/SiteConfiguration/Overrides/sites.php +++ b/Configuration/SiteConfiguration/Overrides/sites.php @@ -65,8 +65,8 @@ 'type' => 'check', 'renderType' => 'checkboxToggle', 'items' => [[ - 0 => '', - 1 => '', + 'label' => '', + 'value' => '', ]], ], 'onChange' => 'reload', @@ -75,6 +75,15 @@ $GLOBALS['SiteConfiguration']['site']['columns']['matomoWidgetsUrl']['displayCond'] = 'FIELD:matomoWidgetsConsiderMatomoIntegration:REQ:false'; $GLOBALS['SiteConfiguration']['site']['columns']['matomoWidgetsIdSite']['displayCond'] = 'FIELD:matomoWidgetsConsiderMatomoIntegration:REQ:false'; $GLOBALS['SiteConfiguration']['site']['columns']['matomoWidgetsPagesNotFoundTemplate']['displayCond'] = 'FIELD:matomoWidgetsConsiderMatomoIntegration:REQ:false'; + + if ((new TYPO3\CMS\Core\Information\Typo3Version())->getMajorVersion() < 12) { + $GLOBALS['SiteConfiguration']['site']['columns']['matomoWidgetsConsiderMatomoIntegration']['config']['items'][0][0] + = $GLOBALS['SiteConfiguration']['site']['columns']['matomoWidgetsConsiderMatomoIntegration']['config']['items'][0]['label']; + $GLOBALS['SiteConfiguration']['site']['columns']['matomoWidgetsConsiderMatomoIntegration']['config']['items'][0][1] + = $GLOBALS['SiteConfiguration']['site']['columns']['matomoWidgetsConsiderMatomoIntegration']['config']['items'][0]['value']; + unset($GLOBALS['SiteConfiguration']['site']['columns']['matomoWidgetsConsiderMatomoIntegration']['config']['items'][0]['label']); + unset($GLOBALS['SiteConfiguration']['site']['columns']['matomoWidgetsConsiderMatomoIntegration']['config']['items'][0]['value']); + } } $GLOBALS['SiteConfiguration']['site']['types']['0']['showitem'] .= ', @@ -90,8 +99,8 @@ 'showitem' => ( TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('matomo_integration') - ? 'matomoWidgetsConsiderMatomoIntegration, --linebreak--, ' - : '' + ? 'matomoWidgetsConsiderMatomoIntegration, --linebreak--, ' + : '' ) . 'matomoWidgetsUrl, matomoWidgetsIdSite, matomoWidgetsTokenAuth', ], 'matomoWidgetsActiveWidgets' => [ diff --git a/Documentation/Changelog/Index.rst b/Documentation/Changelog/Index.rst index 37c95ba4..0d21a7a2 100644 --- a/Documentation/Changelog/Index.rst +++ b/Documentation/Changelog/Index.rst @@ -11,6 +11,12 @@ and this project adheres to `Semantic Versioning `_ -------------------------------------------------------------------------------------------- +Fixed +^^^^^ + + +* Error when opening a site configuration in TYPO3 v12.3 (#44) + `2.1.0 `_ - 2023-01-07 ------------------------------------------------------------------------------------------------------ diff --git a/Tests/Unit/Configuration/WidgetsProviderTest.php b/Tests/Unit/Configuration/WidgetsProviderTest.php index b79720ed..803629d4 100644 --- a/Tests/Unit/Configuration/WidgetsProviderTest.php +++ b/Tests/Unit/Configuration/WidgetsProviderTest.php @@ -14,6 +14,7 @@ use Brotkrueml\MatomoWidgets\Configuration\WidgetsProvider; use Brotkrueml\MatomoWidgets\Extension; use PHPUnit\Framework\TestCase; +use TYPO3\CMS\Core\Information\Typo3Version; class WidgetsProviderTest extends TestCase { @@ -54,8 +55,12 @@ public function getWidgetIdentifiers(): void /** * @test */ - public function getItemsForTca(): void + public function getItemsForTcaInV11(): void { + if ((new Typo3Version())->getMajorVersion() > 11) { + self::markTestSkipped('Only relevant for TYPO3 v11'); + } + $actual = $this->subject->getItemsForTca(); self::assertContains([Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.visitsSummary.actionsPerDay.title', 'actionsPerDay'], $actual); @@ -76,4 +81,85 @@ public function getItemsForTca(): void self::assertContains([Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.visitsSummary.visitsPerDay.title', 'visitsPerDay'], $actual); self::assertContains([Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.visitsSummary.visitsPerMonth.title', 'visitsPerMonth'], $actual); } + + /** + * @test + */ + public function getItemsForTca(): void + { + if ((new Typo3Version())->getMajorVersion() < 12) { + self::markTestSkipped('Only relevant for TYPO3 v12+'); + } + + $actual = $this->subject->getItemsForTca(); + + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.visitsSummary.actionsPerDay.title', + 'value' => 'actionsPerDay', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.visitsSummary.actionsPerMonth.title', + 'value' => 'actionsPerMonth', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.annotations.title', + 'value' => 'annotations', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.createAnnotation.title', + 'value' => 'createAnnotation', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.visitsSummary.bounceRate.title', + 'value' => 'bounceRate', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.referrers.campaigns.title', + 'value' => 'campaigns', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.contents.contentNames.title', + 'value' => 'contentNames', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.contents.contentPieces.title', + 'value' => 'contentPieces', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.userCountry.country.title', + 'value' => 'countries', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.events.javaScriptErrors.title', + 'value' => 'javaScriptErrors', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.linkMatomo.title', + 'value' => 'linkMatomo', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.devicesDetection.osFamilies.title', + 'value' => 'osFamilies', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.actions.pagesNotFound.title', + 'value' => 'pagesNotFound', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.actions.siteSearchKeywords.title', + 'value' => 'siteSearchKeywords', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.actions.siteSearchNoResultKeywords.title', + 'value' => 'siteSearchNoResultKeywords', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.visitsSummary.visitsPerDay.title', + 'value' => 'visitsPerDay', + ], $actual); + self::assertContains([ + 'label' => Extension::LANGUAGE_PATH_DASHBOARD . ':widgets.visitsSummary.visitsPerMonth.title', + 'value' => 'visitsPerMonth', + ], $actual); + } } diff --git a/composer.json b/composer.json index ab145693..3cb60d71 100644 --- a/composer.json +++ b/composer.json @@ -24,8 +24,8 @@ "require": { "php": ">=8.1", "symfony/finder": "^5.4 || ^6.2", - "typo3/cms-core": "^11.5 || ^12.1", - "typo3/cms-dashboard": "^11.5 || ^12.1" + "typo3/cms-core": "^11.5 || ^12.3", + "typo3/cms-dashboard": "^11.5 || ^12.3" }, "require-dev": { "brotkrueml/coding-standards": "~4.0.0",