diff --git a/application/controllers/api/v1/system/Message.php b/application/controllers/api/v1/system/Message.php index bf5deca9f..3302e7c6b 100644 --- a/application/controllers/api/v1/system/Message.php +++ b/application/controllers/api/v1/system/Message.php @@ -105,6 +105,25 @@ class Message extends APIv1_Controller } } + /** + * @return void + */ + public function getCountUnreadMessages() + { + $person_id = $this->get('person_id'); + + if (isset($person_id)) + { + $result = $this->messagelib->getCountUnreadMessages($person_id); + + $this->response($result, REST_Controller::HTTP_OK); + } + else + { + $this->response(); + } + } + /** * @return void */ diff --git a/application/libraries/MessageLib.php b/application/libraries/MessageLib.php index 375e4b85c..1e683f857 100644 --- a/application/libraries/MessageLib.php +++ b/application/libraries/MessageLib.php @@ -153,6 +153,22 @@ class MessageLib return $result; } + + /** + * getCountUnreadMessages + * + * @param bigint $person_id REQUIRED + * @return array + */ + public function getCountUnreadMessages($person_id) + { + if (!is_numeric($person_id)) + return $this->_error('', MSG_ERR_INVALID_RECIPIENTS); + + $msg = $this->ci->RecipientModel->getCountUnreadMessages($person_id); + + return $msg; + } /** * updateMessageStatus() - will change status on message for particular user diff --git a/application/models/system/Recipient_model.php b/application/models/system/Recipient_model.php index 4039307f8..aa5c9a874 100644 --- a/application/models/system/Recipient_model.php +++ b/application/models/system/Recipient_model.php @@ -259,4 +259,26 @@ class Recipient_model extends DB_Model return $this->execQuery($query, $parametersArray); } + + /** + * Get all unread messages for a person identified by person_id + */ + public function getCountUnreadMessages($person_id) + { + // Checks if the operation is permitted by the API caller + if (($isEntitled = $this->isEntitled('public.tbl_msg_recipient', PermissionLib::SELECT_RIGHT, FHC_NORIGHT, FHC_MODEL_ERROR)) !== true) + return $isEntitled; + if (($isEntitled = $this->isEntitled('public.tbl_msg_status', PermissionLib::SELECT_RIGHT, FHC_NORIGHT, FHC_MODEL_ERROR)) !== true) + return $isEntitled; + + $sql = 'SELECT COUNT(r.message_id) AS unreadMessages + FROM public.tbl_msg_recipient r JOIN public.tbl_msg_status s + ON (r.message_id = s.message_id AND r.person_id = s.person_id) + WHERE r.person_id = ? + AND s.status = ?'; + + $parametersArray = array($person_id, MSG_STATUS_UNREAD); + + return $this->execQuery($sql, $parametersArray); + } } \ No newline at end of file