Changeset 65567 in spip-zone for _plugins_/nospam/inc/nospam.php


Ignore:
Timestamp:
Sep 5, 2012, 1:22:57 PM (9 years ago)
Author:
cedric@…
Message:

Refactoring et double detection des liens deja dans des spams : si on refuse pas le message a la saisie (seuil <3), on le mets quand meme en spam des qu'un lien est deja dans un spam

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/nospam/inc/nospam.php

    r65561 r65567  
    173173}
    174174
     175/**
     176 * Compare les domaines des liens fournis avec la presence dans la base
     177 *
     178 * @param array $liens
     179 *   liste des liens html
     180 * @param int $seuil
     181 *   seuil de detection de presence : nombre d'enregistrement qui ont deja un lien avec le meme domaine
     182 * @param string $table
     183 *   table sql
     184 * @param array $champs
     185 *   champs a prendre en compte dans la detection
     186 * @param null|string $condstatut
     187 *   condition sur le statut='spam' pour ne regarder que les enregistrement en statut spam
     188 * @return bool
     189 */
     190function rechercher_presence_liens_spammes($liens,$seuil,$table,$champs,$condstatut=null){
     191        include_spip("inc/filtres");
     192
     193        if (is_null($condstatut))
     194                $condstatut = "statut=".sql_quote('spam');
     195        if ($condstatut)
     196                $condstatut = "$condstatut AND ";
     197
     198        $hosts = array();
     199        foreach ($liens as $lien){
     200                $url = extraire_attribut($lien,"href");
     201                if ($parse = parse_url($url)
     202                  AND $parse['host'])
     203                        $hosts[] = $parse['host'];
     204        }
     205
     206        $hosts = array_unique($hosts);
     207        $hosts = array_filter($hosts);
     208
     209        // pour chaque host figurant dans un lien, regarder si on a pas deja eu des spams avec ce meme host
     210        // auquel cas on refuse poliment le message
     211        foreach($hosts as $h){
     212                $like = " LIKE ".sql_quote("%$h%");
     213                $where = $condstatut . "(".implode("$like OR ",$champs)."$like)";
     214                if (sql_countsel($table,$where)>=$seuil){
     215                        return $h;
     216                }
     217        }
     218        return false;
     219}
    175220?>
Note: See TracChangeset for help on using the changeset viewer.