From 207409832821ed44e067c5e469ca02bcc99e9530 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Thu, 17 Feb 2005 09:10:47 +0000
Subject: [PATCH] bug environnement du #FORMULAIRE_FORUM (Linstit)

---
 formulaires/formulaire_forum.html     |  5 ++++
 formulaires/inc-formulaire_forum.php3 | 36 ++++++++++++++++++---------
 inc-messforum.php3                    | 34 ++++++++++++++-----------
 3 files changed, 48 insertions(+), 27 deletions(-)

diff --git a/formulaires/formulaire_forum.html b/formulaires/formulaire_forum.html
index ffebdf79f1..bedf1be855 100644
--- a/formulaires/formulaire_forum.html
+++ b/formulaires/formulaire_forum.html
@@ -1,6 +1,11 @@
 <form action="[(#ENV{url})]" method="post" name="formulaire">[
 <input type="hidden" name="alea" value="(#ENV{alea})" />][
 <input type="hidden" name="hash" value="(#ENV{hash})" />][
+<input type="hidden" name="forum_id_article" value="(#ENV{id_article})" />][
+<input type="hidden" name="forum_id_breve" value="(#ENV{id_breve})" />][
+<input type="hidden" name="forum_id_syndic" value="(#ENV{id_syndic})" />][
+<input type="hidden" name="forum_id_rubrique" value="(#ENV{id_rubrique})" />][
+<input type="hidden" name="forum_id_forum" value="(#ENV{id_forum})" />][
 <input type="hidden" name="retour_forum" value="(#ENV{retour_forum})" />
 ][<p>(#ENV*{modere})</p>
 ][(#ENV*{afficher_texte_hidden})
diff --git a/formulaires/inc-formulaire_forum.php3 b/formulaires/inc-formulaire_forum.php3
index e5e78fd429..6ac110229f 100644
--- a/formulaires/inc-formulaire_forum.php3
+++ b/formulaires/inc-formulaire_forum.php3
@@ -40,7 +40,11 @@ function balise_FORMULAIRE_FORUM_stat($args, $filtres) {
 	if (!$r = sql_recherche_donnees_forum ($idr, $idf, $ida, $idb, $ids))
 		return '';
 
-	list($titre, $table, $forums_publics) = $r;
+	list ($titre, $table, $forums_publics) = $r;
+
+	// Attention id_rubrique est passe pour les articles => on n'en veut pas
+	if ($idr > 0 AND ($ida OR $idb OR $ids))
+		$idr = 0;
 
 	return
 		array($titre, $table, $forums_publics, $idr, $idf, $ida, $idb, $ids,
@@ -48,8 +52,15 @@ function balise_FORMULAIRE_FORUM_stat($args, $filtres) {
 }
 
 function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic, $url) {
+	global $REMOTE_ADDR, $afficher_texte, $_COOKIE, $_POST;
 
-	global $REMOTE_ADDR, $afficher_texte, $_COOKIE;
+	// Recuperer les donnees postees du formulaire ou, a defaut, du contexte
+	foreach (array('id_article', 'id_breve', 'id_syndic',
+	'id_rubrique', 'id_forum') as $id)
+		if (isset($_POST['forum_'.$id]))
+			$$id = intval($_POST['forum_'.$id]);
+		else
+			$$id = intval($$id);
 
 	// url de reference
 	if (!$url) {
@@ -76,12 +87,6 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 		return array('formulaire_login_forum', 0, array());
 	}
 
-	$id_rubrique = intval($id_rubrique);
-	$id_forum = intval($id_forum);
-	$id_article = intval($id_article);
-	$id_breve = intval($id_breve);
-	$id_syndic = intval($id_syndic);
-
 	// ne pas mettre '', sinon le squelette n'affichera rien.
 	$previsu = ' ';
 
@@ -225,6 +230,13 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 		'url' =>  $url,
 		'url_site' => ($url_site ? $url_site : "http://"),
 
+		# id de reference
+		'id_article' => $id_article,
+		'id_breve' => $id_breve,
+		'id_syndic' => $id_syndic,
+		'id_rubrique' => $id_rubrique,
+		'id_forum' => $id_forum,
+
 		## gestion des la variable de personnalisation $afficher_texte
 		# mode normal : afficher le texte en < input text >, cf. squelette
 		'afficher_texte_input' => (($afficher_texte <> 'non') ? '&nbsp;' : ''),
@@ -347,10 +359,7 @@ function afficher_petits_logos_mots($id_mot) {
 function sql_recherche_donnees_forum ($idr, $idf, $ida, $idb, $ids) {
 
 	// changer la table de reference s'il y a lieu (pour afficher_groupes[] !!)
-	if ($idr) {
-		$r = "SELECT titre FROM spip_rubriques WHERE id_rubrique = $idr";
-		$table = "rubriques";
-	} else if ($ida) {
+	if ($ida) {
 		$r = "SELECT titre FROM spip_articles WHERE id_article = $ida";
 		$table = "articles";
 	} else if ($idb) {
@@ -359,6 +368,9 @@ function sql_recherche_donnees_forum ($idr, $idf, $ida, $idb, $ids) {
 	} else if ($ids) {
 		$r = "SELECT nom_site AS titre FROM spip_syndic WHERE id_syndic = $ids";
 		$table = "syndic";
+	} else if ($idr) {
+		$r = "SELECT titre FROM spip_rubriques WHERE id_rubrique = $idr";
+		$table = "rubriques";
 	}
 
 	if ($idf)
diff --git a/inc-messforum.php3 b/inc-messforum.php3
index 7ed7f8460c..478bf3bd23 100644
--- a/inc-messforum.php3
+++ b/inc-messforum.php3
@@ -104,34 +104,36 @@ function mots_du_forum($ajouter_mot, $id_message)
 function enregistre_forum() {
 	global $REMOTE_ADDR, $auteur_session,
 	  $afficher_texte, $ajouter_mot, $alea, $hash,
-	  $auteur, $confirmer_forum, $email_auteur,
-	  $id_article, $id_auteur, $id_breve, $id_forum, $id_rubrique, $id_syndic,
+	  $auteur, $confirmer_forum, $email_auteur, $id_auteur,
 	  $nom_site_forum, $retour_forum, $texte, $titre, $url_site;
 
 	$retour_forum = rawurldecode($retour_forum);
-	$id_article = intval($id_article);
-	$id_rubrique = intval($id_rubrique);
-	$id_forum = intval($id_forum);
-	$id_breve = intval($id_breve);
-	$id_syndic = intval($id_syndic);
 
-// initialisation de l'eventuel visiteur connecte
+	// Recuperer les donnees postees du formulaire ou stocker '0'
+	foreach (array('id_article', 'id_breve', 'id_syndic',
+	'id_rubrique', 'id_forum') as $id)
+		if (isset($_POST['forum_'.$id]))
+			$$id = intval($_POST['forum_'.$id]);
+		else
+			$$id = 0;
+
+	// initialisation de l'eventuel visiteur connecte
 	if (!$id_auteur)
 	$id_auteur = intval($auteur_session['id_auteur']);
 
 	$statut = controler_forum($id_article, $retour_forum);
 
-// Ne pas autoriser de changement de nom si forum sur abonnement
-
+	// Ne pas autoriser de changement de nom si forum sur abonnement
 	if ($statut == 'abo') {
 		$auteur = $auteur_session['nom'];
 		$email_auteur = $auteur_session['email'];
 	}
 
-// trop court ?
-	if ((strlen($texte) + strlen($titre) + strlen($nom_site_forum) + strlen($url_site) + strlen($auteur) + strlen($email_auteur)) > 20 * 1024) {
+	// trop court ?
+	if ((strlen($texte) + strlen($titre) + strlen($nom_site_forum) +
+	strlen($url_site) + strlen($auteur) + strlen($email_auteur)) > 20 * 1024) {
 		ask_php_auth(_T('forum_message_trop_long'),
-			     _T('forum_cliquer_retour',
+			_T('forum_cliquer_retour',
 				array('retour_forum' => $retour_forum)));
 		exit;
 	}
@@ -140,8 +142,10 @@ function enregistre_forum() {
 	include_ecrire("inc_admin.php3");
 	if (!verifier_action_auteur("ajout_forum $id_rubrique".
 	" $id_forum $id_article $id_breve".
-	" $id_syndic $alea", $hash))
-		exit; 	# echec silencieux du POST
+	" $id_syndic $alea", $hash)) {
+		spip_log('erreur hash forum');
+		die (_T('forum_titre_erreur')); 	# echec du POST
+	}
 
 	// verifier fichier lock
 	$alea = preg_replace('/[^0-9]/', '', $alea);
-- 
GitLab