Moodle — Integration
OpenVLE kann mit einer bestehenden Moodle-Instanz verbunden werden, um Kurse und Teilnehmer automatisch zu synchronisieren. Diese Anleitung beschreibt die Einrichtung und Funktionsweise der Integration.
Die Moodle-Integration ist optional. Bei Nichtverwendung werden sämtliche Moodle-bezogenen Elemente (Kurs-Zuordnung, Teilnehmer-Synchronisation) in der Benutzeroberfläche nicht angezeigt. Es ist keine Konfiguration nötig — die Integration ist standardmäßig deaktiviert.
Voraussetzungen
Moodle-Seite
- Moodle 4.x (oder höher) mit aktiviertem Web-Services-Plugin
- Ein API-Token mit folgenden Berechtigungen (Web Service Functions):
core_webservice_get_site_infocore_course_get_coursescore_course_search_coursescore_course_get_courses_by_fieldcore_course_create_coursescore_course_update_coursescore_course_duplicate_coursecore_course_delete_coursescore_course_get_categoriescore_enrol_get_enrolled_usersenrol_manual_enrol_usersenrol_manual_unenrol_userscore_user_create_userscore_user_get_users_by_field
- Das Manual Enrolment Plugin muss in Moodle aktiviert sein
API-Token erstellen
- Moodle-Administration > Website-Administration > Server > Webservices > Externe Dienste
- Neuen Dienst erstellen (z.B. "OpenVLE API")
- Die oben genannten Funktionen zum Dienst hinzufügen
- Unter Manage Tokens ein Token für einen Admin-Benutzer generieren
- Das Token kopieren und als
MOODLE_TOKENin der.env-Datei des Backends hinterlegen
Konfiguration
Trage die Moodle-Verbindungsdaten in die .env-Datei des Backends ein. Die vollständige Referenz aller Umgebungsvariablen findest du unter Konfiguration.
| Variable | Beschreibung | Beispiel |
|---|---|---|
MOODLE_ENABLED | Moodle-Integration aktivieren | "True" |
MOODLE_URL | URL der Moodle-Instanz (ohne trailing slash) | "https://moodle.example.com" |
MOODLE_TOKEN | Web Services API Token | "abc123def456" |
MOODLE_VERIFY_SSL | SSL-Zertifikat verifizieren | "True" |
MOODLE_TIMEOUT | Timeout für API-Anfragen in Sekunden | "30" |
MOODLE_SYNC_TIMEOUT | Timeout für Synchronisationsaufgaben in Sekunden | "10" |
MOODLE_USER_AUTH | Authentifizierungsmethode für neu erstellte Moodle-Benutzer (z. B. ldap, oauth2, manual) | "ldap" |
MOODLE_USER_MATCH_FIELD | Feld zum Abgleich von OpenVLE- und Moodle-Benutzern (email oder username) | "email" |
MOODLE_COURSE_VISIBLE | Sichtbarkeit von duplizierten Moodle-Kursen | "True" |
MOODLE_DELETE_COURSE_ON_EVENT_DELETE | Moodle-Kurs löschen wenn Veranstaltung gelöscht wird | "False" |
Die Variablen müssen — wie bei allen Backend-Variablen — in Anführungszeichen gesetzt werden.
Verifizierung
- Backend-Logs auf erfolgreiche Moodle-Verbindung prüfen:
docker logs openvle-backend 2>&1 | grep -i moodle
- Moodle-Kurse abrufen — über die OpenVLE-API prüfen, ob die Verbindung steht:
Dieser Endpunkt sollte eine Liste der verfügbaren Moodle-Kurse zurückgeben.GET /v1/moodle/courses
- Test-Veranstaltung mit Moodle-Kurs-Zuordnung erstellen und prüfen, ob der Moodle-Kurs bei Deployment korrekt dupliziert wird.
Funktionsweise
Moodle-Kurs-Zuordnung
Jede OpenVLE-Umgebung kann mit einem Moodle-Kurs verknüpft werden, indem das Feld moodleCourseId gesetzt wird. Diese Moodle-Kurs-ID dient als Vorlage (Template).
Über den API-Endpunkt GET /v1/moodle/courses können verfügbare Moodle-Kurse durchsucht werden (benötigt die Berechtigung moodle_read).
Veranstaltungsstart (Deployment)
Wenn eine Veranstaltung gestartet wird und die zugehörige Umgebung eine moodleCourseId hat:
- Moodle-Kurs-Duplikation — Der Moodle-Vorlagenkurs wird dupliziert. Der neue Moodle-Kurs erhält den Namen und Slug der Veranstaltung.
- Benutzer-Erstellung — Für jeden Teilnehmer wird geprüft, ob er in Moodle existiert (Abgleich über
MOODLE_USER_MATCH_FIELD). Falls nicht, wird der Benutzer automatisch erstellt. - Einschreibung — Alle Teilnehmer werden in den neuen Moodle-Kurs eingeschrieben:
- Rolle Lehrende → Moodle-Rolle Editing Teacher (Role ID 3)
- Rolle Studierende → Moodle-Rolle Student (Role ID 5)
Der Fortschritt wird als Task/SubTask in OpenVLE getrackt.
Teilnehmer hinzufügen (aktive Veranstaltung)
Wird ein Teilnehmer zu einer aktiven Veranstaltung mit Moodle-Kurs hinzugefügt:
- Der Benutzer wird bei Bedarf in Moodle erstellt
- Der Benutzer wird in den Moodle-Kurs eingeschrieben
Teilnehmer entfernen (aktive Veranstaltung)
Wird ein Teilnehmer aus einer aktiven Veranstaltung mit Moodle-Kurs entfernt:
- Der Benutzer wird aus dem Moodle-Kurs ausgeschrieben (
unenrol)
Beim Ausschreiben gehen Abgaben, Noten und Lernfortschritt im Moodle-Kurs verloren. Dies ist eine Einschränkung der Moodle-REST-API, die derzeit keine Möglichkeit bietet, eine Einschreibung zu deaktivieren ohne eine Benachrichtigungs-E-Mail auszulösen (siehe MDL-70582).
Veranstaltungsende (Archivierung)
Wenn eine Veranstaltung beendet wird:
- Alle Studierenden werden aus dem Moodle-Kurs ausgeschrieben
- Lehrende bleiben eingeschrieben
- Der Moodle-Kurs wird auf nicht sichtbar gesetzt
Veranstaltung löschen
Wenn MOODLE_DELETE_COURSE_ON_EVENT_DELETE=True gesetzt ist, wird der Moodle-Kurs beim Löschen der Veranstaltung ebenfalls gelöscht. Standardmäßig bleibt der Moodle-Kurs erhalten.
Berechtigungen
Für die Moodle-Integration wird die ObjectPermission moodle_read benötigt, um Moodle-Kurse über die API durchsuchen zu können. Diese Berechtigung muss den entsprechenden Rollen zugewiesen werden.
Fehlerbehebung
| Problem | Lösung |
|---|---|
Failed to connect to Moodle | MOODLE_URL und MOODLE_TOKEN prüfen. Ist die Moodle-Instanz erreichbar? |
Moodle API Error [invalidtoken] | Token ist ungültig oder abgelaufen. Neues Token in Moodle generieren. |
Moodle API Error [invalidparameter] | Eine der übergebenen Werte ist ungültig. Logs prüfen. |
Moodle API Error [accessexception] | Das Token hat nicht alle benötigten Web Service Functions. Dienst-Konfiguration prüfen. |
Model with name: Moodle does not exist | ObjectPermission für "Moodle" fehlt. Wurde das Backend aktualisiert? |
| Benutzer wird in Moodle nicht gefunden | MOODLE_USER_MATCH_FIELD prüfen. Stimmen E-Mail/Username in beiden Systemen überein? |
| Benutzer-Erstellung schlägt fehl | MOODLE_USER_AUTH muss mit dem Auth-Plugin in Moodle übereinstimmen (z. B. ldap). |