From 2b347709fc9edcd2435698e2794562153cccfef2 Mon Sep 17 00:00:00 2001 From: Lukasz Uznanski <l.uznanski@macopedia.pl> Date: Thu, 7 Sep 2017 21:19:15 +0200 Subject: [PATCH] [BUGFIX] Perform rollback only once if undeleting CE with History/Undo Releases: master, 8.7 Resolves: #81649 Change-Id: I1cb9a681b46327af56c2cb080c92b3cc273b0e10 Reviewed-on: https://review.typo3.org/53973 Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Joerg Kummer <typo3@enobe.de> Tested-by: Joerg Kummer <typo3@enobe.de> Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch> Tested-by: Christian Kuhn <lolli@schwarzbu.ch> --- .../backend/Classes/History/RecordHistory.php | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/typo3/sysext/backend/Classes/History/RecordHistory.php b/typo3/sysext/backend/Classes/History/RecordHistory.php index d1d50f313e48..e6f2d9c620df 100644 --- a/typo3/sysext/backend/Classes/History/RecordHistory.php +++ b/typo3/sysext/backend/Classes/History/RecordHistory.php @@ -214,36 +214,37 @@ class RecordHistory $tce->process_cmdmap(); unset($tce); } - // PROCESS CHANGES - // create an array for process_datamap - $diffModified = []; - foreach ($diff['oldData'] as $key => $value) { - $splitKey = explode(':', $key); - $diffModified[$splitKey[0]][$splitKey[1]] = $value; - } - switch (count($rollbackData)) { - case 1: - // all tables - $data = $diffModified; - break; - case 2: - // one record - $data[$rollbackData[0]][$rollbackData[1]] = $diffModified[$rollbackData[0]][$rollbackData[1]]; - break; - case 3: - // one field in one record - $data[$rollbackData[0]][$rollbackData[1]][$rollbackData[2]] = $diffModified[$rollbackData[0]][$rollbackData[1]][$rollbackData[2]]; - break; + if (!$diff['insertsDeletes']) { + // PROCESS CHANGES + // create an array for process_datamap + $diffModified = []; + foreach ($diff['oldData'] as $key => $value) { + $splitKey = explode(':', $key); + $diffModified[$splitKey[0]][$splitKey[1]] = $value; + } + switch (count($rollbackData)) { + case 1: + // all tables + $data = $diffModified; + break; + case 2: + // one record + $data[$rollbackData[0]][$rollbackData[1]] = $diffModified[$rollbackData[0]][$rollbackData[1]]; + break; + case 3: + // one field in one record + $data[$rollbackData[0]][$rollbackData[1]][$rollbackData[2]] = $diffModified[$rollbackData[0]][$rollbackData[1]][$rollbackData[2]]; + break; + } + // Removing fields: + $data = $this->removeFilefields($rollbackData[0], $data); + // Writes the data: + $tce = GeneralUtility::makeInstance(DataHandler::class); + $tce->dontProcessTransformations = true; + $tce->start($data, []); + $tce->process_datamap(); + unset($tce); } - // Removing fields: - $data = $this->removeFilefields($rollbackData[0], $data); - // Writes the data: - $tce = GeneralUtility::makeInstance(DataHandler::class); - $tce->dontProcessTransformations = true; - $tce->start($data, []); - $tce->process_datamap(); - unset($tce); - // Return to normal operation $this->lastHistoryEntry = false; $this->rollbackFields = ''; -- GitLab