Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1143 Rev 1144
Line 26... Line 26...
26
	private $bdd;
26
	private $bdd;
27
	private $parametres = array();
27
	private $parametres = array();
28
	private $ressources = array();
28
	private $ressources = array();
29
	private $tri = 'date_transmission';
29
	private $tri = 'date_transmission';
30
	private $directionTri = 'desc';
30
	private $directionTri = 'desc';
31
	private $protocole_defaut = 1;
31
	private $protocole_defaut = null;
32
	private $valeur_vote_min_defaut = 3;
32
	private $valeur_vote_min_defaut = null;
Line 33... Line 33...
33
	
33
	
34
	public function __construct(Conteneur $conteneur = null) {
34
	public function __construct(Conteneur $conteneur = null) {
35
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
-
 
36
		$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
35
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
37
		$this->conteneur->chargerConfiguration('config_mapping_votes.ini');
-
 
38
		$this->conteneur->chargerConfiguration('config_images.ini');
36
		$this->conteneur->chargerConfiguration('config_determinations.ini');
39
		$this->navigation = $conteneur->getNavigation();
37
		$this->navigation = $conteneur->getNavigation();
40
		$this->masque = $conteneur->getMasque();
38
		$this->masque = $conteneur->getMasque();
41
		$this->gestionBdd = $conteneur->getGestionBdd();
39
		$this->gestionBdd = $conteneur->getGestionBdd();
42
		$this->bdd = $this->gestionBdd->getBdd();	
40
		$this->bdd = $this->gestionBdd->getBdd();	
Line 60... Line 58...
60
		
58
		
Line 61... Line 59...
61
		$this->initialiserTri();
59
		$this->initialiserTri();
62
		
60
		
-
 
61
		// Lancement du service
-
 
62
		$liaisons = $this->chargerLiaisons();
63
		// Lancement du service
63
		$total = 0;
-
 
64
		if(!empty($liaisons)) {
-
 
65
			$total = $this->compterImages();
-
 
66
			$images = $this->chargerImage($liaisons);
-
 
67
			$images = $this->chargerPropositionPlusProbable($images);
-
 
68
		} else {
-
 
69
			$images = $liaisons;
64
		$liaisons = $this->chargerLiaisons();
70
		}
65
		$total = $this->compterImages();
-
 
66
		$this->navigation->setTotal($total);
-
 
Line 67... Line 71...
67
		$images = $this->chargerImage($liaisons);
71
		
68
		$images = $this->chargerPropositionPlusProbable($images);
72
		$this->navigation->setTotal($total);
69
		
73
		
-
 
74
		// Mettre en forme le résultat et l'envoyer pour affichage
70
		// Mettre en forme le résultat et l'envoyer pour affichage
75
		$resultat = new ResultatService();
71
		$resultat = new ResultatService();
76
		$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $images);
Line 72... Line 77...
72
		$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $images);
77
		
73
		return $resultat;
78
		return $resultat;
74
	}
79
	}
-
 
80
	
75
	
81
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
76
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
82
		$this->ressources = $ressources;
77
		$this->ressources = $ressources;
83
		$this->parametres = $parametres;
78
		$this->parametres = $parametres;
84
		
79
		if(!isset($parametres['protocole'])) {
85
		if(!isset($parametres['masque.protocole'])) {
80
			$this->parametres['protocole'] = $this->protocole_defaut;
86
			$this->parametres['masque.protocole'] = $this->protocole_defaut;
81
		}
87
		}
Line 82... Line 88...
82
		if(!isset($parametres['valeur_vote_min'])) {
88
		if(!isset($parametres['masque.valeur_vote_min'])) {
83
			$this->parametres['valeur_vote_min'] = $this->valeur_vote_min_defaut;
89
			$this->parametres['masque.valeur_vote_min'] = $this->valeur_vote_min_defaut;
-
 
90
		}
-
 
91
	}
84
		}
92
	
-
 
93
	private function verifierParametres() {		
85
	}
94
		$erreurs = array();
-
 
95
		$tableau_protocoles = explode(',',$this->conteneur->getParametre('protocoles_possibles'));
-
 
96
 
86
	
