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 function definir_barre_contexte($contexte = null){
18 if (is_null($contexte))
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'];
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
47 * @param array $contexte
48 * @param bool $icones // rechercher les icones
49 * @param bool $autorise // ne renvoyer que les boutons autorises
52 function definir_barre_boutons($contexte=array(),$icones = true, $autorise = true) {
53 include_spip('inc/autoriser');
54 $boutons_admin=array();
56 // les boutons du core, issus de prive/navigation.xml
57 $liste_boutons = array();
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;
64 foreach($liste_boutons as $id => $infos){
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))){
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
82 +
array_slice($boutons_admin[$parent]->sousmenu
,$position,100);
85 // provisoire, eviter les vieux boutons
86 AND (!in_array($id,array('forum','statistiques_visites')))
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
97 +
array_slice($boutons_admin,$position,100);
102 return pipeline('ajouter_menus', $boutons_admin);
106 * Creer l'url a partir de exec et args, sauf si c'est deja une url formatee
109 * @param string $args
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
118 // @machin@ etant remplace par _request('machin')
119 $url = str_replace('&','&',$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:'','&');
126 $url = str_replace('&','&',$url);
133 * Construire tout le bandeau superieur de l'espace prive
135 * @param unknown_type $rubrique
136 * @param unknown_type $sous_rubrique
137 * @param unknown_type $largeur
140 function inc_bandeau_dist() {
141 return recuperer_fond('prive/squelettes/inclure/barre-nav',$_GET);