Moodle - automatisches Erstellen von Gruppen und Einschreiben der SuS

Naja,

es gibt noch ein weiteres Bundesland…sehr klein…wie hieß es doch gleich…ich unterrichte da - Moment: NRW !
Wir haben (vermutlich wegen des Kohlestaubs) kein „belle vue“ …

herzlich
Christoph

Hallo zusammen,

ich hatte dazu schon mal etwas geschrieben und es auf dem WE in Essen kurz erwähnt: wir nutzen bei uns ein Python-Skript, welches die REST-Schnittstelle von Moodle nutzt. Damit lässt sich wirklich ALLES realisieren.

Einige Beispiele:

  • Nutzer aus der lml werden per LDAP eingelesen und dann in Moodle angelegt (Authentifizierung geht natürlich weiterhin wie bisher über den LDAP von linuxmuster, aber dann sind auch wirklich alle Nutzer in Moodle verfügbar).
  • alle Klassen und Kurse (wir lesen die aus den CSVs der Schulverwaltung ein, tricky aber geht) sind als globale Gruppen verfügbar und werden in entsprechende Moodle-Kurse eingeschrieben
  • unsichtbare „Vorlagenkurse“ mit einer vorgefertigten Struktur dienen als Template für neue Klassenkurse
  • die gleiche Gruppenstruktur ist über das gleiche Skript auch in Nextcloud abgebildet (über occ), das heißt, man kann z.B. mit der 6a oder den 6a-Lehrern teilen

Das läuft bei uns seit diesem Schuljahr und die KuK sind mehr als zufrieden (und die Nutzerzahlen bei Moodle ordentlich in die Höhe gegangen).

Ich komme im Moment (Ernstfall Digitalisierung) nicht dazu, das benutzerfreundlich zu verpacken, da unser Paket noch einige Bausteine mehr hat. Aber ich versuche, in den nächsten Tagen mal eine zusammengestrichene Version des Python-Skripts zu basteln, mit der die Grundfunktionen (herunterladen der Nutzer aus dem LDAP, Anlegen von Nutzern und Kursen bei Moodle) möglich ist und mit dem man weiter arbeiten kann.

Aber bevor sich jetzt jemand in Moosh einarbeitet (mit dem vieles geht, aber manches auch nicht) lohnt da ein Blick. Und die REST-Schnittstelle geht mit JEDEM Moodle, ob BelWue oder anderswo, auch ohne Shell auf dem Server. Man legt einmalig einen entsprechenden Benutzer bei Moodle an, erzeugt einen Token und trägt den in das Skript ein. Der Rest ist nicht schwer zu verstehen/programmieren.

Viele Grüße
Thomas

5 „Gefällt mir“

Hallo Thomas,

… dann warte ich doch gerne noch eine Woche und bin sehr gespannt ;-).

TAUSEND DANK schon im Voraus!

Viele Grüße
Jürgen

Ja, super !
(zumal PHP7.2 aufwärts mit moosh nicht funktioniert !)

Bin auch gespannt -
L.G.

Christoph

Hi Thomas @thoschi .
Ich will ja nicht drängeln … aber bist du an der Sache noch dran? Auch wir wollen künftig moodle großflächiger einsetzen. Wenn da direkt alle eigenen Kurse inkl Teilnehmer usw für die Kollegen, die sich neu damit auseinandersetzen (müssen) vorhanden wären, wäre das wirklich der Knaller…
Wie schätzt du das ein? Wird es kompliziert sein, euer Setup auf andere Installationen zu übertragen?
Danke nochmal und schöne Grüße,
Michael

Hi Michael,

  ich bin seit Ende der Woche dran und hoffe mal, dass ich morgen

oder Anfang der Woche etwas fertig habe.

  Das wird dann erstmal ein Grundgerüst sein, mit dem man loslegen

kann - und jeder mit etwas Ahnung von Python kann das
weiterentwickeln.

  Wir arbeiten gerade daran, dass das ganze interaktiv ist - das

werde ich alles herausschmeißen, so dass ein Python-Skript übrig
bleibt, das die lmn-Nutzer/Gruppen zu Moodle überträgt und die
entsprechenden Kurse in einer festen Struktur anlegt.

