外部データベース登録

提供: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」を yes 設定することで、登録の目的で無視できます。

登録と役割

プラグイン設定ページの「enrol_database | defaultrole」設定は、ユーザがコースに追加されたときにユーザがとる役割を指定します。デフォルト設定では、それらをコースのデフォルト設定(最初は「学生」)に設定します。ただし、ユーザのロールの短い名前またはIDを含むフィールド(「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 

こちらもご覧ください