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

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

paufinage de r79583 (ce qui simplifie un peu le code)

File size: 8.2 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
15include_spip('inc/autoriser'); // pour les pages appelantes et : association_langue, association_aujourdhui,
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'), autoriser('voir_profil','association'), ),
55                array('menu2_titre_gestion_membres', 'annonce.gif', array('adherents'), autoriser('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), autoriser(($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 ( $module[3] ) { // acces autorise au module donc generer 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 ( is_array($aut) && count($aut) ) // autorisation a calculer
119                        $aut = call_user_func_array('autoriser', $aut);
120                elseif ( !is_scalar($aut) ) // pas d'autorisation definie = autorise pour tous
121                        $aut = '';
122                if ( $aut ) { // acces autorise a la page donc generer le raccourci
123                        if (is_array($url))
124                                $url = generer_url_ecrire($url[0],$url[1]);
125                        $res .= association_navigation_raccourci1($titre, $image, $url);
126                }
127        }
128        return association_aujourdhui()
129        . fin_boite_info(TRUE)
130        . ($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)
131}
132
133/**
134 * Dessin d'un raccourci du bloc des raccourcis
135 *
136 * @param string $texte
137 *   Libelle du bouton
138 * @param string $image
139 *   Icone du bouton (place devant le libelle)
140 * @param string $lien
141 *   URL vers lequel revoie le bouton
142 * @return string
143 *   HTML du raccourci (icone+texte+lien)
144 */
145function association_navigation_raccourci1($texte, $image, $lien) {
146        $chemin = _DIR_PLUGIN_ASSOCIATION_ICONES.$image; // icone Associaspip
147        if ( !file_exists($chemin) )
148                $chemin = find_in_path($image); // icone alternative
149        return icone_horizontale(association_langue($texte), $lien, $chemin, 'rien.gif', FALSE); // http://doc.spip.org/@icone_horizontale
150}
151
152/** @} */
153
154
155// Procedures de mise en page des modules
156
157/**
158 * Finition propre des pages privee du plugin
159 *
160 * @param bool $FIN_CADRE_RELIEF
161 *   Indique s'il faut (vrai, par defaut) rajouter ou pas (faux) "fin_cadre_relief"
162 * @return void
163 * @note
164 *   Cette fonction remplace le couplet final :
165 *   echo fin_gauche(), fin_page();
166 *   http://programmer.spip.org/Contenu-d-un-fichier-exec
167 */
168function fin_page_association($FIN_CADRE_RELIEF=TRUE) {
169        if ($FIN_CADRE_RELIEF)
170                echo fin_cadre_relief(true);
171        echo $fin, fin_gauche(), fin_page();
172}
173
174/**
175 * Cadre en relief debutant la colonne centrale/principale essentiellement
176 *
177 * @param string $icone
178 *   Icone associe a la page, souvent celui du module.
179 * @param string $titre
180 *   Chaine de langue du titre
181 * @param bool $DEBUT_DROITE
182 *   Indique s'il faut ajouter (vrai, par defaut) ou pas "debut_droite()" avant
183 * @return void
184 */
185function debut_cadre_association($icone, $titre, $DEBUT_DROITE=TRUE) {
186        if ($DEBUT_DROITE)
187                echo debut_droite('',TRUE);
188        $chemin = _DIR_PLUGIN_ASSOCIATION_ICONES.$icone; // icone Associaspip
189        if ( !file_exists($chemin) )
190                $chemin = find_in_path($icone); // icone alternative
191        debut_cadre_relief($chemin, FALSE, '', association_langue($titre) );
192}
193
194
195?>
Note: See TracBrowser for help on using the repository browser.