[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / ecrire / inc / bandeau.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
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 function definir_barre_contexte($contexte = null){
18 if (is_null($contexte))
19 $contexte = $_GET;
20 elseif(is_string($contexte))
21 $contexte = unserialize($contexte);
22 if (!isset($contexte['id_rubrique']) AND isset($contexte['exec'])){
23 if (!function_exists('trouver_objet_exec'))
24 include_spip('inc/pipelines_ecrire');
25 if ($e=trouver_objet_exec($contexte['exec'])){
26 $_id = $e['id_table_objet'];
27 if (isset($contexte[$_id]) AND $id=intval($contexte[$_id])){
28 $table = $e['table_objet_sql'];
29 $row = sql_fetsel('*',$table,"$_id=".intval($id));
30 if (isset($row['id_rubrique'])){
31 $contexte['id_rubrique'] = $row['id_rubrique'];
32 if (isset($row['id_secteur']))
33 $contexte['id_secteur'] = $row['id_secteur'];
34 }
35 }
36 }
37 }
38 return $contexte;
39 }
40
41 /**
42 * definir la liste des boutons du haut et de ses sous-menus
43 * On defini les boutons a metrtre selon les droits de l'utilisateur
44 * puis on balance le tout au pipeline "ajouter_menus" pour que des plugins
45 * puissent y mettre leur grain de sel
46 *
47 * @param array $contexte
48 * @param bool $icones // rechercher les icones
49 * @param bool $autorise // ne renvoyer que les boutons autorises
50 * @return array
51 */
52 function definir_barre_boutons($contexte=array(),$icones = true, $autorise = true) {
53 include_spip('inc/autoriser');
54 $boutons_admin=array();
55
56 // les boutons du core, issus de prive/navigation.xml
57 $liste_boutons = array();
58
59 // ajouter les boutons issus des plugin via plugin.xml
60 if (function_exists('boutons_plugins')
61 AND is_array($liste_boutons_plugins = boutons_plugins()))
62 $liste_boutons = &$liste_boutons_plugins;
63
64 foreach($liste_boutons as $id => $infos){
65 $parent = "";
66 // les boutons principaux ne sont pas soumis a autorisation
67 if (!isset($infos['parent']) OR !($parent = $infos['parent']) OR !$autorise OR autoriser('menu',"_$id",0,NULL,array('contexte'=>$contexte))){
68 if ($parent
69 AND $parent = preg_replace(',^bando_,','menu_',$parent)
70 AND isset($boutons_admin[$parent])){
71 if (!is_array($boutons_admin[$parent]->sousmenu))
72 $boutons_admin[$parent]->sousmenu = array();
73 $position = (isset($infos['position']) AND strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu);
74 if ($position<0) $position = count($boutons_admin[$parent]->sousmenu)+1+$position;
75 $boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu,0,$position)
76 + array($id=> new Bouton(
77 ($icones AND $infos['icone'])?find_in_theme($infos['icone']):'', // icone
78 $infos['titre'], // titre
79 (isset($infos['action']) AND $infos['action'])?$infos['action']:null,
80 (isset($infos['parametres']) AND $infos['parametres'])?$infos['parametres']:null
81 ))
82 + array_slice($boutons_admin[$parent]->sousmenu,$position,100);
83 }
84 if (!$parent
85 // provisoire, eviter les vieux boutons
86 AND (!in_array($id,array('forum','statistiques_visites')))
87
88 ) {
89 $position = (isset($infos['position']) and $infos['position']) ? $infos['position'] : count($boutons_admin);
90 $boutons_admin = array_slice($boutons_admin,0,$position)
91 +array($id=> new Bouton(
92 ($icones AND isset($infos['icone']) AND $infos['icone'])?find_in_theme($infos['icone']):'', // icone
93 $infos['titre'], // titre
94 (isset($infos['action']) AND $infos['action'])?$infos['action']:null,
95 (isset($infos['parametres']) AND $infos['parametres'])?$infos['parametres']:null
96 ))
97 + array_slice($boutons_admin,$position,100);
98 }
99 }
100 }
101
102 return pipeline('ajouter_menus', $boutons_admin);
103 }
104
105 /**
106 * Creer l'url a partir de exec et args, sauf si c'est deja une url formatee
107 *
108 * @param string $url
109 * @param string $args
110 * @return string
111 */
112 // http://doc.spip.org/@bandeau_creer_url
113 function bandeau_creer_url($url, $args="", $contexte=null){
114 if (!preg_match(',[\/\?],',$url)) {
115 $url = generer_url_ecrire($url,$args,true);
116 // recuperer les parametres du contexte demande par l'url sous la forme
117 // &truc=@machin@
118 // @machin@ etant remplace par _request('machin')
119 $url = str_replace('&amp;','&',$url);
120 while (preg_match(",[&?]([a-z_]+)=@([a-z_]+)@,i",$url,$matches)){
121 if ($matches[2]=='id_secteur' AND !isset($contexte['id_secteur']) AND isset($contexte['id_rubrique']))
122 $contexte['id_secteur'] = sql_getfetsel('id_secteur','spip_rubriques','id_rubrique='.intval($contexte['id_rubrique']));
123 $val = _request($matches[2],$contexte);
124 $url = parametre_url($url,$matches[1],$val?$val:'','&');
125 }
126 $url = str_replace('&','&amp;',$url);
127 }
128 return $url;
129 }
130
131
132 /**
133 * Construire tout le bandeau superieur de l'espace prive
134 *
135 * @param unknown_type $rubrique
136 * @param unknown_type $sous_rubrique
137 * @param unknown_type $largeur
138 * @return unknown
139 */
140 function inc_bandeau_dist() {
141 return recuperer_fond('prive/squelettes/inclure/barre-nav',$_GET);
142 }
143
144 ?>