[BUGFIX] Non-admins cannot use mass actions in a workspace 17/44417/4
authorOliver Hader <oliver@typo3.org>
Fri, 30 Oct 2015 16:25:19 +0000 (17:25 +0100)
committerOliver Hader <oliver.hader@typo3.org>
Thu, 5 Nov 2015 12:05:13 +0000 (13:05 +0100)
Non-admins cannot use the mass actions "publish", "swap" or
"discard" in a workspace. The reason is, that for non-admins
the mount-page tree is traversed for a given recursion depth
which is not the case for privileged admin users. The default
value for the depth value is zero (0), that's why no pages,
except the mount-points, are processed.

Resolves: #59226
Releases: master, 6.2
Change-Id: I8d1e2032f72fa977cfcaf44978300d36bef9be23
Reviewed-on: https://review.typo3.org/44417
Reviewed-by: Stefan Neufeind <typo3.neufeind@speedpartner.de>
Reviewed-by: Oliver Hader <oliver.hader@typo3.org>
Tested-by: Oliver Hader <oliver.hader@typo3.org>
typo3/sysext/workspaces/Classes/Service/WorkspaceService.php

index 549bd4a..b9eda5f 100644 (file)
@@ -138,7 +138,7 @@ class WorkspaceService implements SingletonInterface
                 }
             }
             // Select all versions to swap:
-            $versions = $this->selectVersionsInWorkspace($wsid, 0, $stage, $pageId ?: -1, 0, 'tables_modify', $language);
+            $versions = $this->selectVersionsInWorkspace($wsid, 0, $stage, $pageId ?: -1, 999, 'tables_modify', $language);
             // Traverse the selection to build CMD array:
             foreach ($versions as $table => $records) {
                 foreach ($records as $rec) {
@@ -167,7 +167,7 @@ class WorkspaceService implements SingletonInterface
             // Define stage to select:
             $stage = -99;
             // Select all versions to swap:
-            $versions = $this->selectVersionsInWorkspace($wsid, 0, $stage, $pageId ?: -1, 0, 'tables_modify', $language);
+            $versions = $this->selectVersionsInWorkspace($wsid, 0, $stage, $pageId ?: -1, 999, 'tables_modify', $language);
             // Traverse the selection to build CMD array:
             foreach ($versions as $table => $records) {
                 foreach ($records as $rec) {
@@ -214,6 +214,7 @@ class WorkspaceService implements SingletonInterface
                     $tempPageIds[] = $this->getTreeUids($mountPoint, $wsid, $recursionLevel);
                 }
                 $pageList = implode(',', $tempPageIds);
+                $pageList = implode(',', array_unique(explode(',', $pageList)));
             }
         }
         // Traversing all tables supporting versioning: