RRZE-Webteam / rrze-rsvp

Platzbuchungssystem. Geeignet zur Verwaltung von Plätzen in CIP-Pools, Seminarräumen und Hörsälen, die zu reservieren sind, wie auch zur Erfüllung der Kontaktverfolgung.
GNU General Public License v3.0
2 stars 5 forks source link

ICS: Timezone über get_option('timezone_string') ermitteln #301

Open thenickless opened 3 years ago

thenickless commented 3 years ago

Mit Version 2.6.23 wurde ein Quickfix eingespielt, das folgende Fehler behebt:

https://icalendar.org/validator.html Errors Invalid TZID value or missing VTIMEZONE component (Europe/Amsterdam) near line # 4 Reference: 3.2.19. Time Zone Identifier Invalid TZID value or missing VTIMEZONE component (Europe/Amsterdam) near line # 4 Reference: 3.2.19. Time Zone Identifier

Aber nun ist die Timezone mit Europe/Berlin hardcoded und das ist nicht gut.

TZURL:http://tzurl.org/zoneinfo-outlook/Europe/Berlin reicht nicht aus. D.h. "TZURL:http://tzurl.org/zoneinfo-outlook/" . get_option('timezone_string') würde nicht ausreichen. Es müsste explizit mindestens STANDARD oder DAYLIGHT angegeben werden.

Errors At least one STANDARD or DAYLIGHT property must be defined here near line # 5 Reference: RFC 5545 3.6.5. Time Zone Component

CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Europe/Berlin TZURL:http://tzurl.org/zoneinfo-outlook/Europe/Berlin X-LIC-LOCATION:Europe/Berlin BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE

Fazit: Entweder get_option('gmt_offset') für TZOFFSETFROM und ..TO für DAYLIGHT und STANDARD nutzen (= umständlich) oder auf Zulu Time Zone (entspricht UTC) setzen (= ideal)

thenickless commented 3 years ago

Lösung https://github.com/RRZE-Webteam/rrze-rsvp/commit/89a2c9a91f891ae827a0bd0a04d38752f20cfdea ist fehlerfrei, zeigt die richtigen Zeiten an (und valid nach https://icalendar.org/validator.html) ABER kann User verwirren, da auf Klick im Kalender Zeiten als GMT angezeigt werden.

Generiertes .ICS : userid-test-raum-202110071300.txt (muss von .txt zu .ics umgenannt werden, weil Github kein .ics zulässt)

Anzeige iCal: Bildschirmfoto 2021-10-07 um 12 09 23

thenickless commented 3 years ago

Infos zum Thema:

  1. Warum nicht einfach UTC? => siehe Screenshot oben

  2. Wir brauchen unbedingt VTIMEZONE Gründe:

  3. Vorschlag: VObject library nutzen https://packagist.org/packages/sabre/vobject Denn es ist einfacher, als wie zB https://wordpress.org/plugins/ics-calendar/ es macht: das mühsam nachzubauen. Anleitung / Snippets dafür: https://stackoverflow.com/questions/6682304/generating-an-icalender-vtimezone-component-from-phps-timezone-value

  4. Wir können es in diversen Plugins nutzen => in https://github.com/RRZE-Webteam/rrze-wp packen