Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1593 Rev 1640
Line 68... Line 68...
68
 
68
 
69
		if($liaisons) {
69
		if($liaisons) {
70
                  $compte = $this->bdd->recuperer('SELECT FOUND_ROWS() AS nbre');
70
                  $compte = $this->bdd->recuperer('SELECT FOUND_ROWS() AS nbre');
Line 71... Line -...
71
                  $total = (int) $compte['nbre'];
-
 
72
                  
71
                  $total = (int) $compte['nbre'];
73
                  //$images = $this->chargerImages($liaisons);
72
                  
74
                  $obs = $this->regrouperObs($liaisons);
73
                  $obs = $this->regrouperObs($liaisons);
Line 75... Line 74...
75
                  //$images = $this->chargerPropositionPlusProbable($obs);
74
                  $obs = $this->chargerPropositionPlusProbable($obs);
Line 76... Line 75...
76
		}
75
		}
Line 97... Line 96...
97
          $depart = intval(@$this->parametres['navigation.depart']);
96
          $depart = intval(@$this->parametres['navigation.depart']);
Line 98... Line 97...
98
          
97
          
99
 
98
 
100
          $requete_sql = 
-
 
-
 
99
          $requete_sql = 
101
            'select SQL_CALC_FOUND_ROWS vdi.id_observation, vdi.id_image, '.
100
            'select SQL_CALC_FOUND_ROWS vdi.id_observation, vdi.id_image, '.
102
 
101
            'vdi.nom_sel, '.
103
            'vdi.nom_referentiel, vdi.nom_ret, vdi.nom_ret_nn, vdi.nt, vdi.famille, '.
102
            'vdi.nom_referentiel, vdi.nom_ret, vdi.nom_ret_nn, vdi.nt, vdi.famille, '.
104
            'vdi.ce_zone_geo, vdi.zone_geo, vdi.lieudit, vdi.station, vdi.milieu, '. 
103
            'vdi.zone_geo, vdi.latitude, vdi.longitude, '. 
105
            'vdi.date_observation, vdi.date_transmission, '. 
104
            'vdi.date_observation, vdi.date_creation, vdi.date_transmission, '. 
Line 106... Line 105...
106
            'vdi.mots_cles_texte as mots_cles_texte, '. 
105
            /* 'vdi.mots_cles_texte as mots_cles_texte, '.  */
107
            'vdi.i_mots_cles_texte as mots_cles_texte_image, '. 
106
            /* 'vdi.i_mots_cles_texte as mots_cles_texte_image, '.  */
Line 108... Line 107...
108
 
107
 
Line 138... Line 137...
138
 
137
 
Line 139... Line -...
139
          return $this->bdd->recupererTous($requete_sql);
-
 
140
          
-
 
141
 
-
 
142
 
-
 
143
 
138
          return $this->bdd->recupererTous($requete_sql);
144
 
139
          
Line 145... Line 140...
145
 
140
 
Line 163... Line 158...
163
            if (!isset($obs[$idobs])) {
158
            if (!isset($obs[$idobs])) {
164
              $obs[$idobs] = array();
159
              $obs[$idobs] = array();
165
            }
160
            }
Line 166... Line 161...
166
 
161
 
-
 
162
            $obs[$idobs]['id_observation'] = $idobs;
-
 
163
            $obs[$idobs]['auteur_id'] = $img['ce_utilisateur'];
-
 
164
            $obs[$idobs]['auteur_prenom'] = $img['prenom_utilisateur'];
-
 
165
            $obs[$idobs]['auteur_nom'] = $img['nom_utilisateur'];
-
 
166
            $obs[$idobs]['auteur_courriel'] = $img['courriel_utilisateur'];
-
 
167
 
-
 
168
            
-
 
169
            $obs[$idobs]['date_observation'] = $img['date_observation'];
-
 
170
            $obs[$idobs]['date_publication'] = $img['date_transmission'];
-
 
