diff --git a/typo3/sysext/backend/Classes/RecordList/DatabaseRecordList.php b/typo3/sysext/backend/Classes/RecordList/DatabaseRecordList.php index 5dfc4fc12a3ae4856cb2655ab5d425ba1647eb54..cf680f4f3db51dbaddd7cd8483b4cd33dd023c91 100644 --- a/typo3/sysext/backend/Classes/RecordList/DatabaseRecordList.php +++ b/typo3/sysext/backend/Classes/RecordList/DatabaseRecordList.php @@ -45,8 +45,11 @@ use TYPO3\CMS\Core\Imaging\IconFactory; use TYPO3\CMS\Core\LinkHandling\Exception\UnknownLinkHandlerException; use TYPO3\CMS\Core\LinkHandling\LinkService; use TYPO3\CMS\Core\Localization\LanguageService; +use TYPO3\CMS\Core\Messaging\FlashMessage; +use TYPO3\CMS\Core\Messaging\FlashMessageService; use TYPO3\CMS\Core\Service\DependencyOrderingService; use TYPO3\CMS\Core\Type\Bitmask\Permission; +use TYPO3\CMS\Core\Type\ContextualFeedbackSeverity; use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\MathUtility; @@ -2242,8 +2245,21 @@ class DatabaseRecordList } } } - $orderedTableNames = GeneralUtility::makeInstance(DependencyOrderingService::class) - ->orderByDependencies($tableNames); + try { + $orderedTableNames = GeneralUtility::makeInstance(DependencyOrderingService::class) + ->orderByDependencies($tableNames); + } catch (\UnexpectedValueException $e) { + // If you have circular dependencies we just keep the original order and give a notice + // Example mod.web_list.tableDisplayOrder.pages.after = tt_content + $lang = $this->getLanguageService(); + $header = $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:warning.tableDisplayOrder.title'); + $msg = $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:warning.tableDisplayOrder.message'); + $flashMessage = GeneralUtility::makeInstance(FlashMessage::class, $msg, $header, ContextualFeedbackSeverity::WARNING, true); + $flashMessageService = GeneralUtility::makeInstance(FlashMessageService::class); + $defaultFlashMessageQueue = $flashMessageService->getMessageQueueByIdentifier(); + $defaultFlashMessageQueue->enqueue($flashMessage); + $orderedTableNames = $tableNames; + } return array_keys($orderedTableNames); } diff --git a/typo3/sysext/core/Resources/Private/Language/locallang_core.xlf b/typo3/sysext/core/Resources/Private/Language/locallang_core.xlf index 1a09696d0b15173ebd320baa77ffe4d9a09ee16c..ed75e592f3f3b3b67318199d7d090234829cc8a0 100644 --- a/typo3/sysext/core/Resources/Private/Language/locallang_core.xlf +++ b/typo3/sysext/core/Resources/Private/Language/locallang_core.xlf @@ -1314,6 +1314,12 @@ Do you want to refresh it now?</source> <trans-unit id="warning.inline_use_combination" resname="warning.inline_use_combination"> <source>This record will be modified globally.</source> </trans-unit> + <trans-unit id="warning.tableDisplayOrder.message" resname="warning.tableDisplayOrder.message"> + <source>The TSconfig setting for "mod.web_list.tableDisplayOrder" contains a circular dependency and cannot be resolved.</source> + </trans-unit> + <trans-unit id="warning.tableDisplayOrder.title" resname="warning.tableDisplayOrder.title"> + <source>Circular table ordering detected</source> + </trans-unit> <trans-unit id="error.formProtection.tokenInvalid" resname="error.formProtection.tokenInvalid"> <source>Validating the security token of this form has failed. Please reload the form and submit it again.</source> </trans-unit>