CalDavAPI

🔧 getCalendars

Get all calendars for the user
function getCalendars() { try { $response = $this->client->propFind('calendars/' . $this->username, [ '{DAV:}displayname', '{http://apple.com/ns/ical/}calendar-color', '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' ], 1); $calendars = []; foreach ($response as $uri => $props) { if (isset($props['{DAV:}displayname'])) { // ... (truncated)

🔧 getEvents

Get events for a specific calendar within a date range
function getEvents($calendarId, $startDate, $endDate) { try { $calendarUrl = 'calendars/' . $this->username . '/' . $calendarId; // Create CalDAV filter for date range $filter = <<<EOF <?xml version="1.0"?> <c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav"> <d:prop xmlns:d="DAV:"> <d:getetag /> <c:calendar-data /> </d:prop> <c:filter> <c:comp-filter name="VCALENDAR"> <c:comp-filter name="VEVENT"> <c:time-range start="$startDate" end="$endDate" /> </c:comp-filter> </c:comp-filter> </c:filter> </c:calendar-query> EOF; $response = $this->client->request('REPORT', $calendarUrl, $filter); return $this->parseEvents($response['body']); } catch (Exception $e) { throw new Exception('Failed to fetch events: ' . $e->getMessage()); } }

🔧 parseEvents

Parse iCal data into TUI Calendar compatible format
function parseEvents($icalData) { $events = []; $vcalendar = Sabre\VObject\Reader::read($icalData); foreach ($vcalendar->VEVENT as $event) { $events[] = [ 'id' => (string)$event->UID, 'calendarId' => $event->{'CALENDAR-ID'}, 'title' => (string)$event->SUMMARY, 'body' => (string)$event->DESCRIPTION, 'start' => $this->formatDate($event->DTSTART), // ... (truncated)

🔧 createEvent

Create a new event
function createEvent($calendarId, $eventData) { try { $calendar = "calendars/{$this->username}/{$calendarId}

🔧 updateEvent

Update an existing event
function updateEvent($calendarId, $eventId, $eventData) { try { $calendar = "calendars/{$this->username}/{$calendarId}

🔧 deleteEvent

Delete an event
function deleteEvent($calendarId, $eventId) { try { $calendar = "calendars/{$this->username}/{$calendarId}

🔧 formatDate

Helper function to format dates
function formatDate($date) { return $date->getDateTime()->format('c'); }

🔧 isAllDayEvent

Helper function to check if event is all-day
function isAllDayEvent($event) { return $event->DTSTART->getDateTime()->format('H:i:s') === '00:00:00' && $event->DTEND->getDateTime()->format('H:i:s') === '00:00:00'; }