validate([ 'receiver' => 'required|in:all,normal,uid,email', 'uid' => 'required_if:receiver,uid|nullable|integer|exists:users', 'email' => 'required_if:receiver,email|nullable|email|exists:users', 'title' => 'required|max:20', 'content' => 'string|nullable', ]); $notification = new Notifications\SiteMessage($data['title'], $data['content']); switch ($data['receiver']) { case 'all': $users = User::all(); break; case 'normal': $users = User::where('permission', User::NORMAL)->get(); break; case 'uid': $users = User::where('uid', $data['uid'])->get(); break; case 'email': $users = User::where('email', $data['email'])->get(); break; } Notification::send($users, $notification); session(['sentResult' => trans('admin.notifications.send.success')]); return redirect('/admin'); } public function all() { return auth()->user() ->unreadNotifications ->map(fn ($notification) => [ 'id' => $notification->id, 'title' => $notification->data['title'], ]); } public function read($id) { $notification = auth() ->user() ->unreadNotifications ->first(fn ($notification) => $notification->id === $id); $notification->markAsRead(); $converter = new GithubFlavoredMarkdownConverter(); return [ 'title' => $notification->data['title'], 'content' => $converter->convertToHtml($notification->data['content'] ?? '')->getContent(), 'time' => $notification->created_at->toDateTimeString(), ]; } }