From 374c3e968d7e7769879c8e67f120e528853248f5 Mon Sep 17 00:00:00 2001
From: Tymoteusz Motylewski <t.motylewski@gmail.com>
Date: Thu, 7 Dec 2017 14:46:48 +0100
Subject: [PATCH] [BUGFIX] Allow users without delete permissions to drag pages
 in page tree

BE users without delete rights can now drag-drop pages in the page tree.
The drag - delete area is not shown.

Resolves: #25135
Releases: 8.7, 7.6
Change-Id: Icc82675a783f19ae72b6d00ac2809ad76b93dd67
Reviewed-on: https://review.typo3.org/55535
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Susanne Moog <susanne.moog@typo3.org>
Tested-by: Susanne Moog <susanne.moog@typo3.org>
---
 typo3/sysext/backend/Classes/Tree/Pagetree/Commands.php         | 1 -
 typo3/sysext/backend/Classes/Tree/Pagetree/PagetreeNode.php     | 1 +
 .../JavaScript/extjs/components/pagetree/javascript/tree.js     | 2 +-
 3 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/typo3/sysext/backend/Classes/Tree/Pagetree/Commands.php b/typo3/sysext/backend/Classes/Tree/Pagetree/Commands.php
index 2e67ef13fd39..6c05d3de4b6b 100644
--- a/typo3/sysext/backend/Classes/Tree/Pagetree/Commands.php
+++ b/typo3/sysext/backend/Classes/Tree/Pagetree/Commands.php
@@ -372,7 +372,6 @@ class Commands
         }
         if (
             !$subNode->canBeEdited()
-            || !$subNode->canBeRemoved()
             || VersionState::cast($record['t3ver_state'])->equals(VersionState::DELETE_PLACEHOLDER)
         ) {
             $subNode->setDraggable(false);
diff --git a/typo3/sysext/backend/Classes/Tree/Pagetree/PagetreeNode.php b/typo3/sysext/backend/Classes/Tree/Pagetree/PagetreeNode.php
index 82b39f58f3e1..c70371b43d6b 100644
--- a/typo3/sysext/backend/Classes/Tree/Pagetree/PagetreeNode.php
+++ b/typo3/sysext/backend/Classes/Tree/Pagetree/PagetreeNode.php
@@ -424,6 +424,7 @@ class PagetreeNode extends \TYPO3\CMS\Backend\Tree\ExtDirectNode
         $arrayRepresentation['realId'] = $this->getId();
         $arrayRepresentation['nodeData']['id'] = $this->getId();
         $arrayRepresentation['readableRootline'] = $this->getReadableRootline();
+        $arrayRepresentation['canBeRemoved'] = $this->canBeRemoved();
         $arrayRepresentation['nodeData']['readableRootline'] = $this->getReadableRootline();
         $arrayRepresentation['nodeData']['mountPoint'] = $this->getMountPoint();
         $arrayRepresentation['nodeData']['workspaceId'] = $this->getWorkspaceId();
diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/extjs/components/pagetree/javascript/tree.js b/typo3/sysext/backend/Resources/Public/JavaScript/extjs/components/pagetree/javascript/tree.js
index abcbd0d7a63d..3ec1e5dbd32c 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/extjs/components/pagetree/javascript/tree.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/extjs/components/pagetree/javascript/tree.js
@@ -462,7 +462,7 @@ TYPO3.Components.PageTree.Tree = Ext.extend(Ext.tree.TreePanel, {
 	 */
 	initDd: function(treePanel, node) {
 		var nodeHasChildNodes = (node.hasChildNodes() || node.isExpandable());
-		if (this.deletionDropZoneId &&
+		if (this.deletionDropZoneId && node.attributes.canBeRemoved &&
 			(!nodeHasChildNodes ||
 			(nodeHasChildNodes && TYPO3.Components.PageTree.Configuration.canDeleteRecursivly)
 		)) {
-- 
GitLab