Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1538 Rev 1565
Line 21... Line 21...
21
	private $tagsImg = null;
21
	private $tagsImg = null;
22
	private $champsEtendusObs = null;
22
	private $champsEtendusObs = null;
23
	private $utilisateur_id = null;
23
	private $utilisateur_id = null;
24
	const DUREE_DE_VIE_IMG = 86400;// 3600 * 24 * 2 = 172 800
24
	const DUREE_DE_VIE_IMG = 86400;// 3600 * 24 * 2 = 172 800
25
	const ARRET_SERVICE = false;// Permet de bloquer le service en cas de problème sur le serveur
25
	const ARRET_SERVICE = false;// Permet de bloquer le service en cas de problème sur le serveur
26
	
26
 
27
	private $correspondanceIdImgTags = array();
27
	private $correspondanceIdImgTags = array();
Line 28... Line 28...
28
 
28
 
29
	public function createElement($requeteDonnees) {
29
	public function createElement($requeteDonnees) {
30
		if (self::ARRET_SERVICE) {
30
		if (self::ARRET_SERVICE) {
Line 46... Line 46...
46
				if (array_key_exists('courriel', $utilisateur)) {
46
				if (array_key_exists('courriel', $utilisateur)) {
47
					$this->debug[] = 'Courriel : ok';
47
					$this->debug[] = 'Courriel : ok';
48
					$utilisateur = $this->affecterChampsManquantsUtilisateur($utilisateur);
48
					$utilisateur = $this->affecterChampsManquantsUtilisateur($utilisateur);
49
					extract($utilisateur);
49
					extract($utilisateur);
50
					$this->utilisateur_id = $id_utilisateur;
50
					$this->utilisateur_id = $id_utilisateur;
51
					$ordre = $this->getMaxOrdre($id_utilisateur);					
51
					$ordre = $this->getMaxOrdre($id_utilisateur);
52
					if (!is_null($ordre)) {
52
					if (!is_null($ordre)) {
53
						$requeteDonnees = $this->supprimerSlashesProfond($requeteDonnees);
53
						$requeteDonnees = $this->supprimerSlashesProfond($requeteDonnees);
54
						// Triage et manipulation des données
54
						// Triage et manipulation des données
55
						$observations = array();
55
						$observations = array();
56
						foreach ($requeteDonnees as $cle => $obs) {
56
						foreach ($requeteDonnees as $cle => $obs) {
Line 89... Line 89...
89
 
89
 
90
								$obsAAjouter['transmission'] = '1';
90
								$obsAAjouter['transmission'] = '1';
91
								$obsAAjouter['date_creation'] = date('Y-m-d H:i:s');
91
								$obsAAjouter['date_creation'] = date('Y-m-d H:i:s');
92
								$obsAAjouter['date_modification'] = $obsAAjouter['date_creation'];
92
								$obsAAjouter['date_modification'] = $obsAAjouter['date_creation'];
93
								$obsAAjouter['date_transmission'] = $obsAAjouter['date_creation'];
93
								$obsAAjouter['date_transmission'] = $obsAAjouter['date_creation'];
94
								
94
 
Line 95... Line 95...
95
								$this->champsEtendusObs[$ordreObs] = isset($obs['obs_etendue']) ? $obs['obs_etendue'] : array();
95
								$this->champsEtendusObs[$ordreObs] = isset($obs['obs_etendue']) ? $obs['obs_etendue'] : array();
96
 
96
 
97
								$imgAAjouter = null;
97
								$imgAAjouter = null;
Line 120... Line 120...
120
							if ($this->executerRequeteSimple($requete) === false) {
120
							if ($this->executerRequeteSimple($requete) === false) {
121
								$this->messages[] = "Un problème est survenu lors de l'insertion de l'obs dans la base de données.";
121
								$this->messages[] = "Un problème est survenu lors de l'insertion de l'obs dans la base de données.";
122
							} else {
122
							} else {
123
								$obs_a_taguer_ordres[] = trim($obs['ordre'], "'");
123
								$obs_a_taguer_ordres[] = trim($obs['ordre'], "'");
124
							}
124
							}
125
							
125
 
126
							// si le formulaire contient une image on la traite
126
							// si le formulaire contient une image on la traite
127
							if ($img != null) {
127
							if ($img != null) {
128
								$this->nettoyerImagesUploades();
128
								$this->nettoyerImagesUploades();
129
								$img_a_taguer_ids = $this->stockerImagesEtLierAObs($img, $id_utilisateur, $utilisateur);
129
								$img_a_taguer_ids = $this->stockerImagesEtLierAObs($img, $id_utilisateur, $utilisateur);
130
							}
130
							}
131
						}
131
						}
132
						
132
 
133
						$obs_a_taguer_ids = $this->obtenirIdsObsPourTableauOrdres($this->utilisateur_id, $obs_a_taguer_ordres);
133
						$obs_a_taguer_ids = $this->obtenirIdsObsPourTableauOrdres($this->utilisateur_id, $obs_a_taguer_ordres);
134
						$this->taguerObs($obs_a_taguer_ids);
134
						$this->taguerObs($obs_a_taguer_ids);
135
						$this->taguerImg($img_a_taguer_ids);
135
						$this->taguerImg($img_a_taguer_ids);
136
						
136
 
137
						// Les champs taggés sont des champs supplémentaires stockés sous forme de clé => valeur
137
						// Les champs taggés sont des champs supplémentaires stockés sous forme de clé => valeur
138
						$this->ajouterChampsEtendusObs($obs_a_taguer_ids, $this->champsEtendusObs);
138
						$this->ajouterChampsEtendusObs($obs_a_taguer_ids, $this->champsEtendusObs);
139
					} else {
139
					} else {
140
						$this->messages[] = "Un nouveau numéro d'ordre d'observation n'a pu être généré.";
140
						$this->messages[] = "Un nouveau numéro d'ordre d'observation n'a pu être généré.";
141
					}
141
					}
Line 150... Line 150...
150
		}
150
		}
151
		$msg = (count($this->messages) > 0) ? 'erreur' : 'ok';
151
		$msg = (count($this->messages) > 0) ? 'erreur' : 'ok';
152
		$retour = (object) array('msg' => $msg);
152
		$retour = (object) array('msg' => $msg);
153
		$this->envoyerJson($retour);
153
		$this->envoyerJson($retour);
154
	}
154
	}
155
	
155
 
156
	private function ajouterChampsEtendusObs($obs_ids, $obs_a_champs_etendus) {
156
	private function ajouterChampsEtendusObs($obs_ids, $obs_a_champs_etendus) {
157
		$champs_etendus_obs = array();
157
		$champs_etendus_obs = array();
-
 
158
		$gestionChampsEtendus = new GestionChampsEtendus($this->config, 'obs');
158
		
159
 
159
		foreach($obs_ids as $id_obs) {
160
		foreach ($obs_ids as $id_obs) {
160
			$champs = array_shift($obs_a_champs_etendus);
161
			$champs = array_shift($obs_a_champs_etendus);
161
			if($champs != null && is_array($champs)) {
162
			if ($champs != null && is_array($champs)) {
162
				foreach($champs as $champ_etendu => $valeur) {
163
				foreach ($champs as $infosChamp) {
-
 
164
					$cle = isset($infosChamp['cle']) ? $infosChamp['cle'] : '';
-
 
165
					$label = isset($infosChamp['label']) ? $infosChamp['label'] : '';
-
 
166
					$valeur = isset($infosChamp['valeur']) ? $infosChamp['valeur'] : '';
-
 
167
 
-
 
168
					if (empty($cle) && !empty($label)) {
-
 
169
						$cle = $gestionChampsEtendus->transformerLabelEnCle($label);
-
 
170
					}
-
 
171
 
-
 
172
					if (!empty($cle) && !empty($valeur)) {
163
					$champs_etendus_obs[] = array(
173
						$champEtendu = new ChampEtendu();
164
						'id' => $id_obs,
174
						$champEtendu->id = $id_obs;
165
						'cle' => $champ_etendu,
175
						$champEtendu->cle = $cle;
-
 
176
						$champEtendu->label = empty($label) ? $cle : $label;
166
						'valeur' => $valeur	
177
						$champEtendu->valeur = $valeur;
-
 
178
 
-
 
179
						$champs_etendus_obs[] = $champEtendu;
167
					);
180
					}
168
				}
181
				}
169
			}
182
			}
170
		}
183
		}
171
		
-
 
172
		$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
-
 
173
		$ajout_champ_etendus = $gestion_champs_etendus->ajouterChampsEtendusMultiplesAElementsMultiples($champs_etendus_obs);
184
		$ajout_champ_etendus = $gestionChampsEtendus->ajouterParLots($champs_etendus_obs);
174
		
-
 
175
		return $ajout_champ_etendus;
185
		return $ajout_champ_etendus;
176
	}
186
	}
177
	
187
 
178
	private function traiterImagesALierAObs($id_utilisateur, $ordreObs, $obs) {
188
	private function traiterImagesALierAObs($id_utilisateur, $ordreObs, $obs) {
179
		$imgAAjouter = null;
189
		$imgAAjouter = null;
180
		if(is_array($obs['image_nom'])) {
190
		if (is_array($obs['image_nom'])) {
181
			$imgAAjouter = array();
191
			$imgAAjouter = array();
182
			foreach ($obs['image_nom'] as $index => $nom_image) {
192
			foreach ($obs['image_nom'] as $index => $nom_image) {
183
				$image = array();
193
				$image = array();
184
				$image['id_utilisateur'] = $id_utilisateur;
194
				$image['id_utilisateur'] = $id_utilisateur;
185
				$image['id_obs'] = $ordreObs;
195
				$image['id_obs'] = $ordreObs;
186
				$image['nom'] = $nom_image;
196
				$image['nom'] = $nom_image;
187
				$image['tags'] = isset($obs['image_tag'][$index]) ? explode(',',$obs['image_tag'][$index]) : '';
197
				$image['tags'] = isset($obs['image_tag'][$index]) ? explode(',',$obs['image_tag'][$index]) : '';
188
				// on suppose que les b64 des images sont envoyés dans le même ordre que leurs noms 
198
				// on suppose que les b64 des images sont envoyés dans le même ordre que leurs noms
189
				// TODO: indexer le tableau avec le nom des images
199
				// TODO: indexer le tableau avec le nom des images
190
				$image['b64'] = isset($obs['image_b64'][$index]) ? $obs['image_b64'][$index] : '';
200
				$image['b64'] = isset($obs['image_b64'][$index]) ? $obs['image_b64'][$index] : '';
191
				$this->debug[] = 'Contient B64 : '.(empty($obs['image_b64']) ? 'non' : 'oui');		
201
				$this->debug[] = 'Contient B64 : '.(empty($obs['image_b64']) ? 'non' : 'oui');
192
				$imgAAjouter[] = $image;
202
				$imgAAjouter[] = $image;
193
			}
203
			}
194
		} else {
204
		} else {
195
			if (!empty($obs['image_nom'])) {
205
			if (!empty($obs['image_nom'])) {
196
				$imgAAjouter = array();
206
				$imgAAjouter = array();
Line 200... Line 210...
200
				//$imgAAjouter['tags'] = isset($obs['image_tag']) ? explode(',',$obs['image_tag']) : '';
210
				//$imgAAjouter['tags'] = isset($obs['image_tag']) ? explode(',',$obs['image_tag']) : '';
201
				$imgAAjouter['b64'] = isset($obs['image_b64']) ? $obs['image_b64'] : array();
211
				$imgAAjouter['b64'] = isset($obs['image_b64']) ? $obs['image_b64'] : array();
202
				$this->debug[] = 'Contient B64 : '.(empty($obs['image_b64']) ? 'non' : 'oui');
212
				$this->debug[] = 'Contient B64 : '.(empty($obs['image_b64']) ? 'non' : 'oui');
203
			}
213
			}
204
		}
214
		}
205
		
215
 
206
		return $imgAAjouter;
216
		return $imgAAjouter;
207
	}
217
	}
208
	
218
 
209
	private function stockerImagesEtLierAObs($img, $id_utilisateur, $utilisateur) {
219
	private function stockerImagesEtLierAObs($img, $id_utilisateur, $utilisateur) {
-
 
220
		$img_a_taguer_ids = array();
210
		if(!isset($img['nom']) && is_array($img)) {
221
		if (!isset($img['nom']) && is_array($img)) {
211
			foreach($img as $index => $image) {
222
			foreach ($img as $index => $image) {
212
				$nomFichierImg = $this->traiterNomFichierImage($image['nom']);
223
				$nomFichierImg = $this->traiterNomFichierImage($image['nom']);
213
				$cheminImage = $this->config['cel']['chemin_stockage_temp']."/$nomFichierImg";
224
				$cheminImage = $this->config['cel']['chemin_stockage_temp']."/$nomFichierImg";
214
				// Si l'image est transmise en base 64
225
				// Si l'image est transmise en base 64
215
				if (empty($image['b64']) === false) {
226
				if (empty($image['b64']) === false) {
216
					$this->transformerBase64enFichier($cheminImage, $image['b64']);
227
					$this->transformerBase64enFichier($cheminImage, $image['b64']);
217
				}
228
				}
218
					
229
 
219
				$this->debug[] = 'Nom fichier img debut :'.$nomFichierImg;
230
				$this->debug[] = 'Nom fichier img debut :'.$nomFichierImg;
220
				$idImg = $this->ajouterImageSurDdEtBdd($utilisateur, $cheminImage, $nomFichierImg);
231
				$idImg = $this->ajouterImageSurDdEtBdd($utilisateur, $cheminImage, $nomFichierImg);
221
				if ($idImg !== false) {
232
				if ($idImg !== false) {
222
					$liaisonOk = $this->lierObsEtImg($idImg, $id_utilisateur, $image['id_obs']);
233
					$liaisonOk = $this->lierObsEtImg($idImg, $id_utilisateur, $image['id_obs']);
223
					if ($liaisonOk === true) {
234
					if ($liaisonOk === true) {
224
						$img_a_taguer_ids[] = $idImg;
235
						$img_a_taguer_ids[] = $idImg;
225
						if(isset($image['tags'])) {
236
						if (isset($image['tags'])) {
226
							$this->correspondanceIdImgTags[$idImg] = $image['tags'];
237
							$this->correspondanceIdImgTags[$idImg] = $image['tags'];
227
						}
238
						}
228
					}
239
					}
229
				}
240
				}
230
			}
241
			}
Line 233... Line 244...
233
			$cheminImage = $this->config['cel']['chemin_stockage_temp']."/$nomFichierImg";
244
			$cheminImage = $this->config['cel']['chemin_stockage_temp']."/$nomFichierImg";
234
			// Si l'image est transmise en base 64
245
			// Si l'image est transmise en base 64
235
			if (empty($img['b64']) === false) {
246
			if (empty($img['b64']) === false) {
236
				$this->transformerBase64enFichier($cheminImage, $img['b64']);
247
				$this->transformerBase64enFichier($cheminImage, $img['b64']);
237
			}
248
			}
238
				
249
 
239
			$this->debug[] = 'Nom fichier img debut :'.$nomFichierImg;
250
			$this->debug[] = 'Nom fichier img debut :'.$nomFichierImg;
240
			$idImg = $this->ajouterImageSurDdEtBdd($utilisateur, $cheminImage, $nomFichierImg);
251
			$idImg = $this->ajouterImageSurDdEtBdd($utilisateur, $cheminImage, $nomFichierImg);
241
			if ($idImg !== false) {
252
			if ($idImg !== false) {
242
				$liaisonOk = $this->lierObsEtImg($idImg, $id_utilisateur, $img['id_obs']);
253
				$liaisonOk = $this->lierObsEtImg($idImg, $id_utilisateur, $img['id_obs']);
243
				if ($liaisonOk === true) {
254
				if ($liaisonOk === true) {
244
					$img_a_taguer_ids[] = $idImg;
255
					$img_a_taguer_ids[] = $idImg;
245
					if(isset($img['tags'])) {
256
					if (isset($img['tags'])) {
246
						$this->correspondanceIdImgTags[$idImg] = $img['tags'];
257
						$this->correspondanceIdImgTags[$idImg] = $img['tags'];
247
					}
258
					}
248
				}
259
				}
249
			}
260
			}
250
		}
261
		}
251
		
262
 
252
		return $img_a_taguer_ids;
263
		return $img_a_taguer_ids;
253
	}
264
	}
254
	
265
 
255
	private function affecterChampsManquantsUtilisateur($utilisateur) {
266
	private function affecterChampsManquantsUtilisateur($utilisateur) {
256
		$gestion_utilisateur = new User($this->config);
267
		$gestion_utilisateur = new User($this->config);
257
		$infos_complementaires = $gestion_utilisateur->obtenirUtilisateurSiExiste($utilisateur['courriel']);
268
		$infos_complementaires = $gestion_utilisateur->obtenirUtilisateurSiExiste($utilisateur['courriel']);
258
		if(!isset($utilisateur['id_utilisateur']) || trim($utilisateur['id_utilisateur']) == '') {
269
		if(!isset($utilisateur['id_utilisateur']) || trim($utilisateur['id_utilisateur']) == '') {
259
			$utilisateur['id_utilisateur'] = ($infos_complementaires['connecte']) ? $infos_complementaires['id_utilisateur'] : $utilisateur['courriel'];
270
			$utilisateur['id_utilisateur'] = ($infos_complementaires['connecte']) ? $infos_complementaires['id_utilisateur'] : $utilisateur['courriel'];
Line 411... Line 422...
411
			$this->messages[] = "La requête de liaison de l'obs $id_obs à l'image $id_image pour l'utilisateur $id_utilisateur a échouée.";
422
			$this->messages[] = "La requête de liaison de l'obs $id_obs à l'image $id_image pour l'utilisateur $id_utilisateur a échouée.";
412
			$liaison = false;
423
			$liaison = false;
413
		}
424
		}
414
		return $liaison;
425
		return $liaison;
415
	}
426
	}
416
	
427
 
417
	private function obtenirIdObsPourIdentifiantEtOrdre($id_utilisateur, $ordre) {
428
	private function obtenirIdObsPourIdentifiantEtOrdre($id_utilisateur, $ordre) {
418
		
429
 
419
		$id_utilisateur = $this->proteger($id_utilisateur);
430
		$id_utilisateur = $this->proteger($id_utilisateur);
420
		$ordre = $this->proteger($ordre);
431
		$ordre = $this->proteger($ordre);
421
		
432
 
422
		$requete = 'SELECT id_observation '.
433
		$requete = 'SELECT id_observation '.
423
					'FROM cel_obs '.
434
					'FROM cel_obs '.
424
					"WHERE ce_utilisateur = $id_utilisateur ".
435
					"WHERE ce_utilisateur = $id_utilisateur ".
425
					"	AND ordre = $ordre ";
436
					"	AND ordre = $ordre ";
Line 426... Line 437...
426
 
437
 
427
		$resultat = $this->executerRequete($requete);
438
		$resultat = $this->executerRequete($requete);
428
		
439
 
429
		$id_obs = (count($resultat) > 0) ? $resultat[0]['id_observation'] : false;
440
		$id_obs = (count($resultat) > 0) ? $resultat[0]['id_observation'] : false;
430
		return $id_obs;
441
		return $id_obs;
431
	}
442
	}
432
	
443
 
433
	private function obtenirIdsObsPourTableauOrdres($id_utilisateur, $ordres) {
444
	private function obtenirIdsObsPourTableauOrdres($id_utilisateur, $ordres) {
434
		$id_utilisateur = $this->proteger($id_utilisateur);
445
		$id_utilisateur = $this->proteger($id_utilisateur);
435
		$ordres = array_map(array($this,'proteger'), $ordres);
446
		$ordres = array_map(array($this,'proteger'), $ordres);
436
		
447
 
437
		$requete = 'SELECT id_observation '.
448
		$requete = 'SELECT id_observation '.
438
							'FROM cel_obs '.
449
							'FROM cel_obs '.
439
							"WHERE ce_utilisateur = $id_utilisateur ".
450
							"WHERE ce_utilisateur = $id_utilisateur ".
440
							" AND ordre IN (".implode(',',$ordres).") ";
451
							" AND ordre IN (".implode(',',$ordres).") ";
441
		
452
 
442
		$resultat = $this->executerRequete($requete);
453
		$resultat = $this->executerRequete($requete);
443
		$ids = array();
454
		$ids = array();
444
		foreach($resultat as $id) {
455
		foreach($resultat as $id) {
445
			$ids[] = $id['id_observation'];
456
			$ids[] = $id['id_observation'];