Skip to content
Extraits de code Groupes Projets
Valider cc8b2b1c rédigé par cerdic's avatar cerdic
Parcourir les fichiers

suite du decoupage de inc/plugins :

report des fonctions a jour dans les fichiers de plugins/
propagation des charger_fonction partout ou c'est necessaire
parent 6b4ac443
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -18,7 +18,8 @@ function action_desinstaller_plugin_dist() {
$securiser_action = charger_fonction('securiser_action', 'inc');
$plug_file = $securiser_action();
$infos = plugin_get_infos($plug_file);
$get_infos = charger_fonction('get_infos','plugins');
$infos = $get_infos($plug_file);
if (isset($infos['install'])){
// desinstaller
$etat = desinstalle_un_plugin($plug_file,$infos);
......
......@@ -170,13 +170,14 @@ function exec_admin_plugin_dist($retour='') {
// http://doc.spip.org/@affiche_les_plugins
function affiche_les_plugins($liste_plugins, $liste_plugins_actifs, $format='arbre'){
$get_infos = charger_fonction('get_infos','plugins');
# (spip_timer('cachexml'));
if ($format=='liste'){
$liste_plugins = array_flip($liste_plugins);
foreach(array_keys($liste_plugins) as $chemin) {
$info = plugin_get_infos($chemin);
$info = $get_infos($chemin);
$liste_plugins[$chemin] = strtoupper(trim(typo(translitteration(unicode2charset(html2unicode($info['nom']))))));
}
asort($liste_plugins);
......@@ -361,7 +362,8 @@ function ligne_plug($plug_file, $actif, $id){
$erreur = false;
$s = "";
$info = plugin_get_infos($plug_file);
$get_infos = charger_fonction('get_infos','plugins');
$info = $get_infos($plug_file);
// plug pour CFG
if ($actif
......
......@@ -12,7 +12,8 @@ function exec_info_plugin_dist() {
echo minipres();
} else {
$plug = _request('plugin');
$info = plugin_get_infos($plug);
$get_infos = charger_fonction('get_infos','plugins');
$info = $get_infos($plug);
ajax_retour(affiche_bloc_plugin($plug, $info));
}
}
......
......@@ -30,35 +30,6 @@ function definir_barre_contexte(){
return $contexte;
}
function boutons_parse($arbre){
$ret = array('bouton'=>array(),'onglet'=>array());
// recuperer les boutons et onglets si necessaire
spip_xml_match_nodes(",^(bouton|onglet)\s,",$arbre,$les_boutons);
if (is_array($les_boutons) && count($les_boutons)){
$ret['bouton'] = array();
$ret['onglet'] = array();
foreach($les_boutons as $bouton => $val) {
$bouton = spip_xml_decompose_tag($bouton);
$type = reset($bouton);
$bouton = end($bouton);
if (isset($bouton['id'])){
$id = $bouton['id'];
$val = reset($val);
if(is_array($val)){
$ret[$type][$id]['parent'] = isset($bouton['parent'])?$bouton['parent']:'';
$ret[$type][$id]['position'] = isset($bouton['position'])?$bouton['position']:'';
$ret[$type][$id]['titre'] = isset($val['titre'])?trim(spip_xml_aplatit($val['titre'])):'';
$ret[$type][$id]['icone'] = isset($val['icone'])?trim(end($val['icone'])):'';
$ret[$type][$id]['url'] = isset($val['url'])?trim(end($val['url'])):'';
$ret[$type][$id]['args'] = isset($val['args'])?trim(end($val['args'])):'';
}
}
}
}
return $ret;
}
/**
* Construire le tableau qui correspond aux boutons du core
* decrits dans prive/navigation.xml
......@@ -71,9 +42,10 @@ function boutons_core($type='bouton'){
if (
!is_array($ret)
/*OR $GLOBALS['var_mode']='recalcul'*/){
$extraire_boutons = charger_fonction('extraire_boutons','plugins');
include_spip('inc/xml');
$xml = spip_xml_load(find_in_path("prive/navigation.xml"));
$ret = boutons_parse($xml);
$ret = $extraire_boutons($xml);
}
return $ret[$type];
......
......@@ -169,10 +169,12 @@ function liste_plugin_valides($liste_plug, $force = false){
// que les plugins valides, et dans leur derniere version en cas de doublon
$liste_non_classee = array();
$get_infos = charger_fonction('get_infos','plugins');
foreach($listes as $dir_type=>$l){
foreach($l as $k=>$plug) {
// renseigner ce plugin
$infos[$dir_type][$plug] = plugin_get_infos($plug,$force,constant($dir_type));
$infos[$dir_type][$plug] = $get_infos($plug,$force,constant($dir_type));
// si il n'y a pas d'erreur
if (!isset($infos[$dir_type][$plug]['erreur'])) {
// regarder si on a pas deja selectionne le meme plugin dans une autre version
......@@ -610,10 +612,12 @@ function installe_un_plugin($plug,$infos,$dir_plugins = '_DIR_PLUGINS'){
function installe_plugins(){
$meta_plug_installes = array();
$liste = liste_plugin_actifs();
$get_infos = charger_fonction('get_infos','plugins');
foreach ($liste as $prefix=>$resume) {
$plug = $resume['dir'];
$dir_type = $resume['dir_type'];
$infos = plugin_get_infos($plug,false,constant($dir_type));
$infos = $get_infos($plug,false,constant($dir_type));
if (isset($infos['install'])){
$ok = installe_un_plugin($plug,$infos,$dir_type);
// on peut enregistrer le chemin ici car il est mis a jour juste avant l'affichage
......@@ -632,246 +636,6 @@ function plugin_est_installe($plug_path){
return in_array($plug_path,$plugin_installes);
}
// lecture du fichier de configuration d'un plugin
// http://doc.spip.org/@plugin_get_infos
function plugin_get_infos($plug, $force_reload=false, $dir_plugins = _DIR_PLUGINS){
static $infos=array();
static $plugin_xml_cache=NULL;
include_spip('inc/xml');
if (!isset($infos[$dir_plugins][$plug]) OR $force_reload){
if ($plugin_xml_cache==NULL){
$plugin_xml_cache = array();
if (is_file($f=_DIR_TMP."plugin_xml_cache.gz")){
lire_fichier($f,$contenu);
$plugin_xml_cache = unserialize($contenu);
if (!is_array($plugin_xml_cache)) $plugin_xml_cache = array();
}
}
$ret = array();
if (isset($plugin_xml_cache[$dir_plugins][$plug])){
$info = $plugin_xml_cache[$dir_plugins][$plug];
if (!$force_reload
AND isset($info['filemtime'])
AND @file_exists($f = $dir_plugins."$plug/plugin.xml")
AND (@filemtime($f)<=$info['filemtime']))
$ret = $info;
}
if (!count($ret)){
if ((@file_exists($dir_plugins))&&(is_dir($dir_plugins))){
if (@file_exists($f = $dir_plugins."$plug/plugin.xml")) {
$arbre = spip_xml_load($f);
if (!$arbre OR !isset($arbre['plugin']) OR !is_array($arbre['plugin']))
$arbre = array('erreur' => array(_T('erreur_plugin_fichier_def_incorrect')." : $plug/plugin.xml"));
}
else {
// pour arriver ici on l'a vraiment cherche...
$arbre = array('erreur' => array(_T('erreur_plugin_fichier_def_absent')." : $plug/plugin.xml"));
}
plugin_verifie_conformite($plug,$arbre,$dir_plugins);
$ret['nom'] = charset2unicode(spip_xml_aplatit($arbre['nom']));
$ret['version'] = trim(end($arbre['version']));
if (isset($arbre['auteur']))
$ret['auteur'] = spip_xml_aplatit($arbre['auteur']);
if (isset($arbre['icon']))
$ret['icon'] = spip_xml_aplatit($arbre['icon']);
if (isset($arbre['description']))
$ret['description'] = spip_xml_aplatit($arbre['description']);
if (isset($arbre['lien']))
$ret['lien'] = join(' ',$arbre['lien']);
if (isset($arbre['etat']))
$ret['etat'] = trim(end($arbre['etat']));
if (isset($arbre['options']))
$ret['options'] = $arbre['options'];
if (isset($arbre['licence']))
$ret['licence'] = spip_xml_aplatit($arbre['licence']);
if (isset($arbre['install']))
$ret['install'] = $arbre['install'];
if (isset($arbre['fonctions']))
$ret['fonctions'] = $arbre['fonctions'];
$ret['prefix'] = trim(array_pop($arbre['prefix']));
if (isset($arbre['pipeline']))
$ret['pipeline'] = $arbre['pipeline'];
if (isset($arbre['erreur']))
$ret['erreur'] = $arbre['erreur'];
if (isset($arbre['version_base']))
$ret['version_base'] = trim(end($arbre['version_base']));
$ret['necessite'] = $arbre['necessite'];
$ret['utilise'] = $arbre['utilise'];
$ret['path'] = $arbre['path'];
if (isset($arbre['noisette']))
$ret['noisette'] = $arbre['noisette'];
include_spip('inc/bandeau');
$les_boutons = boutons_parse($arbre);
$ret['bouton'] = $les_boutons['bouton'];
$ret['onglet'] = $les_boutons['onglet'];
if ($t=@filemtime($f)){
$ret['filemtime'] = $t;
$plugin_xml_cache[$dir_plugins][$plug]=$ret;
ecrire_fichier(_DIR_TMP."plugin_xml_cache.gz",serialize($plugin_xml_cache));
}
}
}
$infos[$dir_plugins][$plug] = $ret;
}
return $infos[$dir_plugins][$plug];
}
// http://doc.spip.org/@plugin_verifie_conformite
function plugin_verifie_conformite($plug, &$arbre, $dir_plugins = _DIR_PLUGINS){
$silence = false;
$p = null;
// chercher la declaration <plugin spip='...'> a prendre pour cette version de SPIP
if ($n = spip_xml_match_nodes(",^plugin(\s|$),", $arbre, $matches)){
// version de SPIP
$vspip = $GLOBALS['spip_version_branche'].".".$GLOBALS['spip_version_code'];
foreach($matches as $tag=>$sous){
list($tagname,$atts) = spip_xml_decompose_tag($tag);
if ($tagname=='plugin' AND is_array($sous)){
if (!isset($atts['spip'])
OR plugin_version_compatible($atts['spip'],$vspip))
// on prend la derniere declaration avec ce nom
$p = end($sous);
}
}
}
if (is_null($p)){
$arbre = array('erreur' => array(_T('erreur_plugin_tag_plugin_absent')." : $plug/plugin.xml"));
$silence = true;
}
else
$arbre = $p;
if (!is_array($arbre)) $arbre = array();
// verification de la conformite du plugin avec quelques
// precautions elementaires
if (!isset($arbre['nom'])){
if (!$silence)
$arbre['erreur'][] = _T('erreur_plugin_nom_manquant');
$arbre['nom'] = array("");
}
if (!isset($arbre['version'])){
if (!$silence)
$arbre['erreur'][] = _T('erreur_plugin_version_manquant');
$arbre['version'] = array("");
}
if (!isset($arbre['prefix'])){
if (!$silence)
$arbre['erreur'][] = _T('erreur_plugin_prefix_manquant');
$arbre['prefix'] = array("");
}
else{
$prefix = "";
$prefix = trim(end($arbre['prefix']));
if (strtoupper($prefix)=='SPIP'){
$arbre['erreur'][] = _T('erreur_plugin_prefix_interdit');
}
if (isset($arbre['etat'])){
$etat = trim(end($arbre['etat']));
if (!in_array($etat,array('dev','experimental','test','stable')))
$arbre['erreur'][] = _T('erreur_plugin_etat_inconnu')." : $etat";
}
if (isset($arbre['options'])){
foreach($arbre['options'] as $optfile){
$optfile = trim($optfile);
if (!@is_readable($dir_plugins."$plug/$optfile"))
if (!$silence)
$arbre['erreur'][] = _T('erreur_plugin_fichier_absent')." : $optfile";
}
}
if (isset($arbre['fonctions'])){
foreach($arbre['fonctions'] as $optfile){
$optfile = trim($optfile);
if (!@is_readable($dir_plugins."$plug/$optfile"))
if (!$silence)
$arbre['erreur'][] = _T('erreur_plugin_fichier_absent')." : $optfile";
}
}
$fonctions = array();
if (isset($arbre['fonctions']))
$fonctions = $arbre['fonctions'];
$liste_methodes_reservees = array('__construct','__destruct','plugin','install','uninstall',strtolower($prefix));
plugin_pipeline_props($arbre);
foreach($arbre['pipeline'] as $pipe){
if (!isset($pipe['nom']))
if (!$silence)
$arbre['erreur'][] = _T("erreur_plugin_nom_pipeline_non_defini");
if (isset($pipe['action'])) $action = $pipe['action'];
else $action = $pipe['nom'];
// verif que la methode a un nom autorise
if (in_array(strtolower($action),$liste_methodes_reservees)){
if (!$silence)
$arbre['erreur'][] = _T("erreur_plugin_nom_fonction_interdit")." : $action";
}
if (isset($pipe['inclure'])) {
$inclure = $dir_plugins."$plug/".$pipe['inclure'];
if (!@is_readable($inclure))
if (!$silence)
$arbre['erreur'][] = _T('erreur_plugin_fichier_absent')." : $inclure";
}
}
$necessite = array();
if (spip_xml_match_nodes(',^necessite,',$arbre,$needs)){
foreach(array_keys($needs) as $tag){
list($tag,$att) = spip_xml_decompose_tag($tag);
$necessite[] = $att;
}
}
$arbre['necessite'] = $necessite;
$utilise = array();
if (spip_xml_match_nodes(',^utilise,',$arbre,$uses)){
foreach(array_keys($uses) as $tag){
list($tag,$att) = spip_xml_decompose_tag($tag);
$utilise[] = $att;
}
}
$arbre['utilise'] = $utilise;
$path = array();
if (spip_xml_match_nodes(',^chemin,',$arbre,$paths)){
foreach(array_keys($paths) as $tag){
list($tag,$att) = spip_xml_decompose_tag($tag);
$path[] = $att;
}
}
else
$path = array(array('dir'=>'')); // initialiser par defaut
$arbre['path'] = $path;
// exposer les noisettes
if (isset($arbre['noisette'])){
foreach($arbre['noisette'] as $k=>$nut){
$nut = preg_replace(',[.]html$,uims','',trim($nut));
$arbre['noisette'][$k] = $nut;
if (!@is_readable($dir_plugins."$plug/$nut.html"))
if (!$silence)
$arbre['erreur'][] = _T('erreur_plugin_fichier_absent')." : $nut";
}
}
}
}
// http://doc.spip.org/@plugin_pipeline_props
function plugin_pipeline_props(&$arbre){
$pipeline = array();
if (spip_xml_match_nodes(',^pipeline,',$arbre,$pipes)){
foreach($pipes as $tag=>$p){
if (!is_array($p[0])){
list($tag,$att) = spip_xml_decompose_tag($tag);
$pipeline[] = $att;
}
else foreach($p as $pipe){
$att = array();
if (is_array($pipe))
foreach($pipe as $k=>$t)
$att[$k] = trim(end($t));
$pipeline[] = $att;
}
}
unset($arbre[$tag]);
}
$arbre['pipeline'] = $pipeline;
}
// http://doc.spip.org/@verifie_include_plugins
function verifie_include_plugins() {
ecrire_meta('message_crash_plugins', 1);
......
......@@ -36,7 +36,7 @@ function plugins_extraire_pipelines_dist(&$arbre){
}
unset($arbre[$tag]);
}
return $pipeline;
}
......
......@@ -26,10 +26,11 @@ function plugins_get_infos_dist($plug, $force_reload=false, $dir_plugins = _DIR_
include_spip('inc/xml');
static $infos=array();
static $plugin_xml_cache=NULL;
include_spip('inc/xml');
if (!isset($infos[$dir_plugins][$plug]) OR $force_reload){
if ($plugin_xml_cache==NULL){
$plugin_xml_cache = array();
if (is_file($f=_DIR_TMP."plugin_xml.cache")){
if (is_file($f=_DIR_TMP."plugin_xml_cache.gz")){
lire_fichier($f,$contenu);
$plugin_xml_cache = unserialize($contenu);
if (!is_array($plugin_xml_cache)) $plugin_xml_cache = array();
......@@ -45,7 +46,7 @@ function plugins_get_infos_dist($plug, $force_reload=false, $dir_plugins = _DIR_
$ret = $info;
}
if (!count($ret)){
if ((@file_exists($dir_plugins))&&(is_dir($dir_plugins))){
if ((@file_exists($dir_plugins))&&(is_dir($dir_plugins))){
if (@file_exists($f = $dir_plugins."$plug/plugin.xml")) {
$arbre = spip_xml_load($f);
if (!$arbre OR !isset($arbre['plugin']) OR !is_array($arbre['plugin']))
......@@ -99,13 +100,14 @@ function plugins_get_infos_dist($plug, $force_reload=false, $dir_plugins = _DIR_
if ($t=@filemtime($f)){
$ret['filemtime'] = $t;
$plugin_xml_cache[$plug]=$ret;
ecrire_fichier(_DIR_TMP."plugin_xml.cache",serialize($plugin_xml_cache));
$plugin_xml_cache[$dir_plugins][$plug]=$ret;
ecrire_fichier(_DIR_TMP."plugin_xml_cache.gz",serialize($plugin_xml_cache));
}
}
}
$infos[$dir_plugins][$plug] = $ret;
}
return $infos[$dir_plugins][$plug];
}
......
......@@ -12,16 +12,33 @@
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/xml');
include_spip('inc/plugin');
// http://doc.spip.org/@plugin_verifie_conformite
function plugins_verifie_conformite_dist($plug, &$arbre, $dir_plugins = _DIR_PLUGINS){
$silence = false;
if (isset($arbre['plugin']) AND is_array($arbre['plugin']))
$arbre = end($arbre['plugin']); // derniere def plugin
else{
$p = null;
// chercher la declaration <plugin spip='...'> a prendre pour cette version de SPIP
if ($n = spip_xml_match_nodes(",^plugin(\s|$),", $arbre, $matches)){
// version de SPIP
$vspip = $GLOBALS['spip_version_branche'].".".$GLOBALS['spip_version_code'];
foreach($matches as $tag=>$sous){
list($tagname,$atts) = spip_xml_decompose_tag($tag);
if ($tagname=='plugin' AND is_array($sous)){
if (!isset($atts['spip'])
OR plugin_version_compatible($atts['spip'],$vspip))
// on prend la derniere declaration avec ce nom
$p = end($sous);
}
}
}
if (is_null($p)){
$arbre = array('erreur' => array(_T('erreur_plugin_tag_plugin_absent')." : $plug/plugin.xml"));
$silence = true;
}
else
$arbre = $p;
if (!is_array($arbre)) $arbre = array();
// verification de la conformite du plugin avec quelques
// precautions elementaires
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter