2011-12-05 83 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'中注册

希望它有帮助。