/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2016 *
+ * Copyright (c) 2001-2017 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
-if (!defined('_ECRIRE_INC_VERSION')) return;
+/**
+ * Ce fichier gère le bandeau supérieur de l'espace privé
+ *
+ * @package SPIP\Core\Bandeau
+ **/
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+ return;
+}
include_spip('inc/boutons');
-function definir_barre_contexte($contexte = null){
- if (is_null($contexte))
+/**
+ * Calcule le contexte pour le menu du bandeau
+ *
+ * La fonction tente de retrouver la rubrique et le secteur d'appartenance
+ * à partir du nom du fichier exec, si celui ci correspond à un objet
+ * éditorial de SPIP (et qu'il possède ces champs), et dans ce cas,
+ * l'ajoute au contexte.
+ *
+ * @param null|array $contexte
+ * Contexte connu.
+ * S'il n'est pas transmis, on prend `$_GET`
+ * @return array
+ * Contexte
+ **/
+function definir_barre_contexte($contexte = null) {
+ if (is_null($contexte)) {
$contexte = $_GET;
- elseif(is_string($contexte))
+ } elseif (is_string($contexte)) {
$contexte = unserialize($contexte);
- if (!isset($contexte['id_rubrique']) AND isset($contexte['exec'])){
- if (!function_exists('trouver_objet_exec'))
+ }
+ if (!isset($contexte['id_rubrique']) and isset($contexte['exec'])) {
+ if (!function_exists('trouver_objet_exec')) {
include_spip('inc/pipelines_ecrire');
- if ($e=trouver_objet_exec($contexte['exec'])){
+ }
+ if ($e = trouver_objet_exec($contexte['exec'])) {
$_id = $e['id_table_objet'];
- if (isset($contexte[$_id]) AND $id=intval($contexte[$_id])){
+ if (isset($contexte[$_id]) and $id = intval($contexte[$_id])) {
$table = $e['table_objet_sql'];
- $row = sql_fetsel('*',$table,"$_id=".intval($id));
- if (isset($row['id_rubrique'])){
+ $row = sql_fetsel('*', $table, "$_id=" . intval($id));
+ if (isset($row['id_rubrique'])) {
$contexte['id_rubrique'] = $row['id_rubrique'];
- if (isset($row['id_secteur']))
+ if (isset($row['id_secteur'])) {
$contexte['id_secteur'] = $row['id_secteur'];
+ }
}
}
}
}
/**
- * definir la liste des boutons du haut et de ses sous-menus
- * On defini les boutons a metrtre selon les droits de l'utilisateur
+ * Définir la liste des boutons du haut et de ses sous-menus
+ *
+ * On defini les boutons à mettre selon les droits de l'utilisateur
* puis on balance le tout au pipeline "ajouter_menus" pour que des plugins
* puissent y mettre leur grain de sel
*
* @param array $contexte
- * @param bool $icones // rechercher les icones
- * @param bool $autorise // ne renvoyer que les boutons autorises
+ * @param bool $icones Rechercher les icones
+ * @param bool $autorise Ne renvoyer que les boutons autorisés
* @return array
*/
-function definir_barre_boutons($contexte=array(),$icones = true, $autorise = true) {
- include_spip('inc/autoriser');
- $boutons_admin=array();
+function definir_barre_boutons($contexte = array(), $icones = true, $autorise = true) {
+ include_spip('inc/autoriser');
+ $boutons_admin = array();
// les boutons du core, issus de prive/navigation.xml
$liste_boutons = array();
// ajouter les boutons issus des plugin via plugin.xml
if (function_exists('boutons_plugins')
- AND is_array($liste_boutons_plugins = boutons_plugins()))
+ and is_array($liste_boutons_plugins = boutons_plugins())
+ ) {
$liste_boutons = &$liste_boutons_plugins;
+ }
- foreach($liste_boutons as $id => $infos){
- $parent = "";
+ foreach ($liste_boutons as $id => $infos) {
+ $parent = '';
// les boutons principaux ne sont pas soumis a autorisation
- if (!isset($infos['parent']) OR !($parent = $infos['parent']) OR !$autorise OR autoriser('menu',"_$id",0,NULL,array('contexte'=>$contexte))){
+ if (!isset($infos['parent'])
+ or !($parent = $infos['parent'])
+ or !$autorise
+ or autoriser('menu', "_$id", 0, null, array('contexte' => $contexte))
+ ) {
if ($parent
- AND $parent = preg_replace(',^bando_,','menu_',$parent)
- AND isset($boutons_admin[$parent])){
- if (!is_array($boutons_admin[$parent]->sousmenu))
+ and $parent = preg_replace(',^bando_,', 'menu_', $parent)
+ and isset($boutons_admin[$parent])
+ ) {
+ if (!is_array($boutons_admin[$parent]->sousmenu)) {
$boutons_admin[$parent]->sousmenu = array();
- $position = (isset($infos['position']) AND strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu);
- if ($position<0) $position = count($boutons_admin[$parent]->sousmenu)+1+$position;
- $boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu,0,$position)
- + array($id=> new Bouton(
- ($icones AND $infos['icone'])?find_in_theme($infos['icone']):'', // icone
- $infos['titre'], // titre
- (isset($infos['action']) AND $infos['action'])?$infos['action']:null,
- (isset($infos['parametres']) AND $infos['parametres'])?$infos['parametres']:null
- ))
- + array_slice($boutons_admin[$parent]->sousmenu,$position,100);
+ }
+ $position = (isset($infos['position']) and strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu);
+ if ($position < 0) {
+ $position = count($boutons_admin[$parent]->sousmenu) + 1 + $position;
+ }
+ $boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu, 0, $position)
+ + array(
+ $id => new Bouton(
+ ($icones and !empty($infos['icone'])) ? find_in_theme($infos['icone']) : '', // icone
+ $infos['titre'], // titre
+ (isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
+ (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
+ )
+ )
+ + array_slice($boutons_admin[$parent]->sousmenu, $position, 100);
}
if (!$parent
- // provisoire, eviter les vieux boutons
- AND (!in_array($id,array('forum','statistiques_visites')))
-
+ // provisoire, eviter les vieux boutons
+ and (!in_array($id, array('forum', 'statistiques_visites')))
+ and (!$autorise or autoriser('menugrandeentree', "_$id", 0, null, array('contexte' => $contexte)))
) {
$position = (isset($infos['position']) and $infos['position']) ? $infos['position'] : count($boutons_admin);
- $boutons_admin = array_slice($boutons_admin,0,$position)
- +array($id=> new Bouton(
- ($icones AND isset($infos['icone']) AND $infos['icone'])?find_in_theme($infos['icone']):'', // icone
- $infos['titre'], // titre
- (isset($infos['action']) AND $infos['action'])?$infos['action']:null,
- (isset($infos['parametres']) AND $infos['parametres'])?$infos['parametres']:null
- ))
- + array_slice($boutons_admin,$position,100);
+ $boutons_admin = array_slice($boutons_admin, 0, $position)
+ + array(
+ $id => new Bouton(
+ ($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '', // icone
+ $infos['titre'], // titre
+ (isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
+ (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
+ )
+ )
+ + array_slice($boutons_admin, $position, 100);
}
}
}
+ $boutons_admin = pipeline('ajouter_menus', $boutons_admin);
- return pipeline('ajouter_menus', $boutons_admin);
+ // définir les favoris et positions d’origine
+ if ($boutons_admin) {
+ $menus_favoris = obtenir_menus_favoris();
+ $i = 1;
+ foreach ($boutons_admin as $key => $menu) {
+ $menu->favori = table_valeur($menus_favoris, $key, false);
+ $menu->position = $i++;
+ if ($menu->sousmenu) {
+ $j = 1;
+ foreach ($menu->sousmenu as $key => $bouton) {
+ $bouton->favori = table_valeur($menus_favoris, $key, false);
+ $bouton->position = $j++;
+ }
+ }
+ }
+ }
+
+ return $boutons_admin;
}
/**
- * Creer l'url a partir de exec et args, sauf si c'est deja une url formatee
+ * Trie les entrées des sous menus par ordre alhabétique
+ *
+ * @param Bouton[] $menus
+ * @param bool $avec_favoris
+ * Si true, tri en premier les sous menus favoris, puis l'ordre alphabétique
+ * @return Bouton[]
+ */
+function trier_boutons_enfants_par_alpha($menus, $avec_favoris = false) {
+ foreach ($menus as $menu) {
+ if ($menu->sousmenu) {
+ $libelles = $isfavoris = $favoris = array();
+ foreach ($menu->sousmenu as $key => $item) {
+ $libelles[$key] = strtolower(translitteration(_T($item->libelle)));
+ $isfavoris[$key] = (bool)$item->favori;
+ $favoris[$key] = $item->favori;
+ }
+ if ($avec_favoris) {
+ array_multisort($isfavoris, SORT_DESC, $favoris, SORT_ASC, $libelles, SORT_ASC, $menu->sousmenu);
+ } else {
+ array_multisort($libelles, SORT_ASC, $menu->sousmenu);
+ }
+ }
+ }
+ return $menus;
+}
+
+/**
+ * Trie les entrées des sous menus par favoris (selon leur ordre) puis les autres par ordre alhabétique
+ *
+ * @uses trier_boutons_enfants_par_alpha()
+ * @param Bouton[] $menus
+ * @return Bouton[]
+ */
+function trier_boutons_enfants_par_favoris_alpha($menus) {
+ return trier_boutons_enfants_par_alpha($menus, true);
+}
+
+
+/**
+ * Créer l'URL à partir de exec et args, sauf si c'est déjà une url formatée
*
* @param string $url
* @param string $args
+ * @param array|null $contexte
* @return string
*/
-// http://doc.spip.org/@bandeau_creer_url
-function bandeau_creer_url($url, $args="", $contexte=null){
- if (!preg_match(',[\/\?],',$url)) {
- $url = generer_url_ecrire($url,$args,true);
+function bandeau_creer_url($url, $args = '', $contexte = null) {
+ if (!preg_match(',[\/\?],', $url)) {
+ $url = generer_url_ecrire($url, $args, true);
// recuperer les parametres du contexte demande par l'url sous la forme
// &truc=@machin@
// @machin@ etant remplace par _request('machin')
- $url = str_replace('&','&',$url);
- while (preg_match(",[&?]([a-z_]+)=@([a-z_]+)@,i",$url,$matches)){
- if ($matches[2]=='id_secteur' AND !isset($contexte['id_secteur']) AND isset($contexte['id_rubrique']))
- $contexte['id_secteur'] = sql_getfetsel('id_secteur','spip_rubriques','id_rubrique='.intval($contexte['id_rubrique']));
- $val = _request($matches[2],$contexte);
- $url = parametre_url($url,$matches[1],$val?$val:'','&');
+ $url = str_replace('&', '&', $url);
+ while (preg_match(',[&?]([a-z_]+)=@([a-z_]+)@,i', $url, $matches)) {
+ if ($matches[2] == 'id_secteur' and !isset($contexte['id_secteur']) and isset($contexte['id_rubrique'])) {
+ $contexte['id_secteur'] = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($contexte['id_rubrique']));
+ }
+ $val = _request($matches[2], $contexte);
+ $url = parametre_url($url, $matches[1], $val ? $val : '', '&');
}
- $url = str_replace('&','&',$url);
+ $url = str_replace('&', '&', $url);
}
+
return $url;
}
-
/**
- * Construire tout le bandeau superieur de l'espace prive
+ * Construire tout le bandeau supérieur de l'espace privé
*
- * @param unknown_type $rubrique
- * @param unknown_type $sous_rubrique
- * @param unknown_type $largeur
- * @return unknown
+ * @return string
+ * Code HTML du bandeau
*/
function inc_bandeau_dist() {
- return recuperer_fond('prive/squelettes/inclure/barre-nav',$_GET);
+ return recuperer_fond('prive/squelettes/inclure/barre-nav', $_GET);
}
-?>
+
+/**
+ * Retourne la liste des noms d'entrées de menus favoris de l'auteur connecté
+ * @return array
+ */
+function obtenir_menus_favoris() {
+ if (
+ isset($GLOBALS['visiteur_session']['prefs']['menus_favoris'])
+ and is_array($GLOBALS['visiteur_session']['prefs']['menus_favoris'])
+ and $GLOBALS['visiteur_session']['prefs']['menus_favoris']
+ ) {
+ return $GLOBALS['visiteur_session']['prefs']['menus_favoris'];
+ }
+ $definir_menus_favoris = charger_fonction('definir_menus_favoris', 'inc');
+ return $definir_menus_favoris();
+}
\ No newline at end of file