[BUGFIX] Set constraints in `FrontendRestrictionContainer` depending on workspace... 22/57822/8
authorAndreas Fernandez <a.fernandez@scripting-base.de>
Sun, 5 Aug 2018 16:12:31 +0000 (18:12 +0200)
committerFrank Naegler <frank.naegler@typo3.org>
Fri, 2 Nov 2018 11:57:30 +0000 (12:57 +0100)
The `FrontendRestrictionContainer` must not respect the hidden flag, if
the request happens in a workspace context. The reason is that for
example pages that are created in a workspace have a hidden LIVE version,
which makes overlaying impossible.

This patch changes the behavior to act the same as
`PageRepository::enableFields()` does.

Resolves: #85742
Releases: master, 8.7
Change-Id: I5f1b12bcd8a63daf7eaa9bc9c065b96c343f6ab6
Reviewed-on: https://review.typo3.org/57822
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Sebastian Michaelsen <michaelsen@t3seo.de>
Tested-by: Sebastian Michaelsen <michaelsen@t3seo.de>
Reviewed-by: Frank Naegler <frank.naegler@typo3.org>
Tested-by: Frank Naegler <frank.naegler@typo3.org>
typo3/sysext/core/Classes/Database/Query/Restriction/FrontendRestrictionContainer.php
typo3/sysext/core/Tests/Unit/Database/Query/Restriction/FrontendRestrictionContainerTest.php

index bcfbeda..e7f0cc2 100644 (file)
@@ -72,7 +72,11 @@ class FrontendRestrictionContainer extends AbstractRestrictionContainer
         foreach ($this->restrictions as $restriction) {
             foreach ($queriedTables as $tableAlias => $tableName) {
                 $disableRestriction = false;
-                if ($restriction instanceof HiddenRestriction) {
+                if ($this->context->getPropertyFromAspect('workspace', 'id', 0) > 0) {
+                    $disableRestriction = !$restriction instanceof DeletedRestriction && !$restriction instanceof FrontendWorkspaceRestriction;
+                }
+
+                if (!$disableRestriction && $restriction instanceof HiddenRestriction) {
                     /** @var VisibilityAspect $visibilityAspect */
                     $visibilityAspect = $this->context->getAspect('visibility');
                     // If display of hidden records is requested, we must disable the hidden restriction.
index 933c134..d854a89 100644 (file)
@@ -55,7 +55,7 @@ class FrontendRestrictionContainerTest extends AbstractRestrictionTestCase
                 'hiddenPagePreview' => false,
                 'hiddenRecordPreview' => false,
                 'frontendUserGroups' => [0, -1],
-                'expectedSQL' => '("aTable"."deleted" = 0) AND ((("aTable"."t3ver_wsid" = 0) OR ("aTable"."t3ver_wsid" = 1)) AND ("aTable"."pid" <> -1)) AND ("aTable"."myHiddenField" = 0) AND ("aTable"."myStartTimeField" <= 42) AND (("aTable"."myEndTimeField" = 0) OR ("aTable"."myEndTimeField" > 42)) AND (("aTable"."myGroupField" IS NULL) OR ("aTable"."myGroupField" = \'\') OR ("aTable"."myGroupField" = \'0\') OR (FIND_IN_SET(\'0\', "aTable"."myGroupField")) OR (FIND_IN_SET(\'-1\', "aTable"."myGroupField")))'
+                'expectedSQL' => '("aTable"."deleted" = 0) AND ((("aTable"."t3ver_wsid" = 0) OR ("aTable"."t3ver_wsid" = 1)) AND ("aTable"."pid" <> -1))'
             ],
             'Workspace, with WS preview and hidden record preview' => [
                 'tableName' => 'aTable',
@@ -64,7 +64,7 @@ class FrontendRestrictionContainerTest extends AbstractRestrictionTestCase
                 'hiddenPagePreview' => true,
                 'hiddenRecordPreview' => true,
                 'frontendUserGroups' => [0, -1],
-                'expectedSQL' => '("aTable"."deleted" = 0) AND ((("aTable"."t3ver_wsid" = 0) OR ("aTable"."t3ver_wsid" = 1)) AND ("aTable"."pid" <> -1)) AND ("aTable"."myStartTimeField" <= 42) AND (("aTable"."myEndTimeField" = 0) OR ("aTable"."myEndTimeField" > 42)) AND (("aTable"."myGroupField" IS NULL) OR ("aTable"."myGroupField" = \'\') OR ("aTable"."myGroupField" = \'0\') OR (FIND_IN_SET(\'0\', "aTable"."myGroupField")) OR (FIND_IN_SET(\'-1\', "aTable"."myGroupField")))'
+                'expectedSQL' => '("aTable"."deleted" = 0) AND ((("aTable"."t3ver_wsid" = 0) OR ("aTable"."t3ver_wsid" = 1)) AND ("aTable"."pid" <> -1))'
             ],
             'Live page, no preview' => [
                 'tableName' => 'pages',
@@ -91,7 +91,7 @@ class FrontendRestrictionContainerTest extends AbstractRestrictionTestCase
                 'hiddenPagePreview' => false,
                 'hiddenRecordPreview' => false,
                 'frontendUserGroups' => [0, -1],
-                'expectedSQL' => '("pages"."deleted" = 0) AND ("pages"."pid" <> -1) AND ("pages"."hidden" = 0) AND ("pages"."starttime" <= 42) AND (("pages"."endtime" = 0) OR ("pages"."endtime" > 42)) AND (("pages"."fe_group" IS NULL) OR ("pages"."fe_group" = \'\') OR ("pages"."fe_group" = \'0\') OR (FIND_IN_SET(\'0\', "pages"."fe_group")) OR (FIND_IN_SET(\'-1\', "pages"."fe_group")))'
+                'expectedSQL' => '("pages"."deleted" = 0) AND ("pages"."pid" <> -1)'
             ],
             'Workspace page, with WS preview and hidden pages preview' => [
                 'tableName' => 'pages',
@@ -100,7 +100,7 @@ class FrontendRestrictionContainerTest extends AbstractRestrictionTestCase
                 'hiddenPagePreview' => true,
                 'hiddenRecordPreview' => true,
                 'frontendUserGroups' => [0, -1],
-                'expectedSQL' => '("pages"."deleted" = 0) AND ("pages"."pid" <> -1) AND ("pages"."starttime" <= 42) AND (("pages"."endtime" = 0) OR ("pages"."endtime" > 42)) AND (("pages"."fe_group" IS NULL) OR ("pages"."fe_group" = \'\') OR ("pages"."fe_group" = \'0\') OR (FIND_IN_SET(\'0\', "pages"."fe_group")) OR (FIND_IN_SET(\'-1\', "pages"."fe_group")))'
+                'expectedSQL' => '("pages"."deleted" = 0) AND ("pages"."pid" <> -1)'
             ],
             'Live, no preview with alias' => [
                 'tableName' => 'aTable',