[RISOLTO - GDR 5.4.1] Doppio Colore azioni Master
[RISOLTO - GDR 5.4.1] Doppio Colore azioni Master postato il 17/09/2017 20:34:00 nel forum programmazione, open source e hosting e modificato da damnedqueen89 il 02/04/2018 15:25:33
Buonasera!
Come esplica il titolo utilizzo un gdr-cd 5.4.1 e sono incappata in un problema di CSS - e presumo che non possa essere altro in effetti - che mi sta mandando seriamente ai matti.
Quello che vorrei fare è differenziare l'azione Master - o MS che dir si voglia - esattamente come accade con le semplici azioni di gioco, dove il testo racchiuso nelle < > o nelle [ ] assume un colore diverso rispetto al testo fuori di esse.
Ho provato ad aggiungere nella pagina chat.css del tema scelto questa stringa
div.chat_row_M span.color2{color:#555454;}
Ma il testo rimane esattamente uniforme, che si utilizzino le parentesi o le freccette o meno.
Qualcuno mi potrebbe dare una zampa?
Grazie mille!
Pagine → 1 2
18/09/2017 09:40:11
Ciao,
devi agire prima di tutto sul codice php che preleva i dati dal db e stampa l'azione formattata. I file che dovrai modificare sono: ref_header.inc.php e functions.inc.php
Ogni tipo di azione inviata nel database viene salvata con un carattere specifico che rappresenta il tipo.
Il tipo che a te interessa è la M (sempre se non hai cambiato)
---
Apri il ref_header.inc.php, cerca questo blocco di codice
case 'M':
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '<div class="chat_row_'.$row['tipo'].'">';
$add_chat.= '<span class="chat_master">'.gdrcd_chatme_master($_SESSION['login'], gdrcd_filter('out',$row['testo'])).'</span>';
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '</div>';
break;
sostituisci come segue
case 'M':
$add_chat .= '<div class="chat_row_' . $row['tipo'] . '">';
$add_chat .= '<span class="chat_master">' . gdrcd_chatme_master($_SESSION['login'], gdrcd_chatcolor_master(gdrcd_filter('out', $row['testo']))) . '</span>';
$add_chat .= '</div>';
break;
adesso apri il file functions.inc.php e cerca questo blocco
function gdrcd_chatcolor($str)
{
$search = array(
'#\<(.+?)\>#is',
'#\[(.+?)\]#is',
);
$replace = array(
'<span class="color2"><$1></span>',
'<span class="color2"><$1></span>',
);
return preg_replace($search, $replace, $str);
}
e aggiungi subito sotto questo
/**
* Colora in HTML le parti di testo comprese tra parentesi angolari o parentesi quadre
* Si usa in chat per azioni di tipo master
* @param string $str: la stringa da controllare
* @return $str con la parti colorate
*/
function gdrcd_chatcolor_master($str)
{
$search = array(
'#\<(.+?)\>#is',
'#\[(.+?)\]#is',
);
$replace = array(
'<span class="c_master_1"><$1></span>',
'<span class="c_master_2"><$1></span>',
);
return preg_replace($search, $replace, $str);
}
adesso crea le due classi css
/* azione tra <> di un master = colore nero */
.c_master_1{
color: #000;
}
/* azione tra [] convertite in <> di un master = colore grigio */
.c_master_2{
color:#ccc;
}
Questa è la logica che usa gdrcd, dovrebbe funzionare tutto
18/09/2017 14:49:37
Funziona tutto perfettamente, ti ringrazio di cuore *__* <3
24/05/2020 15:03:34
Scusate se insisto ma a me non funziona proprio.
L'azione del master ha lo stesso colore nel parlato e nella descrizione, inoltre i tag < > vengono sostituiti dai tag [ ].
Ho seguito alla lettera la procedura ma non va Com'è possibile? Potete illuminarmi ho provato TUTTO T.T
posto qui il codice della mia pagina ref_
<?php session_start();
header('Content-Type:text/html; charset=UTF-8');
$last_message = $_SESSION['last_message'];
//Includio i parametri, la configurazione, la lingua e le funzioni
require 'includes/constant_values.inc.php';
require 'config.inc.php';
require 'vocabulary/'.$PARAMETERS['languages']['set'].'.vocabulary.php';
require 'includes/functions.inc.php';
//Eseguo la connessione al database
$handleDBConnection = gdrcd_connect();
//Ricevo il tempo di reload
$i_ref_time = gdrcd_filter_get($_GET['ref']);
/**********************************************************************************/
if((gdrcd_filter_get($_REQUEST['chat'])=='yes')&&(empty($_SESSION['login'])===FALSE))
{
/*Aggiornamento chat*/
/*Se ho inviato un azione*/
if ((gdrcd_filter('get',$_POST['op'])=='take_action')&&(($PARAMETERS['mode']['skillsystem']=='ON')||($PARAMETERS['mode']['dices']=='ON')))
{
$actual_healt = gdrcd_query("SELECT salute FROM personaggio WHERE nome = '".$_SESSION['login']."'");
if (gdrcd_filter('get',$_POST['id_ab'])!='no_skill')
{
if ($actual_healt['salute']>0)
{
$skill = gdrcd_query("SELECT nome, car FROM abilita WHERE id_abilita = ".gdrcd_filter('num',$_POST['id_ab'])." LIMIT 1");
$car = gdrcd_query("SELECT car".gdrcd_filter('num',$skill['car'])." AS car_now FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
$bonus = gdrcd_query("SELECT SUM(oggetto.bonus_car".gdrcd_filter('num',$skill['car']).") as bonus FROM oggetto JOIN clgpersonaggiooggetto ON clgpersonaggiooggetto.id_oggetto=oggetto.id_oggetto WHERE clgpersonaggiooggetto.nome='".$_SESSION['login']."' AND clgpersonaggiooggetto.posizione > 1");
$racial_bonus = gdrcd_query("SELECT bonus_car".gdrcd_filter('num',$skill['car'])." AS racial_bonus FROM razza WHERE id_razza IN (SELECT id_razza FROM personaggio WHERE nome='".$_SESSION['login']."')");
$rank = gdrcd_query("SELECT grado FROM clgpersonaggioabilita WHERE id_abilita=".gdrcd_filter('num',$_POST['id_ab'])." AND nome='".$_SESSION['login']."' LIMIT 1");
$motivazione=gdrcd_filter('in',$_POST['motivazione']);
if ($PARAMETERS['mode']['dices']=='ON')
{
mt_srand((double)microtime()*1000000);
$die = mt_rand(1,(int)$_POST['dice']);
$chat_dice_msg = gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['die']).' '.gdrcd_filter('num',$die).' (d'.gdrcd_filter('out',(int)$_POST['dice']).'),';
}
else
{
$chat_dice_msg = '';
$die = 0;
}
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'C', '".$_SESSION['login'].' '.gdrcd_capital_letter(gdrcd_filter('in', $motivazione)).' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['uses']).'
'.gdrcd_filter('in',$skill['nome']).': '.gdrcd_filter('in',$PARAMETERS['names']['stats']['car'.$skill['car'].'']).' '.gdrcd_filter('num',$car['car_now']+$racial_bonus['racial_bonus']).' '.$chat_dice_msg.' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['ramk']).' '.gdrcd_filter('num',$rank['grado']).', '.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['items']).' '.gdrcd_filter('num',$bonus['bonus']).',
bonus/malus
'.$_POST['bonusmalus'].',
'.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['sum']).' '.(gdrcd_filter('num',$car['car_now']+$racial_bonus['racial_bonus'])+gdrcd_filter('num',$die)+gdrcd_filter('num',$rank['grado'])+gdrcd_filter('in',$bonus['bonus'])+$_POST['bonusmalus'])."')");
}
else
{
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in', $_SESSION['login']))."', NOW(), 'S', '".
gdrcd_filter('in',$MESSAGE['status_pg']['exausted'])."')");
}
/** * Tiro su caratteristica
* @author Blancks
*/
}
else if (gdrcd_filter('get', $_POST['id_stats']) != 'no_stats' && gdrcd_filter('get',$_POST['dice']) != 'no_dice')
{
mt_srand((double)microtime()*1000000);
$die=mt_rand(1,gdrcd_filter('num', (int)$_POST['dice']));
$id_stats = explode('_', $_POST['id_stats']);
$car = gdrcd_query("SELECT car".gdrcd_filter('num',$id_stats[1])." AS car_now FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
$racial_bonus = gdrcd_query("SELECT bonus_car".gdrcd_filter('num',$id_stats[1])." AS racial_bonus FROM razza WHERE id_razza IN (SELECT id_razza FROM personaggio WHERE nome='".$_SESSION['login']."')");
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, motivazione, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), '".gdrcd_capital_letter(gdrcd_filter('in', $motivazione))."', 'C', '".$_SESSION['login'].' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['uses']).' '.gdrcd_filter('in',$PARAMETERS['names']['stats']['car'.$id_stats[1]]).': '.gdrcd_filter('in',$PARAMETERS['names']['stats']['car'.$id_stats[1].'']).' '.gdrcd_filter('num',$car['car_now']+$racial_bonus['racial_bonus']).', '.gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['die']).' '.gdrcd_filter('num',$die).', '.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['sum']).' '.(gdrcd_filter('num',$car['car_now']+$racial_bonus['racial_bonus'])+gdrcd_filter('num',$die)+gdrcd_filter('num',$rank['grado'])+gdrcd_filter('in',$bonus['bonus']))."')");
}
else if (gdrcd_filter('get',$_POST['dice'])!='no_dice')
{
mt_srand((double)microtime()*1000000);
$die=mt_rand(1,gdrcd_filter('num',$_POST['dice']));
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'D', '".$_SESSION['login'].' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['die']['cast']).gdrcd_filter('num',$_POST['dice']).': '.gdrcd_filter('in',$MESSAGE['chat']['commands']['die']['sum']).' '.gdrcd_filter('num',$die)."')");
}
else if (gdrcd_filter('get',$_POST['id_item'])!='no_item')
{
$item=explode('-', gdrcd_filter('in',$_POST['id_item']));
if ($item[1]==1)
{
$query="DELETE FROM clgpersonaggiooggetto WHERE nome ='".$_SESSION['login']."' AND id_oggetto='".gdrcd_filter('num',$item[0])."' LIMIT 1";
}
elseif ($item[1]>1)
{
$query="UPDATE clgpersonaggiooggetto SET cariche = cariche -1 WHERE nome ='".$_SESSION['login']."' AND id_oggetto='".gdrcd_filter('num',$item[0])."' LIMIT 1";
}
gdrcd_query($query);
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'O', '".$_SESSION['login'].' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['die']['item']).': '.gdrcd_filter('in',$item[2])."')");
}
}
/*Se ho inviato un messaggio*/
if (gdrcd_filter('get',$_POST['op'])=='new_chat_message')
{
$actual_healt = gdrcd_query("SELECT salute FROM personaggio WHERE nome = '".$_SESSION['login']."'");
$chat_message=gdrcd_filter('in', gdrcd_angs($_POST['message']));
$tag_n_beyond=gdrcd_filter('in',$_POST['tag']);
$type=gdrcd_filter('in',$_POST['type']);
$first_char=substr($chat_message,0,1);
if($PARAMETERS['mode']['exp_by_chat']=='ON')
{
$msg_length = strlen($chat_message);
$char_needed = gdrcd_filter('num', $PARAMETERS['settings']['exp_by_chat']['number']);
$exp_bonus = $msg_length/$char_needed;
}
if($type < "5")
{
if(!empty($_POST['message'])){
//E' un messaggio.
/*Verifico il tipo di messaggio*/
if (($type=="4")||($first_char=="@"))
{ /*Sussurro*/
$m_type='S';
if($type!='4')
{
$dest_end = strpos(substr($chat_message, 1), "@");
if ($dest_end === FALSE)
{
/*Se il destinatario e' mal formattato lo prendo come parlato*/
$m_type='P';
}
else
{
$tag_n_beyond=gdrcd_capital_letter(substr($chat_message, 1, $dest_end));
$chat_message=substr($chat_message, $dest_end+2);
}
}//if
if ($m_type=='S')
{/*Se il sussurro e' inviato correttamente*/
$r_check_dest = gdrcd_query("SELECT nome FROM personaggio WHERE DATE_ADD(ultimo_refresh, INTERVAL 2 MINUTE) > NOW() AND ultimo_luogo = ".$_SESSION['luogo']." AND nome = '".$tag_n_beyond."' LIMIT 1", 'result');
if (gdrcd_query($r_check_dest, 'num_rows') < 1)
{
$chat_message=$tag_n_beyond.' '.gdrcd_filter('in',$MESSAGE['chat']['whisper']['no']);
$tag_n_beyond=$_SESSION['login'];
}
}
else
{
$tag_n_beyond=$_SESSION['tag'];
}
}
else if($first_char == "#")
{ //Dado
$m_type ='C';
if (preg_match("/^#d+([1-9][0-9]*)$/si", $chat_message,$matches))
{
$nstring = $matches[1];
$die = mt_rand(1,(int)$nstring);
$chat_message = "A ".$_SESSION['login']." esce ".$die." su ".$nstring;
}
else if (preg_match("/^#([1-9][0-9]*)d+([1-9][0-9]*)$/si", $chat_message,$matches))
{
$numero = (int)$matches[1];
$dado = (int)$matches[2];
$x = 0;
$chat_message = "A ".$_SESSION['login']." esce ";
for($x = 0; $x < $numero; $x++)
{
$die = mt_rand(1,$dado);
$chat_message .= $die." su ".$dado.", ";
}
$chat_message = substr($chat_message, 0, -2);
}
}
elseif (($type=="1")||($first_char=="+"))
{ /*Azione*/
if ($actual_healt['salute']>0)
{
if ($first_char=="+")
{
$chat_message=substr($chat_message, 1);
}
$m_type='A';
$_SESSION['tag']=$tag_n_beyond;
}
else
{
$m_type='S';
$tag_n_beyond=$_SESSION['login'];
$chat_message=gdrcd_filter('in',$MESSAGE['status_pg']['exausted']);
}
}
elseif ((($type=="2")||($first_char=="§")||($first_char=="-")||($first_char=="*"))&&($_SESSION['permessi']>=GAMEMASTER))
{ /*Master*/
$m_type='M';
if(($first_char=="§")||($first_char=="-"))
{
$chat_message=substr($chat_message, 1);
}
if($first_char=="*")
{
$chat_message=substr($chat_message, 1);
$m_type='I';
}
}
elseif (($type=="3")&&($_SESSION['permessi']>=GAMEMASTER))
{ /*PNG*/
$m_type='N';
$_SESSION['tag']=$tag_n_beyond;
}
else if (($type=="0") || (empty($type)===TRUE))
{ /*Parlato*/
if ($actual_healt['salute']>0)
{
$m_type='P';
$_SESSION['tag']=$tag_n_beyond;
}
else
{
$m_type='S';
$tag_n_beyond=$_SESSION['login'];
$chat_message=gdrcd_filter('in',$MESSAGE['status_pg']['exausted']);
}
} //elseif
/*Inserisco il messaggio*/
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in', $tag_n_beyond))."', NOW(), '".$m_type."', '".$chat_message."')");
if($PARAMETERS['mode']['exp_by_chat']=='ON')
{
if (($m_type == 'A' || $m_type == 'P' || $m_type == 'M') && ($msg_length>=$char_needed))
{
/* XP IN QUALSIASI CHAT */
//gdrcd_query("UPDATE personaggio SET esperienza = esperienza + 1 WHERE nome = '".$_SESSION['login']."' LIMIT 1");
/* NO XP in PVT*/
$chat_id = gdrcd_query("SELECT * FROM mappa where id = '".$_SESSION['luogo']."'" );
if ($chat_id['privata']==1) {} else {
gdrcd_query("UPDATE personaggio SET esperienza = esperienza + 1 WHERE nome = '".$_SESSION['login']."' LIMIT 1");
}
}
/* MAX XP
$massimaexpalgiorno = 100;
$check_exp_giornaliera = gdrcd_query("SELECT exp_giornaliera FROM personaggio where name = '".$_SESSION['login']."'" );
if ($check_exp_giornaliera >= $massimaexpalgiorno) {} else {
$chat_id = gdrcd_query("SELECT * FROM mappa where id = '".$_SESSION['luogo']."'" );
if ($chat_id['privata']==1) {} else {
gdrcd_query("UPDATE personaggio SET esperienza = esperienza + 1 WHERE nome = '".$_SESSION['login']."' LIMIT 1");
gdrcd_query("UPDATE personaggio SET exp_giornaliera = exp_giornaliera + 1 WHERE nome = '".$_SESSION['login']."' LIMIT 1");
}*/
}
include '../lavoro_chat.inc.php';
}
} else { //Altrimenti e' un comando di stanza privata.
$info = gdrcd_query("SELECT invitati, nome, proprietario FROM mappa WHERE id=".$_SESSION['luogo']."");
$ok_command=FALSE;
if($info['proprietario']==$_SESSION['login'])
{
$ok_command=TRUE;
}
if(strpos($_SESSION['gilda'],$info['proprietario'])!=FALSE)
{
$ok_command=TRUE;
}
if (($type=="5")&&($ok_command===TRUE))
{ //invita
gdrcd_query("UPDATE mappa SET invitati = '".$info['invitati'].','.gdrcd_capital_letter(strtolower(gdrcd_filter('in', $tag_n_beyond)))."' WHERE id=".$_SESSION['luogo']." LIMIT 1");
gdrcd_query("INSERT INTO chat ( stanza, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", 'System message', '".$_SESSION['login']."', NOW(), 'S', '".gdrcd_capital_letter(gdrcd_filter('in', $tag_n_beyond)).' '.$MESSAGE['chat']['warning']['invited']."')");
if(empty($_POST['tag'])===FALSE)
{
gdrcd_query("INSERT INTO messaggi ( mittente, destinatario, spedito, letto, testo ) VALUES ('System message', '".gdrcd_capital_letter(gdrcd_filter('in',$_POST['tag']))."', NOW(), 0, '".$_SESSION['login'].' '.$MESSAGE['chat']['warning']['invited_message'].' '.$info['nome']."')");
}
}
else if (($type=="6")&&($ok_command===TRUE))
{ //caccia
$scaccia=str_replace(','.gdrcd_capital_letter(gdrcd_filter('in', $tag_n_beyond)), '',$info['invitati']);
gdrcd_query("UPDATE mappa SET invitati = '".$scaccia."' WHERE id=".$_SESSION['luogo']." LIMIT 1");
gdrcd_query("INSERT INTO chat ( stanza, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", 'System message', '".$_SESSION['login']."', NOW(), 'S', '".gdrcd_capital_letter(gdrcd_filter('in', $tag_n_beyond)).' '.$MESSAGE['chat']['warning']['expelled']."')");
}
else if ($ok_command===TRUE)
{ //elenco
$ospiti=str_replace(',', '', $info['invitati']);
gdrcd_query("INSERT INTO chat ( stanza, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", 'System message', '".$_SESSION['login']."', NOW(), 'S', '".$MESSAGE['chat']['warning']['list'].': '.$ospiti."')");
}//else
}//else
}
else//if(op)
{
$_SESSION['tag'] = gdrcd_filter('in',$_POST['tag']);
}
/*Carico i nuovi messaggi*/
if(empty($last_message)) $last_message = 0;
/** * Scorrimento dei messaggi in chat, verifico se non è stato invertito il flusso, in caso modifico l'ordinamento della query
* @author Blancks
*/
$typeOrder = 'ASC';
if ($PARAMETERS['mode']['chat_from_bottom']=='ON')
{
$typeOrder = 'DESC';
}
/** * Controllo per impedire il print in chat delle azioni dei precedenti proprietari di una stanza privata
* Per stanze non private ora_prenotazione equivarrà ad un tempo sempre inferiore all'orario dell'azione inviata
* facendo risultare quindi sempre veritiero il controllo in questo caso.
* @author Blancks
*/
$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
FROM chat
INNER JOIN mappa ON mappa.id = chat.stanza
LEFT JOIN personaggio ON personaggio.nome = chat.mittente
WHERE chat.id > ".$last_message." AND stanza = ".$_SESSION['luogo']." AND chat.ora > IFNULL(mappa.ora_prenotazione, '0000-00-00 00:00:00') AND DATE_SUB(NOW(), INTERVAL 30 MINUTE) < ora ORDER BY id ". $typeOrder, 'result');
while ($row = gdrcd_query($query, 'fetch'))
{
//Impedisci XSS nelle immagini
$row['url_img_chat']=gdrcd_filter('fullurl', $row['url_img_chat']);
if ($PARAMETERS['mode']['chaticons']=='ON')
{
$icone_chat=explode(";",gdrcd_filter('out', $row['imgs']));
$add_icon = '<span class="chat_icons"> <img class="presenti_ico" src="themes/'.$PARAMETERS['themes']['current_theme'].'/imgs/races/'.$icone_chat[1].'"><img class="presenti_ico" src="imgs/icons/testamini'.$icone_chat[0].'.png"> </span>';
}
switch ($row['tipo'])
{
case 'P':
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '<div class="chat_row_'.$row['tipo'].'">';
/** * Avatar di chat
*@author Blancks
*/
if ($PARAMETERS['mode']['chat_avatar']=='ON' && !empty($row['url_img_chat']))
{
$add_chat .='<img src="'.$row['url_img_chat'].'" class="chat_avatar" style="width:'.$PARAMETERS['settings']['chat_avatar']['width'].'px; height:'.$PARAMETERS['settings']['chat_avatar']['height'].'px;" />';
}
$add_chat.= '<span class="chat_time">'.gdrcd_format_time($row['ora']).'</span>';
if ($PARAMETERS['mode']['chaticons']=='ON')
{
$add_chat.= $add_icon;
}
$add_chat.= '<span class="chat_name"><a class="link_ale" href="main.php?page=scheda&pg='.$row['mittente'].'" onclick="Javascript: document.getElementById(\'tag\').value=\''.$row['mittente'].'\'; document.getElementById(\'type\')[2].selected = \'1\'; document.getElementById(\'message\').focus();">'.$row['mittente'].'</a>';
if(empty ($row['destinatario']) === FALSE )
{
$add_chat.= '<span class="chat_tag"> ['.gdrcd_filter('out',$row['destinatario']).']</span>';
}
$add_chat.=': </span> ';
$add_chat.= '<span class="chat_msg'.$row['tipo'].'">'.gdrcd_chatme($_SESSION['login'], gdrcd_chatcolor(gdrcd_filter('out',$row['testo']))).'</span>';
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
if ($PARAMETERS['mode']['chat_avatar']=='ON')
$add_chat .= '<br style="clear:both;" />';
$add_chat.= '</div>';
break;
case 'A':
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '<div class="chat_row_'.$row['tipo'].'">';
/** * Avatar di chat
*@author Blancks
*/
if ($PARAMETERS['mode']['chat_avatar']=='ON' && !empty($row['url_img_chat']))
{
$add_chat .='<img src="'.$row['url_img_chat'].'" class="chat_avatar" style="width:'.$PARAMETERS['settings']['chat_avatar']['width'].'px; height:'.$PARAMETERS['settings']['chat_avatar']['height'].'px;" />';
}
$add_chat.= '<span class="chat_time">'.gdrcd_format_time($row['ora']).'</span>';
if ($PARAMETERS['mode']['chaticons']=='ON')
{
$add_chat.= $add_icon;
}
$add_chat.= '<span class="chat_name"><a class="link_ale" href="main.php?page=scheda&pg='.$row['mittente'].'" onclick="Javascript: document.getElementById(\'tag\').value=\''.$row['mittente'].'\'; document.getElementById(\'type\')[2].selected = \'1\'; document.getElementById(\'message\').focus();">'.$row['mittente'].'</a>';
if(empty ($row['destinatario']) === FALSE )
{
$add_chat.= '<span class="chat_tag"> ['.gdrcd_filter('out',$row['destinatario']).']</span>';
}
$add_chat.='</span> ';
$add_chat.= '<span class="chat_msg'.$row['tipo'].'">'.gdrcd_chatme($_SESSION['login'], gdrcd_chatcolor(gdrcd_filter('out',$row['testo']))).'</span>';
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
if ($PARAMETERS['mode']['chat_avatar']=='ON')
$add_chat .= '<br style="clear:both;" />';
$add_chat.= '</div>';
break;
case 'S':
if ($_SESSION['login']==$row['destinatario'])
{
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '<div class="chat_row_'.$row['tipo'].'">';
$add_chat.= '<span class="chat_name">'.$row['mittente'].' '.$MESSAGE['chat']['whisper']['by'].': </span> ';
$add_chat.= '<span class="chat_msg'.$row['tipo'].'">'.gdrcd_filter('out',$row['testo']).'</span>';
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '</div>';
} else if ($_SESSION['login']==$row['mittente'])
{
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '<div class="chat_row_'.$row['tipo'].'">';
$add_chat.= '<span class="chat_msg">'.$MESSAGE['chat']['whisper']['to'].' '.gdrcd_filter('out',$row['destinatario']).': </span>';
$add_chat.= '<span class="chat_msg">'.gdrcd_filter('out',$row['testo']).'</span>';
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '</div>';
} else if (($_SESSION['permessi']>=MODERATOR)&&($PARAMETERS['mode']['spyprivaterooms']=='ON'))
{
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '<div class="chat_row_'.$row['tipo'].'">';
$add_chat.= '<span class="chat_msg">'.$row['mittente'].' '.$MESSAGE['chat']['whisper']['from_to'].' '.gdrcd_filter('out',$row['destinatario']).' </span>';
$add_chat.= '<span class="chat_msg">'.gdrcd_filter('out',$row['testo']).'</span>';
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '</div>';
}
break;
case 'N':
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '<div class="chat_row_'.$row['tipo'].'">';
$add_chat.= '<span class="chat_time">'.gdrcd_format_time($row['ora']).'</span>';
$add_chat.= '<span class="chat_name">'.$row['destinatario'].'</span> ';
$add_chat.= '<span class="chat_msg'.$row['tipo'].'">'.gdrcd_chatcolor(gdrcd_filter('out',$row['testo'])).'</span>';
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '</div>';
break;
case 'M':
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '<div class="chat_row_'.$row['tipo'].'">';
$add_chat.= '<span class="chat_master">'.gdrcd_chatme_master($_SESSION['login'], gdrcd_filter('out',$row['testo'])).'</span>';
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '</div>';
break;
case 'I':
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '<div class="chat_row_'.$row['tipo'].'">';
$add_chat.= '<img class="chat_img" src="'.gdrcd_filter('fullurl',$row['testo']).'" />';
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '</div>';
break;
case 'C':
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '<div class="chat_row_'.$row['tipo'].'">';
$add_chat.= '<span class="chat_time">'.gdrcd_format_time($row['ora']).'</span>';
$add_chat.= '<span class="chat_msg'.$row['tipo'].'">'.gdrcd_filter('out',$row['testo']).'</span>';
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '</div>';
break;
case 'D':
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '<div class="chat_row_'.$row['tipo'].'">';
$add_chat.= '<span class="chat_time">'.gdrcd_format_time($row['ora']).'</span>';
$add_chat.= '<span class="chat_msg'.$row['tipo'].'">'.gdrcd_filter('out',$row['testo']).'</span>';
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '</div>';
break;
case 'O':
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '<div class="chat_row_'.$row['tipo'].'">';
$add_chat.= '<span class="chat_time">'.gdrcd_format_time($row['ora']).'</span>';
$add_chat.= '<span class="chat_msg'.$row['tipo'].'">'.gdrcd_filter('out',$row['testo']).'</span>';
/** * Fix problema visualizzazione spazi vuoti con i sussurri
* @author eLDiabolo
*/
$add_chat.= '</div>';
break;
}
if ($row['id'] > (int)$last_message)
$last_message=$row['id'];
}
gdrcd_query($query, 'free');
$_SESSION['last_message']=$last_message;
}//if
/******************************************************************************************/
?>
<html>
<head>
<?php
if(gdrcd_filter('get',$_REQUEST['chat'])=='yes')
{
echo '<script type="text/javascript"> function echoChat(){';
/** * Gestione dell'ordinamento
* @author Blancks
*/
if ($PARAMETERS['mode']['chat_from_bottom']=='OFF')
{
echo 'parent.document.getElementById(\'pagina_chat\').innerHTML+= '.json_encode((string)$add_chat).';';
echo 'scrolling = parent.document.getElementById(\'pagina_chat\').scrollHeight;';
}
elseif ($PARAMETERS['mode']['chat_from_bottom']=='ON')
{
echo 'parent.document.getElementById(\'pagina_chat\').innerHTML= '.json_encode((string)$add_chat).'+parent.document.getElementById(\'pagina_chat\').innerHTML;';
echo 'scrolling = 0;';
}
/** * Gestione intelligente della scrollbar
* Forza lo scroll solo quando ci sono nuovi messaggi
* @author Blancks
*/
if (!empty($add_chat))
echo 'parent.document.getElementById(\'pagina_chat\').scrollTop = scrolling;';
if ((gdrcd_filter('get',$_POST['op'])=='take_action')||(gdrcd_filter('get',$_POST['op'])=='new_chat_message'))
{
if($PARAMETERS['mode']['skillsystem']=='ON')
{
echo 'parent.document.getElementById(\'chat_form_actions\').reset();';
}
echo 'parent.document.getElementById(\'chat_form_messages\').reset();
parent.document.getElementById(\'chat_form_messages\').elements["tag"].value=\''.$_SESSION["tag"].'\';';
}//if
echo '}</script>';
}
?>
<!--meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="refresh" content="<?php echo $i_ref_time; ?>">
<link rel="stylesheet" href="../themes/<?php echo $PARAMETERS['themes']['current_theme'];?>/presenti.css" TYPE="text/css">
<link rel="stylesheet" href="../themes/<?php echo $PARAMETERS['themes']['current_theme'];?>/main.css" TYPE="text/css">
<link rel="stylesheet" href="../themes/<?php echo $PARAMETERS['themes']['current_theme'];?>/chat.css" TYPE="text/css">
</head>
<body class="transparent_body" <?php if(gdrcd_filter('get',$_REQUEST['chat'])=='yes'){ echo 'onLoad="echoChat();"';} ?> >
<?php
//controlla sessione
//controlla esilio
?>
24/05/2020 15:42:16
dal codice che hai postato sembra che tu non abbia seguito tutta la procedura.
Hai controllato il file functions?
24/05/2020 16:31:19 e modificato da animeanddragons il 24/05/2020 16:32:38
Si ASSOLUTAMENTE. Ho provato più volte in modo minuzioso, attentissimo anche alla minima virgola. Quello che ho postato è il codice PULITO e ATTUALMENTE FUNZIONANTE privo della procedura sopra illustrata.
Faccio vedere anche il file fuction PULITO. ci sto dietro da settimane non ne vengo a capo.
<?php
/**
* Funzioni di core di gdrcd
* Il file contiene una revisione del core originario introdotto in GDRCD5
* @version 5.4
* @author Breaker
*/
/**
* Funzionalità di dialogo col database
* Set di funzioni da core che implementano il dialogo gestito col db
*/
/**
* Connettore al database MySql
*/
function gdrcd_connect()
{
static $db_link = false;
if ($db_link === false)
{
$db_user = $GLOBALS['PARAMETERS']['database']['username'];
$db_pass = $GLOBALS['PARAMETERS']['database']['password'];
$db_name = $GLOBALS['PARAMETERS']['database']['database_name'];
$db_host = $GLOBALS['PARAMETERS']['database']['url'];
$db_error = $GLOBALS['MESSAGE']['error']['db_not_found'];
#$db = mysql_connect($db_host, $db_user, $db_pass)or die(gdrcd_mysql_error());
#mysql_select_db($db_name)or die(gdrcd_mysql_error($db_error));
$db_link = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
mysqli_set_charset($db_link, "utf8");
if (mysqli_connect_errno())
gdrcd_mysql_error($db_error);
}
return $db_link;
}
/**
* Chiusura della connessione col db MySql
* @param resource $db: una connessione mysqli
*/
function gdrcd_close_connection($db)
{
mysqli_close($db);
}
/**
* Gestore delle query, offre una basilare astrazione del database per la maggior parte delle funzionalità del database più usate.
* @param string|mysqli_result $sql: il codice SQL da inviare al database o una risorsa risultato di MySqli
* @param string $mode: La modalità con cui eseguire la query. Default "query"
* Modalità accettate:
* query: esegue la query e ritorna come risultato la prima riga del resultset
* result: esegue la query e ritorna la risorsa MySql associata al risultato
* num_rows: accetta come parametro una risorsa mysqli e ritorna il numero di righe nel resultset
* fetch: accetta come parametro una risorsa mysqli e ritorna il successivo risultato dal resultset come array
* object: uguale a fetch, eccetto che ritorna un oggetto al posto di un array
* free: libera la memoria occupata dalla risorsa mysqli passata in $sql
* last_id: ritorna l'id del record generato dall'ultima query, se non era una INSERT o UPDATE ritorna 0. In questo caso $sql non viene considerato
* affected: ritorna il numero di record toccati dall'ultima query (INSERT, UPDATE, DELETE o SELECT). In questo caso $sql non viene considerato
* @return un booleano in caso di esecuzione di query non SELECT e modalità 'query'. Altrimenti ritorna come specificato nella descrizione di $mode
*/
function gdrcd_query($sql, $mode = 'query')
{
$db_link = gdrcd_connect();
switch (strtolower(trim($mode)))
{
case 'query':
switch (strtoupper(substr(trim($sql), 0, 6)))
{
case 'SELECT':
$result = mysqli_query($db_link, $sql)or die(gdrcd_mysql_error($sql));
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
mysqli_free_result($result);
return $row;
break;
default:
return mysqli_query($db_link, $sql)or die(gdrcd_mysql_error($sql));
break;
}
case 'result':
$result = mysqli_query($db_link, $sql)or die(gdrcd_mysql_error($sql));
return $result;
break;
case 'num_rows':
return (int)mysqli_num_rows($sql);
break;
case 'fetch':
$row = mysqli_fetch_array($sql, MYSQLI_BOTH);
return $row;
break;
case 'object':
$row = mysqli_fetch_object($sql);
return $row;
break;
case 'free':
return mysqli_free_result($sql);
break;
case 'last_id':
return mysqli_insert_id($db_link);
break;
case 'affected':
return (int)mysqli_affected_rows($db_link);
break;
}
}
/** Funzione per l'arresto */
function gdrcd_controllo_prigioni($pg)
{
$query = "SELECT prigioni FROM personaggio WHERE nome='".gdrcd_filter('in', $pg)."' AND prigioni = 1 LIMIT 1";
$result = gdrcd_query($query,'result');
$prigioni = gdrcd_query($result,'num_rows');
return $prigioni;
}
/**
* Funzione di recupero delle colonne e della loro dichiarazione della tabella specificata.
* Si usa per la verifica dell'aggiornamento db da vecchie versioni di gdrcd5
* @param string $table: il nome della tabella da controllare
* @return un oggetto contenente la descrizione della tabella negli attributi
*/
function gdrcd_check_tables($table)
{
$result = gdrcd_query("SELECT * FROM $table LIMIT 1", 'result');
$describe = gdrcd_query("SHOW COLUMNS FROM $table", 'result');
$i = 0;
$output = array();
while ($field = gdrcd_query($describe, 'object'))
{
#echo $i, "<br>";
$defInfo = mysqli_fetch_field_direct($result, $i);
$field->auto_increment = (strpos($field->Extra, 'auto_increment') === FALSE ? 0 : 1);
$field->definition = $field->Type;
if ($field->Null == 'NO' && $field->Key != 'PRI')
$field->definition .= ' NOT NULL';
if ($field->Default)
$field->definition .= " DEFAULT '" . mysqli_real_escape_string(gdrcd_connect(), $field->Default) . "'";
if ($field->auto_increment)
$field->definition .= ' AUTO_INCREMENT';
switch ($field->Key)
{
case 'PRI': $field->definition .= ' PRIMARY KEY'; break;
case 'UNI': $field->definition .= ' UNIQUE KEY'; break;
case 'MUL': $field->definition .= ' KEY'; break;
}
$field->len = $defInfo->length;
$output[$field->Field] = $field;
++$i;
unset($defInfo);
}
gdrcd_query($describe, 'free');
return $output;
}
/**
* Gestione degli errori tornati dalle query
* @param string $details: una descrizione dell'errore avvenuto
* @return una stringa HTML che descrive l'errore riscontrato
*/
function gdrcd_mysql_error($details = false)
{
$backtrace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 50);
$error_msg = '<strong>GDRCD MySQLi Error</strong> [File: '. basename($backtrace[1]['file']) .'; Line: '. $backtrace[1]['line'] .']<br>'.
'<strong>Error Code</strong>: '. mysqli_errno(gdrcd_connect()) .'<br>'.
'<strong>Error String</strong>: '. mysqli_error(gdrcd_connect());
if ($details !== false)
$error_msg .= '<br><br><strong>Error Detail</strong>: ' . $details;
return $error_msg;
}
/**
* Funzionalità di escape
* Set di funzioni escape per filtrare i possibili contenuti introdotti da un utente ;-)
*/
/**
* Funzione di hashing delle password. Decide la modalità in base alle spefiche in config.inc.php. Attualmente solo MD5 e SHA-1 sono supportate
* @param string $str: la password o stringa di cui calcolare l'hash
* @return l'hash calcolato a partire da $str con l'algoritmo specificato nella configurazione
*/
function gdrcd_encript($str)
{
$encript_password = $GLOBALS['PARAMETERS']['mode']['encriptpassword'];
$encript_algorithm = $GLOBALS['PARAMETERS']['mode']['encriptalgorithm'];
if ($encript_password == 'ON')
{
switch ($encript_algorithm)
{
case 'MD5':
$str = md5($str);
break;
case 'BCRYPT':
require_once(__DIR__.'/PasswordHash.php');
$hasher=new PasswordHash(8,true);
$str=$hasher->HashPassword($str);
break;
case 'SHA-1':
$str = sha1($str);
break;
}
}
return $str;
}
function gdrcd_password_check($pass,$stored){
$encript_password = $GLOBALS['PARAMETERS']['mode']['encriptpassword'];
$encript_algorithm = $GLOBALS['PARAMETERS']['mode']['encriptalgorithm'];
if ($encript_password == 'ON'){
switch ($encript_algorithm)
{
case 'MD5':
return $stored == md5($pass);
break;
case 'BCRYPT':
require_once(__DIR__.'/PasswordHash.php');
$hasher=new PasswordHash(8,true);
return $hasher->CheckPassword($pass,$stored);
break;
case 'SHA-1':
return $stored == sha1($pass);
break;
}
}
else {
return $pass == $stored;
}
}
/**
* TODO Controllo della validità della password
* Funzione work in progress, da implementare.
* Deve essere disabilitabile da config
* Funzionalità da ON/OFF:
* - numero di caratteri minimo scelto dall'utente
* - non accettazione di password contenenti lettere accentate
* - non accettazione di password troppo semplici (ad esempio uguali al nickname del personaggio)
* @param string $str: la password da controllare
* @return true se la password è valida, false altrimenti
*/
function gdrcd_check_pass($str){
return true;
}
/**
* Funzione di filtraggio di codici malevoli negli input utente
* @param string $what: modalità da utilizzare per controllare la stringa. Sono opzioni valide: in o get, num, out, addslashes, email, includes
* @param string $str: la stringa da controllare
* @return una versione filtrata di $str
*/
function gdrcd_filter($what, $str)
{
switch (strtolower($what))
{
case 'in':
case 'get':
$str = addslashes(str_replace('\\','',$str));
break;
case 'num':
$str = (int)$str;
break;
case 'out':
$str = htmlentities($str, ENT_QUOTES, 'utf-8');
break;
case 'addslashes':
$str = addslashes($str);
break;
case 'email':
$str = (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,4}$#is", $str))? $str : false;
break;
case 'includes':
$str = (preg_match("#[^:]#is"))? htmlentities($str, ENT_QUOTES) : false;
break;
case 'url':
$str = urlencode($str);
break;
case 'fullurl':
$str = filter_var(str_replace(' ', '%20', $str),FILTER_VALIDATE_URL,FILTER_FLAG_PATH_REQUIRED);
break;
}
return $str;
}
/**
* Funzioni di alias per gdrcd_filter()
*/
function gdrcd_filter_in($str){ return gdrcd_filter('in', $str); }
function gdrcd_filter_out($str){ return gdrcd_filter('out', $str); }
function gdrcd_filter_get($str){ return gdrcd_filter('get', $str); }
function gdrcd_filter_num($str){ return gdrcd_filter('num', $str); }
function gdrcd_filter_addslashes($str){ return gdrcd_filter('addslashes', $str); }
function gdrcd_filter_email($str){ return gdrcd_filter('email', $str); }
function gdrcd_filter_includes($str){ return gdrcd_filter('includes', $str); }
function gdrcd_filter_url($str){ return gdrcd_filter('url', $str); }
/**
* Funzione basilare di filtraggio degli elementi pericolosi in html
* Serve a consentire l'uso di html e css in sicurezza nelle zone editabili della scheda
* Il livello di filtraggio viene controllato da config: $PARAMETERS['settings']['html']
* @param string $str: la stringa da filtrare
* @return $str con gli elementi illegali sosituiti con una stringa di errore
*/
function gdrcd_html_filter($str)
{
$notAllowed = array(
"#(<script.*?>.*?(<\/script>)?)#is" => "Script non consentiti",
"#(<iframe.*?\/?>.*?(<\/iframe>)?)#is" => "Frame non consentiti",
"#(<object.*?>.*?(<\/object>)?)#is" => "Contenuti multimediali non consentiti",
"#(<embed.*?\/?>.*?(<\/embed>)?)#is" => "Contenuti multimediali non consentiti",
"#( on[a-zA-Z]+=\"?'?[^\s\"']+'?\"?)#is"=> "",
"#(javascript:[^\s\"']+)#is" => ""
);
if($GLOBALS['PARAMETERS']['settings']['html']==HTML_FILTER_HIGH){
$notAllowed=array_merge($notAllowed,array(
"#(<img.*?\/?>)#is" => "Immagini non consentite",
"#(url\(.*?\))#is" => "none",
));
}
return preg_replace(array_keys($notAllowed), array_values($notAllowed), $str);
}
/**
* Controlli di routine di gdrcd sui personaggi
* Set di funzione per semplificare controlli frequenti sui personaggi nell'engine
*/
/**
* Check validità della sessione utente
*/
function gdrcd_controllo_sessione()
{
if (empty($_SESSION['login']))
{
echo '<div class="error">', $GLOBALS['MESSAGE']['error']['session_expired'],
'<br />', $GLOBALS['MESSAGE']['warning']['please_login_again'],
'<a href="', $GLOBALS['PARAMETERS']['info']['site_url'], '">Homepage</a></div>';
die();
}
}
/**
* Controlla se l'utente è esiliato o meno
* @param string $pg: il nome del pg da ricercare
* @return true se il pg è esiliato, false altrimenti
*/
function gdrcd_controllo_esilio($pg)
{
$exiled = gdrcd_query("SELECT autore_esilio, esilio, motivo_esilio FROM personaggio WHERE nome='".gdrcd_filter('in', $pg)."' LIMIT 1");//TODO picco di complessità inutile per l'uso di LIKE. Mancanza di escape per db!
if(strtotime($exiled['esilio']) > time())
{
echo '<div class="error">', gdrcd_filter_out($pg), ' ',
gdrcd_filter_out($GLOBALS['MESSAGE']['warning']['character_exiled']), ' ',
gdrcd_format_date($exiled['esilio']), ' (', $exiled['motivo_esilio'], ' - ', $exiled['autore_esilio'], ')</div>';
return true;
}
return false;
}
/**
* Controlla se l'utente è loggato da pochi minuti. Utile per l'icona entra/esce
* @param string $time: data in un formato leggibile da strtotime()
* @return il numero di minuti passati da $time
*/
function gdrcd_check_time($time)
{
$time_hours = date('H', strtotime($time));
$time_minutes = date('i', strtotime($time));
if ($time_hours == date('H'))
{
return date('i')-$time_minutes;
}elseif ($time_hours == (date('H')-1) || $time_hours == (strftime('H')+11))
{
return date('i')-$time_minutes+60;
}
return 61;
}
/**
* Utilità
* Set di funzioni di utilità generica per l'engine
*/
/**
* Provvede al caricamento degli elementi nell'interfaccia
* E' approssimata ma funziona, se qualcuno vuol far di meglio si faccia avanti
* @param string $path: il percorso filesystem del file da includere
* @param array $params: un array di dati aggiuntivi passabili al modulo
*/
function gdrcd_load_modules($path, $params=[])
{
global $MESSAGE;
global $PARAMETERS;
if (file_exists($path)) {
include($path);
} else {
echo $MESSAGE['interface']['layout_not_found'];
}
}
/**
* Funzione di formattazione per la data nel formato italiano
* @param string $date_in: la data in un formato leggibile da strtotime()
* @return la data nel formato dd/mm/yyyy
*/
function gdrcd_format_date($date_in)
{
return date('d/m/Y', strtotime($date_in));
}
/**
* Funzione di formattazione del tempo nel formato italiano
* @param string $time_in: la data-ora in un formato leggibile da strtotime()
* @return l'ora nel formato hh:mm
*/
function gdrcd_format_time($time_in)
{
return date('H:i', strtotime($time_in));
}
/**
* Funzione di formattazione data completa nel formato italiano
* @param $datetime_in: la data e ora in formato leggibile da strtotime()
* @return la data/ora nel formato DD/MM/YYYY hh:mm
*/
function gdrcd_format_datetime($datetime_in)
{
return date('d/m/Y H:i', strtotime($datetime_in));
}
/**
* Funzione di formattazione data completa nel formato ita per nome file da catalogare
* @param string $datetime_in: la data e ora in formato leggibile da strtotime()
* @return data ora formattata nel formato YYYYMMDD_hhmm
*/
function gdrcd_format_datetime_cat($datetime_in)
{
return date('Ymd_Hi', strtotime($datetime_in));
}
/**
* Trasforma la prima lettera della parola in maiuscolo
* @param string $word: la parola da manipolare
* @return $word con solo la prima lettera maiuscola
*/
function gdrcd_capital_letter($word)
{
return ucwords(strtolower($word));
}
/**
* Genera una password casuale, esclusivamente alfabetica con lettere maiuscole
* @return una stringa casuale lunga 8 caratteri
*/
function gdrcd_genera_pass()
{
$pass = '';
for ($i=0; $i<8; ++$i){ $pass.= chr(mt_rand(0, 24) + ord("A")); }
return $pass;
}
/**
* BBcode nativo di GDRCD
* Secondo me, questo bbcode presenta non poche vulnerabilità.
* TODO Andrebbe aggiornata per essere più sicura
* @param string $str: la stringa con i bbcode da tradurre, dovrebbe già essere stata filtrata per l'output su pagina web
* @return $str con i tag bbcode tradotti in html
* @author Blancks
*/
function gdrcd_bbcoder($str){
global $MESSAGE;
$str=gdrcd_close_tags('quote',$str);
$search = array(
'#\n#',
'#\[BR\]#is',
'#\[B\](.+?)\[\/B\]#is',
'#\[i\](.+?)\[\/i\]#is',
'#\[U\](.+?)\[\/U\]#is',
'#\[center\](.+?)\[\/center\]#is',
'#\[img\](.+?)\[\/img\]#is',
'#\[redirect\](.+?)\[\/redirect\]#is',
'#\[url=(.+?)\](.+?)\[\/url\]#is',
'#\[color=(.+?)\](.+?)\[\/color\]#is',
'#\[quote(?::\w+)?\]#i',
'#\[quote=(?:"|"|\')?(.*?)["\']?(?:"|"|\')?\]#i',
'#\[/quote(?::\w+)?\]#si'
);
$replace = array(
'<br />',
'<br />',
'<span style="font-weight: bold;">$1</span>',
'<span style="font-style: italic;">$1</span>',
'<span style="border-bottom: 1px solid;">$1</span>',
'<div style="width:100%; text-align: center;">$1</div>',
'<img src="$1">',
'<meta http-equiv="Refresh" content="5;url=$1">',
'<a href="$1">$2</a>',
'<span style="color: $1;">$2</span>',
'<div class="bb-quote">'.$MESSAGE['interface']['forums']['link']['quote'].':<blockquote class="bb-quote-body">',
'<div class="bb-quote"><div class="bb-quote-name">$1 ha scritto:</div><blockquote class="bb-quote-body">',
'</blockquote></div>'
);
return preg_replace($search, $replace, $str);
}
/**
* Aggiunge la chiusura dei tag BBCode per impedire agli utenti di rompere l'HTML del sito
* @param array|string $tag: il tag da controllare, senza le parentesi quadre, può essere un array di tag
* @param $body: il testo in cui controllare
* @return Il testo corretto
* TODO aggiunge correttamente i tag non chiusi, ma non fa nulla se ci sono troppi tag di chiusura
*/
function gdrcd_close_tags($tag,$body){
if(is_array($tag)){
foreach($tag as $value){
$body=gdrcd_close_tags($value,$body);
}
}
else{
$opentags=preg_match_all('/\['.$tag.'/i', $body);
$closed = preg_match_all('/\[\/'.$tag.'\]/i', $body);
$unclosed = $opentags - $closed;
for ($i = 0; $i < $unclosed; $i++){
$body .= '[/'.$tag.']';
}
}
return $body;
}
/**
* Fa il redirect della pagina, diretto ocon delay
* @param $url: l'URL verso cui fare redirect
* @param $tempo: il numero di secondi da attendere prima di fare redirect. Se non attendere impostare a 0 o false
*/
function gdrcd_redirect($url,$tempo = FALSE )
{
if(!headers_sent() && $tempo == FALSE )
{
header('Location:' . $url);
}
elseif(!headers_sent() && $tempo != FALSE )
{
header('Refresh:' . $tempo . ';' . $url);
}
else
{
if($tempo == FALSE )
{
$tempo = 0;
}
echo "<meta http-equiv=\"refresh\" content=\"" . $tempo . ";" . $url . "\">";
}
}
/**
* Sostituisce eventuali parentesi angolari in coppia in una stringa con parentesi quadre
* @param string $str: la stringa da controllare
* @return $str con la coppie di parentesi angolari sostituite con parentesi quadre
*/
function gdrcd_angs($str)
{
$search = array(
'#\<(.+?)\>#is',
'#\<(.+?)>#is',
);
$replace = array(
'[$1]',
'[$1]',
);
return preg_replace($search, $replace, $str);
}
/**
* Colora in HTML le parti di testo comprese tra parentesi angolari o parentesi quadre
* Si usa in chat
* @param string $str: la stringa da controllare
* @return $str con la parti colorate
*/
function gdrcd_chatcolor($str)
{
$search = array(
'#\<(.+?)\>#is',
'#\[(.+?)\]#is',
);
$replace = array(
'<span class="color2"><$1></span>',
'<span class="color2"><$1></span>',
);
return preg_replace($search, $replace, $str);
}
/**
* Sottolinea in HTML una stringa presente in un testo. Usata per sottolineare il proprio nome in chat
* @param string $user: la stringa da sottolineare, in genere un nome utente
* @param string $str: la stringa in cui cercare e sottolineare $user
* @return $str con tutte le occorrenze di $user sottolineate
*/
function gdrcd_chatme($user, $str)
{
$search = $user;
$replace = '<span style="text-decoration:underline;">'.$search.'</span>';
return str_ireplace($search, $replace, $str);
}
/**
* TODO non ho capito a cosa serve
*/
function gdrcd_chatme_master($user, $str)
{
$search = $user;
$replace = '<span style="text-decoration:underline;">'.$search.'</span>';
return str_ireplace($search, $replace, $str);
}
/**
* Crea un campo di autocompletamento HTML5 (<datalist>) per vari contenuti
* @param string $str: specifica il soggetto di cui creare la lista. Attualmente è supportato solo 'personaggi', che crea una lista di tutti gli utenti del gdr
* @return il tag html <datalist> già pronto per essere stampato sulla pagina
*/
function gdrcd_list($str)
{
switch(strtolower($str))
{
case 'personaggi':
$list = '<datalist id="personaggi">';
$query = "SELECT nome FROM personaggio ORDER BY nome";
$characters=gdrcd_query($query, 'result');
while($option=gdrcd_query($characters, 'fetch'))
{
$list .= '<option value="'.$option['nome'].'" />';//TODO escape HTMl del nome!
}
gdrcd_query($characters, 'free');
$list .= '</datalist>';
break;
}
return $list;
}
25/05/2020 01:07:03
nulla. si blocca semplicemente la chat ho provato di tutto. scusate se ho postato i codici interi ma non so davvero più che pesci pijare ç_ç
25/05/2020 12:17:17
questo perchè come forma di difesa, gdrcd trasforma tutte le parentesi <> in parentesi [ ] (o era l'inverso)
Di base GDRCD nasce per avere due colori, uno per <> e l'altro per []...ma successivamente si autoescludono XD
Io ho risolto così, dentro function.inc.php, circa riga 690, tenendo il ref_header originale
function gdrcd_chatcolor_master($str)
{
$search = array(
'#\{(.+?)\}#is',
'#\[(.+?)\]#is',
);
$replace = array(
'<span class="c_master_1">{ $1 }</span>',
'<span class="c_master_2">« $1 »</span>',
);
return preg_replace($search, $replace, $str);
}
mettendolo quindi con le parentesi {} oppure puoi sostituire le {} con quel che ti pare
25/05/2020 12:41:23
nulla. mi impedisce di inviare anche le semplici azioni, come se il pulsante INVIO sia bloccato. Pare una maledizione
25/05/2020 12:49:19
Puoi copiare qui cosa hai adesso in functions alla parte:
function gdrcd_chatcolor_master($str)
25/05/2020 12:53:40 e modificato da animeanddragons il 25/05/2020 12:56:10
ciao e grazie anche a te per l'aiuto! *w*
Non ho la stringa gdrcd_chatcolor_master all'intenro del file FUCTION, ma ho questa qui alla riga 690-
function gdrcd_chatcolor($str)
{
$search = array(
'#\<(.+?)\>#is',
'#\[(.+?)\]#is',
);
$replace = array(
'<span class="color2"><$1></span>',
'<span class="color2"><$1></span>',
);
return preg_replace($search, $replace, $str);
}
solo che QUI, sotto $search = array( non compargliono le < > ma piuttosto le > potrebbe incidere quello?
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!
Imperion ↗
Raja Dunia ↗
Neverness to Everness ↗
Wuthering Waves ↗
Storie di Agarthi ↗
Fallen Gods ↗
New Orleans ↗
Seconda Era ↗
Tibia ↗