/** * The getChanges method returns all the changes that have happened, since * the specified syncToken and the current collection. * * This function should return an array, such as the following: * * [ * 'syncToken' => 'The current synctoken', * 'added' => [ * 'new.txt', * ], * 'modified' => [ * 'modified.txt', * ], * 'deleted' => [ * 'foo.php.bak', * 'old.txt' * ] * ]; * * The syncToken property should reflect the *current* syncToken of the * collection, as reported getSyncToken(). This is needed here too, to * ensure the operation is atomic. * * If the syncToken is specified as null, this is an initial sync, and all * members should be reported. * * The modified property is an array of nodenames that have changed since * the last token. * * The deleted property is an array with nodenames, that have been deleted * from collection. * * The second argument is basically the 'depth' of the report. If it's 1, * you only have to report changes that happened only directly in immediate * descendants. If it's 2, it should also include changes from the nodes * below the child collections. (grandchildren) * * The third (optional) argument allows a client to specify how many * results should be returned at most. If the limit is not specified, it * should be treated as infinite. * * If the limit (infinite or not) is higher than you're willing to return, * you should throw a Sabre\DAV\Exception\TooMuchMatches() exception. * * If the syncToken is expired (due to data cleanup) or unknown, you must * return null. * * The limit is 'suggestive'. You are free to ignore it. * * @param string $syncToken * @param int $syncLevel * @param int $limit * @return array */ function getChanges($syncToken, $syncLevel, $limit = null) { if (!$this->caldavBackend instanceof Backend\SyncSupport) { return null; } return $this->caldavBackend->getChangesForCalendar($this->calendarInfo['id'], $syncToken, $syncLevel, $limit); }
/** * @depends testSimple */ function testCreateExtendedCollection() { $mkCol = new MkCol(['{DAV:}collection', '{urn:ietf:params:xml:ns:caldav}calendar'], []); $result = $this->usercalendars->createExtendedCollection('newcalendar', $mkCol); $this->assertNull($result); $cals = $this->backend->getCalendarsForUser('principals/user1'); $this->assertEquals(3, count($cals)); }
/** * Performs a calendar-query on the contents of this calendar. * * The calendar-query is defined in RFC4791 : CalDAV. Using the * calendar-query it is possible for a client to request a specific set of * object, based on contents of iCalendar properties, date-ranges and * iCalendar component types (VTODO, VEVENT). * * This method should just return a list of (relative) urls that match this * query. * * The list of filters are specified as an array. The exact array is * documented by \Sabre\CalDAV\CalendarQueryParser. * * @param array $filters * @return array */ function calendarQuery(array $filters) { $result = []; $validator = new CalDAV\CalendarQueryValidator(); $objects = $this->caldavBackend->getSchedulingObjects($this->principalUri); foreach ($objects as $object) { $vObject = VObject\Reader::read($object['calendardata']); if ($validator->validate($vObject, $filters)) { $result[] = $object['uri']; } } return $result; }
/** * Performs a calendar-query on the contents of this calendar. * * The calendar-query is defined in RFC4791 : CalDAV. Using the * calendar-query it is possible for a client to request a specific set of * object, based on contents of iCalendar properties, date-ranges and * iCalendar component types (VTODO, VEVENT). * * This method should just return a list of (relative) urls that match this * query. * * The list of filters are specified as an array. The exact array is * documented by Sabre\CalDAV\CalendarQueryParser. * * @param array $filters * @return array */ public function calendarQuery(array $filters) { return $this->caldavBackend->calendarQuery($this->calendarInfo['id'], $filters); }