2011-12-05 36 views
9

Trên trang web hỗ trợ Moodle, tôi muốn cung cấp cho người dùng một số phiếu giảm giá.Kiểm tra xem người dùng có đăng ký khóa học Moodle cụ thể không

Tôi đã kiểm tra xem người dùng đã đăng nhập chưa, nhưng tôi cũng muốn kiểm tra xem người dùng đăng nhập hiện tại có được đăng ký trong khóa học cụ thể không (một mảng gồm 3 ID khóa học).

Cho đến giờ tôi đã thử với $USER->currentcourseaccess hoặc $USER-> lastcourseaccess, nhưng chúng không thực hiện thủ thuật.

Vì vậy, làm cách nào để kiểm tra xem người dùng đăng nhập hiện tại có được đăng ký vào khóa học Moodle cụ thể không?


Edit: Các trang web sử dụng Moodle 2.

Trả lời

4

Trước tiên, bạn cần xem ngữ cảnh khóa học, sau đó kiểm tra người dùng của bạn dựa vào danh sách người dùng đã đăng ký có ID vai trò cụ thể trong ngữ cảnh đó (ID vai trò mặc định cho Sinh viên là 5). Wit h Moodle 2.0+ API, bạn có thể làm điều đó mà không cần trực tiếp truy vấn cơ sở dữ liệu:

$context = get_context_instance(CONTEXT_COURSE, $course_id); 
$students = get_role_users(5, $context); 

Trong Moodle 1.9, bạn sẽ cần phải tự nhận được những thứ từ DB:

  • đầu tiên mdl_contexts bảng với contextlevel = CONTEXT_COURSE (CONTEXT_COURSE = 50)instanceid = <id of course>
  • và sau đó mdl_role_assignments với contextid = <first result>roleid = 5
+0

Có, trang web sử dụng Moodle 2 [quên đề cập]. –

1

tuyển đoạn mã kiểm tra:

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

tôi chỉ sử dụng giải pháp này đơn giản 2 dòng (sử dụng nhiên và sử dụng id):

global $USER; 

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

Tôi có một nghi ngờ trong moodle .. – user3663

+0

Câu hỏi của bạn là gì? – Mike

+0

bạn có thể vui lòng kiểm tra này https://stackoverflow.com/questions/46110220/use-moodle-enrol-me-option-in-custom-php-application..if bạn có thể giúp bạn có thể vui lòng giải thích .. – user3663

2

bạn cũng có thể chạy lệnh này 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); 

điều này nên kiểm tra xem người dùng có tên người dùng 'User_Username' được đăng ký trong khóa học với shortname 'Course_Shortname' làm sinh viên hoặc giáo viên

hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan