source: spip-zone/_plugins_/boussole/trunk/boussole_fonctions.php @ 75212

Last change on this file since 75212 was 75212, checked in by eric@…, 6 years ago

Correction PHPDoc et incrément de version pour cloturer la journée

  • Property svn:eol-style set to native
File size: 7.2 KB
Line 
1<?php
2if (!defined("_ECRIRE_INC_VERSION")) return;
3
4// ----------------------- Balises propres a Boussole ---------------------------------
5
6/**
7 * Balise retournant les informations sur une boussole.
8 *
9 * La balise #BOUSSOLE_INFOS renvoie :
10 *
11 * - le tableau des infos contenues dans la meta boussole_infos_alias si l'alias est fourni,
12 * - la liste de tous les tableaux d'infos des meta boussole_infos_xxxx sinon.
13 *
14 * @balise BOUSSOLE_INFOS
15 * @uses calcul_boussole_infos()
16 *
17 * @param string $p
18 *              alias de la boussole ou vide
19 * @return array
20 *              tableau des informations demandees (une boussole ou toutes les boussoles)
21 */
22function balise_BOUSSOLE_INFOS($p) {
23       
24        $alias_boussole = interprete_argument_balise(1,$p);
25        $alias_boussole = isset($alias_boussole) ? str_replace('\'', '"', $alias_boussole) : '""';
26
27        $p->code = 'calcul_boussole_infos('.$alias_boussole.')';
28
29        return $p;
30}
31
32/**
33 * @param string $boussole
34 *              Alias de la boussole ou chaine vide
35 *
36 * @return array
37 */
38function calcul_boussole_infos($boussole) {
39
40        $infos = array();
41       
42        $where = array();
43        $group_by = array();
44        if ($boussole)
45                $where[] = 'aka_boussole=' . sql_quote($boussole);
46        else
47                $group_by[] = 'aka_boussole';
48
49        $akas_boussole = sql_allfetsel('aka_boussole', 'spip_boussoles', $where, $group_by);
50        if ($akas_boussole) {
51                foreach (array_map('reset', $akas_boussole) as $_aka_boussole) {
52                        $meta = sql_fetsel('valeur, maj', 'spip_meta', 'nom=' . sql_quote('boussole_infos_' . $_aka_boussole));
53                        if ($meta) {
54                                if ($boussole)
55                                        $infos = array_merge(unserialize($meta['valeur']), array('maj' => $meta['maj']));
56                                else
57                                        $infos[] = array_merge(unserialize($meta['valeur']), array('maj' => $meta['maj']));
58                        }
59                }
60        }
61
62        return $infos;
63}
64
65
66// ----------------------- Filtres propres a Boussole ---------------------------------
67
68/**
69 * Traduction d'un champ d'une boussole, d'un groupe de sites ou d'un site
70 *
71 * @api
72 * @filtre boussole_traduire
73 *
74 * @param string $aka_boussole
75 *              Alias de la boussole
76 * @param string $champ
77 *              Champ à traduire
78 * @param string $alias
79 *              Identifiant du groupe ou du site
80 * @return string
81 *              Champ traduit dans la langue du site
82 */
83function boussole_traduire($aka_boussole, $champ, $alias='') {
84        static  $champs_boussole = array('nom_boussole', 'slogan_boussole', 'descriptif_boussole');
85        static  $champs_groupe = array('nom_groupe');
86        static  $champs_site = array('nom_site', 'slogan_site', 'descriptif_site');
87
88        $traduction = '';
89
90        if ($champ == '')
91                return $traduction;
92
93
94        // Détermination de la traduction à rechercher dans les extras de boussole
95        if ($aka_boussole) {
96                if (in_array($champ, $champs_boussole)) {
97                        $type_objet = 'boussole';
98                        $aka_objet = $aka_boussole;
99                        $info = str_replace('boussole', 'objet', $champ);
100                }
101                elseif (in_array($champ, $champs_groupe)) {
102                        $type_objet = 'groupe';
103                        $aka_objet = $alias;
104                        $info = str_replace('groupe', 'objet', $champ);
105                }
106                elseif (in_array($champ, $champs_site)) {
107                        $type_objet = 'site';
108                        $aka_objet = $alias;
109                        $info = str_replace('site', 'objet', $champ);
110                }
111                elseif ($champ == 'nom_slogan_site') {
112                        $type_objet = 'site';
113                        $aka_objet = $alias;
114                        $info = array('nom_objet', 'slogan_objet');
115                }
116                else
117                        return $traduction;
118        }
119
120        // Accès à la table boussoles_extras où sont stockées les traductions
121        $where = array(
122                'aka_boussole=' . sql_quote($aka_boussole),
123                'type_objet=' . sql_quote($type_objet),
124                'aka_objet=' . sql_quote($aka_objet));
125        $traductions = sql_fetsel($info, 'spip_boussoles_extras', $where);
126        if (count($traductions) == 1)
127                $traduction = extraire_multi($traductions[$info]);
128        else if (count($traductions) == 2)
129                $traduction = extraire_multi($traductions['nom_objet']) . '-' . extraire_multi($traductions['slogan_objet']);
130
131        return $traduction;
132}
133
134
135/**
136 * Liste des caches présents sur le site serveur complétée par des informations sur leur nature
137 * et les boussoles associées.
138 *
139 * Cette fonction est utilisée pour l'affichage de la fonction serveur dans l'espace privé.
140 *
141 * @api
142 * @filtre boussole_lister_caches
143 * @pipeline_appel declarer_boussoles()
144 *
145 * @return array
146 */
147function boussole_lister_caches() {
148        $caches = array();
149
150        $dir_caches = _DIR_VAR . 'cache-boussoles';
151        if ($fichiers_cache = glob($dir_caches . "/boussole*.xml")) {
152                include_spip('inc/config');
153                $boussoles = lire_config('boussole/serveur/boussoles_disponibles');
154                $boussoles = pipeline('declarer_boussoles', $boussoles);
155
156                foreach ($fichiers_cache as $_fichier) {
157                        $cache = array();
158                        $cache['fichier'] = $_fichier;
159                        $cache['nom'] = basename($_fichier);
160                        $cache['maj'] = date('Y-m-d H:i:s', filemtime($_fichier));
161
162                        $cache['sha'] = '';
163                        $cache['plugin'] = '';
164                        $cache['alias'] = '';
165                        $cache['manuelle'] = false;
166
167                        lire_fichier($_fichier, $contenu);
168                        $convertir = charger_fonction('simplexml_to_array', 'inc');
169                        $converti = $convertir(simplexml_load_string($contenu), false);
170                        $tableau = $converti['root'];
171                        if ($cache['nom'] == 'boussoles.xml') {
172                                // C'est le cache qui liste les boussoles hébergées
173                                $cache['description'] = _T('boussole:info_cache_boussoles');
174                                if  (isset($tableau['name'])
175                                AND ($tableau['name'] == 'boussoles')) {
176                                        $cache['sha'] = $tableau['attributes']['sha'];
177                                }
178                        }
179                        else {
180                                // C'est le cache d'une boussole hébergée
181                                $alias_boussole = str_replace('boussole-', '', basename($_fichier, '.xml'));
182                                $cache['alias'] = $alias_boussole;
183                                $cache['description'] = _T('boussole:info_cache_boussole', array('boussole' => $alias_boussole));
184                                if  (isset($tableau['name'])
185                                AND ($tableau['name'] == 'boussole')) {
186                                        $cache['sha'] = $tableau['attributes']['sha'];
187                                        $cache['nom'] .= " ({$tableau['attributes']['version']})";
188                                }
189                                if (isset($boussoles[$alias_boussole]['prefixe'])
190                                AND ($boussoles[$alias_boussole]['prefixe'])) {
191                                        // Boussole utilisant un plugin
192                                        $informer = charger_fonction('informer_plugin', 'inc');
193                                        $infos = $informer($boussoles[$alias_boussole]['prefixe']);
194                                        if ($infos)
195                                                $cache['plugin'] = "{$infos['nom']} ({$boussoles[$alias_boussole]['prefixe']}/{$infos['version']})";
196                                }
197                                else {
198                                        // Boussole n'utilisant pas un plugin, nommée boussole manuelle
199                                        $cache['manuelle'] = true;
200                                        $cache['plugin'] = _T('boussole:info_boussole_manuelle');
201
202                                        // Ajout de la version dans le fichier XML source de la boussole
203                                        $fichier_source = find_in_path("boussole_traduite-${alias_boussole}.xml");
204                                        lire_fichier($fichier_source, $contenu_source);
205                                        $tableau_source = $convertir(simplexml_load_string($contenu_source), false);
206                                        $tableau_source = $tableau_source['root'];
207                                        if  (isset($tableau_source['name'])
208                                        AND ($tableau_source['name'] == 'boussole')) {
209                                                $cache['plugin'] .= " ({$tableau_source['attributes']['version']})";
210                                        }
211                                }
212                        }
213                        $caches[] = $cache;
214                }
215        }
216
217        return $caches;
218}
219
220
221/**
222 * Récupération du nombre de boussoles hébergées sur le site serveur.
223 *
224 * @api
225 * @filtre boussole_compteur_hebergement
226 * @pipeline_appel declarer_boussoles()
227 *
228 * @return int
229 */
230function boussole_compteur_hebergement() {
231        include_spip('inc/config');
232        $boussoles = lire_config('boussole/serveur/boussoles_disponibles');
233        $boussoles = pipeline('declarer_boussoles', $boussoles);
234
235        return count($boussoles);
236}
237
238?>
Note: See TracBrowser for help on using the repository browser.