diff --git a/README.md b/README.md index e5f0bac..51a0ff9 100644 --- a/README.md +++ b/README.md @@ -291,6 +291,48 @@ Notification payload: eventType: 'OCA\\DAV\\Events\\CalendarObjectDeletedEvent' } ``` +### Calendar Object Restore from Trash + +Fires whenever a calendar event is restored from Trashbin. + +Config name: `webhooks_calendar_object_restore_from_trash_url` + +Notification payload: +```javascript +{ + calendarId: 30, + calendarData: { + id: '30', + uri: 'test', + principaluri: 'principals/users/admin', + // [...] + '{http://apple.com/ns/ical/}calendar-order': 0, + '{http://apple.com/ns/ical/}calendar-color': '#499AA2', + '{http://nextcloud.com/ns}deleted-at': null, + '{http://nextcloud.com/ns}owner-displayname': 'admin' + }, + shares: [], + objectData: { + id: '118', + uri: 'E855AF90-4A9B-4223-95E1-1FE700C4BDC0-deleted.ics', + lastmodified: '1660572955', + etag: '"79c725344d04a73b9bad1addee500bcf"', + calendarid: '30', + size: 748, + calendardata: 'BEGIN:VCALENDAR\r\n' + + 'CALSCALE:GREGORIAN\r\n' + + 'VERSION:2.0\r\n' + + 'PRODID:-//IDN nextcloud.com//Calendar app 3.3.1//EN\r\n' + + 'BEGIN:VEVENT\r\n' + + // [...] more data in iCal format + 'END:VTIMEZONE\r\n' + + 'END:VCALENDAR', + component: 'vevent', + classification: 0 + }, + eventType: "OCA\\DAV\\Events\\CalendarObjectRestoredEvent" +} +``` ### Login Failed diff --git a/appinfo/info.xml b/appinfo/info.xml index 6013342..e8ffeb9 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -22,7 +22,7 @@ Outgoing webhooks can be triggered by either Nextcloud's internal events specifi https://github.com/kffl/nextcloud-webhooks https://raw.githubusercontent.com/kffl/nextcloud-webhooks/master/screenshots/admin.png - + diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index a694f23..7c87e9b 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -29,6 +29,7 @@ use OCA\Webhooks\Listeners\CalendarObjectUpdatedListener; use OCA\Webhooks\Listeners\CalendarObjectDeletedListener; use OCA\Webhooks\Listeners\CalendarObjectMovedToTrashListener; +use OCA\Webhooks\Listeners\CalendarObjectRestoredFromTrashListener; use OCA\Webhooks\Listeners\UserLiveStatusListener; use OCA\Webhooks\Listeners\LoginFailedListener; use OCA\Webhooks\Listeners\PasswordUpdatedListener; @@ -42,6 +43,7 @@ use OCA\DAV\Events\CalendarObjectCreatedEvent; use OCA\DAV\Events\CalendarObjectDeletedEvent; use OCA\DAV\Events\CalendarObjectMovedToTrashEvent; +use OCA\DAV\Events\CalendarObjectRestoredEvent; use OCA\DAV\Events\CalendarObjectUpdatedEvent; use OCA\Webhooks\Flow\RegisterFlowOperationsListener; use OCP\Authentication\Events\LoginFailedEvent; @@ -76,6 +78,7 @@ public function register(IRegistrationContext $context):void { $context->registerEventListener(CalendarObjectUpdatedEvent::class, CalendarObjectUpdatedListener::class); $context->registerEventListener(CalendarObjectDeletedEvent::class, CalendarObjectDeletedListener::class); $context->registerEventListener(CalendarObjectMovedToTrashEvent::class, CalendarObjectMovedToTrashListener::class); + $context->registerEventListener(CalendarObjectRestoredEvent::class, CalendarObjectRestoredFromTrashListener::class); $context->registerEventListener(LoginFailedEvent::class, LoginFailedListener::class); $context->registerEventListener(PasswordUpdatedEvent::class, PasswordUpdatedListener::class); $context->registerEventListener(ShareCreatedEvent::class, ShareCreatedListener::class); @@ -97,6 +100,7 @@ public static function getAllConfigNames() { "Calendar Object Updated" => CalendarObjectUpdatedListener::CONFIG_NAME, "Calendar Object Deleted" => CalendarObjectDeletedListener::CONFIG_NAME, "Calendar Object Moved to Trash" => CalendarObjectMovedToTrashListener::CONFIG_NAME, + "Calendar Object Restored from Trash" => CalendarObjectRestoredFromTrashListener::CONFIG_NAME, "Login Failed" => LoginFailedListener::CONFIG_NAME, "Password Updated" => PasswordUpdatedListener::CONFIG_NAME, "Share Created" => ShareCreatedListener::CONFIG_NAME, diff --git a/lib/Listeners/CalendarObjectRestroeFromTrashListener.php b/lib/Listeners/CalendarObjectRestroeFromTrashListener.php new file mode 100644 index 0000000..f75caee --- /dev/null +++ b/lib/Listeners/CalendarObjectRestroeFromTrashListener.php @@ -0,0 +1,51 @@ + + * + * @author Sebastian Sternfeld + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +namespace OCA\Webhooks\Listeners; + +use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IEventListener; +use OCA\DAV\Events\CalendarObjectRestoredEvent; + +/** + * Class CalendarObjectUpdatedListener + * + * @package OCA\Webhooks\Listeners + */ +class CalendarObjectRestoredFromTrashListener extends AbstractListener implements IEventListener { + + public const CONFIG_NAME = "webhooks_calendar_object_restore_from_trash_url"; + + public function handleIncomingEvent(Event $event) { + if (!($event instanceOf CalendarObjectRestoredEvent)) { + return; + } + + return array( + "calendarId" => $event->getCalendarId(), + "calendarData" => $event->getCalendarData(), + "shares" => $event->getShares(), + "objectData" => $event->getObjectData(), + ); + } +} \ No newline at end of file