外部データベース登録

提供:MoodleDocs
移動先:案内検索

外部データベースを使用して登録を制御する

受講登録をコントロールするため、あなたは (ほとんどの種類の) 外部データベースを使用することができます。あなたの外部データベースのフィールドに、コース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 では、コース追加時にユーザに割り当てられるロールを指定します。このデフォルトロール設定値はコースのデフォルト設定 (初期値は学生)として割り当てられます。しかし、リモートロールフィールド enrol_database | remoterolefield にて、あなたはユーザロールの省略名を含む外部データベーステーブルのフィールドを指定することができます。例えば、この設定は適切に設定されたデータベースにより、学生および教師の両方をコースに登録するため使用できます。

登録解除

プラグイン設定ページの外部登録解除アクション( "enrol_database | unenrolaction")設定は、ユーザ登録が外部登録ソースから消えたときに実行する必要があるアクションを定義します。各設定は次のことを行います。

  1. "コースからのユーザの登録解除する" ユーザが外部ソースから削除されると、登録は完全に削除され、すべてのロールが削除されます。これは、一部のユーザデータと設定がコースの登録解除中にコースから削除されることを意味します(通常、成績、活動の試行などが含まれます)。
  2. "ユーザの登録状態を保持する" ユーザが外部ソースから消えても、登録はそのまま維持され、ユーザはコースに参加して活動を実行したり、リソースにアクセスしたりできます。これは 何もしない オプション。
  3. "コース登録を無効にする" ユーザが外部ソースから消えると、ユーザの登録は一時停止され(ユーザはコースにアクセスできなくなりますが、ユーザデータと設定は保持されます)、ロールはそのまま保持されます。場合によっては、UIに表示するためにユーザが何らかの機能を備えた役割を必要とするため、これを使用することがあります。
  4. "コース登録を無効にして、ロールを削除する" ユーザが外部ソースから消えると、登録が一時停止され、登録インスタンスによって割り当てられたロールが削除されます。ユーザが採点簿やその他の領域から 消える 場合があることに注意してください。

コースの作成

オプションで、Moodleサイトに存在しないコースを作成できます。

