diff --git a/ecrire/inc_majbase.php3 b/ecrire/inc_majbase.php3 index 53de360217ab5b1c82308ba645a6680d33f8ef7c..6d5f56a5480d32a8e97c0855b5c1725728d13a00 100644 --- a/ecrire/inc_majbase.php3 +++ b/ecrire/inc_majbase.php3 @@ -936,6 +936,12 @@ function maj_base() { maj_version(1.809); } + // Annuler les brouillons de forum jamais valides + if ($version_installee < 1.810) { + spip_query("DELETE FROM spip_forum WHERE statut='redac'"); + maj_version(1.810); + } + return true; } diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3 index 2124bd076a88c5ad5b7bbe7a49122738a0bbbf1a..a2aa955c26f5c4f9fb863ef09d75475f349f027b 100644 --- a/ecrire/inc_version.php3 +++ b/ecrire/inc_version.php3 @@ -347,7 +347,7 @@ define_once('_AUTH_USER_FILE', '.htpasswd'); // (utilise pour les modifs de la base de donnees) // version de la base -$spip_version = 1.809; +$spip_version = 1.810; // version de spip $spip_version_affichee = "1.8 beta 2 CVS"; diff --git a/formulaire_forum-dist.html b/formulaire_forum-dist.html index 4e3969365058463df42d9aad29200785dbda0cd2..3fd62cff895fc3c3c0b9091411e818b7423bbb38 100644 --- a/formulaire_forum-dist.html +++ b/formulaire_forum-dist.html @@ -1,58 +1,59 @@ <form action='[(#HTTP_VARS{url})]' method='post' name='formulaire'> - <input type='hidden' name='ajout_forum' value="oui" /> - <input type='hidden' name='id_message' value="[(#HTTP_VARS{id_message})]" /> - <input type='hidden' name='alea' value="[(#HTTP_VARS{alea})]" /> - <input type='hidden' name='hash' value="[(#HTTP_VARS{hash})]" /> - <input type='hidden' name='retour' value="[(#HTTP_VARS{retour})]" /> - [(#HTTP_VARS*{modere})<p>] - [(#HTTP_VARS*{afficher_non})] - [(#HTTP_VARS*{previsu}) - <fieldset class='spip_encadrer'> - <legend><b><:forum_titre:></b></legend> - <label> - <input type='text' name='titre' - [value="(#HTTP_VARS{titre})" ]class='forml' size='40' /> - </label> - </fieldset> - <br /> - <fieldset class='spip_encadrer'> - <legend><b><:forum_texte:></b></legend> - <p><:info_creation_paragraphe:></p> -[(#HTTP_VARS{texte}|barre_forum)] - </fieldset> - <br /> - [(#HTTP_VARS*{table})] - <fieldset class='spip_encadrer'> - <legend><:forum_lien_hyper:></legend> - <p><:forum_page_url:></p> - <p><label><:forum_titre:> - <input type='text' name='nom_site_forum' class='forml' size='40' - value="[(#HTTP_VARS{nom_site_forum})]" /> - </label></p> - <p><label><:forum_url:> - <input type='text' name='url_site' class='forml' size='40' - value="[(#HTTP_VARS{url_site})]" /> - </label></p> - </fieldset> - <br /> - <fieldset class='spip_encadrer'> - <legend><:forum_qui_etes_vous:></legend> - <p> - <label> - <:forum_votre_nom:> - <input type='text' name='auteur' value="[(#HTTP_VARS{auteur})]" - class='forml' size='40' [(#HTTP_VARS{disabled})] /> - </label> - </p> - <p> - <label> - <:forum_votre_email:> - <input type='text' name='email_auteur' value="[(#HTTP_VARS{email_auteur})]" - class='forml' size='40' [(#HTTP_VARS{disabled})] /> - </label> - </p> - </fieldset> - <br /><div align='right'> - <input type='submit' value="<:forum_voir_avant:>" class='spip_bouton'></div>] + +<input type='hidden' name='ajout_forum' value="oui" /> +<input type='hidden' name='post_forum' value="oui" /> +<input type='hidden' name='alea' value="[(#HTTP_VARS{alea})]" /> +<input type='hidden' name='hash' value="[(#HTTP_VARS{hash})]" /> +<input type='hidden' name='retour' value="[(#HTTP_VARS{retour})]" /> + +[<p>(#HTTP_VARS*{modere})</p>] + +[(#HTTP_VARS*{afficher_texte_hidden})] +[(#HTTP_VARS*{afficher_texte_input}) + [(#HTTP_VARS*{previsu}) + <fieldset class='spip_encadrer'> + <legend><b><:forum_titre:></b></legend> + <label><input type='text' name='titre' + [value="(#HTTP_VARS{titre})" ]class='forml' size='40' /> + </label> + </fieldset> + <br /> + <fieldset class='spip_encadrer'> + <legend><b><:forum_texte:></b></legend> + <p><:info_creation_paragraphe:></p> + [(#HTTP_VARS{texte}|barre_forum)] + </fieldset> + <br /> + [<p>(#HTTP_VARS*{table})</p>] + <fieldset class='spip_encadrer'> + <legend><:forum_lien_hyper:></legend> + <p><:forum_page_url:></p> + <p><label><:forum_titre:> + <input type='text' name='nom_site_forum' class='forml' size='40' + value="[(#HTTP_VARS{nom_site_forum})]" /> + </label></p> + <p><label><:forum_url:> + <input type='text' name='url_site' class='forml' size='40' + value="[(#HTTP_VARS{url_site})]" /> + </label></p> + </fieldset> + <br /> + <fieldset class='spip_encadrer'> + <legend><:forum_qui_etes_vous:></legend> + <p><label><:forum_votre_nom:> + <input type='text' name='auteur' value="[(#HTTP_VARS{auteur})]" + class='forml' size='40' [(#HTTP_VARS{disabled})] /> + </label></p> + <p><label><:forum_votre_email:> + <input type='text' name='email_auteur' + value="[(#HTTP_VARS{email_auteur})]" + class='forml' size='40' [(#HTTP_VARS{disabled})] /> + </label></p> + </fieldset> + <br /> + <div align='right'><input type='submit' value="<:forum_voir_avant:>" + class='spip_bouton'></div> + ] +] </form> diff --git a/forum.php3 b/forum.php3 index f027e0261bcaaee3826713632c860cb4eaaebdd4..94d184831e4e29fe0b263bd57788eab67d68bf4b 100644 --- a/forum.php3 +++ b/forum.php3 @@ -2,6 +2,15 @@ $fond = "forum"; $delais = 3600; +// Exemples de personnalisation : +// @ http://www.spip.net/fr_article1825.html +// +// 1. seuls les mots-cles du groupe de mots numero 1 doivent s'afficher +// $afficher_groupe = array(9); +// +// 2. faire des forums uniquement pour affecter des mots-cles +// $afficher_texte = "non"; + include ("inc-public.php3"); ?> diff --git a/inc-formulaire_forum.php3 b/inc-formulaire_forum.php3 index a9cc652c5071be632472d5c4993e176c6d310ef2..36f153860b45d3fdaf23063f90d55cd1f21956ab 100644 --- a/inc-formulaire_forum.php3 +++ b/inc-formulaire_forum.php3 @@ -77,13 +77,14 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq $previsu = ' '; // Recuperer le message a previsualiser - if ($id_message = intval($GLOBALS['HTTP_POST_VARS']['id_message'])) { + if ($GLOBALS['HTTP_POST_VARS']['post_forum']) { $titre = $GLOBALS['HTTP_POST_VARS']['titre']; $texte = $GLOBALS['HTTP_POST_VARS']['texte']; $auteur = $GLOBALS['HTTP_POST_VARS']['auteur']; $email_auteur = $GLOBALS['HTTP_POST_VARS']['email_auteur']; $nom_site_forum = $GLOBALS['HTTP_POST_VARS']['nom_site_forum']; $url_site = $GLOBALS['HTTP_POST_VARS']['url_site']; + $ajouter_mot = $GLOBALS['HTTP_POST_VARS']['ajouter_mot']; // array if ($afficher_texte != 'non') { $previsu = @@ -97,16 +98,21 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq . interdire_scripts(typo($nom_site_forum)) . "</a>"; // Verifier mots associes au message - $result_mots = spip_query("SELECT mots.id_mot, mots.titre, mots.type - FROM spip_mots_forum AS lien, spip_mots AS mots - WHERE id_forum='$id_message' AND mots.id_mot = lien.id_mot - GROUP BY mots.id_mot"); + if (is_array($ajouter_mot)) + $mots = preg_replace('/[^0-9,]/', '', join(',',$ajouter_mot)); + else $mots = ''; + + // affichage {par num type, type, num titre,titre} + $result_mots = spip_query("SELECT id_mot, titre, type + FROM spip_mots + WHERE id_mot IN (0, $mots) + ORDER BY 0+type,type,0+titre,titre"); if (spip_num_rows($result_mots)>0) { $previsu .= "<p>"._T('forum_avez_selectionne')."</p><ul>"; while ($row = spip_fetch_array($result_mots)) { $les_mots[$row['id_mot']] = "checked='checked'"; $presence_mots = true; - $previsu .= "<li class='font-size=80%'> " + $previsu .= "<li style='font-size: 80%;'> " . typo($row['type']) . " : <b>" . typo($row['titre']) ."</b></li>"; } @@ -129,8 +135,8 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq } } else { // Premiere edition, initialiser l'auteur - // puis s'accorder une nouvelle entree dans la table - if ($spip_forum_user && is_array($cookie_user = unserialize($spip_forum_user))) { + if ($spip_forum_user && + is_array($cookie_user = unserialize($spip_forum_user))) { $auteur = $cookie_user['nom']; $email_auteur = $cookie_user['email']; } @@ -138,10 +144,6 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq $auteur = $GLOBALS['auteur_session']['nom']; $email_auteur = $GLOBALS['auteur_session']['email']; } - $id_message = spip_abstract_insert('forum', - "(date_heure, titre, ip, statut)", - "(NOW(), '".addslashes($titre)."', '$REMOTE_ADDR', 'redac')"); - } // Generation d'une valeur de securite pour validation @@ -166,8 +168,9 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq 'formulaire_forum', 0, array( - 'afficher_non' => - ($afficher_texte != 'non' ? '' : + 'afficher_texte_input' => (($afficher_texte <> 'non') ? ' ' : ''), + 'afficher_texte_hidden' => + (($afficher_texte <> 'non') ? '' : (boutonne('hidden', 'titre', htmlspecialchars($titre)) . $table . "\n<br /><div align='right'>" . @@ -253,7 +256,7 @@ function table_des_mots($table, $les_mots) { <td width='47%' valign='top'>"; } - $ret .= boutonne($unseul, "ajouter_mot[$id_groupe][]", $id_mot, "id='mot$id_mot' " . $les_mots[$id_mot]) . + $ret .= boutonne($unseul, "ajouter_mot[]", $id_mot, "id='mot$id_mot' " . $les_mots[$id_mot]) . afficher_petits_logos_mots($id_mot) . "<b><label for='mot$id_mot'>$titre_mot</label></b><br />"; diff --git a/inc-messforum.php3 b/inc-messforum.php3 index 9d7298ee99b14c9b4180d6aa5cca620de360c314..45d9545e0730fb8b9b7aff618095a936866c8ae0 100644 --- a/inc-messforum.php3 +++ b/inc-messforum.php3 @@ -2,6 +2,8 @@ include_ecrire('inc_meta.php3'); include_ecrire('inc_forum.php3'); +include_ecrire("inc_abstract_sql.php3"); + // Ce fichier inclus par inc-public a un comportement special // Voir commentaires dans celui-ci et dans inc-formulaire_forum @@ -51,11 +53,6 @@ $forum_id_rubrique = intval($id_rubrique); $forum_id_forum = intval($id_forum); $forum_id_breve = intval($id_breve); $forum_id_syndic = intval($id_syndic); -$slash_texte = addslashes($texte); -$slash_titre = addslashes($titre); -$slash_nom_site_forum = addslashes($nom_site_forum); -$slash_url_site = addslashes($url_site); -$id_message = intval($id_message); if (!$id_auteur) $id_auteur = intval($auteur_session['id_auteur']); @@ -93,39 +90,44 @@ if ($forums_publics == "abo") { $email_auteur = $auteur_session['email']; } -$slash_auteur = addslashes($auteur); -$slash_email_auteur = addslashes($email_auteur); - -if ((strlen($slash_texte) + strlen($slash_titre) + strlen($slash_nom_site_forum) + strlen($slash_url_site) + strlen($slash_auteur) + strlen($slash_email_auteur)) > 20 * 1024) { +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', - array('retour_forum' => $retour_forum))); - exit; + _T('forum_cliquer_retour', + array('retour_forum' => $retour_forum))); + exit; } -spip_query("DELETE FROM spip_mots_forum WHERE id_forum='$id_message'"); -if ($ajouter_mot) { - for (reset($ajouter_mot);$key=key($ajouter_mot);next($ajouter_mot)) - $les_mots .= ",".join($ajouter_mot[$key],","); - $les_mots = explode(",", $les_mots); - for ($index = 0; $index < count($les_mots); $index++){ - $le_mot = $les_mots[$index]; - if ($le_mot > 0) - spip_query("INSERT INTO spip_mots_forum (id_mot, id_forum) - VALUES ('$le_mot', '$id_message')"); + +$validation_finale = (strlen($confirmer) > 0 + OR ($afficher_texte=='non' AND $ajouter_mot)); + +if ($validation_finale) { + + // verifier droit (pour interdire de hack-poster sur des forums fermes ?) + include_ecrire("inc_admin.php3"); + if (!(verifier_action_auteur("ajout_forum $forum_id_rubrique". + " $forum_id_forum $forum_id_article $forum_id_breve". + " $forum_id_syndic $alea", $hash))) { + header("Status: 404"); + exit; } -} -$validation_finale = (strlen($confirmer) > 0 OR - ($afficher_texte=='non' AND $ajouter_mot)); -$statut = ((!$validation_finale) ? 'redac' : - (($forums_publics == 'non') ? 'off' : - (($forums_publics == 'pri') ? 'prop' : 'publie'))); + // Entrer le message dans la base + $id_message = spip_abstract_insert('forum', + "(date_heure)", + "(NOW())"); -if ($forum_id_forum > 0) $id_thread = $forum_id_forum; -else $id_thread = $id_message; + $statut = + ($forums_publics == 'non') ? 'off' : + (($forums_publics == 'pri') ? 'prop' : + 'publie'); -spip_query("UPDATE spip_forum SET id_parent = $forum_id_forum, + if ($forum_id_forum > 0) + $id_thread = $forum_id_forum; + else + $id_thread = $id_message; # id_thread oblige INSERT puis UPDATE. + + spip_query("UPDATE spip_forum SET id_parent = $forum_id_forum, id_rubrique =$forum_id_rubrique, id_article = $forum_id_article, id_breve = $forum_id_breve, @@ -133,49 +135,51 @@ spip_query("UPDATE spip_forum SET id_parent = $forum_id_forum, id_auteur = $id_auteur, id_thread = $id_thread, date_heure = NOW(), - titre = \"$slash_titre\", - texte = \"$slash_texte\", - nom_site = \"$slash_nom_site_forum\", - url_site = \"$slash_url_site\", - auteur = \"$slash_auteur\", - email_auteur = \"$slash_email_auteur\", - ip = \"$REMOTE_ADDR\", - statut = \"$statut\" - WHERE id_forum = '$id_message' -"); - -//calculer_threads(); - -if ($validation_finale) { - include_ecrire("inc_admin.php3"); - if (!(verifier_action_auteur("ajout_forum $forum_id_rubrique". - " $forum_id_forum $forum_id_article $forum_id_breve". - " $forum_id_syndic $alea", $hash))) { - header("Status: 404"); - exit; - } else { - if (lire_meta("prevenir_auteurs") == "oui" AND ($afficher_texte != "non") AND ($id_article = $forum_id_article)) { - prevenir_auteurs($auteur, $email_auteur, $id_article, $texte, $titre); + titre = '".addslashes($titre)."', + texte = '".addslashes($texte)."', + nom_site = '".addslashes($nom_site_forum)."', + url_site = '".addslashes($url_site)."', + auteur = '".addslashes($auteur)."', + email_auteur = '".addslashes($email_auteur)."', + ip = '$REMOTE_ADDR', + statut = '$statut' + WHERE id_forum = $id_message + "); + + // calculer_threads(); + + // Entrer les mots-cles associes + if (is_array($ajouter_mot)) + foreach ($ajouter_mot as $id_mot) + if ($id_mot = intval($id_mot)) + spip_query("INSERT INTO spip_mots_forum (id_mot, id_forum) + VALUES ($id_mot, $id_message)"); + + + // Prevenir les auteurs de l'article + if (lire_meta("prevenir_auteurs") == "oui" + AND ($afficher_texte != "non") + AND ($id_article = $forum_id_article)) + prevenir_auteurs($auteur, $email_auteur, $id_article, $texte, $titre); + + // Poser un cookie pour ne pas retaper le nom / email + $cookie_user = array('nom' => $auteur, 'email' => $email_auteur); + spip_setcookie('spip_forum_user', serialize($cookie_user)); + + // + // INVALIDATION DES CACHES LIES AUX FORUMS + // + include_ecrire('inc_invalideur.php3'); + if ($statut == 'publie') { + suivre_invalideur ("id='id_forum/" . + calcul_index_forum($forum_id_article, + $forum_id_breve, + $forum_id_rubrique, + $forum_id_syndic) . "'"); + } - } - // Poser un cookie pour ne pas retaper le nom / email - $cookie_user = array('nom' => $auteur, 'email' => $email_auteur); - spip_setcookie('spip_forum_user', serialize($cookie_user)); - - // - // INVALIDATION DES CACHES LIES AUX FORUMS - // - include_ecrire('inc_invalideur.php3'); - if ($statut == 'publie') { - suivre_invalideur ("id='id_forum/" . - calcul_index_forum($forum_id_article, - $forum_id_breve, - $forum_id_rubrique, - $forum_id_syndic) . "'"); - } + $redirect = $retour_forum; - $redirect = $retour_forum; - } } ?>