From a1f59825dfa971aef0a3359d205c37aad76b1bff Mon Sep 17 00:00:00 2001 From: Sebastian Michaelsen <sebastian@michaelsen.io> Date: Tue, 8 Dec 2020 12:27:15 +0100 Subject: [PATCH] [BUGFIX] Respect query settings for version overlay enable fields Resolves: #93027 Releases: main, 11.5 Change-Id: I65b4b84a12cf4985d14a62217b075e5c421e0ee6 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/67072 Tested-by: Christian Kuhn <lolli@schwarzbu.ch> Tested-by: core-ci <typo3@b13.com> Tested-by: Benni Mack <benni@typo3.org> Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch> Reviewed-by: Benni Mack <benni@typo3.org> --- .../Generic/Storage/Typo3DbBackend.php | 2 +- .../Functional/Persistence/Fixtures/blogs.xml | 28 ++++++++++ .../Functional/Persistence/WorkspaceTest.php | 52 ++++++++++++++++++- 3 files changed, 80 insertions(+), 2 deletions(-) diff --git a/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php b/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php index 431187ab0004..6ed71657f58d 100644 --- a/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php +++ b/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php @@ -523,7 +523,7 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface ); } // Handle workspace overlays - $pageRepository->versionOL($tableName, $row, true); + $pageRepository->versionOL($tableName, $row, true, $querySettings->getIgnoreEnableFields()); if (is_array($row) && $querySettings->getLanguageOverlayMode()) { if ($tableName === 'pages') { $row = $pageRepository->getPageOverlay($row, $querySettings->getLanguageUid()); diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/blogs.xml b/typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/blogs.xml index 3a09cb188dc1..a6274a15f12d 100644 --- a/typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/blogs.xml +++ b/typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/blogs.xml @@ -96,4 +96,32 @@ <t3ver_state>0</t3ver_state> <t3ver_wsid>1</t3ver_wsid> </tx_blogexample_domain_model_blog> + <tx_blogexample_domain_model_blog> + <uid>103</uid> + <pid>0</pid> + <title>WorkspaceOverlay Blog2HiddenInWorkspace</title> + <description>WorkspaceOverlay Blog2HiddenInWorkspace Description</description> + <logo></logo> + <l18n_diffsource></l18n_diffsource> + <hidden>1</hidden> + <deleted>0</deleted> + <posts>1</posts> + <t3ver_oid>2</t3ver_oid> + <t3ver_state>0</t3ver_state> + <t3ver_wsid>1</t3ver_wsid> + </tx_blogexample_domain_model_blog> + <tx_blogexample_domain_model_blog> + <uid>104</uid> + <pid>0</pid> + <title>WorkspaceOverlay Blog4HiddenInLiveAndWorkspace</title> + <description>WorkspaceOverlay Blog4HiddenInLiveAndWorkspace Description</description> + <logo></logo> + <l18n_diffsource></l18n_diffsource> + <hidden>1</hidden> + <deleted>0</deleted> + <posts>1</posts> + <t3ver_oid>4</t3ver_oid> + <t3ver_state>0</t3ver_state> + <t3ver_wsid>1</t3ver_wsid> + </tx_blogexample_domain_model_blog> </dataset> diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/WorkspaceTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/WorkspaceTest.php index 96b6a93ae3cc..db108c4585c3 100644 --- a/typo3/sysext/extbase/Tests/Functional/Persistence/WorkspaceTest.php +++ b/typo3/sysext/extbase/Tests/Functional/Persistence/WorkspaceTest.php @@ -97,6 +97,56 @@ class WorkspaceTest extends FunctionalTestCase self::assertSame(5, $query->execute()->count()); } + /** + * @test + * @dataProvider contextDataProvider + * @param string $context + */ + public function fetchingHiddenBlogInWorkspace(string $context): void + { + // Set up Context for Workspace=1 + if ($context === 'FE') { + $this->setupSubjectInFrontend(); + } else { + $this->setupSubjectInBackend(); + } + + $query = $this->blogRepository->createQuery(); + + $querySettings = $query->getQuerySettings(); + $querySettings->setStoragePageIds([0]); + $query->matching( + $query->logicalOr( + $query->like('title', '%Blog2%'), + $query->like('title', '%Blog4%'), + $query->like('title', '%Blog6%') + ) + ); + $query->setOrderings(['title' => QueryInterface::ORDER_ASCENDING]); + + // Respect hidden flags, only show the item that was hidden in live, but is now visible in workspace + $querySettings->setIgnoreEnableFields(false); + $items = $query->execute(); + $foundItems = []; + foreach ($items as $item) { + $foundItems[] = $item->getTitle(); + } + self::assertEquals(['WorkspaceOverlay Blog6Enabled'], $foundItems); + + // Allow hidden records to show up (resulting in 3 blog items) + $querySettings->setIgnoreEnableFields(true); + $items = $query->execute(); + $foundItems = []; + foreach ($items as $item) { + $foundItems[] = $item->getTitle(); + } + self::assertEquals([ + 'WorkspaceOverlay Blog2HiddenInWorkspace', + 'WorkspaceOverlay Blog4HiddenInLiveAndWorkspace', + 'WorkspaceOverlay Blog6Enabled', + ], $foundItems); + } + /** * @test * @dataProvider contextDataProvider @@ -119,7 +169,7 @@ class WorkspaceTest extends FunctionalTestCase $blogs = $query->execute()->toArray(); - self::assertCount(4, $blogs); + self::assertCount(3, $blogs); // Check first blog was overlaid with workspace preview $firstBlog = array_shift($blogs); -- GitLab