diff --git a/ecrire/public-messforum.php b/ecrire/public-messforum.php index f3486008a52a5d3dadfe24e85cc505032e5603ac..20460efb2763cd24bed9ff75b3d6f57678854bc6 100644 --- a/ecrire/public-messforum.php +++ b/ecrire/public-messforum.php @@ -135,9 +135,33 @@ function enregistre_forum() { } // initialisation de l'eventuel visiteur connecte - if (!$id_auteur) + if (!($id_auteur = intval($id_auteur))) $id_auteur = intval($auteur_session['id_auteur']); + // Verifier hash securite pour les forums avec previsu + if ($GLOBALS['afficher_texte'] <> 'non') { + include_ecrire("inc_session"); + if (!verifier_action_auteur("ajout_forum $id_rubrique". + " $id_forum $id_article $id_breve". + " $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); + if (!file_exists($file = _DIR_SESSIONS."forum_$alea.lck")) + return $retour_forum; # echec silencieux du POST + } + + // securite + + $id_article = intval($id_article); + $id_breve = intval($id_breve); + $id_forum = intval($id_forum); + $id_rubrique = intval($id_rubrique); + $id_syndic = intval($id_syndic); + $statut = controler_forum($id_article, $retour_forum); // Ne pas autoriser de changement de nom si forum sur abonnement @@ -155,21 +179,8 @@ function enregistre_forum() { exit; } - // Verifier hash securite pour les forums avec previsu if ($GLOBALS['afficher_texte'] <> 'non') { - include_ecrire("inc_session"); - if (!verifier_action_auteur("ajout_forum $id_rubrique". - " $id_forum $id_article $id_breve". - " $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); - if (!file_exists($hash = _DIR_SESSIONS."forum_$alea.lck")) - return $retour_forum; # echec silencieux du POST - unlink($hash); + unlink($file); } // Entrer le message dans la base @@ -213,7 +224,7 @@ function enregistre_forum() { // Cela assure aussi qu'on retrouve son message dans le thread // dans le cas des forums moderes a posteriori, ce qui n'est // pas plus mal. - $retour_forum = generer_url_forum($id_message, true); + $retour_forum = generer_url_forum($id_message); } // Entrer les mots-cles associes diff --git a/formulaires/formulaire_forum.html b/formulaires/formulaire_forum.html index c05df18bb71375d55943c41382e3b60ab0010c58..1d4c2c446aa00fddf4deaa247753cf1baad61dbb 100644 --- a/formulaires/formulaire_forum.html +++ b/formulaires/formulaire_forum.html @@ -1,5 +1,6 @@ <a id="formulaire"></a> <form action="[(#ENV{url})][(#ENV**{previsu}|?{'#formulaire',''})]" method="post">[ +<input type='hidden' name='page' value='(#ENV{page})' />][ <input type='hidden' name='id_article' value='(#ENV{id_article})' />][ <input type='hidden' name='id_breve' value='(#ENV{id_breve})' />][ <input type='hidden' name='id_forum' value='(#ENV{id_forum})' />][ diff --git a/formulaires/inc-formulaire_forum.php3 b/formulaires/inc-formulaire_forum.php3 index fcdc9acd8499ac173138c03d9079f0998e6656a5..a486bfea78071a04d4fc0b580c483dd40706af81 100644 --- a/formulaires/inc-formulaire_forum.php3 +++ b/formulaires/inc-formulaire_forum.php3 @@ -43,7 +43,7 @@ function balise_FORMULAIRE_FORUM_stat($args, $filtres) { // Note : ceci n'est pas documente !! // $filtres[0] peut contenir l'url sur lequel faire tourner le formulaire - // exemple dans un squelette article.html : [(#FORMULAIRE_FORUM|forum.php)] + // exemple dans un squelette article.html : [(#FORMULAIRE_FORUM|forum)] // le denier arg peut contenir l'url sur lequel faire le retour // exemple dans un squelette article.html : [(#FORMULAIRE_FORUM{#SELF})] @@ -67,13 +67,15 @@ function balise_FORMULAIRE_FORUM_stat($args, $filtres) { if (($GLOBALS['meta']["mots_cles_forums"] != "oui")) $table = ''; + // compatibilite: virer l'extension + $script = preg_match(',.php3?$,', $filtres[0],$r) ? $r[1] : $filtres[0]; return - array($titre, $table, $forums_publics, $filtres[0], + array($titre, $table, $forums_publics, ($script ? $script : 'forum'), $idr, $idf, $ida, $idb, $ids, $am, $ag, $af, $url); } function balise_FORMULAIRE_FORUM_dyn( -$titre, $table, $type, $url, +$titre, $table, $type, $page, $id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic, $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour) { @@ -85,31 +87,18 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour) } // exclure des id_* postees du formulaire tout ce qui n'est pas nombre > 0. -// y aura plein de input hidden value=0 dans le squelette mais il faut -// que le calcul du hachage soit le meme ici et dans inc-messforum - - $ids = array('id_article' => intval($id_article), - 'id_breve'=> intval($id_breve), - 'id_forum'=> intval($id_forum), - 'id_rubrique'=> intval($id_rubrique), - 'id_syndic'=> intval($id_syndic)); - - // url de reference - if (!$url) { - $url = new Link(); - $url = $url->getUrl(); - } else { - // identifiants des parents - $args = ""; - foreach ($ids as $id => $v) $args .= "&$id=$v"; - if (strpos($url,'?')) - $url .= $args; - else $url .= '?' . substr($args,1); - } +// attention le calcul du hachage doit etre le meme ici et dans inc-messforum + + $ids = array(); + if ($x = intval($id_article)) $ids['id_article'] = $x; + if ($x = intval($id_breve)) $ids['id_breve'] = $x; + if ($x = intval($id_forum)) $ids['id_forum'] = $x; + if ($x = intval($id_rubrique)) $ids['id_rubrique'] = $x; + if ($x = intval($id_syndic)) $ids['id_syndic'] = $x; - $url = ereg_replace("[?&]var_erreur=[^&]*", '', $url); - $url = ereg_replace("[?&]var_login=[^&]*", '', $url); - $url = ereg_replace("[?&]url=[^&]*", '', $url); + $args = ""; + foreach ($ids as $id => $v) $args .= "&$id=$v"; + $url = "./?page=$page$args"; // ne pas mettre '', sinon le squelette n'affichera rien. $previsu = ' '; @@ -128,7 +117,7 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour) // sauf si on a passe un parametre en argument (exemple : {#SELF}) if($url_param_retour) - $retour_forum = str_replace("&", "&", $url_param_retour); + $retour_forum = urlencode($url_param_retour); } if (isset($_COOKIE['spip_forum_user']) @@ -177,7 +166,8 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour) 'table' => $table, 'texte' => $texte, 'titre' => extraire_multi($titre), - 'url' => $url, + 'page' => $page, + 'url' => $url, 'url_site' => ($url_site ? $url_site : "http://"), 'id_article' => $ids['id_article'], 'id_breve' => $ids['id_breve'],