From 4cbea1deed446d6f53b64b01aaac08506428af97 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Tue, 24 Oct 2006 20:50:42 +0000
Subject: [PATCH] =?UTF-8?q?Suite=20de=20[7691]:=20le=20bouton=20"retour"?=
 =?UTF-8?q?=20dans=20le=20formulaire=20de=20message=20de=20forum=20interne?=
 =?UTF-8?q?=20ne=20marchait=20plus=20au=202e=20coup,=20vues=20les=20acroba?=
 =?UTF-8?q?ties=20impos=C3=A9es=20par=20le=20non=20respect=20du=20RFC.=20O?=
 =?UTF-8?q?n=20retarde=20donc=20au=20maximum=20la=20cr=C3=A9ation=20de=20l?=
 =?UTF-8?q?'URL=20de=20retour,=20avec=20joli=20lot=20de=20consolation=20au?=
 =?UTF-8?q?=20final.=20En=20effet,=20cette=20page=20pr=C3=A9sentait=20le?=
 =?UTF-8?q?=20d=C3=A9faut=20de=20ne=20pas=20sp=C3=A9cifier=20=C3=A0=20quel?=
 =?UTF-8?q?=20objet=20ce=20forum=20se=20rapportait=20(elle=20n'affichait?=
 =?UTF-8?q?=20que=20le=20titre,=20qui=20pouvait=20de=20plus=20changer=20da?=
 =?UTF-8?q?ns=20le=20fil=20des=20messages).=20A=20pr=C3=A9sent=20le=20haut?=
 =?UTF-8?q?=20de=20page=20rappelle=20le=20type=20de=20l'objet=20initial=20?=
 =?UTF-8?q?(article,=20breve=20et),=20son=20num=C3=A9ro=20et=20son=20titre?=
 =?UTF-8?q?.=20Seul=20regret:=20le=20non=20respect=20du=20RFC=20empeche=20?=
 =?UTF-8?q?d'installer=20une=20ancre=20pour=20atterir=20au=20niveau=20du?=
 =?UTF-8?q?=20formulaire=20dans=20la=20page.=20Mais=20=C3=A7a=20n'est=20vr?=
 =?UTF-8?q?aiment=20genant=20que=20dans=20une=20r=C3=A9ponse=20=C3=A0=20un?=
 =?UTF-8?q?=20message=20de=20forum=20particuli=C3=A8rement=20long.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/action/editer_forum.php |  30 ++++----
 ecrire/exec/articles.php       |   2 +-
 ecrire/exec/breves_voir.php    |   4 +-
 ecrire/exec/forum.php          |   5 +-
 ecrire/exec/forum_envoi.php    | 128 +++++++++++++++++++++------------
 ecrire/exec/message.php        |   7 +-
 ecrire/exec/sites.php          |   2 +-
 ecrire/inc/presentation.php    |   2 +-
 8 files changed, 103 insertions(+), 77 deletions(-)

diff --git a/ecrire/action/editer_forum.php b/ecrire/action/editer_forum.php
index ba0097b3f2..687a1d3a57 100644
--- a/ecrire/action/editer_forum.php
+++ b/ecrire/action/editer_forum.php
@@ -21,7 +21,7 @@ function action_editer_forum_dist() {
 
 	$arg = _request('arg');
 	// arg = l'eventuel mot a supprimer pour d'eventuelles Row SQL
-	if (!preg_match(',^(\d+)\D(\d+)\D(\d+)\D(\d+)\D(\d+)\D(\d+)\D(\w+)$,', $arg, $r)) 
+	if (!preg_match(',^(\d+)\D(\d+)\D(\w+)\W(\w+)\W(\w+)$,', $arg, $r)) 
 		spip_log("action editer_forum: $arg pas compris");
 	else action_editer_forum_post($r);
 }
