diff options
author | Frederic Guillot <fred@kanboard.net> | 2016-05-26 20:50:50 -0400 |
---|---|---|
committer | Frederic Guillot <fred@kanboard.net> | 2016-05-26 20:50:50 -0400 |
commit | d9101da79e839984e0e782b48113dc61157d6688 (patch) | |
tree | 81913fd719cfa6c0034c8008f2cb1f7b95a30e85 /app/Controller/WebNotificationController.php | |
parent | 0596a4abb9ade1a6cd77516dc6893098eab2a323 (diff) |
Mark notification as read when clicking on it
Diffstat (limited to 'app/Controller/WebNotificationController.php')
-rw-r--r-- | app/Controller/WebNotificationController.php | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/app/Controller/WebNotificationController.php b/app/Controller/WebNotificationController.php new file mode 100644 index 00000000..c7b9c8ff --- /dev/null +++ b/app/Controller/WebNotificationController.php @@ -0,0 +1,79 @@ +<?php + +namespace Kanboard\Controller; + +/** + * Web notification controller + * + * @package Kanboard\Controller + * @author Frederic Guillot + */ +class WebNotificationController extends BaseController +{ + /** + * Mark all notifications as read + * + * @access public + */ + public function flush() + { + $user_id = $this->getUserId(); + + $this->userUnreadNotification->markAllAsRead($user_id); + $this->response->redirect($this->helper->url->to('DashboardController', 'notifications', array('user_id' => $user_id))); + } + + /** + * Mark a notification as read + * + * @access public + */ + public function remove() + { + $user_id = $this->getUserId(); + $notification_id = $this->request->getIntegerParam('notification_id'); + + $this->userUnreadNotification->markAsRead($user_id, $notification_id); + $this->response->redirect($this->helper->url->to('DashboardController', 'notifications', array('user_id' => $user_id))); + } + + /** + * Redirect to the task and mark notification as read + */ + public function redirect() + { + $user_id = $this->getUserId(); + $notification_id = $this->request->getIntegerParam('notification_id'); + + $notification = $this->userUnreadNotification->getById($notification_id); + $this->userUnreadNotification->markAsRead($user_id, $notification_id); + + if (empty($notification)) { + $this->response->redirect($this->helper->url->to('DashboardController', 'notifications', array('user_id' => $user_id))); + } elseif ($this->helper->text->contains($notification['event_name'], 'comment')) { + $this->response->redirect($this->helper->url->to( + 'task', + 'show', + array('task_id' => $notification['event_data']['task']['id'], 'project_id' => $notification['event_data']['task']['project_id']), + 'comment-'.$notification['event_data']['comment']['id'] + )); + } else { + $this->response->redirect($this->helper->url->to( + 'task', + 'show', + array('task_id' => $notification['event_data']['task']['id'], 'project_id' => $notification['event_data']['task']['project_id']) + )); + } + } + + private function getUserId() + { + $user_id = $this->request->getIntegerParam('user_id'); + + if (! $this->userSession->isAdmin() && $user_id != $this->userSession->getId()) { + $user_id = $this->userSession->getId(); + } + + return $user_id; + } +} |