[TASK] Move evaluation of ADMCMD_noBeUser to workspace hook 86/55886/2
authorBenni Mack <benni@typo3.org>
Sat, 24 Feb 2018 11:46:35 +0000 (12:46 +0100)
committerBenni Mack <benni@typo3.org>
Sat, 24 Feb 2018 17:20:18 +0000 (18:20 +0100)
The GET parameter "ADMCMD_noBeUser" is handed over to the frontend
when a workspace preview is shown, in comparison to a live version.

In order to render the "live version", the GET parameter "ADMCMD_noBeUser"
is set, and resets BE User permisisons and preview infos.

This can be simplified in the PreviewHook to ensure that the live
version without a Backend User is used.

Resolves: #84032
Releases: master
Change-Id: Iee85717dc8f125ae91e1f046b273b7adf895c576
Reviewed-on: https://review.typo3.org/55886
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Mathias Schreiber <mathias.schreiber@typo3.com>
Tested-by: Mathias Schreiber <mathias.schreiber@typo3.com>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php
typo3/sysext/frontend/Classes/Http/RequestHandler.php
typo3/sysext/workspaces/Classes/Hook/PreviewHook.php

index a19ccbe..2c43ac4 100644 (file)
@@ -1112,7 +1112,7 @@ class TypoScriptFrontendController implements LoggerAwareInterface
                 $this->showHiddenPage = true;
             }
             // The preview flag will be set if a backend user is in an offline workspace
-            if ($this->whichWorkspace() > 0 && !GeneralUtility::_GP('ADMCMD_noBeUser')) {
+            if ($this->whichWorkspace() > 0) {
                 // Will show special preview message.
                 $this->fePreview = 2;
             }
index d2e6567..dd5b932 100644 (file)
@@ -78,12 +78,8 @@ class RequestHandler implements RequestHandlerInterface, PsrRequestHandlerInterf
         $controller->determineId();
 
         // Now, if there is a backend user logged in and he has NO access to this page,
-        // then re-evaluate the id shown! _GP('ADMCMD_noBeUser') is placed here because
-        // \TYPO3\CMS\Version\Hook\PreviewHook might need to know if a backend user is logged in.
-        if (
-            $controller->isBackendUserLoggedIn()
-            && (!$GLOBALS['BE_USER']->extPageReadAccess($controller->page) || GeneralUtility::_GP('ADMCMD_noBeUser'))
-        ) {
+        // then re-evaluate the id shown!.
+        if ($controller->isBackendUserLoggedIn() && !$GLOBALS['BE_USER']->extPageReadAccess($controller->page)) {
             // Remove user
             unset($GLOBALS['BE_USER']);
             $controller->beUserLogin = false;
index d155fc2..f5e466e 100644 (file)
@@ -138,6 +138,17 @@ class PreviewHook implements \TYPO3\CMS\Core\SingletonInterface
                 $pObj->workspacePreview = 0;
             }
         }
+
+        // Now, if "ADMCMD_noBeUser" is set, then ensure that there is no workspace preview and no BE User logged in.
+        // This option is solely used to ensure that a be user can preview the live version of a page in the
+        // workspace preview module.
+        if (GeneralUtility::_GET('ADMCMD_noBeUser')) {
+            $params['BE_USER'] = null;
+            $pObj->workspacePreview = 0;
+            $pObj->beUserLogin = false;
+            // Caching is disabled, because otherwise generated URLs could include the ADMCMD_noBeUser parameter
+            $pObj->set_no_cache('GET Parameter ADMCMD_noBeUser was given', true);
+        }
     }
 
     /**