171
            $obs[$idobs]['date_creation'] = $img['date_creation'];
-
 
172
            $obs[$idobs]['date_changement'] = $img['modif_date'];
-
 
173
 
-
 
174
            $obs[$idobs]['nom_sel'] = $img['nom_sel'];
-
 
175
            $obs[$idobs]['nom_referentiel'] = $img['nom_referentiel'];
-
 
176
            $obs[$idobs]['nom_ret'] = $img['nom_ret'];
-
 
177
            $obs[$idobs]['nn'] = $img['nom_ret_nn'];
-
 
178
            $obs[$idobs]['nt'] = $img['nt'];
-
 
179
            $obs[$idobs]['famille'] = $img['famille'];
-
 
180
 
-
 
181
            $obs[$idobs]['zone_geo'] = $img['zone_geo'];
-
 
182
            $obs[$idobs]['latitude'] = $img['latitude'];
-
 
183
            $obs[$idobs]['longitude'] = $img['longitude'];
Line 167... Line 184...
167
            $obs[$idobs]['id_observation'] = $idobs;
184
            
168
 
185
 
169
            if (!isset($obs[$idobs]['images'])) {
186
            if (!isset($obs[$idobs]['images'])) {
Line -... Line 187...
-
 
187
              $obs[$idobs]['images'] = array();
-
 
188
            }
-
 
189
 
-
 
190
            $img_obj = array(
-
 
191
                             'id_image' => $img['id_image'],
-
 
192
                             'nom_image' => $img['nom_image'],
-
 
193
                             'votes' => array_map('intval', explode(',', $img['votes'])),
170
              $obs[$idobs]['images'] = array();
194
                             'tags' => explode(',', $img['tags']),
Line 171... Line 195...
171
            }
195
                             );
Line 172... Line 196...
172
 
196
            // push
173
            $obs[$idobs]['images'][] = $img['id_image'];
-
 
174
 
-
 
Line 175... Line -...
175
          }
-
 
176
          
-
 
177
          return $obs;
-
 
178
 
-
 
179
 
-
 
180
		
-
 
181
		/* $images = array(); */
-
 
182
		/* foreach ($liaisons as $liaison) { */
-
 
183
			
-
 
184
		/* 	if($liaison['ce_utilisateur'] == 0) { */
-
 
185
		/* 		$liaison['prenom'] = $liaison['prenom_utilisateur']; */
-
 
186
		/* 		$liaison['nom'] = $liaison['nom_utilisateur']; */
-
 
187
		/* 	} */
-
 
188
			
-
 
189
		/* 	$idObs = $liaison['id_observation']; */
-
 
190
		/* 	$idImage = $liaison['id_image']; */
-
 
191
		/* 	// On enregistre l'ID de l'obs pour n'effectuer qu'une seule requête par la suite */
-
 
192
		/* 	$this->obsIds[] = $idObs; */
-
 
193
		/* 	$index = $liaison['id_image'].'-'.$liaison['id_observation']; */
-
 
194
		/* 	$this->indexImagesIds[$idImage] = $index; */
-
 
195
		/* 	$images[$index] = array( */
-
 
196
		/* 				'id_image' => $idImage,  */
-
 
197
		/* 				'id_observation' => $idObs, */
-
 
198
		/* 				'auteur.intitule' => $liaison['prenom'].' '.$liaison['nom'], */
-
 
199
		/* 				'binaire.href' => sprintf($this->conteneur->getParametre('url_images'), $idImage), */
-
 
200
		/* 				'determination.famille' => $liaison['famille'], */
-
 
201
		/* 				'determination.referentiel' => $liaison['nom_referentiel'], */
-
 
202
		/* 				'determination.ns' => $liaison['nom_ret'], */
-
 
203
		/* 				'determination.nn' => $liaison['nom_ret_nn'], */
-
 
204
		/* 				'determination.nt' => $liaison['nt'], */
-
 
