Adaptation de "nospam", ou autre technique ???
Le 19 janv. 09 à 16:53, stephane@rezo.net a écrit :
Author: stephane@rezo.net
Date: Mon Jan 19 16:53:42 2009
New Revision: 26046Log:
un antispam pour spip 1.9.2Added:
_plugins_/_stable_/antispam/
_plugins_/_stable_/antispam/balise/
_plugins_/_stable_/antispam/balise/formulaire_forum.php
_plugins_/_stable_/antispam/fonds/
_plugins_/_stable_/antispam/fonds/cfg_antispam.html
_plugins_/_stable_/antispam/formulaires/
_plugins_/_stable_/antispam/formulaires/forum.html
_plugins_/_stable_/antispam/inc/
_plugins_/_stable_/antispam/inc/forum_insert.php
_plugins_/_stable_/antispam/plugin.xmlAdded: _plugins_/_stable_/antispam/balise/formulaire_forum.php
======================================================================
--- _plugins_/_stable_/antispam/balise/formulaire_forum.php (added)
+++ _plugins_/_stable_/antispam/balise/formulaire_forum.php Mon Jan 19 16:53:42 2009
@@ -0,0 +1,324 @@
+<?php
+
+/***************************************************************************\
+ * SPIP, Systeme de publication pour l'internet *
+ * *
+ * Copyright (c) 2001-2007 *
+ * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
+ * *
+ * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
+ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return; #securite
+
+include_spip('inc/meta');
+include_spip('inc/acces');
+include_spip('inc/texte');
+include_spip('inc/lang');
+include_spip('inc/mail');
+include_spip('inc/forum');
+include_spip('base/abstract_sql');
+spip_connect();
+
+charger_generer_url();
+
+/*******************************/
+/* GESTION DU FORMULAIRE FORUM */
+/*******************************/
+
+// Contexte du formulaire
+// Mots-cles dans les forums :
+// Si la variable de personnalisation $afficher_groupe est definie
+// dans le fichier d'appel, et si la table de reference est OK, proposer
+// la liste des mots-cles
+
+// http://doc.spip.org/@balise_FORMULAIRE_FORUM
+function balise_FORMULAIRE_FORUM ($p) {
+
+ $p = calculer_balise_dynamique($p,'FORMULAIRE_FORUM', array('id_rubrique', 'id_forum', 'id_article', 'id_breve', 'id_syndic', 'ajouter_mot', 'ajouter_groupe', 'afficher_texte'));
+
+ // Ajouter le code d'invalideur specifique aux forums
+ include_spip('inc/invalideur');
+ if (function_exists($i = 'code_invalideur_forums'))
+ $p->code = $i($p, $p->code);
+
+ return $p;
+}
+
+// verification des droits a faire du forum
+// http://doc.spip.org/@balise_FORMULAIRE_FORUM_stat
+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)]
+ // ou encore [(#FORMULAIRE_FORUM|forumspip.php)]
+
+ // le denier arg peut contenir l'url sur lequel faire le retour
+ // exemple dans un squelette article.html : [(#FORMULAIRE_FORUM{#SELF})]
+
+ // recuperer les donnees du forum auquel on repond, false = forum interdit
+ list ($idr, $idf, $ida, $idb, $ids, $am, $ag, $af, $url) = $args;
+ $idr = intval($idr);
+ $idf = intval($idf);
+ $ida = intval($ida);
+ $idb = intval($idb);
+ $ids = intval($ids);
+ if (!$r = sql_recherche_donnees_forum ($idr, $idf, $ida, $idb, $ids))
+ return '';
+
+ list ($titre, $table, $forums_publics) = $r;
+
+ if (($GLOBALS['meta']["mots_cles_forums"] != "oui"))
+ $table = '';
+
+ // Sur quelle adresse va-t-on "boucler" pour la previsualisation ?
+ if ($script = $filtres[0])
+ $script = preg_match(',[.]php3?$,', $script) ?
+ $script : generer_url_public($script);
+ else
+ $script = self(); # sur soi-meme
+
+ return
+ array($titre, $table, $forums_publics, $script,
+ $idr, $idf, $ida, $idb, $ids, $am, $ag, $af, $url);
+}
+
+// http://doc.spip.org/@balise_FORMULAIRE_FORUM_dyn
+function balise_FORMULAIRE_FORUM_dyn(
+$titre, $table, $type, $script,
+$id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic,
+$ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
+{
+ // verifier l'identite des posteurs pour les forums sur abo
+ if ($type == "abo") {
+ if (!$GLOBALS["auteur_session"]) {
+ return array('formulaires/login_forum', 0,
+ array('inscription' => generer_url_public('spip_inscription'),
+ 'oubli' => generer_url_public('spip_pass')));
+ } else {
+ // forcer ces valeur
+ $auteur = $GLOBALS['auteur_session']['nom'];
+ $email_auteur = $GLOBALS['auteur_session']['email'];
+ }
+ }
+ // 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'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 != ''
+
+ // id_rubrique est parfois passee pour les articles, on n'en veut pas
+ $ids = array();
+ if ($id_rubrique > 0 AND ($id_article OR $id_breve OR $id_syndic))
+ $id_rubrique = 0;
+ foreach (array('id_article', 'id_breve', 'id_forum', 'id_rubrique', 'id_syndic') as $o) {
+ $ids[$o] = ($x = intval($$o)) ? $x : '';
+ }
+
+ // ne pas mettre '', sinon le squelette n'affichera rien.
+ $previsu = ' ';
+
+ //$securiser_action = charger_fonction('securiser_action', 'inc');
+ include_spip('inc/securiser_action');
+ // on sait que cette fonction est dans le fichier associe
+ $hash = calculer_action_auteur("ajout_forum-$arg");
+
+ // au premier appel (pas de Post-var nommee "retour_forum")
+ // 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'))) {
+ if ($retour_forum = rawurldecode(_request('retour')))
+ $retour_forum = str_replace('&var_mode=recalcul','',$retour_forum);
+ else {
+ // 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']))) {
+ $auteur = $cookie_user['nom'];
+ $email_auteur = $cookie_user['email'];
+ } else {
+ $auteur = $GLOBALS['auteur_session']['nom'];
+ $email_auteur = $GLOBALS['auteur_session']['email'];
+ }
+
+ } else { // appels ulterieurs
+
+ // Recuperer le message a previsualiser
+ $titre = _request('titre');
+ $texte = _request('texte');
+ $auteur = _request('auteur');
+ $email_auteur = _request('email_auteur');
+ $nom_site = _request('nom_site');
+ $url_site = _request('url_site');
+ $ajouter_mot = _request('ajouter_mot');
+ $ajouter_groupe = _request('ajouter_groupe');
+
+ if ($afficher_texte != 'non')
+ $previsu = inclure_previsu($texte, $titre, $email_auteur, $auteur, $url_site, $nom_site, $ajouter_mot);
+
+ $arg = forum_fichier_tmp(join('', $ids));
+
+ // 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
+ $script_hidden = $script = str_replace('&', '&', $script);
+ foreach ($ids as $id => $v)
+ $script_hidden = parametre_url($script_hidden, $id, $v, '&');
+ return array('formulaires/forum', 0,
+ array(
+ 'auteur' => $auteur,
+ 'readonly' => ($type == "abo")? "readonly" : '',
+ 'email_auteur' => $email_auteur,
+ 'modere' => (($type != 'pri') ? '' : ' '),
+ 'nom_site' => $nom_site,
+ 'retour_forum' => $retour_forum,
+ 'afficher_texte' => $afficher_texte,
+ 'previsu' => $previsu,
+ 'table' => $table,
+ 'texte' => $texte,
+ 'titre' => extraire_multi($titre),
+ 'url' => $script, # ce sur quoi on fait le action='...'
+ 'url_post' => $script_hidden, # pour les variables hidden
+ 'url_site' => ($url_site ? $url_site : "http://"),
+ 'arg' => $arg,
+ 'hash' => $hash,
+ 'nobot' => _request($hash),
+ 'ajouter_groupe' => $ajouter_groupe,
+ 'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
+
+ ));
+}
+
+// http://doc.spip.org/@inclure_previsu
+function inclure_previsu($texte,$titre, $email_auteur, $auteur, $url_site, $nom_site, $ajouter_mot)
+{
+ $erreur = $bouton = '';
+ if (strlen($texte) < 10 AND !$ajouter_mot)
+ $erreur = _T('forum_attention_dix_caracteres');
+ else if (strlen($titre) < 3)
+ $erreur = _T('forum_attention_trois_caracteres');
+ else if (defined('_FORUM_LONGUEUR_MAXI')
+ AND _FORUM_LONGUEUR_MAXI > 0
+ AND strlen($texte) > _FORUM_LONGUEUR_MAXI)
+ $erreur = _T('forum_attention_trop_caracteres',
+ array(
+ 'compte' => strlen($texte),
+ 'max' => _FORUM_LONGUEUR_MAXI
+ ));
+ else
+ $bouton = _T('forum_message_definitif');
+
+ // supprimer les <form> de la previsualisation
+ // (sinon on ne peut pas faire <cadre>...</cadre> dans les forums)
+ return preg_replace("@<(/?)f(orm[>[:space:]])@ism",
+ "<\\1no-f\\2",
+ inclure_balise_dynamique(array('formulaires/forum_previsu',
+ 0,
+ array(
+ 'titre' => safehtml(typo($titre)),
+ 'email_auteur' => safehtml($email_auteur),
+ 'auteur' => safehtml(typo($auteur)),
+ 'texte' => safehtml(propre($texte)),[... 502 lines stripped ...]
_______________________________________________
Spip-zone-commit@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone-commit
-Nicolas
--
Nicolas HOIZEY