Aber mehr dann.

Viele Grüße
Thomas

1 „Gefällt mir“

Hallo,

ich muss jetzt mal ganz unbedarft fragen:
Kann man bei der Anmeldung am Moodle via LDAP gegen den LMN-Server nicht ein Klassen-Attribut übergeben, so dass die SuS schonmal zumindest in den Kurs ihrer Klasse landen?

Ich habe gehört, dass das gehen soll (mit upgedatetem Moodle bei Belwue ).

Gruß
Stefan

Hallo zusammen,

ich habe mal ein paar lml- und Moodle-spezifische Dinge aus unserem „Schulzeug“-Projekt extrahiert und in ein einzelnes Python-Skript gepackt:

Dieses Skript liest einen 6.2-LDAP aus und erstellt über die REST-Schnittstelle von Moodle Kursbereiche und Klassen und schreibt die Nutzer entsprechend ein.

Projekte nutzen wir nicht - die werden also vermutlich noch nicht korrekt behandelt. Derzeit ist jeder Nutzer in genau einer Klasse - das dürfte aber recht leicht zu erweitern sein.

Das ist jetzt natürlich noch nicht der komplette OPENLML-ENROL-Ersatz. Aber ich hoffe, es zeigt, wie der Workflow LDAP->Moodle grundsätzlich über die REST-Schnittstelle zu realisieren ist.

Um das in Betrieb zunehmen, muss man in Moodle die Webservices aktivieren, einen Nutzer hinzufügen und ihm die Rechte an den im Skript benötigten Funktionen geben. Eine Schritt für Schritt-Anleitung gibt es z.B. hier.

Außerdem müssen ein paar Variablen gesetzt werden (z.B. der Token, ggf. die LDAP-Einstellungen). Leider muss man auch die ID der globalen Rollen für Schüler und Lehrer aus der Datenbank von Moodle lesen (Tabelle mdl_role), da seltsamerweise keine Funktion zum Auslesen der globalen Rollen zu existieren scheint. Wer keinen Datenbank-Zugriff hat, kann sie aber auch leicht aus den Links von der Rollenverwaltung aus auslesen (dort jeweils nach „roleid=“ im Link suchen).

Eine Übersicht über die wirklich mächtige Moodle-REST-Schnittstelle gibt es hier.

Ich hoffe, die Codebeispiele zeigen, wie man bei Bedarf auch andere Befehle aufrufen kann. Im Rahmen des ursprünglichen Projekts arbeiten wir an einer umfangreichen Moodle- und Nextcloud-Befehlsbibliothek, die dann später auch für andere Projekte zur Verfügung steht - aber das dauert noch.

Ich hoffe, es finden sich Leute, die das zu testen wagen - Anregungen arbeite ich auch gerne noch in die Vorlage ein. Commits sind natürlich eh willkommen!

Viele Grüße
Thomas

1 „Gefällt mir“

PS: Man kann natürlich den LDAP-Kram auch weglassen und z.B. CSV-Dateien parsen. Wenn da jemand Hilfe benötigt oder für eine konkrete CSV mal ein Beispiel sehen möchte, einfach schreiben.

Hallo Thomas,

vorab vielen Dank für deine Arbeit.
Mein über Jahre gewachsenes moodle hat natürlich schon eine Kursstruktur und viele meist über Selbsteinschreibung aufgenommene Nutzer.
Lässt sich vorhersagen, wie sich da lml2moodle auswirken würde?

Viele Grüße

Wilfried

Hallo Wilfried,

im derzeitigen Zustand legt es 2 Bereiche an (Schüler und Lehrer, kann man aber ändern) und erzeugt dort Unterbereiche und Klassenkurse.
Alle Nutzer werden angelegt (und ich vermute, bei gleicher UID erzeugt der Aufruf einfach einen Fehler). Beim Einschreiben der Nutzer in die neuen Kurse nutzt das Skript die UID, insofern sollte das dennoch funktionieren.

