Einschreibung über externe Datenbank: Unterschied zwischen den Versionen

Aus MoodleDocs
Wechseln zu:Navigation, Suche
Keine Bearbeitungszusammenfassung
 
(26 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Einschreibung}}
{{Einschreibung}}
==Eine externe Datenbank nutzen, um Kurseinschreibungen zu steuern==
Sie können eine (nahezu beliebige) externe Datenbank verwenden, um zu steuern, welche Nutzer/innen in welche Kurse eingeschrieben werden. Voraussetzung dafür ist, dass die externe Datenbank Felder hat, die die Kurs-ID, die Nutzer-ID und optional für die Nutzer-Rolle enthalten. Diese Felder werden mit den entsprechenden Feldern der Tabellen <code>mdl_course, mdl_user</code> und <code>mdl_role</code> der Moodle-Datenbank abgeglichen.


{{Zum Übersetzen}}
Moodle unterstützt folgende externe Datenbanken, beachten Sie jedoch, dass Sie PHP mit den entsprechenden Optionen kompilieren oder ODBC verwenden müssen:
Location: External database edit settings link in ''Settings > Site administration > Plugins > Enrolments > Manage enrol plugins''
 
 
You may use a external database (of nearly any kind) to control your enrolments. It is assumed your external database contains a field containing a course ID, a field containing a user ID, and optionally a field containing a role. These are compared against fields that you choose in the local course, user tables, and role tables.
 
The following are the supported data sources, but note that you will need to have to compiled PHP with the appropriate options or through [[ODBC]].
 
*access
*access
*ado
*ado
Zeile 20: Zeile 15:
*informix72
*informix72
*informix
*informix
*mysql
*mysql (veraltet, bitte nutzen Sie stattdessen mysqli)
*mysqli
*mysqlt
*mysqlt
*oci805
*oci805
Zeile 37: Zeile 33:
*vfp
*vfp


== Enrolment & Unenrolment ==
==Einschreibung in einen und Abmeldung aus einem Kurs==
Die Einschreibung bzw. Abmeldung über eine externe Datenbank erfolgt in dem Moment, wo sich eine Person in Moodle anmeldet. Das Plugin sorgt dafür, dass die Person automatisch in allen Kursen eingeschrieben wird - entsprechend der Daten in der externen Datenbank. Optional legt Moodle neue (leere) Kurse an, wenn eine Kurs-ID in der externen Datenbank vorkommt, die es in Moodle noch nicht gibt. Um zu testen, ob das funktioniert, melden Sie sich mit einem Test-Nutzerkonto an und prüfen, ob dieser Test-Nutzer in die richtigen Kurse eingeschrieben wurde.
 
Ebenso wird die Person aus Moodle-Kursen abgemeldet, wenn die Daten in der externen Datenbank entsprechend sind. Die Abmeldung über die externe Datenbank erfolgt jedoch nur, wenn die Person zuvor über die externe Datenbank eingeschrieben wurde.
 
== Verborgene Kurse ==
Kurse, die für Teilnehmer/innen nicht verfügbar sind (siehe [[Kurseinstellungen]]), werden ignoriert, wenn die Checkbox ''Verborgene Kurse ignorieren'' markiert ist (auf der Seite ''Website-Administration'' (oder im Block ''[[Einstellungen-Block|Einstellungen]] > Website-Administration'')'' > Plugins > Einschreibung > Externe Datenbank'').


External database enrolment happens at the moment when a user logs into Moodle. The plugin will attempt to automatically enrol the student in all their courses according to the data in the external database and, optionally, create empty courses where they do not already exist. To check if it is working, you can log in as a student and then check that their list of courses is as you would expect.  
== Einschreibung und Rollen ==
Auf der Seite ''Website-Administration'' (oder im Block ''[[Einstellungen-Block|Einstellungen]] > Website-Administration'')'' > Plugins > Einschreibung > Externe Datenbank'' können Sie mit der Einstellung ''Standardrolle'' festlegen, welche Rolle eine Person bei der Einschreibung in einem Moodle-Kurs erhält. Standardmäßig ist das die Standard-Kursrolle ''Teilnehmer/in''. Sie können jedoch auch in der externen Datenbank ein Feld anlegen (das in der Einstellung ''Rollenfeld (Remote)'' festgelegt ist), das den Rollennamen oder die Rollen-ID der Nutzer-Rolle enthält. Das kann z.B. verwendet werden, um sowohl Trainer/innen als auch Teilnehmer/innen einzuschreiben, in dem man geeignete Daten in der externen Datenbank verwendet.


The process also unenrols users from courses if they are no longer in the database. User records are marked according to their original enrolment method. Therefore the external database plugin can only unenrol users who were enroled by the plugin in the first place.
== Abmeldung ==
Die Einstellung ''Externer Abmeldevorgang'' auf der Einstellungen-Seite des Einschreibung-Plugins Externe Datenbank legt fest, welche Aktion ausgeführt werden soll, wenn eine Einschreibung in der externen Quelle gelöscht wird. Die jeweiligen Optionen sind:
The External unenrol action ("enrol_database | unenrolaction") setting in the plugin settings page defines what action should be taken when a user enrolment disappears from external enrolment source. Each setting does the following:
#''Nutzer/in aus dem Kurs abmelden'': Wenn eine Einschreibung in der externen Quelle gelöscht wird, wird die Einschreibung und alle damit verbundenen Rollenzuweisungen in Moodle gelöscht. Das bedeutet, dass bei dieser Abmeldung aus dem Kurs einige Nutzerdaten und -einstellungen gelöscht werden (z.B. Bewertungen, Abgaben für Aufgaben, etc.)
#''Nutzer/in eingeschrieben lassen'': Wenn eine Einschreibung in der externen Quelle gelöscht wird, bleibt die Einschreibung in Moodle erhalten und die Person kann weiter auf den Kurs und die darin enthaltenen Materialien zugreifen, an Aktivitäten teilnehmen, usw. Das ist die "Nichts tun-Option.
#''Kurseinschreibung deaktivieren'':  Wenn eine Einschreibung in der externen Quelle gelöscht wird, wird die Kurseinschreibung der Person in Moodle deaktiviert (die Person kann nicht mehr auf den Kurs zugreifen, aber die Nutzerdaten und -einstellungen bleiben erhalten), doch ihre Rollenzuweisungen bleiben erhalten. Diese Option können Sie verwenden, wenn eine Person eine Rolle mit bestimmten Rechten benötigt, um in der grafischen Benutzeroberfläche sichtbar zu bleiben - z.B. in der Bewertungsübersicht des Kurses, in Aufgabenaktivitäten usw.
#''Kurseinschreibung deaktivieren und Rollen entfernen'':  Wenn eine Einschreibung in der externen Quelle gelöscht wird, wird die Kurseinschreibung der Person in Moodle deaktiviert und ihre Rollenzuweisungen werden gelöscht. Beachten Sie, dass die Person aus der Bewertungsübersicht des Kurses und anderen Ansichten verschwindet.


