Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 685 | Rev 695 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
652 mathilde 1
<?php
2
/**
3
 * Classe PdfExport, réalise des exportations pdf des fiches de taxons.
664 mathilde 4
 * Les fonctionnalités proposées sont l'export de toutes les parties de la fiche pdf
5
 * ou bien des parties choisies.
6
 * (voir le squelette fiche_pdf_lien.tpl.html pour le formulaire dans le module fiche.)
7
 *
8
 * manuel wkhtmltopdf  : http://madalgo.au.dk/~jakobt/wkhtmltoxdoc/wkhtmltopdf_0.10.0_rc2-doc.html
9
 * pour changer de librairie : changer la fonction transformerHtmlEnPdf()
652 mathilde 10
 *
11
 * @category php 5.2
12
 * @package		eflore-consultation
13
 * @author	Mathilde Salthun-Lassalle <mathilde@tela-botanica.org>
14
 * @copyright	2012 Tela-Botanica
15
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
16
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
17
 * @version		$Id$
18
 *
664 mathilde 19
 *
652 mathilde 20
 */
21
 
22
require_once( Config::get('chemin_modules').'fiche/formateurs/Description.php');
23
require_once( Config::get('chemin_modules').'fiche/formateurs/Ecologie.php');
24
require_once( Config::get('chemin_modules').'fiche/formateurs/Classification.php');
25
require_once( Config::get('chemin_modules').'fiche/formateurs/Bibliographie.php');
26
require_once( Config::get('chemin_modules').'fiche/formateurs/Ethnobotanique.php');
27
require_once( Config::get('chemin_modules').'fiche/formateurs/Illustrations.php');
28
require_once( Config::get('chemin_modules').'fiche/formateurs/Nomenclature.php');
29
require_once( Config::get('chemin_modules').'fiche/formateurs/Repartition.php');
30
require_once( Config::get('chemin_modules').'fiche/formateurs/Statut.php');
31
 
