2011-12-05 13 views
9

पर नामांकित है, मूडल-सक्षम साइट पर, मैं उपयोगकर्ताओं को कुछ कूपन देना चाहता हूं।जांचें कि क्या उपयोगकर्ता विशिष्ट मूडल कोर्स

मैंने यह जांचने के लिए बनाया कि उपयोगकर्ता लॉग इन है या नहीं, लेकिन मैं यह भी जांचना चाहता हूं कि वर्तमान लॉग इन उपयोगकर्ता विशिष्ट पाठ्यक्रम (3 पाठ्यक्रम आईडी की एक सरणी) में घुमाया गया है या नहीं।

अब तक मैंने $USER->currentcourseaccess या $USER-> lastcourseaccess के साथ प्रयास किया है, लेकिन वे चाल नहीं करते हैं।

तो, मैं कैसे जांच सकता हूं कि वर्तमान लॉग इन उपयोगकर्ता विशिष्ट मूडल कोर्स में नामांकित है या नहीं?


संपादित करें: साइट Moodle 2 उपयोग करता है।

उत्तर

4

आपको पहले पाठ्यक्रम संदर्भ प्राप्त करने की आवश्यकता होगी, और फिर उस संदर्भ में विशिष्ट उपयोगकर्ता आईडी के साथ नामांकित उपयोगकर्ताओं की सूची के विरुद्ध अपने उपयोगकर्ता की जांच करें (छात्र के लिए डिफ़ॉल्ट भूमिका आईडी 5 है)।

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

Moodle 1.9 में, आपको मैन्युअल डीबी से सामग्री प्राप्त करने की आवश्यकता होगी:

  • पहले बुद्धि ज Moodle 2.0+ एपीआई, आप सीधे डेटाबेस से पूछे बिना यह कर सकते हैं contextlevel = CONTEXT_COURSE (CONTEXT_COURSE = 50) साथ mdl_contexts मेज और instanceid = <id of course>
  • और contextid = <first result> साथ तो mdl_role_assignments और roleid = 5
+0

हां, साइट मूडल 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 लाइन समाधान का उपयोग करें:

global $USER; 

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

मुझे मूडल में एक संदेह है .. – user3663

+0

आपका प्रश्न क्या है? – Mike

+0

क्या आप कृपया यह जांच सकते हैं https://stackoverflow.com/questions/46110220/use-moodle-enrol-me-option-in-custom-php-plication .. अगर आप कृपया समझाने में मदद कर सकते हैं .. – user3663

2

आप भी इस एसक्यूएल आदेश चला सकते हैं:

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

यह जांचना चाहिए कि उपयोगकर्ता नाम 'उपयोगकर्ता_यूसमनाम' वाला उपयोगकर्ता संक्षिप्त नाम 'कोर्स_शॉर्टनाम' के साथ छात्र या शिक्षक

आशा करता है कि यह मदद करता है।

संबंधित मुद्दे