Subversion Repositories eFlore/Applications.del

Rev

Rev 1994 | Rev 2052 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1994 Rev 2049
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Web service récupèrant toutes les observations et, pour chacune d'elle, les images qui lui sont associées.
4
 * Web service récupèrant toutes les observations et, pour chacune d'elle, les images qui lui sont associées.
5
 *
5
 *
6
 * ATTENTION : le web service commence par récupérer seulement les id des obs (1er requete SQL), puis dans une
6
 * ATTENTION : le web service commence par récupérer seulement les id des obs (1er requete SQL), puis dans une
7
 * deuxième requête SQL récupère les informations complémentaires. Il s'avère qu'en procédant ainsi le web service
7
 * deuxième requête SQL récupère les informations complémentaires. Il s'avère qu'en procédant ainsi le web service
8
 * est 3 fois plus rapide !
8
 * est 3 fois plus rapide !
9
 *
9
 *
10
 * @category   DEL
10
 * @category   DEL
11
 * @package    Services
11
 * @package    Services
12
 * @subpackage Observations
12
 * @subpackage Observations
13
 * @version    0.1
13
 * @version    0.1
14
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
14
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
15
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
15
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
16
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
16
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
17
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
17
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
18
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
18
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
19
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
19
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
20
 */
20
 */
