Changeset 31548 in spip-zone


Ignore:
Timestamp:
Sep 13, 2009, 5:31:28 PM (10 years ago)
Author:
marcimat@…
Message:

Nouvelle fonction dans l'api : analyser_spams($texte) qui retourne un tableau de description du texte, enfin surtout de ses liens... Pourra être complété au besoin, ou transformé en classe PHP ?

Nouveau principe : un lien dont le texte fait moins de 3 caractères est passé en proposé par défaut aussi.

Location:
_plugins_/nospam
Files:
3 edited

Legend:

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

    r31180 r31548  
    5454}
    5555
     56
     57/**
     58 * Compte le nombre de caracteres d'une chaine,
     59 * mais en supprimant tous les liens
     60 * (qu'ils soient ou non ecrits en raccourcis SPIP)
     61 * ainsi que tous les espaces en trop
     62 *
     63 * @param string $texte texte d'entree
     64 * @return int compte du texte nettoye
     65 */
     66function compter_caracteres_utiles($texte, $propre=true) {
     67        if ($propre) $texte = propre($texte);
     68        // regarder si il y a du contenu en dehors des liens !
     69        $texte = PtoBR($texte);
     70        $texte = preg_replace(',<a.*</a>,Uims','',$texte);
     71        $texte = trim(preg_replace(',[\W]+,uims',' ',$texte));
     72        return strlen($texte);
     73}
     74
     75
     76/**
     77 * Retourne un tableau d'analyse du texte transmis
     78 * Cette analyse concerne principalement des statistiques sur les liens
     79 *
     80 * @param string $texte texte d'entree
     81 * @return array rapport d'analyse
     82 */
     83function analyser_spams($texte) {
     84        $infos = array(
     85                'caracteres_utiles' => 0, // nombre de caracteres sans les liens
     86                'nombre_liens' => 0, // nombre de liens
     87                'caracteres_texte_lien_min' => 0, // nombre de caracteres du plus petit titre de lien
     88        );
     89
     90        if (!$texte) return $infos;
     91       
     92        $texte = propre($texte);
     93
     94        // caracteres_utiles
     95        $infos['caracteres_utiles'] = compter_caracteres_utiles($texte, false);
     96
     97        // nombre de liens
     98        $liens = extraire_balises($texte,'a');
     99        $infos['nombre_liens'] = count($liens);
     100
     101        // taille du titre de lien minimum
     102        if (count($liens)) {
     103                // supprimer_tags() s'applique a tout le tableau,
     104                // mais attention a verifier dans le temps que ca continue a fonctionner
     105                # $titres_liens = array_map('supprimer_tags', $liens);
     106                $titres_liens = supprimer_tags($liens);
     107                $titres_liens = array_map('strlen', $titres_liens);
     108                $infos['caracteres_texte_lien_min'] = min($titres_liens);
     109                spip_log($infos,'liens');
     110        }
     111        return $infos;
     112}
     113
     114
     115
    56116?>
  • _plugins_/nospam/nospam_pipelines.php

    r31394 r31548  
    7474                if (!isset($flux['data']['texte'])
    7575                        AND $GLOBALS['meta']['forums_texte'] == 'oui'){
     76                        include_spip("inc/nospam");
    7677                        // regarder si il y a du contenu en dehors des liens !
    77                         $texte = PtoBR(propre(_request('texte')));
    78                         $texte = preg_replace(',<a.*</a>,Uims','',$texte);
    79                         $texte = trim(preg_replace(',[\W]+,uims',' ',$texte));
    80                         if (strlen($texte) < 10){
     78                        $caracteres = compter_caracteres_utiles(_request('texte'));
     79                        if ($caracteres < 10){
    8180                                $flux['data']['texte'] = _T('forum_attention_dix_caracteres');
    8281                                unset($flux['data']['previsu']);
     
    102101                include_spip('inc/autoriser');
    103102          if ($flux['data']['statut'] == 'publie'
    104                   AND (!isset($GLOBALS['visiteur_session']['id_auteur']) OR !autoriser('modererforum'))){
     103          AND (!isset($GLOBALS['visiteur_session']['id_auteur']) OR !autoriser('modererforum'))){
    105104
    106105                        $email = strlen($flux['data']['email_auteur']) ? " OR email_auteur=".sql_quote($flux['data']['email_auteur']):"";
     
    125124
    126125                        $seuils = $spammeur_connu?$seuils['spammeur']:$seuils[0];
    127                         foreach($flux['data'] as $champ=>$valeur){
    128                                 $valeur = propre($valeur); // on passe propre a chaque fois, ce qui recupere aussi les adresse de site non linkees
    129                                 if (($liens = count(extraire_balises($valeur,'a')))>0){
     126                        include_spip("inc/nospam"); // pour analyser_spams()
     127                        foreach($flux['data'] as $champ=>$valeur) {
     128                                $infos = analyser_spams($valeur);
     129                                if ($infos['nombre_liens'] > 0) {
     130                                        // si un lien a un titre de moins de 3 caracteres, c'est louche...
     131                                        if ($infos['caracteres_texte_lien_min'] < 3) {
     132                                                $flux['data']['statut'] = 'prop'; // en dur en attendant une idee plus generique
     133                                        }
     134                                       
    130135                                        if (isset($seuils[$champ]))
    131136                                                $seuil = $seuils[$champ];
     
    134139
    135140                                        foreach($seuil as $s=>$stat)
    136                                                 if ($liens>=$s)
     141                                                if ($infos['nombre_liens'] >= $s)
    137142                                                        $flux['data']['statut'] = $stat;
    138143                                }
  • _plugins_/nospam/plugin.xml

    r31394 r31548  
    44<icon>img_pack/nospam.png</icon>
    55<licence>(c) 2008 GPL</licence>
    6 <version>0.5</version>
     6<version>0.6</version>
    77<etat>stable</etat>
    88<description>Halte au spam ! Filtrez les spams dans les messages, sans nuisance pour les utilisateurs honn&ecirc;tes.</description>
Note: See TracChangeset for help on using the changeset viewer.