Moodle-Anbindung Belwü - csv-Upload

Hallo,
ich mache mal einen neuen Thread auf, der sich mit der Einrichtung von Kursen und Nutzern mit csv-Upload beschäftigen soll.

csv-Upload ist eine Ergänzung zu enrol-openlmn (LMN6.2), kann es aber auch ersetzen z.B. für LMN7.

Begriffe:

  • globale Gruppe (engl. cohort) ist den Kursen übergeordnet
  • Gruppe (group) ist eine Strukturierung in den einzelnen Kursen
  • cohort-sync sorgt für die aktualisierung der cohort-Mitgliedern in den Kursen. Es kann auch eine entsprechende Gruppenzugehörigkeit festgelegt werden.

Das Ziel dieser Beschreibung ist für jede Klasse einen Kurs anzulegen, der die Schülerinnen und Lehrerinnen enthält. Diese in separaten Gruppen.

  1. Nutzer anlegen (nicht nötig bei enrol-openlmn)
    https://docs.moodle.org/38/de/Globale_Gruppen#Nutzer.2Finnen_.C3.BCber_Nutzerliste_hochladen_in_eine_globale_Gruppe_eintragen2022_btg-1:btg11-1

  2. Nutzer aktualisieren und zu globalen Gruppen hinzufügen
    Hier braucht man nur eine Spalte für den username und die Spalten für die globalen Gruppen. Meine Namen der globalen Gruppen erklären sich weiter unten (Klassenabschlussnamen)

teacher_cohort.csv:

username,cohort1,cohort2
jackbrown,2022_btg-1,2021_sg

Dies ist gleichwertig mit der übersichtlicheren Variante

username,cohort1
jackbrown,2022_btg-1
jackbrown,2021_sg
  1. Kurse anlegen
    z.B. In der Kurskategorie Klassen für jede Klasse einen Kurs, denen ein Musterkurs als Vorlage dient. Eventuell im Musterkurs schon die Gruppen Lehrerinnen und Schülerinnen anlegen und Foren mit diesen Gruppeneinteilungen, etc. anlegen

https://docs.moodle.org/38/de/Kurse_hochladen#Beispiel_an_einer_kleinen_Datei

Mein Beispiel für die jetztige Klasse BTG11-1, die im Jahr 2022 Abschluss macht (Der Kurs bleibt solange bestehen; den fullname kann im nächsten Jahr über csv-Upload geändert werden; shortname ist nicht änderbar). Die idnumber erhält den Eintrag, dass die Schüler*innen der BTG11-1 durch enrol-openlmn eingeschrieben werden; ansonsten könnte diese Spalte entfallen. Der Kurs mit dem Kurznamen musterklasse wird als Vorlage verwendet. 50 ist die numerische ID der Kategorie Klassen

course.csv

shortname;fullname;idnumber;category;templatecourse
2022_btg-1;BTG11-1;2022_btg-1:btg11-1;50;musterklasse

Okay, aufmerksame Leser*innen wenden jetzt ein, warum schreibt er nicht die enrolment-Methode cohort mit in die course.csv. Diese Einschreibungsmethode wird beim csv-Upload nicht unterstützt! Seit Jahren besteht wohl schon der Wunsch … https://tracker.moodle.org/browse/MDL-43127

D.h. man muss jetzt in jedem Kurs händisch den cohort-sync eintragen : https://docs.moodle.org/38/de/Einschreibung_über_globale_Gruppen#Eine_globale_Gruppe_in_einen_Kurs_einschreiben

Die vermutlich einzige Lösung um dies zu umgehen und zu automatisieren ist https://moodle.org/plugins/tool_uploadenrolmentmethods . Diese Plugin ist aber nicht im BelWü-moodle enthalten. Ich habe mal darum angefragt. Aber vielleicht hat hier jemand einen direkteren Draht, um diese Plugin ins moodle zu bekommen.

Viele Grüße,
Helge

1 „Gefällt mir“

