{{tag> moodle "automatische Einschreibung" ldap}} Dieses Modul wird für linuxmuster.net 7.0 von mir nicht mehr weiter entwickelt. ====== Moodle ab 2.x und automatische Einschreibung mit der Linuxmusterlösung ====== Dieser Artikel bezieht sich auf Moodle 2.x. Den Artikel für Moodle 1.9.x finden sie unter [[moodle_automatische_einschreibung]]. ===== Mängel ===== Moodle ist in die LinuxML bisher noch nicht gut integriert. Es gibt aus meiner Sicht einige Schwächen der Konfiguration, die ich zu beheben versucht habe. * Benutzer müssen in Moodle angelegt und verwaltet werden, obwohl diese in der LinuxML bereits existieren. * Ein Lehrerzimmer (ein Kurs nur für Lehrer) muss manuell angelegt und jeder Lehrer dort manuell eingetragen werden, obwohl bereits alle notwendigen Informationen (jeder Lehrer ist Mitglied der Gruppe teachers) in der LinuxML vorhanden ist. * Schüler müssen in Kurse / Klassen manuell eingetragen werden, obwohl im LDAP-Baum der LinuxML die Grupenzugehörigkeit vorhanden ist. * Für jeden Lehrer muss ein Kursbereich, in welchem er selbst Kurse anlegen und löschen kann, manuell angelegt werden, obwohl auch hierzu die Voraussetzungen und Informationen bereits vorhanden sind. ==== Ausweg ==== Ich habe versucht, die oben angesprochenen Punkte so weit wie möglich auszuräumen. Dabei ist ein Anmeldemodul für Moodle herausgekommen, das in meiner Schule nach ersten Tests zufriedenstellend funktioniert. Bei der komplexen Struktur der Materie kann es natürlich sein, dass jemand anders ganz andere Erfahrungen macht. Inzwischen verwende ich __Moodle2.3.2__ und das angepasste Modul heißt **enrol_openlml**. Dieses Modul basiert auf der Authentifizierung der moodle-Nutzer mittels LDAP. Bei der üblichen Verwendung von LDAP meldet sich ein LinuxML-Nutzer bei moodle an und ergänzt im Profil die E-Mail-Adresse. Nach deren Überprüfung ist der LinuxML-Nutzer in moodle aufgenommen und schreibt sich in die vorgesehenen Kurse ein. Das Modul enrol-openlml führt die Aufnahme **aller** LinuxML-Nutzer in moodle durch und kann diese gleich in Kurse einschreiben. Wird bei der Aufnahme die E-Mail-Adresse aus dem LDAP-Baum verwendet, kann der Nutzer sofort auf die moodle-Inhalte zugreifen. ==== Bevor man loslegt ==== Falls schon Benutzer in moodle eingeschrieben sind, ist eine Sicherung der Benutzerdaten sinnvoll. Dies kann über die //Bulk Suche// gemacht werden. Dort kann eine CSV-Datei mit allen Nutzern heruntergeladen werden. Wenn mit der Einrichtung von enrol-openlml etwas schief geht, z.B. die bestehenden Nutzer ungewollt geändert wurden, löscht man alle moodle-Nutzer (natürlich ohne Standardnutzer) und spielt die CSV-Datei über den //Listenupload// wieder auf. ====== OpenLML-Einschreibung ====== Ich arbeite momentan an der Weiterentwicklung des Einschreibe-Moduls. Ich habe es unter dem Namen **enrol_openlml** als Plugin bei [[http://www.moodle.org]] in einer Beta-Version veröffentlicht. Die Version ist dort als [[http://moodle.org/plugins/pluginversions.php?plugin=enrol_openlml]] herunterladbar((ich bin für Tests und Rückmeldungen dankbar)). Die Installation ist denkbar einfach: Die ZIP-Datei im Moodle-Hauptordner (/usr/share/moodle) entpacken. Die Konfiguration erfolgt über __Website-Administration -> Plugins -> Open LML Einschreibung__. Weitere Informationen finden Sie auf der [[http://moodle.org/plugins/view.php?plugin=enrol_openlml|Moodle-Seite]]((alles auch auf deutsch)). === Neuigkeiten === * Das Modul verwendet jetzt die **Globalen Gruppen(cohorts)** von Moodle2. * Das Modul setzt die Aktivierung von **enrol_cohort** (Globale Gruppen) für die Einschreibung voraus. === Eigenschaften === Es handelt sich um ein Modul für Moodle, das * Lehrer automatisch in Kurse einschreibt, die entsprechend gekennzeichnet sind. * Schüler automatisch in Kurse einschreibt, die entsprechend gekennzeichnet sind (es werden Klassen und Projekte der openLML unterstützt). * Schüler aus mehreren Klassen können in einem Kurs zusammengefasst werden. * Einen Kursbereich für jeden Lehrer in einem Kursbereich namens __Lehrer__ bei dessen erstmaliger Anmeldung anlegt. * Bei einem speziellen Projekt-Präfix auch Lehrer als Kursteilnehmer zulässt (z.B. für Fachgruppen-Kurse). ==== Installation ==== Die Datei enthält die Moduldateien für Moodle(die deutsche Sprachdatei befindet sich im deutschen Sprachpaket). Kopieren Sie die Datei in das Verzeichnis /usr/share/moodle/enrol und packen Sie es dort mit dem Befehl unzip enrol_openlml....zip aus. Dabei wird das Unterverzeichnis openlml angelegt. Dort befinden sich alle Dateien dieses Moduls. ==== Test der Installation ==== Man meldet sich bei Moodle als Administrator(wwwadmin) an und geht zu //Website-Administration->Plugins->Einschreibung//. Dort ist ein neuer Eintrag namens **OpenLML Einschreibung** vorhanden. ===== Einrichtung ===== ==== Voraussetzung ==== Voraussetzung für die Nutzung des OpenLML-Moduls ist die Aktivierung der **LDAP**-Authentifizierung, der **manuellen Einschreibung** und der automatischen **Einschreibung globaler Gruppen**. === Einrichtung der manuellen Einschreibung === Man meldet sich als Administrator(wwwadmin) an und geht auf die Seite //Website-Administration->Plugins->Einschreibung->Übersicht//. Dort befindet sich der Eintrag __Manuelle Einschreibung__. Diesen wählt man aus((das ist auch die Standardeinstellung)). Weitere Einstellungen sind für dieses Modul nicht nötig. === Einrichtung der Einschreibung globaler Gruppen === Man meldet sich als Administrator(wwwadmin) an und geht auf die Seite //Website-Administration->Plugins->Einschreibung->Übersicht//. Dort befindet sich der Eintrag __Globale Gruppen__. Diesen wählt man aus. Weitere Einstellungen sind für dieses Modul nicht nötig. === Einrichtung der LDAP-Authentifizierung === Mindestens bei Moodle 3.1.1 habe ich festgestellt, das der geplante Vorgang für den LDAP-Server hängen bleibt. Das betrifft wohl ältere Installationen. Dem LDAP-Server fehlt die Variable //pagesize//. Symptom ist, dass bei dem geplanten Vorgang des LDAP-Servers der Hinweis **ASAP** steht. Abhilfe schafft es, einmal auf die Einstellungsseite Website-Administration -> Plugins-Übersicht -> Authentifizierung -> LDAP-Server zu gehen und auf **Änderungen speichern** zu klicken. Danach läuft der geplante Vorgang korrekt durch. Man meldet sich als Administrator(wwwadmin) an und geht auf die Seite //Website-Administration->Plugins->Authentifizierung->Übersicht//. Dort befindet sich der Eintrag __LDAP-Server__. Diesen wählt man aus. Die Einträge in der LDAP-Datenbank können nun über die LDAP-Attribute ( z.B. givenName, sn, mail) für die moodle-Benutzerdaten verwendet werden. == Ausblendung von Klassenarbeitsbenutzern == Zunächst muss im Bereich __Nutzersuche__((user lookup)) das Feld __objectClass__ verändert werden. Dort darf nicht nur eine Objektklasse sondern auch ein Filterkriterium eingetragen werden. Um die Klassenarbeitsnutzer auszufiltern, trägt man folgendes ein: objectClass: (&(objectClass=posixAccount)(!(cn=ExamAccount))) == Datenzuordnung == Außerdem folgt der Bereich __Datenzuordnung__((Data-Mapping)), in welchem die Zuordnung von LDAP-Daten zu Moodle-Daten festgelegt wird. Entscheidend ist das Feld __ID-Nummer__. ID-Nummer: uid Update lokaler Daten: Bei jedem Login Update externer Daten: Nie Sperrwert: Gesperrt Man speichert die Änderungen und kann jetzt das LML-Modul einrichten. == Weitere nützliche Felder == Folgende Felder sollte man ebenfalls aus dem LDAP-Baum in Moodle übernehmen, damit die Benutzergrunddaten vorhanden sind. Die Werte sind hier in der Reihenfolge wie unter Datenzuordnung angegeben, also LDAP-Attribut / Update lokaler Daten / Update externer Daten / Sperrwert: Vorname: givenName / Bei jedem Login / Nie / Bearbeitbar Nachname: sn / Bei jedem Login / Nie / Bearbeitbar E-Mail-Adresse: mail / Beim Anlegen / Nie / Bearbeitbar (Das LDAP Attribut ___givenName___ enthält manchmal fälschlicherweise den Benutzernamen, das war mal ein Fehler beim Benutzer anlegen, der durch einen Lauf von ''sophomorix-dump-pg2ldap'' behoben werden kann.) ** E-Mail-Adresse** Die folgenden Anweisungen sind ab paedML 5.0.4 nicht mehr nötig, denn dort ist sophomorix **2.2.20** enthalten. (//Die Einrichtung der E-Mail-Adresse funktioniert erst dann, wenn sophomorix ab Version **2.2.19** verwendet wird ((siehe [[http://lml.support-netz.de/trac/ticket/506]])). Wer vorher die E-Mail-Adresse im LDAP benötigt, kann sich das Skript {{:moodle:addmail2ldap.sh.zip|AddMail2LDAP.sh.zip}} von Jörg Richter herunterladen. Es muss auf dem Server ausgepackt werden (ich benutze dazu ''/usr/local/bin'') und nach jedem neu anlegen von Benutzern ausgeführt werden. Es übernimmt die Mail-Adresse in den LDAP-Baum.//) ** Zu füllende Felder** Moodle benötigt noch Daten im Feld **Stadt/Ort**. Andernfalls muss der betroffene Benutzer beim ersten Anmelden diese Daten eintragen. Daher muss unter __Website-Administration->Lokales->Stadt/Ort__ die gewünschte Stadt eingetragen werden. Damit wird diese Stadt bei allen LDAP-Benutzerung mit leerem Feld **Stadt/Ort** automatisch bei der Synchronisierung durch das Skript //enrol_openlml// eingetragen. === Automatische Benutzerübernahme === Es gibt eine Variante, die mit der Version von __auth/ldap/auth.php__ von Moodle funktioniert und für ein Moodle geeignet ist auf dessen Server man administrativen Zuagng hat und eine zweite Variante, die man verwenden muss, falls sich Moodle **extern** auf einem Server im Internet befindet (z.B. BelWü). == Variante 1 - Administrativer Zugang zum Moodle-Server == Die Übernahme jedes Benutzers aus dem LDAP-Baum geschieht bei dessen Anmeldung. Für die automatische Einschreibung müssen alle Benutzer übernommen werden. Dazu gibt es das Skript **cli/sync_users.php**. Dieses Skript wird bei mir einmal täglich ausgeführt, um alle Benutzer zwischen LDAP und Moodle zu synchronisieren. Dieses Skript ist deshalb wichtig, weil nur Moodle-Benutzer automatisch in Kurse eingeschrieben werden können. == Variante 2 - Externes Moodle == Bei einem externen Moodle kann man keinen Cron-Job einrichten, der die oben genannte Datei direkt aufruft, da diese Datei nicht über einen Browser aufgerufen werden kann. Die kleine Patch-Datei {{:lml:moodle2_auth.php.patch.zip|moodle2_auth.php.patch.zip}} rüstet diese Funktion nach. Mit diesem Patch wird die Benutzerübernahme im Rahmen des üblichen Moodle-Cron-Jobs (admin/cron.php) **einmal pro Stunde** abgearbeitet. Die Patch-Datei muss in /usr/share/moodle/auth/ldap angewendet werden. Dazu dient der Befehl: cd /usr/share/moodle/auth/ldap patch Die Datei __auth_ldap.patch__ muss vorher in das genannte Verzeichnis kopiert werden. Für BelWü Nutzer: auch diese müssen die ldap auth patchen. Dazu läd man das Verzeichnis moodle02/srv/www/virtual///vhostdata/htdoc/moodle/auth/ldap herunter und patched lokal. danach nennt man das Verzeichnis ldap auf dem Server um in ldap-org (zum Backup erstellen) und kopiert das gepatchte wieder hoch. Beim nächsten Lauf von cron.php werden die lokalen lml6 Nutzer in moodle angelegt. Die Lehrerkursbereiche erscheinen eine Stunde später. === Automatische Löschung von Benutzern === Damit Nutzer, die auf LinuxML gelöscht wurden, auch in moodle entfernt werden, muss unter Website-Administration->Plugins->Authentifizierung->LDAP-Server die Konfiguration angepasst werden: Bei "Cron-Synchronisationsscript" muss "entfernte externe Nutzer" auf "intern löschen" stehen. ==== OpenLML-Modul einrichten ==== Man meldet sich als Administrator (wwwadmin) an und geht zu //Website-Administration->Plugins->Einschreibung->Übersicht//. Dort aktiviert man das Modul **OpenLML Einschreibung**. Dann speichert man die Änderungen. Als nächstes klickt man bei **OpenLML Einschreibung** auf __Einstellungen__. Ich gebe unten die Einträge für meine Schule an. Allgemeine LDAP-Einstellungen ----------------------------- Kontexte: ou=groups,dc=linuxmuster,dc=lokal Objektart: posixGroup Gruppenattribut: cn Mitgliedsattribut: memberuid Lehrergruppen-Einstellungen --------------------------- Lehrergruppe: teachers Lehrerrolle: Teilnehmer/in Lehrerkurse: p_teachers_ Lehrer-Kursbereicheinstellungen ------------------------------- Lehrer-Kursbereich: Lehrer Lehrerrolle: Kursverwalter/in automatisch erzeugen: Ja automatisch entfernen: Ja entfernte Kursbereiche: attic ignorierte Lehrer: administrator Schülereinstellungen -------------------- Klassenstufen: 5,6,7,8,9,10,11,12 Weitere Gruppen: Projekt-Präfix: p_ Schülerrolle: Teilnehmer/in Nun speichert man die Änderungen. ==== Test der Einrichtung ==== Man meldet sich als ein Lehrer an. Es sollte automatisch der Kursbereich __Lehrer__ erscheinen. In diesem Kursbereich sollte ein Unterbereich mit dem Benutzernamen dieses Lehrers erscheinen, in welchem der Lehrer Kursverwalter ist. Man legt in diesem Kursbereich einen Kurs mit dem Kurznamen __5a-Mathe__ an und gibt für die Kurs-ID den Kurznamen gefolgt von der Bezeichnung einer existierenden Klasse an, z.B. __5a-Mathe:5a__. Es ist auch möglich, mehrere Klassen oder Projekte einzutragen, z.B. Kurs-ID: 5a-Mathe:5a,5b,5c,5d,5e für einen Kurs mit allen 5. Klassen. Man meldet sich als __root__ auf dem Server an und synchronisiert die Eintragungen durch Aufruf von: cd /usr/share/moodle/enrol/openlml/cli su www-data php sync.php Es erscheinen einige Meldungen zur Einschreibung((Sollte der obige Befehl fehlschlagen, ist vermutlich die PHP-Version daran schuld. Moodle benötigt im Befehlsfenster die Version PHP 5.3.x)). Dann geht man zurück in Moodle und schaut sich die Teilnehmer des eben erstellten Kurses an. Es sollten alle Schüler der 5a((bzw. die Schüler/Lehrer der Gruppe, die sie als Kurs-ID eingetragen haben)) eingetragen sein. Man erstellt einen Kurs mit dem Kurznamen __Lehrerzimmer__ und trägt als Kurs-ID __Lehrerzimmer:teachers__ ein. Dann führt man wieder das Synchronisationsskript __sync.php__ aus und kontrolliert, dass alle Lehrer jetzt Mitglieder des Lehrerzimmers sind((In normalen Kursen können Lehrer nicht Teilnehmer sein, es sei denn sie gehören zu den besonderen Projekt-Präfix-Bereichen, die unter ''Lehrerkurse'' eingestellt werden)). Nach diesen Tests sollte das OpenLML-Modul funktionieren. Das Sync-Script kann auch aus der Ferne angestoßen werden: https://MOODLE-URL/moodle/admin/cron.php bzw. in moodle hierfür ein Passwort vergeben und https://MOODLE-URL/moodle/admin/cron.php?password=wasauchimmer aufrufen. ==== Automatisierung ==== Das Skript wird automatisch vom Admin-Cron-Skript **einmal pro Stunde** ausgeführt((ein häufigeres Ausführen belastet den Server)). Bei der ersten Ausführung sieht in etwa man folgende Zeilen: ... Running auth crons if required... ... Starting enrolments for openlml enrolments plugin... Finished. ... Bei der nächsten Ausführung innerhalb der gleichen Stunde sollten die openlml-Meldungen nicht auftreten: Running backups if required... Checking backup status...INACTIVE Backup tasks finished. Running auth crons if required... Cron script completed correctly ===== Nützliche Anpassungen ===== ==== Kurse selbst löschen ==== Bei meinem Moodle ist die Standardeinstellung, dass Kursverwalter Kurse nicht löschen dürfen. Diese Einstellung erfordert von einem Administrator, Kurse in regelmäßigen Abständen zu durchforsten. Ich bin an dieser Stelle für eine Umverteilung der Arbeit auf alle Lehrer. Dazu meldet man sich als **wwwadmin** bei Moodle an und sucht die entsprechende Einstellung im Block Nutzerrechte: Nutzer/innen -> Zugriffsrechte -> Rollen verwalten Dort wählt man die Rolle **Kursverwalter/in**, um die Rollendetails zu sehen und klickt dort auf **Bearbeiten**. Im Bereich **Kurse** lautet die gewünschte Eigenschaft: Kurse löschen moodle/course:delete Hier muss die Einstellung **Erlauben** lauten. Damit kann jeder Kursverwalter in seinem eigenen Bereich Kurse löschen. Bei Moodle **2.3** ist keine Benutzerschnittstelle für das Löschen von Kursen vorgesehen. Bisher muss man sich so behelfen, dass man die Kursseite aufruft und dann in der **URL** __delete__ an Stelle von __view__ einträgt..