Moodle-PluginFragensammlung, Moodle 4.5 und 5.0, Version 1.0.43

Kurzbeschreibung

Question Hub (qbank_questionhub) ist ein Plugin für die Moodle-Fragensammlung. Damit suchen Sie Fragenpakete im Question Hub, importieren sie mit einer Vorschau in Ihren Kurs und veröffentlichen eigene Kategorien als Pakete, die andere Lehrpersonen in ihr Moodle übernehmen können.

Der Question Hub unter hub.cblum.ch ist ein eigenständiger Dienst, der ebenfalls von Cyril Blum betrieben wird. Das Plugin richtet sich an Lehrpersonen an Schweizer Gymnasien und verlangt Moodle 4.5 oder neuer. Geprüft ist es mit Moodle 4.5 und 5.0.

Screenshots

Die beiden Bilder sind dieselben wie im Moodle-Plugin-Verzeichnis. Cyril Blum hat sie am 14.10.2026 auf einer Moodle-Testinstallation aufgenommen, im Testkurs DEMO101 mit dem Testkonto «Admin User». Die gezeigten Fragen stammen aus seiner eigenen Fragensammlung. Daten von Schülerinnen und Schülern sind keine zu sehen.

Die Aufnahmen zeigen eine ältere Plugin-Version mit englischer Oberfläche. Einzelne Beschriftungen haben sich seither geändert, zum Beispiel heisst der Status «Synchronised» heute «Linked». Wählen Sie ein Bild für die Vorschau auf dieser Seite. Mit den Pfeilen wechseln Sie zwischen den Aufnahmen.

Ausführliche Beschreibung

In der Fragensammlung eingebaut

Das Plugin ergänzt die Fragensammlung um einen Reiter «Question Hub» mit den Bereichen «Durchsuchen», «Meine Bibliothek» und «Meine Pakete». In der Fragenliste kommen eine Aktion zum Exportieren einzelner Fragen, eine Sammelaktion zum Veröffentlichen ausgewählter Fragen und die Spalte «Hub» dazu. Diese zeigt, ob eine Frage der verknüpften Version auf dem Hub entspricht, seither geändert wurde oder neu ist.

Pakete suchen und importieren

Pakete lassen sich nach Stichwort, Fach, Kursniveau (GF, SF, EF, FF) und Kanton filtern. Sofern die Autorin oder der Autor es erlaubt, zeigt der Hub eine Vorschau der Fragen, ohne Musterlösungen und Feedback. Vor jedem Import sehen Sie, welche Fragen neu dazukommen, welche aktualisiert und welche übersprungen werden. Fragen, die auf dem Hub und in Ihrem Moodle geändert wurden, erscheinen als Konflikt, und Sie entscheiden pro Frage, welche Version gilt oder ob beide bleiben. Übernehmen Sie die Version vom Hub, bleibt Ihre bisherige Version im Versionsverlauf der Frage erhalten. Ohne verknüpftes Hub-Konto können Sie öffentliche Pakete suchen und importieren.

Eigene Kategorien veröffentlichen

Eine Kategorie der Fragensammlung wird mit ihren Unterkategorien als Paket im Format Moodle-XML veröffentlicht. Sie geben Titel, Zusammenfassung, Versionshinweis, Tags, Fach, Niveau und Kanton an und wählen eine Lizenz (CC BY 4.0, CC BY-SA 4.0 oder CC0) sowie die Sichtbarkeit. Öffentliche Pakete sind offene Bildungsressourcen, private sind nur für Personen sichtbar, deren Zugriffsanfrage Sie annehmen. Optional überträgt der Hub jede Version zusätzlich in ein GitHub-Repository.

Versionen, Push und Pull

