[BUGFIX] Page tree does not visualize move targets 73/30473/2
authorOliver Hader <oliver@typo3.org>
Wed, 28 May 2014 13:40:01 +0000 (15:40 +0200)
committerOliver Hader <oliver.hader@typo3.org>
Tue, 17 Jun 2014 13:00:46 +0000 (15:00 +0200)
If moving an element to a different page, the page tree only
visualizes the change in the source page, but does not visualize
the target page.

The reason is that the move-pointer is used (t3ver_state=4)
instead of the move-placeholder (t3ver_state=3) in that case.

Resolves: #59114
Releases: 6.2
Change-Id: Iefa01e4c85e9fb753873d03e7638ac592c09a657
Reviewed-on: https://review.typo3.org/30473
Reviewed-by: Wouter Wolters
Reviewed-by: Oliver Hader
Tested-by: Oliver Hader
typo3/sysext/backend/Classes/Utility/BackendUtility.php

index 8e29a1b..ab19225 100644 (file)
@@ -3920,9 +3920,22 @@ class BackendUtility {
                if ($workspace != 0) {
                        foreach ($GLOBALS['TCA'] as $tableName => $cfg) {
                                if ($tableName != 'pages' && $cfg['ctrl']['versioningWS']) {
+                                       $joinStatement = 'A.t3ver_oid=B.uid';
+                                       // Consider records that are moved to a different page
+                                       if (self::isTableMovePlaceholderAware($tableName)) {
+                                               $movePointer = new VersionState(VersionState::MOVE_POINTER);
+                                               $joinStatement = '(A.t3ver_oid=B.uid AND A.t3ver_state<>' . $movePointer
+                                                       . ' OR A.t3ver_oid=B.t3ver_move_id AND A.t3ver_state=' . $movePointer . ')';
+                                       }
                                        // Select all records from this table in the database from the workspace
                                        // This joins the online version with the offline version as tables A and B
-                                       $output[$tableName] = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('B.uid as live_uid, A.uid as offline_uid', $tableName . ' A,' . $tableName . ' B', 'A.pid=-1' . ' AND B.pid=' . (int)$pageId . ' AND A.t3ver_wsid=' . (int)$workspace . ' AND A.t3ver_oid=B.uid' . self::deleteClause($tableName, 'A') . self::deleteClause($tableName, 'B'));
+                                       $output[$tableName] = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
+                                               'B.uid as live_uid, A.uid as offline_uid',
+                                               $tableName . ' A,' . $tableName . ' B',
+                                               'A.pid=-1' . ' AND B.pid=' . (int)$pageId
+                                                       . ' AND A.t3ver_wsid=' . (int)$workspace . ' AND ' . $joinStatement
+                                                       . self::deleteClause($tableName, 'A') . self::deleteClause($tableName, 'B')
+                                       );
                                        if (!is_array($output[$tableName]) || !count($output[$tableName])) {
                                                unset($output[$tableName]);
                                        }