"TYPO3 4.0.1: typo3_src-4.0.1/t3lib/class.t3lib_befunc.php Source File", "datetime" => "Sat Dec 2 19:22:17 2006", "date" => "2 Dec 2006", "doxygenversion" => "1.4.6", "projectname" => "TYPO3 4.0.1", "projectnumber" => "4.0.1" ); get_header($doxygen_vars); ?>

class.t3lib_befunc.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 ***************************************************************/
00183 class t3lib_BEfunc      {
00184 
00185 
00186 
00187         /*******************************************
00188          *
00189          * SQL-related, selecting records, searching
00190          *
00191          *******************************************/
00192 
00193 
00204         function deleteClause($table,$tableAlias='')    {
00205                 global $TCA;
00206                 if ($TCA[$table]['ctrl']['delete'])     {
00207                         return ' AND '.($tableAlias ? $tableAlias : $table).'.'.$TCA[$table]['ctrl']['delete'].'=0';
00208                 } else {
00209                         return '';
00210                 }
00211         }
00212 
00227         function getRecord($table,$uid,$fields='*',$where='')   {
00228                 if ($GLOBALS['TCA'][$table])    {
00229                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, $table, 'uid='.intval($uid).t3lib_BEfunc::deleteClause($table).$where);
00230                         if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00231                                 return $row;
00232                         }
00233                 }
00234         }
00235 
00245         function getRecordWSOL($table,$uid,$fields='*',$where='') {
00246                 if ($fields !== '*') {
00247                         $internalFields = t3lib_div::uniqueList($fields.',uid,pid'.($table == 'pages' ? ',t3ver_swapmode' : ''));
00248                         $row = t3lib_BEfunc::getRecord($table,$uid,$internalFields,$where);
00249                         t3lib_BEfunc::workspaceOL($table,$row);
00250 
00251                         if (is_array ($row)) {
00252                                 foreach (array_keys($row) as $key) {
00253                                         if (!t3lib_div::inList($fields, $key) && $key{0} !== '_') {
00254                                                 unset ($row[$key]);
00255                                         }
00256                                 }
00257                         }
00258                 } else {
00259                         $row = t3lib_BEfunc::getRecord($table,$uid,$fields,$where);
00260                         t3lib_BEfunc::workspaceOL($table,$row);
00261                 }
00262                 return $row;
00263         }
00264 
00278         function getRecordRaw($table,$where='',$fields='*')     {
00279                 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, $table, $where);
00280                 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00281                         return $row;
00282                 }
00283         }
00284 
00300         function getRecordsByField($theTable,$theField,$theValue,$whereClause='',$groupBy='',$orderBy='',$limit='')     {
00301                 global $TCA;
00302                 if (is_array($TCA[$theTable])) {
00303                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00304                                                 '*',
00305                                                 $theTable,
00306                                                 $theField.'='.$GLOBALS['TYPO3_DB']->fullQuoteStr($theValue, $theTable).
00307                                                         t3lib_BEfunc::deleteClause($theTable).' '.
00308                                                         t3lib_BEfunc::versioningPlaceholderClause($theTable).' '.
00309                                                         $whereClause,   // whereClauseMightContainGroupOrderBy
00310                                                 $groupBy,
00311                                                 $orderBy,
00312                                                 $limit
00313                                         );
00314                         $rows = array();
00315                         while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))       {
00316                                 $rows[] = $row;
00317                         }
00318                         $GLOBALS['TYPO3_DB']->sql_free_result($res);
00319                         if (count($rows))       return $rows;
00320                 }
00321         }
00322 
00333         function searchQuery($searchWords,$fields,$table='')    {
00334                 return $GLOBALS['TYPO3_DB']->searchQuery($searchWords,$fields,$table);
00335         }
00336 
00348         function listQuery($field,$value)       {
00349                 return $GLOBALS['TYPO3_DB']->listQuery($field,$value,'');
00350         }
00351 
00360         function splitTable_Uid($str)   {
00361                 list($uid,$table) = explode('_',strrev($str),2);
00362                 return array(strrev($table),strrev($uid));
00363         }
00364 
00375         function getSQLselectableList($in_list,$tablename,$default_tablename)   {
00376                 $list = Array();
00377                 if ((string)trim($in_list)!='') {
00378                         $tempItemArray = explode(',',trim($in_list));
00379                         while(list($key,$val)=each($tempItemArray))     {
00380                                 $val = strrev($val);
00381                                 $parts = explode('_',$val,2);
00382                                 if ((string)trim($parts[0])!='')        {
00383                                         $theID = intval(strrev($parts[0]));
00384                                         $theTable = trim($parts[1]) ? strrev(trim($parts[1])) : $default_tablename;
00385                                         if ($theTable==$tablename)      {$list[]=$theID;}
00386                                 }
00387                         }
00388                 }
00389                 return implode(',',$list);
00390         }
00391 
00403         function BEenableFields($table,$inv=0)  {
00404                 $ctrl = $GLOBALS['TCA'][$table]['ctrl'];
00405                 $query=array();
00406                 $invQuery=array();
00407                 if (is_array($ctrl))    {
00408                         if (is_array($ctrl['enablecolumns']))   {
00409                                 if ($ctrl['enablecolumns']['disabled']) {
00410                                         $field = $table.'.'.$ctrl['enablecolumns']['disabled'];
00411                                         $query[]=$field.'=0';
00412                                         $invQuery[]=$field.'!=0';
00413                                 }
00414                                 if ($ctrl['enablecolumns']['starttime'])        {
00415                                         $field = $table.'.'.$ctrl['enablecolumns']['starttime'];
00416                                         $query[]='('.$field.'<='.$GLOBALS['SIM_EXEC_TIME'].')';
00417                                         $invQuery[]='('.$field.'!=0 AND '.$field.'>'.$GLOBALS['SIM_EXEC_TIME'].')';
00418                                 }
00419                                 if ($ctrl['enablecolumns']['endtime'])  {
00420                                         $field = $table.'.'.$ctrl['enablecolumns']['endtime'];
00421                                         $query[]='('.$field.'=0 OR '.$field.'>'.$GLOBALS['SIM_EXEC_TIME'].')';
00422                                         $invQuery[]='('.$field.'!=0 AND '.$field.'<='.$GLOBALS['SIM_EXEC_TIME'].')';
00423                                 }
00424                         }
00425                 }
00426                 $outQ = ' AND '.($inv ? '('.implode(' OR ',$invQuery).')' : implode(' AND ',$query));
00427 
00428                 return $outQ;
00429         }
00430 
00431 
00432 
00433 
00434 
00435 
00436 
00437 
00438 
00439 
00440         /*******************************************
00441          *
00442          * SQL-related, DEPRECATED functions
00443          * (use t3lib_DB functions instead)
00444          *
00445          *******************************************/
00446 
00447 
00467         function mm_query($select,$local_table,$mm_table,$foreign_table,$whereClause='',$groupBy='',$orderBy='',$limit='')      {
00468                 $query = $GLOBALS['TYPO3_DB']->SELECTquery(
00469                                         $select,
00470                                         $local_table.','.$mm_table.($foreign_table?','.$foreign_table:''),
00471                                         $local_table.'.uid='.$mm_table.'.uid_local'.($foreign_table?' AND '.$foreign_table.'.uid='.$mm_table.'.uid_foreign':'').' '.
00472                                                 $whereClause,   // whereClauseMightContainGroupOrderBy
00473                                         $groupBy,
00474                                         $orderBy,
00475                                         $limit
00476                                 );
00477                 return $query;
00478         }
00479 
00489         function DBcompileInsert($table,$fields_values) {
00490                 return $GLOBALS['TYPO3_DB']->INSERTquery($table, $fields_values);
00491         }
00492 
00503         function DBcompileUpdate($table,$where,$fields_values)  {
00504                 return $GLOBALS['TYPO3_DB']->UPDATEquery($table, $where, $fields_values);
00505         }
00506 
00507 
00508 
00509 
00510 
00511 
00512 
00513 
00514 
00515 
00516         /*******************************************
00517          *
00518          * Page tree, TCA related
00519          *
00520          *******************************************/
00521 
00533         function BEgetRootLine($uid,$clause='',$workspaceOL=FALSE)      {
00534                 $loopCheck = 100;
00535                 $theRowArray = Array();
00536                 $output = Array();
00537                 while ($uid!=0 && $loopCheck>0) {
00538                         $loopCheck--;
00539                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00540                                 'pid,uid,title,TSconfig,is_siteroot,storage_pid,t3ver_oid,t3ver_wsid,t3ver_state,t3ver_swapmode,t3ver_stage',
00541                                 'pages',
00542                                 'uid='.intval($uid).' '.
00543                                         t3lib_BEfunc::deleteClause('pages').' '.
00544                                         $clause         // whereClauseMightContainGroupOrderBy
00545                         );
00546                         if ($GLOBALS['TYPO3_DB']->sql_error())  {
00547                                 debug($GLOBALS['TYPO3_DB']->sql_error(),1);
00548                         }
00549                         if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00550                                 if($workspaceOL)        t3lib_BEfunc::workspaceOL('pages',$row);
00551                                 t3lib_BEfunc::fixVersioningPid('pages',$row);
00552                                 $uid = $row['pid'];
00553                                 $theRowArray[] = $row;
00554                         } else {
00555                                 break;
00556                         }
00557                 }
00558                 if ($uid==0) {$theRowArray[] = Array('uid'=>0,'title'=>'');}
00559                 if (is_array($theRowArray))     {
00560                         reset($theRowArray);
00561                         $c=count($theRowArray);
00562                         while(list($key,$val)=each($theRowArray))       {
00563                                 $c--;
00564                                 $output[$c]['uid'] = $val['uid'];
00565                                 $output[$c]['pid'] = $val['pid'];
00566                                 if (isset($val['_ORIG_pid'])) $output[$c]['_ORIG_pid'] = $val['_ORIG_pid'];
00567                                 $output[$c]['title'] = $val['title'];
00568                                 $output[$c]['TSconfig'] = $val['TSconfig'];
00569                                 $output[$c]['is_siteroot'] = $val['is_siteroot'];
00570                                 $output[$c]['storage_pid'] = $val['storage_pid'];
00571                                 $output[$c]['t3ver_oid'] = $val['t3ver_oid'];
00572                                 $output[$c]['t3ver_wsid'] = $val['t3ver_wsid'];
00573                                 $output[$c]['t3ver_state'] = $val['t3ver_state'];
00574                                 $output[$c]['t3ver_swapmode'] = $val['t3ver_swapmode'];
00575                                 $output[$c]['t3ver_stage'] = $val['t3ver_stage'];
00576                         }
00577                 }
00578 
00579                 return $output;
00580         }
00581 
00589         function openPageTree($pid,$clearExpansion)     {
00590                 global $BE_USER;
00591 
00592                         // Get current expansion data:
00593                 if ($clearExpansion)    {
00594                         $expandedPages = array();
00595                 } else {
00596                         $expandedPages = unserialize($BE_USER->uc['browseTrees']['browsePages']);
00597                 }
00598 
00599                         // Get rootline:
00600                 $rL = t3lib_BEfunc::BEgetRootLine($pid);
00601 
00602                         // First, find out what mount index to use (if more than one DB mount exists):
00603                 $mountIndex = 0;
00604                 $mountKeys = array_flip($BE_USER->returnWebmounts());
00605                 foreach($rL as $rLDat)  {
00606                         if (isset($mountKeys[$rLDat['uid']]))   {
00607                                 $mountIndex = $mountKeys[$rLDat['uid']];
00608                                 break;
00609                         }
00610                 }
00611 
00612                         // Traverse rootline and open paths:
00613                 foreach($rL as $rLDat)  {
00614                         $expandedPages[$mountIndex][$rLDat['uid']] = 1;
00615                 }
00616 
00617                         // Write back:
00618                 $BE_USER->uc['browseTrees']['browsePages'] = serialize($expandedPages);
00619                 $BE_USER->writeUC();
00620         }
00621 
00634         function getRecordPath($uid, $clause, $titleLimit, $fullTitleLimit=0)   {
00635                 if (!$titleLimit) { $titleLimit=1000; }
00636 
00637                 $loopCheck = 100;
00638                 $output = $fullOutput = '/';
00639                 while ($uid!=0 && $loopCheck>0) {
00640                         $loopCheck--;
00641                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00642                                                 'uid,pid,title,t3ver_oid,t3ver_wsid,t3ver_swapmode',
00643                                                 'pages',
00644                                                 'uid='.intval($uid).
00645                                                         t3lib_BEfunc::deleteClause('pages').
00646                                                         (strlen(trim($clause)) ? ' AND '.$clause : '')
00647                                         );
00648                         if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00649                                 t3lib_BEfunc::workspaceOL('pages',$row);
00650                                 t3lib_BEfunc::fixVersioningPid('pages',$row);
00651 
00652                                 if ($row['_ORIG_pid'] && $row['t3ver_swapmode']>0)      {       // Branch points
00653                                         $output = ' [#VEP#]'.$output;           // Adding visual token - Versioning Entry Point - that tells that THIS position was where the versionized branch got connected to the main tree. I will have to find a better name or something...
00654                                 }
00655                                 $uid = $row['pid'];
00656                                 $output = '/'.t3lib_div::fixed_lgd_cs(strip_tags($row['title']),$titleLimit).$output;
00657                                 if ($fullTitleLimit)    $fullOutput = '/'.t3lib_div::fixed_lgd_cs(strip_tags($row['title']),$fullTitleLimit).$fullOutput;
00658                         } else {
00659                                 break;
00660                         }
00661                 }
00662 
00663                 if ($fullTitleLimit)    {
00664                         return array($output, $fullOutput);
00665                 } else {
00666                         return $output;
00667                 }
00668         }
00669 
00677         function getExcludeFields()     {
00678                 global $TCA;
00679                         // All TCA keys:
00680                 $theExcludeArray = Array();
00681                 $tc_keys = array_keys($TCA);
00682                 foreach($tc_keys as $table)     {
00683                                 // Load table
00684                         t3lib_div::loadTCA($table);
00685                                 // All field names configured:
00686                         if (is_array($TCA[$table]['columns']))  {
00687                                 $f_keys = array_keys($TCA[$table]['columns']);
00688                                 foreach($f_keys as $field)      {
00689                                         if ($TCA[$table]['columns'][$field]['exclude']) {
00690                                                         // Get Human Readable names of fields and table:
00691                                                 $Fname=$GLOBALS['LANG']->sl($TCA[$table]['ctrl']['title']).': '.$GLOBALS['LANG']->sl($TCA[$table]['columns'][$field]['label']);
00692                                                         // add entry:
00693                                                 $theExcludeArray[] = Array($Fname , $table.':'.$field);
00694                                         }
00695                                 }
00696                         }
00697                 }
00698                 return $theExcludeArray;
00699         }
00700 
00707         function getExplicitAuthFieldValues()   {
00708                 global $TCA;
00709 
00710                         // Initialize:
00711                 $adLabel = array(
00712                         'ALLOW' => $GLOBALS['LANG']->sl('LLL:EXT:lang/locallang_core.xml:labels.allow'),
00713                         'DENY' => $GLOBALS['LANG']->sl('LLL:EXT:lang/locallang_core.xml:labels.deny'),
00714                 );
00715 
00716                         // All TCA keys:
00717                 $allowDenyOptions = Array();
00718                 $tc_keys = array_keys($TCA);
00719                 foreach($tc_keys as $table)     {
00720 
00721                                 // Load table
00722                         t3lib_div::loadTCA($table);
00723 
00724                                 // All field names configured:
00725                         if (is_array($TCA[$table]['columns']))  {
00726                                 $f_keys = array_keys($TCA[$table]['columns']);
00727                                 foreach($f_keys as $field)      {
00728                                         $fCfg = $TCA[$table]['columns'][$field]['config'];
00729                                         if ($fCfg['type']=='select' && $fCfg['authMode'])       {
00730 
00731                                                         // Check for items:
00732                                                 if (is_array($fCfg['items']))   {
00733                                                                 // Get Human Readable names of fields and table:
00734                                                         $allowDenyOptions[$table.':'.$field]['tableFieldLabel'] = $GLOBALS['LANG']->sl($TCA[$table]['ctrl']['title']).': '.$GLOBALS['LANG']->sl($TCA[$table]['columns'][$field]['label']);
00735 
00736                                                                 // Check for items:
00737                                                         foreach($fCfg['items'] as $iVal)        {
00738                                                                 if (strcmp($iVal[1],''))        {       // Values '' is not controlled by this setting.
00739 
00740                                                                                 // Find iMode:
00741                                                                         $iMode = '';
00742                                                                         switch((string)$fCfg['authMode'])       {
00743                                                                                 case 'explicitAllow':
00744                                                                                         $iMode = 'ALLOW';
00745                                                                                 break;
00746                                                                                 case 'explicitDeny':
00747                                                                                         $iMode = 'DENY';
00748                                                                                 break;
00749                                                                                 case 'individual':
00750                                                                                         if (!strcmp($iVal[4],'EXPL_ALLOW'))     {
00751                                                                                                 $iMode = 'ALLOW';
00752                                                                                         } elseif (!strcmp($iVal[4],'EXPL_DENY'))        {
00753                                                                                                 $iMode = 'DENY';
00754                                                                                         }
00755                                                                                 break;
00756                                                                         }
00757 
00758                                                                                 // Set iMode:
00759                                                                         if ($iMode)     {
00760                                                                                 $allowDenyOptions[$table.':'.$field]['items'][$iVal[1]] = array($iMode, $GLOBALS['LANG']->sl($iVal[0]), $adLabel[$iMode]);
00761                                                                         }
00762                                                                 }
00763                                                         }
00764                                                 }
00765                                         }
00766                                 }
00767                         }
00768                 }
00769 
00770                 return $allowDenyOptions;
00771         }
00772 
00778         function getSystemLanguages()   {
00779 
00780                         // Initialize, add default language:
00781                 $sysLanguages = array();
00782                 $sysLanguages[] = array('Default language', 0);
00783 
00784                         // Traverse languages
00785                 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid,title,flag','sys_language','pid=0'.t3lib_BEfunc::deleteClause('sys_language'));
00786                 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))       {
00787                         $sysLanguages[] = array($row['title'].' ['.$row['uid'].']', $row['uid'], ($row['flag'] ? 'flags/'.$row['flag'] : ''));
00788                 }
00789 
00790                 return $sysLanguages;
00791         }
00792 
00803         function readPageAccess($id,$perms_clause)      {
00804                 if ((string)$id!='')    {
00805                         $id = intval($id);
00806                         if (!$id)       {
00807                                 if ($GLOBALS['BE_USER']->isAdmin())     {
00808                                         $path = '/';
00809                                         $pageinfo['_thePath'] = $path;
00810                                         return $pageinfo;
00811                                 }
00812                         } else {
00813                                 $pageinfo = t3lib_BEfunc::getRecord('pages',$id,'*',($perms_clause ? ' AND '.$perms_clause : ''));
00814                                 if ($pageinfo['uid'] && $GLOBALS['BE_USER']->isInWebMount($id,$perms_clause))   {
00815                                         t3lib_BEfunc::workspaceOL('pages', $pageinfo);
00816                                         t3lib_BEfunc::fixVersioningPid('pages', $pageinfo);
00817                                         list($pageinfo['_thePath'],$pageinfo['_thePathFull']) = t3lib_BEfunc::getRecordPath(intval($pageinfo['uid']), $perms_clause, 15, 1000);
00818                                         return $pageinfo;
00819                                 }
00820                         }
00821                 }
00822                 return false;
00823         }
00824 
00834         function getTCAtypes($table,$rec,$useFieldNameAsKey=0)  {
00835                 global $TCA;
00836 
00837                 t3lib_div::loadTCA($table);
00838                 if ($TCA[$table])       {
00839 
00840                                 // Get type value:
00841                         $fieldValue = t3lib_BEfunc::getTCAtypeValue($table,$rec);
00842 
00843                                 // Get typesConf
00844                         $typesConf = $TCA[$table]['types'][$fieldValue];
00845 
00846                                 // Get fields list and traverse it
00847                         $fieldList = explode(',', $typesConf['showitem']);
00848                         $altFieldList = array();
00849 
00850                                 // Traverse fields in types config and parse the configuration into a nice array:
00851                         foreach($fieldList as $k => $v) {
00852                                 list($pFieldName, $pAltTitle, $pPalette, $pSpec) = t3lib_div::trimExplode(';', $v);
00853                                 $defaultExtras = is_array($TCA[$table]['columns'][$pFieldName]) ? $TCA[$table]['columns'][$pFieldName]['defaultExtras'] : '';
00854                                 $specConfParts = t3lib_BEfunc::getSpecConfParts($pSpec, $defaultExtras);
00855 
00856                                 $fieldList[$k]=array(
00857                                         'field' => $pFieldName,
00858                                         'title' => $pAltTitle,
00859                                         'palette' => $pPalette,
00860                                         'spec' => $specConfParts,
00861                                         'origString' => $v
00862                                 );
00863                                 if ($useFieldNameAsKey) {
00864                                         $altFieldList[$fieldList[$k]['field']] = $fieldList[$k];
00865                                 }
00866                         }
00867                         if ($useFieldNameAsKey) {
00868                                 $fieldList = $altFieldList;
00869                         }
00870 
00871                                 // Return array:
00872                         return $fieldList;
00873                 }
00874         }
00875 
00887         function getTCAtypeValue($table,$rec)   {
00888                 global $TCA;
00889 
00890                         // If no field-value, set it to zero. If there is no type matching the field-value (which now may be zero...) test field-value '1' as default.
00891                 t3lib_div::loadTCA($table);
00892                 if ($TCA[$table])       {
00893                         $field = $TCA[$table]['ctrl']['type'];
00894                         $fieldValue = $field ? ($rec[$field] ? $rec[$field] : 0) : 0;
00895                         if (!is_array($TCA[$table]['types'][$fieldValue]))      $fieldValue = 1;
00896                         return $fieldValue;
00897                 }
00898         }
00899 
00910         function getSpecConfParts($str, $defaultExtras) {
00911 
00912                         // Add defaultExtras:
00913                 $specConfParts = t3lib_div::trimExplode(':', $defaultExtras.':'.$str, 1);
00914 
00915                 $reg = array();
00916                 if (count($specConfParts))      {
00917                         foreach($specConfParts as $k2 => $v2)   {
00918                                 unset($specConfParts[$k2]);
00919                                 if (ereg('(.*)\[(.*)\]',$v2,$reg))      {
00920                                         $specConfParts[trim($reg[1])] = array(
00921                                                 'parameters' => t3lib_div::trimExplode('|', $reg[2], 1)
00922                                         );
00923                                 } else {
00924                                         $specConfParts[trim($v2)] = 1;
00925                                 }
00926                         }
00927                 } else {
00928                         $specConfParts = array();
00929                 }
00930                 return $specConfParts;
00931         }
00932 
00941         function getSpecConfParametersFromArray($pArr)  {
00942                 $out=array();
00943                 if (is_array($pArr))    {
00944                         reset($pArr);
00945                         while(list($k,$v)=each($pArr))  {
00946                                 $parts=explode('=',$v,2);
00947                                 if (count($parts)==2)   {
00948                                         $out[trim($parts[0])]=trim($parts[1]);
00949                                 } else {
00950                                         $out[$k]=$v;
00951                                 }
00952                         }
00953                 }
00954                 return $out;
00955         }
00956 
00969         function getFlexFormDS($conf,$row,$table,$fieldName='',$WSOL=TRUE)      {
00970                 global $TYPO3_CONF_VARS;
00971 
00972                         // Get pointer field etc from TCA-config:
00973                 $ds_pointerField =      $conf['ds_pointerField'];
00974                 $ds_array =             $conf['ds'];
00975                 $ds_tableField =        $conf['ds_tableField'];
00976                 $ds_searchParentField =         $conf['ds_pointerField_searchParent'];
00977 
00978                         // Find source value:
00979                 $dataStructArray='';
00980                 if (is_array($ds_array))        {       // If there is a data source array, that takes precedence
00981                                 // If a pointer field is set, take the value from that field in the $row array and use as key.
00982                         if ($ds_pointerField)   {
00983                                 $srcPointer = $row[$ds_pointerField];
00984                                 $srcPointer = isset($ds_array[$srcPointer]) ? $srcPointer : 'default';
00985                         } else $srcPointer='default';
00986 
00987                                 // Get Data Source: Detect if it's a file reference and in that case read the file and parse as XML. Otherwise the value is expected to be XML.
00988                         if (substr($ds_array[$srcPointer],0,5)=='FILE:')        {
00989                                 $file = t3lib_div::getFileAbsFileName(substr($ds_array[$srcPointer],5));
00990                                 if ($file && @is_file($file))   {
00991                                         $dataStructArray = t3lib_div::xml2array(t3lib_div::getUrl($file));
00992                                 } else $dataStructArray = 'The file "'.substr($ds_array[$srcPointer],5).'" in ds-array key "'.$srcPointer.'" was not found ("'.$file.'")';      // Error message.
00993                         } else {
00994                                 $dataStructArray = t3lib_div::xml2array($ds_array[$srcPointer]);
00995                         }
00996 
00997                 } elseif ($ds_pointerField) {   // If pointer field AND possibly a table/field is set:
00998                                 // Value of field pointed to:
00999                         $srcPointer = $row[$ds_pointerField];
01000 
01001                                 // Searching recursively back if 'ds_pointerField_searchParent' is defined (typ. a page rootline, or maybe a tree-table):
01002                         if ($ds_searchParentField && !$srcPointer)      {
01003                                 $rr = t3lib_BEfunc::getRecord($table,$row['uid'],'uid,'.$ds_searchParentField); // Get the "pid" field - we cannot know that it is in the input record!
01004                                 if ($WSOL)      {
01005                                         t3lib_BEfunc::workspaceOL($table,$rr);
01006                                         t3lib_BEfunc::fixVersioningPid($table,$rr,TRUE);        // Added "TRUE" 23/03/06 before 4.0. (Also to similar call below!).  Reason: When t3lib_refindex is scanning the system in Live workspace all Pages with FlexForms will not find their inherited datastructure. Thus all references from workspaces are removed! Setting TRUE means that versioning PID doesn't check workspace of the record. I can't see that this should give problems anywhere. See more information inside t3lib_refindex!
01007                                 }
01008                                 $uidAcc=array();        // Used to avoid looping, if any should happen.
01009                                 $subFieldPointer = $conf['ds_pointerField_searchParent_subField'];
01010                                 while(!$srcPointer)             {
01011                                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
01012                                                                         'uid,'.$ds_pointerField.','.$ds_searchParentField.($subFieldPointer?','.$subFieldPointer:''),
01013                                                                         $table,
01014                                                                         'uid='.intval($rr[$ds_searchParentField]).t3lib_BEfunc::deleteClause($table)
01015                                                                 );
01016                                         $rr = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
01017 
01018                                                 // break if no result from SQL db or if looping...
01019                                         if (!is_array($rr) || isset($uidAcc[$rr['uid']]))       break;
01020                                         $uidAcc[$rr['uid']]=1;
01021 
01022                                         if ($WSOL)      {
01023                                                 t3lib_BEfunc::workspaceOL($table,$rr);
01024                                                 t3lib_BEfunc::fixVersioningPid($table,$rr,TRUE);
01025                                         }
01026                                         $srcPointer = ($subFieldPointer && $rr[$subFieldPointer]) ? $rr[$subFieldPointer] : $rr[$ds_pointerField];
01027                                 }
01028                         }
01029 
01030                                 // If there is a srcPointer value:
01031                         if ($srcPointer)        {
01032                                 if (t3lib_div::testInt($srcPointer))    {       // If integer, then its a record we will look up:
01033                                         list($tName,$fName) = explode(':',$ds_tableField,2);
01034                                         if ($tName && $fName && is_array($GLOBALS['TCA'][$tName]))      {
01035                                                 $dataStructRec = t3lib_BEfunc::getRecord($tName, $srcPointer);
01036                                                 if ($WSOL)      {
01037                                                         t3lib_BEfunc::workspaceOL($tName,$dataStructRec);
01038                                                 }
01039                                                 $dataStructArray = t3lib_div::xml2array($dataStructRec[$fName]);
01040                                         } else $dataStructArray = 'No tablename ('.$tName.') or fieldname ('.$fName.') was found an valid!';
01041                                 } else {        // Otherwise expect it to be a file:
01042                                         $file = t3lib_div::getFileAbsFileName($srcPointer);
01043                                         if ($file && @is_file($file))   {
01044                                                 $dataStructArray = t3lib_div::xml2array(t3lib_div::getUrl($file));
01045                                         } else $dataStructArray='The file "'.$srcPointer.'" was not found ("'.$file.'")';       // Error message.
01046                                 }
01047                         } else $dataStructArray='No source value in fieldname "'.$ds_pointerField.'"';  // Error message.
01048                 } else $dataStructArray='No proper configuration!';
01049 
01050                         // Hook for post-processing the Flexform DS. Introduces the possibility to configure Flexforms via TSConfig
01051                 if (is_array ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['getFlexFormDSClass'])) {
01052                         foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['getFlexFormDSClass'] as $classRef) {
01053                                 $hookObj = &t3lib_div::getUserObj($classRef);
01054                                 if (method_exists($hookObj, 'getFlexFormDS_postProcessDS')) {
01055                                         $hookObj->getFlexFormDS_postProcessDS($dataStructArray, $conf, $row, $table, $fieldName);
01056                                 }
01057                         }
01058                 }
01059 
01060                 return $dataStructArray;
01061         }
01062 
01063 
01064 
01065 
01066 
01067 
01068 
01069 
01070 
01071 
01072 
01073 
01074 
01075 
01076 
01077 
01078 
01079 
01080         /*******************************************
01081          *
01082          * Caching related
01083          *
01084          *******************************************/
01085 
01096         function storeHash($hash,$data,$ident)  {
01097                 $insertFields = array(
01098                         'hash' => $hash,
01099                         'content' => $data,
01100                         'ident' => $ident,
01101                         'tstamp' => time()
01102                 );
01103                 $GLOBALS['TYPO3_DB']->exec_DELETEquery('cache_hash', 'hash='.$GLOBALS['TYPO3_DB']->fullQuoteStr($hash, 'cache_hash'));
01104                 $GLOBALS['TYPO3_DB']->exec_INSERTquery('cache_hash', $insertFields);
01105         }
01106 
01116         function getHash($hash,$expTime=0)      {
01117                         // if expTime is not set, the hash will never expire
01118                 $expTime = intval($expTime);
01119                 if ($expTime)   {
01120                         $whereAdd = ' AND tstamp > '.(time()-$expTime);
01121                 }
01122                 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('content', 'cache_hash', 'hash='.$GLOBALS['TYPO3_DB']->fullQuoteStr($hash, 'cache_hash').$whereAdd);
01123                 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
01124                         return $row['content'];
01125                 }
01126         }
01127 
01128 
01129 
01130 
01131 
01132 
01133 
01134 
01135         /*******************************************
01136          *
01137          * TypoScript related
01138          *
01139          *******************************************/
01140 
01152         function getPagesTSconfig($id,$rootLine='',$returnPartArray=0)  {
01153                 $id=intval($id);
01154                 if (!is_array($rootLine))       {
01155                         $rootLine = t3lib_BEfunc::BEgetRootLine($id,'',TRUE);
01156                 }
01157                 ksort($rootLine);       // Order correctly
01158                 $TSdataArray = array();
01159                 $TSdataArray['defaultPageTSconfig']=$GLOBALS['TYPO3_CONF_VARS']['BE']['defaultPageTSconfig'];   // Setting default configuration:
01160                 foreach($rootLine as $k => $v)  {
01161                         $TSdataArray['uid_'.$v['uid']]=$v['TSconfig'];
01162                 }
01163                 $TSdataArray = t3lib_TSparser::checkIncludeLines_array($TSdataArray);
01164                 if ($returnPartArray)   {
01165                         return $TSdataArray;
01166                 }
01167 
01168                         // Parsing the user TS (or getting from cache)
01169                 $userTS = implode($TSdataArray,chr(10).'[GLOBAL]'.chr(10));
01170                 $hash = md5('pageTS:'.$userTS);
01171                 $cachedContent = t3lib_BEfunc::getHash($hash,0);
01172                 $TSconfig = array();
01173                 if (isset($cachedContent))      {
01174                         $TSconfig = unserialize($cachedContent);
01175                 } else {
01176                         $parseObj = t3lib_div::makeInstance('t3lib_TSparser');
01177                         $parseObj->parse($userTS);
01178                         $TSconfig = $parseObj->setup;
01179                         t3lib_BEfunc::storeHash($hash,serialize($TSconfig),'PAGES_TSconfig');
01180                 }
01181 
01182                         // get User TSconfig overlay
01183                 $userTSconfig = $GLOBALS['BE_USER']->userTS['page.'];
01184                 if (is_array($userTSconfig))    {
01185                         $TSconfig = t3lib_div::array_merge_recursive_overrule($TSconfig, $userTSconfig);
01186                 }
01187                 return $TSconfig;
01188         }
01189 
01208         function updatePagesTSconfig($id,$pageTS,$TSconfPrefix,$impParams='')   {
01209                 $id=intval($id);
01210                 if (is_array($pageTS) && $id>0) {
01211                         if (!is_array($impParams))      {
01212                                 $impParams =t3lib_BEfunc::implodeTSParams(t3lib_BEfunc::getPagesTSconfig($id));
01213                         }
01214                         reset($pageTS);
01215                         $set=array();
01216                         while(list($f,$v)=each($pageTS))        {
01217                                 $f = $TSconfPrefix.$f;
01218                                 if ((!isset($impParams[$f])&&trim($v)) || strcmp(trim($impParams[$f]),trim($v)))        {
01219                                         $set[$f]=trim($v);
01220                                 }
01221                         }
01222                         if (count($set))        {
01223                                         // Get page record and TS config lines
01224                                 $pRec = t3lib_befunc::getRecord('pages',$id);
01225                                 $TSlines = explode(chr(10),$pRec['TSconfig']);
01226                                 $TSlines = array_reverse($TSlines);
01227                                         // Reset the set of changes.
01228                                 reset($set);
01229                                 while(list($f,$v)=each($set))   {
01230                                         reset($TSlines);
01231                                         $inserted=0;
01232                                         while(list($ki,$kv)=each($TSlines))     {
01233                                                 if (substr($kv,0,strlen($f)+1)==$f.'=') {
01234                                                         $TSlines[$ki]=$f.'='.$v;
01235                                                         $inserted=1;
01236                                                         break;
01237                                                 }
01238                                         }
01239                                         if (!$inserted) {
01240                                                 $TSlines = array_reverse($TSlines);
01241                                                 $TSlines[]=$f.'='.$v;
01242                                                 $TSlines = array_reverse($TSlines);
01243                                         }
01244                                 }
01245                                 $TSlines = array_reverse($TSlines);
01246 
01247                                         // store those changes
01248                                 $TSconf = implode(chr(10),$TSlines);
01249 
01250                                 $GLOBALS['TYPO3_DB']->exec_UPDATEquery('pages', 'uid='.intval($id), array('TSconfig' => $TSconf));
01251                         }
01252                 }
01253         }
01254 
01263         function implodeTSParams($p,$k='')      {
01264                 $implodeParams=array();
01265                 if (is_array($p))       {
01266                         reset($p);
01267                         while(list($kb,$val)=each($p))  {
01268                                 if (is_array($val))     {
01269                                         $implodeParams = array_merge($implodeParams,t3lib_BEfunc::implodeTSParams($val,$k.$kb));
01270                                 } else {
01271                                         $implodeParams[$k.$kb]=$val;
01272                                 }
01273                         }
01274                 }
01275                 return $implodeParams;
01276         }
01277 
01278 
01279 
01280 
01281 
01282 
01283 
01284 
01285         /*******************************************
01286          *
01287          * Users / Groups related
01288          *
01289          *******************************************/
01290 
01300         function getUserNames($fields='username,usergroup,usergroup_cached_list,uid',$where='') {
01301                 $be_user_Array=Array();
01302 
01303                 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, 'be_users', 'pid=0 '.$where.t3lib_BEfunc::deleteClause('be_users'), '', 'username');
01304                 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))       {
01305                         $be_user_Array[$row['uid']]=$row;
01306                 }
01307                 return $be_user_Array;
01308         }
01309 
01318         function getGroupNames($fields='title,uid', $where='')  {
01319                 $be_group_Array = Array();
01320                 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, 'be_groups', 'pid=0 '.$where.t3lib_BEfunc::deleteClause('be_groups'), '', 'title');
01321                 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))       {
01322                         $be_group_Array[$row['uid']] = $row;
01323                 }
01324                 return $be_group_Array;
01325         }
01326 
01335         function getListGroupNames($fields='title,uid') {
01336                 $exQ=' AND hide_in_lists=0';
01337                 if (!$GLOBALS['BE_USER']->isAdmin())    {
01338                         $exQ.=' AND uid IN ('.($GLOBALS['BE_USER']->user['usergroup_cached_list']?$GLOBALS['BE_USER']->user['usergroup_cached_list']:0).')';
01339                 }
01340                 return t3lib_BEfunc::getGroupNames($fields,$exQ);
01341         }
01342 
01354         function blindUserNames($usernames,$groupArray,$excludeBlindedFlag=0)   {
01355                 if (is_array($usernames) && is_array($groupArray))      {
01356                         while(list($uid,$row)=each($usernames)) {
01357                                 $userN=$uid;
01358                                 $set=0;
01359                                 if ($row['uid']!=$GLOBALS['BE_USER']->user['uid'])      {
01360                                         reset($groupArray);
01361                                         while(list(,$v)=each($groupArray))      {
01362                                                 if ($v && t3lib_div::inList($row['usergroup_cached_list'],$v))  {
01363                                                         $userN = $row['username'];
01364                                                         $set=1;
01365                                                 }
01366                                         }
01367                                 } else {
01368                                         $userN = $row['username'];
01369                                         $set=1;
01370                                 }
01371                                 $usernames[$uid]['username']=$userN;
01372                                 if ($excludeBlindedFlag && !$set) {unset($usernames[$uid]);}
01373                         }
01374                 }
01375                 return $usernames;
01376         }
01377 
01387         function blindGroupNames($groups,$groupArray,$excludeBlindedFlag=0)     {
01388                 if (is_array($groups) && is_array($groupArray)) {
01389                         while(list($uid,$row)=each($groups))    {
01390                                 $groupN=$uid;
01391                                 $set=0;
01392                                 if (t3lib_div::inArray($groupArray,$uid))       {
01393                                         $groupN=$row['title'];
01394                                         $set=1;
01395                                 }
01396                                 $groups[$uid]['title']=$groupN;
01397                                 if ($excludeBlindedFlag && !$set) {unset($groups[$uid]);}
01398                         }
01399                 }
01400                 return $groups;
01401         }
01402 
01403 
01404 
01405 
01406 
01407 
01408 
01409 
01410 
01411 
01412 
01413 
01414 
01415         /*******************************************
01416          *
01417          * Output related
01418          *
01419          *******************************************/
01420 
01428         function daysUntil($tstamp)     {
01429                 $delta_t = $tstamp-$GLOBALS['EXEC_TIME'];
01430                 return ceil($delta_t/(3600*24));
01431         }
01432 
01440         function date($tstamp)  {
01441                 return date($GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'],$tstamp);
01442         }
01443 
01451         function datetime($value)       {
01452                 return date($GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'].' '.$GLOBALS['TYPO3_CONF_VARS']['SYS']['hhmm'], $value);
01453         }
01454 
01463         function time($value)   {
01464                 $hh = floor($value/3600);
01465                 $min = floor(($value-$hh*3600)/60);
01466                 $sec = $value-$hh*3600-$min*60;
01467                 $l = sprintf('%02d',$hh).':'.sprintf('%02d',$min).':'.sprintf('%02d',$sec);
01468                 return $l;
01469         }
01470 
01479         function calcAge($seconds,$labels = 'min|hrs|days|yrs') {
01480                 $labelArr = explode('|',$labels);
01481                 $prefix='';
01482                 if ($seconds<0) {$prefix='-'; $seconds=abs($seconds);}
01483                 if ($seconds<3600)      {
01484                         $seconds = round ($seconds/60).' '.trim($labelArr[0]);
01485                 } elseif ($seconds<24*3600)     {
01486                         $seconds = round ($seconds/3600).' '.trim($labelArr[1]);
01487                 } elseif ($seconds<365*24*3600) {
01488                         $seconds = round ($seconds/(24*3600)).' '.trim($labelArr[2]);
01489                 } else {
01490                         $seconds = round ($seconds/(365*24*3600)).' '.trim($labelArr[3]);
01491                 }
01492                 return $prefix.$seconds;
01493         }
01494 
01505         function dateTimeAge($tstamp,$prefix=1,$date='')        {
01506                 return $tstamp ?
01507                                 ($date=='date' ? t3lib_BEfunc::date($tstamp) : t3lib_BEfunc::datetime($tstamp)).
01508                                 ' ('.t3lib_BEfunc::calcAge($prefix*(time()-$tstamp),$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears')).')' : '';
01509         }
01510 
01523         function titleAttrib($content='',$hsc=0)        {
01524                 global $CLIENT;
01525                 $attrib= ($CLIENT['BROWSER']=='net'&&$CLIENT['VERSION']<5)||$CLIENT['BROWSER']=='konqu' ? 'alt' : 'title';
01526                 return strcmp($content,'')?' '.$attrib.'="'.($hsc?htmlspecialchars($content):$content).'"' : $attrib;
01527         }
01528 
01536         function titleAltAttrib($content)       {
01537                 $out='';
01538                 $out.=' alt="'.htmlspecialchars($content).'"';
01539                 $out.=' title="'.htmlspecialchars($content).'"';
01540                 return $out;
01541         }
01542 
01560         function thumbCode($row,$table,$field,$backPath,$thumbScript='',$uploaddir=NULL,$abs=0,$tparams='',$size='')    {
01561                 global $TCA;
01562                         // Load table.
01563                 t3lib_div::loadTCA($table);
01564 
01565                         // Find uploaddir automatically
01566                 $uploaddir = (is_null($uploaddir)) ? $TCA[$table]['columns'][$field]['config']['uploadfolder'] : $uploaddir;
01567                 $uploaddir = preg_replace('#/$#','',$uploaddir);
01568 
01569                         // Set thumbs-script:
01570                 if (!$GLOBALS['TYPO3_CONF_VARS']['GFX']['thumbnails'])  {
01571                         $thumbScript='gfx/notfound_thumb.gif';
01572                 } elseif(!$thumbScript) {
01573                         $thumbScript='thumbs.php';
01574                 }
01575                         // Check and parse the size parameter
01576                 $sizeParts=array();
01577                 if ($size = trim($size)) {
01578                         $sizeParts = explode('x', $size.'x'.$size);
01579                         if(!intval($sizeParts[0])) $size='';
01580                 }
01581 
01582                         // Traverse files:
01583                 $thumbs = explode(',', $row[$field]);
01584                 $thumbData='';
01585                 while(list(,$theFile)=each($thumbs))    {
01586                         if (trim($theFile))     {
01587                                 $fI = t3lib_div::split_fileref($theFile);
01588                                 $ext = $fI['fileext'];
01589                                                 // New 190201 start
01590                                 $max=0;
01591                                 if (t3lib_div::inList('gif,jpg,png',$ext)) {
01592                                         $imgInfo=@getimagesize(PATH_site.$uploaddir.'/'.$theFile);
01593                                         if (is_array($imgInfo)) {$max = max($imgInfo[0],$imgInfo[1]);}
01594                                 }
01595                                         // use the original image if it's size fits to the thumbnail size
01596                                 if ($max && $max<=(count($sizeParts)&&max($sizeParts)?max($sizeParts):56))      {
01597                                         $theFile = $url = ($abs?'':'../').($uploaddir?$uploaddir.'/':'').trim($theFile);
01598                                         $onClick='top.launchView(\''.$theFile.'\',\'\',\''.$backPath.'\');return false;';
01599                                         $thumbData.='<a href="#" onclick="'.htmlspecialchars($onClick).'"><img src="'.$backPath.$url.'" '.$imgInfo[3].' hspace="2" border="0" title="'.trim($url).'"'.$tparams.' alt="" /></a> ';
01600                                                 // New 190201 stop
01601                                 } elseif ($ext=='ttf' || t3lib_div::inList($GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'],$ext)) {
01602                                         $theFile = ($abs?'':'../').($uploaddir?$uploaddir.'/':'').trim($theFile);
01603                                         $params = '&file='.rawurlencode($theFile);
01604                                         $params .= $size?'&size='.$size:'';
01605                                         $url = $thumbScript.'?&dummy='.$GLOBALS['EXEC_TIME'].$params;
01606                                         $onClick='top.launchView(\''.$theFile.'\',\'\',\''.$backPath.'\');return false;';
01607                                         $thumbData.='<a href="#" onclick="'.htmlspecialchars($onClick).'"><img src="'.htmlspecialchars($backPath.$url).'" hspace="2" border="0" title="'.trim($theFile).'"'.$tparams.' alt="" /></a> ';
01608                                 } else {
01609                                         $icon = t3lib_BEfunc::getFileIcon($ext);
01610                                         $url = 'gfx/fileicons/'.$icon;
01611                                         $thumbData.='<img src="'.$backPath.$url.'" hspace="2" border="0" title="'.trim($theFile).'"'.$tparams.' alt="" /> ';
01612                                 }
01613                         }
01614                 }
01615                 return $thumbData;
01616         }
01617 
01628         function getThumbNail($thumbScript,$theFile,$tparams='',$size='')       {
01629                 $params = '&file='.rawurlencode($theFile);
01630                 $params .= trim($size)?'&size='.trim($size):'';
01631                 $url = $thumbScript.'?&dummy='.$GLOBALS['EXEC_TIME'].$params;
01632                 $th='<img src="'.htmlspecialchars($url).'" title="'.trim(basename($theFile)).'"'.($tparams?" ".$tparams:"").' alt="" />';
01633                 return $th;
01634         }
01635 
01645         function titleAttribForPages($row,$perms_clause='',$includeAttrib=1)    {
01646                 global $TCA,$LANG;
01647                 $parts=array();
01648                 $parts[] = 'id='.$row['uid'];
01649                 if ($row['alias'])      $parts[]=$LANG->sL($TCA['pages']['columns']['alias']['label']).' '.$row['alias'];
01650                 if ($row['pid']<0)      $parts[] = 'v#1.'.$row['t3ver_id'];
01651                 if ($row['t3ver_state']==1)     $parts[] = 'PLH WSID#'.$row['t3ver_wsid'];
01652                 if ($row['t3ver_state']==-1)    $parts[] = 'New element!';
01653 
01654                 if ($row['doktype']=='3')       {
01655                         $parts[]=$LANG->sL($TCA['pages']['columns']['url']['label']).' '.$row['url'];
01656                 } elseif ($row['doktype']=='4') {
01657                         if ($perms_clause)      {
01658                                 $label = t3lib_BEfunc::getRecordPath(intval($row['shortcut']),$perms_clause,20);
01659                         } else {
01660                                 $lRec = t3lib_BEfunc::getRecordWSOL('pages',intval($row['shortcut']),'title');
01661                                 $label = $lRec['title'];
01662                         }
01663                         if ($row['shortcut_mode']>0)    {
01664                                 $label.=', '.$LANG->sL($TCA['pages']['columns']['shortcut_mode']['label']).' '.
01665                                                         $LANG->sL(t3lib_BEfunc::getLabelFromItemlist('pages','shortcut_mode',$row['shortcut_mode']));
01666                         }
01667                         $parts[]=$LANG->sL($TCA['pages']['columns']['shortcut']['label']).' '.$label;
01668                 } elseif ($row['doktype']=='7') {
01669                         if ($perms_clause)      {
01670                                 $label = t3lib_BEfunc::getRecordPath(intval($row['mount_pid']),$perms_clause,20);
01671                         } else {
01672                                 $lRec = t3lib_BEfunc::getRecordWSOL('pages',intval($row['mount_pid']),'title');
01673                                 $label = $lRec['title'];
01674                         }
01675                         $parts[]=$LANG->sL($TCA['pages']['columns']['mount_pid']['label']).' '.$label;
01676                         if ($row['mount_pid_ol'])       {
01677                                 $parts[] = $LANG->sL($TCA['pages']['columns']['mount_pid_ol']['label']);
01678                         }
01679                 }
01680                 if ($row['nav_hide'])   $parts[] = ereg_replace(':$','',$LANG->sL($TCA['pages']['columns']['nav_hide']['label']));
01681                 if ($row['hidden'])     $parts[] = $LANG->sL('LLL:EXT:lang/locallang_core.php:labels.hidden');
01682                 if ($row['starttime'])  $parts[] = $LANG->sL($TCA['pages']['columns']['starttime']['label']).' '.t3lib_BEfunc::dateTimeAge($row['starttime'],-1,'date');
01683                 if ($row['endtime'])    $parts[] = $LANG->sL($TCA['pages']['columns']['endtime']['label']).' '.t3lib_BEfunc::dateTimeAge($row['endtime'],-1,'date');
01684                 if ($row['fe_group'])   {
01685                         if ($row['fe_group']<0) {
01686                                 $label = $LANG->sL(t3lib_BEfunc::getLabelFromItemlist('pages','fe_group',$row['fe_group']));
01687                         } else {
01688                                 $lRec = t3lib_BEfunc::getRecordWSOL('fe_groups',$row['fe_group'],'title');
01689                                 $label = $lRec['title'];
01690                         }
01691                         $parts[] = $LANG->sL($TCA['pages']['columns']['fe_group']['label']).' '.$label;
01692                 }
01693                 $out = htmlspecialchars(implode(' - ',$parts));
01694                 return $includeAttrib ? 'title="'.$out.'"' : $out;
01695         }
01696 
01707         function getRecordIconAltText($row,$table='pages')      {
01708                 if ($table=='pages')    {
01709                         $out = t3lib_BEfunc::titleAttribForPages($row,'',0);
01710                 } else {
01711                         $ctrl = $GLOBALS['TCA'][$table]['ctrl']['enablecolumns'];
01712 
01713                         $out='id='.$row['uid']; // Uid is added
01714                         if ($table=='pages' && $row['alias'])   {
01715                                 $out.=' / '.$row['alias'];
01716                         }
01717                         if ($GLOBALS['TCA'][$table]['ctrl']['versioningWS'] && $row['pid']<0)   {
01718                                 $out.=' - v#1.'.$row['t3ver_id'];
01719                         }
01720                         if ($GLOBALS['TCA'][$table]['ctrl']['versioningWS'])    {
01721                                 if ($row['t3ver_state']==1)     $out.= ' - PLH WSID#'.$row['t3ver_wsid'];
01722                                 if ($row['t3ver_state']==-1)    $out.= ' - New element!';
01723                         }
01724 
01725                         if ($ctrl['disabled'])  {               // Hidden ...
01726                                 $out.=($row[$ctrl['disabled']]?' - '.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.hidden'):'');
01727                         }
01728                         if ($ctrl['starttime']) {
01729                                 if ($row[$ctrl['starttime']] > $GLOBALS['EXEC_TIME'])   {
01730                                         $out.=' - '.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.starttime').':'.t3lib_BEfunc::date($row[$ctrl['starttime']]).' ('.t3lib_BEfunc::daysUntil($row[$ctrl['starttime']]).' '.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.days').')';
01731                                 }
01732                         }
01733                         if ($row[$ctrl['endtime']])     {
01734                                 $out.=' - '.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.endtime').': '.t3lib_BEfunc::date($row[$ctrl['endtime']]).' ('.t3lib_BEfunc::daysUntil($row[$ctrl['endtime']]).' '.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.days').')';
01735                         }
01736                 }
01737                 return htmlspecialchars($out);
01738         }
01739 
01749         function getLabelFromItemlist($table,$col,$key) {
01750                 global $TCA;
01751                         // Load full TCA for $table
01752                 t3lib_div::loadTCA($table);
01753 
01754                         // Check, if there is an "items" array:
01755                 if (is_array($TCA[$table]) && is_array($TCA[$table]['columns'][$col]) && is_array($TCA[$table]['columns'][$col]['config']['items']))    {
01756                                 // Traverse the items-array...
01757                         reset($TCA[$table]['columns'][$col]['config']['items']);
01758                         while(list($k,$v)=each($TCA[$table]['columns'][$col]['config']['items']))       {
01759                                         // ... and return the first found label where the value was equal to $key
01760                                 if (!strcmp($v[1],$key))        return $v[0];
01761                         }
01762                 }
01763         }
01764 
01775         function getItemLabel($table,$col,$printAllWrap='')     {
01776                 global $TCA;
01777                         // Load full TCA for $table
01778                 t3lib_div::loadTCA($table);
01779                         // Check if column exists
01780                 if (is_array($TCA[$table]) && is_array($TCA[$table]['columns'][$col]))  {
01781                                 // Re
01782                         return $TCA[$table]['columns'][$col]['label'];
01783                 }
01784                 if ($printAllWrap)      {
01785                         $parts = explode('|',$printAllWrap);
01786                         return $parts[0].$col.$parts[1];
01787                 }
01788         }
01789 
01800         function getRecordTitle($table,$row,$prep=0)    {
01801                 global $TCA;
01802                 if (is_array($TCA[$table]))     {
01803                         $t = $row[$TCA[$table]['ctrl']['label']];
01804                         if ($TCA[$table]['ctrl']['label_alt'] && ($TCA[$table]['ctrl']['label_alt_force'] || !strcmp($t,'')))   {
01805                                 $altFields=t3lib_div::trimExplode(',',$TCA[$table]['ctrl']['label_alt'],1);
01806                                 $tA=array();
01807                                 $tA[]=$t;
01808                                 while(list(,$fN)=each($altFields))      {
01809                                         $t = $tA[] = trim(strip_tags($row[$fN]));
01810                                         if (strcmp($t,'') && !$TCA[$table]['ctrl']['label_alt_force'])  break;
01811                                 }
01812                                 if ($TCA[$table]['ctrl']['label_alt_force'])    $t=implode(', ',$tA);
01813                         }
01814                         if ($prep)      {
01815                                 $t = htmlspecialchars(t3lib_div::fixed_lgd_cs($t,$GLOBALS['BE_USER']->uc['titleLen']));
01816                                 if (!strcmp(trim($t),''))       $t='<em>['.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.no_title',1).']</em>';
01817                         }
01818                         return $t;
01819                 }
01820         }
01821 
01838         function getProcessedValue($table,$col,$value,$fixed_lgd_chars=0,$defaultPassthrough=0,$noRecordLookup=FALSE,$uid=0)    {
01839                 global $TCA;
01840                 global $TYPO3_CONF_VARS;
01841                         // Load full TCA for $table
01842                 t3lib_div::loadTCA($table);
01843                         // Check if table and field is configured:
01844                 if (is_array($TCA[$table]) && is_array($TCA[$table]['columns'][$col]))  {
01845                                 // Depending on the fields configuration, make a meaningful output value.
01846                         $theColConf = $TCA[$table]['columns'][$col]['config'];
01847 
01848                                 /*****************
01849                                  *HOOK: pre-processing the human readable output from a record
01850                                  ****************/
01851                         if (is_array ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['preProcessValue'])) {
01852                         foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['preProcessValue'] as $_funcRef) {
01853                                         t3lib_div::callUserFunction($_funcRef,$theColConf,$this);
01854                                 }
01855                         }
01856 
01857                         $l='';
01858                         switch((string)$theColConf['type'])     {
01859                                 case 'radio':
01860                                         $l=t3lib_BEfunc::getLabelFromItemlist($table,$col,$value);
01861                                         $l=$GLOBALS['LANG']->sL($l);
01862                                 break;
01863                                 case 'select':
01864                                         if ($theColConf['MM'])  {
01865                                                         // Display the title of MM related records in lists
01866                                                         $MMfield = $noRecordLookup?'uid':$TCA[$theColConf['foreign_table']]['ctrl']['label'];
01867                                                         $MMres = $GLOBALS['TYPO3_DB']->exec_SELECT_mm_query(
01868                                                                 $theColConf['foreign_table'].'.'.$MMfield,
01869                                                                 ($table!=$theColConf['foreign_table']?$table:''),
01870                                                                 $theColConf['MM'],
01871                                                                 $theColConf['foreign_table'],
01872                                                                 'AND '.$theColConf['MM'].'.uid_local ='.intval($uid).t3lib_BEfunc::deleteClause($theColConf['foreign_table'])
01873                                                         );
01874                                                 if ($MMres) {
01875                                                         while($MMrow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($MMres))   {
01876                                                                 $mmlA[] = $MMrow[$MMfield];
01877                                                         }
01878                                                         if (is_array($mmlA)) {
01879                                                                 $l=implode(', ',$mmlA);
01880                                                         } else {
01881                                                                 $l = '';
01882                                                         }
01883                                                 } else {
01884                                                         $l = 'n/A';
01885                                                 }
01886                                         } else {
01887                                                 $l = t3lib_BEfunc::getLabelFromItemlist($table,$col,$value);
01888                                                 $l = $GLOBALS['LANG']->sL($l);
01889                                                 if ($theColConf['foreign_table'] && !$l && $TCA[$theColConf['foreign_table']])  {
01890                                                         if ($noRecordLookup)    {
01891                                                                 $l = $value;
01892                                                         } else {
01893                                                                 $rParts = t3lib_div::trimExplode(',',$value,1);
01894                                                                 reset($rParts);
01895                                                                 $lA = array();
01896                                                                 while(list(,$rVal)=each($rParts))       {
01897                                                                         $rVal = intval($rVal);
01898                                                                         if ($rVal>0) {
01899                                                                                 $r=t3lib_BEfunc::getRecordWSOL($theColConf['foreign_table'],$rVal);
01900                                                                         } else {
01901                                                                                 $r=t3lib_BEfunc::getRecordWSOL($theColConf['neg_foreign_table'],-$rVal);
01902                                                                         }
01903                                                                         if (is_array($r))       {
01904                                                                                 $lA[]=$GLOBALS['LANG']->sL($rVal>0?$theColConf['foreign_table_prefix']:$theColConf['neg_foreign_table_prefix']).t3lib_BEfunc::getRecordTitle($rVal>0?$theColConf['foreign_table']:$theColConf['neg_foreign_table'],$r);
01905                                                                         } else {
01906                                                                                 $lA[]=$rVal?'['.$rVal.'!]':'';
01907                                                                         }
01908                                                                 }
01909                                                                 $l = implode(', ',$lA);
01910                                                         }
01911                                                 }
01912                                         }
01913                                 break;
01914                                 case 'group':
01915                                         $l = implode(', ',t3lib_div::trimExplode(',',$value,1));
01916                                 break;
01917                                 case 'check':
01918                                         if (!is_array($theColConf['items']) || count($theColConf['items'])==1)  {
01919                                                 $l = $value ? 'Yes' : '';
01920                                         } else {
01921                                                 reset($theColConf['items']);
01922                                                 $lA=Array();
01923                                                 while(list($key,$val)=each($theColConf['items']))       {
01924                                                         if ($value & pow(2,$key))       {$lA[]=$GLOBALS['LANG']->sL($val[0]);}
01925                                                 }
01926                                                 $l = implode(', ',$lA);
01927                                         }
01928                                 break;
01929                                 case 'input':
01930                                         if ($value)     {
01931                                                 if (t3lib_div::inList($theColConf['eval'],'date'))      {
01932                                                         $l = t3lib_BEfunc::date($value).' ('.(time()-$value>0?'-':'').t3lib_BEfunc::calcAge(abs(time()-$value), $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears')).')';
01933                                                 } elseif (t3lib_div::inList($theColConf['eval'],'time'))        {
01934                                                         $l = t3lib_BEfunc::time($value);
01935                                                 } elseif (t3lib_div::inList($theColConf['eval'],'datetime'))    {
01936                                                         $l = t3lib_BEfunc::datetime($value);
01937                                                 } else {
01938                                                         $l = $value;
01939                                                 }
01940                                         }
01941                                 break;
01942                                 case 'flex':
01943                                         $l = strip_tags($value);
01944                                 break;
01945                                 default:
01946                                         if ($defaultPassthrough)        {
01947                                                 $l=$value;
01948                                         } elseif ($theColConf['MM'])    {
01949                                                 $l='N/A';
01950                                         } elseif ($value)       {
01951                                                 $l=t3lib_div::fixed_lgd_cs(strip_tags($value),200);
01952                                         }
01953                                 break;
01954                         }
01955 
01956                                 /*****************
01957                                  *HOOK: post-processing the human readable output from a record
01958                                  ****************/
01959                         if (is_array ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['postProcessValue'])) {
01960                         foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['postProcessValue'] as $_funcRef) {
01961                                         $params = array(
01962                                                 'value' => $l,
01963                                                 'colConf' => $theColConf
01964                                         );
01965                                         $l = t3lib_div::callUserFunction($_funcRef,$params,$this);
01966                                 }
01967                         }
01968 
01969                         if ($fixed_lgd_chars)   {
01970                                 return t3lib_div::fixed_lgd_cs($l,$fixed_lgd_chars);
01971                         } else {
01972                                 return $l;
01973                         }
01974                 }
01975         }
01976 
01989         function getProcessedValueExtra($table,$fN,$fV,$fixed_lgd_chars=0,$uid=0)       {
01990                 global $TCA;
01991                 $fVnew = t3lib_BEfunc::getProcessedValue($table,$fN,$fV,$fixed_lgd_chars,0,0,$uid);
01992                 if (!isset($fVnew))     {
01993                         if (is_array($TCA[$table]))     {
01994                                 if ($fN==$TCA[$table]['ctrl']['tstamp'] || $fN==$TCA[$table]['ctrl']['crdate']) {
01995                                         $fVnew = t3lib_BEfunc::datetime($fV);
01996                                 } elseif ($fN=='pid'){
01997                                         $fVnew = t3lib_BEfunc::getRecordPath($fV,'1=1',20);     // Fetches the path with no regard to the users permissions to select pages.
01998                                 } else {
01999                                         $fVnew = $fV;
02000                                 }
02001                         }
02002                 }
02003                 return $fVnew;
02004         }
02005 
02013         function getFileIcon($ext)      {
02014                 return $GLOBALS['FILEICONS'][$ext] ? $GLOBALS['FILEICONS'][$ext] : $GLOBALS['FILEICONS']['default'];
02015         }
02016 
02027         function getCommonSelectFields($table,$prefix='')       {
02028                 global $TCA;
02029                 $fields = array();
02030                 $fields[] = $prefix.'uid';
02031                 $fields[] = $prefix.$TCA[$table]['ctrl']['label'];
02032 
02033                 if ($TCA[$table]['ctrl']['label_alt'])  {
02034                         $secondFields = t3lib_div::trimExplode(',',$TCA[$table]['ctrl']['label_alt'],1);
02035                         foreach($secondFields as $fieldN)       {
02036                                 $fields[] = $prefix.$fieldN;
02037                         }
02038                 }
02039                 if ($TCA[$table]['ctrl']['versioningWS'])       {
02040                         $fields[] = $prefix.'t3ver_id';
02041                         $fields[] = $prefix.'t3ver_state';
02042                         $fields[] = $prefix.'t3ver_wsid';
02043                         $fields[] = $prefix.'t3ver_count';
02044                 }
02045 
02046                 if ($TCA[$table]['ctrl']['selicon_field'])      $fields[] = $prefix.$TCA[$table]['ctrl']['selicon_field'];
02047                 if ($TCA[$table]['ctrl']['typeicon_column'])    $fields[] = $prefix.$TCA[$table]['ctrl']['typeicon_column'];
02048 
02049                 if (is_array($TCA[$table]['ctrl']['enablecolumns']))            {
02050                         if ($TCA[$table]['ctrl']['enablecolumns']['disabled'])  $fields[] = $prefix.$TCA[$table]['ctrl']['enablecolumns']['disabled'];
02051                         if ($TCA[$table]['ctrl']['enablecolumns']['starttime']) $fields[] = $prefix.$TCA[$table]['ctrl']['enablecolumns']['starttime'];
02052                         if ($TCA[$table]['ctrl']['enablecolumns']['endtime'])   $fields[] = $prefix.$TCA[$table]['ctrl']['enablecolumns']['endtime'];
02053                         if ($TCA[$table]['ctrl']['enablecolumns']['fe_group'])  $fields[] = $prefix.$TCA[$table]['ctrl']['enablecolumns']['fe_group'];
02054                 }
02055 
02056                 return implode(',', array_unique($fields));
02057         }
02058 
02070         function makeConfigForm($configArray,$defaults,$dataPrefix)     {
02071                 $params = $defaults;
02072                 if (is_array($configArray))     {
02073                         reset($configArray);
02074                         $lines=array();
02075                         while(list($fname,$config)=each($configArray))  {
02076                                 if (is_array($config))  {
02077                                         $lines[$fname]='<strong>'.htmlspecialchars($config[1]).'</strong><br />';
02078                                         $lines[$fname].=$config[2].'<br />';
02079                                         switch($config[0])      {
02080                                                 case 'string':
02081                                                 case 'short':
02082                                                         $formEl = '<input type="text" name="'.$dataPrefix.'['.$fname.']" value="'.$params[$fname].'"'.$GLOBALS['TBE_TEMPLATE']->formWidth($config[0]=='short'?24:48).' />';
02083                                                 break;
02084                                                 case 'check':
02085                                                         $formEl = '<input type="hidden" name="'.$dataPrefix.'['.$fname.']" value="0" /><input type="checkbox" name="'.$dataPrefix.'['.$fname.']" value="1"'.($params[$fname]?' checked="checked"':'').' />';
02086                                                 break;
02087                                                 case 'comment':
02088                                                         $formEl = '';
02089                                                 break;
02090                                                 case 'select':
02091                                                         reset($config[3]);
02092                                                         $opt=array();
02093                                                         while(list($k,$v)=each($config[3]))     {
02094                                                                 $opt[]='<option value="'.htmlspecialchars($k).'"'.($params[$fname]==$k?' selected="selected"':'').'>'.htmlspecialchars($v).'</option>';
02095                                                         }
02096                                                         $formEl = '<select name="'.$dataPrefix.'['.$fname.']">'.implode('',$opt).'</select>';
02097                                                 break;
02098                                                 default:
02099                                                         debug($config);
02100                                                 break;
02101                                         }
02102                                         $lines[$fname].=$formEl;
02103                                         $lines[$fname].='<br /><br />';
02104                                 } else {
02105                                         $lines[$fname]='<hr />';
02106                                         if ($config)    $lines[$fname].='<strong>'.strtoupper(htmlspecialchars($config)).'</strong><br />';
02107                                         if ($config)    $lines[$fname].='<br />';
02108                                 }
02109                         }
02110                 }
02111                 $out = implode('',$lines);
02112                 $out.='<input type="submit" name="submit" value="Update configuration" />';
02113                 return $out;
02114         }
02115 
02116 
02117 
02118 
02119 
02120 
02121 
02122 
02123 
02124 
02125 
02126 
02127 
02128         /*******************************************
02129          *
02130          * Backend Modules API functions
02131          *
02132          *******************************************/
02133 
02145         function helpTextIcon($table,$field,$BACK_PATH,$force=0)        {
02146                 global $TCA_DESCR,$BE_USER;
02147                 if (is_array($TCA_DESCR[$table]) && is_array($TCA_DESCR[$table]['columns'][$field]) && ($BE_USER->uc['edit_showFieldHelp']=='icon' || $force))  {
02148                         $onClick = 'vHWin=window.open(\''.$BACK_PATH.'view_help.php?tfID='.($table.'.'.$field).'\',\'viewFieldHelp\',\'height=400,width=600,status=0,menubar=0,scrollbars=1\');vHWin.focus();return false;';
02149                         return '<a href="#" onclick="'.htmlspecialchars($onClick).'">'.
02150                                         '<img'.t3lib_iconWorks::skinImg($BACK_PATH,'gfx/helpbubble.gif','width="14" height="14"').' hspace="2" border="0" class="typo3-csh-icon" alt="" />'.
02151                                         '</a>';
02152                 }
02153         }
02154 
02167         function helpText($table,$field,$BACK_PATH,$styleAttrib='')     {
02168                 global $TCA_DESCR,$BE_USER;
02169                 if (is_array($TCA_DESCR[$table]) && is_array($TCA_DESCR[$table]['columns'][$field]) && $BE_USER->uc['edit_showFieldHelp']=='text')      {
02170                         $fDat = $TCA_DESCR[$table]['columns'][$field];
02171 
02172                                 // Get Icon:
02173                         $editIcon = t3lib_BEfunc::helpTextIcon(
02174                                                                         $table,
02175                                                                         $field,
02176                                                                         $BACK_PATH,
02177                                                                         TRUE
02178                                                                 );
02179                                 // Add title?
02180                         $onClick = 'vHWin=window.open(\''.$BACK_PATH.'view_help.php?tfID='.($table.'.'.$field).'\',\'viewFieldHelp\',\'height=400,width=600,status=0,menubar=0,scrollbars=1\');vHWin.focus();return false;';
02181                         $text =
02182                                         ($fDat['alttitle'] ? '<h4><a href="#" onclick="'.htmlspecialchars($onClick).'">'.$fDat['alttitle'].'</a></h4>' : '').
02183                                         $fDat['description'];
02184 
02185                                 // More information to get?
02186                         if ($fDat['image_descr'] || $fDat['seeAlso'] || $fDat['details'] || $fDat['syntax'])    { // || $fDat['image'];
02187                                 $text.=' <a href="#" onclick="'.htmlspecialchars($onClick).'">'.
02188                                                 '<img'.t3lib_iconWorks::skinImg($BACK_PATH,'gfx/rel_db.gif','width="13" height="12"').' class="absmiddle typo3-csh-more" alt="" />'.
02189                                                 '</a>';
02190                         }
02191 
02192                                 // Additional styles?
02193                         $params = $styleAttrib ? ' style="'.$styleAttrib.'"' : '';
02194 
02195                                 // Compile table with CSH information:
02196                         return '<table border="0" cellpadding="2" cellspacing="0" class="typo3-csh-inline"'.$params.'>
02197                                                 <tr>
02198                                                         <td valign="top" width="14">'.$editIcon.'</td>
02199                                                         <td valign="top">'.$text.'</td>
02200                                                 </tr>
02201                                         </table>';
02202                 }
02203         }
02204 
02219         function cshItem($table,$field,$BACK_PATH,$wrap='',$onlyIconMode=FALSE, $styleAttrib='')        {
02220                 global $TCA_DESCR, $LANG, $BE_USER;
02221                 if ($BE_USER->uc['edit_showFieldHelp']) {
02222                         $LANG->loadSingleTableDescription($table);
02223 
02224                         if (is_array($TCA_DESCR[$table]))       {
02225                                         // Creating CSH icon and short description:
02226                                 $fullText = t3lib_BEfunc::helpText($table,$field,$BACK_PATH,$styleAttrib);
02227                                 $icon = t3lib_BEfunc::helpTextIcon($table,$field,$BACK_PATH,$onlyIconMode);
02228 
02229                                 if ($fullText && !$onlyIconMode)        {
02230                                         $output = $GLOBALS['LANG']->hscAndCharConv($fullText, false);
02231                                 } else {
02232                                         #$output = '<span style="position:absolute; filter: alpha(opacity=50); -moz-opacity: 0.50;">'.$icon.'</span>';
02233                                         $output = $icon;
02234 
02235                                         if ($output && $wrap)   {
02236                                                 $wrParts = explode('|',$wrap);
02237                                                 $output = $wrParts[0].$output.$wrParts[1];
02238                                         }
02239                                 }
02240 
02241                                 return $output;
02242                         }
02243                 }
02244         }
02245 
02257         function editOnClick($params,$backPath='',$requestUri='')       {
02258                 $retUrl = 'returnUrl='.($requestUri==-1?"'+T3_THIS_LOCATION+'":rawurlencode($requestUri?$requestUri:t3lib_div::getIndpEnv('REQUEST_URI')));
02259                 return "window.location.href='".$backPath."alt_doc.php?".$retUrl.$params."'; return false;";
02260         }
02261 
02276         function viewOnClick($id,$backPath='',$rootLine='',$anchor='',$altUrl='',$addGetVars='',$switchFocus=TRUE)      {
02277                 if ($altUrl)    {
02278                         $url = $altUrl;
02279                 } else {
02280 
02281                         if ($GLOBALS['BE_USER']->workspace!=0)  {
02282                                 $url = t3lib_div::getIndpEnv('TYPO3_SITE_URL').TYPO3_mainDir.'mod/user/ws/wsol_preview.php?id='.$id.$addGetVars.$anchor;
02283                         } else {
02284                                 if ($rootLine)  {
02285                                         $parts = parse_url(t3lib_div::getIndpEnv('TYPO3_SITE_URL'));
02286                                         if (t3lib_BEfunc::getDomainStartPage($parts['host'],$parts['path']))    {
02287                                                 $preUrl_temp = t3lib_BEfunc::firstDomainRecord($rootLine);
02288                                         }
02289                                 }
02290                                 $preUrl = $preUrl_temp ? (t3lib_div::getIndpEnv('TYPO3_SSL') ? 'https://' : 'http://').$preUrl_temp : $backPath.'..';
02291                                 $url = $preUrl.'/index.php?id='.$id.$addGetVars.$anchor;
02292                         }
02293                 }
02294 
02295                 return "previewWin=window.open('".$url."','newTYPO3frontendWindow');".
02296                                 ($switchFocus ? 'previewWin.focus();' : '');
02297         }
02298 
02308         function getModTSconfig($id,$TSref)     {
02309                 $pageTS_modOptions = $GLOBALS['BE_USER']->getTSConfig($TSref,t3lib_BEfunc::getPagesTSconfig($id));
02310                 $BE_USER_modOptions = $GLOBALS['BE_USER']->getTSConfig($TSref);
02311                 $modTSconfig = t3lib_div::array_merge_recursive_overrule($pageTS_modOptions,$BE_USER_modOptions);
02312                 return $modTSconfig;
02313         }
02314 
02329         function getFuncMenu($mainParams,$elementName,$currentValue,$menuItems,$script='',$addparams='')        {
02330                 if (is_array($menuItems))       {
02331                         if (!is_array($mainParams)) {
02332                                 $mainParams = array('id' => $mainParams);
02333                         }
02334                         $mainParams = t3lib_div::implodeArrayForUrl('',$mainParams);
02335 
02336                         if (!$script) { $script=basename(PATH_thisScript); }
02337 
02338                         $options = array();
02339                         foreach($menuItems as $value => $label) {
02340                                 $options[] = '<option value="'.htmlspecialchars($value).'"'.(!strcmp($currentValue,$value)?' selected="selected"':'').'>'.
02341                                                                 t3lib_div::deHSCentities(htmlspecialchars($label)).
02342                                                                 '</option>';
02343                         }
02344                         if (count($options))    {
02345                                 $onChange = 'jumpToUrl(\''.$script.'?'.$mainParams.$addparams.'&'.$elementName.'=\'+this.options[this.selectedIndex].value,this);';
02346                                 return '
02347 
02348                                         <!-- Function Menu of module -->
02349                                         <select name="'.$elementName.'" onchange="'.htmlspecialchars($onChange).'">
02350                                                 '.implode('
02351                                                 ',$options).'
02352                                         </select>
02353                                                         ';
02354                         }
02355                 }
02356         }
02357 
02372         function getFuncCheck($mainParams,$elementName,$currentValue,$script='',$addparams='',$tagParams='')    {
02373                 if (!is_array($mainParams)) {
02374                         $mainParams = array('id' => $mainParams);
02375                 }
02376                 $mainParams = t3lib_div::implodeArrayForUrl('',$mainParams);
02377 
02378                 if (!$script) {basename(PATH_thisScript);}
02379                 $onClick = 'jumpToUrl(\''.$script.'?'.$mainParams.$addparams.'&'.$elementName.'=\'+(this.checked?1:0),this);';
02380                 return '<input type="checkbox" name="'.$elementName.'"'.($currentValue?' checked="checked"':'').' onclick="'.htmlspecialchars($onClick).'"'.($tagParams?' '.$tagParams:'').' />';
02381         }
02382 
02397         function getFuncInput($mainParams,$elementName,$currentValue,$size=10,$script="",$addparams="") {
02398                 if (!is_array($mainParams)) {
02399                         $mainParams = array('id' => $mainParams);
02400                 }
02401                 $mainParams = t3lib_div::implodeArrayForUrl('',$mainParams);
02402 
02403                 if (!$script) {basename(PATH_thisScript);}
02404                 $onChange = 'jumpToUrl(\''.$script.'?'.$mainParams.$addparams.'&'.$elementName.'=\'+escape(this.value),this);';
02405                 return '<input type="text"'.$GLOBALS['TBE_TEMPLATE']->formWidth($size).' name="'.$elementName.'" value="'.htmlspecialchars($currentValue).'" onchange="'.htmlspecialchars($onChange).'" />';
02406         }
02407 
02418         function unsetMenuItems($modTSconfig,$itemArray,$TSref) {
02419                         // Getting TS-config options for this module for the Backend User:
02420                 $conf = $GLOBALS['BE_USER']->getTSConfig($TSref,$modTSconfig);
02421                 if (is_array($conf['properties']))      {
02422                         reset($conf['properties']);
02423                         while(list($key,$val)=each($conf['properties']))        {
02424                                 if (!$val)      {
02425                                         unset($itemArray[$key]);
02426                                 }
02427                         }
02428                 }
02429                 return $itemArray;
02430         }
02431 
02441         function getSetUpdateSignal($set='')    {
02442                 global $BE_USER;
02443                 $key = 't3lib_BEfunc::getSetUpdateSignal';
02444                 $out='';
02445                 if ($set)       {
02446                         $modData=array();
02447                         $modData['set']=$set;
02448                         $BE_USER->pushModuleData($key,$modData);
02449                 } else {
02450                         $modData = $BE_USER->getModuleData($key,'ses');
02451                         if (trim($modData['set']))      {
02452                                 $l=explode(',',$modData['set']);
02453                                 while(list(,$v)=each($l))       {
02454                                         switch($v)      {
02455                                                 case 'updatePageTree':
02456                                                 case 'updateFolderTree':
02457                                                         $out.='
02458                                         <script type="text/javascript">
02459                                         /*<![CDATA[*/
02460                                                         if (top.content && top.content.nav_frame && top.content.nav_frame.refresh_nav)  {
02461                                                                 top.content.nav_frame.refresh_nav();
02462                                                         }
02463                                         /*]]>*/
02464                                         </script>';
02465                                                 break;
02466                                         }
02467                                 }
02468                                 $modData=array();
02469                                 $modData['set']='';
02470                                 $BE_USER->pushModuleData($key,$modData);
02471                         }
02472                 }
02473                 return $out;
02474         }
02475 
02476 
02492         function getModuleData($MOD_MENU, $CHANGED_SETTINGS, $modName, $type='', $dontValidateList='', $setDefaultList='')      {
02493 
02494                 if ($modName && is_string($modName))    {
02495                                         // GETTING stored user-data from this module:
02496                         $settings = $GLOBALS['BE_USER']->getModuleData($modName,$type);
02497 
02498                         $changed=0;
02499                         if (!is_array($settings))       {
02500                                 $changed=1;
02501                                 $settings=array();
02502                         }
02503                         if (is_array($MOD_MENU))        {
02504                                 foreach ($MOD_MENU as $key=>$var)       {
02505                                                 // If a global var is set before entering here. eg if submitted, then it's substituting the current value the array.
02506                                         if (is_array($CHANGED_SETTINGS) && isset($CHANGED_SETTINGS[$key]) && strcmp($settings[$key],$CHANGED_SETTINGS[$key]))   {
02507                                                 $settings[$key] = (string)$CHANGED_SETTINGS[$key];
02508                                                 $changed=1;
02509                                         }
02510                                                 // If the $var is an array, which denotes the existence of a menu, we check if the value is permitted
02511                                         if (is_array($var) && (!$dontValidateList || !t3lib_div::inList($dontValidateList,$key)))       {
02512                                                         // If the setting is an array or not present in the menu-array, MOD_MENU, then the default value is inserted.
02513                                                 if (is_array($settings[$key]) || !isset($MOD_MENU[$key][$settings[$key]]))      {
02514                                                         $settings[$key]=(string)key($var);
02515                                                         $changed=1;
02516                                                 }
02517                                         }
02518                                         if ($setDefaultList && !is_array($var)) {       // Sets default values (only strings/checkboxes, not menus)
02519                                                 if (t3lib_div::inList($setDefaultList,$key) && !isset($settings[$key])) {
02520                                                         $settings[$key]=$var;
02521                                                 }
02522                                         }
02523                                 }
02524                         } else {die ('No menu!');}
02525 
02526                         if ($changed)   {
02527                                 $GLOBALS['BE_USER']->pushModuleData($modName,$settings);
02528                         }
02529 
02530                         return  $settings;
02531                 } else {die ('Wrong module name: "'.$modName.'"');}
02532         }
02533 
02534 
02535 
02536 
02537 
02538 
02539 
02540 
02541 
02542 
02543 
02544 
02545 
02546         /*******************************************
02547          *
02548          * Core
02549          *
02550          *******************************************/
02551 
02565         function compilePreviewKeyword($getVarsStr, $beUserUid, $ttl=172800)    {
02566                 $field_array = array(
02567                         'keyword' => md5(uniqid(microtime())),
02568                         'tstamp' => time(),
02569                         'endtime' => time()+$ttl,
02570                         'config' => serialize(array(
02571                                 'getVars' => $getVarsStr,
02572                                 'BEUSER_uid' => $beUserUid
02573                         ))
02574                 );
02575 
02576                 $GLOBALS['TYPO3_DB']->exec_INSERTquery('sys_preview', $field_array);
02577 
02578                 return $field_array['keyword'];
02579         }
02580 
02593         function lockRecords($table='',$uid=0,$pid=0)   {
02594                 $user_id = intval($GLOBALS['BE_USER']->user['uid']);
02595                 if ($table && $uid)     {
02596                         $fields_values = array(
02597                                 'userid' => $user_id,
02598                                 'tstamp' => $GLOBALS['EXEC_TIME'],
02599                                 'record_table' => $table,
02600                                 'record_uid' => $uid,
02601                                 'username' => $GLOBALS['BE_USER']->user['username'],
02602                                 'record_pid' => $pid
02603                         );
02604 
02605                         $GLOBALS['TYPO3_DB']->exec_INSERTquery('sys_lockedrecords', $fields_values);
02606                 } else {
02607                         $GLOBALS['TYPO3_DB']->exec_DELETEquery('sys_lockedrecords', 'userid='.intval($user_id));
02608                 }
02609         }
02610 
02622         function isRecordLocked($table,$uid)    {
02623                 global $LOCKED_RECORDS;
02624                 if (!is_array($LOCKED_RECORDS)) {
02625                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
02626                                                         '*',
02627                                                         'sys_lockedrecords',
02628                                                         'sys_lockedrecords.userid!='.intval($GLOBALS['BE_USER']->user['uid']).'
02629                                                                 AND sys_lockedrecords.tstamp > '.($GLOBALS['EXEC_TIME']-2*3600)
02630                                                 );
02631                         while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))       {
02632                                 $LOCKED_RECORDS[$row['record_table'].':'.$row['record_uid']]=$row;
02633                                 $LOCKED_RECORDS[$row['record_table'].':'.$row['record_uid']]['msg']=sprintf(
02634                                         $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.lockedRecord'),
02635                                         $row['username'],
02636                                         t3lib_BEfunc::calcAge($GLOBALS['EXEC_TIME']-$row['tstamp'],$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears'))
02637                                 );
02638                                 if ($row['record_pid'] && !isset($LOCKED_RECORDS[$row['record_table'].':'.$row['record_pid']])) {
02639                                         $LOCKED_RECORDS['pages:'.$row['record_pid']]['msg']=sprintf(
02640                                                 $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.lockedRecord_content'),
02641                                                 $row['username'],
02642                                                 t3lib_BEfunc::calcAge($GLOBALS['EXEC_TIME']-$row['tstamp'],$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears'))
02643                                         );
02644                                 }
02645                         }
02646                 }
02647                 return $LOCKED_RECORDS[$table.':'.$uid];
02648         }
02649 
02662         function exec_foreign_table_where_query($fieldValue,$field='',$TSconfig=array(),$prefix='')     {
02663                 global $TCA;
02664                 $foreign_table = $fieldValue['config'][$prefix.'foreign_table'];
02665                 $rootLevel = $TCA[$foreign_table]['ctrl']['rootLevel'];
02666 
02667                 $fTWHERE = $fieldValue['config'][$prefix.'foreign_table_where'];
02668                 if (strstr($fTWHERE,'###REC_FIELD_'))   {
02669                         $fTWHERE_parts = explode('###REC_FIELD_',$fTWHERE);
02670                         while(list($kk,$vv)=each($fTWHERE_parts))       {
02671                                 if ($kk)        {
02672                                         $fTWHERE_subpart = explode('###',$vv,2);
02673                                         $fTWHERE_parts[$kk]=$TSconfig['_THIS_ROW'][$fTWHERE_subpart[0]].$fTWHERE_subpart[1];
02674                                 }
02675                         }
02676                         $fTWHERE = implode('',$fTWHERE_parts);
02677                 }
02678 
02679                 $fTWHERE = str_replace('###CURRENT_PID###',intval($TSconfig['_CURRENT_PID']),$fTWHERE);
02680                 $fTWHERE = str_replace('###THIS_UID###',intval($TSconfig['_THIS_UID']),$fTWHERE);
02681                 $fTWHERE = str_replace('###THIS_CID###',intval($TSconfig['_THIS_CID']),$fTWHERE);
02682                 $fTWHERE = str_replace('###STORAGE_PID###',intval($TSconfig['_STORAGE_PID']),$fTWHERE);
02683                 $fTWHERE = str_replace('###SITEROOT###',intval($TSconfig['_SITEROOT']),$fTWHERE);
02684                 $fTWHERE = str_replace('###PAGE_TSCONFIG_ID###',intval($TSconfig[$field]['PAGE_TSCONFIG_ID']),$fTWHERE);
02685                 $fTWHERE = str_replace('###PAGE_TSCONFIG_IDLIST###',$GLOBALS['TYPO3_DB']->cleanIntList($TSconfig[$field]['PAGE_TSCONFIG_IDLIST']),$fTWHERE);
02686                 $fTWHERE = str_replace('###PAGE_TSCONFIG_STR###',$GLOBALS['TYPO3_DB']->quoteStr($TSconfig[$field]['PAGE_TSCONFIG_STR'], $foreign_table),$fTWHERE);
02687 
02688                         // rootLevel = -1 is not handled 'properly' here - it goes as if it was rootLevel = 1 (that is pid=0)
02689                 $wgolParts = $GLOBALS['TYPO3_DB']->splitGroupOrderLimit($fTWHERE);
02690                 if ($rootLevel) {
02691                         $queryParts = array(
02692                                 'SELECT' => t3lib_BEfunc::getCommonSelectFields($foreign_table,$foreign_table.'.'),
02693                                 'FROM' => $foreign_table,
02694                                 'WHERE' => $foreign_table.'.pid=0 '.
02695                                                         t3lib_BEfunc::deleteClause($foreign_table).' '.
02696                                                         $wgolParts['WHERE'],
02697                                 'GROUPBY' => $wgolParts['GROUPBY'],
02698                                 'ORDERBY' => $wgolParts['ORDERBY'],
02699                                 'LIMIT' => $wgolParts['LIMIT']
02700                         );
02701                 } else {
02702                         $pageClause = $GLOBALS['BE_USER']->getPagePermsClause(1);
02703                         if ($foreign_table!='pages')    {
02704                                 $queryParts = array(
02705                                         'SELECT' => t3lib_BEfunc::getCommonSelectFields($foreign_table,$foreign_table.'.'),
02706                                         'FROM' => $foreign_table.',pages',
02707                                         'WHERE' => 'pages.uid='.$foreign_table.'.pid
02708                                                                 AND pages.deleted=0 '.
02709                                                                 t3lib_BEfunc::deleteClause($foreign_table).
02710                                                                 ' AND '.$pageClause.' '.
02711                                                                 $wgolParts['WHERE'],
02712                                         'GROUPBY' => $wgolParts['GROUPBY'],
02713                                         'ORDERBY' => $wgolParts['ORDERBY'],
02714                                         'LIMIT' => $wgolParts['LIMIT']
02715                                 );
02716                         } else {
02717                                 $queryParts = array(
02718                                         'SELECT' => t3lib_BEfunc::getCommonSelectFields($foreign_table,$foreign_table.'.'),
02719                                         'FROM' => 'pages',
02720                                         'WHERE' => 'pages.deleted=0
02721                                                                 AND '.$pageClause.' '.
02722                                                                 $wgolParts['WHERE'],
02723                                         'GROUPBY' => $wgolParts['GROUPBY'],
02724                                         'ORDERBY' => $wgolParts['ORDERBY'],
02725                                         'LIMIT' => $wgolParts['LIMIT']
02726                                 );
02727                         }
02728                 }
02729 
02730                 return $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts);
02731         }
02732 
02743         function getTCEFORM_TSconfig($table,$row) {
02744                 t3lib_BEfunc::fixVersioningPid($table,$row);
02745 
02746                 $res = array();
02747                 $typeVal = t3lib_BEfunc::getTCAtypeValue($table,$row);
02748 
02749                         // Get main config for the table
02750                 list($TScID,$cPid) = t3lib_BEfunc::getTSCpid($table,$row['uid'],$row['pid']);
02751 
02752                 $rootLine = t3lib_BEfunc::BEgetRootLine($TScID,'',TRUE);
02753                 if ($TScID>=0)  {
02754                         $tempConf = $GLOBALS['BE_USER']->getTSConfig('TCEFORM.'.$table,t3lib_BEfunc::getPagesTSconfig($TScID,$rootLine));
02755                         if (is_array($tempConf['properties']))  {
02756                                 while(list($key,$val)=each($tempConf['properties']))    {
02757                                         if (is_array($val))     {
02758                                                 $fieldN = substr($key,0,-1);
02759                                                 $res[$fieldN] = $val;
02760                                                 unset($res[$fieldN]['types.']);
02761                                                 if (strcmp($typeVal,'') && is_array($val['types.'][$typeVal.'.']))      {
02762                                                         $res[$fieldN] = t3lib_div::array_merge_recursive_overrule($res[$fieldN],$val['types.'][$typeVal.'.']);
02763                                                 }
02764                                         }
02765                                 }
02766                         }
02767                 }
02768                 $res['_CURRENT_PID']=$cPid;
02769                 $res['_THIS_UID']=$row['uid'];
02770                 $res['_THIS_CID']=$row['cid'];
02771                 $res['_THIS_ROW']=$row; // So the row will be passed to foreign_table_where_query()
02772 
02773                 reset($rootLine);
02774                 while(list(,$rC)=each($rootLine))       {
02775                         if (!$res['_STORAGE_PID'])      $res['_STORAGE_PID']=intval($rC['storage_pid']);
02776                         if (!$res['_SITEROOT']) $res['_SITEROOT']=$rC['is_siteroot']?intval($rC['uid']):0;
02777                 }
02778 
02779                 return $res;
02780         }
02781 
02794         function getTSconfig_pidValue($table,$uid,$pid) {
02795 
02796                 if (t3lib_div::testInt($pid))   {       // If pid is an integer this takes precedence in our lookup.
02797                         $thePidValue = intval($pid);
02798                         if ($thePidValue<0)     {       // If ref to another record, look that record up.
02799                                 $pidRec = t3lib_BEfunc::getRecord($table,abs($thePidValue),'pid');
02800                                 $thePidValue = is_array($pidRec) ? $pidRec['pid'] : -2; // Returns -2 if the record did not exist.
02801                         }
02802                         // ... else the pos/zero pid is just returned here.
02803                 } else {        // No integer pid and we are forced to look up the $pid
02804                         $rr = t3lib_BEfunc::getRecord($table,$uid,'pid');       // Try to fetch the record pid from uid. If the uid is 'NEW...' then this will of course return nothing...
02805                         if (is_array($rr))      {
02806                                 $thePidValue = $rr['pid'];      // Returning the 'pid' of the record
02807                         } else $thePidValue=-1; // Returns -1 if the record with the pid was not found.
02808                 }
02809 
02810                 return $thePidValue;
02811         }
02812 
02824         function getPidForModTSconfig($table,$uid,$pid) {
02825                 $retVal = ($table=='pages' && t3lib_div::testInt($uid)) ? $uid : $pid;
02826                 return $retVal;
02827         }
02828 
02840         function getTSCpid($table,$uid,$pid)    {
02841                         // If pid is negative (referring to another record) the pid of the other record is fetched and returned.
02842                 $cPid = t3lib_BEfunc::getTSconfig_pidValue($table,$uid,$pid);
02843                         // $TScID is the id of $table=pages, else it's the pid of the record.
02844                 $TScID = t3lib_BEfunc::getPidForModTSconfig($table,$uid,$cPid);
02845 
02846                 return array($TScID,$cPid);
02847         }
02848 
02856         function firstDomainRecord($rootLine)   {
02857                 if (t3lib_extMgm::isLoaded('cms'))      {
02858                         reset($rootLine);
02859                         while(list(,$row)=each($rootLine))      {
02860                                 $dRec = t3lib_BEfunc::getRecordsByField('sys_domain','pid',$row['uid'],' AND redirectTo=\'\' AND hidden=0', '', 'sorting');
02861                                 if (is_array($dRec))    {
02862                                         reset($dRec);
02863                                         $dRecord = current($dRec);
02864                                         return ereg_replace('\/$','',$dRecord['domainName']);
02865                                 }
02866                         }
02867                 }
02868         }
02869 
02878         function getDomainStartPage($domain, $path='')  {
02879                 if (t3lib_extMgm::isLoaded('cms'))      {
02880                         $domain = explode(':',$domain);
02881                         $domain = strtolower(ereg_replace('\.$','',$domain[0]));
02882                                 // path is calculated.
02883                         $path = trim(ereg_replace('\/[^\/]*$','',$path));
02884                                 // stuff:
02885                         $domain.=$path;
02886 
02887                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('sys_domain.*', 'pages,sys_domain', '
02888                                 pages.uid=sys_domain.pid
02889                                 AND sys_domain.hidden=0
02890                                 AND (sys_domain.domainName='.$GLOBALS['TYPO3_DB']->fullQuoteStr($domain, 'sys_domain').' or sys_domain.domainName='.$GLOBALS['TYPO3_DB']->fullQuoteStr($domain.'/', 'sys_domain').')'.
02891                                 t3lib_BEfunc::deleteClause('pages'),
02892                                 '', '', '1');
02893                         return $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
02894                 }
02895         }
02896 
02908         function RTEsetup($RTEprop,$table,$field,$type='')      {
02909                 $thisConfig = is_array($RTEprop['default.']) ? $RTEprop['default.'] : array();
02910                 $thisFieldConf = $RTEprop['config.'][$table.'.'][$field.'.'];
02911                 if (is_array($thisFieldConf))   {
02912                         unset($thisFieldConf['types.']);
02913                         $thisConfig = t3lib_div::array_merge_recursive_overrule($thisConfig,$thisFieldConf);
02914                 }
02915                 if ($type && is_array($RTEprop['config.'][$table.'.'][$field.'.']['types.'][$type.'.']))        {
02916                         $thisConfig = t3lib_div::array_merge_recursive_overrule($thisConfig,$RTEprop['config.'][$table.'.'][$field.'.']['types.'][$type.'.']);
02917                 }
02918                 return $thisConfig;
02919         }
02920 
02927         function &RTEgetObj()   {
02928 
02929                         // If no RTE object has been set previously, try to create it:
02930                 if (!isset($GLOBALS['T3_VAR']['RTEobj']))       {
02931 
02932                                 // Set the object string to blank by default:
02933                         $GLOBALS['T3_VAR']['RTEobj'] = array();
02934 
02935                                 // Traverse registered RTEs:
02936                         if (is_array($GLOBALS['TYPO3_CONF_VARS']['BE']['RTE_reg']))     {
02937                                 foreach($GLOBALS['TYPO3_CONF_VARS']['BE']['RTE_reg'] as $extKey => $rteObjCfg)  {
02938                                         $rteObj = &t3lib_div::getUserObj($rteObjCfg['objRef']);
02939                                         if (is_object($rteObj)) {
02940                                                 if ($rteObj->isAvailable())     {
02941                                                         $GLOBALS['T3_VAR']['RTEobj'] = &$rteObj;
02942                                                         break;
02943                                                 } else {
02944                                                         $GLOBALS['T3_VAR']['RTEobj'] = array_merge($GLOBALS['T3_VAR']['RTEobj'], $rteObj->errorLog);
02945                                                 }
02946                                         }
02947                                 }
02948                         }
02949 
02950                         if (!count($GLOBALS['T3_VAR']['RTEobj']))       {
02951                                 $GLOBALS['T3_VAR']['RTEobj'][] = 'No RTEs configured at all';
02952                         }
02953                 }
02954 
02955                         // Return RTE object (if any!)
02956                 return $GLOBALS['T3_VAR']['RTEobj'];
02957         }
02958 
02966         function &softRefParserObj($spKey)      {
02967 
02968                         // If no softRef parser object has been set previously, try to create it:
02969                 if (!isset($GLOBALS['T3_VAR']['softRefParser'][$spKey]))        {
02970 
02971                                 // Set the object string to blank by default:
02972                         $GLOBALS['T3_VAR']['softRefParser'][$spKey] = '';
02973 
02974                                 // Now, try to create parser object:
02975                         $objRef = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['softRefParser'][$spKey] ?
02976                                                         $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['softRefParser'][$spKey] :
02977                                                         $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['softRefParser_GL'][$spKey];
02978                         if ($objRef)    {
02979                                 $softRefParserObj = &t3lib_div::getUserObj($objRef,'');
02980                                 if (is_object($softRefParserObj))       {
02981                                         $GLOBALS['T3_VAR']['softRefParser'][$spKey] = &$softRefParserObj;
02982                                 }
02983                         }
02984                 }
02985 
02986                         // Return RTE object (if any!)
02987                 return $GLOBALS['T3_VAR']['softRefParser'][$spKey];
02988         }
02989 
02998         function explodeSoftRefParserList($parserList)  {
02999 
03000                         // Looking for global parsers:
03001                 if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['softRefParser_GL']))  {
03002                         $parserList = implode(',',array_keys($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['softRefParser_GL'])).','.$parserList;
03003                 }
03004 
03005                         // Return immediately if list is blank:
03006                 if (!strlen($parserList))       return FALSE;
03007 
03008                         // Otherwise parse the list:
03009                 $keyList = t3lib_div::trimExplode(',', $parserList, 1);
03010                 $output = array();
03011 
03012                 foreach($keyList as $val)       {
03013                         $reg = array();
03014                         if (ereg('^([[:alnum:]_-]+)\[(.*)\]$', $val, $reg))     {
03015                                 $output[$reg[1]] = t3lib_div::trimExplode(';', $reg[2], 1);
03016                         } else {
03017                                 $output[$val] = '';
03018                         }
03019                 }
03020                 return $output;
03021         }
03022 
03030         function isModuleSetInTBE_MODULES($modName)     {
03031                 reset($GLOBALS['TBE_MODULES']);
03032                 $loaded=array();
03033                 while(list($mkey,$list)=each($GLOBALS['TBE_MODULES']))  {
03034                         $loaded[$mkey]=1;
03035                         if (trim($list))        {
03036                                 $subList = t3lib_div::trimExplode(',',$list,1);
03037                                 while(list(,$skey)=each($subList))      {
03038                                         $loaded[$mkey.'_'.$skey]=1;
03039                                 }
03040                         }
03041                 }
03042                 return $modName && isset($loaded[$modName]);
03043         }
03044 
03053         function referenceCount($table,$ref,$msg='')    {
03054 
03055                 if ($table=='_FILE') {
03056 
03057                         if (t3lib_div::isFirstPartOfStr($ref,PATH_site))        {
03058                                 $ref = substr($ref,strlen(PATH_site));
03059                         } else return '';
03060 
03061                                 // Look up the path:
03062                         list($res) = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
03063                                 'count(*) as count',
03064                                 'sys_refindex',
03065                                 'ref_table='.$GLOBALS['TYPO3_DB']->fullQuoteStr($table,'sys_refindex').
03066                                         ' AND ref_string='.$GLOBALS['TYPO3_DB']->fullQuoteStr($ref,'sys_refindex').
03067                                         ' AND deleted=0'
03068                         );
03069 
03070                 } else {
03071                                 // Look up the path:
03072                         list($res) = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
03073                                 'count(*) as count',
03074                                 'sys_refindex',
03075                                 'ref_table='.$GLOBALS['TYPO3_DB']->fullQuoteStr($table,'sys_refindex').
03076                                         ' AND ref_uid='.intval($ref).
03077                                         ' AND deleted=0'
03078                         );
03079                 }
03080 
03081                 return $res['count'] ? ($msg ? sprintf($msg,$res['count']) : $res['count']) : '';
03082         }
03083 
03084 
03085 
03086 
03087 
03088 
03089 
03090 
03091 
03092 
03093 
03094 
03095 
03096 
03097         /*******************************************
03098          *
03099          * Workspaces / Versioning
03100          *
03101          *******************************************/
03102 
03112         function selectVersionsOfRecord($table, $uid, $fields='*', $workspace=0)        {
03113                 global $TCA;
03114 
03115                 if ($TCA[$table] && $TCA[$table]['ctrl']['versioningWS'])       {
03116 
03117                                 // Select all versions of record:
03118                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
03119                                 $fields,
03120                                 $table,
03121                                 '((t3ver_oid='.intval($uid).($workspace!=0?' AND t3ver_wsid='.intval($workspace):'').') OR uid='.intval($uid).')'.
03122                                         t3lib_BEfunc::deleteClause($table),
03123                                 '',
03124                                 't3ver_id DESC'
03125                         );
03126 
03127                                 // Add rows to output array:
03128                         $realPid = 0;
03129                         $outputRows = array();
03130                         while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))       {
03131                                 if ($uid==$row['uid'])  {
03132                                         $row['_CURRENT_VERSION']=TRUE;
03133                                         $realPid = $row['pid'];
03134                                 }
03135                                 $outputRows[] = $row;
03136                         }
03137 
03138                                 // Set real-pid:
03139                         foreach($outputRows as $idx => $oRow)   {
03140                                 $outputRows[$idx]['_REAL_PID'] = $realPid;
03141                         }
03142 
03143                         return $outputRows;
03144                 }
03145         }
03146 
03160         function fixVersioningPid($table,&$rr,$ignoreWorkspaceMatch=FALSE)      {
03161                 global $TCA;
03162 
03163                         // Check that the input record is an offline version from a table that supports versioning:
03164                 if (is_array($rr) && $rr['pid']==-1 && $TCA[$table]['ctrl']['versioningWS'])    {
03165 
03166                                 // Check values for t3ver_oid and t3ver_wsid:
03167                         if (isset($rr['t3ver_oid']) && isset($rr['t3ver_wsid']))        {       // If "t3ver_oid" is already a field, just set this:
03168                                 $oid = $rr['t3ver_oid'];
03169                                 $wsid = $rr['t3ver_wsid'];
03170                         } else {        // Otherwise we have to expect "uid" to be in the record and look up based on this:
03171                                 $newPidRec = t3lib_BEfunc::getRecord($table,$rr['uid'],'t3ver_oid,t3ver_wsid');
03172                                 if (is_array($newPidRec))       {
03173                                         $oid = $newPidRec['t3ver_oid'];
03174                                         $wsid = $newPidRec['t3ver_wsid'];
03175                                 }
03176                         }
03177 
03178                                 // If ID of current online version is found, look up the PID value of that:
03179                         if ($oid && ($ignoreWorkspaceMatch || !strcmp((int)$wsid,$GLOBALS['BE_USER']->workspace)))      {
03180                                 $oidRec = t3lib_BEfunc::getRecord($table,$oid,'pid');
03181                                 if (is_array($oidRec))  {
03182                                         $rr['_ORIG_pid'] = $rr['pid'];
03183                                         $rr['pid'] = $oidRec['pid'];
03184                                 }
03185                         }
03186                 }
03187         }
03188 
03200         function workspaceOL($table,&$row,$wsid=-99)    {
03201 
03202                         // Initialize workspace ID:
03203                 if ($wsid == -99)       $wsid = $GLOBALS['BE_USER']->workspace;
03204 
03205                         // Check if workspace is different from zero and record is set:
03206                 if ($wsid!==0 && is_array($row))        {
03207                         $wsAlt = t3lib_BEfunc::getWorkspaceVersionOfRecord($wsid, $table, $row['uid'], implode(',',array_keys($row)));
03208 
03209                                 // If version was found, swap the default record with that one.
03210                         if (is_array($wsAlt))   {
03211 
03212                                         // Always correct PID from -1 to what it should be:
03213                                 if (isset($wsAlt['pid']))       {
03214                                         $wsAlt['_ORIG_pid'] = $wsAlt['pid'];    // Keep the old (-1) - indicates it was a version...
03215                                         $wsAlt['pid'] = $row['pid'];            // Set in the online versions PID.
03216                                 }
03217 
03218                                         // For versions of single elements or page+content, swap UID and PID:
03219                                 if ($table!=='pages' || $wsAlt['t3ver_swapmode']<=0)    {
03220                                         $wsAlt['_ORIG_uid'] = $wsAlt['uid'];
03221                                         $wsAlt['uid'] = $row['uid'];
03222 
03223                                                 // Backend css class:
03224                                         $wsAlt['_CSSCLASS'] = $table==='pages' && $wsAlt['t3ver_swapmode']==0 ? 'ver-page' : 'ver-element';
03225                                 } else {        // This is only for page-versions with BRANCH below!
03226                                         $wsAlt['_ONLINE_uid'] = $row['uid'];
03227 
03228                                                 // Backend css class:
03229                                         $wsAlt['_CSSCLASS'] = 'ver-branchpoint';
03230                                         $wsAlt['_SUBCSSCLASS'] = 'ver-branch';
03231                                 }
03232 
03233                                         // Changing input record to the workspace version alternative:
03234                                 $row = $wsAlt;
03235                         }
03236                 }
03237         }
03238 
03248         function getWorkspaceVersionOfRecord($workspace, $table, $uid, $fields='*')     {
03249                 global $TCA;
03250 
03251                 if ($workspace!==0 && $TCA[$table] && $TCA[$table]['ctrl']['versioningWS'])     {
03252 
03253                                 // Select workspace version of record:
03254                         $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
03255                                 $fields,
03256                                 $table,
03257                                 'pid=-1 AND
03258                                  t3ver_oid='.intval($uid).' AND
03259                                  t3ver_wsid='.intval($workspace).
03260                                         t3lib_BEfunc::deleteClause($table)
03261                         );
03262 
03263                         if (is_array($rows[0])) return $rows[0];
03264                 }
03265 
03266                 return FALSE;
03267         }
03268 
03277         function getLiveVersionOfRecord($table,$uid,$fields='*')        {
03278                 global $TCA;
03279 
03280                         // Check that table supports versioning:
03281                 if ($TCA[$table] && $TCA[$table]['ctrl']['versioningWS'])       {
03282                         $rec = t3lib_BEfunc::getRecord($table,$uid,'pid,t3ver_oid');
03283 
03284                         if ($rec['pid']==-1)    {
03285                                 return t3lib_BEfunc::getRecord($table,$rec['t3ver_oid'],$fields);
03286                         }
03287                 }
03288         }
03289 
03299         function isPidInVersionizedBranch($pid, $table='',$returnStage=FALSE)   {
03300                 $rl = t3lib_BEfunc::BEgetRootLine($pid);
03301                 $c = 0;
03302 
03303                 foreach($rl as $rec)    {
03304                         if ($rec['_ORIG_pid']==-1)      {
03305                                         // In any case: is it a branchpoint, then OK...
03306                                 if ($rec['t3ver_swapmode']>0)   {
03307                                         return $returnStage ? (int)$rec['t3ver_stage'] : 'branchpoint'; // OK, we are in a versionized branch
03308                                 } elseif ($c==0 && $rec['t3ver_swapmode']==0 && $table && $GLOBALS['TCA'][$table]['ctrl']['versioning_followPages'])    {       // First level: So $table must be versioning_followPages
03309                                         return $returnStage ? (int)$rec['t3ver_stage'] : 'first';       // OK, we are in a versionized branch
03310                                 }
03311                         }
03312                         $c++;
03313                 }
03314         }
03315 
03322         function versioningPlaceholderClause($table)    {
03323                 if ($GLOBALS['BE_USER']->workspace!==0 && $GLOBALS['TCA'][$table] && $GLOBALS['TCA'][$table]['ctrl']['versioningWS'])   {
03324                         return ' AND ('.$table.'.t3ver_state!=1 OR '.$table.'.t3ver_wsid='.intval($GLOBALS['BE_USER']->workspace).')';
03325                 }
03326         }
03327 
03336         function countVersionsOfRecordsOnPage($workspace,$pageId, $allTables=FALSE)     {
03337                 $output = array();
03338                 if ($workspace!=0)      {
03339                         foreach($GLOBALS['TCA'] as $tableName => $cfg)  {
03340                                 if ($tableName!='pages' && $cfg['ctrl']['versioningWS'] && ($cfg['ctrl']['versioning_followPages'] || $allTables))      {
03341 
03342                                                 // Select all records from this table in the database from the workspace
03343                                                 // This joins the online version with the offline version as tables A and B
03344                                         $output[$tableName] = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows (
03345                                                 'B.uid as live_uid, A.uid as offline_uid',
03346                                                 $tableName.' A,'.$tableName.' B',
03347                                                 'A.pid=-1'.     // Table A is the offline version and pid=-1 defines offline
03348                                                         ' AND B.pid='.intval($pageId).
03349                                                         ' AND A.t3ver_wsid='.intval($workspace).
03350                                                         ' AND A.t3ver_oid=B.uid'.       // ... and finally the join between the two tables.
03351                                                         t3lib_BEfunc::deleteClause($tableName,'A').
03352                                                         t3lib_BEfunc::deleteClause($tableName,'B')
03353                                         );
03354 
03355                                         if (!is_array($output[$tableName]) || !count($output[$tableName]))      {
03356                                                 unset($output[$tableName]);
03357                                         }
03358                                 }
03359                         }
03360                 }
03361                 return $output;
03362         }
03363 
03371         function wsMapId($table,$uid)   {
03372                 if ($wsRec = t3lib_BEfunc::getWorkspaceVersionOfRecord($GLOBALS['BE_USER']->workspace,$table,$uid,'uid'))       {
03373                         return $wsRec['uid'];
03374                 } else {
03375                         return $uid;
03376                 }
03377         }
03378 
03379 
03380 
03381 
03382 
03383 
03384 
03385         /*******************************************
03386          *
03387          * Miscellaneous
03388          *
03389          *******************************************/
03390 
03401         function typo3PrintError($header,$text,$js='',$head=1)  {
03402                         // This prints out a TYPO3 error message.
03403                         // If $js is set the message will be output in JavaScript
03404                 if ($js)        {
03405                         echo "alert('".t3lib_div::slashJS($header.'\n'.$text)."');";
03406                 } else {
03407                         echo $head?'<html>
03408                                 <head>
03409                                         <title>Error!</title>
03410                                 </head>
03411                                 <body bgcolor="white" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">':'';
03412                         echo '<div align="center">
03413                                         <table border="0" cellspacing="0" cellpadding="0" width="333">
03414                                                 <tr>
03415                                                         <td align="center">'.
03416                                                                 ($GLOBALS['TBE_STYLES']['logo_login']?'<img src="'.$GLOBALS['BACK_PATH'].$GLOBALS['TBE_STYLES']['logo_login'].'" alt="" />':'<img src="'.$GLOBALS['BACK_PATH'].'gfx/typo3logo.gif" width="123" height="34" vspace="10" />').
03417                                                         '</td>
03418                                                 </tr>
03419                                                 <tr>
03420                                                         <td bgcolor="black">
03421                                                                 <table width="100%" border="0" cellspacing="1" cellpadding="10">
03422                                                                         <tr>
03423                                                                                 <td bgcolor="#F4F0E8">
03424                                                                                         <font face="verdana,arial,helvetica" size="2">';
03425                         echo '<b><center><font size="+1">'.$header.'</font></center></b><br />'.$text;
03426                         echo '                                                  </font>
03427                                                                                 </td>
03428                                                                         </tr>
03429                                                                 </table>
03430                                                         </td>
03431                                                 </tr>
03432                                         </table>
03433                                 </div>';
03434                         echo $head?'
03435                                 </body>
03436                         </html>':'';
03437                 }
03438         }
03439 
03445         function TYPO3_copyRightNotice()        {
03446                 global $TYPO3_CONF_VARS;
03447 
03448                         // COPYRIGHT NOTICE:
03449                 $loginCopyrightWarrantyProvider = strip_tags(trim($TYPO3_CONF_VARS['SYS']['loginCopyrightWarrantyProvider']));
03450                 $loginCopyrightWarrantyURL = strip_tags(trim($TYPO3_CONF_VARS['SYS']['loginCopyrightWarrantyURL']));
03451 
03452                 if (strlen($loginCopyrightWarrantyProvider)>=2 && strlen($loginCopyrightWarrantyURL)>=10)       {
03453                         $warrantyNote='Warranty is supplied by '.htmlspecialchars($loginCopyrightWarrantyProvider).'; <a href="'.htmlspecialchars($loginCopyrightWarrantyURL).'" target="_blank">click for details.</a>';
03454                 } else {
03455                         $warrantyNote='TYPO3 comes with ABSOLUTELY NO WARRANTY; <a href="http://typo3.com/1316.0.html" target="_blank">click for details.</a>';
03456                 }
03457                 $cNotice = '<a href="http://typo3.com/" target="_blank"><img src="gfx/loginlogo_transp.gif" width="75" vspace="2" hspace="4" height="19" alt="TYPO3 logo" align="left" />TYPO3 CMS ver. '.htmlspecialchars(TYPO3_version).'</a>. Copyright &copy; '.htmlspecialchars(TYPO3_copyright_year).' Kasper Sk&aring;rh&oslash;j. Extensions are copyright of their respective owners. Go to <a href="http://typo3.com/" target="_blank">http://typo3.com/</a> for details.
03458                 '.strip_tags($warrantyNote,'<a>').' This is free software, and you are welcome to redistribute it under certain conditions; <a href="http://typo3.com/1316.0.html" target="_blank">click for details</a>. Obstructing the appearance of this notice is prohibited by law.';
03459 
03460                 return $cNotice;
03461         }
03462 
03469         function displayWarningMessages()       {
03470                 if($GLOBALS['BE_USER']->isAdmin())      {
03471                         $warnings = array();
03472 
03473                                 // Check if the Install Tool Password is still default: joh316
03474                         if($GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword']==md5('joh316'))     {
03475                                 $warnings[] = 'The password of your Install Tool is still using the default value "joh316"';
03476                         }
03477 
03478                                 // Check if there is still a default user 'admin' with password 'password' (MD5sum = 5f4dcc3b5aa765d61d8327deb882cf99)
03479                         $where_clause = 'username='.$GLOBALS['TYPO3_DB']->fullQuoteStr('admin','be_users').' AND password='.$GLOBALS['TYPO3_DB']->fullQuoteStr('5f4dcc3b5aa765d61d8327deb882cf99','be_users').t3lib_BEfunc::deleteClause('be_users');
03480                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('username, password', 'be_users', $where_clause);
03481                         if ($GLOBALS['TYPO3_DB']->sql_num_rows($res))   {
03482                                 $warnings[] = 'The backend user "admin" with password "password" is still existing';
03483                         }
03484 
03485                                 // Check if the encryption key is empty
03486                         if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] == '')  {
03487                                 $url = 'install/index.php?redirect_url=index.php'.urlencode('?TYPO3_INSTALL[type]=config#set_encryptionKey');
03488                                 $warnings[] = 'The encryption key is not set! Set it in <a href="'.$url.'">$TYPO3_CONF_VARS[SYS][encryptionKey]</a>';
03489                         }
03490 
03491                                 // check if there are still updates to perform
03492                         if (!t3lib_div::compat_version(TYPO3_branch))   {
03493                                 $url = 'install/index.php?redirect_url=index.php'.urlencode('?TYPO3_INSTALL[type]=update');
03494                                 $warnings[] = 'This installation is not configured for the TYPO3 version it is running. You probably did so by intention, in this case you can safely ignore this message. If unsure, visit the <a href="'.$url.'" target="_blank">Update Wizard</a> in the Install Tool to see which changes would be affected.';
03495                         }
03496 
03497                                 // check if sys_refindex is empty
03498                         if (is_object($GLOBALS['TYPO3_DB']))    {
03499                                 list($count) = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('count(*) as rcount','sys_refindex','1=1');
03500                                 if (!$count['rcount'])  {
03501                                         $warnings[] = 'The Reference Index table is empty which is likely to be the case because you just upgraded your TYPO3 source. Please go to Tools>DB Check and update the reference index.';
03502                                 }
03503                         }
03504 
03505                         if(count($warnings))    {
03506                                 $content = '<table border="0" cellpadding="0" cellspacing="0" class="warningbox"><tr><td>'.
03507                                         $GLOBALS['TBE_TEMPLATE']->icons(3).'Important notice!<br />'.
03508                                         '- '.implode('<br />- ', $warnings).'<br /><br />'.
03509                                         'It is highly recommended that you change this immediately.'.
03510                                         '</td></tr></table>';
03511 
03512                                 unset($warnings);
03513                                 return $content;
03514                         }
03515                 }
03516                 return '<p>&nbsp;</p>';
03517         }
03518 
03526         function getPathType_web_nonweb($path)  {
03527                 return t3lib_div::isFirstPartOfStr($path,t3lib_div::getIndpEnv('TYPO3_DOCUMENT_ROOT')) ? 'web' : '';
03528         }
03529 
03538         function ADMCMD_previewCmds($pageinfo)  {
03539                 if ($pageinfo['fe_group']>0)    {
03540                         $simUser = '&ADMCMD_simUser='.$pageinfo['fe_group'];
03541                 }
03542                 if ($pageinfo['starttime']>time())      {
03543                         $simTime = '&ADMCMD_simTime='.$pageinfo['starttime'];
03544                 }
03545                 if ($pageinfo['endtime']<time() && $pageinfo['endtime']!=0)     {
03546                         $simTime = '&ADMCMD_simTime='.($pageinfo['endtime']-1);
03547                 }
03548                 return $simUser.$simTime;
03549         }
03550 
03560         function processParams($params) {
03561                 $paramArr=array();
03562                 $lines=explode(chr(10),$params);
03563                 while(list(,$val)=each($lines)) {
03564                         $val = trim($val);
03565                         if ($val)       {
03566                                 $pair = explode('=',$val,2);
03567                                 $paramArr[trim($pair[0])] = trim($pair[1]);
03568                         }
03569                 }
03570                 return $paramArr;
03571         }
03572 
03586         function getListOfBackendModules($name,$perms_clause,$backPath='',$script='index.php')  {
03587                 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'pages', 'doktype!=255 AND module IN (\''.implode('\',\'',$name).'\') AND'.$perms_clause.t3lib_BEfunc::deleteClause('pages'));
03588                 if (!$GLOBALS['TYPO3_DB']->sql_num_rows($res))  return false;
03589 
03590                 $out='';
03591                 $theRows=array();
03592                 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))       {
03593                         $theRows[]=$row;
03594                         $out.='<span class="nobr"><a href="'.htmlspecialchars($script.'?id='.$row['uid']).'">'.
03595                                         t3lib_iconWorks::getIconImage('pages',$row,$backPath,'title="'.htmlspecialchars(t3lib_BEfunc::getRecordPath($row['uid'],$perms_clause,20)).'" align="top"').
03596                                         htmlspecialchars($row['title']).
03597                                         '</a></span><br />';
03598                 }
03599                 return array('rows'=>$theRows,'list'=>$out);
03600         }
03601 }
03602 ?>