source: spip-zone/_plugins_/Association/Associaspip/pdf/extends.php @ 48173

Last change on this file since 48173 was 48173, checked in by jeannolapin@…, 10 years ago

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

File size: 4.2 KB
Line 
1<?
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5
6define('FPDF_FONTPATH','font/');
7include_spip('pdf/pdf_table');
8include_spip('inc/charsets');
9
10class PDF extends PDF_Table {
11
12        function PDF(){
13                $this->FPDF('L', 'mm', 'A4');
14        }
15       
16        function Header(){
17                //Titre
18                $this->SetFont('Arial','',10);
19                $this->Cell(0,6,$GLOBALS['association_metas']['nom'],0,1,'L');
20                $this->SetFont('Arial','B',14);
21                $this->Cell(0,6,unicode2charset(html2unicode($this->titre)),0,1,'C');
22                $this->Ln(10);
23                //Imprime l'en-tête du tableau si nécessaire
24                parent::Header();
25        }
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        }
112}
113?>
Note: See TracBrowser for help on using the repository browser.