Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1068 Rev 1350
Line 15... Line 15...
15
 * @copyright © 2011, Jean-Pascal MILCENT
15
 * @copyright © 2011, Jean-Pascal MILCENT
16
 */
16
 */
17
class CelWidgetSaisie extends CelMotCle {
17
class CelWidgetSaisie extends CelMotCle {
Line 18... Line 18...
18
 
18
 
-
 
19
	private $projet = null;
-
 
20
	private $tagsObs = null;
19
	private $projet = null;
21
	private $tagsImg = null;
20
	private $utilisateur_id = null;
-
 
21
 
22
	private $utilisateur_id = null;
22
	public function getElement($params) {
23
	const DUREE_DE_VIE_IMG = 86400;// 3600 * 24 * 2 = 172 800
23
		//$resultat[] = $this->ajouterMotCleObs('jpm@clapas.org', 'Projets coopératifs', self::OBS_RACINE_ID.'.projets-cooperatifs', self::OBS_RACINE_ID);
-
 
24
		//$resultat[] = $this->ajouterMotCleObs('jpm@clapas.org', 'Biodiversite34', self::OBS_RACINE_ID.'.projets-cooperatifs.biodiversite34', self::OBS_RACINE_ID.'.projets-cooperatifs');
-
 
25
		//$this->envoyerJson($resultat);
-
 
Line 26... Line 24...
26
	}
24
	const ARRET_SERVICE = false;// Permet de bloquer le service en cas de problème sur le serveur
-
 
25
 
-
 
26
	public function createElement($requeteDonnees) {
27
 
27
		if (self::ARRET_SERVICE) {
28
	public function createElement($requeteDonnees) {
28
			$this->messages[] = "Désactivation temporaire du service d'envoi des données au CEL.";
29
		if (array_key_exists('projet', $requeteDonnees)) {
29
		} else if (array_key_exists('projet', $requeteDonnees)) {
-
 
30
			$this->debug[] = 'Projet : ok';
-
 
31
			$this->projet = $requeteDonnees['projet'];
-
 
32
			if (array_key_exists('tag-obs', $requeteDonnees) && $requeteDonnees['tag-obs'] != '') {
-
 
33
				$this->tagsObs = explode(',', $requeteDonnees['tag-obs']);
-
 
34
			}
-
 
35
			$this->tagsObs[] = 'Projets coopératifs>'.$this->projet;
-
 
36
			if (array_key_exists('tag-img', $requeteDonnees) && $requeteDonnees['tag-img'] != '') {
-
 
37
				$this->tagsImg = explode(',', $requeteDonnees['tag-img']);
30
			$this->debug[] = 'Projet : ok';
38
			}
31
			$this->projet = $requeteDonnees['projet'];
39
			$this->tagsImg[] = 'Projets coopératifs>'.$this->projet;
32
			if (array_key_exists('utilisateur', $requeteDonnees)) {
40
			if (array_key_exists('utilisateur', $requeteDonnees)) {
33
				$this->debug[] = 'Utilisateur : ok';
41
				$this->debug[] = 'Utilisateur : ok';
34
				$utilisateur = $requeteDonnees['utilisateur'];
42
				$utilisateur = $requeteDonnees['utilisateur'];
-
 
43
				if (array_key_exists('courriel', $utilisateur)) {
35
				if (array_key_exists('courriel', $utilisateur)) {
44
					$this->debug[] = 'Courriel : ok';
36
					$this->debug[] = 'Courriel : ok';
45
					$utilisateur = $this->affecterChampsManquantsUtilisateur($utilisateur);
37
					extract($utilisateur);
46
					extract($utilisateur);
38
					$this->utilisateur_id = $courriel;
47
					$this->utilisateur_id = $id_utilisateur;
39
					$ordre = $this->getMaxOrdre($courriel);
48
					$ordre = $this->getMaxOrdre($id_utilisateur);
-
 
49
					if (!is_null($ordre)) {
40
					if (!is_null($ordre)) {
50
						$requeteDonnees = $this->supprimerSlashesProfond($requeteDonnees);
41
						$this->debug[] = 'Ordre : ok';
51
 
42
						// Triage et manipulation des données
52
						// Triage et manipulation des données
43
						$observations = array();
53
						$observations = array();
44
						foreach ($requeteDonnees as $cle => $obs) {
54
						foreach ($requeteDonnees as $cle => $obs) {
-
 
55
							if (preg_match('/^obsId[0-9]+$/', $cle)) {
-
 
56
								$ordreObs = $ordre++;
-
 
57
 
Line 45... Line 58...
45
							if (preg_match('/^obsId[0-9]+$/', $cle)) {
58
								$this->debug[] = 'commune_nom : '.$obs['commune_nom'];
-
 
59
								$this->debug[] = 'commune_code_insee : '.$obs['commune_code_insee'];
46
								$idObs = $ordre++;
60
 
47
 
61
								$obsAAjouter = array();
48
								$obsAAjouter = array();
62
								$obsAAjouter['ce_utilisateur'] = $id_utilisateur;
49
								$obsAAjouter['identifiant'] = $courriel;
63
								$obsAAjouter['courriel_utilisateur'] = $courriel;
-
 
64
								$obsAAjouter['prenom_utilisateur'] = $prenom;
50
								$obsAAjouter['prenom_utilisateur'] = $prenom;
65
								$obsAAjouter['nom_utilisateur'] = $nom;
51
								$obsAAjouter['nom_utilisateur'] = $nom;
66
								$obsAAjouter['ordre'] = $ordreObs;
52
								$obsAAjouter['ordre'] = $idObs;
67
 
53
								$obsAAjouter['nom_sel'] = $obs['nom_sel'];
68
								$obsAAjouter['nom_sel'] = $obs['nom_sel'];
54
								$obsAAjouter['num_nom_sel'] = $obs['num_nom_sel'];
69
								$obsAAjouter['nom_sel_nn'] = isset($obs['num_nom_sel']) ? $obs['num_nom_sel'] : null;
55
								$obsAAjouter['nom_ret'] = $obs['nom_ret'];
70
								$obsAAjouter['nom_ret'] = isset($obs['nom_ret']) ? $obs['nom_ret'] : null;
-
 
71
								$obsAAjouter['nom_ret_nn'] = isset($obs['num_nom_ret']) ? $obs['num_nom_ret'] : null;
-
 
72
								$obsAAjouter['nt'] = isset($obs['num_taxon']) ? $obs['num_taxon'] : null;
56
								$obsAAjouter['num_nom_ret'] = $obs['num_nom_ret'];
73
								$obsAAjouter['famille'] = isset($obs['famille']) ? $obs['famille'] : null;
57
								$obsAAjouter['num_taxon'] = $obs['num_taxon'];
-
 
58
								$obsAAjouter['famille'] = $obs['famille'];
74
								$obsAAjouter['nom_referentiel'] = isset($obs['referentiel']) ? $obs['referentiel'] : null;
-
 
75
 
-
 
76
								$obsAAjouter['date_observation'] = $this->transormerDateFrVersMysql($obs['date']);
-
 
77
								$obsAAjouter['commentaire'] = $obs['notes'];
-
 
78
 
-
 
79
								$obsAAjouter['zone_geo'] = $obs['commune_nom'];
-
 
80
								$obsAAjouter['ce_zone_geo'] = 'INSEE-C:'.$obs['commune_code_insee'];
-
 
81
								$obsAAjouter['lieudit'] = isset($obs['lieudit']) ? $obs['lieudit'] : null;
-
 
82
								$obsAAjouter['station'] = isset($obs['station']) ? $obs['station'] : null;
-
 
83
								$obsAAjouter['milieu'] = $obs['milieu'];
-
 
84
								$obsAAjouter['latitude'] = $obs['latitude'];
59
								$obsAAjouter['date_observation'] = $this->transormerDateFrVersMysql($obs['date']);
85
								$obsAAjouter['longitude'] = $obs['longitude'];
60
								$obsAAjouter['milieu'] = $obs['milieu'];
86
								$obsAAjouter['geodatum'] = 'WGS84';
61
								$obsAAjouter['commentaire'] = $obs['notes'];
87
 
62
								$obsAAjouter['transmission'] = '1';
-
 
63
								$obsAAjouter['date_creation'] = date('Y-m-d H:i:s');
-
 
64
								$obsAAjouter['date_transmission'] = date('Y-m-d H:i:s');
88
								$obsAAjouter['transmission'] = '1';
65
								$obsAAjouter['coord_x'] = $obs['latitude'];
-
 
66
								$obsAAjouter['coord_y'] = $obs['longitude'];
-
 
Line 67... Line 89...
67
								$obsAAjouter['location'] = $obs['commune_nom'];
89
								$obsAAjouter['date_creation'] = date('Y-m-d H:i:s');
68
								$obsAAjouter['id_location'] = substr($obs['commune_code_insee'], 0, 2);
90
								$obsAAjouter['date_modification'] = $obsAAjouter['date_creation'];
69
								$obsAAjouter['ref_geo'] = 'WGS84';
91
								$obsAAjouter['date_transmission'] = $obsAAjouter['date_creation'];
70
 
92
 
71
								$imgAAjouter = null;
93
								$imgAAjouter = null;
72
								if (!empty($obs['image_nom'])) {
94
								if (!empty($obs['image_nom'])) {
73
									$imgAAjouter = array();
95
									$imgAAjouter = array();
-
 
96
									$imgAAjouter['id_utilisateur'] = $id_utilisateur;
74
									$imgAAjouter['id_utilisateur'] = $courriel;
97
									$imgAAjouter['id_obs'] = $ordreObs;
Line 75... Line 98...
75
									$imgAAjouter['id_obs'] = $idObs;
98
									$imgAAjouter['nom'] = $obs['image_nom'];
76
									$imgAAjouter['nom'] = $obs['image_nom'];
99
									$imgAAjouter['b64'] = $obs['image_b64'];
77
									$imgAAjouter['b64'] = $obs['image_b64'];
100
									$this->debug[] = 'Contient B64 : '.(empty($obs['image_b64']) ? 'non' : 'oui');
78
								}
101
								}
79
 
102
 
80
								$observations[$idObs] = array(
103
								$observations[$ordreObs] = array(
Line 81... Line 104...
81
									'obs' => $this->protegerTableau($obsAAjouter),
104
									'obs' => $this->protegerTableau($obsAAjouter),
82
									'img' => $imgAAjouter);
105
									'img' => $imgAAjouter);
83
							}
106
							}
84
						}
107
						}
85
						$this->debug[] = 'Nbre obs ajoutée : '.count($observations);
108
						$this->debug[] = 'Nbre obs ajoutée : '.count($observations);
86
 
109
 
Line -... Line 110...
-
 
110
						// Insertion dans la base
-
 
111
						$obs_a_taguer_ordres = array();
-
 
112
						$img_a_taguer_ids = array();
-
 
113
						foreach ($observations as $infos) {
-
 
114
							$obs = $infos['obs'];
-
 
115
							$img = $infos['img'];
-
 
116
 
-
 
117
							$champs = implode(', ', array_keys($obs));
-
 
118
							$valeurs = implode(', ', $obs);
-
 
119
							$requete = "INSERT INTO cel_obs ($champs) VALUES ($valeurs) ";
87
						// Insertion dans la base
120
 
88
						$ok = true;
121
							if ($this->executerRequeteSimple($requete) === false) {
-
 
122
								$this->messages[] = "Un problème est survenu lors de l'insertion de l'obs dans la base de données.";
89
						$obs_a_lier = array();
123
							} else {
-
 
124
								$obs_a_taguer_ordres[] = trim($obs['ordre'], "'");
90
						foreach ($observations as $infos) {
125
							}
91
							$obs = $infos['obs'];
126
							
92
							$img = $infos['img'];
127
							// si le formulaire contient une image on la traite
93
 
128
							if ($img != null) {
-
 
129
								$this->nettoyerImagesUploades();
94
							// si le formulaire contient une image on la traite
130
								$nomFichierImg = $this->traiterNomFichierImage($img['nom']);
95
							if ($img != null) {
131
								$cheminImage = $this->config['cel']['chemin_stockage_temp']."/$nomFichierImg";
96
								$nomFichierImg = $this->traiterNomFichierImage($img['nom']);
132
								// Si l'image est transmise en base 64
97
								// Si l'image est transmise en base 64
133
								if (empty($img['b64']) === false) {
-
 
134
									$this->transformerBase64enFichier($cheminImage, $img['b64']);
-
 
135
								}
-
 
136
							
98
								if (empty($img['b64']) === false) {
137
								$this->debug[] = 'Nom fichier img debut :'.$nomFichierImg;
99
									$this->transformerBase64enFichier($nomFichierImg, $img['b64']);
138
								$idImg = $this->ajouterImageSurDdEtBdd($img['id_utilisateur'], $cheminImage, $nomFichierImg);
100
								}
-
 
101
								$cheminImage = $this->config['cel_db']['chemin_stockage_temp']."/$nomFichierImg";
-
 
102
								$idImg = $this->ajouterImageSurDdEtBdd($img['id_utilisateur'], $cheminImage);
-
 
103
								if ($idImg !== false) {
-
 
104
									$this->lierObsEtImg($idImg, $img['id_utilisateur'], $img['id_obs']);
-
 
105
								}
-
 
106
							}
-
 
107
 
-
 
108
 
-
 
109
							$insert = "INSERT INTO cel_inventory ";
-
 
110
							$champs = '('.implode(', ', array_keys($obs)).') ';
-
 
111
							$values = 'VALUES ('.implode(', ', $obs).') ';
-
 
112
							$requete = $insert.$champs.$values;
-
 
113
 
-
 
114
							if ($this->executerRequeteSimple($requete) === false) {
-
 
115
								$ok = false;
-
 
116
							} else {
-
 
117
								$obs_ok[] = trim($obs['ordre'], "'");
-
 
118
							}
-
 
119
						}
-
 
120
 
-
 
121
						if ($ok === true) {
-
 
122
							$this->debug[] = print_r($obs_ok, true);
-
 
123
							$liaison_ok = $this->lierObsAMotsCles($obs_ok);
139
								if ($idImg !== false) {
-
 
140
									$liaisonOk = $this->lierObsEtImg($idImg, $id_utilisateur, $img['id_obs']);
-
 
141
									if ($liaisonOk === true) {
124
							if ($liaison_ok === false) {
142
										$img_a_taguer_ids[] = $idImg;
125
								$e = "Toutes les observations n'ont pas pu être liées au mot-clé du projet.";
143
									}
126
								$this->messages[] = $e;
144
								}
127
							}
145
							}
128
						} else {
146
						}
Line 143... Line 161...
143
 
161
 
144
		$msg = (count($this->messages) > 0) ? 'erreur' : 'ok';
162
		$msg = (count($this->messages) > 0) ? 'erreur' : 'ok';
145
		$retour = (object) array('msg' => $msg);
163
		$retour = (object) array('msg' => $msg);
146
		$this->envoyerJson($retour);
164
		$this->envoyerJson($retour);
-
 
165
	}
-
 
166
	
-
 
167
	private function affecterChampsManquantsUtilisateur($utilisateur) {
-
 
168
		if(!isset($utilisateur['id_utilisateur']) || trim($utilisateur['id_utilisateur']) == '') {
-
 
169
			$gestion_utilisateur = new User($this->config);
-
 
170
			$infos_complementaires = $gestion_utilisateur->obtenirUtilisateurSiExiste($utilisateur['courriel']);
-
 
171
			$utilisateur['id_utilisateur'] = $infos_complementaires['id_utilisateur'];
-
 
172
			$utilisateur['prenom'] = trim($infos_complementaires['prenom']) != '' ? $infos_complementaires['prenom'] : $utilisateur['prenom'];
-
 
173
			$utilisateur['nom'] = trim($infos_complementaires['nom']) != '' ? $infos_complementaires['nom'] : $utilisateur['nom'];
Line -... Line 174...
-
 
174
		}
-
 
175
 
-
 
176
		return $utilisateur;
-
 
177
	}
-
 
178
 
-
 
179
	private function supprimerSlashesProfond($valeur) {
-
 
180
		$valeur = is_array($valeur) ? array_map(array($this, 'supprimerSlashesProfond'), $valeur) : stripslashes($valeur);
-
 
181
		return $valeur;
-
 
182
	}
147
	}
183
 
148
 
184
 
149
	private function getMaxOrdre($identifiant) {
185
	private function getMaxOrdre($id_utilisateur) {
150
		$ordre = null;
186
		$ordre = null;
151
		$identifiant = $this->bdd->quote($identifiant);
187
		$identifiant = $this->bdd->quote($id_utilisateur);
152
		$requete = 	"SELECT MAX(ordre) AS ordre ".
188
		$requete = 	"SELECT MAX(ordre) AS ordre ".
-
 
189
					"FROM cel_obs ".
153
					"FROM cel_inventory ".
190
					"WHERE ce_utilisateur = $id_utilisateur ";
154
					"WHERE identifiant = $identifiant ";
191
 
155
		$ordre_max = $this->executerRequete($requete, 'Column');
192
		$ordre_max = $this->executerRequete($requete, 'Column');
156
		if ($ordre_max !== false) {
193
		if ($ordre_max !== false) {
157
			$ordre = $ordre_max + 1;
194
			$ordre = $ordre_max + 1;
Line 171... Line 208...
171
			$dateMysql = implode('-', array_reverse($morceauxDate));
208
			$dateMysql = implode('-', array_reverse($morceauxDate));
172
		}
209
		}
173
		return $dateMysql;
210
		return $dateMysql;
174
	}
211
	}
Line -... Line 212...
-
 
212
 
-
 
213
	private function taguerObs($obs_a_taguer_ordres) {
-
 
214
		if (count($obs_a_taguer_ordres) > 0) {
-
 
215
			foreach ($this->tagsObs as $hierarchieTag) {
-
 
216
				$tagsALier = explode('>', $hierarchieTag);
-
 
217
				$liaisonOk = $this->lierObsAMotsCles($obs_a_taguer_ordres, $tagsALier);
-
 
218
				if ($liaisonOk === false) {
-
 
219
					$e = "Toutes les observations n'ont pas pu être liées aux mots-clés : $hierarchieTag";
-
 
220
					$this->messages[] = $e;
-
 
221
				}
-
 
222
			}
-
 
223
		}
-
 
224
	}
175
 
225
 
176
	private function lierObsAMotsCles($observations) {
226
	private function lierObsAMotsCles($observations_ordres, $tags) {
-
 
227
		$idTagParent = self::OBS_RACINE_ID;
-
 
228
		$listeIdsTags = array();
177
		$categorie =  self::OBS_RACINE_ID.'.projets-cooperatifs';
229
		foreach ($tags as $tag) {
-
 
230
			$tag = $this->nettoyerTag($tag);
178
		$projet =  $categorie.'.'.strtolower($this->projet);
231
			if ($tag != '') {
-
 
232
				$id_mot_cle = $this->ajouterMotCleObs($this->utilisateur_id, $tag, $idTagParent);
-
 
233
				if ($id_mot_cle !== false) {
-
 
234
					$listeIdsTags[] = $id_mot_cle;
-
 
235
					$idTagParent = $id_mot_cle;
-
 
236
				}
-
 
237
			}
179
		$ajout_mot_cle_1 = $this->ajouterMotCleObs($this->utilisateur_id, 'Projets coopératifs', $categorie, self::OBS_RACINE_ID);
238
		}
180
		$ajout_mot_cle_2 = $this->ajouterMotCleObs($this->utilisateur_id, $this->projet, $projet, $categorie);
239
		$liaison_ok = $this->lierMotCleObs($this->utilisateur_id, $listeIdsTags, $observations_ordres);
-
 
240
		return $liaison_ok;
-
 
241
	}
-
 
242
 
181
		$liaison_ok = false;
243
	private function taguerImg($img_a_taguer_ids) {
-
 
244
		if (count($img_a_taguer_ids) > 0) {
-
 
245
			$this->debug[] = "Tags img : ".print_r($this->tagsImg, true);
-
 
246
			foreach ($this->tagsImg as $hierarchieTag) {
182
		if ($ajout_mot_cle_1 && $ajout_mot_cle_2) {
247
				$tagsALier = explode('>', $hierarchieTag);
183
			$liaison_ok = $this->lierMotCleObs($this->utilisateur_id, array($projet), $observations);
248
				$liaisonOk = $this->lierImgAMotsCles($img_a_taguer_ids, $tagsALier);
184
		} else {
249
				if ($liaisonOk === false) {
185
			$e = "La catégorie du projet et le mot-clé du projet n'ont pas pu être ajouté.";
250
					$e = "Toutes les images n'ont pas pu être liées aux mots-clés : $hierarchieTag";
-
 
251
					$this->messages[] = $e;
-
 
252
				}
186
			$this->messages[] = $e;
253
			}
-
 
254
		}
-
 
255
	}
-
 
256
 
-
 
257
	private function lierImgAMotsCles($images_ids, $tags) {
-
 
258
		$idTagParent = self::IMG_RACINE_ID;
-
 
259
		$listeIdsTags = array();
-
 
260
		foreach ($tags as $tag) {
-
 
261
			$tag = $this->nettoyerTag($tag);
-
 
262
			if ($tag != '') {
-
 
263
				$id_mot_cle = $this->ajouterMotCleImg($this->utilisateur_id, $tag, $idTagParent);
-
 
264
				if ($id_mot_cle !== false) {
-
 
265
					$listeIdsTags[] = $id_mot_cle;
-
 
266
					$idTagParent = $id_mot_cle;
-
 
267
				}
-
 
268
			}
-
 
269
		}
187
		}
270
		$liaison_ok = $this->lierMotCleImg($this->utilisateur_id, $listeIdsTags, $images_ids);
188
		return $liaison_ok;
271
		return $liaison_ok;
Line -... Line 272...
-
 
272
	}
-
 
273
 
-
 
274
	private function nettoyerTag($tag) {
-
 
275
		$tag = trim($tag);
-
 
276
		$tag = preg_replace('/(?:\s+|[,]+)/', ' ', $tag);
-
 
277
		return $tag;
189
	}
278
	}
190
 
279
 
191
	private function traiterNomFichierImage($fichierNom) {
280
	private function traiterNomFichierImage($fichierNom) {
192
		$fichierNom = preg_replace('/[.](jpeg|jpg)$/i', '.jpg', strtolower(trim($fichierNom)));
281
		$fichierNom = preg_replace('/[.](jpeg|jpg)$/i', '.jpg', strtolower(trim($fichierNom)));
Line 193... Line 282...
193
		return $fichierNom;
282
		return $fichierNom;
194
	}
283
	}
195
 
284
 
196
	/**
285
	/**
197
	* Décode l'image en base64,enregistre celle-ci sous forme de fichier du type de l'image
286
	* Décode l'image en base64,enregistre celle-ci sous forme de fichier du type de l'image
198
	*  dans un dossier temporaire.
287
	*  dans un dossier temporaire.
199
	*/
288
	*/
200
	private function transformerBase64enFichier($fichierNom, $imageInfosB64) {
-
 
201
		// Enleve la partie data:image qui permet la previsalisation pour firefox de l'image en base64
289
	private function transformerBase64enFichier($cheminImage, $imageInfosB64) {
202
		$imageBase64 = explode(';', $imageInfosB64);
290
		// Enleve la partie data:image qui permet la previsalisation pour firefox de l'image en base64
Line 203... Line -...
203
		$type = explode('/',$imageBase64[0]);
-
 
204
		$dataBase64 = explode(',',$imageBase64[1]);
291
		$imageBase64 = explode(';', $imageInfosB64);
205
		$dataImg = base64_decode($dataBase64[1]);
292
		$dataBase64 = explode(',',$imageBase64[1]);
206
 
293
		$dataImg = base64_decode($dataBase64[1]);
Line 207... Line 294...
207
		$cheminImage = $this->config['cel_db']['chemin_stockage_temp'].'/'.$fichierNom.'.'.$type[1];
294
 
208
		$imageRessource = fopen($cheminImage, 'wb');
295
		$imageRessource = fopen($cheminImage, 'wb');
209
		fwrite($imageRessource, $dataImg);
296
		fwrite($imageRessource, $dataImg);
210
		fclose($imageRessource);
297
		fclose($imageRessource);
Line 211... Line 298...
211
 
298
 
212
		if (file_exists($cheminImage) == false) {
299
		if (file_exists($cheminImage) == false) {
213
			 $this->messages[] = "Erreur lors de la création du fichier";
300
			 $this->messages[] = "Erreur lors de la création du fichier";
214
		}
-
 
Line 215... Line 301...
215
	}
301
		}
216
 
302
	}
217
	public function lierObsEtImg($id_image, $id_utilisateur, $id_obs) {
303
 
218
		$id_image = $this->proteger($id_image);
304
	public function lierObsEtImg($id_image, $utilisateur, $ordre_obs) {
Line -... Line 305...
-
 
305
		$id_image = $this->proteger($id_image);
219
		$id_utilisateur = $this->proteger($id_utilisateur);
306
		$id_obs = $this->proteger($this->obtenirIdObsPourIdentifiantEtOrdre($utilisateur, $ordre_obs));
220
		$id_obs = $this->proteger($id_obs);
307
 
-
 
308
		$requete = 'INSERT INTO cel_obs_images '.
-
 
309
			'	(id_image, id_observation, date_liaison) '.
-
 
310
			"VALUES ($id_image, $id_obs, NOW()) ".
-
 
311
			'	ON DUPLICATE KEY UPDATE id_image = id_image';
-
 
312
 
-
 
313
		$liaison = true;
-
 
314
		if ($this->executerRequeteSimple($requete) === false) {
-
 
315
			$this->messages[] = "La requête de liaison de l'obs $id_obs à l'image $id_image pour l'utilisateur $id_utilisateur a échouée.";
-
 
316
			$liaison = false;
-
 
317
		}
-
 
318
		return $liaison;
-
 
319
	}
-
 
320
	
-
 
321
	private function obtenirIdObsPourIdentifiantEtOrdre($id_utilisateur, $ordre) {
-
 
322
		
-
 
323
		$id_utilisateur = $this->proteger($id_utilisateur);
-
 
324
		$ordre = $this->proteger($ordre);
-
 
325
		
-
 
326
		$requete = 'SELECT id_observation '.
-
 
327
					'FROM cel_obs '.
-
 
328
					"WHERE ce_utilisateur = $id_utilisateur ".
-
 
329
					"	AND ordre = $ordre ";
-
 
330
 
-
 
331
		$resultat = $this->executerRequete($requete);
-
 
332
		
-
 
333
		$id_obs = (count($resultat) > 0) ? $resultat[0]['id_observation'] : false;
-
 
334
		return $id_obs;
-
 
335
	}
-
 
336
 
-
 
337
	public function nettoyerImagesUploades() {
-
 
338
		$dossierStockage = $this->config['cel']['chemin_stockage_temp'].'/';
-
 
339
		if (is_dir($dossierStockage)) {
-
 
340
			$objets = scandir($dossierStockage);
-
 
341
			if ($objets !== false) {
-
 
342
				foreach ($objets as $objet) {
-
 
343
					$chemin = $dossierStockage.$objet;
-
 
344
					if (is_file($chemin)) {
-
 
345
						$filemtime = @filemtime($chemin);
-
 
346
						if ($filemtime !== false) {
221
 
347
							$suppression = (time() - $filemtime >= self::DUREE_DE_VIE_IMG) ? true : false;
222
		$requete = 'INSERT INTO cel_obs_images '.
348
							if ($suppression === true) {
Line 223... Line 349...
223
			'	(coi_ce_image, coi_ce_utilisateur, coi_ce_observation, coi_date_liaison) '.
349
								unlink($chemin);
224
			"VALUES ($id_image, $id_utilisateur, $id_obs, NOW()) ".
350
							}
225
			'	ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image';
351
						}
226
 
352
					}
227
		if ($this->executerRequeteSimple($requete) === false) {
353
				}
228
			$this->messages[] = "La requête de liaison de l'obs $id_obs à l'image $id_image pour l'utilisateur $id_utilisateur a échouée.";
354
			}
229
		}
355
		}
230
	}
356
	}
231
 
357
 
232
	/**
358
	/**
233
	* Ajoute une image dans la base de données et stocke le fichier en fabriquant les miniatures,
359
	* Ajoute une image dans la base de données et stocke le fichier en fabriquant les miniatures,
234
	* renvoie le nouvel id d'image en cas de succès
360
	* renvoie le nouvel id d'image en cas de succès
235
	*
361
	*
236
	* @param array $pairs le tableau contenant l'identifiant de l'utilisateur
362
	* @param string $idUtilisateur l'identifiant de l'utilisateur
237
	* @param array $infos_fichier les infos sur le fichier à traiter, de la même forme que les
363
	* @param string $cheminImage le chemin vers le fichier original de l'image
238
	* élements du tableau $_FILES de php
364
	* @param string $nomFichierImage le nom du fichier original de l'image
239
	*/
365
	*/
240
	public function ajouterImageSurDdEtBdd($idUtilisateur, $cheminImage, $nomFichierImage) {
366
	public function ajouterImageSurDdEtBdd($idUtilisateur, $cheminImage, $nomFichierImage) {
241
		$idImage = false;
367
		$idImage = false;
242
		$nouvelOrdre = $this->obtenirNouvelOrdrePourUtilisateur($idUtilisateur);
368
		$nouvelOrdre = $this->obtenirNouvelOrdrePourUtilisateur($idUtilisateur);
243
		if ($nouvelOrdre !== false) {
369
		if ($nouvelOrdre !== false) {
244
			if (file_exists($cheminImage)) {
370
			if (file_exists($cheminImage)) {
245
				$extracteurMetadonnees = new ExtracteurMetadonnees();
-
 
-
 
371
				$extracteurMetadonnees = new ExtracteurMetadonnees();
246
				$metadonnees = $extracteurMetadonnees->extraireMetadonnees($cheminImage) ;
372
				$metadonnees = $extracteurMetadonnees->extraireMetadonnees($cheminImage) ;
247
				if ($metadonnees !== false) {
373
				if ($metadonnees !== false) {
248
					$infosImage = $metadonnees;
374
					$infosImage = $metadonnees;
249
					$infosImage['ci_ordre'] = $nouvelOrdre;
375
					$infosImage['ordre'] = $nouvelOrdre;
250
					$infosImage['ci_publiable_eflore'] = 'false';
376
					$infosImage['publiable_eflore'] = 'false';
251
					$infosImage['ci_nom_original'] = $nomFichierImage;
377
					$infosImage['nom_original'] = $nomFichierImage;
252
					$infosImage['ci_ce_utilisateur'] = $idUtilisateur;
378
					$infosImage['ce_utilisateur'] = $idUtilisateur;
253
					$infosImage['ci_md5'] = md5_file($cheminImage);
379
					$infosImage['md5'] = md5_file($cheminImage);
-
 
380
					$this->debug[] = 'Nom fichier img meta :'.$nomFichierImage;
-
 
381
					$requete = $this->construireRequeteInsertionImage($infosImage);
-
 
382
					$resultat = $this->executerRequeteSimple($requete);
-
 
383
					if ($resultat !== false) {
-
 
384
						$idImage = $this->obtenirIdImagePourIdentifiantEtOrdre($idUtilisateur, $nouvelOrdre);
-
 
385
						if ($idImage !== false) {
-
 
386
							$manipulateurImage = new ImageRecreation($this->config);
-
 
387
							$stockageOk = $manipulateurImage->stockerFichierEtCreerMiniatures($cheminImage, $idImage);
254
 
388
							if ($stockageOk) {
255
					$requete = $this->construireRequeteInsertionImage($infosImage);
389
								$miniatureChemin = str_replace('.jpg', '_min.jpg', $cheminImage);
256
					$resultat = $this->executerRequeteSimple($requete);
390
								if (file_exists($miniatureChemin)) {
257
					if ($resultat !== false) {
391
									if (@unlink($miniatureChemin) === false) {
258
						$idImage = $this->obtenirIdImagePourIdentifiantEtOrdre($idUtilisateur, $nouvelOrdre);
392
										$this->messages[] = "La miniature de l'image n'a pu être supprimée.";
Line 281... Line 415...
281
	}
415
	}
Line 282... Line 416...
282
 
416
 
283
	private function obtenirNouvelOrdrePourUtilisateur($id_utilisateur) {
417
	private function obtenirNouvelOrdrePourUtilisateur($id_utilisateur) {
Line 284... Line 418...
284
		$id_utilisateur = $this->proteger($id_utilisateur);
418
		$id_utilisateur = $this->proteger($id_utilisateur);
285
 
419
 
286
		$requete = 'SELECT MAX(ci_ordre) as max_ordre '.
420
		$requete = 'SELECT MAX(ordre) as max_ordre '.
287
			'FROM cel_images '.
421
			'FROM cel_images '.
Line 288... Line 422...
288
			"WHERE ci_ce_utilisateur = $id_utilisateur ";
422
			"WHERE ce_utilisateur = $id_utilisateur ";
289
		$resultat = $this->executerRequete($requete);
423
		$resultat = $this->executerRequete($requete);
290
 
424
 
Line 291... Line 425...
291
		$ordre = ($resultat) ? $resultat[0]['max_ordre']++ : 0;
425
		$ordre = ($resultat) ? ++$resultat[0]['max_ordre'] : 0;
292
		return $ordre;
426
		return $ordre;
293
	}
427
	}
Line 294... Line 428...
294
 
428
 
295
	private function obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $ordre) {
429
	private function obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $ordre) {
296
		$id_utilisateur = $this->proteger($id_utilisateur);
430
		$id_utilisateur = $this->proteger($id_utilisateur);
297
		$ordre = $this->proteger($ordre);
431
		$ordre = $this->proteger($ordre);
298
 
432
 
Line 299... Line 433...
299
		$requete = 'SELECT ci_id_image '.
433
		$requete = 'SELECT id_image '.
300
			'FROM cel_images '.
434
			'FROM cel_images '.
Line 301... Line 435...
301
			"WHERE ci_ce_utilisateur = $id_utilisateur ".
435
			"WHERE ce_utilisateur = $id_utilisateur ".
Line 302... Line 436...
302
			"	AND ci_ordre = $ordre ";
436
			"	AND ordre = $ordre ";
303
		$resultat = $this->executerRequete($requete);
437
		$resultat = $this->executerRequete($requete);
304
 
438
 
Line 305... Line 439...
305
		$id_image = (count($resultat) > 0) ? $resultat[0]['ci_id_image'] : false;
439
		$id_image = (count($resultat) > 0) ? $resultat[0]['id_image'] : false;
306
		return $id_image;
440
		return $id_image;
307
 
441
 
308
	}
442
	}
309
 
443
 
310
	private function construireRequeteInsertionImage($informations) {
444
	private function construireRequeteInsertionImage($informations) {
311
		$champs = array('ci_meta_date_ajout');
445
		$champs = array('date_creation');
312
		$valeurs = array('CURRENT_TIMESTAMP()');
446
		$valeurs = array('CURRENT_TIMESTAMP()');
313
 
447
 
314
		foreach ($informations as $champ => $valeur) {
448
		foreach ($informations as $champ => $valeur) {