2017-09-27 23 views
1

ユーザIDからユーザロールを取得したいとします。私は私のコードで私はどこにadminを除くすべてのユーザーを表示したいループを使用しています。私は以下のコードを使用していますが、動作しません。moodleのユーザIDでユーザロールを取得

$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

$ all-> 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)が唯一あなたにその特定のコンテキスト・レベルで割り当てられたロールのリストを取得することです。システムコンテキストでは役割が割り当てられているユーザーはごくわずかですが、コースレベルで役割を割り当てるのはずっと一般的です。これにより、ユーザーは異なるコースで異なる役割を果たすことができます(1つのコースの先生が別のコースの生徒として登録されている可能性があります)。その後、

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

あなたは、可能なすべての$ roleassignmentsをループと「roleidを抽出します。あなたは、ユーザーのすべてのロールを取得したい場合は、あなたがこのような何かをする必要があるとしている

'(あるいは、$ DB-> get_fieldsetコマンドを使って直接roleidsを抽出することもできます)。

古いget_context_instance(CONTEXT_SYSTEM)の代わりにcontext_system :: instance()を使うべきであることにも注意してください(非常に古く、安全でないバージョンのMoodleを使用している場合を除きます)。

サイト管理者を取得するには、get_admins()を使用します(または、実際に設定値にアクセスする場合は、$ CFG-> siteadminsを使用します)。

関連する問題