[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, DIo sono ANella lista $partecipanti io vedrò dunque B, C, DSe sono B, vedrò A, C, DSe 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 memberListFROM msggrp msggrpLEFT JOIN msggrpuser ON msggrp.idgroup = msggrpuser.idgroup and msggrpuser.dtstart<=NOW() and msggrpuser.dtend > NOW()LEFT JOIN msg msg on msggrp.idgroup = msg.idgroupWHERE ".$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!