/** * @param PostWasPosted $event */ public function whenPostWasPosted(PostWasPosted $event) { $post = $event->post; $discussion = $post->discussion; $notify = $discussion->readers()->where('users.id', '!=', $post->user_id)->where('users_discussions.subscription', 'follow')->where('users_discussions.read_number', $discussion->last_post_number)->get(); $this->notifications->sync($this->getNotification($event->post), $notify->all()); }
/** * @param Discussion $discussion * @param User $user * @param $isLocked */ protected function lockedChanged(Discussion $discussion, User $user, $isLocked) { $post = DiscussionLockedPost::reply($discussion->id, $user->id, $isLocked); $post = $discussion->mergePost($post); if ($discussion->start_user_id !== $user->id) { $notification = new DiscussionLockedBlueprint($post); $this->notifications->sync($notification, $post->exists ? [$discussion->startUser] : []); } }
/** * @param \Flarum\Event\DiscussionWasRenamed $event */ public function whenDiscussionWasRenamed(DiscussionWasRenamed $event) { $post = DiscussionRenamedPost::reply($event->discussion->id, $event->actor->id, $event->oldTitle, $event->discussion->title); $post = $event->discussion->mergePost($post); if ($event->discussion->start_user_id !== $event->actor->id) { $blueprint = new DiscussionRenamedBlueprint($post); if ($post->exists) { $this->notifications->sync($blueprint, [$event->discussion->startUser]); } else { $this->notifications->delete($blueprint); } } }
/** * @param Post $post * @param array $mentioned */ protected function sync(Post $post, array $mentioned) { $post->mentionsUsers()->sync($mentioned); $users = User::whereIn('id', $mentioned)->get()->filter(function ($user) use($post) { return $post->isVisibleTo($user) && $user->id !== $post->user->id; })->all(); $this->notifications->sync(new UserMentionedBlueprint($post), $users); }
/** * @param Post $reply * @param array $mentioned */ protected function sync(Post $reply, array $mentioned) { $reply->mentionsPosts()->sync($mentioned); $posts = Post::with('user')->whereIn('id', $mentioned)->get()->filter(function ($post) use($reply) { return $post->user && $post->user->id !== $reply->user_id; })->all(); foreach ($posts as $post) { $this->notifications->sync(new PostMentionedBlueprint($post, $reply), [$post->user]); } }
/** * @param Post $post * @param User $user * @param array $recipients */ public function sync(Post $post, User $user, array $recipients) { if ($post->user->id != $user->id) { $this->notifications->sync(new PostLikedBlueprint($post, $user), $recipients); } }