diff --git a/typo3/sysext/core/Classes/Domain/Repository/PageRepository.php b/typo3/sysext/core/Classes/Domain/Repository/PageRepository.php index 5ba233649c569e7ae19df6bf2aaf347db77707d7..4dd0cfe0fd51e6de19e26a8c9865eae2a7dcfd93 100644 --- a/typo3/sysext/core/Classes/Domain/Repository/PageRepository.php +++ b/typo3/sysext/core/Classes/Domain/Repository/PageRepository.php @@ -687,7 +687,7 @@ class PageRepository implements LoggerAwareInterface $row['_ORIG_pid'] = $olrow['_ORIG_pid']; } foreach ($row as $fN => $fV) { - if ($fN !== 'uid' && $fN !== 'pid' && isset($olrow[$fN])) { + if ($fN !== 'uid' && $fN !== 'pid' && array_key_exists($fN, $olrow)) { $row[$fN] = $olrow[$fN]; } elseif ($fN === 'uid') { $row['_LOCALIZED_UID'] = $olrow['uid']; diff --git a/typo3/sysext/core/Tests/Functional/Domain/Repository/PageRepositoryTest.php b/typo3/sysext/core/Tests/Functional/Domain/Repository/PageRepositoryTest.php index 3fbb19dd930bf3259ea822152f7baa5417a5a5bf..240d219e740e7cc75731881eaaa7e0ab5374ec7d 100644 --- a/typo3/sysext/core/Tests/Functional/Domain/Repository/PageRepositoryTest.php +++ b/typo3/sysext/core/Tests/Functional/Domain/Repository/PageRepositoryTest.php @@ -614,4 +614,25 @@ class PageRepositoryTest extends FunctionalTestCase self::assertFalse(isset($row['_PAGES_OVERLAY_UID'])); self::assertFalse(isset($row['_PAGES_OVERLAY_LANGUAGE'])); } + + /** + * @test + */ + public function getLanguageOverlayResolvesContentWithNullInValues(): void + { + $context = new Context(); + $context->setAspect('language', new LanguageAspect(1, 1, LanguageAspect::OVERLAYS_ON_WITH_FLOATING, [0])); + $subject = new PageRepository($context); + $record = $subject->getRawRecord('tt_content', 1); + self::assertSame('Default Content #1', $record['header']); + $overlaidRecord = $subject->getLanguageOverlay('tt_content', $record); + self::assertSame(2, (int)$overlaidRecord['_LOCALIZED_UID']); + self::assertSame('Translated Content #1', $overlaidRecord['header']); + + // Check if "bodytext" is actually overlaid with a NULL value + $record = $subject->getRawRecord('tt_content', 3); + $overlaidRecord = $subject->getLanguageOverlay('tt_content', $record); + self::assertSame('Translated #2', $overlaidRecord['header']); + self::assertNull($overlaidRecord['bodytext']); + } } diff --git a/typo3/sysext/core/Tests/Functional/Fixtures/pages.csv b/typo3/sysext/core/Tests/Functional/Fixtures/pages.csv index 3841a3baeadbd1e968fd0f6d5f39f152cc73e357..486a00b3c5a380579407f023dc55834f76c6a732 100644 --- a/typo3/sysext/core/Tests/Functional/Fixtures/pages.csv +++ b/typo3/sysext/core/Tests/Functional/Fixtures/pages.csv @@ -22,3 +22,9 @@ pages,,,,,,,,,,,,,,, ,1002,1000,root translation,0,,0,0,0,0,0,1,1001,1,0,0 ,1003,1000,Mount default language,0,,0,0,0,0,0,0,0,7,1001,1 ,1004,1000,Mount translation,0,,0,0,0,0,0,1,1003,7,1001,1 +tt_content,,,,,,,,,,,,,,,, +,uid,pid,header,bodytext,sys_language_uid,l18n_parent,,,,,,,,,, +,1,1,"Default Content #1","<p>Say thanks for HTML in the DB</p>",0,0,,,,,,,,,, +,2,1,"Translated Content #1","<p>Grazie por HTML en la database</p>",1,1,,,,,,,,,, +,3,1,"Default Content #2","<p>Could be anything</p>",0,0,,,,,,,,,, +,4,1,"Translated #2","\NULL",1,3,,,,,,,,,, \ No newline at end of file