Hallo Helge,
herzlichen Dank für die Hinweise, die dabei helfen, das Ganze recht schnell online zu bekommen.
Einziges Manko ist, dass sofern SuS, die zwar im LDAP angelegt sind, sich bislang aber noch nicht im Moodle-System angemeldet hatten, so zwar formal eine Kohorten-Zuordnung erhalten. Sobald sie angemeldet sind, muss ich sie dennoch händisch dem Kurs als Teilnehmer zuordnen.
Das von Dir genannte Plugin uploadenrolmentmethods habe ich mal installiert, kann derzeit aber noch nicht nachvollziehen, wo die Datei hochzuladen ist. Hast Du das mal in einem Test-Moodle-System ausprobiert?
VG
Chris

Hallo Chris,
die SuS sind bei uns über enrol-openlml drin. Nur mit LDAP, das nur der Authentifizierung dient, sehe ich zwei Möglichkeiten:

  1. Enrol by user profile fields unter plugins aktivieren. Habe ich aber noch nicht gemacht
  2. CSV-Liste der Schüler mit cohorten erstellen und hochladen. Vielleicht mit zwei SuS mal probieren. An alle Pflichtfelder denken.

Das Plugin uploadenrolmentmethods habe ich noch nicht getestet. Da habe ich auf die Beschreibungen vertraut. Aber ich schaue auch noch mal.

Viele Grüße,
Helge

Hallo Chris,
bei https://moodle.org/plugins/tool_uploadenrolmentmethods ist beschrieben, dass bei Site administration > Plugins > Enrolments > Upload enrolment methods das entsprechende CSV hochgeladen wird.

Lieben Gruß,
Helge

Hallo Helge,
das mit den Tomaten ist so eine Sache :joy:
Es findet sich bei Nutzung des deutschen Sprachpakets unter:
Startseite → Website-Administration → Plugins → Einschreibungen → Upload enrolment methods

Ich erhalte dann folgende Hinweise:
Enrolment method „Meta-Einschreibung“: Diese Funktion ist zur Zeit deaktiviert…
Übersicht

Upload enrolment methods from a CSV file to set enrolment methods for a range of courses in a single operation.

Kennst Du das? Anonsten lese ich mich erst einmal etwas genauer in das Konzept ein.

VG
Chris

Hallo Chris,

das mit den Tomaten ist so eine Sache :joy:
Es findet sich bei Nutzung des deutschen Sprachpakets unter:
Startseite → Website-Administration → Plugins → Einschreibungen →
Upload enrolment methods

Ich erhalte dann folgende Hinweise:
Enrolment method „Meta-Einschreibung“: Diese Funktion ist zur Zeit
deaktiviert…
Übersicht

Upload enrolment methods from a CSV file to set enrolment methods
for a range of courses in a single operation.

Kennst Du das? Anonsten lese ich mich erst einmal etwas genauer in das
Konzept ein.

unter:
Startseite → Website-Administration → Plugins → Einschreibungen →
Übersicht

das Auge öffnen in der Zeile „Meta Einschreibung“ :slight_smile:

LG

Holger

Hallo Holger,
danke, aktiviert habe ich es.

Für mich ist derzeit noch nicht ganz klar wie die Zuordnung erfolgt. In der Beschreibung zur CSV-Datei heißt es:

operation, enrolment method, target course shortname, parent course shortname or cohort idnumber, disabled, group[, role]

e.g.

;operation,method,shortname,parent course shortname or cohort idnumber,disabled,group[,role]
add,meta,CS101-2345,Computing-Year3,1,CS101,student
upd,meta,CS101-2344,Computing-Year1,0,CS101,editingteacher

Lines beginning with a ‚#‘ or ‚;‘ character are comments, and skipped.
Each line of the file contains one record.
Each record is a series of data in a fixed order separated by commas.
All fields are required, except role, which is optional for backwards compatibility.
The allowed operations are add, del(ete), and upd(ate).
The allowed methods are ‚meta‘ and ‚cohort‘.
The allowed disabled status values are 0 (enabled) and 1 (disabled).
The group field is the name of a group into which enrolled students should be placed. It will be created if it doesn’t already exist.
The role field must be a valid role name such as editingteacher, student, etc.

