Проверьте, зарегистрирован ли пользователь в определенном курсе Moodle - PullRequest
10 голосов
/ 06 декабря 2011

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

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

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

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


Редактировать: Сайт использует Moodle 2 .

Ответы [ 4 ]

6 голосов
/ 31 октября 2013

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

global $USER;

$context = get_context_instance(CONTEXT_COURSE, $courseid, MUST_EXIST);
$enrolled = is_enrolled($context, $USER->id, '', true);
5 голосов
/ 07 декабря 2011

Сначала вам нужно получить контекст курса, а затем проверить своего пользователя по списку зарегистрированных пользователей с определенным идентификатором роли в этом контексте (идентификатор роли по умолчанию для ученика равен 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
4 голосов
/ 20 октября 2016

Вы также можете запустить эту команду 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' как студент или преподаватель

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

1 голос
/ 12 июня 2013

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

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;
    } 
} 
...