Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 3061 Rev 3102
Line 65... Line 65...
65
			$requete_selection_observations .= 'WHERE ce_utilisateur = '.Cel::db()->proteger($id_utilisateur).' AND ';
65
			$requete_selection_observations .= 'WHERE ce_utilisateur = '.Cel::db()->proteger($id_utilisateur).' AND ';
66
		} else if(count($criteres) > 0) {
66
		} else if(count($criteres) > 0) {
67
			$requete_selection_observations .= 'WHERE ';
67
			$requete_selection_observations .= 'WHERE ';
68
		}
68
		}
Line -... Line 69...
-
 
69
 
-
 
70
		// construction du tri
69
 
71
		$order_by_clause = '';
-
 
72
		if (isset($criteres['tri']) && in_array($criteres['tri'], self::$tris_possibles)) {
-
 
73
			$order_by_clause =  ' ORDER BY ' . $criteres['tri'];
-
 
74
 
-
 
75
			if (isset($criteres['tri_dir']) && in_array($criteres['tri_dir'], array('ASC', 'DESC'))) {
-
 
76
				$order_by_clause .= ' ' . $criteres['tri_dir'];
-
 
77
			}
70
		$tri = (isset($criteres['tri']) && in_array($criteres['tri'], self::$tris_possibles)) ? $criteres['tri'] : 'ordre';
78
		}
71
		unset($criteres['tri']);
-
 
72
		$tri_dir = (isset($criteres['tri_dir']) && in_array($criteres['tri_dir'], array('ASC', 'DESC'))) ? $criteres['tri_dir'] : 'ASC';
79
		unset($criteres['tri']);
Line 73... Line 80...
73
		unset($criteres['tri_dir']);
80
		unset($criteres['tri_dir']);
74
 
81
 
75
		// très mauvaise solution, mais qui permet au moins d'effectuer des requêtes complexes, sans modifier l'API
82
		// très mauvaise solution, mais qui permet au moins d'effectuer des requêtes complexes, sans modifier l'API
76
		// et sans pour autant introduire de problème de sécurité majeur dans toutes les fonctions appelantes qui
83
		// et sans pour autant introduire de problème de sécurité majeur dans toutes les fonctions appelantes qui
77
		// effectue $criteres = $_GET sans nettoyage préalable.
84
		// effectue $criteres = $_GET sans nettoyage préalable.
Line 78... Line 85...
78
		if(isset($criteres['sql_brut']) && !$autoriser_sql_brut) unset($criteres['sql_brut']);
85
		if(isset($criteres['sql_brut']) && !$autoriser_sql_brut) unset($criteres['sql_brut']);
79
		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
86
		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
80
 
87
 
81
		$requete_selection_observations .= $sous_requete_recherche;
88
		$requete_selection_observations .= $sous_requete_recherche;
Line 82... Line 89...
82
		$requete_selection_observations = rtrim($requete_selection_observations, 'AND ');
89
		$requete_selection_observations = rtrim($requete_selection_observations, 'AND ');
83
		$requete_selection_observations .= $id_utilisateur == null ? ' ORDER BY id_observation, ordre ' : ' ORDER BY '.$tri.' '.$tri_dir;
90
		$requete_selection_observations .= $id_utilisateur == null ? ' ORDER BY id_observation, ordre ' : $order_by_clause;
84
		$requete_selection_observations .= ($debut == 0 && $limite == 0) ? '' : ' LIMIT '.$debut.','.$limite ;
91
		$requete_selection_observations .= ($debut == 0 && $limite == 0) ? '' : ' LIMIT '.$debut.','.$limite ;
Line 222... Line 229...
222
					} else {
229
					} else {
223
						$sous_requete .= "day(date_observation) = ".Cel::db()->proteger($valeur) ;
230
						$sous_requete .= "day(date_observation) = ".Cel::db()->proteger($valeur) ;
224
					}
231
					}
225
					$sous_requete .= ' AND ' ;
232
					$sous_requete .= ' AND ' ;
226
					break;
233
					break;
227
				case 'pays':
234
				case 'pays':
228
					if ($valeur == "NULL") {
235
					if ($valeur == "NULL") {
229
						$sous_requete .= "(pays IS NULL OR pays = '')";
236
						$sous_requete .= "(pays IS NULL OR pays = '')";
230
					} else {
237
					} else {
231
							$pays_t = explode(',', $valeur);
238
							$pays_t = explode(',', $valeur);
232
							foreach($pays_t as &$pays) {
239
							foreach($pays_t as &$pays) {
233
								$pays = Cel::db()->proteger($pays);
240
								$pays = Cel::db()->proteger($pays);
234
							}
241
							}
235
							$sous_requete .= '(pays IN ('.implode(',', $pays_t).')) ';
242
							$sous_requete .= '(pays IN ('.implode(',', $pays_t).')) ';
236
					}
243
					}
237
					$sous_requete .= ' AND ' ;
244
					$sous_requete .= ' AND ' ;
238
					break;
245
					break;
239
				case 'departement':
246
				case 'departement':
240
					if ($valeur == "NULL") {
247
					if ($valeur == "NULL") {
241
						$sous_requete .= "(ce_zone_geo IS NULL OR ce_zone_geo = '')";
248
						$sous_requete .= "(ce_zone_geo IS NULL OR ce_zone_geo = '')";
242
					} else {
249
					} else {
Line 380... Line 387...
380
			'jour' => 'date_observation',
387
			'jour' => 'date_observation',
381
			'departement' => 'ce_zone_geo',
388
			'departement' => 'ce_zone_geo',
382
			'commune' => 'zone_geo');
389
			'commune' => 'zone_geo');
383
		return $sous_requete .= $champs[$valeur]." = ".Cel::db()->proteger("");
390
		return $sous_requete .= $champs[$valeur]." = ".Cel::db()->proteger("");
384
	}
391
	}
385
}
-
 
386
392
}
-
 
393