source: spip-zone/_galaxie_/programmer.spip.org/plugin_documentation/ticket_forum_ouverts.php @ 52868

Last change on this file since 52868 was 52868, checked in by kent1@…, 8 years ago
File size: 3.4 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5/*
6 * Codes pour avoir des forums ouverts
7 * sur les tickets...
8 * Mais les spammeurs sont trop corriaces !
9 * Ce code n'est plus actif
10 *
11 */
12
13
14function doc_nospam_tester_spam($texte, $params) {
15        $infos = analyser_spams($texte);
16        if ($infos['nombre_liens'] > 0) {
17                foreach ($params as $desc) {
18                        list($nom, $op, $val) = $desc;
19                        eval("\$test = (\$infos['$nom'] $op $val);");
20                        if ($test) {
21                                return true;
22                        }
23                }
24        }
25        return false;
26}
27
28
29// verifier qu'un ticket identique n'a pas ete publie il y a peu
30function test_doublon_ticket($champs, $table='spip_tickets'){
31        $champs[] = "maj>DATE_SUB(NOW(),INTERVAL 1 hour)";
32        return sql_countsel($table, $champs);
33}
34
35// verifier que cette ip n'en est pas a son N-ieme post en peu de temps
36// plus de 5 messages en 5 minutes c'est suspect ...
37function test_ticket_ip_furieuse(){
38        $champs = array();
39        $champs[] = 'ip=' . sql_quote($GLOBALS['ip']);
40        $champs[] =  "maj>DATE_SUB(NOW(),INTERVAL 10 minute)";
41        $nb1 = sql_countsel('spip_tickets',$champs);
42        $nb2 = sql_countsel('spip_tickets_forum',$champs);
43        if (($nb1 + $nb2) > 5) {
44                return true;
45        }       
46        return false;
47}
48
49
50
51                       
52// ne pas accepter ce qu'on peut appeler du spam
53function documentation_formulaire_verifier($flux){
54        if ($flux['args']['form'] == 'editer_ticket'
55        OR  $flux['args']['form'] == 'forum_ticket') {
56                if (include_spip('inc/nospam')) {
57                        $is_commentaire = ($flux['args']['form'] == 'forum_ticket');
58                       
59                        $testsA = $testsB = $testsC = $testsM = array(
60                                array('caracteres_texte_lien_min', '<', 4),
61                                array('nombre_liens', '>', 3),
62                                array('caracteres_utiles', '<', 10),
63                        );
64                        $testsB[1][2] = 0; // nombre_liens > 0
65                        $testsC[1][2] = 1; // nombre_liens > 1
66                        $testsC[2][2] = 3; // caracteres_utiles < 3
67                        $testsM[2][2] = 5; // caracteres_utiles < 5
68
69                        if (!$is_commentaire) { // ticket
70                                if (doc_nospam_tester_spam(_request('texte'),   $testsA)
71                                or  doc_nospam_tester_spam(_request('titre'),   $testsB)
72                                or  doc_nospam_tester_spam(_request('exemple'), $testsC)) {
73                                        $flux['data']['message_erreur'] .= _T('nospam:erreur_spam');
74                                }
75                        } else { // commentaire
76                                if (doc_nospam_tester_spam(_request('texte'),   $testsM)) {
77                                        $flux['data']['message_erreur'] .= _T('nospam:erreur_spam');
78                                }
79                        }
80                        // doublons
81                        $table = $is_commentaire ? 'spip_tickets_forum' : 'spip_tickets';
82                        if (test_doublon_ticket(array('texte='. sql_quote(_request('texte'))), $table)) {
83                                $flux['data']['message_erreur'] .= _T('nospam:erreur_spam_doublon');
84                        }
85                        // ip vilaine
86                        if (test_ticket_ip_furieuse()) {
87                                $flux['data']['message_erreur'] .= _T('nospam:erreur_spam_ip');
88                        }                       
89                }
90        }
91        return $flux;
92}
93
94
95// autorisations correspondantes :
96function documentation_autoriser(){}
97
98// Autorisation de commenter des tickets
99function autoriser_ticket_commenter($faire, $type, $id, $qui, $opt){
100        // toujours
101        return true;
102}
103
104// Autorisation de creer ou modifier des tickets
105function autoriser_ticket_creer($faire, $type, $id, $qui, $opt){
106        return autoriser("ecrire", "ticket", $id, $qui, $opt);
107}
108
109// Autorisation de creer ou modifier des tickets
110function autoriser_ticket_ecrire($faire, $type, $id, $qui, $opt){
111        // creer : toujours
112        if (!intval($id)) return true;
113        // modifier : admin ou le redacteur de ticket.
114        if (!$qui['id_auteur']) return false;
115        if ($qui['statut'] == '0minirezo' AND !$qui['restreint']) return true;
116        return sql_allfetsel("id_auteur", "spip_tickets", "id_auteur=" . $qui['id_auteur']);
117}
118
119
120?>
Note: See TracBrowser for help on using the repository browser.