Da das Skript ja nur anlegt und nichts löscht, wird es vermutlich vor allem Fehler generieren, wenn etwas schon da ist. Andererseits, wenn potentiell Kurse gleich heißen, etc, entsteht evtl. eine halbfertige Struktur. Ich glaube, ich würde da erst einmal Tests abwarten (oder mit Teilen des Skripts vorsichtig anfangen).

Wir haben letztes Schuljahr ein neues Moodle begonnnen, für einen „sauberen Neuanfang“. Theoretisch kann man aber auch mit neuen Kursunterbereichen anfangen und dann bleibt das sauber getrennt.

Viele Grüße
Thomas

Hallo Thomas.
Super – vielen Dank. Ich schaue es mir an und versuche es in unsere Struktur zu integrieren.

Wir hatten das Thema ja neulich schon mal: „Ressourcen bündeln --> gemeinsame Kurse einführen“. Ich weiß nicht, ob das jemand so macht – aber evtl wäre so ein Aufbau klassenübergreifend

Fachschaften 
  |-> Mathematik 
         |-- Thema 1
  |-> Englisch
         |-- Thema 1

genauso gut, da man dann nicht 134623347 Kurs erzeugt?? Das ist bei dir so aber nicht vorgesehen, richtig?

Schöne Grüße,
Michael

Hallo Michael,

Man kann sich die Struktur ja so einrichten, wie man möchte. WIr
benutzen z.B. globale Gruppen (und keine manuellen Einschreibungen wie
im Skript). Da das aber ein Plugin benötigt, habe ich es erst einmal
weggelassen.

Zum Weiterarbeiten sind eigentlich nur die Funktionen wichtig - die
Schleifen am Ende, die die Bereiche/Kurse/Nutzer einrichten, sind ja
kein Hexenwerk. Eher so als „Demo“ habe ich z.B. Gruppierungen
eingerichtet, die sich aus den Klassennamen ergeben (über die
regexp-Funktion bei „user.cl“):

5a 5b1 5b2 -> Kursbereich 5
11a 11b 11c -> Kursbereich 11

Schon das dürfte aber ja nicht für alle passen.

Außerdem nutzen wir viele Zusatzinfos (Kursnamen,
Lehrer->Klassen/Kurszuordnungen), damit Moodle direkt zum
Schuljahresbeginn einsatzbereit ist. Das ist halt enorm praktisch, lässt
sich aber mit linuxmuster-Bordmitteln bisher nicht sinnvoll abbilden.
Wir wollten einfach mal testen, ob man mit etwas Hirnschmalz eine gute
Balance aus Nutzen und Gerade-Noch-Überschaubarkeit hinbekommt und wie
das Kollegium darauf reagiert. Das, was als Struktur herauskam, hänge
ich mal an.

Vom Ergebnis waren wir selbst überrascht. Die Nutzung hat sich insgesamt
verfünf- bis verzehnfacht, selbst frühere Nichtnutzer nutzen es
regelmäßig und die letzten 2 Wochen waren dementsprechend erstaunlich
entspannt (und haben den Daten-Verzeihnisbaum von Moodle mal eben um 8GB
wachsen lassen).

Viele Grüße
Thomas

1 „Gefällt mir“

Als Ergänzung: wir hatten bisher in den Fachgruppenkurse Abschnitte zum Materialsammeln vorgesehen.

Da sich im Zuge der letzten Wochen aber sehr viel angesammelt hat, planen wir nun doch etwas eher, „Materialkurse“ pro Jahrgang einzurichten. Dort sind dann alle Lehrkräfte eingeschrieben (sehen also auch das Material der anderen Fächer des Jahrgangs).

Das Elegante: die Materialkurse haben die gleiche Struktur wie die Klassenkurs(vorlag)e. Als Lehrkraft kann man einfach auf „Zahnrad-Import“ gehen, den Materialkurs wählen und das Material landet bei der eigenen Klasse direkt im richtigen Abschnitt (es gibt für jedes Fach einen). Am Ende des Schuljahres kann man dann neues Material bei Bedarf in den Materialkurs übertragen. Bei den Oberstufenkursen gibt es ebensolche Materialkurse, die aber nur von der jeweiligen Fachgruppe betreut werden.

