| Line 38... |
Line 38... |
| 38 |
$this->gestionBdd = $conteneur->getGestionBdd();
|
38 |
$this->gestionBdd = $conteneur->getGestionBdd();
|
| 39 |
$this->bdd = $this->gestionBdd->getBdd();
|
39 |
$this->bdd = $this->gestionBdd->getBdd();
|
| 40 |
}
|
40 |
}
|
| Line -... |
Line 41... |
| - |
|
41 |
|
| - |
|
42 |
|
| - |
|
43 |
/** Nettoyer les paramètres pour ne pas accepter les %
|
| - |
|
44 |
* */
|
| - |
|
45 |
public function nettoyerParametres($parametres) {
|
| - |
|
46 |
$parametresRetour = array();
|
| - |
|
47 |
foreach ($parametres as $cle => $valeur) {
|
| - |
|
48 |
$valSanPourcent = trim($valeur, "% ");
|
| - |
|
49 |
if ($valSanPourcent != '') {
|
| - |
|
50 |
$parametresRetour[$cle] = $valeur;
|
| - |
|
51 |
}
|
| - |
|
52 |
}
|
| - |
|
53 |
|
| - |
|
54 |
return $parametresRetour;
|
| 41 |
|
55 |
}
|
| 42 |
|
56 |
|
| 43 |
/**
|
57 |
/**
|
| 44 |
* RequeteSansParametres
|
58 |
* RequeteSansParametres
|
| 45 |
*
|
59 |
*
|
| 46 |
* permet de vérifier qu'il n'y a aucun paramètre dans la requete, excepté les informations de start et limite,
|
60 |
* permet de vérifier qu'il n'y a aucun paramètre dans la requete, excepté les informations de start et limite,
|
| 47 |
* pour ajuster la requête pour un gain de temps
|
61 |
* pour ajuster la requête pour un gain de temps
|
| 48 |
* @param array $ressources les ressources telles qu'elles sont passées au script
|
62 |
* @param array $ressources les ressources telles qu'elles sont passées au script
|
| 49 |
* @param array $parametres les paramètres tels qu'il sont passés au script
|
63 |
* @param array $parametres les paramètres tels qu'il sont passés au script
|
| - |
|
64 |
* */
|
| 50 |
* */
|
65 |
public function requeteSansParametres($ressources, $parametres) {
|
| Line 51... |
Line 66... |
| 51 |
public function requeteSansParametres($ressources, $parametres) {
|
66 |
|
| 52 |
$estSansParametres = true;
|
67 |
$estSansParametres = true;
|
| 53 |
|
68 |
|
| Line 54... |
Line 69... |
| 54 |
if (sizeof($ressources) > 0) {
|
69 |
if (sizeof($ressources) > 0) {
|
| - |
|
70 |
$estSansParametres = false;
|
| 55 |
$estSansParametres = false;
|
71 |
}
|
| 56 |
}
|
72 |
|
| 57 |
|
73 |
if (sizeof($parametres) > 2) {
|
| 58 |
if (sizeof($parametres) > 2) {
|
74 |
|
| 59 |
// s'il y a plus de 2 paramètres, on est forcément dans le cas où on a demandé des paramètres autre que la navigation
|
75 |
// s'il y a plus de 2 paramètres, on est forcément dans le cas où on a demandé des paramètres autre que la navigation
|
| Line 91... |
Line 107... |
| 91 |
$this->verifierConfiguration();
|
107 |
$this->verifierConfiguration();
|
| Line 92... |
Line 108... |
| 92 |
|
108 |
|
| 93 |
$this->verifierParametresTri();
|
109 |
$this->verifierParametresTri();
|
| Line 94... |
Line -... |
| 94 |
$this->initialiserTri();
|
- |
|
| - |
|
110 |
$this->initialiserTri();
|
| 95 |
|
111 |
|
| Line 96... |
Line 112... |
| 96 |
|
112 |
$parametres = $this->nettoyerParametres($parametres);
|
| 97 |
if ($this->requeteSansParametres($ressources, $parametres)) {
|
113 |
if ($this->requeteSansParametres($ressources, $parametres)) {
|
| 98 |
|
114 |
|
| Line 241... |
Line 257... |
| 241 |
|
257 |
|
| 242 |
/**
|
258 |
/**
|
| 243 |
* Charger la clause WHERE en fonction des paramètres de masque
|
259 |
* Charger la clause WHERE en fonction des paramètres de masque
|
| 244 |
* */
|
260 |
* */
|
| - |
|
261 |
private function chargerClauseWhere() {
|
| 245 |
private function chargerClauseWhere() {
|
262 |
|
| 246 |
$where = array();
|
263 |
$where = array();
|
| 247 |
$tableauMasque = $this->masque->getMasque();
|
264 |
$tableauMasque = $this->masque->getMasque();
|
| 248 |
if (!empty($tableauMasque)) {
|
265 |
if (!empty($tableauMasque)) {
|
| 249 |
foreach($tableauMasque as $idMasque => $valeurMasque) {
|
266 |
foreach($tableauMasque as $idMasque => $valeurMasque) {
|
| Line 333... |
Line 350... |
| 333 |
'(nom LIKE '.$this->proteger($tableauNomPrenom[1].'%').' AND '.
|
350 |
'(nom LIKE '.$this->proteger($tableauNomPrenom[1].'%').' AND '.
|
| 334 |
'prenom LIKE '.$this->proteger($tableauNomPrenom[0].'%').') OR '.
|
351 |
'prenom LIKE '.$this->proteger($tableauNomPrenom[0].'%').') OR '.
|
| 335 |
'(dob.nom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[0].'%').' AND '.
|
352 |
'(dob.nom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[0].'%').' AND '.
|
| 336 |
'dob.prenom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[1].'%').') OR '.
|
353 |
'dob.prenom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[1].'%').') OR '.
|
| 337 |
'(dob.nom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[1].'%').' AND '.
|
354 |
'(dob.nom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[1].'%').' AND '.
|
| 338 |
'dob.prenom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[0].'%').') '.
|
355 |
'dob.prenom_utilisateur LIKE '.$this->proteger($tableauNomPrenom[0].'%').') OR '.
|
| - |
|
356 |
'(nom LIKE '.$this->proteger($valeurMasque.'%').') OR '.
|
| - |
|
357 |
'(prenom LIKE '.$this->proteger($valeurMasque.'%').') OR '.
|
| - |
|
358 |
'(dob.nom_utilisateur LIKE '.$this->proteger($valeurMasque.'%').') OR '.
|
| - |
|
359 |
'(dob.prenom_utilisateur LIKE '.$this->proteger($valeurMasque.'%').') '.
|
| 339 |
')';
|
360 |
')';
|
| 340 |
} else {
|
361 |
} else {
|
| 341 |
$masque = '(
|
362 |
$masque = '(
|
| 342 |
(nom LIKE '.$this->proteger($auteurId.'%').' OR '.
|
363 |
(nom LIKE '.$this->proteger($auteurId.'%').' OR '.
|
| 343 |
'prenom LIKE '.$this->proteger($auteurId.'%').' OR '.
|
364 |
'prenom LIKE '.$this->proteger($auteurId.'%').' OR '.
|
| Line 449... |
Line 470... |
| 449 |
/**
|
470 |
/**
|
| 450 |
* Chargement depuis la bdd de toutes les liaisons entre images et observations
|
471 |
* Chargement depuis la bdd de toutes les liaisons entre images et observations
|
| 451 |
* */
|
472 |
* */
|
| 452 |
private function chargerLiaisons() {
|
473 |
private function chargerLiaisons() {
|
| Line -... |
Line 474... |
| - |
|
474 |
|
| 453 |
|
475 |
// 1. Récupérer les id observation
|
| - |
|
476 |
$requeteObs = ' SELECT id_observation FROM del_observation dob LEFT JOIN del_utilisateur du ON dob.ce_utilisateur = du.id_utilisateur ';
|
| - |
|
477 |
|
| - |
|
478 |
$masques = $this->masque->getMasque();
|
| - |
|
479 |
$conditionsObs = array();
|
| - |
|
480 |
|
| - |
|
481 |
if (isset($masques['masque'])) {
|
| - |
|
482 |
$conditionLibre = array();
|
| - |
|
483 |
$passe = $masques['masque'];
|
| - |
|
484 |
|
| 454 |
$champs = array('dob.id_observation as id_observation', 'nom_sel', 'nom_sel_nn', 'nt', 'famille', 'ce_zone_geo', 'zone_geo',
|
485 |
if (!isset($masques['masque.ns'])) {
|
| - |
|
486 |
$conditionsLibre[] = "nom_sel LIKE '$passe%'";
|
| - |
|
487 |
}
|
| - |
|
488 |
|
| 455 |
'lieudit', 'station', 'milieu', 'date_observation', 'dob.mots_cles_texte as mots_cles_texte', 'dob.commentaire as commentaire',
|
489 |
if (!isset($masques['masque.famille'])) {
|
| - |
|
490 |
$conditionsLibre[] = "famille LIKE '$passe%'";
|
| - |
|
491 |
}
|
| - |
|
492 |
|
| 456 |
'di.mots_cles_texte as mots_cles_texte_image ', 'date_transmission', 'di.id_image as id_image', 'di.ce_utilisateur as ce_utilisateur',
|
493 |
if (!isset($masques['masque.milieu'])) {
|
| - |
|
494 |
$conditionsLibre[] = "nom_sel LIKE '$passe%'";
|
| - |
|
495 |
}
|
| - |
|
496 |
|
| 457 |
'prenom', 'nom', 'courriel', 'dob.prenom_utilisateur', 'dob.nom_utilisateur', 'dob.courriel_utilisateur', 'nom_original');
|
497 |
if (!isset($masques['masque.tag'])) {
|
| 458 |
// Attention le LEFT JOIN est indispensable pour ramener les images n'ayant pas de votes
|
498 |
$conditionsLibre[] = "mots_cles_texte LIKE '%$passe%'";
|
| - |
|
499 |
//TODO : voir pour images
|
| - |
|
500 |
}
|
| - |
|
501 |
|
| 459 |
// en cas de tri par votes
|
502 |
if (!isset($masques['masque.date'])) {
|
| - |
|
503 |
$conditionsLibre[] = $this->creerFiltreDate($passe);
|
| - |
|
504 |
}
|
| 460 |
$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS '.implode(', ',$champs).' '.
|
505 |
|
| 461 |
($this->doitJoindreTableVotes() ?
|
506 |
if (!isset($masques['masque.auteur'])) {
|
| 462 |
', IF(dvote.ce_protocole = '.$this->parametres['protocole'].', AVG(dvote.valeur), 0) as total_votes ' :
|
507 |
$conditionsLibre[] = $this->creerFiltreAuteur($passe);
|
| - |
|
508 |
}
|
| - |
|
509 |
|
| - |
|
510 |
$conditionsObs[] = implode(' OR ', $conditionsLibre);
|
| - |
|
511 |
}
|
| 463 |
''
|
512 |
|
| 464 |
).
|
513 |
// nom sel
|
| 465 |
($this->doitJoindreTableTags() ?
|
514 |
if (isset($masques['masque.ns'])) {
|
| 466 |
// attention le DISTINCT est indispensable !
|
515 |
$nom_sel = $masques['masque.ns'];
|
| - |
|
516 |
$conditionsObs[] = "nom_sel LIKE '$nom_sel%'";
|
| - |
|
517 |
}
|
| 467 |
', (COUNT(DISTINCT dtag.id_tag) + '.$this->assemblercomptageOccurencesMotsClesCel().') as total_tags ' :
|
518 |
|
| - |
|
519 |
// famille
|
| - |
|
520 |
if (isset($masques['masque.famille'])) {
|
| - |
|
521 |
$famille = $masques['masque.famille'];
|
| - |
|
522 |
$conditionsObs[] = "famille LIKE '$famille%'";
|
| - |
|
523 |
}
|
| 468 |
''
|
524 |
|
| 469 |
).
|
525 |
// genre
|
| 470 |
'FROM '.$this->gestionBdd->formaterTable('del_obs_image', 'doi').
|
526 |
if (isset($masques['masque.genre'])) {
|
| - |
|
527 |
$genre = $masques['masque.genre'];
|
| - |
|
528 |
$conditionsObs[] = "nom_sel LIKE '$genre%'";
|
| - |
|
529 |
}
|
| - |
|
530 |
|
| 471 |
'INNER JOIN del_image di '.
|
531 |
// milieu
|
| 472 |
'ON doi.id_image = di.id_image '.
|
532 |
if (isset($masques['masque.milieu'])) {
|
| 473 |
'INNER JOIN del_observation dob '.
|
533 |
$milieu = $masques['masque.milieu'];
|
| - |
|
534 |
$conditionsObs[] = "nom_sel LIKE '$milieu%'";
|
| - |
|
535 |
}
|
| - |
|
536 |
|
| - |
|
537 |
// mots_cles_texte
|
| 474 |
'ON doi.id_observation = dob.id_observation '.
|
538 |
if (isset($masques['masque.tag'])) {
|
| 475 |
'LEFT JOIN del_utilisateur du '.
|
539 |
$motscles = $masques['masque.tag'];
|
| - |
|
540 |
$conditionsObs[] = "mots_cles_texte LIKE '%$motscles%'";
|
| - |
|
541 |
}
|
| - |
|
542 |
|
| 476 |
'ON du.id_utilisateur = di.ce_utilisateur '.
|
543 |
// date
|
| 477 |
($this->doitJoindreTableTags() ?
|
544 |
if (isset($masques['masque.date'])) {
|
| 478 |
'LEFT JOIN del_image_tag dtag '.
|
545 |
$date = $masques['masque.date'];
|
| - |
|
546 |
$conditionsObs[] = $this->creerFiltreDate($date);
|
| - |
|
547 |
}
|
| 479 |
'ON doi.id_image = dtag.ce_image AND dtag.actif = 1 ' :
|
548 |
|
| - |
|
549 |
// utilisateur
|
| - |
|
550 |
if (isset($masques['masque.auteur'])) {
|
| - |
|
551 |
$auteur = $masques['masque.auteur'];
|
| - |
|
552 |
$conditionsObs[] = $this->creerFiltreAuteur($auteur);
|
| - |
|
553 |
}
|
| 480 |
''
|
554 |
|
| 481 |
).
|
555 |
// commune
|
| 482 |
($this->doitJoindreTableVotes() ?
|
556 |
if (isset($masques['masque.commune'])) {
|
| 483 |
'LEFT JOIN del_image_vote dvote '.
|
557 |
$commune = $masques['masque.commune'];
|
| 484 |
'ON doi.id_image = dvote.ce_image AND dvote.ce_protocole = '.$this->parametres['protocole'] :
|
558 |
$conditionsObs[] = " zone_geo LIKE ".$this->proteger(str_replace(array('-',' '), '_', $commune).'%');
|
| - |
|
559 |
}
|
| 485 |
''
|
560 |
|
| - |
|
561 |
// commune
|
| - |
|
562 |
if (isset($masques['masque.departement'])) {
|
| 486 |
);
|
563 |
$dept = $masques['masque.departement'];
|
| - |
|
564 |
$conditionsObs[] = $this->creerFiltreIdZoneGeo($dept);
|
| - |
|
565 |
}
|
| 487 |
$requeteLiaisons .= $this->chargerClauseWhere();
|
566 |
|
| 488 |
$requeteLiaisons .= $this->getTri();
|
567 |
if (!empty($conditionsObs)) {
|
| - |
|
568 |
$where = ' WHERE '.implode(' AND ', $conditionsObs);
|
| - |
|
569 |
$requeteObs .= $where;
|
| Line -... |
Line 570... |
| - |
|
570 |
}
|
| - |
|
571 |
|
| - |
|
572 |
$observations = $this->bdd->recupererTous($requeteObs);
|
| - |
|
573 |
|
| - |
|
574 |
$tabIdsObs = array();
|
| - |
|
575 |
foreach ($observations as $observation) {
|
| - |
|
576 |
$tabIdsObs[] = $observation['id_observation'];
|
| - |
|
577 |
}
|
| - |
|
578 |
$idsObs = implode(',', $tabIdsObs);
|
| - |
|
579 |
if ($idsObs == '') {
|
| - |
|
580 |
$idsObs = "''";
|
| - |
|
581 |
}
|
| - |
|
582 |
//var_dump($requeteObs);
|
| - |
|
583 |
// 2. Récupérer les id images
|
| - |
|
584 |
|
| - |
|
585 |
$conditionsImg = array();
|
| - |
|
586 |
if (isset($masques['masque.tag'])) {
|
| - |
|
587 |
$tag = $masques['masque.tag'];
|
| - |
|
588 |
$conditionsImg[] = " dit.tag_normalise LIKE '$tag%' ";
|
| - |
|
589 |
$conditionsImg[] = " di.mots_cles_texte LIKE '%$tag%' ";
|
| - |
|
590 |
}
|
| - |
|
591 |
|
| - |
|
592 |
$idsImages = '';
|
| - |
|
593 |
if (!empty($conditionsImg)) {
|
| - |
|
594 |
$requeteImages = ' SELECT doi.id_image FROM del_obs_image doi '.
|
| - |
|
595 |
' INNER JOIN del_image di ON doi.id_image = di.id_image '.
|
| - |
|
596 |
' INNER JOIN del_image_tag dit ON dit.ce_image = di.id_image ';
|
| - |
|
597 |
|
| - |
|
598 |
$where = ' WHERE '.implode(' OR ', $conditionsImg);
|
| - |
|
599 |
$requeteImages .= $where;
|
| - |
|
600 |
|
| - |
|
601 |
$images = $this->bdd->recupererTous($requeteImages);
|
| - |
|
602 |
|
| - |
|
603 |
$tabIdsImages = array();
|
| - |
|
604 |
foreach ($images as $image) {
|
| - |
|
605 |
$tabIdsImages[] = $image['id_image'];
|
| - |
|
606 |
}
|
| - |
|
607 |
$idsImages = implode(',', $tabIdsImages);
|
| - |
|
608 |
|
| - |
|
609 |
if ($idsImages == '') {
|
| - |
|
610 |
$idsImages = "''";
|
| - |
|
611 |
}
|
| - |
|
612 |
}
|
| - |
|
613 |
//var_dump($requeteImages);exit();
|
| - |
|
614 |
// 3. Récupérer la combinaison des deux
|
| - |
|
615 |
$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS dob.id_observation as id_observation, nom_sel, nom_sel_nn, nt, famille, ce_zone_geo, zone_geo, lieudit, station, milieu, '.
|
| - |
|
616 |
' date_observation, dob.mots_cles_texte as mots_cles_texte, dob.commentaire as commentaire, di.mots_cles_texte as mots_cles_texte_image , date_transmission, '.
|
| - |
|
617 |
' di.id_image as id_image, di.ce_utilisateur as ce_utilisateur, prenom, nom, courriel, dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, nom_original '.
|
| - |
|
618 |
' FROM del_obs_image DOI '.
|
| - |
|
619 |
' INNER JOIN del_image di ON doi.id_image = di.id_image '.
|
| - |
|
620 |
' INNER JOIN del_observation dob ON doi.id_observation = dob.id_observation '.
|
| - |
|
621 |
' LEFT JOIN del_utilisateur du ON du.id_utilisateur = di.ce_utilisateur ';
|
| - |
|
622 |
|
| - |
|
623 |
|
| - |
|
624 |
$where = array();
|
| - |
|
625 |
if (!empty($conditionsObs) && strlen($idsObs) > 0) {
|
| - |
|
626 |
$where[] = 'dob.id_observation IN ( '.$idsObs.') ';
|
| - |
|
627 |
}
|
| - |
|
628 |
|
| - |
|
629 |
if (!empty($conditionsImg) && strlen($idsImages) > 0) {
|
| - |
|
630 |
$chaineWhere = 'di.id_image IN ( '.$idsImages.') ';
|
| - |
|
631 |
// Si on ne cherche pas que le tag, on doit récupérer uniquement les
|
| - |
|
632 |
// images qui matche avec la recherche d'observation
|
| - |
|
633 |
if (isset($masques['masque.tag']) && sizeof($masques) > 1) {
|
| - |
|
634 |
$chaineWhere .= ' AND doi.id_observation IN ('.$idsObs.') ';
|
| - |
|
635 |
}
|
| - |
|
636 |
$where[] = $chaineWhere;
|
| - |
|
637 |
}
|
| - |
|
638 |
|
| - |
|
639 |
if (!empty($where)) {
|
| - |
|
640 |
$requeteLiaisons .= ' WHERE '.implode(' OR ', $where);
|
| - |
|
641 |
}
|
| - |
|
642 |
|
| - |
|
643 |
// limite de la chaine idobs = 1047389
|
| - |
|
644 |
/*if (strlen($requeteLiaisons) > 1047389) {
|
| - |
|
645 |
exit('requete trop longue');
|
| - |
|
646 |
//return array();
|
| - |
|
647 |
}*/
|
| - |
|
648 |
|
| - |
|
649 |
$requeteLiaisons .= $this->gestionBdd->getLimitSql();
|
| - |
|
650 |
|
| - |
|
651 |
// on ne lance la requete que si on a trouvé des images ou des observations, sinon
|
| - |
|
652 |
// cela signifie qu'il n'y a aucune correspondance dans la base
|
| 489 |
$requeteLiaisons .= $this->gestionBdd->getLimitSql();
|
653 |
$retour = array();
|
| - |
|
654 |
if (strlen($idsObs) > 0 || strlen($idsImages) > 0) {
|
| - |
|
655 |
$retour = $this->bdd->recupererTous($requeteLiaisons);
|
| - |
|
656 |
}
|
| 490 |
|
657 |
|
| Line 491... |
Line 658... |
| 491 |
return $this->bdd->recupererTous($requeteLiaisons);
|
658 |
return $retour;
|
| 492 |
}
|
659 |
}
|
| Line 499... |
Line 666... |
| 499 |
|
666 |
|
| 500 |
// Charger les obs images / images
|
667 |
// Charger les obs images / images
|
| 501 |
// récupérer les ids
|
668 |
// récupérer les ids
|
| Line 502... |
Line 669... |
| 502 |
// récupérer les observations
|
669 |
// récupérer les observations
|
| 503 |
|
670 |
|
| 504 |
$requeteImages = 'SELECT *, di.mots_cles_texte as mots_cles_texte_image FROM del_obs_image doi '.
|
671 |
$requeteImages = 'SELECT *, di.mots_cles_texte as mots_cles_texte_image FROM del_obs_image doi '.
|
| 505 |
'INNER JOIN del_image di ON doi.id_image = di.id_image '.
|
672 |
'INNER JOIN del_image di ON doi.id_image = di.id_image '.
|
| 506 |
'ORDER BY id_observation DESC'.
|
673 |
'ORDER BY id_observation DESC'.
|