/** * Builds the language field statement * * @param string $tableName The database table name * @param string $tableAlias The table alias used in the query. * @param QuerySettingsInterface $querySettings The TYPO3 CMS specific query settings * @return string */ protected function getSysLanguageStatement($tableName, $tableAlias, $querySettings) { if (is_array($GLOBALS['TCA'][$tableName]['ctrl'])) { if (!empty($GLOBALS['TCA'][$tableName]['ctrl']['languageField'])) { // Select all entries for the current language // If any language is set -> get those entries which are not translated yet // They will be removed by \TYPO3\CMS\Frontend\Page\PageRepository::getRecordOverlay if not matching overlay mode $languageField = $GLOBALS['TCA'][$tableName]['ctrl']['languageField']; if (isset($GLOBALS['TCA'][$tableName]['ctrl']['transOrigPointerField']) && $querySettings->getLanguageUid() > 0) { $mode = $querySettings->getLanguageMode(); if ($mode === 'strict') { $queryBuilderForSubselect = $this->queryBuilder->getConnection()->createQueryBuilder(); $queryBuilderForSubselect->select($tableName . '.' . $GLOBALS['TCA'][$tableName]['ctrl']['transOrigPointerField'])->from($tableName)->where($queryBuilderForSubselect->expr()->andX($queryBuilderForSubselect->expr()->gt($tableName . '.' . $GLOBALS['TCA'][$tableName]['ctrl']['transOrigPointerField'], 0), $queryBuilderForSubselect->expr()->eq($tableName . '.' . $languageField, (int) $querySettings->getLanguageUid()))); return $this->queryBuilder->expr()->orX($this->queryBuilder->expr()->eq($tableAlias . '.' . $languageField, -1), $this->queryBuilder->expr()->andX($this->queryBuilder->expr()->eq($tableAlias . '.' . $languageField, (int) $querySettings->getLanguageUid()), $this->queryBuilder->expr()->eq($tableAlias . '.' . $GLOBALS['TCA'][$tableName]['ctrl']['transOrigPointerField'], 0)), $this->queryBuilder->expr()->andX($this->queryBuilder->expr()->eq($tableAlias . '.' . $languageField, 0), $this->queryBuilder->expr()->in($tableAlias . '.uid', $queryBuilderForSubselect->getSQL()))); } else { $queryBuilderForSubselect = $this->queryBuilder->getConnection()->createQueryBuilder(); $queryBuilderForSubselect->select($tableAlias . '.' . $GLOBALS['TCA'][$tableName]['ctrl']['transOrigPointerField'])->from($tableName)->where($queryBuilderForSubselect->expr()->andX($queryBuilderForSubselect->expr()->gt($tableName . '.' . $GLOBALS['TCA'][$tableName]['ctrl']['transOrigPointerField'], 0), $queryBuilderForSubselect->expr()->eq($tableName . '.' . $languageField, (int) $querySettings->getLanguageUid()))); return $this->queryBuilder->expr()->orX($this->queryBuilder->expr()->in($tableAlias . '.' . $languageField, [(int) $querySettings->getLanguageUid(), -1]), $this->queryBuilder->expr()->andX($this->queryBuilder->expr()->eq($tableAlias . '.' . $languageField, 0), $this->queryBuilder->expr()->notIn($tableAlias . '.uid', $queryBuilderForSubselect->getSQL()))); } } else { return $this->queryBuilder->expr()->in($tableAlias . '.' . $languageField, [(int) $querySettings->getLanguageUid(), -1]); } } } return ''; }