source: spip-zone/_plugins_/spip-listes/spip-listes_1_9_3/inc/spiplistes_api_globales.php @ 45317

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

réécriture de la fonction spiplistes_server_rezo_local(), mieux detecter les réseaux privés

  • Property svn:eol-style set to LF
  • Property svn:keywords set to LastChangedBy LastChangedDate LastChangedRevision
File size: 9.3 KB
Line 
1<?php
2
3// inc/spiplistes_api_globales.php
4
5/******************************************************************************************/
6/* SPIP-Listes est un systeme de gestion de listes d'abonnes et d'envoi d'information     */
7/* par email pour SPIP. http://bloog.net/spip-listes                                      */
8/* Copyright (C) 2004 Vincent CARON  v.caron<at>laposte.net                               */
9/*                                                                                        */
10/* Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes */
11/* de la Licence Publique Generale GNU publiee par la Free Software Foundation            */
12/* (version 2).                                                                           */
13/*                                                                                        */
14/* Ce programme est distribue car potentiellement utile, mais SANS AUCUNE GARANTIE,       */
15/* ni explicite ni implicite, y compris les garanties de commercialisation ou             */
16/* d'adaptation dans un but specifique. Reportez-vous a la Licence Publique Generale GNU  */
17/* pour plus de details.                                                                  */
18/*                                                                                        */
19/* Vous devez avoir recu une copie de la Licence Publique Generale GNU                    */
20/* en meme temps que ce programme ; si ce n'est pas le cas, ecrivez a la                  */
21/* Free Software Foundation,                                                              */
22/* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, Etats-Unis.                   */
23/******************************************************************************************/
24// $LastChangedRevision: 45317 $
25// $LastChangedBy: paladin@quesaco.org $
26// $LastChangedDate: 2011-03-11 09:44:14 +0000 (Fri, 11 Mar 2011) $
27
28if(!defined('_ECRIRE_INC_VERSION')) return;
29
30/*
31        Les fonctions qui doivent etre chargees par tous les scripts sauf inc/spiplistes_api*
32*/
33
34// Certains hebergeurs ont desactive l'acces a syslog (free,...)
35// Recreer les constantes pour trier les journaux
36if(!defined('LOG_WARNING')) {
37        define('LOG_WARNING', 4);
38        define('LOG_DEBUG', 7);
39}
40
41function spiplistes_log ($texte, $level = LOG_WARNING) {
42       
43        static $lan, $syslog, $debug;
44       
45        if ($syslog === null)
46        {
47                $lan = spiplistes_server_rezo_local();
48               
49                $syslog = (spiplistes_pref_lire('opt_console_syslog') == 'oui');
50                $debug = (spiplistes_pref_lire('opt_console_debug') == 'oui');
51        }
52        if ($debug || $lan)
53        {
54                if($syslog)
55                {
56                        $tag = '_';
57                        if (empty($tag))
58                        { 
59                                $tag = basename ($_SERVER['PHP_SELF']); 
60                        }
61                        else if ($level == LOG_DEBUG)
62                        {
63                                $tag = 'DEBUG: ' . $tag; 
64                        }
65                        return (
66                                openlog ($tag, LOG_PID | LOG_CONS, LOG_USER) 
67                                        && syslog ($level, (string)$texte) 
68                                        &&      closelog()
69                        );
70                }
71                else {
72                        spip_log ($texte, _SPIPLISTES_PREFIX);
73                }
74               
75        }
76        else if($level <= LOG_WARNING)
77        {
78                // Taille du log SPIP trop courte en 192
79                // Ne pas envoyer si DEBUG sinon tronque sans cesse
80                // En SPIP 193, modifier globale $taille_des_logs pour la rotation
81                spip_log ($texte, _SPIPLISTES_PREFIX);
82        }
83        return (true);
84}
85
86/**
87 * CP-20110311
88 * Détecter si reseau local
89 * @return boolean
90 */
91function spiplistes_server_rezo_local () {
92       
93        static $islan;
94       
95        if ($islan === null)
96        {
97                $adr = $_SERVER['SERVER_ADDR'];
98               
99                $islan =
100                        ($adr && (
101                                          $adr == '127.0.0.1'
102                                   || (substr ($adr, 0, 8) == '192.168.')
103                                   || (substr ($adr, 0, 4) == '172.')
104                                   || (substr ($adr, 0, 3) == '10.')
105                                   )
106                        );
107        }
108        return ($islan);
109}
110
111// CP-20080324
112// SPIP 1.9.2e: $spip_version_branche = null; $spip_version_affichee = '1.9.2e'; $spip_version_code = 1.9208;
113// SPIP 1.9.2f: $spip_version_branche = null; $spip_version_affichee = '1.9.2f'; $spip_version_code = 1.9208;
114// SPIP 1.9.2g: $spip_version_branche = null; $spip_version_affichee = '1.9.2g'; $spip_version_code = 1.9208;
115// SPIP 2.0.0: $spip_version_branche = "2.0.0"; $spip_version_affichee = "$spip_version_branche"; $spip_version_code = 12691;
116// SPIP 2.0.1: $spip_version_branche = "2.0.1"; $spip_version_affichee = "$spip_version_branche"; $spip_version_code = 12691;
117// SPIP 2.0.2: $spip_version_branche = "2.0.2"; $spip_version_affichee = "$spip_version_branche"; $spip_version_code = 12691;
118function spiplistes_spip_est_inferieur_193 () {
119        static $is_inf;
120        if($is_inf===NULL) {
121                $is_inf = version_compare($GLOBALS['spip_version_code'],'1.9300','<');
122        }
123        return($is_inf);
124}
125
126
127/**
128 * ecrire dans la table 'spip_meta' le champ...
129 * en general pour les preferences
130 * @return true
131 */
132function spiplistes_ecrire_metas() {
133        if(spiplistes_spip_est_inferieur_193()) { 
134                include_spip('inc/meta');
135                ecrire_metas();
136        }
137        return (true);
138}
139
140/**
141 * Lecture d'une pref (meta)
142 * @param $key string
143 * @return string or null
144 */
145function spiplistes_pref_lire ($key) {
146        $s = spiplistes_lire_key_in_serialized_meta($key, _SPIPLISTES_META_PREFERENCES);
147        return ($s);
148}
149
150/*
151 * lecture dans les metas, format serialise
152 * @return
153 * @param $meta_name Object
154 */
155function spiplistes_lire_serialized_meta ($meta_name) {
156        if(isset($GLOBALS['meta'][$meta_name])) {
157                if(!empty($GLOBALS['meta'][$meta_name])) {
158                        return(unserialize($GLOBALS['meta'][$meta_name]));
159                }
160                else spiplistes_log("erreur sur meta $meta_name (vide)", _SPIPLISTES_LOG_DEBUG);
161        }
162        return(false);
163}
164
165/*
166 * lecture d'une cle dans la meta serialisee
167 * @return
168 * @param $key Object
169 * @param $meta_name Object
170 */
171function spiplistes_lire_key_in_serialized_meta ($key, $meta_name) {
172        $result = false;
173        $s_meta = spiplistes_lire_serialized_meta($meta_name);
174        if($s_meta && isset($s_meta[$key])) {
175                $result = $s_meta[$key];
176        } 
177        return($result);
178}
179
180/*
181 * ecriture dans les metas, format serialise
182 * @return
183 * @param $key la cle meta a appliquer
184 * @param $value sa valeur
185 * @param $meta_name nom du champ meta
186 */
187function spiplistes_ecrire_key_in_serialized_meta ($key, $value, $meta_name) {
188        if(isset($GLOBALS['meta'][$meta_name])) {
189                $s_meta = unserialize($GLOBALS['meta'][$meta_name]);
190                $s_meta[$key] = $value;
191                ecrire_meta($meta_name, serialize($s_meta));
192                return(true);
193        }
194        else return(false);
195}
196
197
198/*
199 * @return la version du fichier plugin.xml
200 */
201function spiplistes_real_version_get ($prefix) {
202        static $r;
203        if($r === null) {
204                $r = spiplistes_real_tag_get($prefix, 'version');
205        }
206        return ($r);
207}
208
209/*
210 * renvoie la version_base du fichier plugin.xml
211 */
212function spiplistes_real_version_base_get ($prefix) {
213        $r = spiplistes_real_tag_get($prefix, 'version_base');
214        return ($r);
215}
216
217function spiplistes_current_version_get ($prefix) {
218        global $meta; 
219        return $meta[$prefix."_version"];
220}
221
222function spiplistes_real_tag_get ($prefix, $s) {
223        include_spip('inc/plugin');
224        $dir = spiplistes_get_meta_dir($prefix);
225        $f = _DIR_PLUGINS.$dir.'/'._FILE_PLUGIN_CONFIG;
226        if(is_readable($f) && ($c = file_get_contents($f))) {
227                $p = array("/<!--(.*?)-->/is","/<\/".$s.">.*/s","/.*<".$s.">/s");
228                $r = array("","","");
229                $r = preg_replace($p, $r, $c);
230        }
231        return(!empty($r) ? $r : false);
232}
233
234/*
235 * renvoie les infos du plugin contenues dans les metas
236 * qui contient 'dir' et 'version'
237 */
238function spiplistes_get_meta_infos ($prefix) {
239        if(isset($GLOBALS['meta']['plugin'])) {
240                $result = unserialize($GLOBALS['meta']['plugin']);
241                $prefix = strtoupper($prefix);
242                if(isset($result[$prefix])) {
243                        return($result[$prefix]);
244                }
245        }
246        return(false);
247}
248
249/*
250 * renvoie le dir du plugin present dans les metas
251 */
252function spiplistes_get_meta_dir($prefix) {
253        $result = false;
254        $info = spiplistes_get_meta_infos($prefix);
255        if(isset($info['dir'])) {
256                $result = $info['dir'];
257        }
258        return($result);
259}
260
261/*
262 * @return la version_base en cours
263 * doc: voir inc/plugin.php sur version_base (plugin.xml)
264 * qui s'appelle base_version en spip_meta %-}
265 */
266function spiplistes_current_version_base_get ($prefix) {
267        global $meta;
268        if(!($vb = $meta[$prefix."_base_version"])) {
269                $vb = spiplistes_real_version_base_get ($prefix);
270        }
271        return($vb);
272}
273
274function spiplistes_sqlerror_log ($trace = "") {
275        if($trace) $trace = " ($trace) ";
276        spiplistes_log('DB ERROR'.$trace.": [" . sql_errno() . "] " . sql_error());
277        return(true);
278}
279
280// CP-20090111. log pour les apis
281function spiplistes_log_api ($msg) {
282        static $ii;
283        if($ii === null) {
284                $ii = $GLOBALS['auteur_session']['id_auteur'];
285                $ii = $ii ? "id_auteur #".$ii : "himself";
286        };
287        spiplistes_log("API: $msg by $ii");
288        return(true);
289}
290
291// CP-20090111: adresse mail de l'expediteur par defaut
292function spiplistes_email_from_default () {
293        static $default;
294        if(!$default) {
295                if(
296                        // prendre d'abord celui par defaut de SPIP-Listes
297                        ($result = email_valide($ii = trim($GLOBALS['meta']['email_defaut'])))
298                        // sinon celui du webmaster
299                        || ($result = email_valide($ii = trim($GLOBALS['meta']['email_webmaster'])))
300                ) {
301                        if($result == $ii) {
302                                //$nom = extraire_multi($GLOBALS['meta']['nom_site']);
303                                //$nom = unicode2charset(charset2unicode($nom),$GLOBALS['meta']['spiplistes_charset_envoi']);
304                                //$result = "\"$nom\" <$ii>";
305                        }
306                }
307                else {
308                        spiplistes_log('ERROR: sender email address missing');
309                }
310        }
311        return($result);
312}
313
314// PHP 4 ?
315if(!function_exists('array_combine')) {
316        function array_combine ($keys, $values) {
317                if(is_array($keys) && is_array($values) && (count($keys) == count($values))) {
318                        $keys = array_values($keys);
319                        $values = array_values($values);
320                        $result = array();
321                        foreach($keys as $key => $value) {
322                                $result[$value] = $values[$key];
323                        }
324                }
325                return($result);
326        }
327}
328
Note: See TracBrowser for help on using the repository browser.