[BUGFIX] Preview pages with publish dates 23/52023/4
authorSusanne Moog <susanne.moog@typo3.com>
Mon, 13 Mar 2017 11:53:08 +0000 (12:53 +0100)
committerMorton Jonuschat <m.jonuschat@mojocode.de>
Mon, 13 Mar 2017 12:52:50 +0000 (13:52 +0100)
Currently pages can be hidden for different reasons:
- page is disabled
- page has a start time in the future
- page has an end time in the past
- page has an access restriction

When previewing a page the fe_groups and disabled restriction are
already ignored when TYPO3 is configured to preview hidden pages.

Start and endtime should be ignored, too, so an editor is able to
preview pages with start or end times set.

Change-Id: I634076af7219b70ccfc46f470ba046417177d29a
Resolves: #66451
Releases: master
Reviewed-on: https://review.typo3.org/52023
Reviewed-by: Tobi Kretschmann <tobi@tobishome.de>
Tested-by: Tobi Kretschmann <tobi@tobishome.de>
Reviewed-by: Steffen Frese
Tested-by: Steffen Frese
Reviewed-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Tested-by: Morton Jonuschat <m.jonuschat@mojocode.de>
typo3/sysext/core/Classes/Database/Query/Restriction/FrontendRestrictionContainer.php
typo3/sysext/core/Tests/Unit/Database/Query/Restriction/FrontendRestrictionContainerTest.php
typo3/sysext/frontend/Classes/Page/PageRepository.php

index dda3df0..b1c0802 100644 (file)
@@ -64,7 +64,7 @@ class FrontendRestrictionContainer extends AbstractRestrictionContainer
         foreach ($this->restrictions as $restriction) {
             foreach ($queriedTables as $tableAlias => $tableName) {
                 $disableRestriction = false;
-                if ($restriction instanceof HiddenRestriction) {
+                if ($restriction instanceof HiddenRestriction || $restriction instanceof StartTimeRestriction || $restriction instanceof EndTimeRestriction) {
                     // If display of hidden records is requested, we must disable the hidden restriction.
                     $disableRestriction = $tableName === 'pages' ? $typoScriptFrontendController->showHiddenPage : $typoScriptFrontendController->showHiddenRecords;
                 }
index 09ae82a..5a6955b 100644 (file)
@@ -47,7 +47,7 @@ class FrontendRestrictionContainerTest extends AbstractRestrictionTestCase
                 'hiddenPagePreview' => true,
                 'hiddenRecordPreview' => true,
                 'feGroupList' => '0,-1',
-                'expectedSQL' => '("aTable"."deleted" = 0) AND (("aTable"."t3ver_state" <= 0) 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_state" <= 0) AND ("aTable"."pid" <> -1)) 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")))'
             ],
             'Workspace, with WS preview' => [
                 'tableName' => 'aTable',
@@ -65,7 +65,7 @@ class FrontendRestrictionContainerTest extends AbstractRestrictionTestCase
                 'hiddenPagePreview' => true,
                 'hiddenRecordPreview' => true,
                 'feGroupList' => '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)) 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")))'
             ],
             'Live page, no preview' => [
                 'tableName' => 'pages',
@@ -83,7 +83,7 @@ class FrontendRestrictionContainerTest extends AbstractRestrictionTestCase
                 'hiddenPagePreview' => true,
                 'hiddenRecordPreview' => true,
                 'feGroupList' => '0,-1',
-                'expectedSQL' => '("pages"."deleted" = 0) AND (("pages"."t3ver_state" <= 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"."t3ver_state" <= 0) AND ("pages"."pid" <> -1)) 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")))'
             ],
             'Workspace page, with WS preview' => [
                 'tableName' => 'pages',
@@ -101,7 +101,7 @@ class FrontendRestrictionContainerTest extends AbstractRestrictionTestCase
                 'hiddenPagePreview' => true,
                 'hiddenRecordPreview' => true,
                 'feGroupList' => '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) 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")))'
             ],
         ];
     }
index eaad52d..40315bf 100644 (file)
@@ -1386,11 +1386,11 @@ class PageRepository
                         $field = $table . '.' . $ctrl['enablecolumns']['disabled'];
                         $constraints[] = $expressionBuilder->eq($field, 0);
                     }
-                    if ($ctrl['enablecolumns']['starttime'] && !$ignore_array['starttime']) {
+                    if ($ctrl['enablecolumns']['starttime'] && !$show_hidden && !$ignore_array['starttime']) {
                         $field = $table . '.' . $ctrl['enablecolumns']['starttime'];
                         $constraints[] = $expressionBuilder->lte($field, (int)$GLOBALS['SIM_ACCESS_TIME']);
                     }
-                    if ($ctrl['enablecolumns']['endtime'] && !$ignore_array['endtime']) {
+                    if ($ctrl['enablecolumns']['endtime'] && !$show_hidden && !$ignore_array['endtime']) {
                         $field = $table . '.' . $ctrl['enablecolumns']['endtime'];
                         $constraints[] = $expressionBuilder->orX(
                             $expressionBuilder->eq($field, 0),