Mise en route du suivi.
[aidenligne_francais_universite.git] / plugins / couteau_suisse / outils / spam_options.php
1 <?php
2
3 // anti-spam un peu brutal :
4 // 1. une liste de mots interdits est consultee
5 // 2. si le mot existe dans un des textes d'un formulaire, on avertit !
6
7 // cette fonction est appelee automatiquement a chaque affichage de la page privee du Couteau Suisse
8 function spam_installe() {
9 // tableau des mots interdits
10 /*
11 ATTENTION :
12 ce sont des portions de texte, sans delimitateur particulier :
13 si vous mettez 'asses' alors 'tasses' sera un mot interdit aussi !
14 les parentheses servent de delimitateurs de mots : '(asses)'
15 */
16 $spam_mots = array_merge(array(
17 // des liens en dur ou simili...
18 '<a href=', '</a>',
19 '[url=', '[/url]',
20 '[link=', '[/link]',
21 // certains mots...
22 // 'ejakulation', 'fucking', '(asses)',
23
24 ), defined('_spam_MOTS')?spam_liste_mots(_spam_MOTS):array());
25 array_walk($spam_mots, 'spam_walk');
26 ecrire_meta('cs_spam_mots', ',(' . join('|', $spam_mots) . '),i');
27 ecrire_metas();
28 }
29
30 // protege les expressions en vue d'une regexpr
31 // repere les mots entiers entre parentheses
32 function spam_walk(&$item) {
33 if(preg_match(',^\((.+)\)$,', $item, $reg))
34 $item = '\b'.preg_quote($reg[1], ',').'\b';
35 else $item = preg_quote($item, ',');
36 }
37
38 // retourne un tableau de mots ou d'expressions a partir d'un texte
39 function spam_liste_mots($texte) {
40 $texte = filtrer_entites(trim($texte));
41 $split = explode('"', $texte);
42 $c = count($split);
43 $split2 = array();
44 for($i=0; $i<$c; $i++) if (($s = trim($split[$i])) != ""){
45 if (($i & 1) && ($i != $c-1)) {
46 // on touche pas au texte entre deux ""
47 $split2[] = $s;
48 } else {
49 // on rassemble tous les separateurs : ,;.|\s\t\n
50 $temp = preg_replace("/[,;\.\|\s\t\n\r]+/", "\t", $s);
51 $temp = str_replace("+"," ", $temp);
52 $split2 = array_merge($split2, explode("\t", $temp));
53 }
54 }
55 return array_unique($split2);
56 }
57
58 // traitement anti-spam uniquement si $_POST est rempli et si l'espace n'est pas prive
59 if ( count($_POST)
60 // espace prive en clair dans l'url
61 && (strpos($_SERVER['PHP_SELF'],'/ecrire') === false)
62 // cas des actions
63 && !isset($_POST['action'])
64 ) {
65
66 if (!isset($GLOBALS['meta']['cs_spam_mots'])) spam_installe();
67
68 // champs de formulaires a visiter
69 // un message en forum : texte, titre, auteur
70 // un message a un auteur : texte_message_auteur_XX, sujet_message_auteur_XX, email_message_auteur_XX
71 $spam_POST_reg = ',^(texte|titre|sujet|auteur|email),i';
72
73 // on compile $spam_POST en fonction des variables $_POST trouvees
74 $spam_POST_compile = array();
75 foreach (array_keys($_POST) as $key)
76 if (preg_match($spam_POST_reg, $key)) $spam_POST_compile[] = $key;
77
78 // boucle de censure
79 foreach ($spam_POST_compile as $var)
80 if (preg_match($GLOBALS['meta']['cs_spam_mots'], $_POST[$var]))
81 $_GET['action'] = "cs_spam";
82
83 // nettoyage
84 unset($spam_POST_reg, $spam_POST_compile);
85
86 function action_cs_spam(){
87 include_spip('inc/minipres');
88 $page = minipres(
89 _T('couteau:lutte_spam'),
90 _T('couteau:explique_spam')
91 );
92 // a partir de spip 1.9.2 ces fonctions ne font plus l'echo directement
93 if (defined('_SPIP19200')) echo $page;
94 return true;
95 }
96 }
97 ?>