97
		if(isset($this->parametres['masque.protocole']) && 
Line 87... Line 98...
87
	private function verifierParametres() {		
98
			(!is_numeric($this->parametres['masque.protocole']) || 
-
 
99
			 !in_array($this->parametres['masque.protocole'], $tableau_protocoles)
-
 
100
			)) {
-
 
101
			$erreurs[] = '- la valeur pour le protocole doit être un entier compris dans les numéros de protocole existants '.$this->conteneur->getParametre('protocoles_possibles');
-
 
102
		}
88
		$erreurs = array();
103
		
89
		if(isset($this->parametres['protocole']) && !is_numeric($this->parametres['protocole'])) {
104
		if(isset($this->parametres['masque.valeur_min_vote']) &&
Line 90... Line 105...
90
			$erreurs[] = '- la valeur pour le protocole doit être un entier ';
105
				 (!is_numeric($this->parametres['masque.valeur_min_vote']) ||
91
		}
106
				  $this->parametres['masque.valeur_min_vote'] < 0 ||
92
		
107
				  $this->parametres['masque.valeur_min_vote'] > 5
Line 121... Line 136...
121
	 * Vérifier que le service est bien configuré 
136
	 * Vérifier que le service est bien configuré 
122
	 * */
137
	 * */
123
	public function verifierConfiguration() {
138
	public function verifierConfiguration() {
Line 124... Line 139...
124
	
139
	
125
		$erreurs = array();
-
 
126
		$tableauImages = $this->conteneur->getParametre('images');
-
 
127
		if (empty($tableauImages)) {
-
 
128
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [images] ou celui-ci est vide ;'; 
-
 
129
		} else {
-
 
130
			if ($this->conteneur->getParametre('url_service') == null) {
-
 
131
				$erreurs[] = '- paramètre "url_service" manquant ;';
-
 
132
			}
-
 
133
			
-
 
134
			if ($this->conteneur->getParametre('url_images') == null) {
-
 
135
				$erreurs[] = '- paramètre "url_images" manquant ;';
-
 
136
			}
-
 
137
			
-
 
138
		}
-
 
139
 
-
 
140
		if (empty($this->mappingObservation)) {
-
 
141
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_observation] ou celui-ci est vide ;';
-
 
142
		} else {
-
 
143
			$champsMappingObs = array('id_observation', 'date_observation', 'date_transmission', 'famille', 'nom_sel', 'nom_sel_nn', 'nt',
-
 
144
								'ce_zone_geo', 'lieudit', 'station', 'milieu', 'ce_utilisateur', 'nom', 'prenom');
-
 
145
			foreach ($champsMappingObs as $champ) {
-
 
146
				if (!isset($this->mappingObservation[$champ])) {
-
 
147
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
-
 
148
				}				
-
 
149
			}
-
 
150
		}
-
 
151
		
-
 
152
		if (empty($this->mappingFiltre)) {
-
 
153
			$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_masque] ou celui-ci est vide ;';
-
 
154
		} else {
-
 
155
			$champsMappingFiltre = array('famille', 'ns', 'nn', 'date', 'tag', 'commune');
-
 
156
			foreach ($champsMappingFiltre as $champ) {
-
 
157
				if (!isset($this->mappingFiltre[$champ])) {
-
 
158
					$erreurs[] = '- le mapping du champ "'.$champ.'" pour l\'observation est manquant ;';
-
 
159
				}				
-
 
160
			}
-
 
161
		}
-
 
162
		
140
		$erreurs = array();
163
		$tris_possibles = $this->conteneur->getParametre('tris_possibles');
141
		$tris_possibles = $this->conteneur->getParametre('protocoles_possibles');
164
		if (empty($tris_possibles)) {
142
		if (empty($tris_possibles)) {
165
			$erreurs[] = '- le fichier de configuration ne contient pas le parametre tris_possibles ou celui-ci est vide ;';
143
			$erreurs[] = '- le fichier de configuration ne contient pas le parametre protocoles_possibles ou celui-ci est vide ;';
-
 
144
		}
Line 166... Line 145...
166
		}
145
		//TODO: ajouter des vérifications si le web service s'étoffe
167
		
146
		
168
		if (!empty($erreurs)) {
147
		if (!empty($erreurs)) {
169
			$e = 'Erreur lors de la configuration : '."\n";
148
			$e = 'Erreur lors de la configuration : '."\n";
Line 198... Line 177...
198
	
177
	
199
		$champs = array('dob.id_observation as id_observation', 'nom_ret', 'nom_ret_nn', 'nt', 'famille', 'ce_zone_geo', 'zone_geo', 
178
		$champs = array('dob.id_observation as id_observation', 'nom_ret', 'nom_ret_nn', 'nt', 'famille', 'ce_zone_geo', 'zone_geo', 
200
						'lieudit', 'station', 'milieu', 'date_observation', 'dob.mots_cles_texte as mots_cles_texte', 'dob.commentaire as commentaire', 
179
						'lieudit', 'station', 'milieu', 'date_observation', 'dob.mots_cles_texte as mots_cles_texte', 'dob.commentaire as commentaire', 
201
						'di.mots_cles_texte as mots_cles_texte_image ', 'date_transmission', 'di.id_image as id_image', 'di.ce_utilisateur as ce_utilisateur', 
180
						'di.mots_cles_texte as mots_cles_texte_image ', 'date_transmission', 'di.id_image as id_image', 'di.ce_utilisateur as ce_utilisateur', 
202
						'prenom', 'nom', 'courriel', 'nom_original');
-
 
203
		// Attention le LEFT JOIN est indispensable pour ramener les images n'ayant pas de votes
-
 
-
 
181
						'prenom', 'nom', 'courriel', 'nom_original');
204
		// en cas de tri par votes
182
		
205
		$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS '.implode(', ',$champs).', '.
183
		$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS '.implode(', ',$champs).', '.
206
						   'AVG(dvote.valeur) as moyenne_votes '.
184
						   'AVG(dvote.valeur) as moyenne_votes '.
207
						   'FROM '.$this->gestionBdd->formaterTable('del_obs_image', 'doi').
185
						   'FROM '.$this->gestionBdd->formaterTable('del_obs_image', 'doi').
208
						   'INNER JOIN del_image di '.
186
						   'INNER JOIN del_image di '.
209
						   'ON doi.id_image = di.id_image '.
187
						   'ON doi.id_image = di.id_image '.
210
						   'INNER JOIN del_observation dob '.
188
						   'INNER JOIN del_observation dob '.
211
						   'ON doi.id_observation = dob.id_observation '.
189
						   'ON doi.id_observation = dob.id_observation '.
212
						   'INNER JOIN del_utilisateur du '.
190
						   'INNER JOIN del_utilisateur du '.
213
						   'ON du.id_utilisateur = di.ce_utilisateur '.
191
						   'ON du.id_utilisateur = di.ce_utilisateur '.
-
 
192
						   'LEFT JOIN del_image_vote dvote '.
214
						   'LEFT JOIN del_image_vote dvote '.
193
						   'ON doi.id_image = dvote.ce_image '.
-
 
194
							($this->parametres['masque.protocole'] != null ? 'AND dvote.ce_protocole = '.$this->parametres['masque.protocole'].' ' : ' ');
215
						   'ON doi.id_image = dvote.ce_image AND dvote.ce_protocole = '.$this->parametres['protocole'].' ';
195
		$requeteLiaisons .= 'GROUP BY dvote.ce_image '.
-
 
196
							($this->parametres['masque.valeur_vote_min'] != null ? 'HAVING AVG(dvote.valeur) >= '.$this->parametres['masque.valeur_vote_min'].' ' : ' ').
216
		$requeteLiaisons .= 'GROUP BY dvote.ce_image HAVING AVG(dvote.valeur) >= '.$this->parametres['valeur_vote_min'].' ORDER BY moyenne_votes';
197
							'ORDER BY moyenne_votes';
217
		$requeteLiaisons .= $this->gestionBdd->getLimitSql();
-
 
218
 
198
		$requeteLiaisons .= $this->gestionBdd->getLimitSql();
219
		return $this->bdd->recupererTous($requeteLiaisons);
199
		return $this->bdd->recupererTous($requeteLiaisons);
Line 220... Line 200...
220
	}
200
	}
221
	
201
	
Line 268... Line 248...
268
			);
248
			);
269
		}