Mit folgendem Eintrag
add,cohort,<Kurzname des Kurses>,<ID-globaleGruppe>,0<schueler activ>,<gruppe des schuelers>,student
müsste ich doch dann SuS einer Gruppe einem Kurs mit der Rolle Schüler hinzufügen können, oder ?

Geht das auch, wenn die SuS im LDAP vorhanden sind und sich noch nicht angemeldet hatten in Moodle? Das würde das Verffahren deutlich beschleunigen :smile:

LG
Chris

Hallo,
das mit dem Plugin ist ja einfach :joy:
Folgende CSV-Datei führt dazu, dass alle Benutzer, die zuvor mit einer teacher_cohort.csv und einer students_cohort.csv im System angelegt wurden, in Kurse, die zuvor mit einer course.csv erstellt wurden eingeschrieben werden:
;hinzufuegen,methode cohort (globale gruppen),kurznanme kurs,id der globalen gruppe,aktivieren,globale gruppe, rolle
add,cohort,itk171,itk171,0,itk171,student
add,cohort,itk172,itk172,0,itk171,student

Es müssen Kommata gesetzt werden - keine Semikolons.
Kursname in diesem Bsp: itk171
ID der flobalen Gruppe: itk171
0 = aktiv
student = Kursteilnehmer

Wer für die globale Gruppen in Moodle numerische ID hat erzeugen lassen, muss diese hier angeben. Ich hatte diese in meinem Moodle geändert.

LG
Chris

Hallo,
nur zur Sicherheit die Begriffe:
„globale Gruppe“ ↔ cohort ; Kursübergreifende Gruppe
„Gruppe“ ↔ group ; gruppe in einem Kurs

Beispiel, so wie ich das verstehe:
Kurs(shortname): Klasse5a
Cohort: sus_klasse5a
Cohort idnumber: 101
group: Schüler*in

add,cohort,Klasse5a,101,0,Schüler*in,student

Kannst du testen, ob man statt der cohort idnumber auch den cohortname verwenden kann? Wäre prktischer, weil die idnumber von moodle vergeben wird und somit nicht nachträglich in das CSV eingetragen werden muss.

Ja, so verstehe ich das. Wenn du die Kurse und die enrollment methods angelegt hast, werden die Benutzer über cohortsync aktualisiert. Also bei obigen Beispiel: Wenn danach Schüler in die cohort sus_klasse5a eingetragen werden, werden diese in den Kurs Klasse5a eingeschrieben und dort der Gruppe Schüler*in zugeordnet.
Allerdings müssen die Schüler bei dir mit CSV-upload angelegt werden. Dann existieren die Benutzerkonten in moodle. Meldet sich dann ein Schüler an, wird sein Passwort über LDAP geprüft und er erhält Zugang. LDAP dient nur der Authentifikation.

Lieben Gruß,
Helge

Hallo Helge,
verstehe ich auch so wie Du s.o.,
ich habe bei mir für die globalen Gruppen keine numerischen IDs, sondern habe hier Namen eingetragen.
Das hat funktioniert.
VG
Chris

Hallo Chris,
jetzt haben wir gleichzeitig geschrieben.

Kannst du bitte kontrollieren, ob dir nicht Gruppen in den Kursen angelegt wurden? Im Kurs unter Teilnehmer -> Gruppen nachsehen.

LG Helge

Hallo Helge,
das sieht gut aus. Unter Teilnehmern finde ich die Teilnehmer, sehe aber keine Untergruppe.
Wie stellen diese sich dar, als zusätzlicher Unterordner von Teilnehmern ?
LG
Chris

Hallo Chris,

meiner Meinung nach (ich kann es leider nicht testen) ist der Eintrag vor role der Name einer Gruppe und nicht einer globalen Gruppe.
Vielleicht muss die Gruppe im Kurs schon existieren, damit eine Zuordnung erfolgt.

Infos zu Gruppen: https://docs.moodle.org/38/de/Gruppen

