source: spip-zone/_plugins_/Association/Associaspip/exec/adherents.php @ 60835

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

harmonisation d'interface et quelques corrections en passant

File size: 15.7 KB
Line 
1<?php
2/***************************************************************************\
3 *  Associaspip, extension de SPIP pour gestion d'associations             *
4 *                                                                         *
5 *  Copyright (c) 2007 Bernard Blazin & Fran�ois de Montlivault (V1)       *
6 *  Copyright (c) 2010-2011 Emmanuel Saint-James & Jeannot Lapin (V2)       *
7 *                                                                         *
8 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
9 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
10\***************************************************************************/
11
12
13if (!defined('_ECRIRE_INC_VERSION'))
14        return;
15
16include_spip('inc/navigation_modules');
17
18function exec_adherents()
19{
20        if (!autoriser('voir_membres', 'association', 0)) { /* on s'assure qu'il n'y ai pas d'id associe a la demande d'autorisation sur voir_membres car on les consulte tous */
21                include_spip('inc/minipres');
22                echo minipres();
23        } else {
24                /* recuperation des variables */
25                $critere = request_statut_interne(); // peut appeler set_request
26                $statut_interne = _request('statut_interne');
27                $lettre = _request('lettre');
28                onglets_association('titre_onglet_membres');
29                // TOTAUX : effectifs par statuts
30                $membres = $GLOBALS['association_liste_des_statuts'];
31                array_shift($membres); // on sort les anciens membres
32                $liste_libelles = $liste_effectifs = array();
33                foreach ($membres as $statut) {
34                        $classe_css = $GLOBALS['association_styles_des_statuts'][$statut];
35                        $liste_libelles[$classe_css] = _T('asso:adherent_liste_nombre_'.$statut);
36                        $liste_effectifs[$classe_css] = sql_countsel('spip_asso_membres', "statut_interne='$statut'");
37                }
38                echo totauxinfos_effectifs('adherents', $liste_libelles, $liste_effectifs);
39                // TOTAUX : montants des cotisations durant l'annee en cours
40                $data = sql_fetsel('SUM(recette) AS somme_recettes, SUM(depense) AS somme_depenses', 'spip_asso_comptes', "DATE_FORMAT('date', '%Y')=DATE_FORMAT(NOW(), '%Y') AND imputation=".sql_quote($GLOBALS['association_metas']['pc_cotisations']) );
41                echo totauxinfos_montants('cotisations', $data['somme_recettes'], $data['somme_depenses']);
42                // datation et raccourcis
43                if (autoriser('voir_groupes', 'association', 100)) { // l'id groupe passe en parametre est a 100 car ce sont les groupes definis par l'utilisateur et non ceux des autorisation qu'on liste dans cette page.
44                        $res['gerer_les_groupes'] = array('annonce.gif', 'groupes');
45                }
46                $res['menu2_titre_relances_cotisations'] = array('relance-24.png', 'edit_relances');
47                $res['synchronise_asso_membre_lien'] = array('reload-32.png', 'synchroniser_asso_membres');
48                icones_association(array(), $res);
49                if ( test_plugin_actif('FPDF') && test_plugin_actif('COORDONNEES') ) { // etiquettes
50                        echo debut_cadre_enfonce('',true);
51                        echo recuperer_fond('prive/inc_cadre_etiquette');
52                        echo fin_cadre_enfonce(true);
53                }
54                //Filtre ID et groupe : si le filtre id est actif, on ignore le filtre groupe
55                $id = intval(_request('id'));
56                if (!$id) {
57                        $id = _T('asso:adherent_libelle_id_auteur');
58                        //Filtre groupe
59                        $id_groupe = intval(_request('id_groupe'));
60                } else {
61                        $critere = "a.id_auteur=$id";
62                        $id_groupe = 0;
63                }
64                if (test_plugin_actif('FPDF')) {
65                        echo debut_cadre_enfonce('',true);
66                        echo '<h3>'. _T('plugins_vue_liste') .'</h3>';
67                        echo '<div class="formulaire_spip formulaire_asso_listemembres">';
68                        $champs = description_table('spip_asso_membres');
69                        $res = '<ul><li class="edit_champs">';
70                        foreach ($champs['field'] as $k => $v) {
71                                if (!((!$GLOBALS['association_metas']['civilite'] && $k=='sexe') OR (!$GLOBALS['association_metas']['prenom'] && $k=='prenom') OR (!$GLOBALS['association_metas']['id_asso'] && $k=='id_asso'))) {
72                                        $libelle = 'adherent_libelle_'.$k;
73                                        $trad = _T('asso:'.$libelle);
74                                        if ($libelle!=str_replace(' ', '_', $trad)) {
75                                                $res .= "<div class='choix'><input type='checkbox' name='champs[$k]' id='listemembres_$k' /><label for='listemembres_$k'>$trad</label></div>";
76                                        }
77                                }
78                        }
79                        // on ajoute aussi le mail
80                        $res .= '<div class="choix"><input type="checkbox" name="champs[email]" id="listemembres_email" /><label for="listemembres_email">'._T('asso:adherent_libelle_email').'</label></div>';
81                        if (test_plugin_actif('COORDONNEES')) { // si le plugin coordonnees est actif, on ajoute l'adresse et le telephone
82                                $res .= '<div class="choix"><input type="checkbox" name="champs[adresse]" id="listemembres_adresse" /><label for="listemembres_adresse">'._T('coordonnees:adresses').'</label></div>';
83                                $res .= '<div class="choix"><input type="checkbox" name="champs[telephone]" id="listemembres_telephone" /><label for="listemembres_telephone"><label for="listemembres_telephone">'._T('coordonnees:numeros').'</label></div>';
84                        }
85                        // on appelle ici la fonction qui calcule le code du formulaire/tableau de membres pour pouvoir recuperer la liste des membres affiches a transmettre pour la generation du pdf
86                        list($where_adherents, $jointure_adherents, $code_liste_membres) = adherents_liste(intval(_request('debut')), $lettre, $critere, $statut_interne, $id_groupe);
87                        /* on fait suivre la liste des auteurs a afficher */
88                        $res .= '<input type="hidden" name="where_adherents" value="'.$where_adherents.'" />';
89                        $res .= '<input type="hidden" name="jointure_adherents" value="'.$jointure_adherents.'" />';
90                        $res .= '<input type="hidden" name="statut_interne" value="'.$statut_interne.'" />';
91                        $res .= '</li></ul>';
92                        $res .= '<p class="boutons"><input type="submit" value="'. _T('asso:bouton_imprimer') .'" /></p>';
93                        echo generer_form_ecrire('pdf_adherents', $res, '', '');
94                        echo '</div>';
95                        echo fin_cadre_enfonce(true);
96                }
97                debut_cadre_association('annonce.gif', 'adherent_titre_liste_actifs');
98                // FILTRES
99                echo "<table width='100%' class='asso_tablo_filtres'>\n";
100                echo '<tr>';
101                // Pagination alphabetique
102                echo '<td width="30%" class="pagination0">';
103                if (!$lettre) {
104                        $lettre = '%';
105                }
106                $query = sql_select('UPPER( LEFT( nom_famille, 1 ) )  AS init', 'spip_asso_membres', '',  'init', 'nom_famille, id_auteur');
107                while ($data = sql_fetch($query)) {
108                        $i = $data['init'];
109                        if($i==$lettre) {
110                                echo ' <strong>'.$i.'</strong>';
111                        } else {
112                                $h = generer_url_ecrire('adherents', "statut_interne=$statut_interne&lettre=$i");
113                                echo " <a href='$h'>$i</a>\n";
114                        }
115                }
116                if ($lettre=='%') {
117                        echo ' <strong>'._T('asso:entete_tous').'</strong>';
118                } else {
119                        $h = generer_url_ecrire('adherents', "statut_interne=$statut_interne");
120                        echo "<a href='$h'>"._T('asso:entete_tous').'</a>';
121                }
122#               if ($GLOBALS['association_metas']['aff_groupes']) { // ne proposer que si on affiche les groupes ?? (on peut vouloir filtrer par groupe sans pour autant les afficher donc desactive)
123                        echo '</td><td width="25%">'. association_selectionner_groupe($id_groupe, 'adherents') ; // filtre groupes
124#               }
125                //Filtre ID
126                echo '</td><td width="16%" class="formulaire">';
127                echo '<form method="post" action="'.generer_url_ecrire('adherents').'"><div>';
128                echo '<input type="text" name="id" onfocus=\'this.value=""\' size="5"  value="'. $id .'" onchange="form.submit()" />';
129                echo '<noscript><input type="submit" value="'._T('asso:bouton_lister').'" /></noscript></div></form>';
130                //Filtre statut
131                echo '</td><td width="23%">';
132                echo '<form method="post" action="'.generer_url_ecrire('adherents').'"><div>';
133                echo '<input type="hidden" name="lettre" value="'.$lettre.'" />';
134                echo association_selectionner_statut($statut_interne, '');
135                echo '<noscript><input type="submit" value="'._T('asso:bouton_lister').'" /></noscript></div></form>';
136                echo '</td>';
137                echo '</tr>';
138                echo '</table>';
139                //Affichage de la liste
140                echo $code_liste_membres;
141                fin_page_association();
142        }
143}
144
145/* adherent liste renvoie le code html et tout ce qu'il faut pour effectuer la requete avec les meme filtres (where et la possible jonction sur la table des groupes) */
146function adherents_liste($debut, $lettre, $critere, $statut_interne, $id_groupe, $max_par_page=30)
147{
148        if ($lettre)
149                $critere .= " AND UPPER( SUBSTRING( nom_famille, 1, 1 ) ) LIKE '$lettre' ";
150        $jointure_groupe = '';
151        if ($id_groupe) {
152                $critere .= " AND c.id_groupe=$id_groupe ";
153                $jointure_groupe = ' LEFT JOIN spip_asso_groupes_liaisons c ON a.id_auteur=c.id_auteur ';
154        }
155        $chercher_logo = charger_fonction('chercher_logo', 'inc');
156        include_spip('inc/filtres_images_mini');
157        $query = sql_select('a.id_auteur AS id_auteur, b.email AS email, a.sexe, a.nom_famille, a.prenom, a.id_asso, b.statut AS statut, a.validite, a.statut_interne, a.categorie, b.bio AS bio','spip_asso_membres' .  " a LEFT JOIN spip_auteurs b ON a.id_auteur=b.id_auteur $jointure_groupe", $critere, '', 'nom_famille ', "$debut,$max_par_page" );
158        $auteurs = '';
159        while ($data = sql_fetch($query)) {
160                $id_auteur = $data['id_auteur'];
161                $class = $GLOBALS['association_styles_des_statuts'][$data['statut_interne']];
162                $logo = $chercher_logo($id_auteur, 'id_auteur');
163                if ($logo) {
164                        $logo = image_reduire($logo[0], 60);
165                }else{
166                        $logo = '<img src="'._DIR_PLUGIN_ASSOCIATION_ICONES.'membre-60.gif"  width="10"/>' ;
167                }
168                if (empty($data['email'])) {
169                        $mail = $data['nom_famille'];
170                } else {
171                        $mail = '<a href="mailto:'.$data['email'].'">'.$data['nom_famille'].'</a>';
172                }
173                $statut = $data['statut'];
174                if (!$statut OR $statut=='nouveau')
175                        $statut = $data['bio'];
176                switch($statut) {
177                        case '0minirezo':
178                                $icone = 'admin-12.gif';
179                                break;
180                        case '1comite':
181                                $icone = 'redac-12.gif';
182                                break;
183                        case '5poubelle':
184                                $icone = 'poubelle.gif';
185                                break;
186                        case '6forum':
187                        default :
188                                $icone = 'visit-12.gif';
189                                break;
190                }
191                $icone = !$icone ? strlen($statut) :  http_img_pack($icone,'','', _T('asso:adherent_label_modifier_visiteur'));
192                $auteurs .= "<tr class='$class'>\n";
193                if ($GLOBALS['association_metas']['aff_id_auteur']=='on') {
194                        $auteurs .= '<td class="integer">'
195                        . $id_auteur.'</td>';
196                }
197                if ($GLOBALS['association_metas']['aff_photo']=='on') {
198                        $auteurs .= '<td class="logo centre">'.$logo.'</td>';
199                }
200                if ($GLOBALS['association_metas']['aff_civilite']=='on' && $GLOBALS['association_metas']['civilite']=='on')
201                        $auteurs .= '<td class="honorific-prefix">'.$data['sexe'].'</td>';
202                $auteurs .= '<td class="family-name">'
203                .$mail.'</td>';
204                if ($GLOBALS['association_metas']['aff_prenom']=='on' && $GLOBALS['association_metas']['prenom']=='on')         $auteurs .= '<td class="given-name">'.$data['prenom'].'</td>';
205                if ($GLOBALS['association_metas']['aff_groupes']=='on') {
206                        $auteurs .= '<td class="organisation-unit">';
207                        $query_groupes = sql_select('g.nom as nom_groupe, g.id_groupe as id_groupe', 'spip_asso_groupes g LEFT JOIN spip_asso_groupes_liaisons l ON g.id_groupe=l.id_groupe', 'l.id_auteur='.$id_auteur);
208                        if ($row_groupes = sql_fetch($query_groupes)) {
209                                $auteurs .= '<a href="'. generer_url_ecrire('voir_groupe', 'id='.$row_groupes['id_groupe']) .'">'.$row_groupes['nom_groupe'].'</a>';
210                                while ($row_groupes = sql_fetch($query_groupes)) {
211                                        $auteurs .= ', <a href="'.generer_url_ecrire('voir_groupe', 'id='.$row_groupes['id_groupe']).'">'.$row_groupes['nom_groupe'].'</a>';
212                                }
213                        }
214                        $auteurs .= '</td>';
215                }
216                if ($GLOBALS['association_metas']['aff_id_asso']=='on' && $GLOBALS['association_metas']['id_asso']=='on') {
217                        $auteurs .= '<td class="text">'.$data['id_asso'].'</td>';
218                }
219                if ($GLOBALS['association_metas']['aff_categorie']=='on') {
220                        $auteurs .= '<td class="text">'. affiche_categorie($data['categorie']) .'</td>';
221                }
222                if ($GLOBALS['association_metas']['aff_validite']=='on') {
223                        $auteurs .= '<td class="date">';
224                        if ($data['validite']==''){
225                                $auteurs .= '&nbsp;';
226                        } else {
227                                $auteurs .= '<abbr class="dtend" title="'.$data['validite'].'">'. association_datefr($data['validite']) .'</td>';
228                        }
229                        $auteurs .= '</td>';
230                }
231                $auteurs .= '<td class="action">'
232                . '<a href="'. generer_url_ecrire('auteur_infos','id_auteur='.$id_auteur) .'">'.$icone.'</a></td>'
233                . '<td class="action">'. association_bouton('adherent_label_ajouter_cotisation', 'cotis-12.gif', 'ajout_cotisation','id='.$id_auteur) .'</td>'
234                . '<td class="action">'. association_bouton('adherent_label_modifier_membre', 'edit-12.gif', 'edit_adherent','id='.$id_auteur) .'</td>'
235                . '<td class="action">'. association_bouton('adherent_label_voir_membre', 'voir-12.png', 'voir_adherent','id='.$id_auteur) .'</td>'
236                . '<td class="action"><input name="id_auteurs[]" type="checkbox" value="'.$id_auteur.'" /></td>'
237                . "</tr>\n";
238        }
239
240        $res = "<table width='100%' class='asso_tablo' id='asso_tablo_adherents'>\n"
241        . "<thead>\n<tr>";
242        if ($GLOBALS['association_metas']['aff_id_auteur']=='on') {
243                $res .= '<th>'._T('asso:entete_id').'</th>';
244        }
245        if ($GLOBALS['association_metas']['aff_photo']=='on') {
246                $res .= '<th>'._T('asso:adherent_libelle_photo').'</th>';
247        }
248        if ($GLOBALS['association_metas']['aff_civilite']=='on' && $GLOBALS['association_metas']['civilite']=='on') $res .= '<th>'._T('asso:adherent_libelle_sexe').'</th>';
249        $res .= '<th>'._T('asso:adherent_libelle_nom_famille').'</th>';
250        if ($GLOBALS['association_metas']['aff_prenom']=='on' && $GLOBALS['association_metas']['prenom']=='on') $res .= '<th>'._T('asso:adherent_libelle_prenom').'</th>';
251        if ($GLOBALS['association_metas']['aff_groupes']=='on') {
252                $res .= '<th>'._T('asso:adherent_libelle_groupes').'</th>';
253        }
254        if ($GLOBALS['association_metas']['aff_id_asso']=='on' && $GLOBALS['association_metas']['id_asso']=='on') {
255                $res .= '<th>'._T('asso:adherent_libelle_id_asso').'</th>';
256        }
257        if ($GLOBALS['association_metas']['aff_categorie']=='on') {
258                $res .= '<th>'._T('asso:adherent_libelle_categorie').'</th>';
259        }
260        if ($GLOBALS['association_metas']['aff_validite']=='on') {
261                $res .= '<th>'._T('asso:adherent_libelle_validite').'</th>';
262        }
263        $res .= '<th colspan="4" class="actions" width="30">'._T('asso:entete_actions').'</th>'
264        . '<th><input title="'._T('asso:selectionner_tout').'" type="checkbox" id="selectionnerTous" onclick="var currentVal = this.checked; var checkboxList = document.getElementsByName(\'id_auteurs[]\'); for (var i in checkboxList){checkboxList[i].checked=currentVal;}" /></th>'
265        . "</tr>\n</thead><tbody>"
266        . $auteurs
267        . "</tbody>\n</table>\n";
268        //SOUS-PAGINATION
269        $res .= "<table class='asso_tablo_filtres'><tr>\n<td width='52%'><p class='pagination'>";
270        $nombre_selection = sql_countsel('spip_asso_membres', $critere);
271        $pages = intval($nombre_selection/$max_par_page)+1;
272        if ($pages!=1)  {
273                for ($i=0; $i<$pages; $i++)     {
274                        $position = $i*$max_par_page;
275                        if ($position==$debut)  {
276                        $res .= '<strong>'.$position.'</strong>';
277                        } else {
278                                $h = generer_url_ecrire('adherents', 'lettre='.$lettre.'&debut='.$position.'&statut_interne='.$statut_interne);
279                                $res .= "<a href='$h'>$position</a>\n";
280                        }
281                }
282        }
283        if (autoriser('editer_membres', 'association', 100)) {
284                $res .= "</p></td><td width='48%' class='formulaire'><form>\n";
285                if ($auteurs) {
286                        $res .=  '<select name="action_adherents"><option value="" selected="">'._T('asso:choisir_action').'</option><option value="desactive">'
287                        .($statut_interne=='sorti' ? _T('asso:reactiver_adherent') : _T('asso:desactiver_adherent'))
288                        .'</option><option value="delete">'._T('asso:supprimer_adherent').'</option>';
289                        if (autoriser('editer_groupes', 'association', 100)) {
290                                $res .=sql_countsel('spip_asso_groupes', '') ? '<option value="grouper">'._T('asso:rejoindre_groupe').'</option><option value="degrouper">'._T('asso:quitter_un_groupe').'</option>' : '';
291                        }
292                        $res .='</select><input type="submit" value="'._T('asso:bouton_confirmer').'" />';
293                }
294                $res .= '<input type="hidden" name="statut_courant" value="'.$statut_interne.'" />'
295                .  '</form></td>';
296        }
297        $res .= '</tr></table>';
298
299        return  array($critere, $jointure_groupe, generer_form_ecrire('action_adherents', $res));
300}
301
302function affiche_categorie($c)
303{
304  return is_numeric($c)
305    ? sql_getfetsel('valeur', 'spip_asso_categories', "id_categorie=$c")
306    : $c;
307}
308
309?>
Note: See TracBrowser for help on using the repository browser.