Changeset 72068 in spip-zone


Ignore:
Timestamp:
Apr 16, 2013, 8:40:59 AM (6 years ago)
Author:
gildas.cotomale@…
Message:

On profite du filtre sinon_interdire_acces() introduit en r72056 (d'ailleur les autres pages seront refactorisées ainsi) ; on fait suivre le calcul des cotisations sur le dernier exercice (ou l'année c'est selon la configuration choisie mais on est cohérent avec les autres pages) ; on rajoute des paramètres d'url qui n'étaient pas pris en compte (pas évident à la simple lecture car collecte déportée loin dans une fonction loin au lieu d'être parallèlement avec les autres initialisations)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/Associaspip/trunk/exec/adherents.php

    r71780 r72068  
    1313
    1414function exec_adherents() {
    15         if (!autoriser('voir_membres', 'association', 0)) {  // on s'assure qu'il n'y ai pas d'id associe a la demande d'autorisation ici car on les consulte tous
    16                 include_spip('inc/minipres');
    17                 echo minipres();
    18         } else {
    19                 include_spip('association_modules');
     15        sinon_interdire_acces(autoriser('voir_membres', 'association', 0)); // on s'assure qu'il n'y ai pas d'id associe a la demande d'autorisation ici car on les consulte tous
     16        include_spip('association_modules');
    2017/// INITIALISATIONS
     18        $id = association_passeparam_id('auteur');
     19        $args_url = array();
     20        if (!$id) { // Pas de ID : les autres filtres sont actifs
     21                $id = _T('asso:adherent_libelle_id_auteur');
     22                $args_sql = array();
    2123                list($statut_interne, $critere) = association_passeparam_statut('interne', 'defaut');
     24                if ($statut_interne != 'defaut') {
     25                        $args_url[] = "statut=$statut_interne";
     26                        $args_sql[] = "m.statut_interne=' $statute_interne'"; // = $critere; // :-S
     27                }
     28                $id_categorie = association_recuperer_entier('categorie');
     29                if ($id_categorie) {
     30                        $args_url[] = "categorie=$id_categorie";
     31                        $args_sql[] = "m.id_categorie=$id_categorie";
     32                }
     33                $id_groupe = association_recuperer_entier('groupe');
     34                if ($id_groupe) {
     35                        $args_url[] = "groupe=$id_groupe";
     36                        $args_sql[] = "g.id_groupe=$id_groupe ";
     37                        $jointure_groupe = ' LEFT JOIN spip_asso_fonctions AS g ON m.id_auteur=g.id_auteur ';
     38                } else {
     39                        $jointure_groupe = '';
     40                }
    2241                $lettre = _request('lettre');
    23                 $id = association_passeparam_id('auteur');
    24                 if (!$id) { //Filtres ID et groupe :
    25                         $id = _T('asso:adherent_libelle_id_auteur');
    26                         $id_groupe = association_recuperer_entier('groupe');
    27                         $id_categorie = association_recuperer_entier('categorie');
    28                         if ($id_categorie)
    29                                 $critere = "m.id_categorie=$id_categorie";
    30                         $suffixe_pdf = "membres_$statut_interne".'_';
    31                         $suffixe_pdf .= $lettre?str_replace(array('/', '\\', '?', '%', '*', ':', '|', '"', '<', '>', '.', ' ', '(', ')', ';', '&', '#', '[', ']', ), '~', utf8_decode($lettre) ):'tous'; // caracteres problematiques : http://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words
    32                         $suffixe_pdf .= "_$id_categorie"."_$id_groupe";
    33                 } else { // si le filtre ID est actif, on ignore les autres filtres
    34                         $critere = "m.id_auteur=$id";
    35                         $id_groupe = 0;
    36                         $id_categorie = 0;
    37                         $suffixe_pdf = "membre$id";
    38                 }
     42                if ($lettre) {
     43                        $args_url[] = "lettre=$lettre";
     44                        $args_sql[] = "UPPER(m.nom_famille) LIKE UPPER('$lettre%') "; // le 1er UPPER (plutot que LOWER puisque les lettres sont mises et passees en majuscule) sur le champ est requis car LIKE est sensible a la casse... le 2nd UPPER est pour contrer les requetes entrees manuellement... (remarque, avec MySQL 5 et SQL Server, on aurait pu avoir simplement "nom_famille LIKE '$lettre%' COLLATE UTF_GENERAL_CI" ou mieux ailleurs : "nom_famille ILIKE '$lettre%'" mais c'est pas forcement portable)
     45                }
     46                $critere = implode(' AND ', $args_sql);
     47                $suffixe_pdf = "membres_$statut_interne".'_';
     48                $suffixe_pdf .= $lettre?str_replace(array('/', '\\', '?', '%', '*', ':', '|', '"', '<', '>', '.', ' ', '(', ')', ';', '&', '#', '[', ']', ), '~', utf8_decode($lettre) ):'tous'; // caracteres problematiques : http://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words
     49                $suffixe_pdf .= "_$id_categorie"."_$id_groupe";
     50        } else { // si le filtre ID est actif, on ignore les autres filtres
     51                $critere = "m.id_auteur=$id";
     52                $id_groupe = 0;
     53                $id_categorie = 0;
     54                $suffixe_pdf = "membre$id";
     55                $jointure_groupe = '';
     56        }
    3957/// AFFICHAGES_LATERAUX (connexes)
    40                 echo association_navigation_onglets('titre_onglet_membres', 'adherents');
     58        echo association_navigation_onglets('titre_onglet_membres', 'adherents');
    4159/// AFFICHAGES_LATERAUX : TOTAUX : effectifs par statuts
    42                 $membres = $GLOBALS['association_liste_des_statuts'];
    43                 array_shift($membres); // on sort les anciens membres
    44                 $liste_decomptes = array();
    45                 foreach ($membres as $statut) {
    46                         $classe_css = $GLOBALS['association_styles_des_statuts'][$statut];
    47                         $liste_decomptes[$classe_css] = array( 'adherent_liste_nombre_'.$statut, sql_countsel('spip_asso_membres', "statut_interne='$statut'"), );
    48                 }
    49                 echo association_tablinfos_effectifs('adherents', $liste_decomptes);
     60        $membres = $GLOBALS['association_liste_des_statuts'];
     61        array_shift($membres); // on sort les anciens membres
     62        $liste_decomptes = array();
     63        foreach ($membres as $statut) {
     64                $classe_css = $GLOBALS['association_styles_des_statuts'][$statut];
     65                $liste_decomptes[$classe_css] = array( 'adherent_liste_nombre_'.$statut, sql_countsel('spip_asso_membres', "statut_interne='$statut'"), );
     66        }
     67        echo association_tablinfos_effectifs('adherents', $liste_decomptes);
    5068/// AFFICHAGES_LATERAUX : TOTAUX : montants des cotisations durant l'annee en cours
    51                 $annee = date('Y'); // dans la requete SQL est : DATE_FORMAT(NOW(), '%Y') ou YEAR(NOW())
    52                 $data = sql_fetsel('SUM(recette) AS somme_recettes, SUM(depense) AS somme_depenses', 'spip_asso_comptes', "DATE_FORMAT('date', '%Y')=$annee AND imputation=".sql_quote($GLOBALS['association_metas']['pc_cotisations']) );
    53                 echo association_tablinfos_montants('cotisations_'.$annee, $data['somme_recettes'], $data['somme_depenses']);
     69        list($id_periode, $critere_periode) = association_passeparam_periode('operation', 'asso_comptes', 0); // annee/exercice actuelle/courant
     70        $data = sql_fetsel('SUM(recette) AS somme_recettes, SUM(depense) AS somme_depenses', 'spip_asso_comptes', "$critere_periode AND imputation=".sql_quote($GLOBALS['association_metas']['pc_cotisations']) );
     71        echo association_tablinfos_montants('cotisations_'.$id_periode, $data['somme_recettes'], $data['somme_depenses']);
    5472/// AFFICHAGES_LATERAUX : RACCOURCIS
    55                 echo association_navigation_raccourcis(array(
    56                         array('gerer_les_groupes', 'annonce.gif', array('groupes'), array('voir_groupes', 'association', 100) ), // l'id groupe passe en parametre est a 100 car ce sont les groupes utilisateurs et non les autorisations qu'on liste
    57                         array('menu2_titre_mailing', 'mail-24.png', array('mailing', ((intval($id_groupe)>99)?"&filtre_id_groupe=$id_groupe":'').($statut_interne?"&filtre_statut_interne=$statut_interne":'')), array('relancer_membres', 'association') ),
    58                         array('synchronise_asso_membre_lien', 'reload-32.png', array('synchroniser_asso_membres'), array('gerer_membres', 'association') ),
    59                 ), 2);
     73        echo association_navigation_raccourcis(array(
     74                array('gerer_les_groupes', 'annonce.gif', array('groupes'), array('voir_groupes', 'association', 100) ), // l'id groupe passe en parametre est a 100 car ce sont les groupes utilisateurs et non les autorisations qu'on liste
     75                array('menu2_titre_mailing', 'mail-24.png', array('mailing', ((intval($id_groupe)>99)?"&filtre_id_groupe=$id_groupe":'').($statut_interne?"&filtre_statut_interne=$statut_interne":'')), array('relancer_membres', 'association') ),
     76                array('synchronise_asso_membre_lien', 'reload-32.png', array('synchroniser_asso_membres'), array('gerer_membres', 'association') ),
     77        ), 2);
    6078/// AFFICHAGES_LATERAUX : Forms-PDF
    61                 list($where_adherents, $jointure_adherents, $code_liste_membres) = adherents_liste($lettre, $critere, $statut_interne, $id_groupe); // on appelle ici la fonction qui calcule le code du tableau de membres pour pouvoir recuperer la liste des parametres a transmettre pour les pdf
    62                 if ( autoriser('exporter_membres', 'association') ) { // etiquettes
    63                         echo association_form_etiquettes($where_adherents, $jointure_adherents, $suffixe_pdf);
    64                 }
    65                 if ( autoriser('exporter_membres', 'association')
    66                 ) { // tableau des membres
    67                         $champsExclus = array();
    68                         if ( !$GLOBALS['association_metas']['civilite'] )
    69                                 $champsExclus[] = 'sexe';
    70                         if ( !$GLOBALS['association_metas']['prenom'] )
    71                                 $champsExclus[] = 'prenom';
    72                         if ( !$GLOBALS['association_metas']['id_asso'] )
    73                                 $champsExclus[] = 'id_asso';
    74                         echo association_form_listepdf('membre', array('where_adherents'=>$where_adherents, 'jointure_adherents'=>$jointure_adherents, 'statut_interne'=>$statut_interne, 'suffixe'=>$suffixe_pdf), 'adherent_libelle_', $champsExclus, TRUE);
    75                 }
     79        if ( autoriser('exporter_membres', 'association') ) { // etiquettes
     80                echo association_form_etiquettes($critere, $jointure_adherents, $suffixe_pdf);
     81        }
     82        if ( autoriser('exporter_membres', 'association') ) { // tableau des membres
     83                $champsExclus = array();
     84                if ( !$GLOBALS['association_metas']['civilite'] )
     85                        $champsExclus[] = 'sexe';
     86                if ( !$GLOBALS['association_metas']['prenom'] )
     87                        $champsExclus[] = 'prenom';
     88                if ( !$GLOBALS['association_metas']['id_asso'] )
     89                        $champsExclus[] = 'id_asso';
     90                echo association_form_listepdf('membre', array('where_adherents'=>$critere, 'jointure_adherents'=>$jointure_adherents, 'statut_interne'=>$statut_interne, 'suffixe'=>$suffixe_pdf), 'adherent_libelle_', $champsExclus, TRUE);
     91        }
    7692/// AFFICHAGES_CENTRAUX (corps)
    77                 debut_cadre_association('annonce.gif', 'adherent_titre_liste_actifs');
     93        debut_cadre_association('annonce.gif', 'adherent_titre_liste_actifs');
    7894/// AFFICHAGES_CENTRAUX : FILTRES
    79                 $filtre_categorie = '<select name="categorie" onchange="form.submit()">';
    80                 $filtre_categorie .= '<option value="" ';
    81                 $filtre_categorie .= (($id_categorie=='%' || $id_categorie='')?' selected="selected"':'');
    82                 $filtre_categorie .= '>'. _T('asso:entete_tous') .'</option>';
    83                 $sql = sql_select(
    84                         'id_categorie, valeur, libelle',
    85                         'spip_asso_categories',
    86                         sql_in_select('id_categorie', 'id_categorie', 'spip_asso_membres', '', 'id_categorie'), // uniquement les categories utilisees
    87                         '', 'valeur');
    88                 while ($categorie = sql_fetch($sql)) {
    89                         $filtre_categorie .= '<option value="'.$categorie['id_categorie'].'"';
    90                         $filtre_categorie .= ($id_categorie==$categorie['id_categorie']?' selected="selected"':'');
    91 //                      $filtre_categorie .= '>'.$categorie['valeur'].' - '.$categorie['libelle'].'</option>'; // long ; comme pour les comptes (ref - intitule)
    92                         $filtre_categorie .= '>'.$categorie['valeur'].'</option>'; // court (ou pas) : comme pour les groupes
    93                 }
    94                 echo association_form_filtres(array(
    95                         'lettre' => array($lettre, 'asso_membres', 'nom_famille', generer_url_ecrire('adherents', (!$id?($id_groupe?"&groupe=$id_groupe":'').($statut_interne?"&statut=$statut_interne":'').($id_categorie?"&categorie=$id_categorie":''):"&id=$id") ), ),
    96                         'id' => $id,
    97                         'groupe' => $id_groupe, // ne pas proposer que si on affiche les groupes : on peut vouloir filtrer par groupe sans pour autant les afficher
    98                         'statut'=> $statut_interne,
    99                 ), 'adherents', array(
    100                         'categorie' => $filtre_categorie,
    101                 ));
     95        $filtre_categorie = '<select name="categorie" onchange="form.submit()">';
     96        $filtre_categorie .= '<option value="" ';
     97        $filtre_categorie .= (($id_categorie=='%' || $id_categorie='')?' selected="selected"':'');
     98        $filtre_categorie .= '>'. _T('asso:entete_tous') .'</option>';
     99        $sql = sql_select(
     100                'id_categorie, valeur, libelle',
     101                'spip_asso_categories',
     102                sql_in_select('id_categorie', 'id_categorie', 'spip_asso_membres', '', 'id_categorie'), // uniquement les categories utilisees
     103                '', 'valeur');
     104        while ($categorie = sql_fetch($sql)) {
     105                $filtre_categorie .= '<option value="'.$categorie['id_categorie'].'"';
     106                $filtre_categorie .= ($id_categorie==$categorie['id_categorie']?' selected="selected"':'');
     107//              $filtre_categorie .= '>'.$categorie['valeur'].' - '.$categorie['libelle'].'</option>'; // long ; comme pour les comptes (ref - intitule)
     108                $filtre_categorie .= '>'.$categorie['valeur'].'</option>'; // court (ou pas) : comme pour les groupes
     109        }
     110        echo association_form_filtres(array(
     111                'lettre' => array($lettre, 'asso_membres', 'nom_famille', generer_url_ecrire('adherents', (!$id?($id_groupe?"&groupe=$id_groupe":'').($statut_interne?"&statut=$statut_interne":'').($id_categorie?"&categorie=$id_categorie":''):"&id=$id") ), ),
     112                'id' => $id,
     113                'groupe' => $id_groupe, // ne pas proposer que si on affiche les groupes : on peut vouloir filtrer par groupe sans pour autant les afficher
     114                'statut'=> $statut_interne,
     115        ), 'adherents', array(
     116                'categorie' => $filtre_categorie,
     117        ));
    102118/// AFFICHAGES_CENTRAUX : TABLEAU
    103                 echo $code_liste_membres;
    104                 fin_page_association();
    105         }
     119        echo adherents_liste($critere, $statut_interne, $args_url);
     120        fin_page_association();
    106121}
     122
    107123
    108124/**
    109125 * liste des adherents
    110126 *
    111  * @param string $lettre
    112  *   Filtre lettre
    113127 * @param string $critere
    114  *   SQL de restriction selon statut
     128 *   SQL de restriction selon les filtres
    115129 * @param string $statut_interne
    116130 *   Filtre statut interne
    117  * @param int $id_groupe
    118  *   Filtre groupe
    119  * @return array
    120  *   Liste du :
    121  *   - critere de requete SQL en fonction des filtres actifs,
    122  *   - possible jonction SQL sur la table des groupes,
    123  *   - code HTML du tableau affichant la liste des membres en fonction des
    124  *     filtres actifs et de la configuration (champs affiches ou pas)
     131 * @param array $args_url
     132 *   Complement (parametres) d'URL pour la pagination
     133 * @return string
     134 *   Code HTML du tableau affichant la liste des membres en fonction des
     135 * filtres actifs et de la configuration (champs affiches ou pas)
    125136 */
    126 function adherents_liste($lettre, $critere, $statut_interne, $id_groupe) {
    127 /// INITIALISATIONS
    128         if ($lettre)
    129                 $critere .= " AND UPPER(m.nom_famille) LIKE UPPER('$lettre%') "; // le 1er UPPER (plutot que LOWER puisque les lettres sont mises et passees en majuscule) sur le champ est requis car LIKE est sensible a la casse... le 2nd UPPER est pour contrer les requetes entrees manuellement... (remarque, avec MySQL 5 et SQL Server, on aurait pu avoir simplement "nom_famille LIKE '$lettre%' COLLATE UTF_GENERAL_CI" ou mieux ailleurs : "nom_famille ILIKE '$lettre%'" mais c'est pas forcement portable)
    130         if ($id_groupe) {
    131                 $critere .= " AND g.id_groupe=$id_groupe ";
    132                 $jointure_groupe = ' LEFT JOIN spip_asso_fonctions AS g ON m.id_auteur=g.id_auteur ';
    133         } else {
    134                 $jointure_groupe = '';
    135         }
     137function adherents_liste($critere, $statut_interne, $args_url) {
    136138        $chercher_logo = charger_fonction('chercher_logo', 'inc');
    137139        include_spip('inc/filtres_images_mini');
     
    254256        . "\n</table>\n";
    255257/// AFFICHAGES_CENTRAUX : PAGINATION
    256         $arg = array();
    257         if ($lettre)
    258                 $arg[]= "lettre=$lettre";
    259         if ($statut_interne != 'defaut')
    260                 $arg[]= "statut_interne=$statut_interne";
    261258        $res .= "<table width='100%' class='asso_tablo_filtres'><tr>\n";
    262259        if (autoriser('editer_membres', 'association', 100)) {
     
    276273                .  '</td>';
    277274        }
    278         $res .= association_form_souspage(array('spip_asso_membres', $critere), 'adherents', $arg, $nav);
     275        $res .= association_form_souspage(array('spip_asso_membres', $critere), 'adherents', $args_url, $nav);
    279276// FIN
    280         return  array($critere, $jointure_groupe, generer_form_ecrire('action_adherents', $res));
     277        return  generer_form_ecrire('action_adherents', $res);
    281278}
    282279
Note: See TracChangeset for help on using the changeset viewer.