@@ -31,9 +31,11 @@ function action_editer_forum_post($r)
 {
   global $redirect, $nom_site, $texte, $titre_message, $url_site,  $modif_forum,  $valider_forum;
 
-	list($x,$id_rubrique,$id_parent,$id_article,$id_breve,$id_message,$id_syndic, $statut) = $r;
+  list($x,$id,$id_parent,$statut,$script,$objet) = $r;
 
-	 if ($valider_forum AND ($statut!='')) {
+	$redirect = urldecode($redirect);
+	spip_log("$id,$id_parent,$statut $script $objet $valider_forum ");
+	if ($valider_forum AND ($statut!='')) {
 		include_spip('inc/texte');
 		include_spip('base/abstract_sql');
 		include_spip('inc/forum');
@@ -41,7 +43,7 @@ function action_editer_forum_post($r)
 		$titre_message = corriger_caracteres($titre_message);
 		$texte = corriger_caracteres($texte);
 
-		spip_abstract_insert('spip_forum', "(titre, texte, date_heure, nom_site, url_site, statut, id_auteur,	auteur, email_auteur, id_rubrique, id_parent, id_article, id_breve,	id_message, id_syndic)", "(" . _q($titre_message) . ", " . _q($texte) . ", NOW(), " . _q($nom_site) . ", " . _q($url_site) . ", " . _q($statut) . ", " . $GLOBALS['auteur_session']['id_auteur'] . ", " . _q($GLOBALS['auteur_session']['nom']) . ", " . _q($GLOBALS['auteur_session']['email']) . ",	'$id_rubrique', '$id_parent', '$id_article', '$id_breve',	'$id_message', '$id_syndic')");
+		spip_abstract_insert('spip_forum', "($objet, titre, texte, date_heure, nom_site, url_site, statut, id_auteur,	auteur, email_auteur, id_parent)", "($id, " . _q($titre_message) . ", " . _q($texte) . ", NOW(), " . _q($nom_site) . ", " . _q($url_site) . ", " . _q($statut) . ", " . $GLOBALS['auteur_session']['id_auteur'] . ", " . _q($GLOBALS['auteur_session']['nom']) . ", " . _q($GLOBALS['auteur_session']['email']) . ", $id_parent)");
 
 		calculer_threads();
 
@@ -49,28 +51,20 @@ function action_editer_forum_post($r)
 			spip_query("UPDATE spip_auteurs_messages SET vu = 'non' WHERE id_message='$id_message'");
 
 		}
-		redirige_par_entete(_DIR_RESTREINT . urldecode($redirect));
+		redirige_par_entete($redirect);
+		
 	 } else {
 	   // on ne fait que passer .... 
 	   // et si les clients HTTP respectaient le RFC HTTP selon lequel
 	   // une redirection d'un POST doit etre en POST et pas en GET
 	   // on n'aurait pas a faire l'horreur ci-dessous.
+		  
 	   set_request('exec', 'forum_envoi');
-	   set_request('id_article', $id_article);
-	   set_request('id_breve', $id_breve);
-	   set_request('id_message', $id_message);
+	   set_request('id', $id);
 	   set_request('id_parent', $id_parent);
-	   set_request('id_rubrique', $id_rubrique);
-	   set_request('id_syndic', $id_syndic);
-		     
-	   set_request('modif_forum', $modif_forum);
-	   set_request('nom_site', $nom_site);
 	   set_request('statut', $statut);
-	   set_request('texte', $texte);
-	   set_request('titre_message', $titre_message);
-	   set_request('url_site', $url_site);
-	   set_request('url', $redirect);
-	   set_request('valider_forum', $valider_forum);
+	   set_request('script', $script);
+
 	   include('ecrire/index.php');
 	     }
 	 exit;
diff --git a/ecrire/exec/articles.php b/ecrire/exec/articles.php
index 45e991d84a..c290cf5a40 100644
--- a/ecrire/exec/articles.php
+++ b/ecrire/exec/articles.php
@@ -34,7 +34,7 @@ function exec_articles_dist()
 
 		$res = articles_affiche($id_article, $row, _request('cherche_auteur'), _request('ids'), _request('cherche_mot'), _request('select_groupe'), _request('trad_err'))
 		. "<br /><br />\n<div align='center'>"
-		. icone(_T('icone_poster_message'), generer_url_ecrire("forum_envoi","statut=prive&id_article=$id_article&titre_message=" .rawurlencode($row['titre']) . "&url=" . generer_url_retour("articles","id_article=$id_article")), "forum-interne-24.gif", "creer.gif", '', false)
+		  . icone(_T('icone_poster_message'), generer_url_ecrire("forum_envoi", "statut=prive&id=$id_article&script=articles") ."#formulaire", "forum-interne-24.gif", "creer.gif", '', false)
 		. "</div><br />"
 		. $discuter($id_article, false,  _request('debut'));
 	}