さらに、 新しいコースカテゴリIDフィールドで、新しいコースを配置するカテゴリを指定できます。このフィールドのデータは、現在存在するカテゴリのIDである必要があります。新しいカテゴリは作成されません。 ID番号は、カテゴリの作成時にデータベース内でMoodleによって割り当てられた番号です(例:mdl_course_categories.id)。

  • この カテゴリID を、手動でカテゴリに割り当てることができる新しいカスタム カテゴリID番号フィールド と混同しないでください。 (トラッカー http://tracker.moodle.org/browse/MDL-28518 および http://tracker.moodle.org/browse/MDL-31845 を参照してください)。
  • カテゴリIDデータを空のままにすると、コースはデフォルトのカテゴリに割り当てられます。
  • Moodleに存在しないカテゴリにデータを割り当てた場合、コースは作成されません。

デフォルトの新しいコースカテゴリは、コースが割り当てられ、作成されるカテゴリです。ただし、新しいコースカテゴリIDフィールド のデータフィールドで設定を行う場合を除きます。

新しいコーステンプレート指定することもできます。新しいコースのコピー元となる テンプレート コースです。このフィールドのデータは、テンプレートコースの shortname である必要があります。

外部データベース登録の同期(スケジュールされたタスクと非推奨のスクリプト)

「外部データベース登録タスクの同期」と呼ばれるスケジュールされたタスクは、すべてのユーザ登録を一度に同期します-ユーザ登録の追加と削除の両方(および指定されている場合はコースの作成)(MDL-59986)。

Moodleに存在しないユーザはコースに登録できないため、外部登録に存在するすべてのユーザがMoodleにすでに作成されていることを確認する必要があることに注意してください。外部認証プラグイン(db、ldapなど)を使用している場合は、これらのプラグインによって提供されるスクリプトを使用して、このスクリプトを実行する前にユーザを同期できます。

スケジュールされたタスクが無効になっている場合にこのタスクを実行できる非推奨のスクリプトも提供されています(スケジュールされたタスクが有効になっている場合、スクリプトは何もしません)。スクリプトはsync.phpと呼ばれ、enrol / database / cliフォルダーにあります。

このスクリプトは、システムのcronjobから呼び出されて、Moodleの登録を外部データベースの登録と同期します。

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サイトに登録されているユーザのみに対して動作します (上記コメントをご覧ください)。

登録同期のセットアップ(方法)

外部データベースの登録を有効にするには、少なくとも次の手順を実行する必要があります。すべてのユーザ/コースの組み合わせのレコードを含むデータベースに必要なテーブルは1つだけです。テーブルが大きい場合は、適切なインデックスが作成されていることを確認することをお勧めします。

  • 既存のデータベースを使用するか、新しいデータベースを作成します。既存のテーブルを使用するか、以下の最小フィールドで新しいテーブルを作成します。
    1. 次のフィールドのいずれかに一致する一意のコース識別子。
      • Moodleのコーステーブル(varchar 100)の「idnumber」フィールド。これは、コースの設定を編集するときに「コースID番号」として手動で指定されます
      • Moodleのコーステーブル(varchar 255)の「shortname」フィールド。これは、コースの設定を編集するときに「コースの短い名前」として手動で指定されます
      • コース作成順序に基づく、Moodleのコーステーブル(int 10)の「id」フィールド
    2. 次のフィールドのいずれかに一致する一意のユーザ識別子。
      • Moodleのユーザテーブル(varchar 255)の「idnumber」フィールド。これは、ユーザのプロファイルを編集するときに「ID番号」として手動で指定されます
      • Moodleのユーザテーブル(varchar 100)の「ユーザ名」フィールド。ユーザのプロファイルを編集するときに「ユーザ名」として手動で指定されます
      • Moodleのユーザテーブル(varchar 100)の「メール」フィールド。これは、ユーザのプロファイルを編集するときに「メールアドレス」として手動で指定されます
      • Moodleのユーザテーブル(int 10)の「id」フィールド。これはユーザの作成順序に基づいています
    3. (オプション)次のフィールドのいずれかに一致する一意のロール識別子。
      • Moodleのロールテーブル(varchar 100)の「shortname」フィールド。たとえば、editingteacher、coursecreator、student、...
      • Moodleの役割テーブル(varchar 255)の「名前」フィールド。たとえば、教師、コース作成者、学生など。
      • Moodleの役割テーブル(int 10)の「id」フィールド。これは、初期インストールと新しい役割の作成順序に基づいています
  • データベーステーブルにデータを入力します。テーブルにレコードを持つ各ユーザ/コースの組み合わせ。
  • Moodleで、 サイト管理>プラグイン>登録>登録プラグイン管理に移動し、リストから外部データベースを見つけて有効にし(閉じた目のアイコンをクリック)、設定をクリックします。
  • 上部のパネルで、データベースタイプを選択し(そのタイプに必要なPHPの設定があることを確認してください)、データベースに接続するための情報を入力します。
  • 中央のパネルは、Moodleと外部データベース間のマッピングを作成します。最初の3つの設定はローカル(Moodle)フィールド名用で、最後の3つはリモート(外部データベース)設定用です。それらは同じ順序です。
    • enrol_localcoursefield / enrol_remotecoursefield-Moodleでは、コース設定のフィールドの名前がコースを一意に識別します(例:idnumber)。外部データベースでは、一致するフィールドの名前。
    • enrol_localuserfield / enrol_remoteuserfield-Moodleでは、ユーザを一意に識別したユーザプロファイルのフィールド名(例:idnumber)。外部データベースでは、一致するフィールドの名前。
    • enrol_db_localrolefield / enrol_db_remoterolefield-(オプション)Moodleでは、ロール編集ページのフィールドの名前がロールを一意に識別します(例:ショートネーム)。外部データベースでは、一致するフィールドの名前。
  • [ロール]パネルでは、外部データベースでロールが指定されていない場合にユーザがコースで取得するロールを指定します。
  • 新しいオプションフィールドenrol_database | remoteotheruserfieldを使用すると、「その他のユーザ」の役割を持つユーザを追加できますが、コース参加者として含めることはできません。
  • 最後のパネルでは、コースの自動作成が可能です。
  • 変更を保存し、ボックスにチェックを入れて、外部データベースの登録を有効にします。

フィールドマッピングの例:

Moodleデータベースからフィールドを選択してください:

  • enrol_localcoursefield:mdl_courseからのコース識別子、例えば "idnumber"
  • enrol_localuserfield:mdl_userからのユーザ識別子、例えば「idnumber」
  • enrol_localrolefield:(オプション)mdl_roleからのロール識別子、たとえば「shortname」

Moodleから選択したフィールド値と一致する外部データベースにビューを作成します:

  • enrol_remotecoursefield:外部データベーステーブルからの一致するコース識別子、たとえば「course_number」
  • enrol_remoteuserfield:外部データベーステーブルの一致するユーザ識別子(例: "userid")
  • enrol_remoterolefield:(オプション)外部データベーステーブルの一致するロール識別子(例: "role_name")

潜在的な問題

  • 言うまでもなく、外部データベースの整合性は重要です。データベースからデータが欠落している場合、ユーザがコースの一部またはすべてから登録解除される可能性があります。登録解除プロセスでは、それらをグループ割り当てから削除し、各モジュールタイプをポーリングして、必要に応じてモジュールにそのユーザのデータを削除するオプションを提供します(ただし、たとえば、フォーラム投稿は削除されません)。したがって、外部データベースのデータが常に正しいことを確認するために細心の注意を払うことが賢明です。
  • マイナーなセキュリティの問題学生を識別するために使用するID番号フィールドが学生によって(学生のプロファイルで)編集可能である場合、これを別の有効な学生のIDに変更する可能性があることを考慮してくださいそして、彼らがすべきでないリソースへのアクセスを取得します。 (ただし、それらはそのまま表示され、他のユーザになりすますことも、リソースにアクセスすることもできません。)この問題や同様の問題を防ぐには、ID番号と他のフィールドをロックして、ユーザが変更できないようにします。でこれを行うデータマッピングのセクションサイトの管理>プラグイン>認証>外部データベース

エラーと診断

プラグインは、PHPエラーログ(php.iniファイルで定義)に記録される多数の診断メッセージやエラーを生成します。さらに、ユーザのデータベースにはあるがMoodleサイトに存在しないコースに関するメッセージは、デバッグがALLまたはDEVELOPERに設定されている場合にのみ生成されます。

-vパラメータを指定して同期スクリプトを実行すると、詳細な進捗情報を取得できます。


php /path/to/moodle/enrol/database/cli/sync.php -v 

こちらもご覧ください