Subversion Repositories eFlore/Applications.del

Rev

Rev 1793 | Rev 1881 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1793 Rev 1794
Line 3... Line 3...
3
 * Le web service plantnet récupère toutes les image de la table v_del_image
3
 * Le web service plantnet récupère toutes les image de la table v_del_image
4
 * ordonées par date de modification
4
 * ordonées par date de modification
5
 * Les images sont regroupées en observations
5
 * Les images sont regroupées en observations
6
 * Les tags, les votes et les propositions de determinations sont intégrés à l'observation
6
 * Les tags, les votes et les propositions de determinations sont intégrés à l'observation
7
 *
7
 *
8
 *
-
 
9
 * @category	php 5.2
8
 * @category DEL
-
 
9
 * @package Services
10
 * @author	Samuel Dufour-Kowalski <samuel.dufour@cirad.fr>
10
 * @subpackage Plantnet
-
 
11
 * @version 0.1
11
 * @author	Mathias Chouet <mathias@tela-botanica.org>
12
 * @author Mathias CHOUET <mathias@tela-botanica.org>
-
 
13
 * @author Samuel DUFOUR-KOWALSKI <samuel.dufour@cirad.fr>
12
 * @author	Raphaël Droz <raphael@tela-botanica.org>
14
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
13
 * @author	Aurélien Peronnet <aurelien@tela-botanica.org>
15
 * @author Aurelien PERONNET <aurelien@tela-botanica.org>
14
 
-
 
15
 
-
 
16
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
16
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
17
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
17
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
18
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images
18
 * @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
19
 */
19
 */
Line 20... Line 20...
20
 
20
 
Line 21... Line 21...
21
class Changements {
21
class Changements {
22
 
22
 
23
	private $indexImagesIds = array();
23
	private $indexImagesIds = array();
24
	private $conteneur;
-
 
25
	private $navigation;
24
	private $conteneur;
26
	private $masque;
25
	private $navigation;
27
	private $bdd;
26
	private $bdd;
28
	private $parametres = array();
27
	private $parametres = array();
Line 29... Line 28...
29
	private $ressources = array();
28
	private $ressources = array();
30
	private $date_defaut = '1900-01-01';
-
 
31
 
29
	private $date_defaut = '1900-01-01';
32
	public function __construct(Conteneur $conteneur = null) {
30
 
33
 
31
	public function __construct(Conteneur $conteneur = null) {
Line 34... Line 32...
34
          /* restore_exception_handler(); */
32
		/* restore_exception_handler(); */
35
          /* restore_error_handler(); */
33
		/* restore_error_handler(); */
36
          /* ini_set("display_errors", "1"); */
34
		/* ini_set("display_errors", "1"); */
37
 
-
 
38
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
35
 
39
		$this->conteneur->chargerConfiguration('config_plantnet.ini');
36
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
Line 40... Line 37...
40
		$this->navigation = $conteneur->getNavigation();
37
		$this->conteneur->chargerConfiguration('config_plantnet.ini');
41
		$this->masque = $conteneur->getMasque();
38
		$this->navigation = $conteneur->getNavigation();
Line 48... Line 45...
48
	 * pour l'afficher.
45
	 * pour l'afficher.
49
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
46
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
50
	 * @param array $parametres les paramètres situés après le ? dans l'url
47
	 * @param array $parametres les paramètres situés après le ? dans l'url
51
	 * */
48
	 * */
52
	public function consulter($ressources, $parametres) {
49
	public function consulter($ressources, $parametres) {
53
 
-
 
54
 
-
 
55
		// initialiserRessourcesEtParametres()
50
		// initialiserRessourcesEtParametres()
56
		$this->ressources = $ressources;
51
		$this->ressources = $ressources;
57
		$this->parametres = $parametres;
52
		$this->parametres = $parametres;
Line 58... Line -...
58
 
-
 
59
 
53
 
60
		if(!isset($parametres['date'])) {
54
		if (!isset($parametres['date'])) {
61
			$this->parametres['date'] = $this->date_defaut;
55
			$this->parametres['date'] = $this->date_defaut;
Line 62... Line -...
62
		}
-
 
63
 
56
		}
64
 
57
 
65
		// Lancement du service
58
		// Lancement du service
66
		$liaisons = $this->chargerLiaisons();
59
		$liaisons = $this->chargerLiaisons();
Line 80... Line 73...
80
 
73
 
Line 81... Line 74...
81
		$this->navigation->setTotal($total);
74
		$this->navigation->setTotal($total);
82
 
75
 
83
		// Mettre en forme le résultat et l'envoyer pour affichage
76
		// Mettre en forme le résultat et l'envoyer pour affichage
84
		$resultat = new ResultatService();
-
 
Line 85... Line 77...
85
		//$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $images);
77
		$resultat = new ResultatService();
86
                $resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $obs);
78
		$resultat->corps = array('entete' => $this->navigation->getEntete(), 'resultats' => $obs);
Line 87... Line 79...
87
 
79
 
88
		return $resultat;
-
 
89
	}
80
		return $resultat;
Line 90... Line 81...
90
 
81
	}
91
 
82
 
92
        private function orderArray(&$obs) {
83
 
Line 102... Line 93...
102
          }
93
		}
Line 103... Line 94...
103
 
94
 
104
          usort($ret, 'cmp');
95
		usort($ret, 'cmp');
105
          return $ret;
96
		return $ret;
-
 
97
	}
106
        }