== Hidden Courses ==
==Kurse anlegen==
Moodle kann einen Kurs neu anlegen, wenn seine ID in der externen Datenbank vorkommt, er aber noch nicht in Moodle existiert.


Courses that are set to "Course is not available to students" can be ignored for enrolment purposes by setting the "enrol_db_ignorehiddencourse" to '''yes'''.
Zusätzlich können Sie in der Einstellung ''Kursbereich des neuen Kurses'' angeben, in welchem Kursbereich ein solcher Kurs angelegt wird. Hier muss die ID eines vorhandenen Kursbereichs eingetragen werden; es wird kein neuer Kursbereich angelegt. Die Kursbereich-ID wird beim Anlegen eines Kursbereichs von Moodle vergeben, sie steht in der Tabelle <code>mdl_course_categories</code> in der Spalte <code>id</code>.


== Enrolment & Roles ==
* Verwechseln Sie diese Kursbereich-ID nicht mit dem benutzerdefinierten Feld ''Kursbereich-ID-Nummer'', die Sie für einen Kursbereich manuell festlegen können. (Siehe MDL-28518 und MDL-31845.)
* Wenn Sie das Feld für die Kursbereich-ID leer lassen, wird der neue Kurs im standardmäßigen Kursbereich angelegt.
* Wenn Sie Daten für einen Kursbereich zuweisen, den es in Moodle noch nicht gibt, werden die Kurse nicht angelegt.


The "enrol_db_defaultcourseroleid" setting in the plugin settings page specifies the role that the user will take when they are added to the course. The default setting will set them to the course default setting (initially "student"). However, you can specify a field in the external table (specified in the "enrol_db_remoterolefield" setting) that contains the short name for the user's role. This could, for example, be used to enrol both students and teachers into courses using a suitably configured database.  
''Standardmäßiger Kursbereich'' ist der Kursbereich, in dem Kurse angelegt werden, solange Sie im Datensatz des anzulegenden Kurses keinen Kursbereich angeben.  


== Creating Courses ==
Sie können auch eine ''Vorlage für neue Kurse'' angeben: Das ist ein "Vorlage-Kurse", von dem der neue Kurs kopiert wird. Tragen Sie hier den Kurznamen des Vorlage-Kurses ein.


Optionally courses that do not exist in the Moodle site can be created. Switch the "enrol_db_autocreate" option to "yes" in the plugin settings. You can additionally specify the Category into which the new course will be placed and may also specify a "template" course from which the new course will be copied.  
== Synchronisierung der Einschreibungen (Task und veraltetes Skript)==
Ab  Moodle 3.7 gibt es einen Task ''Externe Einschreibeverfahren Synchronisierungs-Task'', der alle Einschreibungen auf einmal synchronisiert, d.h. Einschreibungen hinzufügt und löscht (und Kurse anlegt, wenn sie angegeben sind) (MDL-59986).


== Synchronization Script ==
Sie müssen sicherstellen, dass alle Nutzer/innen, die in den externen Einschreibungen vorkommen, bereits in Moodle angelegt sind, denn Nutzer/innen, die es in Moodle nicht gibt, können nicht in einen Kurs eingeschrieben werden. Wenn Sie externe Authentifizierungen verwenden (über externe Datenbank, LDAP, etc.), können Sie die Skripte zur Nutzersnchronisierung verwenden, die diese Plugins bereitstellen und zuerst die Nutzer synchronisieren, bevor Sie die Einschreibungen synchronisieren.


A script is provided that can synchronize all your user enrollments at once - both adding and removing user enrolments (and creating courses if specified). The script is called enrol_database_sync.php and is found in the enrol/database folder.
Es gibt auch ein veraltetes Skript, das diese Aufgabe übernehmen kann, falls Tasks in Ihrer Moodle-Site deaktiviert sind. Das Skript heißt ''sync.php'' und liegt im Verzeichnis ''enrol/database/cli''.


This script is meant to be called from a system cronjob to sync moodle enrolments with enrolments in the external database. You need to make sure all the users present in the external enrolments are already created in moodle. If you are using external authentication plugins (db, ldap, etc.) you can use the scripts provided by those plugins to synchronize your users before running this script.
Das Skript kann vom Cron-Job aufgerufen werden, um die Moodle-Einschreibungen mit den externen Einschreibungen zu synchronisieren.


Example cron entry for Moodle 2.0
'''Beispiel für einen Eintrag in der Crontab''':
     # 5 minutes past 4am
     # 5 minutes past 4am
     5 4 * * * /usr/bin/php -c /path/to/php.ini /path/to/moodle/enrol/database/cli/sync.php
     5 4 * * * /usr/bin/php -c /path/to/php.ini /path/to/moodle/enrol/database/cli/sync.php


'''Hinweise''':
* Wenn Sie eine große Zahl von Einschreibungen haben, dann erhöhen Sie das Memory-Limit mittels der Option '''-d memory_limit=256M'''
* Für das Debugging und Logging verwenden Sie folgende Optionen: '''-d log_errors=1 -d error_reporting=E_ALL -d display_errors=0 -d html_errors=0'''.
* Die Einschreibung funktioniert nur für Nutzer/innen, die bereits ein Nutzerkonto in Ihrem Moodle haben.


