Passed
Push — master ( 3e35d2...9c88e3 )
by Christoph
16:48 queued 11s
created
apps/dav/lib/AppInfo/Application.php 1 patch
Indentation   +320 added lines, -320 removed lines patch added patch discarded remove patch
@@ -81,333 +81,333 @@
 block discarded – undo
81 81
 use function strpos;
82 82
 
83 83
 class Application extends App implements IBootstrap {
84
-	public const APP_ID = 'dav';
84
+    public const APP_ID = 'dav';
85 85
 
86
-	public function __construct() {
87
-		parent::__construct(self::APP_ID);
88
-	}
86
+    public function __construct() {
87
+        parent::__construct(self::APP_ID);
88
+    }
89 89
 
90
-	public function register(IRegistrationContext $context): void {
91
-		$context->registerServiceAlias('CardDAVSyncService', SyncService::class);
92
-		$context->registerService(PhotoCache::class, function (ContainerInterface $c) {
93
-			/** @var IServerContainer $server */
94
-			$server = $c->get(IServerContainer::class);
90
+    public function register(IRegistrationContext $context): void {
91
+        $context->registerServiceAlias('CardDAVSyncService', SyncService::class);
92
+        $context->registerService(PhotoCache::class, function (ContainerInterface $c) {
93
+            /** @var IServerContainer $server */
94
+            $server = $c->get(IServerContainer::class);
95 95
 
96
-			return new PhotoCache(
97
-				$server->getAppDataDir('dav-photocache'),
98
-				$c->get(ILogger::class)
99
-			);
100
-		});
96
+            return new PhotoCache(
97
+                $server->getAppDataDir('dav-photocache'),
98
+                $c->get(ILogger::class)
99
+            );
100
+        });
101 101
 
102
-		/*
102
+        /*
103 103
 		 * Register capabilities
104 104
 		 */
105
-		$context->registerCapability(Capabilities::class);
105
+        $context->registerCapability(Capabilities::class);
106 106
 
107
-		/*
107
+        /*
108 108
 		 * Register Search Providers
109 109
 		 */
110
-		$context->registerSearchProvider(ContactsSearchProvider::class);
111
-		$context->registerSearchProvider(EventsSearchProvider::class);
112
-		$context->registerSearchProvider(TasksSearchProvider::class);
113
-
114
-		/**
115
-		 * Register event listeners
116
-		 */
117
-		$context->registerEventListener(CalendarObjectCreatedEvent::class, CalendarContactInteractionListener::class);
118
-		$context->registerEventListener(CalendarObjectUpdatedEvent::class, CalendarContactInteractionListener::class);
119
-		$context->registerEventListener(CalendarShareUpdatedEvent::class, CalendarContactInteractionListener::class);
120
-	}
121
-
122
-	public function boot(IBootContext $context): void {
123
-		// Load all dav apps
124
-		\OC_App::loadApps(['dav']);
125
-
126
-		$context->injectFn([$this, 'registerHooks']);
127
-		$context->injectFn([$this, 'registerContactsManager']);
128
-		$context->injectFn([$this, 'registerCalendarManager']);
129
-		$context->injectFn([$this, 'registerNotifier']);
130
-		$context->injectFn([$this, 'registerCalendarReminders']);
131
-	}
132
-
133
-	public function registerHooks(HookManager $hm,
134
-								   EventDispatcherInterface $dispatcher,
135
-								   IAppContainer $container,
136
-								   IServerContainer $serverContainer) {
137
-		$hm->setup();
138
-
139
-		// first time login event setup
140
-		$dispatcher->addListener(IUser::class . '::firstLogin', function ($event) use ($hm) {
141
-			if ($event instanceof GenericEvent) {
142
-				$hm->firstLogin($event->getSubject());
143
-			}
144
-		});
145
-
146
-		$birthdayListener = function ($event) use ($container) {
147
-			if ($event instanceof GenericEvent) {
148
-				/** @var BirthdayService $b */
149
-				$b = $container->query(BirthdayService::class);
150
-				$b->onCardChanged(
151
-					(int) $event->getArgument('addressBookId'),
152
-					(string) $event->getArgument('cardUri'),
153
-					(string) $event->getArgument('cardData')
154
-				);
155
-			}
156
-		};
157
-
158
-		$dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::createCard', $birthdayListener);
159
-		$dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::updateCard', $birthdayListener);
160
-		$dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::deleteCard', function ($event) use ($container) {
161
-			if ($event instanceof GenericEvent) {
162
-				/** @var BirthdayService $b */
163
-				$b = $container->query(BirthdayService::class);
164
-				$b->onCardDeleted(
165
-					(int) $event->getArgument('addressBookId'),
166
-					(string) $event->getArgument('cardUri')
167
-				);
168
-			}
169
-		});
170
-
171
-		$clearPhotoCache = function ($event) use ($container) {
172
-			if ($event instanceof GenericEvent) {
173
-				/** @var PhotoCache $p */
174
-				$p = $container->query(PhotoCache::class);
175
-				$p->delete(
176
-					$event->getArgument('addressBookId'),
177
-					$event->getArgument('cardUri')
178
-				);
179
-			}
180
-		};
181
-		$dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::updateCard', $clearPhotoCache);
182
-		$dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::deleteCard', $clearPhotoCache);
183
-
184
-		$dispatcher->addListener('OC\AccountManager::userUpdated', function (GenericEvent $event) use ($container) {
185
-			$user = $event->getSubject();
186
-			/** @var SyncService $syncService */
187
-			$syncService = $container->query(SyncService::class);
188
-			$syncService->updateUser($user);
189
-		});
190
-
191
-		$dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::createCalendar', function (GenericEvent $event) use ($container) {
192
-			/** @var Backend $backend */
193
-			$backend = $container->query(Backend::class);
194
-			$backend->onCalendarAdd(
195
-				$event->getArgument('calendarData')
196
-			);
197
-		});
198
-		$dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateCalendar', function (GenericEvent $event) use ($container) {
199
-			/** @var Backend $backend */
200
-			$backend = $container->query(Backend::class);
201
-			$backend->onCalendarUpdate(
202
-				$event->getArgument('calendarData'),
203
-				$event->getArgument('shares'),
204
-				$event->getArgument('propertyMutations')
205
-			);
206
-		});
207
-		$dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar', function (GenericEvent $event) use ($container) {
208
-			/** @var Backend $backend */
209
-			$backend = $container->query(Backend::class);
210
-			$backend->onCalendarDelete(
211
-				$event->getArgument('calendarData'),
212
-				$event->getArgument('shares')
213
-			);
214
-
215
-			/** @var ReminderBackend $reminderBackend */
216
-			$reminderBackend = $container->query(ReminderBackend::class);
217
-			$reminderBackend->cleanRemindersForCalendar(
218
-				(int) $event->getArgument('calendarId')
219
-			);
220
-		});
221
-		$dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateShares', function (GenericEvent $event) use ($container) {
222
-			/** @var Backend $backend */
223
-			$backend = $container->query(Backend::class);
224
-			$backend->onCalendarUpdateShares(
225
-				$event->getArgument('calendarData'),
226
-				$event->getArgument('shares'),
227
-				$event->getArgument('add'),
228
-				$event->getArgument('remove')
229
-			);
230
-
231
-			// Here we should recalculate if reminders should be sent to new or old sharees
232
-		});
233
-
234
-		$dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::publishCalendar', function (GenericEvent $event) use ($container) {
235
-			/** @var Backend $backend */
236
-			$backend = $container->query(Backend::class);
237
-			$backend->onCalendarPublication(
238
-				$event->getArgument('calendarData'),
239
-				$event->getArgument('public')
240
-			);
241
-		});
242
-
243
-		$listener = function (GenericEvent $event, $eventName) use ($container) {
244
-			/** @var Backend $backend */
245
-			$backend = $container->query(Backend::class);
246
-
247
-			$subject = Event::SUBJECT_OBJECT_ADD;
248
-			if ($eventName === '\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject') {
249
-				$subject = Event::SUBJECT_OBJECT_UPDATE;
250
-			} elseif ($eventName === '\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject') {
251
-				$subject = Event::SUBJECT_OBJECT_DELETE;
252
-			}
253
-			$backend->onTouchCalendarObject(
254
-				$subject,
255
-				$event->getArgument('calendarData'),
256
-				$event->getArgument('shares'),
257
-				$event->getArgument('objectData')
258
-			);
259
-
260
-			/** @var ReminderService $reminderBackend */
261
-			$reminderService = $container->query(ReminderService::class);
262
-
263
-			$reminderService->onTouchCalendarObject(
264
-				$eventName,
265
-				$event->getArgument('objectData')
266
-			);
267
-		};
268
-		$dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject', $listener);
269
-		$dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject', $listener);
270
-		$dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject', $listener);
271
-
272
-		/**
273
-		 * In case the user has set their default calendar to this one
274
-		 */
275
-		$dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar', function (GenericEvent $event) use ($serverContainer) {
276
-			/** @var IConfig $config */
277
-			$config = $serverContainer->getConfig();
278
-			$principalUri = $event->getArgument('calendarData')['principaluri'];
279
-			if (strpos($principalUri, 'principals/users') === 0) {
280
-				list(, $UID) = \Sabre\Uri\split($principalUri);
281
-				$uri = $event->getArgument('calendarData')['uri'];
282
-				if ($config->getUserValue($UID, 'dav', 'defaultCalendar') === $uri) {
283
-					$config->deleteUserValue($UID, 'dav', 'defaultCalendar');
284
-				}
285
-			}
286
-		});
287
-
288
-		$dispatcher->addListener('OCP\Federation\TrustedServerEvent::remove',
289
-			function (GenericEvent $event) {
290
-				/** @var CardDavBackend $cardDavBackend */
291
-				$cardDavBackend = \OC::$server->query(CardDavBackend::class);
292
-				$addressBookUri = $event->getSubject();
293
-				$addressBook = $cardDavBackend->getAddressBooksByUri('principals/system/system', $addressBookUri);
294
-				if (!is_null($addressBook)) {
295
-					$cardDavBackend->deleteAddressBook($addressBook['id']);
296
-				}
297
-			}
298
-		);
299
-
300
-		$dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::createSubscription',
301
-			function (GenericEvent $event) use ($container, $serverContainer) {
302
-				$jobList = $serverContainer->getJobList();
303
-				$subscriptionData = $event->getArgument('subscriptionData');
304
-
305
-				/**
306
-				 * Initial subscription refetch
307
-				 *
308
-				 * @var RefreshWebcalService $refreshWebcalService
309
-				 */
310
-				$refreshWebcalService = $container->query(RefreshWebcalService::class);
311
-				$refreshWebcalService->refreshSubscription(
312
-					(string) $subscriptionData['principaluri'],
313
-					(string) $subscriptionData['uri']
314
-				);
315
-
316
-				$jobList->add(\OCA\DAV\BackgroundJob\RefreshWebcalJob::class, [
317
-					'principaluri' => $subscriptionData['principaluri'],
318
-					'uri' => $subscriptionData['uri']
319
-				]);
320
-			}
321
-		);
322
-
323
-		$dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteSubscription',
324
-			function (GenericEvent $event) use ($container, $serverContainer) {
325
-				$jobList = $serverContainer->getJobList();
326
-				$subscriptionData = $event->getArgument('subscriptionData');
327
-
328
-				$jobList->remove(\OCA\DAV\BackgroundJob\RefreshWebcalJob::class, [
329
-					'principaluri' => $subscriptionData['principaluri'],
330
-					'uri' => $subscriptionData['uri']
331
-				]);
332
-
333
-				/** @var CalDavBackend $calDavBackend */
334
-				$calDavBackend = $container->query(CalDavBackend::class);
335
-				$calDavBackend->purgeAllCachedEventsForSubscription($subscriptionData['id']);
336
-			}
337
-		);
338
-
339
-		$eventHandler = function () use ($container, $serverContainer) {
340
-			try {
341
-				/** @var UpdateCalendarResourcesRoomsBackgroundJob $job */
342
-				$job = $container->query(UpdateCalendarResourcesRoomsBackgroundJob::class);
343
-				$job->run([]);
344
-				$serverContainer->getJobList()->setLastRun($job);
345
-			} catch (Exception $ex) {
346
-				$serverContainer->getLogger()->logException($ex);
347
-			}
348
-		};
349
-
350
-		$dispatcher->addListener('\OCP\Calendar\Resource\ForceRefreshEvent', $eventHandler);
351
-		$dispatcher->addListener('\OCP\Calendar\Room\ForceRefreshEvent', $eventHandler);
352
-	}
353
-
354
-	public function registerContactsManager(IContactsManager $cm, IAppContainer $container): void {
355
-		$cm->register(function () use ($container, $cm): void {
356
-			$user = \OC::$server->getUserSession()->getUser();
357
-			if (!is_null($user)) {
358
-				$this->setupContactsProvider($cm, $container, $user->getUID());
359
-			} else {
360
-				$this->setupSystemContactsProvider($cm, $container);
361
-			}
362
-		});
363
-	}
364
-
365
-	private function setupContactsProvider(IContactsManager $contactsManager,
366
-										   IAppContainer $container,
367
-										   string $userID): void {
368
-		/** @var ContactsManager $cm */
369
-		$cm = $container->query(ContactsManager::class);
370
-		$urlGenerator = $container->getServer()->getURLGenerator();
371
-		$cm->setupContactsProvider($contactsManager, $userID, $urlGenerator);
372
-	}
373
-
374
-	private function setupSystemContactsProvider(IContactsManager $contactsManager,
375
-												 IAppContainer $container): void {
376
-		/** @var ContactsManager $cm */
377
-		$cm = $container->query(ContactsManager::class);
378
-		$urlGenerator = $container->getServer()->getURLGenerator();
379
-		$cm->setupSystemContactsProvider($contactsManager, $urlGenerator);
380
-	}
381
-
382
-	public function registerCalendarManager(ICalendarManager $calendarManager,
383
-											 IAppContainer $container): void {
384
-		$calendarManager->register(function () use ($container, $calendarManager) {
385
-			$user = \OC::$server->getUserSession()->getUser();
386
-			if ($user !== null) {
387
-				$this->setupCalendarProvider($calendarManager, $container, $user->getUID());
388
-			}
389
-		});
390
-	}
391
-
392
-	private function setupCalendarProvider(ICalendarManager $calendarManager,
393
-										   IAppContainer $container,
394
-										   $userId) {
395
-		$cm = $container->query(CalendarManager::class);
396
-		$cm->setupCalendarProvider($calendarManager, $userId);
397
-	}
398
-
399
-	public function registerNotifier(INotificationManager $manager): void {
400
-		$manager->registerNotifierService(Notifier::class);
401
-	}
402
-
403
-	public function registerCalendarReminders(NotificationProviderManager $manager,
404
-											   ILogger $logger): void {
405
-		try {
406
-			$manager->registerProvider(AudioProvider::class);
407
-			$manager->registerProvider(EmailProvider::class);
408
-			$manager->registerProvider(PushProvider::class);
409
-		} catch (Throwable $ex) {
410
-			$logger->logException($ex);
411
-		}
412
-	}
110
+        $context->registerSearchProvider(ContactsSearchProvider::class);
111
+        $context->registerSearchProvider(EventsSearchProvider::class);
112
+        $context->registerSearchProvider(TasksSearchProvider::class);
113
+
114
+        /**
115
+         * Register event listeners
116
+         */
117
+        $context->registerEventListener(CalendarObjectCreatedEvent::class, CalendarContactInteractionListener::class);
118
+        $context->registerEventListener(CalendarObjectUpdatedEvent::class, CalendarContactInteractionListener::class);
119
+        $context->registerEventListener(CalendarShareUpdatedEvent::class, CalendarContactInteractionListener::class);
120
+    }
121
+
122
+    public function boot(IBootContext $context): void {
123
+        // Load all dav apps
124
+        \OC_App::loadApps(['dav']);
125
+
126
+        $context->injectFn([$this, 'registerHooks']);
127
+        $context->injectFn([$this, 'registerContactsManager']);
128
+        $context->injectFn([$this, 'registerCalendarManager']);
129
+        $context->injectFn([$this, 'registerNotifier']);
130
+        $context->injectFn([$this, 'registerCalendarReminders']);
131
+    }
132
+
133
+    public function registerHooks(HookManager $hm,
134
+                                    EventDispatcherInterface $dispatcher,
135
+                                    IAppContainer $container,
136
+                                    IServerContainer $serverContainer) {
137
+        $hm->setup();
138
+
139
+        // first time login event setup
140
+        $dispatcher->addListener(IUser::class . '::firstLogin', function ($event) use ($hm) {
141
+            if ($event instanceof GenericEvent) {
142
+                $hm->firstLogin($event->getSubject());
143
+            }
144
+        });
145
+
146
+        $birthdayListener = function ($event) use ($container) {
147
+            if ($event instanceof GenericEvent) {
148
+                /** @var BirthdayService $b */
149
+                $b = $container->query(BirthdayService::class);
150
+                $b->onCardChanged(
151
+                    (int) $event->getArgument('addressBookId'),
152
+                    (string) $event->getArgument('cardUri'),
153
+                    (string) $event->getArgument('cardData')
154
+                );
155
+            }
156
+        };
157
+
158
+        $dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::createCard', $birthdayListener);
159
+        $dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::updateCard', $birthdayListener);
160
+        $dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::deleteCard', function ($event) use ($container) {
161
+            if ($event instanceof GenericEvent) {
162
+                /** @var BirthdayService $b */
163
+                $b = $container->query(BirthdayService::class);
164
+                $b->onCardDeleted(
165
+                    (int) $event->getArgument('addressBookId'),
166
+                    (string) $event->getArgument('cardUri')
167
+                );
168
+            }
169
+        });
170
+
171
+        $clearPhotoCache = function ($event) use ($container) {
172
+            if ($event instanceof GenericEvent) {
173
+                /** @var PhotoCache $p */
174
+                $p = $container->query(PhotoCache::class);
175
+                $p->delete(
176
+                    $event->getArgument('addressBookId'),
177
+                    $event->getArgument('cardUri')
178
+                );
179
+            }
180
+        };
181
+        $dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::updateCard', $clearPhotoCache);
182
+        $dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::deleteCard', $clearPhotoCache);
183
+
184
+        $dispatcher->addListener('OC\AccountManager::userUpdated', function (GenericEvent $event) use ($container) {
185
+            $user = $event->getSubject();
186
+            /** @var SyncService $syncService */
187
+            $syncService = $container->query(SyncService::class);
188
+            $syncService->updateUser($user);
189
+        });
190
+
191
+        $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::createCalendar', function (GenericEvent $event) use ($container) {
192
+            /** @var Backend $backend */
193
+            $backend = $container->query(Backend::class);
194
+            $backend->onCalendarAdd(
195
+                $event->getArgument('calendarData')
196
+            );
197
+        });
198
+        $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateCalendar', function (GenericEvent $event) use ($container) {
199
+            /** @var Backend $backend */
200
+            $backend = $container->query(Backend::class);
201
+            $backend->onCalendarUpdate(
202
+                $event->getArgument('calendarData'),
203
+                $event->getArgument('shares'),
204
+                $event->getArgument('propertyMutations')
205
+            );
206
+        });
207
+        $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar', function (GenericEvent $event) use ($container) {
208
+            /** @var Backend $backend */
209
+            $backend = $container->query(Backend::class);
210
+            $backend->onCalendarDelete(
211
+                $event->getArgument('calendarData'),
212
+                $event->getArgument('shares')
213
+            );
214
+
215
+            /** @var ReminderBackend $reminderBackend */
216
+            $reminderBackend = $container->query(ReminderBackend::class);
217
+            $reminderBackend->cleanRemindersForCalendar(
218
+                (int) $event->getArgument('calendarId')
219
+            );
220
+        });
221
+        $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateShares', function (GenericEvent $event) use ($container) {
222
+            /** @var Backend $backend */
223
+            $backend = $container->query(Backend::class);
224
+            $backend->onCalendarUpdateShares(
225
+                $event->getArgument('calendarData'),
226
+                $event->getArgument('shares'),
227
+                $event->getArgument('add'),
228
+                $event->getArgument('remove')
229
+            );
230
+
231
+            // Here we should recalculate if reminders should be sent to new or old sharees
232
+        });
233
+
234
+        $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::publishCalendar', function (GenericEvent $event) use ($container) {
235
+            /** @var Backend $backend */
236
+            $backend = $container->query(Backend::class);
237
+            $backend->onCalendarPublication(
238
+                $event->getArgument('calendarData'),
239
+                $event->getArgument('public')
240
+            );
241
+        });
242
+
243
+        $listener = function (GenericEvent $event, $eventName) use ($container) {
244
+            /** @var Backend $backend */
245
+            $backend = $container->query(Backend::class);
246
+
247
+            $subject = Event::SUBJECT_OBJECT_ADD;
248
+            if ($eventName === '\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject') {
249
+                $subject = Event::SUBJECT_OBJECT_UPDATE;
250
+            } elseif ($eventName === '\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject') {
251
+                $subject = Event::SUBJECT_OBJECT_DELETE;
252
+            }
253
+            $backend->onTouchCalendarObject(
254
+                $subject,
255
+                $event->getArgument('calendarData'),
256
+                $event->getArgument('shares'),
257
+                $event->getArgument('objectData')
258
+            );
259
+
260
+            /** @var ReminderService $reminderBackend */
261
+            $reminderService = $container->query(ReminderService::class);
262
+
263
+            $reminderService->onTouchCalendarObject(
264
+                $eventName,
265
+                $event->getArgument('objectData')
266
+            );
267
+        };
268
+        $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject', $listener);
269
+        $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject', $listener);
270
+        $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject', $listener);
271
+
272
+        /**
273
+         * In case the user has set their default calendar to this one
274
+         */
275
+        $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar', function (GenericEvent $event) use ($serverContainer) {
276
+            /** @var IConfig $config */
277
+            $config = $serverContainer->getConfig();
278
+            $principalUri = $event->getArgument('calendarData')['principaluri'];
279
+            if (strpos($principalUri, 'principals/users') === 0) {
280
+                list(, $UID) = \Sabre\Uri\split($principalUri);
281
+                $uri = $event->getArgument('calendarData')['uri'];
282
+                if ($config->getUserValue($UID, 'dav', 'defaultCalendar') === $uri) {
283
+                    $config->deleteUserValue($UID, 'dav', 'defaultCalendar');
284
+                }
285
+            }
286
+        });
287
+
288
+        $dispatcher->addListener('OCP\Federation\TrustedServerEvent::remove',
289
+            function (GenericEvent $event) {
290
+                /** @var CardDavBackend $cardDavBackend */
291
+                $cardDavBackend = \OC::$server->query(CardDavBackend::class);
292
+                $addressBookUri = $event->getSubject();
293
+                $addressBook = $cardDavBackend->getAddressBooksByUri('principals/system/system', $addressBookUri);
294
+                if (!is_null($addressBook)) {
295
+                    $cardDavBackend->deleteAddressBook($addressBook['id']);
296
+                }
297
+            }
298
+        );
299
+
300
+        $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::createSubscription',
301
+            function (GenericEvent $event) use ($container, $serverContainer) {
302
+                $jobList = $serverContainer->getJobList();
303
+                $subscriptionData = $event->getArgument('subscriptionData');
304
+
305
+                /**
306
+                 * Initial subscription refetch
307
+                 *
308
+                 * @var RefreshWebcalService $refreshWebcalService
309
+                 */
310
+                $refreshWebcalService = $container->query(RefreshWebcalService::class);
311
+                $refreshWebcalService->refreshSubscription(
312
+                    (string) $subscriptionData['principaluri'],
313
+                    (string) $subscriptionData['uri']
314
+                );
315
+
316
+                $jobList->add(\OCA\DAV\BackgroundJob\RefreshWebcalJob::class, [
317
+                    'principaluri' => $subscriptionData['principaluri'],
318
+                    'uri' => $subscriptionData['uri']
319
+                ]);
320
+            }
321
+        );
322
+
323
+        $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteSubscription',
324
+            function (GenericEvent $event) use ($container, $serverContainer) {
325
+                $jobList = $serverContainer->getJobList();
326
+                $subscriptionData = $event->getArgument('subscriptionData');
327
+
328
+                $jobList->remove(\OCA\DAV\BackgroundJob\RefreshWebcalJob::class, [
329
+                    'principaluri' => $subscriptionData['principaluri'],
330
+                    'uri' => $subscriptionData['uri']
331
+                ]);
332
+
333
+                /** @var CalDavBackend $calDavBackend */
334
+                $calDavBackend = $container->query(CalDavBackend::class);
335
+                $calDavBackend->purgeAllCachedEventsForSubscription($subscriptionData['id']);
336
+            }
337
+        );
338
+
339
+        $eventHandler = function () use ($container, $serverContainer) {
340
+            try {
341
+                /** @var UpdateCalendarResourcesRoomsBackgroundJob $job */
342
+                $job = $container->query(UpdateCalendarResourcesRoomsBackgroundJob::class);
343
+                $job->run([]);
344
+                $serverContainer->getJobList()->setLastRun($job);
345
+            } catch (Exception $ex) {
346
+                $serverContainer->getLogger()->logException($ex);
347
+            }
348
+        };
349
+
350
+        $dispatcher->addListener('\OCP\Calendar\Resource\ForceRefreshEvent', $eventHandler);
351
+        $dispatcher->addListener('\OCP\Calendar\Room\ForceRefreshEvent', $eventHandler);
352
+    }
353
+
354
+    public function registerContactsManager(IContactsManager $cm, IAppContainer $container): void {
355
+        $cm->register(function () use ($container, $cm): void {
356
+            $user = \OC::$server->getUserSession()->getUser();
357
+            if (!is_null($user)) {
358
+                $this->setupContactsProvider($cm, $container, $user->getUID());
359
+            } else {
360
+                $this->setupSystemContactsProvider($cm, $container);
361
+            }
362
+        });
363
+    }
364
+
365
+    private function setupContactsProvider(IContactsManager $contactsManager,
366
+                                            IAppContainer $container,
367
+                                            string $userID): void {
368
+        /** @var ContactsManager $cm */
369
+        $cm = $container->query(ContactsManager::class);
370
+        $urlGenerator = $container->getServer()->getURLGenerator();
371
+        $cm->setupContactsProvider($contactsManager, $userID, $urlGenerator);
372
+    }
373
+
374
+    private function setupSystemContactsProvider(IContactsManager $contactsManager,
375
+                                                    IAppContainer $container): void {
376
+        /** @var ContactsManager $cm */
377
+        $cm = $container->query(ContactsManager::class);
378
+        $urlGenerator = $container->getServer()->getURLGenerator();
379
+        $cm->setupSystemContactsProvider($contactsManager, $urlGenerator);
380
+    }
381
+
382
+    public function registerCalendarManager(ICalendarManager $calendarManager,
383
+                                                IAppContainer $container): void {
384
+        $calendarManager->register(function () use ($container, $calendarManager) {
385
+            $user = \OC::$server->getUserSession()->getUser();
386
+            if ($user !== null) {
387
+                $this->setupCalendarProvider($calendarManager, $container, $user->getUID());
388
+            }
389
+        });
390
+    }
391
+
392
+    private function setupCalendarProvider(ICalendarManager $calendarManager,
393
+                                            IAppContainer $container,
394
+                                            $userId) {
395
+        $cm = $container->query(CalendarManager::class);
396
+        $cm->setupCalendarProvider($calendarManager, $userId);
397
+    }
398
+
399
+    public function registerNotifier(INotificationManager $manager): void {
400
+        $manager->registerNotifierService(Notifier::class);
401
+    }
402
+
403
+    public function registerCalendarReminders(NotificationProviderManager $manager,
404
+                                                ILogger $logger): void {
405
+        try {
406
+            $manager->registerProvider(AudioProvider::class);
407
+            $manager->registerProvider(EmailProvider::class);
408
+            $manager->registerProvider(PushProvider::class);
409
+        } catch (Throwable $ex) {
410
+            $logger->logException($ex);
411
+        }
412
+    }
413 413
 }
