feat(dav): add webhook compatibility for calendar object events

Signed-off-by: Edward Ly <contact@edward.ly>
pull/51082/head
Edward Ly 7 months ago
parent bb6b462690
commit dd181f4b2a
No known key found for this signature in database
GPG Key ID: 62EA9B12D5B3AC47
  1. 26
      apps/dav/lib/CalDAV/CalDavBackend.php
  2. 7
      lib/composer/composer/autoload_classmap.php
  3. 7
      lib/composer/composer/autoload_static.php
  4. 79
      lib/public/Calendar/Events/AbstractCalendarObjectEvent.php
  5. 15
      lib/public/Calendar/Events/CalendarObjectCreatedEvent.php
  6. 15
      lib/public/Calendar/Events/CalendarObjectDeletedEvent.php
  7. 104
      lib/public/Calendar/Events/CalendarObjectMovedEvent.php
  8. 15
      lib/public/Calendar/Events/CalendarObjectMovedToTrashEvent.php
  9. 15
      lib/public/Calendar/Events/CalendarObjectRestoredEvent.php
  10. 15
      lib/public/Calendar/Events/CalendarObjectUpdatedEvent.php

@ -34,6 +34,12 @@ use OCA\DAV\Events\SubscriptionCreatedEvent;
use OCA\DAV\Events\SubscriptionDeletedEvent;
use OCA\DAV\Events\SubscriptionUpdatedEvent;
use OCP\AppFramework\Db\TTransactional;
use OCP\Calendar\Events\CalendarObjectCreatedEvent as PublicCalendarObjectCreatedEvent;
use OCP\Calendar\Events\CalendarObjectDeletedEvent as PublicCalendarObjectDeletedEvent;
use OCP\Calendar\Events\CalendarObjectMovedEvent as PublicCalendarObjectMovedEvent;
use OCP\Calendar\Events\CalendarObjectMovedToTrashEvent as PublicCalendarObjectMovedToTrashEvent;
use OCP\Calendar\Events\CalendarObjectRestoredEvent as PublicCalendarObjectRestoredEvent;
use OCP\Calendar\Events\CalendarObjectUpdatedEvent as PublicCalendarObjectUpdatedEvent;
use OCP\Calendar\Exceptions\CalendarException;
use OCP\DB\Exception;
use OCP\DB\QueryBuilder\IQueryBuilder;
@ -1318,6 +1324,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$shares = $this->getShares($calendarId);
$this->dispatcher->dispatchTyped(new CalendarObjectCreatedEvent($calendarId, $calendarRow, $shares, $objectRow));
$this->dispatcher->dispatchTyped(new PublicCalendarObjectCreatedEvent($calendarId, $calendarRow, $shares, $objectRow));
} else {
$subscriptionRow = $this->getSubscriptionById($calendarId);
@ -1378,6 +1385,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$shares = $this->getShares($calendarId);
$this->dispatcher->dispatchTyped(new CalendarObjectUpdatedEvent($calendarId, $calendarRow, $shares, $objectRow));
$this->dispatcher->dispatchTyped(new PublicCalendarObjectUpdatedEvent($calendarId, $calendarRow, $shares, $objectRow));
} else {
$subscriptionRow = $this->getSubscriptionById($calendarId);
@ -1439,6 +1447,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$targetShares = $this->getShares($targetCalendarId);
$sourceCalendarRow = $this->getCalendarById($sourceCalendarId);
$this->dispatcher->dispatchTyped(new CalendarObjectMovedEvent($sourceCalendarId, $sourceCalendarRow, $targetCalendarId, $targetCalendarRow, $sourceShares, $targetShares, $object));
$this->dispatcher->dispatchTyped(new PublicCalendarObjectMovedEvent($sourceCalendarId, $sourceCalendarRow, $targetCalendarId, $targetCalendarRow, $sourceShares, $targetShares, $object));
}
return true;
}, $this->db);
@ -1497,6 +1506,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$shares = $this->getShares($calendarId);
$this->dispatcher->dispatchTyped(new CalendarObjectDeletedEvent($calendarId, $calendarRow, $shares, $data));
$this->dispatcher->dispatchTyped(new PublicCalendarObjectDeletedEvent($calendarId, $calendarRow, $shares, $data));
} else {
$subscriptionRow = $this->getSubscriptionById($calendarId);
@ -1546,6 +1556,14 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$data
)
);
$this->dispatcher->dispatchTyped(
new PublicCalendarObjectMovedToTrashEvent(
$calendarId,
$calendarData,
$this->getShares($calendarId),
$data
)
);
}
}
@ -1605,6 +1623,14 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$row
)
);
$this->dispatcher->dispatchTyped(
new PublicCalendarObjectRestoredEvent(
(int)$objectData['calendarid'],
$calendarRow,
$this->getShares((int)$row['calendarid']),
$row
)
);
}, $this->db);
}

