Subversion Repositories eFlore/Applications.del

Rev

Rev 1451 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1451 Rev 1490
Line 14... Line 14...
14
 *				   ex: http://www.tela-botanica.org/appli:cel-img:%09dXL.jpg
14
 *				   ex: http://www.tela-botanica.org/appli:cel-img:%09dXL.jpg
15
 */
15
 */
Line 16... Line 16...
16
 
16
 
Line 17... Line 17...
17
// http://localhost/del/services/0.1/observations/#id => une observation donnée et ses images, SANS LES propositions & nombre de commentaire
17
// http://localhost/del/services/0.1/observations/#id => une observation donnée et ses images, SANS LES propositions & nombre de commentaire
Line 18... Line 18...
18
 
18
 
Line 19... Line 19...
19
require_once(dirname(__FILE__) . '/ListeObservations.php');
19
require_once(dirname(__FILE__) . '/../DelTk.php');
20
 
20
 
Line 155... Line 155...
155
			throw(new Exception());
155
			throw(new Exception());
156
		}
156
		}
Line 157... Line 157...
157
 
157
 
158
		// 2) réassocie les images "à plat" à leur observation (merge)
158
		// 2) réassocie les images "à plat" à leur observation (merge)
159
		// TODO: appliquer le formattage dépendant de la configuration en fin de processus
159
		// TODO: appliquer le formattage dépendant de la configuration en fin de processus
160
		$observations = ListeObservations::reformateObservationSimpleIndex($liaisons, $this->conteneur->getParametre('url_images'));
160
		$observations = self::reformateObservationSimpleIndex($liaisons, $this->conteneur->getParametre('url_images'));
161
		// bien que dans notre cas il n'y est qu'une seule observation, issu de plusieurs images
161
		// bien que dans notre cas il n'y ait qu'une seule observation, issue de plusieurs images
162
		// dans $liaisons, $observation est un tableau (cf reformateObservation).
162
		// dans $liaisons, $observation est un tableau (cf reformateObservation).
163
		// Considérons la chose comme telle au cas où le webservice doivent demain demander une paire
163
		// Considérons la chose comme telle au cas où le webservice doivent demain demander une paire
Line 164... Line 164...
164
		// d'observations (... convergence ListeObservations)
164
		// d'observations (... convergence avec ListeObservations & DelTk)
Line 165... Line 165...
165
 
165
 
166
		$observation = array_pop($observations);
166
		$observation = array_pop($observations);
Line 195... Line 195...
195
	}
195
	}
Line 196... Line 196...
196
 
196
 
197
	static function chargerObservation($db, $idobs) {
197
	static function chargerObservation($db, $idobs) {
198
		// prenom_utilisateur, nom_utilisateur, courriel_utilisateur sont exclus du mapping
198
		// prenom_utilisateur, nom_utilisateur, courriel_utilisateur sont exclus du mapping
199
		// car nous utilisons une construction SQL élaborée pour eux (cf IFNULL ci-dessous)
199
		// car nous utilisons une construction SQL élaborée pour eux (cf IFNULL ci-dessous)
Line 200... Line 200...
200
		$obs_fields = self::sqlFieldsToAlias(self::$mappings['observations'], NULL, 'dob');
200
		$obs_fields = DelTk::sqlFieldsToAlias(self::$mappings['observations'], NULL, 'dob');
Line 201... Line 201...
201
 
201
 
202
		$image_fields = self::sqlFieldsToAlias(self::$mappings['images'], NULL, 'dob');
202
		$image_fields = DelTk::sqlFieldsToAlias(self::$mappings['images'], NULL, 'dob');
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
Line 219... Line 219...
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 = self::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
Line 225... Line 225...
225
		$proto_fields = self::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 282... Line 282...
282
						'commentaires' =>
282
						'commentaires' =>
283
						array('id_commentaire', 'ce_observation', 'ce_proposition', 'ce_commentaire_parent', 'texte',
283
						array('id_commentaire', 'ce_observation', 'ce_proposition', 'ce_commentaire_parent', 'texte',
284
							  'ce_utilisateur', 'utilisateur_prenom', 'utilisateur_nom', 'utilisateur_courriel',
284
							  'ce_utilisateur', 'utilisateur_prenom', 'utilisateur_nom', 'utilisateur_courriel',
285
							  'nom_sel', 'nom_sel_nn', 'nom_ret', 'nom_ret_nn', 'nt', 'famille', 'nom_referentiel', 'date',
285
							  'nom_sel', 'nom_sel_nn', 'nom_ret', 'nom_ret_nn', 'nt', 'famille', 'nom_referentiel', 'date',
286
							  'proposition_initiale'));
286
							  'proposition_initiale'));