98
 
107
	/*-------------------------------------------------------------------------------
99
	/*-------------------------------------------------------------------------------
108
								CHARGEMENT DES IMAGES
100
								CHARGEMENT DES IMAGES
109
	--------------------------------------------------------------------------------*/
-
 
Line -... Line 101...
-
 
101
	--------------------------------------------------------------------------------*/
110
	private function chargerLiaisons() {
102
 
111
 
103
	private function chargerLiaisons() {
112
          $date_debut = $this->parametres['date'];
104
		$date_debut = $this->parametres['date'];
113
          $date_debut = '\'' . $date_debut . '\'';
105
		$date_debut = '\'' . $date_debut . '\'';
114
          $limite = @min(intval($this->parametres['navigation.limite']), 1000);
106
		$limite = @min(intval($this->parametres['navigation.limite']), 1000);
Line 115... Line -...
115
          $limite = $limite ? $limite : 10; // 0 => 10
-
 
116
          $depart = intval(@$this->parametres['navigation.depart']);
-
 
117
 
107
		$limite = $limite ? $limite : 10; // 0 => 10
118
 
108
		$depart = intval(@$this->parametres['navigation.depart']);
Line 119... Line 109...
119
 
109
 
Line 152... Line 142...
152
 
142
 
Line 153... Line 143...
153
          //echo $requete_sql; exit;
143
		//echo $requete_sql; exit;
Line 154... Line -...
154
 
-
 
155
          return $this->bdd->recupererTous($requete_sql);
-
 
156
 
144
 
157
 
145
		return $this->bdd->recupererTous($requete_sql);
158
 
146
 
159
          // GROUP BY (très couteux) car multiples observations associées à une image
-
 
160
          // charlie est ici :-)
147
		// GROUP BY (très couteux) car multiples observations associées à une image
Line 161... Line -...
161
          // eg: 16150,16185,16245,16246,118995,129989
-
 
162
 
148
		// charlie est ici :-)
163
	}
149
		// eg: 16150,16185,16245,16246,118995,129989
164
 
-
 
165
 
150
	}
166
        // recupere les donnée associées (fait en 2 requetes pour optimiser)
151
 
167
        private function recupererDonneeObs(&$liaisons) {
152
	// recupere les donnée associées (fait en 2 requetes pour optimiser)
168
 
153
	private function recupererDonneeObs(&$liaisons) {
169
          // recuperer les ids
154
		// recuperer les ids
Line 201... Line 186...
201
        }
186
	}
Line 202... Line 187...
202
 
187
 
203
	/**
188
	/**
204
	* Retourner un tableau d'images formaté en fonction des liaisons trouvées
189
	* Retourner un tableau d'images formaté en fonction des liaisons trouvées
205
	* @param $liaisons les liaisons de la table del_obs_images
190
	* @param $liaisons les liaisons de la table del_obs_images
206
	* */
191
	*/
207
	private function regrouperObs(&$liaisons, &$imgdatas) {
-
 
208
 
192
	private function regrouperObs(&$liaisons, &$imgdatas) {
209
          // regroupe les observations
193
		// regroupe les observations
210
          $obs = array();
194
		$obs = array();
211
          foreach ($liaisons as $img) {
195
		foreach ($liaisons as $img) {
212
            $idobs = $img['id_observation'];
196
			$idobs = $img['id_observation'];
Line 240... Line 224...
240
 
224
 
241
            $obs[$idobs]['zone_geo'] = $imgdata['zone_geo'];
225
			$obs[$idobs]['zone_geo'] = $imgdata['zone_geo'];
242
            $obs[$idobs]['latitude'] = floatval($imgdata['latitude']);
226
			$obs[$idobs]['latitude'] = floatval($imgdata['latitude']);
Line 243... Line -...
243
            $obs[$idobs]['longitude'] = floatval($imgdata['longitude']);
-
 
244
 
227
			$obs[$idobs]['longitude'] = floatval($imgdata['longitude']);
245
 
228
 
246
            if (!isset($obs[$idobs]['images'])) {
229
			if (!isset($obs[$idobs]['images'])) {
Line 247... Line 230...
247
              $obs[$idobs]['images'] = array();
230
				$obs[$idobs]['images'] = array();
Line 255... Line 238...
255
                             'tags' => explode(',', $img['tags']),
238
				'tags' => explode(',', $img['tags']),
256
                             'mots_cles_img_cel' => $this->formaterMotsClesCel($imgdata['mots_cles_texte_image'])
239
				'mots_cles_img_cel' => $this->formaterMotsClesCel($imgdata['mots_cles_texte_image'])
257
                             );
240
				);
258
            // push
241
			// push
259
            $obs[$idobs]['images'][] = $img_obj;
242
			$obs[$idobs]['images'][] = $img_obj;
260
 
-
 
261
          }
243
		}
262
 
-
 
263
          return $obs;
244
		return $obs;
264
 
-
 
265
	}
245
	}
