3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2014 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
13 if (!defined('_ECRIRE_INC_VERSION')) return;
15 include_spip('inc/boutons');
17 define('_LARGEUR_ICONES_BANDEAU',
18 ((@$GLOBALS['spip_display'] == 3) ?
60 : 80)
19 +
((@$GLOBALS['spip_ecran'] == 'large') ?
30 : 0)
20 +
(($GLOBALS['connect_toutes_rubriques']) ?
0 : 30));
24 * definir la liste des boutons du haut et de ses sous-menus
25 * On defini les boutons a metrtre selon les droits de l'utilisateur
26 * puis on balance le tout au pipeline "ajouter_boutons" pour que des plugins
27 * puissent y mettre leur grain de sel
29 // http://doc.spip.org/@definir_barre_boutons
30 function definir_barre_boutons() {
31 global $boutons_admin;
33 global $spip_lang, $spip_lang_rtl, $spip_lang_left, $spip_lang_right;
35 $boutons_admin=array();
37 $boutons_admin['accueil'] = new Bouton(
38 'asuivre-48.png', 'icone_a_suivre');
40 $boutons_admin['naviguer'] = new Bouton(
41 "documents-48$spip_lang_rtl.png", 'icone_edition_site');
43 if ($GLOBALS['meta']['forum_prive'] != 'non' OR sql_countsel('spip_forum'))
44 $boutons_admin['forum'] = new Bouton(
45 'messagerie-48.png', 'titre_forum');
47 $boutons_admin['auteurs'] = new Bouton(
48 'redacteurs-48.png', 'icone_auteurs');
51 if ($GLOBALS['meta']["activer_statistiques"] != 'non'
52 AND autoriser('voirstats')) {
53 $boutons_admin['statistiques_visites']=
54 new Bouton('statistiques-48.png', 'icone_statistiques_visites');
57 // autoriser('configurer') => forcement admin complet (ou webmestre)
58 if (autoriser('configurer')) {
59 $boutons_admin['configuration']=
60 new Bouton('administration-48.png', 'icone_configuration_site');
62 // autres admins (restreints ou non webmestres) peuvent aller sur les backups
64 if (autoriser('sauvegarder', 'admin_tech')) {
65 $boutons_admin['admin_tech']=
66 new Bouton('administration-48.png', 'texte_sauvegarde_base');
69 $boutons_admin['espacement']=null;
71 $urlAide= generer_url_ecrire('aide_index')."&var_lang=$spip_lang";
72 $boutons_admin['aide_index']=
73 new Bouton('aide-48'.$spip_lang_rtl.'.png', 'icone_aide_ligne',
74 $urlAide, null, "javascript:window.open('$urlAide', 'spip_aide', 'scrollbars=yes,resizable=yes,width=740,height=580');", 'aide_spip');
76 $boutons_admin['visiter']=
77 new Bouton("visiter-48$spip_lang_rtl.png", 'icone_visiter_site',
80 // les sous menu des boutons, que si on est admin
81 if ($GLOBALS['connect_statut'] == '0minirezo'
82 AND $GLOBALS['connect_toutes_rubriques']) {
88 $nombre_articles = sql_fetsel('id_article', 'spip_auteurs_articles', "id_auteur=".$GLOBALS['connect_id_auteur']);
90 if ($nombre_articles > 0) {
91 $sousmenu['articles_page']=
92 new Bouton('article-24.gif', 'icone_tous_articles');
95 if ($GLOBALS['meta']["activer_breves"] != "non") {
97 new Bouton('breve-24.gif', 'icone_breves');
100 $articles_mots = $GLOBALS['meta']['articles_mots'];
101 if ($articles_mots != "non") {
102 $sousmenu['mots_tous']=
103 new Bouton('mot-cle-24.gif', 'icone_mots_cles');
106 $activer_sites = $GLOBALS['meta']['activer_sites'];
107 if ($activer_sites<>'non')
108 $sousmenu['sites_tous']=
109 new Bouton('site-24.gif', 'icone_sites_references');
111 $n = sql_countsel('spip_documents_liens', 'id_objet>0 AND objet=\'rubrique\'');
113 $sousmenu['documents_liste']=
114 new Bouton('doc-24.gif', 'icone_doc_rubrique');
116 $boutons_admin['naviguer']->sousmenu
= $sousmenu;
122 if ($GLOBALS['meta']['forum_prive_admin'] == 'oui'
123 AND autoriser('forum_admin'))
124 $sousmenu['forum_admin']=
125 new Bouton('forum-admin-24.gif', 'icone_forum_administrateur');
127 if (sql_countsel('spip_forum'))
128 $sousmenu['controle_forum']=
129 new Bouton("suivi-forum-24.gif", "icone_suivi_forums");
130 if (sql_countsel('spip_signatures'))
131 $sousmenu['controle_petition']=
132 new Bouton("suivi-petition-24.gif", "icone_suivi_pettions");
134 // Si le forum a ete desactive, mais qu'il y a un sous-menu de suivi
135 // des forums ou des petitions, on colle ce suivi sous le menu "a suivre"
137 if (isset($boutons_admin['forum']))
138 $boutons_admin['forum']->sousmenu
= $sousmenu;
140 $boutons_admin['accueil']->sousmenu
= $sousmenu;
149 if (avoir_visiteurs(true)) {
150 include_spip('exec/auteurs');
151 $sousmenu['auteurs'] =
152 new Bouton("fiche-perso.png", 'icone_afficher_visiteurs', null, "statut=!".AUTEURS_MIN_REDAC
);
155 $sousmenu['auteur_infos']=
156 new Bouton("auteur-24.gif", "icone_creer_nouvel_auteur", null, 'new=oui');
158 $boutons_admin['auteurs']->sousmenu
= $sousmenu;
160 // sous menu statistiques
161 if (isset($boutons_admin['statistiques_visites'])) {
163 //'espacement' => null,// les espacements debloquent si on a des icones sur 2 lignes
164 'statistiques_repartition' =>
165 new Bouton("rubrique-24.gif", "icone_repartition_visites")
168 if ($GLOBALS['meta']['multi_articles'] == 'oui'
169 OR $GLOBALS['meta']['multi_rubriques'] == 'oui')
170 $sousmenu['statistiques_lang']=
171 new Bouton("langues-24.gif", "onglet_repartition_lang");
173 $sousmenu['statistiques_referers']=
174 new Bouton("referers-24.gif", "titre_liens_entrants");
176 $boutons_admin['statistiques_visites']->sousmenu
= $sousmenu;
179 // sous menu configuration
180 if (autoriser('configurer')) {
182 if (autoriser('configurer', 'lang')) {
183 $sousmenu['config_lang'] =
184 new Bouton("langues-24.gif", "icone_gestion_langues");
185 //$sousmenu['espacement'] = null; // les espacements debloquent si on a des icones sur 2 lignes
188 if (autoriser('sauvegarder')) {
189 $sousmenu['admin_tech']=
190 new Bouton("base-24.gif", "icone_maintenance_site");
192 if (autoriser('configurer', 'admin_vider')) {
193 $sousmenu['admin_vider']=
194 new Bouton("cache-24.gif", "onglet_vider_cache");
197 // Si _DIR_PLUGINS est definie a '', pas de bouton
199 AND autoriser('configurer', 'admin_plugin')) {
200 $sousmenu['admin_plugin']=
201 new Bouton("plugin-24.gif", "icone_admin_plugin");
205 $boutons_admin['configuration']->sousmenu
= $sousmenu;
210 // ajouter les boutons issus des plugin via plugin.xml
211 if (function_exists('boutons_plugins')
212 AND is_array($liste_boutons_plugins = boutons_plugins())){
213 foreach($liste_boutons_plugins as $id => $infos){
214 if (autoriser('bouton',$id)){
215 if (($parent = $infos['parent']) && isset($boutons_admin[$parent]))
216 $boutons_admin[$parent]->sousmenu
[$id]= new Bouton(
217 find_in_path($infos['icone']), // icone
218 $infos['titre'], // titre
219 $infos['url']?
$infos['url']:null,
220 $infos['args']?
$infos['args']:null
224 foreach($boutons_admin as $k=>$v){
225 if ($k=='espacement')
226 $b = $b +
array($id=> new Bouton(
227 find_in_path($infos['icone']), // icone
228 $infos['titre'], // titre
229 $infos['url']?
generer_url_ecrire($infos['url'],$infos['args']?
$infos['args']:''):null
231 $b = $b +
array($k=>$v);
239 $boutons_admin = pipeline('ajouter_boutons', $boutons_admin);
242 // http://doc.spip.org/@bandeau_creer_url
243 function bandeau_creer_url($url, $args=""){
244 if (preg_match(',[\/\?],',$url))
247 return generer_url_ecrire($url,$args);
249 // http://doc.spip.org/@bandeau_principal
250 function bandeau_principal($rubrique, $sous_rubrique, $largeur)
254 //cherche les espacement pour determiner leur largeur
255 $num_espacements = 0;
256 foreach($GLOBALS['boutons_admin'] as $page => $detail) {
257 if ($page=='espacement') $num_espacements++
;
259 $larg_espacements = ($largeur-(count($GLOBALS['boutons_admin'])-$num_espacements)*_LARGEUR_ICONES_BANDEAU
)/$num_espacements;
260 foreach($GLOBALS['boutons_admin'] as $page => $detail) {
261 if ($page=='espacement') {
262 $res .= "<li class='cellule48' style='width:".$larg_espacements."px'><span class='menu-item' style='width:"._LARGEUR_ICONES_BANDEAU
."px'> </span></li>";
265 $lien_noscript = bandeau_creer_url($detail->url
);
267 $lien_noscript = generer_url_ecrire($page);
270 $lien = bandeau_creer_url($detail->url2
);
272 $lien = $lien_noscript;
274 $res .= icone_bandeau_principal(
284 $decal +
= _LARGEUR_ICONES_BANDEAU
;
287 return "<div class='h-list centered' style='width:{$largeur}px'><ul>\n$res</ul></div>";
290 // http://doc.spip.org/@icone_bandeau_principal
291 function icone_bandeau_principal($detail, $lien, $rubrique_icone = "vide", $rubrique = "", $lien_noscript = "", $sous_rubrique_icone = "", $sous_rubrique = "",$largeur,$decal){
292 global $spip_display, $menu_accesskey, $compteur_survol;
294 $alt = $accesskey = $title = '';
295 $texte = _T($detail->libelle
);
296 if ($spip_display == 3){
297 $title = " title=\"$texte\"";
300 if (!$menu_accesskey = intval($menu_accesskey)) $menu_accesskey = 1;
301 if ($menu_accesskey < 10) {
302 $accesskey = " accesskey='$menu_accesskey'";
305 else if ($menu_accesskey == 10) {
306 $accesskey = " accesskey='0'";
310 $class_select = " style='width:"._LARGEUR_ICONES_BANDEAU
."px' class='menu-item boutons_admin".($sous_rubrique_icone == $sous_rubrique ?
" selection" : "")."'";
312 if (strncasecmp("javascript:",$lien,11)==0) {
313 $a_href = "\nonclick=\"$lien; return false;\" href='$lien_noscript' ";
316 $a_href = "\nhref=\"$lien\"";
321 if ($spip_display != 1 AND $spip_display != 4) {
323 $texte = "<span class='icon_fond'><span".http_style_background($detail->icone
)."></span></span>".($spip_display == 3 ?
'' : "<span class='icon_texte'>$texte</span>");
325 $class = 'cellule-texte';
328 return "<li style='width: "
329 . _LARGEUR_ICONES_BANDEAU
330 . "px' class='$class boutons_admin'><a$accesskey$a_href$class_select$title onfocus=\"$(this).parent().siblings('li').find('.bandeau_sec').hide();\" onkeypress=\"$(this).siblings('.bandeau_sec').show();\">"
333 . bandeau_principal2($detail->sousmenu
,$rubrique, $sous_rubrique, $largeur, $decal)
337 // http://doc.spip.org/@bandeau_principal2
338 function bandeau_principal2($sousmenu,$rubrique, $sous_rubrique, $largeur, $decal) {
342 if ($GLOBALS['browser_name']=="MSIE") $coeff_decalage = 1.0;
343 $largeur_maxi_menu = $largeur-100;
346 // if (($rubrique == $page) AND (!_SPIP_AJAX)) { $page ??????
348 $class = "visible_au_chargement";
350 $class = "invisible_au_chargement";
355 //offset is not necessary when javascript is active. It can be usefull when js is disabled
356 $offset = (int)round($decal-$coeff_decalage*max(0,($decal+
count($sousmenu)*$largitem_moy-$largeur_maxi_menu)));
357 if ($offset<0){ $offset = 0; }
361 foreach($sousmenu as $souspage => $sousdetail) {
362 if ($width+
1.25*$largitem_moy>$largeur_maxi_menu){
363 $res .= "</ul><ul>\n";
364 if($width>$max_width) $max_width=$width;
368 if($souspage=='espacement') {
370 $res .= "<li class='separateur' style='width:20px;'></li>\n";
373 list($html,$largitem) = icone_bandeau_secondaire (_T($sousdetail->libelle
),
374 bandeau_creer_url($sousdetail->url?
$sousdetail->url
:$souspage, $sousdetail->urlArg
),
375 $sousdetail->icone
, $souspage, $sous_rubrique
379 $width+
=$largitem+
10;
380 if($width>$max_width) $max_width+
=$largitem;
382 $res .= "</ul></div>\n";
383 $res = "<div class='bandeau_sec h-list' style='width:{$max_width}px;'><ul>".$res;
389 //script to show the submenus in IE6, not supporting :hover on li elements
391 define('_JS_ADMIN_IE6', "
392 <script type='text/javascript'><!--
393 var boutons_admin = jQuery('#bandeau-principal li.boutons_admin');
394 if(jQuery.browser.msie) boutons_admin.hover(
395 function(){jQuery(this).addClass('sfhover');change_menu_lang(false);},
396 function(){jQuery(this).removeClass('sfhover');change_menu_lang(true);});
397 boutons_admin.one('mouseover',decaleSousMenu);
398 function change_menu_lang(show){
399 if(!jQuery('#menu_langues0').length) return;
400 if (show) {jQuery('#menu_langues0').show().siblings('input.lang_ecrire').hide();}
402 if (!jQuery('#menu_langues0').siblings('input.lang_ecrire').length){
403 jQuery('#menu_langues0').before('<input type=\"text\" name=\"dummy\" class=\"lang_ecrire\" value=\"\" />');
405 jQuery('#menu_langues0').hide().siblings('input.lang_ecrire').attr('value',jQuery('#menu_langues0 option').eq(jQuery('#menu_langues0').get(0).selectedIndex).html()).show();
410 // http://doc.spip.org/@icone_bandeau_secondaire
411 function icone_bandeau_secondaire($texte, $lien, $fond, $rubrique_icone = "vide", $rubrique, $aide=""){
412 global $spip_display;
413 global $menu_accesskey, $compteur_survol;
418 if ($spip_display == 1) {
422 else if ($spip_display == 3){
425 $title = "title=\"$texte\"";
430 if (count(explode(" ", $texte)) > 1) $largeur = 80;
434 if ($aide AND $spip_display != 3) {
436 //$texte .= aide($aide);
438 if ($spip_display != 3 AND strlen($texte)>16) $largeur +
= 20;
440 if (!$menu_accesskey = intval($menu_accesskey)) $menu_accesskey = 1;
441 if ($menu_accesskey < 10) {
442 $accesskey = " accesskey='$menu_accesskey'";
445 else if ($menu_accesskey == 10) {
446 $accesskey = " accesskey='0'";
449 if ($spip_display == 3) $accesskey_icone = $accesskey;
451 $class_select = " class='menu-item".($rubrique_icone != $rubrique ?
"" : " selection")."'";
454 $a_href = "<a$accesskey href=\"$lien\"$class_select>";
456 if ($spip_display != 1) {
457 $res = "<li class='cellule36' style='width: ".$largeur."px;'>";
459 http_img_pack("$fond", $alt, "$title");
460 if ($aide AND $spip_display != 3) $res .= aide($aide)." ";
461 if ($spip_display != 3) {
462 $res .= "<span>$texte</span>";
464 $res .= "</a></li>\n";
466 else $res = "<li style='width: $largeur" . "px' class='cellule-texte'>$a_href". $texte . "</a></li>\n";
468 return array($res, $largeur);
471 function inc_bandeau_dist($rubrique, $sous_rubrique, $largeur)
473 definir_barre_boutons();
474 return "<div id='bandeau-principal'>\n"
475 . bandeau_principal($rubrique, $sous_rubrique, $largeur)