287
		$vote_fields = self::sqlFieldsToAlias(self::$mappings['votes'], $select['votes'], 'cv'); // "v": cf alias dans la requête
287
		$vote_fields = DelTk::sqlFieldsToAlias(self::$mappings['votes'], $select['votes'], 'cv'); // "v": cf alias dans la requête
288
		$comment_fields = self::sqlFieldsToAlias(self::$mappings['commentaires'], $select['commentaires'], 'dc');
288
		$comment_fields = DelTk::sqlFieldsToAlias(self::$mappings['commentaires'], $select['commentaires'], 'dc');
Line 289... Line 289...
289
 
289
 
290
		$commentaires = $db->recupererTous(sprintf(
290
		$commentaires = $db->recupererTous(sprintf(
291
			"SELECT %s, %s FROM del_commentaire as dc".
291
			"SELECT %s, %s FROM del_commentaire as dc".
292
			// LEFT JOIN optionnel, mais explicatif:
292
			// LEFT JOIN optionnel, mais explicatif:
Line 324... Line 324...
324
			$ret[$commentid]['votes'][$voteid] = $vote;
324
			$ret[$commentid]['votes'][$voteid] = $vote;
325
		}
325
		}
326
		$observation['commentaires'] = $ret;
326
		$observation['commentaires'] = $ret;
327
	}
327
	}
Line 328... Line -...
328
 
-
 
329
 
-
 
330
	/* SQL helper
328
 
331
	   Converti un tableau associatif et un préfix optionnel en une chaîne de champs adéquate
-
 
332
	   à un SELECT MySQL.
329
	// cf ListeObservation::reformateObservation() et ListeImages2::reformateImagesDoubleIndex()
333
	   $select (optionnel) restreint les champs mappés aux valeurs de $select.
330
    // (trop de variétés de formatage, à unifier côté client pour unifier côté backend ...)
334
	   Si $select n'est pas fourni, toutes les clefs présentes dans $map seront présentes dans
331
	static function reformateObservationSimpleIndex($obs, $url_pattern = '') {
335
	   le SELECT en sortie */
332
		// XXX: cf Observation.php::consulter(), nous pourriouns ici
336
	static function sqlFieldsToAlias($map, $select = NULL, $prefix = NULL) {
333
		// conserver les valeurs vides (pour les phptests notamment, ou non)
337
		if($select) $arr = array_intersect_key($map, array_flip($select));
334
		$obs = array_map('array_filter', $obs);
-
 
335
		$obs_merged = array();
338
		else $arr = $map;
336
		foreach($obs as $o) {
339
		$keys = array_keys($arr);
-
 
340
 
337
			$id = $o['id_observation'];
-
 
338
			$image = array_intersect_key($o, array_flip(array('id_image', 'date', 'hauteur' , 'largeur', 'nom_original')));
341
		if($prefix) array_walk($keys, create_function('&$val, $k, $prefix', '$val = sprintf("%s.`%s`", $prefix, $val);'), $prefix);
339
			$image['binaire.href'] = sprintf($url_pattern, $image['id_image']);
-
 
340
			unset($o['id_image'], $o['date'], $o['hauteur'], $o['largeur'], $o['nom_original']);
-
 
341
			if(!isset($obs_merged[$id])) $obs_merged[$id] = $o;
342
		else array_walk($keys, create_function('&$val, $k', '$val = sprintf("`%s`", $val);'));
342
			$obs_merged[$id]['images'][$image['id_image']] = $image;
343
 
343
		}
344
		return implode(', ', array_map(create_function('$v, $k', 'return sprintf("%s AS `%s`", $k, $v);'), $arr, $keys));
344
		return $obs_merged;
345
	}
345
	}
346
	
346
 
347
}
347
}