From f5680f1049464af547defe0e996dcb3610b0ceee Mon Sep 17 00:00:00 2001 From: Sebastian Sternfeld Date: Wed, 30 Oct 2024 11:46:19 +0100 Subject: [PATCH 1/5] feat: add CalendarObjectRestoreFromTrash event listener --- lib/AppInfo/Application.php | 4 ++ ...CalendarObjectRestroeFromTrashListener.php | 51 +++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 lib/Listeners/CalendarObjectRestroeFromTrashListener.php 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..3d44649 --- /dev/null +++ b/lib/Listeners/CalendarObjectRestroeFromTrashListener.php @@ -0,0 +1,51 @@ + + * + * @author Paweł Kuffel + * + * @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 From 6acbf0cd7fc4a6f26fa241f29458f50ceb7f1aea Mon Sep 17 00:00:00 2001 From: Sebastian Sternfeld Date: Wed, 30 Oct 2024 11:48:09 +0100 Subject: [PATCH 2/5] docs: add CalendarObjectRestoreFromTrash event usage info --- README.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) 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 From cf5dcb4dc05c55ee54ef9b0967fca30a762a156c Mon Sep 17 00:00:00 2001 From: Sebastian Sternfeld Date: Wed, 30 Oct 2024 11:49:40 +0100 Subject: [PATCH 3/5] deps: bump max Nextcloud version to 30 --- appinfo/info.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 - + From fd9762066805eb3d9787d5799051882eefc4b6a5 Mon Sep 17 00:00:00 2001 From: Sebastian Sternfeld Date: Wed, 30 Oct 2024 12:30:54 +0100 Subject: [PATCH 4/5] docs: fix annotations --- lib/Listeners/CalendarObjectRestroeFromTrashListener.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Listeners/CalendarObjectRestroeFromTrashListener.php b/lib/Listeners/CalendarObjectRestroeFromTrashListener.php index 3d44649..01d6553 100644 --- a/lib/Listeners/CalendarObjectRestroeFromTrashListener.php +++ b/lib/Listeners/CalendarObjectRestroeFromTrashListener.php @@ -1,9 +1,9 @@ + * @copyright Copyright (c) 2024 Sebastian Stermfeöd * - * @author Paweł Kuffel + * @author Sebastian Stermfeöd * * @license GNU AGPL version 3 or any later version * From 77ddbb0d872bf49c1e378f9bfdab17d4f7fc99e8 Mon Sep 17 00:00:00 2001 From: Sebastian Sternfeld Date: Wed, 30 Oct 2024 13:24:45 +0100 Subject: [PATCH 5/5] docs: fix annotations --- lib/Listeners/CalendarObjectRestroeFromTrashListener.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Listeners/CalendarObjectRestroeFromTrashListener.php b/lib/Listeners/CalendarObjectRestroeFromTrashListener.php index 01d6553..f75caee 100644 --- a/lib/Listeners/CalendarObjectRestroeFromTrashListener.php +++ b/lib/Listeners/CalendarObjectRestroeFromTrashListener.php @@ -1,9 +1,9 @@ + * @copyright Copyright (c) 2024 Sebastian Sternfeld * - * @author Sebastian Stermfeöd + * @author Sebastian Sternfeld * * @license GNU AGPL version 3 or any later version *