diff --git a/typo3/sysext/backend/Classes/Controller/PageLayoutController.php b/typo3/sysext/backend/Classes/Controller/PageLayoutController.php index 149a139f5b852896a4d139e9b4ec7264390f8901..cc539391cfe51b38469bebf2fdfd025c738024be 100644 --- a/typo3/sysext/backend/Classes/Controller/PageLayoutController.php +++ b/typo3/sysext/backend/Classes/Controller/PageLayoutController.php @@ -695,7 +695,7 @@ class PageLayoutController $configuration->setLanguageMode(true); } - $numberOfHiddenElements = $this->getNumberOfHiddenElements($configuration->getLanguageColumns()); + $numberOfHiddenElements = $this->getNumberOfHiddenElements($configuration->getLanguageMode()); $pageActionsInstruction = JavaScriptModuleInstruction::forRequireJS('TYPO3/CMS/Backend/PageActions'); if ($this->context->isPageEditable()) { @@ -900,14 +900,15 @@ class PageLayoutController * Other functions * ******************************/ + /** * Returns the number of hidden elements (including those hidden by start/end times) * on the current page (for the current sys_language) * - * @param array $languageColumns + * @param bool $isLanguageModeActive * @return int */ - protected function getNumberOfHiddenElements(array $languageColumns): int + protected function getNumberOfHiddenElements(bool $isLanguageModeActive): int { $andWhere = []; $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content'); @@ -926,53 +927,63 @@ class PageLayoutController ) ); - if (!empty($languageColumns)) { - // Multi-language view is active - if ($this->current_sys_language > 0) { - $queryBuilder->andWhere( - $queryBuilder->expr()->in( - 'sys_language_uid', - [0, $queryBuilder->createNamedParameter($this->current_sys_language, Connection::PARAM_INT)] - ) - ); - } - } else { + if ($this->current_sys_language === 0) { + // Default language is active (in columns or language mode) - consider "all languages" and the default $queryBuilder->andWhere( - $queryBuilder->expr()->eq( - 'sys_language_uid', - $queryBuilder->createNamedParameter($this->current_sys_language, Connection::PARAM_INT) + $queryBuilder->expr()->in( + $GLOBALS['TCA']['tt_content']['ctrl']['languageField'], + [-1, 0] + ) + ); + } elseif ($isLanguageModeActive && $this->current_sys_language !== -1) { + // Multi-language view with any translation is active - + // consider "all languages", the default and the translation + $queryBuilder->andWhere( + $queryBuilder->expr()->in( + $GLOBALS['TCA']['tt_content']['ctrl']['languageField'], + [-1, 0, $queryBuilder->createNamedParameter($this->current_sys_language, Connection::PARAM_INT)] + ) + ); + } elseif ($this->current_sys_language > 0) { + // Columns mode with any translation is active - consider "all languages" and the translation + $queryBuilder->andWhere( + $queryBuilder->expr()->in( + $GLOBALS['TCA']['tt_content']['ctrl']['languageField'], + [-1, $queryBuilder->createNamedParameter($this->current_sys_language, Connection::PARAM_INT)] ) ); } if (!empty($GLOBALS['TCA']['tt_content']['ctrl']['enablecolumns']['disabled'])) { $andWhere[] = $queryBuilder->expr()->neq( - 'hidden', + $GLOBALS['TCA']['tt_content']['ctrl']['enablecolumns']['disabled'], $queryBuilder->createNamedParameter(0, Connection::PARAM_INT) ); } if (!empty($GLOBALS['TCA']['tt_content']['ctrl']['enablecolumns']['starttime'])) { + $starttimeField = $GLOBALS['TCA']['tt_content']['ctrl']['enablecolumns']['starttime']; $andWhere[] = $queryBuilder->expr()->andX( $queryBuilder->expr()->neq( - 'starttime', + $starttimeField, $queryBuilder->createNamedParameter(0, Connection::PARAM_INT) ), $queryBuilder->expr()->gt( - 'starttime', + $starttimeField, $queryBuilder->createNamedParameter($GLOBALS['SIM_ACCESS_TIME'], Connection::PARAM_INT) ) ); } if (!empty($GLOBALS['TCA']['tt_content']['ctrl']['enablecolumns']['endtime'])) { + $endtimeField = $GLOBALS['TCA']['tt_content']['ctrl']['enablecolumns']['endtime']; $andWhere[] = $queryBuilder->expr()->andX( $queryBuilder->expr()->neq( - 'endtime', + $endtimeField, $queryBuilder->createNamedParameter(0, Connection::PARAM_INT) ), $queryBuilder->expr()->lte( - 'endtime', + $endtimeField, $queryBuilder->createNamedParameter($GLOBALS['SIM_ACCESS_TIME'], Connection::PARAM_INT) ) );