/** * Définir la liste des boutons du haut et de ses sous-menus * * On defini les boutons à mettre selon les droits de l'utilisateur * puis on balance le tout au pipeline "ajouter_menus" pour que des plugins * puissent y mettre leur grain de sel * * @param array $contexte * @param bool $icones Rechercher les icones * @param bool $autorise Ne renvoyer que les boutons autorisés * @return array */ function definir_barre_boutons($contexte = array(), $icones = true, $autorise = true) { include_spip('inc/autoriser'); $boutons_admin = array(); // les boutons du core, issus de prive/navigation.xml $liste_boutons = array(); // ajouter les boutons issus des plugin via plugin.xml if (function_exists('boutons_plugins') and is_array($liste_boutons_plugins = boutons_plugins())) { $liste_boutons =& $liste_boutons_plugins; } foreach ($liste_boutons as $id => $infos) { $parent = ""; // les boutons principaux ne sont pas soumis a autorisation if (!isset($infos['parent']) or !($parent = $infos['parent']) or !$autorise or autoriser('menu', "_{$id}", 0, null, array('contexte' => $contexte))) { if ($parent and $parent = preg_replace(',^bando_,', 'menu_', $parent) and isset($boutons_admin[$parent])) { if (!is_array($boutons_admin[$parent]->sousmenu)) { $boutons_admin[$parent]->sousmenu = array(); } $position = (isset($infos['position']) and strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu); if ($position < 0) { $position = count($boutons_admin[$parent]->sousmenu) + 1 + $position; } $boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu, 0, $position) + array($id => new Bouton(($icones and !empty($infos['icone'])) ? find_in_theme($infos['icone']) : '', $infos['titre'], (isset($infos['action']) and $infos['action']) ? $infos['action'] : null, (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null)) + array_slice($boutons_admin[$parent]->sousmenu, $position, 100); } if (!$parent and !in_array($id, array('forum', 'statistiques_visites')) and (!$autorise or autoriser('menugrandeentree', "_{$id}", 0, null, array('contexte' => $contexte)))) { $position = (isset($infos['position']) and $infos['position']) ? $infos['position'] : count($boutons_admin); $boutons_admin = array_slice($boutons_admin, 0, $position) + array($id => new Bouton(($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '', $infos['titre'], (isset($infos['action']) and $infos['action']) ? $infos['action'] : null, (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null)) + array_slice($boutons_admin, $position, 100); } } } return pipeline('ajouter_menus', $boutons_admin); }
function definir_barre_boutons() { global $boutons_admin; global $spip_lang, $spip_lang_rtl, $spip_lang_left, $spip_lang_right; $boutons_admin=array(); $boutons_admin['accueil'] = new Bouton( 'asuivre-48.png', 'icone_a_suivre'); $boutons_admin['naviguer'] = new Bouton( "documents-48$spip_lang_rtl.png", 'icone_edition_site'); if ($GLOBALS['meta']['forum_prive'] != 'non' OR sql_countsel('spip_forum')) $boutons_admin['forum'] = new Bouton( 'messagerie-48.png', 'titre_forum'); $boutons_admin['auteurs'] = new Bouton( 'redacteurs-48.png', 'icone_auteurs'); if ($GLOBALS['meta']["activer_statistiques"] != 'non' AND autoriser('voirstats')) { $boutons_admin['statistiques_visites']= new Bouton('statistiques-48.png', 'icone_statistiques_visites'); } // autoriser('configurer') => forcement admin complet (ou webmestre) if (autoriser('configurer')) { $boutons_admin['configuration']= new Bouton('administration-48.png', 'icone_configuration_site'); } // autres admins (restreints ou non webmestres) peuvent aller sur les backups else if (autoriser('sauvegarder', 'admin_tech')) { $boutons_admin['admin_tech']= new Bouton('administration-48.png', 'texte_sauvegarde_base'); } $boutons_admin['espacement']=null; $urlAide= generer_url_ecrire('aide_index')."&var_lang=$spip_lang"; $boutons_admin['aide_index']= new Bouton('aide-48'.$spip_lang_rtl.'.png', 'icone_aide_ligne', $urlAide, null, "javascript:window.open('$urlAide', 'spip_aide', 'scrollbars=yes,resizable=yes,width=740,height=580');", 'aide_spip'); $boutons_admin['visiter']= new Bouton("visiter-48$spip_lang_rtl.png", 'icone_visiter_site', url_de_base()); // les sous menu des boutons, que si on est admin if ($GLOBALS['connect_statut'] == '0minirezo' AND $GLOBALS['connect_toutes_rubriques']) { // sous menu edition $sousmenu=array(); $nombre_articles = sql_fetsel('id_article', 'spip_auteurs_articles', "id_auteur=".$GLOBALS['connect_id_auteur']); if ($nombre_articles > 0) { $sousmenu['articles_page']= new Bouton('article-24.gif', 'icone_tous_articles'); } if ($GLOBALS['meta']["activer_breves"] != "non") { $sousmenu['breves']= new Bouton('breve-24.gif', 'icone_breves'); } $articles_mots = $GLOBALS['meta']['articles_mots']; if ($articles_mots != "non") { $sousmenu['mots_tous']= new Bouton('mot-cle-24.gif', 'icone_mots_cles'); } $activer_sites = $GLOBALS['meta']['activer_sites']; if ($activer_sites<>'non') $sousmenu['sites_tous']= new Bouton('site-24.gif', 'icone_sites_references'); $n = sql_countsel('spip_documents_liens', 'id_objet>0 AND objet=\'rubrique\''); if ($n) { $sousmenu['documents_liste']= new Bouton('doc-24.gif', 'icone_doc_rubrique'); } $boutons_admin['naviguer']->sousmenu= $sousmenu; // sous menu forum $sousmenu=array(); if ($GLOBALS['meta']['forum_prive_admin'] == 'oui' AND autoriser('forum_admin')) $sousmenu['forum_admin']= new Bouton('forum-admin-24.gif', 'icone_forum_administrateur'); if (sql_countsel('spip_forum')) $sousmenu['controle_forum']= new Bouton("suivi-forum-24.gif", "icone_suivi_forums"); if (sql_countsel('spip_signatures')) $sousmenu['controle_petition']= new Bouton("suivi-petition-24.gif", "icone_suivi_pettions"); // Si le forum a ete desactive, mais qu'il y a un sous-menu de suivi // des forums ou des petitions, on colle ce suivi sous le menu "a suivre" if ($sousmenu) { if (isset($boutons_admin['forum'])) $boutons_admin['forum']->sousmenu= $sousmenu; else $boutons_admin['accueil']->sousmenu= $sousmenu; } // sous menu auteurs $sousmenu=array(); if (avoir_visiteurs(true)) { include_spip('exec/auteurs'); $sousmenu['auteurs'] = new Bouton("fiche-perso.png", 'icone_afficher_visiteurs', null, "statut=!".AUTEURS_MIN_REDAC); } $sousmenu['auteur_infos']= new Bouton("auteur-24.gif", "icone_creer_nouvel_auteur", null, 'new=oui'); $boutons_admin['auteurs']->sousmenu= $sousmenu; // sous menu statistiques if (isset($boutons_admin['statistiques_visites'])) { $sousmenu=array( //'espacement' => null,// les espacements debloquent si on a des icones sur 2 lignes 'statistiques_repartition' => new Bouton("rubrique-24.gif", "icone_repartition_visites") ); if ($GLOBALS['meta']['multi_articles'] == 'oui' OR $GLOBALS['meta']['multi_rubriques'] == 'oui') $sousmenu['statistiques_lang']= new Bouton("langues-24.gif", "onglet_repartition_lang"); $sousmenu['statistiques_referers']= new Bouton("referers-24.gif", "titre_liens_entrants"); $boutons_admin['statistiques_visites']->sousmenu= $sousmenu; } // sous menu configuration if (autoriser('configurer')) { $sousmenu = array(); if (autoriser('configurer', 'lang')) { $sousmenu['config_lang'] = new Bouton("langues-24.gif", "icone_gestion_langues"); //$sousmenu['espacement'] = null; // les espacements debloquent si on a des icones sur 2 lignes } if (autoriser('sauvegarder')) { $sousmenu['admin_tech']= new Bouton("base-24.gif", "icone_maintenance_site"); } if (autoriser('configurer', 'admin_vider')) { $sousmenu['admin_vider']= new Bouton("cache-24.gif", "onglet_vider_cache"); } // Si _DIR_PLUGINS est definie a '', pas de bouton if (_DIR_PLUGINS AND autoriser('configurer', 'admin_plugin')) { $sousmenu['admin_plugin']= new Bouton("plugin-24.gif", "icone_admin_plugin"); } if ($sousmenu) $boutons_admin['configuration']->sousmenu= $sousmenu; } } // fin si admin // ajouter les boutons issus des plugin via plugin.xml if (function_exists('boutons_plugins') AND is_array($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( find_in_path($infos['icone']), // icone $infos['titre'], // titre $infos['url']?$infos['url']:null, $infos['args']?$infos['args']:null ); if (!$parent) { $b = array(); foreach($boutons_admin as $k=>$v){ if ($k=='espacement') $b = $b + array($id=> new Bouton( find_in_path($infos['icone']), // icone $infos['titre'], // titre $infos['url']?generer_url_ecrire($infos['url'],$infos['args']?$infos['args']:''):null )); $b = $b + array($k=>$v); } $boutons_admin = $b; } } } } $boutons_admin = pipeline('ajouter_boutons', $boutons_admin); }