fix(meeting): fix missing VTIMEZONE in scheduled meeting ICS invites#18040
Open
miaulalala wants to merge 1 commit into
Open
fix(meeting): fix missing VTIMEZONE in scheduled meeting ICS invites#18040miaulalala wants to merge 1 commit into
miaulalala wants to merge 1 commit into
Conversation
33a08d9 to
6c856c7
Compare
Contributor
Author
|
/backport to stable34 |
Contributor
Author
|
/backport to stable33 |
Contributor
Author
|
/backport to stable32 |
Contributor
Author
|
Once sabre-io/vobject#757 is fixed and vendored, the |
6c856c7 to
aa3aaca
Compare
AI-Assisted-By: claude-sonnet-4-6 <noreply@anthropic.com> Signed-off-by: Anna Larch <anna@nextcloud.com>
aa3aaca to
2350fe9
Compare
nickvergessen
requested changes
May 22, 2026
Member
nickvergessen
left a comment
There was a problem hiding this comment.
I don't see the tests (neither feature nor FeatureContext) to have anything changed in regards to VTIMEZONE?
| /** | ||
| * @param array $dashboardEvents | ||
| * @param TableNode $formData | ||
| */ |
Member
There was a problem hiding this comment.
Doc block is disconnected from it's old method
But sounds deletable anyway
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #18039
Two bugs in `RoomController::scheduleMeeting()` introduced by #17057:
Null timezone crash: `TimezoneService::getUserTimezone()` returns `null` when the user has no timezone configured anywhere (no `core.timezone` pref, no availability property, no calendars with scheduling timezone). Passing `null` to `new \DateTimeZone()` throws a `TypeError`. Fixed by falling back to `getDefaultTimezone()` (server's `default_timezone` config, defaulting to `UTC`).
Missing VTIMEZONE in invite emails: `ICalendarEventBuilder::toIcs()` (core) emits `DTSTART;TZID=Europe/Berlin:...` but never includes a `VTIMEZONE` component. RFC 5545 §3.2.19 requires a `VTIMEZONE` component for every `TZID` parameter value. Without it, Sabre's iTIP broker has nothing to copy into the `METHOD:REQUEST` email, so attendees receive an ICS with an unresolved `TZID` reference. Clients like Grommunio misinterpret this as an unknown timezone and show the wrong time.
This PR injects a proper `VTIMEZONE` block (with `DAYLIGHT`/`STANDARD` sub-components built from PHP's `DateTimeZone::getTransitions()`) into the ICS string before saving to the calendar. No Sabre VObject dependency is added to Talk — the block is assembled as a raw ICS string.
The root fix is in nextcloud/server (fix(calendar): prefix TZID with '/' to use globally-defined IANA timezone identifiers server#60588). Once that is merged, the `buildVTimezoneBlock` helper and the manual `createFromString` call in this PR can be removed and replaced with a direct `createInCalendar()` call.
Test plan
🤖 Generated with Claude Code