Skip to content

2.1.0

Latest

Choose a tag to compare

@alies-dev alies-dev released this 20 Aug 18:42
c92c9db

Release Notes: v2.1.0

TL;DR: no upgrade steps, the public API is unchanged. Headline additions are guests and separate start/end timezones. ICS files carrying a timezone now name it with a TZID and ship a VTIMEZONE. Subclassing a generator? Read the last section.

New Features

  • Guests (attendees): Link::guest() / Link::guests(), required and optional roles, rendered as add (Google), inv_list (Yahoo), to/cc (Outlook), ATTENDEE (ICS) (#229, #237)
  • Separate start and end timezones, for flights (#233, #246, #249)
  • ICS TRANSP, CLASS, RRULE, X-MICROSOFT-CDO-BUSYSTATUS, DTSTAMP via the options array (#230) (#244)
  • ICS extension points: additionalCalendarProperties(), additionalEventProperties() (#242, #247)

Changed

  • ICS files carry a VTIMEZONE for every TZID they name, without which older Outlook desktop shifts the event (#249)
  • A recurring event in a zone that moves its clocks is written as a local time with a TZID, not a UTC instant, which used to put every occurrence past a DST change an hour off (#254)
  • Zones naming no place (+02:00, CEST, POSIX rule sets, all of Etc/) are written in UTC (#248)
  • ICS REMINDER and format are validated instead of silently falling back, so ['format' => 'FILE'] no longer returns a link where a file was asked for (#254)
  • Generators are easier to extend: four escaping helpers are now protected, Google/Yahoo read BASE_URL late statically (#242)
  • A false URL parameter renders as &key, not &key=

Bug Fixes

  • ICS values could inject calendar properties through UID, PRODID, URL, RRULE, the enumerated options, and ATTENDEE addresses assigned straight to Link::$guests (#245, #254)
  • RFC 5545 gaps: long lines are folded without splitting a multibyte character, the file ends with CRLF, the data URI declares charset=utf-8, invalid control characters are dropped (#250)
  • ICS event properties landed after VALARM (#247)
  • VTIMEZONE stopped at the year it described. The last change of each kind now carries a yearly rule where the zone repeats predictably (#254)
  • All-day events across timezones gained or lost a day (#237)
  • Yahoo deep link parameters: no more stale view=d&type=20, wall clock ST/ET, DUR=allday for single days, exclusive ET for multi-day (#232)
  • Attendee escaping: a CAL-ADDRESS is a URI, not TEXT. Unusable guest addresses are rejected (#229)
  • A description or address of '0' is no longer dropped as empty

Notes for subclasses

The public API is unchanged, but three changes reach a subclass. The first two are fatal at load time:

  • Ics::$presentationOptions is now typed array. Redeclaring it untyped raises Type of Sub::$presentationOptions must be array. Drop the redeclaration or type it to match.
  • Ics::generateAlertComponent(), Yahoo::sanitizeText(), Yahoo::sanitizeAddressList() and BaseOutlook::sanitizeString() went private to protected. A same-named private method raises Access level to Sub::sanitizeText() must be protected or weaker. Widen it.
  • Yahoo::BASE_URL dropped view=d&type=20, so a subclass building its own URL from the constant gets the shorter value.

Made by @alies-dev and the community.

Full Changelog: 2.0.1...2.1.0