Textes, variante Julika, version 3.4.5 -- Forum PHP3 gratuit ================================================================= Ce forum est inspiré de celui écrit par Valentin Lacambre pour Altern.org License: copyleft (C) 2001-2005 BohwaZ, license Art Libre, www.artlibre.org. Ecrit par BohwaZ ( Mail: zero@tilt.eu.org | Web: http://kd2.org/ ) Merci à: - Plam ( Mail: 220@chez.com | Web: http://forum-scpo.com/ ) - Grand'Pa ( Web: http://grandpa.lautre.net/ ) Documentation complète sur http://dev.kd2.org/pretextes/ --------------------------------------------------------------- */ // Les fichiers à utiliser... $fichier['config'] = "forum_config.inc.php3"; // Config du forum $fichier['mysql'] = "forum_sql.inc.php3"; // Config de la base de données $fichier['forum'] = "forum.php3"; // Ce fichier $fichier['upload'] = "fichiers.php3"; // Fichier du plug-in fichiers attachés $version = "3.4.5"; // La conf par défaut avant installation $conf_defaut = array("bgcolor"=>"#ffffff", "text"=>"#000000", "link"=>"#3333FF", "vlink"=>"#009900", "titre"=>"Mon forum", "intro"=>"Bienvenue dans mon forum. N'hésitez pas à participer.", "bas"=>"=
Ce forum utilise <PRé>Textes : En savoir plus.", "motdepasse"=>"abcd", "tables"=>"600", "parpage"=>"20", "couleur1"=>"#ccccff", "couleur2"=>"#eeeeff", "couleur3"=>"#cc0000", "couleur4"=>"#eeeeee","couleur5"=>"#ffffff","moderation"=>"non","suivi_admin"=>"non", "autoriser_suivi"=>"non","autoriser_actu"=>"oui","fuseau"=>"serv","alink"=>"#FFCC33","smileys"=>"oui","smileys_path"=>"http://www.tilt.eu.org/smileys/icon_", "hauteur_form"=>"10","mizenpage"=>"oui"); // Les astuces pour le texte (en HTML) $astuces = array("Pour mettre un texte en gras, entourez-le de double accolades. Par exemple, en écrivant {{gras}} vous obtiendrez gras.", "Pour mettre un texte en italique, entourez-le d'accolades. Par exemple, en écrivant {italique} vous obtiendrez italique.", "Pour créer une liste à puces c'est simple, il suffit de laisser une ligne vide au dessus et en dessous de votre liste et d'utiliser des tirets précédés d'au moins un espace pour les éléments de la liste.", "Pour créer un lien avec un nom, faites comme ceci : [Salut!->http://tilt.eu.org/] donnera le lien suivant : Salut!.", "Pour mettre une image dans votre texte, tapez <img|adresse de l'image>. L'image doit être au format GIF, JPEG ou PNG.", "Pour mettre une image centrée dans votre texte, tapez <img|center|adresse>. En mettant à la place de 'adresse' l'adresse de votre image.", "Pour mettre une image alignée à gauche dans votre texte, tapez <img|left|adresse>. En mettant à la place de 'adresse' l'adresse de votre image.", "Pour mettre une image alignée à droite dans votre texte, tapez <img|right|adresse>. En mettant à la place de 'adresse' l'adresse de votre image."); // Fonction d'entete HTML par défaut function entete($titre="") { global $conf,$HTTP_COOKIE_VARS; if(empty($titre)) $titre = $conf['titre']; echo " ".htmlentities(get_titre($titre))." "; // Si il existe un fichier forum.css on l'utlise, sinon on utlise la feuille de style par défaut. if(file_exists("forum.css")) echo ""; else echo ""; echo '
'; echo format($titre,2); if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) echo '

Vous utilisez <PRé>Textes version '.$conf['version'].'

'; echo "
"; } // Fonction bas de page HTML par défaut function bas($bas="") { global $conf; if(empty($bas)) $bas = $conf['bas']; echo "
".format($bas)."
"; exit; } // Les différents champs de la table $champs = array("sujet","texte","nom","email"); // Si plusieurs termes, autorise clause NOT function genere_conditions($ch,$presence="oui") { global $champs; $i = 0; while($i < count($champs)) { if($presence == "non") $req.= $champs[$i]." NOT LIKE \"%".$ch."%\""; else $req.= $champs[$i]." LIKE \"%".$ch."%\""; if($i <> count($champs)-1) { if($presence == "non") $req.= " AND "; else $req.= " OR "; } $i++; } $req = "(".$req.")"; return $req; } // Générer la clause WHERE de SQL function genere_recherche($termes,$type="AND") { if($type <> "OR") $type = "AND"; $termes = stripslashes(trim(urldecode($termes))); if(strpos($termes," ")) { $c = explode(" ",$termes); $i = 0; while($i < count($c)) { $c[$i] = stripslashes($c[$i]); if((substr($c[$i],0,1) == "\"") || (substr($c[$i],0,2) == "-\"")) { if(substr($c[$i],0,2) == "-\"") { $presence = "non"; $ch = addslashes(substr($c[$i],2)); } else { $presence = "oui"; $ch = addslashes(substr($c[$i],1)); } $i++; while(!strpos($c[$i],"\"") && $i < count($c)) { $ch.= " ".addslashes($c[$i]); $i++; } if(strpos($c[$i],"\"")) $ch.= " ".addslashes(substr($c[$i],0,-1)); $req.= genere_conditions($ch,$presence); } else { if(substr($c[$i],0,1) == "-") { $presence = "non"; $ch = addslashes(substr($c[$i],1)); } else { $presence = "oui"; $ch = addslashes($c[$i]); } $req.= genere_conditions($ch,$presence); } if($i < count($c)-1) $req.= " ".$type." "; $i++; } } else { if(substr($termes,0,1) == "-") { $presence = "non"; $ch = addslashes(substr($termes,1)); } else { $presence = "oui"; $ch = addslashes($termes); } $req = genere_conditions($ch,$presence); } return trim($req); } // Création d'une date au format français à partir d'un timestamp unix function datefr($date,$type="") { global $conf; $fuseau = $conf[fuseau]; if(phpversion() < "4.3") { setlocale("LC_TIME","fr_FR"); setlocale("LC_TIME","fr"); setlocale('LC_TIME','fr_FR.ISO8859-15'); } else { setlocale(LC_TIME,"fr_FR"); setlocale(LC_TIME,"fr"); setlocale(LC_TIME,'fr_FR.ISO8859-15'); } if($fuseau <> "serv") { $date = gmmktime(date("H",$date),date("i",$date),0,date("m",$date),date("d",$date),date("Y",$date)); $sig = substr($fuseau,0,1); $h = substr($fuseau,1); if($sig == "+") $date = $date + ($h * 3600); elseif($sig == "-") $date = $date - ($h * 3600); } if($type == "stamp") return $date; $jour = date("d",$date); if(substr($jour,0,2) == "01") $jour = "1er"; elseif(substr($jour,0,1) == "0") $jour = substr($jour,1); if($type == "court") $date2 = $jour." ".strftime("%B",$date).date(" Y",$date); elseif($type == "court_heure") $date2 = $jour." ".strftime("%B",$date).date(" Y à H\hi",$date); elseif($type == "court_jour") $date2 = strftime("%A",$date)." ".$jour." ".strftime("%B",$date).date(" Y",$date); elseif($type == "abrege") $date2 = date("d/m/y H\hi",$date); else $date2 = strftime("%A",$date)." ".$jour." ".strftime("%B",$date).date(" Y à H\hi",$date); $date2 = htmlentities($date2); $date2 = str_replace("1er","1er",$date2); return $date2; } // Génère une liste des pages function lister_pages($debut,$total,$nb,$adr) { global $conf,$fichier; $parpage = $conf[parpage]; if($adr == $fichier[forum]) $adr.= "?debut="; else $adr.= "&debut="; if($debut >= $parpage) $p.= "<< Page précédente   | "; if($total > $parpage) { $total_pages = ceil($total / $parpage)+1; $page = floor(($debut + $parpage) / $parpage); $i = $page - 8; if($i < 1) $i = 1; if($page == 1) $tpages = $page + 23; else $tpages = $page + 9; if($tpages > $total_pages) $tpages = $total_pages; while($i < $tpages) { if($page == $i) $p.= " ".$i." "; else $p.= " ".$i." "; if($i < $tpages-1) $p.= " "; $i++; } } if(($debut + $parpage) < $total) $p.= " |   Page suivante >>"; if($total > $parpage) $p = "".$p.""; else $p = ""; return $p; } // Pour coder les adresse eMail des expéditeurs avec des codes étranges ;o) // Merci à Grand'Pa ;-) http://pretextes.apinc.org/ function cacher_mail($email) { $email = str_replace("@","[at]",$email); $len = strlen($email); for($x = 0; $x < $len; $x++) { $ord = ord(substr($email,$x,1)); $temp.= "&#".$ord.";"; } return $temp; } // Pour le bas de page, l'intro et le titre function format($texte,$option=1) { if(ereg("^=",$texte)) { $len = strlen($texte); $texte = stripslashes(substr($texte,1,$len)); } else { $texte = filtre(stripslashes($texte)); if($option == 2) $texte = "".$texte.""; } return stripslashes($texte); } // Pour récupérer le titre normal du forum function get_titre($titre="") { global $conf; if(empty($titre)) $titre = trim(stripslashes($conf[titre])); if(substr($titre,0,1) == "=") { $titre = substr($titre,1); eregi("",$titre,$out); $titre = $out[1]; } else $titre = propre($titre); return stripslashes(trim($titre)); } // Fonction filtre, permet de donner une mise en page aux messages function filtre($texte) { global $conf; $texte = trim($texte); // On enlève les espaces au début et à la fin du texte $texte = htmlentities($texte); // on met les caractères spéciaux en codes HTML $texte = str_replace("\r\n","\n",$texte); // On transforme les CRLF en LF // On enlève le texte entre %% du texte pour qu'il ne soit pas traité $i = 0; while(eregi("%%([^%]+)%%",$texte,$regs)) { $a = $regs[0]; $b = ""; $brute[$i] = trim($regs[1]); $texte = str_replace($a,$b,$texte); $i++; } // Traitement des parties code (
)
    $texte = eregi_replace("<(pre|/pre|code|/code)>","<\\1>",$texte);
    $i = 0;
    while(eregi("
([^<]+)
",$texte,$regs)) { $a = $regs[0]; $b = ""; $coda[$i] = trim($regs[1]); $texte = str_replace($a,$b,$texte); $i++; } // Liens sans rien $texte = eregi_replace("(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|peercast|ed2k):[A-Za-z0-9/](([A-Za-z0-9$_.+!*(),;/?:@&~=_#|-])|%[A-Fa-f0-9]{2})+)","\\0",$texte); $texte = eregi_replace("(^|[ \t\r\n])([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)", "\\0", $texte); if($GLOBALS[fichiers] == "oui") $texte = str_replace("###",fichier_url($GLOBALS[id2]),$texte); // Les blocs et listes à puces $texte = ereg_replace("\n{2,}","\n\n",$texte); $txt = explode("\n\n",$texte); for($i=0; $i < count($txt); $i++) { if(eregi("^([ ]+)(#|-)",$txt[$i],$out)) { if($out[2] == "#") $ls = "ol"; else $ls = "ul"; $liste = explode("\n",trim($txt[$i])); $sortie = ""; for($a=0; $a < count($liste); $a++) { $x1 = ereg_replace("^[ ]*".$out[2],"",$liste[$a]); $x1 = trim($x1); $sortie.= "
  • ".$x1."
  • "; } $txt[$i] = "<".$ls.">".$sortie.""; } } $texte = implode("\n\n",$txt); $texte = ereg_replace("\n+","",$texte); $texte = ereg_replace("\n+<([uo]l)>","<\\1>",$texte); // Traitement des images: centrées, gauche ou droite et normales $texte = eregi_replace("<img\|center\|([^\n &\|]+)>","
    Image
    ",$texte); $texte = eregi_replace("<img\|(right|left)\|([^\n &\|]+)>","Image",$texte); $texte = eregi_replace("<img\|([^\n &\|]+)>","Image",$texte); // Traitement des images (nouvelle version, apparu dans Textes Julika 3.4) // Syntaxe: preg_match_all("/<image\|([^\|]+)(\|align=(left|right|top|texttop|middle|absmiddle|baseline|bottom|absbottom))?". "(\|alt=([^\|]+))?(\|title=([^\|]+))?(\|([0-9]+)x([0-9]+))?>/Ui",$texte,$out,PREG_SET_ORDER); while(eregi("<image\|([^\|]+)(\|align=(left|right|top|texttop|middle|absmiddle|baseline|bottom|absbottom))?". "(\|alt=([^\|]+))?(\|title=([^\|]+))?(\|([0-9]+)x([0-9]+))?>",$texte,$out)) { $tag = "\\1", $texte); $texte = eregi_replace("\[([^\n\[]+)(->|\|)([^\n\[\"]+)\]", "\\1", $texte); //" // Mise en page $texte = str_replace("{{","",$texte); // en gras... $texte = str_replace("}}","",$texte); $texte = str_replace("{","",$texte); // en italique... $texte = str_replace("}","",$texte); $texte = str_replace("<<","«", $texte); // french quotes $texte = str_replace(">>","»", $texte); $texte = ereg_replace("\n---(-)*\n?", "
    ", $texte); // ligne de séparation // Traitement des images: centrées, gauche ou droite et normales $texte = eregi_replace("<img\|center\|([^\n &\|]+)>","
    Image
    ",$texte); $texte = eregi_replace("<img\|(right|left)\|([^\n &\|]+)>","Image",$texte); $texte = eregi_replace("<img\|([^\n &\|]+)>","Image",$texte); // On cache les eMails while(eregi("([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)",$texte,$out)) { $texte = str_replace($out[0],cacher_mail($out[0]),$texte); } // Les smileys if($conf[smileys] == "oui") $texte = smileys($texte); $texte = eregi_replace("\n*()\n*","\\1",$texte); // On remet le texte enlevé précédemment (entre %%) et on autorise les balises
     et 
        for($i = 0; $i < count($coda); $i++) {
            $a = $coda[$i];
            $b = "";
            $a = eregi_replace("(</?[a-z]+([ ]|>))","\\1",$a);
            $a = eregi_replace("([a-z0-9_-]+[ ]*)\(","\\1(",$a);
            $a = str_replace("  ","  ",$a);
            $a = eregi_replace("(\\$[a-z0-9_-]+(\[[\"\']?[a-z0-9_-]+[\"\']?\])*)","\\1",$a);
            $a = str_replace("\n","\n",$a);
            $a = "

    ".$a."

    "; $texte = str_replace($b,$a,$texte); } for($i = 0; $i < count($brute); $i++) { $a = $brute[$i]; $b = ""; $texte = str_replace($b,$a,$texte); } // Traitement des retours à la ligne $texte = str_replace("\n","
    \n",$texte); $texte = "\n".$texte; return $texte; } function smileys($texte) { global $conf; if(empty($conf[smileys_path])) $path = "http://www.tilt.eu.org/smileys/icon_"; else $path = $conf[smileys_path]; $smileys = array(":D",":)",":(",":oops:",":shock:",":?:","8)",":lol:",":x",":P",":o",":cry:",":evil:",":twisted:", ":roll:",":wink:",":!:",":?",":idea:",":arrow:"); $images = array("biggrin.gif","smile.gif","sad.gif","redface.gif","eek.gif","question.gif","cool.gif","lol.gif","mad.gif","razz.gif", "surprised.gif","cry.gif","evil.gif","twisted.gif","rolleyes.gif","wink.gif","exclaim.gif","confused.gif","idea.gif","arrow.gif"); if($phpversion > 4) { // PHP3 ne gère pas les paramètres d'entrée en tableaux :( for($i=0; $i < count($images); $i++) { $images[$i] = "".$images[$i].""; } $texte = str_replace($smileys,$images,$texte); } else { for($i=0; $i < count($images); $i++) { $texte = str_replace($smileys[$i],"".$images[$i]."",$texte); } } return $texte; } // Fonction qui vire les codes de mise en page (pour l'affichage des extraits de texte) function propre($texte) { $texte = str_replace("\r","",$texte); $texte = str_replace("%%"," ",$texte); $texte = eregi_replace("\[([^\n\[]*)->([^\n]*)\]", "\\1", $texte); // si ya eu un htmlentities avant $texte = eregi_replace("\[([^\n\[]*)->([^\n]*)\]", "\\1", $texte); // si yen a pas eu $texte = str_replace("{","",$texte); $texte = str_replace("}","",$texte); $texte = eregi_replace("<img\|([^\n]*)>"," ",$texte); // si htmlentities $texte = eregi_replace(""," ",$texte); // si non $texte = eregi_replace("<image\|([^\n]*)>"," ",$texte); // si htmlentities $texte = eregi_replace(""," ",$texte); // si non return $texte; } // Enregistrement de la config function rec_config($conf) { global $fichier; $conf[titre] = addslashes($conf[titre]); $conf[intro] = addslashes($conf[intro]); $conf[bas] = addslashes($conf[bas]); $conf['version'] = $GLOBALS['version']; foreach($conf as $key=>$val) { if(!isset($conn)) $conn = '"'.$val.'"'; else $conn.= ', "'.$key.'"=>"'.$val.'"'; } $conn.= ');?>'; // Si le fichier existe on le vire (évite un bug) if(file_exists($fichier['config'])) @unlink($fichier['config']); // On écrit le fichier $myFile = fopen($fichier['config'], "w"); fputs($myFile, $conn); fclose($myFile); } // Enregistrement de l'installation function rec_install() { global $fichier,$conf_defaut,$HTTP_POST_VARS; // on récupère les variables grâce aux variables HTTP_POST (plus sécure) $host = $HTTP_POST_VARS['host']; $bdd = $HTTP_POST_VARS['bdd']; $user = $HTTP_POST_VARS['user']; $table = $HTTP_POST_VARS['table']; $pass = $HTTP_POST_VARS['pass']; // On vérifie que les trucs sont bien là if(empty($host)) install("L'adresse du serveur SQL n'a pas été spécifiée."); elseif(empty($user)) install("Le login d'accès du serveur SQL n'a pas été spécifié."); elseif(empty($pass)) install("Le mot de passe d'accès du serveur SQL n'a pas été spécifié."); elseif(empty($bdd)) install("La base de données à utiliser du serveur SQL n'a pas été spécifiée."); elseif(empty($table)) install("La table à utiliser n'a pas été spécifiée."); // On vérifie que la connexion à la base se fait bien. if(mysql_connect($host, $user, $pass) == FALSE) install("La connexion à la base de données a échouée. Vérifiez votre configuration."); $lien = mysql_connect($host, $user, $pass); if(mysql_select_db($bdd,$lien) == FALSE) install("La sélection de la base de données à échouée. Vérifiez vos paramètres."); // On vérifie si la table existe $requete = "SELECT id FROM ".$table; $resultat = mysql_query($requete); if($resultat < 1) { $requete = "CREATE TABLE ".$table." ( id INT AUTO_INCREMENT PRIMARY KEY, nom varchar(80) NOT NULL DEFAULT 'Anonyme', email varchar(100) NULL, sujet varchar(100) NOT NULL, texte TEXT NOT NULL, date INT(20) NOT NULL, parent INT NOT NULL DEFAULT '0', date_fiston INT(20) NULL, ip VARCHAR(40) NOT NULL DEFAULT 'Inconnue', statut ENUM('suivi','admin','actu','rien') NOT NULL DEFAULT 'rien', validation ENUM('oui','non') NOT NULL DEFAULT 'oui');"; $resultat = mysql_query($requete); if($resultat < 1) install("Erreur dans la création de la table: ".mysql_error()."."); } // On écrit le fichier de conf SQL $conn = "

    Problème technique

    \".mysql_error().\"\");\n"; $conn.= "@mysql_select_db(\$bdd,\$lien) or die(\"

    Problème technique

    \".mysql_error().\"
    \");\n\n"; $conn.= "\$host = \"\";\n\$user = \"\";\n\$pass = \"\";\n\$bdd = \"\";\n"; $conn.= "?>"; $myFile = fopen($fichier['mysql'], "w"); fputs($myFile, $conn); fclose($myFile); // On enregistre la conf par défaut rec_config($conf_defaut); // All right babe! On peux utiliser le forum entete("Textes"); echo "

    Configuration MySQL réussie

    Votre forum est désormais fonctionnel. Cliquez ici pour commencer à utiliser votre forum.

    Nota: le mot de passe d'administration est « abcd » (sans les guillemets).
    "; bas("=
    Documentation de ce forum
    "); } // Installation du forum function install($msg="") { global $conf_defaut,$fichier; $conf = $conf_defaut; global $host,$user,$pass,$bdd,$table; if(empty($host)) $host = "localhost"; entete("Textes"); echo "
    "; if(!empty($msg)) echo " "; echo "
    Bienvenue dans l'installation du forum <PRÉ>Textes
    Pour pouvoir installer ce forum vous devez connaître vos paramètres de connexion à la base MySQL. Si vous ne les connaissez pas, contactez votre hébergeur. Pour en savoir plus sur l'installation de ce forum, consultez sa documentation sur KD2.org.
     
    ".htmlentities($msg)."
     
    Adresse du serveur MySQL :
    Votre login d'accès à MySQL :
    Votre mot de passe d'accès à MySQL :
    Votre base de données MySQL :
    Le nom de la table à créer :
    (lettres non accentuées uniquement)   
     
    "; bas("=
    Documentation de ce forum
    "); exit; } // Liste des messages sur la page d'accueil function liste_msg($debut="",$msg="") { global $conf,$table,$fichier,$astuces,$HTTP_COOKIE_VARS,$HTTP_POST_VARS; // Si le forum est fermé on peux pas poster de message = le formulaire est désactivé if(($conf['moderation'] == "aucune") && ($HTTP_COOKIE_VARS['forum_passe'] <> md5($conf['motdepasse']))) $disabled = " disabled"; if(empty($debut)) $debut = 0; $parpage = $conf['parpage']; entete(); echo " "; // Si dans la conf ya les actus alors on affiche le petit bloc actus if($conf['autoriser_actu'] == "oui") { $tactu = "statut <> 'actu' AND "; $requete = "SELECT sujet,id,texte,date FROM ".$table." WHERE statut='actu' ORDER BY date DESC LIMIT 0,1"; $resultat = mysql_query($requete); echo " "; } else echo " "; echo "
    "; if(mysql_num_rows($resultat) == 1) { $rec = mysql_fetch_array($resultat); $texte = stripslashes($rec['texte']); if(strlen($texte) > 150) { $texte = substr($texte,0,150); $pos = strrpos($texte," "); $texte = substr($texte,0,$pos); $texte = propre(htmlentities($texte)); $texte.= "..."; } else $texte = htmlentities($texte); $x = round($conf[tables] / 4); $a = round($x / 3); echo "
    ACTUALITÉ ".substr(datefr($rec['date'],"court"),0,-5)."
    ".htmlentities(stripslashes($rec['sujet']))."
    ".$texte."
    > Voir toutes les actus
    "; } echo "".format($conf['intro'])."
    ".format($conf['intro'])."

    "; // On affiche un message d'erreur le cas échéant if(!empty($msg)) echo "
    ".htmlentities(stripslashes($msg))."

    "; // Si c'est l'admin qu'est là (il a le cookie qui correspond au passe) if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) { if($conf['moderation'] == "oui") { // Si le forum est modéré à priori, lien vers les messages à valider $requete = "SELECT COUNT(*) FROM ".$table." WHERE validation='non'"; $res = mysql_fetch_row(mysql_query($requete)); $nb = $res[0]; echo "
    "; if($nb > 0) echo "Il y a ".$nb." message(s) en attente de validation."; else echo "Il n'y a pas de messages en attente de validation."; echo "
    "; } echo "
    "; $email = $conf['email']; } else $email = $HTTP_POST_VARS['email']; echo " "; if($HTTP_COOKIE_VARS['forum_passe'] != md5($conf['motdepasse'])) $validation = "AND validation='oui' "; // On affiche la liste des messages $requete = "SELECT id,sujet,nom,date_fiston,statut,validation,nb_reponses FROM ".$table." "; $requete.= "WHERE ".$tactu."parent='0' ".$validation; $requete.= "ORDER BY date_fiston DESC LIMIT ".$debut.",".$parpage; $resultat = mysql_query($requete); $nb = mysql_num_rows($resultat); $col = $conf['couleur2']; while($rec = mysql_fetch_array($resultat)) { $nb_reps = $rec['nb_reponses']; if(empty($rec[nom])) $nom = "Anonyme"; else $nom = htmlentities(stripslashes($rec['nom'])); if($rec['statut'] == 'admin') $nom = "".$nom.""; if($rec[validation] == "non") $col = $conf[couleur4]."' style='font-weight: bold;'"; echo " "; if($col == $conf[couleur1]) $col = $conf[couleur2]; else $col = $conf[couleur1]; } // Comptage du total de messages dans le forum $requete = "SELECT COUNT(*) FROM ".$table." WHERE ".$tactu."validation='oui' AND parent='0'"; $res = mysql_fetch_row(mysql_query($requete)); $total = $res[0]; // Si pas de message, forum triste ;-( if($total < 1) echo ""; // Si ya plus de messages en tout que ceux affiché sur cette page, liens vers pages suivantes if($total > $parpage) { echo ""; } // Si c'est l'admin, affichage bouton supprimer messages if(($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) && ($total >= 1)) { echo "
    Sujet Auteur Réponses Dernière réponse
    "; if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) echo ""; echo "".htmlentities(stripslashes($rec['sujet'])).""; if($nb_reps > $conf[parpage]) { $tpages = ceil($nb_reps / $conf[parpage]); $p = ($tpages - 1) * $conf[parpage]; echo "     [ Aller à la page: 1 ... ".$tpages." ]"; } echo " ".$nom." ".$nb_reps." ".datefr($rec['date_fiston'],"abrege")."
    Pas de messages dans ce forum.
    ".lister_pages($debut,$total,$nb,$fichier[forum])."
    Tout cocher / Tout décocher  
    "; if($conf['autoriser_actu'] == "oui") echo " "; } else echo ""; if($conf[mizenpage] == "oui") echo " "; // Formulaire de message $x = round($conf[tables] /1.5); $a = round($x / 8); $b = $x - $a; echo "
    "; if($GLOBALS[fichiers] == "oui" && ($GLOBALS[fichiers_users] == "oui" || ($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])))) echo "
    "; else echo ""; echo " "; if($GLOBALS[fichiers] == "oui" && ($GLOBALS[fichiers_users] == "oui" || ($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])))) { echo " "; } echo "
    Ajouter un message
    Nom :
    eMail :
    Sujet :
    Fichier :
    Texte :"; // Si forum modéré, on le dit if($conf['moderation'] == "oui") echo "

    (Forum modéré)
    [?]

    "; echo "
    "; if($conf[mizenpage] == "oui") { echo " "; if($conf[smileys] == "oui") echo "     "; echo "
    "; } echo "
    "; // Si admin, affichage boutons spéciaux admin if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) { if($conf['moderation'] == "oui") echo "
    "; if($conf['autoriser_actu'] == "oui") echo " "; echo " "; } else { if($conf['autoriser_suivi'] == "oui") echo "   "; else echo " "; } echo "


    Petite astuce...
    "; // On afiche une astuce au hasard mt_srand((float) microtime()*1000000); $i = mt_rand(0,count($astuces)-1); echo stripslashes($astuces[$i])."
    > Voir toutes les astuces

    "; // Si admin, liens Config/Déco if(md5($conf['motdepasse']) == $HTTP_COOKIE_VARS['forum_passe']) echo "Configuration   Déconnexion"; else echo "
    Accès administrateur:
    "; echo "
    "; bas(); exit; } // Ajouter un message au forum function ajouter($parent) { global $HTTP_POST_VARS,$conf,$fichier,$table,$HTTP_COOKIE_VARS; if($GLOBALS[fichiers] == "oui" && ($GLOBALS[fichiers_users] == "oui" || ($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])))) { global $file,$file_size,$file_name; if($file_size > 0) { if(($file_size > ($GLOBALS[fichiers_max] * 1000)) || eregi("\.(php|cgi|ssi|php3|php4|phtml|pl)$",$file_name)) { if($parent == 0) liste_msg("","Erreur ! Votre fichier fait plus de ".$GLOBALS[fichiers_max]."Ko ou est un script serveur."); else lecture($parent,"Erreur ! Votre fichier fait plus de ".$GLOBALS[fichiers_max]."Ko ou est un script serveur."); } $f = "oui"; } } $REMOTE_ADDR = getenv("REMOTE_ADDR"); // Si le forum est fermé, faut pas chercher, on peut pas poster, même en trichant if($conf['moderation'] == "aucune") header("location: ".$fichier['forum']); // On récupère les variables $sujet = $HTTP_POST_VARS['sujet']; $nom = $HTTP_POST_VARS['nom']; $email = $HTTP_POST_VARS['email']; $texte = $HTTP_POST_VARS['texte']; // Si sujet/message vide, alors forum pas content if($parent == 0) { if(empty($sujet)) liste_msg("","Erreur ! Veuillez entrer un sujet."); elseif(empty($texte)) liste_msg("","Erreur ! Veuillez entrer un message."); } else { if(empty($sujet)) lecture($parent,"Erreur ! Veuillez entrer un sujet."); elseif(empty($texte)) lecture($parent,"Erreur ! Veuillez entrer un message."); } // On fait du préparage de variables $nom = trim(addslashes($nom)); $email = trim(addslashes($email)); $sujet = trim(addslashes($sujet)); $texte = trim(addslashes($texte)); $date = time(); $requete = "INSERT INTO ".$table." SET sujet=\"$sujet\", texte=\"$texte\", email=\"$email\", \n"; $requete.= "nom=\"$nom\", date=\"$date\", parent=\"$parent\", date_fiston=\"$date\", ip=\"".$REMOTE_ADDR."\""; // Si Suivi des mails alors on récupère les mails if($conf['autoriser_suivi'] == "oui") { if($HTTP_POST_VARS['suivimail'] == "oui") { if(!eregi("^([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)$",$email)) { if($parent == 0) liste_msg("","Erreur ! Veuillez entrer une adresse eMail valide."); else lecture($parent,"Erreur ! Veuillez entrer une adresse eMail valide."); } $requete.= ", statut='suivi'"; } if($parent > 0) { $requete2 = "SELECT email FROM ".$table." WHERE (parent=\"$parent\" OR id=\"$parent\") AND statut='suivi' AND validation='oui'"; $resultat = mysql_query($requete2); if(mysql_num_rows($resultat) > 0) { while($rec = mysql_fetch_array($resultat)) { if(empty($dests)) $dests = stripslashes(trim($rec['email'])); else $dests.= ", ".stripslashes(trim($rec['email'])); } $headers = "Bcc: ".$dests."\nFrom: ".$conf['email']."\nReply-To: ".$conf['email']."\nReturn-Path: ".$conf['email']; $titre = get_titre(); $body = "CECI EST UN MESSAGE AUTOMATIQUE, MERCI DE NE PAS Y REPONDRE\n"; $body.= "-----------------------------------------------------------\n\n"; $body.= "Il y a un nouveau message sur le forum ".$titre.".\n\nVous pouvez y répondre ici:\n"; $body.= "http://".getenv("HTTP_HOST").getenv("REQUEST_URI")."?lecture=".$parent."#repondre\n". "Dans le sujet: ".stripslashes(stripslashes($sujet))."\nAuteur: ".$nom. "\nDate: ".date("d/m/Y H\hi")."\n\n".propre(stripslashes(stripslashes($texte))); $body.= "\n\n-----------------------------------------------------------\n"; $body.= "Pour ne plus reçevoir les réponses à ce message, rendez-vous ici:\nhttp://".getenv("HTTP_HOST").getenv("REQUEST_URI")."?unwatch=".$parent; @mail($conf['email'],"[Forum] $titre",$body,$headers); $no_admin = "oui"; } } } if(($conf['suivi_admin'] == "oui") && ($no_admin <> "oui")) { $headers = "From: ".$conf['email']."\nReply-To: ".$conf['email']."\nReturn-Path: ".$conf['email']; $titre = get_titre(); $body = "CECI EST UN MESSAGE AUTOMATIQUE, MERCI DE NE PAS Y REPONDRE\n"; $body.= "-----------------------------------------------------------\n\n"; $body.= "Il y a un nouveau message sur le forum ".$titre.".\n\nDans le sujet: ".$sujet."\nAuteur: ".$nom."\nDate: ".date("d/m/Y H\hi")."\n\n".propre(stripslashes(stripslashes($texte))); @mail($conf['email'],"[Forum] $titre",$body,$headers); } // Si admin, alors on prend en compte les options if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) { $option = $HTTP_POST_VARS['option']; if($option == "actu") $requete.= ", statut='actu', validation='oui'"; elseif($option == "admin") $requete.= ", statut='admin', validation='oui'"; else { if($conf['moderation'] == "oui") { if($HTTP_POST_VARS['validation'] == "oui") $requete.= ", validation='oui'"; else $requete.= ", validation='non'"; } } } else { if($conf['moderation'] == "oui") $requete.= ", validation='non'"; elseif($conf['moderation'] == "aucune") liste_msg("","Vous ne pouvez pas ajouter de messages."); else $requete.= ", validation='oui'"; } $resultat = mysql_query($requete) or die("Problème technique."); if($f == "oui") { $id = mysql_insert_id(); $ext = substr($file_name,strrpos($file_name,".")+1); copy($file,"fichiers/".$id.".".$ext); } // Si le message est dans un fil, alors on met à jour la date du papa if($parent > 0) { $requete = "UPDATE ".$table." SET date_fiston=\"$date\",nb_reponses=nb_reponses+1 WHERE id=\"$parent\""; $resultat = mysql_query($requete); } if($parent < 1) header("location: ".$fichier['forum']); else header("location: ".$fichier['forum']."?lecture=".$parent); } // Lire un fil function lecture($id,$msg="") { global $conf,$fichier,$table,$astuces,$HTTP_COOKIE_VARS,$HTTP_POST_VARS,$debut; $GLOBALS[id2] = $id; $requete = "SELECT COUNT(*) FROM ".$table." WHERE id=\"$id\""; $res = mysql_fetch_row(mysql_query($requete)); if($res[0] <> 1) header("location: ".$fichier['forum']); $parpage = $conf['parpage']; if(empty($debut)) $debut = 0; // Si forum fermé, pas de post possible if(($conf['moderation'] == "aucune") && ($HTTP_COOKIE_VARS['forum_passe'] <> md5($conf['motdepasse']))) $disabled = " disabled"; entete(); if(!empty($msg)) echo "
    ".htmlentities(stripslashes($msg))."

    "; if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) { if($conf['autoriser_actu'] == "oui") echo ""; $email = $conf['email']; } if($debut == 0) { // On récupère le message papa $requete = "SELECT * FROM ".$table." WHERE id=\"$id\""; $resultat = mysql_query($requete); $papa = mysql_fetch_array($resultat); if($papa['parent'] <> 0) { $disabled = " disabled"; $reponse = $fichier['forum']."?lecture=".$papa['parent']."#repondre"; } else $reponse = "#repondre"; if(($papa[validation] == "non") && ($HTTP_COOKIE_VARS['forum_passe'] != md5($conf['motdepasse']))) { echo "Pas le droit."; exit; } $sujet1 = htmlentities(stripslashes($papa['sujet'])); $texte = filtre(stripslashes($papa['texte'])); if(empty($papa['nom'])) $nom = "Anonyme"; else $nom = htmlentities(stripslashes($papa['nom'])); if(!empty($papa['email'])) $nom = "".$nom.""; if($papa['statut'] == "admin") $nom.= " (Administrateur)"; $ip = $papa[ip]; $total = $papa['nb_reponses']; $date = datefr($papa[date]); if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse']) && $papa[parent] == 0) { echo "
       << Retour | Configuration | Déconnexion Numéro de ce fil de discussion : ".$id."
    "; } else { echo "
    "; if($papa['parent'] > 0) echo "Ce message est une réponse à un autre : Lire le fil entier   |   "; echo "Retour à la liste des messages
    "; } echo "
    ".$sujet1."
    Par ".$nom.", le ".$date.".    [Répondre à ce message]
      ".$texte; if($GLOBALS[fichiers] == "oui" && fichier_existe($id)) echo "
    Fichier attaché: ".fichier_type($id)." (".fichier_taille($id)."Ko)"; if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) echo "
     Adresse IP : ".$ip."   Supprimer   Modifier 
    "; echo "
    "; } // On compte le nombre de réponses if($total >= 1) { // On affiche les messages fiston s'il y en a $requete = "SELECT id,sujet,texte,nom,date,email,statut,ip FROM ".$table." WHERE parent=\"$id\" ORDER BY date ASC LIMIT ".$debut.",".$parpage; $resultat = mysql_query($requete); $nb = mysql_num_rows($resultat); echo "
    "; if($total > $parpage) { echo " "; } echo "
    "; if($debut == 0) echo "Réponses à ce message :"; else { $requete = "SELECT sujet FROM ".$table." WHERE id=\"$id\""; $res = mysql_fetch_row(mysql_query($requete)); $titre = htmlentities(stripslashes($res[0])); $sujet1 = $titre; echo "Réponses au message « ".$titre." ».
    Retour à la liste des messages"; } echo "
      "; while($rec = mysql_fetch_array($resultat)) { if(($rec[validation] == "non") && ($HTTP_COOKIE_VARS['forum_passe'] != md5($conf['motdepasse']))) continue; $GLOBALS[id2] = $rec[id]; $sujet = htmlentities(stripslashes($rec['sujet'])); $texte = filtre(stripslashes($rec['texte'])); if(empty($rec['nom'])) $nom = "Anonyme"; else $nom = htmlentities(stripslashes($rec['nom'])); if(!empty($rec['email'])) $nom = "".$nom.""; if($rec['statut'] == "admin") $nom.= " (Administrateur)"; $ip = $rec[ip]; $date = datefr($rec[date]); echo "
    ".$sujet."
    Par ".$nom.", le ".$date.".    [Répondre à ce fil de discussion]
    ".$texte; if($GLOBALS[fichiers] == "oui" && fichier_existe($rec[id])) echo "
    Fichier attaché: ".fichier_type($rec[id])." (".fichier_taille($rec[id])."Ko)"; if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) echo "
     Adresse IP : ".$ip."   Supprimer   Modifier 
    "; echo "
    "; } echo "
     
    ".lister_pages($debut,$total,$nb,$fichier[forum]."?lecture=".$id)."

    "; } if($conf[mizenpage] == "oui") echo " "; // Formulaire de message $x = round($conf[tables] /1.5); $a = round($x / 8); $b = $x - $a; echo "
    Retour à la liste des messages

    "; //" if($GLOBALS[fichiers] == "oui" && ($GLOBALS[fichiers_users] == "oui" || ($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])))) echo "
    "; else echo ""; echo " "; //" if($GLOBALS[fichiers] == "oui" && ($GLOBALS[fichiers_users] == "oui" || ($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])))) { echo " "; } echo "
    Répondre à ce message
    Nom :
    eMail :
    Sujet :
    Fichier :
    Texte :"; // Si forum modéré, on le dit if($conf['moderation'] == "oui") echo "

    (Forum modéré)
    [?]

    "; echo "
    "; if($conf[mizenpage] == "oui") { echo " "; if($conf[smileys] == "oui") echo "     "; echo "
    "; } echo "
    "; // Si admin, alors affichage options admin if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) { if($conf['moderation'] == "oui") echo "
    "; echo " "; } else { if($conf['autoriser_suivi'] == "oui") echo "   "; else echo " "; } echo "


    Petite astuce...
    "; // Affichage d'une astuce au hasard mt_srand((float) microtime()*1000000); $i = mt_rand(0,count($astuces)-1); echo stripslashes($astuces[$i])."
    > Voir toutes les astuces

    "; // Si admin, liens Config/Déco if(md5($conf['motdepasse']) == $HTTP_COOKIE_VARS['forum_passe']) echo "Configuration   Déconnexion"; else echo "
    Accès administrateur:
    "; echo "
    "; bas(); exit; } // Affichage de toutes les astuces! function astuces() { global $conf,$fichier,$astuces; entete(); echo "
    Retour à la liste des messages

    Astuces pour mettre en forme vos messages
      "; $i = 0; while($i < count($astuces)) { echo $astuces[$i]."

    "; $i++; } echo "
    Retour à la liste des messages
    "; bas(); } // Page où l'admin doit rentrer son mot de passe function acces_admin($msg="") { global $conf,$fichier; entete(); echo "
    Cet espace est réservé à l'administrateur du forum. Veuillez entrer le mot de passe administrateur ci-dessous, ou alors cliquez sur Retour.

    "; if(!empty($msg)) echo "".htmlentities($msg)."

    "; echo "

    Retour à la liste des messages
    "; bas(); exit; } // Création cookie admin function entrer_admin($passit) { global $conf,$fichier; if($conf['motdepasse'] == $passit) { // Si le mot de passe entré est égal au mot de passe de la config, on met le cookie setcookie("forum_passe",md5($passit),0,"/"); header("location: ".$fichier['forum']); } else acces_admin("Mauvais mot de passe"); // sinon pas le droit! exit; } // Déconnexion de l'admin function sortir_admin() { global $fichier; setcookie("forum_passe","",0,"/"); header("location: ".$fichier['forum']); exit; } // Modification de la config function config($msg="") { global $fichier,$conf,$HTTP_COOKIE_VARS; if(md5($conf['motdepasse']) <> $HTTP_COOKIE_VARS['forum_passe']) { header("location: ".$fichier['forum']); exit; } if($conf['autoriser_suivi'] == "oui") $autoriser_suivi = " checked"; if($conf['suivi_admin'] == "oui") $suivi_admin = " checked"; if($conf['moderation'] == "oui") $moderation_oui = " checked"; elseif($conf['moderation'] == "aucune") $moderation_aucune = " checked"; else $moderation_non = " checked"; if($conf[mizenpage] == "oui") $miz = " checked"; if($conf['autoriser_actu'] == "oui") $autoriser_actu = " checked"; entete("Configuration du forum"); echo "
    Peut-être que certaines options de cette page vous sont plutôt obscures, dans ce cas nous vous invitons à consulter la documentation de ce forum : <PRé>Textes.

    "; if(!empty($msg)) echo "
    ".$msg."

    "; echo "
    Aspect visuel
      Pour mettre du code HTML dans les champs ci-dessous, commencez le champ concerné par le signe égal. Ce qui donnera: =<html>
    Titre du forum :
    Texte introductif :
    Bas de page :
    Largeur des tables : (en pixels)
    Nombre de sujets/page :
    Hauteur du champ de texte :

    Couleurs
    Couleur fond de la page :      
    Couleur du texte :      
    Couleur des liens :      
    Couleur liens visités :      
    Couleur liens actifs :      
    Couleur n°1 (alternée) :      
    Couleur n°2 (alternée) :      
    Couleur n°3 (fond) :      
    Couleur n°4 (fond) :      
    Couleur n°5 (texte) :      

    Général
    Mot de passe :
    Adresse eMail :
      (les messages sont ajoutés librement)
    (les messages sont validés par l'admin)
    (les visiteurs ne peuvent pas ajouter de messages)

    (permet d'avoir un système d'actualités indépendant des messages du forum)
    (nécessite JavaScript activé du côté du visiteur)


    Nota : les options suivantes nécéssitent que votre hébergeur accepte l'utilisation de la fonction mail.




    Fuseau horaire:

    Chemin vers les smileys:


      Retour  
    "; bas(); exit; } // Avant d'enregistrer la config, vérifie les champs function traduire_rec_config() { global $fichier,$HTTP_POST_VARS,$HTTP_COOKIE_VARS,$conf; if(md5($conf['motdepasse']) <> $HTTP_COOKIE_VARS['forum_passe']) { header("location: ".$fichier['forum']); exit; } unset($conf); $titre = trim($HTTP_POST_VARS['titre']); $intro = str_replace("\r","",trim($HTTP_POST_VARS['intro'])); $bas = str_replace("\r","",trim($HTTP_POST_VARS['bas'])); $email = trim($HTTP_POST_VARS['email']); $motdepasse = trim($HTTP_POST_VARS['motdepasse']); $tables = trim($HTTP_POST_VARS['tables']); $parpage = trim($HTTP_POST_VARS['parpage']); $bgcolor = trim($HTTP_POST_VARS['bgcolor']); $text = trim($HTTP_POST_VARS['text']); $link = trim($HTTP_POST_VARS['link']); $vlink = trim($HTTP_POST_VARS['vlink']); $alink = trim($HTTP_POST_VARS['alink']); $couleur1 = trim($HTTP_POST_VARS['couleur1']); $couleur2 = trim($HTTP_POST_VARS['couleur2']); $couleur3 = trim($HTTP_POST_VARS['couleur3']); $couleur4 = trim($HTTP_POST_VARS['couleur4']); $couleur5 = trim($HTTP_POST_VARS['couleur5']); $suivi_admin = trim($HTTP_POST_VARS['suivi_admin']); $moderation = trim($HTTP_POST_VARS['moderation']); $autoriser_suivi = trim($HTTP_POST_VARS['autoriser_suivi']); $autoriser_actu = trim($HTTP_POST_VARS['autoriser_actu']); $fuseau = trim($HTTP_POST_VARS['fuseau']); $smileys = $HTTP_POST_VARS[smileys]; $smileys_path = $HTTP_POST_VARS[smileys_path]; $mizenpage = $HTTP_POST_VARS[mizenpage]; $hauteur_form = $HTTP_POST_VARS[hauteur_form]; if($autoriser_suivi == "oui") { if(!eregi("([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)",$email)) config("Erreur ! Veuillez donner votre adresse eMail pour autoriser le suivi."); } else $autoriser_suivi = "non"; if(($suivi_admin == "oui") && !eregi("([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)",$email)) { config("Erreur ! Veuillez donner votre adresse eMail pour utiliser le suivi des messages."); } if($suivi_admin <> "oui") $suivi_admin = "non"; if(($moderation <> "aucune") && ($moderation <> "oui")) $moderation = "non"; if($autoriser_actu <> "oui") $autoriser_actu = "non"; if($smileys <> "oui") $smileys = "non"; if($mizenpage <> "oui") $mizenpage = "non"; $conf = array("titre"=>$titre,"intro"=>$intro,"motdepasse"=>$motdepasse,"bas"=>$bas,"email"=>$email, "tables"=>$tables,"parpage"=>$parpage,"bgcolor"=>$bgcolor,"text"=>$text,"link"=>$link,"vlink"=>$vlink, "couleur1"=>$couleur1,"couleur2"=>$couleur2,"couleur3"=>$couleur3,"couleur4"=>$couleur4,"couleur5"=>$couleur5, "suivi_admin"=>$suivi_admin,"autoriser_suivi"=>$autoriser_suivi,"moderation"=>$moderation, "autorise_actu"=>$autoriser_actu,"fuseau"=>$fuseau,"alink"=>$alink,"smileys"=>$smileys, "smileys_path"=>$smileys_path,"mizenpage"=>$mizenpage,"hauteur_form"=>$hauteur_form); if(empty($conf['titre'])) config("Erreur ! Veuillez entrer un titre pour le forum."); elseif(empty($conf['intro'])) config("Erreur ! Veuillez entrer un texte introductif."); elseif(empty($conf['tables'])) config("Erreur ! Veuillez entrer la largeur des tables."); elseif(empty($conf['parpage'])) config("Erreur ! Veuillez entrer un nombre de sujets par page."); elseif(empty($conf['bgcolor'])) config("Erreur ! Veuillez entrer la couleur de fond de la page."); elseif(empty($conf['text'])) config("Erreur ! Veuillez entrer une couleur pour le texte."); elseif(empty($conf['couleur1'])) config("Erreur ! Veuillez entrer une couleur n°1."); elseif(empty($conf['couleur2'])) config("Erreur ! Veuillez entrer une couleur n°2."); elseif(empty($conf['couleur3'])) config("Erreur ! Veuillez entrer une couleur n°3."); elseif(empty($conf['couleur4'])) config("Erreur ! Veuillez entrer une couleur n°4."); elseif(empty($conf['couleur5'])) config("Erreur ! Veuillez entrer une couleur n°5."); elseif(empty($conf['motdepasse'])) config("Erreur ! Veuillez entrer un mot de passe."); elseif(empty($conf['hauteur_form'])) config("Erreur ! Veuillez entrer une hauteur de champ de texte"); rec_config($conf); header("location: ".$fichier['forum']); } // Pour voir les messages non validés, accès admin seulement function moderation() { global $conf,$HTTP_COOKIE_VARS,$fichier,$table; if(md5($conf['motdepasse']) <> $HTTP_COOKIE_VARS['forum_passe']) { header("location: ".$fichier['forum']); exit; } if($conf['moderation'] <> "oui") { header("location: ".$fichier['forum']); exit; } entete(); echo "
    Retour à la liste des messages

    "; $requete = "SELECT id,sujet,date FROM ".$table." WHERE validation='non' ORDER BY date DESC"; $resultat = mysql_query($requete) or die(mysql_error()); $col = $conf['couleur2']; while($rec = mysql_fetch_array($resultat)) { echo " "; if($col == $conf['couleur2']) $col = $conf['couleur1']; else $col = $conf['couleur2']; } echo "
    Messages en attente de modération Date Valider Supprimer Rien
    ".htmlentities(stripslashes($rec['sujet']))." ".datefr($rec['date'],"abrege")."

    Retour à la liste des messages
    "; bas(); } // Enregistrement des validation/suppressions de messages function moderer() { global $conf,$HTTP_COOKIE_VARS,$fichier,$table,$HTTP_POST_VARS; $num = $HTTP_POST_VARS[num]; if(md5($conf['motdepasse']) <> $HTTP_COOKIE_VARS['forum_passe']) { header("location: ".$fichier['forum']); exit; } if($conf['moderation'] <> "oui") { header("location: ".$fichier['forum']); exit; } while(list($key, $val) = each ($num)) { if($val == "s") $requete = "DELETE FROM ".$table." WHERE id='$key'"; elseif($val == "v") $requete = "UPDATE ".$table." SET validation='oui' WHERE id='$key'"; $resultat = mysql_query($requete); } header("location: ".$fichier['forum']); exit; } // Supprimer messages demandés, accès admin uniquement function supprimer($num) { global $table,$fichier,$conf,$HTTP_COOKIE_VARS; if(md5($conf['motdepasse']) <> $HTTP_COOKIE_VARS['forum_passe']) { header("location: ".$fichier['forum']); exit; } $i = 0; while($i < count($num)) { $requete = "SELECT parent FROM ".$table." WHERE id=\"".$num[$i]."\""; $resultat = mysql_query($requete); $rec = @mysql_fetch_row($resultat); if($rec[0] > 0) { mysql_unbuffered_query("UPDATE ".$table." SET nb_reponses = nb_reponses-1 WHERE id=\"".$rec[0]."\""); } $requete = "DELETE FROM ".$table." WHERE id=\"".$num[$i]."\""; $resultat = mysql_unbuffered_query($requete); $requete = "DELETE FROM ".$table." WHERE parent=\"".$num[$i]."\""; $resultat = mysql_unbuffered_query($requete); $i++; } header("location: ".$fichier['forum']); exit; } // Voir une actu function voir_actu($id) { global $conf,$HTTP_COOKIE_VARS,$fichier,$table; if($conf['autoriser_actu'] <> "oui") header("location: ".$fichier['forum']); entete(); echo "
    Retour à la liste des messages

    "; $requete = "SELECT id,sujet,date FROM ".$table." WHERE id <> \"$id\" AND statut = 'actu' ORDER BY date DESC LIMIT 0,6"; $resultat = mysql_query($requete); if(mysql_num_rows($resultat) > 0) { echo "
    "; while($rec = mysql_fetch_array($resultat)) { $date = datefr($rec[date],"court_jour"); echo " "; } echo "
    Dernières actualités
    ".$date."
    ".htmlentities(stripslashes($rec['sujet']))."
    > Voir toutes les actus
    "; } else echo " "; echo "
    "; $requete = "SELECT sujet,texte,date FROM ".$table." WHERE id=\"$id\""; $resultat = mysql_query($requete); if(mysql_num_rows($resultat) == 1) { $rec = mysql_fetch_array($resultat); $date = datefr($rec[date]); if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) echo " "; echo "".htmlentities(stripslashes($rec['sujet']))."
    Le ".$date."

    ".filtre(stripslashes($rec['texte'])).""; } else echo "Pas d'actu à cette adresse. Désoleacute;."; echo "
    "; bas(); } // Voir toutes les actus function liste_actus($debut="") { global $conf,$HTTP_COOKIE_VARS,$fichier,$table; if($conf['autoriser_actu'] <> "oui") header("location: ".$fichier['forum']); $parpage = $conf['parpage']; if(empty($debut)) $debut = 0; $parpage2 = $parpage / 2; $debut1 = $debut + $parpage2; entete(); if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) echo "
    "; echo "
    Retour à la liste des messages

    "; $requete = "SELECT COUNT(*) FROM ".$table." WHERE statut='actu'"; $res = mysql_fetch_row(mysql_query($requete)); $total = $res[0]; if($total > $parpage) { echo ""; } if(($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) && ($total >= 1)) { echo "
    "; $requete = "SELECT id,sujet,date FROM ".$table." WHERE id <> \"$id\" AND statut = 'actu' ORDER BY date DESC LIMIT ".$debut1.",".$parpage2; $resultat = mysql_query($requete); $nb = mysql_num_rows($resultat); if($nb > 0) { echo "
    "; while($rec = mysql_fetch_array($resultat)) { $date = datefr($rec[date],"court_jour"); echo " "; } echo "
    ".$date."
    "; if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) echo ""; echo "".htmlentities(stripslashes($rec['sujet']))."
    "; } else echo " "; echo "
    "; $requete = "SELECT id,sujet,date,texte FROM ".$table." WHERE id <> \"$id\" AND statut = 'actu' ORDER BY date DESC LIMIT ".$debut.",".$parpage2; $resultat = mysql_query($requete); $nb = $nb + mysql_num_rows($resultat); if(mysql_num_rows($resultat) > 0) { echo "
    "; while($rec = mysql_fetch_array($resultat)) { $date = datefr($rec[date]); $texte = stripslashes($rec['texte']); if(strlen($texte) > 200) { $texte = substr($texte,0,200); $pos = strrpos($texte," "); $texte = substr($texte,0,$pos); $texte = propre(htmlentities($texte)); $texte.= "..."; } else $texte = htmlentities($texte); echo " "; } echo "
    ".$date."
    "; if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) echo ""; echo "".htmlentities(stripslashes($rec['sujet']))."
    ".$texte."
    "; } else echo " "; echo "
    ".lister_pages($debut,$total,$nb,$fichier[forum]."?actu=toutes")."
    Tout cocher / Tout décocher  
    "; } else echo ""; bas(); } // Rechercher function rechercher($rechercher,$debut="") { global $table,$conf,$fichier,$HTTP_COOKIE_VARS,$type; if($type == "AND") $and = " checked"; else { $or = " checked"; $type = "OR"; } $parpage = ceil($conf['parpage'] / 2); if(empty($debut)) $debut = 0; $r = addslashes(stripslashes(urldecode($rechercher))); entete(); if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) echo "
    "; echo " "; if(($total > $parpage) || ($total_actu > $parpage)) { echo ""; } if(($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) && ($total >= 1)) { echo "
    Retour à la liste des messages

    Rechercher...

    Opérateur : ET OU
    Aide sur la recherche
    "; $termes = genere_recherche($rechercher,$type); if($conf['autoriser_actu'] == "oui") { $requete = "SELECT COUNT(*) FROM ".$table." WHERE statut = 'actu' AND "; $requete.= $termes; $actu_temp = "statut <> 'actu' AND "; $res = mysql_fetch_row(mysql_query($requete)); $total_actu = $res[0]; $requete = "SELECT id,sujet,date FROM ".$table." WHERE statut='actu' AND "; $requete.= $termes; $requete.= " ORDER BY date DESC LIMIT ".$debut.",".$parpage; $resultat = mysql_query($requete); $nb_actu = mysql_num_rows($resultat); if($nb_actu > 0) { echo "
    "; while($rec = mysql_fetch_array($resultat)) { $date = datefr($rec[date],"court_jour"); echo " "; } echo "
    Dans les actus
    ".$date."
    "; if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) echo ""; echo "".htmlentities(stripslashes($rec['sujet']))."
    > Voir toutes les actus
    "; } } echo "
    "; $requete = "SELECT COUNT(*) FROM ".$table." WHERE validation='oui' AND "; if($conf[autoriser_actu] == "oui") $requete.= "statut <> 'actu' AND "; $requete.= $termes; $res = mysql_fetch_row(mysql_query($requete)); $total = $res[0]; if($total >= 1) { echo "Il y a ".$total." message(s)"; if($total_actu >= 1) echo " et ".$total_actu." actualité(s)"; echo" correspondant à votre recherche.

    "; $requete = "SELECT id,sujet,texte,parent,date,nom FROM ".$table." WHERE validation='oui' AND "; if($conf[autoriser_actu] == "oui") $requete.= "statut <> 'actu' AND "; $requete.= $termes; $requete.= " ORDER BY date DESC LIMIT ".$debut.",".$parpage; $resultat = mysql_query($requete); $nb = mysql_num_rows($resultat); $col = $conf['couleur2']; $r2 = urldecode(stripslashes($rechercher)); while($rec = mysql_fetch_array($resultat)) { $date = datefr($rec[date],"court_heure"); $texte = stripslashes(propre($rec['texte'])); $pos = strpos($texte, $r2); $longueur_recherche = strlen($r2); $longueur_texte = strlen($texte); $deb = $pos - 200; $fin = $longueur_recherche + 260; if ($deb < 0) $deb = 0; if ($fin > $longueur_texte) $fin = $longueur_texte; $af_text = substr($texte, $deb, $fin); $deb = strpos($af_text," "); $fin = strrpos($af_text," "); $af_text = substr($af_text, $deb, $fin); $af_text = eregi_replace($r2, "".$r2."", $af_text); $texte = htmlentities($af_text); $texte = str_replace("<!!!>","",$texte); $texte = str_replace("</!!!>","",$texte); $texte = "...".trim($texte)."..."; if($rec['parent'] > 0) $texte.= " [ Lire le fil ]"; if(empty($rec['nom'])) $nom = "Anonyme"; else $nom = htmlentities(stripslashes($rec['nom'])); echo " "; if($col == $conf['bgcolor']) $col = $conf[couleur2]; else $col = $conf['bgcolor']; } echo "
    Le ".$date.", par ".$nom.".
    "; if($HTTP_COOKIE_VARS['forum_passe'] == md5($conf['motdepasse'])) echo ""; echo "".htmlentities(stripslashes($rec['sujet']))."
    ".$texte."
    "; $r3 = urlencode($r2); } else { echo "Il n'y aucun message "; if($total_actu >= 1) echo "mais ".$total_actu." actualité(s) "; else echo "ni aucune actualité "; echo "correspondant à votre recherche."; } echo "
    ".lister_pages($debut,$total,$nb,$fichier[forum]."?rechercher=".$r."&type=".$type)."
    Tout cocher / Tout décocher  
    "; } else echo ""; echo "
    Retour à la liste des messages
    "; bas(); } function modifier($id,$msg="") { global $conf,$fichier,$table,$HTTP_COOKIE_VARS; if($HTTP_COOKIE_VARS['forum_passe'] <> md5($conf['motdepasse'])) header("location: ".$fichier['forum']); $requete = "SELECT * FROM ".$table." WHERE id=\"$id\""; $resultat = mysql_query($requete); if(mysql_num_rows($resultat) <> 1) header("location: ".$fichier['forum']); $rec = mysql_fetch_array($resultat); $rec[date] = datefr($rec[date],"stamp"); $sujet = htmlentities(stripslashes($rec['sujet'])); $texte = htmlentities(stripslashes($rec['texte'])); $nom = htmlentities(stripslashes($rec['nom'])); $email = htmlentities(stripslashes($rec['email'])); $mois = date("m",$rec['date']); $annee = date("Y",$rec['date']); $jour = date("d",$rec['date']); $heure = date("H",$rec['date']); $minute = date("i",$rec['date']); $s = $rec['statut']; if($s == 'admin') $s1 = " checked='checked'"; elseif($s == 'actu') $s2 = " checked='checked'"; elseif($s == 'suivi') $s3 = " checked='checked'"; else $s4 = " checked='checked'"; $v = $rec[validation]; if($v == "oui") $v1 = " checked='checked'"; else $v2 = " checked='checked'"; entete("Modifier un message"); if(!empty($msg)) echo "
    ".htmlentities($msg)."

    "; echo "
    Modifier: ".$sujet."
    Sujet du message :
    Fil parent : (Mettre 0 pour que ce message soit un fil de discussion)
    Nom/pseudo :
    eMail :
    Date : à heures et minutes.
    Texte : "; if($GLOBALS[fichiers] == "oui") { if(fichier_existe($id)) echo "

    Ce message a un fichier attaché (".fichier_type($id).", ".fichier_taille($id)."Ko). [Supprimer ce fichier]

    "; } echo "
    Statut :
    Message de l'administrateur
    Actualité
    Suivi des réponses à l'auteur
    Rien, message normal
    Validation :
    Message validé
    Message non validé (à valider par un modérateur)
    Retour à la liste des messages
    "; echo "
    "; exit; } function rec_modif() { global $table,$conf,$fichier,$HTTP_POST_VARS,$HTTP_COOKIE_VARS; if($HTTP_COOKIE_VARS['forum_passe'] <> md5($conf['motdepasse'])) header("location: ".$fichier['forum']); $sujet = $HTTP_POST_VARS['sujet']; $texte = $HTTP_POST_VARS['texte']; $nom = $HTTP_POST_VARS['nom']; $email = $HTTP_POST_VARS['email']; $heure = $HTTP_POST_VARS['heure']; $minute = $HTTP_POST_VARS['minute']; $id = $HTTP_POST_VARS['id']; $parent = $HTTP_POST_VARS['parent']; $valider = $HTTP_POST_VARS[valider]; if(empty($sujet)) modifier($id,"Erreur ! Veuillez entrer un sujet"); elseif(empty($texte)) modifier($id,"Erreur ! Veuillez entrer un texte"); elseif(empty($heure) || empty($minute)) modifier($id,"Erreur ! Veuillez entrer une heure"); elseif(empty($parent) && ($parent != 0)) modifier($id,"Erreur ! Vous devez entrer un numéro de fil parent"); $date = mktime($heure,$minute,0,$HTTP_POST_VARS['mois'],$HTTP_POST_VARS['jour'],$HTTP_POST_VARS['annee']); $sujet = addslashes(trim($sujet)); $texte = addslashes(trim($texte)); $nom = addslashes(trim($nom)); $email = addslashes(trim($email)); $requete = "UPDATE ".$table." SET sujet=\"$sujet\", texte=\"$texte\", nom=\"$nom\", email=\"$email\", date=\"$date\", statut=\"".$HTTP_POST_VARS['statut']."\", validation=\"$valider\", parent=\"$parent\" WHERE id=\"$id\""; $resultat = mysql_query($requete) or die(modifier($id,"Erreur ! La modification de la table SQL à échouée.")); if($HTTP_POST_VARS[statut] == 'actu') header("location: ".$fichier['forum']."?actu=".$id); elseif($parent <> 0) header("location: ".$fichier[forum]."?lecture=".$parent); else header("location: ".$fichier['forum']."?lecture=".$id); } // Pour ne plus reçevoir par mail les réponses à un message function unwatch($parent,$msg="") { global $conf,$fichier,$table; entete("Ne plus recevoir d'eMails"); $requete = "SELECT sujet FROM ".$table." WHERE id=\"$parent\""; $res = mysql_fetch_row(mysql_query($requete)); $titre = htmlentities(stripslashes($res[0])); echo "
    Pour ne plus recevoir par eMail les réponses au sujet de discussion « ".$titre." », indiquez ci-dessous votre adresse eMail.

    "; if(!empty($msg)) echo "".htmlentities($msg)."

    "; echo "
    Votre adresse eMail:
    "; bas(); } function rec_unwatch($parent,$email) { global $fichier,$table; if(!eregi("^([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)$",$email)) unwatch($parent,"Cette adresse eMail est invalide."); $requete = "SELECT COUNT(*) FROM ".$table." WHERE (id=\"$parent\" OR parent=\"$parent\") AND statut = 'suivi' AND email=\"$email\""; $res = mysql_fetch_row(mysql_query($requete)); if($res[0] < 1) unwatch($parent,"Personne n'a demandé à recevoir les réponses à ce sujet de discussion avec cette adresse eMail"); $requete = "UPDATE ".$table." SET statut='rien' WHERE (id=\"$parent\" OR parent=\"$parent\") AND statut = 'suivi' AND email=\"$email\""; $res = mysql_query($requete); unwatch($parent,"Vous ne serez plus prévenu des réponses à ce sujet de discussion par eMail."); } function do_upgrade($to_version) { global $table; if($to_version == "3.4.5") { $requete = 'ALTER TABLE `'.$table.'` ADD `nb_reponses` TINYINT DEFAULT "0" NOT NULL'; mysql_unbuffered_query($requete); $requete = 'SELECT id FROM '.$table.' WHERE parent="0"'; $res = mysql_query($requete); while($rec = mysql_fetch_row($res)) { $id = $rec[0]; $res2 = mysql_query("SELECT COUNT(id) FROM ".$table." WHERE parent='".$id."'"); $rec2 = mysql_fetch_row($res2); $nb_reponses = $rec2[0]; mysql_unbuffered_query('UPDATE '.$table.' SET nb_reponses="'.$nb_reponses.'" WHERE id="'.$id.'"'); } $GLOBALS['conf']['version'] = "3.4.5"; rec_config($GLOBALS['conf']); echo "

    Mise à jour

    La mise à jour vers la version 3.4.5 a été effectuée.

    Rechargez la page pour accéder au forum.

    "; exit; } } // Si les fichiers de config n'existent pas on affiche l'installation if(!file_exists($fichier['mysql']) && !file_exists($fichier['config'])) { if(file_exists("install.php3")) unlink("install.php3"); if(file_exists(".pretextes3.bin")) unlink(".pretextes3.bin"); if(file_exists(".pretextes3.bin.gz")) unlink(".pretextes3.bin.gz"); if(!empty($HTTP_POST_VARS[etape1])) rec_install(); else install(); exit; } // Ca c'est l'affichage du forum include($fichier['mysql']); include($fichier['config']); // Plug-in pour les fichiers attachés if(file_exists($fichier[upload])) include($fichier[upload]); // Si le forum est modéré à priori on le marque dans les astuces if($conf['moderation'] == "oui") $astuces[] = "Ce forum est modéré. Les messages sont soumis à validation de l'administrateur avant publication."; // Anti-cross posting header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); // Compatibilité avec les versions < 3.2b8 if(empty($conf['fuseau'])) $conf['fuseau'] = "serv"; // Compatibilité avec les versions < 3.4 if(empty($conf['hauteur_form'])) $conf['hauteur_form'] = "10"; if(empty($conf['mizenpage'])) $conf['mizenpage'] = "oui"; // Migration version 3.4.x -> 3.4.5 if(empty($conf['version']) || $conf['version'] < "3.4.5") do_upgrade("3.4.5"); if(!empty($HTTP_POST_VARS['postage']) && isset($HTTP_POST_VARS['parent'])) ajouter($HTTP_POST_VARS['parent']); elseif(!empty($HTTP_POST_VARS['passit'])) entrer_admin($HTTP_POST_VARS['passit']); elseif(empty($conf['motdepasse']) && (md5($conf['motdepasse']) <> $HTTP_COOKIE_VARS['forum_passe'])) entrer_admin(""); elseif($HTTP_GET_VARS['admin'] == "deconnexion") sortir_admin(); elseif(!empty($HTTP_POST_VARS['enregistrer_config'])) traduire_rec_config(); elseif(!empty($HTTP_POST_VARS['moderer'])) moderer(); elseif(!empty($HTTP_GET_VARS['modifier'])) modifier($HTTP_GET_VARS['modifier']); elseif(!empty($HTTP_POST_VARS['rec_modif'])) rec_modif(); elseif(!empty($HTTP_POST_VARS['supprimer']) && !empty($HTTP_POST_VARS['suppr'])) supprimer($HTTP_POST_VARS['suppr']); elseif(!empty($HTTP_GET_VARS['supprimer_un'])) supprimer($HTTP_GET_VARS['supprimer_un']); elseif(!empty($HTTP_GET_VARS['lecture'])) lecture($HTTP_GET_VARS['lecture']); elseif($HTTP_GET_VARS['voir'] == "astuces") astuces(); elseif($HTTP_GET_VARS['admin'] == 'acces') acces_admin(); elseif($HTTP_GET_VARS['admin'] == 'config') config(); elseif($HTTP_GET_VARS['admin'] == 'moderation') moderation(); elseif($HTTP_GET_VARS['actu'] == "toutes") liste_actus($HTTP_GET_VARS['debut']); elseif(!empty($HTTP_GET_VARS['actu'])) voir_actu($HTTP_GET_VARS['actu']); elseif(!empty($HTTP_GET_VARS['rechercher'])) rechercher($HTTP_GET_VARS['rechercher'],$HTTP_GET_VARS['debut']); elseif(!empty($HTTP_POST_VARS['unwatch']) && !empty($HTTP_POST_VARS['email']) && !empty($HTTP_POST_VARS['topic'])) rec_unwatch($HTTP_POST_VARS['topic'],$HTTP_POST_VARS['email']); elseif(!empty($HTTP_GET_VARS['unwatch'])) unwatch($HTTP_GET_VARS['unwatch']); else liste_msg($HTTP_GET_VARS['debut']); ?>