source: spip-zone/_plugins_/shortcut_url/trunk/shortcut_url_fonctions.php @ 96856

Last change on this file since 96856 was 96856, checked in by kent1@…, 5 years ago

Pas de fermeture PHP, indentation

File size: 3.5 KB
Line 
1<?php
2
3/**
4 * Fonctions pour shortcut_url
5 *
6 * @plugin     shortcut_url
7 * @copyright  2015
8 * @author     cyp
9 * @licence    GNU/GPL
10 * @package    SPIP\shortcut_url\fonctions
11 */
12
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15/**
16 * Générer la chaine de caractères
17 *
18 * @param string $length taille de la chaîne de caractère
19 * @return string
20 */
21function generer_chaine($length) {
22        return substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
23}
24
25/**
26 * Créer les titres pour les liens raccourcis
27 * On doit retrouver une valeur numérique dans le titre pour eviter les gros mots
28 *
29 * @param string $length taille de la chaîne de caractère
30 * @return string
31 */
32function generer_chaine_aleatoire($length = 5){ 
33
34        $pass = generer_chaine($length);
35        do {
36                $pass = generer_chaine($length);
37        } while (!preg_match('/(?=.*\d)/', $pass));
38        return $pass;
39}
40
41
42/**
43 * Stocker les visites des clicks en séparant les humains des bots
44 *
45 * @param int $id_shortcut_url id de l'URL raccourcis
46 * @return boolean
47 */
48function shortcut_compteur($id_shortcut_url){
49       
50        $shorturl = sql_fetsel('url,click', 'spip_shortcut_urls', 'id_shortcut_url='.intval($id_shortcut_url));
51
52        $date_modif = date('Y-m-d H:m:i');
53        $referrer = $_SERVER['REMOTE_ADDR'];
54        $user_agent = get_user_agent();
55        $ip_address = $_SERVER['SERVER_ADDR'];
56        $country_code = get_geoip($referrer);
57        $click = $shorturl['click']+1;
58
59        if (!defined('_IS_BOT'))
60                define('_IS_BOT',
61                        isset($_SERVER['HTTP_USER_AGENT'])
62                        AND preg_match(
63                        // mots generiques
64                        ',bot|slurp|crawler|spider|webvac|yandex|'
65                        // MSIE 6.0 est un botnet 99,9% du temps, on traite donc ce USER_AGENT comme un bot
66                        . 'MSIE 6\.0|'
67                        // UA plus cibles
68                        . '80legs|accoona|AltaVista|ASPSeek|Baidu|Charlotte|EC2LinkFinder|eStyle|Google|Genieo|INA dlweb|InfegyAtlas|Java VM|LiteFinder|Lycos|Rambler|Scooter|ScrubbyBloglines|Yahoo|Yeti'
69                        . ',i',(string) $_SERVER['HTTP_USER_AGENT'])
70                );
71       
72        if(_IS_BOT) {
73                $humain = 'bot';
74                $insert_bot = sql_insertq('spip_shortcut_urls_bots', array('id_shortcut_url' => $id_shortcut_url,'date_modif' => $date_modif,'referrer' => $referrer,'user_agent' => $user_agent,'ip_address' => $ip_address));
75                $insert_click = sql_updateq('spip_shortcut_urls', array('click' => $click), 'id_shortcut_url=' . intval($id_shortcut_url));
76        } else {
77                $humain = 'oui';
78                $insert = sql_insertq('spip_shortcut_urls_logs', array('id_shortcut_url' => $id_shortcut_url,'date_modif' => $date_modif,'shorturl' => $shorturl['url'],'referrer' => $referrer,'user_agent' => $user_agent,'ip_address' => $ip_address,'country_code' => $country_code,'humain' => $humain));
79                $insert_click = sql_updateq('spip_shortcut_urls', array('click' => $click), 'id_shortcut_url=' . intval($id_shortcut_url));
80        }
81
82        return false;
83}
84
85/**
86 * Récupérer le user agent de l'utilisateur
87 *
88 * @return string
89 */
90function get_user_agent() {
91                if ( !isset( $_SERVER['HTTP_USER_AGENT'] ) ) {
92                                return '-';
93                }
94
95                $ua = strip_tags( html_entity_decode( $_SERVER['HTTP_USER_AGENT'] ));
96                $ua = preg_replace('![^0-9a-zA-Z\':., /{}\(\)\[\]\+@&\!\?;_\-=~\*\#]!', '', $ua );
97
98                return $ua;
99}
100
101/**
102 * Récupérer le le code pays de l'utilisateur
103 *
104 * @param int $ip ip de l'utilisateur
105 * @return string
106 */
107function get_geoip($ip=null){
108        static $gi = null;
109        if (is_null($ip)){
110                include_spip("geoip/geoip");
111                geoip_close($gi);
112                return;
113        }
114        if (is_null($gi)){
115                include_spip("geoip/geoip");
116                $gi = geoip_open(find_in_path("geoip/GeoIP.dat"),GEOIP_STANDARD);
117        }
118
119        return geoip_country_code_by_addr($gi,$ip);
120}
Note: See TracBrowser for help on using the repository browser.