From acff9da490244cd405a4ae12eb7f034a3b39cfb6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christian=20E=C3=9Fl?= <indy.essl@gmail.com>
Date: Mon, 9 Mar 2020 19:22:55 +0100
Subject: [PATCH] [BUGFIX] Keep language or colPos when moving a record in list
 module

When copying a tt_content record in list module, the DataHandler would
internally look up the 'copyAfterDuplFields' settings in TCA and ensure,
that those fields are copied from its new neighboring record.

In TYPO3 core, the 'copyAfterDuplFields' settings are only used by the
table tt_content with 'colPos,sys_language_uid' as its values.

This makes sense for copying records, but the same behaviour, that stems
from TYPO3s very early days, was also used when records where moved
around with the DataHandler. When an editor changes the position of a
tt_content record in the list module, the record would then always
automatically adopt the colPos/sys_language_uid of its new neighbour,
which is usually not expected or desired, and often leads to much
confusion and broken content grids.

The code responsible for 'copyAfterDuplFields' is now removed from
DataHandler::moveRecord_raw(), while retaining the behaviour for
DataHandler::copyRecord(). Moving around tt_content records in the
page module to different columns or languages is not affected by this
change, as the colPos/sys_language_uid changes there are set in a
separate update statement.

Resolves: #72988
Resolves: #59901
Resolves: #39798
Resolves: #25216
Resolves: #14873
Releases: master, 9.5
Change-Id: Ic9c57fe2712b0996bc7b53cce4bcdc275c2820cb
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/63646
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Benni Mack <benni@typo3.org>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Benni Mack <benni@typo3.org>
Reviewed-by: Oliver Hader <oliver.hader@typo3.org>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
---
 .../core/Classes/DataHandling/DataHandler.php |  8 --------
 .../Modify/DataSet/changeContentSorting.csv   |  4 ++--
 .../changeContentSortingAndCopyDraftPage.csv  | 20 +++++++++----------
 .../changeContentSortingAndCopyLivePage.csv   |  4 ++--
 .../changeContentSortingNDeleteLiveRecord.csv |  4 ++--
 ...changeContentSortingNDeleteMovedRecord.csv |  4 ++--
 ...veContentToDifferentPageNChangeSorting.csv |  4 ++--
 .../Publish/DataSet/changeContentSorting.csv  |  4 ++--
 ...veContentToDifferentPageNChangeSorting.csv |  4 ++--
 9 files changed, 24 insertions(+), 32 deletions(-)

diff --git a/typo3/sysext/core/Classes/DataHandling/DataHandler.php b/typo3/sysext/core/Classes/DataHandling/DataHandler.php
index 2a31af7018d2..108ed64566bc 100644
--- a/typo3/sysext/core/Classes/DataHandling/DataHandler.php
+++ b/typo3/sysext/core/Classes/DataHandling/DataHandler.php
@@ -4115,10 +4115,6 @@ class DataHandler implements LoggerAwareInterface
                 if ($table === 'pages') {
                     $this->fixUniqueInSiteForSubpages((int)$uid);
                 }
-                // fixCopyAfterDuplFields
-                if ($origDestPid < 0) {
-                    $this->fixCopyAfterDuplFields($table, $uid, abs($origDestPid), 1);
-                }
             } elseif ($this->enableLogging) {
                 $destPropArr = $this->getRecordProperties('pages', $destPid);
                 $this->log($table, $uid, SystemLogDatabaseAction::MOVE, 0, SystemLogErrorClassification::USER_ERROR, 'Attempt to move page \'%s\' (%s) to inside of its own rootline (at page \'%s\' (%s))', 10, [$propArr['header'], $uid, $destPropArr['header'], $destPid], $propArr['pid']);
@@ -4178,10 +4174,6 @@ class DataHandler implements LoggerAwareInterface
                     if ($table === 'pages') {
                         $this->fixUniqueInSiteForSubpages((int)$uid);
                     }
-                    // fixCopyAfterDuplFields
-                    if ($origDestPid < 0) {
-                        $this->fixCopyAfterDuplFields($table, $uid, abs($origDestPid), 1);
-                    }
                 } elseif ($this->enableLogging) {
                     $destPropArr = $this->getRecordProperties('pages', $destPid);
                     $this->log($table, $uid, SystemLogDatabaseAction::MOVE, 0, SystemLogErrorClassification::USER_ERROR, 'Attempt to move page \'%s\' (%s) to inside of its own rootline (at page \'%s\' (%s))', 10, [$propArr['header'], $uid, $destPropArr['header'], $destPid], $propArr['pid']);
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSorting.csv
index 07e89e89c3a7..550aa4046339 100644
--- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSorting.csv
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSorting.csv
@@ -14,6 +14,6 @@
 ,321,-1,256,0,0,0,0,297,1,4,0,297,0,"Regular Element #1"
 ,322,89,640,0,0,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]"
 ,323,-1,384,0,1,321,297,301,1,4,0,301,0,"[Translate to Dansk:] Regular Element #1"
