Project

General

Profile

Bug #88951 » typo3dbbackend.patch

Lars Peter Søndergaard, 2019-09-27 09:03

View differences:

typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php
$pageRepository->versionOL($tableName, $row, true);
$querySettings = $query->getQuerySettings();
if (is_array($row) && $querySettings->getLanguageOverlayMode()) {
$languageUid = (int)$querySettings->getLanguageUid();
if (!$querySettings->getRespectSysLanguage()
&& isset($row[$GLOBALS['TCA'][$tableName]['ctrl']['languageField']])
&& $row[$GLOBALS['TCA'][$tableName]['ctrl']['languageField']] > 0
&& (!$query instanceof Query || !$query->getParentQuery())
) {
//no parent query means we're processing the aggregate root.
//respectSysLanguage is false which means that records returned by the query
//might be from different languages (which is desired).
//So we need to force language used for overlay to the language of the current record.
$languageUid = $row[$GLOBALS['TCA'][$tableName]['ctrl']['languageField']];
}
if (isset($GLOBALS['TCA'][$tableName]['ctrl']['transOrigPointerField']) && $row[$GLOBALS['TCA'][$tableName]['ctrl']['transOrigPointerField']] > 0) {
//force overlay by faking default language record, as getRecordOverlay can only handle default language records
$row['uid'] = $row[$GLOBALS['TCA'][$tableName]['ctrl']['transOrigPointerField']];
$row[$GLOBALS['TCA'][$tableName]['ctrl']['languageField']] = 0;
}
if ($tableName === 'pages') {
$row = $pageRepository->getPageOverlay($row, $querySettings->getLanguageUid());
} else {
$languageUid = (int)$querySettings->getLanguageUid();
if (!$querySettings->getRespectSysLanguage()
&& isset($row[$GLOBALS['TCA'][$tableName]['ctrl']['languageField']])
&& $row[$GLOBALS['TCA'][$tableName]['ctrl']['languageField']] > 0
&& (!$query instanceof Query || !$query->getParentQuery())
) {
//no parent query means we're processing the aggregate root.
//respectSysLanguage is false which means that records returned by the query
//might be from different languages (which is desired).
//So we need to force language used for overlay to the language of the current record.
$languageUid = $row[$GLOBALS['TCA'][$tableName]['ctrl']['languageField']];
}
if (isset($GLOBALS['TCA'][$tableName]['ctrl']['transOrigPointerField']) && $row[$GLOBALS['TCA'][$tableName]['ctrl']['transOrigPointerField']] > 0) {
//force overlay by faking default language record, as getRecordOverlay can only handle default language records
$row['uid'] = $row[$GLOBALS['TCA'][$tableName]['ctrl']['transOrigPointerField']];
$row[$GLOBALS['TCA'][$tableName]['ctrl']['languageField']] = 0;
// the data mapper only checks for _LOCALIZED_UID when setting '_localizedUid' property
// and not _PAGES_OVERLAY_UID. This is the easy fix.
if (!empty($row['_PAGES_OVERLAY_UID']) && $row['_PAGES_OVERLAY_UID']) {
$row['_LOCALIZED_UID'] = $row['_PAGES_OVERLAY_UID'];
}
} else {
$row = $pageRepository->getRecordOverlay($tableName, $row, $languageUid, (string)$querySettings->getLanguageOverlayMode());
}
}
    (1-1/1)