iCal Abonnement und Zusammenspiel mit calendar Extensions
Ich bin ein großer Fan dieser Erweiterung, vor allem der Möglichkeit, eine iCal Quelle zu abonnieren. Endlich keine doppelte Termineingabe oder umständliche Exports und Imports mehr.
Wenn ich einen Kalender aus einer iCal-Quelle erstelle (z.B. aus einem Google Calendar) und das Enddatum auf einen entsprechend hohen Wert setze (z.B. 31.12.2099), funktioniert die kontinuierliche Aktualisierung des Contao Kalenders problemlos, wenn mit der Zeit neue Termine hinzukommen. Auch die Übernahme von Daten, die in Contao Events nicht vorgesehen sind (z.B. Ort) in den Text des Events ist gut gelöst. Vielen Dank an den Autor an dieser Stelle!
Jetzt möchte ich aber die Extension tags in Verbindung mit tags_events nutzen, um Events mit Auszeichnungen zu versehen. Das klappt im normalen Betrieb (also Eingabe der Events über das Contao Backend) auch wie vorgesehen. Abonniere ich jedoch einen externen Kalender per iCal und versehe die so automatisch erzeugten Einträge nachträglich mit Auszeichnungen, sind diese Auszeichnungen nach dem nächsten Aktualisierungslauf der calendar_ical extension wieder verschwunden. Es scheint so, als ob die extension alle Events im Abonnementszeitraum einfach komplett überschreibt und keine Rücksicht auf bereits bestehenden Events nimmt. Fast so, als würde man den Kalender leeren und aus den iCal Daten neu anlegen.
Ist dieses Verhalten der Extension so vorgesehen? Für den in meinem Szenario gedachten Einsatzzweck (Migration hin zu Google Calendar bei bestehenden Terminen in Contao) wäre es zumindest für mich nützlicher, wenn die Extension
- bestehende Einträge im Abo-Zeitraum erkennen und nur ggf. aktualisieren oder alternativ auch unberührt lassen würde
- Events außerhalb des Abo-Zeitraums, die bereits im Kalender bestehen, ebenfalls unberührt lassen würde
Ich kann mir gut vorstellen, dass das nicht so ohne weiteres umsetzbar ist. Mir würde daher ggf. die Info, ob meine Beobachtung korrekt ist, schon sehr weiterhelfen.
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Helmut,
danke für den Tip. Hab aber leider schon mit allen Einstellungen getestet, weil ich auch von einem Einstellungsfehler ausgegangen bin. Das ist es scheinbar leider nicht.
Ich habe es gerade noch einmal mit einer frischen Installation von Contao-2.9.4 probiert, bei der als einzige Erweiterung calendar_ical über das extension repository installiert wurde. Danach einen Testkalender angelegt, als einzige Einstellung außer dem Namen das iCal Abonnement eingetragen (siehe Anhang).
Der abonnierte, öffentliche Google-Kalender enthält Termine von Sept 2010 bis Ende April 2011, insgesamt ca. 420. In den Contao Kalender übertragen werden aber immer nur die Termine im April, unabhängig vom im Backend gewählten Zeitabschnitt.
Ein Import aus einer iCal-Datei (gleicher Kalender, direkt aus Google Cal exportiert) über die Funktion "Kalender importieren" erfolgt problemlos und in vollem Umfang unter Angabe des Zeitraumes.
Zum Testen habe ich die Datei, die über die Google iCal Schnittstelle angeboten wird, mit dem Export aus dem Google Kalender verglichen, sie sind identisch und enthalten Termine aus dem gesamten Zeitspektrum des Kalenders.
Ebenfalls inhaltsgleich mit der Google Export-Quelle (bis auf Unterschiede in der Reihenfolge der Felder) sind die Kalender-Daten, die in system/modules/calendar_ical/CalendarImport.php von $this->cal->parse(); (Zeile 71) und nach dem Aufruf von $this->cal->sort(); (Zeile 117) erzeugt werden. Ich habe dort einfach jeweils
Code:
$config = array( 'directory' => TL_ROOT . '/tl_files/', 'filename' => 'calendar.ics' );
$this->cal->setConfig( $config );
$this->cal->saveCalendar();
eingetragen, um die Kalenderdaten zwischenzuspeichern. Zusätzlich habe ich die drei Versionen der Daten in einen Mozilla-Kalender importiert, was auch problemlos verlief und alle ~420 Termine anzeigte. Die Rohdaten sind also ok.
Die einzige Erklärung, die ich bisher finden konnte, war, dass $startDate und $endDate nicht korrekt an importFromICS() in Zeile 77 weitergegeben werden, oder dass die date()-Aufrufe in $this->cal->selectComponents() in Zeile 143 nicht die korrekten Werte aus den Zeitstempeln erzeugen. Das habe ich bisher nicht weiter untersucht, bis auf das stumpfe Ersetzen der date()-Aufrufe durch fixe Werte, was dann den Erfolg brachte - alle Termine im Zeitraum wurden importiert. Hättest du da vielleicht einen Tip, wie man das debuggen könnte, also die Werte von $startDate und $endDate bzw. $startDate->tstamp und $endDate->tstamp zur Laufzeit auslesen könnte?
Vielen Dank für deine Mühen, ich find's echt großartig, dass du dir bei einer so alten Erweiterung immer noch die Zeit nimmst, Lösungen zu suchen.
Gruß, Jannik