Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 935 Rev 959
Line 29... Line 29...
29
			$requete_selection_id .= ' IN ('.implode(',',$ordre).') ';
29
			$requete_selection_id .= ' IN ('.implode(',',$ordre).') ';
30
		} else {
30
		} else {
31
			$requete_selection_id .= ' = '.$this->proteger($ordre).' ';
31
			$requete_selection_id .= ' = '.$this->proteger($ordre).' ';
32
		}
32
		}
Line 33... Line 33...
33
		
33
		
34
		$requete_selection_id = ' AND ce_utilisateur = '.$this->proteger($id_utilisateur);
34
		$requete_selection_id .= ' AND ce_utilisateur = '.$this->proteger($id_utilisateur);
Line 35... Line 35...
35
		$requete_selection_id = ' ORDER BY id_observation';
35
		$requete_selection_id .= ' ORDER BY id_observation';
Line 36... Line 36...
36
		
36
		
37
		$resultat_ids = $this->requeter($requete_selection_id);
37
		$resultat_ids = $this->requeter($requete_selection_id);
Line 44... Line 44...
44
		}
44
		}
Line 45... Line 45...
45
		
45
		
46
		return $ids;
46
		return $ids;
Line 47... Line 47...
47
	}
47
	}
Line 48... Line 48...
48
	
48
	
Line 49... Line 49...
49
	public function rechercherObservations($id_utilisateur = null, $criteres = array(), $numero_page = 0, $taille_page = 50) {
49
	public function rechercherObservations($id_utilisateur = null, $criteres = array(), $debut = 0, $limite = 50) {
50
		
50
		
Line 59... Line 59...
59
 		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
59
 		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
Line 60... Line 60...
60
 		
60
 		
61
 		$requete_selection_observations .= $sous_requete_recherche;
61
 		$requete_selection_observations .= $sous_requete_recherche;
Line 62... Line -...
62
 		$requete_selection_observations = rtrim($requete_selection_observations, 'AND ');
-
 
63
 		
62
 		$requete_selection_observations = rtrim($requete_selection_observations, 'AND ');
Line 64... Line 63...
64
 		$debut = $taille_page*$numero_page ;
63
 		
65
		$requete_selection_observations .= ' ORDER BY ordre LIMIT '.$debut.','.$taille_page ;
64
		$requete_selection_observations .= ' ORDER BY ordre LIMIT '.$debut.','.$limite ;
Line 66... Line 65...
66
		
65
		
Line 83... Line 82...
83
 		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
82
 		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
Line 84... Line 83...
84
 		
83
 		
85
 		$requete_selection_observations .= $sous_requete_recherche;
84
 		$requete_selection_observations .= $sous_requete_recherche;
Line 86... Line 85...
86
 		$requete_selection_observations = rtrim($requete_selection_observations, 'AND ');
85
 		$requete_selection_observations = rtrim($requete_selection_observations, 'AND ');
87
		
86
		
Line 88... Line 87...
88
		$nb_obs = 0;
87
		$nb_obs = '0';
89
		$resultat_requete_nombre_observations = $this->requeter($requete_selection_observations);
88
		$resultat_requete_nombre_observations = $this->requeter($requete_selection_observations);
90
		
89
		
Line 91... Line 90...
91
		if($resultat_requete_nombre_observations && is_array($resultat_requete_nombre_observations) && count($resultat_requete_nombre_observations) > 0) {
90
		if($resultat_requete_nombre_observations && is_array($resultat_requete_nombre_observations) && count($resultat_requete_nombre_observations) > 0) {
92
			$nb_obs = $resultat_requete_nombre_observations[0]['nb_obs'];
91
			$nb_obs = $resultat_requete_nombre_observations[0]['nb_obs'];
Line -... Line 92...
-
 
92
		} 
-
 
93
		
-
 
94
		return $nb_obs;
-
 
95
	}
-
 
96
	
-
 
97
	public function formaterPourEnvoiCel($tableau_observations) {
-
 
98
		foreach($tableau_observations as &$observation) {
-
 
99
			$observation['ce_zone_geo'] = $this->convertirCodeZoneGeoVersDepartement($observation['ce_zone_geo']);
-
 
100
			$ids_mots_cles = $this->getIdsMotsClesObservation($observation['id_observation']);
-
 
101
			$mots_cles_chaine = '';
-
 
102
			foreach($ids_mots_cles as $id_mot_cle) {
-
 
103
				$mots_cles_chaine .= $id_mot_cle['id_mot_cle_utilisateur'].';';
-
 
104
			}
-
 
105
			$mots_cles_chaine = rtrim($mots_cles_chaine,';');
-
 
106
			$observation['mots_cles'] = $mots_cles_chaine;
-
 
107
		}
-
 
108
		
-
 
109
		return $tableau_observations;
-
 
110
	}
-
 
111
	
-
 
112
	private function getIdsMotsClesObservation($id_observation) {
-
 
113
		
-
 
114
		$requete_selection_mots_cles = 'SELECT DISTINCT id_mot_cle_utilisateur '.
-
 
115
									   'FROM cel_obs_mots_cles '.
93
		} 
116
									   'WHERE id_observation = '.$id_observation;					   
94
		
117
					   
95
		return $nb_obs;
118
		return $this->requeter($requete_selection_mots_cles);	
96
	}
119
	}
