Index: t3lib/class.t3lib_transl8tools.php
===================================================================
--- t3lib/class.t3lib_transl8tools.php (révision 9305)
+++ t3lib/class.t3lib_transl8tools.php (copie de travail)
@@ -144,43 +144,49 @@
}
if (is_array($row)) {
- $trTable = $this->getTranslationTable($table);
- if ($trTable) {
- if ($trTable!==$table || $row[$TCA[$table]['ctrl']['languageField']] <= 0) {
- if ($trTable!==$table || $row[$TCA[$table]['ctrl']['transOrigPointerField']] == 0) {
+ $translationTable = $this->getTranslationTable($table);
+ if ($translationTable) {
+ $translationOriginalPointerField = $TCA[$translationTable]['ctrl']['translationOriginalPointerField'];
+ $languageId = intval($row[$TCA[$table]['ctrl']['languageField']]);
- // Look for translations of this record, index by language field value:
- $translationsTemp = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
- ($selFieldList ? $selFieldList : 'uid,'.$TCA[$trTable]['ctrl']['languageField']),
- $trTable,
- $TCA[$trTable]['ctrl']['transOrigPointerField'] . '=' . intval($uid) .
- ' AND pid=' . intval($table === 'pages' ? $row['uid'] : $row['pid']). // Making exception for pages of course where the translations will always be ON the page, not on the level above...
- ' AND '.$TCA[$trTable]['ctrl']['languageField'].(!$sys_language_uid ? '>0' : '='.intval($sys_language_uid)).
- t3lib_BEfunc::deleteClause($trTable).
- t3lib_BEfunc::versioningPlaceholderClause($trTable)
- );
+ if ($TCA[$table]['ctrl']['transOrigPointerTable'] != '' || $languageId > 0) {
+ $where = $translationOriginalPointerField . '=' . intval($row[$translationOriginalPointerField]);
+ } else {
+ $where = $translationOriginalPointerField . '=' . intval($uid);
+ }
+ $where .=
+ ' AND pid=' . intval($table === 'pages' ? $row['uid'] : $row['pid']) . // Making exception for pages of course where the translations will always be ON the page, not on the level above...
+ ' AND ' . $TCA[$translationTable]['ctrl']['languageField'] . (!$sys_language_uid ? ' NOT IN (0,'.$languageId . ')' : '=' . intval($sys_language_uid)) .
+ t3lib_BEfunc::deleteClause($translationTable) .
+ t3lib_BEfunc::versioningPlaceholderClause($translationTable);
- $translations = array();
- $translations_errors = array();
- foreach($translationsTemp as $r) {
- if (!isset($translations[$r[$TCA[$trTable]['ctrl']['languageField']]])) {
- $translations[$r[$TCA[$trTable]['ctrl']['languageField']]] = $r;
- } else {
- $translations_errors[$r[$TCA[$trTable]['ctrl']['languageField']]][] = $r;
- }
- }
+ // Look for translations of this record, index by language field value:
+ $translationRows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
+ ($selFieldList ? $selFieldList : 'uid,'.$TCA[$translationTable]['ctrl']['languageField']),
+ $translationTable,
+ $where
+ );
- return array(
- 'table' => $table,
- 'uid' => $uid,
- 'CType' => $row['CType'],
- 'sys_language_uid' => $row[$TCA[$table]['ctrl']['languageField']],
- 'translation_table' => $trTable,
- 'translations' => $translations,
- 'excessive_translations' => $translations_errors
- );
- } else return 'Record "'.$table.'_'.$uid.'" seems to be a translation already (has a relation to record "'.$row[$TCA[$table]['ctrl']['transOrigPointerField']].'")';
- } else return 'Record "'.$table.'_'.$uid.'" seems to be a translation already (has a language value "'.$row[$TCA[$table]['ctrl']['languageField']].'", relation to record "'.$row[$TCA[$table]['ctrl']['transOrigPointerField']].'")';
+ $translations = array();
+ $translationsErrors = array();
+
+ foreach($translationRows as $r) {
+ if (!isset($translations[$r[$TCA[$translationTable]['ctrl']['languageField']]])) {
+ $translations[$r[$TCA[$translationTable]['ctrl']['languageField']]] = $r;
+ } else {
+ $translationsErrors[$r[$TCA[$translationTable]['ctrl']['languageField']]][] = $r;
+ }
+ }
+
+ return array(
+ 'table' => $table,
+ 'uid' => $uid,
+ 'CType' => $row['CType'],
+ 'sys_language_uid' => $row[$TCA[$table]['ctrl']['languageField']],
+ 'translation_table' => $translationTable,
+ 'translations' => $translations,
+ 'excessive_translations' => $translationsErrors
+ );
} else return 'Translation is not supported for this table!';
} else return 'Record "'.$table.'_'.$uid.'" was not found';
} else return 'No table "'.$table.'" or no UID value';
@@ -205,7 +211,7 @@
function isTranslationInOwnTable($table) {
global $TCA;
- return $TCA[$table]['ctrl']['languageField'] && $TCA[$table]['ctrl']['transOrigPointerField'] && !$TCA[$table]['ctrl']['transOrigPointerTable'];
+ return $TCA[$table]['ctrl']['languageField'] && $TCA[$table]['ctrl']['translationOriginalPointerField'];
}
/**
@@ -217,10 +223,10 @@
function foreignTranslationTable($table) {
global $TCA;
- $trTable = $TCA[$table]['ctrl']['transForeignTable'];
+ $translationTable = $TCA[$table]['ctrl']['transForeignTable'];
- if ($trTable && $TCA[$trTable] && $TCA[$trTable]['ctrl']['languageField'] && $TCA[$trTable]['ctrl']['transOrigPointerField'] && $TCA[$trTable]['ctrl']['transOrigPointerTable']===$table) {
- return $trTable;
+ if ($translationTable && $TCA[$translationTable] && $TCA[$translationTable]['ctrl']['languageField'] && $TCA[$translationTable]['ctrl']['translationOriginalPointerField'] && $TCA[$translationTable]['ctrl']['transOrigPointerTable']===$table) {
+ return $translationTable;
}
}
}
Index: t3lib/class.t3lib_tcemain.php
===================================================================
--- t3lib/class.t3lib_tcemain.php (révision 9305)
+++ t3lib/class.t3lib_tcemain.php (copie de travail)
@@ -3391,10 +3391,10 @@
if ($TCA[$table]) {
- // In case the record to be moved turns out to be an offline version,
+ // In case the record to be moved turns out to be an offline version,
// we have to find the live version and work on that one (this case
// happens for pages with "branch" versioning type)
- // note: as "branch" versioning is deprecated since TYPO3 4.2, this
+ // note: as "branch" versioning is deprecated since TYPO3 4.2, this
// functionality will be removed in TYPO3 4.7 (note by benni: a hook could replace this)
if ($lookForLiveVersion = t3lib_BEfunc::getLiveVersionOfRecord($table,$uid,'uid')) {
$uid = $lookForLiveVersion['uid'];
@@ -3706,84 +3706,87 @@
$newId = false;
$uid = intval($uid);
- if ($TCA[$table] && $uid) {
+ if ($TCA[$table] && $uid) {
+ $translationTable = '';
t3lib_div::loadTCA($table);
- if (($TCA[$table]['ctrl']['languageField'] && $TCA[$table]['ctrl']['transOrigPointerField'] && !$TCA[$table]['ctrl']['transOrigPointerTable']) || $table==='pages') {
- if ($langRec = t3lib_BEfunc::getRecord('sys_language',intval($language),'uid,title')) {
- if ($this->doesRecordExist($table,$uid,'show')) {
+ if ($TCA[$table]['ctrl']['transForeignTable'] != '') {
+ $translationTable = $TCA[$table]['ctrl']['transForeignTable'];
+ }
+ if (($TCA[$table]['ctrl']['languageField'] && $TCA[$table]['ctrl']['transOrigPointerField']) || $translationTable != '') {
+ if ($langRec = t3lib_BEfunc::getRecord('sys_language',intval($language),'uid,title')) {
+ if ($this->doesRecordExist($table,$uid,'show')) {
$row = t3lib_BEfunc::getRecordWSOL($table,$uid); // Getting workspace overlay if possible - this will localize versions in workspace if any
- if (is_array($row)) {
- if ($row[$TCA[$table]['ctrl']['languageField']] <= 0 || $table==='pages') {
- if ($row[$TCA[$table]['ctrl']['transOrigPointerField']] == 0 || $table==='pages') {
- if ($table==='pages') {
- $pass = $TCA[$table]['ctrl']['transForeignTable']==='pages_language_overlay' && !t3lib_BEfunc::getRecordsByField('pages_language_overlay','pid',$uid,' AND '.$TCA['pages_language_overlay']['ctrl']['languageField'].'='.intval($langRec['uid']));
- $Ttable = 'pages_language_overlay';
- t3lib_div::loadTCA($Ttable);
- } else {
- $pass = !t3lib_BEfunc::getRecordLocalization($table, $uid, $langRec['uid'], 'AND pid='.intval($row['pid']));
- $Ttable = $table;
- }
+ if (is_array($row)) {
- if ($pass) {
+ if ($translationTable != '') {
+ if ($table==='pages') {
+ $pass = $TCA[$table]['ctrl']['transForeignTable']==='pages_language_overlay' && !t3lib_BEfunc::getRecordsByField('pages_language_overlay','pid',$uid,' AND '.$TCA['pages_language_overlay']['ctrl']['languageField'].'='.intval($langRec['uid']));
+ $translationTable = 'pages_language_overlay';
+ t3lib_div::loadTCA($translationTable);
+ } else {
+ $pass = !t3lib_BEfunc::getRecordsByField($translationTable, $TCA[$translationTable]['ctrl']['transOrigPointerField'], $uid, ' AND ' . $TCA[$translationTable]['ctrl']['languageField'] . '=' . intval($langRec['uid']));
+ }
+ } else {
+ $pass = !t3lib_BEfunc::getRecordLocalization($table, $uid, $langRec['uid'], 'AND pid='.intval($row['pid']));
+ $translationTable = $table;
+ }
- // Initialize:
- $overrideValues = array();
- $excludeFields = array();
+ if ($pass) {
- // Set override values:
- $overrideValues[$TCA[$Ttable]['ctrl']['languageField']] = $langRec['uid'];
- $overrideValues[$TCA[$Ttable]['ctrl']['transOrigPointerField']] = $uid;
+ // Initialize:
+ $overrideValues = array();
+ $excludeFields = array();
- // Set exclude Fields:
- foreach($TCA[$Ttable]['columns'] as $fN => $fCfg) {
- if ($fCfg['l10n_mode']=='prefixLangTitle') { // Check if we are just prefixing:
- if (($fCfg['config']['type']=='text' || $fCfg['config']['type']=='input') && strlen($row[$fN])) {
- list($tscPID) = t3lib_BEfunc::getTSCpid($table,$uid,'');
- $TSConfig = $this->getTCEMAIN_TSconfig($tscPID);
+ // Set override values:
+ $overrideValues[$TCA[$translationTable]['ctrl']['languageField']] = $langRec['uid'];
+ $overrideValues[$TCA[$translationTable]['ctrl']['transOrigPointerField']] = $uid;
- if (isset($TSConfig['translateToMessage']) && strlen($TSConfig['translateToMessage'])) {
- $translateToMsg = @sprintf($TSConfig['translateToMessage'], $langRec['title']);
- }
- if (!strlen($translateToMsg)) {
- $translateToMsg = 'Translate to '.$langRec['title'].':';
- }
- $overrideValues[$fN] = '['.$translateToMsg.'] '.$row[$fN];
- }
- } elseif (t3lib_div::inList('exclude,noCopy,mergeIfNotBlank',$fCfg['l10n_mode']) && $fN!=$TCA[$Ttable]['ctrl']['languageField'] && $fN!=$TCA[$Ttable]['ctrl']['transOrigPointerField']) { // Otherwise, do not copy field (unless it is the language field or pointer to the original language)
- $excludeFields[] = $fN;
+ // Set exclude Fields:
+ foreach($TCA[$translationTable]['columns'] as $fN => $fCfg) {
+ if ($fCfg['l10n_mode']=='prefixLangTitle') { // Check if we are just prefixing:
+ if (($fCfg['config']['type']=='text' || $fCfg['config']['type']=='input') && strlen($row[$fN])) {
+ list($tscPID) = t3lib_BEfunc::getTSCpid($table,$uid,'');
+ $TSConfig = $this->getTCEMAIN_TSconfig($tscPID);
+
+ if (isset($TSConfig['translateToMessage']) && strlen($TSConfig['translateToMessage'])) {
+ $translateToMessage = @sprintf($TSConfig['translateToMessage'], $langRec['title']);
}
- }
+ if (!strlen($translateToMessage)) {
+ $translateToMessage = 'Translate to ' . $langRec['title'] . ':';
+ }
+ $overrideValues[$fN] = '[' . $translateToMessage . '] ' . $row[$fN];
+ }
+ } elseif (t3lib_div::inList('exclude,noCopy,mergeIfNotBlank',$fCfg['l10n_mode']) && $fN != $TCA[$translationTable]['ctrl']['languageField'] && $fN != $TCA[$translationTable]['ctrl']['transOrigPointerField']) { // Otherwise, do not copy field (unless it is the language field or pointer to the original language)
+ $excludeFields[] = $fN;
+ }
+ }
- if ($Ttable === $table) {
+ if ($translationTable === $table) {
- // Execute the copy:
- $newId = $this->copyRecord($table, $uid, -$uid, 1, $overrideValues, implode(',', $excludeFields), $language);
- } else {
+ // Execute the copy:
+ $newId = $this->copyRecord($table, $uid, -$uid, 1, $overrideValues, implode(',', $excludeFields), $language);
+ } else {
- // Create new record:
- $copyTCE = t3lib_div::makeInstance('t3lib_TCEmain');
- /* @var $copyTCE t3lib_TCEmain */
- $copyTCE->stripslashes_values = 0;
- $copyTCE->cachedTSconfig = $this->cachedTSconfig; // Copy forth the cached TSconfig
- $copyTCE->dontProcessTransformations=1; // Transformations should NOT be carried out during copy
-
- $copyTCE->start(array($Ttable=>array('NEW'=>$overrideValues)),'',$this->BE_USER);
- $copyTCE->process_datamap();
-
- // Getting the new UID as if it had been copied:
- $theNewSQLID = $copyTCE->substNEWwithIDs['NEW'];
- if ($theNewSQLID) {
- // If is by design that $Ttable is used and not $table! See "l10nmgr" extension. Could be debated, but this is what I chose for this "pseudo case"
- $this->copyMappingArray[$Ttable][$uid] = $theNewSQLID;
- $newId = $theNewSQLID;
- }
- }
- } else $this->newlog('Localization failed; There already was a localization for this language of the record!',1);
- } else $this->newlog('Localization failed; Source record contained a reference to an original default record (which is strange)!',1);
- } else $this->newlog('Localization failed; Source record had another language than "Default" or "All" defined!',1);
+ // Create new record:
+ $copyTCE = t3lib_div::makeInstance('t3lib_TCEmain');
+ /* @var $copyTCE t3lib_TCEmain */
+ $copyTCE->stripslashes_values = 0;
+ $copyTCE->cachedTSconfig = $this->cachedTSconfig; // Copy forth the cached TSconfig
+ $copyTCE->dontProcessTransformations=1; // Transformations should NOT be carried out during copy
+ $copyTCE->start(array($translationTable => array('NEW' => $overrideValues)), '', $this->BE_USER);
+ $copyTCE->process_datamap();
+ // Getting the new UID as if it had been copied:
+ $theNewSQLID = $copyTCE->substNEWwithIDs['NEW'];
+ if ($theNewSQLID) {
+ // If is by design that $translationTable is used and not $table! See "l10nmgr" extension. Could be debated, but this is what I chose for this "pseudo case"
+ $this->copyMappingArray[$translationTable][$uid] = $theNewSQLID;
+ $newId = $theNewSQLID;
+ }
+ }
+ } else $this->newlog('Localization failed; There already was a localization for this language of the record!',1);
} else $this->newlog('Attempt to localize record that did not exist!',1);
} else $this->newlog('Attempt to localize record without permission',1);
} else $this->newlog('Sys language UID "'.$language.'" not found valid!',1);
Index: typo3/class.db_list.inc
===================================================================
--- typo3/class.db_list.inc (révision 9305)
+++ typo3/class.db_list.inc (copie de travail)
@@ -288,6 +288,7 @@
} else {
$fields = array();
}
+ $addWhere = '';
// Find ID to use (might be different for "versioning_followPages" tables)
if (intval($this->searchLevels)==0) {
@@ -299,7 +300,7 @@
}
#debug($this->pidSelect,$tableName);
// Finally, render the list:
- $this->HTMLcode.=$this->getTable($tableName, $this->id, implode(',',$fields));
+ $this->HTMLcode.=$this->getTable($tableName, $this->id, implode(',',$fields), $addWhere);
}
}
}
@@ -744,7 +745,7 @@
$fieldListArr = array();
// Check table:
- if (is_array($TCA[$table])) {
+ if (is_array($TCA[$table]) && isset($TCA[$table]['columns']) && is_array($TCA[$table]['columns'])) {
t3lib_div::loadTCA($table);
// Traverse configured columns and add them to field array, if available for user.
Index: typo3/class.db_list_extra.inc
===================================================================
--- typo3/class.db_list_extra.inc (révision 9305)
+++ typo3/class.db_list_extra.inc (copie de travail)
@@ -42,7 +42,7 @@
* 91: class localRecordList extends recordList
* 123: function writeTop($row)
* 304: function getTable($table,$id,$rowlist)
- * 559: function renderListRow($table,$row,$cc,$titleCol,$thumbsCol,$indent=0)
+ * 559: function renderListRow($table,$row,$cc,$titleCol,$thumbsColumn,$indent=0)
* 648: function renderListHeader($table,$currentIdList)
*
* SECTION: Rendering of various elements
@@ -137,8 +137,8 @@
*/
protected $referenceCount = array();
- var $translations; // Translations of the current record
- var $selFieldList; // select fields for the query which fetches the translations of the current record
+ var $translations; // Translations of the current record
+ protected $selectedFieldList; // select fields for the query which fetches the translations of the current record
public function __construct() {
parent::__construct();
@@ -291,6 +291,60 @@
return $buttons;
}
+
+ /**
+ * Creates the SQL selection field list
+ *
+ * @param string Table name
+ * @return array List of fields to show in the listing. Pseudo fields will be added including the record header.
+ */
+ function getSelectionFieldList($table, $l10nEnabled, $thumbsColumn) {
+ global $TCA, $TYPO3_CONF_VARS;
+
+ // Creating the list of fields to include in the SQL query:
+ $selectFields = $this->fieldArray;
+ $selectFields[] = 'uid';
+ $selectFields[] = 'pid';
+ if ($thumbsColumn) {
+ $selectFields[] = $thumbsColumn; // adding column for thumbnails
+ }
+ if ($table=='pages') {
+ if (t3lib_extMgm::isLoaded('cms')) {
+ $selectFields[] = 'module';
+ $selectFields[] = 'extendToSubpages';
+ $selectFields[] = 'nav_hide';
+ }
+ $selectFields[] = 'doktype';
+ }
+ if (is_array($TCA[$table]['ctrl']['enablecolumns'])) {
+ $selectFields = array_merge($selectFields,$TCA[$table]['ctrl']['enablecolumns']);
+ }
+ if ($TCA[$table]['ctrl']['type']) {
+ $selectFields[] = $TCA[$table]['ctrl']['type'];
+ }
+ if ($TCA[$table]['ctrl']['typeicon_column']) {
+ $selectFields[] = $TCA[$table]['ctrl']['typeicon_column'];
+ }
+ if ($TCA[$table]['ctrl']['versioningWS']) {
+ $selectFields[] = 't3ver_id';
+ $selectFields[] = 't3ver_state';
+ $selectFields[] = 't3ver_wsid';
+ $selectFields[] = 't3ver_swapmode'; // Filtered out when pages in makeFieldList()
+ }
+ if ($l10nEnabled || $TCA[$table]['ctrl']['transOrigPointerTable']) {
+ $selectFields[] = $TCA[$table]['ctrl']['languageField'];
+ $selectFields[] = $TCA[$table]['ctrl']['transOrigPointerField'];
+ }
+ if ($TCA[$table]['ctrl']['label_alt']) {
+ $selectFields = array_merge($selectFields,t3lib_div::trimExplode(',',$TCA[$table]['ctrl']['label_alt'],1));
+ }
+ $selectFields = array_unique($selectFields); // Unique list!
+ $selectFields = array_intersect($selectFields,$this->makeFieldList($table,1)); // Making sure that the fields in the field-list ARE in the field-list from TCA!
+ $selectedFieldList = implode(',', $selectFields); // implode it into a list of fields for the SQL-statement.
+ return $selectedFieldList;
+ }
+
+
/**
* Creates the listing of records from a single table
*
@@ -299,7 +353,7 @@
* @param string List of fields to show in the listing. Pseudo fields will be added including the record header.
* @return string HTML table with the listing for the record.
*/
- function getTable($table,$id,$rowlist) {
+ public function getTable($table,$id,$rowlist,$addWhere='') {
global $TCA, $TYPO3_CONF_VARS;
// Loading all TCA details for this table:
@@ -308,8 +362,27 @@
// Init
$addWhere = '';
$titleCol = $TCA[$table]['ctrl']['label'];
- $thumbsCol = $TCA[$table]['ctrl']['thumbnail'];
+ $thumbsColumn = $TCA[$table]['ctrl']['thumbnail'];
$l10nEnabled = $TCA[$table]['ctrl']['languageField'] && $TCA[$table]['ctrl']['transOrigPointerField'] && !$TCA[$table]['ctrl']['transOrigPointerTable'];
+ $hasTranslationTable = $TCA[$table]['ctrl']['transForeignTable'] != '';
+ if ($TCA[$table]['ctrl']['transOrigPointerField']) {
+ $transOrigPointerTable = $TCA[$table]['ctrl']['transOrigPointerTable'];
+ }
+ $translationTable = $table;
+
+ if ($hasTranslationTable) {
+ $translationTable = $TCA[$table]['ctrl']['transForeignTable'];
+ if ($translationTable != $table) {
+ // Loading all TCA details for this table:
+ t3lib_div::loadTCA($translationTable);
+ }
+ }
+ if ($transOrigPointerTable) {
+ if ($transOrigPointerTable != $table) {
+ // Loading all TCA details for this table:
+ t3lib_div::loadTCA($transOrigPointerTable);
+ }
+ }
$tableCollapsed = (!$this->tablesCollapsed[$table]) ? false : true;
// prepare space icon
@@ -337,16 +410,20 @@
if ($this->searchLevels) {
$this->fieldArray[]='_PATH_';
}
- // Localization
- if ($this->localizationView && $l10nEnabled) {
- $this->fieldArray[] = '_LOCALIZATION_';
- $this->fieldArray[] = '_LOCALIZATION_b';
- $addWhere.=' AND (
- '.$TCA[$table]['ctrl']['languageField'].'<=0
- OR
- '.$TCA[$table]['ctrl']['transOrigPointerField'].' = 0
- )';
- }
+ if ($this->localizationView) {
+ if ($l10nEnabled) {
+ $this->fieldArray[] = '_LOCALIZATION_';
+ $this->fieldArray[] = '_LOCALIZATION_b';
+ $addWhere .= ' AND (
+ ' . $TCA[$table]['ctrl']['languageField'] . '<=0
+ OR
+ ' . $TCA[$table]['ctrl']['transOrigPointerField'] . ' = 0
+ )';
+ } else if ($hasTranslationTable || $transOrigPointerTable) {
+ $this->fieldArray[] = '_LOCALIZATION_';
+ $this->fieldArray[] = '_LOCALIZATION_b';
+ }
+ }
// Cleaning up:
$this->fieldArray=array_unique(array_merge($this->fieldArray,t3lib_div::trimExplode(',',$rowlist,1)));
if ($this->noControlPanels) {
@@ -356,45 +433,7 @@
$this->fieldArray = array_keys($tempArray);
}
- // Creating the list of fields to include in the SQL query:
- $selectFields = $this->fieldArray;
- $selectFields[] = 'uid';
- $selectFields[] = 'pid';
- if ($thumbsCol) $selectFields[] = $thumbsCol; // adding column for thumbnails
- if ($table=='pages') {
- if (t3lib_extMgm::isLoaded('cms')) {
- $selectFields[] = 'module';
- $selectFields[] = 'extendToSubpages';
- $selectFields[] = 'nav_hide';
- }
- $selectFields[] = 'doktype';
- }
- if (is_array($TCA[$table]['ctrl']['enablecolumns'])) {
- $selectFields = array_merge($selectFields,$TCA[$table]['ctrl']['enablecolumns']);
- }
- if ($TCA[$table]['ctrl']['type']) {
- $selectFields[] = $TCA[$table]['ctrl']['type'];
- }
- if ($TCA[$table]['ctrl']['typeicon_column']) {
- $selectFields[] = $TCA[$table]['ctrl']['typeicon_column'];
- }
- if ($TCA[$table]['ctrl']['versioningWS']) {
- $selectFields[] = 't3ver_id';
- $selectFields[] = 't3ver_state';
- $selectFields[] = 't3ver_wsid';
- $selectFields[] = 't3ver_swapmode'; // Filtered out when pages in makeFieldList()
- }
- if ($l10nEnabled) {
- $selectFields[] = $TCA[$table]['ctrl']['languageField'];
- $selectFields[] = $TCA[$table]['ctrl']['transOrigPointerField'];
- }
- if ($TCA[$table]['ctrl']['label_alt']) {
- $selectFields = array_merge($selectFields,t3lib_div::trimExplode(',',$TCA[$table]['ctrl']['label_alt'],1));
- }
- $selectFields = array_unique($selectFields); // Unique list!
- $selectFields = array_intersect($selectFields,$this->makeFieldList($table,1)); // Making sure that the fields in the field-list ARE in the field-list from TCA!
- $selFieldList = implode(',',$selectFields); // implode it into a list of fields for the SQL-statement.
- $this->selFieldList = $selFieldList;
+ $selectedFieldList = $this->getSelectionFieldList($table, $l10nEnabled, $thumbsColumn);
/**
* @hook DB-List getTable
@@ -409,7 +448,7 @@
throw new UnexpectedValueException('$hookObject must implement interface t3lib_localRecordListGetTableHook', 1195114460);
}
- $hookObject->getDBlistQuery($table, $id, $addWhere, $selFieldList, $this);
+ $hookObject->getDBlistQuery($table, $id, $addWhere, $selectedFieldList, $this);
}
}
@@ -422,11 +461,11 @@
// Get the two previous rows for sorting if displaying page > 1
$this->firstElementNumber = $this->firstElementNumber - 2;
$this->iLimit = $this->iLimit + 2;
- $queryParts = $this->makeQueryArray($table, $id,$addWhere,$selFieldList); // (API function from class.db_list.inc)
+ $queryParts = $this->makeQueryArray($table, $id, $addWhere, $selectedFieldList); // (API function from class.db_list.inc)
$this->firstElementNumber = $this->firstElementNumber + 2;
$this->iLimit = $this->iLimit - 2;
} else {
- $queryParts = $this->makeQueryArray($table, $id,$addWhere,$selFieldList); // (API function from class.db_list.inc)
+ $queryParts = $this->makeQueryArray($table, $id, $addWhere, $selectedFieldList); // (API function from class.db_list.inc)
}
$this->setTotalItems($queryParts); // Finding the total amount of records on the page (API function from class.db_list.inc)
@@ -544,29 +583,50 @@
$iOut = '';
$cc = 0;
+ if ($hasTranslationTable) {
+ $selectedFieldList = $this->getSelectionFieldList($translationTable, TRUE,$TCA[$translationTable]['ctrl']['thumbnail']);
+ }
+ $pageStartWhere = ($table != 'pages' && $table != 'pages_language_overlay' ? 'pid=' . $id . ' AND ' : '');
foreach($accRows as $row) {
// Render item row if counter < limit
if ($cc < $this->iLimit) {
$cc++;
- $this->translations = FALSE;
- $iOut.= $this->renderListRow($table,$row,$cc,$titleCol,$thumbsCol);
+ $translations = FALSE;
+ $iOut .= $this->renderListRow($table, $row, $cc, $titleCol, $thumbsColumn);
// If localization view is enabled it means that the selected records are either default or All language and here we will not select translations which point to the main record:
- if ($this->localizationView && $l10nEnabled) {
+ if ($this->localizationView) {
+ if ($l10nEnabled || $hasTranslationTable) {
+
+ // Look for translations of this record:
+ $translations = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
+ $selectedFieldList,
+ $translationTable,
+ $pageStartWhere
+ . $TCA[$translationTable]['ctrl']['languageField'] . '>0'
+ . ' AND ' . $TCA[$translationTable]['ctrl']['transOrigPointerField'] . '=' . intval($row['uid'])
+ . t3lib_BEfunc::deleteClause($translationTable)
+ . t3lib_BEfunc::versioningPlaceholderClause($translationTable)
+ );
+ }
+
// For each available translation, render the record:
- if (is_array($this->translations)) {
- foreach ($this->translations as $lRow) {
+ if (is_array($translations)) {
+ foreach ($translations as $lRow) {
+
// $lRow isn't always what we want - if record was moved we've to work with the placeholder records otherwise the list is messed up a bit
if ($row['_MOVE_PLH_uid'] && $row['_MOVE_PLH_pid']) {
- $tmpRow = t3lib_BEfunc::getRecordRaw($table, 't3ver_move_id="'.intval($lRow['uid']) . '" AND pid="' . $row['_MOVE_PLH_pid'] . '" AND t3ver_wsid=' . $row['t3ver_wsid'] . t3lib_beFunc::deleteClause($table), $selFieldList);
- $lRow = is_array($tmpRow)?$tmpRow:$lRow;
+ $tmpRow = t3lib_BEfunc::getRecordRaw($translationTable, 't3ver_move_id="'.intval($lRow['uid']) . '" AND pid="' . $row['_MOVE_PLH_pid'] . '" AND t3ver_wsid=' . $row['t3ver_wsid'] . t3lib_beFunc::deleteClause($translationTable), $selectedFieldList);
+
+ $lRow = (is_array($tmpRow) ? $tmpRow : $lRow);
}
// In offline workspace, look for alternative record:
- t3lib_BEfunc::workspaceOL($table, $lRow, $GLOBALS['BE_USER']->workspace, true);
- if (is_array($lRow) && $GLOBALS['BE_USER']->checkLanguageAccess($lRow[$TCA[$table]['ctrl']['languageField']])) {
+ t3lib_BEfunc::workspaceOL($translationTable, $lRow, $GLOBALS['BE_USER']->workspace, TRUE);
+ if (is_array($lRow) && $GLOBALS['BE_USER']->checkLanguageAccess($lRow[$TCA[$translationTable]['ctrl']['languageField']])) {
+
$currentIdList[] = $lRow['uid'];
- $iOut.=$this->renderListRow($table,$lRow,$cc,$titleCol,$thumbsCol,18);
+ $iOut .= $this->renderListRow($translationTable, $lRow, $cc, $titleCol, $thumbsColumn, 18);
}
}
}
@@ -632,10 +692,10 @@
* @param string Table field (column) where (possible) thumbnails can be found
* @param integer Indent from left.
* @return string Table row for the element
- * @access private
+ * @access protected
* @see getTable()
*/
- function renderListRow($table,$row,$cc,$titleCol,$thumbsCol,$indent=0) {
+ protected function renderListRow($table, array $row, $cc, $titleCol, $thumbsColumn, $indent = 0) {
$iOut = '';
if (strlen($this->searchString)) { // If in search mode, make sure the preview will show the correct page
@@ -686,8 +746,8 @@
$theData[$fCol] = $warning . $this->linkWrapItems($table, $row['uid'], $recTitle, $row);
// Render thumbsnails if a thumbnail column exists and there is content in it:
- if ($this->thumbs && trim($row[$thumbsCol])) {
- $theData[$fCol] .= '
' . $this->thumbCode($row,$table,$thumbsCol);
+ if ($this->thumbs && trim($row[$thumbsColumn])) {
+ $theData[$fCol] .= '
' . $this->thumbCode($row, $table, $thumbsColumn);
}
$localizationMarkerClass = '';
@@ -898,8 +958,7 @@
// If mod.web_list.newContentWiz.overrideWithExtension is set, use that extension's create new content wizard instead:
$tmpTSc = t3lib_BEfunc::getModTSconfig($this->pageinfo['uid'],'mod.web_list');
$tmpTSc = $tmpTSc ['properties']['newContentWiz.']['overrideWithExtension'];
- $newContentWizScriptPath = $this->backPath.t3lib_extMgm::isLoaded($tmpTSc) ? (t3lib_extMgm::extRelPath($tmpTSc).'mod1/db_new_content_el.php') : 'sysext/cms/layout/db_new_content_el.php';
-
+ $newContentWizScriptPath = $this->backPath.t3lib_extMgm::isLoaded($tmpTSc) ? (t3lib_extMgm::extRelPath($tmpTSc).'mod1/db_new_content_el.php') : $this->backPath . 'typo3/sysext/cms/layout/db_new_content_el.php';
$icon = ''.
($table == 'pages' ? t3lib_iconWorks::getSpriteIcon('actions-page-new') : t3lib_iconWorks::getSpriteIcon('actions-document-new')) .
'';
@@ -1543,18 +1602,19 @@
1 => '',
);
- $translations = $this->translateTools->translationInfo($table, $row['uid'], 0, $row, $this->selFieldList);
- $this->translations = $translations['translations'];
+ $translations = $this->translateTools->translationInfo($table, $row['uid'], 0, $row, $this->selectedFieldList);
+ $languageField = $TCA[$table]['ctrl']['languageField'];
+ $languageId = intval($row[$languageField]);
// Language title and icon:
- $out[0] = $this->languageFlag($row[$TCA[$table]['ctrl']['languageField']]);
+ $out[0] = $this->languageFlag($languageId );
if (is_array($translations)) {
// Traverse page translations and add icon for each language that does NOT yet exist:
$lNew = '';
foreach($this->pageOverlays as $lUid_OnPage => $lsysRec) {
- if (!isset($translations['translations'][$lUid_OnPage]) && $GLOBALS['BE_USER']->checkLanguageAccess($lUid_OnPage)) {
+ if (!isset($translations['translations'][$lUid_OnPage]) && ($languageId != $lUid_OnPage) && $GLOBALS['BE_USER']->checkLanguageAccess($lUid_OnPage)) {
$url = substr($this->listURL(), strlen($this->backPath));
$href = $GLOBALS['SOBE']->doc->issueCommand(
'&cmd[' . $table . '][' . $row['uid'] . '][localize]=' . $lUid_OnPage,