205
		/* 				'date_observation' => $liaison['date_observation'], */
-
 
206
		/* 				'localite' => $this->formaterLieu($liaison), */
197
            $obs[$idobs]['images'][] = $img_obj;
Line 207... Line 198...
207
		/* 				'mots_cles_image_cel' => $this->formaterMotsClesCel($liaison['mots_cles_texte_image']), */
198
 
208
		/* 				'mots_cles_image_del' => "" */
199
          }
209
		/* 	); */
200
          
210
		/* } */
201
          return $obs;
211
		/* return $images; */
202
		
212
	}
-
 
213
	
-
 
214
	/**
203
	}
215
     * Charger les votes pour chaque image
204
	
216
     **/
-
 
217
	private function chargerPropositionPlusProbable(&$images) {
205
	/**
218
 
206
         * Charger les votes pour chaque image
219
          $resultatsPropositions = $this->bdd->recupererTous(sprintf(
207
         **/
220
                'SELECT * FROM del_commentaire WHERE ce_observation IN (%s) AND nom_sel IS NOT NULL',
208
	private function chargerPropositionPlusProbable(&$obs) {
-
 
209
 
-
 
210
          $obsIds = array_keys($obs);
221
                implode(',', $this->obsIds)));
211
 
Line 222... Line 212...
222
 
212
          $resultats = $this->bdd->recupererTous(sprintf(
Line 223... Line 213...
223
          // !! attention la requete est reexecuté
213
                  'SELECT ce_observation, id_commentaire, valeur, nom_sel, nom_sel_nn, del_commentaire_vote.ce_utilisateur '.
224
          $resultatsVotes = $this->bdd->recupererTous(sprintf(
214
                  'FROM del_commentaire_vote, del_commentaire '.
-
 
215
                  'WHERE ce_observation IN (%s) '.
225
                'SELECT ce_proposition, valeur, ce_utilisateur FROM del_commentaire_vote WHERE ce_proposition IN'.
216
                  'AND nom_sel IS NOT NULL '.
226
                ' ( SELECT id_commentaire FROM del_commentaire WHERE ce_observation IN (%s) AND nom_sel IS NOT NULL )'.
217
                  'AND del_commentaire.id_commentaire=del_commentaire_vote.ce_proposition '.
227
                ' ORDER BY ce_proposition',
218
                  '', implode(',', $obsIds)));
228
                implode(',', $this->obsIds)));
219
 
229
 
220
			
230
			
221
          $votes = array(); // map ce_proposition -> score
231
          $votes = array(); // map ce_proposition -> score
222
			
232
			
223
          // calcul des votes
233
          // calcul des votes
-
 
234
          // un vote identifié a un facteur de 3
-
 
235
          foreach($resultatsVotes as $vote) {
-
 
236
            if(!isset($votes[$vote['ce_proposition']])) {
224
          // un vote identifié a un facteur de 3
237
              $votes[$vote['ce_proposition']] = 0;
-
 
238
            }
225
          // additionne tous les vote par ce_proposition
239
            $valeur = ($vote['valeur'] == 1) ? 1 : -1;
-
 
240
            $votes[$vote['ce_proposition']] += is_numeric($vote['ce_utilisateur']) ? 3 * $valeur : $valeur;
-
 
241
          }
-
 
242
	
-
 
243
          // calcul des propositions
-
 
244
          $propositions = array();
-
 
245
 
-
 
