source: spip-zone/_plugins_/bandeau/inc/bandeau.php

Last change on this file was 104327, checked in by spip.franck@…, 22 months ago

code.spip est maintenant en https, donc, j'ajoute le "s" à http

File size: 12.6 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2009                                                *
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
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15include_spip('inc/boutons');
16
17function definir_barre_contexte(){
18        $contexte = $_GET;
19        if (!isset($contexte['id_rubrique'])){
20                foreach(array('article','site','breve') as $type) {
21                        $_id = id_table_objet($type);
22                        if ($id = _request($_id,$contexte)){
23                                $table = table_objet_sql($type);
24                                $id_rubrique = sql_getfetsel('id_rubrique',$table,"$_id=".intval($id));
25                                $contexte['id_rubrique'] = $id_rubrique;
26                                continue;
27                        }
28                }
29        }
30        return $contexte;
31}
32
33
34/**
35 * definir la liste des boutons du haut et de ses sous-menus
36 * On defini les boutons a mettre selon les droits de l'utilisateur
37 * puis on balance le tout au pipeline "ajouter_boutons" pour que des plugins
38 * puissent y mettre leur grain de sel
39 *
40 * @param array $contexte
41 * @param bool $icones // rechercher les icones
42 * @param bool $autorise // ne renvoyer que les boutons autorises
43 * @return array
44 */
45function definir_barre_boutons($contexte=array(),$icones = true, $autorise = true) {
46    include_spip('inc/autoriser');
47        $boutons_admin=array();
48
49        // ajouter les boutons issus des plugin via plugin.xml
50        // avant l'icone de configuration
51        if (function_exists('boutons_plugins')
52          AND is_array($liste_boutons_plugins = boutons_plugins())){
53                // On traite en premier les boutons principaux
54                // car certains enfants peuvent �tre d�finis avant leur parent dans $liste_boutons_plugins
55                foreach($liste_boutons_plugins as $id => $infos){
56                        // les boutons principaux ne sont pas soumis a autorisation
57                        if (!($parent = $infos['parent']) 
58                        // provisoire, eviter les vieux boutons
59                        AND (!in_array($id,array('forum','statistiques_visites')))
60                        ){
61                                $position = $infos['position']?$infos['position']:count($boutons_admin);
62                                $boutons_admin = array_slice($boutons_admin,0,$position)
63                                +array($id=> new Bouton(
64                                  ($icones AND $infos['icone'])?find_in_theme($infos['icone']):'',  // icone
65                                  $infos['titre'],      // titre
66                                  $infos['url']?$infos['url']:null,
67                                  $infos['args']?$infos['args']:null
68                                  ))
69                                + array_slice($boutons_admin,$position,100);
70                        }
71                }
72                // On traite les enfants, selon les droits utilisateurs
73                foreach($liste_boutons_plugins as $id => $infos){
74                        if ($parent = $infos['parent'] AND isset($boutons_admin[$parent]) AND (!$autorise OR autoriser('bouton',$id,0,NULL,array('contexte'=>$contexte)))){
75                                if (!is_array($boutons_admin[$parent]->sousmenu))
76                                        $boutons_admin[$parent]->sousmenu = array();
77                                $position = (strlen($infos['position'])?intval($infos['position']):count($boutons_admin[$parent]->sousmenu));
78                                $boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu,0,$position)
79                                + array($id=> new Bouton(
80                                  ($icones AND $infos['icone'])?find_in_theme($infos['icone']):'',  // icone
81                                  $infos['titre'],      // titre
82                                  $infos['url']?$infos['url']:null,
83                                  $infos['args']?$infos['args']:null
84                                  ))
85                                + array_slice($boutons_admin[$parent]->sousmenu,$position,100);
86                        }
87                }
88        }
89
90        return pipeline('ajouter_boutons', $boutons_admin);
91}
92
93/**
94 * Creer l'url a partir de exec et args, sauf si c'est deja une url formatee
95 *
96 * @param string $url
97 * @param string $args
98 * @return string
99 */
100// https://code.spip.net/@bandeau_creer_url
101function bandeau_creer_url($url, $args="", $contexte=null){
102        if (!preg_match(',[\/\?],',$url)) {
103                $url = generer_url_ecrire($url,$args,true);
104                // recuperer les parametres du contexte demande par l'url sous la forme
105                // &truc=@machin@
106                // @machin@ etant remplace par _request('machin')
107                $url = str_replace('&amp;','&',$url);
108                while (preg_match(",[&?]([a-z_]+)=@([a-z_]+)@,i",$url,$matches)){
109                        $val = _request($matches[2],$contexte);
110                        $url = parametre_url($url,$matches[1],$val?$val:'','&');
111                }
112                $url = str_replace('&','&amp;',$url);
113        }
114        return $url;
115}
116
117/**
118 * Lister le contenu d'un sous menu dans des elements li de class $class
119 *
120 * @param array $sousmenu
121 * @param string $class
122 * @return string
123 */
124function bando_lister_sous_menu($sousmenu,$contexte=null,$class="",$image=false){
125        $class = $class ? " class='$class'":"";
126        $sous = "";
127        if (is_array($sousmenu)){
128                $sous = "";
129                foreach($sousmenu as $souspage => $sousdetail){
130                        $url = bandeau_creer_url($sousdetail->url?$sousdetail->url:$souspage, $sousdetail->urlArg, $contexte);
131                        if (!$image){
132                                        $sous .= "<li$class>"
133                         . "<a href='$url' class='bando2_$souspage'>"
134                         . _T($sousdetail->libelle)
135                         . "</a>"
136                         . "</li>";
137                        }
138                        else {
139                                        //$image = "<img src='".$sousdetail->icone."' width='".largeur($sousdetail->icone)."' height='".hauteur($sousdetail->icone)."' alt='".attribut_html(_T($sousdetail->libelle))."' />";
140                                        $sous .= "<li$class>"
141                         . "<a href='$url' class='bando2_$souspage' title='".attribut_html(_T($sousdetail->libelle))."'>"
142                         . "<span>"._T($sousdetail->libelle)."</span>"
143                         . "</a>"
144                         . "</li>";
145                        }
146                }
147        }
148        return $sous;
149}
150
151/**
152 * Construire le bandeau de navigation principale de l'espace prive
153 * a partir de la liste des boutons definies dans un tableau d'objets
154 *
155 * @param array $boutons
156 * @return string
157 */
158function bando_navigation($boutons, $contexte = array())
159{
160        $res = "";
161
162        $first = " class = 'first'";
163        foreach($boutons as $page => $detail){
164        // les outils rapides sont traites a part, dans une barre dediee
165        if (!in_array($page,array('outils_rapides','outils_collaboratifs'))){
166
167            // les icones de premier niveau sont ignoree si leur sous menu est vide
168            // et si elles pointent vers exec=navigation
169            if (
170             ($detail->libelle AND is_array($detail->sousmenu) AND count($detail->sousmenu))
171             OR ($detail->libelle AND $detail->url AND $detail->url!='navigation')) {
172                $url = bandeau_creer_url($detail->url?$detail->url:$page, $detail->urlArg,$contexte);
173                $res .= "<li$first>"
174                 . "<a href='$url' id='bando1_$page'>"
175                 . _T($detail->libelle)
176                 . "</a>";
177            }
178
179            $sous = bando_lister_sous_menu($detail->sousmenu, $contexte);
180            $res .= $sous ? "<ul>$sous</ul>":"";
181
182            $res .= "</li>";
183            $first = "";
184        }
185        }
186       
187        // Le bouton pour afficher/masque la barre d'outils
188        $display_outils = isset($GLOBALS['visiteur_session']['prefs']['display_outils'])?$GLOBALS['visiteur_session']['prefs']['display_outils']:'oui';
189        $toggle_texte_h = attribut_html(_T('bando:label_bando_outils_masquer'));
190        $toggle_texte_s = attribut_html(_T('bando:label_bando_outils_afficher'));
191        $toggle_action_h = generer_action_auteur('preferer', 'display_outils:');
192        $toggle_action_s = generer_action_auteur('preferer', 'display_outils:oui');
193        if ($display_outils){
194                $toggle_texte = $toggle_texte_h;
195          $toggle_action = $toggle_action_h;
196        }
197        else{
198                $toggle_texte = $toggle_texte_s;
199          $toggle_action = $toggle_action_s;
200        }
201        $toggle_outils = "<a
202        id='masquer_outils'
203        href='$toggle_action'
204        title='$toggle_texte'
205        onclick='if (jQuery(\"body\").is(\".navigation_avec_outils\")){
206                        jQuery(\"#bando_outils\").slideUp(\"fast\");
207                        $.get(this.href,function(){
208                        $(\"#masquer_outils\").attr(\"href\", \"$toggle_action_s\").attr(\"title\", \"$toggle_texte_s\").children(\"span\").text(\"$toggle_texte_s\");
209                        jQuery(\"body\").removeClass(\"navigation_avec_outils\").addClass(\"navigation_sans_outils\");
210                        });
211                }
212                else{
213                        jQuery(\"#bando_outils\").slideDown(\"fast\");
214                        $.get(this.href,function(){
215                        $(\"#masquer_outils\").attr(\"href\", \"$toggle_action_h\").attr(\"title\", \"$toggle_texte_h\").children(\"span\").text(\"$toggle_texte_h\");
216                        jQuery(\"body\").removeClass(\"navigation_sans_outils\").addClass(\"navigation_avec_outils\");
217                        });
218                } return false;'
219        ><span>$toggle_texte</span></a>";
220
221        return "<div id='bando_navigation'><div class='largeur'><ul class='deroulant'>\n$res</ul>$toggle_outils<div class='nettoyeur'></div></div></div>";
222}
223
224/**
225 * Construire le bandeau identite de l'espace prive
226 *
227 * @return unknown
228 */
229function bando_identite(){
230
231        $nom_site = couper(typo($GLOBALS['meta']['nom_site']),35);
232        $img_info = find_in_theme('images/information-24.png');
233        $url_config_identite = generer_url_ecrire('config_identite');
234
235        $res = "";
236
237        $moi = typo($GLOBALS['visiteur_session']['nom']);
238        $img_langue = find_in_theme('images/langues.png');
239        $url_aide = generer_url_ecrire('aide_index',"var_lang=".$GLOBALS['spip_lang']);
240        $url_lang = generer_url_ecrire('config_langage');
241
242        $res .= "<p class='session'>"
243          . "<a title='"._T('bando:titre_infos_perso')."' href='".
244          //generer_url_ecrire("auteur_infos","id_auteur=".$GLOBALS['visiteur_session']['id_auteur'])
245          generer_url_ecrire("infos_perso")
246          ."'>"
247          . "<strong class='nom'>$moi</strong>"
248          //. " <img alt='"._T('icone_informations_personnelles')."' src='$img_info'/>"
249          . "</a>"
250          . " | "
251          . "<a class='menu_lang' href='$url_lang' title='"._T('bando:titre_config_langage')."'><img alt='"._T('bando:titre_config_langage')."' src='$img_langue'/>".traduire_nom_langue($GLOBALS['spip_lang'])."</a>"
252          . " | "
253          . "<a class='aide' onclick=\"window.open('$url_aide', 'spip_aide', 'scrollbars=yes,resizable=yes,width=740,height=580');return false;\" href='$url_aide'>"._T('icone_aide_ligne')."</a>"
254          . " | "
255          // $auth_can_disconnect?
256          . "<a href='".generer_url_action("logout","logout=prive")."'>"._T('icone_deconnecter')."</a>"
257          . "</p>";
258
259        // informations sur le site
260        $res .= "<p class='nom_site_spip'>"
261          . "<a class='info' title='Informations sur ".textebrut($nom_site)."' href='$url_config_identite'>"
262          . "<strong class='nom'> $nom_site </strong>"
263          //. "<img alt='Informations sur ".textebrut($nom_site)."' src='$img_info' />"
264          ."</a>"
265          . "| "
266          . "<a class='voir' href='"._DIR_RACINE."'>"._T('bando:icone_visiter_site')."</a>"
267          . "</p>";
268
269
270        return "<div id='bando_identite'><div class='largeur'>\n$res<div class='nettoyeur'></div></div></div>";
271
272}
273
274/**
275 * Construire le bandeau des raccourcis rapides
276 *
277 * @param array $boutons
278 * @return string
279 */
280function bando_outils_rapides($boutons, $contexte = array()){
281    $res = "";
282
283
284        // le navigateur de rubriques
285        $img = find_in_theme('images/boussole-24.png');
286        $url = generer_url_ecrire("articles_tous");
287        $res .= "<ul class='bandeau_rubriques deroulant'><li class='boussole'>";
288        $res .= "<a href='$url' id='boutonbandeautoutsite'><img src='$img' width='24' height='24' alt='' /></a>";
289        include_spip('exec/menu_rubriques');
290        $res .= menu_rubriques(false);
291        $res .= "</li></ul>";
292
293        // la barre de raccourcis rapides
294        if (isset($boutons['outils_rapides']))
295                        $res .= "<ul class='rapides creer'>"
296                                . bando_lister_sous_menu($boutons['outils_rapides']->sousmenu,$contexte,'bouton',true)
297                                . "</ul>";
298
299        $res .= "<div id='rapides'>";
300
301        // la barre de raccourcis collaboratifs
302        if (isset($boutons['outils_collaboratifs'])) {
303                $sous_menu = bando_lister_sous_menu($boutons['outils_collaboratifs']->sousmenu,$contexte,'bouton',true);
304                if ($sous_menu)
305                        $res .= "<ul class='rapides collaborer'>"
306                                . $sous_menu
307                                . "</ul>";
308        }
309        $res .= formulaire_recherche("recherche")."</div>";
310       
311        return "<div id='bando_outils'><div class='largeur'>\n$res<div class='nettoyeur'></div></div></div>";
312}
313
314function bando_liens_acces_rapide(){
315        $res = "";
316        $res .= "<a href='#conteneur' onclick='return focus_zone(\"#conteneur\")'>Aller au contenu</a> | ";
317        $res .= "<a href='#bando_navigation' onclick='return focus_zone(\"#bando_navigation\")'>Aller &agrave; la navigation</a> | ";
318        $res .= "<a href='#recherche' onclick='return focus_zone(\"#recherche\")'>Aller &agrave; la recherche</a>";
319
320        return "<div id='bando_liens_rapides'><div class='largeur'>\n$res<div class='nettoyeur'></div></div></div>";
321}
322
323/**
324 * Construire tout le bandeau superieur de l'espace prive
325 *
326 * @param unknown_type $rubrique
327 * @param unknown_type $sous_rubrique
328 * @param unknown_type $largeur
329 * @return unknown
330 */
331function inc_bandeau_dist($rubrique, $sous_rubrique, $largeur)
332{
333        $contexte = definir_barre_contexte();
334        $boutons = definir_barre_boutons($contexte, false);
335        return "<div id='bando_haut'>"
336                . bando_liens_acces_rapide()
337                . bando_identite()
338                . bando_navigation($boutons,$contexte)
339                . bando_outils_rapides($boutons,$contexte)
340                . "</div>"
341                ;
342
343}
344?>
Note: See TracBrowser for help on using the repository browser.