[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / ecrire / plugins / infos_plugin.php
index 5590ce5..eb7066c 100644 (file)
@@ -3,22 +3,30 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2016                                                *
+ *  Copyright (c) 2001-2017                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-if (!defined('_ECRIRE_INC_VERSION')) return;
+/**
+ * Calculs des informations contenues dans un plugin.xml
+ *
+ * @package SPIP\Core\Plugins
+ **/
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
 // lecture d'un texte ecrit en pseudo-xml issu d'un fichier plugin.xml
 // et conversion approximative en tableau PHP.
-function plugins_infos_plugin($desc, $plug='', $dir_plugins=_DIR_PLUGINS) {
+function plugins_infos_plugin($desc, $plug = '', $dir_plugins = _DIR_PLUGINS) {
        include_spip('inc/xml');
        $arbre = spip_xml_parse($desc);
 
-       $verifie_conformite = charger_fonction('verifie_conformite','plugins');
+       $verifie_conformite = charger_fonction('verifie_conformite', 'plugins');
        $verifie_conformite($plug, $arbre, $dir_plugins);
 
        include_spip('inc/charsets');
@@ -26,178 +34,207 @@ function plugins_infos_plugin($desc, $plug='', $dir_plugins=_DIR_PLUGINS) {
        // On renvoie la DTD utilisee
        $ret['dtd'] = "plugin";
 
-       if (isset($arbre['categorie']))
+       if (isset($arbre['categorie'])) {
                $ret['categorie'] = trim(spip_xml_aplatit($arbre['categorie']));
-       if (isset($arbre['nom']))
+       }
+       if (isset($arbre['nom'])) {
                $ret['nom'] = charset2unicode(spip_xml_aplatit($arbre['nom']));
-       if (isset($arbre['icon']))
+       }
+       if (isset($arbre['icon'])) {
                $ret['logo'] = trim(spip_xml_aplatit($arbre['icon']));
-       if (isset($arbre['auteur']))
-               $ret['auteur'][] = trim(spip_xml_aplatit($arbre['auteur'])); // garder le 1er niveau en tableau mais traiter le multi possible
-       if (isset($arbre['licence']))
+       }
+       if (isset($arbre['auteur'])) {
+               $ret['auteur'][] = trim(spip_xml_aplatit($arbre['auteur']));
+       } // garder le 1er niveau en tableau mais traiter le multi possible
+       if (isset($arbre['licence'])) {
                $ret['licence'][] = trim(spip_xml_aplatit($arbre['licence']));
-       if (isset($arbre['version']))
+       }
+       if (isset($arbre['version'])) {
                $ret['version'] = trim(spip_xml_aplatit($arbre['version']));
-       if (isset($arbre['version_base']))
+       }
+       if (isset($arbre['version_base'])) {
                $ret['schema'] = trim(spip_xml_aplatit($arbre['version_base']));
-       if (isset($arbre['etat']))
+       }
+       if (isset($arbre['etat'])) {
                $ret['etat'] = trim(spip_xml_aplatit($arbre['etat']));
+       }
 
        $ret['description'] = $ret['slogan'] = "";
-       if (isset($arbre['slogan']))
+       if (isset($arbre['slogan'])) {
                $ret['slogan'] = trim(spip_xml_aplatit($arbre['slogan']));
-       if (isset($arbre['description'])){
+       }
+       if (isset($arbre['description'])) {
                $ret['description'] = trim(spip_xml_aplatit($arbre['description']));
        }
 
-       if (isset($arbre['lien'])){
-               $ret['documentation'] = trim(join(' ',$arbre['lien']));
+       if (isset($arbre['lien'])) {
+               $ret['documentation'] = trim(join(' ', $arbre['lien']));
                if ($ret['documentation']) {
                        // le lien de doc doit etre une url et c'est tout
-                       if (!preg_match(',^https?://,iS', $ret['documentation']))
+                       if (!tester_url_absolue($ret['documentation'])) {
                                $ret['documentation'] = "";
+                       }
                }
        }
 
-       if (isset($arbre['options']))
+       if (isset($arbre['options'])) {
                $ret['options'] = $arbre['options'];
-       if (isset($arbre['fonctions']))
+       }
+       if (isset($arbre['fonctions'])) {
                $ret['fonctions'] = $arbre['fonctions'];
-       if (isset($arbre['prefix'][0]))
+       }
+       if (isset($arbre['prefix'][0])) {
                $ret['prefix'] = trim(array_pop($arbre['prefix']));
-       if (isset($arbre['install']))
+       }
+       if (isset($arbre['install'])) {
                $ret['install'] = $arbre['install'];
-       if (isset($arbre['meta']))
+       }
+       if (isset($arbre['meta'])) {
                $ret['meta'] = trim(spip_xml_aplatit($arbre['meta']));
+       }
 
-       $necessite = info_plugin_normalise_necessite($arbre['necessite']);
-       $ret['compatibilite'] = isset($necessite['compatible'])?$necessite['compatible']:'';
+       $necessite = info_plugin_normalise_necessite(isset($arbre['necessite']) ? $arbre['necessite'] : '');
+       $ret['compatibilite'] = isset($necessite['compatible']) ? $necessite['compatible'] : '';
        $ret['necessite'] = $necessite['necessite'];
        $ret['lib'] = $necessite['lib'];
-       $ret['utilise'] = info_plugin_normalise_utilise($arbre['utilise']);
-       $ret['procure'] = info_plugin_normalise_procure($arbre['procure']);
-       $ret['chemin']  = info_plugin_normalise_chemin($arbre['path']);
+       $ret['utilise'] = info_plugin_normalise_utilise(isset($arbre['utilise']) ? $arbre['utilise'] : '');
+       $ret['procure'] = info_plugin_normalise_procure(isset($arbre['procure']) ? $arbre['procure'] : '');
+       $ret['chemin'] = info_plugin_normalise_chemin(isset($arbre['path']) ? $arbre['path'] : '');
 
-       if (isset($arbre['pipeline']))
+       if (isset($arbre['pipeline'])) {
                $ret['pipeline'] = $arbre['pipeline'];
+       }
 
-       $extraire_boutons = charger_fonction('extraire_boutons','plugins');
+       $extraire_boutons = charger_fonction('extraire_boutons', 'plugins');
        $les_boutons = $extraire_boutons($arbre);
        $ret['menu'] = $les_boutons['bouton'];
        $ret['onglet'] = $les_boutons['onglet'];
 
-       $ret['traduire'] = $arbre['traduire'];
-               
-       if (isset($arbre['config']))
+       $ret['traduire'] = isset($arbre['traduire']) ? $arbre['traduire'] : '';
+
+       if (isset($arbre['config'])) {
                $ret['config'] = spip_xml_aplatit($arbre['config']);
-       if (isset($arbre['noisette']))
+       }
+       if (isset($arbre['noisette'])) {
                $ret['noisette'] = $arbre['noisette'];
+       }
 
        if (isset($arbre['erreur'])) {
                $ret['erreur'] = $arbre['erreur'];
-               if ($plug) spip_log("infos_plugin $plug " . @join(' ', $arbre['erreur']));
+               if ($plug) {
+                       spip_log("infos_plugin $plug " . @join(' ', $arbre['erreur']));
+               }
        }
 
        return $ret;
 }
 
-// Un attribut de nom "id" a une signification particuliere en XML
-// qui ne correspond pas a l'utilissation qu'en font les plugin.xml
-// Pour eviter de complexifier la lecture de paquet.xml
-// qui n'est pour rien dans cette bevue, on doublonne l'information
-// sous les deux index "nom" et "id" dans l'arbre de syntaxe abstraite
-// pour compatibilite, mais seul le premier est disponible quand on lit
-// un paquet.xml, "id" devant etre considere comme obsolete
 
 /**
- * Normaliser les description des necessite
- * 
+ * Normaliser les description des balises `necessite`
+ *
  * Ajoute les clés
  * - 'nom' (= id)
  * - 'compatibilite' (= version)
  *
- * @param array $utilise
- *             Liste des necessite trouvés pour le plugin
+ * @note
+ *   Un attribut de nom "id" à une signification particulière en XML
+ *   qui ne correspond pas à l'utilissation qu'en font les plugin.xml.
+ *
+ *   Pour éviter de complexifier la lecture de paquet.xml
+ *   qui n'est pour rien dans cette bévue, on doublonne l'information
+ *   sous les deux index "nom" et "id" dans l'arbre de syntaxe abstraite
+ *   pour compatibilité, mais seul le premier est disponible quand on lit
+ *   un paquet.xml, "id" devant être considéré comme obsolète.
+ *
+ * @param array $necessite
+ *     Liste des necessite trouvés pour le plugin
  * @return array
- *             Liste des necessite modifiés.
+ *     Liste des necessite modifiés.
  */
 function info_plugin_normalise_necessite($necessite) {
        $res = array('necessite' => array(), 'lib' => array());
 
        if (is_array($necessite)) {
-               foreach($necessite as $need) {
+               foreach ($necessite as $need) {
                        $id = $need['id'];
                        $v = isset($need['version']) ? $need['version'] : '';
-                       
+
                        // Necessite SPIP version x ?
-                       if (strtoupper($id)=='SPIP') {
+                       if (strtoupper($id) == 'SPIP') {
                                $res['compatible'] = $v;
-                       } else if (preg_match(',^lib:\s*([^\s]*),i', $id, $r)) {
-                               $res['lib'][] = array('nom' => $r[1], 'id' => $r[1], 'lien' => $need['src']);
-                       } else $res['necessite'][] = array('id' => $id, 'nom' => $id, 'version' => $v, 'compatibilite' => $v);
+                       } else {
+                               if (preg_match(',^lib:\s*([^\s]*),i', $id, $r)) {
+                                       $res['lib'][] = array('nom' => $r[1], 'id' => $r[1], 'lien' => $need['src']);
+                               } else {
+                                       $res['necessite'][] = array('id' => $id, 'nom' => $id, 'version' => $v, 'compatibilite' => $v);
+                               }
+                       }
                }
        }
-       
+
        return $res;
 }
 
 /**
  * Normaliser la description des utilise
- * 
+ *
  * Ajoute les clés
  * - 'nom' (= id)
  * - 'compatibilite' (= version)
  *
  * @param array $utilise
- *             Liste des utilise trouvés pour le plugin
+ *    Liste des utilise trouvés pour le plugin
  * @return array
- *             Liste des utilise modifiés.
+ *    Liste des utilise modifiés.
  */
 function info_plugin_normalise_utilise($utilise) {
        $res = array();
 
        if (is_array($utilise)) {
-               foreach($utilise as $need){
+               foreach ($utilise as $need) {
                        $id = $need['id'];
-                       $v = isset($need['version']) ? $need['version'] : '' ;
-                       $res[]= array('nom' => $id, 'id' => $id, 'version' => $v, 'compatibilite' => $v);
+                       $v = isset($need['version']) ? $need['version'] : '';
+                       $res[] = array('nom' => $id, 'id' => $id, 'version' => $v, 'compatibilite' => $v);
                }
        }
+
        return $res;
 }
 
 /**
  * Normaliser la description des procurations
- * 
+ *
  * Ajoute la cle 'nom' (= id)
  *
  * @param array $procure
- *             Liste des procure trouvés pour le plugin
+ *    Liste des procure trouvés pour le plugin
  * @return array
- *             Liste des procure modifiés.
+ *    Liste des procure modifiés.
  */
 function info_plugin_normalise_procure($procure) {
        $res = array();
 
        if (is_array($procure)) {
-               foreach($procure as $need){
+               foreach ($procure as $need) {
                        $id = $need['id'];
                        $v = $need['version'];
-                       $res[]= array('nom' => $id, 'id' => $id, 'version' => $v);
+                       $res[] = array('nom' => $id, 'id' => $id, 'version' => $v);
                }
        }
+
        return $res;
 }
 
 /**
  * Normaliser la description du chemin
- * 
+ *
  * Ajoute le clés 'path' (= dir)
  *
  * @param array $chemins
- *             Liste des chemins trouvés pour le plugin
+ *    Liste des chemins trouvés pour le plugin
  * @return array
- *             Liste des chemins modifiés.
+ *    Liste des chemins modifiés.
  */
 function info_plugin_normalise_chemin($chemins) {
        $res = array();
@@ -208,6 +245,6 @@ function info_plugin_normalise_chemin($chemins) {
                        $res[] = $c;
                }
        }
+
        return $res;
 }
-?>