Modificare il chat save per selezionare luogo e ora
Modificare il chat save per selezionare luogo e ora postato il 07/09/2021 20:27:09 nel forum programmazione, open source e hosting
Come da oggetto. Vorrei modificare il chat_save di gdrcd, per permettere un passaggio antecedente in cui vado a selezionare luogo, data e ora da salvare ed estrarre, così, la chat.
Come approccereste la cosa, lato sviluppo?
Pagine → 1 2
07/09/2021 22:48:22
domanda che facico perchè potrebbe cambiare l'approcico.
la cosa ti serve per permettere di salvare delle giocate per il più facile ritrovamento delle stesse da parte dello staff
o ti serve che chiunque possa farlo?
07/09/2021 23:27:57
Onestamente? Penso che andrebbe bene anche permettere ai giocatori di salvarle, non mi sembra un grosso problema, ovviamente nascondendo i sussurri che non li riguardano.
Alla brutta penso che poi si possa piazzare in cima al file un check dei permessi, se si vuole limitare la cosa solo a moderator e superuser.
08/09/2021 15:24:33
Senza andare a complicare troppo i file dedicati al salvataggio della chat, credo che la soluzione migliore sia quella di andare a modificare il file chat_save.proc.php inserendo un <form> con la selezione dei filtri desiderati, per esempio il periodo e il luogo. Sul filtro del luogo imposterei una obbligatorietà, giusto per evitare problemi di sovraccaricamento di dati da estrarre. Ti direi di metterlo anche sul periodo, ma puoi risolvere questo inghippo mantenendo, in caso di nessuna scelta di periodo, il precedente filtro delle ultime 4 ore.
Al momento del caricamento della pagina, compaiono solo i filtri.
Una volta lanciato il submit, quindi il pulsante che invia i filtri ed esegue la ricerca, si ri-utilizza l'attuale sorgente predisposto per il salvataggio e recupero della chat con l'aggiunta dei filtri.
Il Link compare sotto ai filtri, così ti puoi permettere di effettuare più di una ricerca.
Gli eventuali permessi, li metti direttamente sul pulsante Salva Chat tra gli input della chat, non sulla pagina del salvataggio, giusto per evitare di aprire un popup inutile; a meno che non ti interessa metterei dei privilegi sui filtri, in quel caso è altra storia.
Ecco, io agirei così.
Kasa.
08/09/2021 17:18:22
Ci sto lavorando, grazie Kaza, sempre prezioso :)
08/09/2021 18:03:21 e modificato da haruka il 08/09/2021 18:04:06
Ci sono riuscita, funziona, ma c'è qualcosa che non mi convince al 100 % :D
Allora... la prima parte del codice di chat_save
<?php
#################################################################################
# ##
# Save Chat HTML 1.3 - Author eLDiabolo ##
# ##
# e-mail: http://www.gdr-online.com/email.asp?email=eldiabolo ##
# ##
##################################################################################
#################################################################################
session_start();
/* Includo i file necessari */
include('includes/constant_values.inc.php');
include('config.inc.php');
include('vocabulary/' . $PARAMETERS['languages']['set'] . '.vocabulary.php');
include('includes/functions.inc.php');
/* Eseguo la connessione al database */
$handleDBConnection = gdrcd_connect();
$typeOrder = ($PARAMETERS['mode']['chat_from_bottom'] == 'ON') ? 'DESC' : 'ASC';
/*Query per caricamento dati dalla chat corrente, carica le azioni degli ultimi 240 min - 4 ore !! NON SALVA LE CHAT PRIVATE !!*/
if ($PARAMETERS['mode']['chatsavepvt'] == 'ON')
{
$query = gdrcd_query(" SELECT chat.id, chat.imgs, chat.mittente, chat.destinatario, chat.tipo, chat.ora, chat.testo, personaggio.url_img_chat, mappa.ora_prenotazione, mappa.privata
FROM chat
INNER JOIN mappa ON mappa.id = chat.stanza
LEFT JOIN personaggio ON personaggio.nome = chat.mittente
WHERE stanza = " . $_SESSION['luogo'] . " AND DATE_SUB(NOW(), INTERVAL 240 MINUTE) < ora ORDER BY id " . $typeOrder,
'result');
}
è diventata
<?php
#################################################################################
# ##
# Save Chat HTML 1.3 - Author eLDiabolo ##
# ##
# e-mail: http://www.gdr-online.com/email.asp?email=eldiabolo ##
# ##
##################################################################################
#################################################################################
session_start();
/* Includo i file necessari */
include ('includes/constant_values.inc.php');
include ('config.inc.php');
include ('vocabulary/' . $PARAMETERS['languages']['set'] . '.vocabulary.php');
include ('includes/functions.inc.php');
/* Eseguo la connessione al database */
$handleDBConnection = gdrcd_connect();
$typeOrder = ($PARAMETERS['mode']['chat_from_bottom'] == 'ON') ? 'DESC' : 'ASC';
/*Query per caricamento dati dalla chat corrente, carica le azioni degli ultimi 1440 min - 24 ore !! NON SALVA LE CHAT PRIVATE !!*/
?>
Usa il form seguente per selezionare la data e l'ora della chat da salvare <br><br>
<form action="chat_save_gestori.proc.php"
method="post">
<?php
$result = gdrcd_query("SELECT nome, id FROM mappa WHERE chat=1 ORDER BY nome", 'result'); ?>
<div class='form_label'>
<?php echo gdrcd_filter('out',
$MESSAGE['interface']['administration']['log']['chat']['begin']); ?>
</div>
<div class='form_field'>
<!-- Giorno -->
<select name="day_b" class="day">
<?php for ($i = 1; $i <= 31; $i++)
{ ?>
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
<?php }//for
?>
</select>
<!-- Mese -->
<select name="month_b" class="month">
<?php for ($i = 1; $i <= 12; $i++)
{ ?>
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
<?php }//for
?>
</select>
<!-- Anno -->
<select name="year_b" class="year">
<?php for ($i = 2019; $i <= strftime('%Y') + 20; $i++)
{ ?>
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
<?php }//for
?>
</select> -
<!-- Ora -->
<select name="hour_b" class="month">
<?php for ($i = 0; $i <= 23; $i++)
{ ?>
<option value="<?php echo $i; ?>"><?php echo sprintf('%02s', $i); ?></option>
<?php }//for
?>
</select>:
<!-- Minuto -->
<select name="minut_b" class="month">
<?php for ($i = 0; $i <= 60; $i += 5)
{ ?>
<option value="<?php echo $i; ?>"><?php echo sprintf('%02s', $i); ?></option>
<?php }//for
?>
</select>
</div>
<div class='form_label'>
<?php echo gdrcd_filter('out',
$MESSAGE['interface']['administration']['log']['chat']['end']); ?>
</div>
<div class='form_field'>
<!-- Giorno -->
<select name="day_e" class="day">
<?php for ($i = 1; $i <= 31; $i++)
{ ?>
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
<?php }//for
?>
</select>
<!-- Mese -->
<select name="month_e" class="month">
<?php for ($i = 1; $i <= 12; $i++)
{ ?>
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
<?php }//for
?>
</select>
<!-- Anno -->
<select name="year_e" class="year">
<?php for ($i = 2021; $i <= strftime('%Y') + 20; $i++)
{ ?>
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
<?php }//for
?>
</select> -
<!-- Ora -->
<select name="hour_e" class="month">
<?php for ($i = 0; $i <= 23; $i++)
{ ?>
<option value="<?php echo $i; ?>"><?php echo sprintf('%02s', $i); ?></option>
<?php }//for
?>
</select>:
<!-- Minuto -->
<select name="minut_e" class="month">
<?php for ($i = 0; $i <= 60; $i += 5)
{ ?>
<option value="<?php echo $i; ?>"><?php echo sprintf('%02s', $i); ?></option>
<?php }//for
?>
</select>
</div>
<!-- bottoni -->
<div class='form_submit'>
<input type="hidden"
value="view_date"
name="op"/>
<input type="submit"
value="<?php echo gdrcd_filter('out',
$MESSAGE['interface']['forms']['submit']); ?>"/>
</div>
</form>
<?php
if ($PARAMETERS['mode']['chatsavepvt'] == 'ON')
{
if (isset($_REQUEST['op']) == 'view_date') {
$date_b = gdrcd_filter('num', $_REQUEST['year_b']) . '-' . sprintf('%02s',
gdrcd_filter('num', $_REQUEST['month_b'])) . '-' . sprintf('%02s',
gdrcd_filter('num', $_REQUEST['day_b'])) . ' ' . sprintf('%02s',
gdrcd_filter('num', $_REQUEST['hour_b'])) . ':' . sprintf('%02s',
gdrcd_filter('num', $_REQUEST['minut_b'])) . ':00';
$date_e = gdrcd_filter('num', $_REQUEST['year_e']) . '-' . sprintf('%02s',
gdrcd_filter('num', $_REQUEST['month_e'])) . '-' . sprintf('%02s',
gdrcd_filter('num', $_REQUEST['day_e'])) . ' ' . sprintf('%02s',
gdrcd_filter('num', $_REQUEST['hour_e'])) . ':' . sprintf('%02s',
gdrcd_filter('num', $_REQUEST['minut_e'])) . ':00';
$query = gdrcd_query(" SELECT chat.id, chat.imgs, chat.mittente, chat.destinatario, chat.tipo, chat.ora, chat.testo, personaggio.url_img_chat, personaggio.url_img_chat_alterego, personaggio.url_img_chat_mutante, personaggio.alterego, personaggio.mutante, personaggio.url_img_razza, personaggio.url_img, personaggio.url_img_classe, personaggio.url_img_classe2, personaggio.nome_razza, personaggio.nome_classe, personaggio.nome_classe2, personaggio.pnpnome, personaggio.pnpimg, mappa.ora_prenotazione, mappa.privata
FROM chat
INNER JOIN mappa ON mappa.id = chat.stanza
LEFT JOIN personaggio ON personaggio.nome = chat.mittente
WHERE stanza = " . $_SESSION['luogo'] . " AND ora >= '" . $date_b . "' AND ora <= '" . $date_e . "' ORDER BY id " . $typeOrder, 'result');
}
}
Ho preferito togliere la possibilità di selezionare il luogo. In pratica si va nella chat interessata e si compila il form della data (inizio e fine).
E funziona. Si compila il form, si clicca sul pulsante di submit, e poi se si clicca su "Link giocata", il file html viene generato correttamente, ovvero stampando sul file html della giocata solo il lasso di tempo interessato.
Unica cosa che mi da noia è che è tutto abbastanza piatto.
C'è un modo, ad esempio, per far sì che il link per scaricare il file con l'indirizzo random sia generato solo dopo aver cliccato invia nel form?
Sono piuttosto sicura che mi sto perdendo in un bicchier d'acqua...
11/09/2021 16:45:42
Ottimo per la soluzione!
L'ho provata e non mi ha dato alcun errore.
Per quanto riguarda questo:
Unica cosa che mi da noia è che è tutto abbastanza piatto.
C'è un modo, ad esempio, per far sì che il link per scaricare il file con l'indirizzo random sia generato solo dopo aver cliccato invia nel form?
Sono piuttosto sicura che mi sto perdendo in un bicchier d'acqua...
Comprendo che non è molto facile modificare quella pagina, essendo un grande listone di codici che si intrecciano tra output e logiche. La soluzione migliore, dal punto di vista tecnico, sarebbe quella di dividere la parte dell'estrazione dati e della generazione del link dalla parte visiva, in due file diversi, in modo da facilitare la rivisitazione della "grafica" di questo popup (in modo analogo ai vari _center.inc.php che ci sono in pages/ ), ma richiede un poco di tempo.
In ogni caso, se vuoi inibire il Link quando non è stato inviato il filtro, occorre che si modifichi la struttura degli if della pagina. Non sto a metterti tutto il codice, che sarebbe un listone grandissimo da identare successivamente, ti riporto graficamente come farei:
//{GENERAZIONE DEL FORM DI SELEZIONE PERIODO}
if (isset($_REQUEST['op']) && $_REQUEST['op'] == 'view_date') {
if ($PARAMETERS['mode']['chatsavepvt'] == 'ON')
{
//{QUERY CHAT PRIVATE}
} else {
//{QUERY CHAT PUBBLICHE}
}
// {ADD_CHAT}
// {Eseguo la query e le formattazioni}
...
}
In questo modo, tutto il malloppone di roba che viene fatto per la creazione del Link avviene solo ed esclusivamente quando viene mandato l'avvia, ossia quando è popolato il campo $_REQUEST['op'].
Kasa.
11/09/2021 16:53:52
Sono una polla!
Kaza grazie, vedo in settimana se riesco a impacchettare tutto e mandare al portale.
Farò anche un check per consentire questa cosa solo ad admin e gestori ;)
01/10/2021 18:08:07
Non ho ancora fatto il pacchetto perché sto sbattendo il naso su una cosa che vorrei sistemare.
Ad oggi il file generato è una sequela di caratteri random. La parte di codice che gestisce la cosa è:
$rand = rand(1, 10000000);
$file = md5($file . $rand);
$file = $file . ".html";
Come posso fare per far sì che invece il file venga fuori con questo formato?
2021-10-01-ora-minuti-secondi-NomePgCheSalva-luogodelsalvataggio.html
01/10/2021 22:18:48 e modificato da kasa il 02/10/2021 09:26:53
haruka ha scritto:
Come posso fare per far sì che invece il file venga fuori con questo formato?
2021-10-01-ora-minuti-secondi-NomePgCheSalva-luogodelsalvataggio.html
Il motivo per il quale il file viene salvato in quel modo è per evitare che che si possano creare file con nomi simili, dato che GDRCD non ha alcun sistema che preveda la sovrascrittura nel caso. Quindi, di base, conviene avere un id unico nel nome del file.
Per poter dare un nome a tuo piacimento al file, ti basterà modificare in chat_save.proc.php in questo modo, ad esempio:
/* Scrivo tutto in un file di testo */
$file = date('Y-m-d_H-i-s') . '_' . $_SESSION['login'] . '_' . $_SESSION['luogo'] . ".html";
POTRESTI COMUNQUE AVERE PROBLEMI DI SOVRASCRITTURA DEL FILE (lo metto in grande, per far passare il messaggio ), questo pattern non ti esime dal tutto da questa criticità. La best practice diciamo che sarebbe comunque utilizzare metodi meno eleganti, ma più pratici.
Kasa.
02/10/2021 14:53:32
Grazie Kasa, faccio subito i test dovuti.
Comunque comprensibile il discorso sovrascrittura, ma penso che mettendo data, ora, nome di chi salva e chat, in parte il problema si risolve.
Ovvio che è fondamentale anche l'ora (minuti e secondi) in questo discorso. Perché è chiaro che se faccio un salvachat adesso, di sicuro non sarò in grado di farne un altro nello stesso secondo, inerente sempre la stessa chat, ma riferito ad un momento diverso del gioco. Umanamente parlando, dico, ma hai fatto bene a sottolineare.
Dopo faccio le dovute prove. Ancora grazie :)
Discussione seguita da
Pagine → 1 2
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Tibia ↗
New Orleans ↗
Exclusive Villa GdR ↗
Tiles Survive ↗
AlterEgo ↗
Neverness to Everness ↗
Seconda Era ↗
Raja Dunia ↗