source: spip-zone/_plugins_/Associaspip/trunk/association_modules.php @ 79583

Last change on this file since 79583 was 79583, checked in by gildas.cotomale@…, 6 years ago

correction de l'affichage des onglets : les permissions n'étaient pas bien présentées.

File size: 8.5 KB
Line 
1<?php
2/***************************************************************************\
3 *  Associaspip, extension de SPIP pour gestion d'associations
4 *
5 * @copyright Copyright (c) 2007 Bernard Blazin & Francois de Montlivault
6 * @copyright Copyright (c) 2010 Emmanuel Saint-James
7 *
8 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
9\***************************************************************************/
10
11if (!defined('_ECRIRE_INC_VERSION'))
12        return;
13
14include_spip('inc/presentation'); // pour: debut_onglet, fin_onglet, icone_horizontal, onglet
15#include_spip('inc/autoriser'); // utile aux pages appelantes
16
17
18
19/*****************************************
20 * @defgroup association_navigation
21 * Affichage HTML : boutons de navigation intra/inter-modules
22 *
23 * @return string $res
24 *   code HTML du bouton et autres elements connexes
25 * @ note
26 *   Ces elements destines a l'affichage des modules sont dans un fichier separe
27 * qui sera autonome quand il ne fera plus appel a aucune fonction de association_options.php (association_langue association_aujourdhui)
28 * @note
29 *   Les anciens appels de procedure doivent etre remplace par des appel de fonction :
30 * icone1_association : association_navigation_raccourci1
31 * onglets_association : echo association_navigation_onglets
32 * raccourcis_association : echo association_navigation_raccourcis
33** @{ */
34
35/**
36 * Afficher le titre de la/le page/module courante puis (en dessous) les onglets
37 * des differents modules actives dans la configuration
38 *
39 * @param string $titre
40 *   Chaine de langue du titre de la page
41 * @param string $top_exec
42 *   Nom du fichier "exec" de la page principale du module
43 * @param bool $INSERT_HEAD
44 *   Indique s'il s'agit d'une page exec classique en PHP (vrai, par defaut) ou
45 *   en HTML (faux, alors) a compiler par SPIP (cas des balises) ou par le dev
46 * @return string $res
47 *   Debut de la page HTML de l'espace prive
48 */
49function association_navigation_onglets($titre='', $top_exec='', $INSERT_HEAD=TRUE) {
50        $res = '';
51// Recuperation de la liste des ongles
52        // modules natifs toujours actifs
53        $modules_actifs = array(
54                array('menu2_titre_association', 'assoc_qui.png', array('association'), array('voir_profil','association'), ),
55                array('menu2_titre_gestion_membres', 'annonce.gif', array('adherents'), array('voir_membres','association'), ),
56        );
57        // modules natifs actives en configuration
58        foreach ( array('dons'=>'dons-24.gif', 'ventes'=>'ventes.gif', 'activites'=>'activites.gif', 'ressources'=>'pret-24.gif', 'comptes'=>'finances-24.png') as $module=>$icone ) {
59                if ( $GLOBALS['association_metas'][$module=='ressources'?'prets':$module] )
60                        $modules_actifs[] = array("menu2_titre_gestion_$module", $icone, array($module), array(($module='comptes'?'voir_compta':"voir_$module"),'association') );
61        }
62        $modules_externes = pipeline('associaspip', array()); // Tableau des modules ajoutes par d'autres plugins : 'prefixe_plugin'=> array( 0=>array(bouton,onglet,actif), 1=>array(bouton,config,actif) )
63        foreach ( $modules_externes as $plugin=>$boutons ) {
64                if ( test_plugin_actif($plugin) )
65                        $modules_actifs[] = $boutons[0];
66        }
67// Dessin de la liste des ongles
68        $onglets_actifs = '';
69        foreach ($modules_actifs as $module) {
70                if ( association_acces($module[3]) ) { // generation de l'onglet
71                        $chemin = _DIR_PLUGIN_ASSOCIATION_ICONES.$module[1]; // icone Associaspip
72                        if ( !file_exists($chemin) )
73                                $chemin = find_in_path($module[1]); // icone alternative
74                        $onglets_actifs .= onglet(association_langue($module[0]), generer_url_ecrire($module[2][0],$module[2][1]), $top_exec, $module[2][0], $chemin);
75                }
76        }
77// Affichage
78        if ($INSERT_HEAD) { // mettre ''|0|FALSE|NULL dans la balise (appel dans une page HTML-SPIPee donc et non PHP) pour eviter l'erreur de "Double occurrence de INSERT_HEAD"
79                $commencer_page = charger_fonction('commencer_page', 'inc');
80                $res = $commencer_page();
81        }
82        $res .= '<div class="table_page">';
83        $res .= '<h1 class="asso_titre">'. ( $titre?association_langue($titre):_T('asso:gestion_de_lassoc', array('nom'=>$GLOBALS['association_metas']['nom']) ) ) .'</h1>'; // Nom du module. cf:  <http://programmer.spip.org/Contenu-d-un-fichier-exec>
84        if ($onglets_actifs)
85                $res .= '<div class="bandeau_actions barre_onglet clearfix">'. debut_onglet() .$onglets_actifs. fin_onglet() .'</div>'; // Onglets actifs
86        $res .= '</div>';
87        if ($INSERT_HEAD) { // Tant qu'a faire, on s'embete pas a le retaper dans toutes les pages...
88                $res .= debut_gauche('',TRUE);
89                $res .= debut_boite_info(TRUE);
90        }
91        return $res;
92}
93
94/**
95 * Bloc de raccourci(s)
96 *
97 * @param array $raccourcis
98 *   Liste des raccourcis definis chacun sous la forme :
99 *   array('titre', 'icone', array('url_ecrire', 'parametres_url'), array('permission' ...), ),
100 *   toutefois si le 3e element est une chaine, on la prend comme URL
101 * @param string $identifiant
102 *   Identifiant interne de la liste de raccourcis
103 * (attention, les entiers sont reserves a usage interne !
104 * les modules doivent utiliser une chaine alphabetique !)
105 * @return string $res
106 *   Bloc HTML du tableau des raccourcis precede de la fermeture du bloc infos (qui precede toujours dans ce plugin)
107 */
108function association_navigation_raccourcis($raccourcis=array(), $identifiant='') {
109        $res = ''; // initialisation
110        if ($identifiant) { // bloc identifie = extensible
111                foreach ( pipeline('associaspip', array()) as $plugin=>$boutons ) { // Tableau des modules ajoutes par d'autres plugins : 'prefixe_plugin'=> array( 0=>array(bouton,onglet,actif), 1=>array(bouton,config,actif) )
112                        if ( test_plugin_actif($plugin) )
113                                $raccourcis[] = $boutons[$identifiant];
114                }
115        }
116        foreach($raccourcis as $params) {
117                list($titre, $image, $url, $aut) = $params;
118                if ( association_acces($aut) ) { // generation du raccourci
119                        if (is_array($url))
120                                $url = generer_url_ecrire($url[0],$url[1]);
121                        $res .= association_navigation_raccourci1($titre, $image, $url);
122                }
123        }
124        return association_aujourdhui()
125        . fin_boite_info(TRUE)
126        . ($res?bloc_des_raccourcis($res):''); // tester si le tableau est vide (ce qui peut arriver si on n'a l'autorisation pour aucun bouton) et ne pas afficher un bloc sans bouton (c'est disgracieux et troublant)
127}
128
129/**
130 * Dessin d'un raccourci du bloc des raccourcis
131 *
132 * @param string $texte
133 *   Libelle du bouton
134 * @param string $image
135 *   Icone du bouton (place devant le libelle)
136 * @param string $lien
137 *   URL vers lequel revoie le bouton
138 * @return string
139 *   HTML du raccourci (icone+texte+lien)
140 */
141function association_navigation_raccourci1($texte, $image, $lien) {
142        $chemin = _DIR_PLUGIN_ASSOCIATION_ICONES.$image; // icone Associaspip
143        if ( !file_exists($chemin) )
144                $chemin = find_in_path($image); // icone alternative
145        return icone_horizontale(association_langue($texte), $lien, $chemin, 'rien.gif', FALSE); // http://doc.spip.org/@icone_horizontale
146}
147
148/** @} */
149
150
151// Procedures de mise en page des modules
152
153/**
154 * Finition propre des pages privee du plugin
155 *
156 * @param bool $FIN_CADRE_RELIEF
157 *   Indique s'il faut (vrai, par defaut) rajouter ou pas (faux) "fin_cadre_relief"
158 * @return void
159 * @note
160 *   Cette fonction remplace le couplet final :
161 *   echo fin_gauche(), fin_page();
162 *   http://programmer.spip.org/Contenu-d-un-fichier-exec
163 */
164function fin_page_association($FIN_CADRE_RELIEF=TRUE) {
165        if ($FIN_CADRE_RELIEF)
166                echo fin_cadre_relief(true);
167        echo $fin, fin_gauche(), fin_page();
168}
169
170/**
171 * Cadre en relief debutant la colonne centrale/principale essentiellement
172 *
173 * @param string $icone
174 *   Icone associe a la page, souvent celui du module.
175 * @param string $titre
176 *   Chaine de langue du titre
177 * @param bool $DEBUT_DROITE
178 *   Indique s'il faut ajouter (vrai, par defaut) ou pas "debut_droite()" avant
179 * @return void
180 */
181function debut_cadre_association($icone, $titre, $DEBUT_DROITE=TRUE) {
182        if ($DEBUT_DROITE)
183                echo debut_droite('',TRUE);
184        $chemin = _DIR_PLUGIN_ASSOCIATION_ICONES.$icone; // icone Associaspip
185        if ( !file_exists($chemin) )
186                $chemin = find_in_path($icone); // icone alternative
187        debut_cadre_relief($chemin, FALSE, '', association_langue($titre) );
188}
189
190/**
191 * Encapsulation de autoriser()
192 *
193 * @param string|array $aut
194 *   Valeur de l'autorisation
195 *   Liste des composantes de l'autorisation
196 * @return bool
197 *   Autorisation d'acces
198 */
199function association_acces($aut) {
200        if ( is_array($aut) && count($aut) ) { // autorisation a calculer
201                return call_user_func_array('autoriser', $aut);
202        } elseif ( is_scalar($aut) ) { // autorisation deja calculee (chaine ou entier ou booleen, evalue en vrai/faux...)
203                return $aut;
204        } else // pas d'autorisation definie = autorise pour tous
205                return '';
206}
207
208?>
Note: See TracBrowser for help on using the repository browser.