Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1584 Rev 1666
Line 28... Line 28...
28
	   Si la valeur vaut 1, aucun alias ne sera défini (nom du champ d'origine), cf consulter() */
28
	   Si la valeur vaut 1, aucun alias ne sera défini (nom du champ d'origine), cf consulter() */
29
	static $mappings = array(
29
	static $mappings = array(
30
		'observations' => array( // v_del_image
30
		'observations' => array( // v_del_image
31
			"id_observation" => 1,
31
			"id_observation" => 1,
32
			"date_observation" => 1,
32
			"date_observation" => 1,
33
			"date_transmission" => 1, 
33
			"date_transmission" => 1,
34
			"famille" => "determination.famille",
34
			"famille" => "determination.famille",
35
			"nom_sel" => "determination.ns",
35
			"nom_sel" => "determination.ns",
36
			"nom_sel_nn" => "determination.nn",
36
			"nom_sel_nn" => "determination.nn",
37
			"nom_referentiel" => "determination.referentiel",
37
			"nom_referentiel" => "determination.referentiel",
38
			"nt" => "determination.nt",
38
			"nt" => "determination.nt",
Line 105... Line 105...
105
			"nom_ret_nn" => 1,
105
			"nom_ret_nn" => 1,
106
			"nom_referentiel" => 1,
106
			"nom_referentiel" => 1,
107
			"proposition_initiale" => 1),
107
			"proposition_initiale" => 1),
108
	);
108
	);
Line 109... Line 109...
109
 
109
 
110
	
110
 
111
	private $conteneur;
111
	private $conteneur;
112
	private $gestionBdd;
112
	private $gestionBdd;
113
	private $bdd;
113
	private $bdd;
114
	
114
 
115
	public function __construct(Conteneur $conteneur = null) {
115
	public function __construct(Conteneur $conteneur = null) {
116
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
116
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
117
		$this->conteneur->chargerConfiguration('config_votes.ini');
117
		$this->conteneur->chargerConfiguration('config_votes.ini');
118
		$this->conteneur->chargerConfiguration('config_mapping_votes.ini');
118
		$this->conteneur->chargerConfiguration('config_mapping_votes.ini');
119
		$this->conteneur->chargerConfiguration('config_mapping_commentaires.ini');
119
		$this->conteneur->chargerConfiguration('config_mapping_commentaires.ini');
120
		$this->gestionBdd = $conteneur->getGestionBdd();
120
		$this->gestionBdd = $conteneur->getGestionBdd();
121
		$this->bdd = $this->gestionBdd->getBdd();
121
		$this->bdd = $this->gestionBdd->getBdd();
122
	}
122
	}
123
	
123
 
124
	/**
124
	/**
125
	 * Méthode principale de la classe.
125
	 * Méthode principale de la classe.
126
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService 
126
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService
127
	 * pour l'afficher.
127
	 * pour l'afficher.
128
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
128
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
129
	 * @param array $parametres les paramètres situés après le ? dans l'url
129
	 * @param array $parametres les paramètres situés après le ? dans l'url
130
	 * */
130
	 * */
Line 146... Line 146...
146
		$idobs = $ressources[0];
146
		$idobs = $ressources[0];
147
		$protocole = isset($parametres['protocole']) && is_numeric($parametres['protocole']) ?intval($parametres['protocole']) : NULL;
147
		$protocole = isset($parametres['protocole']) && is_numeric($parametres['protocole']) ?intval($parametres['protocole']) : NULL;
Line 148... Line 148...
148
 
148
 
149
		// 1) récupération de l'observation (et de ses images (v_del_image est une vue utilisant des INNER JOIN))
149
		// 1) récupération de l'observation (et de ses images (v_del_image est une vue utilisant des INNER JOIN))
150
		$liaisons = self::chargerObservation($this->bdd, $idobs);
150
		$liaisons = self::chargerObservation($this->bdd, $idobs);
151
	
151
 
152
		if(!$liaisons) {
152
		if(!$liaisons) {
153
			header('HTTP/1.0 404 Not Found');
153
			header('HTTP/1.0 404 Not Found');
154
			// don't die (phpunit)
154
			// don't die (phpunit)
155
			throw(new Exception());
155
			throw(new Exception());
Line 182... Line 182...
182
		// corriger l'appli cliente pour utiliser les index puis supprimer cette ligne
182
		// corriger l'appli cliente pour utiliser les index puis supprimer cette ligne
183
		$observation['images'] = array_values($observation['images']);
183
		$observation['images'] = array_values($observation['images']);
184
		// autre élément de post-processing: le ce_utilisateur de l'observation non-numeric...
184
		// autre élément de post-processing: le ce_utilisateur de l'observation non-numeric...
185
		if(!is_numeric($observation['auteur.id'])) $observation['auteur.id'] = "0";
185
		if(!is_numeric($observation['auteur.id'])) $observation['auteur.id'] = "0";
186
		if(!isset($observation['auteur.nom'])) $observation['auteur.nom'] = '[inconnu]';
186
		if(!isset($observation['auteur.nom'])) $observation['auteur.nom'] = '[inconnu]';
187
	
187
 
Line 188... Line 188...
188
 
188
 
Line 189... Line 189...
189
		if(isset($parametres['justthrow'])) return $observation;
189
		if(isset($parametres['justthrow'])) return $observation;
190
 
190
 
Line 202... Line 202...
202
		$image_fields = DelTk::sqlFieldsToAlias(self::$mappings['images'], NULL, 'dob');
202
		$image_fields = DelTk::sqlFieldsToAlias(self::$mappings['images'], NULL, 'dob');
Line 203... Line 203...
203
 
203
 
204
		// champs de l'annuaire (del_utilisateur): id_utilisateur prenom, nom, courriel
204
		// champs de l'annuaire (del_utilisateur): id_utilisateur prenom, nom, courriel
205
		$annuaire_fields = implode(', ', array("IFNULL(du.prenom, prenom_utilisateur) AS `auteur.prenom`",
205
		$annuaire_fields = implode(', ', array("IFNULL(du.prenom, prenom_utilisateur) AS `auteur.prenom`",
206
											   "IFNULL(du.nom, nom_utilisateur) AS `auteur.nom`",
206
											   "IFNULL(du.nom, nom_utilisateur) AS `auteur.nom`",
207
											   "IFNULL(du.courriel, courriel_utilisateur) AS observateur"));
207
											   "IFNULL(du.courriel, courriel_utilisateur) AS `auteur.courriel`"));
208
		return $db->recupererTous(sprintf(
208
		return $db->recupererTous(sprintf(
209
			'SELECT %s, %s, %s FROM v_del_image as dob'.
209
			'SELECT %s, %s, %s FROM v_del_image as dob'.
210
			' LEFT JOIN del_utilisateur du ON CAST(du.id_utilisateur AS CHAR) = CAST(dob.ce_utilisateur AS CHAR)'.
210
			' LEFT JOIN del_utilisateur du ON CAST(du.id_utilisateur AS CHAR) = CAST(dob.ce_utilisateur AS CHAR)'.
211
			' WHERE dob.id_observation = %d -- %s',
211
			' WHERE dob.id_observation = %d -- %s',
212
			$obs_fields, $image_fields, $annuaire_fields, $idobs, __FILE__ . ':' . __LINE__));
212
			$obs_fields, $image_fields, $annuaire_fields, $idobs, __FILE__ . ':' . __LINE__));
Line 213... Line 213...
213
	}
213
	}
214
 
214
 
215
	
215
 
216
	// Charger les images et leurs votes associés
216
	// Charger les images et leurs votes associés
Line 217... Line 217...
217
	static function chargerVotesImage($db, $images, $protocole = NULL) {
217
	static function chargerVotesImage($db, $images, $protocole = NULL) {
218
		if(!$images) return NULL;
218
		if(!$images) return NULL;
219
 
219
 
220
 		$select = array('votes' =>
220
 		$select = array('votes' =>
221
						array('id_vote', 'ce_image', 'ce_protocole', 'ce_utilisateur', 'valeur', 'date', /* del_image_vote */),
221
						array('id_vote', 'ce_image', 'ce_protocole', 'ce_utilisateur', 'valeur', 'date', /* del_image_vote */),
222
						'protocole' => 
222
						'protocole' =>
223
						array('id_protocole', 'intitule', 'descriptif', 'tag' /* del_image_protocole */ ));
223
						array('id_protocole', 'intitule', 'descriptif', 'tag' /* del_image_protocole */ ));
224
		$vote_fields = DelTk::sqlFieldsToAlias(self::$mappings['votes'], $select['votes'], 'v'); // "v": cf alias dans la requête
224
		$vote_fields = DelTk::sqlFieldsToAlias(self::$mappings['votes'], $select['votes'], 'v'); // "v": cf alias dans la requête
225
		$proto_fields = DelTk::sqlFieldsToAlias(self::$mappings['protocoles'], $select['protocole'], 'p');
225
		$proto_fields = DelTk::sqlFieldsToAlias(self::$mappings['protocoles'], $select['protocole'], 'p');
226
		
226
 
227
		$where = array();
227
		$where = array();
Line 243... Line 243...
243
			$vote_fields,
243
			$vote_fields,
244
			$proto_fields,
244
			$proto_fields,
245
			($where ? implode(' AND ', $where) : 1),
245
			($where ? implode(' AND ', $where) : 1),
246
			$ordreDesIdsRecus,
246
			$ordreDesIdsRecus,
247
			__FILE__ . ':' . __LINE__);
247
			__FILE__ . ':' . __LINE__);
248
		
248
 
249
		//echo "REQUETE: $req"; exit;
249
		//echo "REQUETE: $req"; exit;
Line 250... Line 250...
250
 
250
 
251
		return $db->recupererTous($req);
251
		return $db->recupererTous($req);
252
	}
252
	}
