Changeset 48173 in spip-zone


Ignore:
Timestamp:
May 26, 2011, 9:21:52 PM (10 years ago)
Author:
jeannolapin@…
Message:

Associaspip Pouvoir exporter en PDF les adresses, numeros de telephones et emails des membres + exporter en PDF uniquement la liste des membres affichés.

Location:
_plugins_/Association/Associaspip
Files:
6 edited

Legend:

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

    r48001 r48173  
    3434                echo debut_gauche("",true);
    3535               
     36                /* recuperation des variables */
    3637                $critere = request_statut_interne(); // peut appeler set_request
    3738                $statut_interne = _request('statut_interne');
     39                $lettre= _request('lettre');
    3840
    3941                echo debut_boite_info(true);
     
    6163                echo fin_boite_info(true);     
    6264
     65                /* on appelle ici la fonction qui calcule le code du formulaire/tableau de membres pour pouvoir recuperer la liste des membres affiches a transmettre a adherents_table pour la generation du pdf */
     66                list($liste_id_auteurs, $code_liste_membres) = adherents_liste(intval(_request('debut')), $lettre, $critere, $statut_interne);
     67       
    6368                echo debut_cadre_enfonce('',true),
    6469                  '<h3 style="text-align:center;">',
    6570                  _T('plugins_vue_liste'), '</h3>',
    66                   adherents_table(),
     71                  adherents_table($liste_id_auteurs),
    6772                  fin_cadre_enfonce(true);
    6873
     
    7883                echo '<td>';
    7984               
    80                 $lettre= _request('lettre');
     85               
    8186                if (!$lettre) { $lettre = "%"; }
    8287               
     
    132137               
    133138                //Affichage de la liste
    134                 echo adherents_liste(intval(_request('debut')), $lettre, $critere, $statut_interne);
     139                echo $code_liste_membres;
    135140                echo fin_cadre_relief(true); 
    136141                echo fin_page_association();
     
    138143}
    139144
     145/* adherent liste renvoie un tableau des id des auteurs affiches et le code html */
    140146function adherents_liste($debut, $lettre, $critere, $statut_interne)
    141147{
     
    148154        $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", $critere, '', "nom_famille ", "$debut,$max_par_page" );
    149155        $auteurs = '';
     156        $liste_id_auteurs = array();
    150157        while ($data = sql_fetch($query)) {     
    151                 $id_auteur=$data['id_auteur'];         
     158                $id_auteur=$data['id_auteur'];
     159                $liste_id_auteurs[] = $id_auteur;               
    152160                $class = $GLOBALS['association_styles_des_statuts'][$data['statut_interne']] . " border1";
    153161               
     
    257265        .  '</div>';
    258266
    259         return  generer_form_ecrire('action_adherents', $res);
    260 
     267        return  array($liste_id_auteurs, generer_form_ecrire('action_adherents', $res));
    261268}
    262269
     
    268275}
    269276
    270 function adherents_table()
     277function adherents_table($liste_id_auteurs)
    271278{
    272279        $champs = $GLOBALS['association_tables_principales']['spip_asso_membres']['field'];
     
    285292
    286293        /* si le plugin coordonnees est actif, on ajoute l'adresse et le telephone */
    287 /*      if (plugin_actif('COORDONNEES')) {
     294        if (plugin_actif('COORDONNEES')) {
    288295                $res .= "<input type='checkbox' name='champs[adresse]' />"._T('asso:adresse')."<br />";
    289296                $res .= "<input type='checkbox' name='champs[telephone]' />"._T('asso:telephone')."<br />";
    290297        }
    291 */
    292         /* on fait suivre le statut interne */
    293         $res .= "<input type='hidden' name='statut_interne' value='"._request('statut_interne')."'/>";
     298
     299        /* on fait suivre la liste des auteurs a afficher */
     300        $res .= "<input type='hidden' name='liste_id_auteurs' value='".serialize($liste_id_auteurs)."'/>";
    294301
    295302        return  generer_form_ecrire('pdf_adherents', $res, '', _T('asso:bouton_impression'));
  • _plugins_/Association/Associaspip/exec/pdf_adherents.php

    r48001 r48173  
    3838          }
    3939        }
     40
    4041        // ainsi que les colonnes pour les champs hors table spip_asso_membres
    41         if ($sent['email']=='on') $pdf->AddCol('email',45 ,_T('asso:adherent_libelle_email'), 'C');
    42 //      if ($sent['adresse']=='on') $pdf->AddCol('adresse',45 ,_T('asso:adherent_libelle_adresse'), 'L');
    43 //      if ($sent['telephone']=='on') $pdf->AddCol('telephone',20 ,_T('asso:adherent_libelle_telephone'), 'C');
     42        include_spip('inc/association_coordonnees');
     43        $liste_id_auteurs = unserialize(_request('liste_id_auteurs'));
     44        if ($sent['email']=='on') {
     45                $pdf->AddCol('email',45 ,_T('asso:adherent_libelle_email'), 'C');
     46                $emails =  association_recuperer_emails($liste_id_auteurs);
     47        }
     48
     49        if ($sent['adresse']=='on') {
     50                $pdf->AddCol('adresse',45 ,_T('asso:adherent_libelle_adresse'), 'L');
     51                $adresses =  association_recuperer_adresses($liste_id_auteurs,"\n"," ");
     52        }
     53        if ($sent['telephone']=='on') {
     54                $pdf->AddCol('telephone',30 ,_T('asso:adherent_libelle_telephone'), 'C');
     55                $telephones = association_recuperer_telephones($liste_id_auteurs);
     56        }
    4457
    4558        $prop=array(
     
    4962                'padding'=>2
    5063        );
    51         $order = 'm.id_auteur';
     64        $order = 'id_auteur';
    5265        if ($sent['nom_famille']=='on')
    53           $order = 'm.nom_famille' . ",$order";
    54 //* A FAIRE : AJOUTER LE MAIL, ADRESSE, TELEPHONE DANS LA QUERY ou trouver un autre moyen
    55         $pdf->Query(sql_select('*','spip_asso_membres as m INNER JOIN spip_auteurs as a ON m.id_auteur=a.id_auteur', request_statut_interne(), '', $order), $prop);
     66          $order = 'nom_famille' . ",$order";
     67
     68        $adresses_tels = array();
     69        foreach($liste_id_auteurs as $id_auteur) {
     70                $adresses_tels[$id_auteur] = array();
     71                if ($sent['email']=='on') $adresses_tels[$id_auteur]['email'] = implode("\n", $emails[$id_auteur]);
     72                if ($sent['adresse']=='on') $adresses_tels[$id_auteur]['adresse'] = implode("\n\n", $adresses[$id_auteur]);
     73                if ($sent['telephone']=='on') {
     74                        $first_tel = true;
     75                        $telephones_string = '';
     76                        foreach ($telephones[$id_auteur] as $telephone) {
     77                                if (!$first_tel) {$telephones_string .= "\n";} else $first_tel = false;
     78                                $telephones_string .=  print_tel($telephone," ");
     79                        }
     80                        $adresses_tels[$id_auteur]['telephone'] = $telephones_string;
     81                }
     82        }
     83
     84        $pdf->Query_extended(sql_select('*','spip_asso_membres', sql_in('id_auteur', $liste_id_auteurs), '', $order), $prop, $adresses_tels, 'id_auteur');
    5685        $pdf->Output();
    5786        }
  • _plugins_/Association/Associaspip/exec/voir_adherent.php

    r48107 r48173  
    2929                $nom_membre = association_calculer_nom_membre($data['sexe'], $data['prenom'], $data['nom_famille']);
    3030                $validite=$data['validite'];
    31                 $adresses = association_recuperer_adresses_string($id_auteur);
     31                $adresses = association_recuperer_adresses_string(array($id_auteur));
    3232                $emails = association_recuperer_emails_string(array($id_auteur));
    3333                $telephones = association_recuperer_telephones_string(array($id_auteur));
     
    5656                          "</a>";
    5757
    58                         $coord =  '<br /><div style="font-weight: bold; text-align: center" class="verdana1 spip_xx-small">' . $adresses . '<br />' . $emails[$id_auteur] . '<br/>' . $telephones[$id_auteur] . "<p>".$categorie."</p></div>\n";
     58                        $coord =  '<br /><div style="font-weight: bold; text-align: center" class="verdana1 spip_xx-small">' . $adresses[$id_auteur] . '<br />' . $emails[$id_auteur] . '<br/>' . $telephones[$id_auteur] . "<p>".$categorie."</p></div>\n";
    5959
    6060                } else $coord = '';
  • _plugins_/Association/Associaspip/inc/association_coordonnees.php

    r48008 r48173  
    5353}
    5454
    55 /* prend en argument un id_auteur et retourne un tableau d'adresses */
     55/* Cette fonction prend en argument un tableau d'id_auteurs et renvoie un tableau
     56id_auteur => array(adresses). Les adresses sont constituees d'une chaine, les caracteres de retour a la ligne et espace peuvent etre passe en parametre */
    5657/* TODO: l'affichage du pays devrait etre optionnel */
    57 function association_recuperer_adresses($id_auteur)
     58function association_recuperer_adresses($id_auteurs, $newline="<br/>", $espace="&nbsp;")
    5859{
    59                 $tab_result=array();
    60                 if (plugin_actif('COORDONNEES')) {
    61                         $query = sql_select('a.titre as titre, a.voie as voie, a.complement as complement, a.boite_postale as boite_postale, a.code_postal as code_postal, a.ville as ville, a.pays as pays', 'spip_adresses as a INNER JOIN spip_adresses_liens AS al ON al.id_adresse=a.id_adresse','al.id_objet='.$id_auteur.' and al.objet=\'auteur\'');
    62                         while ($data = sql_fetch($query)) {
    63                                 $voie = ($data['voie'])?$data['voie'].'<br/>':'';
    64                                 $complement = ($data['complement'])?$data['complement'].'<br/>':'';
    65                                 $boite_postale = ($data['boite_postale'])?$data['boite_postale'].'<br/>':'';
    66                                 $code_postal = ($data['code_postal'])?$data['code_postal'].'&nbsp;':'';
    67                                 $ville = ($data['ville'])?$data['ville'].'<br/>':'';
    68                                 $pays = ($data['pays'])?$data['pays'].'<br/>':'';
     60        /* prepare la structure du tableau renvoye */
     61        $adresses_auteurs = array();
     62        foreach ($id_auteurs as $id_auteur) {
     63                $adresses_auteurs[$id_auteur] = array();
     64        }
    6965       
    70                                 $tab_result[] = $voie.$complement.$boite_postale.$code_postal.$ville.$pays;
    71                         }
     66        if (plugin_actif('COORDONNEES')) {
     67                $id_auteurs_list = sql_in('al.id_objet', $id_auteurs);
     68                $query = sql_select('al.id_objet as id_auteur, a.titre as titre, a.voie as voie, a.complement as complement, a.boite_postale as boite_postale, a.code_postal as code_postal, a.ville as ville, a.pays as pays', 'spip_adresses as a INNER JOIN spip_adresses_liens AS al ON al.id_adresse=a.id_adresse',$id_auteurs_list.' AND al.objet=\'auteur\'');
     69                while ($data = sql_fetch($query)) {
     70                        $voie = ($data['voie'])?$data['voie'].$newline:'';
     71                        $complement = ($data['complement'])?$data['complement'].$newline:'';
     72                        $boite_postale = ($data['boite_postale'])?$data['boite_postale'].$newline:'';
     73                        $code_postal = ($data['code_postal'])?$data['code_postal'].$espace:'';
     74                        $ville = ($data['ville'])?$data['ville'].$newline:'';
     75                        $pays = ($data['pays'])?$data['pays']:'';
     76
     77                        $adresses_auteurs[$data['id_auteur']][] = $voie.$complement.$boite_postale.$code_postal.$ville.$pays;
    7278                }
    73                 return $tab_result;
     79        }
     80        return $adresses_auteurs;
    7481}
    7582
    76 /* prend en argument 1 id auteur et renvoie un string html listant toutes ses adresses */
     83/* prend en argument un tableau d'id_auteurs et retourne un tableau id_auteur => code html listant toutes les adresses de l'auteur */
    7784function association_recuperer_adresses_string($id_auteur)
    7885{
    79         $adresses = association_recuperer_adresses($id_auteur);
    80         $adresses_string = '';
    81         if (count($adresses)) {
    82                 foreach ($adresses as $adresse) {
    83                         $adresses_string .= $adresse.'<br/>';
     86        $adresses_auteurs = association_recuperer_adresses($id_auteur);
     87
     88        $adresses_string = array();
     89
     90        /* on le transforme en tableau de strings html */
     91        foreach ($adresses_auteurs as $id_auteur => $adresses) {
     92                $adresses_strings[$id_auteur] = '';
     93                if (count($adresses)) {
     94                        $adresses_strings[$id_auteur] = implode("<br/><br/>",$adresses);
    8495                }
    8596        }
    86         return $adresses_string;
     97
     98        return $adresses_strings;
    8799}
    88100
     
    141153}
    142154
    143 function print_tel($n)
     155function print_tel($n, $separateur="&nbsp;")
    144156{
    145157        $n = preg_replace('/\D/', '', $n);
    146158        if (!intval($n)) return '';
    147         return preg_replace('/(\d\d)/', '\1&nbsp;', $n);
     159        return preg_replace('/(\d\d)/', '\1'.$separateur, $n);
    148160}
    149161?>
  • _plugins_/Association/Associaspip/lang/asso_fr.php

    r48134 r48173  
    156156        'adherent_libelle_mobile' => "Mobile",
    157157        'adherent_libelle_email' => "Mail",
     158        'adherent_libelle_adresse' => "Adresse",
    158159
    159160        'adherent_libelle_statut_ok' => '&Agrave; jour',
  • _plugins_/Association/Associaspip/pdf/extends.php

    r38578 r48173  
    2424                parent::Header();
    2525        }
     26
     27        /* fonction ajoute pour Associaspip */
     28        /* alors que la fonction Query de base prend uniquement une query sql, celle-ci permet d'ajouter un tableau et le nom d'un champs sur lequel */
     29        /* faire la jointure avec la query existente. Cela permet d'ajouter a la query (par un array_merge qui peut ecraser des champs si ils sont   */
     30        /* nommes comme ceux des tables) un tableau qui sera donc ajoute a chaque ligne de data retournee par le fetch de la query sql.              */
     31        /* l'interet est de pouvoir faire des traitement et affichers de donnees traites apres une query (dans notre cas un concat fait en php et qui*/
     32        /* fonctionne donc aussi bien en mysql qu'en postgresql */
     33       
     34        /* le code reprend donc l'integralite du code de Query mais ajoute un merge_array sur chaque ligne de donnees retournee par le fetch */
     35        /* le parametre data doit donc etre un tableau de la forme: valeur_champ_jointure => array(champs1=>valeur, champs2=>valeur, ..)  afin d'inserer */
     36        /* dans le resultat de la requete les champs champs1 et champ2 en jointure = sur le champs fourni dans l'autre parametre */
     37        function Query_extended($res, $prop=array(), $data, $champ_jointure) {
     38                //Traite les propriétés
     39                if(!isset($prop['width']))
     40                        $prop['width']=0;
     41                if($prop['width']==0)
     42                        $prop['width']=$this->w-$this->lMargin-$this->rMargin;
     43                if(!isset($prop['align']))
     44                        $prop['align']='C';
     45                if(!isset($prop['padding']))
     46                        $prop['padding']=$this->cMargin;
     47                $cMargin=$this->cMargin;
     48                $this->cMargin=$prop['padding'];
     49                if(!isset($prop['HeaderColor']))
     50                        $prop['HeaderColor']=array();
     51                $this->HeaderColor=$prop['HeaderColor'];
     52                if(!isset($prop['color1']))
     53                        $prop['color1']=array();
     54                if(!isset($prop['color2']))
     55                        $prop['color2']=array();
     56                $this->RowColors=array($prop['color1'],$prop['color2']);
     57                //Calcule les largeurs des colonnes
     58                $this->CalcWidths($prop['width'],$prop['align']);
     59                //Imprime l'en-tête
     60                $this->TableHeader();
     61                //Imprime les lignes
     62                $this->SetFont('Arial','',8);
     63                $this->ColorIndex=0;
     64                $this->ProcessingTable=true;
     65                /* partie du code modifiee pour etendre la fonction Query */
     66                while($row=sql_fetch($res)) {
     67                        if (is_array($data[$row[$champ_jointure]])) $row = array_merge($row,$data[$row[$champ_jointure]]);
     68                        $this->RowMulticell($row);
     69                }
     70                /* fin de partie du code modifie pour etendre la fonction Query */
     71                $this->ProcessingTable=false;
     72                $this->cMargin=$cMargin;
     73                $this->aCols=array();
     74        }
     75
     76        /* fonction qui permet d'utiliser des multicells et non cells pour avoir du texte sur plusieurs lignes dans les cases  */
     77        function RowMultiCell($data){
     78                /* on commence par calculer le nombre de lignes de chaque cellule et le max */
     79                $max_nb_lignes = 1;
     80                $nb_lignes = array();
     81                foreach($this->aCols as $col) {
     82                        $lignes = explode("\n",$data[$col['f']]);
     83                        $nb_lignes[$col['f']] = count($lignes);
     84                        foreach ($lignes as $ligne) {
     85                                $nb_lignes[$col['f']] += floor(($this->GetStringWidth($ligne)+4)/$col['w']); /* le +4 c'est le padding a 2 dans pdf_adherents */
     86                        }
     87                        $max_nb_lignes = ($nb_lignes[$col['f']]>$max_nb_lignes)?$nb_lignes[$col['f']]:$max_nb_lignes;
     88                }
     89
     90                $x = $this->TableX;
     91                $y = $this->GetY();
     92                $this->SetX($x);
     93                $ci=$this->ColorIndex;
     94                $fill=!empty($this->RowColors[$ci]);
     95                if($fill)
     96                        $this->SetFillColor($this->RowColors[$ci][0],$this->RowColors[$ci][1],$this->RowColors[$ci][2]);
     97                $y = $this->GetY();
     98               
     99                foreach($this->aCols as $col) {
     100                        $this->SetX($x);                       
     101                        $y = $this->GetY();
     102                        $this->MultiCell($col['w'],5*$max_nb_lignes/$nb_lignes[$col['f']],utf8_decode($data[$col['f']]),1,$col['a'],$fill);
     103                        $this->SetY($y);
     104                        $x += $col['w'];
     105                       
     106
     107                }
     108                //$this->Ln();
     109                $this->setY($y+5*$max_nb_lignes);
     110                $this->ColorIndex=1-$ci;
     111        }
    26112}
    27113?>
Note: See TracChangeset for help on using the changeset viewer.