-,324,89,576,0,0,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
+,324,89,576,0,1,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
 ,325,-1,448,0,2,321,301,302,1,4,0,302,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
-,326,89,544,0,0,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
+,326,89,544,0,2,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingAndCopyDraftPage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingAndCopyDraftPage.csv
index 957ec3965548..989d2a256e4b 100644
--- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingAndCopyDraftPage.csv
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingAndCopyDraftPage.csv
@@ -22,9 +22,9 @@
 ,321,-1,256,0,0,0,0,297,1,4,0,297,0,"Regular Element #1"
 ,322,89,640,0,0,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]"
 ,323,-1,384,0,1,321,297,301,1,4,0,301,0,"[Translate to Dansk:] Regular Element #1"
-,324,89,576,0,0,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
+,324,89,576,0,1,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
 ,325,-1,448,0,2,321,301,302,1,4,0,302,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
-,326,89,544,0,0,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
+,326,89,544,0,2,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
 ,327,91,256,0,0,0,0,299,1,1,0,0,0,"Regular Element #3"
 ,328,-1,256,0,0,0,0,299,1,-1,0,327,0,"Regular Element #3"
 ,329,91,128,0,1,327,327,300,1,1,0,0,0,"[Translate to Dansk:] Regular Element #3"
@@ -33,11 +33,11 @@
 ,332,-1,64,0,0,0,0,298,1,-1,0,331,0,"Regular Element #2"
 ,333,91,32,0,0,0,0,297,1,1,0,0,0,"Regular Element #1"
 ,334,-1,32,0,0,0,0,297,1,-1,0,333,0,"Regular Element #1"
-,335,91,16,0,1,333,333,324,1,1,0,0,0,"[Translate to Dansk:] Regular Element #1"
-,336,-1,16,0,1,333,333,324,1,-1,0,335,0,"[Translate to Dansk:] Regular Element #1"
-,337,91,8,0,2,333,333,326,1,1,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
-,338,-1,8,0,2,333,333,326,1,-1,0,337,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
-,339,91,4,0,1,333,333,301,1,1,0,0,0,"[Translate to Dansk:] Regular Element #1"
-,340,-1,4,0,1,333,333,301,1,-1,0,339,0,"[Translate to Dansk:] Regular Element #1"
-,341,91,2,0,2,333,339,302,1,1,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
-,342,-1,2,0,2,333,339,302,1,-1,0,341,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
+,335,91,16,0,1,333,333,301,1,1,0,0,0,"[Translate to Dansk:] Regular Element #1"
+,336,-1,16,0,1,333,333,301,1,-1,0,335,0,"[Translate to Dansk:] Regular Element #1"
+,337,91,8,0,1,333,333,324,1,1,0,0,0,"[Translate to Dansk:] Regular Element #1"
+,338,-1,8,0,1,333,333,324,1,-1,0,337,0,"[Translate to Dansk:] Regular Element #1"
+,339,91,4,0,2,333,335,302,1,1,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
+,340,-1,4,0,2,333,335,302,1,-1,0,339,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
+,341,91,2,0,2,333,333,326,1,1,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
+,342,-1,2,0,2,333,333,326,1,-1,0,341,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingAndCopyLivePage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingAndCopyLivePage.csv
index 2e1c056f5ea6..88b4301fc460 100644
--- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingAndCopyLivePage.csv
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingAndCopyLivePage.csv
@@ -21,9 +21,9 @@
 ,321,-1,256,0,0,0,0,297,1,4,0,297,0,"Regular Element #1"
 ,322,89,640,0,0,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]"
 ,323,-1,384,0,1,321,297,301,1,4,0,301,0,"[Translate to Dansk:] Regular Element #1"
-,324,89,576,0,0,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
+,324,89,576,0,1,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
 ,325,-1,448,0,2,321,301,302,1,4,0,302,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
