Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 通过moodle中的用户id获取用户角色_Sql_Moodle_Roles_User Roles_Moodle Api - Fatal编程技术网

Sql 通过moodle中的用户id获取用户角色

Sql 通过moodle中的用户id获取用户角色,sql,moodle,roles,user-roles,moodle-api,Sql,Moodle,Roles,User Roles,Moodle Api,我想从用户id中获取用户角色。我正在代码中使用循环,我想在其中显示除管理员之外的所有用户。我使用了下面的代码,但它不工作 $context = get_context_instance (CONTEXT_SYSTEM); $roles = get_user_roles($context, $USER->id, false); $role = key($roles); $roleid = $roles[$role]->roleid; 它像截图一样为我提供空白数组。下面还有我的全部代码

我想从用户id中获取用户角色。我正在代码中使用循环,我想在其中显示除管理员之外的所有用户。我使用了下面的代码,但它不工作

$context = get_context_instance (CONTEXT_SYSTEM);
$roles = get_user_roles($context, $USER->id, false);
$role = key($roles);
$roleid = $roles[$role]->roleid;
它像截图一样为我提供空白数组。下面还有我的全部代码。

$allUsers=$DB->获取_记录'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++;
            }
        }
    }

基本问题是get_user_roles$context,$userid只会为您提供在特定上下文级别分配的角色列表。很少有用户在系统上下文中分配角色,通常在课程级别分配角色。这允许用户在不同的课程中扮演不同的角色。一门课程的教师可能被注册为另一门课程的学生

如果要为用户获取所有角色,则需要执行以下操作:

$roleassignments = $DB->get_records('role_assignments', ['userid' => $user->id]);
然后,您可以循环所有$ROLEASignments并从中提取“roleid”。或者,您可以使用$DB->get_fieldset命令直接提取roleid

另外请注意,您应该使用context_system::instance而不是旧的get_context_instanceCONTEXT_系统,除非您使用的是非常旧且不安全的Moodle版本


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

我有不同contextid的roleid 1 2 3 4 5,因此您可以让我知道roleid是否为1=admin,2=means teacher,3表示特定contextid的学生?您需要查看表mdl_角色,以了解每个角色ID的含义。根据定义的自定义角色,它将因站点而异。通常3人是编辑老师,4人是非编辑老师,5人是学生,但你永远不应该依赖于这一点,并始终检查mdl_的角色。