2011-12-05 82 views
9

在支持Moodle的網站上,我想給用戶一些優惠券。檢查用戶是否註冊了特定的Moodle課程

我做了它來檢查用戶是否登錄,但我也想檢查當前登錄用戶是否在特定課程(3個課程ID數組)。

到目前爲止,我嘗試使用$USER->currentcourseaccess$USER-> lastcourseaccess,但他們沒有辦法。

那麼,我該如何檢查當前登錄的用戶是否註冊了特定的Moodle課程?


編輯:該網站使用Moodle的2

回答

4

您需要先獲取課程上下文,然後根據該上下文中具有特定角色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_contextscontextlevel = CONTEXT_COURSE (CONTEXT_COURSE = 50)instanceid = <id of course>
  • 然後mdl_role_assignmentscontextid = <first result>roleid = 5
+0

是的,該網站使用Moodle 2 [忘記提及]。 –

1

報名校驗碼片段:

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

http://www.iank.it/category/e-learning/

5

我只是用這個簡單的2線的解決方案(使用過程中和用戶ID):

global $USER; 

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

我對moodle有一個疑問.. – user3663

+0

你的問題是什麼? – Mike

+0

你可以請檢查這一個https://stackoverflow.com/questions/46110220/use-moodle-enrol-me-option-in-custom-php-application..if你可以幫助你,請你解釋.. – user3663

2

你也可以運行該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'中註冊

希望它有幫助。