32
class PdfExport extends aControleur {
33
 
34
 
35
	private $Conteneur;
36
	private $parametres = array();
37
	private $chemin_pdf;
38
	private $html;
39
	private $wkhtml;
40
	private $piedepage;
41
	private $fichier_pdf;
42
	private $blocs = array();
686 mathilde 43
 
652 mathilde 44
	private $Desc;
45
	private $Ecolo;
46
	private $Ethno;
47
	private $Classi;
48
	private $Illus;
49
	private $Nomen;
50
	private $Reparti;
51
	private $Stat;
52
	private $Biblio;
53
 
54
 
55
	public function initialiser() {
56
		$this->capturerParametres();
57
		$this->conteneur = new Conteneur($this->parametres);
58
		$this->chemin_pdf = Config::get('dossier_pdf');
59
		$this->wkhtml = Config::get('WKHTMLTOPDF');
60
		$this->Desc = new Description($this->conteneur);
660 mathilde 61
		$this->Ecolo = new Ecologie($this->conteneur);
62
		$this->Ethno = new Ethnobotanique($this->conteneur);
63
		$this->Classi = new Classification($this->conteneur);
652 mathilde 64
		$this->Illus = new Illustrations($this->conteneur);
65
		$this->Nomen = new Nomenclature($this->conteneur);
66
		$this->Stat = new Statut($this->conteneur);
660 mathilde 67
		$this->Biblio = new Bibliographie($this->conteneur);
68
		$this->Reparti = new Repartition($this->conteneur);
652 mathilde 69
		$this->piedepage = Config::get('chemin_modules').'pdf_export/squelettes/footer.html';
660 mathilde 70
		}
652 mathilde 71
 
686 mathilde 72
	private function getNomRetenu($Conteneur) {
73
		$nom_retenu = $this->conteneur->getNomCourant()->getNomRetenu()->get('nom_sci');
74
		$nom_retenu .= ' '.$this->conteneur->getNomCourant()->getNomRetenu()->get('auteur');
75
		return $nom_retenu;
76
	}
652 mathilde 77
 
686 mathilde 78
	private function getNomRetenuHTML($Conteneur) {
79
		$nom_retenu = '<span class="italique">'
80
					.$this->conteneur->getNomCourant()->getNomRetenu()->get('nom_sci')
81
					.'</span> '.$this->conteneur->getNomCourant()->getNomRetenu()->get('auteur');
82
		return $nom_retenu;
83
	}
84
 
85
	private function getNomFichierValide(){
86
		$nom_retenu = $this->conteneur->getNomCourant()->getNomRetenu()->get('nom_sci');
87
		$nom_retenu = str_replace(' ','_',$nom_retenu );
88
		$nom_retenu = preg_replace('/[\(\)\.\[\]]/','',$nom_retenu );
89
		return $nom_retenu;
90
	}
91
 
652 mathilde 92
	private function capturerParametres() {
93
		if (isset($_GET['num_nom'])) {
94
			$this->parametres['num_nom'] = $_GET['num_nom'];
95
		}
96
		if (isset($_GET['nom'])) {
97
			$this->parametres['nom'] = $_GET['nom'];
98
		}
99
		if (isset($_GET['type_nom'])) {
100
			$this->parametres['type_nom'] = $_GET['type_nom'];
101
		}
102
		if (isset($_GET['referentiel'])) {
103
			$this->parametres['referentiel'] = $_GET['referentiel'];
104
		}
105
 
106
		if (isset($_GET['niveau'])) {
107
			Registre::set('parametres.niveau', $_GET['niveau']);
108
		}
109
		if (isset($_GET['onglet'])) {
110
			$this->onglet = $_GET['onglet'];
111
		}
112
	}
113
 
114
	private function capturerParametresFormulaire() {
115
		if (!empty($_POST['bloc'])) {
116
			$this->blocs = $_POST['bloc'];
117
		} else {
118
			$this->blocs = array('description', 'ecologie', 'ethnobotanique',
119
								'statuts', 'illustrations', 'bibliographie',
120
								'classification', 'repartition', 'nomenclature');
121
		}
122
	}
123
 
124
	public function executerActionParDefaut() {
125
		$this->executerPdfExport();
126
	}
127
 
128
	public function executerPdfExport(){
129
			$this->capturerParametresFormulaire();
130
			$donnees = $this->obtenirDonnees();
131
			$this->construireHtml($donnees);
132
			$this->transformerHtmlEnPdf();
133
			$this->envoyerPdfAuNavigateur();
134
	}
135
 
136
 
137
	private function construireHtml($donnees) {
681 mathilde 138
		$this->html = $this->getVue('pdf_header', $donnees);
652 mathilde 139
		foreach ($this->blocs as $bloc) {
140
			$this->ajouterHtml($bloc, $donnees);
141
		}
142
		$this->html .= '</body></html>';
143
	}
144
 
145
 
146
	private function ajouterHtml($bloc, $donnees) {
147
		if (!empty($donnees[$bloc])) {
148
			$this->html .= $this->getVue('pdf_'.$bloc, $donnees);
149
		}
150
	}
151
 
152
	//++-------------------------------------récupération des données-----------------------------------++
153
 
154
	private function obtenirDonnees() {
155
		$donnees = array();
686 mathilde 156
		$donnees['donnees_pdf'] = array('nom' => $this->getNomRetenuHTML($this->conteneur),
660 mathilde 157
									'chemin_css' => Config::get('url_css_pdf'));
652 mathilde 158
		$donnees['description'] = $this->Desc->obtenirDonnees();
159
		$donnees['ecologie'] = $this->Ecolo->obtenirDonnees();
660 mathilde 160
		$donnees['ecologie']['legende_eco'] = Config::get('chemin_images').'legende_formes.png';
652 mathilde 161
		$donnees['statuts'] = $this->Stat->obtenirDonnees();
162
		$donnees['ethnobotanique'] = $this->Ethno->obtenirDonnees();
163
		$donnees['classification'] = $this->Classi->obtenirDonnees();
164
		$donnees['illustrations'] = $this->Illus->obtenirDonnees();
165
		$donnees['nomenclature'] = $this->Nomen->obtenirDonnees();
166
		$donnees['repartition'] = $this->Reparti->obtenirDonnees();
167
		$donnees['repartition']['min'] = $this->Reparti->getBloc();
168
		$donnees['bibliographie'] = $this->Biblio->obtenirDonnees();
672 mathilde 169
		$donnees['premier'] = $this->blocs[0];// pour page-break : éviter 1ere page vide si bloc trop long
652 mathilde 170
		return $donnees;
171
	}
172
 
173
 //++ ------------------------------------------------export en pdf--------------------------------------++
174
 
664 mathilde 175
 
652 mathilde 176
	private function envoyerPdfAuNavigateur() {
686 mathilde 177
		$nom_fichier = $this->getNomFichierValide();
652 mathilde 178
		header('Content-type: application/pdf');
686 mathilde 179
		header('Content-Disposition: attachment; filename='.$nom_fichier.'.pdf');
652 mathilde 180
		readfile($this->fichier_pdf);
664 mathilde 181
		unlink($this->fichier_html);
182
		unlink($this->fichier_pdf);
652 mathilde 183
	}
184
 
185
 
186
 
187
	//version WKHTMLtoPDF en ligne de commande
188
	private function transformerHtmlEnPdf() {
686 mathilde 189
		$nom_fichier = $this->getNomFichierValide();
652 mathilde 190
		$time = $_SERVER['REQUEST_TIME'] ;
686 mathilde 191
		$this->fichier_html = $this->chemin_pdf.''.$nom_fichier.'-'.$time.'.html';
192
		$this->fichier_pdf = $this->chemin_pdf.''.$nom_fichier.'-'.$time.'.pdf';
193
		$nom = $this->getNomRetenu($this->conteneur);
664 mathilde 194
		file_put_contents($this->fichier_html, $this->html);
652 mathilde 195
		$commande =
685 mathilde 196
			" {$this->wkhtml}  --replace 'nom' '$nom' --footer-html {$this->piedepage} --encoding utf-8  {$this->fichier_html} {$this->fichier_pdf} 2>&1";
652 mathilde 197
		$debug = exec($commande);
198
		//echo $debug;
199
	}
200
 
201
 
202
 
203
 
204
 
205
}
206
 
207
?>