Die für mich wichtigste Anwendung von Gruppen in den Klassenkursen ist, Aktivitäten über die Vorraussetzungen z.B. nur für Lehrer*innen zugänglich machen.

LG Helge

Hi.
Ich versuche mich auch gerade daran … leider funktiniert openLML_enrol nicht mehr (seit dem Upgrade auf 3.8 nun wirklich GAR nicht mehr). Ich habe also überhaupt keine globalen Gruppen mehr im System, was höchst bedauerlich ist.

Wenn ich das richtig sehe, müsste ich doch zunächst mal eine globale Gruppe „Lehrer“ anlegen können, in die ich (z.B. per LDAP-Abfrage auf der Konsole) alle Lehrerinnen/Lehrer packe, oder?? Mir ist die Vorgehensweise aber leider weiterhin nicht ganz klar … das ganze manuell zu machen, funktioniert aber kann ja nicht im Sinne des Erfinders sein!?!

Also nochmal zurückgefragt: Wie habt ihr Schritt 1 umgesetzt? Mit Kürzeln? Mit LDAP-Abfrage?

Schöne Grüße,
Michael

Hallo,

Weißt du noch ab welcher Moodle-Version das openLML_enrol-Plugin nicht mehr 100% funktioniert?
So wie ich das verstehe sind vier Kernfeatures betroffen:

  • User sync mit dem ldap
  • Globale Gruppen anlegen
  • Globale Gruppen mit Nutzern füllen
  • Global Gruppen automatisch Kurse einschreiben

Kannst du zuordnen, welches der Feature ab welcher Moodle-Version nicht mehr funktionierte?

Grüße,
Sven

Hallo Sven.
Ich habe neulich kurzerhand den Autor des Moduls angeschrieben und ihn direkt gefragt. Er ist zwar lange raus – wäre aber bereit seinen Code vollständig an einen potenziellen Nachfolger abzutreten.

Es war ja mal im Gespräch, ob dieses Plugin evtl irgendwie durch Outsourcing weiter gepflegt werden kann – ich kann aber nicht sagen, inwieweit sich da jemand drum gekümmert hat geschweige denn jemanden gefunden werden konnte, der es übernehmen könnte?!? (Wurde diesbzgl eine Anfrage im moodle-Nachbarforum gestartet??)

Wenn ich mir den Ansatz von Thomas anschaue, wäre das ein mehr als guter Nachfolger für dieses Plugin. Das ist leider ja noch nicht soweit, dass es ein vollwertiger Ersatz ist – aber ein Anfang ist gemacht! Vielleicht kann ja Thomas (@thoschi) selbst etwas dazu sagen, wie/ob ein Zusammenspiel gedacht bzw überhaupt notwendig ist??

Aber konkret zu deinen Fragen:
Laut moodle-Plugin-Seite läuft es bis 3.4 vollständig. Ich hatte es zwischendurch mal deinstalliert, weil ich eine Fehlermeldung der moodle-cronjobs irrtümlicherweise dem Plugin zugeschrieben hatte. [s]Nach Neuinstallation unter 3.8.2 tut sich aber nun gar nichts mehr. Es werden keine globalen Gruppen mehr angelegt – die Anmeldung via LDAP funktioniert jedoch.

Wenn man unter moodle den debug-Mode einschaltet und das Script in der Konsole laufen lässt, hatte ich dort zuletzt diese Meldungen:

php /.../moodle/enrol/openlml/cli/sync.php

PHP Warning:  ldap_list(): Search: No such object in
/../moodle/enrol/openlml/lib.php on line 510
PHP Warning:  ldap_get_entries() expects parameter 2 to be resource,
bool given in /.../moodle/enrol/openlml/lib.php on line 514
PHP Warning:  count(): Parameter must be an array or an object that
implements Countable in /.../moodle/enrol/openlml/lib.php on line 517

Nun wäre die weitere Vorgehensweise diese:

Füge die folgenden Zeilen in deine config.php ein:
# debug function
function kill($data){ var_dump($data); exit; }
@ini_set('display_errors','1');

