diff --git a/ecrire/balise/formulaire_forum.php b/ecrire/balise/formulaire_forum.php index e8c6c869e0a59c5ee7481c482f30503f4ffded92..6020d84bd9f5731a1f476db281e19054fa52b0fb 100644 --- a/ecrire/balise/formulaire_forum.php +++ b/ecrire/balise/formulaire_forum.php @@ -98,7 +98,7 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour) } // Tableau des valeurs servant au calcul d'une signature de securite. // Elles seront placees en Input Hidden pour que inc/forum_insert - // recalcule la meme chose et verifie l'identité des resultats. + // recalcule la meme chose et verifie l'identite des resultats. // Donc ne pas changer la valeur de ce tableau entre le calcul de // la signature et la fabrication des Hidden // Faire attention aussi a 0 != '' @@ -116,7 +116,7 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour) $previsu = ' '; // au premier appel (pas de Post-var nommee "retour_forum") - // memoriser evntuellement l'URL de retour pour y revenir apres + // memoriser eventuellement l'URL de retour pour y revenir apres // envoi du message ; aux appels suivants, reconduire la valeur. // Initialiser aussi l'auteur if (!$retour_forum = rawurldecode(_request('retour_forum'))) { @@ -126,7 +126,9 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour) // par defaut, on veut prendre url_forum(), mais elle ne sera connue // qu'en sortie, on inscrit donc une valeur absurde ("!") $retour_forum = "!"; - + // sauf si on a passe un parametre en argument (exemple : {#SELF}) + if ($url_param_retour) + $retour_forum = str_replace('&', '&', $url_param_retour); } if (isset($_COOKIE['spip_forum_user']) AND is_array($cookie_user = unserialize($_COOKIE['spip_forum_user']))) { @@ -156,17 +158,12 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour) include_spip('inc/actions'); $hash = calculer_action_auteur('ajout_forum'.join(' ', $ids).' '.$alea); - } - - // Poser un cookie pour ne pas retaper les infos invariables - include_spip('inc/cookie'); - spip_setcookie('spip_forum_user', - serialize(array('nom' => $auteur, - 'email' => $email_auteur))); - // sauf si on a passe un parametre en argument (exemple : {#SELF}) - if ($url_param_retour) { - $script = $url_param_retour; + // Poser un cookie pour ne pas retaper les infos invariables + include_spip('inc/cookie'); + spip_setcookie('spip_forum_user', + serialize(array('nom' => $auteur, + 'email' => $email_auteur))); } // pour la chaine de hidden diff --git a/ecrire/inc/forum_insert.php b/ecrire/inc/forum_insert.php index 1c1fd92685df333ada9424194001d1615ab5f5a2..52381a4bc416e5da11259f8289e1daa457281902 100644 --- a/ecrire/inc/forum_insert.php +++ b/ecrire/inc/forum_insert.php @@ -252,10 +252,10 @@ function inc_forum_insert_dist() { // Entrer les mots-cles associes if (is_array($ajouter_mot)) mots_du_forum($ajouter_mot, $id_message); - if ($statut == 'publie') { // // INVALIDATION DES CACHES LIES AUX FORUMS // + if ($statut == 'publie') { include_spip('inc/invalideur'); suivre_invalideur ("id='id_forum/" . calcul_index_forum($id_article, @@ -271,7 +271,12 @@ function inc_forum_insert_dist() { prevenir_auteurs($auteur, $email_auteur, $id_message, $id_article, $texte, $titre, $statut); } - if (!$calculer_retour) return $retour_forum; + // En cas de retour sur (par exemple) {#SELF}, on ajoute quand + // meme #forum12 a la fin de l'url, sauf si un #ancre est explicite + if (!$calculer_retour) + return strstr('#', $retour_forum) ? + $retour_forum + : $retour_forum.'#forum'.$id_message; // le retour automatique envoie sur le thread, ce qui permet // de traiter elegamment le cas des forums moderes a priori. diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php index ae114bb7ea2991c1040880f8c877de1d75b41238..63f879fe2d8e241d53da5975c0c2b5ebbc8179b4 100644 --- a/ecrire/public/assembler.php +++ b/ecrire/public/assembler.php @@ -30,7 +30,6 @@ function public_assembler_dist($fond) { } // Si envoi pour un forum, enregistrer puis rediriger - if (isset($_POST['confirmer_forum']) OR (isset($_POST['ajouter_mot']) AND $GLOBALS['afficher_texte']=='non')) { $f = charger_fonction('forum_insert', 'inc'); diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php index 2d310f4aef77c9b75e068dbb394f0a318d2d03a3..67b3031200355d6352eb6a22def9d11c8167d1f5 100644 --- a/ecrire/public/balises.php +++ b/ecrire/public/balises.php @@ -850,7 +850,7 @@ function balise_PARAMETRES_FORUM_dist($p) { // Attention un eventuel &retour=xxx dans l'URL est prioritaire $c .= '. - (($lien = (_request("retour") ? _request("retour") : '.$retour.')) ? "&retour=".rawurlencode($lien) : "")'; + (($lien = (_request("retour") ? _request("retour") : str_replace("&", "&", '.$retour.'))) ? "&retour=".rawurlencode($lien) : "")'; $p->code .= code_invalideur_forums($p, "(".$c.")");