21
class ListeObservations {
21
class ListeObservations {
22
 
22
 
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
 
29
	private $mappings = array();
29
	private $mappings = array();
30
	private $paramsFiltres = array();
30
	private $paramsFiltres = array();
31
 
31
 
32
	private $idsObsOrdonnees = array();
32
	private $idsObsOrdonnees = array();
33
	private $infosObs = array();
33
	private $infosObs = array();
34
	private $infosObsOrdonnee = array();
34
	private $infosObsOrdonnee = array();
-
 
35
	
-
 
36
	private $evenementsObs = array();
35
 
37
 
36
 
38
 
37
	public function __construct(Conteneur $conteneur) {
39
	public function __construct(Conteneur $conteneur) {
38
		$this->conteneur = $conteneur;
40
		$this->conteneur = $conteneur;
39
		$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
41
		$this->conteneur->chargerConfiguration('config_departements_bruts.ini');
40
 
42
 
41
		$this->bdd = $this->conteneur->getBdd();
43
		$this->bdd = $this->conteneur->getBdd();
42
		$this->filtrage = $this->conteneur->getParametresFiltrage();
44
		$this->filtrage = $this->conteneur->getParametresFiltrage();
43
		$this->sql = $this->conteneur->getSql();
45
		$this->sql = $this->conteneur->getSql();
44
		$this->navigation = $this->conteneur->getNavigation();
46
		$this->navigation = $this->conteneur->getNavigation();
45
 
47
 
46
		$this->mappings['votes'] = $this->conteneur->getParametreTableau('votes.mapping');
48
		$this->mappings['votes'] = $this->conteneur->getParametreTableau('votes.mapping');
47
		$this->mappings['commentaires'] = $this->conteneur->getParametreTableau('commentaires.mapping');
49
		$this->mappings['commentaires'] = $this->conteneur->getParametreTableau('commentaires.mapping');
48
	}
50
	}
49
 
51
 
50
	public function consulter($ressources, $parametres) {
52
	public function consulter($ressources, $parametres) {
51
		$this->paramsFiltres = $this->filtrage->filtrerUrlParamsAppliObs();
53
		$this->paramsFiltres = $this->filtrage->filtrerUrlParamsAppliObs();
52
		$this->sql->setAppli(Sql::APPLI_OBS);
54
		$this->sql->setAppli(Sql::APPLI_OBS);
53
		$this->sql->setParametres($this->paramsFiltres);
55
		$this->sql->setParametres($this->paramsFiltres);
54
		$this->sql->ajouterContraintes();
56
		$this->sql->ajouterContraintes();
55
		$this->sql->ajouterConstrainteAppliObs();
57
		$this->sql->ajouterConstrainteAppliObs();
56
		$this->sql->definirOrdreSqlAppliObs();
58
		$this->sql->definirOrdreSqlAppliObs();
57
 
59
 
58
		$this->idsObsOrdonnees = $this->getIdObs();
60
		$this->idsObsOrdonnees = $this->getIdObs();
59
		$this->navigation->setTotal($this->sql->getTotalLignesTrouvees());
61
		$this->navigation->setTotal($this->sql->getTotalLignesTrouvees());
60
 
62
 
61
		// Ce n'est pas la peine de continuer s'il n'y a pas eu de résultats
63
		// Ce n'est pas la peine de continuer s'il n'y a pas eu de résultats
62
		$resultat = new ResultatService();
64
		$resultat = new ResultatService();
63
		$resultat->corps = array('entete' => $this->navigation->getEntete(), 'resultats' => array());
65
		$resultat->corps = array('entete' => $this->navigation->getEntete(), 'resultats' => array());
64
		if (count($this->idsObsOrdonnees) > 0) {
66
		if (count($this->idsObsOrdonnees) > 0) {
65
 
67
 
66
			// 2) récupération des données nécessaires pour ces observations (obs + images)
68
			// 2) récupération des données nécessaires pour ces observations (obs + images)
67
			$this->infosObs = $this->getInfosObs();
69
			$this->infosObs = $this->getInfosObs();
68
			// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output
70
			// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output
69
			$this->infosObsOrdonnees = $this->formaterObservations();
71
			$this->infosObsOrdonnees = $this->formaterObservations();
70
			// 4) Ajouter commentaires + votes à $this->infosObsOrdonnees
72
			// 4) Ajouter commentaires + votes à $this->infosObsOrdonnees
71
			$this->chargerDeterminations();
73
			$this->chargerDeterminations();
72
 
74
 
73
			$resultat->corps = array(
75
			$resultat->corps = array(
74
				'entete' => $this->navigation->getEntete(),	
76
				'entete' => $this->navigation->getEntete(),	
75
				// 5) Applatissage du tableau afin de garder l'ordre de tri
77
				// 5) Applatissage du tableau afin de garder l'ordre de tri
76
				// (qui n'est pas garanti dans un objet json)
78
				// (qui n'est pas garanti dans un objet json)
77
				'resultats' => array_values($this->infosObsOrdonnees));
79
				'resultats' => array_values($this->infosObsOrdonnees));
78
		}
80
		}
79
		return $resultat;
81
		return $resultat;
80
	}
82
	}
81
 
83
 
82
	// SQL helpers
84
	// SQL helpers
83
	/*
85
	/*
84
	 * Retourne une liste ordonnée d'id d'observation correspondant aux critères
86
	 * Retourne une liste ordonnée d'id d'observation correspondant aux critères
85
	 * passés dans p et aux clauses where/join présentes dans le tableau $req
87
	 * passés dans p et aux clauses where/join présentes dans le tableau $req
86
	 *
88
	 *
87
	 * @param p: $params (filtrés sauf escape-string)
89
	 * @param p: $params (filtrés sauf escape-string)
88
	 * @param req: le tableau représentant les composants de la requete SQL
90
	 * @param req: le tableau représentant les composants de la requete SQL
89
	 * @param db: l'instance de db
91
	 * @param db: l'instance de db
90
	 */
92
	 */
91
	private function getIdObs() {
93
	private function getIdObs() {
92
		$requete = 'SELECT SQL_CALC_FOUND_ROWS id_observation '.
-
 
93
			'FROM del_observation AS do '.
-
 
94
			$this->sql->getJoin().
-
 
-
 
94
		
95
			'WHERE '.$this->sql->getWhere().
95
		$requete = $this->renvoyerRequeteSelonType();
96
			$this->sql->getGroupBy().
-
 
97
			$this->sql->getOrderBy().
-
 
98
			$this->sql->getLimit().
-
 
99
			' -- '.__FILE__.':'.__LINE__;
-
 
-
 
96
		
100
		//Debug::printr($requete);
97
		//Debug::printr($requete);
101
		$resultats = $this->bdd->recupererTous($requete);
98
		$resultats = $this->bdd->recupererTous($requete);
102
 
99
 
103
		$idObs = array();
100
		$idObs = array();
104
		if ($resultats !== false ) {
101
		if ($resultats !== false ) {
105
			foreach ($resultats as $resultat) {
102
			foreach ($resultats as $resultat) {
106
				$idObs[] = $resultat['id_observation'];
103
				$idObs[] = $resultat['id_observation'];
107
			}
104
			}
108
		}
105
		}
109
		return $idObs;
106
		return $idObs;
110
	}
107
	}
-
 
108
	
-
 
109
	private function renvoyerRequeteSelonType() {
-
 
110
		//TODO: interdire l'appel si l'on est pas connecté ?
-
 
111
		if($this->monActiviteEstDemandee()) {
-
 
112
			$gestion_utilisateur = new GestionUtilisateur($this->conteneur);
-
 
113
			$utilisateur = $gestion_utilisateur->getUtilisateurIdentifie();
-
 
114
			$id_utilisateur = $utilisateur['id_utilisateur'];
-
 
115
		
-
 
116
			$requete = $this->sql->getRequeteIdObsMonactiviteTout($id_utilisateur, $this->sql->getLimit()).' -- '.__FILE__.':'.__LINE__;
-
 
117
		
-
 
118
			// Enregistrement de la date de consultation pour ne pas réafficher des évènements déjà consultés
-
 
119
			setcookie('del_date_derniere_consultation_evenements_'+$id_utilisateur, date('Y-m-d H:i:s'), time() + (60*60*24*100),'/');	
-
 
120
		} else {
-
 
121
			$requete = 'SELECT SQL_CALC_FOUND_ROWS id_observation '.
-
 
122
					'FROM del_observation AS do '.
-
 
123
					$this->sql->getJoin().
-
 
124
					'WHERE '.$this->sql->getWhere().
-
 
125
					$this->sql->getGroupBy().
-
 
126
					$this->sql->getOrderBy().
-
 
127
					$this->sql->getLimit().
-
 
128
					' -- '.__FILE__.':'.__LINE__;
-
 
129
		}
-
 
130
		
-
 
131
		return $requete;
-
 
132
	}
-
 
133
	
-
 
134
	private function monActiviteEstDemandee() {
-
 
135
		return isset($this->paramsFiltres['masque.type']) && in_array('monactivite',$this->paramsFiltres['masque.type']);
-
 
136
	}
111
 
137
 
112
	/**
138
	/**
113
	 * Après avoir récupérer seulement les ids dans une première requête, nous récupérons maintenant les infos.
139
	 * Après avoir récupérer seulement les ids dans une première requête, nous récupérons maintenant les infos.
114
	 * Le web service est ainsi 3 fois plus rapide.
140
	 * Le web service est ainsi 3 fois plus rapide.
115
	 */
141
	 */
116
	private function getInfosObs() {
142
	private function getInfosObs() {
117
		$idsObsConcat = implode(',', $this->idsObsOrdonnees);
143
		$idsObsConcat = implode(',', $this->idsObsOrdonnees);
118
		$requete = "SELECT id_observation, nom_sel AS `determination.ns`, nt AS `determination.nt`, ".
144
		$requete = "SELECT id_observation, nom_sel AS `determination.ns`, nt AS `determination.nt`, ".
119
			'nom_sel_nn AS `determination.nn`, famille AS `determination.famille`, '.
145
			'nom_sel_nn AS `determination.nn`, famille AS `determination.famille`, '.
120
			'nom_referentiel AS `determination.referentiel`, ce_zone_geo AS id_zone_geo, pays, '.
146
			'nom_referentiel AS `determination.referentiel`, ce_zone_geo AS id_zone_geo, pays, '.
121
			'zone_geo, lieudit, station, milieu, date_observation, do.mots_cles_texte, '.
147
			'zone_geo, lieudit, station, milieu, date_observation, do.mots_cles_texte, '.
122
			'do.date_transmission, do.commentaire, '.
148
			'do.date_transmission, do.commentaire, '.
123
			'do.ce_utilisateur AS `auteur.id`, do.prenom_utilisateur AS `auteur.prenom`, '.
149
			'do.ce_utilisateur AS `auteur.id`, do.prenom_utilisateur AS `auteur.prenom`, '.
124
			'do.nom_utilisateur AS `auteur.nom`, do.courriel_utilisateur AS `auteur.courriel`, '.
150
			'do.nom_utilisateur AS `auteur.nom`, do.courriel_utilisateur AS `auteur.courriel`, '.
125
			'id_image, date_prise_de_vue AS `date`, hauteur, largeur, nom_original '.
151
			'id_image, date_prise_de_vue AS `date`, hauteur, largeur, nom_original '.
126
			'FROM del_observation AS do '.
152
			'FROM del_observation AS do '.
127
			'	LEFT JOIN del_image AS di ON (do.id_observation = di.ce_observation) '.
153
			'	LEFT JOIN del_image AS di ON (do.id_observation = di.ce_observation) '.
128
			"WHERE id_observation IN ($idsObsConcat) ".
154
			"WHERE id_observation IN ($idsObsConcat) ".
129
			' -- '.__FILE__.':'.__LINE__;
155
			' -- '.__FILE__.':'.__LINE__;
-
 
156
		
-
 
157
		if ($this->monActiviteEstDemandee()) {
-
 
158
			$this->stockerEvenementsObs($idsObsConcat);
-
 
159
		}		
-
 
160
		
130
		//Debug::printr($requete);
161
		//Debug::printr($requete);
131
		return $this->bdd->recupererTous($requete);
162
		return $this->bdd->recupererTous($requete);
132
	}
163
	}
-
 
164
	
-
 
165
	private function stockerEvenementsObs($idsObsConcat) {
-
 
166
					
-
 
167
			$gestion_utilisateur = new GestionUtilisateur($this->conteneur);
-
 
168
			$utilisateur = $gestion_utilisateur->getUtilisateurIdentifie();
-
 
169
			$id_utilisateur = $utilisateur['id_utilisateur'];
-
 
170
			
-
 
171
			$evenements = $this->sql->getEvenementsObs($idsObsConcat, $id_utilisateur);
-
 
172
			
-
 
173
			$this->evenements_obs = array();
-
 
174
			
-
 
175
			foreach($evenements as &$evenement) {
-
 
176
				$this->affecterTypeEvenement($evenement, $id_utilisateur);
-
 
177
				$this->evenementsObs[$evenement['id_observation']][] = $evenement['type'];
-
 
178
			}
-
 
179
	}
-
 
180
 
-
 
181
	private function affecterTypeEvenement(&$evenement, $id_utilisateur) {
-
 
182
				
-
 
183
		// La date maximale détermine le type d'évènement
-
 
184
		switch($evenement['date_max']) {
-
 
185
			// Quelqu'un a fait un nouveau commentaire ou proposition
-
 
186
			case $evenement['date_com']:
-
 
187
				if(!empty($evenement['nom_sel_com'])) {
-
 
188
					$type = 'nouvelle_proposition';
-
 
189
				} else {
-
 
190
					$type = 'nouveau_commentaire';
-
 
191
				}
-
 
192
				
-
 
193
				// J'ai commenté ou fait une proposition
-
 
194
				if($evenement['utilisateur_commentaire'] == $id_utilisateur) {
-
 
195
					$type .= "_vous_a_obs_autre";
-
 
196
				} else {
-
 
197
					$type .= "_autre_sur_obs_vous";
-
 
198
				}
-
 
199
				break;
-
 
200
					
-
 
201
				// Quelqu'un a fait un nouveau vote
-
 
202
			case $evenement['date_vote']:
-
 
203
				$type = 'nouveau vote';
-
 
204
				// $type = "nouveau_vote_vous_a_com_autre";
-
 
205
				 $type = "nouveau_vote_autre_sur_com_vous";
-
 
206
				break;
-
 
207
		
-
 
208
				// Quelqu'un a validé une proposition
-
 
209
			case $evenement['date_validation']:
-
 
210
				$type = "nouvelle_validation_autre_sur_prop_vous";
-
 
211
				// $type = "nouvelle_validation_vous_a_prop_autre";
-
 
212
				break;
-
 
213
				// Cas qui ne devrait jamais arriver
-
 
214
			default:
-
 
215
				$type = 'inconnu';
-
 
216
		}
-
 
217
		$evenement['type'] = $type;
-
 
218
	}
133
 
219
 
134
	/**
220
	/**
135
	 * Les informations étant extraites d'une vue dont les infos des obs sont dupliquées pour chaque image,
221
	 * 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
222
	 * 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.
223
	 * des images.
138
	 */
224
	 */
139
	private function formaterObservations() {
225
	private function formaterObservations() {
140
		$observations = array_map('array_filter', $this->infosObs);
226
		$observations = array_map('array_filter', $this->infosObs);
141
		$obsFormatees = array_flip($this->idsObsOrdonnees);// Permet de garder l'ordre de sortie !
227
		$obsFormatees = array_flip($this->idsObsOrdonnees);// Permet de garder l'ordre de sortie !
142
		foreach ($observations as &$obs) {
228
		foreach ($observations as &$obs) {
143
			$this->nettoyerAuteur($obs);
229
			$this->nettoyerAuteur($obs);
144
 
230
 
145
			$id = $obs['id_observation'];
231
			$id = $obs['id_observation'];
146
			// ATTENTION : la requête retourne de nombreuses lignes avec les mêmes données (test de l'existence nécessaire)
232
			// ATTENTION : la requête retourne de nombreuses lignes avec les mêmes données (test de l'existence nécessaire)
147
			if (is_array($obsFormatees[$id]) === false) {
233
			if (is_array($obsFormatees[$id]) === false) {
148
				$obsFormatees[$id] = $obs;
234
				$obsFormatees[$id] = $obs;
149
			}
235
			}
150
			$obsFormatees[$id]['images'][] = $this->extraireInfosImage($obs);
236
			$obsFormatees[$id]['images'][] = $this->extraireInfosImage($obs);
-
 
237
			
-
 
238
			if(isset($this->evenementsObs[$id])) {
-
 
239
				$obsFormatees[$id]['evenements'] = $this->evenementsObs[$id];
-
 
240
			}
151
		}
241
		}
152
		return $obsFormatees;
242
		return $obsFormatees;
153
	}
243
	}
154
 
244
 
155
	private function nettoyerAuteur(&$obs) {
245
	private function nettoyerAuteur(&$obs) {
156
		// car auteur.id peut être un email, un hash, ou un annuaire_tela.U_ID
246
		// car auteur.id peut être un email, un hash, ou un annuaire_tela.U_ID
157
		// mais dans les deux premiers cas SELECT courriel AS observateur fait déjà l'affaire
247
		// mais dans les deux premiers cas SELECT courriel AS observateur fait déjà l'affaire
158
		if (!isset($obs['auteur.id']) || !is_numeric($obs['auteur.id'])) {
248
		if (!isset($obs['auteur.id']) || !is_numeric($obs['auteur.id'])) {
159
			$obs['auteur.id'] = "0";
249
			$obs['auteur.id'] = "0";
160
		}
250
		}
161
		if (!isset($obs['auteur.nom'])) {
251
		if (!isset($obs['auteur.nom'])) {
162
			$obs['auteur.nom'] = '[inconnu]';
252
			$obs['auteur.nom'] = '[inconnu]';
163
		}
253
		}
164
	}
254
	}
165
 
255
 
166
	private function extraireInfosImage(&$obs) {
256
	private function extraireInfosImage(&$obs) {
167
		$champsImageAffichables = array('id_image', 'date', 'hauteur' , 'largeur', 'nom_original');
257
		$champsImageAffichables = array('id_image', 'date', 'hauteur' , 'largeur', 'nom_original');
168
		$image = array_intersect_key($obs, array_flip($champsImageAffichables));
258
		$image = array_intersect_key($obs, array_flip($champsImageAffichables));
169
		$urlImgTpl = $this->conteneur->getParametre('cel_img_url_tpl');
259
		$urlImgTpl = $this->conteneur->getParametre('cel_img_url_tpl');
170
		$image['binaire.href'] = sprintf($urlImgTpl, $image['id_image'], 'XL');
260
		$image['binaire.href'] = sprintf($urlImgTpl, $image['id_image'], 'XL');
171
 
261
 
172
		unset($obs['id_image'], $obs['date'], $obs['hauteur'], $obs['largeur'], $obs['nom_original']);
262
		unset($obs['id_image'], $obs['date'], $obs['hauteur'], $obs['largeur'], $obs['nom_original']);
173
		return $image;
263
		return $image;
174
	}
264
	}
175
 
265
 
176
	/**
266
	/**
177
	 * Récupérer toutes les déterminations et le nombre de commentaire au total
267
	 * Récupérer toutes les déterminations et le nombre de commentaire au total
178
	 * @param array $observations la liste des observations à mettre à jour
268
	 * @param array $observations la liste des observations à mettre à jour
179
	 */
269
	 */
180
	private function chargerDeterminations() {
270
	private function chargerDeterminations() {
181
		$idObsConcat = implode(',', $this->idsObsOrdonnees);
271
		$idObsConcat = implode(',', $this->idsObsOrdonnees);
182
		$requete = 'SELECT * '.
272
		$requete = 'SELECT * '.
183
			'FROM del_commentaire AS dc '.
273
			'FROM del_commentaire AS dc '.
184
			'WHERE dc.nom_sel IS NOT NULL '.
274
			'WHERE dc.nom_sel IS NOT NULL '.
185
			"AND ce_observation IN ($idObsConcat) ".
275
			"AND ce_observation IN ($idObsConcat) ".
186
			'-- '.__FILE__.':'.__LINE__;
276
			'-- '.__FILE__.':'.__LINE__;
187
		
277
		
188
		$commentaires = $this->chargerNombreCommentaireObs();
278
		$commentaires = $this->chargerNombreCommentaireObs();
189
 
279
 
190
		$propositions = $this->bdd->recupererTous($requete);
280
		$propositions = $this->bdd->recupererTous($requete);
191
		if ($propositions) {
281
		if ($propositions) {
192
			foreach ($propositions as $proposition) {
282
			foreach ($propositions as $proposition) {
193
				$idObs = $proposition['ce_observation'];
283
				$idObs = $proposition['ce_observation'];
194
				$idComment = $proposition['id_commentaire'];
284
				$idComment = $proposition['id_commentaire'];
195
				$comment = $this->formaterDetermination($idComment, $proposition);
285
				$comment = $this->formaterDetermination($idComment, $proposition);
196
				if ($comment) {
286
				if ($comment) {
197
					$this->infosObsOrdonnees[$idObs]['commentaires'][$idComment] = $comment;
287
					$this->infosObsOrdonnees[$idObs]['commentaires'][$idComment] = $comment;
198
				}
288
				}
199
				$this->infosObsOrdonnees[$idObs]['nb_commentaires'] = isset($commentaires[$idObs]) ? $commentaires[$idObs] : 0;
289
				$this->infosObsOrdonnees[$idObs]['nb_commentaires'] = isset($commentaires[$idObs]) ? $commentaires[$idObs] : 0;
200
			}
290
			}
201
		}
291
		}
202
	}
292
	}
203
 
293
 
204
	private function formaterDetermination($propositionId, $propositionInfos) {
294
	private function formaterDetermination($propositionId, $propositionInfos) {
205
		if (!$propositionInfos) return NULL;
295
		if (!$propositionInfos) return NULL;
206
 
296
 
207
		$propositionFormatee = array();
297
		$propositionFormatee = array();
208
		foreach ($this->mappings['commentaires'] as $nomChamp => $nomAttributJson) {
298
		foreach ($this->mappings['commentaires'] as $nomChamp => $nomAttributJson) {
209
			if (isset($propositionInfos[$nomChamp])) {
299
			if (isset($propositionInfos[$nomChamp])) {
210
				$propositionFormatee[$nomAttributJson] = $propositionInfos[$nomChamp];
300
				$propositionFormatee[$nomAttributJson] = $propositionInfos[$nomChamp];
211
			}
301
			}
212
		}
302
		}
213
 
303
 
214
		// Charger les votes sur les déterminations
304
		// Charger les votes sur les déterminations
215
		$requete = "SELECT * FROM del_commentaire_vote WHERE ce_proposition = $propositionId".
305
		$requete = "SELECT * FROM del_commentaire_vote WHERE ce_proposition = $propositionId".
216
			'-- '.__FILE__.':'.__LINE__;
306
			'-- '.__FILE__.':'.__LINE__;
217
		$resultatsVotes = $this->bdd->recupererTous($requete);
307
		$resultatsVotes = $this->bdd->recupererTous($requete);
218
		foreach ($resultatsVotes as $vote) {
308
		foreach ($resultatsVotes as $vote) {
219
			$propositionFormatee['votes'][$vote['id_vote']] = $this->formaterVote($vote);
309
			$propositionFormatee['votes'][$vote['id_vote']] = $this->formaterVote($vote);
220
		}
310
		}
221
 
311
 
222
		$propositionFormatee['nb_commentaires'] = $this->chargerNombreCommentaire($propositionId);
312
		$propositionFormatee['nb_commentaires'] = $this->chargerNombreCommentaire($propositionId);
223
 
313
 
224
		return $propositionFormatee;
314
		return $propositionFormatee;
225
	}
315
	}
226
 
316
 
227
	/**
317
	/**
228
	 * Formater un vote en fonction du fichier de configuration config_votes.ini
318
	 * Formater un vote en fonction du fichier de configuration config_votes.ini
229
	 * @param $votes array()
319
	 * @param $votes array()
230
	 */
320
	 */
231
	private function formaterVote($vote) {
321
	private function formaterVote($vote) {
232
		$voteFormate = array();
322
		$voteFormate = array();
233
		foreach ($vote as $nomChamp => $valeur) {
323
		foreach ($vote as $nomChamp => $valeur) {
234
			$voteFormate[$this->mappings['votes'][$nomChamp]] = $valeur;
324
			$voteFormate[$this->mappings['votes'][$nomChamp]] = $valeur;
235
		}
325
		}
236
		return $voteFormate;
326
		return $voteFormate;
237
	}
327
	}
238
	
328
	
239
	private function chargerNombreCommentaireObs() {
329
	private function chargerNombreCommentaireObs() {
240
		$idObsConcat = implode(',', $this->idsObsOrdonnees);	
330
		$idObsConcat = implode(',', $this->idsObsOrdonnees);	
241
		$requete = 'SELECT ce_observation, COUNT( id_commentaire ) AS nb '.
331
		$requete = 'SELECT ce_observation, COUNT( id_commentaire ) AS nb '.
242
				'FROM del_commentaire '.
332
				'FROM del_commentaire '.
243
				"WHERE ce_observation IN ($idObsConcat) ".
333
				"WHERE ce_observation IN ($idObsConcat) ".
244
				'GROUP BY ce_observation '.
334
				'GROUP BY ce_observation '.
245
				'-- '.__FILE__.':'.__LINE__;
335
				'-- '.__FILE__.':'.__LINE__;
246
		$commentaires = $this->bdd->recupererTous($requete);
336
		$commentaires = $this->bdd->recupererTous($requete);
247
		
337
		
248
		$commentaires_par_obs = array();
338
		$commentaires_par_obs = array();
249
		foreach($commentaires as $commentaire) {
339
		foreach($commentaires as $commentaire) {
250
			$commentaires_par_obs[$commentaire['ce_observation']] = $commentaire['nb'];
340
			$commentaires_par_obs[$commentaire['ce_observation']] = $commentaire['nb'];
251
		}
341
		}
252
		
342
		
253
		return $commentaires_par_obs;
343
		return $commentaires_par_obs;
254
	}
344
	}
255
 
345
 
256
	private function chargerNombreCommentaire($propositionId) {
346
	private function chargerNombreCommentaire($propositionId) {
257
		$requete = 'SELECT COUNT( id_commentaire ) AS nb '.
347
		$requete = 'SELECT COUNT( id_commentaire ) AS nb '.
258
			'FROM del_commentaire '.
348
			'FROM del_commentaire '.
259
			"WHERE ce_proposition = $propositionId ".
349
			"WHERE ce_proposition = $propositionId ".
260
			'GROUP BY ce_proposition '.
350
			'GROUP BY ce_proposition '.
261
			'-- '.__FILE__.':'.__LINE__;
351
			'-- '.__FILE__.':'.__LINE__;
262
		$commentaires = $this->bdd->recuperer($requete);
352
		$commentaires = $this->bdd->recuperer($requete);
263
		return $commentaires ? $commentaires['nb'] : 0;
353
		return $commentaires ? $commentaires['nb'] : 0;
264
	}
354
	}
265
}
355
}