Versionsnummern folgen dem Schema 1.2.3 und sind unveränderlich. Mit «Push» veröffentlichen Sie lokale Änderungen als neue Version, mit «Pull» übernehmen Sie eine neuere Version vom Hub. Vor einem Push zeigt das Plugin die geänderten Fragen Zeile für Zeile. Unter «Änderungen prüfen» behalten oder verwerfen Sie lokale Änderungen einzeln. Ältere Versionen lassen sich mit Vorschau wiederherstellen, und Sie können einzelne Versionen oder ein ganzes Paket vom Hub zurückziehen. Bereits importierte Fragen bleiben in den anderen Moodle-Installationen bestehen.

Varianten und Änderungsvorschläge

Aus einem importierten Paket können Sie eine eigene Variante auf dem Hub erstellen. Ihre Kategorie ist danach mit der Variante verknüpft, und Ihre Änderungen schlagen Sie dem Original über den Hub vor. Eine Variante behält die Lizenz des Originals und nennt es als Quelle. Mit «Variante wechseln» verknüpfen Sie eine Kategorie nach einer Vorschau mit dem Original oder einer anderen Variante.

Aufräumen

Das Plugin findet identische Duplikate und behält jeweils die älteste Frage. Gleichnamige Fragen mit unterschiedlichem Inhalt in derselben Kategorie zeigt es zum Vergleich an. Fragen, die in einem Test verwendet werden, löscht es nie.

Rechte und Sicherung

Suchen und Exportieren dürfen standardmässig Lehrpersonen, Importieren und Veröffentlichen Lehrpersonen mit Bearbeitungsrecht und Manager. Eine Moodle-Sicherung mit Fragen enthält auch die Verknüpfungen zum Hub, sodass sie nach einer Wiederherstellung erhalten bleiben. Wie Konten verknüpft und Inhalte beim Import geprüft werden, zeigen die Abschnitte Datenflüsse und Sicherheit.

Architektur

Question Hub besteht aus dem Plugin und dem Hub. Das Plugin ist die einzige Komponente, die in einem Schul-Moodle installiert wird. Der Hub unter hub.cblum.ch ist eine eigene Webplattform mit API, die Konten und Fragenpakete in Versionen speichert. Jedes Moodle mit Plugin kann Pakete veröffentlichen und importieren.

Architektur: Schul-Moodle mit Plugin, Browser der Lehrperson, Question Hub, optional GitHub und E-Mail. Pfeile zeigen, wer die Verbindung aufbaut.SCHULESchul-MoodlePlugin qbank_questionhubFragensammlung der KurseKonten und Noten bleiben hierBrowser der LehrpersonMoodle-Oberfläche,Anmeldung beim HubHUB.CBLUM.CHQuestion HubWebseite und APIKonten der LehrpersonenPaketangaben, Rollen undZugriffsanfragenFragenpakete als Moodle-XML,Versionen unveränderlich,mit SHA-256-PrüfsummeGitHuboptional, pro PaketRepository derPaketverantwortlichenE-MailPasswort-Reset,Zugriffsanfragen,ÄnderungsvorschlägeHTTPSHTTPSHTTPSHTTPSSTARTTLSArchitektur: Schul-Moodle mit Plugin, Browser der Lehrperson, Question Hub, optional GitHub und E-Mail. Pfeile zeigen, wer die Verbindung aufbaut.Browser der LehrpersonSCHULESchul-MoodlePlugin qbank_questionhubFragensammlung der KurseHUB.CBLUM.CHQuestion HubWebseite und API, KontenPaketangaben und RollenFragenpakete als Moodle-XML,Versionen mit SHA-256GitHuboptional,pro PaketE-MailPasswort-Reset,ZugriffsanfragenHTTPSHTTPSHTTPSHTTPSSTARTTLS
Die Pfeile zeigen, wer eine Verbindung aufbaut. Alle Verbindungen gehen vom Schul-Moodle oder vom Browser der Lehrperson aus, der Hub baut keine Verbindung zum Schul-Moodle auf. Das Moodle braucht deshalb nur ausgehend HTTPS zu hub.cblum.ch. Die Fragen fliessen je nach Aktion in beide Richtungen.
Im Schul-Moodle

