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
00171 class t3lib_BEfunc {
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00191 function deleteClause($table) {
00192 global $TCA;
00193 if ($TCA[$table]['ctrl']['delete']) {
00194 return ' AND '.$table.'.'.$TCA[$table]['ctrl']['delete'].'=0';
00195 } else {
00196 return '';
00197 }
00198 }
00199
00214 function getRecord($table,$uid,$fields='*',$where='') {
00215 if ($GLOBALS['TCA'][$table]) {
00216 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, $table, 'uid='.intval($uid).t3lib_BEfunc::deleteClause($table).$where);
00217 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00218 return $row;
00219 }
00220 }
00221 }
00222
00236 function getRecordRaw($table,$where='',$fields='*') {
00237 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, $table, $where);
00238 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00239 return $row;
00240 }
00241 }
00242
00258 function getRecordsByField($theTable,$theField,$theValue,$whereClause='',$groupBy='',$orderBy='',$limit='') {
00259 global $TCA;
00260 if (is_array($TCA[$theTable])) {
00261 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00262 '*',
00263 $theTable,
00264 $theField.'='.$GLOBALS['TYPO3_DB']->fullQuoteStr($theValue, $theTable).
00265 t3lib_BEfunc::deleteClause($theTable).' '.
00266 $whereClause,
00267 $groupBy,
00268 $orderBy,
00269 $limit
00270 );
00271 $rows = array();
00272 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00273 $rows[] = $row;
00274 }
00275 $GLOBALS['TYPO3_DB']->sql_free_result($res);
00276 if (count($rows)) return $rows;
00277 }
00278 }
00279
00289 function fixVersioningPid($table,&$rr) {
00290 global $TCA;
00291
00292 if ($rr['pid']==-1 && $TCA[$table]['ctrl']['versioning']) {
00293 if ($rr['t3ver_oid']>0) {
00294 $oid = $rr['t3ver_oid'];
00295 } else {
00296 $newPidRec = t3lib_BEfunc::getRecord($table,$rr['uid'],'t3ver_oid');
00297 if (is_array($newPidRec)) {
00298 $oid = $newPidRec['t3ver_oid'];
00299 }
00300 }
00301
00302
00303 if ($oid) {
00304 $oidRec = t3lib_BEfunc::getRecord($table,$oid,'pid');
00305 if (is_array($oidRec)) {
00306 $rr['_ORIG_pid'] = $rr['pid'];
00307 $rr['pid'] = $oidRec['pid'];
00308 }
00309 }
00310 }
00311 }
00312
00323 function searchQuery($searchWords,$fields,$table='') {
00324 return $GLOBALS['TYPO3_DB']->searchQuery($searchWords,$fields,$table);
00325 }
00326
00338 function listQuery($field,$value) {
00339 return $GLOBALS['TYPO3_DB']->listQuery($field,$value,'');
00340 }
00341
00350 function splitTable_Uid($str) {
00351 list($uid,$table) = explode('_',strrev($str),2);
00352 return array(strrev($table),strrev($uid));
00353 }
00354
00365 function getSQLselectableList($in_list,$tablename,$default_tablename) {
00366 $list = Array();
00367 if ((string)trim($in_list)!='') {
00368 $tempItemArray = explode(',',trim($in_list));
00369 while(list($key,$val)=each($tempItemArray)) {
00370 $val = strrev($val);
00371 $parts = explode('_',$val,2);
00372 if ((string)trim($parts[0])!='') {
00373 $theID = intval(strrev($parts[0]));
00374 $theTable = trim($parts[1]) ? strrev(trim($parts[1])) : $default_tablename;
00375 if ($theTable==$tablename) {$list[]=$theID;}
00376 }
00377 }
00378 }
00379 return implode(',',$list);
00380 }
00381
00393 function BEenableFields($table,$inv=0) {
00394 $ctrl = $GLOBALS['TCA'][$table]['ctrl'];
00395 $query=array();
00396 $invQuery=array();
00397 if (is_array($ctrl)) {
00398 if (is_array($ctrl['enablecolumns'])) {
00399 if ($ctrl['enablecolumns']['disabled']) {
00400 $field = $table.'.'.$ctrl['enablecolumns']['disabled'];
00401 $query[]=$field.'=0';
00402 $invQuery[]=$field.'!=0';
00403 }
00404 if ($ctrl['enablecolumns']['starttime']) {
00405 $field = $table.'.'.$ctrl['enablecolumns']['starttime'];
00406 $query[]='('.$field.'<='.$GLOBALS['SIM_EXEC_TIME'].')';
00407 $invQuery[]='('.$field.'!=0 AND '.$field.'>'.$GLOBALS['SIM_EXEC_TIME'].')';
00408 }
00409 if ($ctrl['enablecolumns']['endtime']) {
00410 $field = $table.'.'.$ctrl['enablecolumns']['endtime'];
00411 $query[]='('.$field.'=0 OR '.$field.'>'.$GLOBALS['SIM_EXEC_TIME'].')';
00412 $invQuery[]='('.$field.'!=0 AND '.$field.'<='.$GLOBALS['SIM_EXEC_TIME'].')';
00413 }
00414 }
00415 }
00416 $outQ = ' AND '.($inv ? '('.implode(' OR ',$invQuery).')' : implode(' AND ',$query));
00417
00418 return $outQ;
00419 }
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00457 function mm_query($select,$local_table,$mm_table,$foreign_table,$whereClause='',$groupBy='',$orderBy='',$limit='') {
00458 $query = $GLOBALS['TYPO3_DB']->SELECTquery(
00459 $select,
00460 $local_table.','.$mm_table.($foreign_table?','.$foreign_table:''),
00461 $local_table.'.uid='.$mm_table.'.uid_local'.($foreign_table?' AND '.$foreign_table.'.uid='.$mm_table.'.uid_foreign':'').' '.
00462 $whereClause,
00463 $groupBy,
00464 $orderBy,
00465 $limit
00466 );
00467 return $query;
00468 }
00469
00479 function DBcompileInsert($table,$fields_values) {
00480 return $GLOBALS['TYPO3_DB']->INSERTquery($table, $fields_values);
00481 }
00482
00493 function DBcompileUpdate($table,$where,$fields_values) {
00494 return $GLOBALS['TYPO3_DB']->UPDATEquery($table, $where, $fields_values);
00495 }
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00522 function BEgetRootLine($uid,$clause='') {
00523 $loopCheck = 100;
00524 $theRowArray = Array();
00525 $output = Array();
00526 while ($uid!=0 && $loopCheck>0) {
00527 $loopCheck--;
00528 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00529 'pid,uid,title,TSconfig,is_siteroot,storage_pid',
00530 'pages',
00531 'uid='.intval($uid).' '.
00532 t3lib_BEfunc::deleteClause('pages').' '.
00533 $clause
00534 );
00535 if ($GLOBALS['TYPO3_DB']->sql_error()) {
00536 debug($GLOBALS['TYPO3_DB']->sql_error(),1);
00537 }
00538 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00539 t3lib_BEfunc::fixVersioningPid('pages',$row);
00540 $uid = $row['pid'];
00541 $theRowArray[]=$row;
00542 } else {
00543 break;
00544 }
00545 }
00546 if ($uid==0) {$theRowArray[] = Array('uid'=>0,'title'=>'');}
00547 if (is_array($theRowArray)) {
00548 reset($theRowArray);
00549 $c=count($theRowArray);
00550 while(list($key,$val)=each($theRowArray)) {
00551 $c--;
00552 $output[$c]['uid'] = $val['uid'];
00553 $output[$c]['pid'] = $val['pid'];
00554 if (isset($val['_ORIG_pid'])) $output[$c]['_ORIG_pid'] = $val['_ORIG_pid'];
00555 $output[$c]['title'] = $val['title'];
00556 $output[$c]['TSconfig'] = $val['TSconfig'];
00557 $output[$c]['is_siteroot'] = $val['is_siteroot'];
00558 $output[$c]['storage_pid'] = $val['storage_pid'];
00559 }
00560 }
00561 return $output;
00562 }
00563
00571 function openPageTree($pid,$clearExpansion) {
00572 global $BE_USER;
00573
00574
00575 if ($clearExpansion) {
00576 $expandedPages = array();
00577 } else {
00578 $expandedPages = unserialize($BE_USER->uc['browseTrees']['browsePages']);
00579 }
00580
00581
00582 $rL = t3lib_BEfunc::BEgetRootLine($pid);
00583
00584
00585 $mountIndex = 0;
00586 $mountKeys = array_flip($BE_USER->returnWebmounts());
00587 foreach($rL as $rLDat) {
00588 if (isset($mountKeys[$rLDat['uid']])) {
00589 $mountIndex = $mountKeys[$rLDat['uid']];
00590 break;
00591 }
00592 }
00593
00594
00595 foreach($rL as $rLDat) {
00596 $expandedPages[$mountIndex][$rLDat['uid']] = 1;
00597 }
00598
00599
00600 $BE_USER->uc['browseTrees']['browsePages'] = serialize($expandedPages);
00601 $BE_USER->writeUC();
00602 }
00603
00616 function getRecordPath($uid, $clause, $titleLimit, $fullTitleLimit=0) {
00617 if (!$titleLimit) { $titleLimit=1000; }
00618
00619 $loopCheck = 100;
00620 $output = $fullOutput = '/';
00621 while ($uid!=0 && $loopCheck>0) {
00622 $loopCheck--;
00623 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00624 'uid,pid,title',
00625 'pages',
00626 'uid='.intval($uid).
00627 t3lib_BEfunc::deleteClause('pages').
00628 (strlen(trim($clause)) ? ' AND '.$clause : '')
00629 );
00630 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00631 t3lib_BEfunc::fixVersioningPid('pages',$row);
00632
00633 if ($row['_ORIG_pid']) {
00634 $output = ' [#VEP#]'.$output;
00635 }
00636 $uid = $row['pid'];
00637 $output = '/'.t3lib_div::fixed_lgd_cs(strip_tags($row['title']),$titleLimit).$output;
00638 if ($fullTitleLimit) $fullOutput = '/'.t3lib_div::fixed_lgd_cs(strip_tags($row['title']),$fullTitleLimit).$fullOutput;
00639 } else {
00640 break;
00641 }
00642 }
00643
00644 if ($fullTitleLimit) {
00645 return array($output, $fullOutput);
00646 } else {
00647 return $output;
00648 }
00649 }
00650
00658 function getExcludeFields() {
00659 global $TCA;
00660
00661 $theExcludeArray = Array();
00662 $tc_keys = array_keys($TCA);
00663 foreach($tc_keys as $table) {
00664
00665 t3lib_div::loadTCA($table);
00666
00667 if (is_array($TCA[$table]['columns'])) {
00668 $f_keys = array_keys($TCA[$table]['columns']);
00669 foreach($f_keys as $field) {
00670 if ($TCA[$table]['columns'][$field]['exclude']) {
00671
00672 $Fname=$GLOBALS['LANG']->sl($TCA[$table]['ctrl']['title']).': '.$GLOBALS['LANG']->sl($TCA[$table]['columns'][$field]['label']);
00673
00674 $theExcludeArray[] = Array($Fname , $table.':'.$field);
00675 }
00676 }
00677 }
00678 }
00679 return $theExcludeArray;
00680 }
00681
00688 function getExplicitAuthFieldValues() {
00689 global $TCA;
00690
00691
00692 $adLabel = array(
00693 'ALLOW' => $GLOBALS['LANG']->sl('LLL:EXT:lang/locallang_core.xml:labels.allow'),
00694 'DENY' => $GLOBALS['LANG']->sl('LLL:EXT:lang/locallang_core.xml:labels.deny'),
00695 );
00696
00697
00698 $allowDenyOptions = Array();
00699 $tc_keys = array_keys($TCA);
00700 foreach($tc_keys as $table) {
00701
00702
00703 t3lib_div::loadTCA($table);
00704
00705
00706 if (is_array($TCA[$table]['columns'])) {
00707 $f_keys = array_keys($TCA[$table]['columns']);
00708 foreach($f_keys as $field) {
00709 $fCfg = $TCA[$table]['columns'][$field]['config'];
00710 if ($fCfg['type']=='select' && $fCfg['authMode']) {
00711
00712
00713 if (is_array($fCfg['items'])) {
00714
00715 $allowDenyOptions[$table.':'.$field]['tableFieldLabel'] = $GLOBALS['LANG']->sl($TCA[$table]['ctrl']['title']).': '.$GLOBALS['LANG']->sl($TCA[$table]['columns'][$field]['label']);
00716
00717
00718 foreach($fCfg['items'] as $iVal) {
00719 if (strcmp($iVal[1],'')) {
00720
00721
00722 $iMode = '';
00723 switch((string)$fCfg['authMode']) {
00724 case 'explicitAllow':
00725 $iMode = 'ALLOW';
00726 break;
00727 case 'explicitDeny':
00728 $iMode = 'DENY';
00729 break;
00730 case 'individual':
00731 if (!strcmp($iVal[4],'EXPL_ALLOW')) {
00732 $iMode = 'ALLOW';
00733 } elseif (!strcmp($iVal[4],'EXPL_DENY')) {
00734 $iMode = 'DENY';
00735 }
00736 break;
00737 }
00738
00739
00740 if ($iMode) {
00741 $allowDenyOptions[$table.':'.$field]['items'][$iVal[1]] = array($iMode, $GLOBALS['LANG']->sl($iVal[0]), $adLabel[$iMode]);
00742 }
00743 }
00744 }
00745 }
00746 }
00747 }
00748 }
00749 }
00750
00751 return $allowDenyOptions;
00752 }
00753
00759 function getSystemLanguages() {
00760
00761
00762 $sysLanguages = array();
00763 $sysLanguages[] = array('Default language', 0);
00764
00765
00766 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid,title,flag','sys_language','pid=0'.t3lib_BEfunc::deleteClause('sys_language'));
00767 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00768 $sysLanguages[] = array($row['title'].' ['.$row['uid'].']', $row['uid'], ($row['flag'] ? '../t3lib/gfx/flags/'.$row['flag'] : ''));
00769 }
00770
00771 return $sysLanguages;
00772 }
00773
00784 function readPageAccess($id,$perms_clause) {
00785 if ((string)$id!='') {
00786 $id = intval($id);
00787 if (!$id) {
00788 if ($GLOBALS['BE_USER']->isAdmin()) {
00789 $path = '/';
00790 $pageinfo['_thePath'] = $path;
00791 return $pageinfo;
00792 }
00793 } else {
00794 $pageinfo = t3lib_BEfunc::getRecord('pages',$id,'*',($perms_clause ? ' AND '.$perms_clause : ''));
00795 if ($pageinfo['uid'] && $GLOBALS['BE_USER']->isInWebMount($id,$perms_clause)) {
00796 list($pageinfo['_thePath'],$pageinfo['_thePathFull']) = t3lib_BEfunc::getRecordPath(intval($pageinfo['uid']), $perms_clause, 15, 1000);
00797 return $pageinfo;
00798 }
00799 }
00800 }
00801 return false;
00802 }
00803
00813 function getTCAtypes($table,$rec,$useFieldNameAsKey=0) {
00814 global $TCA;
00815
00816 t3lib_div::loadTCA($table);
00817 if ($TCA[$table]) {
00818
00819
00820 $fieldValue = t3lib_BEfunc::getTCAtypeValue($table,$rec);
00821
00822
00823 $typesConf = $TCA[$table]['types'][$fieldValue];
00824
00825
00826 $fieldList = explode(',', $typesConf['showitem']);
00827 $altFieldList = array();
00828
00829
00830 foreach($fieldList as $k => $v) {
00831 list($pFieldName, $pAltTitle, $pPalette, $pSpec) = t3lib_div::trimExplode(';', $v);
00832 $defaultExtras = is_array($TCA[$table]['columns'][$pFieldName]) ? $TCA[$table]['columns'][$pFieldName]['defaultExtras'] : '';
00833 $specConfParts = t3lib_BEfunc::getSpecConfParts($pSpec, $defaultExtras);
00834
00835 $fieldList[$k]=array(
00836 'field' => $pFieldName,
00837 'title' => $pAltTitle,
00838 'palette' => $pPalette,
00839 'spec' => $specConfParts,
00840 'origString' => $v
00841 );
00842 if ($useFieldNameAsKey) {
00843 $altFieldList[$fieldList[$k]['field']] = $fieldList[$k];
00844 }
00845 }
00846 if ($useFieldNameAsKey) {
00847 $fieldList = $altFieldList;
00848 }
00849
00850
00851 return $fieldList;
00852 }
00853 }
00854
00866 function getTCAtypeValue($table,$rec) {
00867 global $TCA;
00868
00869
00870 t3lib_div::loadTCA($table);
00871 if ($TCA[$table]) {
00872 $field = $TCA[$table]['ctrl']['type'];
00873 $fieldValue = $field ? ($rec[$field] ? $rec[$field] : 0) : 0;
00874 if (!is_array($TCA[$table]['types'][$fieldValue])) $fieldValue = 1;
00875 return $fieldValue;
00876 }
00877 }
00878
00889 function getSpecConfParts($str, $defaultExtras) {
00890
00891
00892 $specConfParts = t3lib_div::trimExplode(':', $defaultExtras.':'.$str, 1);
00893
00894 if (count($specConfParts)) {
00895 foreach($specConfParts as $k2 => $v2) {
00896 unset($specConfParts[$k2]);
00897 if (ereg('(.*)\[(.*)\]',$v2,$reg)) {
00898 $specConfParts[trim($reg[1])] = array(
00899 'parameters' => t3lib_div::trimExplode('|', $reg[2], 1)
00900 );
00901 } else {
00902 $specConfParts[trim($v2)] = 1;
00903 }
00904 }
00905 } else {
00906 $specConfParts = array();
00907 }
00908 return $specConfParts;
00909 }
00910
00919 function getSpecConfParametersFromArray($pArr) {
00920 $out=array();
00921 if (is_array($pArr)) {
00922 reset($pArr);
00923 while(list($k,$v)=each($pArr)) {
00924 $parts=explode('=',$v,2);
00925 if (count($parts)==2) {
00926 $out[trim($parts[0])]=trim($parts[1]);
00927 } else {
00928 $out[$k]=$v;
00929 }
00930 }
00931 }
00932 return $out;
00933 }
00934
00945 function getFlexFormDS($conf,$row,$table, $fieldName = '') {
00946 global $TYPO3_CONF_VARS;
00947
00948
00949 $ds_pointerField = $conf['ds_pointerField'];
00950 $ds_array = $conf['ds'];
00951 $ds_tableField = $conf['ds_tableField'];
00952 $ds_searchParentField = $conf['ds_pointerField_searchParent'];
00953
00954
00955 $dataStructArray='';
00956 if (is_array($ds_array)) {
00957
00958 if ($ds_pointerField) {
00959 $srcPointer = $row[$ds_pointerField];
00960 $srcPointer = isset($ds_array[$srcPointer]) ? $srcPointer : 'default';
00961 } else $srcPointer='default';
00962
00963
00964 if (substr($ds_array[$srcPointer],0,5)=='FILE:') {
00965 $file = t3lib_div::getFileAbsFileName(substr($ds_array[$srcPointer],5));
00966 if ($file && @is_file($file)) {
00967 $dataStructArray = t3lib_div::xml2array(t3lib_div::getUrl($file));
00968 } else $dataStructArray = 'The file "'.substr($dsSrc,5).'" in ds-array key "'.$srcPointer.'" was not found ("'.$file.'")';
00969 } else {
00970 $dataStructArray = t3lib_div::xml2array($ds_array[$srcPointer]);
00971 }
00972
00973 } elseif ($ds_pointerField) {
00974
00975 $srcPointer = $row[$ds_pointerField];
00976
00977
00978 if ($ds_searchParentField && !$srcPointer) {
00979 $rr = t3lib_BEfunc::getRecord($table,$row['uid'],'uid,'.$ds_searchParentField);
00980 t3lib_BEfunc::fixVersioningPid($table,$rr);
00981 $uidAcc=array();
00982 $subFieldPointer = $conf['ds_pointerField_searchParent_subField'];
00983 while(!$srcPointer) {
00984 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00985 'uid,'.$ds_pointerField.','.$ds_searchParentField.($subFieldPointer?','.$subFieldPointer:''),
00986 $table,
00987 'uid='.intval($rr[$ds_searchParentField]).t3lib_BEfunc::deleteClause($table)
00988 );
00989 $rr = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
00990
00991
00992 if (!is_array($rr) || isset($uidAcc[$rr['uid']])) break;
00993 $uidAcc[$rr['uid']]=1;
00994
00995 t3lib_BEfunc::fixVersioningPid($table,$rr);
00996 $srcPointer = ($subFieldPointer && $rr[$subFieldPointer]) ? $rr[$subFieldPointer] : $rr[$ds_pointerField];
00997 }
00998 }
00999
01000
01001 if ($srcPointer) {
01002 if (t3lib_div::testInt($srcPointer)) {
01003 list($tName,$fName) = explode(':',$ds_tableField,2);
01004 if ($tName && $fName && is_array($GLOBALS['TCA'][$tName])) {
01005 $dataStructRec = t3lib_BEfunc::getRecord($tName, $srcPointer);
01006 $dataStructArray = t3lib_div::xml2array($dataStructRec[$fName]);
01007 } else $dataStructArray = 'No tablename ('.$tName.') or fieldname ('.$fName.') was found an valid!';
01008 } else {
01009 $file = t3lib_div::getFileAbsFileName($srcPointer);
01010 if ($file && @is_file($file)) {
01011 $dataStructArray = t3lib_div::xml2array(t3lib_div::getUrl($file));
01012 } else $dataStructArray='The file "'.$srcPointer.'" was not found ("'.$file.'")';
01013 }
01014 } else $dataStructArray='No source value in fieldname "'.$ds_pointerField.'"';
01015 } else $dataStructArray='No proper configuration!';
01016
01017
01018 if (is_array ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['getFlexFormDSClass'])) {
01019 foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['getFlexFormDSClass'] as $classRef) {
01020 $hookObj = &t3lib_div::getUserObj($classRef);
01021 if (method_exists($hookObj, 'getFlexFormDS_postProcessDS')) {
01022 $hookObj->getFlexFormDS_postProcessDS($dataStructArray, $conf, $row, $table, $fieldName);
01023 }
01024 }
01025 }
01026
01027 return $dataStructArray;
01028 }
01029
01030
01031
01032
01033
01034
01035
01036
01037
01038
01039
01040
01041
01042
01043
01044
01045
01046
01047
01048
01049
01050
01051
01052
01063 function storeHash($hash,$data,$ident) {
01064 $insertFields = array(
01065 'hash' => $hash,
01066 'content' => $data,
01067 'ident' => $ident,
01068 'tstamp' => time()
01069 );
01070 $GLOBALS['TYPO3_DB']->exec_DELETEquery('cache_hash', 'hash='.$GLOBALS['TYPO3_DB']->fullQuoteStr($hash, 'cache_hash'));
01071 $GLOBALS['TYPO3_DB']->exec_INSERTquery('cache_hash', $insertFields);
01072 }
01073
01083 function getHash($hash,$expTime=0) {
01084
01085 $expTime = intval($expTime);
01086 if ($expTime) {
01087 $whereAdd = ' AND tstamp > '.(time()-$expTime);
01088 }
01089 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('content', 'cache_hash', 'hash='.$GLOBALS['TYPO3_DB']->fullQuoteStr($hash, 'cache_hash').$whereAdd);
01090 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
01091 return $row['content'];
01092 }
01093 }
01094
01095
01096
01097
01098
01099
01100
01101
01102
01103
01104
01105
01106
01107
01119 function getPagesTSconfig($id,$rootLine='',$returnPartArray=0) {
01120 $id=intval($id);
01121 if (!is_array($rootLine)) {
01122 $rootLine = t3lib_BEfunc::BEgetRootLine($id,'');
01123 }
01124 ksort($rootLine);
01125 reset($rootLine);
01126 $TSdataArray = array();
01127 $TSdataArray['defaultPageTSconfig']=$GLOBALS['TYPO3_CONF_VARS']['BE']['defaultPageTSconfig'];
01128 while(list($k,$v)=each($rootLine)) {
01129 $TSdataArray['uid_'.$v['uid']]=$v['TSconfig'];
01130 }
01131 $TSdataArray = t3lib_TSparser::checkIncludeLines_array($TSdataArray);
01132 if ($returnPartArray) {
01133 return $TSdataArray;
01134 }
01135
01136
01137 $userTS = implode($TSdataArray,chr(10).'[GLOBAL]'.chr(10));
01138 $hash = md5('pageTS:'.$userTS);
01139 $cachedContent = t3lib_BEfunc::getHash($hash,0);
01140 $TSconfig = array();
01141 if (isset($cachedContent)) {
01142 $TSconfig = unserialize($cachedContent);
01143 } else {
01144 $parseObj = t3lib_div::makeInstance('t3lib_TSparser');
01145 $parseObj->parse($userTS);
01146 $TSconfig = $parseObj->setup;
01147 t3lib_BEfunc::storeHash($hash,serialize($TSconfig),'PAGES_TSconfig');
01148 }
01149 return $TSconfig;
01150 }
01151
01170 function updatePagesTSconfig($id,$pageTS,$TSconfPrefix,$impParams='') {
01171 $id=intval($id);
01172 if (is_array($pageTS) && $id>0) {
01173 if (!is_array($impParams)) {
01174 $impParams =t3lib_BEfunc::implodeTSParams(t3lib_BEfunc::getPagesTSconfig($id));
01175 }
01176 reset($pageTS);
01177 $set=array();
01178 while(list($f,$v)=each($pageTS)) {
01179 $f = $TSconfPrefix.$f;
01180 if ((!isset($impParams[$f])&&trim($v)) || strcmp(trim($impParams[$f]),trim($v))) {
01181 $set[$f]=trim($v);
01182 }
01183 }
01184 if (count($set)) {
01185
01186 $pRec = t3lib_befunc::getRecord('pages',$id);
01187 $TSlines = explode(chr(10),$pRec['TSconfig']);
01188 $TSlines = array_reverse($TSlines);
01189
01190 reset($set);
01191 while(list($f,$v)=each($set)) {
01192 reset($TSlines);
01193 $inserted=0;
01194 while(list($ki,$kv)=each($TSlines)) {
01195 if (substr($kv,0,strlen($f)+1)==$f.'=') {
01196 $TSlines[$ki]=$f.'='.$v;
01197 $inserted=1;
01198 break;
01199 }
01200 }
01201 if (!$inserted) {
01202 $TSlines = array_reverse($TSlines);
01203 $TSlines[]=$f.'='.$v;
01204 $TSlines = array_reverse($TSlines);
01205 }
01206 }
01207 $TSlines = array_reverse($TSlines);
01208
01209
01210 $TSconf = implode(chr(10),$TSlines);
01211
01212 $GLOBALS['TYPO3_DB']->exec_UPDATEquery('pages', 'uid='.intval($id), array('TSconfig' => $TSconf));
01213 }
01214 }
01215 }
01216
01225 function implodeTSParams($p,$k='') {
01226 $implodeParams=array();
01227 if (is_array($p)) {
01228 reset($p);
01229 while(list($kb,$val)=each($p)) {
01230 if (is_array($val)) {
01231 $implodeParams = array_merge($implodeParams,t3lib_BEfunc::implodeTSParams($val,$k.$kb));
01232 } else {
01233 $implodeParams[$k.$kb]=$val;
01234 }
01235 }
01236 }
01237 return $implodeParams;
01238 }
01239
01240
01241
01242
01243
01244
01245
01246
01247
01248
01249
01250
01251
01252
01262 function getUserNames($fields='username,usergroup,usergroup_cached_list,uid',$where='') {
01263 $be_user_Array=Array();
01264
01265 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, 'be_users', 'pid=0 '.$where.t3lib_BEfunc::deleteClause('be_users'), '', 'username');
01266 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
01267 $be_user_Array[$row['uid']]=$row;
01268 }
01269 return $be_user_Array;
01270 }
01271
01280 function getGroupNames($fields='title,uid', $where='') {
01281 $be_group_Array = Array();
01282 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, 'be_groups', 'pid=0 '.$where.t3lib_BEfunc::deleteClause('be_groups'), '', 'title');
01283 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
01284 $be_group_Array[$row['uid']] = $row;
01285 }
01286 return $be_group_Array;
01287 }
01288
01297 function getListGroupNames($fields='title,uid') {
01298 $exQ=' AND hide_in_lists=0';
01299 if (!$GLOBALS['BE_USER']->isAdmin()) {
01300 $exQ.=' AND uid IN ('.($GLOBALS['BE_USER']->user['usergroup_cached_list']?$GLOBALS['BE_USER']->user['usergroup_cached_list']:0).')';
01301 }
01302 return t3lib_BEfunc::getGroupNames($fields,$exQ);
01303 }
01304
01316 function blindUserNames($usernames,$groupArray,$excludeBlindedFlag=0) {
01317 if (is_array($usernames) && is_array($groupArray)) {
01318 while(list($uid,$row)=each($usernames)) {
01319 $userN=$uid;
01320 $set=0;
01321 if ($row['uid']!=$GLOBALS['BE_USER']->user['uid']) {
01322 reset($groupArray);
01323 while(list(,$v)=each($groupArray)) {
01324 if ($v && t3lib_div::inList($row['usergroup_cached_list'],$v)) {
01325 $userN = $row['username'];
01326 $set=1;
01327 }
01328 }
01329 } else {
01330 $userN = $row['username'];
01331 $set=1;
01332 }
01333 $usernames[$uid]['username']=$userN;
01334 if ($excludeBlindedFlag && !$set) {unset($usernames[$uid]);}
01335 }
01336 }
01337 return $usernames;
01338 }
01339
01349 function blindGroupNames($groups,$groupArray,$excludeBlindedFlag=0) {
01350 if (is_array($groups) && is_array($groupArray)) {
01351 while(list($uid,$row)=each($groups)) {
01352 $groupN=$uid;
01353 $set=0;
01354 if (t3lib_div::inArray($groupArray,$uid)) {
01355 $groupN=$row['title'];
01356 $set=1;
01357 }
01358 $groups[$uid]['title']=$groupN;
01359 if ($excludeBlindedFlag && !$set) {unset($groups[$uid]);}
01360 }
01361 }
01362 return $groups;
01363 }
01364
01365
01366
01367
01368
01369
01370
01371
01372
01373
01374
01375
01376
01377
01378
01379
01380
01381
01382
01390 function daysUntil($tstamp) {
01391 $delta_t = $tstamp-$GLOBALS['EXEC_TIME'];
01392 return ceil($delta_t/(3600*24));
01393 }
01394
01402 function date($tstamp) {
01403 return date($GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'],$tstamp);
01404 }
01405
01413 function datetime($value) {
01414 return date($GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'].' '.$GLOBALS['TYPO3_CONF_VARS']['SYS']['hhmm'], $value);
01415 }
01416
01425 function time($value) {
01426 $hh = floor($value/3600);
01427 $min = floor(($value-$hh*3600)/60);
01428 $sec = $value-$hh*3600-$min*60;
01429 $l = sprintf('%02d',$hh).':'.sprintf('%02d',$min).':'.sprintf('%02d',$sec);
01430 return $l;
01431 }
01432
01441 function calcAge($seconds,$labels = 'min|hrs|days|yrs') {
01442 $labelArr = explode('|',$labels);
01443 $prefix='';
01444 if ($seconds<0) {$prefix='-'; $seconds=abs($seconds);}
01445 if ($seconds<3600) {
01446 $seconds = round ($seconds/60).' '.trim($labelArr[0]);
01447 } elseif ($seconds<24*3600) {
01448 $seconds = round ($seconds/3600).' '.trim($labelArr[1]);
01449 } elseif ($seconds<365*24*3600) {
01450 $seconds = round ($seconds/(24*3600)).' '.trim($labelArr[2]);
01451 } else {
01452 $seconds = round ($seconds/(365*24*3600)).' '.trim($labelArr[3]);
01453 }
01454 return $prefix.$seconds;
01455 }
01456
01467 function dateTimeAge($tstamp,$prefix=1,$date='') {
01468 return $tstamp ?
01469 ($date=='date' ? t3lib_BEfunc::date($tstamp) : t3lib_BEfunc::datetime($tstamp)).
01470 ' ('.t3lib_BEfunc::calcAge($prefix*(time()-$tstamp),$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears')).')' : '';
01471 }
01472
01485 function titleAttrib($content='',$hsc=0) {
01486 global $CLIENT;
01487 $attrib= ($CLIENT['BROWSER']=='net'&&$CLIENT['VERSION']<5)||$CLIENT['BROWSER']=='konqu' ? 'alt' : 'title';
01488 return strcmp($content,'')?' '.$attrib.'="'.($hsc?htmlspecialchars($content):$content).'"' : $attrib;
01489 }
01490
01498 function titleAltAttrib($content) {
01499 $out='';
01500 $out.=' alt="'.htmlspecialchars($content).'"';
01501 $out.=' title="'.htmlspecialchars($content).'"';
01502 return $out;
01503 }
01504
01522 function thumbCode($row,$table,$field,$backPath,$thumbScript='',$uploaddir=NULL,$abs=0,$tparams='',$size='') {
01523 global $TCA;
01524
01525 t3lib_div::loadTCA($table);
01526
01527
01528 $uploaddir = (is_null($uploaddir)) ? $TCA[$table]['columns'][$field]['config']['uploadfolder'] : $uploaddir;
01529 $uploaddir = preg_replace('#/$#','',$uploaddir);
01530
01531
01532 if (!$GLOBALS['TYPO3_CONF_VARS']['GFX']['thumbnails']) {
01533 $thumbScript='gfx/notfound_thumb.gif';
01534 } elseif(!$thumbScript) {
01535 $thumbScript='thumbs.php';
01536 }
01537
01538 $sizeParts=array();
01539 if ($size = trim($size)) {
01540 $sizeParts = explode('x', $size.'x'.$size);
01541 if(!intval($sizeParts[0])) $size='';
01542 }
01543
01544
01545 $thumbs = explode(',', $row[$field]);
01546 $thumbData='';
01547 while(list(,$theFile)=each($thumbs)) {
01548 if (trim($theFile)) {
01549 $fI = t3lib_div::split_fileref($theFile);
01550 $ext = $fI['fileext'];
01551
01552 $max=0;
01553 if (t3lib_div::inList('gif,jpg,png',$ext)) {
01554 $imgInfo=@getimagesize(PATH_site.$uploaddir.'/'.$theFile);
01555 if (is_array($imgInfo)) {$max = max($imgInfo[0],$imgInfo[1]);}
01556 }
01557
01558 if ($max && $max<=(count($sizeParts)&&max($sizeParts)?max($sizeParts):56)) {
01559 $url = $uploaddir.'/'.trim($theFile);
01560 $theFile = '../'.$url;
01561 $onClick='top.launchView(\''.$theFile.'\',\'\',\''.$backPath.'\');return false;';
01562 $thumbData.='<a href="#" onclick="'.htmlspecialchars($onClick).'"><img src="../'.$backPath.$url.'" '.$imgInfo[3].' hspace="2" border="0" title="'.trim($url).'"'.$tparams.' alt="" /></a> ';
01563
01564 } elseif ($ext=='ttf' || t3lib_div::inList($GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'],$ext)) {
01565 $theFile = ($abs?'':'../').($uploaddir?$uploaddir.'/':'').trim($theFile);
01566 $params = '&file='.rawurlencode($theFile);
01567 $params .= $size?'&size='.$size:'';
01568 $url = $thumbScript.'?&dummy='.$GLOBALS['EXEC_TIME'].$params;
01569 $onClick='top.launchView(\''.$theFile.'\',\'\',\''.$backPath.'\');return false;';
01570 $thumbData.='<a href="#" onclick="'.htmlspecialchars($onClick).'"><img src="'.htmlspecialchars($backPath.$url).'" hspace="2" border="0" title="'.trim($theFile).'"'.$tparams.' alt="" /></a> ';
01571 } else {
01572 $icon = t3lib_BEfunc::getFileIcon($ext);
01573 $url = 'gfx/fileicons/'.$icon;
01574 $thumbData.='<img src="'.$backPath.$url.'" hspace="2" border="0" title="'.trim($theFile).'"'.$tparams.' alt="" /> ';
01575 }
01576 }
01577 }
01578 return $thumbData;
01579 }
01580
01591 function getThumbNail($thumbScript,$theFile,$tparams='',$size='') {
01592 $params = '&file='.rawurlencode($theFile);
01593 $params .= trim($size)?'&size='.trim($size):'';
01594 $url = $thumbScript.'?&dummy='.$GLOBALS['EXEC_TIME'].$params;
01595 $th='<img src="'.htmlspecialchars($url).'" title="'.trim(basename($theFile)).'"'.($tparams?" ".$tparams:"").' alt="" />';
01596 return $th;
01597 }
01598
01608 function titleAttribForPages($row,$perms_clause='',$includeAttrib=1) {
01609 global $TCA,$LANG;
01610 $parts=array();
01611 $parts[] = 'id='.$row['uid'];
01612 if ($row['alias']) $parts[]=$LANG->sL($TCA['pages']['columns']['alias']['label']).' '.$row['alias'];
01613 if ($row['t3ver_id']) $parts[] = 'v#'.$row['t3ver_id'];
01614 if ($row['doktype']=='3') {
01615 $parts[]=$LANG->sL($TCA['pages']['columns']['url']['label']).' '.$row['url'];
01616 } elseif ($row['doktype']=='4') {
01617 if ($perms_clause) {
01618 $label = t3lib_BEfunc::getRecordPath(intval($row['shortcut']),$perms_clause,20);
01619 } else {
01620 $lRec = t3lib_BEfunc::getRecord('pages',intval($row['shortcut']),'title');
01621 $label = $lRec['title'];
01622 }
01623 if ($row['shortcut_mode']>0) {
01624 $label.=', '.$LANG->sL($TCA['pages']['columns']['shortcut_mode']['label']).' '.
01625 $LANG->sL(t3lib_BEfunc::getLabelFromItemlist('pages','shortcut_mode',$row['shortcut_mode']));
01626 }
01627 $parts[]=$LANG->sL($TCA['pages']['columns']['shortcut']['label']).' '.$label;
01628 } elseif ($row['doktype']=='7') {
01629 if ($perms_clause) {
01630 $label = t3lib_BEfunc::getRecordPath(intval($row['mount_pid']),$perms_clause,20);
01631 } else {
01632 $lRec = t3lib_BEfunc::getRecord('pages',intval($row['mount_pid']),'title');
01633 $label = $lRec['title'];
01634 }
01635 $parts[]=$LANG->sL($TCA['pages']['columns']['mount_pid']['label']).' '.$label;
01636 if ($row['mount_pid_ol']) {
01637 $parts[] = $LANG->sL($TCA['pages']['columns']['mount_pid_ol']['label']);
01638 }
01639 }
01640 if ($row['nav_hide']) $parts[] = ereg_replace(':$','',$LANG->sL($TCA['pages']['columns']['nav_hide']['label']));
01641 if ($row['hidden']) $parts[] = $LANG->sL('LLL:EXT:lang/locallang_core.php:labels.hidden');
01642 if ($row['starttime']) $parts[] = $LANG->sL($TCA['pages']['columns']['starttime']['label']).' '.t3lib_BEfunc::dateTimeAge($row['starttime'],-1,'date');
01643 if ($row['endtime']) $parts[] = $LANG->sL($TCA['pages']['columns']['endtime']['label']).' '.t3lib_BEfunc::dateTimeAge($row['endtime'],-1,'date');
01644 if ($row['fe_group']) {
01645 if ($row['fe_group']<0) {
01646 $label = $LANG->sL(t3lib_BEfunc::getLabelFromItemlist('pages','fe_group',$row['fe_group']));
01647 } else {
01648 $lRec = t3lib_BEfunc::getRecord('fe_groups',$row['fe_group'],'title');
01649 $label = $lRec['title'];
01650 }
01651 $parts[] = $LANG->sL($TCA['pages']['columns']['fe_group']['label']).' '.$label;
01652 }
01653 $out = htmlspecialchars(implode(' - ',$parts));
01654 return $includeAttrib ? 'title="'.$out.'"' : $out;
01655 }
01656
01667 function getRecordIconAltText($row,$table='pages') {
01668 if ($table=='pages') {
01669 $out = t3lib_BEfunc::titleAttribForPages($row,'',0);
01670 } else {
01671 $ctrl = $GLOBALS['TCA'][$table]['ctrl']['enablecolumns'];
01672
01673 $out='id='.$row['uid'];
01674 if ($table=='pages' && $row['alias']) {
01675 $out.=' / '.$row['alias'];
01676 }
01677 if ($GLOBALS['TCA'][$table]['ctrl']['versioning'] && $row['t3ver_id']) {
01678 $out.=' - v#'.$row['t3ver_id'];
01679 }
01680 if ($ctrl['disabled']) {
01681 $out.=($row[$ctrl['disabled']]?' - '.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.hidden'):'');
01682 }
01683 if ($ctrl['starttime']) {
01684 if ($row[$ctrl['starttime']] > $GLOBALS['EXEC_TIME']) {
01685 $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').')';
01686 }
01687 }
01688 if ($row[$ctrl['endtime']]) {
01689 $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').')';
01690 }
01691 }
01692 return htmlspecialchars($out);
01693 }
01694
01704 function getLabelFromItemlist($table,$col,$key) {
01705 global $TCA;
01706
01707 t3lib_div::loadTCA($table);
01708
01709
01710 if (is_array($TCA[$table]) && is_array($TCA[$table]['columns'][$col]) && is_array($TCA[$table]['columns'][$col]['config']['items'])) {
01711
01712 reset($TCA[$table]['columns'][$col]['config']['items']);
01713 while(list($k,$v)=each($TCA[$table]['columns'][$col]['config']['items'])) {
01714
01715 if (!strcmp($v[1],$key)) return $v[0];
01716 }
01717 }
01718 }
01719
01730 function getItemLabel($table,$col,$printAllWrap='') {
01731 global $TCA;
01732
01733 t3lib_div::loadTCA($table);
01734
01735 if (is_array($TCA[$table]) && is_array($TCA[$table]['columns'][$col])) {
01736
01737 return $TCA[$table]['columns'][$col]['label'];
01738 }
01739 if ($printAllWrap) {
01740 $parts = explode('|',$printAllWrap);
01741 return $parts[0].$col.$parts[1];
01742 }
01743 }
01744
01755 function getRecordTitle($table,$row,$prep=0) {
01756 global $TCA;
01757 if (is_array($TCA[$table])) {
01758 $t = $row[$TCA[$table]['ctrl']['label']];
01759 if ($TCA[$table]['ctrl']['label_alt'] && ($TCA[$table]['ctrl']['label_alt_force'] || !strcmp($t,''))) {
01760 $altFields=t3lib_div::trimExplode(',',$TCA[$table]['ctrl']['label_alt'],1);
01761 $tA=array();
01762 $tA[]=$t;
01763 while(list(,$fN)=each($altFields)) {
01764 $t = $tA[] = trim(strip_tags($row[$fN]));
01765 if (strcmp($t,'') && !$TCA[$table]['ctrl']['label_alt_force']) break;
01766 }
01767 if ($TCA[$table]['ctrl']['label_alt_force']) $t=implode(', ',$tA);
01768 }
01769 if ($prep) {
01770 $t = htmlspecialchars(t3lib_div::fixed_lgd_cs($t,$GLOBALS['BE_USER']->uc['titleLen']));
01771 if (!strcmp(trim($t),'')) $t='<em>['.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.no_title',1).']</em>';
01772 }
01773 return $t;
01774 }
01775 }
01776
01793 function getProcessedValue($table,$col,$value,$fixed_lgd_chars=0,$defaultPassthrough=0,$noRecordLookup=FALSE,$uid=0) {
01794 global $TCA;
01795
01796 t3lib_div::loadTCA($table);
01797
01798 if (is_array($TCA[$table]) && is_array($TCA[$table]['columns'][$col])) {
01799
01800 $theColConf = $TCA[$table]['columns'][$col]['config'];
01801 $l='';
01802 switch((string)$theColConf['type']) {
01803 case 'radio':
01804 $l=t3lib_BEfunc::getLabelFromItemlist($table,$col,$value);
01805 $l=$GLOBALS['LANG']->sL($l);
01806 break;
01807 case 'select':
01808 if ($theColConf['MM']) {
01809
01810 $MMres = $GLOBALS['TYPO3_DB']->exec_SELECT_mm_query(
01811 $theColConf['foreign_table'].'.'.$TCA[$theColConf['foreign_table']]['ctrl']['label'],
01812 $table,
01813 $theColConf['MM'],
01814 $theColConf['foreign_table'],
01815 'AND '.$table.'.uid ='.intval($uid).t3lib_BEfunc::deleteClause($theColConf['foreign_table'])
01816 );
01817 if ($MMres) {
01818 while($MMrow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($MMres)) {
01819 $mmlA[] = $MMrow[$TCA[$theColConf['foreign_table']]['ctrl']['label']];
01820 }
01821 if (is_array($mmlA)) {
01822 $l=implode(', ',$mmlA);
01823 } else {
01824 $l = '';
01825 }
01826 } else {
01827 $l = 'n/A';
01828 }
01829 } else {
01830 $l = t3lib_BEfunc::getLabelFromItemlist($table,$col,$value);
01831 $l = $GLOBALS['LANG']->sL($l);
01832 if ($theColConf['foreign_table'] && !$l && $TCA[$theColConf['foreign_table']]) {
01833 if ($noRecordLookup) {
01834 $l = $value;
01835 } else {
01836 $rParts = t3lib_div::trimExplode(',',$value,1);
01837 reset($rParts);
01838 $lA = array();
01839 while(list(,$rVal)=each($rParts)) {
01840 $rVal = intval($rVal);
01841 if ($rVal>0) {
01842 $r=t3lib_BEfunc::getRecord($theColConf['foreign_table'],$rVal);
01843 } else {
01844 $r=t3lib_BEfunc::getRecord($theColConf['neg_foreign_table'],-$rVal);
01845 }
01846 if (is_array($r)) {
01847 $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);
01848 } else {
01849 $lA[]=$rVal?'['.$rVal.'!]':'';
01850 }
01851 }
01852 $l = implode(',',$lA);
01853 }
01854 }
01855 }
01856 break;
01857 case 'check':
01858 if (!is_array($theColConf['items']) || count($theColConf['items'])==1) {
01859 $l = $value ? 'Yes' : '';
01860 } else {
01861 reset($theColConf['items']);
01862 $lA=Array();
01863 while(list($key,$val)=each($theColConf['items'])) {
01864 if ($value & pow(2,$key)) {$lA[]=$GLOBALS['LANG']->sL($val[0]);}
01865 }
01866 $l = implode($lA,', ');
01867 }
01868 break;
01869 case 'input':
01870 if ($value) {
01871 if (t3lib_div::inList($theColConf['eval'],'date')) {
01872 $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')).')';
01873 } elseif (t3lib_div::inList($theColConf['eval'],'time')) {
01874 $l = t3lib_BEfunc::time($value);
01875 } elseif (t3lib_div::inList($theColConf['eval'],'datetime')) {
01876 $l = t3lib_BEfunc::datetime($value);
01877 } else {
01878 $l = $value;
01879 }
01880 }
01881 break;
01882 default:
01883 if ($defaultPassthrough) {
01884 $l=$value;
01885 } elseif ($theColConf['MM']) {
01886 $l='N/A';
01887 } elseif ($value) {
01888 $l=t3lib_div::fixed_lgd_cs(strip_tags($value),200);
01889 }
01890 break;
01891 }
01892 if ($fixed_lgd_chars) {
01893 return t3lib_div::fixed_lgd_cs($l,$fixed_lgd_chars);
01894 } else {
01895 return $l;
01896 }
01897 }
01898 }
01899
01912 function getProcessedValueExtra($table,$fN,$fV,$fixed_lgd_chars=0,$uid=0) {
01913 global $TCA;
01914 $fVnew = t3lib_BEfunc::getProcessedValue($table,$fN,$fV,$fixed_lgd_chars,0,0,$uid);
01915 if (!isset($fVnew)) {
01916 if (is_array($TCA[$table])) {
01917 if ($fN==$TCA[$table]['ctrl']['tstamp'] || $fN==$TCA[$table]['ctrl']['crdate']) {
01918 $fVnew = t3lib_BEfunc::datetime($fV);
01919 } elseif ($fN=='pid'){
01920 $fVnew = t3lib_BEfunc::getRecordPath($fV,'1=1',20);
01921 } else {
01922 $fVnew = $fV;
01923 }
01924 }
01925 }
01926 return $fVnew;
01927 }
01928
01936 function getFileIcon($ext) {
01937 return $GLOBALS['FILEICONS'][$ext] ? $GLOBALS['FILEICONS'][$ext] : $GLOBALS['FILEICONS']['default'];
01938 }
01939
01950 function getCommonSelectFields($table,$prefix) {
01951 global $TCA;
01952 $fields = array();
01953 $fields[] = $prefix.'uid';
01954 $fields[] = $prefix.$TCA[$table]['ctrl']['label'];
01955
01956 if ($TCA[$table]['ctrl']['label_alt']) {
01957 $secondFields = t3lib_div::trimExplode(',',$TCA[$table]['ctrl']['label_alt'],1);
01958 foreach($secondFields as $fieldN) {
01959 $fields[] = $prefix.$fieldN;
01960 }
01961 }
01962 if ($TCA[$table]['ctrl']['versioning']) {
01963 $fields[] = $prefix.'t3ver_id';
01964 }
01965
01966 if ($TCA[$table]['ctrl']['selicon_field']) $fields[] = $prefix.$TCA[$table]['ctrl']['selicon_field'];
01967 if ($TCA[$table]['ctrl']['typeicon_column']) $fields[] = $prefix.$TCA[$table]['ctrl']['typeicon_column'];
01968
01969 if (is_array($TCA[$table]['ctrl']['enablecolumns'])) {
01970 if ($TCA[$table]['ctrl']['enablecolumns']['disabled']) $fields[] = $prefix.$TCA[$table]['ctrl']['enablecolumns']['disabled'];
01971 if ($TCA[$table]['ctrl']['enablecolumns']['starttime']) $fields[] = $prefix.$TCA[$table]['ctrl']['enablecolumns']['starttime'];
01972 if ($TCA[$table]['ctrl']['enablecolumns']['endtime']) $fields[] = $prefix.$TCA[$table]['ctrl']['enablecolumns']['endtime'];
01973 if ($TCA[$table]['ctrl']['enablecolumns']['fe_group']) $fields[] = $prefix.$TCA[$table]['ctrl']['enablecolumns']['fe_group'];
01974 }
01975
01976 return implode(',',array_unique($fields));
01977 }
01978
01990 function makeConfigForm($configArray,$defaults,$dataPrefix) {
01991 $params = $defaults;
01992 if (is_array($configArray)) {
01993 reset($configArray);
01994 $lines=array();
01995 while(list($fname,$config)=each($configArray)) {
01996 if (is_array($config)) {
01997 $lines[$fname]='<strong>'.htmlspecialchars($config[1]).'</strong><br />';
01998 $lines[$fname].=$config[2].'<br />';
01999 switch($config[0]) {
02000 case 'string':
02001 case 'short':
02002 $formEl = '<input type="text" name="'.$dataPrefix.'['.$fname.']" value="'.$params[$fname].'"'.$GLOBALS['TBE_TEMPLATE']->formWidth($config[0]=='short'?24:48).' />';
02003 break;
02004 case 'check':
02005 $formEl = '<input type="hidden" name="'.$dataPrefix.'['.$fname.']" value="0" /><input type="checkbox" name="'.$dataPrefix.'['.$fname.']" value="1"'.($params[$fname]?' checked="checked"':'').' />';
02006 break;
02007 case 'comment':
02008 $formEl = '';
02009 break;
02010 case 'select':
02011 reset($config[3]);
02012 $opt=array();
02013 while(list($k,$v)=each($config[3])) {
02014 $opt[]='<option value="'.htmlspecialchars($k).'"'.($params[$fname]==$k?' selected="selected"':'').'>'.htmlspecialchars($v).'</option>';
02015 }
02016 $formEl = '<select name="'.$dataPrefix.'['.$fname.']">'.implode('',$opt).'</select>';
02017 break;
02018 default:
02019 debug($config);
02020 break;
02021 }
02022 $lines[$fname].=$formEl;
02023 $lines[$fname].='<br /><br />';
02024 } else {
02025 $lines[$fname]='<hr />';
02026 if ($config) $lines[$fname].='<strong>'.strtoupper(htmlspecialchars($config)).'</strong><br />';
02027 if ($config) $lines[$fname].='<br />';
02028 }
02029 }
02030 }
02031 $out = implode('',$lines);
02032 $out.='<input type="submit" name="submit" value="Update configuration" />';
02033 return $out;
02034 }
02035
02036
02037
02038
02039
02040
02041
02042
02043
02044
02045
02046
02047
02048
02049
02050
02051
02052
02053
02065 function helpTextIcon($table,$field,$BACK_PATH,$force=0) {
02066 global $TCA_DESCR,$BE_USER;
02067 if (is_array($TCA_DESCR[$table]) && is_array($TCA_DESCR[$table]['columns'][$field]) && ($BE_USER->uc['edit_showFieldHelp']=='icon' || $force)) {
02068 $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;';
02069 return '<a href="#" onclick="'.htmlspecialchars($onClick).'">'.
02070 '<img'.t3lib_iconWorks::skinImg($BACK_PATH,'gfx/helpbubble.gif','width="14" height="14"').' hspace="2" border="0" class="typo3-csh-icon" alt="" />'.
02071 '</a>';
02072 }
02073 }
02074
02087 function helpText($table,$field,$BACK_PATH,$styleAttrib='') {
02088 global $TCA_DESCR,$BE_USER;
02089 if (is_array($TCA_DESCR[$table]) && is_array($TCA_DESCR[$table]['columns'][$field]) && $BE_USER->uc['edit_showFieldHelp']=='text') {
02090 $fDat = $TCA_DESCR[$table]['columns'][$field];
02091
02092
02093 $editIcon = t3lib_BEfunc::helpTextIcon(
02094 $table,
02095 $field,
02096 $BACK_PATH,
02097 TRUE
02098 );
02099
02100 $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;';
02101 $text =
02102 ($fDat['alttitle'] ? '<h4><a href="#" onclick="'.htmlspecialchars($onClick).'">'.$fDat['alttitle'].'</a></h4>' : '').
02103 $fDat['description'];
02104
02105
02106 if ($fDat['image_descr'] || $fDat['seeAlso'] || $fDat['details'] || $fDat['syntax']) {
02107 $text.=' <a href="#" onclick="'.htmlspecialchars($onClick).'">'.
02108 '<img'.t3lib_iconWorks::skinImg($BACK_PATH,'gfx/rel_db.gif','width="13" height="12"').' class="absmiddle typo3-csh-more" alt="" />'.
02109 '</a>';
02110 }
02111
02112
02113 $params = $styleAttrib ? ' style="'.$styleAttrib.'"' : '';
02114
02115
02116 return '<table border="0" cellpadding="2" cellspacing="0" class="typo3-csh-inline"'.$params.'>
02117 <tr>
02118 <td valign="top" width="14">'.$editIcon.'</td>
02119 <td valign="top">'.$text.'</td>
02120 </tr>
02121 </table>';
02122 }
02123 }
02124
02139 function cshItem($table,$field,$BACK_PATH,$wrap='',$onlyIconMode=FALSE, $styleAttrib='') {
02140 global $TCA_DESCR, $LANG, $BE_USER;
02141 if ($BE_USER->uc['edit_showFieldHelp']) {
02142 $LANG->loadSingleTableDescription($table);
02143
02144 if (is_array($TCA_DESCR[$table])) {
02145
02146 $fullText = t3lib_BEfunc::helpText($table,$field,$BACK_PATH,$styleAttrib);
02147 $icon = t3lib_BEfunc::helpTextIcon($table,$field,$BACK_PATH,$onlyIconMode);
02148
02149 if ($fullText && !$onlyIconMode) {
02150 $output = $fullText;
02151 } else {
02152 #$output = '<span style="position:absolute; filter: alpha(opacity=50); -moz-opacity: 0.50;">'.$icon.'</span>';
02153 $output = $icon;
02154
02155 if ($output && $wrap) {
02156 $wrParts = explode('|',$wrap);
02157 $output = $wrParts[0].$output.$wrParts[1];
02158 }
02159 }
02160
02161 return $output;
02162 }
02163 }
02164 }
02165
02177 function editOnClick($params,$backPath='',$requestUri='') {
02178 $retUrl = 'returnUrl='.($requestUri==-1?"'+T3_THIS_LOCATION+'":rawurlencode($requestUri?$requestUri:t3lib_div::getIndpEnv('REQUEST_URI')));
02179 return "document.location='".$backPath."alt_doc.php?".$retUrl.$params."'; return false;";
02180 }
02181
02196 function viewOnClick($id,$backPath='',$rootLine='',$anchor='',$altUrl='',$addGetVars='',$switchFocus=TRUE) {
02197 if ($altUrl) {
02198 $url = $altUrl;
02199 } else {
02200 if ($rootLine) {
02201 $parts = parse_url(t3lib_div::getIndpEnv('TYPO3_SITE_URL'));
02202 if (t3lib_BEfunc::getDomainStartPage($parts['host'],$parts['path'])) {
02203 $preUrl_temp = t3lib_BEfunc::firstDomainRecord($rootLine);
02204 }
02205 }
02206 $preUrl = $preUrl_temp ? (t3lib_div::getIndpEnv('TYPO3_SSL') ? 'https:
02207 $url = $preUrl.'/index.php?id='.$id.$addGetVars.$anchor;
02208 }
02209
02210 return "previewWin=window.open('".$url."','newTypo3FrontendWindow','status=1,menubar=1,resizable=1,location=1,scrollbars=1,toolbar=1');".
02211 ($switchFocus ? 'previewWin.focus();' : '');
02212 }
02213
02223 function getModTSconfig($id,$TSref) {
02224 $pageTS_modOptions = $GLOBALS['BE_USER']->getTSConfig($TSref,t3lib_BEfunc::getPagesTSconfig($id));
02225 $BE_USER_modOptions = $GLOBALS['BE_USER']->getTSConfig($TSref);
02226 $modTSconfig = t3lib_div::array_merge_recursive_overrule($pageTS_modOptions,$BE_USER_modOptions);
02227 return $modTSconfig;
02228 }
02229
02244 function getFuncMenu($mainParams,$elementName,$currentValue,$menuItems,$script='',$addparams='') {
02245 if (is_array($menuItems)) {
02246 if (!is_array($mainParams)) {
02247 $mainParams = array('id' => $mainParams);
02248 }
02249 $mainParams = t3lib_div::implodeArrayForUrl('',$mainParams);
02250
02251 if (!$script) { $script=basename(PATH_thisScript); }
02252
02253 $options = array();
02254 foreach($menuItems as $value => $label) {
02255 $options[] = '<option value="'.htmlspecialchars($value).'"'.(!strcmp($currentValue,$value)?' selected="selected"':'').'>'.
02256 t3lib_div::deHSCentities(htmlspecialchars($label)).
02257 '</option>';
02258 }
02259 if (count($options)) {
02260 $onChange = 'jumpToUrl(\''.$script.'?'.$mainParams.$addparams.'&'.$elementName.'=\'+this.options[this.selectedIndex].value,this);';
02261 return '
02262
02263 <!-- Function Menu of module -->
02264 <select name="'.$elementName.'" onchange="'.htmlspecialchars($onChange).'">
02265 '.implode('
02266 ',$options).'
02267 </select>
02268 ';
02269 }
02270 }
02271 }
02272
02287 function getFuncCheck($mainParams,$elementName,$currentValue,$script='',$addparams='',$tagParams='') {
02288 if (!is_array($mainParams)) {
02289 $mainParams = array('id' => $mainParams);
02290 }
02291 $mainParams = t3lib_div::implodeArrayForUrl('',$mainParams);
02292
02293 if (!$script) {basename(PATH_thisScript);}
02294 $onClick = 'jumpToUrl(\''.$script.'?'.$mainParams.$addparams.'&'.$elementName.'=\'+(this.checked?1:0),this);';
02295 return '<input type="checkbox" name="'.$elementName.'"'.($currentValue?' checked="checked"':'').' onclick="'.htmlspecialchars($onClick).'"'.($tagParams?' '.$tagParams:'').' />';
02296 }
02297
02312 function getFuncInput($mainParams,$elementName,$currentValue,$size=10,$script="",$addparams="") {
02313 if (!is_array($mainParams)) {
02314 $mainParams = array('id' => $mainParams);
02315 }
02316 $mainParams = t3lib_div::implodeArrayForUrl('',$mainParams);
02317
02318 if (!$script) {basename(PATH_thisScript);}
02319 $onChange = 'jumpToUrl(\''.$script.'?'.$mainParams.$addparams.'&'.$elementName.'=\'+escape(this.value),this);';
02320 return '<input type="text"'.$GLOBALS['TBE_TEMPLATE']->formWidth($size).' name="'.$elementName.'" value="'.htmlspecialchars($currentValue).'" onchange="'.htmlspecialchars($onChange).'" />';
02321 }
02322
02333 function unsetMenuItems($modTSconfig,$itemArray,$TSref) {
02334
02335 $conf = $GLOBALS['BE_USER']->getTSConfig($TSref,$modTSconfig);
02336 if (is_array($conf['properties'])) {
02337 reset($conf['properties']);
02338 while(list($key,$val)=each($conf['properties'])) {
02339 if (!$val) {
02340 unset($itemArray[$key]);
02341 }
02342 }
02343 }
02344 return $itemArray;
02345 }
02346
02356 function getSetUpdateSignal($set='') {
02357 global $BE_USER;
02358 $key = 't3lib_BEfunc::getSetUpdateSignal';
02359 $out='';
02360 if ($set) {
02361 $modData=array();
02362 $modData['set']=$set;
02363 $BE_USER->pushModuleData($key,$modData);
02364 } else {
02365 $modData = $BE_USER->getModuleData($key,'ses');
02366 if (trim($modData['set'])) {
02367 $l=explode(',',$modData['set']);
02368 while(list(,$v)=each($l)) {
02369 switch($v) {
02370 case 'updatePageTree':
02371 case 'updateFolderTree':
02372 $out.='
02373 <script type="text/javascript">
02374
02375 if (top.content && top.content.nav_frame && top.content.nav_frame.refresh_nav) {
02376 top.content.nav_frame.refresh_nav();
02377 }
02378
02379 </script>';
02380 break;
02381 }
02382 }
02383 $modData=array();
02384 $modData['set']='';
02385 $BE_USER->pushModuleData($key,$modData);
02386 }
02387 }
02388 return $out;
02389 }
02390
02391
02407 function getModuleData($MOD_MENU, $CHANGED_SETTINGS, $modName, $type='', $dontValidateList='', $setDefaultList='') {
02408
02409 if ($modName && is_string($modName)) {
02410
02411 $settings = $GLOBALS['BE_USER']->getModuleData($modName,$type);
02412
02413 $changed=0;
02414 if (!is_array($settings)) {
02415 $changed=1;
02416 $settings=array();
02417 }
02418 if (is_array($MOD_MENU)) {
02419 reset($MOD_MENU);
02420 while(list($key,$var)=each($MOD_MENU)) {
02421
02422 if (is_array($CHANGED_SETTINGS) && isset($CHANGED_SETTINGS[$key]) && strcmp($settings[$key],$CHANGED_SETTINGS[$key])) {
02423 $settings[$key] = (string)$CHANGED_SETTINGS[$key];
02424 $changed=1;
02425 }
02426
02427 if (is_array($var) && (!$dontValidateList || !t3lib_div::inList($dontValidateList,$key))) {
02428
02429 if (is_array($settings[$key]) || !isset($MOD_MENU[$key][$settings[$key]])) {
02430 $settings[$key]=(string)key($var);
02431 $changed=1;
02432 }
02433 }
02434 if ($setDefaultList && !is_array($var)) {
02435 if (t3lib_div::inList($setDefaultList,$key) && !isset($settings[$key])) {
02436 $settings[$key]=$var;
02437 }
02438 }
02439 }
02440 } else {die ('No menu!');}
02441
02442 if ($changed) {
02443 $GLOBALS['BE_USER']->pushModuleData($modName,$settings);
02444 }
02445
02446 return $settings;
02447 } else {die ('Wrong module name: "'.$modName.'"');}
02448 }
02449
02450
02451
02452
02453
02454
02455
02456
02457
02458
02459
02460
02461
02462
02463
02464
02465
02466
02467
02468
02469
02482 function lockRecords($table='',$uid=0,$pid=0) {
02483 $user_id = intval($GLOBALS['BE_USER']->user['uid']);
02484 if ($table && $uid) {
02485 $fields_values = array(
02486 'userid' => $user_id,
02487 'tstamp' => $GLOBALS['EXEC_TIME'],
02488 'record_table' => $table,
02489 'record_uid' => $uid,
02490 'username' => $GLOBALS['BE_USER']->user['username'],
02491 'record_pid' => $pid
02492 );
02493
02494 $GLOBALS['TYPO3_DB']->exec_INSERTquery('sys_lockedrecords', $fields_values);
02495 } else {
02496 $GLOBALS['TYPO3_DB']->exec_DELETEquery('sys_lockedrecords', 'userid='.intval($user_id));
02497 }
02498 }
02499
02511 function isRecordLocked($table,$uid) {
02512 global $LOCKED_RECORDS;
02513 if (!is_array($LOCKED_RECORDS)) {
02514 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
02515 '*',
02516 'sys_lockedrecords',
02517 'sys_lockedrecords.userid!='.intval($GLOBALS['BE_USER']->user['uid']).'
02518 AND sys_lockedrecords.tstamp > '.($GLOBALS['EXEC_TIME']-2*3600)
02519 );
02520 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
02521 $LOCKED_RECORDS[$row['record_table'].':'.$row['record_uid']]=$row;
02522 $LOCKED_RECORDS[$row['record_table'].':'.$row['record_uid']]['msg']=sprintf(
02523 $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.lockedRecord'),
02524 $row['username'],
02525 t3lib_BEfunc::calcAge($GLOBALS['EXEC_TIME']-$row['tstamp'],$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears'))
02526 );
02527 if ($row['record_pid'] && !isset($LOCKED_RECORDS[$row['record_table'].':'.$row['record_pid']])) {
02528 $LOCKED_RECORDS['pages:'.$row['record_pid']]['msg']=sprintf(
02529 $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.lockedRecord_content'),
02530 $row['username'],
02531 t3lib_BEfunc::calcAge($GLOBALS['EXEC_TIME']-$row['tstamp'],$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears'))
02532 );
02533 }
02534 }
02535 }
02536 return $LOCKED_RECORDS[$table.':'.$uid];
02537 }
02538
02551 function exec_foreign_table_where_query($fieldValue,$field='',$TSconfig=array(),$prefix='') {
02552 global $TCA;
02553 $foreign_table = $fieldValue['config'][$prefix.'foreign_table'];
02554 $rootLevel = $TCA[$foreign_table]['ctrl']['rootLevel'];
02555
02556 $fTWHERE = $fieldValue['config'][$prefix.'foreign_table_where'];
02557 if (strstr($fTWHERE,'###REC_FIELD_')) {
02558 $fTWHERE_parts = explode('###REC_FIELD_',$fTWHERE);
02559 while(list($kk,$vv)=each($fTWHERE_parts)) {
02560 if ($kk) {
02561 $fTWHERE_subpart = explode('###',$vv,2);
02562 $fTWHERE_parts[$kk]=$TSconfig['_THIS_ROW'][$fTWHERE_subpart[0]].$fTWHERE_subpart[1];
02563 }
02564 }
02565 $fTWHERE = implode('',$fTWHERE_parts);
02566 }
02567
02568 $fTWHERE = str_replace('###CURRENT_PID###',intval($TSconfig['_CURRENT_PID']),$fTWHERE);
02569 $fTWHERE = str_replace('###THIS_UID###',intval($TSconfig['_THIS_UID']),$fTWHERE);
02570 $fTWHERE = str_replace('###THIS_CID###',intval($TSconfig['_THIS_CID']),$fTWHERE);
02571 $fTWHERE = str_replace('###STORAGE_PID###',intval($TSconfig['_STORAGE_PID']),$fTWHERE);
02572 $fTWHERE = str_replace('###SITEROOT###',intval($TSconfig['_SITEROOT']),$fTWHERE);
02573 $fTWHERE = str_replace('###PAGE_TSCONFIG_ID###',intval($TSconfig[$field]['PAGE_TSCONFIG_ID']),$fTWHERE);
02574 $fTWHERE = str_replace('###PAGE_TSCONFIG_IDLIST###',$GLOBALS['TYPO3_DB']->cleanIntList($TSconfig[$field]['PAGE_TSCONFIG_IDLIST']),$fTWHERE);
02575 $fTWHERE = str_replace('###PAGE_TSCONFIG_STR###',$GLOBALS['TYPO3_DB']->quoteStr($TSconfig[$field]['PAGE_TSCONFIG_STR'], $foreign_table),$fTWHERE);
02576
02577
02578 $wgolParts = $GLOBALS['TYPO3_DB']->splitGroupOrderLimit($fTWHERE);
02579 if ($rootLevel) {
02580 $queryParts = array(
02581 'SELECT' => t3lib_BEfunc::getCommonSelectFields($foreign_table,$foreign_table.'.'),
02582 'FROM' => $foreign_table,
02583 'WHERE' => $foreign_table.'.pid=0 '.
02584 t3lib_BEfunc::deleteClause($foreign_table).' '.
02585 $wgolParts['WHERE'],
02586 'GROUPBY' => $wgolParts['GROUPBY'],
02587 'ORDERBY' => $wgolParts['ORDERBY'],
02588 'LIMIT' => $wgolParts['LIMIT']
02589 );
02590 } else {
02591 $pageClause = $GLOBALS['BE_USER']->getPagePermsClause(1);
02592 if ($foreign_table!='pages') {
02593 $queryParts = array(
02594 'SELECT' => t3lib_BEfunc::getCommonSelectFields($foreign_table,$foreign_table.'.'),
02595 'FROM' => $foreign_table.',pages',
02596 'WHERE' => 'pages.uid='.$foreign_table.'.pid
02597 AND pages.deleted=0 '.
02598 t3lib_BEfunc::deleteClause($foreign_table).
02599 ' AND '.$pageClause.' '.
02600 $wgolParts['WHERE'],
02601 'GROUPBY' => $wgolParts['GROUPBY'],
02602 'ORDERBY' => $wgolParts['ORDERBY'],
02603 'LIMIT' => $wgolParts['LIMIT']
02604 );
02605 } else {
02606 $queryParts = array(
02607 'SELECT' => t3lib_BEfunc::getCommonSelectFields($foreign_table,$foreign_table.'.'),
02608 'FROM' => 'pages',
02609 'WHERE' => 'pages.deleted=0
02610 AND '.$pageClause.' '.
02611 $wgolParts['WHERE'],
02612 'GROUPBY' => $wgolParts['GROUPBY'],
02613 'ORDERBY' => $wgolParts['ORDERBY'],
02614 'LIMIT' => $wgolParts['LIMIT']
02615 );
02616 }
02617 }
02618
02619 return $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts);
02620 }
02621
02632 function getTCEFORM_TSconfig($table,$row) {
02633 $res = array();
02634 $typeVal = t3lib_BEfunc::getTCAtypeValue($table,$row);
02635
02636
02637 list($TScID,$cPid) = t3lib_BEfunc::getTSCpid($table,$row['uid'],$row['pid']);
02638
02639 $rootLine = t3lib_BEfunc::BEgetRootLine($TScID,'');
02640 if ($TScID>=0) {
02641 $tempConf = $GLOBALS['BE_USER']->getTSConfig('TCEFORM.'.$table,t3lib_BEfunc::getPagesTSconfig($TScID,$rootLine));
02642 if (is_array($tempConf['properties'])) {
02643 while(list($key,$val)=each($tempConf['properties'])) {
02644 if (is_array($val)) {
02645 $fieldN = substr($key,0,-1);
02646 $res[$fieldN] = $val;
02647 unset($res[$fieldN]['types.']);
02648 if (strcmp($typeVal,'') && is_array($val['types.'][$typeVal.'.'])) {
02649 $res[$fieldN] = t3lib_div::array_merge_recursive_overrule($res[$fieldN],$val['types.'][$typeVal.'.']);
02650 }
02651 }
02652 }
02653 }
02654 }
02655 $res['_CURRENT_PID']=$cPid;
02656 $res['_THIS_UID']=$row['uid'];
02657 $res['_THIS_CID']=$row['cid'];
02658 $res['_THIS_ROW']=$row;
02659 reset($rootLine);
02660 while(list(,$rC)=each($rootLine)) {
02661 if (!$res['_STORAGE_PID']) $res['_STORAGE_PID']=intval($rC['storage_pid']);
02662 if (!$res['_SITEROOT']) $res['_SITEROOT']=$rC['is_siteroot']?intval($rC['uid']):0;
02663 }
02664
02665 return $res;
02666 }
02667
02679 function getTSconfig_pidValue($table,$uid,$pid) {
02680 if (t3lib_div::testInt($pid)) {
02681 $thePidValue = intval($pid);
02682 if ($thePidValue<0) {
02683 $pidRec = t3lib_BEfunc::getRecord($table,abs($thePidValue),'pid');
02684 $thePidValue= is_array($pidRec) ? $pidRec['pid'] : -2;
02685 }
02686
02687 } else {
02688 $rr = t3lib_BEfunc::getRecord($table,$uid,'pid');
02689 if (is_array($rr)) {
02690 $thePidValue = $rr['pid'];
02691 } else $thePidValue=-1;
02692 }
02693 return $thePidValue;
02694 }
02695
02707 function getPidForModTSconfig($table,$uid,$pid) {
02708 $retVal = ($table=='pages' && t3lib_div::testInt($uid)) ? $uid : $pid;
02709 return $retVal;
02710 }
02711
02723 function getTSCpid($table,$uid,$pid) {
02724
02725 $cPid = t3lib_BEfunc::getTSconfig_pidValue($table,$uid,$pid);
02726
02727 $TScID = t3lib_BEfunc::getPidForModTSconfig($table,$uid,$cPid);
02728
02729 return array($TScID,$cPid);
02730 }
02731
02739 function firstDomainRecord($rootLine) {
02740 if (t3lib_extMgm::isLoaded('cms')) {
02741 reset($rootLine);
02742 while(list(,$row)=each($rootLine)) {
02743 $dRec = t3lib_BEfunc::getRecordsByField('sys_domain','pid',$row['uid'],' AND redirectTo=\'\' AND hidden=0', '', 'sorting');
02744 if (is_array($dRec)) {
02745 reset($dRec);
02746 $dRecord = current($dRec);
02747 return ereg_replace('\/$','',$dRecord['domainName']);
02748 }
02749 }
02750 }
02751 }
02752
02761 function getDomainStartPage($domain, $path='') {
02762 if (t3lib_extMgm::isLoaded('cms')) {
02763 $domain = explode(':',$domain);
02764 $domain = strtolower(ereg_replace('\.$','',$domain[0]));
02765
02766 $path = trim(ereg_replace('\/[^\/]*$','',$path));
02767
02768 $domain.=$path;
02769
02770 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('sys_domain.*', 'pages,sys_domain', '
02771 pages.uid=sys_domain.pid
02772 AND sys_domain.hidden=0
02773 AND (sys_domain.domainName='.$GLOBALS['TYPO3_DB']->fullQuoteStr($domain, 'sys_domain').' or sys_domain.domainName='.$GLOBALS['TYPO3_DB']->fullQuoteStr($domain.'/', 'sys_domain').')'.
02774 t3lib_BEfunc::deleteClause('pages'),
02775 '', '', '1');
02776 return $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
02777 }
02778 }
02779
02788 function selectVersionsOfRecord($table, $uid, $fields='*') {
02789 global $TCA;
02790
02791 if ($TCA[$table] && $TCA[$table]['ctrl']['versioning']) {
02792
02793
02794 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
02795 $fields,
02796 $table,
02797 '(t3ver_oid='.intval($uid).' || uid='.intval($uid).')'.
02798 t3lib_BEfunc::deleteClause($table),
02799 '',
02800 't3ver_id DESC'
02801 );
02802
02803
02804 $realPid = 0;
02805 $outputRows = array();
02806 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
02807 if ($uid==$row['uid']) {
02808 $row['_CURRENT_VERSION']=TRUE;
02809 $realPid = $row['pid'];
02810 }
02811 $outputRows[] = $row;
02812 }
02813
02814
02815 foreach($outputRows as $idx => $oRow) {
02816 $outputRows[$idx]['_REAL_PID'] = $realPid;
02817 }
02818
02819 return $outputRows;
02820 }
02821 }
02822
02834 function RTEsetup($RTEprop,$table,$field,$type='') {
02835 $thisConfig = is_array($RTEprop['default.']) ? $RTEprop['default.'] : array();
02836 $thisFieldConf = $RTEprop['config.'][$table.'.'][$field.'.'];
02837 if (is_array($thisFieldConf)) {
02838 unset($thisFieldConf['types.']);
02839 $thisConfig = t3lib_div::array_merge_recursive_overrule($thisConfig,$thisFieldConf);
02840 }
02841 if ($type && is_array($RTEprop['config.'][$table.'.'][$field.'.']['types.'][$type.'.'])) {
02842 $thisConfig = t3lib_div::array_merge_recursive_overrule($thisConfig,$RTEprop['config.'][$table.'.'][$field.'.']['types.'][$type.'.']);
02843 }
02844 return $thisConfig;
02845 }
02846
02853 function &RTEgetObj() {
02854
02855
02856 if (!isset($GLOBALS['T3_VAR']['RTEobj'])) {
02857
02858
02859 $GLOBALS['T3_VAR']['RTEobj'] = array();
02860
02861
02862 if (is_array($GLOBALS['TYPO3_CONF_VARS']['BE']['RTE_reg'])) {
02863 foreach($GLOBALS['TYPO3_CONF_VARS']['BE']['RTE_reg'] as $extKey => $rteObjCfg) {
02864 $rteObj = &t3lib_div::getUserObj($rteObjCfg['objRef']);
02865 if (is_object($rteObj)) {
02866 if ($rteObj->isAvailable()) {
02867 $GLOBALS['T3_VAR']['RTEobj'] = &$rteObj;
02868 break;
02869 } else {
02870 $GLOBALS['T3_VAR']['RTEobj'] = array_merge($GLOBALS['T3_VAR']['RTEobj'], $rteObj->errorLog);
02871 }
02872 }
02873 }
02874 }
02875
02876 if (!count($GLOBALS['T3_VAR']['RTEobj'])) {
02877 $GLOBALS['T3_VAR']['RTEobj'][] = 'No RTEs configured at all';
02878 }
02879 }
02880
02881
02882 return $GLOBALS['T3_VAR']['RTEobj'];
02883 }
02884
02892 function &softRefParserObj($spKey) {
02893
02894
02895 if (!isset($GLOBALS['T3_VAR']['softRefParser'][$spKey])) {
02896
02897
02898 $GLOBALS['T3_VAR']['softRefParser'][$spKey] = '';
02899
02900
02901 $objRef = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['softRefParser'][$spKey] ?
02902 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['softRefParser'][$spKey] :
02903 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['softRefParser_GL'][$spKey];
02904 if ($objRef) {
02905 $softRefParserObj = &t3lib_div::getUserObj($objRef,'');
02906 if (is_object($softRefParserObj)) {
02907 $GLOBALS['T3_VAR']['softRefParser'][$spKey] = &$softRefParserObj;
02908 }
02909 }
02910 }
02911
02912
02913 return $GLOBALS['T3_VAR']['softRefParser'][$spKey];
02914 }
02915
02924 function explodeSoftRefParserList($parserList, $table, $field) {
02925
02926
02927 if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['softRefParser_GL'])) {
02928 $parserList = implode(',',array_keys($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['softRefParser_GL'])).','.$parserList;
02929 }
02930
02931
02932 if (!strlen($parserList)) return FALSE;
02933
02934
02935 $keyList = t3lib_div::trimExplode(',', $parserList, 1);
02936 $output = array();
02937
02938 foreach($keyList as $val) {
02939 $reg = array();
02940 if (ereg('^([[:alnum:]_-]+)\[(.*)\]$', $val, $reg)) {
02941 $output[$reg[1]] = t3lib_div::trimExplode(';', $reg[2], 1);
02942 } else {
02943 $output[$val] = '';
02944 }
02945 }
02946 return $output;
02947 }
02948
02956 function isModuleSetInTBE_MODULES($modName) {
02957 reset($GLOBALS['TBE_MODULES']);
02958 $loaded=array();
02959 while(list($mkey,$list)=each($GLOBALS['TBE_MODULES'])) {
02960 $loaded[$mkey]=1;
02961 if (trim($list)) {
02962 $subList = t3lib_div::trimExplode(',',$list,1);
02963 while(list(,$skey)=each($subList)) {
02964 $loaded[$mkey.'_'.$skey]=1;
02965 }
02966 }
02967 }
02968 return $modName && isset($loaded[$modName]);
02969 }
02970
02971
02972
02973
02974
02975
02976
02977
02978
02979
02980
02981
02982
02983
02984
02985
02986
02987
02988
02989
02990
02991
02992
02993
02994
03005 function typo3PrintError($header,$text,$js='',$head=1) {
03006
03007
03008 if ($js) {
03009 echo "alert('".t3lib_div::slashJS($header.'\n'.$text)."');";
03010 } else {
03011 echo $head?'<html>
03012 <head>
03013 <title>Error!</title>
03014 </head>
03015 <body bgcolor="white" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">':'';
03016 echo '<div align="center">
03017 <table border="0" cellspacing="0" cellpadding="0" width="333">
03018 <tr>
03019 <td align="center">'.
03020 ($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" />').
03021 '</td>
03022 </tr>
03023 <tr>
03024 <td bgcolor="black">
03025 <table width="100%" border="0" cellspacing="1" cellpadding="10">
03026 <tr>
03027 <td bgcolor="#F4F0E8">
03028 <font face="verdana,arial,helvetica" size="2">';
03029 echo '<b><center><font size="+1">'.$header.'</font></center></b><br />'.$text;
03030 echo ' </font>
03031 </td>
03032 </tr>
03033 </table>
03034 </td>
03035 </tr>
03036 </table>
03037 </div>';
03038 echo $head?'
03039 </body>
03040 </html>':'';
03041 }
03042 }
03043
03049 function TYPO3_copyRightNotice() {
03050 global $TYPO3_CONF_VARS;
03051
03052
03053 $loginCopyrightWarrantyProvider = strip_tags(trim($TYPO3_CONF_VARS['SYS']['loginCopyrightWarrantyProvider']));
03054 $loginCopyrightWarrantyURL = strip_tags(trim($TYPO3_CONF_VARS['SYS']['loginCopyrightWarrantyURL']));
03055
03056 if (strlen($loginCopyrightWarrantyProvider)>=2 && strlen($loginCopyrightWarrantyURL)>=10) {
03057 $warrantyNote='Warranty is supplied by '.htmlspecialchars($loginCopyrightWarrantyProvider).'; <a href="'.htmlspecialchars($loginCopyrightWarrantyURL).'" target="_blank">click for details.</a>';
03058 } else {
03059 $warrantyNote='TYPO3 comes with ABSOLUTELY NO WARRANTY; <a href="http://typo3.com/1316.0.html" target="_blank">click for details.</a>';
03060 }
03061 $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-2005 Kasper Skårhøj. Extensions are copyright of their respective owners. Go to <a href="http://typo3.com/" target="_blank">http:
03062 '.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.';
03063
03064 return $cNotice;
03065 }
03066
03073 function displayWarningMessages() {
03074 if($GLOBALS['BE_USER']->isAdmin()) {
03075 $warnings = array();
03076
03077
03078 if($GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword']==md5('joh316')) {
03079 $warnings[] = 'The password of your Install Tool is still using the default value "joh316"';
03080 }
03081
03082
03083 $where_clause = 'username='.$GLOBALS['TYPO3_DB']->fullQuoteStr('admin','be_users').' AND password='.$GLOBALS['TYPO3_DB']->fullQuoteStr('5f4dcc3b5aa765d61d8327deb882cf99','be_users').t3lib_BEfunc::deleteClause('be_users');
03084 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('username, password', 'be_users', $where_clause);
03085 if ($GLOBALS['TYPO3_DB']->sql_num_rows($res)) {
03086 $warnings[] = 'The backend user "admin" with password "password" is still existing';
03087 }
03088
03089
03090 if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] == '') {
03091 $url = 'install/index.php?redirect_url=index.php'.urlencode('?TYPO3_INSTALL[type]=config#set_encryptionKey');
03092 $warnings[] = 'The encryption key is not set! Set it in <a href="'.$url.'">$TYPO3_CONF_VARS[SYS][encryptionKey]</a>';
03093 }
03094
03095 if(count($warnings)) {
03096 $content = '<table border="0" cellpadding="0" cellspacing="0" class="warningbox"><tr><td>'.
03097 $GLOBALS['TBE_TEMPLATE']->icons(3).'Security warning!<br />'.
03098 '- '.implode('<br />- ', $warnings).'<br /><br />'.
03099 'It is highly recommended that you change this immediately.'.
03100 '</td></tr></table>';
03101
03102 unset($warnings);
03103 return $content;
03104 }
03105 }
03106 return '<p> </p>';
03107 }
03108
03116 function getPathType_web_nonweb($path) {
03117 return t3lib_div::isFirstPartOfStr($path,t3lib_div::getIndpEnv('TYPO3_DOCUMENT_ROOT')) ? 'web' : '';
03118 }
03119
03128 function ADMCMD_previewCmds($pageinfo) {
03129 if ($pageinfo['fe_group']>0) {
03130 $simUser = '&ADMCMD_simUser='.$pageinfo['fe_group'];
03131 }
03132 if ($pageinfo['starttime']>time()) {
03133 $simTime = '&ADMCMD_simTime='.$pageinfo['starttime'];
03134 }
03135 if ($pageinfo['endtime']<time() && $pageinfo['endtime']!=0) {
03136 $simTime = '&ADMCMD_simTime='.($pageinfo['endtime']-1);
03137 }
03138 return $simUser.$simTime;
03139 }
03140
03150 function processParams($params) {
03151 $paramArr=array();
03152 $lines=explode(chr(10),$params);
03153 while(list(,$val)=each($lines)) {
03154 $val = trim($val);
03155 if ($val) {
03156 $pair = explode('=',$val,2);
03157 $paramArr[trim($pair[0])] = trim($pair[1]);
03158 }
03159 }
03160 return $paramArr;
03161 }
03162
03176 function getListOfBackendModules($name,$perms_clause,$backPath='',$script='index.php') {
03177 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'pages', 'doktype!=255 AND module IN (\''.implode('\',\'',$name).'\') AND'.$perms_clause.t3lib_BEfunc::deleteClause('pages'));
03178 if (!$GLOBALS['TYPO3_DB']->sql_num_rows($res)) return false;
03179
03180 $out='';
03181 $theRows=array();
03182 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
03183 $theRows[]=$row;
03184 $out.='<span class="nobr"><a href="'.htmlspecialchars($script.'?id='.$row['uid']).'">'.
03185 t3lib_iconWorks::getIconImage('pages',$row,$backPath,'title="'.htmlspecialchars(t3lib_BEfunc::getRecordPath($row['uid'],$perms_clause,20)).'" align="top"').
03186 htmlspecialchars($row['title']).
03187 '</a></span><br />';
03188 }
03189 return array('rows'=>$theRows,'list'=>$out);
03190 }
03191 }
03192 ?>