diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2022-10-18 23:36:14 +0200 |
---|---|---|
committer | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2022-10-18 23:36:14 +0200 |
commit | 7d3457ec7364bdf14386ebe797a197e5efd785da (patch) | |
tree | fe1c42bb9eea2e33ac9d41ea3bcb49fd49641d89 | |
parent | 50d4963772f290463c8addb73f7c5f392050bbba (diff) | |
download | nextcloud-server-7d3457ec7364bdf14386ebe797a197e5efd785da.tar.gz nextcloud-server-7d3457ec7364bdf14386ebe797a197e5efd785da.zip |
improve admin notification experience
- do not stack notifications, replace them
- and replace them once a day only
- with LDAP it might end in total spam terror (also push) otherwise
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
-rw-r--r-- | lib/private/Support/Subscription/Registry.php | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/lib/private/Support/Subscription/Registry.php b/lib/private/Support/Subscription/Registry.php index ba3642d021c..87070e7a0dc 100644 --- a/lib/private/Support/Subscription/Registry.php +++ b/lib/private/Support/Subscription/Registry.php @@ -215,19 +215,38 @@ class Registry implements IRegistry { return $userCount; } - private function notifyAboutReachedUserLimit(IManager $notificationManager) { + private function notifyAboutReachedUserLimit(IManager $notificationManager): void { $admins = $this->groupManager->get('admin')->getUsers(); - foreach ($admins as $admin) { - $notification = $notificationManager->createNotification(); - $notification->setApp('core') - ->setUser($admin->getUID()) - ->setDateTime(new \DateTime()) - ->setObject('user_limit_reached', '1') - ->setSubject('user_limit_reached'); + $notification = $notificationManager->createNotification(); + $notification->setApp('core') + ->setObject('user_limit_reached', '1') + ->setSubject('user_limit_reached'); + + if ($notificationManager->getCount($notification) > 0 + && !$this->reIssue() + ) { + return; + } + + $notificationManager->markProcessed($notification); + $notification->setDateTime(new \DateTime()); + + foreach ($admins as $admin) { + $notification->setUser($admin->getUID()); $notificationManager->notify($notification); } $this->logger->warning('The user limit was reached and the new user was not created', ['app' => 'lib']); } + + protected function reIssue(): bool { + $lastNotification = (int)$this->config->getAppValue('lib', 'last_subscription_reminder', '0'); + + if ((time() - $lastNotification) >= 86400) { + $this->config->setAppValue('lib', 'last_subscription_reminder', (string)time()); + return true; + } + return false; + } } |