[GDRCD 5.4.1] Spostare una discussione da un forum ad un altro
[GDRCD 5.4.1] Spostare una discussione da un forum ad un altro postato il 12/07/2017 17:09:12 nel forum programmazione, open source e hosting
Buongiorno,
Una precisazione... per spostare un thread da una bacheca all'altra è necessario fare questo ragionamento? ditemi se son sulla buona strada o se invece sto affogando nell'ignoranza...
Bisogna fare una query di INSERT messaggio
e subito dopo una di DELETE... del messaggio precedente, e mai il contrario.
Il principio del ragionamento che devo fare è corretto?
Grazie anticipatamente
Pagine → 1
12/07/2017 17:20:34
Non conosco GdRCD 5.4, MA suppongo che qualsiasi topic nel forum venga salvato in una propria riga di db, è che tutte le entry facciano parte della stessa tabella.
Se è così, devi identificare il o i valori che "posizionano" il topic in una determinata sezione e modificarli per spostarlo.
Per farlo ti basta un UPDATE :)
20/05/2021 11:24:13
Riporto su perché secondo me sarebbe una bella implementazione da fare, magari se ci mettiamo insieme a ragionarci con più teste si riesce.
Dunque, attualmente su gdrcd i messaggi vengono inseriti nella tabella del database chiamata messaggioaraldo e ogni messaggio è identificato da id_messaggio.
Possono essere:
messaggi padre, e in tal caso nel campo id_messaggio_padre riportano -1
messaggi di risposta, e in tal caso nel campo id_messaggio_padre riportano l'id del messaggio cui sono collegati.
Ora, mi è capitato di dover spostare un thread che non volevo perdere ma neanche lasciare visibile, tant'è che ho proprio creato la bacheca cestino, e quando l'ho fatto, ho sempre agito sul database. Basta cambiare il campo id_araldo.
Qual è il problema? Che a quel punto compare l'alert (Nuovo messaggio) perché nella tabella araldo_letto (che è quella che indica se un personaggio ha letto i nuovi post oppure no) non c'è solo il thread_id (che corrisponde a id_messaggio della tabella messaggioaraldo) ma anche araldo_id che corrisponde a id_araldo di messaggioaraldo.
Quindi, manualmente, ho sempre dovuto fare la modifica anche lì. Finché una land è piccola, si fa pure, dopo si diventa scemi.
Ora, concettualmente credo di sapere cosa serve, ma non sono una programmatrice.
Bisognerebbe creare un qualcosa che:
1) nella tabella messaggioaraldo sposta id_messaggio da attuale id_araldo a nuovo id_araldo;
2) nella tabella messaggioaraldo sposta tutti gli id_messaggio che hanno id_padre = id_messaggio(padre) da attuale id_araldo a nuovo id_araldo;
3) nella tabella araldo_letto cambia araldo_id a tutti i thread_id coinvolti nello spostamento, inserendo come numero quello del nuovo id_araldo;
Lato programmazione partendo da zero io ammetto di non essere in grado e alzo le mani. Ma se qualcuno riuscisse a buttar giù qualcosa, mi metto a disposizione per tutte le prove necessarie e contribuire a far funzionare il codice.
20/05/2021 15:43:41 e modificato da haruka il 20/05/2021 15:45:57
<?php /*HELP: */
$result = gdrcd_query("SELECT messaggioaraldo.id_messaggio, messaggioaraldo.id_messaggio_padre, messaggioaraldo.autore, messaggioaraldo.id_araldo, messaggioaraldo.titolo FROM messaggioaraldo WHERE id_messaggio_padre = -1 ORDER BY titolo ASC", 'result');
$row = gdrcd_query($result, 'fetch');
$result2 = gdrcd_query("SELECT id_araldo, nome, tipo, proprietari, visibile FROM araldo ORDER BY tipo, nome", 'result');
$row2 = gdrcd_query($result2, 'fetch');
if($_SESSION['permessi'] >= SUPERUSER) { /* se almeno admin */
?>
<div class="pagina_servizi_banca">
<!-- Titolo della pagina -->
<div class="page_title">
<h2>Sposta forum</h2>
</div>
<!-- Operazioni bancarie -->
<div class="page_body">
<?php /*tutto da scrivere*/
if(gdrcd_filter('get', $_POST['op']) == 'sposta') {
}
?>
<?php /*Visualizzazione di base*/
if(isset($_POST['op'])===FALSE){?>
<div class="panels_box">
<div>
<!-- Istruzioni -->
qualche riga di istruzione<br />
</div>
<!-- Form -->
<div class="form_gioco">
<form action="main.php?page=gestione_spostaforum" method="post">
<div class="form_element">
<div class="form_label">
Seleziona il thread da spostare
</div>
<select name="thread">
<?php
while($row = gdrcd_query($result, 'fetch')) { ?>
<option value="<?php echo $row['id_messaggio']; ?>">
<?php echo $row['titolo']; ?> (<?php echo $row['autore'] ?> - <?php echo $row['id_araldo'] ?>)
</option>
<?php }
gdrcd_query($result, 'free');
?>
</select>
<div class="form_label">
Seleziona la bacheca dove spostarlo
</div>
<select name="bacheca">
<?php
while($row2 = gdrcd_query($result2, 'fetch')) { ?>
<option value="<?php echo $row2['id_araldo']; ?>">
<?php echo $row2['nome']; ?>
</option>
<?php }
gdrcd_query($result2, 'free');
?>
</select>
</div>
<div class="form_submit">
<input type="hidden" name="op" value="move" />
<input type="submit" name="submit" value="sposta" />
</div>
</form>
</div>
<?php } //fine base ?>
</div><!-- operazioni-->
</div><!-- box -->
<?php } else { echo '<div class="warning">Non sei abilitato a vedere questa pagina</div>'; }//fine if se non si è admin ?>
Vediamo ho buttato giù la struttura di questo nuovo file chiamato "gestione_spostaforum.inc.php"... qualche dritta su come procedo da qui?
20/05/2021 17:07:00
A quanto pare mi sottovaluto ^^'
Pacchetto in via di completamento, nel frattempo per chi vuole
STEP 1
aprire il file: config.inch.php
cercate
$PARAMETERS['administration']['forums']['text'] = 'Gestione bacheche';
$PARAMETERS['administration']['forums']['url'] = 'main.php?page=gestione_bacheche';
$PARAMETERS['administration']['forums']['access_level'] = MODERATOR;
Subito dopo inserite:
$PARAMETERS['administration']['spostathread']['text']='Sposta un thread';
$PARAMETERS['administration']['spostathread']['url']='main.php?page=gestione_spostathread';
$PARAMETERS['administration']['spostathread']['access_level']=MODERATOR;
STEP 2
In /pages/ create il file gestione_spostathread.inc.php
il cui contenuto sarà:
<?php /*HELP: */
$result = gdrcd_query("SELECT messaggioaraldo.id_messaggio, messaggioaraldo.id_messaggio_padre, messaggioaraldo.autore, messaggioaraldo.id_araldo, messaggioaraldo.titolo FROM messaggioaraldo WHERE id_messaggio_padre = -1 ORDER BY titolo ASC", 'result');
$row = gdrcd_query($result, 'fetch');
$result2 = gdrcd_query("SELECT id_araldo, nome, tipo, proprietari, visibile FROM araldo ORDER BY nome ASC", 'result');
$row2 = gdrcd_query($result2, 'fetch');
if($_SESSION['permessi'] >= SUPERUSER) { /* se almeno admin */
?>
<div class="pagina_servizi_banca">
<!-- Titolo della pagina -->
<div class="page_title">
<h2>Sposta thread</h2>
</div>
<!-- Operazioni bancarie -->
<div class="page_body">
<?php /*tutto da scrivere*/
if(gdrcd_filter('get', $_POST['op']) == 'sposta') {
gdrcd_query("UPDATE messaggioaraldo SET id_araldo = '".$_POST['nuovabacheca']."' WHERE id_messaggio = '".$_POST['thread']."' LIMIT 1");
gdrcd_query("UPDATE messaggioaraldo SET id_araldo = '".$_POST['nuovabacheca']."' WHERE id_messaggio_padre = '".$_POST['thread']."' LIMIT 1");
gdrcd_query("UPDATE araldo_letto SET araldo_id = '".$_POST['nuovabacheca']."' WHERE thread_id = '".$_POST['thread']."'");
echo '<div class="warning">Thread spostato correttamente</div>';
?>
<div class="panels_link">
<a href="main.php?page=gestione_spostathread"><?php echo gdrcd_filter('out', $MESSAGE['interface']['adm_guilds']['back']); ?></a>
</div>
<?php
}
?>
<?php /*Visualizzazione di base*/
if(isset($_POST['op'])===FALSE){?>
<div class="panels_box">
<div>
<!-- Istruzioni -->
qualche riga di istruzione<br />
</div>
<!-- Form -->
<div class="form_gioco">
<form action="main.php?page=gestione_spostathread" method="post">
<div class="form_element">
<div class="form_label">
Seleziona il thread da spostare
</div>
<select name="thread">
<?php
while($row = gdrcd_query($result, 'fetch')) { ?>
<option value="<?php echo $row['id_messaggio']; ?>">
<?php echo $row['titolo']; ?> (<?php echo $row['autore'] ?>)
</option>
<?php }
gdrcd_query($result, 'free');
?>
</select>
<div class="form_label">
Seleziona la bacheca dove spostarlo
</div>
<select name="nuovabacheca">
<?php
while($row2 = gdrcd_query($result2, 'fetch')) { ?>
<option value="<?php echo $row2['id_araldo']; ?>">
<?php echo $row2['nome']; ?>
</option>
<?php }
gdrcd_query($result2, 'free');
?>
</select>
</div>
<div class="form_submit">
<input type="hidden" name="op" value="sposta" />
<input type="submit" name="submit" value="sposta" />
</div>
</form>
</div>
<?php } //fine base ?>
</div><!-- operazioni-->
</div><!-- box -->
<?php } else { echo '<div class="warning">Non sei abilitato a vedere questa pagina</div>'; }//fine if se non si è admin ?>
20/05/2021 20:11:21
mathramstaff ha scritto: Questa ragazza è un carroarmato O__O
Ahahah, va te che mi trovo un mestiere in mano e manco lo sapevo xD
mathramstaff ha scritto: [quote]$result2 = gdrcd_query("SELECT id_araldo, nome, tipo, proprietari, visibile FROM araldo ORDER BY nome ASC", 'result');
Per i meno pratici quella query potrebbe variare, dipende dalla versione gdr cd credo o da quanto avete manomesso XD (scherzo modificato). Giusto per evitare, ai pirla come me, un punto interrogativo in testa per i primi 30 secondi prima di spalmarsi la mano in fronte e capire che magari, va riadattata XDDD[/quote]
Mumble... in effetti do per scontato che la versione di gdrcd sia l'ultima, la 5.5. Colpa mia che ho risposto a un thread vecchietto ma giuro - giuro ç_ç - non pensavo di cavarmela. Poi ho iniziato a smanettare con la pagina di assegnazione delle cariche di gilda e mi si è piano, piano aperto un mondo :D
Venendo alla questione, mi pare che su gdrcd 5.5 la tabella araldo in effetti abbia quella struttura. In altre parole, mi pare di ricordare che su Leggendra quella parte non l'ho mai modificata.
Cosa non ti tornava?
20/05/2021 20:22:51
AHHH No, ho capito ora. Ecco cosa "visibile", quella è una mia aggiunta xD
Riposto il codice corretto del file che va in /pages/ con nome gestione_spostathread.inc.php
<?php /*HELP: */
$result = gdrcd_query("SELECT messaggioaraldo.id_messaggio, messaggioaraldo.id_messaggio_padre, messaggioaraldo.autore, messaggioaraldo.id_araldo, messaggioaraldo.titolo FROM messaggioaraldo WHERE id_messaggio_padre = -1 ORDER BY titolo ASC", 'result');
$row = gdrcd_query($result, 'fetch');
$result2 = gdrcd_query("SELECT id_araldo, nome, tipo FROM araldo ORDER BY nome ASC", 'result');
$row2 = gdrcd_query($result2, 'fetch');
if($_SESSION['permessi'] >= SUPERUSER) { /* se almeno admin */
?>
<div class="pagina_servizi_banca">
<!-- Titolo della pagina -->
<div class="page_title">
<h2>Sposta thread</h2>
</div>
<!-- Operazioni bancarie -->
<div class="page_body">
<?php /*tutto da scrivere*/
if(gdrcd_filter('get', $_POST['op']) == 'sposta') {
gdrcd_query("UPDATE messaggioaraldo SET id_araldo = '".$_POST['nuovabacheca']."' WHERE id_messaggio = '".$_POST['thread']."' LIMIT 1");
gdrcd_query("UPDATE messaggioaraldo SET id_araldo = '".$_POST['nuovabacheca']."' WHERE id_messaggio_padre = '".$_POST['thread']."' LIMIT 1");
gdrcd_query("UPDATE araldo_letto SET araldo_id = '".$_POST['nuovabacheca']."' WHERE thread_id = '".$_POST['thread']."'");
echo '<div class="warning">Thread spostato correttamente</div>';
?>
<div class="panels_link">
<a href="main.php?page=gestione_spostathread"><?php echo gdrcd_filter('out', $MESSAGE['interface']['adm_guilds']['back']); ?></a>
</div>
<?php
}
?>
<?php /*Visualizzazione di base*/
if(isset($_POST['op'])===FALSE){?>
<div class="panels_box">
<div>
<!-- Istruzioni -->
qualche riga di istruzione<br />
</div>
<!-- Form -->
<div class="form_gioco">
<form action="main.php?page=gestione_spostathread" method="post">
<div class="form_element">
<div class="form_label">
Seleziona il thread da spostare
</div>
<select name="thread">
<?php
while($row = gdrcd_query($result, 'fetch')) { ?>
<option value="<?php echo $row['id_messaggio']; ?>">
<?php echo $row['titolo']; ?> (<?php echo $row['autore'] ?>)
</option>
<?php }
gdrcd_query($result, 'free');
?>
</select>
<div class="form_label">
Seleziona la bacheca dove spostarlo
</div>
<select name="nuovabacheca">
<?php
while($row2 = gdrcd_query($result2, 'fetch')) { ?>
<option value="<?php echo $row2['id_araldo']; ?>">
<?php echo $row2['nome']; ?>
</option>
<?php }
gdrcd_query($result2, 'free');
?>
</select>
</div>
<div class="form_submit">
<input type="hidden" name="op" value="sposta" />
<input type="submit" name="submit" value="sposta" />
</div>
</form>
</div>
<?php } //fine base ?>
</div><!-- operazioni-->
</div><!-- box -->
<?php } else { echo '<div class="warning">Non sei abilitato a vedere questa pagina</div>'; }//fine if se non si è admin ?>
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!
New Orleans ↗
Project Entropy ↗
War Thunder ↗
World of Tanks ↗
World of Warship ↗
Fallen Gods ↗
Imperion ↗