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