diff options
author | Anna Larch <anna@nextcloud.com> | 2022-04-21 21:27:11 +0200 |
---|---|---|
committer | Anna (Rebase PR Action) <miaulalala@users.noreply.github.com> | 2023-01-05 12:19:51 +0000 |
commit | ddcee3dbab01b4f4fc163c68a54055facfa8af16 (patch) | |
tree | 6ff40b39dcb76c1aa5a3ffae2335e85a01020b2c /apps | |
parent | 2171e37b7d6d3990beb37dce26d30ca29154e89f (diff) | |
download | nextcloud-server-ddcee3dbab01b4f4fc163c68a54055facfa8af16.tar.gz nextcloud-server-ddcee3dbab01b4f4fc163c68a54055facfa8af16.zip |
Fix sync errors for duplicate cards with the same UID for different backends
Signed-off-by: Anna Larch <anna@nextcloud.com>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/dav/lib/CardDAV/Converter.php | 4 | ||||
-rw-r--r-- | apps/dav/lib/CardDAV/SyncService.php | 2 |
2 files changed, 4 insertions, 2 deletions
diff --git a/apps/dav/lib/CardDAV/Converter.php b/apps/dav/lib/CardDAV/Converter.php index 340e3127f0a..8452810c29e 100644 --- a/apps/dav/lib/CardDAV/Converter.php +++ b/apps/dav/lib/CardDAV/Converter.php @@ -47,12 +47,14 @@ class Converter { $userProperties = $this->accountManager->getAccount($user)->getProperties(); $uid = $user->getUID(); + $backendClassName = $user->getBackendClassName(); $cloudId = $user->getCloudId(); $image = $this->getAvatarImage($user); $vCard = new VCard(); $vCard->VERSION = '3.0'; - $vCard->UID = $uid; + $vCard->UID = md5("$backendClassName:$uid"); + $vCard->add(new Text($vCard, 'X-NEXTCLOUD-UID', $uid)); $publish = false; diff --git a/apps/dav/lib/CardDAV/SyncService.php b/apps/dav/lib/CardDAV/SyncService.php index da798c5768e..d73ec9029f9 100644 --- a/apps/dav/lib/CardDAV/SyncService.php +++ b/apps/dav/lib/CardDAV/SyncService.php @@ -274,7 +274,7 @@ class SyncService { $allCards = $this->backend->getCards($systemAddressBook['id']); foreach ($allCards as $card) { $vCard = Reader::read($card['carddata']); - $uid = $vCard->UID->getValue(); + $uid = isset($vCard->{'X-NEXTCLOUD-UID'}) ? $vCard->{'X-NEXTCLOUD-UID'}->getValue() : $vCard->UID->getValue(); // load backend and see if user exists if (!$this->userManager->userExists($uid)) { $this->deleteUser($card['uri']); |