[RISOLTO][GDR CD 5.4.1] Gilde invisibili per utenti e non gildati
[RISOLTO][GDR CD 5.4.1] Gilde invisibili per utenti e non gildati postato il 24/02/2022 09:07:03 nel forum programmazione, open source e hosting e modificato da psycosocial il 25/02/2022 09:15:22
Buongiorno a tutti.
Vi importuno per un "problema" che mi sta facendo un po' ammattire.
Come da titolo, ho creato delle gilde che devono necessariamente restare invisibili agli utenti "normali" ma che al tempo stesso siano visibili sia ai master che ai gildati.
Ho attribuito loro il tipo "Segrete" e filtrato con il controllo
<?php /*Visualizza l'elenco delle gilde segrete se il personaggio è almeno master o appartiene a quella stessa corporazione*/
if($_SESSION['permessi']>=GAMEMASTER){ ?>
E fino a qui tutto bene. Chi non è master non vede le gilde né in elenco né - se è un curiosone - andando a cercare la pagina relativa con id_gilda.
Non riesco però a venire fuori dal mostrarle al gildato.
Sono riuscita ad estrarre le gilde di appartenenza del pg e la pagina gilda che sta visualizzando prendendo il codice dalla scheda personaggio e ora il blocco è così
$row = gdrcd_query("SELECT id_gilda, nome, tipo FROM gilda WHERE id_gilda = ".gdrcd_filter('num', $_REQUEST['id_gilda'])."");
$guilds=gdrcd_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', $_SESSION['login'])."'", 'result');
if (gdrcd_query($guilds, 'num_rows')==0){
// echo gdrcd_filter('out',$MESSAGE['interface']['sheet']['profile']['uneployed']);
}else{
echo $row['id_gilda'];//VISUALIZZA LA PAGINA DELLA GILDA
while ($row_guilds = gdrcd_query($guilds, 'fetch')){
echo gdrcd_filter('out',$row_guilds['nome_ruolo'].' - '.$row_guilds['nome_gilda']);
echo gdrcd_filter('out',$row_guilds['id_gilda']);//VISUALIZZA LE GILDE DEL PG
}
}
e anche qui a seguire c'è il controllo sul tipo gilda e sul permesso utente
<?php if ($titolo['tipo']==11 && $_SESSION['permessi']<GAMEMASTER) {
Da qui in poi, però, mi sono arenata.
Ho concettualmente idea di cosa devo fare solo che non riesco a metterlo in pratica e ci sto ammattendo.
Suggerimenti?
Pagine → 1
24/02/2022 11:02:10
Concettualmente, credo che devi andare a esclusione.
Mi spiego meglio: nell'if invece di usare && che sarebbe l'AND, usa || che sarebbe l'OR.
Quindi invece di fare un doppio controllo, lo fai una volta sola:
if(($_SESSION['permessi']>=GAMEMASTER) || ($row_guilds['id_gilda'] == $row['id_gilda'])){
In teoria così dovresti controllare che l'utente abbia i permessi 'gamemaster' OPPURE che il appartenga alla gilda (o almeno leggendo il codice che hai messo ho compreso che $row_guilds sono i dati del pg, mentre $row sono quelli della tabella gilda).
25/02/2022 09:14:53
Grazie anneth.
Alla fine, non saltandoci fuori ho trovato un modo differente per fare la cosa che sembra funzionare uguale (anche se forse non è la soluzione più "pulita" - ma sono una smanettona y_Y)
Ho diviso le query in questo modo:
<?php /*se il personaggio è un semplice utente*/
if ($_SESSION['permessi']==USER) {?>
<?php /*Visualizzaione elenco gilde*/
if(isset($_REQUEST['id_gilda'])===FALSE){
$query= "SELECT gilda.nome, gilda.id_gilda, gilda.tipo, gilda.visibile, gilda.immagine,
codtipogilda.descrizione FROM gilda JOIN
codtipogilda ON gilda.tipo = codtipogilda.cod_tipo WHERE gilda.visibile=1 ORDER BY gilda.tipo ASC";
$result=gdrcd_query($query, 'result'); ?>
<?php while ($row=gdrcd_query($result, 'fetch')){ ?>
<br> <a href="main.php?page=servizi_gilde&id_gilda=<?php echo $row['id_gilda']; ?>">
<?php echo gdrcd_filter('out',$row['nome']);} ?>
</a>
<?php }//while
gdrcd_query($result, 'free');
?>
<!-- VISUALIZZO LE GILDE IN CUI E' COORPORATO IL PG!-->
<?php /*Visualizzaione elenco gilde*/
if(isset($_REQUEST['id_gilda'])===FALSE && $row['visibile']==0){
$query= "SELECT ruolo.nome_ruolo, ruolo.gilda,
ruolo.immagine, gilda.visibile, gilda.id_gilda, gilda.nome, gilda.tipo 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', $_SESSION['login'])."' AND gilda.visibile = 0";
$result=gdrcd_query($query, 'result'); ?>
<?php while ($row=gdrcd_query($result, 'fetch')){ ?>
<br> <a href="main.php?page=servizi_gilde&id_gilda=<?php echo $row['id_gilda']; ?>">
<?php echo gdrcd_filter('out',$row['nome']); }?>
</a>
<?php }//while
gdrcd_query($result, 'free');
?>
<?php }?>
Dando al semplice utente la possibilità di vedere le gilde se non sono segrete o di vederle se ne fa parte.
Allo stesso modo ho filtrato la parte dei permessi da Master in sù, che anche se non corporati hanno la possibilità di vedere tutte le gilde.
Comunque grazie per l'aiuto :)
Chiudo.
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!
Cafuné ↗
Neverness to Everness ↗
Wuthering Waves ↗