249
		}
270
		return $images;
250
		return $images;
271
	}
251
	}
Line 272... Line -...
272
	
-
 
273
	private function formaterLieu($image) {
-
 
274
		$lieu = $image['zone_geo'];
-
 
275
		if($image['ce_zone_geo'] != '') {
-
 
276
			$id_zone_geo = $image['ce_zone_geo'];
-
 
277
			if(strpos($image['ce_zone_geo'], 'INSEE-C:') === 0) {
-
 
278
				$id_zone_geo = str_replace('INSEE-C:', '', $image['ce_zone_geo']);
-
 
279
				$id_zone_geo = (strlen($id_zone_geo) >= 5) ? substr($id_zone_geo, 0, 2) : $id_zone_geo;
-
 
280
			}
-
 
281
			
-
 
282
			$lieu .= ' ('.$id_zone_geo.')';
-
 
283
		}
-
 
284
		return $lieu;
-
 
285
	}
-
 
286
	
252
	
287
	/**
253
	/**
288
	* Charger les votes pour chaque image
254
	* Charger les votes pour chaque image
289
	* */
255
	* */
Line 345... Line 311...
345
					$images[$id]['determination.famille'] = $propositions[$id_obs]['famille'];
311
					$images[$id]['determination.famille'] = $propositions[$id_obs]['famille'];
