示例#1
0
 /**
  * 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 '';
 }