par RiCK » mer. 17 févr. 2010 17:05
Quand j'aurai le temps ! je vous avez prévenu que c'était compliqué à réaliser.
J'ai essayé sous Internet Explorer 8 et effectivement comme tu l'as dit Murdoc, le logiciel commence à bugger après quelques minutes et finit par planter.... Sous Google Chrome ça n'a pas l'air d'aller beaucoup mieux.
Le tchat est fini dans le sens ou toutes les fonctionnalités que je voulais lui donner sont présentes, maintenant il est clair qu'il va falloir optimiser tout ça, pour que les ordinateurs ne plantent pas
En dessous je vous est mis un peu de code pour que vous puissiez avoir un aperçu de à quoi ressemble le tchat derrière la scène....
Code : Tout sélectionner
<script type="text/javascript">
var BOUCLAGE = false;
var textCouleur = "#000";
var textGras = "";
var textItalique = "";
var insert = "text";
function connexionTchat() {
if( document.getElementById("nomTchat") && document.getElementById("passTchat") ) {
var nom = document.getElementById("nomTchat").value;
var pass = .................................................
}
else
return false;
var ajax;
if(window.XMLHttpRequest)
ajax = new XMLHttpRequest();
else
if(window.ActiveXObject)
ajax = new ActiveXObject("Microsoft.XMLHTTP");
if(ajax) {
ajax.open('POST', '/pages/_connexionTchat.php', false);
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax.send("nom="+nom+"&pass="+pass);
if(ajax.readyState==4) {
var response = ajax.responseText;
var param = response.split("|||");
document.getElementById("messageErreur").innerHTML = response;
if( param[0] == "ok" ) {
document.getElementById("formulaire").style.display = "none";
document.getElementById("blocMembres").style.display = "block";
document.getElementById("dialogue").style.display = "block";
document.getElementById("affichageNomTchat").innerHTML = '<b>'+param[1]+' :</b>';
document.getElementById("nomTchat").value = '';
document.getElementById("passTchat").value = '';
document.getElementById("messageTchat").focus();
BOUCLAGE = true;
boucleTchat(true);
}
}
}
else
alert("Sorry but your browser don't support ajax");
return false;
}
function envoyerTchat() {
document.getElementById("messageTchat").focus();
if( document.getElementById("messageTchat") && document.getElementById("messageTchat").value.replace(/^\s+|\s+$/g,"").length > 0 )
var message = document.getElementById("messageTchat").value;
else{
return false;
}
document.getElementById("messageTchat").value = '';
message = message.replace(/&/g, "amp;");
var ajax1;
if(window.XMLHttpRequest)
ajax1 = new XMLHttpRequest();
else
if(window.ActiveXObject)
ajax1 = new ActiveXObject("Microsoft.XMLHTTP");
if(ajax1) {
ajax1.open('POST', '/pages/_envoyerTchat.php', false);
ajax1.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax1.send("type="+insert+"&message="+message+"&gras="+textGras+"&italique="+textItalique+"&couleur="+textCouleur);
if(ajax1.readyState==4) {
var response = ajax1.responseText;
if( response == "ko" ) {
document.getElementById("formulaire").style.display = "block";
document.getElementById("blocMembres").style.display = "none";
document.getElementById("dialogue").style.display = "none";
document.getElementById("messageErreur").innerHTML = "";
BOUCLAGE = false;
return false;
}
else
if( response.length > 1 && response != "ok" ) {
alert(response);
document.getElementById("messageTchat").value = message;
}
}
}
else
alert("Sorry but your browser don't support ajax");
actualiserTchat();
return false;
}
function actualiserTchat() {
if( document.getElementById("blocDialogue") && document.getElementById("blocDialogue").innerHTML.length > 30 )
var actuelTchat = document.getElementById("blocDialogue").innerHTML.substr( document.getElementById("blocDialogue").innerHTML.indexOf('<i')+27, 19 ); //date et heure exacte
else
var actuelTchat = "nouveau";
var ajax2;
if(window.XMLHttpRequest)
ajax2 = new XMLHttpRequest();
else
if(window.ActiveXObject)
ajax2 = new ActiveXObject("Microsoft.XMLHTTP");
if(ajax2) {
ajax2.open('POST', '/pages/_actualiserTchat.php', false);
ajax2.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax2.send('ok='+actuelTchat);
if(ajax2.readyState==4) {
var response = ajax2.responseText;
var rep = response.split("|||");
if( rep[0] == "ok" ) {
if( rep[1].length > 0 )
document.getElementById("blocDialogue").innerHTML = rep[1]+document.getElementById("blocDialogue").innerHTML;
}
else
if( rep[0] == "ko" ) {
document.getElementById("formulaire").style.display = "block";
document.getElementById("blocMembres").style.display = "none";
document.getElementById("dialogue").style.display = "none";
document.getElementById("messageErreur").innerHTML = "";
BOUCLAGE = false;
}
else
if( response.length > 1 )
alert(response);
}
}
else
alert("Sorry but your browser don't support ajax");
}
function enligneTchat() {
var ajax3;
if(window.XMLHttpRequest)
ajax3 = new XMLHttpRequest();
else
if(window.ActiveXObject)
ajax3 = new ActiveXObject("Microsoft.XMLHTTP");
if(ajax3) {
ajax3.open('POST', '/pages/_enligneTchat.php', false);
ajax3.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax3.send("ok=ok");
if(ajax3.readyState==4) {
var response = ajax3.responseText;
var rep = response.split("|||");
if( rep[0] == "ok" )
document.getElementById("blocMembres").innerHTML = '<b>Membres connectés :</b> <br/><br/>'+rep[1];
else
if( rep[0] == "ko" ) {
document.getElementById("formulaire").style.display = "block";
document.getElementById("blocMembres").style.display = "none";
document.getElementById("dialogue").style.display = "none";
document.getElementById("messageErreur").innerHTML = "";
BOUCLAGE = false;
}
else
if( response.length > 1 )
alert(response);
}
}
else
alert("Sorry but your browser don't support ajax");
}
function boucleTchat(enligne) {
enligne = !enligne;
if( BOUCLAGE == true )
setTimeout( "boucleTchat("+enligne+")", 5000 );
actualiserTchat();
if( enligne )
enligneTchat();
return false;
}
function afficherAideTchat() {
if( !document.getElementById("aideTchat") )
return false;
var aide = document.getElementById("aideTchat");
if( aide.style.display == "block" )
aide.style.display = "none";
else
aide.style.display = "block";
return false;
}
function TchatGras() {
if( textGras == "" ) {
textGras = "b";
document.getElementById("textGras").style.color = "#B00";
document.getElementById("textGras").style.borderColor = "#B00";
}
else {
textGras = "";
document.getElementById("textGras").style.color = "#444";
document.getElementById("textGras").style.borderColor = "#444";
}
document.getElementById("messageTchat").focus();
return false;
}
function TchatItalique() {
if( textItalique == "" ) {
textItalique = "i";
document.getElementById("textItalique").style.color = "#B00";
document.getElementById("textItalique").style.borderColor = "#B00";
}
else {
textItalique = "";
document.getElementById("textItalique").style.color = "#444";
document.getElementById("textItalique").style.borderColor = "#444";
}
document.getElementById("messageTchat").focus();
return false;
}
function TchatAfficherColor() {
if( document.getElementById("paletteCouleurs").style.display == "block" ) {
document.getElementById("paletteCouleurs").style.display = "none";
document.getElementById("messageTchat").focus();
}
else
document.getElementById("paletteCouleurs").style.display = "block";
return false;
}
function TchatColor(choix) {
textCouleur = choix;
document.getElementById("textColor").style.color = choix;
document.getElementById("textColor").style.borderColor = choix;
document.getElementById("messageTchat").focus();
TchatAfficherColor();
return false;
}
function typeTchat(choixType) {
document.getElementById("messageTchat").focus();
document.getElementById("choixText").style.color = "#444";
document.getElementById("choixText").style.borderColor = "#444";
document.getElementById("choixImage").style.color = "#444";
document.getElementById("choixImage").style.borderColor = "#444";
document.getElementById("choixLien").style.color = "#444";
document.getElementById("choixLien").style.borderColor = "#444";
if( choixType == "image" ) {
document.getElementById("choixImage").style.color = "#B00";
document.getElementById("choixImage").style.borderColor = "#B00";
}
else
if( choixType == "url" ) {
document.getElementById("choixLien").style.color = "#B00";
document.getElementById("choixLien").style.borderColor = "#B00";
}
else {
document.getElementById("choixText").style.color = "#B00";
document.getElementById("choixText").style.borderColor = "#B00";
}
insert = choixType;
return false;
}
</script>
<style type="text/css">
.formulaireTchat {
margin-top: 20px;
display: block;
float: left;
background: url('images/tchat/fond.png') no-repeat center center;
height: 420px;
}
.rouleauTchat {
display: block;
float: left;
border: 2px solid #B00;
margin-top: 20px;
padding: 5px;
background: url('images/tchat/fond.png') no-repeat center 10px;
width: 570px;
height: 400px;
overflow: auto;
}
.rouleauTchat img{
margin-left: 25px;
max-width: 500px;
max-height: 380px;
}
.rouleauTchat a{
text-decoration: underline;
color: #1a80b9;
}
.rouleauTchat a:hover{
font-weight: normal;
text-decoration: underline;
color: #1a80b9;
}
.ecrireTchat {
display: block;
float: left;
padding: 10px 0;
width: 582px;
height: 100%;
}
.boutonAideTchat {
margin: 5px 0 0 420px;
padding: 3px;
text-align: center;
display: block;
float:left;
width: 150px;
height: 15px;
cursor: pointer;
font-size: 15px;
color: #1a80b9;
border: 2px solid #1a80b9;
}
.boutonAideTchat:hover {
font-weight: bold;
cursor: pointer;
}
.aideTchat {
display: none;
float:left;
margin-top: -2px;
color: #1a80b9;
padding: 3px;
width: 570px;
height: auto;
border: 2px solid #1a80b9;
}
.boutonStyle {
display: block;
float:left;
margin: 5px;
width: 14px;
height: 14px;
background: url('images/tchat/button.png') repeat-x;
color: #444;
border: 2px solid #444;
text-align: center;
cursor: pointer;
}
.boutonColor {
width: 70px;
}
.paletteCouleurs {
display: none;
float:left;
width: 430px;
height: 100%;
}
</style>
<h1 style="text-align:center; color:#B00">
MacGyver : le Tchat (<i>BeTa</i>)
</h1>
<div class="LeTiersDeGauche">
<?php echo '
<div id="blocMembres" style="display:'.$afficheDialogue.'; margin:80px 0 0 50px;">'; ?>
<b>Membres connectés :</b> <br/>
</div>
</div>
<div id="blocTchat" class="DeuxTiersDeDroite">
<div class="boutonAideTchat" onclick="afficherAideTchat();">
Besoin d'Aide ?
</div>
<div id="aideTchat" class="aideTchat">
<h4>Pré-requis :</h4>
Pour participer au tchat, vous aurez besoin d'un compte sur le forum ainsi qu'une version récente de votre navigateur web, acceptant les requêtes AJAX, les cookies, et le JavaScript. Le tchat étant en version beta, il n'a été testé que sur Internet Explorer 7 et +, et Mozila Firefox 3 et +. L'affichage des personnes en ligne pose problème avec Google Chrome.
<br/>
<h4>J'ai un message d'erreur à la connexion :</h4>
Pour pouvoir se connecter au tchat, vous devez disposer d'un compte sur le forum du site, qui soit validé et actif. Essayez donc de vous connecter au forum. Si cette opération fonctionne réessayez de vous connecter au tchat. Si la connexion échoue encore, il s'agit alors d'un problème technique : désolé pour le désagréement et merci de me le signaler.
<br/>
<h4>Je me fait exclure automatiquement du tchat :</h4>
Vous avez été inactif pendant plus de 20 minutes, ou vous n'acceptez pas les cookies. Si ni l'une ni l'autre de ces raisons sont vraies, il s'agit alors d'un problème technique : désolé pour le désagréement et merci de me le signaler.
<br/>
<h4>Je ne retrouve plus mes textes précédents dans le dialogue du tchat :</h4>
Seuls les 200.000 derniers caractères du dialogue sont concervés. Le reste est supprimé définitivement.
<br/>
<h4>Dialoguer uniquement au clavier :</h4>
Pour n'utiliser que le clavier, saisissez votre message, puis appuyer sur "Entrée" pour le poster, le curseur revient automatiquement dans la zone de saisie, prête à recevoir un nouveau message.
<br/>
<h4>Trois modes de saisie :</h4>
Vous avez le choix entre poster du texte, une image, ou un lien. Pour une image ou un lien, veuillez saisir l'URL complète de ce dernier (<i>exemple : http://www.domaine.fr/image.jpg</i>).
<br/>
<h4>Personnaliser le texte :</h4>
Vous avez la possibilité de poster votre texte en Gras et/ou en Italique et/ou en Couleur. Les paramètres restent actifs pour tout les messages suivants, jusqu'à ce que les paramètres soient à nouveau désactivés ou modifiés.
<br/>
<h4>Pour toutes questions : <a href="/rick/Contact.php">Contactez-moi</a></h4>
<br/>
</div>
<?php echo '
<div id="formulaire" class="formulaireTchat" style="display:'.$afficheFormulaire.';">'; ?>
Pour se connecter au Tchat, veuillez utiliser vos identifiant du forum, ou inscrivez-vous d'abord sur ce dernier. <br/>
<br/>
<table width="560" border="0">
<tr>
<td width="115">Nom d'utilisateur :</td>
<td width="445"><input type="text" size="20" id="nomTchat" /></td>
</tr>
<tr>
<td>Mot de passe :</td>
<td><input type="password" size="20" id="passTchat" onKeyPress="if(event.keyCode == 13) connexionTchat();" /></td>
</tr>
<tr>
<td>
<input type="image" src="<?php echo URL.'images/tchat/valider.png'; ?>" alt="connexion" title="ok" onclick="connexionTchat();" style="cursor:pointer;" />
</td>
<td id="messageErreur" style="color:#E00000;">
</td>
</tr>
</table>
</div>
<?php echo '
<div id="dialogue" style="display:'.$afficheDialogue.';">'; ?>
<div id="blocDialogue" class="rouleauTchat">
</div>
<div class="ecrireTchat">
<table width="580" border="0">
<tr>
<td id="affichageNomTchat" width="100">
<b><?php echo $_SESSION["nomTchat"]; ?> :</b>
</td>
<td width="365">
<input type="text" size="68" maxlength="2000" id="messageTchat" onKeyPress="if(event.keyCode == 13) envoyerTchat();" />
</td>
<td width="15">
<input type="image" src="<?php echo URL.'images/tchat/validerPetit.png'; ?>" alt="envoyer" title="envoyer" onclick="envoyerTchat();" style="cursor:pointer;" />
</td>
</tr>
</table>
<br/>
<div class="boutonStyle" id="textGras" onclick="TchatGras();"><b>B</b></div>
<div class="boutonStyle" id="textItalique" onclick="TchatItalique();"><i>i </i></div>
<div class="boutonStyle boutonColor" id="textColor" onclick="TchatAfficherColor();"><b>Couleur</b></div>
<div id="paletteCouleurs" class="paletteCouleurs">
<div class="boutonStyle" style="background:#000; color:#000; border-color:#000;" onclick="TchatColor('#000');"></div>
<div class="boutonStyle" style="background:#80C; color:#80C; border-color:#80C;" onclick="TchatColor('#80C');"></div>
<div class="boutonStyle" style="background:#04F; color:#04F; border-color:#04F;" onclick="TchatColor('#04F');"></div>
<div class="boutonStyle" style="background:#0CE; color:#0CE; border-color:#0CE;" onclick="TchatColor('#0CE');"></div>
<div class="boutonStyle" style="background:#4C0; color:#4C0; border-color:#4C0;" onclick="TchatColor('#4C0');"></div>
<div class="boutonStyle" style="background:#484; color:#484; border-color:#484;" onclick="TchatColor('#484');"></div>
<div class="boutonStyle" style="background:#FC4; color:#FC4; border-color:#FC4;" onclick="TchatColor('#FC4');"></div>
<div class="boutonStyle" style="background:#E50; color:#E50; border-color:#E50;" onclick="TchatColor('#E50');"></div>
<div class="boutonStyle" style="background:#C00; color:#C00; border-color:#C00;" onclick="TchatColor('#C00');"></div>
<div class="boutonStyle" style="background:#840; color:#840; border-color:#840;" onclick="TchatColor('#840');"></div>
<div class="boutonStyle" style="background:#F4C; color:#F4C; border-color:#F4C;" onclick="TchatColor('#F4C');"></div>
</div>
<br/><br/>
<div class="boutonStyle boutonColor" id="choixText" onclick="typeTchat('text');" style="color:#B00; border-color:#B00;"><b>Texte</b></div>
<div class="boutonStyle boutonColor" id="choixImage" onclick="typeTchat('image');"><b>Image</b></div>
<div class="boutonStyle boutonColor" id="choixLien" onclick="typeTchat('url');"><b>Lien</b></div>
</div>
</div>
</div>
<?php
if( $afficheDialogue == "block" )
echo '
<script type="text/javascript">
window.onload = function() {
BOUCLAGE = true;
boucleTchat(true);
document.getElementById("messageTchat").focus();
}
</script>';
?>
<?php
session_start();
function stop ( $mess ) {
echo $mess;
exit(0);
}
if( isset( $_POST["type"] ) && $_POST["type"] == "text" ) {
if( isset( $_POST["message"] ) && strlen( $_POST["message"] ) >= 1 )
$mess = $_POST["message"];
else
stop( "message trop court" );
$mess = str_replace('\"', "'", $mess);
$mess = str_replace("\'", "'", $mess);
$mess = str_replace("amp;", "&", $mess);
$text = '<span style="';
if( isset( $_POST["couleur"] ) && $_POST["couleur"] != "#000" )
$text .= 'color:'.$_POST["couleur"].';';
if( isset( $_POST["italique"] ) && $_POST["italique"] == "i" )
$text .= 'font-style:italic;';
if( isset( $_POST["gras"] ) && $_POST["gras"] == "b" )
$text .= 'font-weight:bold;';
$text .= '">'.$mess.'</span>';
if( strpos($mess, "html>")!==false || strpos($mess, "href")!==false || strpos($mess, "<a")!==false || strpos($mess, "iframe")!==false || strpos($mess, "<img")!==false || strpos($mess, "src=")!==false || strpos($mess, "<script")!==false || strpos($mess, "/img>")!==false || strpos($mess, "/>")!==false )
stop("Votre message contient des balises HTML interdites");
$mess = str_replace('<', "<", $mess);
$mess = str_replace(">", ">", $mess);
}
else
if( isset( $_POST["type"] ) && $_POST["type"] == "image" ) {
if( isset( $_POST["message"] ) && strlen( $_POST["message"] ) >= 1 )
$mess = $_POST["message"];
else
stop( "message trop court" );
if( !preg_match('#^http:\/\/(.*)\.(gif|png|jpg|jpeg|bmp|)$#i', $mess) )
stop( "lien image incorrect" );
else
$text = '<br/><img src="'.$mess.'" />';
}
else
if( isset( $_POST["type"] ) && $_POST["type"] == "url" ) {
if( isset( $_POST["message"] ) && strlen( $_POST["message"] ) >= 1 )
$mess = $_POST["message"];
else
stop( "message trop court" );
if( !preg_match('#^http:\/\/(.*)$#i', $mess) )
stop( "lien url incorrect" );
else
$text = '<a href="'.$mess.'" target="_blank">'.$mess.'</a>';
}
else
stop( "type incorect" );
if( isset( $_SESSION["nomTchat"] ) ) {
$mess = '<b>'.$_SESSION["nomTchat"].'</b> (<i style="font-size:9px;">'.date("d.m.Y H:i:s").'</i>) : '.$text.'<br/><br/>';
$dial = file_get_contents('../tchat/tchat.txt');
if( (int)(filesize('../tchat/tchat.txt')) > 200000 )
$dial = substr( $dial, 0, 160000 );
$file = fopen('../tchat/tchat.txt', 'w');
fwrite( $file, $mess."\n".$dial );
fclose($file);
stop("ok");
}
else
stop("ko"); //probleme d'itentification
?>
<?php
session_start();
function stop ( $message ) {
echo $message;
exit(0);
}
if( !isset( $_POST["ok"] ) || $_POST["ok"] != "ok" )
stop( "probleme de variable" );
if( isset( $_SESSION["nomTchat"] ) ) {
$enligne = file_get_contents('../tchat/enligne.txt');
$mes = "";
$pos = strpos( $enligne, $_SESSION["nomTchat"] );
if( $pos !== false ) // il est deja dans le fichier et donc loggé depuis un moment
$enligne = substr( $enligne, ($pos+strlen($_SESSION["nomTchat"])+5) );
else
$mes = "La reponse dans moins de 10 secondes";
$enligne .= $_SESSION["nomTchat"].'<br/>';
$file = fopen('../tchat/enligne.txt', 'w');
fwrite( $file, $enligne );
fclose($file);
if( $mes != "" )
stop("ok|||".$mes);
else
stop("ok|||".$enligne);
}
else
stop("ko|||probleme d'itentification");
?>
<?php
session_start();
function _hash_encode64($input, $count, &$itoa64) {
...
}
function _hash_crypt_private($password, $setting, &$itoa64) {
...
}
function phpbb_check_hash($password, $hash) {
...
}
function stop ( $message ) {
echo $message;
exit(0);
}
if( isset( $_POST["nom"] ) && strlen( $_POST["nom"] ) >= 1 )
$nom = $_POST["nom"];
else
stop( "Veuillez entrer votre nom d'utilisateur" );
if( isset( $_POST["pass"] ) && strlen( $_POST["pass"] ) >= 1 )
$passTchat = .............
else
stop( "Veuillez entrer votre mot de passe" );
//connexion a MySql
// Ouverture d'une session mysql
connexion();
$reqPass = query( "SELECT ............");
if( mysql_num_rows( $reqPass ) == 0 )
stop( "Votre nom d'utilisateur est incorrect. Vous devez avoir un compte valide sur le forum pour participer au chat" );
else {
$row = mysql_fetch_assoc( $reqPass );
if( !phpbb_check_hash( $passTchat, $row['user_password'] ) )
stop( 'Votre mot de passe est incorect. En cas d\'oubli, <a href="http://forum.angusmacgyver.fr/ucp.php?mode=sendpassword" target="forget">cliquez ici</a>.' );
$_SESSION["nomTchat"] = $row['username'];
stop("ok|||".$_SESSION["nomTchat"]);
}
mysql_close();
?>
<?php
session_start();
function stop ( $message ) {
echo $message;
exit(0);
}
if( isset( $_POST["ok"] ) && strlen( $_POST["ok"] ) > 0 )
$actualTchat = $_POST["ok"];
else
stop( "probleme de variable" );
if( isset( $_SESSION["nomTchat"] ) ) {
if( $actuelTchat == "nouveau" )
stop("ok|||".htmlEntities( file_get_contents('../tchat/tchat.txt') ));
else {
$nouveauText = "";
$fichier = fopen('../tchat/tchat.txt', 'r');
while ( !feof($fichier) ) {
$ligne = fgets($fichier, 3000);
if( $actualTchat == substr( $ligne, strpos($ligne, '<i')+26, 19 ) )
stop("ok|||".$nouveauText);
else
$nouveauText .= $ligne;
}
stop("ok|||".$nouveauText);
}
}
else
stop("ko|||probleme d'itentification");
?>
Quand j'aurai le temps ! je vous avez prévenu que c'était compliqué à réaliser.
J'ai essayé sous Internet Explorer 8 et effectivement comme tu l'as dit Murdoc, le logiciel commence à bugger après quelques minutes et finit par planter.... Sous Google Chrome ça n'a pas l'air d'aller beaucoup mieux.
Le tchat est fini dans le sens ou toutes les fonctionnalités que je voulais lui donner sont présentes, maintenant il est clair qu'il va falloir optimiser tout ça, pour que les ordinateurs ne plantent pas :D
En dessous je vous est mis un peu de code pour que vous puissiez avoir un aperçu de à quoi ressemble le tchat derrière la scène....
[code]
<script type="text/javascript">
var BOUCLAGE = false;
var textCouleur = "#000";
var textGras = "";
var textItalique = "";
var insert = "text";
function connexionTchat() {
if( document.getElementById("nomTchat") && document.getElementById("passTchat") ) {
var nom = document.getElementById("nomTchat").value;
var pass = .................................................
}
else
return false;
var ajax;
if(window.XMLHttpRequest)
ajax = new XMLHttpRequest();
else
if(window.ActiveXObject)
ajax = new ActiveXObject("Microsoft.XMLHTTP");
if(ajax) {
ajax.open('POST', '/pages/_connexionTchat.php', false);
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax.send("nom="+nom+"&pass="+pass);
if(ajax.readyState==4) {
var response = ajax.responseText;
var param = response.split("|||");
document.getElementById("messageErreur").innerHTML = response;
if( param[0] == "ok" ) {
document.getElementById("formulaire").style.display = "none";
document.getElementById("blocMembres").style.display = "block";
document.getElementById("dialogue").style.display = "block";
document.getElementById("affichageNomTchat").innerHTML = '<b>'+param[1]+' :</b>';
document.getElementById("nomTchat").value = '';
document.getElementById("passTchat").value = '';
document.getElementById("messageTchat").focus();
BOUCLAGE = true;
boucleTchat(true);
}
}
}
else
alert("Sorry but your browser don't support ajax");
return false;
}
function envoyerTchat() {
document.getElementById("messageTchat").focus();
if( document.getElementById("messageTchat") && document.getElementById("messageTchat").value.replace(/^\s+|\s+$/g,"").length > 0 )
var message = document.getElementById("messageTchat").value;
else{
return false;
}
document.getElementById("messageTchat").value = '';
message = message.replace(/&/g, "amp;");
var ajax1;
if(window.XMLHttpRequest)
ajax1 = new XMLHttpRequest();
else
if(window.ActiveXObject)
ajax1 = new ActiveXObject("Microsoft.XMLHTTP");
if(ajax1) {
ajax1.open('POST', '/pages/_envoyerTchat.php', false);
ajax1.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax1.send("type="+insert+"&message="+message+"&gras="+textGras+"&italique="+textItalique+"&couleur="+textCouleur);
if(ajax1.readyState==4) {
var response = ajax1.responseText;
if( response == "ko" ) {
document.getElementById("formulaire").style.display = "block";
document.getElementById("blocMembres").style.display = "none";
document.getElementById("dialogue").style.display = "none";
document.getElementById("messageErreur").innerHTML = "";
BOUCLAGE = false;
return false;
}
else
if( response.length > 1 && response != "ok" ) {
alert(response);
document.getElementById("messageTchat").value = message;
}
}
}
else
alert("Sorry but your browser don't support ajax");
actualiserTchat();
return false;
}
function actualiserTchat() {
if( document.getElementById("blocDialogue") && document.getElementById("blocDialogue").innerHTML.length > 30 )
var actuelTchat = document.getElementById("blocDialogue").innerHTML.substr( document.getElementById("blocDialogue").innerHTML.indexOf('<i')+27, 19 ); //date et heure exacte
else
var actuelTchat = "nouveau";
var ajax2;
if(window.XMLHttpRequest)
ajax2 = new XMLHttpRequest();
else
if(window.ActiveXObject)
ajax2 = new ActiveXObject("Microsoft.XMLHTTP");
if(ajax2) {
ajax2.open('POST', '/pages/_actualiserTchat.php', false);
ajax2.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax2.send('ok='+actuelTchat);
if(ajax2.readyState==4) {
var response = ajax2.responseText;
var rep = response.split("|||");
if( rep[0] == "ok" ) {
if( rep[1].length > 0 )
document.getElementById("blocDialogue").innerHTML = rep[1]+document.getElementById("blocDialogue").innerHTML;
}
else
if( rep[0] == "ko" ) {
document.getElementById("formulaire").style.display = "block";
document.getElementById("blocMembres").style.display = "none";
document.getElementById("dialogue").style.display = "none";
document.getElementById("messageErreur").innerHTML = "";
BOUCLAGE = false;
}
else
if( response.length > 1 )
alert(response);
}
}
else
alert("Sorry but your browser don't support ajax");
}
function enligneTchat() {
var ajax3;
if(window.XMLHttpRequest)
ajax3 = new XMLHttpRequest();
else
if(window.ActiveXObject)
ajax3 = new ActiveXObject("Microsoft.XMLHTTP");
if(ajax3) {
ajax3.open('POST', '/pages/_enligneTchat.php', false);
ajax3.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax3.send("ok=ok");
if(ajax3.readyState==4) {
var response = ajax3.responseText;
var rep = response.split("|||");
if( rep[0] == "ok" )
document.getElementById("blocMembres").innerHTML = '<b>Membres connectés :</b> <br/><br/>'+rep[1];
else
if( rep[0] == "ko" ) {
document.getElementById("formulaire").style.display = "block";
document.getElementById("blocMembres").style.display = "none";
document.getElementById("dialogue").style.display = "none";
document.getElementById("messageErreur").innerHTML = "";
BOUCLAGE = false;
}
else
if( response.length > 1 )
alert(response);
}
}
else
alert("Sorry but your browser don't support ajax");
}
function boucleTchat(enligne) {
enligne = !enligne;
if( BOUCLAGE == true )
setTimeout( "boucleTchat("+enligne+")", 5000 );
actualiserTchat();
if( enligne )
enligneTchat();
return false;
}
function afficherAideTchat() {
if( !document.getElementById("aideTchat") )
return false;
var aide = document.getElementById("aideTchat");
if( aide.style.display == "block" )
aide.style.display = "none";
else
aide.style.display = "block";
return false;
}
function TchatGras() {
if( textGras == "" ) {
textGras = "b";
document.getElementById("textGras").style.color = "#B00";
document.getElementById("textGras").style.borderColor = "#B00";
}
else {
textGras = "";
document.getElementById("textGras").style.color = "#444";
document.getElementById("textGras").style.borderColor = "#444";
}
document.getElementById("messageTchat").focus();
return false;
}
function TchatItalique() {
if( textItalique == "" ) {
textItalique = "i";
document.getElementById("textItalique").style.color = "#B00";
document.getElementById("textItalique").style.borderColor = "#B00";
}
else {
textItalique = "";
document.getElementById("textItalique").style.color = "#444";
document.getElementById("textItalique").style.borderColor = "#444";
}
document.getElementById("messageTchat").focus();
return false;
}
function TchatAfficherColor() {
if( document.getElementById("paletteCouleurs").style.display == "block" ) {
document.getElementById("paletteCouleurs").style.display = "none";
document.getElementById("messageTchat").focus();
}
else
document.getElementById("paletteCouleurs").style.display = "block";
return false;
}
function TchatColor(choix) {
textCouleur = choix;
document.getElementById("textColor").style.color = choix;
document.getElementById("textColor").style.borderColor = choix;
document.getElementById("messageTchat").focus();
TchatAfficherColor();
return false;
}
function typeTchat(choixType) {
document.getElementById("messageTchat").focus();
document.getElementById("choixText").style.color = "#444";
document.getElementById("choixText").style.borderColor = "#444";
document.getElementById("choixImage").style.color = "#444";
document.getElementById("choixImage").style.borderColor = "#444";
document.getElementById("choixLien").style.color = "#444";
document.getElementById("choixLien").style.borderColor = "#444";
if( choixType == "image" ) {
document.getElementById("choixImage").style.color = "#B00";
document.getElementById("choixImage").style.borderColor = "#B00";
}
else
if( choixType == "url" ) {
document.getElementById("choixLien").style.color = "#B00";
document.getElementById("choixLien").style.borderColor = "#B00";
}
else {
document.getElementById("choixText").style.color = "#B00";
document.getElementById("choixText").style.borderColor = "#B00";
}
insert = choixType;
return false;
}
</script>
<style type="text/css">
.formulaireTchat {
margin-top: 20px;
display: block;
float: left;
background: url('images/tchat/fond.png') no-repeat center center;
height: 420px;
}
.rouleauTchat {
display: block;
float: left;
border: 2px solid #B00;
margin-top: 20px;
padding: 5px;
background: url('images/tchat/fond.png') no-repeat center 10px;
width: 570px;
height: 400px;
overflow: auto;
}
.rouleauTchat img{
margin-left: 25px;
max-width: 500px;
max-height: 380px;
}
.rouleauTchat a{
text-decoration: underline;
color: #1a80b9;
}
.rouleauTchat a:hover{
font-weight: normal;
text-decoration: underline;
color: #1a80b9;
}
.ecrireTchat {
display: block;
float: left;
padding: 10px 0;
width: 582px;
height: 100%;
}
.boutonAideTchat {
margin: 5px 0 0 420px;
padding: 3px;
text-align: center;
display: block;
float:left;
width: 150px;
height: 15px;
cursor: pointer;
font-size: 15px;
color: #1a80b9;
border: 2px solid #1a80b9;
}
.boutonAideTchat:hover {
font-weight: bold;
cursor: pointer;
}
.aideTchat {
display: none;
float:left;
margin-top: -2px;
color: #1a80b9;
padding: 3px;
width: 570px;
height: auto;
border: 2px solid #1a80b9;
}
.boutonStyle {
display: block;
float:left;
margin: 5px;
width: 14px;
height: 14px;
background: url('images/tchat/button.png') repeat-x;
color: #444;
border: 2px solid #444;
text-align: center;
cursor: pointer;
}
.boutonColor {
width: 70px;
}
.paletteCouleurs {
display: none;
float:left;
width: 430px;
height: 100%;
}
</style>
<h1 style="text-align:center; color:#B00">
MacGyver : le Tchat (<i>BeTa</i>)
</h1>
<div class="LeTiersDeGauche">
<?php echo '
<div id="blocMembres" style="display:'.$afficheDialogue.'; margin:80px 0 0 50px;">'; ?>
<b>Membres connectés :</b> <br/>
</div>
</div>
<div id="blocTchat" class="DeuxTiersDeDroite">
<div class="boutonAideTchat" onclick="afficherAideTchat();">
Besoin d'Aide ?
</div>
<div id="aideTchat" class="aideTchat">
<h4>Pré-requis :</h4>
Pour participer au tchat, vous aurez besoin d'un compte sur le forum ainsi qu'une version récente de votre navigateur web, acceptant les requêtes AJAX, les cookies, et le JavaScript. Le tchat étant en version beta, il n'a été testé que sur Internet Explorer 7 et +, et Mozila Firefox 3 et +. L'affichage des personnes en ligne pose problème avec Google Chrome.
<br/>
<h4>J'ai un message d'erreur à la connexion :</h4>
Pour pouvoir se connecter au tchat, vous devez disposer d'un compte sur le forum du site, qui soit validé et actif. Essayez donc de vous connecter au forum. Si cette opération fonctionne réessayez de vous connecter au tchat. Si la connexion échoue encore, il s'agit alors d'un problème technique : désolé pour le désagréement et merci de me le signaler.
<br/>
<h4>Je me fait exclure automatiquement du tchat :</h4>
Vous avez été inactif pendant plus de 20 minutes, ou vous n'acceptez pas les cookies. Si ni l'une ni l'autre de ces raisons sont vraies, il s'agit alors d'un problème technique : désolé pour le désagréement et merci de me le signaler.
<br/>
<h4>Je ne retrouve plus mes textes précédents dans le dialogue du tchat :</h4>
Seuls les 200.000 derniers caractères du dialogue sont concervés. Le reste est supprimé définitivement.
<br/>
<h4>Dialoguer uniquement au clavier :</h4>
Pour n'utiliser que le clavier, saisissez votre message, puis appuyer sur "Entrée" pour le poster, le curseur revient automatiquement dans la zone de saisie, prête à recevoir un nouveau message.
<br/>
<h4>Trois modes de saisie :</h4>
Vous avez le choix entre poster du texte, une image, ou un lien. Pour une image ou un lien, veuillez saisir l'URL complète de ce dernier (<i>exemple : http://www.domaine.fr/image.jpg</i>).
<br/>
<h4>Personnaliser le texte :</h4>
Vous avez la possibilité de poster votre texte en Gras et/ou en Italique et/ou en Couleur. Les paramètres restent actifs pour tout les messages suivants, jusqu'à ce que les paramètres soient à nouveau désactivés ou modifiés.
<br/>
<h4>Pour toutes questions : <a href="/rick/Contact.php">Contactez-moi</a></h4>
<br/>
</div>
<?php echo '
<div id="formulaire" class="formulaireTchat" style="display:'.$afficheFormulaire.';">'; ?>
Pour se connecter au Tchat, veuillez utiliser vos identifiant du forum, ou inscrivez-vous d'abord sur ce dernier. <br/>
<br/>
<table width="560" border="0">
<tr>
<td width="115">Nom d'utilisateur :</td>
<td width="445"><input type="text" size="20" id="nomTchat" /></td>
</tr>
<tr>
<td>Mot de passe :</td>
<td><input type="password" size="20" id="passTchat" onKeyPress="if(event.keyCode == 13) connexionTchat();" /></td>
</tr>
<tr>
<td>
<input type="image" src="<?php echo URL.'images/tchat/valider.png'; ?>" alt="connexion" title="ok" onclick="connexionTchat();" style="cursor:pointer;" />
</td>
<td id="messageErreur" style="color:#E00000;">
</td>
</tr>
</table>
</div>
<?php echo '
<div id="dialogue" style="display:'.$afficheDialogue.';">'; ?>
<div id="blocDialogue" class="rouleauTchat">
</div>
<div class="ecrireTchat">
<table width="580" border="0">
<tr>
<td id="affichageNomTchat" width="100">
<b><?php echo $_SESSION["nomTchat"]; ?> :</b>
</td>
<td width="365">
<input type="text" size="68" maxlength="2000" id="messageTchat" onKeyPress="if(event.keyCode == 13) envoyerTchat();" />
</td>
<td width="15">
<input type="image" src="<?php echo URL.'images/tchat/validerPetit.png'; ?>" alt="envoyer" title="envoyer" onclick="envoyerTchat();" style="cursor:pointer;" />
</td>
</tr>
</table>
<br/>
<div class="boutonStyle" id="textGras" onclick="TchatGras();"><b>B</b></div>
<div class="boutonStyle" id="textItalique" onclick="TchatItalique();"><i>i </i></div>
<div class="boutonStyle boutonColor" id="textColor" onclick="TchatAfficherColor();"><b>Couleur</b></div>
<div id="paletteCouleurs" class="paletteCouleurs">
<div class="boutonStyle" style="background:#000; color:#000; border-color:#000;" onclick="TchatColor('#000');"></div>
<div class="boutonStyle" style="background:#80C; color:#80C; border-color:#80C;" onclick="TchatColor('#80C');"></div>
<div class="boutonStyle" style="background:#04F; color:#04F; border-color:#04F;" onclick="TchatColor('#04F');"></div>
<div class="boutonStyle" style="background:#0CE; color:#0CE; border-color:#0CE;" onclick="TchatColor('#0CE');"></div>
<div class="boutonStyle" style="background:#4C0; color:#4C0; border-color:#4C0;" onclick="TchatColor('#4C0');"></div>
<div class="boutonStyle" style="background:#484; color:#484; border-color:#484;" onclick="TchatColor('#484');"></div>
<div class="boutonStyle" style="background:#FC4; color:#FC4; border-color:#FC4;" onclick="TchatColor('#FC4');"></div>
<div class="boutonStyle" style="background:#E50; color:#E50; border-color:#E50;" onclick="TchatColor('#E50');"></div>
<div class="boutonStyle" style="background:#C00; color:#C00; border-color:#C00;" onclick="TchatColor('#C00');"></div>
<div class="boutonStyle" style="background:#840; color:#840; border-color:#840;" onclick="TchatColor('#840');"></div>
<div class="boutonStyle" style="background:#F4C; color:#F4C; border-color:#F4C;" onclick="TchatColor('#F4C');"></div>
</div>
<br/><br/>
<div class="boutonStyle boutonColor" id="choixText" onclick="typeTchat('text');" style="color:#B00; border-color:#B00;"><b>Texte</b></div>
<div class="boutonStyle boutonColor" id="choixImage" onclick="typeTchat('image');"><b>Image</b></div>
<div class="boutonStyle boutonColor" id="choixLien" onclick="typeTchat('url');"><b>Lien</b></div>
</div>
</div>
</div>
<?php
if( $afficheDialogue == "block" )
echo '
<script type="text/javascript">
window.onload = function() {
BOUCLAGE = true;
boucleTchat(true);
document.getElementById("messageTchat").focus();
}
</script>';
?>
<?php
session_start();
function stop ( $mess ) {
echo $mess;
exit(0);
}
if( isset( $_POST["type"] ) && $_POST["type"] == "text" ) {
if( isset( $_POST["message"] ) && strlen( $_POST["message"] ) >= 1 )
$mess = $_POST["message"];
else
stop( "message trop court" );
$mess = str_replace('\"', "'", $mess);
$mess = str_replace("\'", "'", $mess);
$mess = str_replace("amp;", "&", $mess);
$text = '<span style="';
if( isset( $_POST["couleur"] ) && $_POST["couleur"] != "#000" )
$text .= 'color:'.$_POST["couleur"].';';
if( isset( $_POST["italique"] ) && $_POST["italique"] == "i" )
$text .= 'font-style:italic;';
if( isset( $_POST["gras"] ) && $_POST["gras"] == "b" )
$text .= 'font-weight:bold;';
$text .= '">'.$mess.'</span>';
if( strpos($mess, "html>")!==false || strpos($mess, "href")!==false || strpos($mess, "<a")!==false || strpos($mess, "iframe")!==false || strpos($mess, "<img")!==false || strpos($mess, "src=")!==false || strpos($mess, "<script")!==false || strpos($mess, "/img>")!==false || strpos($mess, "/>")!==false )
stop("Votre message contient des balises HTML interdites");
$mess = str_replace('<', "<", $mess);
$mess = str_replace(">", ">", $mess);
}
else
if( isset( $_POST["type"] ) && $_POST["type"] == "image" ) {
if( isset( $_POST["message"] ) && strlen( $_POST["message"] ) >= 1 )
$mess = $_POST["message"];
else
stop( "message trop court" );
if( !preg_match('#^http:\/\/(.*)\.(gif|png|jpg|jpeg|bmp|)$#i', $mess) )
stop( "lien image incorrect" );
else
$text = '<br/><img src="'.$mess.'" />';
}
else
if( isset( $_POST["type"] ) && $_POST["type"] == "url" ) {
if( isset( $_POST["message"] ) && strlen( $_POST["message"] ) >= 1 )
$mess = $_POST["message"];
else
stop( "message trop court" );
if( !preg_match('#^http:\/\/(.*)$#i', $mess) )
stop( "lien url incorrect" );
else
$text = '<a href="'.$mess.'" target="_blank">'.$mess.'</a>';
}
else
stop( "type incorect" );
if( isset( $_SESSION["nomTchat"] ) ) {
$mess = '<b>'.$_SESSION["nomTchat"].'</b> (<i style="font-size:9px;">'.date("d.m.Y H:i:s").'</i>) : '.$text.'<br/><br/>';
$dial = file_get_contents('../tchat/tchat.txt');
if( (int)(filesize('../tchat/tchat.txt')) > 200000 )
$dial = substr( $dial, 0, 160000 );
$file = fopen('../tchat/tchat.txt', 'w');
fwrite( $file, $mess."\n".$dial );
fclose($file);
stop("ok");
}
else
stop("ko"); //probleme d'itentification
?>
<?php
session_start();
function stop ( $message ) {
echo $message;
exit(0);
}
if( !isset( $_POST["ok"] ) || $_POST["ok"] != "ok" )
stop( "probleme de variable" );
if( isset( $_SESSION["nomTchat"] ) ) {
$enligne = file_get_contents('../tchat/enligne.txt');
$mes = "";
$pos = strpos( $enligne, $_SESSION["nomTchat"] );
if( $pos !== false ) // il est deja dans le fichier et donc loggé depuis un moment
$enligne = substr( $enligne, ($pos+strlen($_SESSION["nomTchat"])+5) );
else
$mes = "La reponse dans moins de 10 secondes";
$enligne .= $_SESSION["nomTchat"].'<br/>';
$file = fopen('../tchat/enligne.txt', 'w');
fwrite( $file, $enligne );
fclose($file);
if( $mes != "" )
stop("ok|||".$mes);
else
stop("ok|||".$enligne);
}
else
stop("ko|||probleme d'itentification");
?>
<?php
session_start();
function _hash_encode64($input, $count, &$itoa64) {
...
}
function _hash_crypt_private($password, $setting, &$itoa64) {
...
}
function phpbb_check_hash($password, $hash) {
...
}
function stop ( $message ) {
echo $message;
exit(0);
}
if( isset( $_POST["nom"] ) && strlen( $_POST["nom"] ) >= 1 )
$nom = $_POST["nom"];
else
stop( "Veuillez entrer votre nom d'utilisateur" );
if( isset( $_POST["pass"] ) && strlen( $_POST["pass"] ) >= 1 )
$passTchat = .............
else
stop( "Veuillez entrer votre mot de passe" );
//connexion a MySql
// Ouverture d'une session mysql
connexion();
$reqPass = query( "SELECT ............");
if( mysql_num_rows( $reqPass ) == 0 )
stop( "Votre nom d'utilisateur est incorrect. Vous devez avoir un compte valide sur le forum pour participer au chat" );
else {
$row = mysql_fetch_assoc( $reqPass );
if( !phpbb_check_hash( $passTchat, $row['user_password'] ) )
stop( 'Votre mot de passe est incorect. En cas d\'oubli, <a href="http://forum.angusmacgyver.fr/ucp.php?mode=sendpassword" target="forget">cliquez ici</a>.' );
$_SESSION["nomTchat"] = $row['username'];
stop("ok|||".$_SESSION["nomTchat"]);
}
mysql_close();
?>
<?php
session_start();
function stop ( $message ) {
echo $message;
exit(0);
}
if( isset( $_POST["ok"] ) && strlen( $_POST["ok"] ) > 0 )
$actualTchat = $_POST["ok"];
else
stop( "probleme de variable" );
if( isset( $_SESSION["nomTchat"] ) ) {
if( $actuelTchat == "nouveau" )
stop("ok|||".htmlEntities( file_get_contents('../tchat/tchat.txt') ));
else {
$nouveauText = "";
$fichier = fopen('../tchat/tchat.txt', 'r');
while ( !feof($fichier) ) {
$ligne = fgets($fichier, 3000);
if( $actualTchat == substr( $ligne, strpos($ligne, '<i')+26, 19 ) )
stop("ok|||".$nouveauText);
else
$nouveauText .= $ligne;
}
stop("ok|||".$nouveauText);
}
}
else
stop("ko|||probleme d'itentification");
?>
[/code]