Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 1005 | Rev 1011 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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