Plugin qbank_questionhub

Reiter «Question Hub» in der Fragensammlung, Spalte «Hub» in der Fragenliste, Import mit Vorschau und Veröffentlichen. In eigenen Tabellen speichert es Tokens, ein Protokoll und die Zuordnung von Fragen zu Paketversionen.

Eigener Dienst

Question Hub

Webseite und API für Konten, Pakete, Versionen, Varianten und Änderungsvorschläge. Öffentliche Pakete lassen sich ohne Konto durchsuchen und importieren. Ein Hub-Konto braucht, wer veröffentlicht oder private Pakete nutzt.

Optional

GitHub-Spiegel

Wer ein Paket verwaltet, kann es mit einem eigenen GitHub-Repository verknüpfen. Der Hub legt dann jede neue Version dort als XML-Datei ab und setzt ein Versions-Tag. Das Plugin selbst verbindet sich nie mit GitHub.

Datenflüsse

Veröffentlichen und Push

  1. Sie wählen eine Kategorie oder einzelne Fragen und geben die Paketangaben ein.
  2. Das Plugin exportiert die Fragen als Moodle-XML und prüft das Paket vorab.Prüfung im Plugin
  3. Das Moodle sendet das Paket mit Ihrem Token an den Hub.HTTPSToken
  4. Der Hub prüft XML, Grösse, Fragetypen und Medien und speichert eine neue, unveränderliche Version.SHA-256
  5. Ist das Paket mit GitHub verknüpft, überträgt der Hub die Version zusätzlich ins Repository.optional

Importieren und Pull

  1. Sie suchen ein Paket. Öffentliche Pakete finden Sie auch ohne verknüpftes Konto.
  2. Das Moodle lädt die gewählte Version vom Hub.HTTPS
  3. Das Plugin prüft das Paket und entfernt aktive Inhalte, wenn die Einstellung eingeschaltet ist.Prüfung im Plugin
  4. Die Vorschau zeigt neue, aktualisierte und übersprungene Fragen sowie Konflikte.
  5. Nach Ihrer Bestätigung kommen die Fragen in die Fragensammlung. Die bisherige Version einer aktualisierten Frage bleibt im Versionsverlauf.

Die beiden Abläufe zeigen, wohin die Fragen gehen. Die Verbindung baut auch beim Import das Moodle auf.

Anmeldung: Moodle-Konto mit Hub-Konto verknüpfen

Zum Veröffentlichen, für Push und für private Pakete verknüpft jede Lehrperson ihr Moodle-Konto mit ihrem Hub-Konto. Dafür gibt es zwei Wege. Das Moodle-Passwort geht dabei nie an den Hub, und das Hub-Passwort wird nie im Moodle eingegeben.

Weg A

OAuth 2.0 mit PKCE

Sie wählen im Plugin «Mit Question Hub verbinden» und melden sich direkt auf hub.cblum.ch an. Das Moodle erhält ein Token, das 30 Tage gilt. Die Adresse Ihres Moodle muss dafür auf dem Hub freigegeben sein. Beim Trennen widerruft der Hub das Token.

Weg B

Persönliches Zugriffstoken

Sie erstellen im Hub ein Token mit wählbarer Laufzeit und fügen es im Plugin ein. Das geht auch ohne Freigabe Ihres Moodle. Der Hub speichert nur einen SHA-256-Hash des Tokens. Beim Trennen löscht das Plugin das Token in Moodle, auf dem Hub löschen Sie es selbst.

Verknüpfung per OAuth 2.0 mit PKCE in acht Schritten zwischen Schul-Moodle, Browser und Question HubSchul-MoodleBrowserQuestion Hub1 Geheimwert erzeugen2 Weiterleitung mit Hash des Geheimwerts3 Anmeldung mit Hub-Konto4 Einmaliger Code zurück ans Moodle5 Code und Geheimwert, Server zu Server6 Token mit Hub-Kennung, Name, E-Mail7 Jede weitere Anfrage mit dem Token8 Beim Trennen: Token widerrufen
Blaue Pfeile sind Anfragen, orange Pfeile Antworten, Punkte markieren den Weg über den Browser. Den einmaligen Code aus Schritt 4 kann nur einlösen, wer auch den Geheimwert aus Schritt 1 kennt (PKCE, RFC 7636). Dieser Geheimwert verlässt den Moodle-Server erst in Schritt 5, direkt an den Hub. Der Code gilt zehn Minuten und nur einmal.

