Index: masquerade.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/masquerade/masquerade.module,v retrieving revision 1.13 diff -U3 -r1.13 masquerade.module --- masquerade.module 9 Jul 2006 16:55:17 -0000 1.13 +++ masquerade.module 14 Oct 2006 06:30:41 -0000 @@ -51,6 +51,64 @@ } /** + *Block to assist in switching between users + * + **/ + +function masquerade_block($op = 'list', $delta = 0, $edit = array()) { + if ($op == 'list') { + $blocks[0]['info'] = t('User Switching Block'); + return $blocks; + } + else if ($op == 'configure') { + } + else if ($op == 'save') { + } + else if ($op == 'view') { + switch ($delta) { + case 0: + if(!user_access('masquerade as user') || !user_access('masquerade as admin')) + return; + $block['subject'] = t('Switch To User'); + $block['content'] = _masquerade_getUserSwitchList(); + break; + } + return $block; + } +} + +/** + * Gets one user from each role logged in user is allowed to switch to + * + **/ +function _masquerade_getUserSwitchList() { + + $roles = user_roles(); + + $q = 'SELECT * from users INNER join users_roles on users.uid = users_roles.uid '; + if(!user_access('masquerade as admin')) { + $admin_roles = variable_get('masquerade_admin_roles',array()); + foreach($admin_roles as $k => $rid) { + if(!$rid) + unset($admin_roles[$k]); + } + if($admin_roles) { + $q .= 'AND rid NOT IN ('. implode(',',$admin_roles) .')'; + } + } + + $q .= "GROUP BY rid"; + $ret = db_query($q); + while($obj = db_fetch_object($ret)) { + if(!$obj->uid) + continue; + $links[] = l($obj->name,'masquerade/switch' . '/'. $obj->uid) . "
" . $roles[$obj->rid]; + } + return theme_menu_links($links); + +} + +/** * Implementation of hook_init() */ function masquerade_init() {