diff --git a/ecrire/exec/breves_voir.php b/ecrire/exec/breves_voir.php
index 21d574c46d..dbd3c965c7 100644
--- a/ecrire/exec/breves_voir.php
+++ b/ecrire/exec/breves_voir.php
@@ -213,12 +213,10 @@ function afficher_breves_voir($id_breve, $changer_lang, $cherche_mot, $select_gr
 	// Forums
 	//
 	
-	$tm = rawurlencode($titre);
-	
 	echo "<br /><br />";
 	
 	echo "\n<div align='center'>";
-	icone(_T('icone_poster_message'), generer_url_ecrire("forum_envoi", "statut=prive&id_breve=$id_breve&titre_message=$tm&url=".generer_url_retour("breves_voir", "id_breve=$id_breve")),
+	icone(_T('icone_poster_message'), generer_url_ecrire("forum_envoi", "statut=prive&id=$id_breve&script=breves_voir") . '#formulaire',
 	     "forum-interne-24.gif", "creer.gif");
 	echo "</div>";
 	
diff --git a/ecrire/exec/forum.php b/ecrire/exec/forum.php
index 8b3a4d54b5..0813b789bb 100644
--- a/ecrire/exec/forum.php
+++ b/ecrire/exec/forum.php
@@ -72,10 +72,9 @@ function exec_forum_dist()
 
   if ($total > 10) liste_numeros_forum($script, $debut, $total);
 
-  $tm = rawurlencode(filtrer_entites(_T('texte_nouveau_message')));
+  
   echo "<p><div align='center'>";
-  icone (_T('icone_poster_message'), generer_url_ecrire("forum_envoi", "statut=$statutforum&titre_message=$tm&url=" . generer_url_retour($script)),
-       $logo, "creer.gif");
+  icone (_T('icone_poster_message'), generer_url_ecrire("forum_envoi", "statut=$statutforum&script=$script"), $logo, "creer.gif");
   echo "</div></p>";
 
   echo "<p align='left'>";
diff --git a/ecrire/exec/forum_envoi.php b/ecrire/exec/forum_envoi.php
index 50bdb42a72..67537de566 100644
--- a/ecrire/exec/forum_envoi.php
+++ b/ecrire/exec/forum_envoi.php
@@ -19,49 +19,32 @@ include_spip('inc/barre');
 function exec_forum_envoi_dist()
 {
 	forum_envoi(  
-		    intval(_request('id_article')),
-		    intval(_request('id_breve')),
-		    intval(_request('id_message')),
+		    intval(_request('id')),
 		    intval(_request('id_parent')),
-		    intval(_request('id_rubrique')),
-		    intval(_request('id_syndic')),
-
 		    _request('modif_forum'),
 		    _request('nom_site'),
 		    _request('statut'),
 		    _request('texte'),
 		    _request('titre_message'),
 		    _request('url_site'),
-		    _request('url'),
+		    _request('script'),
 		    _request('valider_forum'));
 }
 
 function forum_envoi(  
-		     $id_article,
-		     $id_breve,
-		     $id_message,
+		     $id,
 		     $id_parent,
-		     $id_rubrique,
-		     $id_syndic,
-		     
 		     $modif_forum,
 		     $nom_site,
 		     $statut,
 		     $texte,
 		     $titre_message,
 		     $url_site,
-		     $url,
+		     $script,
 		     $valider_forum)
 {
 	global     $options, $spip_lang_rtl;
 
-	if ($id_message) debut_page(_T('titre_page_forum_envoi'), "accueil", "messagerie");
-	else debut_page(_T('titre_page_forum_envoi'), "accueil");
-	debut_gauche();
-	debut_droite();
-
-	$titre_parent = '';
-	$parent = '';
 	if ($id_parent) {
 		$result = spip_query("SELECT * FROM spip_forum WHERE id_forum=$id_parent");
 		if ($row = spip_fetch_array($result)) {
@@ -71,18 +54,16 @@ function forum_envoi(
 			$id_message = $row['id_message'];
 			$id_syndic = $row['id_syndic'];
 			$statut = $row['statut'];
-			$titre_parent = $row['titre'];
+			$titre_parent = typo($row['titre']);
 			$texte_parent = $row['texte'];
 			$auteur_parent = $row['auteur'];
 			$id_auteur_parent = $row['id_auteur'];
 			$date_heure_parent = $row['date_heure'];
 			$nom_site_parent = $row['nom_site'];
 			$url_site_parent = $row['url_site'];
-		}
 
-		if ($titre_parent) {
-			$parent = debut_cadre_forum("forum-interne-24.gif", true, "", typo($titre_parent))
-			  . "<span class='arial2'>$date_heure_parent</span> ";
+			$parent = debut_cadre_forum("forum-interne-24.gif", true, "", $titre_parent)
+			. "<span class='arial2'>$date_heure_parent</span> ";
 
 			if ($id_auteur_parent) {
 				$formater_auteur = charger_fonction('formater_auteur', 'inc');
@@ -95,25 +76,81 @@ function forum_envoi(
 			if (strlen($url_site_parent) > 10 AND $nom_site_parent) {
 				$parent .="<p align='left'><font face='Verdana,Arial,Sans,sans-serif'><b><a href='$url_site_parent'>$nom_site_parent</a></b></font></p>";
 			}
-
 			$parent .= fin_cadre_forum(true);
 		}
+
+	} else $parent = $titre_parent = '';
+
+	if ($script == 'articles') {
+	  $table ='articles';
+	  $objet = 'id_article';
+	  $titre = 'titre';
+	  $num = _T('info_numero_article');
+	  if (!$id)  $id = $id_article;
+	} elseif ($script == 'breves_voir') {
+	  $table = 'breves';
+	  $objet = 'id_breve';
+	  $titre = 'titre';
+	  $num = _T('info_gauche_numero_breve');
+	  if (!$id)  $id = $id_breve;
+	} elseif ($script == 'message') {
+	  $table = 'messages';
+	  $objet = 'id_message';
+	  $titre = 'titre';
+	  $num = _T('message') . ' ' ._T('info_numero_abbreviation');
+	  if (!$id)  $id = $id_message;
+	} elseif ($script == 'rubriques') {
+	  $table = 'rubriques';
+	  $objet = 'id_rubrique';
+	  $titre = 'titre';
+	  $num = _T('titre_numero_rubrique');
+	  if (!$id)  $id = $id_rubrique;
+	} elseif ($script == 'sites') {
+	  $table = 'syndic';
+	  $objet = 'id_syndic';
+	  $titre = 'nom_site';
+	  $num = _T('titre_site_numero');
+	  if (!$id)  $id = $id_syndic;
+	} else {
+	  $table = 'forum';
+	  $objet = 'id_forum';
+	  $titre = 'titre'; 
+	  $id = 0;
+	  $titre_page = filtrer_entites(_T('texte_nouveau_message'));
+	  $num = '';
+	}
+
+	if ($num) {
+		$q = spip_query("SELECT $titre AS titre FROM spip_$table WHERE $objet=$id");
+		$q = spip_fetch_array($q);
+		$titre_page = $q['titre'];
+		$num  = "<br />("
+		  . str_replace(':','',strtolower($num))
+		  . $id
+		  . ", "
+		  ._T('info_forum_interne') . ')';
 	}
 
+	if ($id_message) debut_page(_T('titre_page_forum_envoi'), "accueil", "messagerie");
+	else debut_page(_T('titre_page_forum_envoi'), "accueil");
+	debut_gauche();
+	debut_droite();
+	gros_titre($titre_page . $num);
+
 	if ($statut == "prive") $logo = "forum-interne-24.gif";
 	else if ($statut == "privadm") $logo = "forum-admin-24.gif";
 	else if ($statut == "privrac") $logo = "forum-interne-24.gif";
 	else $logo = "forum-public-24.gif";
 
 	$corps = "\n<table border='0' cellpadding='0' cellspacing='0' background='' width='100%'><tr><td>"
-	  . icone(_T('icone_retour'), rawurldecode($url), $logo, '','', false)
+	  . icone(_T('icone_retour'), generer_url_ecrire($script, "$objet=$id"), $logo, '','', false)
 	  ."</td>"
 	  ."\n<td><img src='"
 	  . _DIR_IMG_PACK
 	  . "rien.gif' width='10' border='0' /></td><td width=\"100%\">"
 	  ."<b>"._T('info_titre')."</b><br />"
 	  . "<input type='text' class='formo' name='titre_message' value=\""
-	  . entites_html($titre_message)
+	  . entites_html($titre_message ? $titre_message : $titre_page)
 	  . "\" size='40' />\n"
 	  . "</td></tr></table>"
 	  .
@@ -155,15 +192,15 @@ function forum_envoi(
 		 
 		 "\n<table width='100%' cellpadding='0' cellspacing='0' border='0'>"
 		. (!$parent ? '' : "<tr><td colspan='2'>$parent</td></tr>")
-		. "\n<tr><td width='10' height='13' valign='top'"
-		. (!$titre_parent ? ''
-			: (" background='"
-				. _DIR_IMG_PACK
-				. "forum-vert.gif'" ))
-		. ">"
-		. http_img_pack('rien.gif', ' ', "width='10' height='13' border='0'")
-		. "</td>\n"
-		.  "<td width='100%' valign='top' rowspan='2'>"
+		. "\n<tr>"
+		. (!$parent ? "<td colsan='2'"
+			: (" <td width='10' height='13' valign='top' background='"
+			   . _DIR_IMG_PACK
+			   . "forum-vert.gif'" 
+			   . ">"
+			   . http_img_pack('rien.gif', ' ', "width='10' height='13' border='0'")
+			   . "</td>\n<td "))
+		.  " width='100%' valign='top' rowspan='2'>"
 		.  debut_cadre_thread_forum("", true, "", typo($titre_message))
 		. propre($texte)
 		. (!$nom_site ? '' : "<p><a href='$url_site'>$nom_site</a></p>")
@@ -173,7 +210,7 @@ function forum_envoi(
 		. fin_cadre_thread_forum(true)
 		. "</td>"
 		. "</tr>\n"
-		. (!$titre_parent ? ''
+		. (!$parent ? ''
 			: ("<tr><td width='10' valign='top' background='"
 			  . _DIR_IMG_PACK
 			  . "rien.gif'>"
@@ -185,17 +222,16 @@ function forum_envoi(
 		$parent = '';
 	}
 
-	$arg = intval($id_rubrique) . '/'
+	$cat = intval($id) . '/'
 	  . intval($id_parent) . '/'
-	  . intval($id_article) . '/'
-	  . intval($id_breve) . '/'
-	  . intval($id_message) . '/'
-	  . intval($id_syndic) . '/'
-	  . $statut;
+	  . $statut . '/'
+	  . $script . '/'
+	  . $objet;
 
 	echo  $parent,
 	  "\n<div>&nbsp;</div>"
-	  . generer_action_auteur('editer_forum',$arg, urldecode($url), $corps, " name='formulaire'")
+	  . redirige_action_auteur('editer_forum',$cat, $script, "$objet=$id", $corps, "")
+	  .  "<a id='formulaire'></a>"
 	  . fin_page();
 }
 
diff --git a/ecrire/exec/message.php b/ecrire/exec/message.php
index 0646cfb972..b26d8aebf9 100644
--- a/ecrire/exec/message.php
+++ b/ecrire/exec/message.php
@@ -238,12 +238,11 @@ function http_ajouter_participants($ze_auteurs, $id_message)
 }
 
 // http://doc.spip.org/@http_afficher_forum_perso
-function http_afficher_forum_perso($id_message, $titre)
+function http_afficher_forum_perso($id_message)
 {
-	$utitre = rawurlencode($titre);
 
 	echo "<br /><br />\n<div align='center'>";
-	icone(_T('icone_poster_message'), generer_url_ecrire("forum_envoi","statut=perso&id_message=$id_message&titre_message=$utitre&url=" . generer_url_retour("message","id_message=$id_message")), "forum-interne-24.gif", "creer.gif");
+	icone(_T('icone_poster_message'), generer_url_ecrire("forum_envoi", "statut=perso&id=$id_message&script=message"). '#formulaire', "forum-interne-24.gif", "creer.gif");
 	echo  "</div>\n<p align='left'>";
 
 	$query_forum = spip_query("SELECT * FROM spip_forum WHERE statut='perso' AND id_message='$id_message' AND id_parent=0 ORDER BY date_heure DESC LIMIT 20");
@@ -541,7 +540,7 @@ function exec_affiche_message_dist($id_message, $cherche_auteur, $nouv_auteur, $
 
 	// reponses et bouton poster message
 
-	http_afficher_forum_perso($id_message, $titre);
+	http_afficher_forum_perso($id_message);
  }
 
  echo fin_page();
diff --git a/ecrire/exec/sites.php b/ecrire/exec/sites.php
index 109a177fed..7b393c71ef 100644
--- a/ecrire/exec/sites.php
+++ b/ecrire/exec/sites.php
@@ -519,7 +519,7 @@ fin_cadre_relief();
 
  echo "<br /><br />\n<div align='center'>";
 
- icone (_T('icone_poster_message'), generer_url_ecrire('forum_envoi',"id_syndic=$id_syndic&statut=prive&titre_message=$nom_site&url=".generer_url_retour("sites","id_syndic=$id_syndic")), "forum-interne-24.gif", "creer.gif");
+ icone (_T('icone_poster_message'), generer_url_ecrire('forum_envoi', "id_syndic=$id&statut=prive&script=sites") . '#formulaire', "forum-interne-24.gif", "creer.gif");
 
  echo "</div><p align='left'>\n";
 
diff --git a/ecrire/inc/presentation.php b/ecrire/inc/presentation.php
index 57e65954f0..b2dede36f6 100644
--- a/ecrire/inc/presentation.php
+++ b/ecrire/inc/presentation.php
@@ -1265,7 +1265,7 @@ function afficher_forum_thread($row, $controle_id_article, $compteur_forum, $nb_
 	  	$tm = rawurlencode($titre);
 		$res .= "<div align='right' class='verdana1'>"
 		. "<b><a href='"
-		. generer_url_ecrire("forum_envoi","id_parent=$id_forum&titre_message=$tm&url=" . generer_url_retour($retour, $arg)  .'#formulaire')
+		  . generer_url_ecrire("forum_envoi", "id_parent=$id_forum&titre_message=$tm&script=$retour") . '#formulaire'
 		. "'>"
 		. _T('lien_repondre_message')
 		. "</a></b></div>";
-- 
GitLab