Mit der Einstellung «Individuelle Lehrpersonen-Kontoverknüpfung erlauben» kann die Administration die Verknüpfung abschalten. Lehrpersonen können dann nur öffentliche Pakete suchen und importieren.

Sicherheit und Verschlüsselung

Die Karten zeigen, wie Plugin und Hub Verbindungen, Zugangsdaten und Pakete schützen. Die gelbe Karte nennt, was bewusst nicht eingesetzt wird.

Transport

Plugin und Browser sprechen mit dem Hub über HTTPS, die voreingestellte Hub-Adresse ist https://hub.cblum.ch. Der Hub nimmt nur TLS 1.2 und 1.3 an, leitet HTTP auf HTTPS um und sendet HSTS (geprüft am 12.11.2026).

Tokens

OAuth-Tokens gelten 30 Tage und werden beim Trennen auf dem Hub widerrufen. Persönliche Zugriffstokens speichert der Hub nur als SHA-256-Hash. In der Moodle-Datenbank liegt das Token ohne zusätzliche Verschlüsselung und ist so gut geschützt wie die Datenbank selbst.

Hub-Konten

Passwörter speichert der Hub als scrypt-Hash mit eigenem Salt. Anmeldung und Registrierung verlangen ein Captcha und sind pro Client begrenzt. Ein Link zum Zurücksetzen des Passworts gilt eine Stunde und nur einmal, gespeichert ist nur sein SHA-256-Hash.

GitHub-Token

Wer den GitHub-Spiegel nutzt, hinterlegt auf dem Hub ein GitHub-Token. Der Hub speichert es mit AES-256-GCM verschlüsselt und braucht es nur für Commits über die GitHub-API per HTTPS.

Paketversionen

Veröffentlichte Versionen sind unveränderlich, eine Korrektur ergibt eine neue Versionsnummer. Der Hub berechnet für jede Version eine SHA-256-Prüfsumme und gibt sie beim Herunterladen mit. Geänderte Fragen erkennt das Plugin über eigene SHA-256-Werte des Frageninhalts.

XML-Prüfung

Plugin und Hub lehnen XML mit DOCTYPE-, ENTITY- oder XInclude-Angaben ab. Geprüft werden unter anderem Multiple Choice, Wahr/Falsch, Kurzantwort, Numerisch, Zuordnung, Lückentext (Cloze) und Freitext, eingebettete Bilder und Dateien, Grössengrenzen (50 MB pro Paket, 10 MB pro Datei) sowie Skripte in SVG-Dateien.

Aktive Inhalte

Weil auf dem Hub alle veröffentlichen können, entfernt das Plugin aktive Inhalte wie Skripte und eingebettete Frames standardmässig mit der HTML-Bereinigung von Moodle. Für CodeRunner-Fragen kann die Administration eine Ausnahme einschalten. Bleiben aktive Inhalte erhalten, muss die Lehrperson den Import ausdrücklich bestätigen. Skripte, die erst zur Laufzeit entstehen, erkennt die Prüfung nicht.

Prüfung des Codes

Eine Eigenprüfung vom 26.10.2026 mit KI-Unterstützung und Standardwerkzeugen fand sieben Befunde, behoben in Version 1.0.33. Jede Änderung durchläuft auf GitHub Tests mit Moodle 4.5 und 5.0, die Prüfung des Moodle-Codestils und Semgrep. Ein unabhängiges Audit oder einen Penetrationstest gab es nicht.

Grenzen

Nicht eingesetzt

