diff --git a/application/controllers/api/v1/system/Message.php b/application/controllers/api/v1/system/Message.php index e58929a71..3bcaa3e75 100644 --- a/application/controllers/api/v1/system/Message.php +++ b/application/controllers/api/v1/system/Message.php @@ -66,6 +66,25 @@ class Message extends APIv1_Controller } } + /** + * @return void + */ + public function getMessagesByToken() + { + $token = $this->get('token'); + + if (isset($token)) + { + $result = $this->messagelib->getMessagesByToken($token); + + $this->response($result, REST_Controller::HTTP_OK); + } + else + { + $this->response(); + } + } + /** * @return void */ @@ -80,7 +99,7 @@ class Message extends APIv1_Controller $this->post()['subject'], $this->post()['body'], PRIORITY_NORMAL, - NULL, + $this->post()['relationmessage_id'], $this->post()['oe_kurzbz'] ); @@ -107,6 +126,7 @@ class Message extends APIv1_Controller $this->post()['vorlage_kurzbz'], $this->post()['oe_kurzbz'], $this->post()['data'], + $this->post()['relationmessage_id'], $this->post()['orgform_kurzbz'] ); diff --git a/application/libraries/MessageLib.php b/application/libraries/MessageLib.php index f0c25a279..6cae0dc2a 100644 --- a/application/libraries/MessageLib.php +++ b/application/libraries/MessageLib.php @@ -23,6 +23,8 @@ class MessageLib $this->ci->load->library('VorlageLib'); + $this->ci->load->helper('fhc'); + //$this->ci->load->helper('language'); $this->ci->lang->load('message'); } @@ -104,6 +106,42 @@ class MessageLib return $this->getMessage($msg_id); } + + /** + * getMessagesByToken + * + * @param token string + * @return array + */ + function getMessagesByToken($token) + { + if (empty($token)) + return $this->_error(MSG_ERR_INVALID_MSG_ID); + + $result = $this->ci->MessageModel->getMessagesByToken($token); + if (is_object($result) && $result->error == EXIT_SUCCESS && is_array($result->retval) && count($result->retval) > 0) + { + if ($result->retval[0]->status == MSG_STATUS_UNREAD) + { + $statusKey = array( + 'message_id' => $result->retval[0]->message_id, + 'person_id' => $result->retval[0]->receiver_id, + 'status' => MSG_STATUS_UNREAD + ); + $resTmp = $this->ci->MsgStatusModel->update($statusKey, array('status' => MSG_STATUS_READ)); + if (!is_object($resTmp) || (is_object($resTmp) && $resTmp->error != EXIT_SUCCESS)) + { + $result = $resTmp; + } + else + { + $result->retval[0]->status = MSG_STATUS_READ; + } + } + } + + return $result; + } // ------------------------------------------------------------------------ @@ -190,7 +228,7 @@ class MessageLib 'subject' => $subject, 'body' => $body, 'priority' => $priority, - //'relationmessage_id' => $relationmessage_id, + 'relationmessage_id' => $relationmessage_id, 'oe_kurzbz' => $oe_kurzbz ); @@ -230,7 +268,7 @@ class MessageLib * @param integer $priority * @return array */ - function sendMessageVorlage($sender_id, $receiver_id, $vorlage_kurzbz, $oe_kurzbz, $data, $orgform_kurzbz = null) + function sendMessageVorlage($sender_id, $receiver_id, $vorlage_kurzbz, $oe_kurzbz, $data, $relationmessage_id = null, $orgform_kurzbz = null) { if (!is_numeric($sender_id) || !is_numeric($receiver_id)) return $this->_invalid_id(MSG_ERR_INVALID_MSG_ID); @@ -238,7 +276,8 @@ class MessageLib $result = $this->ci->vorlagelib->loadVorlagetext($vorlage_kurzbz, $oe_kurzbz, $orgform_kurzbz); if (is_object($result) && $result->error == EXIT_SUCCESS) { - if (is_array($result->retval) && count($result->retval) > 0) + if (is_array($result->retval) && count($result->retval) > 0 && + !empty($result->retval[0]->text) && !empty($result->retval[0]->subject)) { $parsedText = $this->ci->vorlagelib->parseVorlagetext($result->retval[0]->text, $data); @@ -249,7 +288,7 @@ class MessageLib 'subject' => $result->retval[0]->subject, 'body' => $parsedText, 'priority' => PRIORITY_NORMAL, - //'relationmessage_id' => $relationmessage_id, + 'relationmessage_id' => $relationmessage_id, 'oe_kurzbz' => $oe_kurzbz ); @@ -259,7 +298,8 @@ class MessageLib $msg_id = $result->retval; $recipientData = array( 'person_id' => $receiver_id, - 'message_id' => $msg_id + 'message_id' => $msg_id, + 'token' => generateToken() ); $result = $this->ci->RecipientModel->insert($recipientData); if (is_object($result) && $result->error == EXIT_SUCCESS) @@ -293,7 +333,7 @@ class MessageLib } else { - $result = $this->_error($result->msg, EXIT_ERROR); + $result = $this->_error($result->retval, EXIT_ERROR); } return $result; diff --git a/application/models/system/Message_model.php b/application/models/system/Message_model.php index 9de60939f..a603f0f49 100644 --- a/application/models/system/Message_model.php +++ b/application/models/system/Message_model.php @@ -10,7 +10,6 @@ class Message_model extends DB_Model public function __construct() { parent::__construct(); - //require_once APPPATH.'config/message.php'; $this->dbTable = 'public.tbl_msg_message'; $this->pk = 'message_id'; } @@ -73,48 +72,24 @@ class Message_model extends DB_Model return $this->_error($this->db->error(), FHC_DB_ERROR); } -public function getMessagesByPerson($person_id, $all) + public function getMessagesByPerson($person_id, $all) { // Check wrights - if (! $this->fhc_db_acl->isBerechtigt('basis/message', 's')) - return $this->_error(lang('fhc_'.FHC_NORIGHT).' -> basis/message', FHC_MODEL_ERROR); - - // prepare parameters - $person_id = (int)$person_id; - // get Data - /*$sql = 'SELECT person_id, - message_id, - subject, - body, - priority, - relationmessage_id, - oe_kurzbz, - m.insertamum, - anrede, - titelpost, - titelpre, - nachname, - vorname, - vornamen, - status, - statusinfo, - s.insertamum AS statusamum - FROM public.tbl_msg_message m JOIN public.tbl_person USING (person_id) - LEFT OUTER JOIN ( - SELECT message_id, person_id, status, statusinfo, tbl_msg_status.insertamum - FROM public.tbl_msg_status INNER JOIN ( - SELECT message_id, person_id, max(insertamum) AS insertamum - FROM public.tbl_msg_status - GROUP BY message_id, person_id - ) status USING (message_id, person_id) - WHERE tbl_msg_status.insertamum=status.insertamum - ) s USING (message_id, person_id) - WHERE person_id = ?';*/ + if (! $this->fhc_db_acl->isBerechtigt($this->acl['public.tbl_msg_recipient'], 's')) + return $this->_error(lang('fhc_'.FHC_NORIGHT).' -> '.$this->acl['public.tbl_msg_recipient'], FHC_MODEL_ERROR); + if (! $this->fhc_db_acl->isBerechtigt($this->acl['public.tbl_msg_message'], 's')) + return $this->_error(lang('fhc_'.FHC_NORIGHT).' -> '.$this->acl['public.tbl_msg_message'], FHC_MODEL_ERROR); + if (! $this->fhc_db_acl->isBerechtigt($this->acl['public.tbl_person'], 's')) + return $this->_error(lang('fhc_'.FHC_NORIGHT).' -> '.$this->acl['public.tbl_person'], FHC_MODEL_ERROR); + if (! $this->fhc_db_acl->isBerechtigt($this->acl['public.tbl_msg_status'], 's')) + return $this->_error(lang('fhc_'.FHC_NORIGHT).' -> '.$this->acl['public.tbl_msg_status'], FHC_MODEL_ERROR); $sql = 'SELECT r.message_id, + m.person_id, m.subject, m.body, m.insertamum, + m.relationmessage_id, m.oe_kurzbz, s.status, s.statusinfo, @@ -124,13 +99,43 @@ public function getMessagesByPerson($person_id, $all) JOIN public.tbl_msg_status s USING (message_id) WHERE r.person_id = ?'; - /*if (! $all) - $sql .= ' AND (status < 3 OR status IS NULL)';*/ $result = $this->db->query($sql, array($person_id)); - //var_dump($result); if (is_object($result)) return $this->_success($result->result()); else return $this->_error($this->db->error(), FHC_DB_ERROR); } -} + + public function getMessagesByToken($token) + { + // Check wrights + if (! $this->fhc_db_acl->isBerechtigt($this->acl['public.tbl_msg_recipient'], 's')) + return $this->_error(lang('fhc_'.FHC_NORIGHT).' -> '.$this->acl['public.tbl_msg_recipient'], FHC_MODEL_ERROR); + if (! $this->fhc_db_acl->isBerechtigt($this->acl['public.tbl_msg_message'], 's')) + return $this->_error(lang('fhc_'.FHC_NORIGHT).' -> '.$this->acl['public.tbl_msg_message'], FHC_MODEL_ERROR); + if (! $this->fhc_db_acl->isBerechtigt($this->acl['public.tbl_msg_status'], 's')) + return $this->_error(lang('fhc_'.FHC_NORIGHT).' -> '.$this->acl['public.tbl_msg_status'], FHC_MODEL_ERROR); + + $sql = 'SELECT r.message_id, + r.person_id as receiver_id, + m.person_id as sender_id, + m.subject, + m.body, + m.insertamum, + m.relationmessage_id, + m.oe_kurzbz, + s.status, + s.statusinfo, + s.updateamum + FROM public.tbl_msg_recipient r JOIN public.tbl_msg_message m USING (message_id) + JOIN public.tbl_msg_status s USING (message_id) + WHERE r.token = ? + AND status < ?'; + + $result = $this->db->query($sql, array($token, MSG_STATUS_DELETED)); + if (is_object($result)) + return $this->_success($result->result()); + else + return $this->_error($this->db->error(), FHC_DB_ERROR); + } +} \ No newline at end of file diff --git a/tests/codeception/_data/dump.sql b/tests/codeception/_data/dump.sql index 4e72d3d4e..a520463fc 100644 --- a/tests/codeception/_data/dump.sql +++ b/tests/codeception/_data/dump.sql @@ -422,7 +422,8 @@ DELETE FROM system.tbl_rolleberechtigung WHERE berechtigung_kurzbz IN ( 'lehre/reihungstest', 'wawi/inventar:begrenzt', 'fs/dms', - 'basis/phrase' + 'basis/phrase', + 'system/vorlagestudiengang' ); -- DELETE FROM system.tbl_berechtigung @@ -650,7 +651,8 @@ DELETE FROM system.tbl_berechtigung WHERE berechtigung_kurzbz IN ( 'lehre/reihungstest', 'wawi/inventar:begrenzt', 'fs/dms', - 'basis/phrase' + 'basis/phrase', + 'system/vorlagestudiengang' ); -- INSERT Permissions @@ -878,6 +880,7 @@ INSERT INTO system.tbl_berechtigung (berechtigung_kurzbz, beschreibung) VALUES(' INSERT INTO system.tbl_berechtigung (berechtigung_kurzbz, beschreibung) VALUES('fs/dms', ''); INSERT INTO system.tbl_berechtigung (berechtigung_kurzbz, beschreibung) VALUES('basis/message', ''); INSERT INTO system.tbl_berechtigung (berechtigung_kurzbz, beschreibung) VALUES('basis/phrase', ''); +INSERT INTO system.tbl_berechtigung (berechtigung_kurzbz, beschreibung) VALUES('system/vorlagestudiengang', ''); -- INSERT link between user admin and permissions INSERT INTO system.tbl_rolleberechtigung (berechtigung_kurzbz, rolle_kurzbz, art) VALUES('basis/archiv', 'admin', 'suid'); @@ -1104,6 +1107,7 @@ INSERT INTO system.tbl_rolleberechtigung (berechtigung_kurzbz, rolle_kurzbz, art INSERT INTO system.tbl_rolleberechtigung (berechtigung_kurzbz, rolle_kurzbz, art) VALUES('fs/dms', 'admin', 'suid'); INSERT INTO system.tbl_rolleberechtigung (berechtigung_kurzbz, rolle_kurzbz, art) VALUES('basis/message', 'admin', 'suid'); INSERT INTO system.tbl_rolleberechtigung (berechtigung_kurzbz, rolle_kurzbz, art) VALUES('basis/phrase', 'admin', 'suid'); +INSERT INTO system.tbl_rolleberechtigung (berechtigung_kurzbz, rolle_kurzbz, art) VALUES('system/vorlagestudiengang', 'admin', 'suid'); -- EMPTY public.tbl_statistik DELETE FROM public.tbl_statistik;