From ecbccd1b9dc55e89d06d11f68f8f3acac0887fe3 Mon Sep 17 00:00:00 2001 From: Pierre Date: Mon, 19 Feb 2018 14:41:44 +0100 Subject: [PATCH] Get the list of unread notifications of the user --- RestControllers/notificationsController.php | 54 ++++++++++++++++++++- classes/components/notifications.php | 50 +++++++++++++++++++ 2 files changed, 103 insertions(+), 1 deletion(-) diff --git a/RestControllers/notificationsController.php b/RestControllers/notificationsController.php index f9a736a..cf438ff 100644 --- a/RestControllers/notificationsController.php +++ b/RestControllers/notificationsController.php @@ -9,7 +9,7 @@ class notificationsController { /** - * Get the number of unread notifications of a user + * Count the number of unread notifications of a user * * @url POST notifications/count_unread */ @@ -27,4 +27,56 @@ class notificationsController { } + + /** + * Get the list of unread notifications of a user + * + * @url POST notifications/get_list_unread + */ + public function get_list_unread(){ + + user_login_required(); + + //Get the list of unread notifications + $list = components()->notifications->list_unread(userID); + + //Process the list of notifications + foreach($list as $num => $data){ + $list[$num] = $this->notifToArray($data); + } + + //Return the list of notifications + return $list; + + } + + + /** + * Turn a notification entry into a standard API notification array + * + * Warning !!! The notification must be fully initialized + * + * @param Notification $notif The notification to process + * @return array The generated array + */ + private function notifToArray(Notification $notif) : array { + + $array = array(); + + //Parse the notification + $array['id'] = $notif->get_id(); + $array['time_create'] = $notif->get_time_create(); + $array['seen'] = $notif->is_seen(); + $array['from_user_id'] = $notif->get_from_user_id(); + $array['dest_user_id'] = $notif->get_dest_user_id(); + $array['on_elem_id'] = $notif->get_on_elem_id(); + $array['on_elem_type'] = $notif->get_on_elem_type(); + $array['type'] = $notif->get_type(); + $array['event_visibility'] = $notif->get_event_visibility(); + $array['from_container_id'] = $notif->get_from_container_id(); + $array['from_container_type'] = $notif->get_from_container_type(); + + + return $array; + } } \ No newline at end of file diff --git a/classes/components/notifications.php b/classes/components/notifications.php index 9d660f6..6bf6a15 100644 --- a/classes/components/notifications.php +++ b/classes/components/notifications.php @@ -30,6 +30,29 @@ class notificationComponent { } + /** + * Get the list of unread notifications of a user + * + * @param int $userID The target user ID + * @return array The list of notifications + */ + public function list_unread(int $userID) : array { + + //Perform a request on the server + $conditions = "WHERE dest_user_id = ? AND seen = 0 ORDER BY id DESC"; + $values = array($userID); + + //Perform the request + $results = CS::get()->db->select(self::NOTIFICATIONS_TABLE, $conditions, $values); + + //Process the list of results + $list = array(); + foreach($results as $row) + $list[] = $this->dbToNotification($row); + + //Return result + return $list; + } /** * Push a new notification @@ -261,6 +284,33 @@ class notificationComponent { return $data; } + /** + * Convert a notification database entry into a Notification object + * + * @param array $row The database entry to process + * @return Notification The generated notification + */ + private function dbToNotification(array $row) : Notification { + + $notif = new Notification(); + + //Parse database entry + $notif->set_id($row['id']); + $notif->set_seen($row['seen'] == 1); + $notif->set_time_create($row['time_create']); + $notif->set_from_user_id($row['from_user_id']); + $notif->set_dest_user_id($row['dest_user_id']); + $notif->set_on_elem_id($row['on_elem_id']); + $notif->set_on_elem_type($row['on_elem_type']); + $notif->set_type($row['type']); + $notif->set_event_visibility($row['visibility']); + $notif->set_from_container_id($row['from_container_id']); + $notif->set_from_container_type($row['from_container_type']); + + return $notif; + + } + } //Register component