nextcloud / calendar

📆 Calendar app for Nextcloud
https://apps.nextcloud.com/apps/calendar
GNU Affero General Public License v3.0
981 stars 241 forks source link

The default reminder isn't added to the attendee #6315

Open lufer22 opened 2 months ago

lufer22 commented 2 months ago

Steps to reproduce

  1. Create an event
  2. Invite an attendee
  3. Open the event on the attendee's calendar
  4. Check the reminders section

Expected behavior

See the attendee default reminder set.

Actual behaviour

Attendee's Reminders section is empty.

Calendar app version

4.7.8

CalDAV-clients used

No response

Browser

chrome 122.0.6261.57

Client operating system

Mint linux

Server operating system

Debian linux

Web server

Apache

Database engine version

MariaDB

PHP engine version

Other

Nextcloud version

29.0.3

Updated from an older installed version or fresh install

Fresh install

List of activated apps

No response

Nextcloud configuration

No response

Web server error log

No response

Log file

No response

Browser log

No response

Additional info

PHP version: 8.3

miaulalala commented 1 month ago

We do strip VALARMs from incoming scheduling messages, but that is simply good security - we don't want someone else be able to post alarms to your phone for example.

The default alarm isn't mentioned in the RFC, I guess it would make sense to add those.

lufer22 commented 1 month ago

Hello! I'm searching for a solution to this. Can you help me with some ideas to solve it? I was thinking of doing it in the frontend, maybe using the isViewedByAttendee flag along with something else.

Or set the default when the calendar events are fetched.

I'll make a PR if I succeed. :D

miaulalala commented 1 month ago

Hello! I'm searching for a solution to this. Can you help me with some ideas to solve it? I was thinking of doing it in the frontend, maybe using the isViewedByAttendee flag along with something else.

Or set the default when the calendar events are fetched.

I'll make a PR if I succeed. :D

Since there's quite a few ways to accept an invitation - via button in an email, from different clients on all sorts of platforms, etc, the VALARM default would ideally be added during the scheduling processing in the backend code in the DAV app. So any client you accept an invitation from writes the default reminder.

If you're familiar with PHP you could try a change in the DAV app, although it will mean overwriting a lot of library code. If you'd like some guidance on this, ping me with a WIP and we can look through it - or you can join the DEV chat for Groupware here if you'd like: https://cloud.nextcloud.com/call/5qb8fujz

lufer22 commented 1 month ago

Since there's quite a few ways to accept an invitation - via button in an email, from different clients on all sorts of platforms, etc, the VALARM default would ideally be added during the scheduling processing in the backend code in the DAV app. So any client you accept an invitation from writes the default reminder.

If you're familiar with PHP you could try a change in the DAV app, although it will mean overwriting a lot of library code. If you'd like some guidance on this, ping me with a WIP and we can look through it - or you can join the DEV chat for Groupware here if you'd like: https://cloud.nextcloud.com/call/5qb8fujz

Oh, very nice! Regarding the DAV app, do you mean the dav folder inside the server apps folder?

miaulalala commented 1 month ago

Since there's quite a few ways to accept an invitation - via button in an email, from different clients on all sorts of platforms, etc, the VALARM default would ideally be added during the scheduling processing in the backend code in the DAV app. So any client you accept an invitation from writes the default reminder. If you're familiar with PHP you could try a change in the DAV app, although it will mean overwriting a lot of library code. If you'd like some guidance on this, ping me with a WIP and we can look through it - or you can join the DEV chat for Groupware here if you'd like: cloud.nextcloud.com/call/5qb8fujz

Oh, very nice! Regarding the DAV app, do you mean the dav folder inside the server apps folder?

Exactly. It's shipped with server so you'd open a PR in the server repo.

lufer22 commented 1 month ago

Since there's quite a few ways to accept an invitation - via button in an email, from different clients on all sorts of platforms, etc, the VALARM default would ideally be added during the scheduling processing in the backend code in the DAV app. So any client you accept an invitation from writes the default reminder. If you're familiar with PHP you could try a change in the DAV app, although it will mean overwriting a lot of library code. If you'd like some guidance on this, ping me with a WIP and we can look through it - or you can join the DEV chat for Groupware here if you'd like: cloud.nextcloud.com/call/5qb8fujz

Oh, very nice! Regarding the DAV app, do you mean the dav folder inside the server apps folder?

Exactly. It's shipped with server so you'd open a PR in the server repo.

Understood! Do you know of a file I can start with? I'm a little bit lost in it, haha.

miaulalala commented 1 month ago

Since there's quite a few ways to accept an invitation - via button in an email, from different clients on all sorts of platforms, etc, the VALARM default would ideally be added during the scheduling processing in the backend code in the DAV app. So any client you accept an invitation from writes the default reminder. If you're familiar with PHP you could try a change in the DAV app, although it will mean overwriting a lot of library code. If you'd like some guidance on this, ping me with a WIP and we can look through it - or you can join the DEV chat for Groupware here if you'd like: cloud.nextcloud.com/call/5qb8fujz

Oh, very nice! Regarding the DAV app, do you mean the dav folder inside the server apps folder?

Exactly. It's shipped with server so you'd open a PR in the server repo.

Understood! Do you know of a file I can start with? I'm a little bit lost in it, haha.

https://github.com/nextcloud/server/blob/0df30363a4948384f8da43b963254ce69961f320/apps/dav/lib/CalDAV/Schedule/Plugin.php#L223

is where you want the changes to go to. It means overwriting \Sabre\CalDAV\Schedule\Plugin::scheduleLocalDelivery (the parent call you can see in the method) more thoroughly than we're doing at the moment. This is a change I wouldn't be opposed to as it would open the door to more changes in the future.

I'd suggest starting with moving the contents of the parent method into the overwriting method (so, replacing the call to parent::scheduleLocalDelivery) and then looking through it to determine how to find the default reminder length for the correct calendar.

If you then want to include this value in the generated VEVENT, it most likely also means extending the \Sabre\VObject\ITip\Broker class with your own implementation and overwriting processMessageReply to include this value as a VALARM in the generated iTIP message.

It helps if you have a debugger where you can step through the whole thing and learn about which object holds which value.

Give it a shot and we can talk about how to best implement that in the chat on Monday if you like. Even if you don't get very far, feel free to push your changes in a PR.

If you have any question regarding the technical details of this whole process (calendar scheduling), the RFC is long but worth reading. Sometimes, just searching for keywords in the document also helps a lot. Otherwise, feel free to ping the chat as well.