caldavBackend; $calDavBackend->updateShares($this, $add, $remove); } /** * Returns the list of people whom this resource is shared with. * * Every element in this array should have the following properties: * * href - Often a mailto: address * * commonName - Optional, for example a first + last name * * status - See the Sabre\CalDAV\SharingPlugin::STATUS_ constants. * * readOnly - boolean * * summary - Optional, a description for the share * * @return array */ function getShares() { /** @var CalDavBackend $calDavBackend */ $calDavBackend = $this->caldavBackend; return $calDavBackend->getShares($this->getResourceId()); } /** * @return int */ public function getResourceId() { return $this->calendarInfo['id']; } function getACL() { $acl = parent::getACL(); /** @var CalDavBackend $calDavBackend */ $calDavBackend = $this->caldavBackend; return $calDavBackend->applyShareAcl($this->getResourceId(), $acl); } function getChildACL() { $acl = parent::getChildACL(); /** @var CalDavBackend $calDavBackend */ $calDavBackend = $this->caldavBackend; return $calDavBackend->applyShareAcl($this->getResourceId(), $acl); } function getOwner() { if (isset($this->calendarInfo['{http://owncloud.org/ns}owner-principal'])) { return $this->calendarInfo['{http://owncloud.org/ns}owner-principal']; } return parent::getOwner(); } function delete() { if (isset($this->calendarInfo['{http://owncloud.org/ns}owner-principal'])) { $principal = 'principal:' . parent::getOwner(); $shares = $this->getShares(); $shares = array_filter($shares, function($share) use ($principal){ return $share['href'] === $principal; }); if (empty($shares)) { throw new Forbidden(); } /** @var CalDavBackend $calDavBackend */ $calDavBackend = $this->caldavBackend; $calDavBackend->updateShares($this, [], [ 'href' => $principal ]); return; } parent::delete(); } }