[RISOLTO - GDR 5.4.1] Doppio Colore azioni Master
Pagine → 1 2
25/05/2020 13:03:37
Allora non hai provato ad implementare la soluzione proposta?
Quindi il blocco dell'azione premendo invio non deriva da un test sulla funzione?
25/05/2020 13:07:59 e modificato da animeanddragons il 25/05/2020 13:08:51
Si ho provato e molto scrupolosamente, facendo attenzione che gli apostrofi e vari non vengano corrotti e tutto. MA con quella implementazione (nel file REF e FUCTION) si blocca tutto. Unico modo in cui funziona la chat è senza usare tali modifiche, ed i file "funzionanti" sono quelli interi che ho postato alla pagina precedente. Unica cosa che ho lasciato in modifica sono le classi nel CCS, che parcheggiate li non influiscono ovviamente.
Il problema è che così nelle azioni master il parlato viene semplicemente posto tra parentesi quadre senza cambio di colore
25/05/2020 13:24:57
Ecco... puoi provare a mettere la funzione come proposta e copiaincollare il codice qui? Così vediamo perché ti si blocca mettendola :)
25/05/2020 13:56:52
Ecco il file REF_HEADER
<?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;
/*QUA*/
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;
/*QUA*/
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
?>
--------------------------------------------------------
Ecco il file FUCTION-------------------------------------------------------------------
--------------------------------------------------------
<?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);
}
/**
* 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);
}
/**
* 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 15:01:59
/*QUA*/
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;
/*QUA*/
Ecco, il punto è questo.
Hai inserito la funzione gdrcd_chatcolor_master e va benissimo
Ma nel file function come hai messo la funzione gdrcd_chatcolor_master? Puoi incollarcela qui?
25/05/2020 15:39:42
Certo eccola :)
/**
* 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);
}
28/05/2020 01:58:38 e modificato da animeanddragons il 28/05/2020 02:18:00
CE L'HO FATTA!!!!
Non so spiegarlo, ma vi posto qui la soluzione a tutto.
Nel file FUCTION dovete modificare così questa parte, molto simile a quella originale errata:
/**
* 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);
}
Poi aggiungete sotto a gdrcd_chatcolor 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);
}
Dopo nel file Nel file REF_HEADERdovete sostituire così (molto simile anche questa):
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;
e infine aggiungere i nel file CHAT.CSS questo:
/* azione tra <> di un master = colore nero */
span.c_master_1{
color: #000;
}
/* azione tra [] convertite in <> di un master = colore grigio */
span.c_master_2{
color:#ccc;
}
SANTO CIELO TRE MESI. TRE!
27/02/2021 21:49:11
sembrerà una cavolata, ma se è COSI', prova a togliere lo spazio tra il punto e la G
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!
CRSED: F.O.A.D. ↗
Cafuné ↗
Wuthering Waves ↗
World of Tanks ↗
Exclusive Villa GdR ↗
Tiles Survive ↗
Hero Wars ↗
Neverness to Everness ↗