[GDRCD 5.4] ML di Gilda
09/05/2021 14:11:20
Buondì, scusate se riporto su questa discussione.
Sto provando anche io ad implementare la ML di gilda e ci sono riuscita. Ho tolto la limitazione che fa spedire il messaggio solo dal capo corporazione, questo può essere uno strumento utile per tutti, ma c'è il problema che se un presonaggio fa parte di due corporazioni, il codice così come è adesso invia lo stesso messaggio ad entrambe le corporazioni.
Copio il codice che funziona da noi in land.
else if ($_POST['multipli']=='ML')
{
$guilds= "SELECT clgpersonaggioruolo.personaggio, clgpersonaggioruolo.id_ruolo, ruolo.nome_ruolo, ruolo.gilda FROM clgpersonaggioruolo JOIN ruolo ON clgpersonaggioruolo.id_ruolo=ruolo.id_ruolo WHERE ruolo.gilda IN (SELECT ruolo.gilda FROM clgpersonaggioruolo JOIN ruolo ON clgpersonaggioruolo.id_ruolo = ruolo.id_ruolo WHERE clgpersonaggioruolo.personaggio= '".$_SESSION['login']."' )";
$result = gdrcd_query($guilds, 'result');
while($record = gdrcd_query($result , 'fetch'))
{
gdrcd_query("INSERT INTO messaggi (mittente, destinatario, spedito, testo) VALUES ('".$_SESSION['login']."', '".$record['personaggio']."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."')");
}
gdrcd_query($guilds , 'free');
}
E ovviamente
<option value="ML">ML di Gilda</option>
***
Pensavo che una modifica potrebbe essere
<option value="ML">ML alla tua prima Gilda</option>
<option value="ML2">ML alla tua seconda Gilda</option>
Ma come sistemo il codice per la query?
In avatar, se un personaggio fa parte di due corporazioni, sono visibili entrambi i simboli. Questo è il codice interessato, quindi in qualche modo potrebbe essere d'aiuto (ma io sono autodidatta e non riesco a far girare le cose...)
<?php //carico le gilde
$guilds = gdrcd_query("SELECT ruolo.nome_ruolo, ruolo.gilda, ruolo.immagine, gilda.visibile, gilda.nome AS nome_gilda FROM clgpersonaggioruolo LEFT JOIN ruolo ON ruolo.id_ruolo = clgpersonaggioruolo.id_ruolo LEFT JOIN gilda ON ruolo.gilda = gilda.id_gilda WHERE clgpersonaggioruolo.personaggio = '".gdrcd_filter('in', $personaggio['nome'])."'", 'result');
if(gdrcd_query($guilds, 'num_rows') == 0) {
echo gdrcd_filter('out', $MESSAGE['interface']['sheet']['profile']['uneployed']);
} else {
while($row_guilds = gdrcd_query($guilds, 'fetch')) {
if($row_guilds['gilda'] == -1) {
echo '<img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/'.gdrcd_filter('out', $row_guilds['immagine']).'" alt="'.gdrcd_filter('out', $row_guilds['nome_ruolo']).'" title="'.gdrcd_filter('out', $row_guilds['nome_ruolo']).'" />';
} else {
if(($row_guilds['visibile'] == 1) || ($_SESSION['permessi'] >= USER)) {
echo '<a href="main.php?page=servizi_gilde&id_gilda='.$row_guilds['gilda'].'"><img class="profilo_img_gilda" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/guilds/'.gdrcd_filter('out', $row_guilds['immagine']).'" alt="'.gdrcd_filter('out', $row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']).'" title="'.gdrcd_filter('out', $row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']).'" /></a>';
}
}
}
gdrcd_query($guilds, 'free');
} ?>
Pareri?
09/05/2021 19:35:52
Domani mattina mi ci metto e inizio a vedere se combino qualcosa.
Ho capito il tuo ragionamento, per ora grazie ;)
10/05/2021 00:19:13
Piccoli passetti in avanti.
Sono riuscita a lavorarci già stasera e ho fatto il giro dell'oca per arrivare a sistemare l'opzione nel select. Che adesso funziona.
Posto il codice che sono riuscita a incastrare, sono sicura che non sia né pulito né snello, ma così come è funziona e stampa le due eventuali opzioni di corporazione.
<select name="multipli">
<option value="singolo" selected>
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['multiple']['single']); ?>
</option>
<option value="multiplo">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['multiple']['multiple']); ?>
</option>
<?php $personaggio['nome'] = $_SESSION['login'];
$query = "SELECT ruolo.nome_ruolo, ruolo.gilda, ruolo.immagine, gilda.visibile, gilda.id_gilda, gilda.nome, gilda.tipo AS nome_gilda FROM clgpersonaggioruolo LEFT JOIN ruolo ON ruolo.id_ruolo = clgpersonaggioruolo.id_ruolo LEFT JOIN gilda ON ruolo.gilda = gilda.id_gilda WHERE clgpersonaggioruolo.personaggio = '".gdrcd_filter('in', $personaggio['nome'])."'";
$result = gdrcd_query($query, 'result');
$echoed_null_row = false;
while($row = gdrcd_query($result, 'fetch')) {
if(($echoed_null_row === false) && ($row['gilda'] == -1)) {
echo '<option value="" disabled>-------</option>';
$echoed_null_row = true;
}
?>
<option value="ML<?php echo $row['id_gilda']; ?>">
Manda una ML a: <?php echo $row['nome']; ?> (funzione non ancora implementata)
</option>
<?php }
gdrcd_query($result, 'free');
?>
<option value="presenti">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['multiple']['online']); ?>
</option>
<?php if($_SESSION['permessi'] >= MODERATOR) { ?>
<option value="broadcast">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['multiple']['all']); ?>
</option>
<?php } ?>
</select>
Posto immagine.

