Subversion Repositories eFlore/Applications.del

Rev

Rev 1793 | Rev 1881 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1793 Rev 1794
1
<?php
1
<?php
2
/**
2
/**
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
 */
20
 
20
 
21
class Changements {
21
class Changements {
22
 
22
 
23
	private $indexImagesIds = array();
23
	private $indexImagesIds = array();
24
	private $conteneur;
24
	private $conteneur;
25
	private $navigation;
25
	private $navigation;
26
	private $masque;
-
 
27
	private $bdd;
26
	private $bdd;
28
	private $parametres = array();
27
	private $parametres = array();
29
	private $ressources = array();
28
	private $ressources = array();
30
	private $date_defaut = '1900-01-01';
29
	private $date_defaut = '1900-01-01';
31
 
30
 
32
	public function __construct(Conteneur $conteneur = null) {
31
	public function __construct(Conteneur $conteneur = null) {
33
 
-
 
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
 
35
 
38
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
36
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
39
		$this->conteneur->chargerConfiguration('config_plantnet.ini');
37
		$this->conteneur->chargerConfiguration('config_plantnet.ini');
40
		$this->navigation = $conteneur->getNavigation();
38
		$this->navigation = $conteneur->getNavigation();
41
		$this->masque = $conteneur->getMasque();
-
 
42
		$this->bdd = $this->conteneur->getBdd();
39
		$this->bdd = $this->conteneur->getBdd();
43
	}
40
	}
44
 
41
 
45
	/**
42
	/**
46
	 * Méthode principale de la classe.
43
	 * Méthode principale de la classe.
47
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService
44
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService
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;
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;
62
		}
56
		}
63
 
-
 
64
 
57
 
65
		// Lancement du service
58
		// Lancement du service
66
		$liaisons = $this->chargerLiaisons();
59
		$liaisons = $this->chargerLiaisons();
67
                $images = array();
60
		$images = array();
68
		$total = 0;
61
		$total = 0;
69
 
62
 
70
		if($liaisons) {
63
		if ($liaisons) {
71
                  $compte = $this->bdd->recuperer('SELECT FOUND_ROWS() AS nbre');
64
			$compte = $this->bdd->recuperer('SELECT FOUND_ROWS() AS nbre');
72
                  $total = (int) $compte['nbre'];
65
			$total = (int) $compte['nbre'];
73
 
66
 
74
                  $imgdata = $this->recupererDonneeObs($liaisons);
67
			$imgdata = $this->recupererDonneeObs($liaisons);
75
                  $obs = $this->regrouperObs($liaisons, $imgdata);
68
			$obs = $this->regrouperObs($liaisons, $imgdata);
76
 
69
 
77
                  $obs = $this->chargerPropositionPlusProbable($obs);
70
			$obs = $this->chargerPropositionPlusProbable($obs);
78
                  $obs = $this->orderArray($obs);
71
			$obs = $this->orderArray($obs);
79
		}
72
		}
80
 
73
 
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();
77
		$resultat = new ResultatService();
85
		//$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $images);
78
		$resultat->corps = array('entete' => $this->navigation->getEntete(), 'resultats' => $obs);
86
                $resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $obs);
-
 
87
 
79
 
88
		return $resultat;
80
		return $resultat;
89
	}
81
	}
90
 
82
 
91
 
83
 
-
 
84
	private function orderArray(&$obs) {
92
        private function orderArray(&$obs) {
85
		$ret = array();
-
 
86
 
-
 
87
		foreach ($obs as $o) {
93
 
88
			$ret[] = $o;
94
          $ret = array();
89
		}
95
 
90
 
96
          foreach ($obs as $o) {
91
		function cmp($a, $b) {
97
            $ret[] = $o;
-
 
98
          }
92
			return ($a['date_changement'] < $b['date_changement']) ? 1 : -1;
-
 
93
		}
99
 
-
 
100
          function cmp($a, $b) {
-
 
101
            return ($a['date_changement'] < $b['date_changement']) ? 1 : -1;
-
 
102
          }
94
 
103
 
95
		usort($ret, 'cmp');
104
          usort($ret, 'cmp');
96
		return $ret;
105
          return $ret;
97
	}
106
        }
98
 
107
	/*-------------------------------------------------------------------------------
99
	/*-------------------------------------------------------------------------------
108
								CHARGEMENT DES IMAGES
100
								CHARGEMENT DES IMAGES
109
	--------------------------------------------------------------------------------*/
101
	--------------------------------------------------------------------------------*/
110
	private function chargerLiaisons() {
-
 
111
 
-
 
112
          $date_debut = $this->parametres['date'];
-
 
113
          $date_debut = '\'' . $date_debut . '\'';
-
 
114
          $limite = @min(intval($this->parametres['navigation.limite']), 1000);
-
 
115
          $limite = $limite ? $limite : 10; // 0 => 10
-
 
116
          $depart = intval(@$this->parametres['navigation.depart']);
-
 
117
 
-
 
118
 
-
 
119
 
-
 
120
          $requete_sql =
-
 
121
            'select SQL_CALC_FOUND_ROWS vdi.id_observation, vdi.id_image, '.
-
 
122
 
-
 
123
            'GROUP_CONCAT(del_image_vote.valeur) as votes, GROUP_CONCAT(DISTINCT tag) as tags, '.
-
 
124
 
-
 
125
            'GREATEST('.
-
 
126
            'IFNULL(vdi.date_creation, \''.$this->date_defaut.'\'), '.
-
 
127
            'IFNULL(vdi.date_modification, \''.$this->date_defaut.'\'), '.
-
 
128
            'IFNULL(MAX(del_image_tag.date), \''.$this->date_defaut.'\'), '.
-
 
129
            'IFNULL(MAX(del_image_tag.date_modification), \''.$this->date_defaut.'\'), '.
-
 
130
            'IFNULL(MAX(del_image_vote.date), \''.$this->date_defaut.'\'), '.
-
 
131
            'IFNULL(MAX(del_commentaire.date), \''.$this->date_defaut.'\'), '.
-
 
132
            'IFNULL(MAX(del_commentaire_vote.date), \''.$this->date_defaut.'\')) as modif_date '.
-
 
133
 
-
 
134
            'from v_del_image as vdi '.
-
 
135
 
-
 
136
            'left join del_image_vote on del_image_vote.ce_image=id_image and del_image_vote.ce_protocole=3 '.
-
 
137
            'left join del_image_tag on del_image_tag.ce_image=id_image and del_image_tag.actif=1 '.
-
 
138
            'left join del_commentaire on del_commentaire.ce_observation=id_observation '.
-
 
139
            'left join del_commentaire_vote on del_commentaire_vote.ce_proposition=del_commentaire.id_commentaire '.
-
 
140
 
-
 
141
            'group by id_image, id_observation '.
-
 
142
 
-
 
143
            'having MAX(vdi.date_creation) >= '.$date_debut.' or '.
-
 
144
            '       MAX(vdi.date_modification) >= '.$date_debut.' or '.
-
 
145
            '       MAX(del_image_tag.date) >= '.$date_debut.' or '.
-
 
146
            '       MAX(del_image_tag.date_modification) >= '.$date_debut.' or '.
-
 
147
            '       MAX(del_image_vote.date) >= '.$date_debut.' or '.
-
 
148
            '       MAX(del_commentaire.date) >= '.$date_debut.' or '.
-
 
149
            '       MAX(del_commentaire_vote.date) >= '.$date_debut.' '.
-
 
150
            'order by modif_date DESC '.
-
 
151
            'limit '.$depart.', '.$limite.' -- '.__FILE__.':'.__LINE__;
-
 
152
 
-
 
153
          //echo $requete_sql; exit;
-
 
154
 
-
 
155
          return $this->bdd->recupererTous($requete_sql);
-
 
156
 
-
 
157
 
-
 
158
 
-
 
159
          // GROUP BY (très couteux) car multiples observations associées à une image
-
 
160
          // charlie est ici :-)
-
 
161
          // eg: 16150,16185,16245,16246,118995,129989
-
 
-
 
102
 
-
 
103
	private function chargerLiaisons() {
-
 
104
		$date_debut = $this->parametres['date'];
-
 
105
		$date_debut = '\'' . $date_debut . '\'';
-
 
106
		$limite = @min(intval($this->parametres['navigation.limite']), 1000);
-
 
107
		$limite = $limite ? $limite : 10; // 0 => 10
-
 
108
		$depart = intval(@$this->parametres['navigation.depart']);
-
 
109
 
-
 
110
		$requete_sql =
-
 
111
			'select SQL_CALC_FOUND_ROWS vdi.id_observation, vdi.id_image, '.
-
 
112
 
-
 
113
			'GROUP_CONCAT(del_image_vote.valeur) as votes, GROUP_CONCAT(DISTINCT tag) as tags, '.
-
 
114
 
-
 
115
			'GREATEST('.
-
 
116
			'IFNULL(vdi.date_creation, \''.$this->date_defaut.'\'), '.
-
 
117
			'IFNULL(vdi.date_modification, \''.$this->date_defaut.'\'), '.
-
 
118
			'IFNULL(MAX(del_image_tag.date), \''.$this->date_defaut.'\'), '.
-
 
119
			'IFNULL(MAX(del_image_tag.date_modification), \''.$this->date_defaut.'\'), '.
-
 
120
			'IFNULL(MAX(del_image_vote.date), \''.$this->date_defaut.'\'), '.
-
 
121
			'IFNULL(MAX(del_commentaire.date), \''.$this->date_defaut.'\'), '.
-
 
122
			'IFNULL(MAX(del_commentaire_vote.date), \''.$this->date_defaut.'\')) as modif_date '.
-
 
123
 
-
 
124
			'from v_del_image as vdi '.
-
 
125
 
-
 
126
			'left join del_image_vote on del_image_vote.ce_image=id_image and del_image_vote.ce_protocole=3 '.
-
 
127
			'left join del_image_tag on del_image_tag.ce_image=id_image and del_image_tag.actif=1 '.
-
 
128
			'left join del_commentaire on del_commentaire.ce_observation=id_observation '.
-
 
129
			'left join del_commentaire_vote on del_commentaire_vote.ce_proposition=del_commentaire.id_commentaire '.
-
 
130
 
-
 
131
			'group by id_image, id_observation '.
-
 
132
 
-
 
133
			'having MAX(vdi.date_creation) >= '.$date_debut.' or '.
-
 
134
			'       MAX(vdi.date_modification) >= '.$date_debut.' or '.
-
 
135
			'       MAX(del_image_tag.date) >= '.$date_debut.' or '.
-
 
136
			'       MAX(del_image_tag.date_modification) >= '.$date_debut.' or '.
-
 
137
			'       MAX(del_image_vote.date) >= '.$date_debut.' or '.
-
 
138
			'       MAX(del_commentaire.date) >= '.$date_debut.' or '.
-
 
139
			'       MAX(del_commentaire_vote.date) >= '.$date_debut.' '.
-
 
140
			'order by modif_date DESC '.
-
 
141
			'limit '.$depart.', '.$limite.' -- '.__FILE__.':'.__LINE__;
-
 
142
 
-
 
143
		//echo $requete_sql; exit;
-
 
144
 
-
 
145
		return $this->bdd->recupererTous($requete_sql);
-
 
146
 
-
 
147
		// GROUP BY (très couteux) car multiples observations associées à une image
-
 
148
		// charlie est ici :-)
162
 
149
		// eg: 16150,16185,16245,16246,118995,129989
-
 
150
	}
-
 
151
 
-
 
152
	// recupere les donnée associées (fait en 2 requetes pour optimiser)
-
 
153
	private function recupererDonneeObs(&$liaisons) {
-
 
154
		// recuperer les ids
-
 
155
		$ids = array();
-
 
156
		foreach ($liaisons as $img) {
-
 
157
			$id = $img['id_image'];
163
	}
-
 
164
 
-
 
165
 
-
 
166
        // recupere les donnée associées (fait en 2 requetes pour optimiser)
-
 
167
        private function recupererDonneeObs(&$liaisons) {
-
 
168
 
-
 
169
          // recuperer les ids
-
 
170
          $ids = array();
-
 
171
          foreach ($liaisons as $img) {
-
 
172
            $id = $img['id_image'];
-
 
173
            $ids[] = $id;
158
			$ids[] = $id;
174
          }
159
		}
175
 
160
 
176
          // recuperer les donnees
161
		// recuperer les donnees
177
          $resultats = $this->bdd->recupererTous(sprintf(
162
		$resultats = $this->bdd->recupererTous(sprintf(
178
                  'SELECT  '.
163
			'SELECT  '.
179
                  'vdi.id_observation, vdi.id_image, '.
164
			'vdi.id_observation, vdi.id_image, '.
180
                  'vdi.nom_sel, '.
165
			'vdi.nom_sel, '.
181
                  'vdi.nom_referentiel, vdi.nom_ret, vdi.nom_ret_nn, vdi.nt, vdi.famille, '.
166
			'vdi.nom_referentiel, vdi.nom_ret, vdi.nom_ret_nn, vdi.nt, vdi.famille, '.
182
                  'vdi.zone_geo, vdi.latitude, vdi.longitude, '.
167
			'vdi.zone_geo, vdi.latitude, vdi.longitude, '.
183
                  'vdi.date_observation, vdi.date_creation, vdi.date_transmission, '.
168
			'vdi.date_observation, vdi.date_creation, vdi.date_transmission, '.
184
                  'vdi.mots_cles_texte as mots_cles_texte, '.
169
			'vdi.mots_cles_texte as mots_cles_texte, '.
185
                  'vdi.i_mots_cles_texte as mots_cles_texte_image, '.
170
			'vdi.i_mots_cles_texte as mots_cles_texte_image, '.
186
 
171
 
187
                  'vdi.ce_utilisateur as ce_utilisateur, '.
172
			'vdi.ce_utilisateur as ce_utilisateur, '.
188
                  'vdi.prenom_utilisateur, vdi.courriel_utilisateur, vdi.nom_utilisateur, vdi.nom_original as nom_image '.
173
			'vdi.prenom_utilisateur, vdi.courriel_utilisateur, vdi.nom_utilisateur, vdi.nom_original as nom_image '.
189
 
174
 
190
                  'FROM v_del_image as vdi '.
175
			'FROM v_del_image as vdi '.
191
                  'WHERE vdi.id_image IN (%s) '.
176
			'WHERE vdi.id_image IN (%s) '.
192
                  '', implode(',', $ids)));
177
			'', implode(',', $ids)));
193
 
178
 
194
          // regroupe les données par id_image
179
		// regroupe les données par id_image
195
          $img_data = array();
180
		$img_data = array();
196
          foreach ($resultats as $img) {
181
		foreach ($resultats as $img) {
197
            $id = $img['id_image'];
182
			$id = $img['id_image'];
198
            $img_data[$id] = $img;
183
			$img_data[$id] = $img;
199
          }
184
		}
200
          return $img_data;
185
		return $img_data;
201
        }
186
	}
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) {
192
	private function regrouperObs(&$liaisons, &$imgdatas) {
208
 
-
 
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'];
213
            $idimg = $img['id_image'];
197
			$idimg = $img['id_image'];
214
 
198
 
215
            $imgdata = $imgdatas[$idimg];
199
			$imgdata = $imgdatas[$idimg];
216
 
200
 
217
            if (!isset($obs[$idobs])) {
201
			if (!isset($obs[$idobs])) {
218
              $obs[$idobs] = array();
202
				$obs[$idobs] = array();
219
            }
203
			}
220
 
204
 
221
            $obs[$idobs]['id_observation'] = $idobs;
205
			$obs[$idobs]['id_observation'] = $idobs;
222
            $obs[$idobs]['auteur_id'] = $imgdata['ce_utilisateur'];
206
			$obs[$idobs]['auteur_id'] = $imgdata['ce_utilisateur'];
223
            $obs[$idobs]['auteur_prenom'] = $imgdata['prenom_utilisateur'];
207
			$obs[$idobs]['auteur_prenom'] = $imgdata['prenom_utilisateur'];
224
            $obs[$idobs]['auteur_nom'] = $imgdata['nom_utilisateur'];
208
			$obs[$idobs]['auteur_nom'] = $imgdata['nom_utilisateur'];
225
            $obs[$idobs]['auteur_courriel'] = $imgdata['courriel_utilisateur'];
209
			$obs[$idobs]['auteur_courriel'] = $imgdata['courriel_utilisateur'];
226
 
210
 
227
            $obs[$idobs]['mots_cles_obs_cel'] = $this->formaterMotsClesCel($imgdata['mots_cles_texte']);
211
			$obs[$idobs]['mots_cles_obs_cel'] = $this->formaterMotsClesCel($imgdata['mots_cles_texte']);
228
 
212
 
229
            $obs[$idobs]['date_observation'] = $imgdata['date_observation'];
213
			$obs[$idobs]['date_observation'] = $imgdata['date_observation'];
230
            $obs[$idobs]['date_publication'] = $imgdata['date_transmission'];
214
			$obs[$idobs]['date_publication'] = $imgdata['date_transmission'];
231
            $obs[$idobs]['date_creation'] = $imgdata['date_creation'];
215
			$obs[$idobs]['date_creation'] = $imgdata['date_creation'];
232
            $obs[$idobs]['date_changement'] = $img['modif_date'];
216
			$obs[$idobs]['date_changement'] = $img['modif_date'];
233
 
217
 
234
            $obs[$idobs]['nom_sel'] = $imgdata['nom_sel'];
218
			$obs[$idobs]['nom_sel'] = $imgdata['nom_sel'];
235
            $obs[$idobs]['nom_referentiel'] = $imgdata['nom_referentiel'];
219
			$obs[$idobs]['nom_referentiel'] = $imgdata['nom_referentiel'];
236
            $obs[$idobs]['nom_ret'] = $imgdata['nom_ret'];
220
			$obs[$idobs]['nom_ret'] = $imgdata['nom_ret'];
237
            $obs[$idobs]['nn'] = $imgdata['nom_ret_nn'];
221
			$obs[$idobs]['nn'] = $imgdata['nom_ret_nn'];
238
            $obs[$idobs]['nt'] = $imgdata['nt'];
222
			$obs[$idobs]['nt'] = $imgdata['nt'];
239
            $obs[$idobs]['famille'] = $imgdata['famille'];
223
			$obs[$idobs]['famille'] = $imgdata['famille'];
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']);
243
            $obs[$idobs]['longitude'] = floatval($imgdata['longitude']);
227
			$obs[$idobs]['longitude'] = floatval($imgdata['longitude']);
244
 
-
 
245
 
228
 
246
            if (!isset($obs[$idobs]['images'])) {
229
			if (!isset($obs[$idobs]['images'])) {
247
              $obs[$idobs]['images'] = array();
230
				$obs[$idobs]['images'] = array();
248
            }
231
			}
249
 
232
 
250
            $img_obj = array(
233
			$img_obj = array(
251
                             'id_image' => $img['id_image'],
234
				'id_image' => $img['id_image'],
252
                             'nom_image' => $imgdata['nom_image'],
235
				'nom_image' => $imgdata['nom_image'],
253
                             'url' => sprintf('http://api.tela-botanica.org/img:%09dO.jpg', $img['id_image']),
236
				'url' => sprintf('http://api.tela-botanica.org/img:%09dO.jpg', $img['id_image']),
254
                             'votes' => array_map('intval', explode(',', $img['votes'])),
237
				'votes' => array_map('intval', explode(',', $img['votes'])),
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
          }
-
 
262
 
243
		}
263
          return $obs;
244
		return $obs;
264
 
-
 
265
	}
245
	}
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) {
250
	private function chargerPropositionPlusProbable(&$obs) {
-
 
251
		$obsIds = array_keys($obs);
271
 
-
 
272
          $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 '.
279
                  'AND del_commentaire.id_commentaire=del_commentaire_vote.ce_proposition '.
258
			'AND del_commentaire.id_commentaire=del_commentaire_vote.ce_proposition '.
280
                  '', implode(',', $obsIds)));
