Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 845 | Rev 1006 | 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
 
23
class PdfExport extends aControleur {
24
 
25
 
26
	private $Conteneur;
27
	private $parametres = array();
28
	private $chemin_pdf;
29
	private $html;
30
	private $wkhtml;
31
	private $piedepage;
32
	private $fichier_pdf;
33
	private $blocs = array();
686 mathilde 34
 
652 mathilde 35
	private $Desc;
36
	private $Ecolo;
37
	private $Ethno;
38
	private $Illus;
39
	private $Nomen;
40
	private $Reparti;
41
	private $Stat;
42
	private $Biblio;
43
 
44
 
45
	public function initialiser() {
695 mathilde 46
		spl_autoload_register(array($this, 'chargerClassesOnglets'));
652 mathilde 47
		$this->capturerParametres();
48
		$this->conteneur = new Conteneur($this->parametres);
49
		$this->chemin_pdf = Config::get('dossier_pdf');
50
		$this->wkhtml = Config::get('WKHTMLTOPDF');
51
		$this->Desc = new Description($this->conteneur);
660 mathilde 52
		$this->Ecolo = new Ecologie($this->conteneur);
53
		$this->Ethno = new Ethnobotanique($this->conteneur);
652 mathilde 54
		$this->Illus = new Illustrations($this->conteneur);
55
		$this->Nomen = new Nomenclature($this->conteneur);
56
		$this->Stat = new Statut($this->conteneur);
660 mathilde 57
		$this->Biblio = new Bibliographie($this->conteneur);
58
		$this->Reparti = new Repartition($this->conteneur);
652 mathilde 59
		$this->piedepage = Config::get('chemin_modules').'pdf_export/squelettes/footer.html';
660 mathilde 60
		}
695 mathilde 61
 
62
 
63
		private function chargerClassesOnglets($classe) {
64
			$base = dirname(__FILE__).DS;
65
			$cheminFormateurs = $base.'../fiche/formateurs'.DS;
66
			$dossiers = array($base, $cheminFormateurs);
67
			foreach ($dossiers as $chemin) {
68
				$fichierATester = $chemin.$classe.'.php';
69
				if (file_exists($fichierATester)) {
70
					include_once $fichierATester;
71
					return null;
72
				}
73
			}
74
		}
652 mathilde 75
 
701 mathilde 76
	private function getNomRetenu() {
686 mathilde 77
		$nom_retenu = $this->conteneur->getNomCourant()->getNomRetenu()->get('nom_sci');
78
		return $nom_retenu;
79
	}
652 mathilde 80
 
701 mathilde 81
	private function getNomRetenuHTML() {
686 mathilde 82
		$nom_retenu = '<span class="italique">'
83
					.$this->conteneur->getNomCourant()->getNomRetenu()->get('nom_sci')
84
					.'</span> '.$this->conteneur->getNomCourant()->getNomRetenu()->get('auteur');
85
		return $nom_retenu;
86
	}
87
 
88
	private function getNomFichierValide(){
89
		$nom_retenu = $this->conteneur->getNomCourant()->getNomRetenu()->get('nom_sci');
90
		$nom_retenu = str_replace(' ','_',$nom_retenu );
91
		$nom_retenu = preg_replace('/[\(\)\.\[\]]/','',$nom_retenu );
92
		return $nom_retenu;
93
	}
94
 
652 mathilde 95
	private function capturerParametres() {
96
		if (isset($_GET['num_nom'])) {
97
			$this->parametres['num_nom'] = $_GET['num_nom'];
98
		}
99
		if (isset($_GET['nom'])) {
100
			$this->parametres['nom'] = $_GET['nom'];
101
		}
102
		if (isset($_GET['type_nom'])) {
103
			$this->parametres['type_nom'] = $_GET['type_nom'];
104
		}
105
		if (isset($_GET['referentiel'])) {
106
			$this->parametres['referentiel'] = $_GET['referentiel'];
107
		}
108
 
109
		if (isset($_GET['niveau'])) {
110
			Registre::set('parametres.niveau', $_GET['niveau']);
111
		}
112
		if (isset($_GET['onglet'])) {
113
			$this->onglet = $_GET['onglet'];
114
		}
115
	}
116
 
117
	private function capturerParametresFormulaire() {
118
		if (!empty($_POST['bloc'])) {
119
			$this->blocs = $_POST['bloc'];
120
		} else {
121
			$this->blocs = array('description', 'ecologie', 'ethnobotanique',
122
								'statuts', 'illustrations', 'bibliographie',
845 delphine 123
								'repartition', 'nomenclature');
652 mathilde 124
		}
125
	}
126
 
127
	public function executerActionParDefaut() {
128
		$this->executerPdfExport();
129
	}
130
 
131
	public function executerPdfExport(){
715 mathilde 132
 
652 mathilde 133
			$this->capturerParametresFormulaire();
134
			$donnees = $this->obtenirDonnees();
135
			$this->construireHtml($donnees);
1005 raphael 136
			if ($this->transformerHtmlEnPdf()) {
137
				$this->envoyerPdfAuNavigateur();
138
			}
139
			else {
140
				die('erreur de generation du fichier PDF');
141
			}
652 mathilde 142
	}
143
 
144
 
145
	private function construireHtml($donnees) {
681 mathilde 146
		$this->html = $this->getVue('pdf_header', $donnees);
652 mathilde 147
		foreach ($this->blocs as $bloc) {
148
			$this->ajouterHtml($bloc, $donnees);
149
		}
150
		$this->html .= '</body></html>';
151
	}
152
 
153
 
154
	private function ajouterHtml($bloc, $donnees) {
155
		if (!empty($donnees[$bloc])) {
156
			$this->html .= $this->getVue('pdf_'.$bloc, $donnees);
157
		}
158
	}
159
 
160
	//++-------------------------------------récupération des données-----------------------------------++
161
 
162
	private function obtenirDonnees() {
163
		$donnees = array();
715 mathilde 164
		$version = $this->Nomen->obtenirVersionDonnees();
701 mathilde 165
		$donnees['donnees_pdf'] = array('nom' => $this->getNomRetenuHTML(),
715 mathilde 166
									'chemin_css' => Config::get('url_css_pdf'),
167
									'version' => $version['version']);
695 mathilde 168
		$donnees['description'] = $this->Desc->obtenirDonneesExport();
169
		$donnees['ecologie'] = $this->Ecolo->obtenirDonneesExport();
652 mathilde 170
		$donnees['statuts'] = $this->Stat->obtenirDonnees();
171
		$donnees['ethnobotanique'] = $this->Ethno->obtenirDonnees();
695 mathilde 172
		$donnees['illustrations'] = $this->Illus->obtenirDonneesExport();
652 mathilde 173
		$donnees['nomenclature'] = $this->Nomen->obtenirDonnees();
695 mathilde 174
		$donnees['repartition'] = $this->Reparti->obtenirDonneesExport();
652 mathilde 175
		$donnees['bibliographie'] = $this->Biblio->obtenirDonnees();
672 mathilde 176
		$donnees['premier'] = $this->blocs[0];// pour page-break : éviter 1ere page vide si bloc trop long
652 mathilde 177
		return $donnees;
178
	}
179
 
180
 //++ ------------------------------------------------export en pdf--------------------------------------++
181
 
664 mathilde 182
 
652 mathilde 183
	private function envoyerPdfAuNavigateur() {
686 mathilde 184
		$nom_fichier = $this->getNomFichierValide();
652 mathilde 185
		header('Content-type: application/pdf');
686 mathilde 186
		header('Content-Disposition: attachment; filename='.$nom_fichier.'.pdf');
652 mathilde 187
		readfile($this->fichier_pdf);
664 mathilde 188
		unlink($this->fichier_html);
189
		unlink($this->fichier_pdf);
652 mathilde 190
	}
191
 
192
 
193
 
194
	//version WKHTMLtoPDF en ligne de commande
195
	private function transformerHtmlEnPdf() {
686 mathilde 196
		$nom_fichier = $this->getNomFichierValide();
652 mathilde 197
		$time = $_SERVER['REQUEST_TIME'] ;
686 mathilde 198
		$this->fichier_html = $this->chemin_pdf.''.$nom_fichier.'-'.$time.'.html';
199
		$this->fichier_pdf = $this->chemin_pdf.''.$nom_fichier.'-'.$time.'.pdf';
701 mathilde 200
		$nom = $this->getNomRetenu();
664 mathilde 201
		file_put_contents($this->fichier_html, $this->html);
703 mathilde 202
		$commande =	"{$this->wkhtml}  --replace 'nom' '$nom' --encoding utf-8  --footer-html {$this->piedepage} {$this->fichier_html} {$this->fichier_pdf}";
1005 raphael 203
		$ret = -1;
204
		$debug = array();
205
		exec($commande, $debug, $ret);
206
		//print_r( $debug ); echo $ret;
207
		return ( $ret == 0 );
652 mathilde 208
	}
209
}
210
?>