Subversion Repositories eFlore/Applications.cel

Rev

Rev 1001 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1001 Rev 1002
Line 1... Line 1...
1
<?php
1
<?php
2
Class CelEfloreImages extends Cel {
2
class CelEfloreImages extends Cel {
Line 3... Line 3...
3
	
3
	
-
 
4
	private $formats_supportes = array('image/jpeg');
-
 
5
	private $format_retour_demande = 'image/jpeg';
-
 
6
	private $format_image_demande = 'M';
-
 
7
	private $num_nom_demande = null;
Line -... Line 8...
-
 
8
	private $ref_tax_demande = 'bdtfx';
-
 
9
	
4
	private $formats_supportes = array('image/jpeg');
10
	private $pattern_ref_tax_nn_composes = '/(([a-zA-Z]:((([0-9])+,)*([0-9])+));)*([a-zA-Z]:((([0-9])+,)*([0-9])+))*/i';
5
	
11
	
6
	function getElement($uid) {
12
	public function getElement($uid) {
Line 7... Line 13...
7
		return getRessource();
13
		return getRessource();
-
 
14
	}
-
 
15
	
-
 
16
	public function getRessource() {
-
 
17
		//TODO masque.nn = bdtfx:num_nom
-
 
18
		//TODO voir quels paramètres sont à passer en attributs de classe
-
 
19
		$parametres = $this->recupererParametresBruts();		
-
 
20
		$parametres = array_merge($parametres);
-
 
21
	
-
 
22
		try {
-
 
23
			$this->verifierErreurs($parametres);
-
 
24
			$this->affecterParametres($parametres);
-
 
25
			$id_image_a_renvoyer = $this->obtenirImageAuHasardPourNumNom($this->ref_tax_demande, $this->num_nom_demande);
-
 
26
			$this->traiterRetour($id_image_a_renvoyer);
-
 
27
		} catch (Exception $e) {
-
 
28
			$header = $this->renvoyerHeaderAssocie($e->getCode());
-
 
29
			$message = $e->getMessage();
-
 
30
			
-
 
31
			header($header);
Line 8... Line 32...
8
	}
32
			$this->envoyerTexteSimple($message);
-
 
33
		}
9
	
34
	}
-
 
35
	
Line 10... Line 36...
10
	function getRessource(){
36
	private function envoyerTexteSimple($chaine) {
11
	
-
 
12
		$parametres = $this->recupererParametresBruts();
37
		header("Content-type: text/plain");
13
		$header = '';
38
		echo $chaine;
14
	
39
	}
-
 
40
	
Line -... Line 41...
-
 
41
	private function traiterRetour($id_image_a_renvoyer) {
15
		if (!$erreurs = $this->parametresOntErreurs($parametres)) {
42
		switch($this->format_retour_demande) {
-
 
43
			case 'image/jpeg':
-
 
44
				$this->renvoyerImageExistanteOuGeneree($id_image_a_renvoyer, $this->format_image_demande);
-
 
45
			break;
16
		
46
			
17
			$num_nom = $parametres['masque.nn'];
47
			default:
-
 
48
				$this->renvoyerImageExistanteOuGeneree($id_image_a_renvoyer, 'image/jpeg');
18
			$retour = isset($parametres['retour']) ? $parametres['retour'] : 'image/jpeg';
49
			break;
19
			$format = isset($parametres['retour.format']) ? $parametres['retour.format'] : 'M';
50
		}
20
			
51
	}
21
			$id_image_a_renvoyer = $this->obtenirImageAuHasardPourNumNom($num_nom);
52
	
22
				
-
 
23
			$header = $id_image_a_renvoyer ? "HTTP/1.0 200 OK" : "HTTP/1.0 404 Not Found";
-
 
24
			$erreurs = $id_image_a_renvoyer ? false : 'Aucune image ne corespond au numéro numenclatural '.$num_nom."\n";
-
 
25
		} else {
-
 
26
			$header = "HTTP/1.0 400 Bad Request";		
-
 
27
		}
53
	private function renvoyerImageExistanteOuGeneree($id_image_a_renvoyer, $format = 'M') {
Line 28... Line 54...
28
		
54
		if ($this->estUnFormatDejaCree($format)) {
-
 
55
			$this->renvoyerImageExistante($id_image_a_renvoyer, $format);
-
 
56
		} else {
-
 
57
			$this->renvoyerImageGeneree($id_image_a_renvoyer, $format);
-
 
58
		}
29
		header($header);
59
	}
-
 
60
	
30
		
61
	private function renvoyerImageExistante($id_image, $format = 'M') {
-
 
62
		$generateur_image = new ImageRecreation($this->config);
-
 
63
		$chemin = $generateur_image->functionObtenirCheminImagePourFormat($id_image, $format);
31
		$erreurs ? $this->renvoyerTexteSimple($erreurs) : $this->renvoyerImageExistanteOuGeneree($id_image_a_renvoyer, $format);
64
		if(file_exists($chemin)) {
Line 32... Line 65...
32
		exit;
65
			header("HTTP/1.0 200 OK");
33
	}
-
 
34
	
66
			header("Content-type: image/jpeg");
-
 
67
			echo file_get_contents($chemin);  
-
 
68
		} else {
Line 35... Line -...
35
	private function renvoyerTexteSimple($erreurs) {
-
 
36
		header("Content-type: text/plain");
69
			throw new Exception("L\'image demandée est introuvable sur le serveur", "404");
37
		echo $erreurs;
-
 
38
	}
-
 
39
	
70
		}
40
	private function renvoyerImageExistanteOuGeneree($id_image, $format = 'M') {
71
	}
41
		
-
 
42
		$generateur_image = new ImageRecreation($this->config);
-
 
43
		
-
 
44
		header("Content-type: image/jpeg");
72
	
-
 
73
	private function renvoyerImageGeneree($id_image, $format = 'M') {
-
 
74
		$generateur_image = new ImageRecreation($this->config);
45
		if ($this->estUnFormatDejaCree($format)) {
75
		$infos_image = $generateur_image->obtenirImageEtInfosPourId($id_image);
46
			$nom = $generateur_image->convertirIdBddVersNomFichier($id_image, $format);
76
		$image_a_renvoyer = $generateur_image->creerMiniatureImageSelonFormat($infos_image, $format);
Line 47... Line 77...
47
			$dossier = $generateur_image->obtenirDossierPourFormat($id_image, $format);
77
		
48
			$chemin_image =  $dossier.'/'.$nom;
-
 
-
 
78
		if($image_a_renvoyer) {
-
 
79
			header("HTTP/1.0 200 OK");
49
			echo file_get_contents($chemin_image);
80
			header("Content-type: image/jpeg");
50
		} else {
81
			imagejpeg($image_a_renvoyer);
51
			$infos_image = $generateur_image->obtenirImageEtInfosPourId($id_image);
82
		} else {
52
			$image_a_renvoyer = $generateur_image->creerMiniatureImageSelonFormat($infos_image, $format);
83
			throw new Exception("Problème lors de la génération de la miniature", "500");
53
			imagejpeg($image_a_renvoyer);
84
		}
54
		}
85
	}
55
	}
86
	
56
	
87
	private function obtenirImageAuHasardPourNumNom($ref_tax, $num_nom) {
57
	private function obtenirImageAuHasardPourNumNom($numero_nomenclatural) {
88
		//TODO: modifier la requete lors du passage à la nouvelle base de données pour faire quelques chose
58
 
89
		// du numéro nomenclatural
59
		$requete = 	'SELECT  cim.ci_id_image as id_image '.
90
		$requete = 	'SELECT  cim.ci_id_image as id_image '.
-
 
91
						'FROM cel_obs_images AS coi '.
60
					'FROM cel_obs_images AS coi '.
92
						'LEFT JOIN cel_inventory AS ci '.
-
 
93
							'ON (coi.coi_ce_observation = ci.ordre AND coi.coi_ce_utilisateur = ci.identifiant) '.
-
 
94
						'LEFT JOIN cel_images AS cim '.
-
 
95
							'ON (coi.coi_ce_image = cim.ci_id_image AND coi.coi_ce_utilisateur = cim.ci_ce_utilisateur) '.  
Line -... Line 96...
-
 
96
						'WHERE ci.transmission = 1 '.
61
					'LEFT JOIN cel_inventory AS ci '.
97
						'	AND num_nom_sel = '.$this->proteger($num_nom).
62
						'ON (coi.coi_ce_observation = ci.ordre AND coi.coi_ce_utilisateur = ci.identifiant) '.
98
						'	AND ci.identifiant = cim.ci_ce_utilisateur ';
63
					'LEFT JOIN cel_images AS cim '.
99
			
64
						'ON (coi.coi_ce_image = cim.ci_id_image AND coi.coi_ce_utilisateur = cim.ci_ce_utilisateur) '.  
-
 
65
					'WHERE ci.transmission = 1 '.
-
 
66
					'	AND num_nom_sel = '.$this->proteger($numero_nomenclatural).
-
 
67
					'	AND ci.identifiant = cim.ci_ce_utilisateur ';
-
 
68
		
-
 
69
		$resultat_images = $this->executerRequete($requete);
-
 
70
		$id_image_hasard = (is_array($resultat_images) && count($resultat_images) > 0) ? $resultat_images[array_rand($resultat_images)]['id_image'] : false;
-
 
71
		
-
 
72
		return $id_image_hasard;
-
 
73
	}
-
 
74
	
-
 
75
	private function nettoyerParametres(Array $parametres) {
100
		$resultat_images = $this->executerRequete($requete);
76
		// Pas besoin d'utiliser urldecode car déjà fait par php pour les clés et valeur de $_GET
101
 
77
		if (isset($parametres) && count($parametres) > 0) {
102
		if (!is_array($resultat_images) || count($resultat_images) <= 0) {
78
			foreach ($parametres as $cle => $valeur) {
103
			$erreur = 'Aucune image ne correspond au numéro numenclatural '.$ref_tax.':'.$num_nom."\n";
79
				$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
104
			throw new Exception("404");	
Line 96... Line 121...
96
			$parametres_bruts = $this->nettoyerParametres($parametres_bruts);
121
			$parametres_bruts = $this->nettoyerParametres($parametres_bruts);
97
		}
122
		}
98
		return $parametres_bruts;
123
		return $parametres_bruts;
99
	}
124
	}
Line -... Line 125...
-
 
125
	
-
 
126
	private function nettoyerParametres(Array $parametres) {
-
 
127
		// Pas besoin d'utiliser urldecode car déjà fait par php pour les clés et valeur de $_GET
-
 
128
		if (isset($parametres) && count($parametres) > 0) {
-
 
129
			foreach ($parametres as $cle => $valeur) {
-
 
130
				$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
-
 
131
				$parametres[$cle] = strip_tags(str_replace($verifier, '', $valeur));
-
 
132
			}
-
 
133
		}
-
 
134
		return $parametres;
-
 
135
	}
100
	
136
	
101
	private function parametresOntErreurs($parametres) {
137
	private function verifierErreurs($parametres) {
-
 
138
		$erreurs = false;
102
		$erreurs = false;
139
		
103
		if (!isset($parametres['masque.nn'])) {
140
		if (!isset($parametres['masque.nn'])) {
104
			$erreurs .= 'Le paramètre masque.nn est obligatoire '."\n";
141
			$erreurs .= 'Le paramètre masque.nn est obligatoire '."\n";
105
		} else {
142
		} else {
106
			if (!is_numeric($parametres['masque.nn'])) {
143
			if(!preg_match($this->pattern_ref_tax_nn_composes, $parametres['masque.nn'])) {
107
				$erreurs .= 'Le paramètre masque.nn est mal formé '."\n";
144
				$erreurs .= 'Le paramètre masque.nn est mal formé '."\n";
108
			}
145
			}
Line 109... Line 146...
109
		}
146
		}
Line 114... Line 151...
114
		
151
		
115
		if (isset($parametres['retour.format']) && !$this->formatEstSupporte($parametres['retour.format'])) {
152
		if (isset($parametres['retour.format']) && !$this->formatEstSupporte($parametres['retour.format'])) {
116
			$erreurs .= 'Le type de format '.$parametres['retour.format'].' n\'est pas supporté  '."\n";
153
			$erreurs .= 'Le type de format '.$parametres['retour.format'].' n\'est pas supporté  '."\n";
Line 117... Line 154...
117
		}
154
		}
-
 
155
		
-
 
156
		if($erreurs != '') {
-
 
157
			throw new Exception($erreurs, "400");
-
 
158
		}
-
 
159
	}
-
 
160
	
-
 
161
	private function affecterParametres($parametres) {
-
 
162
		// cette fonction est appelée en considérant que les vérifications d'erreurs ont été passées 
-
 
163
		// avec succès
-
 
164
		$this->analyserMasqueNumNom($parametres['masque.nn']);
-
 
165
		if(isset($parametres['retour'])) {
-
 
166
			$this->format_retour_demande =  $parametres['retour'] ;
-
 
167
		}
-
 
168
		if(isset($parametres['retour.format'])) {
-
 
169
			$this->format_image_demande = $parametres['retour.format'];
-
 
170
		}
-
 
171
	}
-
 
172
	
-
 
173
	private function analyserMasqueNumNom($masque_num_nom) {
-
 
174
		// cette fonction est appelée en considérant que le masque num nom est valide
-
 
175
		//
-
 
176
		// cas du numero sans référentiel : ref tax par defaut
-
 
177
		if(is_numeric($masque_num_nom)) {
-
 
178
			$this->num_nom_demande = $masque_num_nom;
-
 
179
		} else {
-
 
180
			// ceci contient potentiellement des formes ref_tax1:nn1,nn2;ref_tax2:nn3,nn4
-
 
181
			$composants_masques = explode(';', $masque_num_nom);
-
 
182
			if (count($composants_masques) > 0) {
-
 
183
				foreach($composants_masques as $composant_ref_nn) {
-
 
184
					$ref_nn = explode(':', $composant_ref_nn);
-
 
185
					$this->ref_tax_demande[$composant_ref_nn[0]] = explode(',', $composant_ref_nn[1]);
-
 
186
				}
118
		
187
			}
Line 119... Line 188...
119
		return $erreurs;
188
		}
120
	}
189
	}
Line 155... Line 224...
155
		$formats = $this->getFormats();
224
		$formats = $this->getFormats();
156
		$format_supporte = isset($formats['format_'.$format]) ? true : false;
225
		$format_supporte = isset($formats['format_'.$format]) ? true : false;
Line 157... Line 226...
157
 
226
 
158
		return $format_supporte;
227
		return $format_supporte;
-
 
228
	}	
-
 
229
	
-
 
230
	private function renvoyerHeaderAssocie($code) {
-
 
231
		switch ($code) {
-
 
232
			
-
 
233
			case '500':
-
 
234
				$header = "HTTP/1.0 500 Internal Server Error";
-
 
235
			break;
-
 
236
			
-
 
237
			case '404':
-
 
238
				$header = "HTTP/1.0 404 Not Found";
-
 
239
			break;
-
 
240
			
-
 
241
			case '400':
-
 
242
				$header = "HTTP/1.0 400 Bad Request";
-
 
243
			break;
-
 
244
				
-
 
245
			case '200':
-
 
246
				$header = "HTTP/1.0 200 OK";
-
 
247
			break;
-
 
248
			
-
 
249
			default:
-
 
250
			break;
-
 
251
		}
159
	}	
252
	}
160
}
253
}
161
?>
254
?>