94,7 → 94,6 |
// pas la même requête, pour optimiser les jointures et les |
// rapidités d'éxécution. |
$type = $this->getTypeRequete($ressources, $parametres); |
|
switch ($type) { |
case 'obs' : |
$liaisons = $this->chargerLiaisonsObs(); |
172,6 → 171,12 |
case 'tag' : |
$where[] = ' '.$this->creerFiltreMotsCles($valeurMasque); |
break; |
case 'tag_cel' : |
$where[] = ' '.$this->creerFiltreMotsClesCel($valeurMasque); |
break; |
case 'tag_pictoflora' : |
$where[] = ' '.$this->creerFiltreMotsClesPictoflora($valeurMasque); |
break; |
case 'referentiel' : |
$where[] = ' dob.nom_referentiel LIKE '.$this->proteger($valeurMasque.'%'); |
break; |
359,6 → 364,55 |
return $masque; |
} |
|
/** |
* Générer la chaine de recherche dans les mots clés en fonction du masque |
* @param $valeurMasque le mot clé recherché |
* */ |
private function creerFiltreMotsClesPictoflora($valeurMasque) { |
|
$mots_cles = explode(' ', $valeurMasque); |
$requeteMotsClesImg = array(); |
$requeteMotsClesObs = array(); |
$requeteMotsClesImgPublic = array(); |
|
foreach($mots_cles as $mot_cle) { |
//TODO: rechercher sur les mots clés normalisés dans tous les cas ? |
$requeteMotsCles = $this->proteger('%'.$mot_cle.'%'); |
$motsCleProtege = $this->proteger($this->normaliserMotCle('%'.$mot_cle.'%')); |
$requeteMotsClesImgPublic[] = 'di.id_image IN (SELECT ce_image FROM del_image_tag WHERE tag_normalise LIKE '.$motsCleProtege.' AND actif = 1)'; |
} |
|
$requeteMotsClesImgPublic = implode(' AND ', $requeteMotsClesImgPublic); |
|
$masque = '('.$requeteMotsClesImgPublic.') '; |
|
return $masque; |
} |
|
private function creerFiltreMotsClesCel($valeurMasque) { |
$mots_cles = explode(' ', $valeurMasque); |
$requeteMotsClesImg = array(); |
$requeteMotsClesObs = array(); |
|
foreach($mots_cles as $mot_cle) { |
//TODO: rechercher sur les mots clés normalisés dans tous les cas ? |
$requeteMotsCles = $this->proteger('%'.$mot_cle.'%'); |
$motsCleProtege = $this->proteger($this->normaliserMotCle('%'.$mot_cle.'%')); |
$requeteMotsClesImg[] = 'di.mots_cles_texte LIKE '.$requeteMotsCles; |
$requeteMotsClesObs[] = 'dob.mots_cles_texte LIKE '.$requeteMotsCles; |
} |
|
$requeteMotsClesImg = implode(' AND ', $requeteMotsClesImg); |
$requeteMotsClesObs = implode(' AND ', $requeteMotsClesObs); |
|
$masque = '('. |
'('.$requeteMotsClesImg.') OR '. |
'('.$requeteMotsClesObs.') '. |
')'; |
|
return $masque; |
} |
|
// ?? |
private function assemblercomptageOccurencesMotsClesCel() { |
$chaineMotsClesAffiches = $this->conteneur->getParametre('mots_cles_cel_affiches'); |
510,6 → 564,11 |
$dept = $masques['masque.departement']; |
$conditionsObs[] = $this->creerFiltreIdZoneGeo($dept); |
} |
|
if (isset($masques['masque.tag_cel'])) { |
$motsCles = $masques['masque.tag_cel']; |
$conditionsObs[] = $this->creerFiltreMotsClesCel($motsCles); |
} |
|
return $conditionsObs; |
} |
520,10 → 579,9 |
private function getConditionsImages() { |
$conditionsImg = array(); |
$masques = $this->masque->getMasque(); |
if (isset($masques['masque.tag'])) { |
$tag = $masques['masque.tag']; |
$conditionsImg[] = " dit.tag_normalise LIKE '$tag%' "; |
$conditionsImg[] = " di.mots_cles_texte LIKE '%$tag%' "; |
if (isset($masques['masque.tag_pictoflora'])) { |
$tag = $masques['masque.tag_pictoflora']; |
$conditionsImg[] = $this->creerFiltreMotsClesPictoflora($tag); |
} |
|
return $conditionsImg; |
725,7 → 783,7 |
' LEFT JOIN del_utilisateur du ON du.id_utilisateur = di.ce_utilisateur '; |
|
$conditionsImg = $this->getConditionsImages(); |
|
|
if (!empty($conditionsImg)) { |
$where = ' WHERE ('.implode(' OR ', $conditionsImg).') '; |
$where .= ' AND dit.actif = 1 '; |
788,9 → 846,9 |
' INNER JOIN del_image di ON doi.id_image = di.id_image '. |
' INNER JOIN del_observation dob ON dob.id_observation = doi.id_observation '; |
|
if (isset($this->parametres['masque.tag'])) { |
if (isset($this->parametres['masque.tag_pictoflora'])) { |
// Et si on a cherché par tag ? |
$tag = $this->parametres['masque.tag']; |
$tag = $this->parametres['masque.tag_pictoflora']; |
$requetetags .= " WHERE (dit.tag_normalise LIKE '$tag%' OR di.mots_cles_texte LIKE '%$tag%') "; |
} |
|
807,7 → 865,7 |
|
|
// Et si on a cherché par tag ? |
if (isset($this->parametres['masque.tag'])) { |
if (isset($this->parametres['masque.tag_pictoflora'])) { |
$chaineTri .= ' AND '; |
} else { |
$chaineTri .= ' WHERE '; |
1159,8 → 1217,8 |
unset($parametres['ordre']); |
|
// En revanche, chaque masque est associé à un type de requête particulier. |
$masquesObservation = array('masque', 'masque.departement', 'masque.ns', 'masque.genre', 'masque.date', 'masque.commune', 'masque.famille', 'masque.auteur', 'masque.nn', 'masque.referentiel'); |
$masquesImage = array('masque', 'masque.tag'); |
$masquesObservation = array('masque', 'masque.departement', 'masque.ns', 'masque.genre', 'masque.date', 'masque.commune', 'masque.famille', 'masque.auteur', 'masque.nn', 'masque.referentiel', 'masque.tag_cel'); |
$masquesImage = array('masque', 'masque.tag_pictoflora'); |
|
// Le type de requête est défini par les tables qu'il doit inclure (observation, image, ou les deux) |
$requeteSimple = false; |