在支持Moodle的網站上,我想給用戶一些優惠券。檢查用戶是否註冊了特定的Moodle課程
我做了它來檢查用戶是否登錄,但我也想檢查當前登錄用戶是否在特定課程(3個課程ID數組)。
到目前爲止,我嘗試使用$USER->currentcourseaccess
或$USER-> lastcourseaccess
,但他們沒有辦法。
那麼,我該如何檢查當前登錄的用戶是否註冊了特定的Moodle課程?
編輯:該網站使用Moodle的2。
在支持Moodle的網站上,我想給用戶一些優惠券。檢查用戶是否註冊了特定的Moodle課程
我做了它來檢查用戶是否登錄,但我也想檢查當前登錄用戶是否在特定課程(3個課程ID數組)。
到目前爲止,我嘗試使用$USER->currentcourseaccess
或$USER-> lastcourseaccess
,但他們沒有辦法。
那麼,我該如何檢查當前登錄的用戶是否註冊了特定的Moodle課程?
編輯:該網站使用Moodle的2。
您需要先獲取課程上下文,然後根據該上下文中具有特定角色ID的註冊用戶列表(Student的默認角色ID爲5)來檢查用戶。威特小時的Moodle 2.0+ API,你可以不用直接查詢數據庫:
$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
報名校驗碼片段:
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;
}
}
我只是用這個簡單的2線的解決方案(使用過程中和用戶ID):
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'中註冊
希望它有幫助。
是的,該網站使用Moodle 2 [忘記提及]。 –