Line 27... |
Line 27... |
27 |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
|
27 |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
|
28 |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
|
28 |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
|
29 |
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
|
29 |
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
|
30 |
*/
|
30 |
*/
|
31 |
class CelSyndicationObservation extends Cel {
|
31 |
class CelSyndicationObservation extends Cel {
|
Line 228... |
Line 228... |
228 |
|
228 |
|
229 |
private function getServiceMultiCriteres() {
|
229 |
private function getServiceMultiCriteres() {
|
230 |
$contenu = '';
|
230 |
$contenu = '';
|
231 |
if (isset($_GET['debut'])) $this->start = Cel::db()->proteger($_GET['debut']);
|
231 |
if (isset($_GET['debut'])) $this->start = Cel::db()->proteger($_GET['debut']);
|
Line 232... |
Line 232... |
232 |
if (isset($_GET['limite'])) $this->limit = Cel::db()->proteger($_GET['limite']);
|
232 |
if (isset($_GET['limite'])) $this->limit = Cel::db()->proteger($_GET['limite']);
|
Line 233... |
Line 233... |
233 |
|
233 |
|
234 |
$this->limit = ($this->limit < 1000) ? $this->limit : 1000;// Pour éviter les abus !
|
234 |
$this->limit = ($this->limit < 1000) ? $this->limit : 1000;// Pour éviter les abus !
|
235 |
|
235 |
|
236 |
// Construction de la requête
|
236 |
// Construction de la requête
|
237 |
$requete = (isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
|
237 |
$requete = (isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
|
238 |
'FROM cel_export_total '.
|
238 |
'FROM cel_export_total '.
|
239 |
'WHERE 1 AND '.(($this->etreFluxAdmin()) ? '' : ' transmission = 1 AND ');
|
239 |
'WHERE 1 AND '.(($this->etreFluxAdmin()) ? '' : ' transmission = 1 AND ');
|
240 |
|
240 |
|
241 |
if ($this->estUneRechercheGenerale()) {
|
241 |
if ($this->estUneRechercheGenerale()) {
|
242 |
$chaine_requete = $_GET['recherche'];
|
242 |
$chaine_requete = $_GET['recherche'];
|
243 |
$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
|
243 |
$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
|
244 |
} else {
|
244 |
} else {
|
245 |
$criteres = $this->traiterCriteresMultiples($_GET) ;
|
245 |
$criteres = $this->traiterCriteresMultiples($_GET) ;
|
246 |
if (!empty($criteres)) {
|
246 |
if (!empty($criteres)) {
|
247 |
$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
|
247 |
$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
|
248 |
}
|
248 |
}
|
249 |
}
|
249 |
}
|
250 |
$requete = rtrim($requete, 'AND ');
|
250 |
$requete = rtrim($requete, 'AND ');
|
251 |
$requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby :
|
251 |
$requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby :
|
252 |
'date_modification DESC, zone_geo ASC').' '.
|
252 |
'date_modification DESC, zone_geo ASC').' '.
|
253 |
"LIMIT $this->start,$this->limit ";
|
253 |
"LIMIT $this->start,$this->limit ";
|
254 |
|
254 |
|
255 |
$elements = Cel::db()->requeter($requete);
|
255 |
$elements = Cel::db()->requeter($requete);
|
256 |
// Création du contenu
|
256 |
// Création du contenu
|
257 |
if ($elements != false && count($elements) > 0) {
|
257 |
if ($elements != false && count($elements) > 0) {
|
258 |
$contenu = $this->executerService($elements);
|
258 |
$contenu = $this->executerService($elements);
|
259 |
} else {
|
259 |
} else {
|
260 |
// déclenche une erreur 500 à tort; ne pas faire ça
|
260 |
// déclenche une erreur 500 à tort; ne pas faire ça
|
261 |
//$this->messages[] = "Aucune observation disponible.";
|
261 |
//$this->messages[] = "Aucune observation disponible.";
|
262 |
}
|
262 |
}
|
263 |
|
263 |
|
264 |
return $contenu;
|
264 |
return $contenu;
|
265 |
}
|
265 |
}
|
266 |
|
266 |
|
267 |
private function creerSousRequeteRechercheParCriteres($criteres) {
|
267 |
private function creerSousRequeteRechercheParCriteres($criteres) {
|
268 |
$requete = '';
|
268 |
$requete = '';
|
269 |
foreach ($criteres as $pair) {
|
269 |
foreach ($criteres as $pair) {
|
270 |
$nom_valeur = explode("=",$pair);
|
270 |
$nom_valeur = explode("=",$pair);
|
271 |
if (sizeof($nom_valeur) != 0) {
|
271 |
if (sizeof($nom_valeur) != 0) {
|
272 |
switch ($nom_valeur[0]) {
|
272 |
switch ($nom_valeur[0]) {
|
273 |
case "ci_limite" : $this->limit = Cel::db()->quote($nom_valeur[1]); break;
|
273 |
case "ci_limite" : $this->limit = Cel::db()->quote($nom_valeur[1]); break;
|
274 |
case "commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
|
274 |
case "commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
|
275 |
foreach($mots_comment_liste as $mot_comment) {
|
275 |
foreach($mots_comment_liste as $mot_comment) {
|
276 |
$mot_comment = trim($mot_comment) ;
|
276 |
$mot_comment = trim($mot_comment) ;
|
277 |
$requete .= $nom_valeur[0].' LIKE '.Cel::db()->quote('%'.$mot_comment.'%').' AND ';
|
277 |
$requete .= $nom_valeur[0].' LIKE '.Cel::db()->quote('%'.$mot_comment.'%').' AND ';
|
278 |
}
|
278 |
}
|
279 |
break;
|
279 |
break;
|
280 |
case "date_observation" :
|
280 |
case "date_observation" :
|
281 |
$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
|
281 |
$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
|
282 |
if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $nom_valeur[1], $matches)) {
|
282 |
if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $nom_valeur[1], $matches)) {
|
283 |
$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
|
283 |
$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
|
284 |
}
|
284 |
}
|
285 |
$requete .= $nom_valeur[0].'='.Cel::db()->quote($nom_valeur[1]).' AND '; break;
|
285 |
$requete .= $nom_valeur[0].'='.Cel::db()->quote($nom_valeur[1]).' AND '; break;
|
286 |
case "ce_zone_geo" :
|
286 |
case "ce_zone_geo" :
|
287 |
$requete .= ' ('.$nom_valeur[0].' LIKE "'.$nom_valeur[1].'%") AND '; break;
|
287 |
$requete .= ' ('.$nom_valeur[0].' LIKE "'.$nom_valeur[1].'%") AND '; break;
|
288 |
case "nom_ret" :
|
288 |
case "nom_ret" :
|
289 |
if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
|
289 |
if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
|
290 |
$requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR nom_sel LIKE "%'.
|
290 |
$requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR nom_sel LIKE "%'.
|
291 |
$nom_valeur[1].'%") AND '; break;
|
291 |
$nom_valeur[1].'%") AND '; break;
|
292 |
case "mots-cles" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]).' AND '; break;
|
292 |
case "mots-cles" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]).' AND '; break;
|
293 |
case "tags" : $requete .= $this->creerSousRequeteTags($nom_valeur[1]).' AND '; break;
|
293 |
case "tags" : $requete .= $this->creerSousRequeteTags($nom_valeur[1]).' AND '; break;
|
294 |
case "groupe_zones_geo" : $requete .= $this->creerSousRequeteGroupeZonesGeo($nom_valeur[1])." AND "; break;
|
294 |
case "groupe_zones_geo" : $requete .= $this->creerSousRequeteGroupeZonesGeo($nom_valeur[1])." AND "; break;
|
295 |
default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
|
295 |
default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
|
296 |
}
|
296 |
}
|
297 |
}
|
297 |
}
|
298 |
}
|
298 |
}
|
299 |
$requete = rtrim($requete,' AND ');
|
299 |
$requete = rtrim($requete,' AND ');
|
300 |
return $requete;
|
300 |
return $requete;
|
301 |
}
|
301 |
}
|
302 |
|
302 |
|
303 |
private function creerSousRequeteGroupeZonesGeo($groupe_zones_geo) {
|
303 |
private function creerSousRequeteGroupeZonesGeo($groupe_zones_geo) {
|
304 |
$req = "SELECT valeur FROM cel_groupes_zones WHERE id_groupe = ".Cel::db()->proteger($groupe_zones_geo);
|
304 |
$req = "SELECT valeur FROM cel_groupes_zones WHERE id_groupe = ".Cel::db()->proteger($groupe_zones_geo);
|
305 |
$res = Cel::db()->requeter($req);
|
305 |
$res = Cel::db()->requeter($req);
|
306 |
$zones = array();
|
306 |
$zones = array();
|
307 |
foreach($res as &$r) {
|
307 |
foreach($res as &$r) {
|
308 |
$zones[] = Cel::db()->proteger($r['valeur']);
|
308 |
$zones[] = Cel::db()->proteger($r['valeur']);
|
309 |
}
|
309 |
}
|
310 |
$sql = '(ce_zone_geo IN ('.implode(',', $zones).')) ';
|
310 |
$sql = '(ce_zone_geo IN ('.implode(',', $zones).')) ';
|
311 |
|
311 |
|
312 |
return $sql;
|
312 |
return $sql;
|
313 |
}
|
313 |
}
|
314 |
|
314 |
|
315 |
private function creerSousRequeteMotsCles($mot_cle) {
|
315 |
private function creerSousRequeteMotsCles($mot_cle) {
|
316 |
$requete = '';
|
316 |
$requete = '';
|
317 |
if (preg_match('/.*OU.*/', $mot_cle)) {
|
317 |
if (preg_match('/.*OU.*/', $mot_cle)) {
|
318 |
$mots_cles_tab = explode('OU',$mot_cle);
|
318 |
$mots_cles_tab = explode('OU',$mot_cle);
|
319 |
foreach($mots_cles_tab as $mot_cle_item) {
|
319 |
foreach($mots_cles_tab as $mot_cle_item) {
|
320 |
$requete .= '(mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
|
320 |
$requete .= '(mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
|
321 |
}
|
321 |
}
|
322 |
$requete = '('.rtrim($requete,'OR ').') ';
|
322 |
$requete = '('.rtrim($requete,'OR ').') ';
|
323 |
} else if (preg_match('/.*ET.*/', $mot_cle)) {
|
323 |
} else if (preg_match('/.*ET.*/', $mot_cle)) {
|
324 |
$mots_cles_tab = explode('ET',$mot_cle);
|
324 |
$mots_cles_tab = explode('ET',$mot_cle);
|
325 |
foreach($mots_cles_tab as $mot_cle_item) {
|
325 |
foreach($mots_cles_tab as $mot_cle_item) {
|
326 |
$requete .= '(mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
|
326 |
$requete .= '(mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
|
327 |
}
|
327 |
}
|
328 |
$requete = '('.rtrim($requete, 'AND ').') ';
|
328 |
$requete = '('.rtrim($requete, 'AND ').') ';
|
329 |
} else {
|
329 |
} else {
|
330 |
$requete = "(mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
|
330 |
$requete = "(mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
|
331 |
}
|
331 |
}
|
332 |
return $requete;
|
332 |
return $requete;
|
333 |
}
|
333 |
}
|
334 |
|
334 |
|
335 |
private function creerSousRequeteTags($tag) {
|
335 |
private function creerSousRequeteTags($tag) {
|
336 |
$requete = '(id_observation IN (SELECT ce_observation FROM cel_images ci WHERE ';
|
336 |
$requete = '(id_observation IN (SELECT ce_observation FROM cel_images ci WHERE ';
|
337 |
$where = '';
|
337 |
$where = '';
|
338 |
if (preg_match('/.*OU.*/', $tag)) {
|
338 |
if (preg_match('/.*OU.*/', $tag)) {
|
339 |
$mots_cles_tab = explode('OU',$tag);
|
339 |
$mots_cles_tab = explode('OU',$tag);
|
340 |
foreach($mots_cles_tab as $mot_cle_item) {
|
340 |
foreach($mots_cles_tab as $mot_cle_item) {
|
341 |
$where .= '(ci.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
|
341 |
$where .= '(ci.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
|
342 |
}
|
342 |
}
|
343 |
$where .= '('.rtrim($where,'OR ').') ';
|
343 |
$where .= '('.rtrim($where,'OR ').') ';
|
344 |
} else if (preg_match('/.*ET.*/', $tag)) {
|
344 |
} else if (preg_match('/.*ET.*/', $tag)) {
|
345 |
$mots_cles_tab = explode('ET',$tag);
|
345 |
$mots_cles_tab = explode('ET',$tag);
|
346 |
foreach($mots_cles_tab as $mot_cle_item) {
|
346 |
foreach($mots_cles_tab as $mot_cle_item) {
|
347 |
$where .= '(ci.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
|
347 |
$where .= '(ci.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
|
348 |
}
|
348 |
}
|
349 |
$where .= '('.rtrim($where, 'AND ').') ';
|
349 |
$where .= '('.rtrim($where, 'AND ').') ';
|
350 |
} else {
|
350 |
} else {
|
351 |
$where .= "(ci.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$tag.'%').') ';
|
351 |
$where .= "(ci.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$tag.'%').') ';
|
352 |
}
|
352 |
}
|
353 |
$requete .= $where.' ))';
|
353 |
$requete .= $where.' ))';
|
354 |
return $requete;
|
354 |
return $requete;
|
355 |
}
|
355 |
}
|
Line 356... |
Line 356... |
356 |
|
356 |
|
357 |
private function traiterCriteresMultiples($tableau_criteres) {
|
357 |
private function traiterCriteresMultiples($tableau_criteres) {
|
358 |
$tableau_criteres_pour_bdd = array();
|
358 |
$tableau_criteres_pour_bdd = array();
|
359 |
|
359 |
|
360 |
foreach($tableau_criteres as $nom_critere => $valeur_critere) {
|
360 |
foreach($tableau_criteres as $nom_critere => $valeur_critere) {
|
361 |
if (isset($this->criteres[$nom_critere])) {
|
361 |
if (isset($this->criteres[$nom_critere])) {
|
362 |
$valeur_critere = Cel::deb()->proteger($valeur_critere);
|
362 |
$valeur_critere = Cel::deb()->proteger($valeur_critere);
|
363 |
$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
|
363 |
$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
|
Line 364... |
Line 364... |
364 |
}
|
364 |
}
|
365 |
}
|
365 |
}
|
366 |
return $tableau_criteres_pour_bdd;
|
366 |
return $tableau_criteres_pour_bdd;
|
367 |
}
|
367 |
}
|
368 |
|
368 |
|
369 |
private function creerSousRequeteRechercheGenerale($chaine_requete) {
|
369 |
private function creerSousRequeteRechercheGenerale($chaine_requete) {
|
596 |
} else {
|
596 |
} else {
|