Bug #88951 » typo3dbbackend.patch
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());
|
||
}
|
||
}
|