From 5bdbc7477c9937a6346cd2215847d7e14c2020d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tollk=C3=BChn?= Date: Thu, 8 Oct 2026 10:14:32 +0200 Subject: [PATCH] add default alert (15min before event starts) --- README.md | 5 +++++ lib/Controller/CalendarController.php | 22 +++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 86c2711..b26a05a 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,11 @@ the event and submits the form. The event lands in the user's Dates carry no timezone and are interpreted in the user's Nextcloud timezone (server default as fallback). +## Reminder + +Every created event gets a display alarm 15 minutes before it starts +(`TRIGGER:-PT15M` VALARM). The reminder is not configurable. + Example: ``` diff --git a/lib/Controller/CalendarController.php b/lib/Controller/CalendarController.php index cd2be32..c31cd0e 100644 --- a/lib/Controller/CalendarController.php +++ b/lib/Controller/CalendarController.php @@ -16,6 +16,7 @@ use OCP\IRequest; use OCP\IURLGenerator; use OCP\IUserSession; use OCP\IDateTimeZone; +use Sabre\VObject\Reader; class CalendarController extends Controller { @@ -24,6 +25,11 @@ class CalendarController extends Controller */ private const CALENDAR_NAME = 'Personal'; + /* + * Default reminder: 15 minutes before the event starts. + */ + private const REMINDER_TRIGGER = '-PT15M'; + /* * datetime-local format as sent by jitsi-launch, * e.g. "2026-10-07T14:15". @@ -225,7 +231,21 @@ class CalendarController extends Controller $builder->setOrganizer($data['organizer']); } - $builder->createInCalendar($calendar); + /* + * ICalendarEventBuilder supports no alarms, so the VALARM + * is injected into the serialized ICS before writing it. + */ + $vobject = Reader::read($builder->toIcs()); + + $vobject->VEVENT->add('VALARM', [ + 'ACTION' => 'DISPLAY', + 'DESCRIPTION' => 'Reminder', + 'TRIGGER' => self::REMINDER_TRIGGER, + ]); + + $fileName = (string) $vobject->VEVENT->UID . '.ics'; + + $calendar->createFromString($fileName, $vobject->serialize()); } /**