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}
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';
}