Moodle: Kalender-Abo wird nicht richtig aktualisiert -- und: Nextcloud <-> moodle Differenzen

Hallo.
Wir haben hier immer wieder folgendes Problem: Unser Schulkalender liegt in der Nextcloud und wurde über moodle global für alle abonniert. Meines Wissens wird dazu eine .ics-Datei verwendet.

In der moodle-Verwaltung sieht das dann so aus:

Das Abo und die Aktualisierung funktionieren also. Neue Termine kommen auch problemlos an. Es gibt aber leider immer wieder Probleme, wenn ein schon bestehender Termin nur geändert wird. Solche Änderungen kommen aus irgendwelchen Gründen nicht unter moodle an.

Bestes Beispiel: Ein Kollege hat bei einem Termin in der Beschreibung nur ein Wort hinzugefügt aber alles andere so gelassen. Unter Nextcloud und auf der Webseite steht alles richtig doch unter moodle kommt das (obwohl der Screenshot etwas anderes suggeriert) nicht an.
Kennt jemand das Problem?

Viele Grüße,
Michael

P.S. Wir sind noch bei Version: Moodle 3.11.14+ (Build: 20230504), falls das relevant sein sollte.

Hmm da hat sich nich niemand gemeldet.
Ich mach das mit dem abo in moodle leider net.
Kenne aber das problem mit kalendersynchroniserungen zwischen zwei caldav server was nie so super laeuft… Naja… also meine ideen dazu:

Wenn du das abo raus loescht und manuell wieder hinzufuegst, wird dann alles korrekt neu synchronisiert?
Vielleicht koennte man ja als workaround das mit nem skript irgendwie einmal taeglich so machen lassen?

Ich pushe dieses Thema mal wieder nach oben, weil es wieder ein aktuelles Problem ist bzw weiterhin nicht gefixt ist: Termine werden weiterhin falsch angezeigt, wenn die Datumsgrenze überschritten wird.
Ist das nur bei uns so? Die Zeitzonen stimmen überall…
Es gibt aber Probleme, wenn der Termin für einen ganzen Tag eingetragen ist – also von 0:00 Uhr bis 0:00 Uhr. Das wird von Moodle dann so interpretiert, als gehöre der folgende Tag auch noch dazu. Vor allem beim Anzeigen von freien Tagen führte das bei uns schon öfter zu Missverständnissen bzw Fehlern. Die Schüler legen das dann gerne zu ihren Gunsten aus und sagen (nicht ganz zu Unrecht): „Wieso? Steht doch so im Kalender – da bin ich dann nicht zur Schule gekommen!“ :wink: :man_shrugging:

Nextcloud zeigt den Eintrag leider anders an als moodle.
Wir sind auf Version 4.4.4.x (moodle) und 29.x (NC)

Hier zwei Bilder von der Homepage, die den Effekt zeigen:
Kalender-Eintrag unter Nextcloud durchgeführt und zwar so:

Moodle macht daraus dies:

.

Der Eintrag in der ICS-Datei sieht übrigens so aus – da läuft der Termin einfach vom 03.02. bis zum 05.02 (also ganz ohne Uhrzeiten). Daher ist es auch kein Wunder, dass moodle es falsch interpretiert:

BEGIN:VEVENT
CREATED:20240606T142255Z
LAST-MODIFIED:20240606T142319Z
DTSTAMP:20240606T142319Z
UID:f8b633b1-e757-4e0-9bf6-8e9
SUMMARY:Halbjahresferien 
CATEGORIES:Ferien
DTSTART;VALUE=DATE:20250203    <<<   hier ist der 
DTEND;VALUE=DATE:20250205      <<<   Effekt zu sehen!
TRANSP:TRANSPARENT
END:VEVENT

Hat einer eine Idee, woran das liegen könnte bzw wie man den Effekt beheben kann? Natürlich könnte man bei allen ganztägigen Terminen genau darauf achten, dass sie um 23:59 Uhr enden, aber das ist im hektischen Alltag natürlich nur ein schlechter Workaround.

also ich hab mal versucht, deine Beschreibung nachzumachen.

  • einen zweitägigigen ganztägigen Termin in nextcloud angelegt
  • den termin als ics exportiert. kann denselben Effekt beobachten den du beschreibst
  • dann den Termin als ich Datei in den lokalen Kalender meines MacBooks eingebunden per kalender app. der Termin wird richtig im Kalender angezeigt, wie es in nextcloud war! Also ist wohl Nextcloud ↔ MacOS Konformität zumindest mal da.
    Liegt also das Problem bei Moodle? Habs nun in Moodle auch noch importiert und da wurden dann 3 Tage draus, wie du beschrieben hast. allerdings sind da bei mir die Uhrzeiten 1:00 - 1:00 eingetragen…
    also sieht für mich schon irgendwie nach einen timezone problem aus… in der ice Datei ist ja keine timezone definiert