Die Pakete tragen keine digitale Signatur. Die Prüfsumme zeigt, ob eine Datei verändert wurde, schützt aber nicht vor einem manipulierten Hub. E-Mails des Hubs sind nur auf dem Weg zum Mailserver verschlüsselt (STARTTLS), nicht Ende-zu-Ende.

Installation und Konfiguration

Installieren Sie das Plugin über das Moodle-Plugin-Verzeichnis oder legen Sie den Quellcode von GitHub im Ordner question/bank/questionhub Ihrer Moodle-Installation ab:

git clone https://github.com/CyrilBlum/moodle-qbank_questionhub.git question/bank/questionhub
php admin/cli/upgrade.php --non-interactive
php admin/cli/purge_caches.php

Die Einstellungen finden Sie in der Website-Administration bei den Plugins der Fragensammlung unter «Question Hub»:

  • Hub-Adresse, voreingestellt https://hub.cblum.ch.
  • OAuth-2.0-Client-ID, voreingestellt moodle-plugin-client. Ändern Sie sie nur auf Anweisung des Hub-Betreibers.
  • Kontoverknüpfung für Lehrpersonen erlauben (eingeschaltet). Ist sie aus, können Lehrpersonen nur öffentliche Pakete suchen und importieren.
  • Aktive Inhalte beim Import entfernen (eingeschaltet).
  • Aktive Inhalte in CodeRunner-Fragen behalten (ausgeschaltet), eine Ausnahme zur vorherigen Einstellung.

Mit «Verbindung testen» prüfen Sie, ob der Hub erreichbar und Ihr eigenes verknüpftes Konto gültig ist. Damit Lehrpersonen ihr Konto per OAuth verknüpfen können, muss die Adresse Ihres Moodle auf dem Hub freigegeben sein. Schreiben Sie dazu an apps@cblum.ch. Ein Konto auf dem Hub legen Sie unter hub.cblum.ch an.

Dateien

Das Plugin folgt dem üblichen Aufbau eines Moodle-Plugins:

Grundgerüst

  • version.php: Name, Version und benötigte Moodle-Version.
  • settings.php: Einstellungen in der Website-Administration.

Seiten

  • view.php: Hub-Ansicht mit Suche, Import, Bibliothek und eigenen Paketen.
  • publish.php: Kategorien und Fragen exportieren und veröffentlichen.
  • review.php: lokale Änderungen seit der verknüpften Version prüfen.
  • variants.php: gleichnamige Fragen mit unterschiedlichem Inhalt vergleichen.
  • oauth_callback.php und disconnect.php: Hub-Konto verknüpfen und trennen.
  • testconnection.php: Verbindungstest aus den Einstellungen.

Programmlogik

  • classes/: Programmlogik, darunter der Hub-Client (api_client.php), Anmeldung und Tokens (auth_manager.php), Export (package_exporter.php), Import (package_importer.php, qformat_xml_importer.php), die Importprüfung (preflight_validator.php), Versionsvergleich und Verknüpfungen (release_diff.php, local_changes.php, publication_tracker.php), Duplikate (duplicate_manager.php), die Einbindung in die Fragensammlung (plugin_feature.php, navigation.php, question_action.php, bulk_publish_action.php, question_sync_column.php) und die Datenschutz-Schnittstelle (privacy/provider.php).

Datenbank und Sicherung

  • db/: Rechte (access.php), Datenbanktabellen (install.xml) und Aktualisierungsschritte (upgrade.php).
  • backup/moodle2/: Sicherung und Wiederherstellung der Hub-Verknüpfungen.

Oberfläche

  • templates/: Mustache-Vorlagen der Oberfläche.
  • amd/src/ und amd/build/: JavaScript-Module und ihre minimierten Fassungen.
  • lang/en/ und lang/de/: englische und deutsche Texte.
  • pix/, styles.css: Symbol und Darstellung.

