2017-09-27 13 views
1

Je souhaite obtenir le rôle d'utilisateur à partir de l'ID utilisateur. J'utilise loop dans mon code où je veux montrer tous les utilisateurs sauf admin. J'ai utilisé le code ci-dessous mais ça ne marche pas.Obtenir le rôle d'utilisateur par ID d'utilisateur dans moodle

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

Il me fournir tableau vide comme capture d'écran. Aussi en dessous de mon tout le code. 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++; 
      } 
     } 
    } 

Répondre

1

Le problème fondamental est que get_user_roles (contexte de $, $ userid) ne vous obtenir une liste des rôles assignés à ce niveau de contexte particulier. Très peu d'utilisateurs ont des rôles attribués au contexte du système, il est beaucoup plus habituel d'attribuer des rôles au niveau d'un cours. Cela permet aux utilisateurs d'avoir différents rôles dans différents cours (un enseignant sur un cours, peut être inscrit en tant qu'étudiant à un autre cours).

Si vous voulez obtenir tous les rôles pour un utilisateur, alors vous allez avoir besoin de faire quelque chose comme ceci:

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

Vous pouvez ensuite une boucle à travers tous les roleassignments $ et extraire le « roleid 'd'eux (alternativement, vous pouvez utiliser la commande $ DB-> get_fieldset, pour extraire les roleids directement). Notez également que vous devez utiliser context_system :: instance() à la place de l'ancienne instance get_context_instance (CONTEXT_SYSTEM) (sauf si vous utilisez une version très ancienne et non sécurisée de Moodle). Pour obtenir les admins de site, utilisez get_admins() (ou, si vous voulez vraiment accéder à la valeur de configuration, utilisez $ CFG-> siteadmins).