PHP Calendar API: Write support
Nobody has claimed this yet.
- Dominant language
- PHP
- Stars
- 36.9k
- Forks
- 5.2k
- Avg merge
- 2d 3h
- Merged PRs (30d)
- 713
Description
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.
- Create objects into a calendar https://github.com/nextcloud/server/pull/29188
Documentation - Update objects
- Deleting objects
Original proposition
Proposal:
-
Deprecate
\OCP\Calendar\IManagerand\OCP\Calendar\ICalendarwith 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;
}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the OCP\Calendar\IManager and proposed IManagerV2, ICalendarV2, and ICalendarObjectV2 entry points, then read the linked write-support documentation. Creation is already checked off; completion requires defining and implementing update and delete support while preserving ICS data, with the documentation kept consistent.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- php
- Domain
- api, backend-api-design
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100