Fixed bug #5718: IRRE - Copying a page with related child records leads to duplicates...
authorOliver Hader <oliver.hader@typo3.org>
Sat, 14 Jul 2007 14:10:00 +0000 (14:10 +0000)
committerOliver Hader <oliver.hader@typo3.org>
Sat, 14 Jul 2007 14:10:00 +0000 (14:10 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/branches/TYPO3_4-1@2413 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
t3lib/class.t3lib_tcemain.php

index 333ccbe..c782274 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 2007-07-14  Oliver Hader  <oh@inpublica.de>
 
        * Fixed bug #5704: IRRE - Children on the table pages get the pid of the parent page in pagetree
+       * Fixed bug #5718: IRRE - Copying a page with related child records leads to duplicates of each children
 
 2007-07-13  Oliver Hader  <oh@inpublica.de>
 
index 3c6fd9f..fcbc228 100755 (executable)
@@ -2416,7 +2416,8 @@ class t3lib_TCEmain       {
                global $TCA;
 
                $uid = $origUid = intval($uid);
-               if ($TCA[$table] && $uid)       {
+                       // Only copy if the table is defined in TCA, a uid is given and the record wasn't copied before:
+               if ($TCA[$table] && $uid && !$this->isRecordCopied($table, $uid))       {
                        t3lib_div::loadTCA($table);
 /*
                                // In case the record to be moved turns out to be an offline version, we have to find the live version and work on that one (this case happens for pages with "branch" versioning type)
@@ -2626,7 +2627,8 @@ class t3lib_TCEmain       {
                global $TCA;
 
                $uid = intval($uid);
-               if ($TCA[$table] && $uid)       {
+                       // Only copy if the table is defined in TCA, a uid is given and the record wasn't copied before:
+               if ($TCA[$table] && $uid && !$this->isRecordCopied($table, $uid))       {
                        t3lib_div::loadTCA($table);
                        if ($this->doesRecordExist($table,$uid,'show')) {
 
@@ -5975,6 +5977,24 @@ State was change by %s (username: %s)
                return $emails;
        }
 
+       /**
+        * Determine if a record was copied or if a record is the result of a copy action.
+        *
+        * @param       string          $table: The tablename of the record
+        * @param       integer         $uid: The uid of the record
+        * @return      boolean         Returns true if the record is copied or is the result of a copy action
+        */
+       function isRecordCopied($table, $uid) {
+                       // If the record was copied:
+               if (isset($this->copyMappingArray[$table][$uid])) {
+                       return true;
+                       // If the record is the result of a copy action:
+               } elseif (isset($this->copyMappingArray[$table]) && in_array($uid, array_values($this->copyMappingArray[$table]))) {
+                       return true;
+               }
+               return false;
+       }
+