346
					$images[$id]['determination.ns'] = $propositions[$id_obs]['nom_ret'];
312
					$images[$id]['determination.ns'] = $propositions[$id_obs]['nom_ret'];
347
					$images[$id]['determination.nn'] = $propositions[$id_obs]['nom_ret_nn'];
313
					$images[$id]['determination.nn'] = $propositions[$id_obs]['nom_ret_nn'];
348
					$images[$id]['determination.nt'] = $propositions[$id_obs]['nt'];
314
					$images[$id]['determination.nt'] = $propositions[$id_obs]['nt'];
349
				}
315
				}
-
 
316
				
-
 
317
				$images[$id]['url_fiche_eflore'] = $this->formaterUrlFicheEflore($images[$id]['determination.nn']);
350
			}
318
			}
Line 351... Line 319...
351
		
319
		
352
		return $images;
320
		return $images;
Line 388... Line 356...
388
		$url = $this->conteneur->getParametre('url_images');
356
		$url = $this->conteneur->getParametre('url_images');
389
		$urlImage = str_replace('%s', $idImage, $url);
357
		$urlImage = str_replace('%s', $idImage, $url);
390
		return $urlImage;
358
		return $urlImage;
391
	}
359
	}
Line -... Line 360...
-
 
360
	
-
 
361
	private function formaterLieu($image) {
-
 
362
		$lieu = $image['zone_geo'];
-
 
363
		if($image['ce_zone_geo'] != '') {
-
 
364
			$id_zone_geo = $image['ce_zone_geo'];
-
 
365
			if(strpos($image['ce_zone_geo'], 'INSEE-C:') === 0) {
-
 
366
				$id_zone_geo = str_replace('INSEE-C:', '', $image['ce_zone_geo']);
-
 
367
				$id_zone_geo = (strlen($id_zone_geo) >= 5) ? substr($id_zone_geo, 0, 2) : $id_zone_geo;
-
 
368
			}
-
 
369
				
-
 
370
			$lieu .= ' ('.$id_zone_geo.')';
-
 
371
		}
-
 
372
		return $lieu;
-
 
373
	}
-
 
374
	
-
 
375
	private function formaterUrlFicheEflore($num_nom) {
-
 
376
		$url = $this->conteneur->getParametre('url_fiche_eflore');
-
 
377
		return sprintf($url, $num_nom);
-
 
378
	}
392
	
379
	
393
	private function proteger($valeur) {
380
	private function proteger($valeur) {
394
		if (is_array($valeur)) {
381
		if (is_array($valeur)) {
395
			return $this->bdd->protegerTableau($valeur);
382
			return $this->bdd->protegerTableau($valeur);
396
		} else {
383
		} else {