@ -190,6 +190,13 @@ return array(
'OCP\\Broadcast\\Events\\IBroadcastEvent' => $baseDir . '/lib/public/Broadcast/Events/IBroadcastEvent.php',
'OCP\\Cache\\CappedMemoryCache' => $baseDir . '/lib/public/Cache/CappedMemoryCache.php',
'OCP\\Calendar\\BackendTemporarilyUnavailableException' => $baseDir . '/lib/public/Calendar/BackendTemporarilyUnavailableException.php',
'OCP\\Calendar\\Events\\AbstractCalendarObjectEvent' => $baseDir . '/lib/public/Calendar/Events/AbstractCalendarObjectEvent.php',
'OCP\\Calendar\\Events\\CalendarObjectCreatedEvent' => $baseDir . '/lib/public/Calendar/Events/CalendarObjectCreatedEvent.php',
'OCP\\Calendar\\Events\\CalendarObjectDeletedEvent' => $baseDir . '/lib/public/Calendar/Events/CalendarObjectDeletedEvent.php',
'OCP\\Calendar\\Events\\CalendarObjectMovedEvent' => $baseDir . '/lib/public/Calendar/Events/CalendarObjectMovedEvent.php',
'OCP\\Calendar\\Events\\CalendarObjectMovedToTrashEvent' => $baseDir . '/lib/public/Calendar/Events/CalendarObjectMovedToTrashEvent.php',
'OCP\\Calendar\\Events\\CalendarObjectRestoredEvent' => $baseDir . '/lib/public/Calendar/Events/CalendarObjectRestoredEvent.php',
'OCP\\Calendar\\Events\\CalendarObjectUpdatedEvent' => $baseDir . '/lib/public/Calendar/Events/CalendarObjectUpdatedEvent.php',
'OCP\\Calendar\\Exceptions\\CalendarException' => $baseDir . '/lib/public/Calendar/Exceptions/CalendarException.php',
'OCP\\Calendar\\IAvailabilityResult' => $baseDir . '/lib/public/Calendar/IAvailabilityResult.php',
'OCP\\Calendar\\ICalendar' => $baseDir . '/lib/public/Calendar/ICalendar.php',

@ -239,6 +239,13 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
'OCP\\Broadcast\\Events\\IBroadcastEvent' => __DIR__ . '/../../..' . '/lib/public/Broadcast/Events/IBroadcastEvent.php',
'OCP\\Cache\\CappedMemoryCache' => __DIR__ . '/../../..' . '/lib/public/Cache/CappedMemoryCache.php',
'OCP\\Calendar\\BackendTemporarilyUnavailableException' => __DIR__ . '/../../..' . '/lib/public/Calendar/BackendTemporarilyUnavailableException.php',
'OCP\\Calendar\\Events\\AbstractCalendarObjectEvent' => __DIR__ . '/../../..' . '/lib/public/Calendar/Events/AbstractCalendarObjectEvent.php',
'OCP\\Calendar\\Events\\CalendarObjectCreatedEvent' => __DIR__ . '/../../..' . '/lib/public/Calendar/Events/CalendarObjectCreatedEvent.php',
'OCP\\Calendar\\Events\\CalendarObjectDeletedEvent' => __DIR__ . '/../../..' . '/lib/public/Calendar/Events/CalendarObjectDeletedEvent.php',
'OCP\\Calendar\\Events\\CalendarObjectMovedEvent' => __DIR__ . '/../../..' . '/lib/public/Calendar/Events/CalendarObjectMovedEvent.php',
'OCP\\Calendar\\Events\\CalendarObjectMovedToTrashEvent' => __DIR__ . '/../../..' . '/lib/public/Calendar/Events/CalendarObjectMovedToTrashEvent.php',
'OCP\\Calendar\\Events\\CalendarObjectRestoredEvent' => __DIR__ . '/../../..' . '/lib/public/Calendar/Events/CalendarObjectRestoredEvent.php',
'OCP\\Calendar\\Events\\CalendarObjectUpdatedEvent' => __DIR__ . '/../../..' . '/lib/public/Calendar/Events/CalendarObjectUpdatedEvent.php',
'OCP\\Calendar\\Exceptions\\CalendarException' => __DIR__ . '/../../..' . '/lib/public/Calendar/Exceptions/CalendarException.php',
'OCP\\Calendar\\IAvailabilityResult' => __DIR__ . '/../../..' . '/lib/public/Calendar/IAvailabilityResult.php',
'OCP\\Calendar\\ICalendar' => __DIR__ . '/../../..' . '/lib/public/Calendar/ICalendar.php',

@ -0,0 +1,79 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCP\Calendar\Events;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IWebhookCompatibleEvent;
/**
* @since 32.0.0
*/
abstract class AbstractCalendarObjectEvent extends Event implements IWebhookCompatibleEvent {
/**
* @param int $calendarId
* @param array $calendarData
* @param array $shares
* @param array $objectData
* @since 32.0.0
*/
public function __construct(
private int $calendarId,
private array $calendarData,
private array $shares,
private array $objectData,
) {
parent::__construct();
}
/**
* @return int
* @since 32.0.0
*/
public function getCalendarId(): int {
return $this->calendarId;
}
/**
* @return array
* @since 32.0.0
*/
public function getCalendarData(): array {
return $this->calendarData;
}
/**
* @return array
* @since 32.0.0
*/
public function getShares(): array {
return $this->shares;
}
/**
* @return array
* @since 32.0.0
*/
public function getObjectData(): array {
return $this->objectData;
}
/**
* @return array
* @since 32.0.0
*/
public function getWebhookSerializable(): array {
return [
'calendarId' => $this->getCalendarId(),
'calendarData' => $this->getCalendarData(),
'shares' => $this->getShares(),
'objectData' => $this->getObjectData(),
];
}
}

@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCP\Calendar\Events;
/**
* @since 32.0.0
*/
class CalendarObjectCreatedEvent extends AbstractCalendarObjectEvent {
}

@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCP\Calendar\Events;
/**
* @since 32.0.0
*/
class CalendarObjectDeletedEvent extends AbstractCalendarObjectEvent {
}

@ -0,0 +1,104 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCP\Calendar\Events;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IWebhookCompatibleEvent;
/**
* @since 32.0.0
*/
class CalendarObjectMovedEvent extends Event implements IWebhookCompatibleEvent {
/**
* @since 32.0.0
*/
public function __construct(
private int $sourceCalendarId,
private array $sourceCalendarData,
private int $targetCalendarId,
private array $targetCalendarData,
private array $sourceShares,
private array $targetShares,
private array $objectData,
) {
parent::__construct();
}
/**
* @return int
* @since 32.0.0
*/
public function getSourceCalendarId(): int {
return $this->sourceCalendarId;
}
/**
* @return array
* @since 32.0.0
*/
public function getSourceCalendarData(): array {
return $this->sourceCalendarData;
}
/**
* @return int
* @since 32.0.0
*/
public function getTargetCalendarId(): int {
return $this->targetCalendarId;
}
/**
* @return array
* @since 32.0.0
*/
public function getTargetCalendarData(): array {
return $this->targetCalendarData;
}
/**
* @return array
* @since 32.0.0
*/
public function getSourceShares(): array {
return $this->sourceShares;
}
/**
* @return array
* @since 32.0.0
*/
public function getTargetShares(): array {
return $this->targetShares;
}
/**
* @return array
* @since 32.0.0
*/
public function getObjectData(): array {
return $this->objectData;
}
/**
* @return array
* @since 32.0.0
*/
public function getWebhookSerializable(): array {
return [
'sourceCalendarId' => $this->getSourceCalendarId(),
'sourceCalendarData' => $this->getSourceCalendarData(),
'targetCalendarId' => $this->getTargetCalendarId(),
'targetCalendarData' => $this->getTargetCalendarData(),
'sourceShares' => $this->getSourceShares(),
'targetShares' => $this->getTargetShares(),
'objectData' => $this->getObjectData(),
];
}
}

@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCP\Calendar\Events;
/**
* @since 32.0.0
*/
class CalendarObjectMovedToTrashEvent extends AbstractCalendarObjectEvent {
}

@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCP\Calendar\Events;
/**
* @since 32.0.0
*/
class CalendarObjectRestoredEvent extends AbstractCalendarObjectEvent {
}

@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCP\Calendar\Events;
/**
* @since 32.0.0
*/
class CalendarObjectUpdatedEvent extends AbstractCalendarObjectEvent {
}
Loading…
Cancel
Save