外部データベース登録
作成中です - Mitsuhiro Yoshida
ロケーション: 「設定 > サイト管理 > プラグイン > 受講登録 > 登録プラグイン管理」にて、外部データベース設定を編集することができます。
受講登録をコントロールするため、あなたは (ほとんどの種類の) 外部データベースを使用することができます。あなたの外部データベースのフィールドに、コースID、ユーザIDおよび任意のロールフィールドが含まれていると仮定します。これらのフィールドは、あなたが選択したローカルのコーステーブル、ユーザテーブルおよびロールテーブルを参照します。
下記リストはMoodleでサポートされているデータソースです。あなたは適切なオプションを付けてPHPをコンパイルする、またはODBC経由にてデータベースにアクセスする必要があることに留意してください。
- access
- ado
- mssql
- borland_ibase
- csv
- db2
- fbsql
- firebird
- ibase
- informix72
- informix
- mysql
- mysqlt
- oci805
- oci8
- oci8po
- odbc
- odbc_mssql
- odbc_oracle
- oracle
- postgres64
- postgres7
- postgres
- proxy
- sqlanywhere
- sybase
- vfp
登録 & 登録解除
外部データベース登録はユーザがMoodleにログインした時点で動作します。このプラグインでは、外部データベースのデータにもとづき、すべての該当するコースに対して学生の自動登録を試みます。コースが存在しない場合、任意に空のコースを作成します。正常動作を確認するには、学生としてログインした後、コースリストがあなたの希望どおりになっているかどうか確認してください。
ユーザがデータベースに存在しない場合、この処理ではコースからユーザを登録解除します。ユーザレコードはオリジナルの登録方法に従って登録されます。そのため、最初に外部データプラグインによって登録されたユーザに限って、外部データプラグインはユーザを登録解除することができます。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
非表示コース
コース利用にて「学生はこのコースを利用できない」が設定されているコースの場合、「非表示のコースを無視する (enrol_db | ignorehiddencourse)」を有効にすることで、登録処理から除外することができます。
登録 & ロール
プラグイン設定ページの「enrol_database | defaultrole」では、コース追加時にユーザに割り当てられるロールを指定します。このデフォルトロール設定値は、コースのデフォルト設定 (初期値は「学生 (student)」) として割り当てられます。しかし、「リモートロールフィールド enrol_database | remoterolefield」にて、あなたはユーザロールの省略名を含む外部データベーステーブルのフィールドを指定することができます。例えば、この設定は適切に設定されたデータベースにより、学生および教師の両方をコースに登録するために使用できます。
コースの作成
Moodleサイト内に存在しないコースを任意に作成することができます。プラグイン設定内の「リモートの新しいコーステーブル (enrol_database newcoursetable)」オプションにコース一覧を含むテーブル名を入力してください。あなたは任意で新しいコースが作成されるカテゴリを指定することができます。また、新しいコースにコピーされる「テンプレート」コースを指定することもできます。
同期スクリプト
あなたのユーザの受講登録すべてを一度に同期できるスクリプトが提供されます - ユーザ受講登録の追加および解除 (そして、指定されていればコースを作成します)。同期スクリプト「enrol_database_sync.php」は「enrol/database」フォルダ内にあります。
このスクリプトは、外部データベースの受講登録情報とMoodleの受講登録情報を同期させるために、システムcronジョブよりコールされます。あなたは外部データベースに登録されているユーザすべてがMoodle内に作成されていることを確認する必要があります。あなたが外部認証プラグイン (db、ldap等) を使用している場合、このスクリプトを使用して同期する前に、それらのプラグインより提供されているスクリプトを使用することができます。
以下、Moodle 2.0のcronエントリ例です:
# 5 minutes past 4am 5 4 * * * /usr/bin/php -c /path/to/php.ini /path/to/moodle/enrol/database/cli/sync.php
メモ:
- 大量のユーザ受講登録がある場合、「-d memory_limit=256M」を渡すことで、メモリ制限を上げることができます。
- デバッグおよびログの目的のため、あなたは次のコマンドを自由に使うこともできます: -d log_errors=1 -d error_reporting=E_ALL -d display_errors=0 -d html_errors=0
- これは、あなたのMoodleサイトに登録されているユーザのみに対して動作します (上記コメントをご覧ください)。
セットアップ方法
外部データベース登録を有効にするには、最低、以下のステップが必要となります - ユーザおよびコースの組み合わせのレコードを含む単一のデータベーステーブルのみ必用です。テーブルが大きい場合、事前に適切なインデックスの作成をお勧めします:
- 既存のデータベースを使用、または新しいデータベースを作成してください。既存のテーブルを使用、または最低限の下記フィールドを含むテーブルを作成してください:
- コースID (Moodle内のユニークなコースIDに合致させるため)
- ユーザID (Moodle内のユニークなユーザIDに合致させるため)
- (任意) ロールID (Moodle内のユニークなロールIDに合致させるため)
- データベーステーブルを作成してください。テーブル内には、ユーザ/コースを組み合わせたレコードを作成してください。
- Moodle内で「サイト管理 > プラグイン > 受講登録 > 登録プラグイン管理」にアクセスした後、「利用可能なコース登録プラグイン」一覧の「外部データベース」設定をクリックしてください。
- ページ上部にてデータベースタイプを選択した後 (そのタイプに必要なPHP設定が施されていることを確認してください)、データベース接続に関する情報を入力してください。
- ページ中頃でMoodleおよび外部データベースのマッピングを作成します。
- enrol_localcoursefield / enrol_remotecoursefield - Moodle内のコース設定で独自にコースを識別するための名称です (例 idnumber)。外部データベース内でフィールドを合致させるための名称です。
- enrol_localuserfield / enrol_remoteuserfield - Moodle内のユーザプロファイルフィールドで独自にユーザを識別するためのフィールド名です (例 idnumber)。外部データベース内でフィールドを合致させるための名称です。
- enrol_db_localrolefield / enrol_db_remoterolefield - (任意) Moodle内のロール編集ページで独自にユーザを識別するためのフィールド名です (例 shortname)。外部データベース内でフィールドを合致させるための名称です。
- 外部データベースでロールが指定されていない場合、「デフォルトロール」にてユーザのコース受講登録時に割り当てられるロールを指定します。
- 最後のセクションでは、コースの自動作成を有効にします。
- 「変更を保存する」ボタンをクリックした後、外部データベース受講登録を有効にするため、目のアイコンをクリックしてください。
外部データベース登録がコース設定のユーザ登録方法に表示されません。なぜですか?
「コース > 設定 > ユーザ登録方法」には、インタラクティブインタラクティブ登録プラグインのみ表示されます。外部データベース登録はそのようなプラグインではないため、リストには表示されません。同様に、「設定 > ユーザ > 登録方法」内の各プラグイン編集ページに関しても、インタラクティブ登録プラグインにのみ登録開始および終了日が表示され、外部データベース登録では表示されません。
この記事を執筆している現在、インタラクティブ登録プラグインは「手動」(「内部」として知られています)、「Paypal」および「authorize.net」のみです。
フィールドマッピング例:
あなたのフィールドをMoodleデータベースより選択してください:
- enrol_localcoursefield: mdl_courseのコースIDです。例) idnumber
- enrol_localuserfield: mdl_userのユーザiDです。例) idnumber
- enrol_localrolefield: (任意) mdl_roleロールIDです。例) shortname
必要であれば、選択したMoodleのフィールド値に合致するよう、あなたの外部データベーステーブルを選択してください:
- enrol_remotecoursefield: コースIDに合致する外部データベーステーブルです。例) course_number
- enrol_remoteuserfield: ユーザIDに合致する外部データベーステーブルです。例) userid
- enrol_remoterolefield: (任意) ロールIDに合致する外部データベーステーブルです。例) role_name
潜在的な欠点 (Potential Gotchas)
- 言うまでもなく、外部データベースとの整合性は重要です。データベースからデータが喪失した場合、ユーザが一部またはすべてのコースから登録解除されてしまう可能性があります。登録解除プロセスでは、すべてのグループ割り当てを解除して、適切であれば、それぞれのモジュールにユーザデータを削除するよう指示します (しかし、例えばフォーラム投稿が削除されることはありません)。そのため、常に外部データベースの内容が正しいかどうか十分注意を払うことは適切な判断である言えます。
- マイナーセキュリティ問題 あなたの学生を識別するために使用しているIDフィールドを (プロファイルページにて) 学生が編集できると仮定してみましょう。そして、このIDを有効な他の学生のIDに変更して、アクセスすべきではないリソースにアクセスを試みるとしましょう。この場合、ユーザはユーザ自身として表示され、他のユーザになりすますことはできません。そうでなければ、他のユーザのリソースにアクセスできてしまいます。
エラーおよび診断
php.iniファイルで定義されたPHPエラーログに対して、プラグインでは数多くの診断およびエラーメッセージを出力します。加えて、ユーザに関するメッセージがデータベースに記録されますが、これは「サイト管理 > 開発 > デバッグ」にて、「デバッグメッセージ debug」がALLまたはDEVELOPERに設定された場合のみ生成されます。
関連情報
- Using Moodle MySQL登録プラグインが動作しないようです フォーラムディスカッション - 英語
- Using Moodle どなたか外部データベース登録を説明してくださいませんか?? フォーラムディスカッション - 英語
- セットアップ例 [1] 外部データベース登録セットアップ例