Index: t3lib/class.t3lib_tcemain.php =================================================================== --- t3lib/class.t3lib_tcemain.php (revision 5739) +++ t3lib/class.t3lib_tcemain.php (working copy) @@ -3452,6 +3452,14 @@ $newVersion_placeholderFieldArray['t3ver_wsid'] = $this->BE_USER->workspace; // Setting workspace - only so display of place holders can filter out those from other workspaces. $newVersion_placeholderFieldArray[$TCA[$table]['ctrl']['label']] = '[MOVE-TO PLACEHOLDER for #'.$uid.', WS#'.$this->BE_USER->workspace.']'; + // moving localized records requires to "localize" the placeholder too + if( array_key_exists('languageField', $GLOBALS['TCA'][$table]['ctrl']) && array_key_exists('transOrigPointerField', $GLOBALS['TCA'][$table]['ctrl']) ) { + $l10nParentRec = t3lib_BEfunc::getRecord($table,$uid); + $newVersion_placeholderFieldArray[ $GLOBALS['TCA'][$table]['ctrl']['languageField'] ] = $l10nParentRec[ $GLOBALS['TCA'][$table]['ctrl']['languageField'] ]; + $newVersion_placeholderFieldArray[ $GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField'] ] = $l10nParentRec[ $GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField'] ]; + unset($l10nParentRec); + } + $newVersion_placeholderFieldArray['pid'] = 0; // Initially, create at root level. $id = 'NEW_MOVE_PLH'; $this->insertDB($table,$id,$newVersion_placeholderFieldArray,FALSE); // Saving placeholder as 'original' @@ -3464,6 +3472,9 @@ $updateFields['t3ver_state'] = 4; // Setting placeholder state value for version (so it can know it is currently a new version...) $GLOBALS['TYPO3_DB']->exec_UPDATEquery($table, 'uid='.intval($wsUid), $updateFields); } + + //check for the localizations of that element and move them as well + $this->moveL10nOverlayRecords($table,$uid,$destPid); } /** @@ -3521,6 +3532,8 @@ $this->moveRecord_procFields($table,$uid,$destPid); // Create query for update: $GLOBALS['TYPO3_DB']->exec_UPDATEquery($table, 'uid='.intval($uid), $updateFields); + // check for the localizations of that element + $this->moveL10nOverlayRecords($table,$uid,$destPid); // Call post processing hooks: foreach($hookObjectsArr as $hookObj) { @@ -3564,6 +3577,8 @@ $this->moveRecord_procFields($table,$uid,$destPid); // Create query for update: $GLOBALS['TYPO3_DB']->exec_UPDATEquery($table, 'uid='.intval($uid), $updateFields); + // check for the localizations of that element + $this->moveL10nOverlayRecords($table,$uid,$destPid); // Call post processing hooks: foreach($hookObjectsArr as $hookObj) { @@ -3662,6 +3677,27 @@ } /** + * Find l10n-overlay records and perform the requested move action for these records. + * + * @param string $table: Record Table + * @param string $uid: Record UID + * @param string $destPid: Position to move to + * @return void + */ + function moveL10nOverlayRecords($table,$uid,$destPid) { + //there's no need to perform this for table-records + if( $table == 'pages' ) return; + t3lib_div::loadTCA( $table ); + + $l10nRecords = t3lib_BEfunc::getRecordsByField( $table, $GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField'], $uid ); + if( is_array($l10nRecords) ) { + foreach( $l10nRecords as $record ) { + $this->moveRecord( $table, $record['uid'], $destPid ); + } + } + } + + /** * Localizes a record to another system language * In reality it only works if transOrigPointerTable is not set. For "pages" the implementation is hardcoded * @@ -4533,6 +4569,10 @@ if ($TCA[$table]['ctrl']['sortby']) { $keepFields[] = $TCA[$table]['ctrl']['sortby']; } + // l10n-fields must be kept otherwise the localization will be lost during the publishing + if ( $TCA[$table]['ctrl']['transOrigPointerField'] ) { + $keepFields[] = $TCA[$table]['ctrl']['transOrigPointerField']; + } // Swap "keepfields" foreach($keepFields as $fN) {