Pagine → [1] 2
25/05/2020 12:53:40
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);}
Amo il fantasy e gli anime! Che c'è di meglio?
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
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> <?phpif(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?>
<?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*/
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
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);}
/*** 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); }
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;
/* 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;}
23/02/2021 15:06:04
Scusate se rievoco questo post, ma avrei un quesito! Ho seguito tutte le indicazioni ma sulla tipologia di gdrcd 5.5 nel momento in cui inserisco la dicitura
. gdrcd_chatme_master($_SESSION['login']
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: » rossidaidioti » vivi1400 » nobara » animeanddragons » moonspell