Line 266... Line 246...
266
 
246
 
267
	/**
247
	/**
268
         * Charger les votes pour chaque image
248
	 * Charger les votes pour chaque image
269
         **/
249
	 */
270
	private function chargerPropositionPlusProbable(&$obs) {
-
 
271
 
250
	private function chargerPropositionPlusProbable(&$obs) {
Line 272... Line 251...
272
          $obsIds = array_keys($obs);
251
		$obsIds = array_keys($obs);
273
 
252
 
274
          $resultats = $this->bdd->recupererTous(sprintf(
253
		$resultats = $this->bdd->recupererTous(sprintf(
275
                  'SELECT ce_observation, id_commentaire, valeur, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, del_commentaire_vote.ce_utilisateur '.
254
			'SELECT ce_observation, id_commentaire, valeur, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, del_commentaire_vote.ce_utilisateur '.
276
                  'FROM del_commentaire_vote, del_commentaire '.
255
			'FROM del_commentaire_vote, del_commentaire '.
277
                  'WHERE ce_observation IN (%s) '.
256
			'WHERE ce_observation IN (%s) '.
278
                  'AND nom_sel IS NOT NULL '.
257
			'AND nom_sel IS NOT NULL '.
Line 279... Line -...
279
                  'AND del_commentaire.id_commentaire=del_commentaire_vote.ce_proposition '.
-
 
280
                  '', implode(',', $obsIds)));
258
			'AND del_commentaire.id_commentaire=del_commentaire_vote.ce_proposition '.
Line 281... Line 259...
281
 
259
			'', implode(',', $obsIds)));
282
 
260
 
283
          $votes = array(); // map ce_proposition -> score
261
		$votes = array(); // map ce_proposition -> score
Line 302... Line 280...
302
 
280
 
303
            $obs[$idobs]['determinations'][$vote['id_commentaire']] =
281
			$obs[$idobs]['determinations'][$vote['id_commentaire']] =
304
              array('nom_sel' => $vote['nom_sel'],
282
			array('nom_sel' => $vote['nom_sel'],
305
                    'nom_ret' => $vote['nom_ret'],
283
				'nom_ret' => $vote['nom_ret'],
306
                    'score' => $votes[$vote['id_commentaire']],
284
				'score' => $votes[$vote['id_commentaire']],
307
                    'nn' => $vote['nom_sel_nn']
-
 
308
                    );
285
				'nn' => $vote['nom_sel_nn']);
309
          }
-
 
310
 
-
 
311
 
286
		}
312
          return $obs;
287
		return $obs;
Line 313... Line -...
313
	}
-
 
314
 
288
	}
315
 
289
 
316
	/*-------------------------------------------------------------------------------
290
	/*-------------------------------------------------------------------------------
-
 
291
								FORMATER ET METTRE EN FORME
317
								FORMATER ET METTRE EN FORME
292
	--------------------------------------------------------------------------------*/
318
	--------------------------------------------------------------------------------*/
293
 
319
	/**
294
	/**
320
	*  Formater les mots clés du cel en n'affichant que ceux faisant partie
295
	 * Formater les mots clés du cel en n'affichant que ceux faisant partie
321
	*  d'une liste définie dans le fichier de configuration
296
	 * d'une liste définie dans le fichier de configuration
322
	*  @param $chaineMotCleCel la chaine de mots clés du cel
297
	 * @param $chaineMotCleCel la chaine de mots clés du cel
323
	*  @return string la chaine filtrée
298
	 * @return string la chaine filtrée
324
	* */
-
 
325
	private function formaterMotsClesCel($chaineMotCleCel) {
299
	 */
Line 326... Line -...
326
 
-
 
327
          $mots_cles_cel_affiches = "fleur,fleurs,feuille,feuilles,ecorce,fruit,fruits,port,plantnet,plantscan_new";
300
	private function formaterMotsClesCel($chaineMotCleCel) {
328
 
301
		$mots_cles_cel_affiches = "fleur,fleurs,feuille,feuilles,ecorce,fruit,fruits,port,plantnet,plantscan_new";
329
 
302
 
Line 330... Line 303...
330
          $result = array_intersect(
303
		$result = array_intersect(