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
00103 require_once (PATH_t3lib.'class.t3lib_basicfilefunc.php');
00104 require_once (PATH_t3lib.'class.t3lib_browsetree.php');
00105 require_once (PATH_t3lib.'class.t3lib_foldertree.php');
00106 require_once (PATH_t3lib.'class.t3lib_tstemplate.php');
00107 require_once (PATH_t3lib.'class.t3lib_loadmodules.php');
00108 require_once (PATH_t3lib.'class.t3lib_tsparser_ext.php');
00109 require_once (PATH_typo3.'class.alt_menu_functions.inc');
00110
00111 $BE_USER->modAccess($MCONF,1);
00112
00113
00114
00115
00116
00117
00125 class localPageTree extends t3lib_browseTree {
00126 var $expandFirst=0;
00127 var $expandAll=0;
00128
00136 function localPageTree($BE_USER,$WEBMOUNTS='') {
00137 $this->init();
00138
00139 $this->BE_USER = $BE_USER;
00140 $this->MOUNTS = $WEBMOUNTS;
00141 $this->clause = $this->ext_permsC();
00142 $this->orderByFields = 'sorting';
00143 }
00144
00150 function ext_permsC() {
00151 return '';
00152 }
00153
00161 function wrapTitle($str,$row) {
00162 return $str;
00163 }
00164
00173 function PM_ATagWrap($icon,$cmd,$bMark='') {
00174 return '';
00175 }
00176
00184 function wrapIcon($icon,$row) {
00185
00186 $title = '['.$row['uid'].'] '.t3lib_BEfunc::getRecordPath($row['uid'],'',15);
00187 $theIcon = $this->addTagAttributes($icon,($this->titleAttrib ? $this->titleAttrib.'="'.htmlspecialchars($title).'"' : '').' border="0"');
00188
00189 return $theIcon;
00190 }
00191
00197 function initializePositionSaving() {
00198 $this->stored=array();
00199 }
00200 }
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00218 class printAllPageTree extends localPageTree {
00219 var $expandFirst=1;
00220 var $expandAll=1;
00221
00227 function ext_permsC() {
00228 return ' AND '.$this->BE_USER->getPagePermsClause(1);
00229 }
00230
00239 function PM_ATagWrap($icon,$cmd,$bMark='') {
00240 return $icon;
00241 }
00242
00250 function wrapIcon($icon,$row) {
00251
00252 $title = '['.$row['uid'].']';
00253 $theIcon = $this->addTagAttributes($icon,($this->titleAttrib ? $this->titleAttrib.'="'.htmlspecialchars($title).'"' : '').' border="0"');
00254
00255 return $theIcon;
00256 }
00257 }
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00275 class printAllPageTree_perms extends printAllPageTree {
00276
00284 function printTree($treeArr='',$printPath=0) {
00285 $titleLen=intval($this->BE_USER->uc['titleLen']);
00286
00287 $be_user_Array = t3lib_BEfunc::getUserNames();
00288 $be_group_Array = t3lib_BEfunc::getGroupNames();
00289 $lines=array();
00290 $lines[]='<tr class="bgColor5">
00291 <td nowrap="nowrap"><strong>Page title:</strong></td>
00292 '.($printPath?'<td nowrap="nowrap"><strong>Path:</strong></td>':'').'
00293 <td nowrap="nowrap" colspan=2><strong>User:</strong></td>
00294 <td nowrap="nowrap" colspan=2><strong>Group: </strong></td>
00295 <td nowrap="nowrap"><strong>Everybody: </strong></td>
00296 <td nowrap="nowrap"><strong>This user: </strong></td>
00297 <td nowrap="nowrap"><strong>Main group:</strong></td>
00298 </tr>';
00299
00300 if (!is_array($treeArr)) $treeArr=$this->tree;
00301 reset($treeArr);
00302 while(list($k,$v)=each($treeArr)) {
00303 $col1 = ' bgcolor="'.t3lib_div::modifyHtmlColor($GLOBALS['SOBE']->doc->bgColor4,+10,+10,+10).'"';
00304 $row = $v['row'];
00305 $title = htmlspecialchars(t3lib_div::fixed_lgd_cs($row['title'],$this->BE_USER->uc['titleLen']));
00306 $lines[]='<tr class="bgColor4">
00307 <td nowrap="nowrap">'.$v['HTML'].$title.' </td>
00308 '.($printPath?'<td nowrap="nowrap">'.htmlspecialchars(t3lib_BEfunc::getRecordPath ($row['pid'],'',15)).' </td>':'').'
00309 <td nowrap="nowrap"'.$col1.'>'.$be_user_Array[$row['perms_userid']]['username'].' </td>
00310 <td nowrap="nowrap"'.$col1.'>'.$this->ext_printPerms($row['perms_user']).' </td>
00311 <td nowrap="nowrap">'.$be_group_Array[$row['perms_groupid']]['title'].' </td>
00312 <td nowrap="nowrap">'.$this->ext_printPerms($row['perms_group']).' </td>
00313 <td nowrap="nowrap" align="center" '.$col1.'>'.$this->ext_printPerms($row['perms_everybody']).' </td>
00314 <td nowrap="nowrap" align="center">'.($row['editlock'] ? '<img '.t3lib_iconWorks::skinImg($this->backPath,'gfx/recordlock_warning2.gif').' title="Edit lock prevents all editing" alt="" />' : $this->ext_printPerms($this->BE_USER->calcPerms($row))).' </td>
00315 <td nowrap="nowrap" align="center">'.$this->ext_printPerms($this->ext_groupPerms($row,$be_group_Array[$this->BE_USER->firstMainGroup])).' </td>
00316 </tr>';
00317 }
00318 return '<table border="0" cellpadding="0" cellspacing="0">'.implode('',$lines).'</table>';
00319 }
00320
00327 function ext_printPerms($int) {
00328 $str='';
00329 $str.= (($int&1)?'*':'<font color="red">x</font>');
00330 $str.= (($int&16)?'*':'<font color="red">x</font>');
00331 $str.= (($int&2)?'*':'<font color="red">x</font>');
00332 $str.= (($int&4)?'*':'<font color="red">x</font>');
00333 $str.= (($int&8)?'*':'<font color="red">x</font>');
00334
00335 return '<b><font color="green">'.$str.'</font></b>';
00336 }
00337
00345 function ext_groupPerms($row,$firstGroup) {
00346 if (is_array($row)) {
00347 $out=intval($row['perms_everybody']);
00348 if ($row['perms_groupid'] && $firstGroup['uid']==$row['perms_groupid']) {
00349 $out|= intval($row['perms_group']);
00350 }
00351 return $out;
00352 }
00353 }
00354 }
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00373 class localFolderTree extends t3lib_folderTree {
00374 var $expandFirst=0;
00375 var $expandAll=0;
00376
00384 function localFolderTree($BE_USER,$FILEMOUNTS='') {
00385 $this->init();
00386
00387 $this->BE_USER = $BE_USER;
00388 $this->MOUNTS = $FILEMOUNTS;
00389 $this->clause = '';
00390 }
00391
00399 function wrapTitle($str,$row) {
00400 return $str;
00401 }
00402
00411 function PM_ATagWrap($icon,$cmd,$bMark='') {
00412 return '';
00413 }
00414
00422 function wrapIcon($icon,$row) {
00423
00424 $title = $GLOBALS['SOBE']->localPath($row['path']);
00425 $theIcon = $this->addTagAttributes($icon,($this->titleAttrib ? $this->titleAttrib.'="'.htmlspecialchars($title).'"' : ''));
00426
00427 return $theIcon;
00428 }
00429
00435 function initializePositionSaving() {
00436 $this->stored=array();
00437 }
00438 }
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00459 class printAllFolderTree extends localFolderTree {
00460 var $expandFirst=1;
00461 var $expandAll=1;
00462
00471 function PM_ATagWrap($icon,$cmd,$bMark='') {
00472 return $icon;
00473 }
00474 }
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00493 class local_beUserAuth extends t3lib_beUserAuth {
00494 var $ext_pageIdsFromMounts='';
00495 var $ext_non_readAccessPageArray=array();
00496
00505 function returnWebmounts($pClause='') {
00506
00507
00508 $webmounts = (string)($this->groupData['webmounts'])!='' ? explode(',',$this->groupData['webmounts']) : Array();
00509
00510
00511 $pClause=$pClause?$pClause:$this->getPagePermsClause(1);
00512
00513
00514 foreach($webmounts as $k => $id) {
00515 $rec=t3lib_BEfunc::getRecord('pages',$id,'*',' AND '.$pClause);
00516 if (!is_array($rec)) {
00517 $this->ext_non_readAccessPageArray[$id]=t3lib_BEfunc::getRecord('pages',$id);
00518 unset($webmounts[$k]);
00519 }
00520 }
00521 return $webmounts;
00522 }
00523
00529 function ext_non_readAccessPages() {
00530 $lines=array();
00531
00532 foreach($this->ext_non_readAccessPageArray as $pA) {
00533 if ($pA) $lines[]=t3lib_BEfunc::getRecordPath($pA['uid'],'',15);
00534 }
00535 if (count($lines)) {
00536 return '<table bgcolor="red" border="0" cellpadding="0" cellspacing="0">
00537 <tr>
00538 <td align="center"><font color="white"><strong>The user has no read access to these DB-mounts!</strong></font></td>
00539 </tr>
00540 <tr>
00541 <td>'.implode('</td></tr><tr><td>',$lines).'</td>
00542 </tr>
00543 </table>';
00544 }
00545 }
00546
00552 function user_where_clause() {
00553 return 'AND pid=0 ';
00554 }
00555
00564 function ext_printOverview($uInfo,$compareFlags,$printTrees=0) {
00565
00566 if ($printTrees) {
00567
00568 $className=t3lib_div::makeInstanceClassName(!$this->isAdmin() ? 'printAllPageTree_perms' : 'printAllPageTree');
00569 $pagetree = new $className($this,$this->returnWebmounts());
00570 $pagetree->addField('perms_user',1);
00571 $pagetree->addField('perms_group',1);
00572 $pagetree->addField('perms_everybody',1);
00573 $pagetree->addField('perms_userid',1);
00574 $pagetree->addField('perms_groupid',1);
00575 $pagetree->addField('editlock',1);
00576
00577
00578 $className=t3lib_div::makeInstanceClassName('printAllFolderTree');
00579 $foldertree = new $className($this,$this->returnFilemounts());
00580 } else {
00581
00582 $className=t3lib_div::makeInstanceClassName('localPageTree');
00583 $pagetree = new $className($this,$this->returnWebmounts('1=1'));
00584
00585
00586 $className=t3lib_div::makeInstanceClassName('localFolderTree');
00587 $foldertree = new $className($this,$this->returnFilemounts());
00588 }
00589
00590
00591 $modNames = array(
00592 'web' => 'Web',
00593 'web_layout' => 'Page',
00594 'web_modules' => 'Modules',
00595 'web_info' => 'Info',
00596 'web_perms' => 'Access',
00597 'web_func' => 'Func',
00598 'web_list' => 'List',
00599 'web_ts' => 'Template',
00600 'file' => 'File',
00601 'file_list' => 'List',
00602 'file_images' => 'Images',
00603 'doc' => 'Doc.',
00604 'help' => 'Help',
00605 'help_about' => 'About',
00606 'help_quick' => 'User manual',
00607 'help_welcome' => 'Welcome',
00608 'user' => 'User',
00609 'user_setup' => 'Setup',
00610 'user_task' => 'Task center'
00611 );
00612
00613
00614 $out=array();
00615 foreach($uInfo as $k => $v) {
00616 if ($compareFlags[$k]) {
00617 switch($k) {
00618 case 'filemounts':
00619 $out[$k] = $foldertree->getBrowsableTree();
00620 break;
00621 case 'webmounts':
00622
00623 $pagetree->addSelfId=1;
00624 $out[$k] = $this->ext_non_readAccessPages();
00625 $out[$k].= $pagetree->getBrowsableTree();
00626 $this->ext_pageIdsFromMounts=implode(',',array_unique($pagetree->ids));
00627 break;
00628 case 'tempPath':
00629 $out[$k] = $GLOBALS['SOBE']->localPath($v);
00630 break;
00631 case 'pagetypes_select':
00632 $pageTypes = explode(',',$v);
00633 reset($pageTypes);
00634 while(list($kk,$vv)=each($pageTypes)) {
00635 $pageTypes[$kk]=$GLOBALS['LANG']->sL(t3lib_BEfunc::getLabelFromItemlist('pages','doktype',$vv));
00636 }
00637 $out[$k] = implode('<br />',$pageTypes);
00638 break;
00639 case 'tables_select':
00640 case 'tables_modify':
00641 $tables = explode(',',$v);
00642 reset($tables);
00643 while(list($kk,$vv)=each($tables)) {
00644 if ($vv) {
00645 $tables[$kk]='<span class="nobr">'.t3lib_iconWorks::getIconImage($vv,array(),$GLOBALS['BACK_PATH'],'align="top"').$GLOBALS['LANG']->sL($GLOBALS['TCA'][$vv]['ctrl']['title']).'</span>';
00646 }
00647 }
00648 $out[$k] = implode('<br />',$tables);
00649 break;
00650 case 'non_exclude_fields':
00651 $nef = explode(',',$v);
00652 reset($nef);
00653 $table='';
00654 $pout=array();
00655 while(list($kk,$vv)=each($nef)) {
00656 if ($vv) {
00657 list($thisTable,$field) = explode(':',$vv);
00658 if ($thisTable!=$table) {
00659 $table=$thisTable;
00660 t3lib_div::loadTCA($table);
00661 $pout[]='<span class="nobr">'.t3lib_iconWorks::getIconImage($table,array(),$GLOBALS['BACK_PATH'],'align="top"').$GLOBALS['LANG']->sL($GLOBALS['TCA'][$table]['ctrl']['title']).'</span>';
00662 }
00663 if ($GLOBALS['TCA'][$table]['columns'][$field]) {
00664 $pout[]='<span class="nobr"> - '.ereg_replace(':$','',$GLOBALS['LANG']->sL($GLOBALS['TCA'][$table]['columns'][$field]['label'])).'</span>';
00665 }
00666 }
00667 }
00668 $out[$k] = implode('<br />',$pout);
00669 break;
00670 case 'groupList':
00671 case 'firstMainGroup':
00672 $uGroups = explode(',',$v);
00673 reset($uGroups);
00674 $table='';
00675 $pout=array();
00676 while(list($kk,$vv)=each($uGroups)) {
00677 if ($vv) {
00678 $uGRow = t3lib_BEfunc::getRecord('be_groups',$vv);
00679 $pout[]='<tr><td nowrap="nowrap">'.t3lib_iconWorks::getIconImage('be_groups',$uGRow,$GLOBALS['BACK_PATH'],'align="top"').' '.htmlspecialchars($uGRow['title']).' </td><td width=1% nowrap="nowrap">'.$GLOBALS['SOBE']->elementLinks('be_groups',$uGRow).'</td></tr>';
00680 }
00681 }
00682 $out[$k] = '<table border="0" cellpadding="0" cellspacing="0" width="100%">'.implode('',$pout).'</table>';
00683 break;
00684 case 'modules':
00685 $mods = explode(',',$v);
00686 reset($mods);
00687 $mainMod='';
00688 $pout=array();
00689 while(list($kk,$vv)=each($mods)) {
00690 if ($vv) {
00691 list($thisMod,$subMod) = explode('_',$vv);
00692 if ($thisMod!=$mainMod) {
00693 $mainMod=$thisMod;
00694 $pout[]='<span class="nobr">'.($modNames[$mainMod]?$modNames[$mainMod]:$mainMod).'</span>';
00695 }
00696 if ($subMod) {
00697 $pout[]='<span class="nobr"> - '.($modNames[$mainMod.'_'.$subMod]?$modNames[$mainMod.'_'.$subMod]:$mainMod.'_'.$subMod).'</span>';
00698 }
00699 }
00700 }
00701 $out[$k] = implode('<br />',$pout);
00702 break;
00703 case 'userTS':
00704
00705 $tmpl = t3lib_div::makeInstance('t3lib_tsparser_ext');
00706 $tmpl->tt_track = 0;
00707
00708 $tmpl->fixedLgd=0;
00709 $tmpl->linkObjects=0;
00710 $tmpl->bType='';
00711 $tmpl->ext_expandAllNotes=1;
00712 $tmpl->ext_noPMicons=1;
00713 $out[$k] = $tmpl->ext_getObjTree($v,'','','','','1');
00714 break;
00715 case 'userTS_hl':
00716 $tsparser = t3lib_div::makeInstance('t3lib_TSparser');
00717 $tsparser->lineNumberOffset=0;
00718 $out[$k] = $tsparser->doSyntaxHighlight($v,0,1);
00719 break;
00720 case 'explicit_allowdeny':
00721
00722
00723 $nef = array_flip(explode(',',$v));
00724 $pout = array();
00725
00726 $theTypes = t3lib_BEfunc::getExplicitAuthFieldValues();
00727
00728
00729 $icons = array(
00730 'ALLOW' => '<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/icon_ok2.gif','').' class="absmiddle" alt="" />',
00731 'DENY' => '<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/icon_fatalerror.gif','').' class="absmiddle" alt="" />',
00732 );
00733
00734
00735 foreach($theTypes as $tableFieldKey => $theTypeArrays) {
00736 if (is_array($theTypeArrays['items'])) {
00737 $pout[] = '<b>'.$theTypeArrays['tableFieldLabel'].'</b>';
00738
00739 foreach($theTypeArrays['items'] as $itemValue => $itemContent) {
00740 $v = $tableFieldKey.':'.$itemValue.':'.$itemContent[0];
00741 if (isset($nef[$v])) {
00742 unset($nef[$v]);
00743 $pout[] = $icons[$itemContent[0]].'['.$itemContent[2].'] '.$itemContent[1];
00744 } else {
00745 $pout[] = '<em style="color: #666666;">'.$icons[($itemContent[0]=='ALLOW' ? 'DENY' : 'ALLOW')].'['.$itemContent[2].'] '.$itemContent[1].'</em>';
00746 }
00747 }
00748 $pout[] = '';
00749 }
00750 }
00751
00752
00753 if (count($nef)) {
00754 $pout = array_merge($pout, array_keys($nef));
00755 }
00756
00757
00758 $out[$k] = implode('<br />',$pout);
00759 break;
00760 case 'allowed_languages':
00761
00762
00763 $nef = array_flip(explode(',',$v));
00764 $pout = array();
00765
00766
00767 $items = t3lib_BEfunc::getSystemLanguages();
00768
00769
00770 foreach($items as $iCfg) {
00771 if (isset($nef[$iCfg[1]])) {
00772 unset($nef[$iCfg[1]]);
00773 if (strlen($iCfg[2])) {
00774 $icon = '<img '.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/'.$iCfg[2]).' class="absmiddle" style="margin-right: 5px;" alt="" />';
00775 } else {
00776 $icon = '';
00777 }
00778 $pout[] = $icon.$iCfg[0];
00779 }
00780 }
00781
00782
00783 if (count($nef)) {
00784 $pout = array_merge($pout, array_keys($nef));
00785 }
00786
00787
00788 $out[$k] = implode('<br />',$pout);
00789 break;
00790 case 'workspace_perms':
00791 $out[$k] = implode('<br/>',explode(', ',t3lib_BEfunc::getProcessedValue('be_users','workspace_perms',$v)));
00792 break;
00793 case 'workspace_membership':
00794 $out[$k] = implode('<br/>',$this->ext_workspaceMembership());
00795 break;
00796 case 'custom_options':
00797
00798
00799 $nef = array_flip(explode(',',$v));
00800 $pout = array();
00801
00802
00803 $customOptions = $GLOBALS['TYPO3_CONF_VARS']['BE']['customPermOptions'];
00804 if (is_array($customOptions)) {
00805 foreach($customOptions as $coKey => $coValue) {
00806 if (is_array($coValue['items'])) {
00807
00808 foreach($coValue['items'] as $itemKey => $itemCfg) {
00809 $v = $coKey.':'.$itemKey;
00810 if (isset($nef[$v])) {
00811 unset($nef[$v]);
00812 $pout[] = $GLOBALS['LANG']->sl($coValue['header']).' / '.$GLOBALS['LANG']->sl($itemCfg[0]);
00813 }
00814 }
00815 }
00816 }
00817 }
00818
00819
00820 if (count($nef)) {
00821 $pout = array_merge($pout, array_keys($nef));
00822 }
00823
00824
00825 $out[$k] = implode('<br />',$pout);
00826 break;
00827 }
00828 }
00829 }
00830 return $out;
00831 }
00832
00838 function ext_getReadableButNonmounted() {
00839
00840
00841 if (!$this->ext_pageIdsFromMounts) {
00842 $this->ext_pageIdsFromMounts=0;
00843 }
00844
00845
00846 $be_user_Array = t3lib_BEfunc::getUserNames();
00847 $be_group_Array = t3lib_BEfunc::getGroupNames();
00848
00849
00850 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00851 'pid,uid,title,doktype,perms_user,perms_group,perms_everybody,perms_userid,perms_groupid'.(t3lib_extMgm::isLoaded('cms')?',media,layout,hidden,starttime,endtime,fe_group,extendToSubpages':''),
00852 'pages',
00853 'uid NOT IN ('.$this->ext_pageIdsFromMounts.') AND '.$this->getPagePermsClause(1).t3lib_BEfunc::deleteClause('pages')
00854 );
00855 $dat = array();
00856 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00857 $dat[] = array(
00858 'row'=>$row,
00859 'HTML'=>t3lib_iconWorks::getIconImage('pages',$row,$GLOBALS['BACK_PATH'],'align="top" title="['.$row['uid'].']"')
00860 );
00861 }
00862 $className=t3lib_div::makeInstanceClassName('printAllPageTree_perms');
00863 $pp = new $className($this);
00864 return $pp->printTree($dat,1);
00865 }
00866
00873 function ext_printPerms($int) {
00874 $str='';
00875 $str.= (($int&1)?'*':'<font color="red">x</font>');
00876 $str.= (($int&16)?'*':'<font color="red">x</font>');
00877 $str.= (($int&2)?'*':'<font color="red">x</font>');
00878 $str.= (($int&4)?'*':'<font color="red">x</font>');
00879 $str.= (($int&8)?'*':'<font color="red">x</font>');
00880
00881 return '<b><font color="green">'.$str.'</font></b>';
00882 }
00883
00891 function ext_groupPerms($row,$firstGroup) {
00892 if (is_array($row)) {
00893 $out=intval($row['perms_everybody']);
00894 if ($row['perms_groupid'] && $firstGroup['uid']==$row['perms_groupid']) {
00895 $out|= intval($row['perms_group']);
00896 }
00897 return $out;
00898 }
00899 }
00900
00907 function ext_compileUserInfoForHash($filter=NULL) {
00908 $uInfo=array();
00909 $renderAll = !is_array($filter);
00910
00911
00912 if ($renderAll || $filter['filemounts']) {
00913 $uInfo['filemounts'] = $this->ext_uniqueAndSortList(implode(',',array_keys($this->groupData['filemounts'])));
00914 }
00915
00916
00917 if ($renderAll || $filter['webmounts']) {
00918 $uInfo['webmounts'] = $this->ext_uniqueAndSortList($this->groupData['webmounts']);
00919 }
00920
00921
00922 if ($renderAll || $filter['tempPath']) {
00923 $fileProcessor = t3lib_div::makeInstance('t3lib_basicFileFunctions');
00924 $fileProcessor->init($this->groupData['filemounts'], $GLOBALS['TYPO3_CONF_VARS']['BE']['fileExtensions']);
00925 $uInfo['tempPath'] = $fileProcessor->findTempFolder();
00926 }
00927
00928
00929 if ($renderAll || $filter['firstMainGroup']) {
00930 $uInfo['firstMainGroup'] = $this->firstMainGroup;
00931 }
00932
00933
00934 if ($renderAll || $filter['groupList']) {
00935 $uInfo['groupList'] = $this->groupList;
00936 }
00937
00938
00939 if ($renderAll || $filter['pagetypes_select']) {
00940 $uInfo['pagetypes_select'] = $this->ext_uniqueAndSortList($this->groupData['pagetypes_select']);
00941 }
00942
00943
00944 if ($renderAll || $filter['tables_select']) {
00945 $uInfo['tables_select'] = $this->ext_uniqueAndSortList($this->groupData['tables_select'].','.$this->groupData['tables_modify']);
00946 }
00947
00948
00949 if ($renderAll || $filter['tables_modify']) {
00950 $uInfo['tables_modify'] = $this->ext_uniqueAndSortList($this->groupData['tables_modify']);
00951 }
00952
00953
00954 if ($renderAll || $filter['non_exclude_fields']) {
00955 $uInfo['non_exclude_fields'] = $this->ext_uniqueAndSortList($this->groupData['non_exclude_fields']);
00956 }
00957
00958
00959 if ($renderAll || $filter['explicit_allowdeny']) {
00960 $uInfo['explicit_allowdeny'] = $this->ext_uniqueAndSortList($this->groupData['explicit_allowdeny']);
00961 }
00962
00963
00964 if ($renderAll || $filter['allowed_languages']) {
00965 $uInfo['allowed_languages'] = $this->ext_uniqueAndSortList($this->groupData['allowed_languages']);
00966 }
00967
00968
00969 if ($renderAll || $filter['workspace_perms']) {
00970 $uInfo['workspace_perms'] = $this->ext_uniqueAndSortList($this->groupData['workspace_perms']);
00971 }
00972
00973
00974 if ($renderAll || $filter['workspace_membership']) {
00975 $uInfo['workspace_membership'] = $this->ext_workspaceMembership();
00976 }
00977
00978
00979 if ($renderAll || $filter['custom_options']) {
00980 $uInfo['custom_options'] = $this->ext_uniqueAndSortList($this->groupData['custom_options']);
00981 }
00982
00983
00984 if ($renderAll || $filter['modules']) {
00985 $uInfo['modules'] = $this->ext_uniqueAndSortList($this->groupData['modules']);
00986 }
00987
00988
00989 $this->ext_ksortArrayRecursive($this->userTS);
00990 if ($renderAll || $filter['userTS']) {
00991 $uInfo['userTS'] = $this->userTS;
00992 }
00993
00994 if ($renderAll || $filter['userTS_hl']) {
00995 $uInfo['userTS_hl'] = $this->userTS_text;
00996 }
00997
00998 return $uInfo;
00999 }
01000
01007 function ext_uniqueAndSortList($list) {
01008 $uList=t3lib_div::trimExplode(',',$list,1);
01009 sort($uList);
01010 $uList=array_unique($uList);
01011 $uList=implode(',',$uList);
01012 return $uList;
01013 }
01014
01021 function ext_ksortArrayRecursive(&$arr) {
01022 krsort($arr);
01023 reset($arr);
01024 while(list($k,$v)=each($arr)) {
01025 if (is_array($v)) $this->ext_ksortArrayRecursive($arr[$k]);
01026 }
01027 }
01028
01034 function ext_workspaceMembership() {
01035
01036 $options = array();
01037 if ($this->checkWorkspace(array('uid' => 0))) {
01038 $options[0] = '0: [LIVE]';
01039 }
01040 if ($this->checkWorkspace(array('uid' => -1))) {
01041 $options[-1] = '-1: [Default Draft]';
01042 }
01043
01044
01045 $workspaces = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('uid,title,adminusers,members,reviewers,db_mountpoints','sys_workspace','pid=0'.t3lib_BEfunc::deleteClause('sys_workspace'),'','title');
01046 if (count($workspaces)) {
01047 foreach ($workspaces as $rec) {
01048 if ($this->checkWorkspace($rec)) {
01049 $options[$rec['uid']] = $rec['uid'].': '.$rec['title'];
01050
01051
01052 if (trim($rec['db_mountpoints'])!=='') {
01053 $mountPoints = t3lib_div::intExplode(',',$this->workspaceRec['db_mountpoints'],1);
01054 foreach($mountPoints as $mpId) {
01055 if (!$this->isInWebMount($mpId,'1=1')) {
01056 $options[$rec['uid']].= '<br> \- WARNING: Workspace Webmount page id "'.$mpId.'" not accessible!';
01057 }
01058 }
01059 }
01060 }
01061 }
01062 }
01063
01064 return $options;
01065 }
01066 }
01067
01068
01069
01070
01071
01072
01073
01074
01075
01076
01077
01078
01086 class SC_mod_tools_be_user_index {
01087 var $MCONF=array();
01088 var $MOD_MENU=array();
01089 var $MOD_SETTINGS=array();
01090 var $doc;
01091
01092 var $include_once=array();
01093 var $content;
01094
01098 function init() {
01099 $this->MCONF = $GLOBALS['MCONF'];
01100
01101 $this->menuConfig();
01102 $this->switchUser(t3lib_div::_GP('SwitchUser'));
01103
01104
01105
01106
01107
01108 $this->doc = t3lib_div::makeInstance('noDoc');
01109 $this->doc->form='<form action="" method="POST">';
01110 $this->doc->backPath = $GLOBALS['BACK_PATH'];
01111
01112 $this->doc->JScode = $this->doc->wrapScriptTags('
01113 script_ended = 0;
01114 function jumpToUrl(URL) {
01115 window.location.href = URL;
01116 }
01117 ' . $this->doc->redirectUrls());
01118 }
01119
01125 function menuConfig() {
01126
01127
01128
01129
01130 $this->MOD_MENU = array(
01131 'function' => array(
01132 'compare' => 'Compare User Settings',
01133 'whoisonline' => 'List Users Online'
01134 )
01135 );
01136
01137 $this->MOD_SETTINGS = t3lib_BEfunc::getModuleData($this->MOD_MENU, t3lib_div::_GP('SET'), $this->MCONF['name'], 'ses');
01138 }
01139
01145 function main() {
01146 $this->content='';
01147 $this->content.=$this->doc->startPage('Backend User Administration');
01148
01149 $menu=t3lib_BEfunc::getFuncMenu(0,'SET[function]',$this->MOD_SETTINGS['function'],$this->MOD_MENU['function']);
01150
01151 $this->content.=$this->doc->header('Backend User Administration');
01152 $this->content.=$this->doc->spacer(5);
01153 $this->content.=$this->doc->section('',$menu).$this->doc->divider(5);
01154
01155 switch($this->MOD_SETTINGS['function']) {
01156 case 'compare':
01157 if (t3lib_div::_GP('ads')) {
01158 $compareFlags = t3lib_div::_GP('compareFlags');
01159 $GLOBALS['BE_USER']->pushModuleData('tools_beuser/index.php/compare',$compareFlags);
01160 } else {
01161 $compareFlags = $GLOBALS['BE_USER']->getModuleData('tools_beuser/index.php/compare','ses');
01162 }
01163 $this->content.=$this->compareUsers($compareFlags);
01164 break;
01165 case 'whoisonline':
01166 $this->content.=$this->whoIsOnline();
01167 break;
01168 }
01169
01170
01171 if ($GLOBALS['BE_USER']->mayMakeShortcut()) {
01172 $this->content.=$this->doc->spacer(20).
01173 $this->doc->section('',$this->doc->makeShortcutIcon('be_user_uid,compareFlags','function',$this->MCONF['name']));
01174 }
01175 }
01176
01182 function printContent() {
01183
01184 $this->content.=$this->doc->endPage();
01185 echo $this->content;
01186 }
01187
01188
01189
01190
01191
01192
01193
01194
01195
01196
01197
01198
01199
01204 function compareUsers($compareFlags) {
01205
01206 $options = array(
01207 'filemounts' => 'Filemounts',
01208 'webmounts' => 'Webmounts',
01209 'tempPath' => 'Default upload path',
01210 'firstMainGroup' => 'Main user group',
01211 'groupList' => 'Member of groups',
01212 'pagetypes_select' => 'Page types access',
01213 'tables_select' => 'Select tables',
01214 'tables_modify' => 'Modify tables',
01215 'non_exclude_fields' => 'Non-exclude fields',
01216 'explicit_allowdeny' => 'Explicit Allow/Deny',
01217 'allowed_languages' => 'Limit to languages',
01218 'workspace_perms' => 'Workspace permissions',
01219 'workspace_membership' => 'Workspace membership',
01220 'custom_options' => 'Custom options',
01221 'modules' => 'Modules',
01222 'userTS' => 'TSconfig',
01223 'userTS_hl' => 'TSconfig HL',
01224 );
01225
01226 $be_user_uid = t3lib_div::_GP('be_user_uid');
01227 if ($be_user_uid) {
01228
01229 $tempBE_USER = t3lib_div::makeInstance('local_beUserAuth');
01230 $tempBE_USER->userTS_dontGetCached=1;
01231 $tempBE_USER->OS = TYPO3_OS;
01232 $tempBE_USER->setBeUserByUid($be_user_uid);
01233 $tempBE_USER->fetchGroupData();
01234
01235 $uInfo = $tempBE_USER->ext_compileUserInfoForHash();
01236 $uInfo_dat = $tempBE_USER->ext_printOverview($uInfo,$options,1);
01237
01238 $lines=array();
01239 reset($options);
01240 while(list($kk,$vv)=each($options)) {
01241 if ($kk=='modules') {
01242 $loadModules = t3lib_div::makeInstance('t3lib_loadModules');
01243 $loadModules->load($GLOBALS['TBE_MODULES'],$tempBE_USER);
01244 $alt_menuObj = t3lib_div::makeInstance('alt_menu_functions');
01245 $uInfo_dat[$kk] = $alt_menuObj->topMenu($loadModules->modules,1,$GLOBALS['BACK_PATH']);
01246 }
01247 $lines[]='<tr class="bgColor4">
01248 <td nowrap="nowrap" valign="top">'.$vv.': </td>
01249 <td>'.$uInfo_dat[$kk].' </td>
01250 </tr>';
01251
01252 if ($kk=='webmounts' && !$tempBE_USER->isAdmin()) {
01253 $lines[]='<tr class="bgColor4">
01254 <td nowrap="nowrap" valign="top">Non-mounted readable pages: </td>
01255 <td>'.$tempBE_USER->ext_getReadableButNonmounted().' </td>
01256 </tr>';
01257 }
01258 }
01259
01260 $outTable = '<table border="0" cellpadding="1" cellspacing="1"><tr class="bgColor5"><td>'.t3lib_iconWorks::getIconImage('be_users',$tempBE_USER->user,$GLOBALS['BACK_PATH'],'class="absmiddle" title="'.$tempBE_USER->user['uid'].'"').$tempBE_USER->user['username'].'</td>';
01261 $outTable.= '<td>'.$tempBE_USER->user['realName'].($tempBE_USER->user['email'] ? ', <a href="mailto:'.$tempBE_USER->user['email'].'">'.$tempBE_USER->user['email'].'</a>' : '').'</td>';
01262 $outTable.= '<td>'.$this->elementLinks('be_users',$tempBE_USER->user).'</td></tr></table>';
01263 $outTable.= '<strong><a href="'.htmlspecialchars($this->MCONF['_']).'">< Back to overview</a></strong><br />';
01264
01265 $outTable.= '<br /><table border="0" cellpadding="2" cellspacing="1">'.implode('',$lines).'</table>';
01266 $content.= $this->doc->section('User info',$outTable,0,1);
01267 } else {
01268 reset($options);
01269 $menu=array();
01270 while(list($kk,$vv)=each($options)) {
01271 $menu[]='<input type="checkbox" value="1" name="compareFlags['.$kk.']" id="checkCompare_'.$kk.'"'.($compareFlags[$kk]?' checked="checked"':'').'> <label for="checkCompare_'.$kk.'">'.htmlspecialchars($vv).'</label>';
01272 }
01273 $outCode = 'Group by:<br />'.implode('<br />',$menu);
01274 $outCode.='<br /><input type="submit" name="ads" value="Update">';
01275 $content = $this->doc->section('Group and Compare Users',$outCode,0,1);
01276
01277
01278
01279 $users = t3lib_BEfunc::getUserNames();
01280 $comparation=array();
01281 reset($users);
01282 $counter=0;
01283
01284
01285 $offset=0;
01286 $numberAtTime=1000;
01287 $tooManyUsers='';
01288
01289 while(list(,$r)=each($users)) {
01290 if ($counter>=$offset) {
01291
01292 $tempBE_USER = t3lib_div::makeInstance('local_beUserAuth');
01293 $tempBE_USER->OS = TYPO3_OS;
01294 $tempBE_USER->setBeUserByUid($r['uid']);
01295 $tempBE_USER->fetchGroupData();
01296
01297
01298 $md5pre='';
01299 $menu=array();
01300 $uInfo = $tempBE_USER->ext_compileUserInfoForHash((array)$compareFlags);
01301 reset($options);
01302 while(list($kk,$vv)=each($options)) {
01303 if ($compareFlags[$kk]) {
01304 $md5pre.=serialize($uInfo[$kk]).'|';
01305 }
01306 }
01307
01308 $md5=md5($md5pre);
01309 if (!isset($comparation[$md5])) {
01310 $comparation[$md5]=$tempBE_USER->ext_printOverview($uInfo,$compareFlags);
01311 $comparation[$md5]['users']=array();
01312 }
01313 $comparation[$md5]['users'][]=$tempBE_USER->user;
01314 unset($tempBE_USER);
01315 }
01316 $counter++;
01317 if ($counter>=($numberAtTime+$offset)) {
01318 $tooManyUsers='There were more than '.$numberAtTime.' users (total: '.count($users).') and this tool can display only '.$numberAtTime.' at a time!';
01319 break;
01320 }
01321 }
01322
01323
01324 $allGroups=array();
01325
01326 $allCells = array();
01327 reset($options);
01328
01329 $link_createNewUser='<a href="#" onclick="'.htmlspecialchars(t3lib_BEfunc::editOnClick('&edit[be_users][0]=new',$this->doc->backPath,-1)).'">'.
01330 '<img'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/new_el.gif').' title="'.$GLOBALS['LANG']->getLL('new',1).'" alt="" />'.
01331 '</a>';
01332
01333 $allCells['USERS'] = '<table border="0" cellspacing="0" cellpadding="0" width="100%"><td><b>Usernames:</b></td><td width="12">'.$link_createNewUser.'</td></tr></table>';
01334
01335 while(list($kk,$vv)=each($options)) {
01336 if ($compareFlags[$kk]) {
01337 $allCells[$kk] = '<b>'.$vv.':</b>';
01338 }
01339 }
01340 $allGroups[]=$allCells;
01341
01342 reset($comparation);
01343 while(list(,$dat)=each($comparation)) {
01344 $allCells = array();
01345
01346 $curUid = $GLOBALS['BE_USER']->user['uid'];
01347 $uListArr=array();
01348 reset($dat['users']);
01349 while(list(,$uDat)=each($dat['users'])) {
01350 $uItem = '<tr><td width="130">'.t3lib_iconWorks::getIconImage('be_users',$uDat,$GLOBALS['BACK_PATH'],'align="top" title="'.$uDat['uid'].'"').$this->linkUser($uDat['username'],$uDat).' </td><td nowrap="nowrap">'.$this->elementLinks('be_users',$uDat);
01351 if ($curUid != $uDat['uid'] && !$uDat['disable'] && ($uDat['starttime'] == 0 || $uDat['starttime'] < time()) && ($uDat['endtime'] == 0 || $uDat['endtime'] > time())) {
01352 $uItem .= '<a href="'.t3lib_div::linkThisScript(array('SwitchUser'=>$uDat['uid'])).'" target="_top"><img '.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/su.gif').' border="0" align="top" title="'.htmlspecialchars('Switch user to: '.$uDat['username']).' [change-to mode]" alt="" /></a>'.
01353 '<a href="'.t3lib_div::linkThisScript(array('SwitchUser'=>$uDat['uid'], 'switchBackUser' => 1)).'" target="_top"><img '.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/su_back.gif').' border="0" align="top" title="'.htmlspecialchars('Switch user to: '.$uDat['username']).' [switch-back mode]" alt="" /></a>';
01354 }
01355 $uItem .= '</td></tr>';
01356 $uListArr[] = $uItem;
01357 }
01358 $allCells['USERS'] = '<table border="0" cellspacing="0" cellpadding="0" width="100%">'.implode('',$uListArr).'</table>';
01359
01360 reset($options);
01361 while(list($kk,$vv)=each($options)) {
01362 if ($compareFlags[$kk]) {
01363 $allCells[$kk] = $dat[$kk];
01364 }
01365 }
01366 $allGroups[]=$allCells;
01367 }
01368
01369
01370 $outTable='';
01371 reset($allGroups);
01372 $TDparams=' nowrap="nowrap" class="bgColor5" valign="top"';
01373 while(list(,$allCells)=each($allGroups)) {
01374 $outTable.='<tr><td'.$TDparams.'>'.implode('</td><td'.$TDparams.'>',$allCells).'</td></tr>';
01375 $TDparams=' nowrap="nowrap" class="bgColor4" valign="top"';
01376 }
01377 $outTable='<table border="0" cellpadding="2" cellspacing="2">'.$outTable.'</table>';
01378 $outTable.=fw('<br /><br />(All cached group lists updated.)');
01379 $outTable.=$tooManyUsers?'<br /><br /><strong><span class="typo3-red">'.$tooManyUsers.'</span></strong>':'';
01380 $content.= $this->doc->spacer(10);
01381 $content.= $this->doc->section('Result',$outTable,0,1);
01382 }
01383 return $content;
01384 }
01385
01393 function linkUser($str,$rec) {
01394 return '<a href="'.htmlspecialchars($this->MCONF['_']).'&be_user_uid='.$rec['uid'].'">'.$str.'</a>';
01395 }
01396
01404 function elementLinks($table,$row) {
01405
01406 $cells[]='<a href="#" onclick="top.launchView(\''.$table.'\', \''.$row['uid'].'\',\''.$GLOBALS['BACK_PATH'].'\'); return false;"><img '.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/zoom2.gif').' border="0" align="top" title="Show information" alt="" /></a>';
01407
01408
01409 $params='&edit['.$table.']['.$row['uid'].']=edit';
01410 $cells[]='<a href="#" onclick="'.t3lib_BEfunc::editOnClick($params,$GLOBALS['BACK_PATH'],'').'"><img '.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/edit2.gif').' border="0" align="top" title="Edit" alt="" /></a>';
01411
01412
01413 $hiddenField = $GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['disabled'];
01414 if ($row[$hiddenField]) {
01415 $params='&data['.$table.']['.$row['uid'].']['.$hiddenField.']=0';
01416 $cells[]='<a href="'.$this->doc->issueCommand($params).'"><img '.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/button_unhide.gif').' border="0" title="Enable" align="top" alt="" /></a>';
01417 } else {
01418 $params='&data['.$table.']['.$row['uid'].']['.$hiddenField.']=1';
01419 $cells[]='<a href="'.$this->doc->issueCommand($params).'"><img '.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/button_hide.gif').' border="0" title="Disable" align="top" alt="" /></a>';
01420 }
01421
01422
01423 $params='&cmd['.$table.']['.$row['uid'].'][delete]=1';
01424 $cells[]='<a href="'.$this->doc->issueCommand($params).'" onclick="return confirm(unescape(\''.rawurlencode('Are you sure you want to delete this element?').'\'));"><img '.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/garbage.gif').' border="0" align="top" title="Delete(!)" alt="" /></a>';
01425
01426 return implode('',$cells);
01427 }
01428
01434 function initUsers() {
01435
01436 $users = t3lib_BEfunc::getUserNames();
01437 reset($users);
01438 while(list(,$r)=each($users)) {
01439
01440 $tempBE_USER = t3lib_div::makeInstance('local_beUserAuth');
01441 $tempBE_USER->OS = TYPO3_OS;
01442 $tempBE_USER->setBeUserByUid($r['uid']);
01443 $tempBE_USER->fetchGroupData();
01444 }
01445 }
01446
01453 function localPath($str) {
01454 if (substr($str,0,strlen(PATH_site))==PATH_site) {
01455 return substr($str,strlen(PATH_site));
01456 } else return $str;
01457 }
01458
01465 function switchUser($switchUser) {
01466 $uRec=t3lib_BEfunc::getRecord('be_users',$switchUser);
01467 if (is_array($uRec) && $GLOBALS['BE_USER']->isAdmin()) {
01468 $updateData['ses_userid'] = $uRec['uid'];
01469
01470 if (t3lib_div::_GP('switchBackUser')) {
01471 $updateData['ses_backuserid'] = intval($GLOBALS['BE_USER']->user['uid']);
01472 }
01473 $GLOBALS['TYPO3_DB']->exec_UPDATEquery('be_sessions', 'ses_id='.$GLOBALS['TYPO3_DB']->fullQuoteStr($GLOBALS['BE_USER']->id, 'be_sessions').' AND ses_name=\'be_typo_user\' AND ses_userid='.intval($GLOBALS['BE_USER']->user['uid']),$updateData);
01474
01475 header('Location: '.t3lib_div::locationHeaderUrl($GLOBALS['BACK_PATH'].'index.php'.($GLOBALS['TYPO3_CONF_VARS']['BE']['interfaces']?'':'?commandLI=1')));
01476 exit;
01477 }
01478 }
01479
01480
01481
01482
01483
01484
01485
01489 function whoIsOnline() {
01490 $select_fields = 'ses_id, ses_tstamp, ses_iplock, u.uid,u.username, u.admin, u.realName, u.disable, u.starttime, u.endtime, u.deleted, bu.uid AS bu_uid,bu.username AS bu_username, bu.realName AS bu_realName';
01491 $from_table = '(be_sessions, be_users u) LEFT OUTER JOIN be_users bu ON (ses_backuserid=bu.uid)';
01492 $where_clause = 'ses_userid=u.uid';
01493 $orderBy = 'u.username';
01494
01495 if (t3lib_div::testInt($GLOBALS['TYPO3_CONF_VARS']['BE']['sessionTimeout'])) {
01496 $where_clause .= ' AND '.$GLOBALS['EXEC_TIME'].'<(ses_tstamp+'.$GLOBALS['TYPO3_CONF_VARS']['BE']['sessionTimeout'].')';
01497 } else {
01498 $timeout = intval($GLOBALS['TYPO3_CONF_VARS']['BE']['sessionTimeout']);
01499 if ($timeout > 0) {
01500 $where_clause .= ' AND '.$GLOBALS['EXEC_TIME'].'<(ses_tstamp+'.$timeout.')';
01501 }
01502 }
01503
01504 $sessions = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows($select_fields,$from_table,$where_clause,'',$orderBy);
01505
01506 if (is_array($sessions)) {
01507 foreach ($sessions as $session) {
01508 $hostName = ($session['ses_iplock'] != '[DISABLED]' ? gethostbyaddr($session['ses_iplock']) : '[DISABLED]');
01509 $outTable .= '
01510 <tr class="bgColor4" height="17" valign="top">' .
01511 '<td nowrap="nowrap">' .
01512 date($GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'].' '.$GLOBALS['TYPO3_CONF_VARS']['SYS']['hhmm'], $session['ses_tstamp']) .
01513 '</td>' .
01514 '<td nowrap="nowrap">' .
01515 '<span title="'.$hostName.'">'.$session['ses_iplock'].'</span>' .
01516 '</td>' .
01517 '<td width="130">' .
01518 t3lib_iconWorks::getIconImage('be_users',$session,$GLOBALS['BACK_PATH'],'align="top" title="'.$session['uid'].'"').htmlspecialchars($session['username']).' ' .
01519 '</td>' .
01520 '<td nowrap="nowrap">'.htmlspecialchars($session['realName']).' </td>' .
01521 '<td nowrap="nowrap">'.$this->elementLinks('be_users',$session).'</td>' .
01522 '<td nowrap="nowrap" valign="top">'.($session['bu_username'] ? ' SU from: ' : '').htmlspecialchars($session['bu_username']).' </td>' .
01523 '<td nowrap="nowrap" valign="top"> '.htmlspecialchars($session['bu_realName']).'</td>' .
01524 '</tr>';
01525 }
01526 }
01527
01528 $outTable = '
01529 <table border="0" cellpadding="2" cellspacing="2">
01530 <tr class="bgColor5">
01531 <td valign="top"><b>Timestamp:</b></td>
01532 <td valign="top"><b>Host:</b></td>
01533 <td valign="top" colspan="5"><b>Username:</b></td>
01534 </tr>'.$outTable.'
01535 </table>';
01536
01537 $content.= $this->doc->section('Who Is Online',$outTable,0,1);
01538 return $content;
01539 }
01540
01541 }
01542
01543
01544 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/beuser/mod/index.php']) {
01545 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/beuser/mod/index.php']);
01546 }
01547
01548
01549
01550
01551
01552
01553
01554
01555
01556
01557
01558
01559
01560 $SOBE = t3lib_div::makeInstance('SC_mod_tools_be_user_index');
01561 $SOBE->init();
01562 $SOBE->main();
01563 $SOBE->printContent();
01564
01565 ?>