Werkzeuge und Tests

  • cli/: Export, Import und Selbsttest über die Kommandozeile.
  • tests/ und .github/workflows/: automatische Tests, die auf GitHub mit Moodle 4.5 und 5.0 laufen.

Datenschutz

Im Schul-Moodle

Plugin-Tabellen

  • Hub-Zugriffstoken pro verknüpfter Person, mit Hub-Benutzerkennung, E-Mail-Adresse und Anzeigename des Hub-Kontos
  • Protokoll der Importe und Veröffentlichungen mit Moodle-Benutzer-ID, Paketkennung, Version, Aktion und Zeitpunkt
  • Zuordnung importierter Fragen zu Paketversionen

Die Datenschutz-Schnittstelle von Moodle kann diese Angaben exportieren und löschen.

An den Hub

Was das Plugin sendet

  • das Zugriffstoken, aber nicht Moodle-Benutzername, Name oder E-Mail-Adresse aus Moodle
  • Fragen und Paketangaben nur, wenn jemand ein Paket veröffentlicht, pusht, als Variante kopiert oder bearbeitet
  • bei der Verknüpfung per OAuth die Adresse des Moodle als Rücksprungadresse
Auf dem Hub

Eigener Dienst

  • Hub-Konto mit E-Mail-Adresse, Name, Schule, Kanton und Passwort-Hash
  • Pakete mit allen Versionen, Mitwirkende und Zugriffsanfragen

Der Hub ist ein eigener Dienst mit eigener Datenbearbeitung.

Wichtig

Keine Personendaten in Fragen

Fragen dürfen keine Personendaten enthalten, also keine Namen oder Noten von Schülerinnen und Schülern, auch nicht in Bildern oder Feedback. Das Plugin weist darauf hin, technisch verhindern kann es das nicht. Quizversuche, Antworten, Noten und Teilnehmerlisten überträgt das Plugin nie.

Nutzung und Haftung

Der Hub kann zeitweise nicht erreichbar sein, und Pakete können von ihren Autorinnen und Autoren zurückgezogen werden. Bereits importierte Fragen bleiben in Ihrem Moodle. Für Inhalte, die Sie veröffentlichen, sind Sie selbst verantwortlich, auch für Urheberrechte und die gewählte Lizenz. Machen Sie vor grösseren Importen eine Sicherung Ihres Kurses oder Ihrer Fragensammlung.

Die Nutzung erfolgt in eigener Verantwortung. Das Plugin wird im gesetzlich zulässigen Umfang ohne Gewähr für Richtigkeit, Vollständigkeit, Verfügbarkeit oder Eignung für einen bestimmten Zweck bereitgestellt. Soweit gesetzlich zulässig, wird die Haftung für Schäden aus der Nutzung oder Nichtverfügbarkeit ausgeschlossen, insbesondere für Datenverlust, entgangenen Gewinn und Folgeschäden. Zwingende gesetzliche Rechte und Haftung bleiben unberührt, insbesondere bei Absicht oder grober Fahrlässigkeit sowie soweit die Haftung für Personenschäden nicht ausgeschlossen werden darf. Für den Quellcode gilt die GNU General Public License v3 oder später.

Feedback und Entwicklung

Haben Sie einen Fehler gefunden oder eine Idee für Question Hub? Erfassen Sie einen Eintrag in den GitHub Issues des Plugins oder schreiben Sie an apps@cblum.ch.

Die Issues sind öffentlich und ohne Anmeldung lesbar, für einen neuen Eintrag brauchen Sie ein GitHub-Konto. Schreiben Sie dort keine Personendaten.

Quellcode und Links

Repository: öffentlich. Der Quellcode steht unter der GNU General Public License v3 oder später.

Der Quellcode des Hubs liegt in einem eigenen, ebenfalls öffentlichen Repository: Moodle-Question-Hub-Marketplace.

Repository-Status und Links geprüft am 12.11.2026. Im Moodle-Plugin-Verzeichnis veröffentlicht am 11.11.2026. Zur Projektübersicht

EN