diff options
Diffstat (limited to 'apps/dav/lib/carddav/carddavbackend.php')
-rw-r--r-- | apps/dav/lib/carddav/carddavbackend.php | 96 |
1 files changed, 10 insertions, 86 deletions
diff --git a/apps/dav/lib/carddav/carddavbackend.php b/apps/dav/lib/carddav/carddavbackend.php index 81a3ba7c519..3dc5c00e10b 100644 --- a/apps/dav/lib/carddav/carddavbackend.php +++ b/apps/dav/lib/carddav/carddavbackend.php @@ -24,9 +24,10 @@ namespace OCA\DAV\CardDAV; -use Doctrine\DBAL\Connection; use OCA\DAV\Connector\Sabre\Principal; use OCP\DB\QueryBuilder\IQueryBuilder; +use OCA\DAV\DAV\Sharing\Backend; +use OCA\DAV\DAV\Sharing\IShareable; use OCP\IDBConnection; use Sabre\CardDAV\Backend\BackendInterface; use Sabre\CardDAV\Backend\SyncSupport; @@ -50,6 +51,9 @@ class CardDavBackend implements BackendInterface, SyncSupport { /** @var IDBConnection */ private $db; + /** @var Backend */ + private $sharingBackend; + /** @var array properties to index */ public static $indexProperties = array( 'BDAY', 'UID', 'N', 'FN', 'TITLE', 'ROLE', 'NOTE', 'NICKNAME', @@ -68,6 +72,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { public function __construct(IDBConnection $db, Principal $principalBackend) { $this->db = $db; $this->principalBackend = $principalBackend; + $this->sharingBackend = new Backend($this->db, 'addressbook'); } /** @@ -715,17 +720,12 @@ class CardDavBackend implements BackendInterface, SyncSupport { } /** - * @param AddressBook $book + * @param IShareable $shareable * @param string[] $add * @param string[] $remove */ - public function updateShares($book, $add, $remove) { - foreach($add as $element) { - $this->shareWith($book, $element); - } - foreach($remove as $element) { - $this->unshare($book->getBookId(), $element); - } + public function updateShares(IShareable $shareable, $add, $remove) { + $this->sharingBackend->updateShares($shareable, $add, $remove); } /** @@ -808,63 +808,6 @@ class CardDavBackend implements BackendInterface, SyncSupport { return $result; } - - /** - * @param AddressBook $addressBook - * @param string $element - */ - private function shareWith($addressBook, $element) { - $user = $element['href']; - $parts = explode(':', $user, 2); - if ($parts[0] !== 'principal') { - return; - } - $p = $this->principalBackend->getPrincipalByPath($parts[1]); - if (is_null($p)) { - return; - } - - // remove the share if it already exists - $this->unshare($addressBook->getBookId(), $element['href']); - $access = self::ACCESS_READ; - if (isset($element['readOnly'])) { - $access = $element['readOnly'] ? self::ACCESS_READ : self::ACCESS_READ_WRITE; - } - - $query = $this->db->getQueryBuilder(); - $query->insert('dav_shares') - ->values([ - 'principaluri' => $query->createNamedParameter($parts[1]), - 'type' => $query->createNamedParameter('addressbook'), - 'access' => $query->createNamedParameter($access), - 'resourceid' => $query->createNamedParameter($addressBook->getBookId()) - ]); - $query->execute(); - } - - /** - * @param int $addressBookId - * @param string $element - */ - private function unshare($addressBookId, $element) { - $parts = explode(':', $element, 2); - if ($parts[0] !== 'principal') { - return; - } - $p = $this->principalBackend->getPrincipalByPath($parts[1]); - if (is_null($p)) { - return; - } - - $query = $this->db->getQueryBuilder(); - $query->delete('dav_shares') - ->where($query->expr()->eq('resourceid', $query->createNamedParameter($addressBookId))) - ->andWhere($query->expr()->eq('type', $query->createNamedParameter('addressbook'))) - ->andWhere($query->expr()->eq('principaluri', $query->createNamedParameter($parts[1]))) - ; - $query->execute(); - } - /** * Returns the list of people whom this address book is shared with. * @@ -878,26 +821,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { * @return array */ public function getShares($addressBookId) { - $query = $this->db->getQueryBuilder(); - $result = $query->select(['principaluri', 'access']) - ->from('dav_shares') - ->where($query->expr()->eq('resourceid', $query->createNamedParameter($addressBookId))) - ->andWhere($query->expr()->eq('type', $query->createNamedParameter('addressbook'))) - ->execute(); - - $shares = []; - while($row = $result->fetch()) { - $p = $this->principalBackend->getPrincipalByPath($row['principaluri']); - $shares[]= [ - 'href' => "principal:${p['uri']}", - 'commonName' => isset($p['{DAV:}displayname']) ? $p['{DAV:}displayname'] : '', - 'status' => 1, - 'readOnly' => ($row['access'] === self::ACCESS_READ), - '{'.\OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD.'}principal' => $p['uri'] - ]; - } - - return $shares; + return $this->sharingBackend->getShares($addressBookId); } /** |