- 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
This commit is contained in:
Paolo
2023-04-19 13:51:53 +02:00
parent 932f5efb5c
commit a0b368683e
8 changed files with 398 additions and 318 deletions
-2
View File
@@ -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');
@@ -1,6 +1,6 @@
<?php
/**
* Copyright (C) 2022 fhcomplete.org
* Copyright (C) 2023 fhcomplete.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,6 +24,9 @@ use \DB_Model as DB_Model;
class ReihungstestJob extends JOB_Controller
{
// OE used to as sender for the test deadline reminder
const OU_SENDER_TEST_REMINDER = 'infocenter';
/**
* Constructor
*/
@@ -466,12 +469,10 @@ class ReihungstestJob extends JOB_Controller
$mailcontent_data_arr['wegbeschreibung'] = $applicant->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
);
@@ -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");
}
}
+57 -36
View File
@@ -1,6 +1,6 @@
<?php
/**
* Copyright (C) 2022 fhcomplete.org
* Copyright (C) 2023 fhcomplete.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -225,12 +225,23 @@ class Messages_model extends CI_Model
$jsonRecord->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))));
}
}
@@ -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
*/
+175 -95
View File
@@ -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';
}
}
@@ -182,7 +182,10 @@
<div class="panel-body">
<div class="row" id="messagelist">
<?php
$this->load->view('system/infocenter/messageList.php', $messages);
$this->load->view(
'system/infocenter/messageList.php',
$messages
);
?>
</div>
</div>
@@ -15,13 +15,18 @@ $widthColumn = $msgExists === true ? 8 : 12;
</thead>
<tbody>
<?php foreach ($messages as $message): ?>
<tr id="<?php echo $message->message_id.'_'.$message->repersonid ?>" style="cursor: pointer">
<td><?php echo isset($message->insertamum) ? date_format(date_create($message->insertamum), 'd.m.Y H:i:s') : '' ?></td>
<td><?php echo isset($message->oebezeichnung) && ($message->oe_kurzbz == OU_SENDER_TEST_REMINDER) ?
$message->oebezeichnung : $message->sevorname.' '.$message->senachname ?></td>
<td><?php echo $message->revorname.' '.$message->renachname ?></td>
<tr id="<?php echo $message->message_id.'_'.$message->recipientPersonId ?>" style="cursor: pointer">
<td><?php echo isset($message->sent) ? date_format(date_create($message->sent), 'd.m.Y H:i:s') : '' ?></td>
<td><?php
echo $message->senderPersonId == $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID) && isset($message->oeId) ?
$message->oe : $message->senderName.' '.$message->senderSurname;
?></td>
<td><?php
echo $message->recipientPersonId == $this->config->item(MessageLib::CFG_SYSTEM_PERSON_ID) && isset($message->oeId) ?
$message->oe : $message->recipientName.' '.$message->recipientSurname;
?></td>
<td><?php echo $message->subject ?></td>
<td><?php echo isset($message->statusamum) ? date_format(date_create($message->statusamum), 'd.m.Y H:i:s') : '' ?></td>
<td><?php echo isset($message->lastStatusDate) ? date_format(date_create($message->lastStatusDate), 'd.m.Y H:i:s') : '' ?></td>
</tr>
<?php endforeach; ?>
</tbody>