253
	
253
 
254
	/**
254
	/**
255
	 * Formater une observation depuis une ligne liaison
255
	 * Formater une observation depuis une ligne liaison
256
	 * @param $liaison liaison issue de la recherche
256
	 * @param $liaison liaison issue de la recherche
257
	 * @return $observation l'observation mise en forme
257
	 * @return $observation l'observation mise en forme
Line 267... Line 267...
267
 
267
 
268
		// pour chaque vote
268
		// pour chaque vote
269
		foreach ($votes as $vote) {
269
		foreach ($votes as $vote) {
270
			$imgid = $vote['image.id'];
270
			$imgid = $vote['image.id'];
271
			$protoid = $vote['protocole.id'];
271
			$protoid = $vote['protocole.id'];
272
			
272
 
273
			// un vote sans image associée ? est-ce possible ?
273
			// un vote sans image associée ? est-ce possible ?
274
			// if(!isset($images[$imgid])) continue;
274
			// if(!isset($images[$imgid])) continue;
275
			
275
 
276
			if(!array_key_exists('protocoles_votes', $images[$imgid]) ||
276
			if(!array_key_exists('protocoles_votes', $images[$imgid]) ||
277
			   !array_key_exists($protoid, $images[$imgid]['protocoles_votes'])) {
277
			   !array_key_exists($protoid, $images[$imgid]['protocoles_votes'])) {
278
				// extrait les champs spécifique au protocole (le LEFT JOIN de chargerVotesImage les ramène en doublons
278
				// extrait les champs spécifique au protocole (le LEFT JOIN de chargerVotesImage les ramène en doublons
279
				$protocole = array_intersect_key($vote, array_flip(self::$mappings['protocoles']));
279
				$protocole = array_intersect_key($vote, array_flip(self::$mappings['protocoles']));