diff --git a/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php b/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php index 431187ab00042b18ce09dfcc264aed3f10c81ec0..6ed71657f58d794ebc1fecba3684697608245527 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 3a09cb188dc1ff2f5d6510197c44d50532293c54..a6274a15f12d94d480cdd1d5ced71b1ad1e69504 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 96b6a93ae3cc0c90f4e7ab08345876ee0477f8c1..db108c4585c3cbb2b7aeee39fb41b79b5cf83589 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);