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; |
} |
} |
} |