X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/ecab2c8e42ae11485bb3c0fcce1a51df1bc6b118..refs/pull/5725/head:/app/Activity/Notifications/Handlers/PageUpdateNotificationHandler.php diff --git a/app/Activity/Notifications/Handlers/PageUpdateNotificationHandler.php b/app/Activity/Notifications/Handlers/PageUpdateNotificationHandler.php index 5a2bf4e9c..744aba18f 100644 --- a/app/Activity/Notifications/Handlers/PageUpdateNotificationHandler.php +++ b/app/Activity/Notifications/Handlers/PageUpdateNotificationHandler.php @@ -2,6 +2,8 @@ namespace BookStack\Activity\Notifications\Handlers; +use BookStack\Activity\ActivityType; +use BookStack\Activity\Models\Activity; use BookStack\Activity\Models\Loggable; use BookStack\Activity\Notifications\Messages\PageUpdateNotification; use BookStack\Activity\Tools\EntityWatchers; @@ -12,15 +14,31 @@ use BookStack\Users\Models\User; class PageUpdateNotificationHandler extends BaseNotificationHandler { - public function handle(string $activityType, Loggable|string $detail, User $user): void + public function handle(Activity $activity, Loggable|string $detail, User $user): void { if (!($detail instanceof Page)) { throw new \InvalidArgumentException("Detail for page update notifications must be a page"); } + // Get last update from activity + $lastUpdate = $detail->activity() + ->where('type', '=', ActivityType::PAGE_UPDATE) + ->where('id', '!=', $activity->id) + ->latest('created_at') + ->first(); + + // Return if the same user has already updated the page in the last 15 mins + if ($lastUpdate && $lastUpdate->user_id === $user->id) { + if ($lastUpdate->created_at->gt(now()->subMinutes(15))) { + return; + } + } + + // Get active watchers $watchers = new EntityWatchers($detail, WatchLevels::UPDATES); $watcherIds = $watchers->getWatcherUserIds(); + // Add page owner if preferences allow if (!$watchers->isUserIgnoring($detail->owned_by) && $detail->ownedBy) { $userNotificationPrefs = new UserNotificationPreferences($detail->ownedBy); if ($userNotificationPrefs->notifyOnOwnPageChanges()) { @@ -28,6 +46,6 @@ class PageUpdateNotificationHandler extends BaseNotificationHandler } } - $this->sendNotificationToUserIds(PageUpdateNotification::class, $watcherIds, $user, $detail); + $this->sendNotificationToUserIds(PageUpdateNotification::class, $watcherIds, $user, $detail, $detail); } }