2017-09-27 151 views
1

我想从用户ID获取用户角色。我在我的代码中使用循环,我想显示除admin之外的所有用户。我使用下面的代码,但它不工作。通过用户ID在moodle中获取用户角色

$context = get_context_instance (CONTEXT_SYSTEM); 
$roles = get_user_roles($context, $USER->id, false); 
$role = key($roles); 
$roleid = $roles[$role]->roleid; 

它为我提供空白数组像截图一样。也在我的所有代码下面。 https://prnt.sc/gq8p12

$ allUsers = $ DB-> get_records('user');

$SQL = "SELECT * FROM `".$CFG->prefix."config` WHERE `name` LIKE 'siteadmins'"; 
    $getSiteAdmins = $DB->get_record_sql($SQL); 
    $explodeAdminIds = explode(',', $getSiteAdmins->value);  
    $context = get_context_instance (CONTEXT_SYSTEM);  

    if(!empty($allUsers)) 
    { 
     foreach ($allUsers as $allUser) 
     { 
      if(!in_array($allUser->id, $explodeAdminIds)) 
      { 
       $roles = get_user_roles($context, $allUser->id, false); 
       $role = key($roles); 
       $roleid = $roles[$role]->roleid; 

       echo 'USER ID -- '.$allUser->id.' >>> '; 
       print_r($roles); echo '<br>'; 

       $name = '<a href="' . $CFG->wwwroot . '/user/profile.php?id='.$allUser->id.'&mid=4">'.$allUser->id.'_'.$allUser->firstname.' '.$allUser->lastname.'</a>'; 
       $confirmed = ($allUser->confirmed == 1) ? 'Active' : 'In-active'; 
       $table->data[] = array(
        $i, 
        $name, 
        'Team Name', 
        $allUser->email, 
        $allUser->phone1, 
        'Role', 
        $confirmed, 
        //empty($coachusrarr)?'--':implode(',',$coachusrarr), 
        //empty($tmpleaderarr)?'--':implode(',',$tmpleaderarr), 
        //$coach, 
       ); 
       $i++; 
      } 
     } 
    } 

回答

1

的基本问题是,get_user_roles($背景下,$用户ID)只会让你在这个特定背景下级别分配角色的列表。很少用户在系统上下文中分配角色,在课程级别分配角色更为常见。这允许用户在不同的课程中担任不同的角色(一门课程上的教师可能作为另一门课程的学生注册)。

如果你想获得一个用户的所有角色,那么你将需要做这样的事情:

$roleassignments = $DB->get_records('role_assignments', ['userid' => $user->id]); 

然后,您可以遍历所有$ roleassignments并提取“角色ID '(或者,您可以使用$ DB-> get_fieldset命令,直接提取角色ID)。

还要注意,你应该使用context_system :: instance()而不是旧的get_context_instance(CONTEXT_SYSTEM)(除非你使用的是一个非常老且不安全的Moodle版本)。

要获取站点管理员,请使用get_admins()(或者,如果您确实想访问配置值,请使用$ CFG-> siteadmins)。