source: spip-zone/_plugins_/geoip_country_code/geoipcc_options.php

Last change on this file was 31760, checked in by paladin@…, 11 years ago

les indispensables pour faire tourner le plug

  • Property svn:eol-style set to native
  • Property svn:keywords set to LastChangedRevision LastChangedDate LastChangedBy
File size: 5.5 KB
Line 
1<?php
2
3// geoipcc_options.php
4
5
6/**
7 * Copyright (c) 2009 Christian Paulus - http://www.quesaco.org
8 * Dual licensed under the MIT and GPL licenses.
9 * */
10 
11// $LastChangedRevision: 31760 $
12// $LastChangedBy: b_b $
13// $LastChangedDate: 2009-09-23 09:39:30 +0000 (Wed, 23 Sep 2009) $
14
15// pour SPIP 1.9.1
16if(!defined('_DIR_PLUGIN_GEOIPCC')) {
17        $p = explode(basename(_DIR_PLUGINS)."/",str_replace('\\','/',realpath(dirname(__FILE__))));
18        define('_DIR_PLUGIN_GEOIPCC',(_DIR_PLUGINS.end($p)).'/');
19}
20
21define('_DIR_GEOIPCC_IMAGES', _DIR_PLUGIN_GEOIPCC . 'images/');
22
23define('_GEOIPCC_FICHIER_GZ_DISTANT', 'http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz');
24define('_GEOIPCC_DATA_MAX_LEN', (2*1024*1024)); 
25
26define('_GEOIPCC_FICHIER_DATA', 'GeoIP.dat');
27define('_GEOIPCC_CHEMIN_DATA', _DIR_TMP);
28
29define('_GEOIPCC_FICHIER_GZ_LOCAL', _DIR_TMP._GEOIPCC_FICHIER_DATA.'.gz');
30
31define('_GEOIPCC_FICHIER_DATA_LOCAL', _DIR_TMP._GEOIPCC_FICHIER_DATA);
32
33define('_GEOIPCC_PAYS_DEFAULT', 'FR');
34
35// verifier le n jour du mois si le data est correct
36define('_GEOIPCC_UPDATE_JOUR_DU_MOIS', 1);
37// et a quelle heure de ce jour
38define('_GEOIPCC_UPDATE_HEURE_DU_JOUR', 6);
39
40/**
41 * Journal (prive_spip.log si espace prive, sinon spip.log)
42 * @return boolean
43 * @param string $msg
44 */
45function geoipcc_log ($msg) {
46        static $prev;
47        static $count = 0;
48        static $tag = '[GEOIPCC] ';
49       
50        $msg = trim($msg);
51        if($prev != $msg) {
52                if($count) {
53                        spip_log($tag . '--- last message repeated '.$count.' times ---');
54                        $count = 0;
55                }
56                $prev = $msg;
57                spip_log($tag . $msg);
58        }
59        else {
60                $count++;
61        }
62        return(true);
63}
64
65/**
66 * Si 1 du mois, 6 heures du matin
67 * mettre a jour le fichier data
68 * @return bool
69 * @param bool $forcer[optional]
70 */
71function geoipcc_charger_data ($forcer = false)
72{
73        if(
74                // force' ? (installation)
75                !($faire = $forcer) 
76                // ou est-ce le jour de l'update ?
77                && (intval(date('j')) == _GEOIPCC_UPDATE_JOUR_DU_MOIS) 
78                && (intval(date('G')) == _GEOIPCC_UPDATE_HEURE_DU_JOUR))
79        {
80                if(file_exists(_GEOIPCC_FICHIER_DATA_LOCAL)) 
81                {
82                        $date_fichier = date("YmdG", filectime(_GEOIPCC_FICHIER_DATA_LOCAL));
83                        $date_now = date("YmdG");
84                       
85                        if($faire = ($date_fichier < $date_now)) 
86                        {
87                                geoipcc_log('must upgrade data file...');
88                        }
89                }
90        }
91       
92        if($faire)
93        {
94                geoipcc_log('loading ' . _GEOIPCC_FICHIER_GZ_DISTANT);
95               
96                if($data = geoipcc_gz_read(_GEOIPCC_DATA_MAX_LEN))
97                {
98                        if($len = strlen($data)) 
99                        {
100                                geoipcc_log('uncompressing data file in '._GEOIPCC_FICHIER_DATA_LOCAL);
101
102                                if(file_put_contents( _GEOIPCC_FICHIER_DATA_LOCAL, $data)) {
103                                        geoipcc_log('writing data successfull');
104                                        return(true);
105                                }
106                                else {
107                                        geoipcc_log('writing data error ');
108                                }
109                        }
110                        else {
111                                geoipcc_log('file empty or connexion error '._GEOIPCC_FICHIER_GZ_DISTANT);
112                        }
113                }
114                else 
115                {       
116                        geoipcc_log('read error '._GEOIPCC_FICHIER_GZ_DISTANT);
117                }
118                return(false);
119        }
120       
121        return(true);
122}
123
124/**
125 * Lecture du fichier distant et decompression
126 * @return mixed $contents
127 * @param string $filename
128 */
129function geoipcc_gz_read ($filename) 
130{
131        if(
132                ($data = file_get_contents (_GEOIPCC_FICHIER_GZ_DISTANT, FILE_BINARY, null, 0, _GEOIPCC_DATA_MAX_LEN))
133                && file_put_contents (_GEOIPCC_FICHIER_GZ_LOCAL, $data)
134        ) 
135        {
136               
137                if($zd = gzopen(_GEOIPCC_FICHIER_GZ_LOCAL, "r"))
138                {
139                        $contents = gzread($zd, _GEOIPCC_DATA_MAX_LEN);
140                        gzclose($zd);
141                }
142        }
143        return($contents);
144}
145
146/**
147 * Appele automatiquement par SPIP
148 *   lors de l'installation/desinstallation du plugin
149 * Ne pas oublier de cliquer sur la petite valise pour supprimer
150 *   mes cc temporaires.
151 * @return
152 * @param string $action
153 */
154function geoipcc_install ($action) 
155{
156        switch($action) {
157                case 'test':
158                        $result = file_exists(_GEOIPCC_FICHIER_DATA_LOCAL);
159                        geoipcc_log('TEST: ' . ($result ? 'TRUE' : 'FALSE'));
160                        return($result);
161                        break;
162                case 'install':
163                        $result = geoipcc_charger_data(true);
164                        geoipcc_log('INSTALL: ' . ($result ? 'OK' : 'ERROR'));
165                        return($result);
166                        break;
167                case 'uninstall':
168                        if(file_exists(_GEOIPCC_FICHIER_DATA_LOCAL))
169                        {
170                                $result = unlink(_GEOIPCC_FICHIER_GZ_LOCAL) && unlink(_GEOIPCC_FICHIER_DATA_LOCAL);
171                        }
172                        else {
173                                $result = true;
174                        }
175                        geoipcc_log('UNINSTALL: ' . ($result ? 'OK' : 'ERROR'));
176                        return($result);
177        }
178}
179
180/**
181 * Renvoie le country code de l'adresse IP
182 * @return
183 * @param string $args
184 */
185function calculer_GEOIP_COUNTRY_CODE ($this_ip = false)
186{
187       
188        static $cc;
189       
190        if(!$cc) 
191        {
192                include_spip('geoip.inc');
193               
194                if(!$this_ip) 
195                {
196                        $this_ip = calculer_GEOIP_IP_VISITEUR();
197                }
198               
199                if(geoipcc_charger_data() && file_exists(_GEOIPCC_FICHIER_DATA_LOCAL))
200                {
201                        if($geoi = geoip_open(_GEOIPCC_FICHIER_DATA_LOCAL, GEOIP_STANDARD))
202                        {       
203                                $cc = geoip_country_code_by_addr($geoi, $this_ip);
204                        }
205                        // si pays demande' inconnu, appliquer le defaut
206                        if(!$cc) {
207                                $cc = _GEOIPCC_PAYS_DEFAULT;
208                        }
209                }
210                else 
211                {
212                        geoipcc_log('Fichier ' . _GEOIPCC_FICHIER_DATA_LOCAL . ' manquant. Svp, re-installez le plugin.');
213                }
214        }
215        geoipcc_log('country code for ' . $this_ip . ': '.$cc);
216       
217        return($cc);   
218}
219
220/**
221 * Balise #GEOIP_COUNTRY_CODE
222 *   Renvoie le country code deduit de l'adresse IP visiteur
223 * @return object
224 * @param object $p
225 */
226function balise_GEOIP_COUNTRY_CODE ($p) 
227{
228        $args = interprete_argument_balise(1, $p);
229       
230        $p->code = "calculer_GEOIP_COUNTRY_CODE($args)";
231        $p->interdire_scripts = false;
232        return ($p);
233}
234
235function calculer_GEOIP_IP_VISITEUR ()
236{
237        global $ip; // inc_version.php
238        return($ip);
239}
240
241/**
242 * IP du visiteur
243 * @return
244 * @param object $p
245 */
246function balise_GEOIP_IP_VISITEUR ($p) 
247{
248        $p->code = "calculer_GEOIP_IP_VISITEUR()";
249        $p->interdire_scripts = false;
250        return ($p);
251}
252
Note: See TracBrowser for help on using the repository browser.