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 {
|