[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / ecrire / plugins / infos_plugin.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 // lecture d'un texte ecrit en pseudo-xml issu d'un fichier plugin.xml
16 // et conversion approximative en tableau PHP.
17 function plugins_infos_plugin($desc, $plug='', $dir_plugins=_DIR_PLUGINS) {
18 include_spip('inc/xml');
19 $arbre = spip_xml_parse($desc);
20
21 $verifie_conformite = charger_fonction('verifie_conformite','plugins');
22 $verifie_conformite($plug, $arbre, $dir_plugins);
23
24 include_spip('inc/charsets');
25
26 // On renvoie la DTD utilisee
27 $ret['dtd'] = "plugin";
28
29 if (isset($arbre['categorie']))
30 $ret['categorie'] = trim(spip_xml_aplatit($arbre['categorie']));
31 if (isset($arbre['nom']))
32 $ret['nom'] = charset2unicode(spip_xml_aplatit($arbre['nom']));
33 if (isset($arbre['icon']))
34 $ret['logo'] = trim(spip_xml_aplatit($arbre['icon']));
35 if (isset($arbre['auteur']))
36 $ret['auteur'][] = trim(spip_xml_aplatit($arbre['auteur'])); // garder le 1er niveau en tableau mais traiter le multi possible
37 if (isset($arbre['licence']))
38 $ret['licence'][] = trim(spip_xml_aplatit($arbre['licence']));
39 if (isset($arbre['version']))
40 $ret['version'] = trim(spip_xml_aplatit($arbre['version']));
41 if (isset($arbre['version_base']))
42 $ret['schema'] = trim(spip_xml_aplatit($arbre['version_base']));
43 if (isset($arbre['etat']))
44 $ret['etat'] = trim(spip_xml_aplatit($arbre['etat']));
45
46 $ret['description'] = $ret['slogan'] = "";
47 if (isset($arbre['slogan']))
48 $ret['slogan'] = trim(spip_xml_aplatit($arbre['slogan']));
49 if (isset($arbre['description'])){
50 $ret['description'] = trim(spip_xml_aplatit($arbre['description']));
51 }
52
53 if (isset($arbre['lien'])){
54 $ret['documentation'] = trim(join(' ',$arbre['lien']));
55 if ($ret['documentation']) {
56 // le lien de doc doit etre une url et c'est tout
57 if (!preg_match(',^https?://,iS', $ret['documentation']))
58 $ret['documentation'] = "";
59 }
60 }
61
62 if (isset($arbre['options']))
63 $ret['options'] = $arbre['options'];
64 if (isset($arbre['fonctions']))
65 $ret['fonctions'] = $arbre['fonctions'];
66 if (isset($arbre['prefix'][0]))
67 $ret['prefix'] = trim(array_pop($arbre['prefix']));
68 if (isset($arbre['install']))
69 $ret['install'] = $arbre['install'];
70 if (isset($arbre['meta']))
71 $ret['meta'] = trim(spip_xml_aplatit($arbre['meta']));
72
73 $necessite = info_plugin_normalise_necessite($arbre['necessite']);
74 $ret['compatibilite'] = isset($necessite['compatible'])?$necessite['compatible']:'';
75 $ret['necessite'] = $necessite['necessite'];
76 $ret['lib'] = $necessite['lib'];
77 $ret['utilise'] = info_plugin_normalise_utilise($arbre['utilise']);
78 $ret['procure'] = info_plugin_normalise_procure($arbre['procure']);
79 $ret['chemin'] = info_plugin_normalise_chemin($arbre['path']);
80
81 if (isset($arbre['pipeline']))
82 $ret['pipeline'] = $arbre['pipeline'];
83
84 $extraire_boutons = charger_fonction('extraire_boutons','plugins');
85 $les_boutons = $extraire_boutons($arbre);
86 $ret['menu'] = $les_boutons['bouton'];
87 $ret['onglet'] = $les_boutons['onglet'];
88
89 $ret['traduire'] = $arbre['traduire'];
90
91 if (isset($arbre['config']))
92 $ret['config'] = spip_xml_aplatit($arbre['config']);
93 if (isset($arbre['noisette']))
94 $ret['noisette'] = $arbre['noisette'];
95
96 if (isset($arbre['erreur'])) {
97 $ret['erreur'] = $arbre['erreur'];
98 if ($plug) spip_log("infos_plugin $plug " . @join(' ', $arbre['erreur']));
99 }
100
101 return $ret;
102 }
103
104 // Un attribut de nom "id" a une signification particuliere en XML
105 // qui ne correspond pas a l'utilissation qu'en font les plugin.xml
106 // Pour eviter de complexifier la lecture de paquet.xml
107 // qui n'est pour rien dans cette bevue, on doublonne l'information
108 // sous les deux index "nom" et "id" dans l'arbre de syntaxe abstraite
109 // pour compatibilite, mais seul le premier est disponible quand on lit
110 // un paquet.xml, "id" devant etre considere comme obsolete
111
112 /**
113 * Normaliser les description des necessite
114 *
115 * Ajoute les clés
116 * - 'nom' (= id)
117 * - 'compatibilite' (= version)
118 *
119 * @param array $utilise
120 * Liste des necessite trouvés pour le plugin
121 * @return array
122 * Liste des necessite modifiés.
123 */
124 function info_plugin_normalise_necessite($necessite) {
125 $res = array('necessite' => array(), 'lib' => array());
126
127 if (is_array($necessite)) {
128 foreach($necessite as $need) {
129 $id = $need['id'];
130 $v = isset($need['version']) ? $need['version'] : '';
131
132 // Necessite SPIP version x ?
133 if (strtoupper($id)=='SPIP') {
134 $res['compatible'] = $v;
135 } else if (preg_match(',^lib:\s*([^\s]*),i', $id, $r)) {
136 $res['lib'][] = array('nom' => $r[1], 'id' => $r[1], 'lien' => $need['src']);
137 } else $res['necessite'][] = array('id' => $id, 'nom' => $id, 'version' => $v, 'compatibilite' => $v);
138 }
139 }
140
141 return $res;
142 }
143
144 /**
145 * Normaliser la description des utilise
146 *
147 * Ajoute les clés
148 * - 'nom' (= id)
149 * - 'compatibilite' (= version)
150 *
151 * @param array $utilise
152 * Liste des utilise trouvés pour le plugin
153 * @return array
154 * Liste des utilise modifiés.
155 */
156 function info_plugin_normalise_utilise($utilise) {
157 $res = array();
158
159 if (is_array($utilise)) {
160 foreach($utilise as $need){
161 $id = $need['id'];
162 $v = isset($need['version']) ? $need['version'] : '' ;
163 $res[]= array('nom' => $id, 'id' => $id, 'version' => $v, 'compatibilite' => $v);
164 }
165 }
166 return $res;
167 }
168
169 /**
170 * Normaliser la description des procurations
171 *
172 * Ajoute la cle 'nom' (= id)
173 *
174 * @param array $procure
175 * Liste des procure trouvés pour le plugin
176 * @return array
177 * Liste des procure modifiés.
178 */
179 function info_plugin_normalise_procure($procure) {
180 $res = array();
181
182 if (is_array($procure)) {
183 foreach($procure as $need){
184 $id = $need['id'];
185 $v = $need['version'];
186 $res[]= array('nom' => $id, 'id' => $id, 'version' => $v);
187 }
188 }
189 return $res;
190 }
191
192 /**
193 * Normaliser la description du chemin
194 *
195 * Ajoute le clés 'path' (= dir)
196 *
197 * @param array $chemins
198 * Liste des chemins trouvés pour le plugin
199 * @return array
200 * Liste des chemins modifiés.
201 */
202 function info_plugin_normalise_chemin($chemins) {
203 $res = array();
204
205 if (is_array($chemins)) {
206 foreach ($chemins as $c) {
207 $c['path'] = $c['dir'];
208 $res[] = $c;
209 }
210 }
211 return $res;
212 }
213 ?>