'{DAV:}read', 'principal' => '{DAV:}owner', 'protected' => true, ], [ 'privilege' => '{DAV:}write-content', 'principal' => '{DAV:}owner', 'protected' => true, ], [ 'privilege' => '{DAV:}bind', 'principal' => '{DAV:}owner', 'protected' => true, ], [ 'privilege' => '{DAV:}unbind', 'principal' => '{DAV:}owner', 'protected' => true, ], [ 'privilege' => '{DAV:}write-properties', 'principal' => '{DAV:}owner', 'protected' => true, ], ]; } /** * This method returns the ACL's for card nodes in this address book. * The result of this method automatically gets passed to the * card nodes in this address book. * * @return array */ public function getChildACL() { return $this->getACL(); } /** * Returns the last modification date. * * @return int|null */ public function getLastModified(): ?int { $carddavBackend = $this->carddavBackend; if ($carddavBackend instanceof CardDAVBackend) { $date = $carddavBackend->getLastModified(null); if (! is_null($date)) { return (int) $date->timestamp; } } return null; } /** * This method returns the current sync-token for this collection. * This can be any string. * * If null is returned from this function, the plugin assumes there's no * sync information available. * * @return string|null */ public function getSyncToken(): ?string { $carddavBackend = $this->carddavBackend; if ($carddavBackend instanceof CardDAVBackend) { return (string) $carddavBackend->refreshSyncToken(null)->id; } return null; } }