Please login to merge, or discard this patch.
apps/dav/lib/Listener/CalendarContactInteractionListener.php 1 patch
Indentation   +63 added lines, -63 removed lines patch added patch discarded remove patch
@@ -41,77 +41,77 @@
 block discarded – undo
41 41
 use function substr;
42 42
 
43 43
 class CalendarContactInteractionListener implements IEventListener {
44
-	private const URI_USERS = 'principals/users/';
44
+    private const URI_USERS = 'principals/users/';
45 45
 
46
-	/** @var IEventDispatcher */
47
-	private $dispatcher;
46
+    /** @var IEventDispatcher */
47
+    private $dispatcher;
48 48
 
49
-	/** @var IUserSession */
50
-	private $userManager;
49
+    /** @var IUserSession */
50
+    private $userManager;
51 51
 
52
-	/** @var Principal */
53
-	private $principalConnector;
52
+    /** @var Principal */
53
+    private $principalConnector;
54 54
 
55
-	/** @var LoggerInterface */
56
-	private $logger;
55
+    /** @var LoggerInterface */
56
+    private $logger;
57 57
 
58
-	public function __construct(IEventDispatcher $dispatcher,
59
-								IUserSession $userManager,
60
-								Principal $principalConnector,
61
-								LoggerInterface $logger) {
62
-		$this->dispatcher = $dispatcher;
63
-		$this->userManager = $userManager;
64
-		$this->principalConnector = $principalConnector;
65
-		$this->logger = $logger;
66
-	}
58
+    public function __construct(IEventDispatcher $dispatcher,
59
+                                IUserSession $userManager,
60
+                                Principal $principalConnector,
61
+                                LoggerInterface $logger) {
62
+        $this->dispatcher = $dispatcher;
63
+        $this->userManager = $userManager;
64
+        $this->principalConnector = $principalConnector;
65
+        $this->logger = $logger;
66
+    }
67 67
 
68
-	public function handle(Event $event): void {
69
-		if (($user = $this->userManager->getUser()) === null) {
70
-			// Without user context we can't do anything
71
-			return;
72
-		}
68
+    public function handle(Event $event): void {
69
+        if (($user = $this->userManager->getUser()) === null) {
70
+            // Without user context we can't do anything
71
+            return;
72
+        }
73 73
 
74
-		if ($event instanceof CalendarObjectCreatedEvent || $event instanceof CalendarObjectUpdatedEvent) {
75
-			// users: href => principal:principals/users/admin
76
-			// TODO: parse (email) attendees from the VCARD
77
-			foreach ($event->getShares() as $share) {
78
-				if (!isset($share['href'])) {
79
-					continue;
80
-				}
81
-				$this->emitFromUri($share['href'], $user);
82
-			}
83
-		}
74
+        if ($event instanceof CalendarObjectCreatedEvent || $event instanceof CalendarObjectUpdatedEvent) {
75
+            // users: href => principal:principals/users/admin
76
+            // TODO: parse (email) attendees from the VCARD
77
+            foreach ($event->getShares() as $share) {
78
+                if (!isset($share['href'])) {
79
+                    continue;
80
+                }
81
+                $this->emitFromUri($share['href'], $user);
82
+            }
83
+        }
84 84
 
85
-		if ($event instanceof CalendarShareUpdatedEvent && !empty($event->getAdded())) {
86
-			// group: href => principal:principals/groups/admin
87
-			// users: href => principal:principals/users/admin
88
-			foreach ($event->getAdded() as $added) {
89
-				if (!isset($added['href'])) {
90
-					// Nothing to work with
91
-					continue;
92
-				}
93
-				$this->emitFromUri($added['href'], $user);
94
-			}
95
-		}
96
-	}
85
+        if ($event instanceof CalendarShareUpdatedEvent && !empty($event->getAdded())) {
86
+            // group: href => principal:principals/groups/admin
87
+            // users: href => principal:principals/users/admin
88
+            foreach ($event->getAdded() as $added) {
89
+                if (!isset($added['href'])) {
90
+                    // Nothing to work with
91
+                    continue;
92
+                }
93
+                $this->emitFromUri($added['href'], $user);
94
+            }
95
+        }
96
+    }
97 97
 
98
-	private function emitFromUri(string $uri, IUser $user): void {
99
-		$principal = $this->principalConnector->findByUri(
100
-			$uri,
101
-			$this->principalConnector->getPrincipalPrefix()
102
-		);
103
-		if ($principal === null) {
104
-			// Invalid principal
105
-			return;
106
-		}
107
-		if (strpos($principal, self::URI_USERS) !== 0) {
108
-			// Not a user principal
109
-			return;
110
-		}
98
+    private function emitFromUri(string $uri, IUser $user): void {
99
+        $principal = $this->principalConnector->findByUri(
100
+            $uri,
101
+            $this->principalConnector->getPrincipalPrefix()
102
+        );
103
+        if ($principal === null) {
104
+            // Invalid principal
105
+            return;
106
+        }
107
+        if (strpos($principal, self::URI_USERS) !== 0) {
108
+            // Not a user principal
109
+            return;
110
+        }
111 111
 
112
-		$uid = substr($principal, strlen(self::URI_USERS));
113
-		$this->dispatcher->dispatchTyped(
114
-			(new ContactInteractedWithEvent($user))->setUid($uid)
115
-		);
116
-	}
112
+        $uid = substr($principal, strlen(self::URI_USERS));
113
+        $this->dispatcher->dispatchTyped(
114
+            (new ContactInteractedWithEvent($user))->setUid($uid)
115
+        );
116
+    }
117 117
 }
Please login to merge, or discard this patch.