-
 
281
 
259
			'', implode(',', $obsIds)));
282
 
260
 
283
          $votes = array(); // map ce_proposition -> score
261
		$votes = array(); // map ce_proposition -> score
284
 
262
 
285
          // calcul des votes
263
		// calcul des votes
286
          // un vote identifié a un facteur de 3
264
		// un vote identifié a un facteur de 3
287
          // additionne tous les vote par ce_proposition
265
		// additionne tous les vote par ce_proposition
288
          foreach($resultats as $vote) {
266
		foreach ($resultats as $vote) {
289
            if(!isset($votes[$vote['id_commentaire']])) {
267
			if (!isset($votes[$vote['id_commentaire']])) {
290
              $votes[$vote['id_commentaire']] = 0;
268
				$votes[$vote['id_commentaire']] = 0;
291
            }
269
			}
292
            $valeur = ($vote['valeur'] == 1) ? 1 : -1;
270
			$valeur = ($vote['valeur'] == 1) ? 1 : -1;
293
            $votes[$vote['id_commentaire']] += is_numeric($vote['ce_utilisateur']) ? 3 * $valeur : $valeur;
-
 
294
          }
-
 
295
 
-
 
296
          foreach($resultats as $vote) {
-
 
297
            $idobs = $vote['ce_observation'];
-
 
298
 
-
 
299
            if(!isset($obs[$idobs]['determinations'])) {
-
 
300
              $obs[$idobs]['determinations'] = array();
-
 
301
            }
271
			$votes[$vote['id_commentaire']] += is_numeric($vote['ce_utilisateur']) ? 3 * $valeur : $valeur;
302
 
-
 
303
            $obs[$idobs]['determinations'][$vote['id_commentaire']] =
-
 
304
              array('nom_sel' => $vote['nom_sel'],
-
 
305
                    'nom_ret' => $vote['nom_ret'],
-
 
306
                    'score' => $votes[$vote['id_commentaire']],
-
 
307
                    'nn' => $vote['nom_sel_nn']
-
 
308
                    );
-
 
-
 
272
		}
-
 
273
 
-
 
274
		foreach ($resultats as $vote) {
-
 
275
			$idobs = $vote['ce_observation'];
-
 
276
 
-
 
277
			if (!isset($obs[$idobs]['determinations'])) {
-
 
278
				$obs[$idobs]['determinations'] = array();
-
 
279
			}
-
 
280
 
-
 
281
			$obs[$idobs]['determinations'][$vote['id_commentaire']] =
-
 
282
			array('nom_sel' => $vote['nom_sel'],
-
 
283
				'nom_ret' => $vote['nom_ret'],
309
          }
284
				'score' => $votes[$vote['id_commentaire']],
310
 
285
				'nn' => $vote['nom_sel_nn']);
311
 
-
 
312
          return $obs;
286
		}
