Documentation TYPO3 par Ameos

class.t3lib_admin.php

00001 <?php
00002 /***************************************************************
00003 *  Copyright notice
00004 *
00005 *  (c) 1999-2006 Kasper Skaarhoj (kasperYYYY@typo3.com)
00006 *  All rights reserved
00007 *
00008 *  This script is part of the TYPO3 project. The TYPO3 project is
00009 *  free software; you can redistribute it and/or modify
00010 *  it under the terms of the GNU General Public License as published by
00011 *  the Free Software Foundation; either version 2 of the License, or
00012 *  (at your option) any later version.
00013 *
00014 *  The GNU General Public License can be found at
00015 *  http://www.gnu.org/copyleft/gpl.html.
00016 *  A copy is found in the textfile GPL.txt and important notices to the license
00017 *  from the author is found in LICENSE.txt distributed with these scripts.
00018 *
00019 *
00020 *  This script is distributed in the hope that it will be useful,
00021 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00022 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00023 *  GNU General Public License for more details.
00024 *
00025 *  This copyright notice MUST APPEAR in all copies of the script!
00026 ***************************************************************/
00093 class t3lib_admin {
00094         var $genTree_includeDeleted = TRUE;             // if set, genTree() includes deleted pages. This is default.
00095         var $genTree_includeVersions = TRUE;            // if set, genTree() includes verisonized pages/records. This is default.
00096         var $genTree_includeRecords = FALSE;            // if set, genTree() includes records from pages.
00097         var $perms_clause = '';                         // extra where-clauses for the tree-selection
00098         var $genTree_makeHTML = 0;                      // if set, genTree() generates HTML, that visualizes the tree.
00099 
00100                 // internal
00101         var $page_idArray = Array();            // Will hod id/rec pais from genTree()
00102         var $rec_idArray = Array();
00103         var $getTree_HTML = '';                 // Will hold the HTML-code visualising the tree. genTree()
00104         var $backPath = '';
00105 
00106                 // internal
00107         var $checkFileRefs = Array();
00108         var $checkSelectDBRefs = Array();       // From the select-fields
00109         var $checkGroupDBRefs = Array();        // From the group-fields
00110 
00111         var $recStats = Array(
00112                 'allValid' => array(),
00113                 'published_versions' => array(),
00114                 'deleted' => array(),
00115         );
00116         var $lRecords = Array();
00117         var $lostPagesList = '';
00118 
00119 
00128         function genTree($theID, $depthData, $versions=FALSE)   {
00129 
00130                 if ($versions)  {
00131                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00132                                 'uid,title,doktype,deleted,t3ver_wsid,t3ver_id,t3ver_count,t3ver_swapmode'.(t3lib_extMgm::isLoaded('cms')?',hidden':''),
00133                                 'pages',
00134                                 'pid=-1 AND t3ver_oid='.intval($theID).' '.((!$this->genTree_includeDeleted)?'AND deleted=0':'').$this->perms_clause,
00135                                 '',
00136                                 'sorting'
00137                         );
00138                 } else {
00139                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00140                                 'uid,title,doktype,deleted'.(t3lib_extMgm::isLoaded('cms')?',hidden':''),
00141                                 'pages',
00142                                 'pid='.intval($theID).' '.((!$this->genTree_includeDeleted)?'AND deleted=0':'').$this->perms_clause,
00143                                 '',
00144                                 'sorting'
00145                         );
00146                 }
00147 
00148                         // Traverse the records selected:
00149                 $a = 0;
00150                 $c = $GLOBALS['TYPO3_DB']->sql_num_rows($res);
00151                 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))      {
00152 
00153                                 // Prepare the additional label used in the HTML output in case of versions:
00154                         if ($versions)  {
00155                                 $versionLabel = '[v1.'.$row['t3ver_id'].'; WS#'.$row['t3ver_wsid'].']';
00156                         } else $versionLabel='';
00157 
00158                         $a++;
00159                         $newID = $row['uid'];
00160 
00161                                 // Build HTML output:
00162                         if ($this->genTree_makeHTML)    {
00163                                 $this->genTree_HTML.=chr(10).'<div><span class="nobr">';
00164                                 $PM = 'join';
00165                                 $LN = ($a==$c)?'blank':'line';
00166                                 $BTM = ($a==$c)?'bottom':'';
00167                                 $this->genTree_HTML.= $depthData.
00168                                         '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/ol/'.$PM.$BTM.'.gif','width="18" height="16"').' align="top" alt="" />'.
00169                                         $versionLabel.
00170                                         t3lib_iconWorks::getIconImage('pages',$row,$this->backPath,'align="top"').
00171                                         htmlspecialchars($row['uid'].': '.t3lib_div::fixed_lgd_cs(strip_tags($row['title']),50)).'</span></div>';
00172                         }
00173 
00174                                 // Register various data for this item:
00175                         $this->page_idArray[$newID]=$row;
00176 
00177                         $this->recStats['all_valid']['pages'][$newID] = $newID;
00178 #                       if ($versions)  $this->recStats['versions']['pages'][$newID] = $newID;
00179                         if ($row['deleted'])    $this->recStats['deleted']['pages'][$newID] = $newID;
00180                         if ($versions && $row['t3ver_count']>=1) {
00181                                 $this->recStats['published_versions']['pages'][$newID] = $newID;
00182                         }
00183 
00184                         if ($row['deleted']) {$this->recStat['deleted']++;}
00185                         if ($row['hidden']) {$this->recStat['hidden']++;}
00186                         $this->recStat['doktype'][$row['doktype']]++;
00187 
00188                                 // Create the HTML code prefix for recursive call:
00189                         $genHTML =  $depthData.'<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/ol/'.$LN.'.gif','width="18" height="16"').' align="top" alt="" />'.$versionLabel;
00190 
00191                                 // If all records should be shown, do so:
00192                         if ($this->genTree_includeRecords)      {
00193                                 foreach($GLOBALS['TCA'] as $tableName => $cfg)  {
00194                                         if ($tableName!='pages') {
00195                                                 $this->genTree_records($newID, $this->genTree_HTML ? $genHTML : '', $tableName);
00196                                         }
00197                                 }
00198                         }
00199 
00200                                 // Add sub pages:
00201                         $this->genTree($newID, $this->genTree_HTML ? $genHTML : '');
00202 
00203                                 // If versions are included in the tree, add those now:
00204                         if ($this->genTree_includeVersions)     {
00205                                 $this->genTree($newID, $this->genTree_HTML ? $genHTML : '', TRUE);
00206                         }
00207                 }
00208         }
00209 
00217         function genTree_records($theID, $depthData, $table='', $versions=FALSE)        {
00218                 global $TCA;
00219 
00220                 if ($versions)  {
00221                                 // Select all records from table pointing to this page:
00222                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00223                                 t3lib_BEfunc::getCommonSelectFields($table),
00224                                 $table,
00225                                 'pid=-1 AND t3ver_oid='.intval($theID).
00226                                         (!$this->genTree_includeDeleted?t3lib_BEfunc::deleteClause($table):'')
00227                         );
00228                 } else {
00229                                 // Select all records from table pointing to this page:
00230                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00231                                 t3lib_BEfunc::getCommonSelectFields($table),
00232                                 $table,
00233                                 'pid='.intval($theID).
00234                                         (!$this->genTree_includeDeleted?t3lib_BEfunc::deleteClause($table):'')
00235                         );
00236                 }
00237 
00238                         // Traverse selected:
00239                 $a = 0;
00240                 $c = $GLOBALS['TYPO3_DB']->sql_num_rows($res);
00241                 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))      {
00242 
00243                                 // Prepare the additional label used in the HTML output in case of versions:
00244                         if ($versions)  {
00245                                 $versionLabel = '[v1.'.$row['t3ver_id'].'; WS#'.$row['t3ver_wsid'].']';
00246                         } else $versionLabel='';
00247 
00248                         $a++;
00249                         $newID = $row['uid'];
00250 
00251                                 // Build HTML output:
00252                         if ($this->genTree_makeHTML)    {
00253                                 $this->genTree_HTML.=chr(10).'<div><span class="nobr">';
00254                                 $PM = 'join';
00255                                 $LN = ($a==$c)?'blank':'line';
00256                                 $BTM = ($a==$c)?'bottom':'';
00257                                 $this->genTree_HTML.= $depthData.
00258                                         '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/ol/'.$PM.$BTM.'.gif','width="18" height="16"').' align="top" alt="" />'.
00259                                         $versionLabel.
00260                                         t3lib_iconWorks::getIconImage($table,$row,$this->backPath,'align="top" title="'.$table.'"').htmlspecialchars($row['uid'].': '.t3lib_BEfunc::getRecordTitle($table,$row)).'</span></div>';
00261                         }
00262 
00263                                 // Register various data for this item:
00264                         $this->rec_idArray[$table][$newID]=$row;
00265 
00266                         $this->recStats['all_valid'][$table][$newID] = $newID;
00267 #                       $this->recStats[$versions?'versions':'live'][$table][$newID] = $newID;
00268                         if ($row['deleted'])    $this->recStats['deleted'][$table][$newID] = $newID;
00269                         if ($versions && $row['t3ver_count']>=1 && $row['t3ver_wsid']==0) {
00270                                 $this->recStats['published_versions'][$table][$newID] = $newID;
00271                         }
00272 
00273 #                       if ($row['deleted']) {$this->recStat['deleted']++;}
00274 #                       if ($row['hidden']) {$this->recStat['hidden']++;}
00275 
00276 
00277 
00278                                 // Select all versions of this record:
00279                         if ($this->genTree_includeVersions && $TCA[$table]['ctrl']['versioningWS']) {
00280                                 $genHTML =  $depthData.'<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/ol/'.$LN.'.gif','width="18" height="16"').' align="top" alt="" />';
00281 
00282                                 $this->genTree_records($newID, $genHTML, $table, TRUE);
00283                         }
00284                 }
00285         }
00286 
00292         function genTreeStatus($root=0) {
00293                 $this->genTree_includeDeleted = TRUE;           // if set, genTree() includes deleted pages. This is default.
00294                 $this->genTree_includeVersions = TRUE;          // if set, genTree() includes verisonized pages/records. This is default.
00295                 $this->genTree_includeRecords = TRUE;           // if set, genTree() includes records from pages.
00296                 $this->perms_clause = '';                                       // extra where-clauses for the tree-selection
00297                 $this->genTree_makeHTML = 0;                            // if set, genTree() generates HTML, that visualizes the tree.
00298 
00299                 $this->genTree($root,'');
00300 
00301                 return $this->recStats;
00302         }
00303 
00304 
00305 
00306 
00307 
00308 
00315         function lostRecords($pid_list) {
00316                 global $TCA;
00317                 reset($TCA);
00318                 $this->lostPagesList='';
00319                 if ($pid_list)  {
00320                         while (list($table)=each($TCA)) {
00321                                 t3lib_div::loadTCA($table);
00322 
00323                                 $pid_list_tmp = $pid_list;
00324                                 if (!isset($TCA[$table]['ctrl']['versioningWS']) || !$TCA[$table]['ctrl']['versioningWS'])      {
00325                                                 // Remove preceding "-1," for non-versioned tables
00326                                         $pid_list_tmp = preg_replace('/^\-1,/','',$pid_list_tmp);
00327                                 }
00328 
00329                                 $garbage = $GLOBALS['TYPO3_DB']->exec_SELECTquery (
00330                                                                 'uid,pid,'.$TCA[$table]['ctrl']['label'],
00331                                                                 $table,
00332                                                                 'pid NOT IN ('.$pid_list_tmp.')'
00333                                                         );
00334                                 $lostIdList = array();
00335                                 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($garbage))  {
00336                                         $this->lRecords[$table][$row['uid']]=Array('uid'=>$row['uid'], 'pid'=>$row['pid'], 'title'=> strip_tags($row[$TCA[$table]['ctrl']['label']]) );
00337                                         $lostIdList[]=$row['uid'];
00338                                 }
00339                                 if ($table=='pages')    {
00340                                         $this->lostPagesList=implode(',',$lostIdList);
00341                                 }
00342                         }
00343                 }
00344         }
00345 
00353         function fixLostRecord($table,$uid)     {
00354                 if ($table && $GLOBALS['TCA'][$table] && $uid && is_array($this->lRecords[$table][$uid]) && $GLOBALS['BE_USER']->user['admin']) {
00355 
00356                         $updateFields = array();
00357                         $updateFields['pid'] = 0;
00358                         if ($GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['disabled'])       {       // If possible a lost record restored is hidden as default
00359                                 $updateFields[$GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['disabled']] = 1;
00360                         }
00361 
00362                         $GLOBALS['TYPO3_DB']->exec_UPDATEquery($table, 'uid='.intval($uid), $updateFields);
00363 
00364                         return TRUE;
00365                 } else return FALSE;
00366         }
00367 
00374         function countRecords($pid_list)        {
00375                 global $TCA;
00376                 reset($TCA);
00377                 $list=Array();
00378                 $list_n=Array();
00379                 if ($pid_list)  {
00380                         while (list($table)=each($TCA)) {
00381                                 t3lib_div::loadTCA($table);
00382 
00383                                 $pid_list_tmp = $pid_list;
00384                                 if (!isset($TCA[$table]['ctrl']['versioningWS']) || !$TCA[$table]['ctrl']['versioningWS'])      {
00385                                                 // Remove preceding "-1," for non-versioned tables
00386                                         $pid_list_tmp = preg_replace('/^\-1,/','',$pid_list_tmp);
00387                                 }
00388 
00389                                 $count = $GLOBALS['TYPO3_DB']->exec_SELECTquery('count(*)', $table, 'pid IN ('.$pid_list_tmp.')');
00390                                 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_row($count)) {
00391                                         $list[$table]=$row[0];
00392                                 }
00393 
00394                                 $count = $GLOBALS['TYPO3_DB']->exec_SELECTquery('count(*)', $table, 'pid IN ('.$pid_list_tmp.')'.t3lib_BEfunc::deleteClause($table));
00395                                 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_row($count)) {
00396                                         $list_n[$table]=$row[0];
00397                                 }
00398                         }
00399                 }
00400                 return array('all' => $list, 'non_deleted' => $list_n);
00401         }
00402 
00409         function getGroupFields($mode)  {
00410                 global $TCA;
00411                 reset ($TCA);
00412                 $result = Array();
00413                 while (list($table)=each($TCA)) {
00414                         t3lib_div::loadTCA($table);
00415                         $cols = $TCA[$table]['columns'];
00416                         reset ($cols);
00417                         while (list($field,$config)=each($cols))        {
00418                                 if ($config['config']['type']=='group') {
00419                                         if (
00420                                                 ((!$mode||$mode=='file') && $config['config']['internal_type']=='file') ||
00421                                                 ((!$mode||$mode=='db') && $config['config']['internal_type']=='db')
00422                                                 )       {
00423                                                 $result[$table][]=$field;
00424                                         }
00425                                 }
00426                                 if ( (!$mode||$mode=='db') && $config['config']['type']=='select' && $config['config']['foreign_table'])        {
00427                                         $result[$table][]=$field;
00428                                 }
00429                         }
00430                         if ($result[$table])    {
00431                                 $result[$table] = implode(',',$result[$table]);
00432                         }
00433                 }
00434                 return $result;
00435         }
00436 
00443         function getFileFields($uploadfolder)   {
00444                 global $TCA;
00445                 reset ($TCA);
00446                 $result = Array();
00447                 while (list($table)=each($TCA)) {
00448                         t3lib_div::loadTCA($table);
00449                         $cols = $TCA[$table]['columns'];
00450                         reset ($cols);
00451                         while (list($field,$config)=each($cols))        {
00452                                 if ($config['config']['type']=='group' && $config['config']['internal_type']=='file' && $config['config']['uploadfolder']==$uploadfolder)       {
00453                                         $result[]=Array($table,$field);
00454                                 }
00455                         }
00456                 }
00457                 return $result;
00458         }
00459 
00466         function getDBFields($theSearchTable)   {
00467                 global $TCA;
00468                 $result = Array();
00469                 reset ($TCA);
00470                 while (list($table)=each($TCA)) {
00471                         t3lib_div::loadTCA($table);
00472                         $cols = $TCA[$table]['columns'];
00473                         reset ($cols);
00474                         while (list($field,$config)=each($cols))        {
00475                                 if ($config['config']['type']=='group' && $config['config']['internal_type']=='db')     {
00476                                         if (trim($config['config']['allowed'])=='*' || strstr($config['config']['allowed'],$theSearchTable))    {
00477                                                 $result[]=Array($table,$field);
00478                                         }
00479                                 } else if ($config['config']['type']=='select' && $config['config']['foreign_table']==$theSearchTable)  {
00480                                         $result[]=Array($table,$field);
00481                                 }
00482                         }
00483                 }
00484                 return $result;
00485         }
00486 
00494         function selectNonEmptyRecordsWithFkeys($fkey_arrays)   {
00495                 global $TCA;
00496                 if (is_array($fkey_arrays))     {
00497                         reset($fkey_arrays);
00498                         while (list($table,$field_list)=each($fkey_arrays))     {
00499                                 if ($TCA[$table] && trim($field_list))  {
00500                                         t3lib_div::loadTCA($table);
00501                                         $fieldArr = explode(',',$field_list);
00502 
00503                                         if(t3lib_extMgm::isLoaded('dbal')) {
00504                                                 $fields = $GLOBALS['TYPO3_DB']->admin_get_fields($table);
00505                                                 reset($fields);
00506                                                 list(,$field)=each($fieldArr);
00507                                                 $cl_fl = ($GLOBALS['TYPO3_DB']->MetaType($fields[$field]['type'],$table) == 'I' || $GLOBALS['TYPO3_DB']->MetaType($fields[$field]['type'],$table) == 'N' || $GLOBALS['TYPO3_DB']->MetaType($fields[$field]['type'],$table) == 'R') ?
00508                                                 $field.'!=0' : $field.'!=\'\'';
00509                                                 while (list(,$field)=each($fieldArr))   {
00510                                                         $cl_fl .= ($GLOBALS['TYPO3_DB']->MetaType($fields[$field]['type'],$table) == 'I' || $GLOBALS['TYPO3_DB']->MetaType($fields[$field]['type'],$table) == 'N' || $GLOBALS['TYPO3_DB']->MetaType($fields[$field]['type'],$table) == 'R') ?
00511                                                         ' OR '.$field.'!=0' : ' OR '.$field.'!=\'\'';
00512                                                 }
00513                                                 unset($fields);
00514                                         }
00515                                         else {
00516                                         $cl_fl = implode ('!="" OR ',$fieldArr). '!=""';
00517                                         }
00518 
00519                                         $mres = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid,'.$field_list, $table, $cl_fl);
00520                                         while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($mres))     {
00521                                                 reset($fieldArr);
00522                                                 while (list(,$field)=each($fieldArr))   {
00523                                                         if (trim($row[$field]))         {
00524                                                                 $fieldConf = $TCA[$table]['columns'][$field]['config'];
00525                                                                 if ($fieldConf['type']=='group')        {
00526                                                                         if ($fieldConf['internal_type']=='file')        {
00527                                                                                 // files...
00528                                                                                 if ($fieldConf['MM'])   {
00529                                                                                         $tempArr=array();
00530                                                                                         $dbAnalysis = t3lib_div::makeInstance('t3lib_loadDBGroup');
00531                                                                                         $dbAnalysis->start('','files',$fieldConf['MM'],$row['uid']);
00532                                                                                         reset($dbAnalysis->itemArray);
00533                                                                                         while (list($somekey,$someval)=each($dbAnalysis->itemArray))    {
00534                                                                                                 if ($someval['id'])     {
00535                                                                                                         $tempArr[]=$someval['id'];
00536                                                                                                 }
00537                                                                                         }
00538                                                                                 } else {
00539                                                                                         $tempArr = explode(',',trim($row[$field]));
00540                                                                                 }
00541                                                                                 reset($tempArr);
00542                                                                                 while (list(,$file)=each($tempArr))     {
00543                                                                                         $file = trim($file);
00544                                                                                         if ($file)      {
00545                                                                                                 $this->checkFileRefs[$fieldConf['uploadfolder']][$file]+=1;
00546                                                                                         }
00547                                                                                 }
00548                                                                         }
00549                                                                         if ($fieldConf['internal_type']=='db')  {
00550                                                                                 // dbs - group
00551                                                                                 $dbAnalysis = t3lib_div::makeInstance('t3lib_loadDBGroup');
00552                                                                                 $dbAnalysis->start($row[$field],$fieldConf['allowed'],$fieldConf['MM'],$row['uid'], $table, $fieldConf);
00553                                                                                 reset($dbAnalysis->itemArray);
00554                                                                                 while (list(,$tempArr)=each($dbAnalysis->itemArray))    {
00555                                                                                         $this->checkGroupDBRefs[$tempArr['table']][$tempArr['id']]+=1;
00556                                                                                 }
00557                                                                         }
00558                                                                 }
00559                                                                 if ($fieldConf['type']=='select' && $fieldConf['foreign_table'])        {
00560                                                                         // dbs - select
00561                                                                         $dbAnalysis = t3lib_div::makeInstance('t3lib_loadDBGroup');
00562                                                                         $dbAnalysis->start($row[$field],$fieldConf['foreign_table'],$fieldConf['MM'],$row['uid'], $table, $fieldConf);
00563                                                                         reset($dbAnalysis->itemArray);
00564                                                                         while (list(,$tempArr)=each($dbAnalysis->itemArray))    {
00565                                                                                 if ($tempArr['id']>0)   {
00566                                                                                         $this->checkGroupDBRefs[$fieldConf['foreign_table']][$tempArr['id']]+=1;
00567                                                                                 }
00568                                                                         }
00569                                                                 }
00570                                                         }
00571                                                 }
00572                                         }
00573                                 }
00574                         }
00575                 }
00576         }
00577 
00583         function testFileRefs ()        {
00584                 $output=Array();
00585                 reset($this->checkFileRefs);
00586                 while(list($folder,$fileArr)=each($this->checkFileRefs))        {
00587                         $path = PATH_site.$folder;
00588                         if (@is_dir($path))     {
00589                                 $d = dir($path);
00590                                 while($entry=$d->read()) {
00591                                         if (@is_file($path.'/'.$entry)) {
00592                                                 if (isset($fileArr[$entry]))    {
00593                                                         if ($fileArr[$entry] > 1)       {
00594                                                                 $temp = $this->whereIsFileReferenced($folder,$entry);
00595                                                                 $tempList = '';
00596                                                                 while(list(,$inf)=each($temp))  {
00597                                                                         $tempList.='['.$inf['table'].']['.$inf['uid'].']['.$inf['field'].'] (pid:'.$inf['pid'].') - ';
00598                                                                 }
00599                                                                 $output['moreReferences'][] = Array($path,$entry,$fileArr[$entry],$tempList);
00600                                                         }
00601                                                         unset($fileArr[$entry]);
00602                                                 } else {
00603                                                         if (!strstr($entry,'index.htm'))        {
00604                                                                 $output['noReferences'][] = Array($path,$entry);
00605                                                         }
00606                                                 }
00607                                         }
00608                                 }
00609                                 $d->close();
00610                                 reset($fileArr);
00611                                 $tempCounter=0;
00612                                 while(list($file,)=each($fileArr))      {
00613                                         $temp = $this->whereIsFileReferenced($folder,$file);
00614                                         $tempList = '';
00615                                         while(list(,$inf)=each($temp))  {
00616                                                 $tempList.='['.$inf['table'].']['.$inf['uid'].']['.$inf['field'].'] (pid:'.$inf['pid'].') - ';
00617                                         }
00618                                         $tempCounter++;
00619                                         $output['noFile'][substr($path,-3).'_'.substr($file,0,3).'_'.$tempCounter] = Array($path,$file,$tempList);
00620                                 }
00621                         } else {
00622                                 $output['error'][] = Array($path);
00623                         }
00624                 }
00625                 return $output;
00626         }
00627 
00634         function testDBRefs($theArray)  {
00635                 global $TCA;
00636                 reset($theArray);
00637                 while(list($table,$dbArr)=each($theArray))      {
00638                         if ($TCA[$table])       {
00639                                 $idlist = Array();
00640                                 while(list($id,)=each($dbArr))  {
00641                                         $idlist[]=$id;
00642                                 }
00643                                 $theList = implode(',',$idlist);
00644                                 if ($theList)   {
00645                                         $mres = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid', $table, 'uid IN ('.$theList.')'.t3lib_BEfunc::deleteClause($table));
00646                                         while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($mres))      {
00647                                                 if (isset($dbArr[$row['uid']])) {
00648                                                         unset ($dbArr[$row['uid']]);
00649                                                 } else {
00650                                                         $result.='Strange Error. ...<br />';
00651                                                 }
00652                                         }
00653                                         reset($dbArr);
00654                                         while (list($theId,$theC)=each($dbArr)) {
00655                                                 $result.='There are '.$theC.' records pointing to this missing or deleted record; ['.$table.']['.$theId.']<br />';
00656                                         }
00657                                 }
00658                         } else {
00659                                 $result.='Codeerror. Table is not a table...<br />';
00660                         }
00661                 }
00662                 return $result;
00663         }
00664 
00672         function whereIsRecordReferenced($searchTable,$id)      {
00673                 global $TCA;
00674                 $fileFields = $this->getDBFields($searchTable); // Gets tables / Fields that reference to files...
00675                 $theRecordList=Array();
00676                 while (list(,$info)=each($fileFields))  {
00677                         $table=$info[0];        $field=$info[1];
00678                         t3lib_div::loadTCA($table);
00679                         $mres = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00680                                                         'uid,pid,'.$TCA[$table]['ctrl']['label'].','.$field,
00681                                                         $table,
00682                                                         $field.' LIKE \'%'.$GLOBALS['TYPO3_DB']->quoteStr($id, $table).'%\''
00683                                                 );
00684                         while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($mres))     {
00685                                         // Now this is the field, where the reference COULD come from. But we're not garanteed, so we must carefully examine the data.
00686                                 $fieldConf = $TCA[$table]['columns'][$field]['config'];
00687                                 $allowedTables = ($fieldConf['type']=='group') ? $fieldConf['allowed'] : $fieldConf['foreign_table'];
00688 
00689                                 $dbAnalysis = t3lib_div::makeInstance('t3lib_loadDBGroup');
00690                                 $dbAnalysis->start($row[$field],$allowedTables,$fieldConf['MM'],$row['uid'], $table, $fieldConf);
00691                                 reset($dbAnalysis->itemArray);
00692                                 while (list(,$tempArr)=each($dbAnalysis->itemArray))    {
00693                                         if ($tempArr['table']==$searchTable && $tempArr['id']==$id)     {
00694                                                 $theRecordList[]=Array('table'=>$table,'uid'=>$row['uid'],'field'=>$field,'pid'=>$row['pid']);
00695                                         }
00696                                 }
00697                         }
00698                 }
00699                 return $theRecordList;
00700         }
00701 
00709         function whereIsFileReferenced($uploadfolder,$filename) {
00710                 global $TCA;
00711                 $fileFields = $this->getFileFields($uploadfolder);      // Gets tables / Fields that reference to files...
00712                 $theRecordList=Array();
00713                 while (list(,$info)=each($fileFields))  {
00714                         $table=$info[0];        $field=$info[1];
00715                         $mres = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00716                                                         'uid,pid,'.$TCA[$table]['ctrl']['label'].','.$field,
00717                                                         $table,
00718                                                         $field.' LIKE \'%'.$GLOBALS['TYPO3_DB']->quoteStr($filename, $table).'%\''
00719                                                 );
00720                         while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($mres))     {
00721                                 // Now this is the field, where the reference COULD come from. But we're not garanteed, so we must carefully examine the data.
00722                                 $tempArr = explode(',',trim($row[$field]));
00723                                 while (list(,$file)=each($tempArr))     {
00724                                         $file = trim($file);
00725                                         if ($file==$filename)   {
00726                                                 $theRecordList[]=Array('table'=>$table,'uid'=>$row['uid'],'field'=>$field,'pid'=>$row['pid']);
00727                                         }
00728                                 }
00729                         }
00730                 }
00731                 return $theRecordList;
00732         }
00733 }
00734 
00735 
00736 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_admin.php'])     {
00737         include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_admin.php']);
00738 }
00739 ?>


Généré par L'expert TYPO3 avec  doxygen 1.4.6