Проверьте, зарегистрирован ли пользователь в определенном курсе 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;
}
}