FAS page to read messages wrongly displays the sender

This commit is contained in:
Paolo
2023-04-19 15:15:23 +02:00
parent a0b368683e
commit 29c91a1cda
3 changed files with 194 additions and 53 deletions
+18 -1
View File
@@ -1,4 +1,20 @@
<?php
/**
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
class Recipient_model extends DB_Model
{
@@ -335,7 +351,8 @@ class Recipient_model extends DB_Model
*/
private function _getSentMessagesQuery()
{
return 'SELECT mm.message_id,
return '-- Messages sent from the given person
SELECT mm.message_id,
mm.relationmessage_id,
mm.subject,
mm.body,
+3
View File
@@ -279,4 +279,7 @@ define ('DEFAULT_LEHRMODUS','regulaer');
//Echter Dienstvertrag
define ('DEFAULT_ECHTER_DIENSTVERTRAG',[103,110]);
// Person id of the system sender for the messaging system
define('MESSAGING_SYSTEM_PERSON_ID', 92);
?>
+173 -52
View File
@@ -41,43 +41,142 @@ else
die('Parameter person_id is missing');
$db = new basis_db();
$qry = "
SELECT
m.message_id AS message_id,
m.subject AS subject,
m.body AS body,
m.insertamum AS insertamum,
m.relationmessage_id AS relationmessage_id,
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = m.person_id) as sender,
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = r.person_id) as recipient,
m.person_id as sender_id,
r.person_id as recipient_id,
MAX(ss.status) as status,
MAX(ss.insertamum) as statusdatum
FROM public.tbl_msg_message m
JOIN public.tbl_msg_recipient r USING(message_id)
JOIN public.tbl_msg_status ss ON(r.message_id = ss.message_id AND ss.person_id = r.person_id)
WHERE m.person_id = ".$db->db_add_param($person_id, FHC_INTEGER)."
GROUP BY m.message_id, m.subject, m.body, m.insertamum, m.relationmessage_id, sender, recipient, sender_id, recipient_id
UNION ALL
SELECT
m.message_id AS message_id,
m.subject AS subject,
m.body AS body,
m.insertamum AS insertamum,
m.relationmessage_id AS relationmessage_id,
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = m.person_id) as sender,
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = r.person_id) as recipient,
m.person_id as sender_id,
r.person_id as recipient_id,
MAX(ss.status) as status,
MAX(ss.insertamum) as statusdatum
FROM public.tbl_msg_recipient r
JOIN public.tbl_msg_status ss USING(message_id, person_id)
JOIN public.tbl_msg_message m USING(message_id)
WHERE r.person_id = ".$db->db_add_param($person_id, FHC_INTEGER)."
GROUP BY m.message_id, m.subject, m.body, m.insertamum, m.relationmessage_id, sender, recipient, sender_id, recipient_id
ORDER BY insertamum";
$qry = '-- Messages sent from the given person
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 = '.$db->db_add_param($person_id, FHC_INTEGER).'
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
UNION
-- 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 = '.$db->db_add_param($person_id, FHC_INTEGER).'
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 (\'ass\')
) 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 = '.$db->db_add_param($person_id, FHC_INTEGER).'
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
';
// $db->db_add_param($person_id, FHC_INTEGER)
if($db->db_query($qry))
{
@@ -85,34 +184,56 @@ if($db->db_query($qry))
while($row = $db->db_fetch_object())
{
$status = '';
if ($row->status == 0)
if ($row->lastStatus == 0)
{
$status = 'Unread';
}
else if ($row->status == 1)
else if ($row->lastStatus == 1)
{
$status = 'Read';
}
else if ($row->status == 2)
else if ($row->lastStatus == 2)
{
$status = 'Archived';
}
else if ($row->status == 3)
else if ($row->lastStatus == 3)
{
$status = 'Deleted';
}
$i=$oRdf->newObjekt($row->message_id);
$oRdf->obj[$i]->setAttribut('subject',$row->subject,true);
$oRdf->obj[$i]->setAttribut('body',$row->body,true);
$oRdf->obj[$i]->setAttribut('message_id',$row->message_id,true);
$oRdf->obj[$i]->setAttribut('insertamum',$row->insertamum,true);
$oRdf->obj[$i]->setAttribut('status',$status,true);
$oRdf->obj[$i]->setAttribut('statusdatum',$datum_obj->formatDatum($row->statusdatum,'d.m.Y H:i'),true);
$oRdf->obj[$i]->setAttribut('sender',$row->sender,true);
$oRdf->obj[$i]->setAttribut('recipient',$row->recipient,true);
$oRdf->obj[$i]->setAttribut('sender_id',$row->sender_id,true);
$oRdf->obj[$i]->setAttribut('recipient_id',$row->recipient_id,true);
$sender = $recipient = 'System sender'; // default fallback
// If the sender is not the system sender
if ($row->senderPersonId != MESSAGING_SYSTEM_PERSON_ID)
{
$sender = $row->senderName.' '.$row->senderSurname;
}
elseif ($row->oeId != null) // otherwise take the oe
{
$sender = $row->oe;
}
// If the recipient is not the system sender
if ($row->recipientPersonId != MESSAGING_SYSTEM_PERSON_ID)
{
$recipient = $row->recipientName.' '.$row->recipientSurname;
}
elseif ($row->oeId != null) // otherwise take the oe
{
$recipient = $row->oe;
}
$i = $oRdf->newObjekt($row->message_id);
$oRdf->obj[$i]->setAttribut('subject', $row->subject, true);
$oRdf->obj[$i]->setAttribut('body', $row->body, true);
$oRdf->obj[$i]->setAttribut('message_id', $row->message_id, true);
$oRdf->obj[$i]->setAttribut('insertamum', $row->sent, true);
$oRdf->obj[$i]->setAttribut('status', $status, true);
$oRdf->obj[$i]->setAttribut('statusdatum', $datum_obj->formatDatum($row->lastStatusDate, 'd.m.Y H:i'), true);
$oRdf->obj[$i]->setAttribut('sender', $sender, true);
$oRdf->obj[$i]->setAttribut('recipient', $recipient, true);
$oRdf->obj[$i]->setAttribut('sender_id', $row->senderPersonId, true);
$oRdf->obj[$i]->setAttribut('recipient_id', $row->recipientPersonId, true);
if($row->relationmessage_id!='')
$oRdf->addSequence($row->message_id, $row->relationmessage_id);