93,7 → 93,7 |
// En fonction des paramètres de recherche, on n'effectue |
// pas la même requête, pour optimiser les jointures et les |
// rapidités d'éxécution. |
$type = $this->getTypeRequete($parametres); |
$type = $this->getTypeRequete($ressources, $parametres); |
|
switch ($type) { |
case 'obs' : |
105,16 → 105,21 |
case 'obs-images' : |
$liaisons = $this->chargerLiaisons(); |
break; |
case 'id': |
$liaisons = $this->chargerLiaisonsParId(); |
break; |
default : //case simple ! |
$liaisons = $this->chargerLiaisonsSimple(); |
$liaisons = $this->chargerLiaisonsSimple(); |
} |
|
$images = array(); |
if($liaisons) { |
// Partie commune à tous les cas : on complète les liaisons avec les informations des votes |
// et des images, puis on affiche sous forme de JSON |
$images = $this->chargerImage($liaisons); |
$images = $this->chargerVotes($images); |
} |
|
// Partie commune à tous les cas : on complète les liaisons avec les informations des votes |
// et des images, puis on affiche sous forme de JSON |
$images = $this->chargerImage($liaisons); |
$images = $this->chargerVotes($images); |
|
$resultat = new ResultatService(); |
$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $images); |
|
131,7 → 136,7 |
* Charger la clause WHERE en fonction des paramètres de masque |
* */ |
private function chargerClauseWhere() { |
|
|
$where = array(); |
$tableauMasque = $this->masque->getMasque(); |
if (!empty($tableauMasque)) { |
169,8 → 174,8 |
$where[] = ' nom_sel LIKE '.$this->proteger($valeurMasque.'%'); |
break; |
case 'nn' : |
$where[] = ' (nom_sel_nn LIKE '.$this->proteger($valeurMasque.'%').' OR '. |
' nom_ret_nn LIKE '.$this->proteger($valeurMasque.'%').') '; |
$where[] = ' (nom_sel_nn = '.intval($valeurMasque).' OR '. |
' nom_ret_nn = '.intval($valeurMasque).') '; |
break; |
case 'commune' : |
$where[] = ' '.$this->mappingFiltre[$idMasque].' LIKE '.$this->proteger(str_replace(array('-',' '), '_', $valeurMasque).'%'); |
426,7 → 431,7 |
|
$conditionsObs[] = implode(' OR ', $conditionsLibre); |
} |
|
|
// referentiel |
if (isset($masques['masque.referentiel'])) { |
$ref = $masques['masque.referentiel']; |
534,7 → 539,7 |
$requeteIdObs .= $this->gestionBdd->getLimitSql(); |
|
// Récupérer les N observations triées par date |
$observations = $this->bdd->recupererTous($requeteIdObs); |
$observations = $this->bdd->recupererTous($requeteIdObs . ' -- ' . __FILE__ . ':' . __LINE__); |
|
$idsImages = array(); |
foreach ($observations as $observation) { |
553,7 → 558,7 |
$requeteImages .= $this->gestionBdd->getLimitSql(); |
} |
|
$liaisons = $this->bdd->recupererTous($requeteImages); |
$liaisons = $this->bdd->recupererTous($requeteImages . ' -- ' . __FILE__ . ':' . __LINE__); |
|
// Ce n'est pas la peine de continuer s'il n'y a pas eu de résultats dans la table del_obs_images |
if (!empty($liaisons)) { |
573,7 → 578,7 |
' LEFT JOIN del_utilisateur du ON dob.ce_utilisateur = du.id_utilisateur '. |
' WHERE id_observation IN ('.$chaineIdObs.')'; |
|
$resultatsObservations = $this->bdd->recupererTous($requeteObservations); |
$resultatsObservations = $this->bdd->recupererTous($requeteObservations . ' -- ' . __FILE__ . ':' . __LINE__); |
|
// FIXME : Ca ne doit pas arriver, mais que se passe-t-il s'il n'y a pas d'observation pour l'image ?! |
|
603,7 → 608,7 |
'INNER JOIN del_image di '. |
'ON di.id_image = doi.id_image '. |
'GROUP BY doi.id_image, doi.id_observation) t '; |
$resultatNbImages = $this->bdd->recupererTous($requeteNbImages); |
$resultatNbImages = $this->bdd->recupererTous($requeteNbImages . ' -- ' . __FILE__ . ':' . __LINE__); |
|
$total = (int) $resultatNbImages[0]['nb']; |
$this->navigation->setTotal($total); |
611,9 → 616,39 |
|
return $liaisons; |
} |
|
|
|
/** |
* Charge les liaisons pour une seule image dont l'id est spécifié dans l'URL |
* Copie de chargerLiaisonsObs avec critère sur l'id_image uniquement |
* Supporte seulement le masque sur referentiel |
*/ |
private function chargerLiaisonsParId() { |
|
$idImage = $this->ressources[0]; |
|
// Récupérer les liaisons |
$requeteObs = ' SELECT SQL_CALC_FOUND_ROWS dob.id_observation as id_observation, dob.nom_referentiel, nom_sel, nom_sel_nn, nt, famille, ce_zone_geo, zone_geo, lieudit, station, milieu, '. |
' 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, '. |
' doi.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 '. |
'FROM del_observation dob '. |
' INNER JOIN del_obs_image doi ON dob.id_observation = doi.id_observation '. |
' INNER JOIN del_image di ON doi.id_image = di.id_image '. |
' LEFT JOIN del_utilisateur du ON dob.ce_utilisateur = du.id_utilisateur '. |
' WHERE doi.id_image = '.intval($idImage); |
|
if (isset($this->parametres['masque.referentiel'])) { |
$requeteObs .= " AND dob.nom_referentiel LIKE '" . $this->parametres['masque.referentiel'] . "%'"; |
} |
|
$observations = $this->bdd->recupererTous($requeteObs . ' -- ' . __FILE__ . ':' . __LINE__); |
|
$total = $this->getFoundRows(); |
$this->navigation->setTotal($total); |
|
return $observations; |
} |
|
/** |
* Chargement depuis la bdd de toutes les liaisons entre images et observations |
* Méthode appelée uniquement lorsque les paramètres concernent une observation |
* */ |
644,7 → 679,7 |
} |
|
$requeteObs .= $this->gestionBdd->getLimitSql(); |
$observations = $this->bdd->recupererTous($requeteObs); |
$observations = $this->bdd->recupererTous($requeteObs . ' -- ' . __FILE__ . ':' . __LINE__); |
|
$total = $this->getFoundRows(); |
$this->navigation->setTotal($total); |
707,7 → 742,7 |
$this->gestionBdd->getLimitSql(); |
|
|
$resultatsVotes = $this->bdd->recupererTous($requeteVotes); |
$resultatsVotes = $this->bdd->recupererTous($requeteVotes . ' -- ' . __FILE__ . ':' . __LINE__); |
$tabVotes = array(); |
foreach ($resultatsVotes as $vote) { |
$tabVotes[] = $vote['id_image']; |
744,7 → 779,7 |
' ORDER by total_tags '.$this->directionTri.', doi.id_observation '.$this->directionTri. |
$this->gestionBdd->getLimitSql(); |
|
$resultatstags = $this->bdd->recupererTous($requetetags); |
$resultatstags = $this->bdd->recupererTous($requetetags . ' -- ' . __FILE__ . ':' . __LINE__); |
$tabtags = array(); |
foreach ($resultatstags as $tag) { |
$tabtags[] = $tag['id_image']; |
769,7 → 804,7 |
$requeteImages .= $this->gestionBdd->getLimitSql(); |
} |
|
$retour = $this->bdd->recupererTous($requeteImages); |
$retour = $this->bdd->recupererTous($requeteImages . ' -- ' . __FILE__ . ':' . __LINE__); |
$total = $this->getFoundRows(); |
$this->navigation->setTotal($total); |
|
781,7 → 816,7 |
* */ |
private function chargerLiaisons() { |
|
$champs = array('dob.id_observation as id_observation', 'nom_sel', 'nom_sel_nn', 'nt', 'famille', 'ce_zone_geo', 'zone_geo', |
$champs = array('dob.id_observation as id_observation', 'nom_sel', 'nom_sel_nn', 'nt', 'famille', 'dob.nom_referentiel', 'ce_zone_geo', 'zone_geo', |
'lieudit', 'station', 'milieu', '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', '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'); |
818,7 → 853,7 |
$requeteLiaisons .= $this->getTri(); |
$requeteLiaisons .= $this->gestionBdd->getLimitSql(); |
|
$retour = $this->bdd->recupererTous($requeteLiaisons); |
$retour = $this->bdd->recupererTous($requeteLiaisons . ' -- ' . __FILE__ . ':' . __LINE__); |
$total = $this->getFoundRows(); |
$this->navigation->setTotal($total); |
return $retour; |
858,7 → 893,7 |
' INNER JOIN del_image_protocole p '. |
'ON v.ce_protocole = p.id_protocole '. |
$this->chargerClauseWhereVotes(); |
$resultatsVotes = $this->bdd->recupererTous($requeteVotes); |
$resultatsVotes = $this->bdd->recupererTous($requeteVotes . ' -- ' . __FILE__ . ':' . __LINE__); |
|
|
//TODO : faire une méthode formater vote |
1089,9 → 1124,13 |
* Obtenir le type de requête à exécuter en fonction des paramètres de recherche |
* @param $parametres les paramètres de l'application |
* */ |
private function getTypeRequete($parametres) { |
private function getTypeRequete($ressources, $parametres) { |
|
|
// une image par id |
if ((count($ressources) == 1) && is_numeric($ressources[0])) { |
return 'id'; |
} |
|
$typeRequete = 'simple'; |
|
// Dans ce cas précis, les informations concernant le depart, la limite ou l'ordre ne |