Subversion Repositories eFlore/Applications.del

Rev

Rev 1871 | Rev 1922 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1871 Rev 1881
Line 23... Line 23...
23
	private $conteneur;
23
	private $conteneur;
24
	private $bdd;
24
	private $bdd;
25
	private $navigation;
25
	private $navigation;
26
	private $filtrage;
26
	private $filtrage;
27
	private $sql;
27
	private $sql;
-
 
28
 
28
	private $mappings = array();
29
	private $mappings = array();
29
	private $paramsFiltres = array();
30
	private $paramsFiltres = array();
Line -... Line 31...
-
 
31
 
-
 
32
	private $idsObsOrdonnees = array();
-
 
33
	private $infosObs = array();
-
 
34
	private $infosObsOrdonnee = array();
Line 30... Line 35...
30
 
35
 
31
 
36
 
32
	public function __construct(Conteneur $conteneur) {
37
	public function __construct(Conteneur $conteneur) {
Line 48... Line 53...
48
		$this->sql->setParametres($this->paramsFiltres);
53
		$this->sql->setParametres($this->paramsFiltres);
49
		$this->sql->ajouterContraintes();
54
		$this->sql->ajouterContraintes();
50
		$this->sql->ajouterConstrainteAppliObs();
55
		$this->sql->ajouterConstrainteAppliObs();
51
		$this->sql->definirOrdreSqlAppliObs();
56
		$this->sql->definirOrdreSqlAppliObs();
Line 52... Line 57...
52
 
57
 
53
		$idObs = $this->getIdObs();
58
		$this->idsObsOrdonnees = $this->getIdObs();
Line 54... Line 59...
54
		$this->navigation->setTotal($this->sql->getTotalLignesTrouvees());
59
		$this->navigation->setTotal($this->sql->getTotalLignesTrouvees());
55
 
60
 
56
		// Ce n'est pas la peine de continuer s'il n'y a pas eu de résultats
61
		// Ce n'est pas la peine de continuer s'il n'y a pas eu de résultats
57
		$resultat = new ResultatService();
62
		$resultat = new ResultatService();
Line 58... Line 63...
58
		$resultat->corps = array('entete' => $this->navigation->getEntete(), 'resultats' => array());
63
		$resultat->corps = array('entete' => $this->navigation->getEntete(), 'resultats' => array());
59
		if (count($idObs) > 0) {
-
 
60
 
-
 
61
			// 2) récupération des données nécessaires pour ces observations (obs + images)
64
		if (count($this->idsObsOrdonnees) > 0) {
Line 62... Line 65...
62
			// ici les champs récupérés sont issus de self::$sql_fields_liaisons mais sans préfixes
65
 
63
			// car tout provient de v_del_image
66
			// 2) récupération des données nécessaires pour ces observations (obs + images)
64
			$obs_unfmt = $this->getInfos($idObs);
-
 
65
 
-
 
66
			// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output
-
 
67
			$observations = $this->formaterObservations($obs_unfmt);
-
 
Line 68... Line 67...
68
 
67
			$this->infosObs = $this->getInfosObs();
69
			// 4) récupération des données nécessaires pour ces observations (commentaires + votes)
68
 
Line 70... Line 69...
70
			// modifie $observations
69
			// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output
71
			$this->chargerDeterminations($observations, $idObs);
70
			$this->infosObsOrdonnees = $this->formaterObservations();
-
 
71
 
-
 
72
			// 4) Ajouter commentaires + votes à $this->infosObsOrdonnees
72
 
73
			$this->chargerDeterminations();
73
			// 5) restauration de l'ordre souhaité initialement
74
 
74
			$observations = $this->ordonnerObservations($observations, $idObs);
75
			$resultat->corps = array(
75
 
76
				'entete' => $this->navigation->getEntete(),
Line 76... Line 77...
76
			$resultat->corps = array(
77
				//'resultats' => array_values($this->infosObsOrdonnees));
Line 112... Line 113...
112
 
113
 
113
	/**
114
	/**
114
	 * Après avoir récupérer seulement les ids dans une première requête, nous récupérons maintenant les infos.
115
	 * Après avoir récupérer seulement les ids dans une première requête, nous récupérons maintenant les infos.
115
	 * Le web service est ainsi 3 fois plus rapide.
116
	 * Le web service est ainsi 3 fois plus rapide.
116
	 */
117
	 */
117
	private function getInfos($idObs) {
118
	private function getInfosObs() {
118
		$idsObsConcat = implode(',', $idObs);
119
		$idsObsConcat = implode(',', $this->idsObsOrdonnees);
119
		$requete = "SELECT id_observation, nom_sel AS `determination.ns`, nt AS `determination.nt`, ".
120
		$requete = "SELECT id_observation, nom_sel AS `determination.ns`, nt AS `determination.nt`, ".
120
			'nom_sel_nn AS `determination.nn`, famille AS `determination.famille`, '.
121
			'nom_sel_nn AS `determination.nn`, famille AS `determination.famille`, '.
121
			'nom_referentiel AS `determination.referentiel`, ce_zone_geo AS id_zone_geo, '.
122
			'nom_referentiel AS `determination.referentiel`, ce_zone_geo AS id_zone_geo, '.
122
			'zone_geo, lieudit, station, milieu, date_observation, do.mots_cles_texte, '.
123
			'zone_geo, lieudit, station, milieu, date_observation, do.mots_cles_texte, '.
Line 134... Line 135...
134
	/**
135
	/**
135
	 * Les informations étant extraites d'une vue dont les infos des obs sont dupliquées pour chaque image,
136
	 * Les informations étant extraites d'une vue dont les infos des obs sont dupliquées pour chaque image,
136
	 * il nous faut maintenant récupérer qu'une seule fois les données d'observations et y intégrer les données
137
	 * il nous faut maintenant récupérer qu'une seule fois les données d'observations et y intégrer les données
137
	 * des images.
138
	 * des images.
138
	 */
139
	 */
139
	private function formaterObservations($observations) {
140
	private function formaterObservations() {
140
		$observations = array_map('array_filter', $observations);
141
		$observations = array_map('array_filter', $this->infosObs);
141
		$obsFormatees = array();
142
		$obsFormatees = array_flip($this->idsObsOrdonnees);// Permet de garder l'ordre de sortie !
142
		foreach ($observations as $obs) {
143
		foreach ($observations as $obs) {
143
			$this->nettoyerAuteur($obs);
144
			$this->nettoyerAuteur($obs);
144
			$image = $this->extraireInfosImage($obs);
-
 
Line 145... Line 145...
145
 
145
 
146
			$id = 'idx-'.$obs['id_observation'];
-
 
147
			if (!isset($obsFormatees[$id])) {
146
			$id = $obs['id_observation'];
148
				$obsFormatees[$id] = $obs;
147
			$obsFormatees[$id] = $obs;
-
 
148
 
149
			}
149
			$image = $this->extraireInfosImage($obs);
150
			$obsFormatees[$id]['images'][] = $image;
150
			$obsFormatees[$id]['images'][] = $image;
151
		}
151
		}
152
		return $obsFormatees;
152
		return $obsFormatees;
Line 171... Line 171...
171
 
171
 
172
		unset($obs['id_image'], $obs['date'], $obs['hauteur'], $obs['largeur'], $obs['nom_original']);
172
		unset($obs['id_image'], $obs['date'], $obs['hauteur'], $obs['largeur'], $obs['nom_original']);
173
		return $image;
173
		return $image;
Line 174... Line -...
174
	}
-
 
175
 
-
 
176
	private function ordonnerObservations($observations, $ordreDesObs) {
-
 
177
		$obsOrdonnees = array();
-
 
178
		foreach ($ordreDesObs as $id) {
-
 
179
			if (array_key_exists("idx-$id", $observations)) {
-
 
180
				$obsOrdonnees["idx-$id"] = $observations["idx-$id"];
-
 
181
				unset($observations["idx-$id"]);
-
 
182
			}
-
 
183
		}
-
 
184
		return $obsOrdonnees + $observations;
-
 
185
	}
174
	}
186
 
175
 
187
	/**
176
	/**
188
	 * Récupérer toutes les déterminations et le nombre de commentaire au total
177
	 * Récupérer toutes les déterminations et le nombre de commentaire au total
189
	 * @param array $observations la liste des observations à mettre à jour
178
	 * @param array $observations la liste des observations à mettre à jour
190
	 */
179
	 */
191
	private function chargerDeterminations(&$observations, $idObs) {
180
	private function chargerDeterminations() {
192
		$idObsConcat = implode(',', $idObs);
181
		$idObsConcat = implode(',', $this->idsObsOrdonnees);
193
		$requete = 'SELECT * '.
182
		$requete = 'SELECT * '.
194
			'FROM del_commentaire AS dc '.
183
			'FROM del_commentaire AS dc '.
195
			'WHERE dc.nom_sel IS NOT NULL '.
184
			'WHERE dc.nom_sel IS NOT NULL '.
Line 201... Line 190...
201
			foreach ($propositions as $proposition) {
190
			foreach ($propositions as $proposition) {
202
				$idObs = $proposition['ce_observation'];
191
				$idObs = $proposition['ce_observation'];
203
				$idComment = $proposition['id_commentaire'];
192
				$idComment = $proposition['id_commentaire'];
204
				$comment = $this->formaterDetermination($idComment, $proposition);
193
				$comment = $this->formaterDetermination($idComment, $proposition);
205
				if ($comment) {
194
				if ($comment) {
206
					$observations["idx-$idObs"]['commentaires'][$idComment] = $comment;
195
					$this->infosObsOrdonnees[$idObs]['commentaires'][$idComment] = $comment;
207
				}
196
				}
208
			}
197
			}
209
		}
198
		}
210
	}
199
	}