Profilbasierte zuweisung zu globalen Gruppen

Hallo zusammen,

… alle Jahre wieder … moodle und die globalen Gruppen.
Gefühlt geht das nie, wenn ich hin schaue …
Jetzt hab ich nach 2 Stunden rumprobieren und aktivieren und laufenlassen von 5 verschiedenen Tasks herausgefudnen: wenn ich einen Schüler in moodle anschaue, dann steht im Profil die richtige Klasse/Lerngruppe, also die die im LDAP steht (nach dem Versetzen, das ich vor ein paar Tagen gemacht habe).
In den „globalen Gruppen“ stehen die Schüler aber noch in ihren alten Gruppen.
Kein Task hat moodle dazu bewegt diese Zuordnung mal zu aktualisieren.
Wenn ich aber das Profil eines Schülers in moodle anschaue (als admin) und dann auf Speichern drücke ohne was zu ändern (stimmte ja alles: Lerngruppe war auch korrekt), dann übernimmt das profilbasierte dingens den Schüler in die richtige globale Gruppe …

Ist es normal, dass die erst dann in ihrer richtigen globalen Gruppe landen, wenn sie sich mal anmelden (ich nehme an, dass es dann passiert).
Oder kennt jemand einen magischen Task der moodle veranlaßt das sofort zu übernehmen?

LG

Holger

Hallo Holger,

bin unterwegs und kann nur aus meiner Erinnerung schreiben.
Es geht nach spätestens 24h so wie geplant. Ich vermute, es ist einer dieser LDAP sync tasks. Jedenfalls waren bei mir die globalen Gruppen befüllt, nachdem ich diesen durch Manipulation der Uhrzeit vorgezogen habe.
Viel Glück
Christian

Hallo Holger,

da müssten zwei Tasks ineinandergreifen:

\auth_ldap\task\sync_task
\local_profilecohort\task\update_cohorts

Zuerst aktualisiert der erste Task das Profilfeld, dann der zweite die Globale Gruppe. Schau mal in die Logs der beiden.

Wenn das nicht klappt, dann lösch mal alle Caches.

Schau auch mal, dass bei der LDAP-Konfiguration bei dem entsprechenden Feld die Option „Bei jedem Login aktualisieren“ gesetzt ist.

Beste Grüße

Jörg

OK, nun habe ich mir das nochmal angesehen:

Das ist ein Bug in der Logik des Plugins. Das Plugin berücksichtigt nicht, dass sich Profilwerte im Hintergrund ändern können.

Für einen einmaligen Durchlauf kann man die Konfiguration des Plugins verändern, dann wird beim nächsten Durchlauf der Task auch wirklich ausgeführt. Alternativ kann man in der Datenbank in der Tabelle mdl_config_plugins den Wert von updatecohorts beim Plugin local_profilecohort auf 1 setzen.

Dauerhaft kann das nur der Entwickler reparieren, siehe dazu:

und auch Issue #48.

Wer sich traut, kann in der folgenden Datei einen Workaround einbauen:

moodle/local/profilecohort/classes/task/update_cohorts.php

Und zwar ganz unten in der Zeile:

set_config('updatecohorts', false, 'local_profilecohort');

aus dem false ein true machen. Konsequenz ist, dass der Task wirklich bei jedem Durchlauf alles prüft und somit teilweise unnötig läuft (bei unserem Belwü-Moodle 0,2 Sekunden, das sollte kein Problem sein). Wer sein Moodle bei Belwü hat, muss das bei jedem Update wiederholen.

Beste Grüße

Jörg

1 „Gefällt mir“

… und für den Workaround muss man natürlich einmalig den Wert in der Datenbank ändern oder was an der Plugin-Konfiguration verändern. Oder man kommentiert alternativ die Abfrage aus.

LG Jörg

Hallo,

nun hatte ich eine Weile Gelegenheit, das bei unserem Belwü-Moodle zu beobachten: Alles läuft ohne erkennbare Nebeneffekte.

Allerdings ist es sinnvoller, die Datei moodle/local/profilecohort/classes/task/update_cohorts.php anders zu modifizieren:

public function execute() {
//     if (get_config('local_profilecohort', 'updatecohorts')) {
        $manager = new profilecohort();
        $manager->update_all_cohorts_from_rules();
        set_config('updatecohorts', false, 'local_profilecohort');
//     }
}

Also einfach die if-Abfrage herausnehmen. Dann muss man ansonsten nichts weiter erledigen.

Beste Grüße

Jörg

1 „Gefällt mir“

Hallo,

kurz nochmal mein Erfahrungsbericht zur profilfeld-basierten Einschreibung in die globalen Gruppen.
Ich habe (und konnte) an den Dateien nichts verändert.
Die globalen Gruppen sind zunächst leer, aber am nächsten Tag sind sie mit den richtigen Personen befüllt.
VG
Christian