Index: t3lib/class.t3lib_clipboard.php
===================================================================
--- t3lib/class.t3lib_clipboard.php (Revision 6192)
+++ t3lib/class.t3lib_clipboard.php (Arbeitskopie)
@@ -466,6 +466,9 @@
'backPath,'gfx/close_12h.gif','width="11" height="12"').' border="0" title="'.$this->clLabel('removeItem').'" alt="" />'.
'
';
+
+ $lines[] = $this->getLocalisations($table, $rec, $bgColClass, $pad);
+
} else {
unset($this->clipData[$pad]['el'][$k]);
$this->changed=1;
@@ -486,7 +489,52 @@
return $lines;
}
+
/**
+ * returns all localisations of the current record
+ *
+ * @param string the table
+ * @param array the current record
+ * @return string HTML table rows
+ */
+ function getLocalisations($table, $parentRec, $bgColClass, $pad) {
+
+ $lines = array();
+ if ($table != 'pages' &&
+ $GLOBALS['TCA'][$table]['ctrl']['languageField'] &&
+ $GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField']
+ && !$GLOBALS['TCA'][$table]['ctrl']['transOrigPointerTable']) {
+ $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
+ '*',
+ $table,
+ $GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField'] . '=' . intval($parentRec['uid']) .
+ ' AND ' . $GLOBALS['TCA'][$table]['ctrl']['languageField'] . '!=0' .
+ ' AND ' . $GLOBALS['TCA'][$table]['ctrl']['delete'] . '=0' .
+ ' AND t3ver_wsid=' . $parentRec['t3ver_wsid']
+ );
+
+ foreach ($rows as $rec) {
+ $lines[]='
+
+ ' .
+ t3lib_iconWorks::getIconImage($table, $rec, $this->backPath,' style="margin-left: 38px;"') . ' |
+ ' . htmlspecialchars(
+ t3lib_div::fixed_lgd_cs(t3lib_BEfunc::getRecordTitle($table, $rec), $GLOBALS['BE_USER']->uc['titleLen'])) .
+ ($pad == 'normal' ? (
+ ' (' . ($this->clipData['normal']['mode'] == 'copy' ? $this->clLabel('copy', 'cm') :
+ $this->clLabel('cut','cm')).')') :
+ ''
+ ) . ' |
+ |
+
';
+ }
+ }
+ return implode('',$lines);
+ }
+
+
+
+ /**
* Wraps title of pad in bold-tags and maybe the number of elements if any.
*
* @param string String (already htmlspecialchars()'ed)
Index: t3lib/class.t3lib_tcemain.php
===================================================================
--- t3lib/class.t3lib_tcemain.php (Revision 6192)
+++ t3lib/class.t3lib_tcemain.php (Arbeitskopie)
@@ -3425,7 +3425,7 @@
}
// Checking if there is anything else disallowing moving the record by checking if editing is allowed
- $mayEditAccess = $this->BE_USER->recordEditAccessInternals($table,$uid);
+ $mayEditAccess = $this->BE_USER->recordEditAccessInternals($table, $uid, false, false, true);
// If moving is allowed, begin the processing:
if ($mayEditAccess) {
@@ -3540,6 +3540,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 keep localization-settings for 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'
@@ -3552,6 +3560,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);
}
/**
@@ -3609,6 +3620,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) {
@@ -3652,6 +3665,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) {
@@ -3750,6 +3765,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 page-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
*
@@ -4646,6 +4682,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) {