diff --git a/ecrire/inc/boutons.php b/ecrire/inc/boutons.php index bad5457a888c626d80660d2744775f5e72a046e6..8b9b30b526d294a6b2c7e9c832952f9dca2ad565 100644 --- a/ecrire/inc/boutons.php +++ b/ecrire/inc/boutons.php @@ -208,6 +208,28 @@ function definir_barre_boutons() { $boutons_admin['configuration']->sousmenu= $sousmenu; } // fin si admin + + // ajouter les boutons issus des plugin via plugin.xml + if (function_exists('boutons_plugins')){ + $liste_boutons_plugins = boutons_plugins(); + foreach($liste_boutons_plugins as $id => $infos){ + if (autoriser('bouton',$id)){ + if (($parent = $infos['parent']) && isset($boutons_admin[$parent])) + $boutons_admin[$parent]->sousmenu[$id]= new Bouton( + _DIR_PLUGINS . $infos['icone'], // icone + $infos['titre'], // titre + $infos['url']?$infos['url']:null, + $infos['args']?$infos['args']:null + ); + if (!$parent) + $boutons_admin[$id] = new Bouton( + _DIR_PLUGINS . $infos['icone'], // icone + $infos['titre'], // titre + $infos['url']?generer_url_ecrire($infos['url'],$infos['args']?$infos['args']:''):null + ); + } + } + } $boutons_admin = pipeline('ajouter_boutons', $boutons_admin); } diff --git a/ecrire/inc/plugin.php b/ecrire/inc/plugin.php index 8941310452b6563736e17ae6c2094cf0b862a25f..f6a4c98381f1338f311d07915cb0c4083974cf43 100644 --- a/ecrire/inc/plugin.php +++ b/ecrire/inc/plugin.php @@ -244,7 +244,21 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz'){ $start_file = "<"."?php\nif (defined('_ECRIRE_INC_VERSION')) {\n"; $end_file = "}\n?".">"; - + + if (is_array($infos)){ + // construire tableaux de boutons + $liste_boutons = array(); + foreach($infos as $plug=>$info){ + if (isset($info['bouton'])){ + foreach($info['bouton'] as $id=>$conf){ + $conf['icone'] = "$plug/" . $conf['icone']; + $info['bouton'][$id] = $conf; + } + $liste_boutons = array_merge($liste_boutons,$info['bouton']); + } + } + } + // generer les fichier // charger_plugins_options.php // charger_plugins_fonctions.php @@ -279,14 +293,18 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz'){ } } $s .= "error_reporting(SPIP_ERREUR_REPORT);\n"; + if ($charge=='options'){ + $s .= "function boutons_plugins(){return unserialize('".str_replace("'","\'",serialize($liste_boutons))."');}\n"; + } ecrire_fichier(_DIR_TMP."charger_plugins_$charge.php", $start_file . $splugs . $s . $end_file); } if (is_array($infos)){ - // construire tableaux de pipelines et matrices + // construire tableaux de pipelines et matrices et boutons // $GLOBALS['spip_pipeline'] // $GLOBALS['spip_matrice'] + $liste_boutons = array(); foreach($infos as $plug=>$info){ $prefix = ""; $prefix = $info['prefix']."_"; @@ -309,6 +327,7 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz'){ } } } + // on ajoute les pipe qui ont ete recenses manquants foreach($liste_pipe_manquants as $add_pipe) if (!isset($GLOBALS['spip_pipeline'][$add_pipe])) @@ -569,6 +588,25 @@ function plugin_get_infos($plug, $force_reload=false){ $ret['utilise'] = $arbre['utilise']; $ret['path'] = $arbre['path']; + // recuperer les boutons si necessaire + spip_xml_match_nodes(",^bouton\s,",$arbre,$les_boutons); + if (is_array($les_boutons) && count($les_boutons)){ + $ret['bouton'] = array(); + foreach($les_boutons as $bouton => $val) { + $bouton = spip_xml_decompose_tag($bouton); + $bouton = end($bouton); + if (isset($bouton['id'])){ + $id = $bouton['id']; + $ret['bouton'][$id]['parent'] = isset($bouton['parent'])?$bouton['parent']:''; + $val = reset($val); + $ret['bouton'][$id]['titre'] = isset($val['titre'])?trim(end($val['titre'])):''; + $ret['bouton'][$id]['icone'] = isset($val['icone'])?trim(end($val['icone'])):''; + $ret['bouton'][$id]['url'] = isset($val['url'])?trim(end($val['url'])):''; + $ret['bouton'][$id]['args'] = isset($val['url'])?trim(end($val['args'])):''; + } + } + } + if ($t=@filemtime($f)){ $ret['filemtime'] = $t; $plugin_xml_cache[$plug]=$ret;