Propagate birthdays of shared addressbooks to the sharee's birthday calendar as well
This commit is contained in:
parent
7800b9dbc8
commit
e979b9c735
|
@ -147,6 +147,7 @@ class Application extends App {
|
|||
|
||||
$listener = function($event) {
|
||||
if ($event instanceof GenericEvent) {
|
||||
/** @var BirthdayService $b */
|
||||
$b = $this->getContainer()->query('BirthdayService');
|
||||
$b->onCardChanged(
|
||||
$event->getArgument('addressBookId'),
|
||||
|
@ -161,6 +162,7 @@ class Application extends App {
|
|||
$dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::updateCard', $listener);
|
||||
$dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::deleteCard', function($event) {
|
||||
if ($event instanceof GenericEvent) {
|
||||
/** @var BirthdayService $b */
|
||||
$b = $this->getContainer()->query('BirthdayService');
|
||||
$b->onCardDeleted(
|
||||
$event->getArgument('addressBookId'),
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -161,7 +161,8 @@ class Backend {
|
|||
'commonName' => isset($p['{DAV:}displayname']) ? $p['{DAV:}displayname'] : '',
|
||||
'status' => 1,
|
||||
'readOnly' => ($row['access'] == self::ACCESS_READ),
|
||||
'{'.\OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD.'}principal' => $row['principaluri']
|
||||
'{http://owncloud.org/ns}principal' => $row['principaluri'],
|
||||
'{http://owncloud.org/ns}group-share' => is_null($p)
|
||||
];
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue