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