313
	}
287
		return $obs;
314
 
288
	}
315
 
289
 
316
	/*-------------------------------------------------------------------------------
290
	/*-------------------------------------------------------------------------------
317
								FORMATER ET METTRE EN FORME
291
								FORMATER ET METTRE EN FORME
318
	--------------------------------------------------------------------------------*/
292
	--------------------------------------------------------------------------------*/
-
 
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
	* */
299
	 */
325
	private function formaterMotsClesCel($chaineMotCleCel) {
300
	private function formaterMotsClesCel($chaineMotCleCel) {
-
 
301
		$mots_cles_cel_affiches = "fleur,fleurs,feuille,feuilles,ecorce,fruit,fruits,port,plantnet,plantscan_new";
-
 
302
 
326
 
303
		$result = array_intersect(
-
 
304
			explode(',', $mots_cles_cel_affiches), // $tabMotsClesAffiches
327
          $mots_cles_cel_affiches = "fleur,fleurs,feuille,feuilles,ecorce,fruit,fruits,port,plantnet,plantscan_new";
-
 
328
 
-
 
329
 
-
 
330
          $result = array_intersect(
-
 
331
                                 explode(',', $mots_cles_cel_affiches), // $tabMotsClesAffiches
-
 
332
                                 explode(',', $chaineMotCleCel)); // $tabMotsClesCel
305
			explode(',', $chaineMotCleCel)); // $tabMotsClesCel
333
 
306
 
334
          if (count($result) === 0) {
307
		if (count($result) === 0) {
335
            return array();
308
		  return array();
336
          }
309
		}
337
          $ret = explode(',', implode(',', $result));
310
		$ret = explode(',', implode(',', $result));
338
          return $ret;
311
		return $ret;
339
	}
312
	}
340
 
313
 
341
}
314
}