Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1296 → Rev 1297

/trunk/services/modules/0.1/observations/ListeObservations.php
16,8 → 16,7
*/
 
class ListeObservations {
 
private $conteneur;
private $navigation;
private $masque;
40,7 → 39,43
$this->bdd = $this->gestionBdd->getBdd();
}
/**
* RequeteSansParametres
*
* permet de vérifier qu'il n'y a aucun paramètre dans la requete, excepté les informations de start et limite,
* pour ajuster la requête pour un gain de temps
* @param array $ressources les ressources telles qu'elles sont passées au script
* @param array $parametres les paramètres tels qu'il sont passés au script
* */
public function requeteSansParametres($ressources, $parametres) {
$estSansParametres = true;
if (sizeof($ressources) > 0) {
$estSansParametres = false;
}
if (sizeof($parametres) > 2) {
// 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
$estSansParametres = false;
} else {
if (sizeof($parametres) == 1) {
if (!(isset($parametres['navigation.depart']) || isset($parametres['navigation.limite']))) {
// s'il y a des paramètres, seul les paramètres de navigation n'interfère pas sur la requête
$estSansParametres = false;
}
} elseif (sizeof($parametres) == 2) {
// s'il y a des paramètres, seul les paramètres de navigation n'interfère pas sur la requête
if (!(isset($parametres['navigation.depart']) && isset($parametres['navigation.limite']))) {
$estSansParametres = false;
}
}
}
return $estSansParametres;
}
/**
* Méthode principale de la classe.
* Lance la récupération des images dans la base et les place dans un objet ResultatService
* pour l'afficher.
48,28 → 83,50
* @param array $parametres les paramètres situés après le ? dans l'url
* */
public function consulter($ressources, $parametres) {
$this->initialiserRessourcesEtParametres($ressources, $parametres);
// Gestion des configuration du script
$this->configurer();
$this->verifierConfiguration();
$this->verifierParametresTri();
$this->initialiserTri();
// Lancement du service
$liaisons = $this->chargerLiaisons();
$total = $this->compterObservations();
$this->navigation->setTotal($total);
$observations = $this->chargerObservations($liaisons);
$observations = $this->chargerImages($observations);
$observations = $this->chargerDeterminations($observations);
// Mettre en forme le résultat et l'envoyer pour affichage
$resultat = new ResultatService();
$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $observations);
return $resultat;
 
if ($this->requeteSansParametres($ressources, $parametres)) {
 
$liaisons = $this->chargerLiaisonsSimple();
$observations = $this->chargerObservations($liaisons);
$total = $this->compterObservations();
$this->navigation->setTotal($total);
$observations = $this->chargerImages($observations);
$observations = $this->chargerDeterminations($observations);
//Compute
$resultats = array();
foreach ($observations as $id => $observation) {
$idObs = $observation['id_observation'];
$resultats['"'.$idObs.'"'] = $observation;
}
// Mettre en forme le résultat et l'envoyer pour affichage
$resultat = new ResultatService();
$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $resultats);
return $resultat;
} else {
// Lancement du service
$liaisons = $this->chargerLiaisons();
$total = $this->compterObservations();
$this->navigation->setTotal($total);
$observations = $this->chargerObservations($liaisons);
$observations = $this->chargerImages($observations);
$observations = $this->chargerDeterminations($observations);
// Mettre en forme le résultat et l'envoyer pour affichage
$resultat = new ResultatService();
$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $observations);
return $resultat;
}
}
private function initialiserRessourcesEtParametres($ressources, $parametres) {
452,6 → 509,23
return $this->bdd->recupererTous($requeteLiaisons);
}
private function chargerLiaisonsSimple() {
$requeteObs = 'SELECT SQL_CALC_FOUND_ROWS dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '.
'station, milieu, date_observation, dob.mots_cles_texte, date_transmission, '.
'dob.ce_utilisateur, prenom, nom, courriel, '.
'dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '.
'dob.commentaire as dob_commentaire, '.
'dob.nt, dob.nom_sel_nn '.
'FROM del_observation dob '.
' LEFT JOIN del_utilisateur du ON dob.ce_utilisateur = du.id_utilisateur '.
' ORDER BY id_observation DESC ';
$requeteObs .= $this->gestionBdd->getLimitSql();
$liaisons = $this->bdd->recupererTous($requeteObs);
 
return $liaisons;
}
/**
* Compter le nombre total d'images dans la base pour affichage dans entete.
* */
476,7 → 550,8
$liaison['nom'] = $liaison['nom_utilisateur'];
}
$observation = $this->formaterObservation($liaison);
$observation = $this->formaterObservation($liaison);
// attention, il est important que les index du tableau soient des chaines
// de caractères pour que l'ordre d'insertion soit respecté lors de la lecture
// du json par les navigateur (voir bug du moteur javascript v8 #164)
592,11 → 667,9
* */
private function formaterObservation($liaison) {
$observation = array();
foreach ($this->mappingObservation as $nomOriginal => $nomFinal) {
$observation[$nomFinal] = $liaison[$nomOriginal];
}
$observation['images'] = array();
 
return $observation;