[Messaggi 3.0] Lista partecipanti
[Messaggi 3.0] Lista partecipanti postato il 24/05/2022 12:02:42 nel forum programmazione, open source e hosting e modificato da crystaltokyo il 24/05/2022 12:03:20
Ciao ragazzi,
Intanto un ringrazio sentito a SideReal e a tutti coloro che hanno lavorato al pacchetto Messaggi 3.0.
Proprio su questo pacchetto avrei una domanda di carattere tecnico.
Nella pagina msg_list, alla riga 44, c'è la query di selezionamento:
if($flGESTCUSTOM) $whereFilter = "msggrpuser.tpuser ='CUSTOM'";
else $whereFilter = "msggrpuser.nome ='".gdrcd_filter('in', $_SESSION['login'])."' AND msg.dtsend>msggrpuser.dtdel AND msggrp.tpgroup='".$TPGROUP."' ";
//Query
$query = "SELECT msggrpuser.dtlastread, msggrp.dsgroup, msggrp.flreadonly, msggrp.idgroup as idgroup, max(msg.idmsg) as maxidmsg, max(msg.dtsend) as maxdtsend, msggrp.tpgroup, msggrp.ctgroup, (SELECT GROUP_CONCAT(DISTINCT nome ORDER BY FIELD(tpuser, 'CUSTOM','USER', 'SYSTEM', 'DELETED') SEPARATOR ', ') as memberList FROM msggrpuser WHERE msggrpuser.idgroup=msggrp.idgroup and msggrpuser.dtstart<=NOW() and msggrpuser.dtend >= NOW()) as memberList
FROM msggrp msggrp
LEFT JOIN msggrpuser ON msggrp.idgroup = msggrpuser.idgroup and msggrpuser.dtstart<=NOW() and msggrpuser.dtend > NOW()
LEFT JOIN msg msg on msggrp.idgroup = msg.idgroup
WHERE ".$whereFilter."
group by msggrp.idgroup,msggrp.dsgroup order by maxdtsend desc";
che si aggancia poi alla riga 91 per estrarre i partecipanti del gruppo/messaggio
// dati del gruppo
$idgroup = gdrcd_filter('num', $row['idgroup']);
$tpgroup = gdrcd_filter('in', $row['tpgroup']);
$ctgroup = gdrcd_filter('in', $row['ctgroup']);
list($data_spedito, $ora_spedito) = explode(' ', $row['maxdtsend']); // data-ora ultimo messaggio
// partecipanti
if($ctgroup == 'GLOBAL') $partecipanti = 'Tutti';
else if($ctgroup == 'ONLINE') $partecipanti = 'Tutti (online)';
else if($ctgroup == 'SYSTEM') $partecipanti = $_SESSION['login'];
else $partecipanti = gdrcd_filter('in', $row['memberList']);
$partecipanti = strlen($partecipanti)>33 ? substr($partecipanti,0,30).'…' : $partecipanti;
// descrizione gruppo
$dsgroup = gdrcd_filter('out', $row['dsgroup']);
$dsgroup = strlen($dsgroup)>28 ? substr($dsgroup,0,25).'…' : $dsgroup;
per poi stampare i nomi dei partecipanti nella riga 135
<div class="elementi_elenco" title="<?php echo $partecipanti; ?>">
<br><?php echo $partecipanti; ?>
</div>
_____________________________________
Detto questo, la mia domanda è la seguente: come posso non stampare il nome del pg loggato nella lista $partecipanti?
Esempio: creo un gruppo con A, B, C, D
Io sono A
Nella lista $partecipanti io vedrò dunque B, C, D
Se sono B, vedrò A, C, D
Se sono C, vedrò A, B, D
Pagine → 1
24/05/2022 12:12:18 e modificato da kasa il 24/05/2022 12:38:15
È sufficiente inserire nella subquery che definisce memberList un filtro che esclude dai nomi l'Utente di sessione.
Una cosa del genere, per intenderci:
if($flGESTCUSTOM) $whereFilter = "msggrpuser.tpuser ='CUSTOM'";
else $whereFilter = "msggrpuser.nome ='".gdrcd_filter('in', $_SESSION['login'])."' AND msg.dtsend>msggrpuser.dtdel AND msggrp.tpgroup='".$TPGROUP."' ";
//Query
$query = "SELECT msggrpuser.dtlastread, msggrp.dsgroup, msggrp.flreadonly, msggrp.idgroup as idgroup, max(msg.idmsg) as maxidmsg, max(msg.dtsend) as maxdtsend, msggrp.tpgroup, msggrp.ctgroup,
(
SELECT GROUP_CONCAT(DISTINCT nome ORDER BY FIELD(tpuser, 'CUSTOM','USER', 'SYSTEM', 'DELETED') SEPARATOR ', ') as memberList
FROM msggrpuser
WHERE msggrpuser.idgroup=msggrp.idgroup
and msggrpuser.dtstart<=NOW()
and msggrpuser.dtend >= NOW()
and msggrpuser.nome != '".gdrcd_filter('in', $_SESSION['login'])."'
) as memberList
FROM msggrp msggrp
LEFT JOIN msggrpuser ON msggrp.idgroup = msggrpuser.idgroup and msggrpuser.dtstart<=NOW() and msggrpuser.dtend > NOW()
LEFT JOIN msg msg on msggrp.idgroup = msg.idgroup
WHERE ".$whereFilter."
group by msggrp.idgroup,msggrp.dsgroup order by maxdtsend desc";
Andrebbe verificato il suo funzionamento, ho aggiunto il filtro where sulla base di quello che hai messo qui. Nel caso, non esitare a farmi sapere!
Kasa.
24/05/2022 12:34:44 e modificato da crystaltokyo il 24/05/2022 12:35:20
kasa ha scritto:
Assolutamente perfetto, grazie mille.
Avevo fatto la stessa cosa, ma c'era un piccolo errore di sintassi che mi dava errore, e che è presente anche nel tuo (i due apici maledetti).
A chi servisse, basta seguire il consiglio di kasa e scrivere:
and msggrpuser.nome != '".gdrcd_filter('in', $_SESSION['login'])."'
24/05/2022 12:36:13 e modificato da kasa il 24/05/2022 12:37:13
Perfetto!
Aggiorno anche il code sopra per "aiutare" chi copia brutalmente senza leggere l'intera conversazione (stackoverflow docet!)
Grazie per il contributo!
Kasa.
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Sea of Conquest ↗
RAID Shadow Legends ↗
Neverness to Everness ↗
Seconda Era ↗