Notes:
== Synchronisierung der Einschreibungen aufsetzen (Anleitung) ==
* If you have a large number of enrolments, you may want to raise the memory limits by passing -d memory_limit=256M
Sie müssen mindestens die folgenden Schritte ausführen, um die Einschreibung über externe Datenbank aufzusetzen. In der externen Datenbank muss eine Tabelle mit den Nutzer-Kurs-Datensätzen vorhanden sein. Wenn die Tabelle groß ist, empfiehlt es sich, geeignete Indizes zu verwenden.
* For debugging & better logging, you are encouraged to use in the command line: -d log_errors=1 -d error_reporting=E_ALL -d display_errors=0 -d html_errors=0
* Verwenden Sie eine bestehende Datenbank oder legen Sie eine neue an. Verwenden Sie eine bestehende Tabelle oder legen Sie eine neue an, die mindestens die unten folgenden Felder enthält.
* This only works for users that already exist in your Moodle site (see comment above)
*# Eindeutiger Kurs-Identifier, der mit einem der folgenden Felder übereinstimmen muss:
 
*#* das '''idnumber''' Feld in der Kurs-Tabelle von Moodle (varchar 100), das in den Kurseinstellungen des Moodle-Kurses ''Kurs-ID'' heißt.
== Setting It Up (How to) ==
*#* das '''shortname''' Feld in der Kurs-Tabelle von Moodle (varchar 255), das in den Kurseinstellungen des Moodle-Kurses ''Kurzer Kursname'' heißt.
 
*#* das '''id''' Feld in der Kurs-Tabelle von Moodle (int 10), das angibt, der wievielte neu angelegte Kurs ein Kurs ist
You will need to perform (as a minimum) the following steps to enable external database enrolment - only a single table is required in the database which contains a record for every user/course combination. If the table is large it is a good idea to make sure appropriate indexes have been created:
*# Eindeutiger Nutzer-Identifier, der mit einem der folgenden Felder übereinstimmen muss:
 
*#* das '''idnumber''' Feld in der Nutzer-Tabelle von Moodle (varchar 255), das im Moodle-Nutzerprofil ''ID-Nummer'' heißt.
* Use an existing database or create a new one. Use an existing or create a new table with the following minimum fields:
*#* das '''username''' Feld in der Nutzer-Tabelle von Moodle (varchar 100), das im Moodle-Nutzerprofil ''Anmeldename'' heißt.
** course identifier (to match unique course identifier in Moodle)
*#* das '''email''' Feld in der Nutzer-Tabelle von Moodle (varchar 100), das im Moodle-Nutzerprofil ''E-Mail-Adresse'' heißt.
** user identifier (to match unique user identifier in Moodle)
*#* das '''id''' Feld in der Nutzer-Tabelle von Moodle (int 10), das angibt, dem wievielte neu angelegten Nutzerkonto ein Nutzer entspricht
** (optional) role identifier (to match unique role identifier in Moodle)
*# (optional) Eindeutiger Rollen-Identifier, der mit einem der folgenden Felder übereinstimmen muss:
* Populate the database table. Each user/course combination to have a record in the table
*#* das '''shortname''' Feld in der Rollen-Tabelle von Moodle (varchar 100), z.B. editingteacher, coursecreator, student, ...
* In Moodle, go to Site Administration => Courses => Enrolments, find External Database in the list and click Settings
*#* das '''name''' Feld in der Rollen-Tabelle von Moodle (varchar 255), z.B. Trainer/in, Teilnehmer/in, Kursersteller/in, ...
* In the top panel, select the database type (make sure you have the necessary configuration in PHP for that type) and then supply the information to connect to the database.
*#* das '''id''' Feld in der Rollen-Tabelle von Moodle (int 10), das angibt, die wievielte neu angelegte Rolle in der Moodle-Site eine Rolle ist
* The middle panel creates the mapping between Moodle and the external database. The first three settings are for the local (Moodle) field names and the last three for the remote (external database) settings. They are in the same order.
* Füllen Sie diese Tabelle mit geeigneten Datensätzen - pro Nutzer-Kurs-Einschreibung ein Datensatz.
** enrol_localcoursefield / enrol_remotecoursefield - in Moodle the name of the field in the course settings the uniquely identifies the course (e.g., idnumber). In the external database the name of the matching field.
* In Moodle gehen Sie als Administrator/in auf die Seite ''Website-Administration'' (oder im Block ''[[Einstellungen-Block|Einstellungen]] > Website-Administration'')'' > Plugins > Einschreibung > Übersicht'' und klicken Sie auf das Auge-Symbol [[Image:show.svg|16px|baseline]] bei ''Externe Datenbank''. Klicken Sie dann auf den Link ''Einstellungen'' der Einschreibemethode.
** enrol_localuserfield / enrol_remoteuserfield - in Moodle the name of the field in the user profile that uniquely identified the user (e.g., idnumber). In the external database the name of the matching field.
* Im Abschnitt ''Externe Datenbankverbindung'' wählen Sie den Datenbanktyp aus (stellen Sie sicher, dass die PHP-Konfiguration für diesen Typ korrekt ist) und tragen die Daten für die Verbindung zur externen Datenbank ein.
** enrol_db_localrolefield / enrol_db_remoterolefield - (optional) in Moodle the name of the field in the role edit page the uniquely identifies the role (e.g., shortname). In the external database the name of the matching field.
* Im Abschnitt ''Lokale Feldzuordnung'' legen Sie die Datenzuordnung zwischen Moodle und der externen Datenbank fest. Tragen Sie ein, welche Felder der lokalen Moodle-Datenbank in der externen Datenbank verwendet werden, um die Datensätze eindeutig zu identifizieren:
* The Roles panel specifies the role that the user will get in the course if their role is not specified in the external database.
**''Lokaler Kurs'': Der Kurs kann in der externen Datenbank über die lokalen Felder ''id'' (ID des Moodle-Kurses), ''idnumber'' (Kurs-ID des Moodle-Kurses) oder ''shortname'' (Kurzbezeichnung des Moodle-Kurses) referenziert werden.
* The final panel enables auto creation of courses.
**''Lokaler Nutzer'': Der Nutzer kann in der externen Datenbank über die lokalen Felder ''id'' (ID des Moodle-Nutzers), ''idnumber'' (ID-Nummer des Moodle-Nutzers), ''email'' (E-Mail des Moodle-Nutzers) oder ''username'' (Anmeldename des Moodle-Nutzers) referenziert werden.
* Save changes, and then tick the box to enable external database enrolment.
**''Lokale Rolle'': Die Rolle kann in der externen Datenbank über die lokalen Felder ''id'' (ID der Moodle-Rolle), ''shortname'' (Kurzbezeichnung der Moodle-Rolle) oder ''fullname'' (Name der Moodle-Rolle) referenziert werden.
 
