source: spip-zone/_plugins_/bigbrother/inc/bigbrother.php @ 52791

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

if (!defined("_ECRIRE_INC_VERSION")) return; sur tout fichier PHP pour sécurité future principalement

File size: 5.9 KB
Line 
1<?php
2#---------------------------------------------------#
3#  Plugin  : Big Brother                            #
4#  Auteur  : RastaPopoulos                          #
5#  Licence : GPL                                    #
6#------------------------------------------------- -#
7
8if (!defined("_ECRIRE_INC_VERSION")) return;
9
10include_spip('inc/session');
11include_spip('base/abstract_sql');
12
13// Met à jour la session et enregistre dans la base
14function bigbrother_enregistrer_la_visite_du_site(){
15        if(($time < ($GLOBALS['visiteur_session']['date_visite'])) OR !($GLOBALS['visiteur_session']['date_visite'])){
16                session_set('date_visite', time());
17                if($GLOBALS['visiteur_session']['id_auteur']){
18                        sql_insertq(
19                                "spip_visites_auteurs",
20                                array(
21                                        'date' => date('Y-m-d H:i:s', session_get('date_visite')),
22                                        'id_auteur' => $GLOBALS['visiteur_session']['id_auteur']
23                                )
24                        );
25                }
26
27                $journal = charger_fonction('journal','inc');
28
29                $qui = $GLOBALS['visiteur_session']['nom'] ? $GLOBALS['visiteur_session']['nom'] : $GLOBALS['ip'];
30                $qui_ou_ip = $GLOBALS['visiteur_session']['id_auteur'] ? $GLOBALS['visiteur_session']['id_auteur'] : $GLOBALS['ip'];
31
32                $journal(
33                        _T('bigbrother:action_visite',array('qui' => $qui)),
34                        array('qui' => $qui_ou_ip,'faire' => 'visite','date' => date('Y-m-d H:i:s', session_get('date_visite')))
35                );
36        }
37}
38
39// Teste s'il faut enregistrer la visite ou pas
40function bigbrother_tester_la_visite_du_site(){
41        global $visiteur_session;
42        /**
43         * Ne pas prendre en compte les bots
44         */
45        if (_IS_BOT)
46                return;
47
48        // Ne pas tenir compte des tentatives de spam des forums
49        if ($_SERVER['REQUEST_METHOD'] !== 'GET'
50        OR $_GET['page'] == 'forum')
51                return;
52
53        if (isset($_SERVER['HTTP_REFERER'])) $referer = $_SERVER['HTTP_REFERER'];
54        else if (isset($GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"])) $referer = $GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"];
55
56        // On fait seulement si qqn est connecté
57        if(($visiteur_session['id_auteur'] > 0) OR ($ouvert = (lire_config('bigbrother/enregistrer_connexion_anonyme') == 'oui'))){
58                include_spip('inc/filtres');
59                $time = 0;
60                if($ouvert && !intval($visiteur_session['id_auteur'])){
61                        $time_sql = sql_getfetsel('date','spip_journal','id_auteur='.sql_quote($GLOBALS['ip']));
62                        if(is_array(recup_date($time_sql))){
63                                list($annee, $mois, $jour, $heures, $minutes, $secondes) = recup_date($time_sql);
64                                $time = mktime($heures, $minutes, $secondes, $mois, $jour, $annee);
65                        }
66                }
67
68                // Si la "connexion" n'existe pas on la crée et on enregistre
69                if(!$visiteur_session['date_visite']){
70                        /**
71                         * Cas des crons qui ne gardent pas de cookies donc pas de session
72                         */
73                        if($ouvert && !intval($visiteur_session['id_auteur'])){
74                                if($time < (time()-(30*60))){
75                                        bigbrother_enregistrer_la_visite_du_site();
76                                }
77                        }else{
78                                bigbrother_enregistrer_la_visite_du_site();
79                        }
80
81                }
82                // Sinon si la dernière visite est plus vieille que 30min
83                elseif ((time() - $visiteur_session['date_visite']) > (30*60)){
84                        // On met à jour et en enregistre
85                        bigbrother_enregistrer_la_visite_du_site();
86                }
87                // Sinon on ne met que à jour la session
88                elseif((time() - $visiteur_session['date_visite']) > 5){
89                        session_set('date_visite', time());
90                }
91        }
92}
93
94/**
95 * Enregistre l'entrée sur un objet
96 *
97 * Nécessite le placement de la balise #ENREGISTRER_VISITE_AUTEUR
98 * dans la boucle de l'objet
99 *
100 * @param $objet string Le type d'objet : article, rubrique, mot
101 * @param $id_objet int L'identifiant numérique de l'objet
102 * @param $id_auteur int L'identifiant numérique de l'auteur en cours
103 */
104function bigbrother_enregistrer_entree($objet, $id_objet, $id_auteur){
105
106        $date_debut = date('Y-m-d H:i:s', time());
107
108        if($objet == 'article' && intval($id_auteur)){
109                sql_insertq(
110                        "spip_visites_articles_auteurs",
111                        array(
112                                'id_article' => $id_objet,
113                                'id_auteur' => $id_auteur,
114                                'date_debut' => $date_debut
115                        )
116                );
117        }
118
119        $journal = charger_fonction('journal','inc');
120
121        $qui = $GLOBALS['visiteur_session']['nom'] ? $GLOBALS['visiteur_session']['nom'] : $GLOBALS['ip'];
122        $qui_ou_ip = $GLOBALS['visiteur_session']['id_auteur'] ? $GLOBALS['visiteur_session']['id_auteur'] : $GLOBALS['ip'];
123
124        $infos = array();
125        $infos['lang'] = $GLOBALS['contexte']['lang'];
126
127        $journal(
128                _T('bigbrother:action_entree_objet',array('qui' => $qui, 'type' => $objet, 'id' => $id_objet)),
129                array('qui' => $qui_ou_ip,'faire' => 'visite_entree','quoi' => $objet,'date' => $date_debut,'id' => $id_objet,'infos' => $infos)
130        );
131
132        return $date_debut;
133
134}
135
136/**
137 * Enregistre la sortie d'un objet
138 *
139 * Nécessite le placement de la balise #ENREGISTRER_VISITE_AUTEUR
140 * dans la boucle de l'objet
141 *
142 * Cette fonction est appelé en ajax à la sortie de page
143 *
144 * @param $id_objet int L'identifiant numérique de l'objet
145 * @param $objet string Le type d'objet : article, rubrique, mot
146 * @param $id_auteur int L'identifiant numérique de l'auteur en cours
147 * @param $date_debut datetime La date de la visite à terminer
148 */
149function bigbrother_enregistrer_sortie($id_objet,$objet, $id_auteur, $date_debut){
150
151        if(!intval($id_objet) OR (!intval($id_auteur) && (lire_config('bigbrother/enregistrer_connexion_anonyme') != 'oui')))
152                return false;
153
154        $date_fin = date('Y-m-d H:i:s', time());
155
156        if($objet == 'article'){
157                sql_updateq(
158                        "spip_visites_articles_auteurs",
159                        array(
160                                'date_fin' => $date_fin
161                        ),
162                        "id_article=".intval($id_objet)." AND id_auteur=".intval($id_auteur)." AND date_debut=".sql_quote($date_debut)
163                );
164        }
165
166        $journal = charger_fonction('journal','inc');
167
168        $qui = $GLOBALS['visiteur_session']['nom'] ? $GLOBALS['visiteur_session']['nom'] : $GLOBALS['ip'];
169        $qui_ou_ip = $GLOBALS['visiteur_session']['id_auteur'] ? $GLOBALS['visiteur_session']['id_auteur'] : $GLOBALS['ip'];
170
171        $journal(
172                _T('bigbrother:action_sortie_objet',array('qui' => $qui, 'type' => $objet, 'id' => $id_objet)),
173                array('qui' => $qui_ou_ip,'faire' => 'visite_entree','quoi' => $objet,'date_debut' => $date_debut,'date_fin' => $date_fin,'id' => $id_objet)
174        );
175}
176?>
Note: See TracBrowser for help on using the repository browser.