[SPIP] +2.1.12
[velocampus/web/www.git] / www / ecrire / inc / bandeau.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2011 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
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 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 include_spip('inc/boutons');
16
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));
21
22
23 /**
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
28 */
29 // http://doc.spip.org/@definir_barre_boutons
30 function definir_barre_boutons() {
31 global $boutons_admin;
32
33 global $spip_lang, $spip_lang_rtl, $spip_lang_left, $spip_lang_right;
34
35 $boutons_admin=array();
36
37 $boutons_admin['accueil'] = new Bouton(
38 'asuivre-48.png', 'icone_a_suivre');
39
40 $boutons_admin['naviguer'] = new Bouton(
41 "documents-48$spip_lang_rtl.png", 'icone_edition_site');
42
43 if ($GLOBALS['meta']['forum_prive'] != 'non' OR sql_countsel('spip_forum'))
44 $boutons_admin['forum'] = new Bouton(
45 'messagerie-48.png', 'titre_forum');
46
47 $boutons_admin['auteurs'] = new Bouton(
48 'redacteurs-48.png', 'icone_auteurs');
49
50
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');
55 }
56
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');
61 }
62 // autres admins (restreints ou non webmestres) peuvent aller sur les backups
63 else
64 if (autoriser('sauvegarder', 'admin_tech')) {
65 $boutons_admin['admin_tech']=
66 new Bouton('administration-48.png', 'texte_sauvegarde_base');
67 }
68
69 $boutons_admin['espacement']=null;
70
71 $urlAide= generer_url_ecrire('aide_index')."&amp;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');
75
76 $boutons_admin['visiter']=
77 new Bouton("visiter-48$spip_lang_rtl.png", 'icone_visiter_site',
78 url_de_base());
79
80 // les sous menu des boutons, que si on est admin
81 if ($GLOBALS['connect_statut'] == '0minirezo'
82 AND $GLOBALS['connect_toutes_rubriques']) {
83
84 // sous menu edition
85
86 $sousmenu=array();
87
88 $nombre_articles = sql_fetsel('id_article', 'spip_auteurs_articles', "id_auteur=".$GLOBALS['connect_id_auteur']);
89
90 if ($nombre_articles > 0) {
91 $sousmenu['articles_page']=
92 new Bouton('article-24.gif', 'icone_tous_articles');
93 }
94
95 if ($GLOBALS['meta']["activer_breves"] != "non") {
96 $sousmenu['breves']=
97 new Bouton('breve-24.gif', 'icone_breves');
98 }
99
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');
104 }
105
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');
110
111 $n = sql_countsel('spip_documents_liens', 'id_objet>0 AND objet=\'rubrique\'');
112 if ($n) {
113 $sousmenu['documents_liste']=
114 new Bouton('doc-24.gif', 'icone_doc_rubrique');
115 }
116 $boutons_admin['naviguer']->sousmenu= $sousmenu;
117
118 // sous menu forum
119
120 $sousmenu=array();
121
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');
126
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");
133
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"
136 if ($sousmenu) {
137 if (isset($boutons_admin['forum']))
138 $boutons_admin['forum']->sousmenu= $sousmenu;
139 else
140 $boutons_admin['accueil']->sousmenu= $sousmenu;
141 }
142
143
144
145 // sous menu auteurs
146
147 $sousmenu=array();
148
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);
153 }
154
155 $sousmenu['auteur_infos']=
156 new Bouton("auteur-24.gif", "icone_creer_nouvel_auteur", null, 'new=oui');
157
158 $boutons_admin['auteurs']->sousmenu= $sousmenu;
159
160 // sous menu statistiques
161 if (isset($boutons_admin['statistiques_visites'])) {
162 $sousmenu=array(
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")
166 );
167
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");
172
173 $sousmenu['statistiques_referers']=
174 new Bouton("referers-24.gif", "titre_liens_entrants");
175
176 $boutons_admin['statistiques_visites']->sousmenu= $sousmenu;
177 }
178
179 // sous menu configuration
180 if (autoriser('configurer')) {
181 $sousmenu = array();
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
186 }
187
188 if (autoriser('sauvegarder')) {
189 $sousmenu['admin_tech']=
190 new Bouton("base-24.gif", "icone_maintenance_site");
191 }
192 if (autoriser('configurer', 'admin_vider')) {
193 $sousmenu['admin_vider']=
194 new Bouton("cache-24.gif", "onglet_vider_cache");
195 }
196
197 // Si _DIR_PLUGINS est definie a '', pas de bouton
198 if (_DIR_PLUGINS
199 AND autoriser('configurer', 'admin_plugin')) {
200 $sousmenu['admin_plugin']=
201 new Bouton("plugin-24.gif", "icone_admin_plugin");
202 }
203
204 if ($sousmenu)
205 $boutons_admin['configuration']->sousmenu= $sousmenu;
206 }
207
208 } // fin si admin
209
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
221 );
222 if (!$parent) {
223 $b = array();
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
230 ));
231 $b = $b + array($k=>$v);
232 }
233 $boutons_admin = $b;
234 }
235 }
236 }
237 }
238
239 $boutons_admin = pipeline('ajouter_boutons', $boutons_admin);
240 }
241
242 // http://doc.spip.org/@bandeau_creer_url
243 function bandeau_creer_url($url, $args=""){
244 if (preg_match(',[\/\?],',$url))
245 return $url;
246 else
247 return generer_url_ecrire($url,$args);
248 }
249 // http://doc.spip.org/@bandeau_principal
250 function bandeau_principal($rubrique, $sous_rubrique, $largeur)
251 {
252 $res = '';
253 $decal = 0;
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++;
258 }
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'>&nbsp;</span></li>";
263 } else {
264 if ($detail->url)
265 $lien_noscript = bandeau_creer_url($detail->url);
266 else
267 $lien_noscript = generer_url_ecrire($page);
268
269 if ($detail->url2)
270 $lien = bandeau_creer_url($detail->url2);
271 else
272 $lien = $lien_noscript;
273
274 $res .= icone_bandeau_principal(
275 $detail,
276 $lien,
277 $page,
278 $rubrique,
279 $lien_noscript,
280 $page,
281 $sous_rubrique,
282 $largeur,$decal);
283 }
284 $decal += _LARGEUR_ICONES_BANDEAU;
285 }
286
287 return "<div class='h-list centered' style='width:{$largeur}px'><ul>\n$res</ul></div>";
288 }
289
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;
293
294 $alt = $accesskey = $title = '';
295 $texte = _T($detail->libelle);
296 if ($spip_display == 3){
297 $title = " title=\"$texte\"";
298 }
299
300 if (!$menu_accesskey = intval($menu_accesskey)) $menu_accesskey = 1;
301 if ($menu_accesskey < 10) {
302 $accesskey = " accesskey='$menu_accesskey'";
303 $menu_accesskey++;
304 }
305 else if ($menu_accesskey == 10) {
306 $accesskey = " accesskey='0'";
307 $menu_accesskey++;
308 }
309
310 $class_select = " style='width:"._LARGEUR_ICONES_BANDEAU."px' class='menu-item boutons_admin".($sous_rubrique_icone == $sous_rubrique ? " selection" : "")."'";
311
312 if (strncasecmp("javascript:",$lien,11)==0) {
313 $a_href = "\nonclick=\"$lien; return false;\" href='$lien_noscript' ";
314 }
315 else {
316 $a_href = "\nhref=\"$lien\"";
317 }
318
319 $compteur_survol ++;
320
321 if ($spip_display != 1 AND $spip_display != 4) {
322 $class ='cellule48';
323 $texte = "<span class='icon_fond'><span".http_style_background($detail->icone)."></span></span>".($spip_display == 3 ? '' : "<span class='icon_texte'>$texte</span>");
324 } else {
325 $class = 'cellule-texte';
326 }
327
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();\">"
331 . $texte
332 . "</a>\n"
333 . bandeau_principal2($detail->sousmenu,$rubrique, $sous_rubrique, $largeur, $decal)
334 . "</li>\n";
335 }
336
337 // http://doc.spip.org/@bandeau_principal2
338 function bandeau_principal2($sousmenu,$rubrique, $sous_rubrique, $largeur, $decal) {
339
340 $res = '';
341 $coeff_decalage = 0;
342 if ($GLOBALS['browser_name']=="MSIE") $coeff_decalage = 1.0;
343 $largeur_maxi_menu = $largeur-100;
344 $largitem_moy = 85;
345
346 // if (($rubrique == $page) AND (!_SPIP_AJAX)) { $page ??????
347 if ((!_SPIP_AJAX)) {
348 $class = "visible_au_chargement";
349 } else {
350 $class = "invisible_au_chargement";
351 }
352
353
354 if($sousmenu) {
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; }
358
359 $width=0;
360 $max_width=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;
365 $width=0;
366 }
367 $largitem = 0;
368 if($souspage=='espacement') {
369 if ($width>0){
370 $res .= "<li class='separateur' style='width:20px;'></li>\n";
371 }
372 } else {
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
376 );
377 $res .= $html;
378 }
379 $width+=$largitem+10;
380 if($width>$max_width) $max_width+=$largitem;
381 }
382 $res .= "</ul></div>\n";
383 $res = "<div class='bandeau_sec h-list' style='width:{$max_width}px;'><ul>".$res;
384 }
385
386 return $res;
387 }
388
389 //script to show the submenus in IE6, not supporting :hover on li elements
390
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();}
401 else {
402 if (!jQuery('#menu_langues0').siblings('input.lang_ecrire').length){
403 jQuery('#menu_langues0').before('<input type=\"text\" name=\"dummy\" class=\"lang_ecrire\" value=\"\" />');
404 }
405 jQuery('#menu_langues0').hide().siblings('input.lang_ecrire').attr('value',jQuery('#menu_langues0 option').eq(jQuery('#menu_langues0').get(0).selectedIndex).html()).show();
406 }}
407 // --></script>
408 ");
409
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;
414
415 $alt = '';
416 $title = '';
417 $accesskey = '';
418 if ($spip_display == 1) {
419 //$hauteur = 20;
420 $largeur = 80;
421 }
422 else if ($spip_display == 3){
423 //$hauteur = 26;
424 $largeur = 40;
425 $title = "title=\"$texte\"";
426 $alt = $texte;
427 }
428 else {
429 //$hauteur = 68;
430 if (count(explode(" ", $texte)) > 1) $largeur = 80;
431 else $largeur = 70;
432 $alt = "";
433 }
434 if ($aide AND $spip_display != 3) {
435 $largeur += 50;
436 //$texte .= aide($aide);
437 }
438 if ($spip_display != 3 AND strlen($texte)>16) $largeur += 20;
439
440 if (!$menu_accesskey = intval($menu_accesskey)) $menu_accesskey = 1;
441 if ($menu_accesskey < 10) {
442 $accesskey = " accesskey='$menu_accesskey'";
443 $menu_accesskey++;
444 }
445 else if ($menu_accesskey == 10) {
446 $accesskey = " accesskey='0'";
447 $menu_accesskey++;
448 }
449 if ($spip_display == 3) $accesskey_icone = $accesskey;
450
451 $class_select = " class='menu-item".($rubrique_icone != $rubrique ? "" : " selection")."'";
452 $compteur_survol ++;
453
454 $a_href = "<a$accesskey href=\"$lien\"$class_select>";
455
456 if ($spip_display != 1) {
457 $res = "<li class='cellule36' style='width: ".$largeur."px;'>";
458 $res .= $a_href .
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>";
463 }
464 $res .= "</a></li>\n";
465 }
466 else $res = "<li style='width: $largeur" . "px' class='cellule-texte'>$a_href". $texte . "</a></li>\n";
467
468 return array($res, $largeur);
469 }
470
471 function inc_bandeau_dist($rubrique, $sous_rubrique, $largeur)
472 {
473 definir_barre_boutons();
474 return "<div id='bandeau-principal'>\n"
475 . bandeau_principal($rubrique, $sous_rubrique, $largeur)
476 . "</div>" .
477 _JS_ADMIN_IE6;
478 }
479 ?>