X-Git-Url: http://git.typo3.org/Packages/TYPO3.CMS.git/blobdiff_plain/7ec36e3378e071797bcc91062dcd67f82c41e240..24ebbc3e531a181da1c0f0c1971d5775d4d6c284:/t3lib/class.t3lib_loaddbgroup.php diff --git a/t3lib/class.t3lib_loaddbgroup.php b/t3lib/class.t3lib_loaddbgroup.php index e17d4ed073c..c370e66fd91 100755 --- a/t3lib/class.t3lib_loaddbgroup.php +++ b/t3lib/class.t3lib_loaddbgroup.php @@ -1,22 +1,22 @@ + * @author Kasper Skaarhoj */ /** * [CLASS/FUNCTION INDEX of SCRIPT] * * * - * 72: class t3lib_loadDBGroup - * 99: function start ($itemlist,$tablelist, $MMtable='',$MMuid=0) - * 140: function readList($itemlist) - * 186: function readMM($tableName,$uid) - * 216: function writeMM($tableName,$uid,$prependTableName=0) - * 245: function getValueArray($prependTableName='') - * 273: function convertPosNeg($valueArray,$fTable,$nfTable) - * 295: function getFromDB() - * 328: function readyForInterface() + * 72: class t3lib_loadDBGroup + * 99: function start($itemlist,$tablelist, $MMtable='',$MMuid=0) + * 140: function readList($itemlist) + * 186: function readMM($tableName,$uid) + * 215: function writeMM($tableName,$uid,$prependTableName=0) + * 251: function getValueArray($prependTableName='') + * 279: function convertPosNeg($valueArray,$fTable,$nfTable) + * 301: function getFromDB() + * 333: function readyForInterface() * * TOTAL FUNCTIONS: 8 * (This index is automatically created/updated by the extension "extdeveval") @@ -64,8 +64,8 @@ /** * Load database groups (relations) * Used to process the relations created by the TCA element types "group" and "select" for database records. Manages MM-relations as well. - * - * @author Kasper Skaarhoj + * + * @author Kasper Skaarhoj * @package TYPO3 * @subpackage t3lib */ @@ -83,20 +83,20 @@ class t3lib_loadDBGroup { var $dbPaths=Array(); var $firstTable = ''; // Will contain the first table name in the $tablelist (for positive ids) var $secondTable = ''; // Will contain the second table name in the $tablelist (for negative ids) - - + + /** * Initialization of the class. - * + * * @param string List of group/select items * @param string Comma list of tables, first table takes priority if no table is set for an entry in the list. * @param string Name of a MM table. * @param integer Local UID for MM lookup - * @return void + * @return void */ - function start ($itemlist,$tablelist, $MMtable='',$MMuid=0) { + function start($itemlist,$tablelist, $MMtable='',$MMuid=0) { // If the table list is "*" then all tables are used in the list: if (!strcmp(trim($tablelist),'*')) { $tablelist = implode(',',array_keys($GLOBALS['TCA'])); @@ -109,10 +109,10 @@ class t3lib_loadDBGroup { $this->tableArray[$tName] = Array(); if ($this->checkIfDeleted && $GLOBALS['TCA'][$tName]['ctrl']['delete']) { $fieldN = $tName.'.'.$GLOBALS['TCA'][$tName]['ctrl']['delete']; - $this->additionalWhere[$tName].=' AND NOT '.$fieldN; + $this->additionalWhere[$tName].=' AND '.$fieldN.'=0'; } } - + if (is_array($this->tableArray)) { reset($this->tableArray); } else {return 'No tables!';} @@ -121,29 +121,29 @@ class t3lib_loadDBGroup { $this->firstTable = key($this->tableArray); // Is the first table next($this->tableArray); $this->secondTable = key($this->tableArray); // If the second table is set and the ID number is less than zero (later) then the record is regarded to come from the second table... - + // Now, populate the internal itemArray and tableArray arrays: if ($MMtable) { // If MM, then call this function to do that: $this->readMM($MMtable,$MMuid); } else { // If not MM, then explode the itemlist by "," and traverse the list: $this->readList($itemlist); - } + } } - + /** * Explodes the item list and stores the parts in the internal arrays itemArray and tableArray from MM records. - * + * * @param string Item list - * @return void + * @return void */ function readList($itemlist) { if ((string)trim($itemlist)!='') { - $tempItemArray = explode(',',$itemlist); - while(list($key,$val)=each($tempItemArray)) { + $tempItemArray = t3lib_div::trimExplode(',', $itemlist); // Changed to trimExplode 31/3 04; HMENU special type "list" didn't work if there were spaces in the list... I suppose this is better overall... + foreach($tempItemArray as $key => $val) { $isSet = 0; // Will be set to "1" if the entry was a real table/id: - // Extract table name and id. This is un the formular [tablename]_[id] where table name MIGHT contain "_", hence the reversion of the string! + // Extract table name and id. This is un the formular [tablename]_[id] where table name MIGHT contain "_", hence the reversion of the string! $val = strrev($val); $parts = explode('_',$val,2); $theID = strrev($parts[0]); @@ -159,12 +159,12 @@ class t3lib_loadDBGroup { // Register ID/table name in internal arrays: $this->itemArray[$key]['id'] = $theID; $this->itemArray[$key]['table'] = $theTable; - $this->tableArray[$theTable][]=$theID; + $this->tableArray[$theTable][] = $theID; // Set update-flag: $isSet=1; } } - + // If it turns out that the value from the list was NOT a valid reference to a table-record, then we might still set it as a NO_TABLE value: if (!$isSet && $this->registerNonTableValues) { $this->itemArray[$key]['id'] = $tempItemArray[$key]; @@ -174,24 +174,22 @@ class t3lib_loadDBGroup { } } } - + /** * Reads the record tablename/id into the internal arrays itemArray and tableArray from MM records. * You can call this function after start if you supply no list to start() - * + * * @param string MM Tablename * @param integer Local UID - * @return void + * @return void */ function readMM($tableName,$uid) { - // Select all MM relations: - $query='SELECT * FROM '.$tableName.' WHERE uid_local='.intval($uid).' ORDER BY sorting'; - $res=mysql(TYPO3_db,$query); - echo mysql_error(); - $key=0; - while($row=mysql_fetch_assoc($res)) { - $theTable = $row['tablenames'] ? $row['tablenames'] : $this->firstTable; // If tablesnames columns exists and contain a name, then this value is the table, else it's the the firstTable... + + // Select all MM relations: + $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', $tableName, 'uid_local='.intval($uid), '', 'sorting'); + while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { + $theTable = $row['tablenames'] ? $row['tablenames'] : $this->firstTable; // If tablesnames columns exists and contain a name, then this value is the table, else it's the firstTable... if (($row['uid_foreign'] || $theTable=='pages') && $theTable && isset($this->tableArray[$theTable])) { $this->itemArray[$key]['id'] = $row['uid_foreign']; $this->itemArray[$key]['table'] = $theTable; @@ -203,42 +201,50 @@ class t3lib_loadDBGroup { } $key++; } + $GLOBALS['TYPO3_DB']->sql_free_result($res); } /** * Writes the internal itemArray to MM table: - * + * * @param string MM table name * @param integer Local UID * @param boolean If set, then table names will always be written. - * @return void + * @return void */ function writeMM($tableName,$uid,$prependTableName=0) { + // Delete all relations: - $query='DELETE FROM '.$tableName.' WHERE uid_local='.intval($uid); - $res=mysql(TYPO3_db,$query); - - // If there are tables... + $GLOBALS['TYPO3_DB']->exec_DELETEquery($tableName, 'uid_local='.intval($uid)); + + // If there are tables... $tableC = count($this->tableArray); if ($tableC) { $prep = ($tableC>1||$prependTableName) ? 1 : 0; $c=0; $tName=array(); + // For each item, insert it: foreach($this->itemArray as $val) { $c++; + + $insertFields = array( + 'uid_local' => $uid, + 'uid_foreign' => $val['id'], + 'sorting' => $c + ); if ($prep || $val['table']=='_NO_TABLE') { - $tName=array(',tablenames', ',"'.addslashes($val['table']).'"'); + $insertFields['tablenames'] = $val['table']; } - $query='INSERT INTO '.$tableName.' (uid_local,uid_foreign,sorting'.$tName[0].') VALUES ("'.$uid.'","'.addslashes($val['id']).'",'.$c.$tName[1].')'; - $res=mysql(TYPO3_db,$query); + + $GLOBALS['TYPO3_DB']->exec_INSERTquery($tableName, $insertFields); } } } /** * After initialization you can extract an array of the elements from the object. Use this function for that. - * + * * @param boolean If set, then table names will ALWAYS be prepended (unless its a _NO_TABLE value) * @return array A numeric array. */ @@ -246,12 +252,12 @@ class t3lib_loadDBGroup { // INIT: $valueArray=Array(); $tableC = count($this->tableArray); - + // If there are tables in the table array: if ($tableC) { // If there are more than ONE table in the table array, then always prepend table names: $prep = ($tableC>1||$prependTableName) ? 1 : 0; - + // Traverse the array of items: foreach($this->itemArray as $val) { $valueArray[]=(($prep && $val['table']!='_NO_TABLE') ? $val['table'].'_' : ''). @@ -259,12 +265,12 @@ class t3lib_loadDBGroup { } } // Return the array - return $valueArray; + return $valueArray; } /** * Converts id numbers from negative to positive. - * + * * @param array Array of [table]_[id] pairs. * @param string Foreign table (the one used for positive numbers) * @param string NEGative foreign table @@ -277,26 +283,26 @@ class t3lib_loadDBGroup { $parts = explode('_',$val,2); $theID = strrev($parts[0]); $theTable = strrev($parts[1]); - + if ( t3lib_div::testInt($theID) && (!$theTable || !strcmp($theTable,$fTable) || !strcmp($theTable,$nfTable)) ) { $valueArray[$key]= $theTable && strcmp($theTable,$fTable) ? $theID*-1 : $theID; } } } - return $valueArray; + return $valueArray; } - + /** * Reads all records from internal tableArray into the internal ->results array where keys are table names and for each table, records are stored with uids as their keys. * If $this->fromTC is set you can save a little memory since only uid,pid and a few other fields are selected. - * - * @return void + * + * @return void */ function getFromDB() { - // Traverses the tables listed: + // Traverses the tables listed: foreach($this->tableArray as $key => $val) { if (is_array($val)) { - $itemList = implode($val,','); + $itemList = implode(',',$val); if ($itemList) { $from = '*'; if ($this->fromTC) { @@ -304,13 +310,15 @@ class t3lib_loadDBGroup { if ($GLOBALS['TCA'][$key]['ctrl']['label']) { $from.= ','.$GLOBALS['TCA'][$key]['ctrl']['label']; // Titel } + if ($GLOBALS['TCA'][$key]['ctrl']['label_alt']) { + $from.= ','.$GLOBALS['TCA'][$key]['ctrl']['label_alt']; // Alternative Title-Fields + } if ($GLOBALS['TCA'][$key]['ctrl']['thumbnail']) { $from.= ','.$GLOBALS['TCA'][$key]['ctrl']['thumbnail']; // Thumbnail } } - $query='SELECT '.$from.' FROM '.$key.' WHERE uid IN ('.$itemList.')'.$this->additionalWhere[$key]; - $res=mysql(TYPO3_db,$query); - while($row = mysql_fetch_assoc($res)) { + $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($from, $key, 'uid IN ('.$itemList.')'.$this->additionalWhere[$key]); + while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $this->results[$key][$row['uid']]=$row; } } @@ -321,13 +329,13 @@ class t3lib_loadDBGroup { /** * Prepare items from itemArray to be transferred to the TCEforms interface (as a comma list) - * - * @return string + * + * @return string * @see t3lib_transferdata::renderRecord() */ function readyForInterface() { global $TCA; - + if (!is_array($this->itemArray)) {return false;} $output=array(); @@ -337,7 +345,7 @@ class t3lib_loadDBGroup { foreach($this->itemArray as $key => $val) { $theRow = $this->results[$val['table']][$val['id']]; if ($theRow && is_array($TCA[$val['table']])) { - $label = t3lib_div::fixed_lgd(strip_tags($theRow[$TCA[$val['table']]['ctrl']['label']]),$titleLen); + $label = t3lib_div::fixed_lgd_cs(strip_tags(t3lib_BEfunc::getRecordTitle($val['table'], $theRow)),$titleLen); $label = ($label)?$label:'[...]'; $output[]=str_replace(',','',$val['table'].'_'.$val['id'].'|'.rawurlencode($label)); } @@ -350,4 +358,4 @@ class t3lib_loadDBGroup { if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_loaddbgroup.php']) { include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_loaddbgroup.php']); } -?> \ No newline at end of file +?>