Проверьте, зачислен ли пользователь на определенный курс Moodle

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

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

До сих пор я пробовал с $USER->currentcourseaccess или $USER-> lastcourseaccess, но они не помогают.

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


Изменить. На сайте используется Moodle 2.


person Marius Butuc    schedule 05.12.2011    source источник


Ответы (4)


Вам нужно сначала получить контекст курса, а затем сравнить своего пользователя со списком зачисленных пользователей с определенным идентификатором роли в этом контексте (идентификатор роли по умолчанию для студента — 5). С помощью 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
person olex    schedule 06.12.2011
comment
Да, сайт использует Moodle 2 [забыл упомянуть]. - person Marius Butuc; 07.12.2011

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

global $USER;

$context = get_context_instance(CONTEXT_COURSE, $courseid, MUST_EXIST);
$enrolled = is_enrolled($context, $USER->id, '', true);
person Mike    schedule 31.10.2013
comment
Каков твой вопрос? - person Mike; 09.09.2017
comment
не могли бы вы проверить это stackoverflow.com/questions/46110220/ вы можете помочь, не могли бы вы объяснить .. - person ; 11.09.2017

вы также можете запустить эту команду 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» в качестве ученика или учителя.

Надеюсь, поможет.

person Mawardy    schedule 20.10.2016

Фрагмент кода проверки регистрации:

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;
    } 
} 
person iankit    schedule 12.06.2013