source: spip-zone/_plugins_/_stable_/menu-navigation_depliant/inc/plugin_globales_lib.php @ 18711

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