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') ? ' ' : ''), @@ -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