diff --git a/typo3/sysext/core/Classes/DataHandling/DataHandler.php b/typo3/sysext/core/Classes/DataHandling/DataHandler.php index 18649cf186907d6968e122194df28cf68f73c7e8..fff706a18a1d9d5a5b696154ea54747eb584d946 100644 --- a/typo3/sysext/core/Classes/DataHandling/DataHandler.php +++ b/typo3/sysext/core/Classes/DataHandling/DataHandler.php @@ -4438,10 +4438,8 @@ class DataHandler implements LoggerAwareInterface return false; } - $GLOBALS['TCA'][$table]['ctrl'] += ['languageField' => '', 'transOrigPointerField' => '']; - $this->registerNestedElementCall($table, $uid, 'localize-' . (string)$language); - if (!$GLOBALS['TCA'][$table]['ctrl']['languageField'] || !$GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField']) { + if (empty($GLOBALS['TCA'][$table]['ctrl']['languageField']) || empty($GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField'])) { $this->log($table, $uid, SystemLogDatabaseAction::LOCALIZE, 0, SystemLogErrorClassification::USER_ERROR, 'Localization failed; "languageField" and "transOrigPointerField" must be defined for the table ' . $table); return false; } @@ -7685,76 +7683,103 @@ class DataHandler implements LoggerAwareInterface } /** - * Returning uid of previous localized record, if any, for tables with a "sortby" column - * Used when new localized records are created so that localized records are sorted in the same order as the default language records + * Returning uid of "previous" localized record, if any, for tables with a "sortby" column. + * Used when records are localized, so that localized records are sorted in the + * same order as the source language records. + * + * The uid of the returned record is later used to create the localized record "after" + * (higher sorting value) than the one the uid is returned of. * - * For a given record (A) uid (record we're translating) it finds first default language record (from the same colpos) - * with sorting smaller than given record (B). - * Then it fetches a translated version of record B and returns it's uid. + * There are basically two scenarios: + * * The localized record is to be placed as the first record of the target pid/language + * combination. In this case, there is no "before" record in this language. The method + * returns input $uid, saying "insert the localized record with a higher sorting value + * than the record the localization is created from". + * * There is a localized record "before" (lower sorting value) in the target pid/language + * combination. For instance because source language element 2 is being translated and + * source language element 1 has already been translated. In this case, the uid of the + * 'element 1' is returned, saying "insert the localized record with a higher sorting + * value than the "before" record in this language. * - * If there is no record B, or it has no translation in given language, the record A uid is returned. - * The localized record will be placed the after record which uid is returned. + * The algorithm first fetches the record of given input uid. It then looks if there is a + * record with a lower sorting value for this pid/language combination. If no, input uid + * is returned ("place with higher sorting than source language record"). If yes, it looks + * if there is a localization of that source record in the target language and return the + * uid of that target language record ("place with higher sorting that this traget language + * record"). When dealing with table tt_content, colpos is also taken into account. * * @param string $table Table name - * @param int $uid Uid of default language record - * @param int $pid Pid of default language record - * @param int $language Language of localization + * @param int $uid Uid of source language record + * @param int $pid Pid of source language record + * @param int $targetLanguage Target language id * @return int uid of record after which the localized record should be inserted */ - protected function getPreviousLocalizedRecordUid($table, $uid, $pid, $language) + protected function getPreviousLocalizedRecordUid($table, $uid, $pid, $targetLanguage) { $previousLocalizedRecordUid = $uid; $sortColumn = $GLOBALS['TCA'][$table]['ctrl']['sortby'] ?? ''; - if ($sortColumn) { - $select = [$sortColumn, 'pid', 'uid']; - // For content elements, we also need the colPos - if ($table === 'tt_content') { - $select[] = 'colPos'; - } - // Get the sort value of the default language record - $row = BackendUtility::getRecord($table, $uid, implode(',', $select)); - if (is_array($row)) { - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($table); - $this->addDeleteRestriction($queryBuilder->getRestrictions()->removeAll()); + if (!$sortColumn) { + return $previousLocalizedRecordUid; + } - $queryBuilder - ->select(...$select) - ->from($table) - ->where( - $queryBuilder->expr()->eq( - 'pid', - $queryBuilder->createNamedParameter($pid, \PDO::PARAM_INT) - ), - $queryBuilder->expr()->eq( - $GLOBALS['TCA'][$table]['ctrl']['languageField'], - $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT) - ), - $queryBuilder->expr()->lt( - $sortColumn, - $queryBuilder->createNamedParameter($row[$sortColumn], \PDO::PARAM_INT) - ) - ) - ->orderBy($sortColumn, 'DESC') - ->addOrderBy('uid', 'DESC') - ->setMaxResults(1); - if ($table === 'tt_content') { - $queryBuilder - ->andWhere( - $queryBuilder->expr()->eq( - 'colPos', - $queryBuilder->createNamedParameter($row['colPos'], \PDO::PARAM_INT) - ) - ); - } - // If there is an element, find its localized record in specified localization language on this page - if ($previousRow = $queryBuilder->execute()->fetchAssociative()) { - $previousLocalizedRecord = BackendUtility::getRecordLocalization($table, $previousRow['uid'], $language, 'pid=' . (int)$pid); - if (isset($previousLocalizedRecord[0]) && is_array($previousLocalizedRecord[0])) { - $previousLocalizedRecordUid = $previousLocalizedRecord[0]['uid']; - } - } + // Typically l10n_parent + $transOrigPointerField = $GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField']; + // Typically sys_language_uid + $languageField = $GLOBALS['TCA'][$table]['ctrl']['languageField']; + + $select = [$sortColumn, $languageField, $transOrigPointerField, 'pid', 'uid']; + // For content elements, we also need the colPos + if ($table === 'tt_content') { + $select[] = 'colPos'; + } + + // Get the sort value and some other details of the source language record + $row = BackendUtility::getRecord($table, $uid, implode(',', $select)); + if (!is_array($row)) { + // This if may be obsolete ... didn't the callee already check if the source record exists? + return $previousLocalizedRecordUid; + } + + // Try to find a "before" record in source language + $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($table); + $this->addDeleteRestriction($queryBuilder->getRestrictions()->removeAll()); + $queryBuilder + ->select(...$select) + ->from($table) + ->where( + $queryBuilder->expr()->eq( + 'pid', + $queryBuilder->createNamedParameter($pid, \PDO::PARAM_INT) + ), + $queryBuilder->expr()->eq( + $languageField, + $queryBuilder->createNamedParameter($row[$languageField], \PDO::PARAM_INT) + ), + $queryBuilder->expr()->lt( + $sortColumn, + $queryBuilder->createNamedParameter($row[$sortColumn], \PDO::PARAM_INT) + ) + ) + ->orderBy($sortColumn, 'DESC') + ->addOrderBy('uid', 'DESC') + ->setMaxResults(1); + if ($table === 'tt_content') { + $queryBuilder->andWhere( + $queryBuilder->expr()->eq( + 'colPos', + $queryBuilder->createNamedParameter($row['colPos'], \PDO::PARAM_INT) + ) + ); + } + // If there is a "before" record in source language, see if it is localized to target language. + // If so, return uid of target language record. + if ($previousRow = $queryBuilder->execute()->fetchAssociative()) { + $previousLocalizedRecord = BackendUtility::getRecordLocalization($table, $previousRow['uid'], $targetLanguage, 'pid=' . (int)$pid); + if (isset($previousLocalizedRecord[0]) && is_array($previousLocalizedRecord[0])) { + $previousLocalizedRecordUid = $previousLocalizedRecord[0]['uid']; } } + return $previousLocalizedRecordUid; } diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/AbstractActionTestCase.php b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/AbstractActionTestCase.php index 95cfb84a98bb0f18e01261d5c3eebbe923a2a1fa..a7cfa8f4a83d8fdba66ca3c8f0b948d597c9f3e6 100644 --- a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/AbstractActionTestCase.php +++ b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/AbstractActionTestCase.php @@ -18,6 +18,7 @@ declare(strict_types=1); namespace TYPO3\CMS\Core\Tests\Functional\DataHandling\Regular; use TYPO3\CMS\Core\Database\ReferenceIndex; +use TYPO3\CMS\Core\DataHandling\DataHandler; use TYPO3\CMS\Core\Migrations\TcaMigration; use TYPO3\CMS\Core\Tests\Functional\DataHandling\AbstractDataHandlerActionTestCase; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -255,6 +256,56 @@ abstract class AbstractActionTestCase extends AbstractDataHandlerActionTestCase $this->actionService->modifyRecord(self::TABLE_Content, self::VALUE_ContentIdThird, ['header' => 'Testing #1']); } + /** + * Test for issue https://forge.typo3.org/issues/83079 - sorting of 'localization of localization' should + * use the sort value of the source record for the first localized record, and sort value of 'previous' + * record of target language for subsequent records. + */ + public function localizeContentFromNonDefaultLanguageWithAllContentElements(): void + { + // Change defaults from import data set: We want to create all the lang 1 and lang 2 content elements + // with one DH call in one go per language, but the import data set has some localized content elements + // already. Drop those. + $this->setWorkspaceId(0); + $this->actionService->deleteRecords([ + 'tt_content' => [300, 301, 302], + ]); + if (defined('static::VALUE_WorkspaceId') > 0) { + $this->setWorkspaceId(static::VALUE_WorkspaceId); + } + + // Create translated pages first + $this->actionService->copyRecordToLanguage(self::TABLE_Page, self::VALUE_PageId, self::VALUE_LanguageId); + $this->actionService->copyRecordToLanguage(self::TABLE_Page, self::VALUE_PageId, self::VALUE_LanguageIdSecond); + + // @todo: This should be extracted as localizeRecords() in addition to localizeRecord() to ActionService + // Create localization of the 3 default language content elements + $commandMap = [ + 'tt_content' => [ + self::VALUE_ContentIdFirst => [ 'localize' => self::VALUE_LanguageId], + self::VALUE_ContentIdSecond => [ 'localize' => self::VALUE_LanguageId], + self::VALUE_ContentIdThird => [ 'localize' => self::VALUE_LanguageId], + ], + ]; + $dataHandler = GeneralUtility::makeInstance(DataHandler::class); + $dataHandler->start([], $commandMap); + $dataHandler->process_cmdmap(); + // uid's of lang 1 localized elements + $mappingArray = $dataHandler->copyMappingArray_merged; + + // Localize again, with uid's of second language as source ("translation of translation") + $commandMap = [ + 'tt_content' => [ + $mappingArray['tt_content'][self::VALUE_ContentIdFirst] => ['localize' => self::VALUE_LanguageIdSecond], + $mappingArray['tt_content'][self::VALUE_ContentIdSecond] => ['localize' => self::VALUE_LanguageIdSecond], + $mappingArray['tt_content'][self::VALUE_ContentIdThird] => ['localize' => self::VALUE_LanguageIdSecond], + ], + ]; + $dataHandler = GeneralUtility::makeInstance(DataHandler::class); + $dataHandler->start([], $commandMap); + $dataHandler->process_cmdmap(); + } + /** * Note: workspaces has an additional variant of this test "localizeContentAfterMovedInLive" that performs * the localization of the content element after it has been moved in live first. diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/ActionTest.php b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/ActionTest.php index 1ac2a5c0cf6a297aa0731cd5831bd171a4848fe1..b5ef057b5b220d444b093c20b6e37e0ab3ec4c6e 100644 --- a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/ActionTest.php +++ b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/ActionTest.php @@ -384,6 +384,15 @@ class ActionTest extends AbstractActionTestCase ->setTable(self::TABLE_Content)->setField('header')->setValues('[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1', 'Testing #1')); } + /** + * @test + */ + public function localizeContentFromNonDefaultLanguageWithAllContentElements(): void + { + parent::localizeContentFromNonDefaultLanguageWithAllContentElements(); + $this->assertAssertionDataSet('localizeContentFromNonDefaultLanguageWithAllContentElements'); + } + /** * @test */ diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv index 77bf5befd90883a55a12f5cde0c0200d580b920e..f2f7ac96ba8bbf1506f2b18116916be5f09a11d9 100644 --- a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv +++ b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv @@ -22,7 +22,7 @@ ,300,89,1024,0,1,299,299,299,0,0,0,0,"[Translate to Dansk:] Regular Element #3" ,301,89,384,0,1,297,297,297,0,0,0,0,"[Translate to Dansk:] Regular Element #1" ,302,89,448,0,2,297,301,301,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1" -,303,89,1280,0,2,0,300,300,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3" +,303,89,480,0,2,0,300,300,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3" "sys_refindex",,,,,,,,,,,,, ,"hash","tablename","recuid","field","flexpointer","softref_key","softref_id","sorting","workspace","ref_table","ref_uid","ref_string", ,"1130084e4038e95f2d5806b731cd416a","tt_content",300,"l18n_parent",,,,0,0,"tt_content",299,, diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguage.csv b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguage.csv index 90392514189ee801e377e19a22fea7bb5fa6b677..4cabc77849ccc8e35fb744646b902b31ee9aac29 100644 --- a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguage.csv +++ b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguage.csv @@ -22,7 +22,7 @@ ,300,89,1024,0,1,299,299,299,0,0,0,0,"[Translate to Dansk:] Regular Element #3" ,301,89,384,0,1,297,297,297,0,0,0,0,"[Translate to Dansk:] Regular Element #1" ,302,89,448,0,2,297,301,301,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1" -,303,89,1280,0,2,299,300,300,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3" +,303,89,480,0,2,299,300,300,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3" "sys_refindex",,,,,,,,,,,,, ,"hash","tablename","recuid","field","flexpointer","softref_key","softref_id","sorting","workspace","ref_table","ref_uid","ref_string", ,"1130084e4038e95f2d5806b731cd416a","tt_content",300,"l18n_parent",,,,0,0,"tt_content",299,, diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguageWSynchronizationDefault.csv b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguageWSynchronizationDefault.csv index 1eda1afb4d37e94809cf0bccc16bed6b2e9eaf48..82bbb5c7e2dd90b2f9791cacb15c047529f07e11 100644 --- a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguageWSynchronizationDefault.csv +++ b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguageWSynchronizationDefault.csv @@ -22,7 +22,7 @@ ,300,89,1024,0,1,299,299,299,0,0,0,0,"Testing #1","{""header"":""parent""}" ,301,89,384,0,1,297,297,297,0,0,0,0,"[Translate to Dansk:] Regular Element #1", ,302,89,448,0,2,297,301,301,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1", -,303,89,1280,0,2,299,300,300,0,0,0,0,"Testing #1","{""header"":""parent""}" +,303,89,480,0,2,299,300,300,0,0,0,0,"Testing #1","{""header"":""parent""}" "sys_refindex",,,,,,,,,,,,,, ,"hash","tablename","recuid","field","flexpointer","softref_key","softref_id","sorting","workspace","ref_table","ref_uid","ref_string",, ,"1130084e4038e95f2d5806b731cd416a","tt_content",300,"l18n_parent",,,,0,0,"tt_content",299,,, diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguageWSynchronizationSource.csv b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguageWSynchronizationSource.csv index b4c6a63745c425386ba02af341b461d21e23852e..d005ef963d1a0a977342ebf1f42f020334bf8a38 100644 --- a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguageWSynchronizationSource.csv +++ b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguageWSynchronizationSource.csv @@ -22,7 +22,7 @@ ,300,89,1024,0,1,299,299,299,0,0,0,0,"Testing #1","{""header"":""parent""}" ,301,89,384,0,1,297,297,297,0,0,0,0,"[Translate to Dansk:] Regular Element #1", ,302,89,448,0,2,297,301,301,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1", -,303,89,1280,0,2,299,300,300,0,0,0,0,"Testing #1","{""header"":""source""}" +,303,89,480,0,2,299,300,300,0,0,0,0,"Testing #1","{""header"":""source""}" "sys_refindex",,,,,,,,,,,,,, ,"hash","tablename","recuid","field","flexpointer","softref_key","softref_id","sorting","workspace","ref_table","ref_uid","ref_string",, ,"1130084e4038e95f2d5806b731cd416a","tt_content",300,"l18n_parent",,,,0,0,"tt_content",299,,, diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguageWithAllContentElements.csv b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguageWithAllContentElements.csv new file mode 100644 index 0000000000000000000000000000000000000000..4234f8cb209ae54992788fbe1a439c2a7b008dc0 --- /dev/null +++ b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguageWithAllContentElements.csv @@ -0,0 +1,43 @@ +"pages",,,,,,,,,,,,,, +,"uid","pid","sorting","deleted","sys_language_uid","l10n_parent","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","title","slug", +,1,0,256,0,0,0,0,0,0,0,0,"FunctionalTest","/", +,50,0,512,0,0,0,0,0,0,0,0,"Second Root Page","/", +,51,50,128,0,0,0,0,0,0,0,0,"DataHandlerTest in second tree","/data-handler", +,52,51,128,0,0,0,0,0,0,0,0,"Relations in second tree","/data-handler/relations", +,88,1,256,0,0,0,0,0,0,0,0,"DataHandlerTest","/data-handler", +,89,88,256,0,0,0,0,0,0,0,0,"Relations","/data-handler/relations", +,90,88,512,0,0,0,0,0,0,0,0,"Target","/data-handler/target", +,91,88,256,0,1,89,0,0,0,0,0,"[Translate to Dansk:] Relations","/data-handler/translate-to-dansk-relations", +,92,88,256,0,2,89,0,0,0,0,0,"[Translate to Deutsch:] Relations","/data-handler/translate-to-deutsch-relations", +"sys_language",,,,,,,,,,,,,, +,"uid","pid","hidden","title","flag",,,,,,,,, +,1,0,0,"Dansk","dk",,,,,,,,, +,2,0,0,"Deutsch","de",,,,,,,,, +"tt_content",,,,,,,,,,,,,, +,"uid","pid","sorting","deleted","sys_language_uid","l18n_parent","l10n_source","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","header","bodytext" +,296,88,256,0,0,0,0,0,0,0,0,0,"Regular Element #0", +,297,89,384,0,0,0,0,0,0,0,0,0,"Regular Element #1", +,298,89,512,0,0,0,0,0,0,0,0,0,"Regular Element #2", +,299,89,768,0,0,0,0,0,0,0,0,0,"Regular Element #3", +# Next 3 are deleted to not disturb "localize many records on this page" +,300,89,1024,1,1,299,299,299,0,0,0,0,"[Translate to Dansk:] Regular Element #3", +,301,89,384,1,1,297,297,297,0,0,0,0,"[Translate to Dansk:] Regular Element #1", +,302,89,448,1,2,297,301,301,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1", +,303,89,448,0,1,297,297,297,0,0,0,0,"[Translate to Dansk:] Regular Element #1", +,304,89,480,0,1,298,298,298,0,0,0,0,"[Translate to Dansk:] Regular Element #2", +,305,89,496,0,1,299,299,299,0,0,0,0,"[Translate to Dansk:] Regular Element #3", +,306,89,464,0,2,297,303,303,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1", +# The point is here: sorting of 307 is calculated as "after" of 306 - it's actually lower than sorting of source 304 +,307,89,472,0,2,298,304,304,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #2", +# The point is here: sorting of 308 is calculated as "after" of 307 - it's actually lower than sorting of source 305 +,308,89,476,0,2,299,305,305,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3", +"sys_refindex",,,,,,,,,,,,,, +,"hash","tablename","recuid","field","flexpointer","softref_key","softref_id","sorting","workspace","ref_table","ref_uid","ref_string",, +,"583b9974d1df1d9efb695cdabfe53a73","pages",91,"l10n_parent",,,,0,0,"pages",89,,, +,"2a42323931078b2842779bd9446e8152","pages",92,"l10n_parent",,,,0,0,"pages",89,,, +,"65715d319d6e2557ef567590d3147606","tt_content",303,"l18n_parent",,,,0,0,"tt_content",297,,, +,"9284c2437ea4aa81c7a500fa332c87de","tt_content",304,"l18n_parent",,,,0,0,"tt_content",298,,, +,"4b7a1808402da33b274d18be1dab407d","tt_content",305,"l18n_parent",,,,0,0,"tt_content",299,,, +,"dfa52a0320de59c02ffb64881c849498","tt_content",306,"l18n_parent",,,,0,0,"tt_content",297,,, +,"6e757d756cab07522a5072d8b60fae5d","tt_content",307,"l18n_parent",,,,0,0,"tt_content",298,,, +,"39547f04497337fd8ae72984033f39ad","tt_content",308,"l18n_parent",,,,0,0,"tt_content",299,,, 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 76fd2401ac0990a4326b9c70e3fb2ae6b929ea0e..673d4f2a48ca38c072c2bbbde7a4a1dd7b815a61 100644 --- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/ActionTest.php +++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/ActionTest.php @@ -351,6 +351,16 @@ class ActionTest extends AbstractActionTestCase ->setTable(self::TABLE_Content)->setField('header')->setValues('[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1', '[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3')); } + /** + * @test + * Test does not make sense for Publish, PublishAll and Discard + */ + public function localizeContentFromNonDefaultLanguageWithAllContentElements(): void + { + parent::localizeContentFromNonDefaultLanguageWithAllContentElements(); + $this->assertAssertionDataSet('localizeContentFromNonDefaultLanguageWithAllContentElements'); + } + /** * @test */ diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv index 0455c49e132cfc62cd77cf0ed1d18a4d9c005a74..b312dcbfe1916fd6d4c345d43ad992b8547e460c 100644 --- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv +++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv @@ -30,7 +30,7 @@ ,311,90,512,0,1,0,310,310,0,0,0,0,"[Translate to Dansk:] Regular Element #10",,,, ,312,90,768,0,2,0,311,311,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #10",,,, ,320,89,512,0,0,0,0,298,2,2,0,298,"Regular Element #2",,,, -,321,89,1280,0,2,0,300,300,1,1,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3",,,, +,321,89,480,0,2,0,300,300,1,1,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3",,,, "sys_refindex",,,,,,,,,,,,,,,,, ,"hash","tablename","recuid","field","flexpointer","softref_key","softref_id","sorting","workspace","ref_table","ref_uid","ref_string",,,,, ,"01a3ce8c4e3b2bb1aa439dc29081f996","sys_workspace_stage",1,"responsible_persons",,,,0,0,"be_users",3,,,,,, diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguage.csv index 0211344dc1bfdb933b187e6fa7603bd2f5ec10c5..d6830406270f31bae4f30c3be797caac7c3c72ee 100644 --- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguage.csv +++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguage.csv @@ -30,7 +30,7 @@ ,311,90,512,0,1,0,310,310,0,0,0,0,"[Translate to Dansk:] Regular Element #10",,,, ,312,90,768,0,2,0,311,311,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #10",,,, ,320,89,512,0,0,0,0,298,2,2,0,298,"Regular Element #2",,,, -,321,89,1280,0,2,299,300,300,1,1,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3",,,, +,321,89,480,0,2,299,300,300,1,1,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3",,,, "sys_refindex",,,,,,,,,,,,,,,,, ,"hash","tablename","recuid","field","flexpointer","softref_key","softref_id","sorting","workspace","ref_table","ref_uid","ref_string",,,,, ,"01a3ce8c4e3b2bb1aa439dc29081f996","sys_workspace_stage",1,"responsible_persons",,,,0,0,"be_users",3,,,,,, diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguageWithAllContentElements.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguageWithAllContentElements.csv new file mode 100644 index 0000000000000000000000000000000000000000..7f1e6885c587a8f51b9c95a04e70d91dc00613b0 --- /dev/null +++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Modify/DataSet/localizeContentFromNonDefaultLanguageWithAllContentElements.csv @@ -0,0 +1,50 @@ +"pages",,,,,,,,,,,,,,,,, +,"uid","pid","sorting","hidden","deleted","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","title","slug",,,,, +,1,0,256,0,0,0,0,0,0,0,"FunctionalTest","/",,,,, +,88,1,256,0,0,0,0,0,0,0,"DataHandlerTest","/data-handler",,,,, +,89,88,256,0,0,0,0,0,0,0,"Relations","/data-handler/relations",,,,, +,90,88,512,0,0,0,0,0,0,0,"Target","/data-handler/target",,,,, +,91,88,256,0,0,0,1,1,0,0,"[Translate to Dansk:] Relations","/data-handler/translate-to-dansk-relations",,,,, +,92,88,256,0,0,0,1,1,0,0,"[Translate to Deutsch:] Relations","/data-handler/translate-to-deutsch-relations",,,,, +"sys_workspace",,,,,,,,,,,,,,,,, +,"uid","pid","deleted","title","adminusers","members","db_mountpoints","file_mountpoints","freeze","live_edit","publish_access","custom_stages","stagechg_notification","edit_notification_defaults","edit_allow_notificaton_settings","publish_notification_defaults","publish_allow_notificaton_settings" +,1,0,0,"Workspace #1",,,,,0,0,0,0,0,0,0,0,0 +,2,0,0,"Workspace #2",,,,,0,0,0,0,0,0,0,0,0 +"sys_workspace_stage",,,,,,,,,,,,,,,,, +,"uid","pid","tstamp","deleted","sorting","title","responsible_persons","default_mailcomment","parentid","parenttable","notification_defaults","allow_notificaton_settings",,,,, +,1,0,1290048921,0,1,"Stage 1","be_users_3",,1,"sys_workspace",0,0,,,,, +"sys_language",,,,,,,,,,,,,,,,, +,"uid","pid","hidden","title","flag",,,,,,,,,,,, +,1,0,0,"Dansk","dk",,,,,,,,,,,, +,2,0,0,"Deutsch","de",,,,,,,,,,,, +"tt_content",,,,,,,,,,,,,,,,, +,"uid","pid","sorting","hidden","deleted","sys_language_uid","l18n_parent","l10n_source","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","header","bodytext",, +,296,88,256,0,0,0,0,0,0,0,0,0,0,"Regular Element #0",,, +,297,89,384,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,"Regular Element #2",,, +,299,89,768,0,0,0,0,0,0,0,0,0,0,"Regular Element #3",,, +,300,89,1024,0,1,1,299,299,299,0,0,0,0,"[Translate to Dansk:] Regular Element #3",,, +,301,89,384,0,1,1,297,297,297,0,0,0,0,"[Translate to Dansk:] Regular Element #1",,, +,302,89,448,0,1,2,297,301,301,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,"Regular Element #10",,, +,311,90,512,0,0,1,0,310,310,0,0,0,0,"[Translate to Dansk:] Regular Element #10",,, +,312,90,768,0,0,2,0,311,311,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #10",,, +,320,89,512,0,0,0,0,0,298,2,2,0,298,"Regular Element #2",,, +,321,89,448,0,0,1,297,297,297,1,1,0,0,"[Translate to Dansk:] Regular Element #1",,, +,322,89,480,0,0,1,298,298,298,1,1,0,0,"[Translate to Dansk:] Regular Element #2",,, +,323,89,1024,0,0,1,299,299,299,1,1,0,0,"[Translate to Dansk:] Regular Element #3",,, +,324,89,464,0,0,2,297,321,321,1,1,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1",,, +,325,89,472,0,0,2,298,322,322,1,1,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #2",,, +,326,89,476,0,0,2,299,323,323,1,1,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3",,, +"sys_refindex",,,,,,,,,,,,,,,,, +,"hash","tablename","recuid","field","flexpointer","softref_key","softref_id","sorting","workspace","ref_table","ref_uid","ref_string",,,,, +,"25426f92d44dd2ccf416108462b446e3","sys_workspace",1,"custom_stages",,,,0,0,"sys_workspace_stage",1,,,,,, +,"01a3ce8c4e3b2bb1aa439dc29081f996","sys_workspace_stage",1,"responsible_persons",,,,0,0,"be_users",3,,,,,, +,"560d1e59437906ce8ecd07cbb8b61650","pages",91,"l10n_parent",,,,0,1,"pages",89,,,,,, +,"81bed3ff81afcdb0e38d7f99f497b890","pages",92,"l10n_parent",,,,0,1,"pages",89,,,,,, +,"fdb6e478a8d93feb8e72c69a247168a1","tt_content",321,"l18n_parent",,,,0,1,"tt_content",297,,,,,, +,"df7fdfe7276be741fca5a5e773024b52","tt_content",322,"l18n_parent",,,,0,1,"tt_content",298,,,,,, +,"e8bd04d607dea16b8b8c7d66aff17147","tt_content",323,"l18n_parent",,,,0,1,"tt_content",299,,,,,, +,"1f9987878a01ed8224ede3f306c5d4a6","tt_content",324,"l18n_parent",,,,0,1,"tt_content",297,,,,,, +,"de7eac7853f12111b70a791c11584f2f","tt_content",325,"l18n_parent",,,,0,1,"tt_content",298,,,,,, +,"41032051e8f704ee0596e196752f97a3","tt_content",326,"l18n_parent",,,,0,1,"tt_content",299,,,,,, diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv index 4d55f700270a44c660c2b587ba1a060aaa0f808c..fb7ac6f3a8f3bafe3dda004ee96077b2a74cf4cb 100644 --- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv +++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv @@ -30,7 +30,7 @@ ,311,90,512,0,1,0,310,310,0,0,0,0,"[Translate to Dansk:] Regular Element #10",,,, ,312,90,768,0,2,0,311,311,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #10",,,, ,320,89,512,0,0,0,0,298,2,2,0,298,"Regular Element #2",,,, -,321,89,1280,0,2,0,300,300,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3",,,, +,321,89,480,0,2,0,300,300,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3",,,, "sys_refindex",,,,,,,,,,,,,,,,, ,"hash","tablename","recuid","field","flexpointer","softref_key","softref_id","sorting","workspace","ref_table","ref_uid","ref_string",,,,, ,"01a3ce8c4e3b2bb1aa439dc29081f996","sys_workspace_stage",1,"responsible_persons",,,,0,0,"be_users",3,,,,,, diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/localizeContentFromNonDefaultLanguage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/localizeContentFromNonDefaultLanguage.csv index 69ac5f68d926083341c0b8cc90bb89a35968e4c2..43f53c37354e3f8e576f6653af7de04ee33ab796 100644 --- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/localizeContentFromNonDefaultLanguage.csv +++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/Publish/DataSet/localizeContentFromNonDefaultLanguage.csv @@ -30,7 +30,7 @@ ,311,90,512,0,1,0,310,310,0,0,0,0,"[Translate to Dansk:] Regular Element #10",,,, ,312,90,768,0,2,0,311,311,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #10",,,, ,320,89,512,0,0,0,0,298,2,2,0,298,"Regular Element #2",,,, -,321,89,1280,0,2,299,300,300,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3",,,, +,321,89,480,0,2,299,300,300,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3",,,, "sys_refindex",,,,,,,,,,,,,,,,, ,"hash","tablename","recuid","field","flexpointer","softref_key","softref_id","sorting","workspace","ref_table","ref_uid","ref_string",,,,, ,"01a3ce8c4e3b2bb1aa439dc29081f996","sys_workspace_stage",1,"responsible_persons",,,,0,0,"be_users",3,,,,,, diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/PublishAll/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/PublishAll/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv index 59f625936138f69679cb9b7e6d573ea289a6b5fa..da18dadffdd56e030dbc24351d201f69e960ea37 100644 --- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/PublishAll/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv +++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/PublishAll/DataSet/copyContentToLanguageFromNonDefaultLanguage.csv @@ -29,7 +29,7 @@ ,311,90,512,0,1,0,310,310,0,0,0,0,"[Translate to Dansk:] Regular Element #10",,,, ,312,90,768,0,2,0,311,311,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #10",,,, ,320,89,512,0,0,0,0,298,2,2,0,298,"Regular Element #2",,,, -,321,89,1280,0,2,0,300,300,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3",,,, +,321,89,480,0,2,0,300,300,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3",,,, "sys_refindex",,,,,,,,,,,,,,,,, ,"hash","tablename","recuid","field","flexpointer","softref_key","softref_id","sorting","workspace","ref_table","ref_uid","ref_string",,,,, ,"01a3ce8c4e3b2bb1aa439dc29081f996","sys_workspace_stage",1,"responsible_persons",,,,0,0,"be_users",3,,,,,, diff --git a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/PublishAll/DataSet/localizeContentFromNonDefaultLanguage.csv b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/PublishAll/DataSet/localizeContentFromNonDefaultLanguage.csv index 212c7d4504042ef234c206b83cff278545cdd473..fe5e56933f9166e6b01d63d5ffd84cce81d04e17 100644 --- a/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/PublishAll/DataSet/localizeContentFromNonDefaultLanguage.csv +++ b/typo3/sysext/workspaces/Tests/Functional/DataHandling/Regular/PublishAll/DataSet/localizeContentFromNonDefaultLanguage.csv @@ -29,7 +29,7 @@ ,311,90,512,0,1,0,310,310,0,0,0,0,"[Translate to Dansk:] Regular Element #10",,,, ,312,90,768,0,2,0,311,311,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #10",,,, ,320,89,512,0,0,0,0,298,2,2,0,298,"Regular Element #2",,,, -,321,89,1280,0,2,299,300,300,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3",,,, +,321,89,480,0,2,299,300,300,0,0,0,0,"[Translate to Deutsch:] [Translate to Dansk:] Regular Element #3",,,, "sys_refindex",,,,,,,,,,,,,,,,, ,"hash","tablename","recuid","field","flexpointer","softref_key","softref_id","sorting","workspace","ref_table","ref_uid","ref_string",,,,, ,"01a3ce8c4e3b2bb1aa439dc29081f996","sys_workspace_stage",1,"responsible_persons",,,,0,0,"be_users",3,,,,,,