diff --git a/application/controllers/system/messages/Messages.php b/application/controllers/system/messages/Messages.php index 296022ca4..9a36d4505 100644 --- a/application/controllers/system/messages/Messages.php +++ b/application/controllers/system/messages/Messages.php @@ -58,9 +58,10 @@ class Messages extends Auth_Controller $body = $this->input->post('body'); $recipients_ids = $this->input->post('recipients_ids'); $relationmessage_id = $this->input->post('relationmessage_id'); + $systemuser = $this->input->post('systemuser'); $type = $this->input->post('type'); - $sendImplicitTemplate = $this->CLMessagesModel->sendImplicitTemplate($type, $recipients_ids, $subject, $body, $relationmessage_id); + $sendImplicitTemplate = $this->CLMessagesModel->sendImplicitTemplate($type, $recipients_ids, $subject, $body, $relationmessage_id, isset($systemuser)); if (isSuccess($sendImplicitTemplate)) { $this->load->view('system/messages/htmlMessageSentSuccess'); @@ -93,16 +94,29 @@ class Messages extends Auth_Controller public function parseMessageText() { $receiver_id = $this->input->post('receiver_id'); + $systemuser = $this->input->post('systemuser'); $text = $this->input->post('text'); $type = $this->input->post('type'); + $sender_uid = null; + + if ($systemuser === "true") + { + $this->BenutzerModel->addSelect('uid'); + if (!$result = getData($this->BenutzerModel->getFromPersonId($this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID)))) + { + show_error('No sender_uid found'); + } + $sender_uid = $result[0]->uid; + } if ($type == Messages_model::TYPE_PERSONS) { - $this->outputJson($this->CLMessagesModel->parseMessageTextPerson($receiver_id, $text)); + $this->outputJson($this->CLMessagesModel->parseMessageTextPerson($receiver_id, $text, $sender_uid)); + } elseif ($type == Messages_model::TYPE_PRESTUDENTS) { - $this->outputJson($this->CLMessagesModel->parseMessageTextPrestudent($receiver_id, $text)); + $this->outputJson($this->CLMessagesModel->parseMessageTextPrestudent($receiver_id, $text, $sender_uid)); } else { diff --git a/application/libraries/MessageLib.php b/application/libraries/MessageLib.php index be496fe4a..5e966cef7 100644 --- a/application/libraries/MessageLib.php +++ b/application/libraries/MessageLib.php @@ -468,7 +468,8 @@ class MessageLib 'body' => $body, 'priority' => $priority, 'relationmessage_id' => $relationmessage_id, - 'oe_kurzbz' => $senderOU + 'oe_kurzbz' => $senderOU, + 'insertvon' => isLogged() ? getAuthUID() : null ); $saveMessageResult = $this->_ci->MessageModel->insert($messageData); @@ -481,7 +482,8 @@ class MessageLib 'person_id' => $receiver_id, 'message_id' => $messageId, 'token' => generateToken(), - 'oe_kurzbz' => $receiverOU + 'oe_kurzbz' => $receiverOU, + 'insertvon' => isLogged() ? getAuthUID() : null ); $saveMessageResult = $this->_ci->RecipientModel->insert($recipientData); diff --git a/application/models/CL/Messages_model.php b/application/models/CL/Messages_model.php index 04192a7b4..e2b3c3510 100644 --- a/application/models/CL/Messages_model.php +++ b/application/models/CL/Messages_model.php @@ -37,6 +37,7 @@ class Messages_model extends CI_Model // Loads the message library $this->load->library('MessageLib'); // MessageModel loaded here! + $this->load->library('PermissionLib'); // Loads the person log library $this->load->library('PersonLogLib'); // Loads the widget library @@ -375,11 +376,25 @@ class Messages_model extends CI_Model * Sends a new message or a reply to a message (if $relationmessage_id is given) * using the template stored in the subject and body */ - public function sendImplicitTemplate($type, $recipients_ids, $subject, $body, $relationmessage_id = null) + public function sendImplicitTemplate($type, $recipients_ids, $subject, $body, $relationmessage_id = null, $systemuser = false) { - // Retrieves the sender id - $sender_id = getAuthPersonId(); - if (!is_numeric($sender_id)) show_error('The current logged user person_id is not defined'); + if (!($systemuser)) + { + $sender_uid = null; + // Retrieves the sender id + $sender_id = getAuthPersonId(); + if (!is_numeric($sender_id)) show_error('The current logged user person_id is not defined'); + } + else + { + $sender_id = $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID); + $this->BenutzerModel->addSelect('uid'); + if (!$result = getData($this->BenutzerModel->getFromPersonId($this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID)))) + { + show_error('No sender_uid found'); + } + $sender_uid = $result[0]->uid; + } $msgVarsData = error('No persons nor prestudents were provided'); // Retrieves message vars data for the given user/s @@ -406,7 +421,7 @@ class Messages_model extends CI_Model foreach (getData($msgVarsData) as $receiver) { // Merge receivers data with logged in user data - $msgVarsDataArray = $this->_addMsgVarsDataOfLoggedInUser($receiver); + $msgVarsDataArray = $this->_addMsgVarsDataOfLoggedInUser($receiver, $sender_uid); $msgVarsDataArray = $this->_lowerReplaceSpaceArrayKeys((array)getData($msgVarsDataArray)[0]); // replaces array keys $parsedSubject = parseText($subject, $msgVarsDataArray); @@ -464,7 +479,7 @@ class Messages_model extends CI_Model * Sends a new message using the given template and information present in parameter prestudents * Extra variables can be added using parameter $msgVars */ - public function sendExplicitTemplateSenderId($sender_id, $prestudents, $oe_kurzbz, $vorlage_kurzbz, $msgVars) + public function sendExplicitTemplateSenderId($sender_id, $prestudents, $oe_kurzbz, $vorlage_kurzbz, $msgVars, $systemuser = false) { // Retrieves message vars data for the given user/s $msgVarsData = $this->MessageModel->getMsgVarsDataByPrestudentId($prestudents); @@ -472,15 +487,28 @@ class Messages_model extends CI_Model if (!hasData($msgVarsData)) show_error('No recipients were given'); $prestudentsData = $this->PrestudentModel->getOrganisationunits($prestudents); - - // Get the senders uid (if user is an active employee) - $this->BenutzerModel->addSelect('uid'); - $this->BenutzerModel->addJoin('public.tbl_mitarbeiter ma', 'ma.mitarbeiter_uid = uid'); - if (!$result = getData($this->BenutzerModel->getFromPersonId($sender_id))) + + if (!($systemuser)) { - show_error('No sender_uid found'); + // Get the senders uid (if user is an active employee) + $this->BenutzerModel->addSelect('uid'); + $this->BenutzerModel->addJoin('public.tbl_mitarbeiter ma', 'ma.mitarbeiter_uid = uid'); + if (!$result = getData($this->BenutzerModel->getFromPersonId($sender_id))) + { + show_error('No sender_uid found'); + } + $sender_uid = $result[0]->uid; + } + else + { + $this->BenutzerModel->addSelect('uid'); + if (!$result = getData($this->BenutzerModel->getFromPersonId($this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID)))) + { + show_error('No sender_uid found'); + } + $sender_uid = $result[0]->uid; + $sender_id = $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID); } - $sender_uid = $result[0]->uid; // Adds the organisation unit to each prestudent if (isEmptyString($oe_kurzbz) && hasData($msgVarsData) && hasData($prestudentsData)) @@ -631,14 +659,14 @@ class Messages_model extends CI_Model * Parse the given given text using data from the given user * Use the CI parser which performs simple text substitution for pseudo-variable */ - public function parseMessageTextPerson($person_id, $text) + public function parseMessageTextPerson($person_id, $text, $sender_uid = null) { $parseMessageText = error('The given person_id is not a valid number'); if (is_numeric($person_id)) $parseMessageText = $this->MessageModel->getMsgVarsDataByPersonId($person_id); // Add message vars data of the logged in user - $parseMessageText = $this->_addMsgVarsDataOfLoggedInUser($parseMessageText); + $parseMessageText = $this->_addMsgVarsDataOfLoggedInUser($parseMessageText, $sender_uid); if (hasData($parseMessageText)) { @@ -657,14 +685,14 @@ class Messages_model extends CI_Model * Parse the given given text using data from the given user * Use the CI parser which performs simple text substitution for pseudo-variable */ - public function parseMessageTextPrestudent($prestudent_id, $text) + public function parseMessageTextPrestudent($prestudent_id, $text, $sender_uid = null) { $parseMessageText = error('The given prestudent_id is not a valid number'); if (is_numeric($prestudent_id)) $parseMessageText = $this->MessageModel->getMsgVarsDataByPrestudentId($prestudent_id); // Add message vars data of the logged in user - $parseMessageText = $this->_addMsgVarsDataOfLoggedInUser($parseMessageText); + $parseMessageText = $this->_addMsgVarsDataOfLoggedInUser($parseMessageText, $sender_uid); if (hasData($parseMessageText)) { @@ -908,6 +936,8 @@ class Messages_model extends CI_Model $senderIsAdmin = $this->BenutzerrolleModel->isAdminByPersonId($sender_id); if (isError($senderIsAdmin)) show_error(getError($senderIsAdmin)); + $allowSenderChange = $this->permissionlib->isBerechtigt('infocenter'); + // --------------------------------------------------------------------------------------- // Returns data as an array return array ( @@ -921,7 +951,8 @@ class Messages_model extends CI_Model 'recipientsArray' => $recipientsArray, 'recipients_ids' => $recipients_ids, 'relationmessage_id' => $relationmessage, - 'type' => $type + 'type' => $type, + 'allowSenderChange' => $allowSenderChange ); } @@ -940,7 +971,9 @@ class Messages_model extends CI_Model { $otherMsgVarsDataObj = getData($otherMsgVarsDataObj)[0]; } - + + if (isEmptyString($uid)) + $uid = null; // Retrieve message vars data of the logged in user if (!$msgVarsDataLoggedInUser = getData($this->MessageModel->getMsgVarsDataByLoggedInUser($uid))[0]) { diff --git a/application/models/system/Message_model.php b/application/models/system/Message_model.php index e0a185f9b..9c6aec14c 100644 --- a/application/models/system/Message_model.php +++ b/application/models/system/Message_model.php @@ -109,11 +109,16 @@ class Message_model extends DB_Model re.vornamen AS revornamen, s.status, s.statusinfo, - s.insertamum AS statusamum + s.insertamum AS statusamum, + mp.vorname as insertvorname, + mp.nachname as insertnachname FROM public.tbl_msg_message m JOIN public.tbl_msg_recipient r ON m.message_id = r.message_id JOIN public.tbl_person se ON (m.person_id = se.person_id) JOIN public.tbl_person re ON (r.person_id = re.person_id) + + LEFT JOIN public.tbl_benutzer mb ON (mb.uid = m.insertvon) + LEFT JOIN public.tbl_person mp ON (mp.person_id = mb.person_id) LEFT JOIN ( SELECT message_id, person_id, status, statusinfo, insertamum FROM public.tbl_msg_status diff --git a/application/views/system/infocenter/messageList.php b/application/views/system/infocenter/messageList.php index 18b859314..e1a44fc8a 100644 --- a/application/views/system/infocenter/messageList.php +++ b/application/views/system/infocenter/messageList.php @@ -11,6 +11,7 @@ $widthColumn = $msgExists === true ? 8 : 12;