diff --git a/Build/Scripts/checkIntegrityCsvFixtures.php b/Build/Scripts/checkIntegrityCsvFixtures.php index e2dd83330eaf813a942dc52cf128040e7d8c5ae4..fe4ad2ed98e71548d82030833021f7e10b1289da 100755 --- a/Build/Scripts/checkIntegrityCsvFixtures.php +++ b/Build/Scripts/checkIntegrityCsvFixtures.php @@ -94,6 +94,10 @@ class checkIntegrityCsvFixtures $columnCount = count($columns); } else { if (count($columns) !== $columnCount) { + // Skip CSV lines with starting with comments + if (count($columns) === 1 && strpos($columns[0], '#') === 0) { + continue; + } return 'Line ' . ($index + 1) . '; Expected column count: ' . $columnCount . '; Actual: ' . count($columns); } } diff --git a/typo3/sysext/core/Classes/DataHandling/DataHandler.php b/typo3/sysext/core/Classes/DataHandling/DataHandler.php index 83bd2fe7d4e5f849df1baffc3fd7394832fbcd14..e488d23e2d25ad9bf01b2075285a138afe218a75 100644 --- a/typo3/sysext/core/Classes/DataHandling/DataHandler.php +++ b/typo3/sysext/core/Classes/DataHandling/DataHandler.php @@ -1244,40 +1244,58 @@ class DataHandler implements LoggerAwareInterface } /** - * Fix shadowing of data in case we are editing an offline version of a live "New" placeholder record: + * Fix shadowing of data in case we are editing an offline version of a live "New" placeholder record. * * @param string $table Table name * @param int $id Record uid */ public function placeholderShadowing($table, $id) { - if ($liveRec = BackendUtility::getLiveVersionOfRecord($table, $id, '*')) { - if (VersionState::cast($liveRec['t3ver_state'])->indicatesPlaceholder()) { - $justStoredRecord = BackendUtility::getRecord($table, $id); - $newRecord = []; - $shadowCols = $GLOBALS['TCA'][$table]['ctrl']['shadowColumnsForNewPlaceholders']; - $shadowCols .= ',' . $GLOBALS['TCA'][$table]['ctrl']['languageField']; - $shadowCols .= ',' . $GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField']; - if (isset($GLOBALS['TCA'][$table]['ctrl']['translationSource'])) { - $shadowCols .= ',' . $GLOBALS['TCA'][$table]['ctrl']['translationSource']; - } - $shadowCols .= ',' . $GLOBALS['TCA'][$table]['ctrl']['type']; - $shadowCols .= ',' . $GLOBALS['TCA'][$table]['ctrl']['label']; - $shadowCols .= ',' . implode(',', GeneralUtility::makeInstance(SlugEnricher::class)->resolveSlugFieldNames($table)); - $shadowColumns = array_unique(GeneralUtility::trimExplode(',', $shadowCols, true)); - foreach ($shadowColumns as $fieldName) { - if ((string)$justStoredRecord[$fieldName] !== (string)$liveRec[$fieldName] && isset($GLOBALS['TCA'][$table]['columns'][$fieldName]) && $fieldName !== 'uid' && $fieldName !== 'pid') { - $newRecord[$fieldName] = $justStoredRecord[$fieldName]; - } - } - if (!empty($newRecord)) { - if ($this->enableLogging) { - $this->log($table, $liveRec['uid'], SystemLogGenericAction::UNDEFINED, 0, SystemLogErrorClassification::MESSAGE, 'Shadowing done on fields <i>' . implode(',', array_keys($newRecord)) . '</i> in placeholder record ' . $table . ':' . $liveRec['uid'] . ' (offline version UID=' . $id . ')', -1, [], $this->eventPid($table, $liveRec['uid'], $liveRec['pid'])); - } - $this->updateDB($table, $liveRec['uid'], $newRecord); - } + $liveRecord = BackendUtility::getLiveVersionOfRecord($table, $id, '*'); + if (empty($liveRecord)) { + return; + } + + $liveState = VersionState::cast($liveRecord['t3ver_state']); + $versionRecord = BackendUtility::getRecord($table, $id); + $versionState = VersionState::cast($versionRecord['t3ver_state']); + + if (!$liveState->indicatesPlaceholder() && !$versionState->indicatesPlaceholder()) { + return; + } + $factory = GeneralUtility::makeInstance( + PlaceholderShadowColumnsResolver::class, + $table, + $GLOBALS['TCA'][$table] ?? [] + ); + + if ($versionState->equals(VersionState::MOVE_POINTER)) { + $placeholderRecord = BackendUtility::getMovePlaceholder($table, $liveRecord['uid'], '*', $versionRecord['t3ver_wsid']); + $shadowColumns = $factory->forMovePlaceholder(); + } elseif ($liveState->indicatesPlaceholder()) { + $placeholderRecord = $liveRecord; + $shadowColumns = $factory->forNewPlaceholder(); + } else { + return; + } + if (empty($shadowColumns)) { + return; + } + + $placeholderValues = []; + foreach ($shadowColumns as $fieldName) { + if ((string)$versionRecord[$fieldName] !== (string)$placeholderRecord[$fieldName]) { + $placeholderValues[$fieldName] = $versionRecord[$fieldName]; } } + if (empty($placeholderValues)) { + return; + } + + if ($this->enableLogging) { + $this->log($table, $placeholderRecord['uid'], SystemLogGenericAction::UNDEFINED, 0, SystemLogErrorClassification::MESSAGE, 'Shadowing done on fields <i>' . implode(',', array_keys($placeholderValues)) . '</i> in placeholder record ' . $table . ':' . $liveRecord['uid'] . ' (offline version UID=' . $id . ')', -1, [], $this->eventPid($table, $liveRecord['uid'], $liveRecord['pid'])); + } + $this->updateDB($table, $placeholderRecord['uid'], $placeholderValues); } /** diff --git a/typo3/sysext/core/Classes/DataHandling/PlaceholderShadowColumnsResolver.php b/typo3/sysext/core/Classes/DataHandling/PlaceholderShadowColumnsResolver.php new file mode 100644 index 0000000000000000000000000000000000000000..87763be45b0643eb1058e5772664f81d41b71796 --- /dev/null +++ b/typo3/sysext/core/Classes/DataHandling/PlaceholderShadowColumnsResolver.php @@ -0,0 +1,132 @@ +<?php +declare(strict_types = 1); + +namespace TYPO3\CMS\Core\DataHandling; + +/* + * This file is part of the TYPO3 CMS project. + * + * It is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, either version 2 + * of the License, or any later version. + * + * For the full copyright and license information, please read the + * LICENSE.txt file that was distributed with this source code. + * + * The TYPO3 project - inspiring people to share! + */ + +use TYPO3\CMS\Core\Exception; +use TYPO3\CMS\Core\Utility\GeneralUtility; + +/** + * Resolver for placeholder shadow columns to be used in workspace aware environments. + * + * Certain fields need to be "shadowed" - NEW and MOVE placeholder need to have values kept in sync + * that are modified, like the "hidden" field (enable fields, slug fields etc). + * + * This class resolves the columns for a TCA table record that should be kept in sync. + * + * @see \TYPO3\CMS\Core\DataHandling\DataHandler::placeholderShadowing() + * @see \TYPO3\CMS\Workspaces\Hook\DataHandlerHook::moveRecord_wsPlaceholders() + */ +class PlaceholderShadowColumnsResolver +{ + protected const CONTROL_COLUMNS = [ + 'languageField', + 'transOrigPointerField', + 'translationSource', + 'type', + 'label' + ]; + + protected const FLAG_NONE = 0; + protected const FLAG_APPLY_SYSTEM_COLUMNS = 1; + protected const FLAG_APPLY_SLUG_COLUMNS = 2; + + /** + * @var string + */ + protected $tableName; + + /** + * @var array + */ + protected $tableConfiguration; + + /** + * @var int|null + */ + protected $flags; + + /** + * @param string $tableName Name of the database table + * @param array $tableConfiguration TCA configuration for $tableName + * @throws Exception + */ + public function __construct(string $tableName, array $tableConfiguration) + { + $this->tableName = $tableName; + $this->tableConfiguration = $tableConfiguration; + + if (empty($this->tableName) || empty($this->tableConfiguration)) { + throw new Exception('No table name and TCA given', 1574174231); + } + } + + /** + * @param int|null $flags Custom flags to adjust resolving behavior + * @return string[] Placeholder shadow column names + */ + public function forNewPlaceholder(int $flags = null): array + { + $flags = $flags ?? self::FLAG_APPLY_SYSTEM_COLUMNS | self::FLAG_APPLY_SLUG_COLUMNS; + $shadowColumnsList = $this->tableConfiguration['ctrl']['shadowColumnsForNewPlaceholders'] ?? ''; + return $this->forTable($shadowColumnsList, $flags); + } + + /** + * @param int|null $flags Custom flags to adjust resolving behavior + * @return string[] Placeholder shadow column names + */ + public function forMovePlaceholder(int $flags = null): array + { + $shadowColumnsList = $this->tableConfiguration['ctrl']['shadowColumnsForMovePlaceholders'] + ?? $this->tableConfiguration['ctrl']['shadowColumnsForNewPlaceholders'] ?? ''; + // @todo Applying same flags as for new-placeholders would streamline database integrity + return $this->forTable($shadowColumnsList, $flags); + } + + protected function forTable(string $shadowColumnsList, int $flags = null): array + { + $shadowColumns = explode(',', $shadowColumnsList); + $flags = $flags ?? self::FLAG_NONE; + + if ($flags & self::FLAG_APPLY_SYSTEM_COLUMNS) { + foreach (self::CONTROL_COLUMNS as $controlColumn) { + if (isset($this->tableConfiguration['ctrl'][$controlColumn])) { + $shadowColumns[] = $this->tableConfiguration['ctrl'][$controlColumn]; + } + } + } + if ($flags & self::FLAG_APPLY_SLUG_COLUMNS) { + $shadowColumns = array_merge( + $shadowColumns, + GeneralUtility::makeInstance(SlugEnricher::class)->resolveSlugFieldNames($this->tableName) + ); + } + foreach ($this->tableConfiguration['ctrl']['enablecolumns'] ?? [] as $enableColumn) { + $shadowColumns[] = $enableColumn; + } + + $shadowColumns = array_filter( + array_map('trim', $shadowColumns), + function (string $shadowColumn) { + return !empty($shadowColumn) && $shadowColumn !== 'uid' && $shadowColumn !== 'pid' + && isset($this->tableConfiguration['columns'][$shadowColumn]); + } + ); + $shadowColumns = array_unique($shadowColumns); + return $shadowColumns; + } +} diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/AbstractActionTestCase.php b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/AbstractActionTestCase.php index 8898854fd14390701892ed6ed261605df9a221ce..f017dd37a8661aacd68cb910b2f812d93f9bfb2e 100644 --- a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/AbstractActionTestCase.php +++ b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/AbstractActionTestCase.php @@ -86,6 +86,14 @@ abstract class AbstractActionTestCase extends \TYPO3\CMS\Core\Tests\Functional\D $this->actionService->modifyRecord(self::TABLE_Content, self::VALUE_ContentIdSecond, ['header' => 'Testing #1']); } + /** + * See DataSet/hideContent.csv + */ + public function hideContent() + { + $this->actionService->modifyRecord(self::TABLE_Content, self::VALUE_ContentIdSecond, ['hidden' => '1']); + } + /** * See DataSet/deleteContentRecord.csv */ @@ -305,6 +313,14 @@ abstract class AbstractActionTestCase extends \TYPO3\CMS\Core\Tests\Functional\D $this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdFirst, -self::VALUE_ContentIdSecond); } + /** + * See DataSet/moveContentRecordToDifferentPageAndHide.csv + */ + public function moveContentToDifferentPageAndHide() + { + $this->actionService->moveRecord(self::TABLE_Content, self::VALUE_ContentIdSecond, self::VALUE_PageIdTarget, ['hidden' => '1']); + } + /** * Page records */ diff --git a/typo3/sysext/workspaces/Classes/Hook/DataHandlerHook.php b/typo3/sysext/workspaces/Classes/Hook/DataHandlerHook.php index dea171863dc2f12a33ce7307dcbdfc7e07c4031e..3246bfbd2dcfb5c153e2f830fb92416326347edf 100644 --- a/typo3/sysext/workspaces/Classes/Hook/DataHandlerHook.php +++ b/typo3/sysext/workspaces/Classes/Hook/DataHandlerHook.php @@ -28,6 +28,7 @@ use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction; use TYPO3\CMS\Core\Database\ReferenceIndex; use TYPO3\CMS\Core\Database\RelationHandler; use TYPO3\CMS\Core\DataHandling\DataHandler; +use TYPO3\CMS\Core\DataHandling\PlaceholderShadowColumnsResolver; use TYPO3\CMS\Core\Localization\LanguageService; use TYPO3\CMS\Core\Mail\MailMessage; use TYPO3\CMS\Core\Service\MarkerBasedTemplateService; @@ -1544,18 +1545,15 @@ class DataHandlerHook // represents the position to where the record is eventually moved to. $newVersion_placeholderFieldArray = []; - // Use property for move placeholders if set (since TYPO3 CMS 6.2) - if (isset($GLOBALS['TCA'][$table]['ctrl']['shadowColumnsForMovePlaceholders'])) { - $shadowColumnsForMovePlaceholder = $GLOBALS['TCA'][$table]['ctrl']['shadowColumnsForMovePlaceholders']; - } elseif (isset($GLOBALS['TCA'][$table]['ctrl']['shadowColumnsForNewPlaceholders'])) { - // Fallback to property for new placeholder (existed long time before TYPO3 CMS 6.2) - $shadowColumnsForMovePlaceholder = $GLOBALS['TCA'][$table]['ctrl']['shadowColumnsForNewPlaceholders']; - } - + $factory = GeneralUtility::makeInstance( + PlaceholderShadowColumnsResolver::class, + $table, + $GLOBALS['TCA'][$table] ?? [] + ); + $shadowColumns = $factory->forMovePlaceholder(); // Set values from the versioned record to the move placeholder - if (!empty($shadowColumnsForMovePlaceholder)) { + if (!empty($shadowColumns)) { $versionedRecord = BackendUtility::getRecord($table, $offlineUid); - $shadowColumns = GeneralUtility::trimExplode(',', $shadowColumnsForMovePlaceholder, true); foreach ($shadowColumns as $shadowColumn) { if (isset($versionedRecord[$shadowColumn])) { $newVersion_placeholderFieldArray[$shadowColumn] = $versionedRecord[$shadowColumn]; diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/ActionTest.php b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/ActionTest.php index 2a9b0c6e9e182ebe9ac5e522a91b28c580db2bd6..9e0a1699489e43f3e1bf131eae55f69fd433437b 100644 --- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/ActionTest.php +++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/ActionTest.php @@ -89,6 +89,40 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\Reg ->setTable(self::TABLE_Content)->setField('header')->setValues('Testing #1')); } + /** + * @test + * See DataSet/hideContent.csv + */ + public function hideContent() + { + parent::hideContent(); + $this->assertAssertionDataSet('hideContent'); + + $responseSections = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseSections(); + self::assertThat($responseSections, $this->getRequestSectionDoesNotHaveRecordConstraint() + ->setTable(self::TABLE_Content)->setField('header')->setValues('Regular Element #2')); + } + + /** + * @test + * See DataSet/hideContentAndMoveToDifferentPage.csv + */ + public function hideContentAndMoveToDifferentPage() + { + parent::hideContent(); + parent::moveContentToDifferentPage(); + $this->assertAssertionDataSet('hideContentAndMoveToDifferentPage'); + + $responseSectionsSource = $this->getFrontendResponse(self::VALUE_PageId, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseSections(); + self::assertThat($responseSectionsSource, $this->getRequestSectionHasRecordConstraint() + ->setTable(self::TABLE_Content)->setField('header')->setValues('Regular Element #1')); + self::assertThat($responseSectionsSource, $this->getRequestSectionDoesNotHaveRecordConstraint() + ->setTable(self::TABLE_Content)->setField('header')->setValues('Regular Element #2')); + $responseSectionsTarget = $this->getFrontendResponse(self::VALUE_PageIdTarget, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseSections(); + self::assertThat($responseSectionsTarget, $this->getRequestSectionDoesNotHaveRecordConstraint() + ->setTable(self::TABLE_Content)->setField('header')->setValues('Regular Element #2')); + } + /** * @test * See DataSet/deleteContentRecord.csv @@ -202,9 +236,8 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\Reg $this->assertAssertionDataSet('localizeContentWHideAtCopy'); $responseSections = $this->getFrontendResponse(self::VALUE_PageId, self::VALUE_LanguageId, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseSections(); - // @todo Localized element should be retrieved self::assertThat($responseSections, $this->getRequestSectionHasRecordConstraint() - ->setTable(self::TABLE_Content)->setField('header')->setValues('[Translate to Dansk:] Regular Element #1' /* , '[Translate to Dansk:] Regular Element #2'*/)); + ->setTable(self::TABLE_Content)->setField('header')->setValues('[Translate to Dansk:] Regular Element #1', '[Translate to Dansk:] Regular Element #2')); } /** @@ -300,6 +333,20 @@ class ActionTest extends \TYPO3\CMS\Workspaces\Tests\Functional\DataHandling\Reg ->setTable(self::TABLE_Content)->setField('header')->setValues('Regular Element #1', 'Regular Element #2')); } + /** + * @test + * See DataSet/moveContentToDifferentPageAndHide.csv + */ + public function moveContentToDifferentPageAndHide() + { + parent::moveContentToDifferentPageAndHide(); + $this->assertAssertionDataSet('moveContentToDifferentPageAndHide'); + + $responseSections = $this->getFrontendResponse(self::VALUE_PageIdTarget, 0, self::VALUE_BackendUserId, self::VALUE_WorkspaceId)->getResponseSections(); + self::assertThat($responseSections, $this->getRequestSectionDoesNotHaveRecordConstraint() + ->setTable(self::TABLE_Content)->setField('header')->setValues('Regular Element #2')); + } + /** * Page records */ diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/hideContent.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/hideContent.csv new file mode 100644 index 0000000000000000000000000000000000000000..306876bd92c0e5d5a2b675922a973f79acdaec67 --- /dev/null +++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/hideContent.csv @@ -0,0 +1,14 @@ +"tt_content",,,,,,,,,,,,,,, +,"uid","pid","sorting","deleted","hidden","sys_language_uid","l18n_parent","l10n_source","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header" +,296,88,256,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #0" +,297,89,256,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #1" +,298,89,512,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #2" +,299,89,768,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #3" +,300,89,1024,0,0,1,299,299,299,0,0,0,0,0,"[Translate to Dansk:] Regular Element #3" +,301,89,384,0,0,1,297,297,297,0,0,0,0,0,"[Translate to Dansk:] Regular Element #1" +,302,89,448,0,0,2,297,301,301,0,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1" +,310,90,256,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #10" +,311,90,512,0,0,1,0,310,310,0,0,0,0,0,"[Translate to Dansk:] Regular Element #10" +,312,90,768,0,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,0,298,2,2,0,298,0,"Regular Element #2" +,321,-1,512,0,1,0,0,0,298,1,0,0,298,0,"Regular Element #2" diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/hideContentAndMoveToDifferentPage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/hideContentAndMoveToDifferentPage.csv new file mode 100644 index 0000000000000000000000000000000000000000..8bd5efceeb1a9167281467c4965251b018dfbbd6 --- /dev/null +++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/hideContentAndMoveToDifferentPage.csv @@ -0,0 +1,15 @@ +"tt_content",,,,,,,,,,,,,,, +,"uid","pid","sorting","deleted","hidden","sys_language_uid","l18n_parent","l10n_source","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header" +,296,88,256,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #0" +,297,89,256,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #1" +,298,89,512,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #2" +,299,89,768,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #3" +,300,89,1024,0,0,1,299,299,299,0,0,0,0,0,"[Translate to Dansk:] Regular Element #3" +,301,89,384,0,0,1,297,297,297,0,0,0,0,0,"[Translate to Dansk:] Regular Element #1" +,302,89,448,0,0,2,297,301,301,0,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1" +,310,90,256,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #10" +,311,90,512,0,0,1,0,310,310,0,0,0,0,0,"[Translate to Dansk:] Regular Element #10" +,312,90,768,0,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,0,298,2,2,0,298,0,"Regular Element #2" +,321,-1,512,0,1,0,0,0,298,1,4,0,298,0,"Regular Element #2" +,322,90,128,0,1,0,0,0,0,1,3,0,0,298,"[MOVE-TO PLACEHOLDER for #298, WS#1]" diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentWHideAtCopy.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentWHideAtCopy.csv index 2b39d4b520d30fb5f1d2f718017474d3f36c3ae1..7409213795c6c5b364e77515fffcb3af75d2f340 100644 --- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentWHideAtCopy.csv +++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentWHideAtCopy.csv @@ -11,5 +11,5 @@ ,311,90,512,0,0,1,0,310,310,0,0,0,0,0,"[Translate to Dansk:] Regular Element #10" ,312,90,768,0,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,0,298,2,2,0,298,0,"Regular Element #2" -,321,89,416,1,0,1,298,298,298,1,1,0,0,0,"[Translate to Dansk:] Regular Element #2" +,321,89,416,0,0,1,298,298,298,1,1,0,0,0,"[Translate to Dansk:] Regular Element #2" ,322,-1,416,0,0,1,298,298,298,1,-1,0,321,0,"[Translate to Dansk:] Regular Element #2" diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/moveContentToDifferentPageAndHide.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/moveContentToDifferentPageAndHide.csv new file mode 100644 index 0000000000000000000000000000000000000000..8bd5efceeb1a9167281467c4965251b018dfbbd6 --- /dev/null +++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/moveContentToDifferentPageAndHide.csv @@ -0,0 +1,15 @@ +"tt_content",,,,,,,,,,,,,,, +,"uid","pid","sorting","deleted","hidden","sys_language_uid","l18n_parent","l10n_source","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header" +,296,88,256,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #0" +,297,89,256,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #1" +,298,89,512,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #2" +,299,89,768,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #3" +,300,89,1024,0,0,1,299,299,299,0,0,0,0,0,"[Translate to Dansk:] Regular Element #3" +,301,89,384,0,0,1,297,297,297,0,0,0,0,0,"[Translate to Dansk:] Regular Element #1" +,302,89,448,0,0,2,297,301,301,0,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1" +,310,90,256,0,0,0,0,0,0,0,0,0,0,0,"Regular Element #10" +,311,90,512,0,0,1,0,310,310,0,0,0,0,0,"[Translate to Dansk:] Regular Element #10" +,312,90,768,0,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,0,298,2,2,0,298,0,"Regular Element #2" +,321,-1,512,0,1,0,0,0,298,1,4,0,298,0,"Regular Element #2" +,322,90,128,0,1,0,0,0,0,1,3,0,0,298,"[MOVE-TO PLACEHOLDER for #298, WS#1]"