====== Classroom50: Moodle sync einrichten ====== Diese Seite erklärt, wie die Noten aus Classroom 50 automatisch ins Moodle-Notenbuch kommen. Der Übertrag läuft **nachts**, du musst nichts von Hand starten. ===== Voraussetzungen ===== * Die Organisation ist in GitHub und Classroom50 erstellt [[.:setup]]. * Die Klasse ist erstellt [[.:classes]]. * Die Assignments sind erstellt — inklusive //external assignment// in Moodle [[.:assignments]]. ===== 1. Workflow ins Repo kopieren ===== ''moodle-sync.yaml'' ist **BZZ-eigen** und wird //nicht// von Classroom50 mitgeliefert. Du kopierst sie einmal pro Config-Repo von Hand hinein — die Vorlage liegt im Repository [[https://github.com/BZZ-Commons/pygrader50|BZZ-Commons/pygrader50]] im Ordner ''classroom50/''. - Öffne das Repository ''classroom50'' in deiner GitHub-Organisation, z.B. ''https://github.com/m320-ix25/classroom50''. - Kopiere ''moodle-sync.yaml'' nach ''.github/workflows/moodle-sync.yaml''. - Committen. Der Workflow erscheint danach unter **Actions → Moodle Sync**. Den Dateinamen so lassen und **keine bestehende Workflow-Datei** dafür verwenden: Classroom50 überschreibt seine eigenen Workflows bei einem Update. Die Datei gilt für **alle** Klassen im Repo — eine Kopie genügt, auch bei mehreren Klassenordnern. ===== 2. Zugangsdaten hinterlegen ===== Ebenfalls im Repo ''classroom50'', unter **Settings → Secrets and variables → Actions**: ^ Art ^ Name ^ Wert ^ | Secret | ''MOODLE_TOKEN'' | Webservice-Token aus Moodle | | Variable | ''MOODLE_URL'' | ''https://moodle.bzz.ch'' | Oder im Terminal: gh secret set MOODLE_TOKEN --repo /classroom50 gh variable set MOODLE_URL --repo /classroom50 --body "https://moodle.bzz.ch" Der Token gehört **nur** ins ''classroom50''-Repo, nie in ein Repo der Lernenden — damit lassen sich Noten für beliebige Personen setzen. ===== 3. Zuordnung prüfen ===== Damit eine Note ankommt, muss die Person in Moodle gefunden werden: - Die lernende Person hat ihren **GitHub-Login im Moodle-Profil** eingetragen, im Feld //GitHub Classroom// → [[howto:git:github_moodle|Anleitung]]. - Die Person ist **im Moodle-Kurs eingeschrieben**. - Die Aktivität //external assignment// heisst **exakt wie der Slug** der Aufgabe, z.B. ''m323-lu01-a02-imperativer-ggt''. Der Moodle-Benutzername spielt keine Rolle — gesucht wird nur im Profilfeld. ===== 4. Testen ===== Im Repo ''classroom50'' unter **Actions → Moodle Sync → Run workflow**, Häkchen bei ''dry_run'' (zeigt nur an, schreibt nichts): Moodle-Übertrag: 2 Abgaben [dry-run] / anna: 5/7 [dry-run] / bruno: 7/7 übertragen: 2 | unverändert: 0 | fehlgeschlagen: 0 Sieht das gut aus, dasselbe ohne ''dry_run'' laufen lassen. Danach ist die Einrichtung fertig. Zum Testen einen **echten Login einer lernenden Person** nehmen. Der eigene Lehrer-Account ist im Kurs meist kein Teilnehmer — der Test scheitert dann, obwohl alles richtig eingerichtet ist. ===== Ab jetzt automatisch ===== ^ Wann ^ Was ^ | nachts | Classroom 50 sammelt alle Abgaben ein | | 04:57 | ''moodle-sync'' trägt sie ins Moodle-Notenbuch ein | Übertragen wird pro Person und Aufgabe die **neueste** Abgabe, zusammen mit Punktzahl, Feedback und Link zur Abgabe. Schon Übertragenes wird übersprungen — ausser die Punktzahl hat sich geändert. Zwischendurch von Hand: **Actions → Moodle Sync → Run workflow**. Der Schalter ''force'' sendet auch schon Übertragenes nochmals. ===== Wenn etwas nicht klappt ===== ^ Meldung / Symptom ^ Das hilft ^ | kein Eintrag **Moodle Sync** unter Actions | Schritt 1 nachholen | | ''No Moodle user found with username "X"'' | Person trägt ihren GitHub-Login im Moodle-Profil nach | | ''No matching assignment found'' | Aktivitätsname stimmt nicht **oder** Person ist nicht im Kurs — beides prüfen | | ''keine XML-Antwort erhalten'' | ''MOODLE_URL'' oder Token falsch | | Note kommt nicht an, Log sagt „unverändert" | nochmals auslösen, diesmal mit ''force'' | | Nachtlauf jede Nacht rot, immer dieselbe Person | alter Eintrag in ''scores.json'', siehe [[https://github.com/BZZ-Commons/pygrader50/blob/main/docs/betrieb.md|Betrieb]] | ===== Details ===== * [[https://github.com/BZZ-Commons/pygrader50/blob/main/docs/moodle.md|Moodle]] — Hintergründe, alle Felder, Zustandsfile * [[https://github.com/BZZ-Commons/pygrader50/blob/main/docs/einrichtung.md|Einrichtung]] — vollständige Einrichtung inkl. Autograder * [[https://github.com/BZZ-Commons/pygrader50/blob/main/docs/cli.md|CLI-Referenz]] — Übertrag lokal prüfen, alle Optionen * [[.:hilfe|Hilfe und Dokumentation]] — Übersicht über die ganze Dokumentation