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 unset($MCONF);
00104 require ('conf.php');
00105 require ($BACK_PATH.'init.php');
00106 require ($BACK_PATH.'template.php');
00107 require_once (PATH_t3lib.'class.t3lib_basicfilefunc.php');
00108 require_once (PATH_t3lib.'class.t3lib_browsetree.php');
00109 require_once (PATH_t3lib.'class.t3lib_foldertree.php');
00110 require_once (PATH_t3lib.'class.t3lib_tstemplate.php');
00111 require_once (PATH_t3lib.'class.t3lib_loadmodules.php');
00112 require_once (PATH_t3lib.'class.t3lib_tsparser_ext.php');
00113 require_once (PATH_typo3.'class.alt_menu_functions.inc');
00114
00115 $BE_USER->modAccess($MCONF,1);
00116
00117
00118
00119
00120
00121
00129 class localPageTree extends t3lib_browseTree {
00130 var $expandFirst=0;
00131 var $expandAll=0;
00132
00140 function localPageTree($BE_USER,$WEBMOUNTS='') {
00141 $this->init();
00142
00143 $this->BE_USER = $BE_USER;
00144 $this->MOUNTS = $WEBMOUNTS;
00145 $this->clause = $this->ext_permsC();
00146 $this->orderByFields = 'sorting';
00147 }
00148
00154 function ext_permsC() {
00155 return '';
00156 }
00157
00165 function wrapTitle($str,$row) {
00166 return $str;
00167 }
00168
00177 function PM_ATagWrap($icon,$cmd,$bMark='') {
00178 return '';
00179 }
00180
00188 function wrapIcon($icon,$row) {
00189
00190 $title = '['.$row['uid'].'] '.t3lib_BEfunc::getRecordPath($row['uid'],'',15);
00191 $theIcon = $this->addTagAttributes($icon,($this->titleAttrib ? $this->titleAttrib.'="'.htmlspecialchars($title).'"' : '').' border="0"');
00192
00193 return $theIcon;
00194 }
00195
00201 function initializePositionSaving() {
00202 $this->stored=array();
00203 }
00204 }
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00222 class printAllPageTree extends localPageTree {
00223 var $expandFirst=1;
00224 var $expandAll=1;
00225
00231 function ext_permsC() {
00232 return ' AND '.$this->BE_USER->getPagePermsClause(1);
00233 }
00234
00243 function PM_ATagWrap($icon,$cmd,$bMark='') {
00244 return $icon;
00245 }
00246
00254 function wrapIcon($icon,$row) {
00255
00256 $title = '['.$row['uid'].']';
00257 $theIcon = $this->addTagAttributes($icon,($this->titleAttrib ? $this->titleAttrib.'="'.htmlspecialchars($title).'"' : '').' border="0"');
00258
00259 return $theIcon;
00260 }
00261 }
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00279 class printAllPageTree_perms extends printAllPageTree {
00280
00288 function printTree($treeArr='',$printPath=0) {
00289 $titleLen=intval($this->BE_USER->uc['titleLen']);
00290
00291 $be_user_Array = t3lib_BEfunc::getUserNames();
00292 $be_group_Array = t3lib_BEfunc::getGroupNames();
00293 $lines=array();
00294 $lines[]='<tr class="bgColor5">
00295 <td nowrap="nowrap"><strong>Page title:</strong></td>
00296 '.($printPath?'<td nowrap="nowrap"><strong>Path:</strong></td>':'').'
00297 <td nowrap="nowrap" colspan=2><strong>User:</strong></td>
00298 <td nowrap="nowrap" colspan=2><strong>Group: </strong></td>
00299 <td nowrap="nowrap"><strong>Everybody: </strong></td>
00300 <td nowrap="nowrap"><strong>This user: </strong></td>
00301 <td nowrap="nowrap"><strong>Main group:</strong></td>
00302 </tr>';
00303
00304 if (!is_array($treeArr)) $treeArr=$this->tree;
00305 reset($treeArr);
00306 while(list($k,$v)=each($treeArr)) {
00307 $col1 = ' bgcolor="'.t3lib_div::modifyHtmlColor($GLOBALS['SOBE']->doc->bgColor4,+10,+10,+10).'"';
00308 $row = $v['row'];
00309 $title = htmlspecialchars(t3lib_div::fixed_lgd_cs($row['title'],$this->BE_USER->uc['titleLen']));
00310 $lines[]='<tr class="bgColor4">
00311 <td nowrap="nowrap">'.$v['HTML'].$title.' </td>
00312 '.($printPath?'<td nowrap="nowrap">'.htmlspecialchars(t3lib_BEfunc::getRecordPath ($row['pid'],'',15)).' </td>':'').'
00313 <td nowrap="nowrap"'.$col1.'>'.$be_user_Array[$row['perms_userid']]['username'].' </td>
00314 <td nowrap="nowrap"'.$col1.'>'.$this->ext_printPerms($row['perms_user']).' </td>
00315 <td nowrap="nowrap">'.$be_group_Array[$row['perms_groupid']]['title'].' </td>
00316 <td nowrap="nowrap">'.$this->ext_printPerms($row['perms_group']).' </td>
00317 <td nowrap="nowrap" align="center" '.$col1.'>'.$this->ext_printPerms($row['perms_everybody']).' </td>
00318 <td nowrap="nowrap" align="center">'.($row['editlock'] ? '<img src="'.$this->backPath.'gfx/recordlock_warning2.gif" width="22" height="16" title="Edit lock prevents all editing" alt="" />' : $this->ext_printPerms($this->BE_USER->calcPerms($row))).' </td>
00319 <td nowrap="nowrap" align="center">'.$this->ext_printPerms($this->ext_groupPerms($row,$be_group_Array[$this->BE_USER->firstMainGroup])).' </td>
00320 </tr>';
00321 }
00322 return '<table border="0" cellpadding="0" cellspacing="0">'.implode('',$lines).'</table>';
00323 }
00324
00331 function ext_printPerms($int) {
00332 $str='';
00333 $str.= (($int&1)?'*':'<font color="red">x</font>');
00334 $str.= (($int&16)?'*':'<font color="red">x</font>');
00335 $str.= (($int&2)?'*':'<font color="red">x</font>');
00336 $str.= (($int&4)?'*':'<font color="red">x</font>');
00337 $str.= (($int&8)?'*':'<font color="red">x</font>');
00338
00339 return '<b><font color="green">'.$str.'</font></b>';
00340 }
00341
00349 function ext_groupPerms($row,$firstGroup) {
00350 if (is_array($row)) {
00351 $out=intval($row['perms_everybody']);
00352 if ($row['perms_groupid'] && $firstGroup['uid']==$row['perms_groupid']) {
00353 $out|= intval($row['perms_group']);
00354 }
00355 return $out;
00356 }
00357 }
00358 }
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00377 class localFolderTree extends t3lib_folderTree {
00378 var $expandFirst=0;
00379 var $expandAll=0;
00380
00388 function localFolderTree($BE_USER,$FILEMOUNTS='') {
00389 $this->init();
00390
00391 $this->BE_USER = $BE_USER;
00392 $this->MOUNTS = $FILEMOUNTS;
00393 $this->clause = '';
00394 }
00395
00403 function wrapTitle($str,$row) {
00404 return $str;
00405 }
00406
00415 function PM_ATagWrap($icon,$cmd,$bMark='') {
00416 return '';
00417 }
00418
00426 function wrapIcon($icon,$row) {
00427
00428 $title = $GLOBALS['SOBE']->localPath($row['path']);
00429 $theIcon = $this->addTagAttributes($icon,($this->titleAttrib ? $this->titleAttrib.'="'.htmlspecialchars($title).'"' : ''));
00430
00431 return $theIcon;
00432 }
00433
00439 function initializePositionSaving() {
00440 $this->stored=array();
00441 }
00442 }
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00463 class printAllFolderTree extends localFolderTree {
00464 var $expandFirst=1;
00465 var $expandAll=1;
00466
00475 function PM_ATagWrap($icon,$cmd,$bMark='') {
00476 return $icon;
00477 }
00478 }
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00497 class local_beUserAuth extends t3lib_beUserAuth {
00498 var $ext_pageIdsFromMounts='';
00499 var $ext_non_readAccessPageArray=array();
00500
00509 function returnWebmounts($pClause='') {
00510
00511
00512 $webmounts = (string)($this->groupData['webmounts'])!='' ? explode(',',$this->groupData['webmounts']) : Array();
00513
00514
00515 $pClause=$pClause?$pClause:$this->getPagePermsClause(1);
00516
00517
00518 foreach($webmounts as $k => $id) {
00519 $rec=t3lib_BEfunc::getRecord('pages',$id,'*',' AND '.$pClause);
00520 if (!is_array($rec)) {
00521 $this->ext_non_readAccessPageArray[$id]=t3lib_BEfunc::getRecord('pages',$id);
00522 unset($webmounts[$k]);
00523 }
00524 }
00525 return $webmounts;
00526 }
00527
00533 function ext_non_readAccessPages() {
00534 $lines=array();
00535
00536 foreach($this->ext_non_readAccessPageArray as $pA) {
00537 if ($pA) $lines[]=t3lib_BEfunc::getRecordPath($pA['uid'],'',15);
00538 }
00539 if (count($lines)) {
00540 return '<table bgcolor="red" border="0" cellpadding="0" cellspacing="0">
00541 <tr>
00542 <td align="center"><font color="white"><strong>The user has no read access to these DB-mounts!</strong></font></td>
00543 </tr>
00544 <tr>
00545 <td>'.implode('</td></tr><tr><td>',$lines).'</td>
00546 </tr>
00547 </table>';
00548 }
00549 }
00550
00556 function user_where_clause() {
00557 return 'AND pid=0 ';
00558 }
00559
00568 function ext_printOverview($uInfo,$compareFlags,$printTrees=0) {
00569
00570 if ($printTrees) {
00571
00572 $className=t3lib_div::makeInstanceClassName(!$this->isAdmin() ? 'printAllPageTree_perms' : 'printAllPageTree');
00573 $pagetree = new $className($this,$this->returnWebmounts());
00574 $pagetree->addField('perms_user',1);
00575 $pagetree->addField('perms_group',1);
00576 $pagetree->addField('perms_everybody',1);
00577 $pagetree->addField('perms_userid',1);
00578 $pagetree->addField('perms_groupid',1);
00579 $pagetree->addField('editlock',1);
00580
00581
00582 $className=t3lib_div::makeInstanceClassName('printAllFolderTree');
00583 $foldertree = new $className($this,$this->returnFilemounts());
00584 } else {
00585
00586 $className=t3lib_div::makeInstanceClassName('localPageTree');
00587 $pagetree = new $className($this,$this->returnWebmounts('1=1'));
00588
00589
00590 $className=t3lib_div::makeInstanceClassName('localFolderTree');
00591 $foldertree = new $className($this,$this->returnFilemounts());
00592 }
00593
00594
00595 $modNames = array(
00596 'web' => 'Web',
00597 'web_layout' => 'Page',
00598 'web_modules' => 'Modules',
00599 'web_info' => 'Info',
00600 'web_perms' => 'Access',
00601 'web_func' => 'Func',
00602 'web_list' => 'List',
00603 'web_ts' => 'Template',
00604 'file' => 'File',
00605 'file_list' => 'List',
00606 'file_images' => 'Images',
00607 'doc' => 'Doc.',
00608 'help' => 'Help',
00609 'help_about' => 'About',
00610 'help_quick' => 'User manual',
00611 'help_welcome' => 'Welcome',
00612 'user' => 'User',
00613 'user_setup' => 'Setup',
00614 'user_task' => 'Task center'
00615 );
00616
00617
00618 $out=array();
00619 foreach($uInfo as $k => $v) {
00620 if ($compareFlags[$k]) {
00621 switch($k) {
00622 case 'filemounts':
00623 $out[$k] = $foldertree->getBrowsableTree();
00624 break;
00625 case 'webmounts':
00626
00627 $pagetree->addSelfId=1;
00628 $out[$k] = $this->ext_non_readAccessPages();
00629 $out[$k].= $pagetree->getBrowsableTree();
00630 $this->ext_pageIdsFromMounts=implode(',',array_unique($pagetree->ids));
00631 break;
00632 case 'tempPath':
00633 $out[$k] = $GLOBALS['SOBE']->localPath($v);
00634 break;
00635 case 'pagetypes_select':
00636 $pageTypes = explode(',',$v);
00637 reset($pageTypes);
00638 while(list($kk,$vv)=each($pageTypes)) {
00639 $pageTypes[$kk]=$GLOBALS['LANG']->sL(t3lib_BEfunc::getLabelFromItemlist('pages','doktype',$vv));
00640 }
00641 $out[$k] = implode('<br />',$pageTypes);
00642 break;
00643 case 'tables_select':
00644 case 'tables_modify':
00645 $tables = explode(',',$v);
00646 reset($tables);
00647 while(list($kk,$vv)=each($tables)) {
00648 if ($vv) {
00649 $tables[$kk]='<span class="nobr">'.t3lib_iconWorks::getIconImage($vv,array(),$GLOBALS['BACK_PATH'],'align="top"').$GLOBALS['LANG']->sL($GLOBALS['TCA'][$vv]['ctrl']['title']).'</span>';
00650 }
00651 }
00652 $out[$k] = implode('<br />',$tables);
00653 break;
00654 case 'non_exclude_fields':
00655 $nef = explode(',',$v);
00656 reset($nef);
00657 $table='';
00658 $pout=array();
00659 while(list($kk,$vv)=each($nef)) {
00660 if ($vv) {
00661 list($thisTable,$field) = explode(':',$vv);
00662 if ($thisTable!=$table) {
00663 $table=$thisTable;
00664 t3lib_div::loadTCA($table);
00665 $pout[]='<span class="nobr">'.t3lib_iconWorks::getIconImage($table,array(),$GLOBALS['BACK_PATH'],'align="top"').$GLOBALS['LANG']->sL($GLOBALS['TCA'][$table]['ctrl']['title']).'</span>';
00666 }
00667 if ($GLOBALS['TCA'][$table]['columns'][$field]) {
00668 $pout[]='<span class="nobr"> - '.ereg_replace(':$','',$GLOBALS['LANG']->sL($GLOBALS['TCA'][$table]['columns'][$field]['label'])).'</span>';
00669 }
00670 }
00671 }
00672 $out[$k] = implode('<br />',$pout);
00673 break;
00674 case 'groupList':
00675 case 'firstMainGroup':
00676 $uGroups = explode(',',$v);
00677 reset($uGroups);
00678 $table='';
00679 $pout=array();
00680 while(list($kk,$vv)=each($uGroups)) {
00681 if ($vv) {
00682 $uGRow = t3lib_BEfunc::getRecord('be_groups',$vv);
00683 $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>';
00684 }
00685 }
00686 $out[$k] = '<table border="0" cellpadding="0" cellspacing="0" width="100%">'.implode('',$pout).'</table>';
00687 break;
00688 case 'modules':
00689 $mods = explode(',',$v);
00690 reset($mods);
00691 $mainMod='';
00692 $pout=array();
00693 while(list($kk,$vv)=each($mods)) {
00694 if ($vv) {
00695 list($thisMod,$subMod) = explode('_',$vv);
00696 if ($thisMod!=$mainMod) {
00697 $mainMod=$thisMod;
00698 $pout[]='<span class="nobr">'.($modNames[$mainMod]?$modNames[$mainMod]:$mainMod).'</span>';
00699 }
00700 if ($subMod) {
00701 $pout[]='<span class="nobr"> - '.($modNames[$mainMod.'_'.$subMod]?$modNames[$mainMod.'_'.$subMod]:$mainMod.'_'.$subMod).'</span>';
00702 }
00703 }
00704 }
00705 $out[$k] = implode('<br />',$pout);
00706 break;
00707 case 'userTS':
00708
00709 $tmpl = t3lib_div::makeInstance('t3lib_tsparser_ext');
00710 $tmpl->tt_track = 0;
00711
00712 $tmpl->fixedLgd=0;
00713 $tmpl->linkObjects=0;
00714 $tmpl->bType='';
00715 $tmpl->ext_expandAllNotes=1;
00716 $tmpl->ext_noPMicons=1;
00717 $out[$k] = $tmpl->ext_getObjTree($v,'','');
00718 break;
00719 case 'userTS_hl':
00720 $tsparser = t3lib_div::makeInstance('t3lib_TSparser');
00721 $tsparser->lineNumberOffset=0;
00722 $out[$k] = $tsparser->doSyntaxHighlight($v,0,1);
00723 break;
00724 case 'explicit_allowdeny':
00725
00726
00727 $nef = array_flip(explode(',',$v));
00728 $pout = array();
00729
00730 $theTypes = t3lib_BEfunc::getExplicitAuthFieldValues();
00731
00732
00733 $icons = array(
00734 'ALLOW' => '<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/icon_ok2.gif','').' class="absmiddle" alt="" />',
00735 'DENY' => '<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/icon_fatalerror.gif','').' class="absmiddle" alt="" />',
00736 );
00737
00738
00739 foreach($theTypes as $tableFieldKey => $theTypeArrays) {
00740 if (is_array($theTypeArrays['items'])) {
00741 $pout[] = '<b>'.$theTypeArrays['tableFieldLabel'].'</b>';
00742
00743 foreach($theTypeArrays['items'] as $itemValue => $itemContent) {
00744 $v = $tableFieldKey.':'.$itemValue.':'.$itemContent[0];
00745 if (isset($nef[$v])) {
00746 unset($nef[$v]);
00747 $pout[] = $icons[$itemContent[0]].'['.$itemContent[2].'] '.$itemContent[1];
00748 } else {
00749 $pout[] = '<em style="color: #666666;">'.$icons[($itemContent[0]=='ALLOW' ? 'DENY' : 'ALLOW')].'['.$itemContent[2].'] '.$itemContent[1].'</em>';
00750 }
00751 }
00752 $pout[] = '';
00753 }
00754 }
00755
00756
00757 if (count($nef)) {
00758 $pout = array_merge($pout, array_keys($nef));
00759 }
00760
00761
00762 $out[$k] = implode('<br />',$pout);
00763 break;
00764 case 'allowed_languages':
00765
00766
00767 $nef = array_flip(explode(',',$v));
00768 $pout = array();
00769
00770
00771 $items = t3lib_BEfunc::getSystemLanguages();
00772
00773
00774 foreach($items as $iCfg) {
00775 if (isset($nef[$iCfg[1]])) {
00776 unset($nef[$iCfg[1]]);
00777 if (strlen($iCfg[2])) {
00778 $icon = '<img src="'.$GLOBALS['BACK_PATH'].'gfx/'.$iCfg[2].'" class="absmiddle" style="margin-right: 5px;" alt="" />';
00779 } else {
00780 $icon = '';
00781 }
00782 $pout[] = $icon.$iCfg[0];
00783 }
00784 }
00785
00786
00787 if (count($nef)) {
00788 $pout = array_merge($pout, array_keys($nef));
00789 }
00790
00791
00792 $out[$k] = implode('<br />',$pout);
00793 break;
00794 case 'workspace_perms':
00795 $out[$k] = implode('<br/>',explode(', ',t3lib_BEfunc::getProcessedValue('be_users','workspace_perms',$v)));
00796 break;
00797 case 'workspace_membership':
00798 $out[$k] = implode('<br/>',$this->ext_workspaceMembership());
00799 break;
00800 case 'custom_options':
00801
00802
00803 $nef = array_flip(explode(',',$v));
00804 $pout = array();
00805
00806
00807 $customOptions = $GLOBALS['TYPO3_CONF_VARS']['BE']['customPermOptions'];
00808 if (is_array($customOptions)) {
00809 foreach($customOptions as $coKey => $coValue) {
00810 if (is_array($coValue['items'])) {
00811
00812 foreach($coValue['items'] as $itemKey => $itemCfg) {
00813 $v = $coKey.':'.$itemKey;
00814 if (isset($nef[$v])) {
00815 unset($nef[$v]);
00816 $pout[] = $GLOBALS['LANG']->sl($coValue['header']).' / '.$GLOBALS['LANG']->sl($itemCfg[0]);
00817 }
00818 }
00819 }
00820 }
00821 }
00822
00823
00824 if (count($nef)) {
00825 $pout = array_merge($pout, array_keys($nef));
00826 }
00827
00828
00829 $out[$k] = implode('<br />',$pout);
00830 break;
00831 }
00832 }
00833 }
00834 return $out;
00835 }
00836
00842 function ext_getReadableButNonmounted() {
00843
00844
00845 if (!$this->ext_pageIdsFromMounts) {
00846 $this->ext_pageIdsFromMounts=0;
00847 }
00848
00849
00850 $be_user_Array = t3lib_BEfunc::getUserNames();
00851 $be_group_Array = t3lib_BEfunc::getGroupNames();
00852
00853
00854 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
00855 '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':''),
00856 'pages',
00857 'uid NOT IN ('.$this->ext_pageIdsFromMounts.') AND '.$this->getPagePermsClause(1).t3lib_BEfunc::deleteClause('pages')
00858 );
00859 $dat = array();
00860 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00861 $dat[] = array(
00862 'row'=>$row,
00863 'HTML'=>t3lib_iconWorks::getIconImage('pages',$row,$GLOBALS['BACK_PATH'],'align="top" title="['.$row['uid'].']"')
00864 );
00865 }
00866 $className=t3lib_div::makeInstanceClassName('printAllPageTree_perms');
00867 $pp = new $className($this);
00868 return $pp->printTree($dat,1);
00869 }
00870
00877 function ext_printPerms($int) {
00878 $str='';
00879 $str.= (($int&1)?'*':'<font color="red">x</font>');
00880 $str.= (($int&16)?'*':'<font color="red">x</font>');
00881 $str.= (($int&2)?'*':'<font color="red">x</font>');
00882 $str.= (($int&4)?'*':'<font color="red">x</font>');
00883 $str.= (($int&8)?'*':'<font color="red">x</font>');
00884
00885 return '<b><font color="green">'.$str.'</font></b>';
00886 }
00887
00895 function ext_groupPerms($row,$firstGroup) {
00896 if (is_array($row)) {
00897 $out=intval($row['perms_everybody']);
00898 if ($row['perms_groupid'] && $firstGroup['uid']==$row['perms_groupid']) {
00899 $out|= intval($row['perms_group']);
00900 }
00901 return $out;
00902 }
00903 }
00904
00911 function ext_compileUserInfoForHash($filter=NULL) {
00912 $uInfo=array();
00913 $renderAll = !is_array($filter);
00914
00915
00916 if ($renderAll || $filter['filemounts']) {
00917 $uInfo['filemounts'] = $this->ext_uniqueAndSortList(implode(',',array_keys($this->groupData['filemounts'])));
00918 }
00919
00920
00921 if ($renderAll || $filter['webmounts']) {
00922 $uInfo['webmounts'] = $this->ext_uniqueAndSortList($this->groupData['webmounts']);
00923 }
00924
00925
00926 if ($renderAll || $filter['tempPath']) {
00927 $fileProcessor = t3lib_div::makeInstance('t3lib_basicFileFunctions');
00928 $fileProcessor->init($this->groupData['filemounts'], $GLOBALS['TYPO3_CONF_VARS']['BE']['fileExtensions']);
00929 $uInfo['tempPath'] = $fileProcessor->findTempFolder();
00930 }
00931
00932
00933 if ($renderAll || $filter['firstMainGroup']) {
00934 $uInfo['firstMainGroup'] = $this->firstMainGroup;
00935 }
00936
00937
00938 if ($renderAll || $filter['groupList']) {
00939 $uInfo['groupList'] = $this->groupList;
00940 }
00941
00942
00943 if ($renderAll || $filter['pagetypes_select']) {
00944 $uInfo['pagetypes_select'] = $this->ext_uniqueAndSortList($this->groupData['pagetypes_select']);
00945 }
00946
00947
00948 if ($renderAll || $filter['tables_select']) {
00949 $uInfo['tables_select'] = $this->ext_uniqueAndSortList($this->groupData['tables_select'].','.$this->groupData['tables_modify']);
00950 }
00951
00952
00953 if ($renderAll || $filter['tables_modify']) {
00954 $uInfo['tables_modify'] = $this->ext_uniqueAndSortList($this->groupData['tables_modify']);
00955 }
00956
00957
00958 if ($renderAll || $filter['non_exclude_fields']) {
00959 $uInfo['non_exclude_fields'] = $this->ext_uniqueAndSortList($this->groupData['non_exclude_fields']);
00960 }
00961
00962
00963 if ($renderAll || $filter['explicit_allowdeny']) {
00964 $uInfo['explicit_allowdeny'] = $this->ext_uniqueAndSortList($this->groupData['explicit_allowdeny']);
00965 }
00966
00967
00968 if ($renderAll || $filter['allowed_languages']) {
00969 $uInfo['allowed_languages'] = $this->ext_uniqueAndSortList($this->groupData['allowed_languages']);
00970 }
00971
00972
00973 if ($renderAll || $filter['workspace_perms']) {
00974 $uInfo['workspace_perms'] = $this->ext_uniqueAndSortList($this->groupData['workspace_perms']);
00975 }
00976
00977
00978 if ($renderAll || $filter['workspace_membership']) {
00979 $uInfo['workspace_membership'] = $this->ext_workspaceMembership();
00980 }
00981
00982
00983 if ($renderAll || $filter['custom_options']) {
00984 $uInfo['custom_options'] = $this->ext_uniqueAndSortList($this->groupData['custom_options']);
00985 }
00986
00987
00988 if ($renderAll || $filter['modules']) {
00989 $uInfo['modules'] = $this->ext_uniqueAndSortList($this->groupData['modules']);
00990 }
00991
00992
00993 $this->ext_ksortArrayRecursive($this->userTS);
00994 if ($renderAll || $filter['userTS']) {
00995 $uInfo['userTS'] = $this->userTS;
00996 }
00997
00998 if ($renderAll || $filter['userTS_hl']) {
00999 $uInfo['userTS_hl'] = $this->userTS_text;
01000 }
01001
01002 return $uInfo;
01003 }
01004
01011 function ext_uniqueAndSortList($list) {
01012 $uList=t3lib_div::trimExplode(',',$list,1);
01013 sort($uList);
01014 $uList=array_unique($uList);
01015 $uList=implode(',',$uList);
01016 return $uList;
01017 }
01018
01025 function ext_ksortArrayRecursive(&$arr) {
01026 krsort($arr);
01027 reset($arr);
01028 while(list($k,$v)=each($arr)) {
01029 if (is_array($v)) $this->ext_ksortArrayRecursive($arr[$k]);
01030 }
01031 }
01032
01038 function ext_workspaceMembership() {
01039 global $TYPO3_DB;
01040
01041
01042 $options = array();
01043 if ($this->checkWorkspace(array('uid' => 0))) {
01044 $options[0] = '0: [LIVE]';
01045 }
01046 if ($this->checkWorkspace(array('uid' => -1))) {
01047 $options[-1] = '-1: [Default Draft]';
01048 }
01049
01050
01051 $workspaces = $TYPO3_DB->exec_SELECTgetRows('uid,title,adminusers,members,reviewers,db_mountpoints','sys_workspace','pid=0'.t3lib_BEfunc::deleteClause('sys_workspace'),'','title');
01052 if (count($workspaces)) {
01053 foreach ($workspaces as $rec) {
01054 if ($this->checkWorkspace($rec)) {
01055 $options[$rec['uid']] = $rec['uid'].': '.$rec['title'];
01056
01057
01058 if (trim($rec['db_mountpoints'])!=='') {
01059 $mountPoints = t3lib_div::intExplode(',',$this->workspaceRec['db_mountpoints'],1);
01060 foreach($mountPoints as $mpId) {
01061 if (!$this->isInWebMount($mpId,'1=1')) {
01062 $options[$rec['uid']].= '<br> \- WARNING: Workspace Webmount page id "'.$mpId.'" not accessible!';
01063 }
01064 }
01065 }
01066 }
01067 }
01068 }
01069
01070 return $options;
01071 }
01072 }
01073
01074
01075
01076
01077
01078
01079
01080
01081
01082
01083
01084
01092 class SC_mod_tools_be_user_index {
01093 var $MCONF=array();
01094 var $MOD_MENU=array();
01095 var $MOD_SETTINGS=array();
01096 var $doc;
01097
01098 var $include_once=array();
01099 var $content;
01100
01104 function init() {
01105 global $BE_USER,$LANG,$BACK_PATH,$TCA_DESCR,$TCA,$CLIENT,$TYPO3_CONF_VARS;
01106 $this->MCONF = $GLOBALS['MCONF'];
01107
01108 $this->menuConfig();
01109 $this->switchUser(t3lib_div::_GP('SwitchUser'));
01110
01111
01112
01113
01114
01115 $this->doc = t3lib_div::makeInstance('noDoc');
01116 $this->doc->form='<form action="" method="POST">';
01117 $this->doc->backPath = $BACK_PATH;
01118
01119 $this->doc->JScode = $this->doc->wrapScriptTags('
01120 script_ended = 0;
01121 function jumpToUrl(URL) {
01122 window.location.href = URL;
01123 }
01124 ' . $this->doc->redirectUrls());
01125 }
01126
01132 function menuConfig() {
01133 global $BE_USER,$LANG,$BACK_PATH,$TCA_DESCR,$TCA,$CLIENT,$TYPO3_CONF_VARS;
01134
01135
01136
01137
01138
01139 $this->MOD_MENU = array(
01140 'function' => array(
01141 'compare' => 'Compare User Settings'
01142 )
01143 );
01144
01145 $this->MOD_SETTINGS = t3lib_BEfunc::getModuleData($this->MOD_MENU, t3lib_div::_GP('SET'), $this->MCONF['name'], 'ses');
01146 }
01147
01153 function main() {
01154 global $BE_USER,$LANG,$BACK_PATH,$TCA_DESCR,$TCA,$CLIENT,$TYPO3_CONF_VARS;
01155
01156 $this->content='';
01157 $this->content.=$this->doc->startPage('Backend User Administration');
01158
01159 $menu=t3lib_BEfunc::getFuncMenu(0,'SET[function]',$this->MOD_SETTINGS['function'],$this->MOD_MENU['function']);
01160
01161 $this->content.=$this->doc->header('Backend User Administration');
01162 $this->content.=$this->doc->spacer(5);
01163 $this->content.=$this->doc->section('',$menu).$this->doc->divider(5);
01164
01165 switch($this->MOD_SETTINGS['function']) {
01166 case 'compare':
01167 if (t3lib_div::_GP('ads')) {
01168 $compareFlags = t3lib_div::_GP('compareFlags');
01169 $BE_USER->pushModuleData('tools_beuser/index.php/compare',$compareFlags);
01170 } else {
01171 $compareFlags = $BE_USER->getModuleData('tools_beuser/index.php/compare','ses');
01172 }
01173 $this->content.=$this->compareUsers($compareFlags);
01174 break;
01175 }
01176
01177
01178 if ($BE_USER->mayMakeShortcut()) {
01179 $this->content.=$this->doc->spacer(20).
01180 $this->doc->section('',$this->doc->makeShortcutIcon('be_user_uid,compareFlags','function',$this->MCONF['name']));
01181 }
01182 }
01183
01189 function printContent() {
01190
01191 $this->content.=$this->doc->endPage();
01192 echo $this->content;
01193 }
01194
01195
01196
01197
01198
01199
01200
01201
01202
01203
01204
01205
01206
01211 function compareUsers($compareFlags) {
01212 global $SOBE;
01213
01214 $options = array(
01215 'filemounts' => 'Filemounts',
01216 'webmounts' => 'Webmounts',
01217 'tempPath' => 'Default upload path',
01218 'firstMainGroup' => 'Main user group',
01219 'groupList' => 'Member of groups',
01220 'pagetypes_select' => 'Page types access',
01221 'tables_select' => 'Select tables',
01222 'tables_modify' => 'Modify tables',
01223 'non_exclude_fields' => 'Non-exclude fields',
01224 'explicit_allowdeny' => 'Explicit Allow/Deny',
01225 'allowed_languages' => 'Limit to languages',
01226 'workspace_perms' => 'Workspace permissions',
01227 'workspace_membership' => 'Workspace membership',
01228 'custom_options' => 'Custom options',
01229 'modules' => 'Modules',
01230 'userTS' => 'TSconfig',
01231 'userTS_hl' => 'TSconfig HL',
01232 );
01233
01234 $be_user_uid = t3lib_div::_GP('be_user_uid');
01235 if ($be_user_uid) {
01236
01237 $tempBE_USER = t3lib_div::makeInstance('local_beUserAuth');
01238 $tempBE_USER->userTS_dontGetCached=1;
01239 $tempBE_USER->OS = TYPO3_OS;
01240 $tempBE_USER->setBeUserByUid($be_user_uid);
01241 $tempBE_USER->fetchGroupData();
01242
01243 $uInfo = $tempBE_USER->ext_compileUserInfoForHash();
01244 $uInfo_dat = $tempBE_USER->ext_printOverview($uInfo,$options,1);
01245
01246 $lines=array();
01247 reset($options);
01248 while(list($kk,$vv)=each($options)) {
01249 if ($kk=='modules') {
01250 $loadModules = t3lib_div::makeInstance('t3lib_loadModules');
01251 $loadModules->load($GLOBALS['TBE_MODULES'],$tempBE_USER);
01252 $alt_menuObj = t3lib_div::makeInstance('alt_menu_functions');
01253 $uInfo_dat[$kk] = $alt_menuObj->topMenu($loadModules->modules,1,$GLOBALS['BACK_PATH']);
01254 }
01255 $lines[]='<tr class="bgColor4">
01256 <td nowrap="nowrap" valign="top">'.$vv.': </td>
01257 <td>'.$uInfo_dat[$kk].' </td>
01258 </tr>';
01259
01260 if ($kk=='webmounts' && !$tempBE_USER->isAdmin()) {
01261 $lines[]='<tr class="bgColor4">
01262 <td nowrap="nowrap" valign="top">Non-mounted readable pages: </td>
01263 <td>'.$tempBE_USER->ext_getReadableButNonmounted().' </td>
01264 </tr>';
01265 }
01266 }
01267
01268 $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>';
01269 $outTable.= '<td>'.$tempBE_USER->user['realName'].($tempBE_USER->user['email'] ? ', <a href="mailto:'.$tempBE_USER->user['email'].'">'.$tempBE_USER->user['email'].'</a>' : '').'</td>';
01270 $outTable.= '<td>'.$this->elementLinks('be_users',$tempBE_USER->user).'</td></tr></table>';
01271 $outTable.= '<strong><a href="index.php">< Back to overview</a></strong><br />';
01272
01273 $outTable.= '<br /><table border="0" cellpadding="2" cellspacing="1">'.implode('',$lines).'</table>';
01274 $content.= $this->doc->section('User info',$outTable,0,1);
01275 } else {
01276 reset($options);
01277 $menu=array();
01278 while(list($kk,$vv)=each($options)) {
01279 $menu[]='<input type="checkbox" value="1" name="compareFlags['.$kk.']"'.($compareFlags[$kk]?' checked="checked"':'').'>'.htmlspecialchars($vv);
01280 }
01281 $outCode = 'Group by:<br />'.implode('<br />',$menu);
01282 $outCode.='<br /><input type="submit" name="ads" value="Update">';
01283 $content = $this->doc->section('Group and Compare Users',$outCode,0,1);
01284
01285
01286
01287 $users = t3lib_BEfunc::getUserNames();
01288 $comparation=array();
01289
01290 reset($users);
01291 $counter=0;
01292
01293
01294 $offset=0;
01295 $numberAtTime=1000;
01296 $tooManyUsers='';
01297
01298 while(list(,$r)=each($users)) {
01299 if ($counter>=$offset) {
01300
01301 $tempBE_USER = t3lib_div::makeInstance('local_beUserAuth');
01302 $tempBE_USER->OS = TYPO3_OS;
01303 $tempBE_USER->setBeUserByUid($r['uid']);
01304 $tempBE_USER->fetchGroupData();
01305
01306
01307 $md5pre='';
01308 $menu=array();
01309 $uInfo = $tempBE_USER->ext_compileUserInfoForHash((array)$compareFlags);
01310 reset($options);
01311 while(list($kk,$vv)=each($options)) {
01312 if ($compareFlags[$kk]) {
01313 $md5pre.=serialize($uInfo[$kk]).'|';
01314 }
01315 }
01316
01317 $md5=md5($md5pre);
01318 if (!isset($comparation[$md5])) {
01319 $comparation[$md5]=$tempBE_USER->ext_printOverview($uInfo,$compareFlags);
01320 $comparation[$md5]['users']=array();
01321 }
01322 $comparation[$md5]['users'][]=$tempBE_USER->user;
01323 unset($tempBE_USER);
01324 }
01325 $counter++;
01326 if ($counter>=($numberAtTime+$offset)) {
01327 $tooManyUsers='There were more than '.$numberAtTime.' users (total: '.count($users).') and this tool can display only '.$numberAtTime.' at a time!';
01328 break;
01329 }
01330 }
01331
01332
01333 $allGroups=array();
01334
01335 $allCells = array();
01336 reset($options);
01337
01338 $link_createNewUser='<a href="#" onclick="'.htmlspecialchars(t3lib_BEfunc::editOnClick('&edit[be_users][0]=new',$this->doc->backPath,-1)).'">'.
01339 '<img'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/new_el.gif','width="11" height="12"').' title="'.$GLOBALS['LANG']->getLL('new',1).'" alt="" />'.
01340 '</a>';
01341
01342 $allCells['USERS'] = '<table border="0" cellspacing="0" cellpadding="0" width="100%"><td><b>Usernames:</b></td><td width="12">'.$link_createNewUser.'</td></tr></table>';
01343
01344 while(list($kk,$vv)=each($options)) {
01345 if ($compareFlags[$kk]) {
01346 $allCells[$kk] = '<b>'.$vv.':</b>';
01347 }
01348 }
01349 $allGroups[]=$allCells;
01350
01351 reset($comparation);
01352 while(list(,$dat)=each($comparation)) {
01353 $allCells = array();
01354
01355 $uListArr=array();
01356 reset($dat['users']);
01357 while(list(,$uDat)=each($dat['users'])) {
01358 $uListArr[] = '<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).
01359 '<a href="'.t3lib_div::linkThisScript(array('SwitchUser'=>$uDat['uid'])).'" target="_top"><img src="'.$GLOBALS['BACK_PATH'].'gfx/su.gif" width="18" height="11" border="0" align="top" title="'.htmlspecialchars('Switch User to: '.$uDat['username']).'" alt="" /></a>'.
01360 '<a href="'.t3lib_div::linkThisScript(array('SwitchUser'=>$uDat['uid'], 'switchBackUser' => 1)).'" target="_top"><img src="'.$GLOBALS['BACK_PATH'].'gfx/su.gif" width="18" height="11" border="0" align="top" title="'.htmlspecialchars('Switch User to: '.$uDat['username']).' [SU-mode]" alt="" style="background-color:red;" /></a>'.
01361 '</td></tr>';
01362 }
01363 $allCells['USERS'] = '<table border="0" cellspacing="0" cellpadding="0" width="100%">'.implode('',$uListArr).'</table>';
01364
01365 reset($options);
01366 while(list($kk,$vv)=each($options)) {
01367 if ($compareFlags[$kk]) {
01368 $allCells[$kk] = $dat[$kk];
01369 }
01370 }
01371 $allGroups[]=$allCells;
01372 }
01373
01374
01375 $outTable='';
01376 reset($allGroups);
01377 $TDparams=' nowrap="nowrap" class="bgColor5" valign="top"';
01378 while(list(,$allCells)=each($allGroups)) {
01379 $outTable.='<tr><td'.$TDparams.'>'.implode('</td><td'.$TDparams.'>',$allCells).'</td></tr>';
01380 $TDparams=' nowrap="nowrap" class="bgColor4" valign="top"';
01381 }
01382 $outTable='<table border="0" cellpadding="2" cellspacing="2">'.$outTable.'</table>';
01383 $outTable.=fw('<br /><br />(All cached group lists updated.)');
01384 $outTable.=$tooManyUsers?'<br /><br /><strong><span class="typo3-red">'.$tooManyUsers.'</span></strong>':'';
01385 $content.= $this->doc->spacer(10);
01386 $content.= $this->doc->section('Result',$outTable,0,1);
01387 }
01388 return $content;
01389 }
01390
01398 function linkUser($str,$rec) {
01399 return '<a href="index.php?be_user_uid='.$rec['uid'].'">'.$str.'</a>';
01400 }
01401
01409 function elementLinks($table,$row) {
01410 global $TCA;
01411
01412 $cells[]='<a href="#" onclick="top.launchView(\''.$table.'\', \''.$row['uid'].'\',\''.$GLOBALS['BACK_PATH'].'\'); return false;"><img src="'.$GLOBALS['BACK_PATH'].'gfx/zoom2.gif" width="12" height="12" border="0" align="top" title="Show information" alt="" /></a>';
01413
01414
01415 $params='&edit['.$table.']['.$row['uid'].']=edit';
01416 $cells[]='<a href="#" onclick="'.t3lib_BEfunc::editOnClick($params,$GLOBALS['BACK_PATH'],'').'"><img src="'.$GLOBALS['BACK_PATH'].'gfx/edit2.gif" width="11" height="12" border="0" align="top" title="Edit" alt="" /></a>';
01417
01418
01419 $hiddenField = $TCA[$table]['ctrl']['enablecolumns']['disabled'];
01420 if ($row[$hiddenField]) {
01421 $params='&data['.$table.']['.$row['uid'].']['.$hiddenField.']=0';
01422 $cells[]='<a href="'.$this->doc->issueCommand($params).'"><img src="'.$GLOBALS['BACK_PATH'].'gfx/button_unhide.gif" width="11" height="10" border="0" title="Disable" align="top" alt="" /></a>';
01423 } else {
01424 $params='&data['.$table.']['.$row['uid'].']['.$hiddenField.']=1';
01425 $cells[]='<a href="'.$this->doc->issueCommand($params).'"><img src="'.$GLOBALS['BACK_PATH'].'gfx/button_hide.gif" width="11" height="10" border="0" title="Disable" align="top" alt="" /></a>';
01426 }
01427
01428
01429 $params='&cmd['.$table.']['.$row['uid'].'][delete]=1';
01430 $cells[]='<a href="'.$this->doc->issueCommand($params).'" onclick="return confirm(unescape(\''.rawurlencode('Are you sure you want to delete this element?').'\'));"><img src="'.$GLOBALS['BACK_PATH'].'gfx/garbage.gif" width="11" height="12" border="0" align="top" title="Delete(!)" alt="" /></a>';
01431
01432 return implode('',$cells);
01433 }
01434
01440 function initUsers() {
01441
01442 $users = t3lib_BEfunc::getUserNames();
01443
01444 reset($users);
01445 while(list(,$r)=each($users)) {
01446
01447 $tempBE_USER = t3lib_div::makeInstance('local_beUserAuth');
01448 $tempBE_USER->OS = TYPO3_OS;
01449 $tempBE_USER->setBeUserByUid($r['uid']);
01450 $tempBE_USER->fetchGroupData();
01451 }
01452 }
01453
01460 function localPath($str) {
01461 if (substr($str,0,strlen(PATH_site))==PATH_site) {
01462 return substr($str,strlen(PATH_site));
01463 } else return $str;
01464 }
01465
01472 function switchUser($switchUser) {
01473 $uRec=t3lib_BEfunc::getRecord('be_users',$switchUser);
01474 if (is_array($uRec) && $GLOBALS['BE_USER']->isAdmin()) {
01475 $updateData['ses_userid'] = $uRec['uid'];
01476
01477 if (t3lib_div::_GP('switchBackUser')) {
01478 $updateData['ses_backuserid'] = intval($GLOBALS['BE_USER']->user['uid']);
01479 }
01480 $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);
01481
01482 header('Location: '.t3lib_div::locationHeaderUrl($GLOBALS['BACK_PATH'].'index.php'.($GLOBALS['TYPO3_CONF_VARS']['BE']['interfaces']?'':'?commandLI=1')));
01483 exit;
01484 }
01485 }
01486 }
01487
01488
01489 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/beuser/mod/index.php']) {
01490 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/beuser/mod/index.php']);
01491 }
01492
01493
01494
01495
01496
01497
01498
01499
01500
01501
01502
01503
01504
01505 $SOBE = t3lib_div::makeInstance('SC_mod_tools_be_user_index');
01506 $SOBE->init();
01507 $SOBE->main();
01508 $SOBE->printContent();
01509 ?>