2011-12-05 10 views
9

Moodle対応サイトでは、いくつかのクーポンを提供したいと思います。ユーザが特定のMoodleコースに登録されていることを確認してください

ユーザーがログインしているかどうかを確認しましたが、現在ログインしているユーザーが特定のコース(3つのコースIDの配列)に登録されているかどうかを確認したい場合もあります。

これまでのところ、私は$USER->currentcourseaccessまたは$USER-> lastcourseaccessを試しましたが、彼らはそのトリックをしません。

現在ログインしているユーザーが特定のMoodleコースに登録されているかどうかを確認する方法はありますか?


編集:サイトはのMoodle 2を使用しています。

答えて

4

まず、コースのコンテキストを取得してから、そのコンテキストで特定の役割IDを持つ登録済みユーザーの一覧(ユーザーの既定の役割IDは5)からユーザーを確認する必要があります。ウィット時間のMoodle 2.0+ API、あなたが直接データベースを照会せずにそれを行うことができます:Moodleの1.9では

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

、手動でDBからのものを取得する必要があります:

  • 最初contextlevel = CONTEXT_COURSE (CONTEXT_COURSE = 50)mdl_contextsテーブルと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

私は(もちろん、ユーザーIDを使用して、)この単純な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-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」という短い名前の生徒または教師として登録されているかどうかを確認する必要があります。

希望します。

関連する問題