Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1880 → Rev 1881

/trunk/services/modules/0.1/observations/ListeObservations.php
25,10 → 25,15
private $navigation;
private $filtrage;
private $sql;
 
private $mappings = array();
private $paramsFiltres = array();
 
private $idsObsOrdonnees = array();
private $infosObs = array();
private $infosObsOrdonnee = array();
 
 
public function __construct(Conteneur $conteneur) {
$this->conteneur = $conteneur;
$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
50,32 → 55,28
$this->sql->ajouterConstrainteAppliObs();
$this->sql->definirOrdreSqlAppliObs();
 
$idObs = $this->getIdObs();
$this->idsObsOrdonnees = $this->getIdObs();
$this->navigation->setTotal($this->sql->getTotalLignesTrouvees());
 
// Ce n'est pas la peine de continuer s'il n'y a pas eu de résultats
$resultat = new ResultatService();
$resultat->corps = array('entete' => $this->navigation->getEntete(), 'resultats' => array());
if (count($idObs) > 0) {
if (count($this->idsObsOrdonnees) > 0) {
 
// 2) récupération des données nécessaires pour ces observations (obs + images)
// ici les champs récupérés sont issus de self::$sql_fields_liaisons mais sans préfixes
// car tout provient de v_del_image
$obs_unfmt = $this->getInfos($idObs);
$this->infosObs = $this->getInfosObs();
 
// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output
$observations = $this->formaterObservations($obs_unfmt);
$this->infosObsOrdonnees = $this->formaterObservations();
 
// 4) récupération des données nécessaires pour ces observations (commentaires + votes)
// modifie $observations
$this->chargerDeterminations($observations, $idObs);
// 4) Ajouter commentaires + votes à $this->infosObsOrdonnees
$this->chargerDeterminations();
 
// 5) restauration de l'ordre souhaité initialement
$observations = $this->ordonnerObservations($observations, $idObs);
 
$resultat->corps = array(
'entete' => $this->navigation->getEntete(),
'resultats' => $observations);
//'resultats' => array_values($this->infosObsOrdonnees));
// TODO : renvoyer un vrai tableau et non un objet
'resultats' => $this->infosObsOrdonnees);
}
return $resultat;
}
114,8 → 115,8
* Après avoir récupérer seulement les ids dans une première requête, nous récupérons maintenant les infos.
* Le web service est ainsi 3 fois plus rapide.
*/
private function getInfos($idObs) {
$idsObsConcat = implode(',', $idObs);
private function getInfosObs() {
$idsObsConcat = implode(',', $this->idsObsOrdonnees);
$requete = "SELECT id_observation, nom_sel AS `determination.ns`, nt AS `determination.nt`, ".
'nom_sel_nn AS `determination.nn`, famille AS `determination.famille`, '.
'nom_referentiel AS `determination.referentiel`, ce_zone_geo AS id_zone_geo, '.
136,17 → 137,16
* il nous faut maintenant récupérer qu'une seule fois les données d'observations et y intégrer les données
* des images.
*/
private function formaterObservations($observations) {
$observations = array_map('array_filter', $observations);
$obsFormatees = array();
private function formaterObservations() {
$observations = array_map('array_filter', $this->infosObs);
$obsFormatees = array_flip($this->idsObsOrdonnees);// Permet de garder l'ordre de sortie !
foreach ($observations as $obs) {
$this->nettoyerAuteur($obs);
 
$id = $obs['id_observation'];
$obsFormatees[$id] = $obs;
 
$image = $this->extraireInfosImage($obs);
 
$id = 'idx-'.$obs['id_observation'];
if (!isset($obsFormatees[$id])) {
$obsFormatees[$id] = $obs;
}
$obsFormatees[$id]['images'][] = $image;
}
return $obsFormatees;
173,23 → 173,12
return $image;
}
 
private function ordonnerObservations($observations, $ordreDesObs) {
$obsOrdonnees = array();
foreach ($ordreDesObs as $id) {
if (array_key_exists("idx-$id", $observations)) {
$obsOrdonnees["idx-$id"] = $observations["idx-$id"];
unset($observations["idx-$id"]);
}
}
return $obsOrdonnees + $observations;
}
 
/**
* Récupérer toutes les déterminations et le nombre de commentaire au total
* @param array $observations la liste des observations à mettre à jour
*/
private function chargerDeterminations(&$observations, $idObs) {
$idObsConcat = implode(',', $idObs);
private function chargerDeterminations() {
$idObsConcat = implode(',', $this->idsObsOrdonnees);
$requete = 'SELECT * '.
'FROM del_commentaire AS dc '.
'WHERE dc.nom_sel IS NOT NULL '.
203,7 → 192,7
$idComment = $proposition['id_commentaire'];
$comment = $this->formaterDetermination($idComment, $proposition);
if ($comment) {
$observations["idx-$idObs"]['commentaires'][$idComment] = $comment;
$this->infosObsOrdonnees[$idObs]['commentaires'][$idComment] = $comment;
}
}
}