X-Git-Url: http://git.cyclocoop.org/?p=lhc%2Fweb%2Fclavette_www.git;a=blobdiff_plain;f=www%2Fecrire%2Finc%2Fplugin.php;h=442b0a5e79e6c44d4a2d6cf5cbff884bbf41e132;hp=151088975edcf92855de60f48d23016b6e0e09e3;hb=cc641eb476987612f6d6df1a5417c1c5582a8ab8;hpb=7d84a490677fb716a1fd4df260f8eab35f6a8506 diff --git a/www/ecrire/inc/plugin.php b/www/ecrire/inc/plugin.php index 1510889..442b0a5 100644 --- a/www/ecrire/inc/plugin.php +++ b/www/ecrire/inc/plugin.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2014 * + * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -149,89 +149,139 @@ function plugin_version_compatible($intervalle, $version, $avec_quoi = '') { } - -// Construire la liste des infos strictement necessaires aux plugins a activer -// afin de les memoriser dans une meta pas trop grosse -// http://doc.spip.org/@liste_plugin_valides -function liste_plugin_valides($liste_plug, $force = false) -{ +/** + * Construire la liste des infos strictement necessaires aux plugins a activer + * afin de les memoriser dans une meta pas trop grosse + * http://code.spip.net/@liste_plugin_valides + * + * @param array $liste_plug + * @param bool $force + * @return array + */ +function liste_plugin_valides($liste_plug, $force = false){ $liste_ext = liste_plugin_files(_DIR_PLUGINS_DIST); - $get_infos = charger_fonction('get_infos','plugins'); + $get_infos = charger_fonction('get_infos', 'plugins'); $infos = array( // lister les extensions qui sont automatiquement actives '_DIR_PLUGINS_DIST' => $get_infos($liste_ext, $force, _DIR_PLUGINS_DIST), '_DIR_PLUGINS' => $get_infos($liste_plug, $force, _DIR_PLUGINS) - ); + ); // creer une premiere liste non ordonnee mais qui ne retient // que les plugins valides, et dans leur derniere version en cas de doublon - $infos['_DIR_RESTREINT'][''] = $get_infos('./',$force,_DIR_RESTREINT); + $infos['_DIR_RESTREINT'][''] = $get_infos('./', $force, _DIR_RESTREINT); $infos['_DIR_RESTREINT']['SPIP']['version'] = $GLOBALS['spip_version_branche']; $infos['_DIR_RESTREINT']['SPIP']['chemin'] = array(); - $liste_non_classee = array('SPIP'=>array( + $liste_non_classee = array('SPIP' => array( 'nom' => 'SPIP', 'etat' => 'stable', 'version' => $GLOBALS['spip_version_branche'], 'dir_type' => '_DIR_RESTREINT', - 'dir'=> '', + 'dir' => '', ) ); - foreach($liste_ext as $plug){ - if (isset($infos['_DIR_PLUGINS_DIST'][$plug])) - plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_DIST'); + foreach ($liste_ext as $plug){ + if (isset($infos['_DIR_PLUGINS_DIST'][$plug])) + plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_DIST'); } - foreach($liste_plug as $plug) { - if (isset($infos['_DIR_PLUGINS'][$plug])) - plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS'); + foreach ($liste_plug as $plug){ + if (isset($infos['_DIR_PLUGINS'][$plug])) + plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS'); } - if (defined('_DIR_PLUGINS_SUPPL') and _DIR_PLUGINS_SUPPL) { + if (defined('_DIR_PLUGINS_SUPPL') and _DIR_PLUGINS_SUPPL){ $infos['_DIR_PLUGINS_SUPPL'] = $get_infos($liste_plug, false, _DIR_PLUGINS_SUPPL); - foreach($liste_plug as $plug) { + foreach ($liste_plug as $plug){ if (isset($infos['_DIR_PLUGINS_SUPPL'][$plug])) plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_SUPPL'); } } - // les procure de core.xml sont consideres comme des plugins proposes, - // mais surchargeables (on peut activer un plugin qui procure ca pour l'ameliorer, - // donc avec le meme prefixe) - foreach($infos['_DIR_RESTREINT']['']['procure'] as $procure) { - $p = strtoupper($procure['nom']); - if (!isset($liste_non_classee[$p])){ - $procure['etat'] = '?'; - $procure['dir_type'] = '_DIR_RESTREINT'; - $procure['dir'] = ''; - $liste_non_classee[$p] = $procure; - } - } + plugin_fixer_procure($liste_non_classee, $infos); return array($infos, $liste_non_classee); } -// Ne retenir un plugin que s'il est valide -// et dans leur plus recente version compatible -// avec la version presente de SPIP - -function plugin_valide_resume(&$liste, $plug, $infos, $dir) -{ - $i = $infos[$dir][$plug]; +/** + * Ne retenir un plugin que s'il est valide + * et dans leur plus recente version compatible + * avec la version presente de SPIP + * + * @param array $liste + * @param string $plug + * @param array $infos + * @param string $dir_type + */ +function plugin_valide_resume(&$liste, $plug, $infos, $dir_type){ + $i = $infos[$dir_type][$plug]; if (isset($i['erreur']) AND $i['erreur']) return; - if (!plugin_version_compatible($i['compatibilite'], $GLOBALS['spip_version_branche'],'spip')) + if (!plugin_version_compatible($i['compatibilite'], $GLOBALS['spip_version_branche'], 'spip')) return; $p = strtoupper($i['prefix']); if (!isset($liste[$p]) - OR spip_version_compare($i['version'],$liste[$p]['version'],'>')) { + OR spip_version_compare($i['version'], $liste[$p]['version'], '>') + ){ $liste[$p] = array( 'nom' => $i['nom'], 'etat' => $i['etat'], - 'version'=> $i['version'], - 'dir'=> $plug, - 'dir_type' => $dir - ); + 'version' => $i['version'], + 'dir' => $plug, + 'dir_type' => $dir_type + ); + } +} + +/** + * Completer la liste des plugins avec les eventuels procure + * + * les sont consideres comme des plugins proposes, + * mais surchargeables (on peut activer un plugin qui procure ca pour l'ameliorer, + * donc avec le meme prefixe, qui sera pris en compte si il a une version plus grande) + * + * @param array $liste + * @param array $infos + */ +function plugin_fixer_procure(&$liste, &$infos){ + foreach($liste as $p=>$resume){ + $i = $infos[$resume['dir_type']][$resume['dir']]; + if (isset($i['procure']) AND $i['procure']){ + foreach($i['procure'] as $procure){ + $p = strtoupper($procure['nom']); + $dir = $resume['dir']; + if ($dir) $dir .= "/"; + $dir .= "procure:".$procure['nom']; + + $procure['etat'] = '?'; + $procure['dir_type'] = $resume['dir_type']; + $procure['dir'] = $dir; + + // si ce plugin n'est pas deja procure, ou dans une version plus ancienne + // on ajoute cette version a la liste + if (!isset($liste[$p]) + OR spip_version_compare($procure['version'], $liste[$p]['version'], '>') + ){ + $liste[$p] = $procure; + + // on fournit une information minimale pour ne pas perturber la compilation + $infos[$resume['dir_type']][$dir] = array( + 'prefix' => $procure['nom'], + 'nom' => $procure['nom'], + 'etat' => $procure['etat'], + 'version' => $procure['version'], + 'chemin' => array(), + 'necessite' => array(), + 'utilise' => array(), + 'lib' => array(), + 'menu' => array(), + 'onglet' => array(), + 'procure' => array(), + ); + } + } } + } } /** @@ -594,6 +644,7 @@ function plugins_precompile_xxxtions($plugin_valides, $ordre) // donc ni sa relecture, ni sa detection if (!isset($info[$charge]) AND $dir // exclure le cas du plugin "SPIP" + AND strpos($dir,":")===false // exclure le cas des procure: AND file_exists("$dir$plug/paquet.xml") // uniquement pour les paquet.xml ){ if (is_readable("$dir$plug/".($file=$info['prefix']."_".$charge.".php"))){