00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00168 class t3lib_BEfunc {
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00188 function deleteClause($table) {
00189 global $TCA;
00190 if ($TCA[$table]['ctrl']['delete']) {
00191 return ' AND NOT '.$table.'.'.$TCA[$table]['ctrl']['delete'];
00192 } else {
00193 return '';
00194 }
00195 }
00196
00211 function getRecord($table,$uid,$fields='*',$where='') {
00212 if ($GLOBALS['TCA'][$table]) {
00213 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, $table, 'uid='.intval($uid).t3lib_BEfunc::deleteClause($table).$where);
00214 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00215 return $row;
00216 }
00217 }
00218 }
00219
00233 function getRecordRaw($table,$where='',$fields='*') {
00234 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, $table, $where);
00235 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00236 return $row;
00237 }
00238 }
00239
00255 function getRecordsByField($theTable,$theField,$theValue,$whereClause='',$groupBy='',$orderBy='',$limit='') {
00256 global $TCA;
00257 if (is_array($TCA[$theTable])) {
00258 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00259 '*',
00260 $theTable,
00261 $theField.'="'.$GLOBALS['TYPO3_DB']->quoteStr($theValue, $theTable).'"'.
00262 t3lib_BEfunc::deleteClause($theTable).' '.
00263 $whereClause,
00264 $groupBy,
00265 $orderBy,
00266 $limit
00267 );
00268 $rows = array();
00269 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00270 $rows[] = $row;
00271 }
00272 $GLOBALS['TYPO3_DB']->sql_free_result($res);
00273 if (count($rows)) return $rows;
00274 }
00275 }
00276
00286 function fixVersioningPid($table,&$rr) {
00287 global $TCA;
00288
00289 if ($rr['pid']==-1 && $TCA[$table]['ctrl']['versioning']) {
00290 if ($rr['t3ver_oid']>0) {
00291 $oid = $rr['t3ver_oid'];
00292 } else {
00293 $newPidRec = t3lib_BEfunc::getRecord($table,$rr['uid'],'t3ver_oid');
00294 if (is_array($newPidRec)) {
00295 $oid = $newPidRec['t3ver_oid'];
00296 }
00297 }
00298
00299
00300 if ($oid) {
00301 $oidRec = t3lib_BEfunc::getRecord($table,$oid,'pid');
00302 if (is_array($oidRec)) {
00303 $rr['_ORIG_pid'] = $rr['pid'];
00304 $rr['pid'] = $oidRec['pid'];
00305 }
00306 }
00307 }
00308 }
00309
00320 function searchQuery($searchWords,$fields,$table='') {
00321 return $GLOBALS['TYPO3_DB']->searchQuery($searchWords,$fields,$table);
00322 }
00323
00335 function listQuery($field,$value) {
00336 return $GLOBALS['TYPO3_DB']->listQuery($field,$value,'');
00337 }
00338
00347 function splitTable_Uid($str) {
00348 list($uid,$table) = explode('_',strrev($str),2);
00349 return array(strrev($table),strrev($uid));
00350 }
00351
00362 function getSQLselectableList($in_list,$tablename,$default_tablename) {
00363 $list = Array();
00364 if ((string)trim($in_list)!='') {
00365 $tempItemArray = explode(',',trim($in_list));
00366 while(list($key,$val)=each($tempItemArray)) {
00367 $val = strrev($val);
00368 $parts = explode('_',$val,2);
00369 if ((string)trim($parts[0])!='') {
00370 $theID = intval(strrev($parts[0]));
00371 $theTable = trim($parts[1]) ? strrev(trim($parts[1])) : $default_tablename;
00372 if ($theTable==$tablename) {$list[]=$theID;}
00373 }
00374 }
00375 }
00376 return implode(',',$list);
00377 }
00378
00390 function BEenableFields($table,$inv=0) {
00391 $ctrl = $GLOBALS['TCA'][$table]['ctrl'];
00392 $query=array();
00393 $invQuery=array();
00394 if (is_array($ctrl)) {
00395 if (is_array($ctrl['enablecolumns'])) {
00396 if ($ctrl['enablecolumns']['disabled']) {
00397 $field = $table.'.'.$ctrl['enablecolumns']['disabled'];
00398 $query[]='NOT '.$field;
00399 $invQuery[]=$field;
00400 }
00401 if ($ctrl['enablecolumns']['starttime']) {
00402 $field = $table.'.'.$ctrl['enablecolumns']['starttime'];
00403 $query[]='('.$field.'<='.$GLOBALS['SIM_EXEC_TIME'].')';
00404 $invQuery[]='('.$field.'!=0 AND '.$field.'>'.$GLOBALS['SIM_EXEC_TIME'].')';
00405 }
00406 if ($ctrl['enablecolumns']['endtime']) {
00407 $field = $table.'.'.$ctrl['enablecolumns']['endtime'];
00408 $query[]='('.$field.'=0 OR '.$field.'>'.$GLOBALS['SIM_EXEC_TIME'].')';
00409 $invQuery[]='('.$field.'!=0 AND '.$field.'<='.$GLOBALS['SIM_EXEC_TIME'].')';
00410 }
00411 }
00412 }
00413 $outQ = ' AND '.($inv ? '('.implode(' OR ',$invQuery).')' : implode(' AND ',$query));
00414
00415 return $outQ;
00416 }
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00454 function mm_query($select,$local_table,$mm_table,$foreign_table,$whereClause='',$groupBy='',$orderBy='',$limit='') {
00455 $query = $GLOBALS['TYPO3_DB']->SELECTquery(
00456 $select,
00457 $local_table.','.$mm_table.($foreign_table?','.$foreign_table:''),
00458 $local_table.'.uid='.$mm_table.'.uid_local'.($foreign_table?' AND '.$foreign_table.'.uid='.$mm_table.'.uid_foreign':'').' '.
00459 $whereClause,
00460 $groupBy,
00461 $orderBy,
00462 $limit
00463 );
00464 return $query;
00465 }
00466
00476 function DBcompileInsert($table,$fields_values) {
00477 return $GLOBALS['TYPO3_DB']->INSERTquery($table, $fields_values);
00478 }
00479
00490 function DBcompileUpdate($table,$where,$fields_values) {
00491 return $GLOBALS['TYPO3_DB']->UPDATEquery($table, $where, $fields_values);
00492 }
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00519 function BEgetRootLine($uid,$clause='') {
00520 $loopCheck = 100;
00521 $theRowArray = Array();
00522 $output=Array();
00523 while ($uid!=0 && $loopCheck>0) {
00524 $loopCheck--;
00525 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00526 'pid,uid,title,TSconfig,is_siteroot,storage_pid',
00527 'pages',
00528 'uid='.intval($uid).' '.
00529 t3lib_BEfunc::deleteClause('pages').' '.
00530 $clause
00531 );
00532 if ($GLOBALS['TYPO3_DB']->sql_error()) {
00533 debug($GLOBALS['TYPO3_DB']->sql_error(),1);
00534 }
00535 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00536 t3lib_BEfunc::fixVersioningPid('pages',$row);
00537 $uid = $row['pid'];
00538 $theRowArray[]=$row;
00539 } else {
00540 break;
00541 }
00542 }
00543 if ($uid==0) {$theRowArray[]=Array('uid'=>0,'title'=>'');}
00544 if (is_array($theRowArray)) {
00545 reset($theRowArray);
00546 $c=count($theRowArray);
00547 while(list($key,$val)=each($theRowArray)) {
00548 $c--;
00549 $output[$c]['uid'] = $val['uid'];
00550 $output[$c]['pid'] = $val['pid'];
00551 if (isset($val['_ORIG_pid'])) $output[$c]['_ORIG_pid'] = $val['_ORIG_pid'];
00552 $output[$c]['title'] = $val['title'];
00553 $output[$c]['TSconfig'] = $val['TSconfig'];
00554 $output[$c]['is_siteroot'] = $val['is_siteroot'];
00555 $output[$c]['storage_pid'] = $val['storage_pid'];
00556 }
00557 }
00558 return $output;
00559 }
00560
00568 function openPageTree($pid,$clearExpansion) {
00569 global $BE_USER;
00570
00571
00572 if ($clearExpansion) {
00573 $expandedPages = array();
00574 } else {
00575 $expandedPages = unserialize($BE_USER->uc['browseTrees']['browsePages']);
00576 }
00577
00578
00579 $rL = t3lib_BEfunc::BEgetRootLine($pid);
00580
00581
00582 $mountIndex = 0;
00583 $mountKeys = array_flip($BE_USER->returnWebmounts());
00584 foreach($rL as $rLDat) {
00585 if (isset($mountKeys[$rLDat['uid']])) {
00586 $mountIndex = $mountKeys[$rLDat['uid']];
00587 break;
00588 }
00589 }
00590
00591
00592 foreach($rL as $rLDat) {
00593 $expandedPages[$mountIndex][$rLDat['uid']] = 1;
00594 }
00595
00596
00597 $BE_USER->uc['browseTrees']['browsePages'] = serialize($expandedPages);
00598 $BE_USER->writeUC();
00599 }
00600
00613 function getRecordPath($uid, $clause, $titleLimit, $fullTitleLimit=0) {
00614 if (!$titleLimit) { $titleLimit=1000; }
00615
00616 $loopCheck = 100;
00617 $output = $fullOutput = '/';
00618 while ($uid!=0 && $loopCheck>0) {
00619 $loopCheck--;
00620 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00621 'uid,pid,title',
00622 'pages',
00623 'uid='.intval($uid).
00624 t3lib_BEfunc::deleteClause('pages').
00625 (strlen(trim($clause)) ? ' AND '.$clause : '')
00626 );
00627 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00628 t3lib_BEfunc::fixVersioningPid('pages',$row);
00629
00630 if ($row['_ORIG_pid']) {
00631 $output = ' [#VEP#]'.$output;
00632 }
00633 $uid = $row['pid'];
00634 $output = '/'.t3lib_div::fixed_lgd_cs(strip_tags($row['title']),$titleLimit).$output;
00635 if ($fullTitleLimit) $fullOutput = '/'.t3lib_div::fixed_lgd_cs(strip_tags($row['title']),$fullTitleLimit).$fullOutput;
00636 } else {
00637 break;
00638 }
00639 }
00640
00641 if ($fullTitleLimit) {
00642 return array($output, $fullOutput);
00643 } else {
00644 return $output;
00645 }
00646 }
00647
00655 function getExcludeFields() {
00656 global $TCA;
00657
00658 $theExcludeArray = Array();
00659 $tc_keys = array_keys($TCA);
00660 foreach($tc_keys as $table) {
00661
00662 t3lib_div::loadTCA($table);
00663
00664 if (is_array($TCA[$table]['columns'])) {
00665 $f_keys = array_keys($TCA[$table]['columns']);
00666 foreach($f_keys as $field) {
00667 if ($TCA[$table]['columns'][$field]['exclude']) {
00668
00669 $Fname=$GLOBALS['LANG']->sl($TCA[$table]['ctrl']['title']).': '.$GLOBALS['LANG']->sl($TCA[$table]['columns'][$field]['label']);
00670
00671 $theExcludeArray[] = Array($Fname , $table.':'.$field);
00672 }
00673 }
00674 }
00675 }
00676 return $theExcludeArray;
00677 }
00678
00685 function getExplicitAuthFieldValues() {
00686 global $TCA;
00687
00688
00689 $adLabel = array(
00690 'ALLOW' => $GLOBALS['LANG']->sl('LLL:EXT:lang/locallang_core.xml:labels.allow'),
00691 'DENY' => $GLOBALS['LANG']->sl('LLL:EXT:lang/locallang_core.xml:labels.deny'),
00692 );
00693
00694
00695 $allowDenyOptions = Array();
00696 $tc_keys = array_keys($TCA);
00697 foreach($tc_keys as $table) {
00698
00699
00700 t3lib_div::loadTCA($table);
00701
00702
00703 if (is_array($TCA[$table]['columns'])) {
00704 $f_keys = array_keys($TCA[$table]['columns']);
00705 foreach($f_keys as $field) {
00706 $fCfg = $TCA[$table]['columns'][$field]['config'];
00707 if ($fCfg['type']=='select' && $fCfg['authMode']) {
00708
00709
00710 if (is_array($fCfg['items'])) {
00711
00712 $allowDenyOptions[$table.':'.$field]['tableFieldLabel'] = $GLOBALS['LANG']->sl($TCA[$table]['ctrl']['title']).': '.$GLOBALS['LANG']->sl($TCA[$table]['columns'][$field]['label']);
00713
00714
00715 foreach($fCfg['items'] as $iVal) {
00716 if (strcmp($iVal[1],'')) {
00717
00718
00719 $iMode = '';
00720 switch((string)$fCfg['authMode']) {
00721 case 'explicitAllow':
00722 $iMode = 'ALLOW';
00723 break;
00724 case 'explicitDeny':
00725 $iMode = 'DENY';
00726 break;
00727 case 'individual':
00728 if (!strcmp($iVal[4],'EXPL_ALLOW')) {
00729 $iMode = 'ALLOW';
00730 } elseif (!strcmp($iVal[4],'EXPL_DENY')) {
00731 $iMode = 'DENY';
00732 }
00733 break;
00734 }
00735
00736
00737 if ($iMode) {
00738 $allowDenyOptions[$table.':'.$field]['items'][$iVal[1]] = array($iMode, $GLOBALS['LANG']->sl($iVal[0]), $adLabel[$iMode]);
00739 }
00740 }
00741 }
00742 }
00743 }
00744 }
00745 }
00746 }
00747
00748 return $allowDenyOptions;
00749 }
00750
00756 function getSystemLanguages() {
00757
00758
00759 $sysLanguages = array();
00760 $sysLanguages[] = array('Default language', 0);
00761
00762
00763 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid,title,flag','sys_language','pid=0'.t3lib_BEfunc::deleteClause('sys_language'));
00764 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00765 $sysLanguages[] = array($row['title'].' ['.$row['uid'].']', $row['uid'], ($row['flag'] ? '../t3lib/gfx/flags/'.$row['flag'] : ''));
00766 }
00767
00768 return $sysLanguages;
00769 }
00770
00781 function readPageAccess($id,$perms_clause) {
00782 if ((string)$id!='') {
00783 $id = intval($id);
00784 if (!$id) {
00785 if ($GLOBALS['BE_USER']->isAdmin()) {
00786 $path = '/';
00787 $pageinfo['_thePath'] = $path;
00788 return $pageinfo;
00789 }
00790 } else {
00791 $pageinfo = t3lib_BEfunc::getRecord('pages',$id,'*',($perms_clause ? ' AND '.$perms_clause : ''));
00792 if ($pageinfo['uid'] && $GLOBALS['BE_USER']->isInWebMount($id,$perms_clause)) {
00793 list($pageinfo['_thePath'],$pageinfo['_thePathFull']) = t3lib_BEfunc::getRecordPath(intval($pageinfo['uid']), $perms_clause, 15, 1000);
00794 return $pageinfo;
00795 }
00796 }
00797 }
00798 return false;
00799 }
00800
00810 function getTCAtypes($table,$rec,$useFieldNameAsKey=0) {
00811 global $TCA;
00812
00813 t3lib_div::loadTCA($table);
00814 if ($TCA[$table]) {
00815
00816
00817 $fieldValue = t3lib_BEfunc::getTCAtypeValue($table,$rec);
00818
00819
00820 $typesConf = $TCA[$table]['types'][$fieldValue];
00821
00822
00823 $fieldList = explode(',', $typesConf['showitem']);
00824 $altFieldList = array();
00825
00826
00827 foreach($fieldList as $k => $v) {
00828 list($pFieldName, $pAltTitle, $pPalette, $pSpec) = t3lib_div::trimExplode(';', $v);
00829 $defaultExtras = is_array($TCA[$table]['columns'][$pFieldName]) ? $TCA[$table]['columns'][$pFieldName]['defaultExtras'] : '';
00830 $specConfParts = t3lib_BEfunc::getSpecConfParts($pSpec, $defaultExtras);
00831
00832 $fieldList[$k]=array(
00833 'field' => $pFieldName,
00834 'title' => $pAltTitle,
00835 'palette' => $pPalette,
00836 'spec' => $specConfParts,
00837 'origString' => $v
00838 );
00839 if ($useFieldNameAsKey) {
00840 $altFieldList[$fieldList[$k]['field']] = $fieldList[$k];
00841 }
00842 }
00843 if ($useFieldNameAsKey) {
00844 $fieldList = $altFieldList;
00845 }
00846
00847
00848 return $fieldList;
00849 }
00850 }
00851
00863 function getTCAtypeValue($table,$rec) {
00864 global $TCA;
00865
00866
00867 t3lib_div::loadTCA($table);
00868 if ($TCA[$table]) {
00869 $field = $TCA[$table]['ctrl']['type'];
00870 $fieldValue = $field ? ($rec[$field] ? $rec[$field] : 0) : 0;
00871 if (!is_array($TCA[$table]['types'][$fieldValue])) $fieldValue = 1;
00872 return $fieldValue;
00873 }
00874 }
00875
00886 function getSpecConfParts($str, $defaultExtras) {
00887
00888
00889 $specConfParts = t3lib_div::trimExplode(':', $defaultExtras.':'.$str, 1);
00890
00891 if (count($specConfParts)) {
00892 foreach($specConfParts as $k2 => $v2) {
00893 unset($specConfParts[$k2]);
00894 if (ereg('(.*)\[(.*)\]',$v2,$reg)) {
00895 $specConfParts[trim($reg[1])] = array(
00896 'parameters' => t3lib_div::trimExplode('|', $reg[2], 1)
00897 );
00898 } else {
00899 $specConfParts[trim($v2)] = 1;
00900 }
00901 }
00902 } else {
00903 $specConfParts = array();
00904 }
00905 return $specConfParts;
00906 }
00907
00916 function getSpecConfParametersFromArray($pArr) {
00917 $out=array();
00918 if (is_array($pArr)) {
00919 reset($pArr);
00920 while(list($k,$v)=each($pArr)) {
00921 $parts=explode('=',$v,2);
00922 if (count($parts)==2) {
00923 $out[trim($parts[0])]=trim($parts[1]);
00924 } else {
00925 $out[$k]=$v;
00926 }
00927 }
00928 }
00929 return $out;
00930 }
00931
00942 function getFlexFormDS($conf,$row,$table) {
00943
00944
00945 $ds_pointerField = $conf['ds_pointerField'];
00946 $ds_array = $conf['ds'];
00947 $ds_tableField = $conf['ds_tableField'];
00948 $ds_searchParentField = $conf['ds_pointerField_searchParent'];
00949
00950
00951 $dataStructArray='';
00952 if (is_array($ds_array)) {
00953
00954 if ($ds_pointerField) {
00955 $srcPointer = $row[$ds_pointerField];
00956 $srcPointer = isset($ds_array[$srcPointer]) ? $srcPointer : 'default';
00957 } else $srcPointer='default';
00958
00959
00960 if (substr($ds_array[$srcPointer],0,5)=='FILE:') {
00961 $file = t3lib_div::getFileAbsFileName(substr($ds_array[$srcPointer],5));
00962 if ($file && @is_file($file)) {
00963 $dataStructArray = t3lib_div::xml2array(t3lib_div::getUrl($file));
00964 } else $dataStructArray = 'The file "'.substr($dsSrc,5).'" in ds-array key "'.$srcPointer.'" was not found ("'.$file.'")';
00965 } else {
00966 $dataStructArray = t3lib_div::xml2array($ds_array[$srcPointer]);
00967 }
00968
00969 } elseif ($ds_pointerField) {
00970
00971 $srcPointer = $row[$ds_pointerField];
00972
00973
00974 if ($ds_searchParentField && !$srcPointer) {
00975 $rr = t3lib_BEfunc::getRecord($table,$row['uid'],'uid,'.$ds_searchParentField);
00976 t3lib_BEfunc::fixVersioningPid($table,$rr);
00977 $uidAcc=array();
00978 $subFieldPointer = $conf['ds_pointerField_searchParent_subField'];
00979 while(!$srcPointer) {
00980 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00981 'uid,'.$ds_pointerField.','.$ds_searchParentField.($subFieldPointer?','.$subFieldPointer:''),
00982 $table,
00983 'uid='.intval($rr[$ds_searchParentField]).t3lib_BEfunc::deleteClause($table)
00984 );
00985 $rr = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
00986
00987
00988 if (!is_array($rr) || isset($uidAcc[$rr['uid']])) break;
00989 $uidAcc[$rr['uid']]=1;
00990
00991 t3lib_BEfunc::fixVersioningPid($table,$rr);
00992 $srcPointer = ($subFieldPointer && $rr[$subFieldPointer]) ? $rr[$subFieldPointer] : $rr[$ds_pointerField];
00993 }
00994 }
00995
00996
00997 if ($srcPointer) {
00998 if (t3lib_div::testInt($srcPointer)) {
00999 list($tName,$fName) = explode(':',$ds_tableField,2);
01000 if ($tName && $fName && is_array($GLOBALS['TCA'][$tName])) {
01001 $dataStructRec = t3lib_BEfunc::getRecord($tName, $srcPointer);
01002 $dataStructArray = t3lib_div::xml2array($dataStructRec[$fName]);
01003 } else $dataStructArray = 'No tablename ('.$tName.') or fieldname ('.$fName.') was found an valid!';
01004 } else {
01005 $file = t3lib_div::getFileAbsFileName($srcPointer);
01006 if ($file && @is_file($file)) {
01007 $dataStructArray = t3lib_div::xml2array(t3lib_div::getUrl($file));
01008 } else $dataStructArray='The file "'.$srcPointer.'" was not found ("'.$file.'")';
01009 }
01010 } else $dataStructArray='No source value in fieldname "'.$ds_pointerField.'"';
01011 } else $dataStructArray='No proper configuration!';
01012 return $dataStructArray;
01013 }
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023
01024
01025
01026
01027
01028
01029
01030
01031
01032
01033
01034
01035
01036
01037
01048 function storeHash($hash,$data,$ident) {
01049 $insertFields = array(
01050 'hash' => $hash,
01051 'content' => $data,
01052 'ident' => $ident,
01053 'tstamp' => time()
01054 );
01055 $GLOBALS['TYPO3_DB']->exec_DELETEquery('cache_hash', 'hash="'.$GLOBALS['TYPO3_DB']->quoteStr($hash, 'cache_hash').'"');
01056 $GLOBALS['TYPO3_DB']->exec_INSERTquery('cache_hash', $insertFields);
01057 }
01058
01068 function getHash($hash,$expTime) {
01069
01070 $expTime = intval($expTime);
01071 if ($expTime) {
01072 $whereAdd = ' AND tstamp > '.(time()-$expTime);
01073 }
01074 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('content', 'cache_hash', 'hash="'.$GLOBALS['TYPO3_DB']->quoteStr($hash, 'cache_hash').'"'.$whereAdd);
01075 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
01076 return $row['content'];
01077 }
01078 }
01079
01080
01081
01082
01083
01084
01085
01086
01087
01088
01089
01090
01091
01092
01104 function getPagesTSconfig($id,$rootLine='',$returnPartArray=0) {
01105 $id=intval($id);
01106 if (!is_array($rootLine)) {
01107 $rootLine = t3lib_BEfunc::BEgetRootLine($id,'');
01108 }
01109 ksort($rootLine);
01110 reset($rootLine);
01111 $TSdataArray = array();
01112 $TSdataArray['defaultPageTSconfig']=$GLOBALS['TYPO3_CONF_VARS']['BE']['defaultPageTSconfig'];
01113 while(list($k,$v)=each($rootLine)) {
01114 $TSdataArray['uid_'.$v['uid']]=$v['TSconfig'];
01115 }
01116 $TSdataArray = t3lib_TSparser::checkIncludeLines_array($TSdataArray);
01117 if ($returnPartArray) {
01118 return $TSdataArray;
01119 }
01120
01121
01122 $userTS = implode($TSdataArray,chr(10).'[GLOBAL]'.chr(10));
01123 $hash = md5('pageTS:'.$userTS);
01124 $cachedContent = t3lib_BEfunc::getHash($hash,0);
01125 $TSconfig = array();
01126 if (isset($cachedContent)) {
01127 $TSconfig = unserialize($cachedContent);
01128 } else {
01129 $parseObj = t3lib_div::makeInstance('t3lib_TSparser');
01130 $parseObj->parse($userTS);
01131 $TSconfig = $parseObj->setup;
01132 t3lib_BEfunc::storeHash($hash,serialize($TSconfig),'PAGES_TSconfig');
01133 }
01134 return $TSconfig;
01135 }
01136
01155 function updatePagesTSconfig($id,$pageTS,$TSconfPrefix,$impParams='') {
01156 $id=intval($id);
01157 if (is_array($pageTS) && $id>0) {
01158 if (!is_array($impParams)) {
01159 $impParams =t3lib_BEfunc::implodeTSParams(t3lib_BEfunc::getPagesTSconfig($id));
01160 }
01161 reset($pageTS);
01162 $set=array();
01163 while(list($f,$v)=each($pageTS)) {
01164 $f = $TSconfPrefix.$f;
01165 if ((!isset($impParams[$f])&&trim($v)) || strcmp(trim($impParams[$f]),trim($v))) {
01166 $set[$f]=trim($v);
01167 }
01168 }
01169 if (count($set)) {
01170
01171 $pRec = t3lib_befunc::getRecord('pages',$id);
01172 $TSlines = explode(chr(10),$pRec['TSconfig']);
01173 $TSlines = array_reverse($TSlines);
01174
01175 reset($set);
01176 while(list($f,$v)=each($set)) {
01177 reset($TSlines);
01178 $inserted=0;
01179 while(list($ki,$kv)=each($TSlines)) {
01180 if (substr($kv,0,strlen($f)+1)==$f.'=') {
01181 $TSlines[$ki]=$f.'='.$v;
01182 $inserted=1;
01183 break;
01184 }
01185 }
01186 if (!$inserted) {
01187 $TSlines = array_reverse($TSlines);
01188 $TSlines[]=$f.'='.$v;
01189 $TSlines = array_reverse($TSlines);
01190 }
01191 }
01192 $TSlines = array_reverse($TSlines);
01193
01194
01195 $TSconf = implode(chr(10),$TSlines);
01196
01197 $GLOBALS['TYPO3_DB']->exec_UPDATEquery('pages', 'uid='.intval($id), array('TSconfig' => $TSconf));
01198 }
01199 }
01200 }
01201
01210 function implodeTSParams($p,$k='') {
01211 $implodeParams=array();
01212 if (is_array($p)) {
01213 reset($p);
01214 while(list($kb,$val)=each($p)) {
01215 if (is_array($val)) {
01216 $implodeParams = array_merge($implodeParams,t3lib_BEfunc::implodeTSParams($val,$k.$kb));
01217 } else {
01218 $implodeParams[$k.$kb]=$val;
01219 }
01220 }
01221 }
01222 return $implodeParams;
01223 }
01224
01225
01226
01227
01228
01229
01230
01231
01232
01233
01234
01235
01236
01237
01247 function getUserNames($fields='username,usergroup,usergroup_cached_list,uid',$where='') {
01248 $be_user_Array=Array();
01249
01250 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, 'be_users', 'pid=0 '.$where.t3lib_BEfunc::deleteClause('be_users'), '', 'username');
01251 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
01252 $be_user_Array[$row['uid']]=$row;
01253 }
01254 return $be_user_Array;
01255 }
01256
01265 function getGroupNames($fields='title,uid', $where='') {
01266 $be_group_Array = Array();
01267 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, 'be_groups', 'pid=0 '.$where.t3lib_BEfunc::deleteClause('be_groups'), '', 'title');
01268 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
01269 $be_group_Array[$row['uid']] = $row;
01270 }
01271 return $be_group_Array;
01272 }
01273
01282 function getListGroupNames($fields='title,uid') {
01283 $exQ=' AND hide_in_lists=0';
01284 if (!$GLOBALS['BE_USER']->isAdmin()) {
01285 $exQ.=' AND uid IN ('.($GLOBALS['BE_USER']->user['usergroup_cached_list']?$GLOBALS['BE_USER']->user['usergroup_cached_list']:0).')';
01286 }
01287 return t3lib_BEfunc::getGroupNames($fields,$exQ);
01288 }
01289
01301 function blindUserNames($usernames,$groupArray,$excludeBlindedFlag=0) {
01302 if (is_array($usernames) && is_array($groupArray)) {
01303 while(list($uid,$row)=each($usernames)) {
01304 $userN=$uid;
01305 $set=0;
01306 if ($row['uid']!=$GLOBALS['BE_USER']->user['uid']) {
01307 reset($groupArray);
01308 while(list(,$v)=each($groupArray)) {
01309 if ($v && t3lib_div::inList($row['usergroup_cached_list'],$v)) {
01310 $userN = $row['username'];
01311 $set=1;
01312 }
01313 }
01314 } else {
01315 $userN = $row['username'];
01316 $set=1;
01317 }
01318 $usernames[$uid]['username']=$userN;
01319 if ($excludeBlindedFlag && !$set) {unset($usernames[$uid]);}
01320 }
01321 }
01322 return $usernames;
01323 }
01324
01334 function blindGroupNames($groups,$groupArray,$excludeBlindedFlag=0) {
01335 if (is_array($groups) && is_array($groupArray)) {
01336 while(list($uid,$row)=each($groups)) {
01337 $groupN=$uid;
01338 $set=0;
01339 if (t3lib_div::inArray($groupArray,$uid)) {
01340 $groupN=$row['title'];
01341 $set=1;
01342 }
01343 $groups[$uid]['title']=$groupN;
01344 if ($excludeBlindedFlag && !$set) {unset($groups[$uid]);}
01345 }
01346 }
01347 return $groups;
01348 }
01349
01350
01351
01352
01353
01354
01355
01356
01357
01358
01359
01360
01361
01362
01363
01364
01365
01366
01367
01368
01369
01377 function daysUntil($tstamp) {
01378 $delta_t = $tstamp-$GLOBALS['EXEC_TIME'];
01379 return ceil($delta_t/(3600*24));
01380 }
01381
01389 function date($tstamp) {
01390 return Date($GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'],$tstamp);
01391 }
01392
01400 function datetime($value) {
01401 return Date($GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'].' '.$GLOBALS['TYPO3_CONF_VARS']['SYS']['hhmm'],$value);
01402 }
01403
01412 function time($value) {
01413 $hh = floor($value/3600);
01414 $min = floor(($value-$hh*3600)/60);
01415 $sec = $value-$hh*3600-$min*60;
01416 $l = sprintf('%02d',$hh).':'.sprintf('%02d',$min).':'.sprintf('%02d',$sec);
01417 return $l;
01418 }
01419
01428 function calcAge($seconds,$labels = 'min|hrs|days|yrs') {
01429 $labelArr = explode('|',$labels);
01430 $prefix='';
01431 if ($seconds<0) {$prefix='-'; $seconds=abs($seconds);}
01432 if ($seconds<3600) {
01433 $seconds = round ($seconds/60).' '.trim($labelArr[0]);
01434 } elseif ($seconds<24*3600) {
01435 $seconds = round ($seconds/3600).' '.trim($labelArr[1]);
01436 } elseif ($seconds<365*24*3600) {
01437 $seconds = round ($seconds/(24*3600)).' '.trim($labelArr[2]);
01438 } else {
01439 $seconds = round ($seconds/(365*24*3600)).' '.trim($labelArr[3]);
01440 }
01441 return $prefix.$seconds;
01442 }
01443
01454 function dateTimeAge($tstamp,$prefix=1,$date='') {
01455 return $tstamp ?
01456 ($date=='date' ? t3lib_BEfunc::date($tstamp) : t3lib_BEfunc::datetime($tstamp)).
01457 ' ('.t3lib_BEfunc::calcAge($prefix*(time()-$tstamp),$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears')).')' : '';
01458 }
01459
01472 function titleAttrib($content='',$hsc=0) {
01473 global $CLIENT;
01474 $attrib= ($CLIENT['BROWSER']=='net'&&$CLIENT['VERSION']<5)||$CLIENT['BROWSER']=='konqu' ? 'alt' : 'title';
01475 return strcmp($content,'')?' '.$attrib.'="'.($hsc?htmlspecialchars($content):$content).'"' : $attrib;
01476 }
01477
01485 function titleAltAttrib($content) {
01486 $out='';
01487 $out.=' alt="'.htmlspecialchars($content).'"';
01488 $out.=' title="'.htmlspecialchars($content).'"';
01489 return $out;
01490 }
01491
01509 function thumbCode($row,$table,$field,$backPath,$thumbScript='',$uploaddir=NULL,$abs=0,$tparams='',$size='') {
01510 global $TCA;
01511
01512 t3lib_div::loadTCA($table);
01513
01514
01515 $uploaddir = (is_null($uploaddir)) ? $TCA[$table]['columns'][$field]['config']['uploadfolder'] : $uploaddir;
01516 $uploaddir = preg_replace('#/$#','',$uploaddir);
01517
01518
01519 if (!$GLOBALS['TYPO3_CONF_VARS']['GFX']['thumbnails']) {
01520 $thumbScript='gfx/notfound_thumb.gif';
01521 } elseif(!$thumbScript) {
01522 $thumbScript='thumbs.php';
01523 }
01524
01525 $sizeParts=array();
01526 if ($size = trim($size)) {
01527 $sizeParts = explode('x', $size.'x'.$size);
01528 if(!intval($sizeParts[0])) $size='';
01529 }
01530
01531
01532 $thumbs = explode(',', $row[$field]);
01533 $thumbData='';
01534 while(list(,$theFile)=each($thumbs)) {
01535 if (trim($theFile)) {
01536 $fI = t3lib_div::split_fileref($theFile);
01537 $ext = $fI['fileext'];
01538
01539 $max=0;
01540 if (t3lib_div::inList('gif,jpg,png',$ext)) {
01541 $imgInfo=@getimagesize(PATH_site.$uploaddir.'/'.$theFile);
01542 if (is_array($imgInfo)) {$max = max($imgInfo[0],$imgInfo[1]);}
01543 }
01544
01545 if ($max && $max<=(count($sizeParts)&&max($sizeParts)?max($sizeParts):56)) {
01546 $url = $uploaddir.'/'.trim($theFile);
01547 $theFile = '../'.$url;
01548 $onClick='top.launchView(\''.$theFile.'\',\'\',\''.$backPath.'\');return false;';
01549 $thumbData.='<a href="#" onclick="'.htmlspecialchars($onClick).'"><img src="../'.$backPath.$url.'" '.$imgInfo[3].' hspace="2" border="0" title="'.trim($url).'"'.$tparams.' alt="" /></a> ';
01550
01551 } elseif ($ext=='ttf' || t3lib_div::inList($GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'],$ext)) {
01552 $theFile = ($abs?'':'../').($uploaddir?$uploaddir.'/':'').trim($theFile);
01553 $params = '&file='.rawurlencode($theFile);
01554 $params .= $size?'&size='.$size:'';
01555 $url = $thumbScript.'?&dummy='.$GLOBALS['EXEC_TIME'].$params;
01556 $onClick='top.launchView(\''.$theFile.'\',\'\',\''.$backPath.'\');return false;';
01557 $thumbData.='<a href="#" onclick="'.htmlspecialchars($onClick).'"><img src="'.htmlspecialchars($backPath.$url).'" hspace="2" border="0" title="'.trim($theFile).'"'.$tparams.' alt="" /></a> ';
01558 } else {
01559 $icon = t3lib_BEfunc::getFileIcon($ext);
01560 $url = 'gfx/fileicons/'.$icon;
01561 $thumbData.='<img src="'.$backPath.$url.'" hspace="2" border="0" title="'.trim($theFile).'"'.$tparams.' alt="" /> ';
01562 }
01563 }
01564 }
01565 return $thumbData;
01566 }
01567
01578 function getThumbNail($thumbScript,$theFile,$tparams='',$size='') {
01579 $params = '&file='.rawurlencode($theFile);
01580 $params .= trim($size)?'&size='.trim($size):'';
01581 $url = $thumbScript.'?&dummy='.$GLOBALS['EXEC_TIME'].$params;
01582 $th='<img src="'.htmlspecialchars($url).'" title="'.trim(basename($theFile)).'"'.($tparams?" ".$tparams:"").' alt="" />';
01583 return $th;
01584 }
01585
01595 function titleAttribForPages($row,$perms_clause='',$includeAttrib=1) {
01596 global $TCA,$LANG;
01597 $parts=array();
01598 $parts[] = 'id='.$row['uid'];
01599 if ($row['alias']) $parts[]=$LANG->sL($TCA['pages']['columns']['alias']['label']).' '.$row['alias'];
01600 if ($row['t3ver_id']) $parts[] = 'v#'.$row['t3ver_id'];
01601 if ($row['doktype']=='3') {
01602 $parts[]=$LANG->sL($TCA['pages']['columns']['url']['label']).' '.$row['url'];
01603 } elseif ($row['doktype']=='4') {
01604 if ($perms_clause) {
01605 $label = t3lib_BEfunc::getRecordPath(intval($row['shortcut']),$perms_clause,20);
01606 } else {
01607 $lRec = t3lib_BEfunc::getRecord('pages',intval($row['shortcut']),'title');
01608 $label = $lRec['title'];
01609 }
01610 if ($row['shortcut_mode']>0) {
01611 $label.=', '.$LANG->sL($TCA['pages']['columns']['shortcut_mode']['label']).' '.
01612 $LANG->sL(t3lib_BEfunc::getLabelFromItemlist('pages','shortcut_mode',$row['shortcut_mode']));
01613 }
01614 $parts[]=$LANG->sL($TCA['pages']['columns']['shortcut']['label']).' '.$label;
01615 } elseif ($row['doktype']=='7') {
01616 if ($perms_clause) {
01617 $label = t3lib_BEfunc::getRecordPath(intval($row['mount_pid']),$perms_clause,20);
01618 } else {
01619 $lRec = t3lib_BEfunc::getRecord('pages',intval($row['mount_pid']),'title');
01620 $label = $lRec['title'];
01621 }
01622 $parts[]=$LANG->sL($TCA['pages']['columns']['mount_pid']['label']).' '.$label;
01623 if ($row['mount_pid_ol']) {
01624 $parts[] = $LANG->sL($TCA['pages']['columns']['mount_pid_ol']['label']);
01625 }
01626 }
01627 if ($row['nav_hide']) $parts[] = ereg_replace(':$','',$LANG->sL($TCA['pages']['columns']['nav_hide']['label']));
01628 if ($row['hidden']) $parts[] = $LANG->sL('LLL:EXT:lang/locallang_core.php:labels.hidden');
01629 if ($row['starttime']) $parts[] = $LANG->sL($TCA['pages']['columns']['starttime']['label']).' '.t3lib_BEfunc::dateTimeAge($row['starttime'],-1,'date');
01630 if ($row['endtime']) $parts[] = $LANG->sL($TCA['pages']['columns']['endtime']['label']).' '.t3lib_BEfunc::dateTimeAge($row['endtime'],-1,'date');
01631 if ($row['fe_group']) {
01632 if ($row['fe_group']<0) {
01633 $label = $LANG->sL(t3lib_BEfunc::getLabelFromItemlist('pages','fe_group',$row['fe_group']));
01634 } else {
01635 $lRec = t3lib_BEfunc::getRecord('fe_groups',$row['fe_group'],'title');
01636 $label = $lRec['title'];
01637 }
01638 $parts[] = $LANG->sL($TCA['pages']['columns']['fe_group']['label']).' '.$label;
01639 }
01640 $out = htmlspecialchars(implode(' - ',$parts));
01641 return $includeAttrib ? 'title="'.$out.'"' : $out;
01642 }
01643
01654 function getRecordIconAltText($row,$table='pages') {
01655 if ($table=='pages') {
01656 $out = t3lib_BEfunc::titleAttribForPages($row,'',0);
01657 } else {
01658 $ctrl = $GLOBALS['TCA'][$table]['ctrl']['enablecolumns'];
01659
01660 $out='id='.$row['uid'];
01661 if ($table=='pages' && $row['alias']) {
01662 $out.=' / '.$row['alias'];
01663 }
01664 if ($GLOBALS['TCA'][$table]['ctrl']['versioning'] && $row['t3ver_id']) {
01665 $out.=' - v#'.$row['t3ver_id'];
01666 }
01667 if ($ctrl['disabled']) {
01668 $out.=($row[$ctrl['disabled']]?' - '.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.hidden'):'');
01669 }
01670 if ($ctrl['starttime']) {
01671 if ($row[$ctrl['starttime']] > $GLOBALS['EXEC_TIME']) {
01672 $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').')';
01673 }
01674 }
01675 if ($row[$ctrl['endtime']]) {
01676 $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').')';
01677 }
01678 }
01679 return htmlspecialchars($out);
01680 }
01681
01691 function getLabelFromItemlist($table,$col,$key) {
01692 global $TCA;
01693
01694 t3lib_div::loadTCA($table);
01695
01696
01697 if (is_array($TCA[$table]) && is_array($TCA[$table]['columns'][$col]) && is_array($TCA[$table]['columns'][$col]['config']['items'])) {
01698
01699 reset($TCA[$table]['columns'][$col]['config']['items']);
01700 while(list($k,$v)=each($TCA[$table]['columns'][$col]['config']['items'])) {
01701
01702 if (!strcmp($v[1],$key)) return $v[0];
01703 }
01704 }
01705 }
01706
01717 function getItemLabel($table,$col,$printAllWrap='') {
01718 global $TCA;
01719
01720 t3lib_div::loadTCA($table);
01721
01722 if (is_array($TCA[$table]) && is_array($TCA[$table]['columns'][$col])) {
01723
01724 return $TCA[$table]['columns'][$col]['label'];
01725 }
01726 if ($printAllWrap) {
01727 $parts = explode('|',$printAllWrap);
01728 return $parts[0].$col.$parts[1];
01729 }
01730 }
01731
01742 function getRecordTitle($table,$row,$prep=0) {
01743 global $TCA;
01744 if (is_array($TCA[$table])) {
01745 $t = $row[$TCA[$table]['ctrl']['label']];
01746 if ($TCA[$table]['ctrl']['label_alt'] && ($TCA[$table]['ctrl']['label_alt_force'] || !strcmp($t,''))) {
01747 $altFields=t3lib_div::trimExplode(',',$TCA[$table]['ctrl']['label_alt'],1);
01748 $tA=array();
01749 $tA[]=$t;
01750 while(list(,$fN)=each($altFields)) {
01751 $t = $tA[] = trim(strip_tags($row[$fN]));
01752 if (strcmp($t,'') && !$TCA[$table]['ctrl']['label_alt_force']) break;
01753 }
01754 if ($TCA[$table]['ctrl']['label_alt_force']) $t=implode(', ',$tA);
01755 }
01756 if ($prep) {
01757 $t = htmlspecialchars(t3lib_div::fixed_lgd_cs($t,$GLOBALS['BE_USER']->uc['titleLen']));
01758 if (!strcmp(trim($t),'')) $t='<em>['.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.no_title',1).']</em>';
01759 }
01760 return $t;
01761 }
01762 }
01763
01778 function getProcessedValue($table,$col,$value,$fixed_lgd_chars=0,$defaultPassthrough=0) {
01779 global $TCA;
01780
01781 t3lib_div::loadTCA($table);
01782
01783 if (is_array($TCA[$table]) && is_array($TCA[$table]['columns'][$col])) {
01784
01785 $theColConf = $TCA[$table]['columns'][$col]['config'];
01786 $l='';
01787 switch((string)$theColConf['type']) {
01788 case 'radio':
01789 $l=t3lib_BEfunc::getLabelFromItemlist($table,$col,$value);
01790 break;
01791 case 'select':
01792 if ($theColConf['MM']) {
01793 $l='N/A';
01794 } else {
01795 $l=t3lib_BEfunc::getLabelFromItemlist($table,$col,$value);
01796 $l=$GLOBALS['LANG']->sL($l);
01797 if ($theColConf['foreign_table'] && !$l && $TCA[$theColConf['foreign_table']]) {
01798 $rParts = t3lib_div::trimExplode(',',$value,1);
01799 reset($rParts);
01800 $lA=array();
01801 while(list(,$rVal)=each($rParts)) {
01802 $rVal = intval($rVal);
01803 if ($rVal>0) {
01804 $r=t3lib_BEfunc::getRecord($theColConf['foreign_table'],$rVal);
01805 } else {
01806 $r=t3lib_BEfunc::getRecord($theColConf['neg_foreign_table'],-$rVal);
01807 }
01808 if (is_array($r)) {
01809 $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);
01810 } else {
01811 $lA[]=$rVal?'['.$rVal.'!]':'';
01812 }
01813 }
01814 $l=implode(',',$lA);
01815 }
01816 }
01817 break;
01818 case 'check':
01819 if (!is_array($theColConf['items']) || count($theColConf['items'])==1) {
01820 $l = $value ? 'Yes' : '';
01821 } else {
01822 reset($theColConf['items']);
01823 $lA=Array();
01824 while(list($key,$val)=each($theColConf['items'])) {
01825 if ($value & pow(2,$key)) {$lA[]=$GLOBALS['LANG']->sL($val[0]);}
01826 }
01827 $l = implode($lA,', ');
01828 }
01829 break;
01830 case 'input':
01831 if ($value) {
01832 if (t3lib_div::inList($theColConf['eval'],'date')) {
01833 $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')).')';
01834 } elseif (t3lib_div::inList($theColConf['eval'],'time')) {
01835 $l = t3lib_BEfunc::time($value);
01836 } elseif (t3lib_div::inList($theColConf['eval'],'datetime')) {
01837 $l = t3lib_BEfunc::datetime($value);
01838 } else {
01839 $l = $value;
01840 }
01841 }
01842 break;
01843 default:
01844 if ($defaultPassthrough) {
01845 $l=$value;
01846 } elseif ($theColConf['MM']) {
01847 $l='N/A';
01848 } elseif ($value) {
01849 $l=t3lib_div::fixed_lgd_cs(strip_tags($value),200);
01850 }
01851 break;
01852 }
01853 if ($fixed_lgd_chars) {
01854 return t3lib_div::fixed_lgd_cs($l,$fixed_lgd_chars);
01855 } else {
01856 return $l;
01857 }
01858 }
01859 }
01860
01872 function getProcessedValueExtra($table,$fN,$fV,$fixed_lgd_chars=0) {
01873 global $TCA;
01874 $fVnew = t3lib_BEfunc::getProcessedValue($table,$fN,$fV,$fixed_lgd_chars);
01875 if (!isset($fVnew)) {
01876 if (is_array($TCA[$table])) {
01877 if ($fN==$TCA[$table]['ctrl']['tstamp'] || $fN==$TCA[$table]['ctrl']['crdate']) {
01878 $fVnew = t3lib_BEfunc::datetime($fV);
01879 } elseif ($fN=='pid'){
01880 $fVnew = t3lib_BEfunc::getRecordPath($fV,'1',20);
01881 } else {
01882 $fVnew = $fV;
01883 }
01884 }
01885 }
01886 return $fVnew;
01887 }
01888
01896 function getFileIcon($ext) {
01897 return $GLOBALS['FILEICONS'][$ext] ? $GLOBALS['FILEICONS'][$ext] : $GLOBALS['FILEICONS']['default'];
01898 }
01899
01910 function getCommonSelectFields($table,$prefix) {
01911 global $TCA;
01912 $fields = array();
01913 $fields[] = $prefix.'uid';
01914 $fields[] = $prefix.$TCA[$table]['ctrl']['label'];
01915
01916 if ($TCA[$table]['ctrl']['label_alt']) {
01917 $secondFields = t3lib_div::trimExplode(',',$TCA[$table]['ctrl']['label_alt'],1);
01918 foreach($secondFields as $fieldN) {
01919 $fields[] = $prefix.$fieldN;
01920 }
01921 }
01922 if ($TCA[$table]['ctrl']['versioning']) {
01923 $fields[] = $prefix.'t3ver_id';
01924 }
01925
01926 if ($TCA[$table]['ctrl']['selicon_field']) $fields[] = $prefix.$TCA[$table]['ctrl']['selicon_field'];
01927 if ($TCA[$table]['ctrl']['typeicon_column']) $fields[] = $prefix.$TCA[$table]['ctrl']['typeicon_column'];
01928
01929 if (is_array($TCA[$table]['ctrl']['enablecolumns'])) {
01930 if ($TCA[$table]['ctrl']['enablecolumns']['disabled']) $fields[] = $prefix.$TCA[$table]['ctrl']['enablecolumns']['disabled'];
01931 if ($TCA[$table]['ctrl']['enablecolumns']['starttime']) $fields[] = $prefix.$TCA[$table]['ctrl']['enablecolumns']['starttime'];
01932 if ($TCA[$table]['ctrl']['enablecolumns']['endtime']) $fields[] = $prefix.$TCA[$table]['ctrl']['enablecolumns']['endtime'];
01933 if ($TCA[$table]['ctrl']['enablecolumns']['fe_group']) $fields[] = $prefix.$TCA[$table]['ctrl']['enablecolumns']['fe_group'];
01934 }
01935
01936 return implode(',',array_unique($fields));
01937 }
01938
01950 function makeConfigForm($configArray,$defaults,$dataPrefix) {
01951 $params = $defaults;
01952 if (is_array($configArray)) {
01953 reset($configArray);
01954 $lines=array();
01955 while(list($fname,$config)=each($configArray)) {
01956 if (is_array($config)) {
01957 $lines[$fname]='<strong>'.htmlspecialchars($config[1]).'</strong><br />';
01958 $lines[$fname].=$config[2].'<br />';
01959 switch($config[0]) {
01960 case 'string':
01961 case 'short':
01962 $formEl = '<input type="text" name="'.$dataPrefix.'['.$fname.']" value="'.$params[$fname].'"'.$GLOBALS['TBE_TEMPLATE']->formWidth($config[0]=='short'?24:48).' />';
01963 break;
01964 case 'check':
01965 $formEl = '<input type="hidden" name="'.$dataPrefix.'['.$fname.']" value="0" /><input type="checkbox" name="'.$dataPrefix.'['.$fname.']" value="1"'.($params[$fname]?' checked="checked"':'').' />';
01966 break;
01967 case 'comment':
01968 $formEl = '';
01969 break;
01970 case 'select':
01971 reset($config[3]);
01972 $opt=array();
01973 while(list($k,$v)=each($config[3])) {
01974 $opt[]='<option value="'.htmlspecialchars($k).'"'.($params[$fname]==$k?' selected="selected"':'').'>'.htmlspecialchars($v).'</option>';
01975 }
01976 $formEl = '<select name="'.$dataPrefix.'['.$fname.']">'.implode('',$opt).'</select>';
01977 break;
01978 default:
01979 debug($config);
01980 break;
01981 }
01982 $lines[$fname].=$formEl;
01983 $lines[$fname].='<br /><br />';
01984 } else {
01985 $lines[$fname]='<hr />';
01986 if ($config) $lines[$fname].='<strong>'.strtoupper(htmlspecialchars($config)).'</strong><br />';
01987 if ($config) $lines[$fname].='<br />';
01988 }
01989 }
01990 }
01991 $out = implode('',$lines);
01992 $out.='<input type="submit" name="submit" value="Update configuration" />';
01993 return $out;
01994 }
01995
01996
01997
01998
01999
02000
02001
02002
02003
02004
02005
02006
02007
02008
02009
02010
02011
02012
02013
02025 function helpTextIcon($table,$field,$BACK_PATH,$force=0) {
02026 global $TCA_DESCR,$BE_USER;
02027 if (is_array($TCA_DESCR[$table]) && is_array($TCA_DESCR[$table]['columns'][$field]) && ($BE_USER->uc['edit_showFieldHelp']=='icon' || $force)) {
02028 $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;';
02029 return '<a href="#" onclick="'.htmlspecialchars($onClick).'">'.
02030 '<img'.t3lib_iconWorks::skinImg($BACK_PATH,'gfx/helpbubble.gif','width="14" height="14"').' hspace="2" border="0" class="typo3-csh-icon" alt="" />'.
02031 '</a>';
02032 }
02033 }
02034
02047 function helpText($table,$field,$BACK_PATH,$styleAttrib='') {
02048 global $TCA_DESCR,$BE_USER;
02049 if (is_array($TCA_DESCR[$table]) && is_array($TCA_DESCR[$table]['columns'][$field]) && $BE_USER->uc['edit_showFieldHelp']=='text') {
02050 $fDat = $TCA_DESCR[$table]['columns'][$field];
02051
02052
02053 $editIcon = t3lib_BEfunc::helpTextIcon(
02054 $table,
02055 $field,
02056 $BACK_PATH,
02057 TRUE
02058 );
02059
02060 $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;';
02061 $text =
02062 ($fDat['alttitle'] ? '<h4><a href="#" onclick="'.htmlspecialchars($onClick).'">'.$fDat['alttitle'].'</a></h4>' : '').
02063 $fDat['description'];
02064
02065
02066 if ($fDat['image_descr'] || $fDat['seeAlso'] || $fDat['details'] || $fDat['syntax']) {
02067 $text.=' <a href="#" onclick="'.htmlspecialchars($onClick).'">'.
02068 '<img'.t3lib_iconWorks::skinImg($BACK_PATH,'gfx/rel_db.gif','width="13" height="12"').' class="absmiddle typo3-csh-more" alt="" />'.
02069 '</a>';
02070 }
02071
02072
02073 $params = $styleAttrib ? ' style="'.$styleAttrib.'"' : '';
02074
02075
02076 return '<table border="0" cellpadding="2" cellspacing="0" class="typo3-csh-inline"'.$params.'>
02077 <tr>
02078 <td valign="top" width="14">'.$editIcon.'</td>
02079 <td valign="top">'.$text.'</td>
02080 </tr>
02081 </table>';
02082 }
02083 }
02084
02099 function cshItem($table,$field,$BACK_PATH,$wrap='',$onlyIconMode=FALSE, $styleAttrib='') {
02100 global $TCA_DESCR, $LANG, $BE_USER;
02101 if ($BE_USER->uc['edit_showFieldHelp']) {
02102 $LANG->loadSingleTableDescription($table);
02103
02104 if (is_array($TCA_DESCR[$table])) {
02105
02106 $fullText = t3lib_BEfunc::helpText($table,$field,$BACK_PATH,$styleAttrib);
02107 $icon = t3lib_BEfunc::helpTextIcon($table,$field,$BACK_PATH,$onlyIconMode);
02108
02109 if ($fullText && !$onlyIconMode) {
02110 $output = $fullText;
02111 } else {
02112 #$output = '<span style="position:absolute; filter: alpha(opacity=50); -moz-opacity: 0.50;">'.$icon.'</span>';
02113 $output = $icon;
02114
02115 if ($output && $wrap) {
02116 $wrParts = explode('|',$wrap);
02117 $output = $wrParts[0].$output.$wrParts[1];
02118 }
02119 }
02120
02121 return $output;
02122 }
02123 }
02124 }
02125
02137 function editOnClick($params,$backPath='',$requestUri='') {
02138 $retUrl = 'returnUrl='.($requestUri==-1?"'+T3_THIS_LOCATION+'":rawurlencode($requestUri?$requestUri:t3lib_div::getIndpEnv('REQUEST_URI')));
02139 return "document.location='".$backPath."alt_doc.php?".$retUrl.$params."'; return false;";
02140 }
02141
02155 function viewOnClick($id,$backPath='',$rootLine='',$anchor='',$altUrl='',$addGetVars='') {
02156 if ($altUrl) {
02157 $url = $altUrl;
02158 } else {
02159 if ($rootLine) {
02160 $parts = parse_url(t3lib_div::getIndpEnv('TYPO3_SITE_URL'));
02161 if (t3lib_BEfunc::getDomainStartPage($parts['host'],$parts['path'])) {
02162 $preUrl_temp = t3lib_BEfunc::firstDomainRecord($rootLine);
02163 }
02164 }
02165 $preUrl = $preUrl_temp ? 'http:
02166 $url = $preUrl.'/index.php?id='.$id.$addGetVars.$anchor;
02167 }
02168
02169 return "previewWin=window.open('".$url."','newTypo3FrontendWindow','status=1,menubar=1,resizable=1,location=1,scrollbars=1,toolbar=1');previewWin.focus();";
02170 }
02171
02181 function getModTSconfig($id,$TSref) {
02182 $pageTS_modOptions = $GLOBALS['BE_USER']->getTSConfig($TSref,t3lib_BEfunc::getPagesTSconfig($id));
02183 $BE_USER_modOptions = $GLOBALS['BE_USER']->getTSConfig($TSref);
02184 $modTSconfig = t3lib_div::array_merge_recursive_overrule($pageTS_modOptions,$BE_USER_modOptions);
02185 return $modTSconfig;
02186 }
02187
02202 function getFuncMenu($mainParams,$elementName,$currentValue,$menuItems,$script='',$addparams='') {
02203 if (is_array($menuItems)) {
02204 if (!is_array($mainParams)) {
02205 $mainParams = array('id' => $mainParams);
02206 }
02207 $mainParams = t3lib_div::implodeArrayForUrl('',$mainParams);
02208
02209 if (!$script) { $script=basename(PATH_thisScript); }
02210
02211 $options = array();
02212 foreach($menuItems as $value => $label) {
02213 $options[] = '<option value="'.htmlspecialchars($value).'"'.(!strcmp($currentValue,$value)?' selected="selected"':'').'>'.
02214 t3lib_div::deHSCentities(htmlspecialchars($label)).
02215 '</option>';
02216 }
02217 if (count($options)) {
02218 $onChange = 'jumpToUrl(\''.$script.'?'.$mainParams.$addparams.'&'.$elementName.'=\'+this.options[this.selectedIndex].value,this);';
02219 return '
02220
02221 <!-- Function Menu of module -->
02222 <select name="'.$elementName.'" onchange="'.htmlspecialchars($onChange).'">
02223 '.implode('
02224 ',$options).'
02225 </select>
02226 ';
02227 }
02228 }
02229 }
02230
02245 function getFuncCheck($mainParams,$elementName,$currentValue,$script='',$addparams='',$tagParams='') {
02246 if (!is_array($mainParams)) {
02247 $mainParams = array('id' => $mainParams);
02248 }
02249 $mainParams = t3lib_div::implodeArrayForUrl('',$mainParams);
02250
02251 if (!$script) {basename(PATH_thisScript);}
02252 $onClick = 'jumpToUrl(\''.$script.'?'.$mainParams.$addparams.'&'.$elementName.'=\'+(this.checked?1:0),this);';
02253 return '<input type="checkbox" name="'.$elementName.'"'.($currentValue?' checked="checked"':'').' onclick="'.htmlspecialchars($onClick).'"'.($tagParams?' '.$tagParams:'').' />';
02254 }
02255
02270 function getFuncInput($mainParams,$elementName,$currentValue,$size=10,$script="",$addparams="") {
02271 if (!is_array($mainParams)) {
02272 $mainParams = array('id' => $mainParams);
02273 }
02274 $mainParams = t3lib_div::implodeArrayForUrl('',$mainParams);
02275
02276 if (!$script) {basename(PATH_thisScript);}
02277 $onChange = 'jumpToUrl(\''.$script.'?'.$mainParams.$addparams.'&'.$elementName.'=\'+escape(this.value),this);';
02278 return '<input type="text"'.$GLOBALS['TBE_TEMPLATE']->formWidth($size).' name="'.$elementName.'" value="'.htmlspecialchars($currentValue).'" onchange="'.htmlspecialchars($onChange).'" />';
02279 }
02280
02291 function unsetMenuItems($modTSconfig,$itemArray,$TSref) {
02292
02293 $conf = $GLOBALS['BE_USER']->getTSConfig($TSref,$modTSconfig);
02294 if (is_array($conf['properties'])) {
02295 reset($conf['properties']);
02296 while(list($key,$val)=each($conf['properties'])) {
02297 if (!$val) {
02298 unset($itemArray[$key]);
02299 }
02300 }
02301 }
02302 return $itemArray;
02303 }
02304
02314 function getSetUpdateSignal($set='') {
02315 global $BE_USER;
02316 $key = 't3lib_BEfunc::getSetUpdateSignal';
02317 $out='';
02318 if ($set) {
02319 $modData=array();
02320 $modData['set']=$set;
02321 $BE_USER->pushModuleData($key,$modData);
02322 } else {
02323 $modData = $BE_USER->getModuleData($key,'ses');
02324 if (trim($modData['set'])) {
02325 $l=explode(',',$modData['set']);
02326 while(list(,$v)=each($l)) {
02327 switch($v) {
02328 case 'updatePageTree':
02329 case 'updateFolderTree':
02330 $out.='
02331 <script type="text/javascript">
02332
02333 if (top.content && top.content.nav_frame && top.content.nav_frame.refresh_nav) {
02334 top.content.nav_frame.refresh_nav();
02335 }
02336
02337 </script>';
02338 break;
02339 }
02340 }
02341 $modData=array();
02342 $modData['set']='';
02343 $BE_USER->pushModuleData($key,$modData);
02344 }
02345 }
02346 return $out;
02347 }
02348
02349
02365 function getModuleData($MOD_MENU, $CHANGED_SETTINGS, $modName, $type='', $dontValidateList='', $setDefaultList='') {
02366
02367 if ($modName && is_string($modName)) {
02368
02369 $settings = $GLOBALS['BE_USER']->getModuleData($modName,$type);
02370
02371 $changed=0;
02372 if (!is_array($settings)) {
02373 $changed=1;
02374 $settings=array();
02375 }
02376 if (is_array($MOD_MENU)) {
02377 reset($MOD_MENU);
02378 while(list($key,$var)=each($MOD_MENU)) {
02379
02380 if (is_array($CHANGED_SETTINGS) && isset($CHANGED_SETTINGS[$key]) && strcmp($settings[$key],$CHANGED_SETTINGS[$key])) {
02381 $settings[$key] = (string)$CHANGED_SETTINGS[$key];
02382 $changed=1;
02383 }
02384
02385 if (is_array($var) && (!$dontValidateList || !t3lib_div::inList($dontValidateList,$key))) {
02386
02387 if (is_array($settings[$key]) || !isset($MOD_MENU[$key][$settings[$key]])) {
02388 $settings[$key]=(string)key($var);
02389 $changed=1;
02390 }
02391 }
02392 if ($setDefaultList && !is_array($var)) {
02393 if (t3lib_div::inList($setDefaultList,$key) && !isset($settings[$key])) {
02394 $settings[$key]=$var;
02395 }
02396 }
02397 }
02398 } else {die ('No menu!');}
02399
02400 if ($changed) {
02401 $GLOBALS['BE_USER']->pushModuleData($modName,$settings);
02402 }
02403
02404 return $settings;
02405 } else {die ('Wrong module name: "'.$modName.'"');}
02406 }
02407
02408
02409
02410
02411
02412
02413
02414
02415
02416
02417
02418
02419
02420
02421
02422
02423
02424
02425
02426
02427
02440 function lockRecords($table='',$uid=0,$pid=0) {
02441 $user_id = intval($GLOBALS['BE_USER']->user['uid']);
02442 if ($table && $uid) {
02443 $fields_values = array(
02444 'userid' => $user_id,
02445 'tstamp' => $GLOBALS['EXEC_TIME'],
02446 'record_table' => $table,
02447 'record_uid' => $uid,
02448 'username' => $GLOBALS['BE_USER']->user['username'],
02449 'record_pid' => $pid
02450 );
02451
02452 $GLOBALS['TYPO3_DB']->exec_INSERTquery('sys_lockedrecords', $fields_values);
02453 } else {
02454 $GLOBALS['TYPO3_DB']->exec_DELETEquery('sys_lockedrecords', 'userid='.intval($user_id));
02455 }
02456 }
02457
02469 function isRecordLocked($table,$uid) {
02470 global $LOCKED_RECORDS;
02471 if (!is_array($LOCKED_RECORDS)) {
02472 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
02473 '*',
02474 'sys_lockedrecords',
02475 'sys_lockedrecords.userid!='.intval($GLOBALS['BE_USER']->user['uid']).'
02476 AND sys_lockedrecords.tstamp > '.($GLOBALS['EXEC_TIME']-2*3600)
02477 );
02478 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
02479 $LOCKED_RECORDS[$row['record_table'].':'.$row['record_uid']]=$row;
02480 $LOCKED_RECORDS[$row['record_table'].':'.$row['record_uid']]['msg']=sprintf(
02481 $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.lockedRecord'),
02482 $row['username'],
02483 t3lib_BEfunc::calcAge($GLOBALS['EXEC_TIME']-$row['tstamp'],$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears'))
02484 );
02485 if ($row['record_pid'] && !isset($LOCKED_RECORDS[$row['record_table'].':'.$row['record_pid']])) {
02486 $LOCKED_RECORDS['pages:'.$row['record_pid']]['msg']=sprintf(
02487 $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.lockedRecord_content'),
02488 $row['username'],
02489 t3lib_BEfunc::calcAge($GLOBALS['EXEC_TIME']-$row['tstamp'],$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears'))
02490 );
02491 }
02492 }
02493 }
02494 return $LOCKED_RECORDS[$table.':'.$uid];
02495 }
02496
02509 function exec_foreign_table_where_query($fieldValue,$field='',$TSconfig=array(),$prefix='') {
02510 global $TCA;
02511 $foreign_table = $fieldValue['config'][$prefix.'foreign_table'];
02512 $rootLevel = $TCA[$foreign_table]['ctrl']['rootLevel'];
02513
02514 $fTWHERE = $fieldValue['config'][$prefix.'foreign_table_where'];
02515 if (strstr($fTWHERE,'###REC_FIELD_')) {
02516 $fTWHERE_parts = explode('###REC_FIELD_',$fTWHERE);
02517 while(list($kk,$vv)=each($fTWHERE_parts)) {
02518 if ($kk) {
02519 $fTWHERE_subpart = explode('###',$vv,2);
02520 $fTWHERE_parts[$kk]=$TSconfig['_THIS_ROW'][$fTWHERE_subpart[0]].$fTWHERE_subpart[1];
02521 }
02522 }
02523 $fTWHERE = implode('',$fTWHERE_parts);
02524 }
02525
02526 $fTWHERE = str_replace('###CURRENT_PID###',intval($TSconfig['_CURRENT_PID']),$fTWHERE);
02527 $fTWHERE = str_replace('###THIS_UID###',intval($TSconfig['_THIS_UID']),$fTWHERE);
02528 $fTWHERE = str_replace('###THIS_CID###',intval($TSconfig['_THIS_CID']),$fTWHERE);
02529 $fTWHERE = str_replace('###STORAGE_PID###',intval($TSconfig['_STORAGE_PID']),$fTWHERE);
02530 $fTWHERE = str_replace('###SITEROOT###',intval($TSconfig['_SITEROOT']),$fTWHERE);
02531 $fTWHERE = str_replace('###PAGE_TSCONFIG_ID###',intval($TSconfig[$field]['PAGE_TSCONFIG_ID']),$fTWHERE);
02532 $fTWHERE = str_replace('###PAGE_TSCONFIG_IDLIST###',$GLOBALS['TYPO3_DB']->cleanIntList($TSconfig[$field]['PAGE_TSCONFIG_IDLIST']),$fTWHERE);
02533 $fTWHERE = str_replace('###PAGE_TSCONFIG_STR###',$GLOBALS['TYPO3_DB']->quoteStr($TSconfig[$field]['PAGE_TSCONFIG_STR'], $foreign_table),$fTWHERE);
02534
02535
02536 $wgolParts = $GLOBALS['TYPO3_DB']->splitGroupOrderLimit($fTWHERE);
02537 if ($rootLevel) {
02538 $queryParts = array(
02539 'SELECT' => t3lib_BEfunc::getCommonSelectFields($foreign_table,$foreign_table.'.'),
02540 'FROM' => $foreign_table,
02541 'WHERE' => $foreign_table.'.pid=0 '.
02542 t3lib_BEfunc::deleteClause($foreign_table).' '.
02543 $wgolParts['WHERE'],
02544 'GROUPBY' => $wgolParts['GROUPBY'],
02545 'ORDERBY' => $wgolParts['ORDERBY'],
02546 'LIMIT' => $wgolParts['LIMIT']
02547 );
02548 } else {
02549 $pageClause = $GLOBALS['BE_USER']->getPagePermsClause(1);
02550 if ($foreign_table!='pages') {
02551 $queryParts = array(
02552 'SELECT' => t3lib_BEfunc::getCommonSelectFields($foreign_table,$foreign_table.'.'),
02553 'FROM' => $foreign_table.',pages',
02554 'WHERE' => 'pages.uid='.$foreign_table.'.pid
02555 AND NOT pages.deleted '.
02556 t3lib_BEfunc::deleteClause($foreign_table).
02557 ' AND '.$pageClause.' '.
02558 $wgolParts['WHERE'],
02559 'GROUPBY' => $wgolParts['GROUPBY'],
02560 'ORDERBY' => $wgolParts['ORDERBY'],
02561 'LIMIT' => $wgolParts['LIMIT']
02562 );
02563 } else {
02564 $queryParts = array(
02565 'SELECT' => t3lib_BEfunc::getCommonSelectFields($foreign_table,$foreign_table.'.'),
02566 'FROM' => 'pages',
02567 'WHERE' => 'NOT pages.deleted
02568 AND '.$pageClause.' '.
02569 $wgolParts['WHERE'],
02570 'GROUPBY' => $wgolParts['GROUPBY'],
02571 'ORDERBY' => $wgolParts['ORDERBY'],
02572 'LIMIT' => $wgolParts['LIMIT']
02573 );
02574 }
02575 }
02576
02577 return $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts);
02578 }
02579
02590 function getTCEFORM_TSconfig($table,$row) {
02591 $res = array();
02592 $typeVal = t3lib_BEfunc::getTCAtypeValue($table,$row);
02593
02594
02595 list($TScID,$cPid) = t3lib_BEfunc::getTSCpid($table,$row['uid'],$row['pid']);
02596
02597 $rootLine = t3lib_BEfunc::BEgetRootLine($TScID,'');
02598 if ($TScID>=0) {
02599 $tempConf = $GLOBALS['BE_USER']->getTSConfig('TCEFORM.'.$table,t3lib_BEfunc::getPagesTSconfig($TScID,$rootLine));
02600 if (is_array($tempConf['properties'])) {
02601 while(list($key,$val)=each($tempConf['properties'])) {
02602 if (is_array($val)) {
02603 $fieldN = substr($key,0,-1);
02604 $res[$fieldN] = $val;
02605 unset($res[$fieldN]['types.']);
02606 if (strcmp($typeVal,'') && is_array($val['types.'][$typeVal.'.'])) {
02607 $res[$fieldN] = t3lib_div::array_merge_recursive_overrule($res[$fieldN],$val['types.'][$typeVal.'.']);
02608 }
02609 }
02610 }
02611 }
02612 }
02613 $res['_CURRENT_PID']=$cPid;
02614 $res['_THIS_UID']=$row['uid'];
02615 $res['_THIS_CID']=$row['cid'];
02616 $res['_THIS_ROW']=$row;
02617 reset($rootLine);
02618 while(list(,$rC)=each($rootLine)) {
02619 if (!$res['_STORAGE_PID']) $res['_STORAGE_PID']=intval($rC['storage_pid']);
02620 if (!$res['_SITEROOT']) $res['_SITEROOT']=$rC['is_siteroot']?intval($rC['uid']):0;
02621 }
02622
02623 return $res;
02624 }
02625
02637 function getTSconfig_pidValue($table,$uid,$pid) {
02638 if (t3lib_div::testInt($pid)) {
02639 $thePidValue = intval($pid);
02640 if ($thePidValue<0) {
02641 $pidRec = t3lib_BEfunc::getRecord($table,abs($thePidValue),'pid');
02642 $thePidValue= is_array($pidRec) ? $pidRec['pid'] : -2;
02643 }
02644
02645 } else {
02646 $rr = t3lib_BEfunc::getRecord($table,$uid,'pid');
02647 if (is_array($rr)) {
02648 $thePidValue = $rr['pid'];
02649 } else $thePidValue=-1;
02650 }
02651 return $thePidValue;
02652 }
02653
02665 function getPidForModTSconfig($table,$uid,$pid) {
02666 $retVal = ($table=='pages' && t3lib_div::testInt($uid)) ? $uid : $pid;
02667 return $retVal;
02668 }
02669
02681 function getTSCpid($table,$uid,$pid) {
02682
02683 $cPid = t3lib_BEfunc::getTSconfig_pidValue($table,$uid,$pid);
02684
02685 $TScID = t3lib_BEfunc::getPidForModTSconfig($table,$uid,$cPid);
02686
02687 return array($TScID,$cPid);
02688 }
02689
02697 function firstDomainRecord($rootLine) {
02698 if (t3lib_extMgm::isLoaded('cms')) {
02699 reset($rootLine);
02700 while(list(,$row)=each($rootLine)) {
02701 $dRec = t3lib_BEfunc::getRecordsByField('sys_domain','pid',$row['uid'],' AND redirectTo="" AND hidden=0', '', 'sorting');
02702 if (is_array($dRec)) {
02703 reset($dRec);
02704 $dRecord = current($dRec);
02705 return ereg_replace('\/$','',$dRecord['domainName']);
02706 }
02707 }
02708 }
02709 }
02710
02719 function getDomainStartPage($domain, $path='') {
02720 if (t3lib_extMgm::isLoaded('cms')) {
02721 $domain = explode(':',$domain);
02722 $domain = strtolower(ereg_replace('\.$','',$domain[0]));
02723
02724 $path = trim(ereg_replace('\/[^\/]*$','',$path));
02725
02726 $domain.=$path;
02727
02728 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('sys_domain.*', 'pages,sys_domain', '
02729 pages.uid=sys_domain.pid
02730 AND NOT sys_domain.hidden
02731 AND (sys_domain.domainName="'.$GLOBALS['TYPO3_DB']->quoteStr($domain, 'sys_domain').'" or sys_domain.domainName="'.$GLOBALS['TYPO3_DB']->quoteStr($domain.'/', 'sys_domain').'")'.
02732 t3lib_BEfunc::deleteClause('pages'),
02733 '', '', '1');
02734 return $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
02735 }
02736 }
02737
02746 function selectVersionsOfRecord($table, $uid, $fields='*') {
02747 global $TCA;
02748
02749 if ($TCA[$table] && $TCA[$table]['ctrl']['versioning']) {
02750
02751
02752 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
02753 $fields,
02754 $table,
02755 '(t3ver_oid='.intval($uid).' || uid='.intval($uid).')'.
02756 t3lib_BEfunc::deleteClause($table),
02757 '',
02758 't3ver_id DESC'
02759 );
02760
02761
02762 $realPid = 0;
02763 $outputRows = array();
02764 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
02765 if ($uid==$row['uid']) {
02766 $row['_CURRENT_VERSION']=TRUE;
02767 $realPid = $row['pid'];
02768 }
02769 $outputRows[] = $row;
02770 }
02771
02772
02773 foreach($outputRows as $idx => $oRow) {
02774 $outputRows[$idx]['_REAL_PID'] = $realPid;
02775 }
02776
02777 return $outputRows;
02778 }
02779 }
02780
02792 function RTEsetup($RTEprop,$table,$field,$type='') {
02793 $thisConfig = is_array($RTEprop['default.']) ? $RTEprop['default.'] : array();
02794 $thisFieldConf = $RTEprop['config.'][$table.'.'][$field.'.'];
02795 if (is_array($thisFieldConf)) {
02796 unset($thisFieldConf['types.']);
02797 $thisConfig = t3lib_div::array_merge_recursive_overrule($thisConfig,$thisFieldConf);
02798 }
02799 if ($type && is_array($RTEprop['config.'][$table.'.'][$field.'.']['types.'][$type.'.'])) {
02800 $thisConfig = t3lib_div::array_merge_recursive_overrule($thisConfig,$RTEprop['config.'][$table.'.'][$field.'.']['types.'][$type.'.']);
02801 }
02802 return $thisConfig;
02803 }
02804
02810 function &RTEgetObj() {
02811
02812
02813 if (!isset($GLOBALS['TYPO3_CONF_VARS']['T3_VAR']['RTEobj'])) {
02814
02815
02816 $GLOBALS['TYPO3_CONF_VARS']['T3_VAR']['RTEobj'] = array();
02817
02818
02819 if (is_array($GLOBALS['TYPO3_CONF_VARS']['BE']['RTE_reg'])) {
02820 foreach($GLOBALS['TYPO3_CONF_VARS']['BE']['RTE_reg'] as $extKey => $rteObjCfg) {
02821 $rteObj = &t3lib_div::getUserObj($rteObjCfg['objRef']);
02822 if (is_object($rteObj)) {
02823 if ($rteObj->isAvailable()) {
02824 $GLOBALS['TYPO3_CONF_VARS']['T3_VAR']['RTEobj'] = &$rteObj;
02825 break;
02826 } else {
02827 $GLOBALS['TYPO3_CONF_VARS']['T3_VAR']['RTEobj'] = array_merge($GLOBALS['TYPO3_CONF_VARS']['T3_VAR']['RTEobj'], $rteObj->errorLog);
02828 }
02829 }
02830 }
02831 }
02832
02833 if (!count($GLOBALS['TYPO3_CONF_VARS']['T3_VAR']['RTEobj'])) {
02834 $GLOBALS['TYPO3_CONF_VARS']['T3_VAR']['RTEobj'][] = 'No RTEs configured at all';
02835 }
02836 }
02837
02838
02839 return $GLOBALS['TYPO3_CONF_VARS']['T3_VAR']['RTEobj'];
02840 }
02841
02849 function isModuleSetInTBE_MODULES($modName) {
02850 reset($GLOBALS['TBE_MODULES']);
02851 $loaded=array();
02852 while(list($mkey,$list)=each($GLOBALS['TBE_MODULES'])) {
02853 $loaded[$mkey]=1;
02854 if (trim($list)) {
02855 $subList = t3lib_div::trimExplode(',',$list,1);
02856 while(list(,$skey)=each($subList)) {
02857 $loaded[$mkey.'_'.$skey]=1;
02858 }
02859 }
02860 }
02861 return $modName && isset($loaded[$modName]);
02862 }
02863
02864
02865
02866
02867
02868
02869
02870
02871
02872
02873
02874
02875
02876
02877
02878
02879
02880
02881
02882
02883
02884
02885
02886
02887
02898 function typo3PrintError($header,$text,$js='',$head=1) {
02899
02900
02901 if ($js) {
02902 echo "alert('".t3lib_div::slashJS($header.'\n'.$text)."');";
02903 } else {
02904 echo $head?'<html>
02905 <head>
02906 <title>Error!</title>
02907 </head>
02908 <body bgcolor="white" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">':'';
02909 echo '<div align="center">
02910 <table border="0" cellspacing="0" cellpadding="0" width="333">
02911 <tr>
02912 <td align="center">'.
02913 ($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="333" height="43" vspace="10" />').
02914 '</td>
02915 </tr>
02916 <tr>
02917 <td bgcolor="black">
02918 <table width="100%" border="0" cellspacing="1" cellpadding="10">
02919 <tr>
02920 <td bgcolor="#F4F0E8">
02921 <font face="verdana,arial,helvetica" size="2">';
02922 echo '<b><center><font size="+1">'.$header.'</font></center></b><br />'.$text;
02923 echo ' </font>
02924 </td>
02925 </tr>
02926 </table>
02927 </td>
02928 </tr>
02929 </table>
02930 </div>';
02931 echo $head?'
02932 </body>
02933 </html>':'';
02934 }
02935 }
02936
02942 function TYPO3_copyRightNotice() {
02943 global $TYPO3_CONF_VARS;
02944
02945
02946 $loginCopyrightWarrantyProvider = strip_tags(trim($TYPO3_CONF_VARS['SYS']['loginCopyrightWarrantyProvider']));
02947 $loginCopyrightWarrantyURL = strip_tags(trim($TYPO3_CONF_VARS['SYS']['loginCopyrightWarrantyURL']));
02948
02949 if (strlen($loginCopyrightWarrantyProvider)>=2 && strlen($loginCopyrightWarrantyURL)>=10) {
02950 $warrantyNote='Warranty is supplied by '.htmlspecialchars($loginCopyrightWarrantyProvider).'; <a href="'.htmlspecialchars($loginCopyrightWarrantyURL).'" target="_blank">click for details.</a>';
02951 } else {
02952 $warrantyNote='TYPO3 comes with ABSOLUTELY NO WARRANTY; <a href="http://typo3.com/1316.0.html" target="_blank">click for details.</a>';
02953 }
02954 $cNotice = '<a href="http://typo3.com/" target="_blank"><img src="gfx/loginlogo_transp.gif" width="75" vspace="2" height="19" alt="TYPO3 logo" align="left" />TYPO3 CMS ver. '.htmlspecialchars($GLOBALS['TYPO_VERSION']).'</a>. Copyright © 1998-2004 Kasper Skårhøj. Extensions are copyright of their respective owners. Go to <a href="http://typo3.com/" target="_blank">http:
02955 '.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.';
02956
02957 return $cNotice;
02958 }
02959
02967 function getPathType_web_nonweb($path) {
02968 return t3lib_div::isFirstPartOfStr($path,t3lib_div::getIndpEnv('TYPO3_DOCUMENT_ROOT')) ? 'web' : '';
02969 }
02970
02979 function ADMCMD_previewCmds($pageinfo) {
02980 if ($pageinfo['fe_group']>0) {
02981 $simUser = '&ADMCMD_simUser='.$pageinfo['fe_group'];
02982 }
02983 if ($pageinfo['starttime']>time()) {
02984 $simTime = '&ADMCMD_simTime='.$pageinfo['starttime'];
02985 }
02986 if ($pageinfo['endtime']<time() && $pageinfo['endtime']!=0) {
02987 $simTime = '&ADMCMD_simTime='.($pageinfo['endtime']-1);
02988 }
02989 return $simUser.$simTime;
02990 }
02991
03001 function processParams($params) {
03002 $paramArr=array();
03003 $lines=explode(chr(10),$params);
03004 while(list(,$val)=each($lines)) {
03005 $val = trim($val);
03006 if ($val) {
03007 $pair = explode('=',$val,2);
03008 $paramArr[trim($pair[0])] = trim($pair[1]);
03009 }
03010 }
03011 return $paramArr;
03012 }
03013
03027 function getListOfBackendModules($name,$perms_clause,$backPath='',$script='index.php') {
03028 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'pages', 'doktype!=255 AND module IN ("'.implode('","',$name).'") AND'.$perms_clause.t3lib_BEfunc::deleteClause('pages'));
03029 if (!$GLOBALS['TYPO3_DB']->sql_num_rows($res)) return false;
03030
03031 $out='';
03032 $theRows=array();
03033 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
03034 $theRows[]=$row;
03035 $out.='<span class="nobr"><a href="'.htmlspecialchars($script.'?id='.$row['uid']).'">'.
03036 t3lib_iconWorks::getIconImage('pages',$row,$backPath,'title="'.htmlspecialchars(t3lib_BEfunc::getRecordPath($row['uid'],$perms_clause,20)).'" align="top"').
03037 htmlspecialchars($row['title']).
03038 '</a></span><br />';
03039 }
03040 return array('rows'=>$theRows,'list'=>$out);
03041 }
03042 }
03043 ?>