* Im Abschnitt ''Einschreibesynchronisation (Remote)'' tragen Sie die entsprechenden Daten der externen Datenbank ein:
== Database enrolment does not appear in the course enrolment drop down menu. Why? ==
**''Externe Nutzertabelle'' - tragen Sie hier den Namen der Tabelle in der externen Datenbank ein.
 
**''Kursfeld (Remote)'' - tragen Sie hier den Namen des Datenfeldes ein, das in der externen Tabelle den Kurs referenziert.
The course enrolment drop down menu only lists [[Enrolment_plugins#Interactive_enrolment|'''interactive''' enrolment plugins]]. External database enrolment is not such a plugin, so it doesn't appear in the list. Similarly, the "Course Enrollable" setting (in the Course Settings) page also only applies to interactive enrolment plugins and has no effect on external database enrollment.  
**''Nutzerfeld (Remote)'' - tragen Sie hier den Namen des Datenfeldes ein, das in der externen Tabelle den Nutzer referenziert.
 
**''Rollenfeld (Remote)'' - tragen Sie hier den Namen des Datenfeldes ein, das in der externen Tabelle die Rolle *''Standardrolle'' - wählen Sie hier die Rolle, die nutzer/innen bei der Einschreibung in den lokalen Moodle-Kurs erhalten sollen.
As of this writing, the only interactive enrolment plugins are ''manual'' (also know as ''internal''), ''paypal'' and ''authorize.net''.
**''Entferntes Feld für 'andere Nutzer''' - tragen Sie hier den Namen des Datenfeldes ein, das in der externen Tabelle die Einschreibung anderer Nutzer/innen referenziert.
 
**''Rolle im Kurs'' - wählen Sie hier die Standardrolle für den neuen Kurs.
== Field Mapping Example: ==
**''Verborgene Kurse ignorieren'' - wenn Sie diese Checkbox markieren, dann werden Nutzer/innen nur in Kurs eingeschreiben bzw. aus Kursen abgemeldet, die in Moodle für Teilnehmer/innen verfügbar sind.
Choose your fields from the Moodle database:
**''Externer Abmeldevorgang'' - wählen Sie hier, was mit einer Einschreibung in Moodle passieren soll, wenn der zugehörige Datensatz in der externen datenbank gelöscht wird.
 
* Im Abschnitt ''Erstellen eines neuen Kurses'' legen Sie fest, wie neue Kurse verarbeitet werden:
*enrol_localcoursefield:  A course identifier from mdl_course, e.g. "idnumber"
**''Externe neue Kurstabelle'' - tragen Sie hier den Namen der Tabelle in der externen Datenbank ein, die die neu anzulegenden Kurse enthält.
*enrol_localuserfield: A user identifier from mdl_user, e.g. "idnumber"
**''Vollständiger Name des neuen Kurses'' - tragen Sie hier ein, wie das Datenfeld in der externen Tabelle für neue Kurse heißt, das die Information über den vollständigen Kursnamen enthält.
*enrol_localrolefield: (optional) A role identifier from mdl_role, e.g. "shortname"
**''Kurzer Kursname des neuen Kurses'' - tragen Sie hier ein, wie das Datenfeld in der externen Tabelle für neue Kurse heißt, das die Information über den Kurznamen des Kurses enthält.
 
**''ID-Nummer des neuen Kurses'' - tragen Sie hier ein, wie das Datenfeld in der externen Tabelle für neue Kurse heißt, das die Information über ID-Nummer des neuen Kurses enthält.  
Create a view in your external database which matches the chosen field values from Moodle:
**''Kursbereich des neuen Kurses'' - tragen Sie hier ein, wie das Datenfeld in der externen Tabelle für neue Kurse heißt, das die Information über die Kursbereichs-ID des neuen Kurses enthält.
**''Standardmäßiger Kursbereich'' - alternativ können Sie hier einen Kursbereich wählen, in dem alle Kurse neu angelegt werden.
**''Vorlage für neue Kurse'' - hier können Sie optional einen Kurs angeben, der als Vorlage für den neuen Kurs verwendet wird.
*Wenn Sie alle Einstellungen getroffen haben, klicken Sie abschließend auf den Button ''Änderungen sichern''.


*enrol_remotecoursefield: A matching course identifier from your external database table, e.g. "course_number"
==Beispiel für die lokale Feldzuordnung==
*enrol_remoteuserfield: A matching user identifier from your external database table, e.g. "userid"
Wählen Sie Ihre Felder aus der Moodle-Datenbank:
*enrol_remoterolefield: (optional) A matching role identifier from your external database table, e.g. "role_name"
*''Lokaler Kurs'':  ein Feld aus der Tabelle mdl_course zum Identifizieren des Kurses, z.B. ''idnumber''
*''Lokaler Nutzer'': ein Feld aus der Tabelle mdl_user zum Identifizieren des Nutzers, z.B. ''idnumber''
*''Lokale Rolle'': ein Feld aus der Tabelle mdl_role zum Identifizieren der Rolle, z.B. ''shortname''
Erstellen Sie eine Ansicht in Ihrer externen Datenbank, die zu den gewählten Feldern aus Moodle passt:
*''Kursfeld (Remote)'': ein zugeordnetes Feld in Ihrer externen Datenbanktabelle zum Identifizieren des Kurses, z.B. ''course_number''
*''Nutzerfeld (Remote)'': ein zugeordnetes Feld in Ihrer externen Datenbanktabelle zum Identifizieren des Nutzers, z.B. ''userid''
*''Rollenfeld (Remote)'': ein zugeordnetes Feld in Ihrer externen Datenbanktabelle zum Identifizieren der Rolle, z.B. ''role_name''


== Potential Gotchas ==
==Mögliche Probleme==
*Es ist klar, dass die Integrität der externen Datenbank von größter Wichtigkeit ist. Wenn in der externen Datenbank Fehler in den Datensätzen auftreten, dann kann es passieren, das Nutzer/innen aus einigen oder allen Kursen abgemeldet werden. Der Abmeldeprozess löscht alle Gruppenmitgliedschaften und fragt alle Aktivitätentypen ab, so dass die einzelnen Aktivitäten die Nutzerdaten bei Bedarf löschen können (wobei z.B. Forumsbeiträge nie gelöscht werden). Es ist daher klug, größte Sorgfalt darauf zu legen, dass die Daten in der externen Datenbank zu jedem Zeitpunkt korrekt sind.
*'''Kleines Sicherheitsrisiko''': Wenn Nutzer/innen das ID-Nummer-Feld in ihrem Moodle-Nutzerprofil bearbeiten können, dann besteht die Gefahr, dass sie hier eine gültige ID einer anderen Person eintragen und damit Zugriff auf Daten erhalten, auf die sie keinen Zugriff haben sollten. (Dennoch behalten sie ihre Identität in Moodle, sie können nicht die Identität der anderen Person übernehmen und anderweitigen Zugriff auf die Daten dieser person erhalten.) Um dies zu vermeiden, können Sie die ID-Nummer und andere Profilfelder sperren, so dass Nutzer/innen diese Felder nicht ändern können. Sperren Sie die Felder auf der Einstellungen-Seite des Einschreibungs-Plugins ''Externe Datenbank'' im Abschnitt ''Datenzuordnung''.


* It almost goes without saying that the integrity of the external database is important. If data is missing from the database then there is a potential for users being unenrolled from some or all of their courses. The unenrollment process will remove them from any group assignments and also poll each module type to give the module the option of removing that user's data if appropriate (for example, however, forum posts are never deleted). It is therefore prudent that you take the utmost care to ensure that the data in the external bass is correct at all times.
==Fehler und Statusmeldungen==
* '''Minor Security Issue''' Consider that if the ID field you use to identify your students is editable by the students (in their profile), then there is a potential for them changing this to the id of another valid student and gaining access to resources that they should not. However, they will still appear as themselves, they cannot impersonate the other user or otherwise gain access to their resources.
Das Einschreibungs-Plugin eine Reihe von Status- und/oder Fehlermeldungen, die in der Log-Datei für PHP-Fehlermeldungen gespeichert werden (diese Log-Datei wird in der PHP-Konfigurationsdatei ''php.ini'' definiert). Meldungen zu einem Kurs, den es für eine Person in der externen Datenbank, aber nicht in Moodle gibt, werden nur dann generiert, wenn das [[Debugging]] auf ''ALLE: Alle PHP-Mitteilungen anzeigen'' oder ''DEVELOPER: PHP-Mitteilungen für Entwickler anzeigen'' gesetzt ist.


==Errors and Diagnostics==
Sie können detaillierte Informationen erhalten, wenn Sie das Skript mit dem Parameter -v ausführen:


The plugin produces a number of diagnostic messages and/or errors which are recorded to the PHP error log (as defined in the php.ini file). In addition messages about courses that are in the database for the user but that do not exist in the Moodle site will only be produced if debugging is set to ALL or DEVELOPER.
<code>
php /path/to/moodle/enrol/database/cli/sync.php -v
</code>


==Siehe auch==
==Siehe auch==
Diskussionsbeiträge im Kurs ''Using Moodle'' auf moodle.org:
* [http://moodle.org/mod/forum/discuss.php?d=49475 MySQL enrolment plugin doesn't seem to work]
* [http://moodle.org/mod/forum/discuss.php?d=74133 Someone explain external database enrolment, please??]  
* [http://moodle.org/mod/forum/discuss.php?d=74133 Someone explain external database enrolment, please??]  
* [https://docs.moodle.org/en/Talk:External_database_enrolment#Example_External_Enrollment] Beispielkonfiguration
* [https://docs.moodle.org/en/Talk:External_database_enrolment#Example_External_Enrollment] Beispielkonfiguration
* [[Externe Datenbank]]
[[en:External database enrolment]]
[[en:External database enrolment]]
[[es:Inscripción por BasedeDatos externa]]
[[fr:Inscription par base de données externe]]
[[ja:外部データベース登録]]

Aktuelle Version vom 6. Januar 2021, 19:46 Uhr

Eine externe Datenbank nutzen, um Kurseinschreibungen zu steuern

Sie können eine (nahezu beliebige) externe Datenbank verwenden, um zu steuern, welche Nutzer/innen in welche Kurse eingeschrieben werden. Voraussetzung dafür ist, dass die externe Datenbank Felder hat, die die Kurs-ID, die Nutzer-ID und optional für die Nutzer-Rolle enthalten. Diese Felder werden mit den entsprechenden Feldern der Tabellen mdl_course, mdl_user und mdl_role der Moodle-Datenbank abgeglichen.

Moodle unterstützt folgende externe Datenbanken, beachten Sie jedoch, dass Sie PHP mit den entsprechenden Optionen kompilieren oder ODBC verwenden müssen:

  • access
  • ado
  • mssql
  • borland_ibase
  • csv
  • db2
  • fbsql
  • firebird
  • ibase
  • informix72
  • informix
  • mysql (veraltet, bitte nutzen Sie stattdessen mysqli)
  • mysqli
  • mysqlt
  • oci805
  • oci8
  • oci8po
  • odbc
  • odbc_mssql
  • odbc_oracle
  • oracle
  • postgres64
  • postgres7
  • postgres
  • proxy
  • sqlanywhere
  • sybase
  • vfp

Einschreibung in einen und Abmeldung aus einem Kurs

Die Einschreibung bzw. Abmeldung über eine externe Datenbank erfolgt in dem Moment, wo sich eine Person in Moodle anmeldet. Das Plugin sorgt dafür, dass die Person automatisch in allen Kursen eingeschrieben wird - entsprechend der Daten in der externen Datenbank. Optional legt Moodle neue (leere) Kurse an, wenn eine Kurs-ID in der externen Datenbank vorkommt, die es in Moodle noch nicht gibt. Um zu testen, ob das funktioniert, melden Sie sich mit einem Test-Nutzerkonto an und prüfen, ob dieser Test-Nutzer in die richtigen Kurse eingeschrieben wurde.

Ebenso wird die Person aus Moodle-Kursen abgemeldet, wenn die Daten in der externen Datenbank entsprechend sind. Die Abmeldung über die externe Datenbank erfolgt jedoch nur, wenn die Person zuvor über die externe Datenbank eingeschrieben wurde.

Verborgene Kurse

Kurse, die für Teilnehmer/innen nicht verfügbar sind (siehe Kurseinstellungen), werden ignoriert, wenn die Checkbox Verborgene Kurse ignorieren markiert ist (auf der Seite Website-Administration (oder im Block Einstellungen > Website-Administration) > Plugins > Einschreibung > Externe Datenbank).

Einschreibung und Rollen

Auf der Seite Website-Administration (oder im Block Einstellungen > Website-Administration) > Plugins > Einschreibung > Externe Datenbank können Sie mit der Einstellung Standardrolle festlegen, welche Rolle eine Person bei der Einschreibung in einem Moodle-Kurs erhält. Standardmäßig ist das die Standard-Kursrolle Teilnehmer/in. Sie können jedoch auch in der externen Datenbank ein Feld anlegen (das in der Einstellung Rollenfeld (Remote) festgelegt ist), das den Rollennamen oder die Rollen-ID der Nutzer-Rolle enthält. Das kann z.B. verwendet werden, um sowohl Trainer/innen als auch Teilnehmer/innen einzuschreiben, in dem man geeignete Daten in der externen Datenbank verwendet.

Abmeldung

Die Einstellung Externer Abmeldevorgang auf der Einstellungen-Seite des Einschreibung-Plugins Externe Datenbank legt fest, welche Aktion ausgeführt werden soll, wenn eine Einschreibung in der externen Quelle gelöscht wird. Die jeweiligen Optionen sind: The External unenrol action ("enrol_database | unenrolaction") setting in the plugin settings page defines what action should be taken when a user enrolment disappears from external enrolment source. Each setting does the following:

  1. Nutzer/in aus dem Kurs abmelden: Wenn eine Einschreibung in der externen Quelle gelöscht wird, wird die Einschreibung und alle damit verbundenen Rollenzuweisungen in Moodle gelöscht. Das bedeutet, dass bei dieser Abmeldung aus dem Kurs einige Nutzerdaten und -einstellungen gelöscht werden (z.B. Bewertungen, Abgaben für Aufgaben, etc.)
  2. Nutzer/in eingeschrieben lassen: Wenn eine Einschreibung in der externen Quelle gelöscht wird, bleibt die Einschreibung in Moodle erhalten und die Person kann weiter auf den Kurs und die darin enthaltenen Materialien zugreifen, an Aktivitäten teilnehmen, usw. Das ist die "Nichts tun-Option.
  3. Kurseinschreibung deaktivieren: Wenn eine Einschreibung in der externen Quelle gelöscht wird, wird die Kurseinschreibung der Person in Moodle deaktiviert (die Person kann nicht mehr auf den Kurs zugreifen, aber die Nutzerdaten und -einstellungen bleiben erhalten), doch ihre Rollenzuweisungen bleiben erhalten. Diese Option können Sie verwenden, wenn eine Person eine Rolle mit bestimmten Rechten benötigt, um in der grafischen Benutzeroberfläche sichtbar zu bleiben - z.B. in der Bewertungsübersicht des Kurses, in Aufgabenaktivitäten usw.
  4. Kurseinschreibung deaktivieren und Rollen entfernen: Wenn eine Einschreibung in der externen Quelle gelöscht wird, wird die Kurseinschreibung der Person in Moodle deaktiviert und ihre Rollenzuweisungen werden gelöscht. Beachten Sie, dass die Person aus der Bewertungsübersicht des Kurses und anderen Ansichten verschwindet.

Kurse anlegen

Moodle kann einen Kurs neu anlegen, wenn seine ID in der externen Datenbank vorkommt, er aber noch nicht in Moodle existiert.

Zusätzlich können Sie in der Einstellung Kursbereich des neuen Kurses angeben, in welchem Kursbereich ein solcher Kurs angelegt wird. Hier muss die ID eines vorhandenen Kursbereichs eingetragen werden; es wird kein neuer Kursbereich angelegt. Die Kursbereich-ID wird beim Anlegen eines Kursbereichs von Moodle vergeben, sie steht in der Tabelle mdl_course_categories in der Spalte id.

  • Verwechseln Sie diese Kursbereich-ID nicht mit dem benutzerdefinierten Feld Kursbereich-ID-Nummer, die Sie für einen Kursbereich manuell festlegen können. (Siehe MDL-28518 und MDL-31845.)
  • Wenn Sie das Feld für die Kursbereich-ID leer lassen, wird der neue Kurs im standardmäßigen Kursbereich angelegt.
  • Wenn Sie Daten für einen Kursbereich zuweisen, den es in Moodle noch nicht gibt, werden die Kurse nicht angelegt.

Standardmäßiger Kursbereich ist der Kursbereich, in dem Kurse angelegt werden, solange Sie im Datensatz des anzulegenden Kurses keinen Kursbereich angeben.

Sie können auch eine Vorlage für neue Kurse angeben: Das ist ein "Vorlage-Kurse", von dem der neue Kurs kopiert wird. Tragen Sie hier den Kurznamen des Vorlage-Kurses ein.

Synchronisierung der Einschreibungen (Task und veraltetes Skript)

Ab Moodle 3.7 gibt es einen Task Externe Einschreibeverfahren Synchronisierungs-Task, der alle Einschreibungen auf einmal synchronisiert, d.h. Einschreibungen hinzufügt und löscht (und Kurse anlegt, wenn sie angegeben sind) (MDL-59986).

Sie müssen sicherstellen, dass alle Nutzer/innen, die in den externen Einschreibungen vorkommen, bereits in Moodle angelegt sind, denn Nutzer/innen, die es in Moodle nicht gibt, können nicht in einen Kurs eingeschrieben werden. Wenn Sie externe Authentifizierungen verwenden (über externe Datenbank, LDAP, etc.), können Sie die Skripte zur Nutzersnchronisierung verwenden, die diese Plugins bereitstellen und zuerst die Nutzer synchronisieren, bevor Sie die Einschreibungen synchronisieren.

Es gibt auch ein veraltetes Skript, das diese Aufgabe übernehmen kann, falls Tasks in Ihrer Moodle-Site deaktiviert sind. Das Skript heißt sync.php und liegt im Verzeichnis enrol/database/cli.

Das Skript kann vom Cron-Job aufgerufen werden, um die Moodle-Einschreibungen mit den externen Einschreibungen zu synchronisieren.

Beispiel für einen Eintrag in der Crontab:

   # 5 minutes past 4am
   5 4 * * * /usr/bin/php -c /path/to/php.ini /path/to/moodle/enrol/database/cli/sync.php

Hinweise:

  • Wenn Sie eine große Zahl von Einschreibungen haben, dann erhöhen Sie das Memory-Limit mittels der Option -d memory_limit=256M
  • Für das Debugging und Logging verwenden Sie folgende Optionen: -d log_errors=1 -d error_reporting=E_ALL -d display_errors=0 -d html_errors=0.
  • Die Einschreibung funktioniert nur für Nutzer/innen, die bereits ein Nutzerkonto in Ihrem Moodle haben.

Synchronisierung der Einschreibungen aufsetzen (Anleitung)

Sie müssen mindestens die folgenden Schritte ausführen, um die Einschreibung über externe Datenbank aufzusetzen. In der externen Datenbank muss eine Tabelle mit den Nutzer-Kurs-Datensätzen vorhanden sein. Wenn die Tabelle groß ist, empfiehlt es sich, geeignete Indizes zu verwenden.

  • Verwenden Sie eine bestehende Datenbank oder legen Sie eine neue an. Verwenden Sie eine bestehende Tabelle oder legen Sie eine neue an, die mindestens die unten folgenden Felder enthält.
    1. Eindeutiger Kurs-Identifier, der mit einem der folgenden Felder übereinstimmen muss:
      • das idnumber Feld in der Kurs-Tabelle von Moodle (varchar 100), das in den Kurseinstellungen des Moodle-Kurses Kurs-ID heißt.
      • das shortname Feld in der Kurs-Tabelle von Moodle (varchar 255), das in den Kurseinstellungen des Moodle-Kurses Kurzer Kursname heißt.
      • das id Feld in der Kurs-Tabelle von Moodle (int 10), das angibt, der wievielte neu angelegte Kurs ein Kurs ist
    2. Eindeutiger Nutzer-Identifier, der mit einem der folgenden Felder übereinstimmen muss:
      • das idnumber Feld in der Nutzer-Tabelle von Moodle (varchar 255), das im Moodle-Nutzerprofil ID-Nummer heißt.
      • das username Feld in der Nutzer-Tabelle von Moodle (varchar 100), das im Moodle-Nutzerprofil Anmeldename heißt.
      • das email Feld in der Nutzer-Tabelle von Moodle (varchar 100), das im Moodle-Nutzerprofil E-Mail-Adresse heißt.
      • das id Feld in der Nutzer-Tabelle von Moodle (int 10), das angibt, dem wievielte neu angelegten Nutzerkonto ein Nutzer entspricht
    3. (optional) Eindeutiger Rollen-Identifier, der mit einem der folgenden Felder übereinstimmen muss:
      • das shortname Feld in der Rollen-Tabelle von Moodle (varchar 100), z.B. editingteacher, coursecreator, student, ...
      • das name Feld in der Rollen-Tabelle von Moodle (varchar 255), z.B. Trainer/in, Teilnehmer/in, Kursersteller/in, ...
      • das id Feld in der Rollen-Tabelle von Moodle (int 10), das angibt, die wievielte neu angelegte Rolle in der Moodle-Site eine Rolle ist
  • Füllen Sie diese Tabelle mit geeigneten Datensätzen - pro Nutzer-Kurs-Einschreibung ein Datensatz.
  • In Moodle gehen Sie als Administrator/in auf die Seite Website-Administration (oder im Block Einstellungen > Website-Administration) > Plugins > Einschreibung > Übersicht und klicken Sie auf das Auge-Symbol show.svg bei Externe Datenbank. Klicken Sie dann auf den Link Einstellungen der Einschreibemethode.
  • Im Abschnitt Externe Datenbankverbindung wählen Sie den Datenbanktyp aus (stellen Sie sicher, dass die PHP-Konfiguration für diesen Typ korrekt ist) und tragen die Daten für die Verbindung zur externen Datenbank ein.
  • Im Abschnitt Lokale Feldzuordnung legen Sie die Datenzuordnung zwischen Moodle und der externen Datenbank fest. Tragen Sie ein, welche Felder der lokalen Moodle-Datenbank in der externen Datenbank verwendet werden, um die Datensätze eindeutig zu identifizieren:
    • Lokaler Kurs: Der Kurs kann in der externen Datenbank über die lokalen Felder id (ID des Moodle-Kurses), idnumber (Kurs-ID des Moodle-Kurses) oder shortname (Kurzbezeichnung des Moodle-Kurses) referenziert werden.
    • Lokaler Nutzer: Der Nutzer kann in der externen Datenbank über die lokalen Felder id (ID des Moodle-Nutzers), idnumber (ID-Nummer des Moodle-Nutzers), email (E-Mail des Moodle-Nutzers) oder username (Anmeldename des Moodle-Nutzers) referenziert werden.
    • Lokale Rolle: Die Rolle kann in der externen Datenbank über die lokalen Felder id (ID der Moodle-Rolle), shortname (Kurzbezeichnung der Moodle-Rolle) oder fullname (Name der Moodle-Rolle) referenziert werden.
  • Im Abschnitt Einschreibesynchronisation (Remote) tragen Sie die entsprechenden Daten der externen Datenbank ein:
    • Externe Nutzertabelle - tragen Sie hier den Namen der Tabelle in der externen Datenbank ein.
    • Kursfeld (Remote) - tragen Sie hier den Namen des Datenfeldes ein, das in der externen Tabelle den Kurs referenziert.
    • Nutzerfeld (Remote) - tragen Sie hier den Namen des Datenfeldes ein, das in der externen Tabelle den Nutzer referenziert.
    • Rollenfeld (Remote) - tragen Sie hier den Namen des Datenfeldes ein, das in der externen Tabelle die Rolle *Standardrolle - wählen Sie hier die Rolle, die nutzer/innen bei der Einschreibung in den lokalen Moodle-Kurs erhalten sollen.
    • Entferntes Feld für 'andere Nutzer' - tragen Sie hier den Namen des Datenfeldes ein, das in der externen Tabelle die Einschreibung anderer Nutzer/innen referenziert.
    • Rolle im Kurs - wählen Sie hier die Standardrolle für den neuen Kurs.
    • Verborgene Kurse ignorieren - wenn Sie diese Checkbox markieren, dann werden Nutzer/innen nur in Kurs eingeschreiben bzw. aus Kursen abgemeldet, die in Moodle für Teilnehmer/innen verfügbar sind.
    • Externer Abmeldevorgang - wählen Sie hier, was mit einer Einschreibung in Moodle passieren soll, wenn der zugehörige Datensatz in der externen datenbank gelöscht wird.
  • Im Abschnitt Erstellen eines neuen Kurses legen Sie fest, wie neue Kurse verarbeitet werden:
    • Externe neue Kurstabelle - tragen Sie hier den Namen der Tabelle in der externen Datenbank ein, die die neu anzulegenden Kurse enthält.
    • Vollständiger Name des neuen Kurses - tragen Sie hier ein, wie das Datenfeld in der externen Tabelle für neue Kurse heißt, das die Information über den vollständigen Kursnamen enthält.
    • Kurzer Kursname des neuen Kurses - tragen Sie hier ein, wie das Datenfeld in der externen Tabelle für neue Kurse heißt, das die Information über den Kurznamen des Kurses enthält.
    • ID-Nummer des neuen Kurses - tragen Sie hier ein, wie das Datenfeld in der externen Tabelle für neue Kurse heißt, das die Information über ID-Nummer des neuen Kurses enthält.
    • Kursbereich des neuen Kurses - tragen Sie hier ein, wie das Datenfeld in der externen Tabelle für neue Kurse heißt, das die Information über die Kursbereichs-ID des neuen Kurses enthält.
    • Standardmäßiger Kursbereich - alternativ können Sie hier einen Kursbereich wählen, in dem alle Kurse neu angelegt werden.
    • Vorlage für neue Kurse - hier können Sie optional einen Kurs angeben, der als Vorlage für den neuen Kurs verwendet wird.
  • Wenn Sie alle Einstellungen getroffen haben, klicken Sie abschließend auf den Button Änderungen sichern.

Beispiel für die lokale Feldzuordnung

Wählen Sie Ihre Felder aus der Moodle-Datenbank:

  • Lokaler Kurs: ein Feld aus der Tabelle mdl_course zum Identifizieren des Kurses, z.B. idnumber
  • Lokaler Nutzer: ein Feld aus der Tabelle mdl_user zum Identifizieren des Nutzers, z.B. idnumber
  • Lokale Rolle: ein Feld aus der Tabelle mdl_role zum Identifizieren der Rolle, z.B. shortname

Erstellen Sie eine Ansicht in Ihrer externen Datenbank, die zu den gewählten Feldern aus Moodle passt:

  • Kursfeld (Remote): ein zugeordnetes Feld in Ihrer externen Datenbanktabelle zum Identifizieren des Kurses, z.B. course_number
  • Nutzerfeld (Remote): ein zugeordnetes Feld in Ihrer externen Datenbanktabelle zum Identifizieren des Nutzers, z.B. userid
  • Rollenfeld (Remote): ein zugeordnetes Feld in Ihrer externen Datenbanktabelle zum Identifizieren der Rolle, z.B. role_name

Mögliche Probleme

  • Es ist klar, dass die Integrität der externen Datenbank von größter Wichtigkeit ist. Wenn in der externen Datenbank Fehler in den Datensätzen auftreten, dann kann es passieren, das Nutzer/innen aus einigen oder allen Kursen abgemeldet werden. Der Abmeldeprozess löscht alle Gruppenmitgliedschaften und fragt alle Aktivitätentypen ab, so dass die einzelnen Aktivitäten die Nutzerdaten bei Bedarf löschen können (wobei z.B. Forumsbeiträge nie gelöscht werden). Es ist daher klug, größte Sorgfalt darauf zu legen, dass die Daten in der externen Datenbank zu jedem Zeitpunkt korrekt sind.
  • Kleines Sicherheitsrisiko: Wenn Nutzer/innen das ID-Nummer-Feld in ihrem Moodle-Nutzerprofil bearbeiten können, dann besteht die Gefahr, dass sie hier eine gültige ID einer anderen Person eintragen und damit Zugriff auf Daten erhalten, auf die sie keinen Zugriff haben sollten. (Dennoch behalten sie ihre Identität in Moodle, sie können nicht die Identität der anderen Person übernehmen und anderweitigen Zugriff auf die Daten dieser person erhalten.) Um dies zu vermeiden, können Sie die ID-Nummer und andere Profilfelder sperren, so dass Nutzer/innen diese Felder nicht ändern können. Sperren Sie die Felder auf der Einstellungen-Seite des Einschreibungs-Plugins Externe Datenbank im Abschnitt Datenzuordnung.

Fehler und Statusmeldungen

Das Einschreibungs-Plugin eine Reihe von Status- und/oder Fehlermeldungen, die in der Log-Datei für PHP-Fehlermeldungen gespeichert werden (diese Log-Datei wird in der PHP-Konfigurationsdatei php.ini definiert). Meldungen zu einem Kurs, den es für eine Person in der externen Datenbank, aber nicht in Moodle gibt, werden nur dann generiert, wenn das Debugging auf ALLE: Alle PHP-Mitteilungen anzeigen oder DEVELOPER: PHP-Mitteilungen für Entwickler anzeigen gesetzt ist.

Sie können detaillierte Informationen erhalten, wenn Sie das Skript mit dem Parameter -v ausführen:

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

Siehe auch