diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2016-03-23 12:28:54 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2016-03-23 12:29:45 +0100 |
commit | e979b9c73561cb28f2be4c783477d8bdc34489b2 (patch) | |
tree | 43fe9e36355aee3baeff827e0f004f63c6371a88 /apps/dav/lib/caldav/birthdayservice.php | |
parent | 7800b9dbc82dfcb6f1fe46f89a215d97afec071c (diff) | |
download | nextcloud-server-e979b9c73561cb28f2be4c783477d8bdc34489b2.tar.gz nextcloud-server-e979b9c73561cb28f2be4c783477d8bdc34489b2.zip |
Propagate birthdays of shared addressbooks to the sharee's birthday calendar as well
Diffstat (limited to 'apps/dav/lib/caldav/birthdayservice.php')
-rw-r--r-- | apps/dav/lib/caldav/birthdayservice.php | 58 |
1 files changed, 40 insertions, 18 deletions
diff --git a/apps/dav/lib/caldav/birthdayservice.php b/apps/dav/lib/caldav/birthdayservice.php index 274341949b3..7fca4dc8c64 100644 --- a/apps/dav/lib/caldav/birthdayservice.php +++ b/apps/dav/lib/caldav/birthdayservice.php @@ -48,22 +48,33 @@ class BirthdayService { */ public function onCardChanged($addressBookId, $cardUri, $cardData) { + $shares = $this->cardDavBackEnd->getShares($addressBookId); + // TODO: resolve group shares + $shares = array_filter($shares, function($share) { + return !$share['{http://owncloud.org/ns}group-share']; + }); + $targetPrincipals = array_map(function($share) { + return $share['{http://owncloud.org/ns}principal']; + }, $shares); + $book = $this->cardDavBackEnd->getAddressBookById($addressBookId); - $principalUri = $book['principaluri']; - $calendar = $this->ensureCalendarExists($principalUri); - $objectUri = $book['uri'] . '-' . $cardUri. '.ics'; - $calendarData = $this->buildBirthdayFromContact($cardData); - $existing = $this->calDavBackEnd->getCalendarObject($calendar['id'], $objectUri); - if (is_null($calendarData)) { - if (!is_null($existing)) { - $this->calDavBackEnd->deleteCalendarObject($calendar['id'], $objectUri); - } - } else { - if (is_null($existing)) { - $this->calDavBackEnd->createCalendarObject($calendar['id'], $objectUri, $calendarData->serialize()); + $targetPrincipals[] = $book['principaluri']; + foreach ($targetPrincipals as $principalUri) { + $calendar = $this->ensureCalendarExists($principalUri); + $objectUri = $book['uri'] . '-' . $cardUri. '.ics'; + $calendarData = $this->buildBirthdayFromContact($cardData); + $existing = $this->calDavBackEnd->getCalendarObject($calendar['id'], $objectUri); + if (is_null($calendarData)) { + if (!is_null($existing)) { + $this->calDavBackEnd->deleteCalendarObject($calendar['id'], $objectUri); + } } else { - if ($this->birthdayEvenChanged($existing['calendardata'], $calendarData)) { - $this->calDavBackEnd->updateCalendarObject($calendar['id'], $objectUri, $calendarData->serialize()); + if (is_null($existing)) { + $this->calDavBackEnd->createCalendarObject($calendar['id'], $objectUri, $calendarData->serialize()); + } else { + if ($this->birthdayEvenChanged($existing['calendardata'], $calendarData)) { + $this->calDavBackEnd->updateCalendarObject($calendar['id'], $objectUri, $calendarData->serialize()); + } } } } @@ -74,11 +85,22 @@ class BirthdayService { * @param string $cardUri */ public function onCardDeleted($addressBookId, $cardUri) { + $shares = $this->cardDavBackEnd->getShares($addressBookId); + // TODO: resolve group shares + $shares = array_filter($shares, function($share) { + return !$share['{http://owncloud.org/ns}group-share']; + }); + $targetPrincipals = array_map(function($share) { + return $share['href']; + }, $shares); + $book = $this->cardDavBackEnd->getAddressBookById($addressBookId); - $principalUri = $book['principaluri']; - $calendar = $this->ensureCalendarExists($principalUri); - $objectUri = $book['uri'] . '-' . $cardUri. '.ics'; - $this->calDavBackEnd->deleteCalendarObject($calendar['id'], $objectUri); + $targetPrincipals[] = $book['principaluri']; + foreach ($targetPrincipals as $principalUri) { + $calendar = $this->ensureCalendarExists($principalUri); + $objectUri = $book['uri'] . '-' . $cardUri . '.ics'; + $this->calDavBackEnd->deleteCalendarObject($calendar['id'], $objectUri); + } } /** |