Skip to content

Parsen von wiederholenden Ereignissen mit UNTIL führt zu endlosen Wiederholungen #14

@trent2

Description

@trent2

Folgender Code-Abschnitt aus der zu importierenden ICAL-Kalender-Datei (generiert durch Googles Export-Funktion)

BEGIN:VEVENT
DTSTART;VALUE=DATE:20100906
DTEND;VALUE=DATE:20100907
RRULE:FREQ=DAILY;WKST=SU;UNTIL=20100910
[... gekürzt ...]
SUMMARY:some summary text
END:VEVENT

Es gibt kein direktes Äquivalent in Contaos Event-Bearbeiten-Formular für Wiederholungstermine, bei denen ein Endtermin (UNTIL) gesetzt ist (wie sinnvoll eine tägliche Wiederholung vs. einem Termin nur mit "von-bis" ist, sei mal dahingestellt; aber es könnten ja auch andere Frequenzen gesetzt werden).

Da in der exportieren ICAL-Datei wegen eines gesetzten Enddatums (UNTIL) kein COUNT angegeben wird, wird in Z. 830 in CalenderImport.php

830: $arrFields['recurrences'] = (array_key_exists('COUNT', $rrule)) ? $rrule['COUNT'] : 0;

recurrences auf 0 gesetzt, was zur Folge hat, dass der Event für alle Zeiten im Contao-Kalender wiederholt wird.

Solange in Contao die Möglichkeite der Angabe eines Enddatums nicht implementiert wird, sehe ich auf die Schnelle nur zwei Möglichkeiten hier:

  1. Programmiere eine Logik, die aus UNTIL und FREQ erschließt, wie viele Wiederholungen in $arrFileds['recurrences'] zu setzen ist.
  2. Ignoriere alle Wiederholungen (als temporären Workaround) bei Wiederholungsterminen, wenn UNTIL gesetzt ist.

Die 2. Möglichkeit kann leicht durch Änderung der Z. 827 von

827: if (is_array($rrule))

in

827: if (is_array($rrule) && !array_key_exists('UNTIL', $rrule))

erreicht werden -- das verhindert das Parsen der Wiederholungseinstellungen des Events. Meiner Meinung nach ist das Ignorieren eines nicht implentierten Features (UNTIL) besser als eine fehlerhafte Umsetzung.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions