Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PHP Calendar API: Write support #20154

Open
1 of 3 tasks
georgehrke opened this issue Mar 25, 2020 · 14 comments
Open
1 of 3 tasks

PHP Calendar API: Write support #20154

georgehrke opened this issue Mar 25, 2020 · 14 comments
Labels
1. to develop Accepted and waiting to be taken care of feature: caldav Related to CalDAV internals feature: dav spec technical debt

Comments

@georgehrke
Copy link
Member

georgehrke commented Mar 25, 2020

OCP\Calendar\IManager is currently only providing a read-only API.
This is drastically limiting the number of use-cases, forcing app-developers to use the CalDAV interface via javascript, if they desire write-support for the user's calendar.

Nextcloud should provide a PHP api with write-support for the user's calendar.

Due to it's simple design, our current API is limited to read-only. Adding write-support to the existing API is not possible. This is mostly caused by the structure of events.
They are returned as a very simple key-value array. Some information from the ICS is already lost when the conversion takes place. Converting modified key-value arrays back to ICS could possibly lead to data-loss.


Original proposition

Proposal:

  1. Deprecate \OCP\Calendar\IManager and \OCP\Calendar\ICalendar with Nextcloud 20 and remove with Nextcloud 23.

  • Implement \OCP\Calendar\IManagerV2:
interface \OCP\Calendar\IManagerV2{
        public function isEnabled():bool;
        public function getCalendars():ICalendarV2[];
        public function getCalendar(string $key):?ICalendarV2;
        public function search(string $pattern, array $searchProperties=[], array $options=[], int $limit=null, int $offset=null)?ICalendarObjectV2[];
        public function registerCalendar(ICalendarV2 $calendar):void;
        public function unregisterCalendar(ICalendarV2 $calendar):void;
        public function register(\Closure $callable):void;
        public function clear():void;
}
  • Implement \OCP\Calendar\ICalendarV2:
interface \OCP\Calendar\ICalendarV2{
	public function getKey():string;
	public function getDisplayName():?string;
	public function getDisplayColor():?string;
        public function isWriteable():bool;
        public function getByUri(string $uri):?ICalendarObjectV2;
        public function search(string $pattern, array $searchProperties=[], array $options=[], int $limit=null, int $offset=null)?ICalendarObjectV2[];
        public function create(\Sabre\VObject\VCalendar $vObject):ICalendarObjectV2;
}
  • Implement \OCP\Calendar\ICalendarObjectV2:
interface \OCP\Calendar\ICalendarObjectV2{
        public function getCalendarKey():string;
        public function getUri():string;
        public function getVObject():\Sabre\VObject\VCalendar;
        public function update():void;
        public function delete():void;
}
@georgehrke
Copy link
Member Author

also ref #17129

@georgehrke
Copy link
Member Author

cc @rullzer for feature planning :)

@georgehrke

This comment has been minimized.

@georgehrke
Copy link
Member Author

@tcitworld Who else needed write-access to the calendar?

@tcitworld
Copy link
Member

tcitworld commented Mar 25, 2020

I can think of

@tcitworld
Copy link
Member

Added workflow engine to use cases.

@rotdrop
Copy link
Contributor

rotdrop commented Oct 6, 2020

FYI, have updated @tcitworld merge request #20178, re-basing it to the current master and fixing the failing merge checks, see #23234. Would be "nice to have" for polishing cafevdb.

@rotdrop
Copy link
Contributor

rotdrop commented Oct 6, 2020

Concerning use cases: cafevdb shares several objects among the members of the executive board of an orchestra. Shared events (rehearsals/concerts/meetings) are of course an important component.

@tbmatuka
Copy link

I have a use-case where I would need to add/update events for all users via the API. We have a self-hosted mail server and would like to automatically import any .ics file that users receive. The mail server side is simple and we have it ready, but importing the events into Nextcloud is our current problem.

Does the current state of the implementation support using a single API key to manage calendars for all users?

@seyfeb

This comment has been minimized.

@tcitworld

This comment has been minimized.

@tcitworld

This comment has been minimized.

@szaimen szaimen added the 1. to develop Accepted and waiting to be taken care of label Jun 25, 2021
@ChristophWurst
Copy link
Member

I would like to note that we should possibly include the user ID as argument of the APIs. Having the user as context makes the APIs usable for calendars of other users as well, and when there is no user context (background job, occ).

@ChristophWurst
Copy link
Member

@miaulalala will implement the creation part of new events. To avoid leading sabre types in the public API she will add a create method that takes the calendar object name and the calendar object data as string.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
1. to develop Accepted and waiting to be taken care of feature: caldav Related to CalDAV internals feature: dav spec technical debt
Projects
None yet
7 participants