Da hat Moodle echt tolle Features - und wenn man das jetzt noch schulübergreifend tauschen würde…

Viele Grüße
Thomas

Hallo Thomas… das wäre meine Frage gewesen: Wie läuft das im nächsten Schuljahr, wenn die Zuordnung Lehrer ↔ Klasse wieder eine andere ist? Das Material bleibt? Oder wie habt ihr das vorgesehen?

Die Kurse wachsen hoch (an der Struktur sieht man ja, dass wir die IDs an die Jahrgänge binden - die sichtbaren Namen werden dann nur geändert. Die Lehrkräfte werden entsprechend umgeschrieben. Da wir das zum ersten Mal machen, haben wir das mit dem Material noch nicht entschieden - aber man kann die Fächer-Bereiche per REST auch löschen… das scheint mir zum Schuljahresstart eine gute Variante. Bis dahin muss dann ggf. das Material gesichert sein.

Oder die neuen Lehrkräfte entscheiden selbst, wie es weitergeht, welches Material gelöscht wird und was (zur Wiederholung) bleibt. Und die Fachgruppen kümmern sich halt um die Pflege der „Materialkurse“.

Früher hatten wir mal Versuche mit „Fächerkursen“ mit dauerhaft zugänglichem Material - aber da fühlte sich nie jemand zuständig und auch die Schüler sind dort eher selten gelandet.

Aber da sind wir eben auch am Probieren (und versuchen, möglichst viele zu hören und mitzunehmen).

Viele Grüße
Thomas

2 „Gefällt mir“

Hi @thoschi,

ich liebe die Mindmap: so eine durchdachte und schöne Struktur. Vielen Dank.
<ironie>
und dann dieser zeitlos betitelte Wurzelknoten. Genial. Erinnert mich an… moment


</ironie>

Danke, Thomas!
Edit: jetzt hab ich extra ironie-tags gemacht und jetzt werden die auch noch interpretiert!

Gehe ich recht in der Annahme, dass das nicht nur bei Klassen sondern auch bei den gemischten Lerngruppen geht (du nennst sie „Kurse“) in der Mindmap?

nochmal: super! das erspart vielen massive Kopfschmerzen „Wie organisier ich das?“

VG, Tobias

Hallo zusammen,

nun habe ich die ersten Ferientage genutzt und mir das mal genau angesehen. Ich habe unser Belwü-Moodle mit „Bordmitteln“ und einem weiteren Plugin so konfiguriert, dass:

  • die User mit dem LDAP synchron gehalten werden
  • die globalen Gruppen mit den LDAP-Gruppen synchron gehalten werden
  • man die Teilnehmer eines Kurses mit einer globalen Gruppe synchronisieren kann

Das Vorgehen für die LMN 7 und die LMN 6.2 habe ich hier dokumentiert:

https://wiki.linuxmuster.net/community/anwenderwiki:webapps:moodle:moodle_extern_ldap:start

Vor allem für die LMN 7 ist das ziemlich schnell gemacht. Bei der 6.2 geht es im Prinzip genauso schnell, ich war aber mit dem Ergebnis nicht zufrieden. Im Abschnitt „Feintuning“ kann man das noch aufhübschen.

Der Wiki-Artikel ist eher länglich, was aber nicht daran liegt, dass es viel Arbeit ist, sondern dass ich einfach viel dazu geschrieben habe.

Ausführlich getestet habe ich es mit unserer LMN 6.2, für die LMN 7 htte ich nur eine Testinstallation zur Hand. Es sollte aber funktionieren™.

Beste Grüße

Jörg

6 „Gefällt mir“

Hallo zusammen,

falls jemand sein Moodle bei Belwü hat und seine Globalen Gruppen so mit dem Server abgleicht wie hier beschrieben:

Nach dem Upgrade auf Moodle 3.9 in den letzten Tagen musste ich musste ich lediglich das Plugin neu installieren, sämtliche Einstellungen sind erhalten geblieben. Auf der zitierten Seite habe ich einen kleinen Abschnitt dazu ergänzt.

Beste Grüße

Jörg

2 „Gefällt mir“