source: spip-zone/_plugins_/nospam/inc/nospam.php @ 31548

Last change on this file since 31548 was 31548, checked in by marcimat@…, 10 years ago

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.

File size: 3.1 KB
Line 
1<?php
2/**
3 * Plugin No-SPAM
4 * (c) 2008 Cedric Morin Yterium.net
5 * Licence GPL
6 *
7 */
8
9
10/**
11 * Calcule une cle de jeton pour un formulaire
12 *
13 * @param string $form nom du formulaire
14 * @return string cle calculee
15 */
16function creer_jeton($form, $qui=NULL) {
17        $time = date('Y-m-d-H');
18        if (is_null($qui)){
19                if (isset($GLOBALS['visiteur_session']['id_auteur']) AND intval($GLOBALS['visiteur_session']['id_auteur']))
20                        $qui = ":".$GLOBALS['visiteur_session']['id_auteur'].":".$GLOBALS['visiteur_session']['nom'];
21                else {
22                        include_spip('inc/session');
23                        $qui = hash_env();
24                }
25        }
26        include_spip('inc/securiser_action');
27        // le jeton prend en compte l'heure et l'identite de l'internaute
28        return calculer_cle_action("jeton$form$time$qui");
29}
30
31/**
32 * Verifie une cle de jeton pour un formulaire
33 *
34 * @param string $form nom du formulaire
35 * @param string cle recue
36 * @return bool cle correcte ?
37 */
38function verifier_jeton($jeton, $form, $qui=NULL) {
39        $time = time();
40        $time_old = date('Y-m-d-H',$time-3600);
41        $time = date('Y-m-d-H',$time);
42
43        if (is_null($qui)){
44                if (isset($GLOBALS['visiteur_session']['id_auteur']) AND intval($GLOBALS['visiteur_session']['id_auteur']))
45                        $qui = ":".$GLOBALS['visiteur_session']['id_auteur'].":".$GLOBALS['visiteur_session']['nom'];
46                else {
47                        include_spip('inc/session');
48                        $qui = hash_env();
49                }
50        }
51       
52        return (verifier_cle_action("jeton$form$time$qui",$jeton)
53                        or verifier_cle_action("jeton$form$time_old$qui",$jeton));
54}
55
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
116?>
Note: See TracBrowser for help on using the repository browser.