summaryrefslogtreecommitdiffstats
path: root/apps/dav/lib/caldav/birthdayservice.php
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2016-03-23 12:28:54 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2016-03-23 12:29:45 +0100
commite979b9c73561cb28f2be4c783477d8bdc34489b2 (patch)
tree43fe9e36355aee3baeff827e0f004f63c6371a88 /apps/dav/lib/caldav/birthdayservice.php
parent7800b9dbc82dfcb6f1fe46f89a215d97afec071c (diff)
downloadnextcloud-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.php58
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);
+ }
}
/**