die weitere Recherche führt mich hierhin:
https://moodle.org/mod/forum/discuss.php?d=267763
was einen Hinweis gibt dass in der php.ini nicht die korrekte Zeitzone einstellt sein könnte??? habs aber noch net getestet…

Ja, die Zeitzone steht offenbar ganz oben in der ICS Datei:

Aber moodle muss das doch eigentlich trotzdem selbst richtig umsetzen, oder?
Also meinst Du auch, dass das ein moodle- und kein NC-Problem ist, ja??!

Hier hat einer das gleiche Problem!

hab nochmal bissle rumgegoogled…
es scheint ein bug in Moodle zu sein mit „All-day-Events“
In einem Beitrag konnte ich sehen dass Nextcloud bei All-Day-Events absichtlich keine Zeitzone festlegt. fix(caldav): Fix reminder timezone drift for all-day events by ChristophWurst · Pull Request #36192 · nextcloud/server · GitHub
Moodleseitig hab ich das gefunden: Also ein „minor Bug“ der schon lange bekannt ist?
https://moodle.org/mod/forum/discuss.php?d=425443

4 Jahre lang nicht gefixt. :thinking::man_shrugging:t2::face_with_peeking_eye:
Das ist aber schade.

Das Problem ist wirklich nervig und führt bei uns zu Verwirrung, die man vermeiden könnte :thinking:

hab mal in dem code gestöbert.
wenn du in der moodlecore Datei (!)die folgende Änderung machst, wird, meine ich, die ics Datei korrekt importiert. aber auf eigenes Risiko :wink:

Das url abonnement hab ich net getestet. da das ding aber auch auf dieselbe Funktion zugreift sollte auch das klappen, denke ich

die Änderung ist einzufügen in der Datei /var/www/moodle/calendar/lib.php
und zwar in der Funktion function calendar_import_events_from_ical , so ca in zeile 3115 (je nach moodle Version leicht verschieden…)

im wesentlichen schaut der code ob beim Termin eine Uhrzeit („hour“) hinterlegt ist. Wenn nein, dann wird die timezone auf servertime festgelegt und beim enddate wird eine Minute abgezogen
ob das eine Lösung wäre die man pushen könnte weiss ich nicht… ist eher so ne Notlösung? auf alle fälle ist der code der lib.php schon etwas älter, würde ich sagen. bin aber kein php Experte…

In moodle sind Ganztages Termine gar nicht existent! dafür gibts kein Häkchen…also ist es wohl auch schwierig mit dem Import :wink:

foreach ($ical->components['VEVENT'] as $event) {
        $icaluuids[] = $event->properties['UID'][0]->value;

        //ab hier den code einfügen
        $res = date_parse($event->properties['DTSTART'][0]->value)['hour'];
        if ($res== FALSE) {
                $timezone = date_default_timezone_get();
                $date = new DateTime($event->properties['DTEND'][0]->value); 
                $date->modify("-1 minute");
                $event->properties['DTEND'][0]->value = $date->format('Ymdhis');
        }
//bis hier code einfügen ab hier Original code
        $res = calendar_add_icalendar_event($event, null, $subscriptionid, $timezone);

Moin. Gute Sache! Super!
Updatefest ist die Änderung aber nicht, fürchte ich?
Kannst Du das nicht als pull request „offiziell einreichen“?

also ich hab das jetzt mal gemacht. musste mich da durch den GitHub Prozess durcharbeiten… bin mal gespannt ob das bearbeitet wird, weil es doch was altes ist und wenig relevant… (votes) ?ausserdem behebt die Lösung nicht das problem dass es nicht rfc compliant ist, es konvertiert ja ein Tages events zu 23:59h events quasi…

Hallo.
Ok, danke. Würde mich auch interessieren, ob die das so umsetzen oder gleich „richtig“ einbauen :man_shrugging: :interrobang:

Dass das Problem soooo klein ist und seit ein paar Jahren nicht bearbeitet wird, kann ich aber gar nicht verstehen?! Ok, für den Betrieb von moodle selbst ist das egal aber es gibt doch sicher viele Schulen/Unis und sonstwas, die die Kalender von irgendwo hereinholen und dann den Schülern innerhalb von moodle zur Verfügung stellen. Die haben dann doch alle das gleiche Problem!?

Ach ja: Als Notlösung haben wir vorerst das Kalender-Abo unter moodle entfernt und verlinken nur noch auf den Nextcloud-Kalender. Das ist natürlich nicht mal halb so elegant…

Viele Grüße,
Michael