-,326,89,544,0,0,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
+,326,89,544,0,2,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
 ,327,91,256,0,0,0,0,299,0,0,0,0,0,"Regular Element #3"
 ,328,91,128,0,1,327,327,300,0,0,0,0,0,"[Translate to Dansk:] Regular Element #3"
 ,329,91,64,0,0,0,0,298,0,0,0,0,0,"Regular Element #2"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingNDeleteLiveRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingNDeleteLiveRecord.csv
index 42da16d87e7e..925ffe002dd7 100644
--- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingNDeleteLiveRecord.csv
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingNDeleteLiveRecord.csv
@@ -14,6 +14,6 @@
 ,321,-1,256,1,0,0,0,297,1,4,0,297,0,"Regular Element #1"
 ,322,89,640,1,0,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]"
 ,323,-1,384,1,1,321,297,301,1,4,0,301,0,"[Translate to Dansk:] Regular Element #1"
-,324,89,576,1,0,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
+,324,89,576,1,1,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
 ,325,-1,448,1,2,321,301,302,1,4,0,302,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
-,326,89,544,1,0,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
+,326,89,544,1,2,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingNDeleteMovedRecord.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingNDeleteMovedRecord.csv
index 7f1635fbcd28..1823b0c8e7a5 100644
--- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingNDeleteMovedRecord.csv
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/changeContentSortingNDeleteMovedRecord.csv
@@ -15,6 +15,6 @@
 ,322,89,640,1,0,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]"
 "# @todo Moved state is not reverted for translated records",,,,,,,,,,,,,,
 ,323,-1,384,0,1,321,297,301,1,4,0,301,0,"[Translate to Dansk:] Regular Element #1"
-,324,89,576,0,0,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
+,324,89,576,0,1,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
 ,325,-1,448,0,2,321,301,302,1,4,0,302,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
-,326,89,544,0,0,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
+,326,89,544,0,2,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/moveContentToDifferentPageNChangeSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/moveContentToDifferentPageNChangeSorting.csv
index a2a24df71659..4a0059165e8b 100644
--- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/moveContentToDifferentPageNChangeSorting.csv
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/moveContentToDifferentPageNChangeSorting.csv
@@ -16,6 +16,6 @@
 ,323,-1,256,0,0,0,0,297,1,4,0,297,0,"Regular Element #1"
 ,324,90,192,0,0,0,0,0,1,3,0,0,297,"[MOVE-TO PLACEHOLDER for #297, WS#1]"
 ,325,-1,384,0,1,323,297,301,1,4,0,301,0,"[Translate to Dansk:] Regular Element #1"
-,326,90,160,0,0,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
+,326,90,160,0,1,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
 ,327,-1,448,0,2,323,301,302,1,4,0,302,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
-,328,90,144,0,0,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
+,328,90,144,0,2,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/changeContentSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/changeContentSorting.csv
index 019685019886..eae14497884f 100644
--- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/changeContentSorting.csv
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/changeContentSorting.csv
@@ -12,6 +12,6 @@
 ,312,90,768,0,2,0,311,311,0,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #10"
 ,320,-1,512,0,0,0,0,298,2,2,0,298,0,"Regular Element #2"
 ,323,-1,384,0,1,321,297,301,1,4,0,301,0,"[Translate to Dansk:] Regular Element #1"
-,324,89,576,0,0,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
+,324,89,576,0,1,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
 ,325,-1,448,0,2,321,301,302,1,4,0,302,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
-,326,89,544,0,0,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
+,326,89,544,0,2,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/moveContentToDifferentPageNChangeSorting.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/moveContentToDifferentPageNChangeSorting.csv
index 218700a5182b..f16aaea3525a 100644
--- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/moveContentToDifferentPageNChangeSorting.csv
+++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/moveContentToDifferentPageNChangeSorting.csv
@@ -12,6 +12,6 @@
 ,312,90,768,0,2,0,311,311,0,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #10"
 ,320,-1,512,0,0,0,0,298,2,2,0,298,0,"Regular Element #2"
 ,325,-1,384,0,1,323,297,301,1,4,0,301,0,"[Translate to Dansk:] Regular Element #1"
-,326,90,160,0,0,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
+,326,90,160,0,1,297,0,0,1,3,0,0,301,"[MOVE-TO PLACEHOLDER for #301, WS#1]"
 ,327,-1,448,0,2,323,301,302,1,4,0,302,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1"
-,328,90,144,0,0,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
+,328,90,144,0,2,297,0,0,1,3,0,0,302,"[MOVE-TO PLACEHOLDER for #302, WS#1]"
-- 
GitLab