Проверьте, зарегистрирован ли пользователь в определенном курсе Moodle

на сайте с поддержкой Moodle я хочу дать пользователям некоторые купоны.

Я сделал это, чтобы проверить, вошел ли пользователь в систему, но я также хочу проверить, включен ли текущий зарегистрированный пользователь в определенный курс (массив идентификаторов 3 курса).

до сих пор я пытался с $USER->currentcourseaccess или $USER-> lastcourseaccess, но они не сделать трюк.

Итак, как я могу проверить, зарегистрирован ли текущий зарегистрированный пользователь в определенном курсе Moodle?


Edit: в сайт использует Moodle 2.

4 ответов


вам нужно сначала получить контекст курса, а затем проверить своего пользователя в списке зарегистрированных пользователей с определенным идентификатором роли в этом контексте (идентификатор роли по умолчанию для студента-5). Wit h API Moodle 2.0+, вы можете сделать это без прямого запроса к базе данных:

$context = get_context_instance(CONTEXT_COURSE, $course_id);
$students = get_role_users(5, $context);

в Moodle 1.9 вам нужно будет вручную получить материал из БД:

  • сначала mdl_contexts стол contextlevel = CONTEXT_COURSE (CONTEXT_COURSE = 50) и instanceid = <id of course>
  • а то mdl_role_assignments С contextid = <first result> и roleid = 5

Я просто использую это простое 2-строчное решение (, используя курс и идентификатор пользователя):

global $USER;

$context = get_context_instance(CONTEXT_COURSE, $courseid, MUST_EXIST);
$enrolled = is_enrolled($context, $USER->id, '', true);

вы также можете запустить эту команду SQL:

SELECT c.id AS id, c.fullname,c.shortname, u.username, u.firstname, 
u.lastname, u.email
FROM mdl_role_assignments ra, mdl_user u, mdl_course c, mdl_context cxt
WHERE ra.userid = u.id
AND ra.contextid = cxt.id
AND cxt.contextlevel = 50
AND cxt.instanceid = c.id
AND u.username = 'User_Username'
AND c.shortname = 'Course_Shortname'
AND (roleid =5 OR roleid=3);

это должно проверить, зарегистрирован ли пользователь с именем пользователя "User_Username" в курсе с коротким именем "Course_Shortname" как студент или учитель

надеюсь, что это помогает.


Регистрация проверить фрагмент кода :

function check_enrollment($username, $course){ 
    global $DB;
    $sql = "SELECT count(*)
            FROM mdl_user_enrolments a,
            mdl_enrol b,
            mdl_user c

            WHERE c.username='$username'
            AND a.userid=c.id
            AND b.courseid=$course
            AND a.enrolid=b.id";
    $n = $DB->count_records_sql($sql);
    if($n==0) {
        //user not enrolled
        return False;
    } elseif($n==1) {
        //user already enrolled
        return True;
    } else { 
        //, bad data ie<Data sanity not maintained>
        add_to_log($course, 'ERROR: check-enrollment', 'Entered into mordor code block');
        return False;
    } 
}