summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2017-02-15 18:37:05 -0600
committerGitHub <noreply@github.com>2017-02-15 18:37:05 -0600
commit88720f3565157010294d97333920289d471ce999 (patch)
tree77d4269b0730aa94b08a696c783b2da7811df9b6
parent17d57f336d96e8aaf64e8829d27f30385d223c60 (diff)
parent6923821964ef768433a6fb6779de6d33cf927e00 (diff)
downloadnextcloud-server-88720f3565157010294d97333920289d471ce999.tar.gz
nextcloud-server-88720f3565157010294d97333920289d471ce999.zip
Merge pull request #3499 from nextcloud/fix-addressbook-deletion
[stable11] Address book data lost when any user receiving a share is deleted backport
-rw-r--r--apps/dav/lib/CardDAV/CardDavBackend.php27
-rw-r--r--apps/dav/lib/HookManager.php2
-rw-r--r--apps/dav/tests/unit/CardDAV/CardDavBackendTest.php2
-rw-r--r--apps/dav/tests/unit/DAV/HookManagerTest.php2
4 files changed, 30 insertions, 3 deletions
diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php
index a320984c1fe..a6d057452e6 100644
--- a/apps/dav/lib/CardDAV/CardDavBackend.php
+++ b/apps/dav/lib/CardDAV/CardDavBackend.php
@@ -195,6 +195,33 @@ class CardDavBackend implements BackendInterface, SyncSupport {
return array_values($addressBooks);
}
+ public function getUsersOwnAddressBooks($principalUri) {
+ $principalUriOriginal = $principalUri;
+ $principalUri = $this->convertPrincipal($principalUri, true);
+ $query = $this->db->getQueryBuilder();
+ $query->select(['id', 'uri', 'displayname', 'principaluri', 'description', 'synctoken'])
+ ->from('addressbooks')
+ ->where($query->expr()->eq('principaluri', $query->createNamedParameter($principalUri)));
+
+ $addressBooks = [];
+
+ $result = $query->execute();
+ while($row = $result->fetch()) {
+ $addressBooks[$row['id']] = [
+ 'id' => $row['id'],
+ 'uri' => $row['uri'],
+ 'principaluri' => $this->convertPrincipal($row['principaluri'], false),
+ '{DAV:}displayname' => $row['displayname'],
+ '{' . Plugin::NS_CARDDAV . '}addressbook-description' => $row['description'],
+ '{http://calendarserver.org/ns/}getctag' => $row['synctoken'],
+ '{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
+ ];
+ }
+ $result->closeCursor();
+
+ return array_values($addressBooks);
+ }
+
private function getUserDisplayName($uid) {
if (!isset($this->userDisplayNames[$uid])) {
$user = $this->userManager->get($uid);
diff --git a/apps/dav/lib/HookManager.php b/apps/dav/lib/HookManager.php
index 26f3895a459..8148df2d37b 100644
--- a/apps/dav/lib/HookManager.php
+++ b/apps/dav/lib/HookManager.php
@@ -96,7 +96,7 @@ class HookManager {
$uid = $params['uid'];
$this->usersToDelete[$uid] = $this->userManager->get($uid);
$this->calendarsToDelete = $this->calDav->getUsersOwnCalendars('principals/users/' . $uid);
- $this->addressBooksToDelete = $this->cardDav->getAddressBooksForUser('principals/users/' . $uid);
+ $this->addressBooksToDelete = $this->cardDav->getUsersOwnAddressBooks('principals/users/' . $uid);
}
public function postDeleteUser($params) {
diff --git a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php
index f4c321fa6d0..a4445217469 100644
--- a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php
+++ b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php
@@ -273,7 +273,7 @@ class CardDavBackendTest extends TestCase {
// create a new address book
$this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []);
- $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER);
+ $books = $this->backend->getUsersOwnAddressBooks(self::UNIT_TEST_USER);
$this->assertEquals(1, count($books));
$bookId = $books[0]['id'];
diff --git a/apps/dav/tests/unit/DAV/HookManagerTest.php b/apps/dav/tests/unit/DAV/HookManagerTest.php
index 9579ce1c6d3..375bda9f3c2 100644
--- a/apps/dav/tests/unit/DAV/HookManagerTest.php
+++ b/apps/dav/tests/unit/DAV/HookManagerTest.php
@@ -195,7 +195,7 @@ class HookManagerTest extends TestCase {
$card = $this->getMockBuilder(CardDavBackend::class)
->disableOriginalConstructor()
->getMock();
- $card->expects($this->once())->method('getAddressBooksForUser')->willReturn([
+ $card->expects($this->once())->method('getUsersOwnAddressBooks')->willReturn([
['id' => 'personal']
]);
$card->expects($this->once())->method('deleteAddressBook');