Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1433 → Rev 1443

/trunk/services/modules/0.1/images/ListeImages.php
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