2015-11-05 15:46:37 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace OCA\DAV\CardDAV;
|
|
|
|
|
|
|
|
use OCA\DAV\CardDAV\Sharing\IShareableAddressBook;
|
2015-11-30 14:10:06 +00:00
|
|
|
use Sabre\DAV\Exception\NotFound;
|
2015-11-05 15:46:37 +00:00
|
|
|
|
|
|
|
class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareableAddressBook {
|
|
|
|
|
|
|
|
public function __construct(CardDavBackend $carddavBackend, array $addressBookInfo) {
|
|
|
|
parent::__construct($carddavBackend, $addressBookInfo);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Updates the list of shares.
|
|
|
|
*
|
|
|
|
* The first array is a list of people that are to be added to the
|
|
|
|
* addressbook.
|
|
|
|
*
|
|
|
|
* Every element in the add array has the following properties:
|
|
|
|
* * href - A url. Usually a mailto: address
|
|
|
|
* * commonName - Usually a first and last name, or false
|
|
|
|
* * summary - A description of the share, can also be false
|
|
|
|
* * readOnly - A boolean value
|
|
|
|
*
|
|
|
|
* Every element in the remove array is just the address string.
|
|
|
|
*
|
|
|
|
* @param array $add
|
|
|
|
* @param array $remove
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
function updateShares(array $add, array $remove) {
|
|
|
|
/** @var CardDavBackend $carddavBackend */
|
|
|
|
$carddavBackend = $this->carddavBackend;
|
|
|
|
$carddavBackend->updateShares($this->getName(), $add, $remove);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the list of people whom this addressbook 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 CardDavBackend $carddavBackend */
|
|
|
|
$carddavBackend = $this->carddavBackend;
|
|
|
|
$carddavBackend->getShares($this->getName());
|
|
|
|
}
|
2015-11-24 22:53:27 +00:00
|
|
|
|
|
|
|
function getACL() {
|
|
|
|
$acl = parent::getACL();
|
2015-11-27 12:14:55 +00:00
|
|
|
if ($this->getOwner() === 'principals/system/system') {
|
2015-11-24 22:53:27 +00:00
|
|
|
$acl[] = [
|
|
|
|
'privilege' => '{DAV:}read',
|
|
|
|
'principal' => '{DAV:}authenticated',
|
|
|
|
'protected' => true,
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
return $acl;
|
|
|
|
}
|
|
|
|
|
|
|
|
function getChildACL() {
|
|
|
|
$acl = parent::getChildACL();
|
2015-11-27 12:14:55 +00:00
|
|
|
if ($this->getOwner() === 'principals/system/system') {
|
2015-11-24 22:53:27 +00:00
|
|
|
$acl[] = [
|
|
|
|
'privilege' => '{DAV:}read',
|
|
|
|
'principal' => '{DAV:}authenticated',
|
|
|
|
'protected' => true,
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
return $acl;
|
|
|
|
}
|
2015-11-30 14:10:06 +00:00
|
|
|
|
|
|
|
function getChild($name) {
|
|
|
|
$obj = $this->carddavBackend->getCard($this->addressBookInfo['id'], $name);
|
|
|
|
if (!$obj) {
|
|
|
|
throw new NotFound('Card not found');
|
|
|
|
}
|
|
|
|
return new Card($this->carddavBackend, $this->addressBookInfo, $obj);
|
|
|
|
}
|
|
|
|
|
2015-11-20 12:35:23 +00:00
|
|
|
}
|