\n";
} # Fin de la fonction cellule_retour()
function cellule_navigation($colspan, $table_bgcolor, $env_php_self, $barre_nav){
echo "
\n
".$barre_nav."
\n
\n";
} # Fin de la fonction cellule_navigation()
/*=======================================================================================
* Formate le résultats des requètes d'affichage
* @param array $res Résultat du mysql_fetch_array
* @return array Tableau des résultats formatés
=======================================================================================*/
function formatage_res($res, $recherche_html, $recherche, $lecture){
$temp_resultat[nom] = stripslashes($res[nom]);
if($temp_resultat[nom] == ""){$temp_resultat[nom] = "(anonyme)";}
$temp_resultat[email] = stripslashes($res[email]);
$temp_resultat[sujet] = stripslashes($res[sujet]);
if($temp_resultat[sujet] == ""){$temp_resultat[sujet] = "(sans titre)";}
$temp_resultat[email] = $this->email_encode($temp_resultat[email]);
if(isset($lecture)){
$temp_resultat[texte] = htmlentities($res[texte]);
$temp_resultat[texte] = stripslashes($temp_resultat[texte]);
# Transforme les urls et les adresses email en liens "cliquables"
$texte = $temp_resultat[texte];
$texte = eregi_replace("(http|ftp+)://([^[:space:]]*)([[:alnum:]|[:punct:]])", "\\1://\\2\\3", $texte);
$texte = eregi_replace("\[\[\(([0-9]+)\)\]\]","> Message \\1",$texte);
$texte = eregi_replace("\[\(\[([[:alnum:]|[:punct:]]+)\]\)\]([^[:space:]]*)([[:alnum:]|[:punct:]])", "\\1", $texte);
$texte = eregi_replace("\[\(f\[([[:alnum:]|[:punct:]]+)\]f\)\]([^[:space:]]*)([[:alnum:]|[:punct:]])", "\\1", $texte);
$texte = eregi_replace("\[\(i\[([[:alnum:]|[:punct:]]+)\]i\)\]([^[:space:]]*)([[:alnum:]|[:punct:]])", "\\1", $texte);
$texte = eregi_replace("\[\(u\[([[:alnum:]|[:punct:]]+)\]u\)\]([^[:space:]]*)([[:alnum:]|[:punct:]])", "\\1", $texte);
//$texte = preg_replace("[\n|\n\r]", " ", $texte);
$temp_resultat[texte] = $texte;
$temp_resultat[texte] = nl2br($temp_resultat[texte]);
preg_match("#PHP/([0-9])#", $_SERVER['SERVER_SOFTWARE'], $env_php_ver); # Récupère le numéro de version de php
if($env_php_ver[1]>3){
# Si la version de php est supérieur à la 3, on peut utiliser les fonction email_encode_preg() et wordwrap()
$temp_resultat[texte] = @wordwrap($temp_resultat[texte], 72 , "\n", 1);
$temp_resultat[texte] = @preg_replace("/([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)/ei", "email_encode_preg('\\1')", $temp_resultat[texte]);
}
else{
# Si php est en version 3, on doit se passer de la susdite fonction
$temp_resultat[texte] = preg_replace("/([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)/i", "\\1", $temp_resultat[texte]);
}
}
if(isset($recherche)){ # Si on est en mode recherche on lance le traitement des résultats
$temp_resultat[sujet] = $res[sujet];
$temp_resultat[texte] = $res[texte];
$temp_resultat[nom] = $res[nom];
$pos = strpos("$temp_resultat[texte]", "$recherche");
$longueur_recherche = strlen($recherche);
$longueur_texte = strlen($temp_resultat[texte]);
$debut_texte = $pos - 50;
$fin = $longueur_recherche + 80;
if($debut_texte<0){$debut_texte = O;}
if($fin>$longueur_texte){$fin = $longueur_texte;}
$temp_resultat[texte] = substr("$temp_resultat[texte]", $debut_texte, $fin);
$temp_resultat[texte] = htmlentities($temp_resultat[texte]);
$temp_resultat[texte] = preg_replace("#($recherche_html)#i", "\\1", $temp_resultat[texte]);
$temp_resultat[nom] = preg_replace("#($recherche_html)#i", "\\1", $temp_resultat[nom]);
$temp_resultat[sujet] = preg_replace("#($recherche_html)#i", "\\1", $temp_resultat[sujet]);
$temp_resultat[texte] = stripslashes($temp_resultat[texte]);
$temp_resultat[nom] = stripslashes($temp_resultat[nom]);
$temp_resultat[sujet] = stripslashes($temp_resultat[sujet]);
} # Fin du traitement pour la recherche
if(!isset($lecture)){ # Formatte la date
$temp_resultat[annee] = substr($res[tempo],0,4);
$temp_resultat[mois] = substr($res[tempo],4,2);
$temp_resultat[jour] = substr($res[tempo],6,2);
$temp_resultat[heure] = substr($res[tempo],8,2);
$temp_resultat[minute] = substr($res[tempo],10,2);
}
else{
$temp_resultat[annee] = substr($res[dat],0,4);
$temp_resultat[mois] = substr($res[dat],5,2);
$temp_resultat[jour] = substr($res[dat],8,2);
$temp_resultat[heure] = substr($res[dat],11,2);
$temp_resultat[minute] = substr($res[dat],14,2);
}
if($res[premier] == 0){} # si le message n'a pas de parent on prend l'heure dans le champ "dat"
else{} # pour les message avec un parent, on utilise l'ancienne méthode, ça permet d'avoir un effet rétroactif sur les anciens messages
return $temp_resultat;
} # Fin de la fonction formatage_res()
/*=======================================================================================
* Affiche les messages d'un fil de discussion,
* s'intègre dans une boucle ou non si il s'agit d'afficher uniquement le premier message.
* @param string[table] $res Tableau, résultat du mysql_fetch_array
* @param string $passforum Valeur du cookie d'administration
* @param string $forumpassword Mot de passe d'administration
* @param string $col1 Couleur du fond #1
* @param string $col2 Couleur du fond #2
* @return string Les deux cellules qui affichent un message dans un fil
=======================================================================================*/
function affichage_fil($res, $passforum, $forumpassword, $col1, $col2, $env_php_ver, $table_bgcolor, $lecture, $filinfobgcolor, $titresbgcolor, $filtxtbgcolor){
# Les lignes qui suivent permette de formatter convenablement la sortie, en éliminant les slashes,
# en convertissant les sauts de ligne \n en (html) et en transformant les caractères spéciaux
# en entités HTML
$_resultat = $this->formatage_res($res, $recherche, $recherche_html, $lecture);
$ip = $res[ip];
$id = $res[id];
echo "
\n
";
if(!empty($_resultat[email])){ # Si l'adresse email n'est pas vide, on l'entoure du lien adéquat
echo "".$_resultat[nom]."";
}
else{
echo $_resultat[nom];
}
echo "
\n";
} # Fin de la fonction affichage_fil()
/*=======================================================================================
* Vérifie le mot de passe d'administration, envoie un cookie et recharge la page ou
* renvoi un message d'erreur si celui-ci est incorrect.
* @param string $passit Mot de passe envoyé par le formulaire
* @param string $forumpassword Mot de passe défini pour l'administration
* @param string $env_php_self Nom de la page
* @return special Le cookie d'administration
* @return string Un message d'erreur éventuel
=======================================================================================*/
function pass_or_die($passit, $forumpassword, $env_php_self){
if(isset($passit)){ # Si le formulaire de saisie du mot de passe pour l'administration a renvoyé un mot de passe, on lance la vérification de celui-ci.
if($passit == $forumpassword){ # Si le mot de passe est correct, on envoie le cookie avec le mot de passe crypté.
$motdepasse = md5($passit); # crypte le mot de passe
setcookie( "passforum", "$motdepasse",time()+7200); # Envoi le cookie
header("location:$env_php_self?debut=0"); # Recharge la page
}
else{ # Si le mot de passe est incorrect, renvoi d'un message d'erreur.
header("location:$env_php_self?message=4"); # Recharge la page avec le message d'erreur
}
}
} # Fin de la fonction pass_or_die()
/*=======================================================================================
* Affiche une cellule qui contient le formulaire de recherche
* @param string $env_php_self Le non de la page en cours
* @param string $table_bgcolor La couleur du fond des cellules de navigation
* @param string $colspan Paramètre d'étendue de la cellule
* @return string La cellule et son formulaire
=======================================================================================*/
function cellules_recherche($env_php_self, $table_bgcolor, $_cellules_recherche, $lecture, $colspan="0", $recherche, $col_head){
echo " ";
}
/*=======================================================================================
* Affiche le formulaire d'envoi de message
* @param string $fige Détermine l'affichage ou nom du formulaire
* @param string $passforum Valeur du cookie d'aministration
* @param string $forumpassword Mot de passe défini pour l'administration
* @param string $env_php_self Nom de la page
* @param string $premier Id du message en cours
* @param string $tail_msg Largeur table "Envoyer un message"
* @param string $align2 Al. hor. de la table "Envoyer un message"
* @param string $col_head Couleur fond table en-tête (Sujet, exp., date, rép)
* @param string $col_msg Couleur fond du formulaire Envoyer un message
* @param string $lecture Id du message en cours
* @param string $followsubject Reprend le titre du message en cours si l'on est dans un fil
* @return string Le formulaire d'envoi de message
=======================================================================================*/
function form_message($fige, $passforum, $forumpassword, $env_php_self, $tail_msg, $align2, $col_head, $col_msg, $lecture, $followsubject, $_form_message, $coo_nom, $coo_mail, $coo_sign){
if($fige == "non" || $passforum == md5($forumpassword)){ # Si le forum n'est pas en mode figé ou que l'on est en mode administration, on affiche le formulaire
?>
\n";
echo "
".$_header_table[1]."
\n";
echo "
".$_header_table[2]."
\n";
if(!isset($recherche) OR empty($recherche)){
echo "
";
if(!empty($_resultat[email])){ # Si l'adresse email n'est pas vide, on l'entoure du lien adéquat
echo "".$_resultat[nom]."";
}
else{
echo $_resultat[nom];
}
if(!isset($recherche)){
echo "
\n";
}
} # Fin de la fonction affichage_liste()
/*=======================================================================================
* Crée la table SQL qui contient les messages ou met à jour celle existante
=======================================================================================*/
function admin_table($table, $env_query_string, $env_php_self){
if(ereg("creation",$env_query_string)){ # Création de la table
$requete="CREATE TABLE ".$table." (id int auto_increment primary key, nom varchar(20), email varchar(40), sujet varchar(60),texte text, dat VARCHAR (16), premier int,hits int, tempo timestamp,ip varchar(16), INDEX (`premier`, `tempo`) )";
$res_requete = mysql_query($requete);
header("location:$env_php_self?message=6");
}
if(ereg("maj",$env_query_string)){ # Mise à jour pour les anciennes versions
$requete="CREATE INDEX indx1 ON ".$table." (premier, tempo)";
$res_requete = mysql_query($requete);
header("location:$env_php_self?message=7");
}
} # Fin de la fonction admin_table()
/*=======================================================================================
* Insert un nouveau message dans la table SQL ou retourne un message d'erreur
=======================================================================================*/
function postage($table, $postage, $cdsujet, $cdmail, $cdtxt, $cdnom, $premier, $lecture, $refresh, $env_php_self, $ip, $decalage){
$req1 = mysql_query("SELECT texte from $table order by id desc LIMIT 0,1");
$resp1 = mysql_fetch_array($req1);
$double = $resp1[texte];
if(isset($postage)){ # lance l'insertion et la vérification des nouveaux message
if(empty($cdsujet) || empty($cdtxt) || $cdtxt == $double){ # Si il n'y a rien dans le sujet et/ou dans le texte, alors on affiche un msg d'erreur.
if(empty($cdsujet)){$message = 1;}
if(empty($cdtxt)){$message = 2;}
if(empty($cdtxt) && empty($cdsujet)){$message = 3;}
if($cdtxt == $double){$message = 9;}
if(!empty($premier)){ # Si on est dans un fil, on retourne sur celui-ci
header("location:$env_php_self?lecture=$premier&message=$message");
}
else{ # Sinon on retourne sur la première page
header("location:$env_php_self?message=$message");
}
}
else{ # On lance l'insertion dans la base de données
$date = date("Y-m-d H:i", time()+($decalage*3600));
if(! $premier){ # Vérifie l'existence d'un parent éventuel
$premier = 0;
}
else{ # Incrémente le compteur de réponse si le message fait partie d'un fil
$query = "UPDATE $table set hits = hits + 1 where id = $premier";
$result = mysql_query($query);
}
$cdsujet = addslashes($cdsujet);
$cdsujet = htmlentities($cdsujet);
$cdsujet = strip_tags($cdsujet);
$ch_texte = addslashes($cdtxt);
$ch_nom = addslashes($cdnom);
$ch_nom = htmlentities($ch_nom);
$ch_nom = strip_tags($ch_nom);
$query = "INSERT INTO $table (id,nom,email,sujet,texte,dat,premier,hits,ip) VALUES (0,'$ch_nom','$cdmail','$cdsujet','$ch_texte','$date','$premier',0,'$ip')";
$result = mysql_query($query);
header("location:$env_php_self?debut=0"); // empêche l'envoi en double avec netscape3 ??
if($envoimail == "oui" && !empty($sendmailto)){ # Si envoimail est égal à "oui", alors on envoie un e-mail pour chaque message posté.
$sendsubj = "[".substr($nomforum,0,10)."] ".$ch_sujet;
$corpsmail = "Message posté sur le forum ".$nom_forum.".\nDe: ".$ch_nom." (".$cdmail.")\nIP de l'auteur: ".$ip."\nLe: ".$date."\nSujet: ".$ch_sujet."\n\n-----\n".stripslashes($ch_texte)."\n-----";
$headers = "From: Forum <".$sendmailto.">";
mail($sendmailto,$sendsubj,$corps_mail,$headers);
}
if($refresh == "yes" && !empty($premier)){ # On retourne sur le fil de reférence si la case idoine est cochée
header("location:$env_php_self?lecture=$premier");
}
else{
header("location:$env_php_self?debut=0"); // redirige vers le forum, ça évite le "bug" d'Opera
}
}
}
} # Fin de la fonction postage()
/*=======================================================================================
* Compte les résultats de la recherche et affiche une cellule
=======================================================================================*/
function comptage_nb_reps($nb, $_comptage_nb_reps, $total_resultats, $table_bgcolor){
echo "
\n";
} #
$this->fin_html();
exit;
}
} # Fin de la fonction form_admin()
/*=======================================================================================
* Affiche le bouton pour détruire les messages
=======================================================================================*/
function cellule_admin($passforum, $forumpassword, $colspan, $col_head, $env_php_self, $_cellule_admin){
if($passforum == md5($forumpassword)){
echo "
\n
\n
\n
\n";
}
} # Fin de la fonction cellule_admin()
/*=======================================================================================
* Affiche les checkboxes pour sélectionner les messages à détruire
=======================================================================================*/
function admin_checkbox($lecture, $passforum, $forumpassword, $id, $ip){
if ($passforum == md5($forumpassword)){
# Si le mode d'administration est activé, on affiche le bouton qui permet de sélectionner
# les messages à effacer. On affiche également l'id du message et l'adresse ip de son auteur
if(isset($lecture)){
$sortie = " IP : ".$ip." ID : $id ";
}
$sortie .= "";
return $sortie;
}
} # Fin de la fonction admin_checkbox()
/*=======================================================================================
* Cette fonction efface un ou plusieurs messages
=======================================================================================*/
function efface_msg($effacer, $passforum, $forumpassword, $env_php_self, $delete, $table){
if(isset($effacer) AND $passforum == md5($forumpassword)){ # Vérifie le mot de passe
for($i=0; $i\n \n\n";
}
} # Fin de la classe Pretextes
?>