Confermo che i value generati per le due ml sono questi
<option value="ML1">
Manda una ML a: Triumvirato (funzione non ancora implementata)
</option>
<option value="ML2">
Manda una ML a: Magisterum (funzione non ancora implementata)
</option>
Adesso ovviamente devo sistemare la parte che aggiunge i messaggi nel database.
else if ($_POST['multipli']=='ML')
{
$guilds= "SELECT clgpersonaggioruolo.personaggio, clgpersonaggioruolo.id_ruolo, ruolo.nome_ruolo, ruolo.gilda FROM clgpersonaggioruolo JOIN ruolo ON clgpersonaggioruolo.id_ruolo=ruolo.id_ruolo WHERE ruolo.gilda IN (SELECT ruolo.gilda FROM clgpersonaggioruolo JOIN ruolo ON clgpersonaggioruolo.id_ruolo = ruolo.id_ruolo WHERE clgpersonaggioruolo.personaggio= '".$_SESSION['login']."' )";
$result = gdrcd_query($guilds, 'result');
while($record = gdrcd_query($result , 'fetch'))
{
gdrcd_query("INSERT INTO messaggi (mittente, destinatario, spedito, testo) VALUES ('".$_SESSION['login']."', '".$record['personaggio']."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."')");
}
gdrcd_query($guilds , 'free');
}
Come faccio a dire a questa parte di codice che i soli personaggi interessati sono quelli nella corporazione 1, o solo 2, in base alla lista di opzioni?
10/05/2021 13:51:15
haruka ha scritto:
Confermo che i value generati per le due ml sono questi
<option value="ML1">
Manda una ML a: Triumvirato (funzione non ancora implementata)
</option>
<option value="ML2">
Manda una ML a: Magisterum (funzione non ancora implementata)
</option>
Errore mio, pescava gli id delle due corporazioni, che sono 1 e 2. Il codice è stato sistemato così
<select name="multipli">
<option value="singolo" selected>
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['multiple']['single']); ?>
</option>
<option value="multiplo">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['multiple']['multiple']); ?>
</option>
<?php $personaggio['nome'] = $_SESSION['login'];
$query = "SELECT ruolo.nome_ruolo, ruolo.gilda, ruolo.immagine, gilda.visibile, gilda.id_gilda, gilda.nome, gilda.tipo AS nome_gilda FROM clgpersonaggioruolo LEFT JOIN ruolo ON ruolo.id_ruolo = clgpersonaggioruolo.id_ruolo LEFT JOIN gilda ON ruolo.gilda = gilda.id_gilda WHERE clgpersonaggioruolo.personaggio = '".gdrcd_filter('in', $personaggio['nome'])."'";
$result = gdrcd_query($query, 'result');
$num = 1;
$echoed_null_row = false;
while($row = gdrcd_query($result, 'fetch')) {
if(($echoed_null_row === false) && ($row['gilda'] == -1)) {
echo '<option value="" disabled>-------</option>';
$echoed_null_row = true;
}
?>
<option value="ML<?php echo $num++; ?>">
Manda una ML a: <?php echo $row['nome']; ?> (funzione non ancora implementata)
</option>
<?php }
gdrcd_query($result, 'free');
?>
<option value="presenti">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['multiple']['online']); ?>
</option>
<?php if($_SESSION['permessi'] >= MODERATOR) { ?>
<option value="broadcast">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['multiple']['all']); ?>
</option>
<?php } ?>
</select>
E dato che un personaggio non può appartenere a più di due corporazioni, alla fine il codice per la scrittura nel db diventa così:
else if ($_POST['multipli']=='ML1')
{
$guilds= "SELECT clgpersonaggioruolo.personaggio, clgpersonaggioruolo.id_ruolo, ruolo.nome_ruolo, ruolo.gilda FROM clgpersonaggioruolo JOIN ruolo ON clgpersonaggioruolo.id_ruolo=ruolo.id_ruolo WHERE ruolo.gilda IN (SELECT ruolo.gilda FROM clgpersonaggioruolo JOIN ruolo ON clgpersonaggioruolo.id_ruolo = ruolo.id_ruolo WHERE clgpersonaggioruolo.personaggio= '".$_SESSION['login']."' )";
$result = gdrcd_query($guilds, 'result');
while($record = gdrcd_query($result , 'fetch'))
{
gdrcd_query("INSERT INTO messaggi (mittente, destinatario, spedito, testo) VALUES ('".$_SESSION['login']."', '".$record['personaggio']."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."')");
}
gdrcd_query($guilds , 'free');
}
else if ($_POST['multipli']=='ML2')
{
$guilds= "SELECT clgpersonaggioruolo.personaggio, clgpersonaggioruolo.id_ruolo, ruolo.nome_ruolo, ruolo.gilda FROM clgpersonaggioruolo JOIN ruolo ON clgpersonaggioruolo.id_ruolo=ruolo.id_ruolo WHERE ruolo.gilda IN (SELECT ruolo.gilda FROM clgpersonaggioruolo JOIN ruolo ON clgpersonaggioruolo.id_ruolo = ruolo.id_ruolo WHERE clgpersonaggioruolo.personaggio= '".$_SESSION['login']."' )";
$result = gdrcd_query($guilds, 'result');
while($record = gdrcd_query($result , 'fetch'))
{
gdrcd_query("INSERT INTO messaggi (mittente, destinatario, spedito, testo) VALUES ('".$_SESSION['login']."', '".$record['personaggio']."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."')");
}
gdrcd_query($guilds , 'free');
}
Mi rimane il problema dei destinatari. Sto cercando di capire come generare la lista dei destinatari che abbiano in comune, col mittente, il codice corporazione...
11/05/2021 18:15:47
Niente da fare, alla fine la mia scarsa capacità di programmazione ha avuto la meglio.
Sarebbe stato più semplice usare direttamente la posta e inviare ML come in effetti si riesce a fare, seguendo le istruzioni in questa conversazione, se il personaggio fa parte di un solo gruppo di gioco ma da noi in land è contemplata la doppia corporazione e ho dovuto stravolgere completamente i miei piani.
@detoxified grazie lo stesso per l'aiuto ;)
Discussione seguita da
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
CRSED: F.O.A.D. ↗
Enlisted ↗
Tibia ↗
Seconda Era ↗