Skip to content

Commit

Permalink
[BUGFIX] Include records in Extbase without a l10n parent
Browse files Browse the repository at this point in the history
Within TYPO3's LanguageAspect there are four options for doing
overlays:
OVERLAYS_OFF -> fetch records in a specific language directly
OVERLAYS_MIXED -> fetch default records + do overlays if available
OVERLAYS_ON -> fetch default records + do overlays - discard if no overlay is available
OVERLAYS_ON_WITH_FLOATING -> same as OVERLAYS_ON PLUS the records that have no l10n_parent.

This change enables Extbase records to also be
fetched when using LanguageAspect::OVERLAYS_ON_WIITH_FLOATING
as floating records are the ones that do not have
a l10n_parent set ("copy mode").

Resolves: #87160
Releases: main, 12.4
Change-Id: I021efe3761efa63860eac5522af82fc20f0fe53f
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/82024
Tested-by: core-ci <typo3@b13.com>
Tested-by: Benni Mack <benni@typo3.org>
Reviewed-by: Benni Mack <benni@typo3.org>
  • Loading branch information
bmack committed Dec 5, 2023
1 parent 490f126 commit 9ab43f0
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 3 deletions.
Expand Up @@ -804,6 +804,17 @@ protected function getLanguageStatement($tableName, $tableAlias, QuerySettingsIn
$defaultLanguageRecordsSubSelect->getSQL()
)
);
// Records in translation with no default language
if ($languageAspect->getOverlayType() === LanguageAspect::OVERLAYS_ON_WITH_FLOATING) {
$andConditions[] = $this->queryBuilder->expr()->and(
$this->queryBuilder->expr()->eq($tableAlias . '.' . $languageField, $languageAspect->getContentId()),
$this->queryBuilder->expr()->eq($tableAlias . '.' . $transOrigPointerField, 0),
$this->queryBuilder->expr()->notIn(
$tableAlias . '.' . $transOrigPointerField,
$defaultLanguageRecordsSubSelect->getSQL()
)
);
}
if ($languageAspect->getOverlayType() === LanguageAspect::OVERLAYS_MIXED) {
// returns records from current language which have a default language
// together with not translated default language records
Expand Down
Expand Up @@ -901,6 +901,27 @@ public static function queryPostsByPropertyDataProvider(): array
],
],
],
[
'language' => 1,
'overlay' => LanguageAspect::OVERLAYS_ON,
'expected' => [
[
'title' => 'Post 5 - DK',
AbstractDomainObject::PROPERTY_UID => 5,
AbstractDomainObject::PROPERTY_LOCALIZED_UID => 13,
'content' => 'A - content',
'blog.title' => 'Blog 1 DK',
'blog.' . AbstractDomainObject::PROPERTY_UID => 1,
'blog.' . AbstractDomainObject::PROPERTY_LOCALIZED_UID => 2,
'author.firstname' => 'Translated John',
'author.' . AbstractDomainObject::PROPERTY_UID => 1,
'author.' . AbstractDomainObject::PROPERTY_LOCALIZED_UID => 2,
'secondAuthor.firstname' => 'Translated John',
'secondAuthor.' . AbstractDomainObject::PROPERTY_UID => 1,
'secondAuthor.' . AbstractDomainObject::PROPERTY_LOCALIZED_UID => 2,
],
],
],
[
'language' => 1,
'overlay' => LanguageAspect::OVERLAYS_ON_WITH_FLOATING,
Expand All @@ -920,6 +941,21 @@ public static function queryPostsByPropertyDataProvider(): array
'secondAuthor.' . AbstractDomainObject::PROPERTY_UID => 1,
'secondAuthor.' . AbstractDomainObject::PROPERTY_LOCALIZED_UID => 2,
],
[
'title' => 'Post DK only',
AbstractDomainObject::PROPERTY_UID => 15,
AbstractDomainObject::PROPERTY_LOCALIZED_UID => 15,
'content' => 'B - content',
'blog.title' => 'Blog 1 DK',
'blog.' . AbstractDomainObject::PROPERTY_UID => 1,
'blog.' . AbstractDomainObject::PROPERTY_LOCALIZED_UID => 2,
'author.firstname' => 'Translated John',
'author.' . AbstractDomainObject::PROPERTY_UID => 1,
'author.' . AbstractDomainObject::PROPERTY_LOCALIZED_UID => 2,
'secondAuthor.firstname' => 'Translated John',
'secondAuthor.' . AbstractDomainObject::PROPERTY_UID => 1,
'secondAuthor.' . AbstractDomainObject::PROPERTY_LOCALIZED_UID => 2,
],
],
],
[
Expand Down
Expand Up @@ -204,6 +204,10 @@ public static function danishDataProvider(): array
'header' => '[Translate to Dansk:] Regular Element #3',
'image' => ['[Kasper] Image translated to Dansk', '[T3BOARD] Image added in Dansk (without parent)'],
],
303 => [
'header' => '[DK] Without default language',
'image' => ['[T3BOARD] Image added to DK element without default language'],
],
],
],
];
Expand Down Expand Up @@ -412,6 +416,11 @@ public static function contentOnNonTranslatedPageDataProvider(): array
'header' => '[Translate to Dansk:] Regular Element #3',
'image' => ['[Kasper] Image translated to Dansk', '[T3BOARD] Image added in Dansk (without parent)'],
],
// Fallback chain allows Danish records, also without default languages
303 => [
'header' => '[DK] Without default language',
'image' => ['[T3BOARD] Image added to DK element without default language'],
],
],
],
[
Expand Down Expand Up @@ -525,20 +534,21 @@ public static function contentOnPartiallyTranslatedPageDataProvider(): array
],
// Expected behaviour:
// Non translated default language elements are not shown, because of strict mode
// Also, records in the PL without a default language (l10n_parent=0) are also shown
[
'fallbackType' => 'strict',
'fallbackChain' => [],
'visibleRecordHeaders' => ['[Translate to Polski:] Regular Element #1'],
'visibleRecordHeaders' => ['[Translate to Polski:] Regular Element #1', '[PL] Without default language'],
],
[
'fallbackType' => 'strict',
'fallbackChain' => ['EN'],
'visibleRecordHeaders' => ['[Translate to Polski:] Regular Element #1'],
'visibleRecordHeaders' => ['[Translate to Polski:] Regular Element #1', '[PL] Without default language'],
],
[
'fallbackType' => 'strict',
'fallbackChain' => ['DK', 'EN'],
'visibleRecordHeaders' => ['[Translate to Polski:] Regular Element #1'],
'visibleRecordHeaders' => ['[Translate to Polski:] Regular Element #1', '[PL] Without default language'],
],
];
}
Expand Down

0 comments on commit 9ab43f0

Please sign in to comment.