Anschließend schreibst Du an der gewünschten Stelle im Code
kill();
und als Argument die Variable, deren Inhalt du anschauen möchtest.


Da ich aber kein PHP-Wizzzzard bin, würde es bei mir ewig dauern, das zu debuggen. Vielleicht findet sich jemand anders, der es kann und den Fehler schnell eingrenzen kann?

Man muss nur an der richtigen Stelle schauen – und schon sind die globalen Gruppen wieder da. Immerhin! Ich hatte eine falsche Einstellung in den Settings des openLML_enrol-Plugins (seit meiner Neuinstallation). Als ich das korrigiert hatte, lief das Script wieder durch und hat die globalen Gruppen erzeugt. …

hth,
Michael

Hallo zusammen,

Ich denke, per REST geht wesentlich mehr als mit dem PHP-Plugin. Aber das braucht man natürlich auch nicht unbedingt alles. Moodle bietet selbst inzwischen neue Mechanismen an (Hintergrund-Tasks), mit denen man coole Plugins realisieren könnte. Aber dafür muss man sich da auch gut auskennen - und das kontinuierlich pflegen.

REST hat halt den Vorteil, dass es für all das, was man machen will, eine wohldefinierte Schnittstelle gibt - egal, ob nun in Python, PHP oder sonst wie. Im Endeffekt besteht ja mein Skript auch nur aus zusammengebastelten JSON-gefütterten API-„calls“/requests. Das sollte in jeder Programmiersprache ähnlich sein.

All die vier o.g. Punkte lassen sich jedenfalls per API machen (globale Rollen in Kurse einschreiben benötigt ein Plugin).

Daher würde ich eher auf REST setzen, als auf die Moodle-Bibliotheken, die sich dann eben irgendwann auch wieder ändern können. Technologisch scheint mir das der Weg der Wahl zu sein, um Moodle zu manipulieren.

Viele Grüße
Thomas

Ok, jetzt muss ich mal kurz etwas gerade rücken: Ich habe die Einstellungen des openLML_enrol-Plugins nochmal geprüft und kann jetzt (erstaunt) folgendes berichten:

Mit moodle 3.8.2 und einem linuxmuster-Server v6.x läuft es hier vollständig! Das heißt, dass auch weiterhin die Einschreibung der globalen Gruppen in die Kurse funktioniert, wenn man als Kurs-ID z.B. 6a,6b,6c,6d,6e,6f wählt. Ich habe das gerade ausprobiert und das enrol_Script laufen lassen: Alle User sind in den Kurs eingeschrieben. Damit klappt es also auch weiterhin genauso, wie es im alten Wiki beschrieben wurde.

Dass es mit v7 nicht mehr läuft, steht nun auf einem anderen Blatt – aber immerhin kann ich nun doch bestätigen, dass moodle auch in aktueller Version mit dem alten Plugin keine Probleme hat! Das ist doch was!

Und noch ein Nachtrag: der Autor der Plugins hat mir geschrieben, dass es auch mit einem AD (bei uns also mit v7) weiterhin laufen sollte – er selbst nutzt es auch angebunden an ein AD. Von daher ist das Plugin wahrscheinlich ganz normal weiterhin benutzbar. Ich habe es mit v7 noch nicht getestet.

Schöne Grüße,
Michael

Eine Ergänzung zum Thema moodle und CSV

Es geht auch so:
https://moodle.org/mod/forum/discuss.php?d=400306

(nicht ganz so elegant wie der Ansatz von Thomas @thoschi aber eine gute Alternative)

hth,
Michael

Hallo
ich versuche auch gerade, mich um die Arbeit der Klasseneinteilung in Moodle zu drücken, wahrscheinlich hätte ich es längst händisch gemacht :slight_smile:
Habe eine lmn6.2 und die Frage ist, wo im LDAP überhaupt die Klasse steht. Ich finde sie da nirgends, dann kann sie ja auch nicht in Moodle exportiert werden…
Wo steht in der lmn die Klasse? Kennt die nur sophomorix?
LG
Max