getPodcastById((int) $params[0])) instanceof Podcast ) { throw PageNotFoundException::forPageNotFound(); } $this->podcast = $podcast; if (count($params) > 1) { if ( ! ($notification = (new NotificationModel()) ->where([ 'id' => $params[1], ]) ->first()) ) { throw PageNotFoundException::forPageNotFound(); } $this->notification = $notification; unset($params[1]); unset($params[0]); } return $this->{$method}(...$params); } public function list(): string { $notifications = (new NotificationModel())->where('target_actor_id', $this->podcast->actor_id) ->orderBy('created_at', 'desc'); $data = [ 'podcast' => $this->podcast, 'notifications' => $notifications->paginate(10), 'pager' => $notifications->pager, ]; replace_breadcrumb_params([ 0 => $this->podcast->at_handle, ]); return view('podcast/notifications', $data); } public function markAsRead(): RedirectResponse { $this->notification->read_at = new Time('now'); $notificationModel = new NotificationModel(); $notificationModel->update($this->notification->id, $this->notification); if ($this->notification->post_id === null) { return redirect()->route('podcast-activity', [esc($this->podcast->handle)]); } $post = (new PostModel())->getPostById($this->notification->post_id); return redirect()->route('post', [$this->podcast->handle, $post->id]); } public function markAllAsRead(): RedirectResponse { $notifications = (new NotificationModel())->where('target_actor_id', $this->podcast->actor_id) ->where('read_at', null) ->findAll(); foreach ($notifications as $notification) { $notification->read_at = new Time('now'); (new NotificationModel())->update($notification->id, $notification); } return redirect()->back(); } }