Line 97... Line 120...
97
	
120
	
98
	// TODO: fonction temporaire
121
	// TODO: fonction temporaire
-
 
122
	public function parserRequeteCriteres($chaine_criteres) {
-
 
123
		$criteres_parses = array();
-
 
124
		$criteres = explode("&", $chaine_criteres) ;	
99
	public function parserRequeteCriteres($chaine_criteres) {
125
 
Line 100... Line 126...
100
		$criteres_parses = array();
126
		foreach($criteres as &$critere) {
101
		$criteres = explode("&", $chaine_criteres) ;	
127
			$nom_valeur = explode("=",$critere) ;
Line 102... Line 128...
102
 
128
			if(count($nom_valeur) >= 2) {
Line 103... Line 129...
103
		foreach ($criteres as &$critere) {
129
				$criteres_parses[$nom_valeur[0]] = $nom_valeur[1];
104
			$criteres_parses[] = explode("=",$critere) ;
130
			}
105
		}
131
		}
106
		
-
 
107
		return $criteres_parses;
132
		
108
	}
133
		return $criteres_parses;
Line 109... Line 134...
109
	
134
	}
Line 110... Line 135...
110
	private function fabriquerSousRequeteRecherche($id_utilisateur, $criteres) {
135
	
111
		
136
	private function fabriquerSousRequeteRecherche($id_utilisateur, $criteres) {
112
		foreach ($criteres as $nom_valeur)
137
		
113
		{
138
		foreach ($criteres as $nom => $valeur)
Line 114... Line 139...
114
			if (count($nom_valeur) == 0)
139
		{
115
			{
140
			if($valeur == null || trim($nom) == "" || trim($valeur) == "") {
116
				continue;
141
				continue;	
117
			}
142
			}
Line 118... Line 143...
118
						
143
						
119
			switch ($nom_valeur[0]) {
144
			switch ($nom) {
-
 
145
				
-
 
146
				case 'annee':
-
 
147
					$sous_requete .= "year(date_observation) = ".$this->proteger($valeur) ;
-
 
148
					$sous_requete .= ' AND ' ;
-
 
149
				break;
-
 
150
				
-
 
151
				case 'mois':
-
 
152
					$sous_requete .= "month(date_observation) = ".$this->proteger($valeur) ;
-
 
153
					$sous_requete .= ' AND ' ;
-
 
154
				break;
120
				
155
				
121
				case 'annee':
156
				case 'jour':
Line 122... Line -...
122
					$sous_requete .= "year(date_observation) = ".$this->proteger($nom_valeur[1]) ;
-
 
123
					$sous_requete .= ' AND ' ;
157
					$sous_requete .= "day(date_observation) = ".$this->proteger($valeur) ;
124
				break;
158
					$sous_requete .= ' AND ' ;
125
				
159
				break;
126
				case 'mois':
160
				
127
					$sous_requete .= "month(date_observation) = ".$this->proteger($nom_valeur[1]) ;
161
				case 'departement':
-
 
162
					$sous_requete .= "ce_zone_geo LIKE ".$this->proteger('INSEE-C:'.$valeur.'___');
-
 
163
					$sous_requete .= ' AND ' ;
-
 
164
				break;
-
 
165
				
128
					$sous_requete .= ' AND ' ;
166
				case 'commune':
Line 129... Line 167...
129
				break;
167
					$sous_requete .= "zone_geo = ".$this->proteger($valeur);
130
				
168
					$sous_requete .= ' AND ' ;
131
				case 'jour':
169
				break;
132
					$sous_requete .= "day(date_observation) = ".$this->proteger($nom_valeur[1]) ;
170
								
133
					$sous_requete .= ' AND ' ;
171
                case 'id_mots_cles':
134
				break;
172
                    $liste_mc = '"'.str_replace(';','","',$valeur).'"';
135
								
173
                    $sous_requete .= '' ;   
136
				// TODO: vérifier l'adaptation de la structure aux nouveaux mots clés
174
                    $sous_requete .= 'id_observation IN (SELECT id_observation FROM cel_obs_mots_cles WHERE id_mot_cle_utilisateur IN ('.$liste_mc.'))';
137
                case 'mots_cles':
175
                    $sous_requete .= ' AND ' ;
138
                    $liste_mc = str_replace(";",',',$nom_valeur[1]);
176
                break;
139
                    $sous_requete .= '(' ;   
177
                              
140
                    'id_observation IN (SELECT id_observation FROM cel_obs_mots_cles WHERE id_mot_cle_utilisateur IN ('.$liste_mc.')';
178
                 case 'mots_cles':
141
                    $sous_requete .= ') AND ' ;
179
					// TODO: gérer la recherche sur les mots clés textuels
142
                break;
180
                break;
143
                
181
                
144
                //TODO: choisir un meilleur nom
182
                //TODO: choisir un meilleur nom
145
                case 'nom_taxon':
183
                case 'nom_taxon':
146
                	$nom_valeur[1] = str_replace("*","%",$nom_valeur[1]);
184
                	$valeur = str_replace("*","%",$valeur);
147
                	$sous_requete .= "(nom_sel LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
185
                	$sous_requete .= "(nom_sel LIKE ".$this->proteger('%'.$valeur.'%').
148
								" OR courriel_utilisateur LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
186
								" OR courriel_utilisateur LIKE ".$this->proteger('%'.$valeur.'%').
149
								" OR prenom_utilisateur LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
187
								" OR prenom_utilisateur LIKE ".$this->proteger('%'.$valeur.'%').
150
								" OR nom_utilisateur LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
188
								" OR nom_utilisateur LIKE ".$this->proteger('%'.$valeur.'%').
151
								" OR nom_sel LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
189
								" OR nom_sel LIKE ".$this->proteger('%'.$valeur.'%').
152
								" OR nom_sel_nn LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
190
								" OR nom_sel_nn LIKE ".$this->proteger('%'.$valeur.'%').
153
								" OR nom_ret LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
191
								" OR nom_ret LIKE ".$this->proteger('%'.$valeur.'%').
Line 154... Line 192...
154
								" OR nom_ret_nn LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
192
								" OR nom_ret_nn LIKE ".$this->proteger('%'.$valeur.'%').
155
								" OR nt LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
193
								" OR nt LIKE ".$this->proteger('%'.$valeur.'%').
156
								" OR famille LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
194
								" OR famille LIKE ".$this->proteger('%'.$valeur.'%').
157
								" OR zone_geo LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
195
								" OR zone_geo LIKE ".$this->proteger('%'.$valeur.'%').
158
								" OR ce_zone_geo LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
196
								" OR ce_zone_geo LIKE ".$this->proteger('%'.$valeur.'%').
159
								" OR date_observation LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
197
								" OR date_observation LIKE ".$this->proteger('%'.$valeur.'%').
160
								" OR lieudit LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
198
								" OR lieudit LIKE ".$this->proteger('%'.$valeur.'%').
161
								" OR station LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
199
								" OR station LIKE ".$this->proteger('%'.$valeur.'%').
162
								" OR milieu LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
200
								" OR milieu LIKE ".$this->proteger('%'.$valeur.'%').