| Line 92... |
Line 92... |
| 92 |
|
92 |
|
| 93 |
// En fonction des paramètres de recherche, on n'effectue
|
93 |
// En fonction des paramètres de recherche, on n'effectue
|
| 94 |
// pas la même requête, pour optimiser les jointures et les
|
94 |
// pas la même requête, pour optimiser les jointures et les
|
| 95 |
// rapidités d'éxécution.
|
95 |
// rapidités d'éxécution.
|
| 96 |
$type = $this->getTypeRequete($ressources, $parametres);
|
- |
|
| 97 |
|
96 |
$type = $this->getTypeRequete($ressources, $parametres);
|
| 98 |
switch ($type) {
|
97 |
switch ($type) {
|
| 99 |
case 'obs' :
|
98 |
case 'obs' :
|
| 100 |
$liaisons = $this->chargerLiaisonsObs();
|
99 |
$liaisons = $this->chargerLiaisonsObs();
|
| 101 |
break;
|
100 |
break;
|
| Line 170... |
Line 169... |
| 170 |
$where[] = ' '.$this->mappingFiltre['ns'].' LIKE '.$this->proteger($valeurMasque.' %');
|
169 |
$where[] = ' '.$this->mappingFiltre['ns'].' LIKE '.$this->proteger($valeurMasque.' %');
|
| 171 |
break;
|
170 |
break;
|
| 172 |
case 'tag' :
|
171 |
case 'tag' :
|
| 173 |
$where[] = ' '.$this->creerFiltreMotsCles($valeurMasque);
|
172 |
$where[] = ' '.$this->creerFiltreMotsCles($valeurMasque);
|
| 174 |
break;
|
173 |
break;
|
| - |
|
174 |
case 'tag_cel' :
|
| - |
|
175 |
$where[] = ' '.$this->creerFiltreMotsClesCel($valeurMasque);
|
| - |
|
176 |
break;
|
| - |
|
177 |
case 'tag_pictoflora' :
|
| - |
|
178 |
$where[] = ' '.$this->creerFiltreMotsClesPictoflora($valeurMasque);
|
| - |
|
179 |
break;
|
| 175 |
case 'referentiel' :
|
180 |
case 'referentiel' :
|
| 176 |
$where[] = ' dob.nom_referentiel LIKE '.$this->proteger($valeurMasque.'%');
|
181 |
$where[] = ' dob.nom_referentiel LIKE '.$this->proteger($valeurMasque.'%');
|
| 177 |
break;
|
182 |
break;
|
| 178 |
case 'ns' :
|
183 |
case 'ns' :
|
| 179 |
$where[] = ' nom_sel LIKE '.$this->proteger($valeurMasque.'%');
|
184 |
$where[] = ' nom_sel LIKE '.$this->proteger($valeurMasque.'%');
|
| Line 357... |
Line 362... |
| 357 |
')';
|
362 |
')';
|
| Line 358... |
Line 363... |
| 358 |
|
363 |
|
| 359 |
return $masque;
|
364 |
return $masque;
|
| Line -... |
Line 365... |
| - |
|
365 |
}
|
| - |
|
366 |
|
| - |
|
367 |
/**
|
| - |
|
368 |
* Générer la chaine de recherche dans les mots clés en fonction du masque
|
| - |
|
369 |
* @param $valeurMasque le mot clé recherché
|
| - |
|
370 |
* */
|
| - |
|
371 |
private function creerFiltreMotsClesPictoflora($valeurMasque) {
|
| - |
|
372 |
|
| - |
|
373 |
$mots_cles = explode(' ', $valeurMasque);
|
| - |
|
374 |
$requeteMotsClesImg = array();
|
| - |
|
375 |
$requeteMotsClesObs = array();
|
| - |
|
376 |
$requeteMotsClesImgPublic = array();
|
| - |
|
377 |
|
| - |
|
378 |
foreach($mots_cles as $mot_cle) {
|
| - |
|
379 |
//TODO: rechercher sur les mots clés normalisés dans tous les cas ?
|
| - |
|
380 |
$requeteMotsCles = $this->proteger('%'.$mot_cle.'%');
|
| - |
|
381 |
$motsCleProtege = $this->proteger($this->normaliserMotCle('%'.$mot_cle.'%'));
|
| - |
|
382 |
$requeteMotsClesImgPublic[] = 'di.id_image IN (SELECT ce_image FROM del_image_tag WHERE tag_normalise LIKE '.$motsCleProtege.' AND actif = 1)';
|
| - |
|
383 |
}
|
| - |
|
384 |
|
| - |
|
385 |
$requeteMotsClesImgPublic = implode(' AND ', $requeteMotsClesImgPublic);
|
| - |
|
386 |
|
| - |
|
387 |
$masque = '('.$requeteMotsClesImgPublic.') ';
|
| - |
|
388 |
|
| - |
|
389 |
return $masque;
|
| - |
|
390 |
}
|
| - |
|
391 |
|
| - |
|
392 |
private function creerFiltreMotsClesCel($valeurMasque) {
|
| - |
|
393 |
$mots_cles = explode(' ', $valeurMasque);
|
| - |
|
394 |
$requeteMotsClesImg = array();
|
| - |
|
395 |
$requeteMotsClesObs = array();
|
| - |
|
396 |
|
| - |
|
397 |
foreach($mots_cles as $mot_cle) {
|
| - |
|
398 |
//TODO: rechercher sur les mots clés normalisés dans tous les cas ?
|
| - |
|
399 |
$requeteMotsCles = $this->proteger('%'.$mot_cle.'%');
|
| - |
|
400 |
$motsCleProtege = $this->proteger($this->normaliserMotCle('%'.$mot_cle.'%'));
|
| - |
|
401 |
$requeteMotsClesImg[] = 'di.mots_cles_texte LIKE '.$requeteMotsCles;
|
| - |
|
402 |
$requeteMotsClesObs[] = 'dob.mots_cles_texte LIKE '.$requeteMotsCles;
|
| - |
|
403 |
}
|
| - |
|
404 |
|
| - |
|
405 |
$requeteMotsClesImg = implode(' AND ', $requeteMotsClesImg);
|
| - |
|
406 |
$requeteMotsClesObs = implode(' AND ', $requeteMotsClesObs);
|
| - |
|
407 |
|
| - |
|
408 |
$masque = '('.
|
| - |
|
409 |
'('.$requeteMotsClesImg.') OR '.
|
| - |
|
410 |
'('.$requeteMotsClesObs.') '.
|
| - |
|
411 |
')';
|
| - |
|
412 |
|
| - |
|
413 |
return $masque;
|
| 360 |
}
|
414 |
}
|
| 361 |
|
415 |
|
| 362 |
// ??
|
416 |
// ??
|
| 363 |
private function assemblercomptageOccurencesMotsClesCel() {
|
417 |
private function assemblercomptageOccurencesMotsClesCel() {
|
| 364 |
$chaineMotsClesAffiches = $this->conteneur->getParametre('mots_cles_cel_affiches');
|
418 |
$chaineMotsClesAffiches = $this->conteneur->getParametre('mots_cles_cel_affiches');
|
| Line 508... |
Line 562... |
| 508 |
// commune
|
562 |
// commune
|
| 509 |
if (isset($masques['masque.departement'])) {
|
563 |
if (isset($masques['masque.departement'])) {
|
| 510 |
$dept = $masques['masque.departement'];
|
564 |
$dept = $masques['masque.departement'];
|
| 511 |
$conditionsObs[] = $this->creerFiltreIdZoneGeo($dept);
|
565 |
$conditionsObs[] = $this->creerFiltreIdZoneGeo($dept);
|
| 512 |
}
|
566 |
}
|
| - |
|
567 |
|
| - |
|
568 |
if (isset($masques['masque.tag_cel'])) {
|
| - |
|
569 |
$motsCles = $masques['masque.tag_cel'];
|
| - |
|
570 |
$conditionsObs[] = $this->creerFiltreMotsClesCel($motsCles);
|
| - |
|
571 |
}
|
| Line 513... |
Line 572... |
| 513 |
|
572 |
|
| 514 |
return $conditionsObs;
|
573 |
return $conditionsObs;
|
| Line 515... |
Line 574... |
| 515 |
}
|
574 |
}
|
| 516 |
|
575 |
|
| 517 |
/**
|
576 |
/**
|
| 518 |
* Obtenir le tableu de chaines de condition de requete images en fonction des masques
|
577 |
* Obtenir le tableu de chaines de condition de requete images en fonction des masques
|
| 519 |
* */
|
578 |
* */
|
| 520 |
private function getConditionsImages() {
|
579 |
private function getConditionsImages() {
|
| 521 |
$conditionsImg = array();
|
580 |
$conditionsImg = array();
|
| 522 |
$masques = $this->masque->getMasque();
|
581 |
$masques = $this->masque->getMasque();
|
| 523 |
if (isset($masques['masque.tag'])) {
|
- |
|
| 524 |
$tag = $masques['masque.tag'];
|
582 |
if (isset($masques['masque.tag_pictoflora'])) {
|
| 525 |
$conditionsImg[] = " dit.tag_normalise LIKE '$tag%' ";
|
583 |
$tag = $masques['masque.tag_pictoflora'];
|
| Line 526... |
Line 584... |
| 526 |
$conditionsImg[] = " di.mots_cles_texte LIKE '%$tag%' ";
|
584 |
$conditionsImg[] = $this->creerFiltreMotsClesPictoflora($tag);
|
| 527 |
}
|
585 |
}
|
| Line 723... |
Line 781... |
| 723 |
' INNER JOIN del_observation dob ON dob.id_observation = doi.id_observation '.
|
781 |
' INNER JOIN del_observation dob ON dob.id_observation = doi.id_observation '.
|
| 724 |
' LEFT JOIN del_image_tag dit ON dit.ce_image = di.id_image '.
|
782 |
' LEFT JOIN del_image_tag dit ON dit.ce_image = di.id_image '.
|
| 725 |
' LEFT JOIN del_utilisateur du ON du.id_utilisateur = di.ce_utilisateur ';
|
783 |
' LEFT JOIN del_utilisateur du ON du.id_utilisateur = di.ce_utilisateur ';
|
| Line 726... |
Line 784... |
| 726 |
|
784 |
|
| 727 |
$conditionsImg = $this->getConditionsImages();
|
785 |
$conditionsImg = $this->getConditionsImages();
|
| 728 |
|
786 |
|
| 729 |
if (!empty($conditionsImg)) {
|
787 |
if (!empty($conditionsImg)) {
|
| 730 |
$where = ' WHERE ('.implode(' OR ', $conditionsImg).') ';
|
788 |
$where = ' WHERE ('.implode(' OR ', $conditionsImg).') ';
|
| 731 |
$where .= ' AND dit.actif = 1 ';
|
789 |
$where .= ' AND dit.actif = 1 ';
|
| 732 |
$requeteImages .= $where;
|
790 |
$requeteImages .= $where;
|
| Line 786... |
Line 844... |
| 786 |
$requetetags = ' SELECT SQL_CALC_FOUND_ROWS doi.id_image, COUNT(id_tag) as total_tags '.
|
844 |
$requetetags = ' SELECT SQL_CALC_FOUND_ROWS doi.id_image, COUNT(id_tag) as total_tags '.
|
| 787 |
' FROM del_obs_image doi LEFT JOIN del_image_tag dit ON dit.ce_image = doi.id_image AND dit.actif = 1 '.
|
845 |
' FROM del_obs_image doi LEFT JOIN del_image_tag dit ON dit.ce_image = doi.id_image AND dit.actif = 1 '.
|
| 788 |
' INNER JOIN del_image di ON doi.id_image = di.id_image '.
|
846 |
' INNER JOIN del_image di ON doi.id_image = di.id_image '.
|
| 789 |
' INNER JOIN del_observation dob ON dob.id_observation = doi.id_observation ';
|
847 |
' INNER JOIN del_observation dob ON dob.id_observation = doi.id_observation ';
|
| Line 790... |
Line 848... |
| 790 |
|
848 |
|
| 791 |
if (isset($this->parametres['masque.tag'])) {
|
849 |
if (isset($this->parametres['masque.tag_pictoflora'])) {
|
| 792 |
// Et si on a cherché par tag ?
|
850 |
// Et si on a cherché par tag ?
|
| 793 |
$tag = $this->parametres['masque.tag'];
|
851 |
$tag = $this->parametres['masque.tag_pictoflora'];
|
| 794 |
$requetetags .= " WHERE (dit.tag_normalise LIKE '$tag%' OR di.mots_cles_texte LIKE '%$tag%') ";
|
852 |
$requetetags .= " WHERE (dit.tag_normalise LIKE '$tag%' OR di.mots_cles_texte LIKE '%$tag%') ";
|
| Line 795... |
Line 853... |
| 795 |
}
|
853 |
}
|
| 796 |
|
854 |
|
| Line 805... |
Line 863... |
| 805 |
}
|
863 |
}
|
| 806 |
$strtags = empty($tabtags) ? "''" : implode(',', $tabtags);
|
864 |
$strtags = empty($tabtags) ? "''" : implode(',', $tabtags);
|
| Line 807... |
Line 865... |
| 807 |
|
865 |
|
| 808 |
|
866 |
|
| 809 |
// Et si on a cherché par tag ?
|
867 |
// Et si on a cherché par tag ?
|
| 810 |
if (isset($this->parametres['masque.tag'])) {
|
868 |
if (isset($this->parametres['masque.tag_pictoflora'])) {
|
| 811 |
$chaineTri .= ' AND ';
|
869 |
$chaineTri .= ' AND ';
|
| 812 |
} else {
|
870 |
} else {
|
| Line 1157... |
Line 1215... |
| 1157 |
unset($parametres['navigation.depart']);
|
1215 |
unset($parametres['navigation.depart']);
|
| 1158 |
unset($parametres['navigation.limite']);
|
1216 |
unset($parametres['navigation.limite']);
|
| 1159 |
unset($parametres['ordre']);
|
1217 |
unset($parametres['ordre']);
|
| Line 1160... |
Line 1218... |
| 1160 |
|
1218 |
|
| 1161 |
// En revanche, chaque masque est associé à un type de requête particulier.
|
1219 |
// En revanche, chaque masque est associé à un type de requête particulier.
|
| 1162 |
$masquesObservation = array('masque', 'masque.departement', 'masque.ns', 'masque.genre', 'masque.date', 'masque.commune', 'masque.famille', 'masque.auteur', 'masque.nn', 'masque.referentiel');
|
1220 |
$masquesObservation = array('masque', 'masque.departement', 'masque.ns', 'masque.genre', 'masque.date', 'masque.commune', 'masque.famille', 'masque.auteur', 'masque.nn', 'masque.referentiel', 'masque.tag_cel');
|
| Line 1163... |
Line 1221... |
| 1163 |
$masquesImage = array('masque', 'masque.tag');
|
1221 |
$masquesImage = array('masque', 'masque.tag_pictoflora');
|
| 1164 |
|
1222 |
|
| 1165 |
// Le type de requête est défini par les tables qu'il doit inclure (observation, image, ou les deux)
|
1223 |
// Le type de requête est défini par les tables qu'il doit inclure (observation, image, ou les deux)
|
| 1166 |
$requeteSimple = false;
|
1224 |
$requeteSimple = false;
|