From a0b368683ec94def53c88efb6f55c4db3d1938db Mon Sep 17 00:00:00 2001 From: Paolo Date: Wed, 19 Apr 2023 13:51:53 +0200 Subject: [PATCH] - Remove global constant OU_SENDER_TEST_REMINDER from application/config/constants.php - Page for the Infocenter details messages block should use CL/Message_model logic - Page to read personal messages wrongly displays the sender - Page to read message with token wrongly displays the sender - All the pages should display the sender using the following logic: - If the sender id is set and it is not the system sender and the organization unit is not set then display the sender name + surname - If the sender id is set and it is not the system sender and the organization unit is set then display the sender name + surname - If the sender id is set and it is the system sender and the organization unit is set then display the organization unit - If the sender id is set and it is the system sender and the organization unit is not set then display "System sender" - The organization unit should firstly retrieved from the degree programs, if not available then from the organization units, if not available then display "System sender" - Centralized this logic in the CL/Message_model as much as possible --- application/config/constants.php | 2 - .../controllers/jobs/ReihungstestJob.php | 11 +- .../system/infocenter/InfoCenter.php | 255 ++++++++++------- application/models/CL/Messages_model.php | 93 +++--- application/models/system/Message_model.php | 63 ---- application/models/system/Recipient_model.php | 270 ++++++++++++------ .../system/infocenter/infocenterDetails.php | 5 +- .../views/system/infocenter/messageList.php | 17 +- 8 files changed, 398 insertions(+), 318 deletions(-) diff --git a/application/config/constants.php b/application/config/constants.php index bffeecc52..302ed1cc6 100644 --- a/application/config/constants.php +++ b/application/config/constants.php @@ -149,5 +149,3 @@ define('MSG_ERR_INVALID_RECIPIENTS', 46); define('MSG_ERR_INVALID_OU', 47); define('MSG_ERR_INVALID_TOKEN', 48); -// Message sender OE unit for reminder application Test -define('OU_SENDER_TEST_REMINDER', 'infocenter'); diff --git a/application/controllers/jobs/ReihungstestJob.php b/application/controllers/jobs/ReihungstestJob.php index 3f4002836..9018f92a6 100644 --- a/application/controllers/jobs/ReihungstestJob.php +++ b/application/controllers/jobs/ReihungstestJob.php @@ -1,6 +1,6 @@ lageplan; } - $sender_id = $this->config->item('system_person_id'); - $this->CLMessagesModel->sendExplicitTemplateSenderId( - $sender_id, + $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID), $applicant->prestudent_id, - OU_SENDER_TEST_REMINDER, + self::OU_SENDER_TEST_REMINDER, 'Sancho_RemindApplicantsOfTest', $mailcontent_data_arr ); diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index d027e559e..45cad1bd2 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -109,8 +109,8 @@ class InfoCenter extends Auth_Controller * Constructor */ public function __construct() - { - parent::__construct( + { + parent::__construct( array( 'index' => 'infocenter:r', 'freigegeben' => 'infocenter:r', @@ -166,7 +166,6 @@ class InfoCenter extends Auth_Controller $this->load->model('crm/ZGVPruefungStatus_model', 'ZGVPruefungStatusModel'); $this->load->model('person/Notiz_model', 'NotizModel'); $this->load->model('person/Person_model', 'PersonModel'); - $this->load->model('system/Message_model', 'MessageModel'); $this->load->model('system/Filters_model', 'FiltersModel'); $this->load->model('system/PersonLock_model', 'PersonLockModel'); $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); @@ -176,6 +175,7 @@ class InfoCenter extends Auth_Controller $this->load->model('person/Kontakt_model', 'KontaktModel'); $this->load->model('person/Geschlecht_model', 'GeschlechtModel'); $this->load->model('person/adresse_model', 'AdresseModel'); + $this->load->model('CL/Messages_model', 'CLMessagesModel'); // Loads libraries $this->load->library('PersonLogLib'); @@ -199,7 +199,7 @@ class InfoCenter extends Auth_Controller $this->load->library('VariableLib', array('uid' => $this->_uid)); $this->setControllerId(); // sets the controller id - } + } // ----------------------------------------------------------------------------------------------------------------- // Public methods @@ -1085,8 +1085,23 @@ class InfoCenter extends Auth_Controller */ public function reloadMessages($person_id) { - $messages = $this->MessageModel->getMessagesOfPerson($person_id, 1); - $this->load->view('system/infocenter/messageList.php', array('messages' => $messages->retval)); + $messages = $this->CLMessagesModel->getReceivedAndSentMessages($person_id); + + // If there are messages + if (hasData($messages)) + { + $personexists = $this->PersonModel->load($person_id); + + if (isError($personexists)) show_error(getError($personexists)); + + if (!hasData($personexists)) show_error('Person does not exist!'); + + $this->load->view('system/infocenter/messageList.php', getData($messages)); + } + elseif (isError($messages)) // Otherwise if an error occurred + { + show_error(getError($messages)); + } } /** @@ -1522,6 +1537,78 @@ class InfoCenter extends Auth_Controller $this->outputJsonSuccess("Done!"); } + + /** + * One day I'll be given some nice comment + */ + public function getAbsageData() + { + $stg_typ = $this->getStudienArtBerechtigung(['b', 'm']); + + if (!is_null($stg_typ)) + { + $statusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval; + $studienSemester = $this->variablelib->getVar('infocenter_studiensemester'); + $studiengaenge = $this->StudiengangModel->getStudiengaengeWithOrgForm(array_column($stg_typ, 'typ'), $studienSemester); + + $data = array ( + 'statusgruende' => $statusgruende, + 'studiengaenge' => $studiengaenge->retval + ); + + $this->outputJsonSuccess($data); + } + else + $this->outputJsonSuccess(null); + } + + /** + * One day I'll be given some nice comment + */ + public function getStudienArtBerechtigung($typ = null) + { + $studiengang_kz_all = $this->permissionlib->getSTG_isEntitledFor('infocenter'); + $stg_typ = $this->StudiengangModel->getStudiengangTyp($studiengang_kz_all, $typ); + return getData($stg_typ); + } + + /** + * One day I'll be given some nice comment + */ + public function getStudienartData() + { + $this->outputJsonSuccess($this->getStudienArtBerechtigung(['b', 'm', 'l'])); + } + + /** + * One day I'll be given some nice comment + */ + public function saveAbsageForAll() + { + $statusgrund = $this->input->post('statusgrund'); + $studiengang = $this->input->post('studiengang'); + $abgeschickt = $this->input->post('abgeschickt'); + $personen = $this->input->post('personen'); + $studienSemester = $this->variablelib->getVar('infocenter_studiensemester'); + + if ($statusgrund === 'null' || $studiengang === 'null' || $abgeschickt === 'null' || empty($personen)) + $this->terminateWithJsonError("Bitte füllen Sie alle Felder aus"); + + foreach($personen as $person) + { + $prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt); + + if (!hasData($prestudent)) + continue; + + $prestudentData = getData($prestudent); + + $this->saveAbsage($prestudentData[0]->prestudent_id, $statusgrund); + } + + $this->outputJsonSuccess("Success"); + } + // ----------------------------------------------------------------------------------------------------------------- // Private methods @@ -1934,7 +2021,7 @@ class InfoCenter extends Auth_Controller show_error(getError($dokumente_nachgereicht)); } - $messages = $this->MessageModel->getMessagesOfPerson($person_id, 1); + $messages = $this->CLMessagesModel->getReceivedAndSentMessages($person_id); if (isError($messages)) { @@ -1967,13 +2054,13 @@ class InfoCenter extends Auth_Controller $data = array ( 'lockedby' => $lockedby, 'lockedbyother' => $lockedbyother, - 'stammdaten' => $stammdaten->retval, - 'dokumente' => $dokumente->retval, - 'dokumente_nachgereicht' => $dokumente_nachgereicht->retval, - 'messages' => $messages->retval, + 'stammdaten' => getData($stammdaten), + 'dokumente' => getData($dokumente), + 'dokumente_nachgereicht' => getData($dokumente_nachgereicht), + 'messages' => getData($messages), 'logs' => $logs, - 'notizen' => $notizen->retval, - 'notizenbewerbung' => $notizen_bewerbung->retval + 'notizen' => getData($notizen), + 'notizenbewerbung' => getData($notizen_bewerbung) ); return $data; @@ -2020,6 +2107,7 @@ class InfoCenter extends Auth_Controller //parse Anmerkung for Alternative (Prio is given in orgform and sprache anyway) $zgvpruefung->prestudentstatus->alternative = is_numeric($position) ? substr($zgvpruefung->prestudentstatus->anmerkung, $position) : null; } + //if prestudent is not interessent or is already bestaetigt, then show only as information, non-editable $zgvpruefung->infoonly = !isset($zgvpruefung->prestudentstatus) || isset($zgvpruefung->prestudentstatus->bestaetigtam) @@ -2030,15 +2118,19 @@ class InfoCenter extends Auth_Controller //wether prestudent was freigegeben for RT/Stg $zgvpruefung->isRtFreigegeben = false; $zgvpruefung->isStgFreigegeben = false; - $zgvpruefung->sendStgFreigabeMsg = true;//wether Stgudiengangfreigabemessage can be sent (for "exceptions", Studiengänge with no message sending) + // Wether Stgudiengangfreigabemessage can be sent (for "exceptions", Studiengänge with no message sending) + $zgvpruefung->sendStgFreigabeMsg = true; $isFreigegeben = null; if (isset($zgvpruefung->prestudentstatus->studiensemester_kurzbz)) { $this->PrestudentstatusModel->addSelect('bestaetigtam, statusgrund_id, tbl_status_grund.bezeichnung_mehrsprachig AS bezeichnung_statusgrund'); $this->PrestudentstatusModel->addJoin('public.tbl_status_grund', 'statusgrund_id', 'LEFT'); - $isFreigegeben = $this->PrestudentstatusModel->loadWhere(array('studiensemester_kurzbz' => $zgvpruefung->prestudentstatus->studiensemester_kurzbz, - 'tbl_prestudentstatus.status_kurzbz' => self::INTERESSENTSTATUS, 'prestudent_id' => $prestudent->prestudent_id)); + $isFreigegeben = $this->PrestudentstatusModel->loadWhere(array( + 'studiensemester_kurzbz' => $zgvpruefung->prestudentstatus->studiensemester_kurzbz, + 'tbl_prestudentstatus.status_kurzbz' => self::INTERESSENTSTATUS, + 'prestudent_id' => $prestudent->prestudent_id) + ); } if (hasData($isFreigegeben)) @@ -2061,38 +2153,38 @@ class InfoCenter extends Auth_Controller $zgvpruefung->isRtFreigegeben = true; } } - } + } - //application priority change possible? - $zgvpruefung->changeup = false; - $zgvpruefung->changedown = false; - $zgvpruefung->hasBewerber = false; - - if (isset($zgvpruefung->prestudentstatus->status_kurzbz) && $zgvpruefung->prestudentstatus->status_kurzbz == self::INTERESSENTSTATUS) - { - if (isset($zgvpruefung->prestudentstatus->studiensemester_kurzbz)) - { - $studiensemester = $zgvpruefung->prestudentstatus->studiensemester_kurzbz; - //show warning if there is already another bewerber (RT result already exists) - $bewerber = $this->PersonModel->hasBewerber($person_id, $studiensemester, 'b'); - - if (hasData($bewerber)) - { - $bewerbercnt = getData($bewerber); - - if (is_numeric($bewerbercnt[0]->anzahl_bewerber) && $bewerbercnt[0]->anzahl_bewerber > 0) - { - $zgvpruefung->hasBewerber = true; - } - } - - $zgvpruefung->changeup = $this->PrestudentModel->checkPrioChange($zgvpruefung->prestudent_id, $studiensemester, -1); - $zgvpruefung->changedown = $this->PrestudentModel->checkPrioChange($zgvpruefung->prestudent_id, $studiensemester, 1); - } - } + // Application priority change possible? + $zgvpruefung->changeup = false; + $zgvpruefung->changedown = false; + $zgvpruefung->hasBewerber = false; + + if (isset($zgvpruefung->prestudentstatus->status_kurzbz) && $zgvpruefung->prestudentstatus->status_kurzbz == self::INTERESSENTSTATUS) + { + if (isset($zgvpruefung->prestudentstatus->studiensemester_kurzbz)) + { + $studiensemester = $zgvpruefung->prestudentstatus->studiensemester_kurzbz; + //show warning if there is already another bewerber (RT result already exists) + $bewerber = $this->PersonModel->hasBewerber($person_id, $studiensemester, 'b'); + + if (hasData($bewerber)) + { + $bewerbercnt = getData($bewerber); + + if (is_numeric($bewerbercnt[0]->anzahl_bewerber) && $bewerbercnt[0]->anzahl_bewerber > 0) + { + $zgvpruefung->hasBewerber = true; + } + } + + $zgvpruefung->changeup = $this->PrestudentModel->checkPrioChange($zgvpruefung->prestudent_id, $studiensemester, -1); + $zgvpruefung->changedown = $this->PrestudentModel->checkPrioChange($zgvpruefung->prestudent_id, $studiensemester, 1); + } + } $zgvExist = $this->ZGVPruefungModel->loadWhere(array('prestudent_id' => $zgvpruefung->prestudent_id)); - if (isSuccess($zgvExist) && hasData($zgvExist)) + if (isSuccess($zgvExist) && hasData($zgvExist)) { $this->ZGVPruefungStatusModel->addOrder('datum', 'DESC'); $this->ZGVPruefungStatusModel->addLimit(1); @@ -2252,7 +2344,13 @@ class InfoCenter extends Auth_Controller $studiengang_mail = $prestudentdata->studiengangmail; $studiengang_typ = $prestudentdata->studiengangtyp; - return array('person_id' => $person_id, 'studiengang_kurzbz' => $studiengang_kurzbz, 'studiengang_bezeichnung' => $studiengang_bezeichnung, 'studiengang_mail' => $studiengang_mail, 'studiengang_typ' => $studiengang_typ); + return array( + 'person_id' => $person_id, + 'studiengang_kurzbz' => $studiengang_kurzbz, + 'studiengang_bezeichnung' => $studiengang_bezeichnung, + 'studiengang_mail' => $studiengang_mail, + 'studiengang_typ' => $studiengang_typ + ); } /** @@ -2358,11 +2456,6 @@ class InfoCenter extends Auth_Controller 'nachname' => $person->nachname, 'prestudentid' => $prestudent_id, 'statusgrund' => $statusgrund, - /*'zgvbez' => $prestudent->zgv_bez, - 'zgvort' => $zgvort, - 'zgvdatum' => $zgvdatum, - 'zgvnation' => $zgvnation, - */ 'notizentext' => $notizentext, 'dokumente' => $dokumenteMail, 'dokumente_nachgereicht' => $dokumenteNachzureichenMail, @@ -2393,63 +2486,5 @@ class InfoCenter extends Auth_Controller $this->loglib->logError('Studiengang has no mail for sending Freigabe mail'); } } - - public function getAbsageData() - { - $stg_typ = $this->getStudienArtBerechtigung(['b', 'm']); - - if (!is_null($stg_typ)) - { - $statusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval; - $studienSemester = $this->variablelib->getVar('infocenter_studiensemester'); - $studiengaenge = $this->StudiengangModel->getStudiengaengeWithOrgForm(array_column($stg_typ, 'typ'), $studienSemester); - - $data = array ( - 'statusgruende' => $statusgruende, - 'studiengaenge' => $studiengaenge->retval - ); - - $this->outputJsonSuccess($data); - } - else - $this->outputJsonSuccess(null); - } - - public function getStudienArtBerechtigung($typ = null) - { - $studiengang_kz_all = $this->permissionlib->getSTG_isEntitledFor('infocenter'); - $stg_typ = $this->StudiengangModel->getStudiengangTyp($studiengang_kz_all, $typ); - return getData($stg_typ); - } - - public function getStudienartData() - { - $this->outputJsonSuccess($this->getStudienArtBerechtigung(['b', 'm', 'l'])); - } - - public function saveAbsageForAll() - { - $statusgrund = $this->input->post('statusgrund'); - $studiengang = $this->input->post('studiengang'); - $abgeschickt = $this->input->post('abgeschickt'); - $personen = $this->input->post('personen'); - $studienSemester = $this->variablelib->getVar('infocenter_studiensemester'); - - if ($statusgrund === 'null' || $studiengang === 'null' || $abgeschickt === 'null' || empty($personen)) - $this->terminateWithJsonError("Bitte füllen Sie alle Felder aus"); - - foreach($personen as $person) - { - $prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt); - - if (!hasData($prestudent)) - continue; - - $prestudentData = getData($prestudent); - - $this->saveAbsage($prestudentData[0]->prestudent_id, $statusgrund); - } - - $this->outputJsonSuccess("Success"); - } } + diff --git a/application/models/CL/Messages_model.php b/application/models/CL/Messages_model.php index 91c361cd6..8d5a76b61 100644 --- a/application/models/CL/Messages_model.php +++ b/application/models/CL/Messages_model.php @@ -1,6 +1,6 @@ message_id = $receivedMessage->message_id; $jsonRecord->subject = $receivedMessage->subject; $jsonRecord->body = $receivedMessage->body; - $jsonRecord->from = $receivedMessage->vorname.' '.$receivedMessage->nachname; $sentDate = new DateTime($receivedMessage->sent); $jsonRecord->sent = $sentDate->format('d/m/Y H:i:s'); - $jsonRecord->status = $receivedMessage->status; - $jsonRecord->statusPersonId = $receivedMessage->statuspersonid; + $jsonRecord->status = $receivedMessage->lastStatus; + $jsonRecord->statusPersonId = $receivedMessage->senderPersonId; $jsonRecord->token = $receivedMessage->token; + $jsonRecord->from = self::SYSTEM_SENDER_NAME; // default fallback + + // If the sender id is the system sender then use the organisation unit + if ($receivedMessage->senderPersonId == $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID)) + { + // If the oe exists + if (!isEmptyString($receivedMessage->oe)) $jsonRecord->from = $receivedMessage->oe; + } + else // otherwise use the name and surname of the person sender + { + $jsonRecord->from = $receivedMessage->senderName.' '.$receivedMessage->senderSurname; + } $jsonArray[] = $jsonRecord; } @@ -264,17 +275,20 @@ class Messages_model extends CI_Model $jsonRecord->body = $sentMessage->body; $sentDate = new DateTime($sentMessage->sent); $jsonRecord->sent = $sentDate->format('d/m/Y H:i:s'); - $jsonRecord->status = $sentMessage->status; - $jsonRecord->statusPersonId = $sentMessage->statuspersonid; + $jsonRecord->status = $sentMessage->lastStatus; + $jsonRecord->statusPersonId = $sentMessage->senderPersonId; $jsonRecord->token = $sentMessage->token; + $jsonRecord->to = self::SYSTEM_SENDER_NAME; // default fallback - if ($sentMessage->person_id == $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID)) + // If the recipient id is the system sender then use the organisation unit + if ($sentMessage->recipientPersonId == $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID)) { - $jsonRecord->to = $sentMessage->oe; + // If the oe exists + if (!isEmptyString($sentMessage->oe)) $jsonRecord->to = $sentMessage->oe; } - else + else // otherwise use the name and surname of the person recipient { - $jsonRecord->to = $sentMessage->vorname.' '.$sentMessage->nachname; + $jsonRecord->to = $sentMessage->recipientName.' '.$sentMessage->recipientSurname; } $jsonArray[] = $jsonRecord; @@ -308,38 +322,33 @@ class Messages_model extends CI_Model $sender = self::SYSTEM_SENDER_NAME; // default fallback // If the sender is a person - if (isEmptyString($message->oe_kurzbz)) + if ($message->sender_id != $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID)) { - // And if this person is not the system sender - if ($message->sender_id != $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID)) - { - // Retrieves message sender information - $senderResult = $this->MessageTokenModel->getSenderData($message->sender_id); - if (isError($senderResult)) show_error(getError($senderResult)); - if (!hasData($senderResult)) show_error('No sender information found'); + // Retrieves message sender information + $senderResult = $this->MessageTokenModel->getSenderData($message->sender_id); + if (isError($senderResult)) show_error(getError($senderResult)); + if (!hasData($senderResult)) show_error('No sender information found'); - $sender = getData($senderResult)[0]->vorname.' '.getData($senderResult)[0]->nachname; - } + $sender = getData($senderResult)[0]->vorname.' '.getData($senderResult)[0]->nachname; } - //case ReihungstestReminderJob - elseif($message->oe_kurzbz == OU_SENDER_TEST_REMINDER) - { - - $ouResult = $this->OrganisationseinheitModel->loadWhere(array('oe_kurzbz' => $message->oe_kurzbz)); - - if (isError($ouResult)) show_error(getError($ouResult)); - if (!hasData($ouResult)) show_error('No organization unit information found'); - - $sender = getData($ouResult)[0]->bezeichnung; - } - else // otherwise if the sender is an organization unit (degree program) { + // Looks into the degree programs $ouResult = $this->StudiengangModel->loadWhere(array('oe_kurzbz' => $message->oe_kurzbz)); - if (isError($ouResult)) show_error(getError($ouResult)); - if (!hasData($ouResult)) show_error('No organization unit information found'); - $sender = getData($ouResult)[0]->bezeichnung; + if (isError($ouResult)) show_error(getError($ouResult)); + + // If not found here + if (!hasData($ouResult)) + { + // Then looks into the organisation units + $ouResult = $this->OrganisationseinheitModel->loadWhere(array('oe_kurzbz' => $message->oe_kurzbz)); + + if (isError($ouResult)) show_error(getError($ouResult)); + } + + // If found then set it, otherwise the fallback is used + if (hasData($ouResult)) $sender = getData($ouResult)[0]->bezeichnung; } // If the sender is not the system sender and configurations to reply exist @@ -752,6 +761,17 @@ class Messages_model extends CI_Model } } + /** + * Returns all the received and sent messages for the given person + */ + public function getReceivedAndSentMessages($person_id) + { + return $this->RecipientModel->getReceivedAndSentMessages( + $person_id, + $this->config->item(MessageLib::CFG_OU_RECEIVERS) + ); + } + //------------------------------------------------------------------------------------------------------------------ // Private methods @@ -984,7 +1004,7 @@ class Messages_model extends CI_Model * @param object $otherMsgVarsDataObj Can be success object or simple object. * @return object Returns success object. */ - public function _addMsgVarsDataOfLoggedInUser($otherMsgVarsDataObj, $uid = null) + private function _addMsgVarsDataOfLoggedInUser($otherMsgVarsDataObj, $uid = null) { // First check if param type is object if (!is_object($otherMsgVarsDataObj)) show_error('Must pass an object to merge with data of logged in user'); @@ -1006,3 +1026,4 @@ class Messages_model extends CI_Model return success(array((object)(array_merge((array)$otherMsgVarsDataObj, (array)$msgVarsDataLoggedInUser)))); } } + diff --git a/application/models/system/Message_model.php b/application/models/system/Message_model.php index fb887681e..525490d6e 100644 --- a/application/models/system/Message_model.php +++ b/application/models/system/Message_model.php @@ -77,69 +77,6 @@ class Message_model extends DB_Model return $this->execQuery($sql, $parametersArray); } - /** - * Gets massages with a person being sender OR receiver. - * @param $person_id - * @param null $status message status. by default, latest status is returned - * @return array|null - */ - public function getMessagesOfPerson($person_id, $status = null) - { - $sql = 'SELECT m.message_id, - m.person_id, - m.subject, - m.body, - m.priority, - m.insertamum, - m.relationmessage_id, - m.oe_kurzbz, - oe.bezeichnung AS oebezeichnung, - se.person_id AS sepersonid, - se.anrede AS seanrede, - se.titelpost AS setitelpost, - se.titelpre AS setitelpre, - se.nachname AS senachname, - se.vorname AS sevorname, - se.vornamen AS sevornamen, - re.person_id AS repersonid, - re.anrede AS reanrede, - re.titelpost AS retitelpost, - re.titelpre AS retitelpre, - re.nachname AS renachname, - re.vorname AS revorname, - re.vornamen AS revornamen, - s.status, - s.statusinfo, - s.insertamum AS statusamum - 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) - JOIN public.tbl_organisationseinheit oe ON (m.oe_kurzbz = oe.oe_kurzbz) - LEFT JOIN ( - SELECT message_id, person_id, status, statusinfo, insertamum - FROM public.tbl_msg_status - %s - ORDER BY insertamum DESC - ) s ON (m.message_id = s.message_id AND re.person_id = s.person_id) - WHERE se.person_id = ? - OR re.person_id = ? - '; - - if (is_numeric($status)) - { - $sql = sprintf($sql, 'WHERE status = '.$status); - } - else - { - $sql = sprintf($sql, ''); - } - - $parametersArray = array($person_id, $person_id); - - return $this->execQuery($sql, $parametersArray); - } - /** * getMessageVars */ diff --git a/application/models/system/Recipient_model.php b/application/models/system/Recipient_model.php index d74d03243..19721a79a 100644 --- a/application/models/system/Recipient_model.php +++ b/application/models/system/Recipient_model.php @@ -267,69 +267,14 @@ class Recipient_model extends DB_Model */ public function getReceivedMessages($person_id, $functions) { - $sql = '-- Messages sent directly to the person - SELECT mr.message_id, - mm.relationmessage_id, - mm.subject, - mm.body, - mm.insertamum AS sent, - p.vorname, - p.nachname, - MAX(ms.status) AS status, - ms.person_id AS statusPersonId, - mr.token - FROM public.tbl_msg_recipient mr - JOIN public.tbl_msg_message mm ON (mm.message_id = mr.message_id) - JOIN public.tbl_msg_status ms ON (ms.message_id = mr.message_id AND ms.person_id = mr.person_id) - JOIN public.tbl_person p ON (p.person_id = mm.person_id) - WHERE mr.person_id = ? - GROUP BY mr.message_id, - mm.relationmessage_id, - mm.subject, - mm.body, - mm.insertamum, - p.vorname, - p.nachname, - ms.person_id, - mr.token - UNION - -- Messages sent to a person that belongs to the recipient organisation unit - SELECT mrou.message_id, - mm.relationmessage_id, - mm.subject, - mm.body, - mm.insertamum AS sent, - pr.vorname, - pr.nachname, - MAX(ms.status) AS status, - ms.person_id AS statusPersonId, - mrou.token - FROM public.tbl_person p - JOIN public.tbl_benutzer b ON (b.person_id = p.person_id) - JOIN ( - SELECT uid, oe_kurzbz - FROM public.tbl_benutzerfunktion - WHERE (datum_von IS NULL OR datum_von <= NOW()) - AND (datum_bis IS NULL OR datum_bis >= NOW()) - AND funktion_kurzbz IN ? - ) bf ON (bf.uid = b.uid) - JOIN public.tbl_msg_recipient mrou ON (mrou.oe_kurzbz = bf.oe_kurzbz) - JOIN public.tbl_msg_message mm ON (mm.message_id = mrou.message_id) - JOIN public.tbl_msg_status ms ON (ms.message_id = mrou.message_id AND ms.person_id = mrou.person_id) - JOIN public.tbl_person pr ON (pr.person_id = mm.person_id) - WHERE p.person_id = ? - GROUP BY mrou.message_id, - mm.relationmessage_id, - mm.subject, - mm.body, - mm.insertamum, - pr.vorname, - pr.nachname, - ms.person_id, - mrou.token - ORDER BY sent DESC'; - - return $this->execQuery($sql, array($person_id, $functions, $person_id)); + return $this->execQuery( + $this->_getReceivedMessagesQuery().' ORDER BY sent DESC', + array( + $person_id, + $functions, + $person_id + ) + ); } /** @@ -337,38 +282,7 @@ class Recipient_model extends DB_Model */ public function getSentMessages($person_id) { - $sql = 'SELECT mm.message_id, - mm.relationmessage_id, - mm.subject, - mm.body, - mm.insertamum AS sent, - p.person_id, - p.vorname, - p.nachname, - MAX(ms.status) AS status, - ms.person_id AS statusPersonId, - oe.bezeichnung AS oe, - mr.token - FROM public.tbl_msg_message mm - JOIN public.tbl_msg_recipient mr ON (mr.message_id = mm.message_id) - JOIN public.tbl_msg_status ms ON (ms.message_id = mm.message_id AND ms.person_id = mr.person_id) - JOIN public.tbl_person p ON (p.person_id = mr.person_id) - LEFT JOIN public.tbl_organisationseinheit oe ON (oe.oe_kurzbz = mr.oe_kurzbz) - WHERE mm.person_id = ? - GROUP BY mm.message_id, - mm.relationmessage_id, - mm.subject, - mm.body, - mm.insertamum, - p.person_id, - p.vorname, - p.nachname, - ms.person_id, - oe.bezeichnung, - mr.token - ORDER BY sent DESC'; - - return $this->execQuery($sql, array($person_id)); + return $this->execQuery($this->_getSentMessagesQuery().' ORDER BY sent DESC', array($person_id)); } /** @@ -393,4 +307,170 @@ class Recipient_model extends DB_Model return $this->execQuery($sql, array($messageIds)); } + + /** + * + */ + public function getReceivedAndSentMessages($person_id, $functions) + { + return $this->execQuery( + $this->_getReceivedMessagesQuery(). + ' UNION '. + $this->_getSentMessagesQuery(). + ' ORDER BY sent DESC', + array( + $person_id, + $functions, + $person_id, + $person_id + ) + ); + } + + // ------------------------------------------------------------------------------------------------------------------------- + // Private methods + + /** + * Returns the query used to get the sent messages for a given person + */ + private function _getSentMessagesQuery() + { + return 'SELECT mm.message_id, + mm.relationmessage_id, + mm.subject, + mm.body, + mm.insertamum AS sent, + pr.person_id AS "recipientPersonId", + pr.vorname AS "recipientName", + pr.nachname AS "recipientSurname", + ps.person_id AS "senderPersonId", + ps.vorname AS "senderName", + ps.nachname AS "senderSurname", + (SELECT MAX(status) FROM public.tbl_msg_status WHERE message_id = mm.message_id AND person_id = mr.person_id) AS "lastStatus", + (SELECT MAX(insertamum) FROM public.tbl_msg_status WHERE message_id = mm.message_id AND person_id = mr.person_id) AS "lastStatusDate", + oe.oe_kurzbz AS "oeId", + COALESCE(sg.bezeichnung, oe.bezeichnung) AS oe, + mr.token + FROM public.tbl_msg_message mm + JOIN public.tbl_msg_recipient mr ON (mr.message_id = mm.message_id) + JOIN public.tbl_person pr ON (pr.person_id = mr.person_id) + JOIN public.tbl_person ps ON (ps.person_id = mm.person_id) + LEFT JOIN public.tbl_organisationseinheit oe ON (oe.oe_kurzbz = mr.oe_kurzbz) + LEFT JOIN public.tbl_studiengang sg ON (sg.oe_kurzbz = mr.oe_kurzbz) + WHERE mm.person_id = ? + GROUP BY mm.message_id, + mm.relationmessage_id, + mm.subject, + mm.body, + mm.insertamum, + pr.person_id, + pr.vorname, + pr.nachname, + ps.person_id, + ps.vorname, + ps.nachname, + "lastStatus", + "lastStatusDate", + oe.oe_kurzbz, + oe, + mr.token'; + } + + /** + * Returns the query used to get the received messages for a given person + */ + private function _getReceivedMessagesQuery() + { + return '-- Messages sent directly to the person + SELECT mr.message_id, + mm.relationmessage_id, + mm.subject, + mm.body, + mm.insertamum AS sent, + pr.person_id AS "recipientPersonId", + pr.vorname AS "recipientName", + pr.nachname AS "recipientSurname", + ps.person_id AS "senderPersonId", + ps.vorname AS "senderName", + ps.nachname AS "senderSurname", + (SELECT MAX(status) FROM public.tbl_msg_status WHERE message_id = mm.message_id AND person_id = mr.person_id) AS "lastStatus", + (SELECT MAX(insertamum) FROM public.tbl_msg_status WHERE message_id = mm.message_id AND person_id = mr.person_id) AS "lastStatusDate", + oe.oe_kurzbz AS "oeId", + COALESCE(sg.bezeichnung, oe.bezeichnung) AS oe, + mr.token + FROM public.tbl_msg_recipient mr + JOIN public.tbl_msg_message mm ON (mm.message_id = mr.message_id) + JOIN public.tbl_person ps ON (ps.person_id = mm.person_id) + JOIN public.tbl_person pr ON (pr.person_id = mr.person_id) + LEFT JOIN public.tbl_organisationseinheit oe ON (oe.oe_kurzbz = mm.oe_kurzbz) + LEFT JOIN public.tbl_studiengang sg ON (sg.oe_kurzbz = mm.oe_kurzbz) + WHERE mr.person_id = ? + GROUP BY mr.message_id, + mm.relationmessage_id, + mm.subject, + mm.body, + mm.insertamum, + pr.person_id, + pr.vorname, + pr.nachname, + ps.person_id, + ps.vorname, + ps.nachname, + "lastStatus", + "lastStatusDate", + oe.oe_kurzbz, + oe, + mr.token + UNION + -- Messages sent to a person that belongs to the recipient organisation unit + SELECT mrou.message_id, + mm.relationmessage_id, + mm.subject, + mm.body, + mm.insertamum AS sent, + pr.person_id AS "recipientPersonId", + pr.vorname AS "recipientName", + pr.nachname AS "recipientSurname", + ps.person_id AS "senderPersonId", + ps.vorname AS "senderName", + ps.nachname AS "senderSurname", + (SELECT MAX(status) FROM public.tbl_msg_status WHERE message_id = mrou.message_id AND person_id = mrou.person_id) AS "lastStatus", + (SELECT MAX(insertamum) FROM public.tbl_msg_status WHERE message_id = mrou.message_id AND person_id = mrou.person_id) AS "lastStatusDate", + oe.oe_kurzbz AS "oeId", + COALESCE(sg.bezeichnung, oe.bezeichnung) AS oe, + mrou.token + FROM public.tbl_person p + JOIN public.tbl_benutzer b ON (b.person_id = p.person_id) + JOIN ( + SELECT uid, oe_kurzbz + FROM public.tbl_benutzerfunktion + WHERE (datum_von IS NULL OR datum_von <= NOW()) + AND (datum_bis IS NULL OR datum_bis >= NOW()) + AND funktion_kurzbz IN ? + ) bf ON (bf.uid = b.uid) + JOIN public.tbl_msg_recipient mrou ON (mrou.oe_kurzbz = bf.oe_kurzbz) + JOIN public.tbl_msg_message mm ON (mm.message_id = mrou.message_id) + JOIN public.tbl_person ps ON (ps.person_id = mm.person_id) + JOIN public.tbl_person pr ON (pr.person_id = mrou.person_id) + LEFT JOIN public.tbl_organisationseinheit oe ON (oe.oe_kurzbz = mrou.oe_kurzbz) + LEFT JOIN public.tbl_studiengang sg ON (sg.oe_kurzbz = mrou.oe_kurzbz) + WHERE p.person_id = ? + GROUP BY mrou.message_id, + mm.relationmessage_id, + mm.subject, + mm.body, + mm.insertamum, + pr.person_id, + pr.vorname, + pr.nachname, + ps.person_id, + ps.vorname, + ps.nachname, + "lastStatus", + "lastStatusDate", + oe.oe_kurzbz, + oe, + mrou.token'; + } } + diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index 066e5cff6..b0ee6421c 100644 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -182,7 +182,10 @@
load->view('system/infocenter/messageList.php', $messages); + $this->load->view( + 'system/infocenter/messageList.php', + $messages + ); ?>
diff --git a/application/views/system/infocenter/messageList.php b/application/views/system/infocenter/messageList.php index 6093f4166..0b35105de 100644 --- a/application/views/system/infocenter/messageList.php +++ b/application/views/system/infocenter/messageList.php @@ -15,13 +15,18 @@ $widthColumn = $msgExists === true ? 8 : 12; - - insertamum) ? date_format(date_create($message->insertamum), 'd.m.Y H:i:s') : '' ?> - oebezeichnung) && ($message->oe_kurzbz == OU_SENDER_TEST_REMINDER) ? - $message->oebezeichnung : $message->sevorname.' '.$message->senachname ?> - revorname.' '.$message->renachname ?> + + sent) ? date_format(date_create($message->sent), 'd.m.Y H:i:s') : '' ?> + senderPersonId == $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID) && isset($message->oeId) ? + $message->oe : $message->senderName.' '.$message->senderSurname; + ?> + recipientPersonId == $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID) && isset($message->oeId) ? + $message->oe : $message->recipientName.' '.$message->recipientSurname; + ?> subject ?> - statusamum) ? date_format(date_create($message->statusamum), 'd.m.Y H:i:s') : '' ?> + lastStatusDate) ? date_format(date_create($message->lastStatusDate), 'd.m.Y H:i:s') : '' ?>