[GDRCD 5.4] - Messaggi stile WA
24/06/2021 11:42:00
haruka ha scritto:
L'id del messaggio penso che lo lascerò perché mi serve per piazzarci sopra il link per eliminare il singolo messaggio ;)
E idem per il quote, devo andare a ripescare come funzionano entrambi.
Ci sta.
Assicurati solo di passare sempre il corretto ID Messaggio.
jan90 ha scritto: ...
Parto dal presupposto che, per amore anche delle possibili future versioni, sarebbe meglio prendersi sempre del tempo per fare il passaggio di versione. Potrebbe richiedere un poco di pazienza, ma è sempre conveniente alla lunga.
Detto questo...
Non credo che sia difficile trovare un adattamento alla 5.4, poichè di per sè si tratta solo ed esclusivamente di riorganizzare i dati. Anche se non hai la stessa divisione in index.inc.php e read.inc.php, è sufficiente mettere nella pagina in cui vengono visualizzati TUTTE le conversazioni la query a Pagina 1 e nella pagina in cui viene visualizzato il singolo messaggio la query che trovi in questa pagina, ossia la 3.
Il resto è solo comprendere la logica e "rigraficare" il necessario.
Kasa.
24/06/2021 16:02:36 e modificato da gdr-online.com il 25/06/2021 09:32:17
Bene, ma non benissimo xD
Ci siamo, ma c'è una cosa che non capisco... funziona il rispondi quotando, perché apre una nuova pagina.
Invece, la risposta veloce e il cancella messaggio, funzionano ma non al primo refresh. Cioè, i tre form (eliminaredest, eliminaremitt, replynew) fanno il loro dovere, ma non al primo refresh della pagina. Al primo refresh sembra non sia successo nulla, invece se poi si riapre la pagina
messages_center_new&op=readnew&personaggio_conversazione=XXX
si vedrà che i post sono stati correttamente eliminati, la risposta veloce correttamente inserita etc.
Che sbaglio? Non ne vengo proprio a capo...
<?php
//Determinazione pagina
if(isset($_REQUEST['offset']) === false) {
$pagebegin = 0;
} else {
$pagebegin = (int) $_REQUEST['offset'] * $PARAMETERS['settings']['messages_per_page'];
}
$pageend = $PARAMETERS['settings']['messages_per_page'];
//Conteggio messaggi totali
$record = gdrcd_query("SELECT COUNT(*) FROM messaggi WHERE destinatario = '".$_SESSION['login']."'");
$totaleresults = $record['COUNT(*)'];
//Elenco messaggi paginato
/** * Bugfix: correzione di un bug che permetteva la visualizzazione di messaggi non inviati all'utente
* semplicemente modificando l'id. Viene quindi aggiunta nella clausola where il controllo sulla proprietà
* del messaggio. Nel caso in cui non venga trovato alcun messaggio verrà mostrato un errore.
* @author Rhllor
*/
//$result=gdrcd_query("SELECT * FROM messaggi WHERE personaggio_conversazione = ".gdrcd_filter('num',$_REQUEST['personaggio_conversazione'])." LIMIT 1", 'result');
$result = gdrcd_query("SELECT mittente, destinatario, testo, letto, spedito, id, destinatario_del, mittente_del
FROM (
(
SELECT mittente, destinatario, testo, letto, spedito, id, destinatario_del, mittente_del
FROM messaggi
WHERE 1
AND destinatario = '".$_SESSION['login']."'
AND mittente = '".$_REQUEST['personaggio_conversazione']."'
AND destinatario_del = 0
ORDER BY spedito ASC
)
UNION ALL
(
SELECT mittente, destinatario, testo, letto, spedito, id, destinatario_del, mittente_del
FROM messaggi
WHERE 1
AND destinatario = '".$_REQUEST['personaggio_conversazione']."'
AND mittente = '".$_SESSION['login']."'
AND mittente_del = 0
ORDER BY spedito ASC
)
) AS conversazione
ORDER BY spedito ASC", 'result');
?>
<h3>Conversazione con: <?php echo $_REQUEST['personaggio_conversazione']; ?> </h3>
<?php
while($row = gdrcd_query($result, 'fetch')) {
if(($row['destinatario'] == $_SESSION['login']) && ($row['letto'] == 0)) {
gdrcd_query("UPDATE messaggi SET letto = 1 WHERE id = ".gdrcd_filter('num', $row['id'])." LIMIT 1");
}
if(gdrcd_filter('get', $_POST['op']) == 'eliminaredest') {
$id_mex = $_POST['id'];
gdrcd_query("UPDATE messaggi SET destinatario_del = 1 WHERE destinatario='".gdrcd_filter('in', $_SESSION['login'])."' AND id IN (".$id_mex.")");
}
if(gdrcd_filter('get', $_POST['op']) == 'eliminaremitt') {
$id_mex = $_POST['id'];
gdrcd_query("UPDATE messaggi SET mittente_del = 1 WHERE mittente='".gdrcd_filter('in', $_SESSION['login'])."' AND id IN (".$id_mex.")");
}
?>
<div class="<?php echo $row['mittente'] == $_SESSION['login'] ? 'destinatario' : 'mittente'; ?>"
<tr>
<td class="elementi_elenco_preview">
<div>
Data: <?php echo $row['spedito']; ?>
</div>
</td>
<td class="elementi_elenco_preview">
<div>
Mittente: <?php echo $row['mittente']; ?>
</div>
</td>
<td class="elementi_elenco_preview">
<div>
<?php echo $row['testo']; ?>
</div>
</td>
</tr>
<div class="read_message_box_forms">
<div class="read_message_box_form">
</div>
<div class="read_message_box_form">
<!-- attach -->
<form action="main.php?page=messages_center_new"
method="post">
<input type="hidden" name="reply_dest" value="<?php echo $row['mittente']; ?>" />
<div style="display:none;"><input type="hidden" name="testo" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['attachment'].$row['testo']); ?>" /></div>
<input type="hidden" name="op" value="attach" />
<input type="image" src="imgs/icons/attach.png" value="submit" alt="<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['attach']); ?>"
title="<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['attach']); ?>" />
</form>
</div>
<?php if ($row['destinatario'] == $_SESSION['login']) { ?>
<form action="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $_REQUEST['personaggio_conversazione'] ?>" method="post">
<div class="form_submit">
<input type="hidden" name="op" value="eliminaredest" />
<input type="hidden" name="id" value="<?php echo $row['id']; ?>" />
<input type="image" src="imgs/icons/erase.png" style="width:20px; height:20px; float:right;" />
</div>
</form>
<?php }?>
<?php if ($row['mittente'] == $_SESSION['login']) { ?>
<form action="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $_REQUEST['personaggio_conversazione'] ?>" method="post">
<div class="form_submit">
<input type="hidden" name="op" value="eliminaremitt" />
<input type="hidden" name="id" value="<?php echo $row['id']; ?>" />
<input type="image" src="imgs/icons/erase.png" style="width:20px; height:20px; float:right;" />
</div>
</form>
<?php }?>
</div>
</div>
<?php
}
?>
<?php
if (gdrcd_filter('get', $_POST['replynew']) == 'singolo') {
$check_dest = explode(',', gdrcd_filter('get', $_POST['destinatario']));
$destinat = $_REQUEST['personaggio_conversazione'];
$result = gdrcd_query("SELECT nome FROM personaggio WHERE nome = '" . $destinat . "'", 'result');
if ((gdrcd_query($result, 'num_rows') > 0) && (empty($destinat) === false)) {
gdrcd_query("INSERT INTO messaggi (mittente, destinatario, spedito, oggetto, testo) VALUES ('" . $_SESSION['login'] . "', '" . gdrcd_capital_letter(gdrcd_filter('in', $destinat)) . "', NOW(),
'".gdrcd_filter('in',$_POST['oggetto'])."', '" . gdrcd_filter('in', $_POST['testo']) . "')");
gdrcd_query("INSERT INTO backmessaggi (mittente, destinatario, spedito, oggetto, testo) VALUES ('" . $_SESSION['login'] . "', '" . gdrcd_capital_letter(gdrcd_filter('in', $destinat)) . "', NOW(), '".gdrcd_filter('in',$_POST['oggetto'])."', '" . gdrcd_filter('in', $_POST['testo']) . "')");
}//if
}
?>
<form class="form_messaggi" action="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $_REQUEST['personaggio_conversazione'] ?>" method="post">
<input type="hidden" name="replynew" value="singolo" />
<div class='form_field' id="ckeditor">
<textarea type="textbox" name="testo"><?php
/** * Fix per evitare le parentesi quadre vuote quando si compone un nuovo messaggio
* @author Blancks
*/
if(isset($_POST['testo'])) {
echo "\n\n\n[".gdrcd_filter('out', trim($_POST['testo']))."]";
}
?></textarea> <script type="text/javascript">CKEDITOR.replace( 'testo' );</script>
</div>
<!-- Submit -->
<input type="hidden" name="op" value="send_message" />
<input type="hidden" name="reply_attach" value="<?php echo gdrcd_filter('get', $_POST['reply_attach']); ?>" />
<div class='form_submit'>
<input type="submit" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['forms']['submit']); ?>" />
</div>
</form>
24/06/2021 19:40:23
haruka ha scritto: ...
L'anomalia è legata ad un errore logico: nel codice che vedo tu prima effettui la selezione dei messaggi e poi applichi le eventuali operazioni (risposta, eliminazione, etc), mentre dovresti prima eseguire tutte le operazioni e poi, subito dopo tutti questi processi di aggiornamento e inserimento record, effettuare la selezione.
Se ci pensi, tu prima vai a chiamare il DB, salvi i record in una variabile e poi dopo effettui gli aggiornamenti a DB delle operazioni. Ma la variabile in cui ci sono i record da stampare rimane ancora con o dati precedenti all'aggiornamento, quindi è inalterata e vedrai sempre i record pre operazione. Poi, al ricarimento della pagina, giustamente, vedi tutto corretto.
Le operazioni vanno sempre eseguite prima, se è possibile, così quando vai a prendere i record da mostrare sarai sicura di avere quelli più recenti.
Kasa.
24/06/2021 20:13:18
Doh, sistemato. Il read è praticamente quasi pronto, voglio solo vedere se riesco a trovare una funzione in javascript per creare una sorta di "load more" del contenuto, perché mi capita di avere conversazioni lunghissime e potrebbe essere carino almeno aumentare l'altezza del div contenitore quando si raggiunge il bottom.
Tornando all'index, mi rimane una sola perplessità.
<td class="elementi_elenco_preview">
<div>
<a href="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $row['personaggio_conversazione'] ?>"><i><b style="color:#1a7aba;">Oggetto messaggio: <?php echo gdrcd_filter('out', substr($row['oggetto'], 0, 100)); ?></b></i><br><?php echo gdrcd_filter('out', substr($row['testo'], 0, 100)); ?>
...
</a>
</div>
</td>
Questa è la mia cella con l'anteprima del messaggio. Ma il testo dell'anteprima è solo quello dei messaggi ricevuti. Ci sarebbe modo di mettere l'anteprima dell'ultimo messaggio della conversazione, indistintamente che sia stata io a mandarlo o l'altro giocatore?
E poi sto riflettendo se è il caso di creare un form per eliminare tutti i messggi di una conversazione, sia inviati che ricevuti.
24/06/2021 20:13:57
kasa ha scritto: [quote]haruka ha scritto:
Kasa.
Dimenticavo, ancora grazie per tutte le dritte.
25/06/2021 09:11:42 e modificato da kasa il 25/06/2021 09:20:41
haruka ha scritto: Il read è praticamente quasi pronto, voglio solo vedere se riesco a trovare una funzione in javascript per creare una sorta di "load more" del contenuto, perché mi capita di avere conversazioni lunghissime e potrebbe essere carino almeno aumentare l'altezza del div contenitore quando si raggiunge il bottom.
Questa funzionalità richiede di soffermarsi sulla tipologia di approccio da applicare:
- Pre-caricare TUTTA la conversazione, bloccare la visualizzazione a X messaggi, nascondendo gli altri ma mettendoli sempre in pagina, e poi con JS caricarne mano a mano ( Qui un esempio: https://www.thatsoftwaredude.com/content/10392/how-to-implement-a-load-more-button-in-javascript ↗);
- Prevedere una chiamata AJAX, sempre tramite JS, che al click del bottone richiama un blocco di X messaggi alla volta, oltre quelli già caricati dalla pagina.
In ogni caso, sarebbe da studiarselo per bene, in base anche alle conoscenze a disposizione. Magari possono esserci anche altri metodi, eh... Ho tirato fuori quelli più semplici.
haruka ha scritto: Questa è la mia cella con l'anteprima del messaggio. Ma il testo dell'anteprima è solo quello dei messaggi ricevuti. Ci sarebbe modo di mettere l'anteprima dell'ultimo messaggio della conversazione, indistintamente che sia stata io a mandarlo o l'altro giocatore?
Sto facendo dei test sulla query che ho postato per l'index ed ottengo sempre l'ultimo messaggio. Vedo se ci possono essere anomalie. Una domanda: la variabile $row['oggetto'] che viene richiamata la ottieni correttamente? È giusto che venga stampata prima di $row['testo'] ?
haruka ha scritto: E poi sto riflettendo se è il caso di creare un form per eliminare tutti i messggi di una conversazione, sia inviati che ricevuti.
Sì, non è una brutta idea. A quel punto, fai una query DELETE che elimina entrambi e la metti in index. Magari riciclando la vecchia funzionalità di eliminazione dei messaggi selezionati.
La query sarà tipo:
UPDATE messaggi
SET mittente_del = IF(mittente = '".gdrcd_filter('in', $_SESSION['login'])."', 1, mittente_del),
destinatario_del = IF(destinatario = '".gdrcd_filter('in', $_SESSION['login'])."', 1, destinatario_del)
WHERE (mittente = '".gdrcd_filter('in', $_SESSION['login'])."' AND destinatario = '".gdrcd_filter('in', $_REQUEST['personaggio_conversazione'])."') OR (destinatario = '".gdrcd_filter('in', $_SESSION['login'])."' AND mittente = '".gdrcd_filter('in', $_REQUEST['personaggio_conversazione'])."')
haruka ha scritto: Dimenticavo, ancora grazie per tutte le dritte.
Figurati!
Kasa.
25/06/2021 12:22:48 e modificato da haruka il 25/06/2021 12:32:44
kasa ha scritto: [quote]haruka ha scritto: Il read è praticamente quasi pronto, voglio solo vedere se riesco a trovare una funzione in javascript per creare una sorta di "load more" del contenuto, perché mi capita di avere conversazioni lunghissime e potrebbe essere carino almeno aumentare l'altezza del div contenitore quando si raggiunge il bottom.
Questa funzionalità richiede di soffermarsi sulla tipologia di approccio da applicare:
- Pre-caricare TUTTA la conversazione, bloccare la visualizzazione a X messaggi, nascondendo gli altri ma mettendoli sempre in pagina, e poi con JS caricarne mano a mano ( Qui un esempio: https://www.thatsoftwaredude.com/content/10392/how-to-implement-a-load-more-button-in-javascript ↗);
- Prevedere una chiamata AJAX, sempre tramite JS, che al click del bottone richiama un blocco di X messaggi alla volta, oltre quelli già caricati dalla pagina.
In ogni caso, sarebbe da studiarselo per bene, in base anche alle conoscenze a disposizione. Magari possono esserci anche altri metodi, eh... Ho tirato fuori quelli più semplici.
Questo l'ho risolto con javascript ;) Dopo posto il codice aggiornato della pagina read.
haruka ha scritto: Questa è la mia cella con l'anteprima del messaggio. Ma il testo dell'anteprima è solo quello dei messaggi ricevuti. Ci sarebbe modo di mettere l'anteprima dell'ultimo messaggio della conversazione, indistintamente che sia stata io a mandarlo o l'altro giocatore?
Sto facendo dei test sulla query che ho postato per l'index ed ottengo sempre l'ultimo messaggio. Vedo se ci possono essere anomalie. Una domanda: la variabile $row['oggetto'] che viene richiamata la ottieni correttamente? È giusto che venga stampata prima di $row['testo'] ?
Sì, l'ho aggiunto alla query perché abbiamo l'oggetto dei messaggi ma non è quello il problema. Il fatto è che l'ultimo messaggio che viene caricato è sempre quello della "controparte", quindi se io rispondo, in index vedo che la conversazione viene portata correttamente in cima, ma l'anteprima non è il mio ultimo messaggio, bensì quello - spesso anche vecchio - che ho ricevuto.
Esempio stupido, oggi è entrato un player che era via da settimane, gli ho scritto per salutarlo e chiedergli come stesse, la conversazione è andata su, ma in anteprima ho la sua ultima risposta di settimane fa.

La data è aggiornata al mio ultimo messaggio di stamattina, è l'anteprima che resta ferma all'ultimo messaggio del mittente ;)
haruka ha scritto: E poi sto riflettendo se è il caso di creare un form per eliminare tutti i messggi di una conversazione, sia inviati che ricevuti.
Sì, non è una brutta idea. A quel punto, fai una query DELETE che elimina entrambi e la metti in index. Magari riciclando la vecchia funzionalità di eliminazione dei messaggi selezionati.
La query sarà tipo:
UPDATE messaggi
SET mittente_del = IF(mittente = '".gdrcd_filter('in', $_SESSION['login'])."', 1, mittente_del),
destinatario_del = IF(destinatario = '".gdrcd_filter('in', $_SESSION['login'])."', 1, destinatario_del)
WHERE (mittente = '".gdrcd_filter('in', $_SESSION['login'])."' AND destinatario = '".gdrcd_filter('in', $_REQUEST['personaggio_conversazione'])."') OR (destinatario = '".gdrcd_filter('in', $_SESSION['login'])."' AND mittente = '".gdrcd_filter('in', $_REQUEST['personaggio_conversazione'])."')
Ok, questo è il next step. Il read mi sembra praticamente a posto. A voler fare i pignoli si potrebbe riflettere sulle spunte del "letto" come su whatsapp, ma mi sembra una piccolezza per ora ;)
Figurati!
Kasa.
Non è mica scontato, stai facendo moltissimo! :)
25/06/2021 12:27:04
Il readnew aggiornato, per chi sta seguendo passo passo.
Occhio che il mio editor in tutta la land è rimpiazzato con CKEDITOR. Quella parte di codice va adattata ( basta togliere lo script che richiama l'editor visuale ).
<style type="text/css">
.list {
list-style: none;
padding: 0;
margin: 0;
}
.list li {
position: relative;
margin-bottom: 10px;
}
.mittente {width: 80%; float:left; padding:20px; margin: 10px;}
.destinatario {width: 80%; float:right; padding:20px; margin:10px;}
</style>
<h3>Conversazione con: <?php echo $_REQUEST['personaggio_conversazione']; ?> </h3>
<form class="form_messaggi" action="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $_REQUEST['personaggio_conversazione'] ?>" method="post">
<input type="hidden" name="replynew" value="singolo" />
<div class='form_field' id="ckeditor">
<textarea type="textbox" name="testo"><?php
/** * Fix per evitare le parentesi quadre vuote quando si compone un nuovo messaggio
* @author Blancks
*/
?></textarea>
<script type="text/javascript"> CKEDITOR.replace( 'testo' );</script>
</div>
<!-- Submit -->
<input type="hidden" name="op" value="send_message" />
<div class='form_submit'>
<input type="submit" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['forms']['submit']); ?>" />
</div>
</form>
<?php
//Determinazione pagina
if(isset($_REQUEST['offset']) === false) {
$pagebegin = 0;
} else {
$pagebegin = (int) $_REQUEST['offset'] * $PARAMETERS['settings']['messages_per_page_new'];
}
$pageend = $PARAMETERS['settings']['messages_per_page_new'];
//Conteggio messaggi totali
$record = gdrcd_query("SELECT COUNT(*) FROM messaggi WHERE destinatario = '".$_SESSION['login']."'");
$totaleresults = $record['COUNT(*)'];
//Elenco messaggi paginato
/** * Bugfix: correzione di un bug che permetteva la visualizzazione di messaggi non inviati all'utente
* semplicemente modificando l'id. Viene quindi aggiunta nella clausola where il controllo sulla proprietà
* del messaggio. Nel caso in cui non venga trovato alcun messaggio verrà mostrato un errore.
* @author Rhllor
*/
//$result=gdrcd_query("SELECT * FROM messaggi WHERE personaggio_conversazione = ".gdrcd_filter('num',$_REQUEST['personaggio_conversazione'])." LIMIT 1", 'result');
if (gdrcd_filter('get', $_POST['replynew']) == 'singolo') {
$check_dest = explode(',', gdrcd_filter('get', $_POST['destinatario']));
$destinat = $_REQUEST['personaggio_conversazione'];
$result = gdrcd_query("SELECT nome FROM personaggio WHERE nome = '" . $destinat . "'", 'result');
if ((gdrcd_query($result, 'num_rows') > 0) && (empty($destinat) === false)) {
gdrcd_query("INSERT INTO messaggi (mittente, destinatario, spedito, oggetto, testo) VALUES ('" . $_SESSION['login'] . "', '" . gdrcd_capital_letter(gdrcd_filter('in', $destinat)) . "', NOW(),
'".gdrcd_filter('in',$_POST['oggetto'])."', '" . gdrcd_filter('in', $_POST['testo']) . "')");
gdrcd_query("INSERT INTO backmessaggi (mittente, destinatario, spedito, oggetto, testo) VALUES ('" . $_SESSION['login'] . "', '" . gdrcd_capital_letter(gdrcd_filter('in', $destinat)) . "', NOW(), '".gdrcd_filter('in',$_POST['oggetto'])."', '" . gdrcd_filter('in', $_POST['testo']) . "')");
}//if
}
if(gdrcd_filter('get', $_POST['op']) == 'eliminaredest') {
$id_mex = $_POST['id'];
gdrcd_query("UPDATE messaggi SET destinatario_del = 1 WHERE destinatario='".gdrcd_filter('in', $_SESSION['login'])."' AND id IN (".$id_mex.")");
}
if(gdrcd_filter('get', $_POST['op']) == 'eliminaremitt') {
$id_mex = $_POST['id'];
gdrcd_query("UPDATE messaggi SET mittente_del = 1 WHERE mittente='".gdrcd_filter('in', $_SESSION['login'])."' AND id IN (".$id_mex.")");
}
$result = gdrcd_query("SELECT mittente, destinatario, testo, letto, spedito, id, destinatario_del, mittente_del
FROM (
(
SELECT mittente, destinatario, testo, letto, spedito, id, destinatario_del, mittente_del
FROM messaggi
WHERE 1
AND destinatario = '".$_SESSION['login']."'
AND mittente = '".$_REQUEST['personaggio_conversazione']."'
AND destinatario_del = 0
ORDER BY spedito DESC
)
UNION ALL
(
SELECT mittente, destinatario, testo, letto, spedito, id, destinatario_del, mittente_del
FROM messaggi
WHERE 1
AND destinatario = '".$_REQUEST['personaggio_conversazione']."'
AND mittente = '".$_SESSION['login']."'
AND mittente_del = 0
ORDER BY spedito DESC
)
) AS conversazione
ORDER BY spedito DESC
", 'result');
?>
<?php
while($row = gdrcd_query($result, 'fetch')) {
if(($row['destinatario'] == $_SESSION['login']) && ($row['letto'] == 0)) {
gdrcd_query("UPDATE messaggi SET letto = 1 WHERE id = ".gdrcd_filter('num', $row['id'])." LIMIT 1");
}
?>
<div>
<ul class="list">
<li class="<?php echo $row['mittente'] == $_SESSION['login'] ? 'destinatario' : 'mittente'; ?>
<tr>
<td class="elementi_elenco_preview">
<div>
Data: <?php echo $row['spedito']; ?>
</div>
</td>
<td class="elementi_elenco_preview">
<div>
Mittente: <?php echo $row['mittente']; ?>
</div>
</td>
<td class="elementi_elenco_preview">
<div>
<?php echo $row['testo']; ?>
</div>
</td>
</tr>
<div class="read_message_box_form">
<!-- attach -->
<form action="main.php?page=messages_center_new"
method="post">
<input type="hidden" name="reply_dest" value="<?php echo $row['mittente']; ?>" />
<div style="display:none;"><input type="hidden" name="testo" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['attachment'].$row['testo']); ?>" /></div>
<input type="hidden" name="op" value="attach" />
<input type="image" src="imgs/icons/attach.png" value="submit" alt="<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['attach']); ?>"
title="<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['attach']); ?>" />
</form>
</div>
<?php if ($row['destinatario'] == $_SESSION['login']) { ?>
<form action="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $_REQUEST['personaggio_conversazione'] ?>" method="post">
<div class="form_submit">
<input type="hidden" name="op" value="eliminaredest" />
<input type="hidden" name="id" value="<?php echo $row['id']; ?>" />
<input type="image" src="imgs/icons/erase.png" style="width:20px; height:20px; float:right;" />
</div>
</form>
<?php }?>
<?php if ($row['mittente'] == $_SESSION['login']) { ?>
<form action="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $_REQUEST['personaggio_conversazione'] ?>" method="post">
<div class="form_submit">
<input type="hidden" name="op" value="eliminaremitt" />
<input type="hidden" name="id" value="<?php echo $row['id']; ?>" />
<input type="image" src="imgs/icons/erase.png" style="width:20px; height:20px; float:right;" />
</div>
</form>
<?php }?>
</li>
</ul>
</div>
<?php
}
?>
<div style="clear:both;"> </div>
<input value="Carica altri" type="submit" id="next"></input>
<script type="text/javascript">
$(document).ready(function(){
var list = $(".list li");
var numToShow = 3;
var button = $("#next");
var numInList = list.length;
list.hide();
if (numInList > numToShow) {
button.show();
}
list.slice(0, numToShow).show();
button.click(function(){
var showing = list.filter(':visible').length;
list.slice(showing - 1, showing + numToShow).fadeIn();
var nowShowing = list.filter(':visible').length;
if (nowShowing >= numInList) {
button.hide();
}
});
});
</script>
25/06/2021 12:40:22
haruka ha scritto:
Sì, l'ho aggiunto alla query perché abbiamo l'oggetto dei messaggi ma non è quello il problema. Il fatto è che l'ultimo messaggio che viene caricato è sempre quello della "controparte", quindi se io rispondo, in index vedo che la conversazione viene portata correttamente in cima, ma l'anteprima non è il mio ultimo messaggio, bensì quello - spesso anche vecchio - che ho ricevuto.
Strano.
Posso chiederti di postare qui la query che fai per ottenere la lista delle varie conversazioni? Magari mi sta sfuggendo qualcosa o c'è qualche correzione specifica da fare.
haruka ha scritto:
Ok, questo è il next step. Il read mi sembra praticamente a posto. A voler fare i pignoli si potrebbe riflettere sulle spunte del "letto" come su whatsapp, ma mi sembra una piccolezza per ora ;)
Si, sono entrambe delle aggiunte utili.
Kasa.
25/06/2021 12:43:22 e modificato da haruka il 25/06/2021 12:44:03
kasa ha scritto:
Strano.
Posso chiederti di postare qui la query che fai per ottenere la lista delle varie conversazioni? Magari mi sta sfuggendo qualcosa o c'è qualche correzione specifica da fare.
Sì certo, tanto poi finisce tutto nel pacchetto ;)
Ti posto tutta l'indexnew
<?php
//Determinazione pagina
if(isset($_REQUEST['offset']) === false) {
$pagebegin = 0;
} else {
$pagebegin = (int) $_REQUEST['offset'] * $PARAMETERS['settings']['messages_per_page'];
}
$pageend = $PARAMETERS['settings']['messages_per_page'];
//Conteggio messaggi totali
$record = gdrcd_query("SELECT COUNT(*) FROM messaggi WHERE destinatario = '".$_SESSION['login']."'");
$totaleresults = $record['COUNT(*)'];
//Elenco messaggi paginato
$result = gdrcd_query("SELECT personaggio_conversazione, testo, letto, oggetto, MAX(spedito) as spedito
FROM (
(
SELECT mittente as personaggio_conversazione, testo, letto, oggetto, spedito
FROM messaggi
WHERE 1
AND destinatario = '".$_SESSION['login']."'
AND destinatario_del = 0
AND spedito = (SELECT MAX(mcheck.spedito) from messaggi as mcheck WHERE mcheck.destinatario = messaggi.destinatario AND mcheck.mittente = messaggi.mittente )
GROUP BY mittente
ORDER BY spedito DESC
)
UNION ALL
(
SELECT destinatario as personaggio_conversazione, testo, letto, oggetto, spedito
FROM messaggi
WHERE 1
AND mittente = '".$_SESSION['login']."'
AND mittente_del = 0
AND spedito = (SELECT MAX(mcheck.spedito) from messaggi as mcheck WHERE mcheck.destinatario = messaggi.destinatario AND mcheck.mittente = messaggi.mittente )
GROUP BY destinatario
ORDER BY spedito DESC
)
) AS conversazioni
GROUP BY personaggio_conversazione
ORDER BY spedito DESC
LIMIT ".$pagebegin.", ".$pageend."", 'result');
$numresults = gdrcd_query($result, 'num_rows');
?>
<div class="elenco_record_gioco">
<form action="main.php?page=messages_center_new&offset=0&op=search" method="post">
<input type="text" name="query" placeholder="Chi ti ha inviato il messaggio?" style="width:200px;"/>
<input type="text" name="query1" placeholder="A chi hai inviato il messaggio?" style="width:200px;"/>
<input type="text" name="query2" placeholder="Restringi ricerca con testo" style="width:200px;"/>
<input type="submit" value="Cerca" />
</form>
<!-- link scrivi messaggio -->
<div class="link_back">
<a href="main.php?page=messages_center_new&op=create">
<?php echo $MESSAGE['interface']['messages']['new']; ?>
</a>
</div>
<br><br>
<!-- link scrivi messaggio -->
<?php
if($numresults > 0) { ?>
<table class="tabellamessaggi">
<tr>
<td class="checkmessaggi" style="background:none;">
<!-- Checkbox -->
</td>
<td class="checkmessaggi" style="background:none;">
<!-- Checkbox -->
</td>
<td class="elementi_elenco_data" style="width: 18%!important;">
<span class="titoli_elenco" style="font-weight:bold;">
Ultimo messaggio del:
</span>
</td>
<td class="elementi_elenco_mittente" style="width: 18%!important;">
<span class="titoli_elenco" style="font-weight:bold;">
Conversazione con:
</span>
</td>
<td class="elementi_elenco_preview">
<span class="titoli_elenco" style="font-weight:bold;">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['preview']); ?>
</span>
</td>
</tr>
<?php
while($row = gdrcd_query($result, 'fetch')) {
?>
<tr>
<td class="checkmessaggi">
<input type="checkbox" class="message_check" value="<?php echo (int) $row['id'] ?>" />
</td>
<td class="checkmessaggi">
<div class="elementi_elenco_checkmessaggi">
<?php
if($row['letto'] == 0) { ?>
<img src="imgs/icons/mail_new.png" class="colonna_elengo_messaggi_icon">
<?php
} else { ?>
<img src="imgs/icons/mail_read.png" class="colonna_elengo_messaggi_icon">
<?php
} ?>
</div>
</td>
<td class="elementi_elenco_data">
<div>
<?php
$quando = explode(" ", $row['spedito']);
echo gdrcd_format_date($quando[0]).'<br/>'.gdrcd_filter('out', $MESSAGE['interface']['messages']['time']).' '.gdrcd_format_time($quando[1]);
?>
</div>
</td>
<td class="elementi_elenco_mittente">
<div>
<?php
echo '<a href="main.php?page=scheda&pg='.$row['personaggio_conversazione'].'">'.$row['personaggio_conversazione'].'</a>';
?>
</div>
</td>
<td class="elementi_elenco_preview">
<div>
<a href="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $row['personaggio_conversazione'] ?>"><i><b style="color:#1a7aba;">Oggetto messaggio: <?php echo gdrcd_filter('out', substr($row['oggetto'], 0, 100)); ?></b></i><br><?php echo gdrcd_filter('out', substr($row['testo'], 0, 100)); ?>
...
</a>
</div>
</td>
<td style="display:none;">
<?php
if($_GET['op'] != 'inviati') { ?>
<div class="controlli_elenco" style="display:none;">
<div class="controllo_elenco">
<!-- reply -->
<form action="main.php?page=messages_center_new" method="post">
<input type="hidden" name="reply_dest" value="<?php echo $row['mittente']; ?>" />
<input type="hidden" name="genitore" value="<?php echo $row['id']; ?>" />
<input type="hidden" name="op" value="reply" />
<input type="submit" value="Rispondi" />
</form>
</div>
</div>
<?php
} else { ?>
<div class="controlli_elenco">
<div class="controllo_elenco">
<!-- reply -->
<form action="main.php?page=messages_center_new" method="post">
<input type="hidden" name="reply_dest" value="<?php echo $row['destinatario']; ?>" />
<input type="hidden" name="genitore" value="<?php echo $row['id']; ?>" />
<input type="hidden" name="op" value="reply" />
<input type="submit" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['reply']); ?>" />
</form>
</div>
</div>
<?php
} ?>
</td>
</tr>
<?php
$_SESSION['last_istant_message'] = $row['id'];
}//while
gdrcd_query($result, 'free');
;
?>
</table>
<?php
echo '';
} else {
if($totaleresults > $PARAMETERS['settings']['messages_limit']) {
echo '<div class="warning">'.gdrcd_filter('out', $MESSAGE['interface']['messages']['please_erase']).'</div>';
}
echo '<div class="warning">'.gdrcd_filter('out', $MESSAGE['interface']['messages']['no_message']).'</div>';
}
?>
<div class="pager">
<?php if (false !== strpos($_SERVER['REQUEST_URI'], '/main.php?page=messages_center_new&op=inviati')) {
if($totaleresults > $PARAMETERS['settings']['messages_per_page']) {
echo gdrcd_filter('out', $MESSAGE['interface']['pager']['pages_name']);
for($i = 0; $i <= floor($totaleresults / $PARAMETERS['settings']['messages_per_page']); $i++) {
if($i != $_REQUEST['offset']) { ?>
<a href="main.php?page=messages_center_new&op=inviati&offset=<?php echo $i; ?>"><?php echo $i + 1; ?></a>
<?php } else {
echo ' '.($i + 1).' ';
}
}
} }
else {
if($totaleresults > $PARAMETERS['settings']['messages_per_page']) {
echo gdrcd_filter('out', $MESSAGE['interface']['pager']['pages_name']);
for($i = 0; $i <= floor($totaleresults / $PARAMETERS['settings']['messages_per_page']); $i++) {
if($i != $_REQUEST['offset']) { ?>
<a href="main.php?page=messages_center_new&offset=<?php echo $i; ?>"><?php echo $i + 1; ?></a>
<?php } else {
echo ' '.($i + 1).' ';
}
}
}
}
?>
</div>
</div>
Discussione seguita da
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Hero Wars ↗
Project Entropy ↗
World of the Sea Battle ↗
Neverness to Everness ↗
The Coven ↗
War Thunder ↗
World of Warship ↗