source: spip-zone/_plugins_/_test_/login_logout/inc/plugin_globales_lib.php @ 17795

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

Complément d'info signature

  • Property svn:eol-style set to LF
  • Property svn:keywords set to LastChangedBy LastChangedDate LastChangedRevision
File size: 21.1 KB
Line 
1<?php
2// Original From SPIP-Listes-V :: $Id: plugin_globales_lib.php paladin@quesaco.org $
3// Christian PAULUS : http://www.quesaco.org/ (c) 2007
4// $LastChangedRevision: 17795 $
5// $LastChangedBy: paladin@quesaco.org $
6// $LastChangedDate: 2007-12-31 05:50:43 +0000 (Mon, 31 Dec 2007) $
7
8// librairie de fonctions et defines globales
9// indépendantes de tout plugin
10
11// toutes les fonctions ici sont préfixées '__' (2 tirets)
12// sauf re-déclaration inc/vieilles_defs.php
13// sauf déclaration des fonctions php5
14
15if (!defined("_ECRIRE_INC_VERSION")) return;
16
17if(defined("_PGL_PLUGIN_GLOBALES_LIB") && _PGL_PLUGIN_GLOBALES_LIB) return;
18define("_PGL_PLUGIN_GLOBALES_LIB", 20071231.0646); //date.heure
19
20// HISTORY:
21// CP-20071231: __plugin_current_version_base_get complète par lecture plugin.xml si vb manquant dans meta
22// CP-20071224: ajout de __plugin_current_svnrevision_get() et modif __plugin_html_signature()
23// CP-20071222: optimisation __plugin_boite_meta_info() pour plugin en mode stable et mode dev
24
25include_spip("inc/plugin");
26
27if(!function_exists('__server_in_private_ip_adresses')) {
28        // vérifie si le serveur est dans Adresses IP privées de classe C (Private IP addresses)
29        // renvoie true si serveur dans classe privée
30        function __server_in_private_ip_adresses() {
31                return(preg_match('/^192\.168/', $_SERVER['SERVER_ADDR']));
32        }
33}
34
35if(!defined("_PGL_SYSLOG_LAN_IP_ADDRESS")) define("_PGL_SYSLOG_LAN_IP_ADDRESS", "/^192\.168\./");
36if(!defined("_PGL_USE_SYSLOG_UNIX"))  define("_PGL_USE_SYSLOG_UNIX", true);
37
38// Trace sur syslog
39if(!function_exists('__syslog_trace')) {
40        // trace si serveur sur LAN
41        if(__server_in_private_ip_adresses()) {
42                function __syslog_trace($message, $priority = LOG_WARNING, $tag = "_") {
43                        if(empty($tag)) { 
44                                $tag = basename ($_SERVER['PHP_SELF']); 
45                        }
46                        else if($priority == LOG_DEBUG) {
47                                $tag = "DEBUG: ".$tag; 
48                        }
49                        return(
50                                openlog ($tag, LOG_PID | LOG_CONS, LOG_USER) 
51                                        && syslog ($priority, (string)$message) 
52                                        &&      closelog()
53                        );
54                }
55        }
56}
57
58if(!function_exists('__syslog_dump')) {
59        // fonction récursive
60        // dump du contenu d'un var dans le log
61        // pratique en mode debug
62        // ne pas utiliser dans version de production
63        function __syslog_dump ($p, $tag = '') {
64               
65                if(!__server_in_private_ip_adresses()) return false;
66               
67                if(is_array($p) || is_object($p)) {
68                        foreach($p as $k=>$v) {
69                                if(is_array($v) || is_object($v)) {
70                                        __syslog_dump($v, $k);
71                                }
72                                else {
73                                        __syslog_trace((!empty($tag) ? $tag." +> " : '')."$k => $v");
74                                }
75                        }
76                }
77                else {
78                        __syslog_trace((!empty($tag) ? $tag." +> " : '')."$p");
79                }
80        }
81}
82/* fin des __syslog_* */
83
84
85/*//////////////////////////
86*/
87if(!function_exists('__plugin_real_version_get')) {
88        // renvoie la version du fichier plugin.xml
89        function __plugin_real_version_get ($prefix) {
90                $r = __plugin_real_tag_get($prefix, 'version');
91                return ($r);
92        }
93}
94
95if(!function_exists('__plugin_real_version_base_get')) {
96        // renvoie la version_base du fichier plugin.xml
97        function __plugin_real_version_base_get ($prefix) {
98                $r = __plugin_real_tag_get($prefix, 'version_base');
99                return ($r);
100        }
101}
102
103if(!function_exists('__plugin_current_version_get')) {
104        function __plugin_current_version_get ($prefix) {
105                return(lire_meta($prefix."_version"));
106        }
107}
108
109/**/
110if(!function_exists('__plugin_current_version_base_get')) {
111        // renvoie la version_base en cours
112                // doc: voir inc/plugin.php sur version_base (plugin.xml)
113                // qui s'appelle base_version en spip_meta %-}
114        function __plugin_current_version_base_get ($prefix) {
115                if(!($vb = lire_meta($prefix."_base_version"))) {
116                        $vb = __plugin_real_version_base_get ($prefix);
117                }
118                return($vb);
119        }
120} // end if __plugin_current_version_base_get
121
122if(!function_exists('__plugin_current_svnrevision_get')) {
123        // renvoie le dernier numero de révision svn
124        function __plugin_current_svnrevision_get ($prefix, $verifier_svn) {
125                static $svn_revision = false;
126                if(!empty($prefix)) {
127                        // lire directement dans plugin.xml (éviter le cache ?)
128                        $dir_plugin = _DIR_PLUGINS.__plugin_get_meta_dir($prefix);
129                        // cherche si sur version svn
130                        if(!$result = version_svn_courante($dir_plugin)) {
131                                // méfiance: il faut que svn/entries soit à jour (svn update sur le poste de travail/serveur !)
132                                // si pas de svn/entries, lire l'attribut dans plugin.xml
133                                $file = $dir_plugin."/"._FILE_PLUGIN_CONFIG;
134                                $result = __plugin_svn_revision_read($file);
135                        }
136                        if($verifier_svn && !$svn_revision) {
137                                // vérifier les fichiers inclus (gourmand et peut-être trompeur si fichier fantôme ?)
138                                // ne vérifier que sur deux niveaux (PLUGIN_ROOT et ses répertoires directs, pas en dessous)
139                                define("_PGL_SVN_LIRE_EXTENSIONS", "css|html|js|php|xml");
140                                $script_files = array();
141                                if(is_dir($dir_plugin) && ($dh = opendir($dir_plugin))) {
142                                        while (($file = readdir($dh)) !== false) {
143                                                if($file[0] == ".") continue;
144                                                if(is_dir($dir_plugin_sub = $dir_plugin."/".$file) && ($dh_s = opendir($dir_plugin_sub))) {
145                                                        while (($file = readdir($dh_s)) !== false) {
146                                                                if($file[0] == ".") continue;
147                                                                if(preg_match('=\.('._PGL_SVN_LIRE_EXTENSIONS.')$=i', $file)) $script_files[] = $dir_plugin_sub."/".$file;
148                                                        }
149                                                        closedir($dh_s);
150                                                }
151                                                else if(preg_match('=\.('._PGL_SVN_LIRE_EXTENSIONS.')$=i', $file)) $script_files[] = $dir_plugin."/".$file;
152                                        }
153                                        closedir($dh);
154                                }
155                                foreach($script_files as $file) {
156                                        if(!$ii = __plugin_svn_revision_read ($file)) { continue; }
157                                        $result = max($ii, $result);
158                                }
159                        }
160                        if(!empty($result) && (intval($result) > 0)) return($result);
161                }
162                return(false);
163        }
164}
165
166/**/
167// lire le fichier, en espérant trouver le mot clé svn dans les $buf_size premiers caractères
168function __plugin_svn_revision_read ($filename, $buf_size = 2048) {
169        if($fh = fopen($filename, "rb")) {
170                $buf = fread($fh, $buf_size);
171                fclose($fh);
172                if($buf = strstr($buf, "$"."LastChanged"."Revision:")) {
173                        $revision = preg_replace('=^\$LastChanged'.'Revision: ([0-9]+) \$.*$=s', '${1}', $buf, 1);
174                        if(strval(intval($revision)) == $revision) { 
175                                return($revision);
176                        }
177                }
178        }
179        return (false);
180}
181
182/**/
183if(!function_exists('__plugin_real_tag_get')) {
184        function __plugin_real_tag_get ($prefix, $s) {
185                $dir = __plugin_get_meta_dir($prefix);
186                $f = _DIR_PLUGINS.$dir."/"._FILE_PLUGIN_CONFIG;
187                if(is_readable($f) && ($c = file_get_contents($f))) {
188                        $p = array("/<!--(.*?)-->/is","/<\/".$s.">.*/s","/.*<".$s.">/s");
189                        $r = array("","","");
190                        $r = preg_replace($p, $r, $c);
191                }
192                return(!empty($r) ? $r : false);
193        }
194} // end if __plugin_real_tag_get
195
196/**/
197if(!function_exists('__plugin_get_meta_infos')) {
198        // renvoie les infos du plugin contenues dans les metas
199        // qui contient 'dir' et 'version'
200        function __plugin_get_meta_infos ($prefix) {
201                if(isset($GLOBALS['meta']['plugin'])) {
202                        $result = unserialize($GLOBALS['meta']['plugin']);
203                        $prefix = strtoupper($prefix);
204                        if(isset($result[$prefix])) {
205                                return($result[$prefix]);
206                        }
207                }
208                return(false);
209        }
210} // end if __plugin_get_meta_infos
211
212/**/
213if(!function_exists('__plugin_get_meta_dir')) {
214        // renvoie le dir du plugin
215        // présent dans les metas
216        function __plugin_get_meta_dir($prefix) {
217                $result = false;
218                $info = __plugin_get_meta_infos($prefix);
219                if(isset($info['dir'])) {
220                        $result = $info['dir'];
221                }
222                return($result);
223        }
224} // end if __plugin_get_meta_dir
225
226/**/
227if(!function_exists('__plugin_meta_version')) {
228        // renvoie le num de version du plugin lors de la dernière installation
229        // présent dans les metas
230        function __plugin_get_meta_version($prefix) {
231                $result = false;
232                $info = __plugin_get_meta_infos($prefix);
233                if(isset($info['version'])) {
234                        $result = $info['version'];
235                }
236                return($result);
237        }
238}
239
240/**/
241if(!function_exists('__plugin_boite_meta_info')) {
242        // affiche un petit bloc info sur le plugin
243        function __plugin_boite_meta_info ($prefix, $return = false) {
244                include_spip('inc/meta');
245                $result = false;
246                if(!empty($prefix)) {
247                        $meta_info = __plugin_get_meta_infos($prefix); // dir et version
248                        $info = plugin_get_infos($meta_info['dir']);
249                        $icon = 
250                                (isset($info['icon']))
251                                ? "<div "
252                                        . " style='width:64px;height:64px;"
253                                                . "margin:0 auto 1em;"
254                                                . "background: url(". _DIR_PLUGINS.$meta_info['dir']."/".trim($info['icon']).") no-repeat center center;overflow: hidden;'"
255                                        . " title='Logotype plugin $prefix'>"
256                                        . "</div>\n"
257                                : ""
258                                ;
259                        if(isset($info['etat']) && ($info['etat']=='stable')) {
260                        // en version stable, ne sort plus les infos de debug
261                                foreach(array('description','lien','auteur') as $key) {
262                                        if(isset($info[$key]) && !isset($meta_info[$key])) {
263                                                $meta_info[$key] = $info[$key];
264                                        }
265                                }
266                                $result .= __plugin_boite_meta_info_liste($meta_info, true) // nom, etat, dir, version, description, lien, auteur
267                                        ;
268                        }
269                        else {
270                        // un peu plus d'info en mode test et dev
271                                $mode_dev = (isset($info['etat']) && ($info['etat']=='dev'));
272                                $result .= 
273                                        __plugin_boite_meta_info_liste($meta_info, true) // nom, etat, dir, version
274                                        . __plugin_boite_meta_info_liste($info, $mode_dev)  // et tout ce qu'on a en magasin
275                                        ;
276                        }
277                        if(!empty($result)) {
278                                $result = ""
279                                        . debut_cadre_relief('plugin-24.gif', true, '', $prefix)
280                                        . $icon
281                                        . $result
282                                        . fin_cadre_relief(true)
283                                        ;
284                        }
285                }
286                if($return) return($result);
287                else echo($result);
288        }
289        /**/
290        function __plugin_boite_meta_info_liste($array, $recursive = false) {
291                global $spip_lang_left;
292                $result = "";
293                if(is_array($array)) {
294                        foreach($array as $key=>$value) {
295                                $sub_result = "";
296                                if(is_array($value)) {
297                                        if($recursive) {
298                                                $sub_result = __plugin_boite_meta_info_liste($value);
299                                        }
300                                }
301                                else {
302                                        $sub_result = propre($value);
303                                }
304                                if(!empty($sub_result)) {
305                                        $result .= "<li><span style='font-weight:bold;'>$key</span> : $sub_result</li>\n";
306                                }
307                        }
308                        if(!empty($result)) {
309                                $result = "<ul style='margin:0;padding:0 1ex;list-style: none;text-align: $spip_lang_left;' class='verdana2 meta-info-liste'>$result</ul>";
310                        }
311                }
312                return($result);
313        }
314} // end if __plugin_boite_meta_info
315
316/**/
317if(!function_exists('__plugin_html_signature')) {
318        // petite signature de plugin
319        // du style "Dossier plugin [version]"
320        function __plugin_html_signature ($prefix, $return = false, $html = true, $verifier_svn = false) {
321
322                $info = plugin_get_infos(__plugin_get_meta_dir($prefix));
323                $nom = typo($info['nom']);
324                $version = typo($info['version']);
325                //$base_version = typo($info['version_base']); // cache ?
326                $base_version = __plugin_current_version_base_get($prefix);
327                $svnrevision = __plugin_current_svnrevision_get($prefix, $verifier_svn);
328                $revision = "";
329                if($html) {
330                        $version = (($version) ? " <span style='color:gray;'>".$version : "")
331                                . (($svnrevision) ? "-".$svnrevision : "")
332                                . "</span>"
333                                ;
334                        $base_version = (($base_version) ? " <span style='color:#66c;'>&lt;".$base_version."&gt;</span>" : "");
335                }
336                $result = ""
337                        . $nom
338                        . $version
339                        . $base_version
340                        ;
341                if($html) {
342                        $result = "<p class='verdana1 spip_xx-small' style='font-weight:bold;'>$result</p>\n";
343                }
344                if($return) return($result);
345                else echo($result);
346        }
347} // end if __plugin_html_signature
348
349/*//////////////////////////
350*/
351
352if(!function_exists('__mysql_date_time')) {
353        function __mysql_date_time($time = 0) {
354                return(date("Y-m-d H:i:s", $time));
355        }
356}
357
358if(!function_exists('__is_mysql_date')) {
359        function __is_mysql_date($date) {
360                $t = strtotime($date);
361                return($t && ($date == __mysql_date_time($t)));
362        }
363}
364
365if(!function_exists('__mysql_max_allowed_packet')) {
366        // renvoie la taille maxi d'un paquet PySQL (taille d'une requête)
367        function __mysql_max_allowed_packet() {
368                $sql_result = spip_query("SHOW VARIABLES LIKE 'max_allowed_packet'");
369                $row = spip_fetch_array($sql_result, SPIP_NUM);
370                return($row[1]);
371        }
372}
373
374// si inc/vieilles_defs.php disparaît ?
375if(!function_exists("lire_meta")) {
376        function lire_meta($key) {
377                $result = 0;
378                if(_FILE_CONNECT && @file_exists(_FILE_CONNECT_INS .'.php')) {
379                        if(!isset($GLOBALS['meta'][$key])) {
380                                $sql_result = @spip_query("SELECT valeur FROM spip_meta WHERE nom="._q($key)." LIMIT 1");
381                                if($row = spip_fetch_array($sql_result)) {
382                                        $result = $row[$key];
383                                        $GLOBALS['meta'][$key] = $result;
384                                }
385                        }
386                        else {
387                                $result = $GLOBALS['meta'][$key];
388                        }
389                }
390                return($result);
391        }
392}
393
394if(!function_exists("__boite_alerte")) {
395        // Renvoie ou affiche une boite d'alerte
396        function __boite_alerte ($message, $return = false) {
397                $result = ""
398                        . debut_cadre_enfonce('', true)
399                        .  http_img_pack("warning.gif", _T('info_avertissement'), 
400                                         "style='width: 48px; height: 48px; float: right;margin: 5px;'")
401                        . "<strong>$message</strong>\n"
402                        . fin_cadre_enfonce(true)
403                        . "\n<br />"
404                        ;
405                if($return) return($result);
406                else echo($result);
407        }
408}
409
410// !(PHP 4 >= 4.3.0, PHP 5)
411if(!function_exists("html_entity_decode")) {
412        function html_entity_decode ($string, $quote_style = "", $charset = "")
413        {
414                // Remplace les entités numériques
415                $string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string);
416                $string = preg_replace('~&#([0-9]+);~e', 'chr("\\1")', $string);
417                // Remplace les entités litérales
418                $trans_tbl = get_html_translation_table (HTML_ENTITIES);
419                $trans_tbl = array_flip ($trans_tbl);
420                return strtr ($string, $trans_tbl);
421        }
422}
423
424if((phpversion()<5) && !function_exists("__html_entity_decode_utf8")) {
425// http://fr.php.net/html_entity_decode
426        // thank to: laurynas dot butkus at gmail dot com
427        function __html_entity_decode_utf8($string)
428        {
429                 static $trans_tbl;
430               
431                 // replace numeric entities
432                 $string = preg_replace('~&#x([0-9a-f]+);~ei', '__code2utf(hexdec("\\1"))', $string);
433                 $string = preg_replace('~&#([0-9]+);~e', '__code2utf(\\1)', $string);
434       
435                 // replace literal entities
436                 if (!isset($trans_tbl))
437                 {
438                          $trans_tbl = array();
439                         
440                          foreach (get_html_translation_table(HTML_ENTITIES) as $val=>$key)
441                                        $trans_tbl[$key] = utf8_encode($val);
442                 }
443               
444                 return strtr($string, $trans_tbl);
445        } // __html_entity_decode_utf8()
446       
447        // Returns the utf string corresponding to the unicode value (from php.net, courtesy - romans@void.lv)
448        // thank to: akniep at rayo dot info
449        function __code2utf($number)  {
450        if ($number < 0)
451            return FALSE;
452        if ($number < 128)
453            return chr($number);
454        // Removing / Replacing Windows Illegals Characters
455        if ($number < 160)
456        {
457                if ($number==128) $number=8364;
458            elseif ($number==129) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160
459            elseif ($number==130) $number=8218;
460            elseif ($number==131) $number=402;
461            elseif ($number==132) $number=8222;
462            elseif ($number==133) $number=8230;
463            elseif ($number==134) $number=8224;
464            elseif ($number==135) $number=8225;
465            elseif ($number==136) $number=710;
466            elseif ($number==137) $number=8240;
467            elseif ($number==138) $number=352;
468            elseif ($number==139) $number=8249;
469            elseif ($number==140) $number=338;
470            elseif ($number==141) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160
471            elseif ($number==142) $number=381;
472            elseif ($number==143) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160
473            elseif ($number==144) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160
474            elseif ($number==145) $number=8216;
475            elseif ($number==146) $number=8217;
476            elseif ($number==147) $number=8220;
477            elseif ($number==148) $number=8221;
478            elseif ($number==149) $number=8226;
479            elseif ($number==150) $number=8211;
480            elseif ($number==151) $number=8212;
481            elseif ($number==152) $number=732;
482            elseif ($number==153) $number=8482;
483            elseif ($number==154) $number=353;
484            elseif ($number==155) $number=8250;
485            elseif ($number==156) $number=339;
486            elseif ($number==157) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160
487            elseif ($number==158) $number=382;
488            elseif ($number==159) $number=376;
489        } //if
490       
491        if ($number < 2048)
492            return chr(($number >> 6) + 192) . chr(($number & 63) + 128);
493        if ($number < 65536)
494            return chr(($number >> 12) + 224) . chr((($number >> 6) & 63) + 128) . chr(($number & 63) + 128);
495        if ($number < 2097152)
496            return chr(($number >> 18) + 240) . chr((($number >> 12) & 63) + 128) . chr((($number >> 6) & 63) + 128) . chr(($number & 63) + 128);
497       
498        return FALSE;
499    } //__code2utf()
500}
501
502if(!function_exists('__texte_html_2_iso')) {
503        function __texte_html_2_iso($string, $charset, $unspace = false) {
504                $charset = strtoupper($charset);
505                // html_entity_decode a qq soucis avec UTF-8
506                if($charset=="UTF-8" && (phpversion()<5)) {
507                        $string = __html_entity_decode_utf8($string);
508                }
509                else {
510                        $string = html_entity_decode($string, ENT_QUOTES, $charset);
511                }
512                if($unspace) {
513                        // renvoie sans \r ou \n pour les boites d'alerte javascript
514                        $string = preg_replace("/([[:space:]])+/", " ", $string);
515                }
516                return ($string);
517        }
518}
519
520if(!function_exists('__boite_select_de_formulaire')) {
521        // renvoie une boite select pour un formulaire
522        function __boite_select_de_formulaire ($array_values, $selected, $select_id, $select_name
523                , $size=1, $select_style='', $select_class=''
524                , $label_value='', $label_style='', $label_class='', $multiple=false
525                ) {
526                $result = "";
527                foreach($array_values as $key=>$value) {
528                        $result .= "<option".mySel($value, $selected).">$key</option>\n";
529                }
530                $result = ""
531                        . (
532                                (!empty($label_value))
533                                ? "<label for='$select_id'"
534                                        .(!empty($label_style) ? " style='$label_style'" : "")
535                                        .(!empty($label_class) ? " class='$label_class'" : "")
536                                        .">$label_value</label>\n" 
537                                : ""
538                                )
539                        . "<select name='$select_name' size='$size'"
540                                .(($multiple && ($size>1)) ? " multiple='multiple'" : "")
541                                .(!empty($select_style) ? " style='$select_style'" : "")
542                                .(!empty($select_class) ? " class='$select_class'" : "")
543                                ." id='$select_id'>\n"
544                        . $result
545                        . "</select>\n"
546                        ;
547                return($result);
548        } // __boite_select_de_formulaire()
549}
550
551if(!function_exists('__array_values_in_keys')) {
552        // renvoie tableau avec key => value
553        // (pratique pour __boite_select_de_formulaire())
554        function __array_values_in_keys($array) {
555                $result = array();
556                foreach($array as $value) {
557                        $result[$value] = $value;
558                }
559                return($result);
560        } // __array_values_in_keys()
561}
562
563if(!function_exists('__plugin_aide')) {
564        // petit bouton aide à placer à droite du titre de bloc
565        function __plugin_aide ($fichier_exec_aide, $aide='', $return=true) {
566                include_spip('inc/minipres');
567                global $spip_lang
568                        , $spip_lang_rtl
569                        , $spip_display
570                        ;
571                if (!$aide || $spip_display == 4) return;
572               
573                $t = _T('titre_image_aide');
574                $result = ""
575                . "\n&nbsp;&nbsp;<a class='aide'\nhref='"
576                . generer_url_ecrire($fichier_exec_aide, "var_lang=$spip_lang")
577                . (
578                        (!empty($aide)) 
579                        ? "#$aide" 
580                        : ""
581                        )
582                . "'"
583                . " onclick=\"javascript:window.open(this.href,'spip_aide', 'scrollbars=yes, resizable=yes, width=740, height=580'); return false;\">\n"
584                . http_img_pack(
585                        "aide".aide_lang_dir($spip_lang,$spip_lang_rtl).".gif"
586                        , _T('info_image_aide')
587                        , " title=\"$t\" class='aide'"
588                        )
589                . "</a>"
590                ;
591               
592                if($return) return($result);
593                else echo($result);
594        } // __plugin_aide()
595}
596
597if(!function_exists('__plugin_ecrire_key_in_serialized_meta')) {
598        // ecriture dans les metas, format sérialisé
599        function __plugin_ecrire_key_in_serialized_meta ($key, $value, $meta_name) {
600                if(isset($GLOBALS['meta'][$meta_name])) {
601                        $s_meta = unserialize($GLOBALS['meta'][$meta_name]);
602                        $s_meta[$key] = $value;
603                        ecrire_meta($meta_name, serialize($s_meta));
604                        return(true);
605                }
606                else return(false);
607        }
608}
609
610if(!function_exists('__plugin_lire_serialized_meta')) {
611        // lecture dans les metas, format sérialisé
612        function __plugin_lire_serialized_meta ($meta_name) {
613                if(isset($GLOBALS['meta'][$meta_name])) {
614                        return(unserialize($GLOBALS['meta'][$meta_name]));
615                }
616                return(false);
617        }
618}
619
620if(!function_exists('__plugin_lire_key_in_serialized_meta')) {
621// lecture d'une clé dans la meta sérialisée
622        function __plugin_lire_key_in_serialized_meta ($key, $meta_name) {
623                $result = false;
624                $s_meta = __plugin_lire_serialized_meta($meta_name);
625                if($s_meta && isset($s_meta[$key])) {
626                        $result = $s_meta[$key];
627                }
628                return($result);
629        }
630}
631
632if(!function_exists('__table_items_count')) {
633        function __table_items_count ($table, $key, $where='') {
634                return (
635                        (($row = spip_fetch_array(spip_query("SELECT COUNT($key) AS n FROM $table $where"))) && $row['n'])
636                        ? intval($row['n'])
637                        : 0
638                );
639        }
640}
641
642if(!function_exists('__table_items_get')) {
643        function __table_items_get ($table, $keys, $where='', $limit='') {
644                $result = array();
645                $sql_result = spip_query("SELECT $keys FROM $table $where $limit");
646                while($row = spip_fetch_array($sql_result)) { $result[] = $row; }
647                return ($result);
648        }
649}
650
651if(!function_exists('__ecrire_metas')) {
652        function __ecrire_metas () {
653                if(version_compare($GLOBALS['spip_version_code'],'1.9300','<')) {
654                        include_spip("inc/meta");
655                        ecrire_metas();
656                }
657                return(true);
658        }
659}
660
661if(!function_exists("array_fill_keys")) {
662        function array_fill_keys($array, $fill) {
663                $result = array();
664                foreach($array as $key) {
665                                $result[$key] = $fill;
666                }
667                return ($result);
668        }
669}
670
671?>
Note: See TracBrowser for help on using the repository browser.