Availability API // Anzeige aller zugänglichen Aktivitäten eines Users

Availability API // Anzeige aller zugänglichen Aktivitäten eines Users

von Thomas H -
Anzahl Antworten: 0
Hallo!

Wir möchten Moodle gerne an ein externes System anbinden, in welchem wir eine Liste aller für den jeweiligen User aktuell zugänglichen (damit sind nicht die sichtbaren, sondern tatsächlich aufrufbaren gemeint) Aktivitäten benötigen.

Die Berechtigung zum Aufrufen der konfigurierten Aktivitäten in den in Moodle angelegten Kursen sind voneinander Abhängig.
Teilweise muss zunächst die vorangegangene Aktivität (erfolgreich) abgeschlossen oder zumindest aufgerufen worden sein.
In einigen Fällen ist eine Aktivität auch nur für Mitglieder einer bestimmten Gruppe innerhalb des Kurses sichtbar.

Da scheinbar keine der in Moodle standardmäßig enthaltenen APIs diese Funktion bereitstellt, habe ich begonnen, ein eigenes Plugin zu schreiben, welches u.A. diese Funktion (über den Webservice) zur Verfügung stellt.

Die Availability API stellt einige Funktionen zur Verfügung, deren Dokumentation sich auf den ersten Blick so liest, als wären sie für unsere Problemstellung passend. Leider filtern die Funktionen aber scheinbar allesamt auf das Attribut „visible“ (für den User sichtbar) und nicht - wie von uns benötigt - auf „accessible“ (für den User aufrufbar). $cm->uservisible und $info->filter_user_list() sind also scheinbar nicht die Lösung.

Die einzige Lösung, um die gewünschte Funktionalität abzubilden, scheint mir nun nur folgende:
  • Für jede Kurs-Aktivität-User-Konstellation wird per get_fast_modinfo() das Kursobjekt erstellt
  • Über das Kurs-Objekt holt man sich das Modul-(Aktivitäts)Objekt.
  • Da diese Info-Objekte scheinbar Userbezogen erstellt wird, holt man sich hierüber dann die Eigenschaft „available“
                foreach( $enrolledUsers as $user ) {
                    $mod_course = get_fast_modinfo($course, $user->id);
                    $mod_module = $mod_course->cms[$moduleid];
                   
                    echo $user->id ."=>" . $mod_module->available;
 }

Nun zur eigentlichen Frage:
Lässt sich die Anforderung mittels bordeigener Mittel effizienter lösen?

Wünschenswert wäre eigentlich eine Liste in der Form „User-ID 123 darf Activity-ID 987 aufrufen“:
User-ID;Activity-ID
123;987


Besten Dank und
-gruß

Thomas

Mittelwert:  -