246
          foreach($resultatsPropositions as $proposition) {
-
 
247
            $id_proposition = $proposition['id_commentaire'];
-
 
248
            $id_obs = $proposition['ce_observation'];
-
 
Line 249... Line -...
249
 
-
 
250
            // une proposition sans vote a un score de -1
226
          foreach($resultats as $vote) {
251
            
227
            if(!isset($votes[$vote['id_commentaire']])) {
252
            if(isset($votes[$id_proposition])) {
-
 
253
              $score = $votes[$id_proposition];
-
 
254
            } else {
-
 
255
              $score = -1;
228
              $votes[$vote['id_commentaire']] = 0;
256
            }
-
 
257
 
-
 
Line 258... Line -...
258
            // on garde la proposition avec le plus grand score
-
 
259
            
-
 
260
            $proposition['valeur'] = $score;
-
 
261
            if(!isset($propositions[$id_obs])) {
-
 
262
              $propositions[$id_obs] = $proposition;
-
 
263
            } else {
-
 
264
              $score_ancienne_proposition = $propositions[$id_obs]['valeur'];
229
            }
265
              $propositions[$id_obs] = ($score >= $score_ancienne_proposition) ? $proposition : $propositions[$id_obs];
230
            $valeur = ($vote['valeur'] == 1) ? 1 : -1;
266
            }
231
            $votes[$vote['id_commentaire']] += is_numeric($vote['ce_utilisateur']) ? 3 * $valeur : $valeur;
267
          }
-
 
268
			
-
 
269
 
232
          }
270
          foreach ($images as $id => $image) {
-
 
271
 
233
          
272
            if ($this->doitRemplacerObservationParProposition($propositions, $image)) {					
234
          foreach($resultats as $vote) {
Line 273... Line -...
273
              
-
 
274
              $id_obs = $image['id_observation'];
-
 
275
              $images[$id]['determination.famille'] = $propositions[$id_obs]['famille'];
-
 
Line 276... Line -...
276
              $images[$id]['determination.ns'] = $propositions[$id_obs]['nom_sel'];
-
 
277
              $images[$id]['determination.nn'] = $propositions[$id_obs]['nom_sel_nn'];
-
 
278
              $images[$id]['determination.nt'] = $propositions[$id_obs]['nt'];
-
 
279
            }
-
 
280
            
-
 
281
            if(isset($images[$id]['determination.nn'])) {
-
 
282
              $images[$id]['url_fiche_eflore'] = sprintf($this->conteneur->getParametre('url_fiche_eflore'), $images[$id]['determination.nn']); // formaterUrlFicheEflore
235
            $idobs = $vote['ce_observation'];
283
            }
-
 
284
          }
236
            
Line -... Line 237...
-
 
237
            if(!isset($obs[$idobs]['determinations'])) {
285
          
238
              $obs[$idobs]['determinations'] = array();
286
          return $images;
239
            }
287
	}
240
 
288
	
241
            $obs[$idobs]['determinations'][$vote['id_commentaire']] = 
289
 
242
              array('nom_sel' => $vote['nom_sel'],
Line 310... Line 263...
310
		return implode(',', array_intersect(
263
		return implode(',', array_intersect(
311
            explode(',', $this->conteneur->getParametre('mots_cles_cel_affiches')), // $tabMotsClesAffiches
264
            explode(',', $this->conteneur->getParametre('mots_cles_cel_affiches')), // $tabMotsClesAffiches
312
            explode(',', $chaineMotCleCel))); // $tabMotsClesCel
265
            explode(',', $chaineMotCleCel))); // $tabMotsClesCel
313
	}
266
	}
Line 314... Line -...
314
	
-
 
315
 
-
 
316
	private function formaterLieu($image) {
-
 
317
		if(! $image['ce_zone_geo']) return '';
-
 
318
 
-
 
319
		$lieu = $image['zone_geo'];
-
 
320
        $id_zone_geo = $image['ce_zone_geo'];
-
 
321
        if(strpos($image['ce_zone_geo'], 'INSEE-C:') === 0) {
-
 
322
            $id_zone_geo = str_replace('INSEE-C:', '', $image['ce_zone_geo']);
-
 
323
            $id_zone_geo = strlen($id_zone_geo) >= 5 ? substr($id_zone_geo, 0, 2) : $id_zone_geo;
-
 
324
        }
-
 
325
				
-
 
326
        return $lieu . ' ('.$id_zone_geo.')';
-
 
327
	}
267