Changeset 66480 in spip-zone


Ignore:
Timestamp:
Oct 3, 2012, 4:53:11 PM (7 years ago)
Author:
ben.spip@…
Message:

Triple oups pické ... indentation ratée

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/nospam/nospam_pipelines.php

    r66478 r66480  
    1515 * @return void
    1616 */
    17 function nospam_lister_formulaires()
    18 {
    19     if (!isset($GLOBALS['formulaires_no_spam']))
    20         $GLOBALS['formulaires_no_spam'] = array();
    21     $formulaires = array_merge($GLOBALS['formulaires_no_spam'], array('forum', 'ecrire_auteur', 'signature'));
    22     return pipeline('nospam_lister_formulaires', $formulaires);
     17function nospam_lister_formulaires(){
     18        if (!isset($GLOBALS['formulaires_no_spam']))
     19                $GLOBALS['formulaires_no_spam'] = array();
     20        $formulaires = array_merge($GLOBALS['formulaires_no_spam'],array('forum','ecrire_auteur','signature'));
     21        return pipeline('nospam_lister_formulaires',$formulaires);
    2322}
    2423
     
    2928 * @return array
    3029 */
    31 function nospam_recuperer_fond($flux)
    32 {
    33     // determiner le nom du formulaire
    34     $fond = strval($flux['args']['fond']);
    35     if (false !== $pos = strpos($fond, 'formulaires/')) {
    36         $form = substr($fond, $pos + 12);
    37         if (in_array($form, nospam_lister_formulaires())) {
    38             // on ajoute le champ 'nobot' si pas present dans le formulaire
    39             $texte = &$flux['data']['texte'];
    40             if ((false === strpos($texte, 'name="nobot"'))
    41                 and (false !== $pos = strpos($texte, '</form>'))
    42             ) {
    43                 $nobot = recuperer_fond("inclure/nobot", array('nobot' => ''));
    44                 $texte = substr_replace($texte, $nobot, $pos, 0);
    45             }
    46         }
    47     }
    48     return $flux;
     30function nospam_recuperer_fond($flux){
     31        // determiner le nom du formulaire
     32        $fond = strval($flux['args']['fond']);
     33        if (false !== $pos = strpos($fond, 'formulaires/')) {
     34                $form = substr($fond, $pos + 12);
     35                if (in_array($form, nospam_lister_formulaires())){
     36                        // on ajoute le champ 'nobot' si pas present dans le formulaire
     37                        $texte = &$flux['data']['texte'];
     38                        if ((false === strpos($texte, 'name="nobot"'))
     39                        and (false !== $pos = strpos($texte, '</form>'))) {
     40                                $nobot = recuperer_fond("inclure/nobot", array('nobot'=>''));
     41                                $texte = substr_replace($texte, $nobot, $pos, 0);
     42                        }
     43                }
     44        }
     45        return $flux;
    4946}
    5047
     
    5552 * @return array
    5653 */
    57 function nospam_formulaire_charger($flux)
    58 {
    59     $form = $flux['args']['form'];
    60     if (in_array($form, nospam_lister_formulaires())
    61         AND $flux['data']
    62             AND is_array($flux['data'])
    63     ) {
    64         include_spip("inc/nospam");
    65         $jeton = creer_jeton($form);
    66         $flux['data']['_hidden'] .= "<input type='hidden' name='_jeton' value='$jeton' />";
    67     }
    68     return $flux;
     54function nospam_formulaire_charger($flux){
     55        $form = $flux['args']['form'];
     56        if (in_array($form, nospam_lister_formulaires())
     57          AND $flux['data']
     58          AND is_array($flux['data'])){
     59                include_spip("inc/nospam");
     60                $jeton = creer_jeton($form);
     61                $flux['data']['_hidden'] .= "<input type='hidden' name='_jeton' value='$jeton' />";
     62        }
     63        return $flux;
    6964}
    7065
     
    7570 * @return array
    7671 */
    77 function nospam_formulaire_verifier($flux)
    78 {
    79     $form = $flux['args']['form'];
    80     if (in_array($form, nospam_lister_formulaires())) {
    81         include_spip("inc/nospam");
    82         $jeton = _request('_jeton');
    83         // le jeton prend en compte l'heure et l'ip de l'internaute
    84         if (_request('nobot') // trop facile !
    85             OR (!verifier_jeton($jeton, $form))
    86         ) {
    87             #spip_log('pas de jeton pour '.var_export($flux,true),'nospam');
    88             $flux['data']['message_erreur'] .= _T('nospam:erreur_jeton');
    89             if ($form == 'forum')
    90                 unset($flux['data']['previsu']);
    91         }
    92 
    93         // pas la peine de filtrer les contenus postés par un admin
    94         if ($GLOBALS['visiteur_session']['statut'] != '0minirezo') {
    95             if ($verifier_formulaire = charger_fonction("verifier_formulaire_$form", "nospam", true)) {
    96                 $flux = $verifier_formulaire($flux);
    97             }
    98         }
    99     }
    100     return $flux;
     72function nospam_formulaire_verifier($flux){
     73        $form = $flux['args']['form'];
     74        if (in_array($form, nospam_lister_formulaires())){
     75                include_spip("inc/nospam");
     76                $jeton = _request('_jeton');
     77                // le jeton prend en compte l'heure et l'ip de l'internaute
     78                if (_request('nobot') // trop facile !
     79                OR (!verifier_jeton($jeton, $form))){
     80                        #spip_log('pas de jeton pour '.var_export($flux,true),'nospam');
     81                        $flux['data']['message_erreur'] .= _T('nospam:erreur_jeton');
     82                        if ($form=='forum')
     83                                unset($flux['data']['previsu']);
     84                }
     85
     86                // pas la peine de filtrer les contenus postés par un admin
     87                if ($GLOBALS['visiteur_session']['statut'] != '0minirezo'){
     88                        if ($verifier_formulaire = charger_fonction("verifier_formulaire_$form","nospam",true)){
     89                                $flux = $verifier_formulaire($flux);
     90                        }
     91                }
     92        }
     93        return $flux;
    10194}
    10295
     
    108101 * @return array
    109102 */
    110 function nospam_pre_edition($flux)
    111 {
    112     if ($flux['args']['table'] == 'spip_forum'
    113         AND $flux['args']['action'] == 'instituer'
    114     ) {
    115 
    116         // Si on veut passer en mode "parano", il suffit de placer dans le mes_options.php un
    117         // $GLOBALS['no_spam_nbliens_texte_min'] = 1;
    118         // Et chaque commentaire de forum qui contient 1 lien sera mis dans le statut proposé
    119         // Couplé avec notification et facteur cela devrait dissuader un peu les spams de SEO
    120 
    121         if (!isset($GLOBALS['no_spam_nbliens_texte_min'])) $GLOBALS['no_spam_nbliens_texte_min'] = 4;
    122         if (!isset($GLOBALS['no_spam_nbliens_texte_min_status'])) $GLOBALS['no_spam_nbliens_texte_min_status'] = "prop";
    123         if (!isset($GLOBALS['no_spam_nbliens_texte_max'])) $GLOBALS['no_spam_nbliens_texte_max'] = 20;
    124         if (!isset($GLOBALS['no_spam_nbliens_texte_max_status'])) $GLOBALS['no_spam_nbliens_texte_max_status'] = "spam";
    125 
    126         if (!isset($GLOBALS['no_spam_nbliens_autrechamp_min'])) $GLOBALS['no_spam_nbliens_autrechamp_min'] = 1;
    127         if (!isset($GLOBALS['no_spam_nbliens_autrechamp_min_status'])) $GLOBALS['no_spam_nbliens_autrechamp_min_status'] = "prop";
    128         if (!isset($GLOBALS['no_spam_nbliens_autrechamp_max'])) $GLOBALS['no_spam_nbliens_autrechamp_max'] = 3;
    129         if (!isset($GLOBALS['no_spam_nbliens_autrechamp_max_status'])) $GLOBALS['no_spam_nbliens_autrechamp_max_status'] = "spam";
    130 
    131         if (!isset($GLOBALS['no_spam_nbliens_urlsite_max'])) $GLOBALS['no_spam_nbliens_urlsite_max'] = 2;
    132         if (!isset($GLOBALS['no_spam_nbliens_urlsite_max_status'])) $GLOBALS['no_spam_nbliens_urlsite_max_status'] = "spam";
    133 
    134         // ne pas publier automatiquement certains messages suspects ...
    135         // sauf si le posteur a de toute facon le pouvoir de moderer et de se publier
    136         include_spip('inc/autoriser');
    137         if ($flux['data']['statut'] == 'publie'
    138             AND (!isset($GLOBALS['visiteur_session']['id_auteur']) OR !autoriser('modererforum'))
    139         ) {
    140 
    141             $email = strlen($flux['data']['email_auteur']) ? " OR email_auteur=" . sql_quote($flux['data']['email_auteur']) : "";
    142             $spammeur_connu = (!isset($GLOBALS['visiteur_session']['statut']) AND (sql_countsel('spip_forum', '(ip=' . sql_quote($GLOBALS['ip']) . "$email) AND statut='spam'") > 0));
    143 
    144             // si c'est un spammeur connu,
    145             // verifier que cette ip n'en est pas a son N-ieme spam en peu de temps
    146             // a partir d'un moment on refuse carrement le spam massif
    147             if ($spammeur_connu) {
    148                 // plus de 10 spams dans les dernieres 2h, faut se calmer ...
    149                 // ou plus de 30 spams dans la dernieres 1h, faut se calmer ...
    150                 if (
    151                     ($nb = sql_countsel('spip_forum', 'statut=\'spam\' AND (ip=' . sql_quote($GLOBALS['ip']) . $email . ') AND maj>DATE_SUB(NOW(),INTERVAL 120 minute)')) > 10
    152                     OR
    153                     ($nb = sql_countsel('spip_forum', 'statut=\'spam\' AND (ip=' . sql_quote($GLOBALS['ip']) . $email . ') AND maj>DATE_SUB(NOW(),INTERVAL 60 minute)')) > 30
    154                 ) {
    155                     $flux['data']['statut'] = ''; // on n'en veut pas !
    156                     spip_log("[Refuse] $nb spam pour (ip=" . $GLOBALS['ip'] . "$email) dans les 2 dernieres heures", 'nospam');
    157                     return $flux;
    158                 }
    159             }
    160 
    161             // si c'est un message bourre de liens, on le modere
    162             // le seuil varie selon le champ et le fait que le spammeur est deja connu ou non
    163             $seuils = array(
    164                 // seuils par defaut
    165                 0 => array(
    166                     0 => array($GLOBALS['no_spam_nbliens_autrechamp_min'] => $GLOBALS['no_spam_nbliens_autrechamp_min_status'], $GLOBALS['no_spam_nbliens_autrechamp_max'] => $GLOBALS['no_spam_nbliens_autrechamp_max_status']), // seuils par defaut
    167                         'url_site' => array($GLOBALS['no_spam_nbliens_urlsite_max'] => $GLOBALS['no_spam_nbliens_urlsite_max_status']), // 2 liens dans le champ url, c'est vraiment louche
    168                         'texte' => array($GLOBALS['no_spam_nbliens_texte_min'] => $GLOBALS['no_spam_nbliens_texte_min_status'], $GLOBALS['no_spam_nbliens_texte_max'] => $GLOBALS['no_spam_nbliens_texte_max_status']) // pour le champ texte
    169                     ),
    170                     // seuils severises pour les spammeurs connus
    171                     'spammeur' => array(
    172                         0 => array(1 => 'spam'),
    173                         'url_site' => array(2 => 'spam'), // 2 liens dans le champ url, c'est vraiment louche
    174                         'texte' => array(1 => 'prop', 5 => 'spam')
    175                     )
    176                 );
    177 
    178 
    179 
    180             $seuils = $spammeur_connu ? $seuils['spammeur'] : $seuils[0];
    181             include_spip("inc/nospam"); // pour analyser_spams()
    182             foreach ($flux['data'] as $champ => $valeur) {
    183                 $infos = analyser_spams($valeur);
    184                 if ($infos['contenu_cache']) {
    185                     // s'il y a du contenu caché avec des styles => spam direct
    186                     $flux['data']['statut'] = 'spam';
    187                 }
    188                 elseif ($infos['nombre_liens'] > 0) {
    189                     // si un lien a un titre de moins de 3 caracteres, c'est louche...
    190                     if ($infos['caracteres_texte_lien_min'] < 3) {
    191                         $flux['data']['statut'] = 'prop'; // en dur en attendant une idee plus generique
    192                     }
    193 
    194                     if (isset($seuils[$champ]))
    195                         $seuil = $seuils[$champ];
    196                     else
    197                         $seuil = $seuils[0];
    198 
    199                     foreach ($seuil as $s => $stat)
    200                         if ($infos['nombre_liens'] >= $s) {
    201                             $flux['data']['statut'] = $stat;
    202                             spip_log("\t" . $flux['data']['auteur'] . "\t" . $GLOBALS['ip'] . "\t" . "requalifié en " . $stat . " car nombre_liens >= " . $s, 'nospam');
    203                         }
    204 
    205                     if ($flux['data']['statut'] != 'spam') {
    206                         $champs = array_unique(array('texte', $champ));
    207                         if ($h = rechercher_presence_liens_spammes($infos['liens'], 1, 'spip_forum', $champs)) {
    208                             $flux['data']['statut'] = 'spam';
    209                             spip_log("\t" . $flux['data']['auteur'] . "\t" . $GLOBALS['ip'] . "\t" . "requalifié en spam car lien $h deja dans un spam", 'nospam');
    210                         }
    211                     }
    212                 }
    213             }
    214 
    215 
    216             // verifier qu'un message identique n'a pas ete publie il y a peu
    217             if ($flux['data']['statut'] != 'spam') {
    218                 if (sql_countsel('spip_forum', 'texte=' . sql_quote($flux['data']['texte']) . " AND statut IN ('publie','off','spam')") > 0)
    219                     $flux['data']['statut'] = 'spam';
    220             }
    221             // verifier que cette ip n'en est pas a son N-ieme post en peu de temps
    222             // plus de 5 messages en 5 minutes c'est suspect ...
    223             if ($flux['data']['statut'] != 'spam') {
    224                 if (($nb = sql_countsel('spip_forum', 'ip=' . sql_quote($GLOBALS['ip']) . ' AND maj>DATE_SUB(NOW(),INTERVAL 5 minute)')) > 5)
    225                     $flux['data']['statut'] = 'spam';
    226                 #spip_log("$nb post pour l'ip ".$GLOBALS['ip']." dans les 5 dernieres minutes",'nospam');
    227             }
    228         }
    229     }
    230     return $flux;
     103function nospam_pre_edition($flux){
     104        if ($flux['args']['table']=='spip_forum'
     105          AND $flux['args']['action']=='instituer'){
     106         
     107          // ne pas publier automatiquement certains messages suspects ...
     108                // sauf si le posteur a de toute facon le pouvoir de moderer et de se publier
     109                include_spip('inc/autoriser');
     110          if ($flux['data']['statut'] == 'publie'
     111          AND (!isset($GLOBALS['visiteur_session']['id_auteur']) OR !autoriser('modererforum'))){
     112
     113                        $email = strlen($flux['data']['email_auteur']) ? " OR email_auteur=".sql_quote($flux['data']['email_auteur']):"";
     114                        $spammeur_connu = (!isset($GLOBALS['visiteur_session']['statut']) AND (sql_countsel('spip_forum','(ip='.sql_quote($GLOBALS['ip'])."$email) AND statut='spam'")>0));
     115
     116                        // si c'est un spammeur connu,
     117                        // verifier que cette ip n'en est pas a son N-ieme spam en peu de temps
     118                        // a partir d'un moment on refuse carrement le spam massif
     119                        if ($spammeur_connu){
     120                                // plus de 10 spams dans les dernieres 2h, faut se calmer ...
     121                                // ou plus de 30 spams dans la dernieres 1h, faut se calmer ...
     122                                if (
     123                                        ($nb=sql_countsel('spip_forum','statut=\'spam\' AND (ip='.sql_quote($GLOBALS['ip']).$email.') AND maj>DATE_SUB(NOW(),INTERVAL 120 minute)'))>10
     124                                        OR
     125                                        ($nb=sql_countsel('spip_forum','statut=\'spam\' AND (ip='.sql_quote($GLOBALS['ip']).$email.') AND maj>DATE_SUB(NOW(),INTERVAL 60 minute)'))>30
     126                                        ){
     127                                        $flux['data']['statut']=''; // on n'en veut pas !
     128                                        spip_log("[Refuse] $nb spam pour (ip=".$GLOBALS['ip']."$email) dans les 2 dernieres heures",'nospam');
     129                                        return $flux;
     130                                }
     131                        }
     132
     133                        // si c'est un message bourre de liens, on le modere
     134                        // le seuil varie selon le champ et le fait que le spammeur est deja connu ou non
     135                        $seuils = array(
     136                                // seuils par defaut
     137                                0=>array(
     138                                        0=>array(1=>'prop',3=>'spam'), // seuils par defaut
     139                                        'url_site' => array(2=>'spam'), // 2 liens dans le champ url, c'est vraiment louche
     140                                        'texte'=>array(4=>'prop',20=>'spam') // pour le champ texte
     141                                ),
     142                                // seuils severises pour les spammeurs connus
     143                                'spammeur'=>array(
     144                                        0=>array(1=>'spam'),
     145                                        'url_site' => array(2=>'spam'), // 2 liens dans le champ url, c'est vraiment louche
     146                                        'texte'=>array(1=>'prop',5=>'spam')
     147                                )
     148                        );
     149
     150                        $seuils = $spammeur_connu?$seuils['spammeur']:$seuils[0];
     151                        include_spip("inc/nospam"); // pour analyser_spams()
     152                        foreach($flux['data'] as $champ=>$valeur) {
     153                                $infos = analyser_spams($valeur);
     154                                if ($infos['contenu_cache']) {
     155                                        // s'il y a du contenu caché avec des styles => spam direct
     156                                        $flux['data']['statut'] = 'spam';
     157                                }
     158                                elseif ($infos['nombre_liens'] > 0) {
     159                                        // si un lien a un titre de moins de 3 caracteres, c'est louche...
     160                                        if ($infos['caracteres_texte_lien_min'] < 3) {
     161                                                $flux['data']['statut'] = 'prop'; // en dur en attendant une idee plus generique
     162                                        }
     163                                       
     164                                        if (isset($seuils[$champ]))
     165                                                $seuil = $seuils[$champ];
     166                                        else
     167                                                $seuil = $seuils[0];
     168
     169                                        foreach($seuil as $s=>$stat)
     170                                                if ($infos['nombre_liens'] >= $s){
     171                                                        $flux['data']['statut'] = $stat;
     172                                                        spip_log("\t".$flux['data']['auteur']."\t".$GLOBALS['ip']."\t"."requalifié en ".$stat." car nombre_liens >= ". $s,'nospam');
     173                                                }
     174
     175                                        if ($flux['data']['statut'] != 'spam'){
     176                                                $champs = array_unique(array('texte',$champ));
     177                                                if ($h = rechercher_presence_liens_spammes($infos['liens'],1,'spip_forum',$champs)){
     178                                                        $flux['data']['statut'] = 'spam';
     179                                                        spip_log("\t".$flux['data']['auteur']."\t".$GLOBALS['ip']."\t"."requalifié en spam car lien $h deja dans un spam",'nospam');
     180                                                }
     181                                        }
     182                                }
     183                        }
     184
     185
     186                        // verifier qu'un message identique n'a pas ete publie il y a peu
     187                        if ($flux['data']['statut'] != 'spam'){
     188                                if (sql_countsel('spip_forum','texte='.sql_quote($flux['data']['texte'])." AND statut IN ('publie','off','spam')")>0)
     189                                        $flux['data']['statut']='spam';
     190                        }
     191                        // verifier que cette ip n'en est pas a son N-ieme post en peu de temps
     192                        // plus de 5 messages en 5 minutes c'est suspect ...
     193                        if ($flux['data']['statut'] != 'spam'){
     194                                if (($nb=sql_countsel('spip_forum','ip='.sql_quote($GLOBALS['ip']).' AND maj>DATE_SUB(NOW(),INTERVAL 5 minute)'))>5)
     195                                        $flux['data']['statut']='spam';
     196                                #spip_log("$nb post pour l'ip ".$GLOBALS['ip']." dans les 5 dernieres minutes",'nospam');
     197                        }
     198          }
     199        }
     200        return $flux;
    231201}
    232202
Note: See TracChangeset for help on using the changeset viewer.