44,7 → 44,7 |
'ce_zone_geo AS id_zone_geo', 'zone_geo', 'lieudit', |
'station', 'milieu', 'date_observation', 'mots_cles_texte', 'date_transmission', |
'ce_utilisateur AS `auteur.id`', 'prenom_utilisateur AS `auteur.prenom`', |
'nom_utilisateur AS `auteur.nom`', 'courriel_utilisateur AS `auteur.courriel` ', |
'nom_utilisateur AS `auteur.nom`', 'courriel_utilisateur AS observateur', |
'commentaire'), |
'di' => array('id_image', 'date_prise_de_vue AS `date`', 'hauteur',/* 'largeur','nom_original' // apparemment inutilisés */), |
'du' => array('prenom', 'nom', 'courriel'), |
69,12 → 69,12 |
$obs_merged = array(); |
foreach($obs as $o) { |
$id = $o['id_observation']; |
|
|
// car auteur.id peut être un email, un hash, ou un annuaire_tela.U_ID |
// mais dans les deux premiers cas SELECT courriel AS observateur fait déjà l'affaire |
if(!isset($o['auteur.id']) || !is_numeric($o['auteur.id'])) $o['auteur.id'] = "0"; |
if(!isset($o['auteur.nom'])) $o['auteur.nom'] = '[inconnu]'; |
|
|
$image = array_intersect_key($o, array_flip(array('id_image', 'date', 'hauteur' , 'largeur', 'nom_original'))); |
$image['binaire.href'] = sprintf($url_pattern, $image['id_image']); |
unset($o['id_image'], $o['date'], $o['hauteur'], $o['largeur'], $o['nom_original']); |
90,51 → 90,51 |
* pour l'afficher. |
* @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2) |
* @param array $parametres les paramètres situés après le ? dans l'url |
**/ |
**/ |
public function consulter($ressources, $parametres) { |
// SELECT, à terme, pourrait affecter getInfos(), mais en aucune manière getIdObs() |
$req = array('select' => array(), 'join' => array(), 'where' => array(), 'groupby' => array(), 'having' => array()); |
|
|
// toujours nécessaire puisque nous tapons sur v_del_image qui INNER JOIN cel_images, or nous voulons certes |
// toutes les images, mais nous voulons $limite observations uniques. |
$req['groupby'][] = 'vdi.id_observation'; |
|
|
$db = $this->bdd; |
|
|
// filtrage de l'INPUT |
$params = DelTk::requestFilterParams($parametres, DelTk::$parametres_autorises, $this->conteneur); |
|
|
$params['masque.tag'] = DelTk::buildTagsAST(@$parametres['masque.tag'], 'OR', ','); |
|
|
// ... et paramètres par défaut |
$params = array_merge(DelTk::$default_params, $params); |
|
|
// création des contraintes (masques) |
DelTk::sqlAddConstraint($params, $db, $req); |
self::sqlAddConstraint($params, $db, $req, $this->conteneur); |
self::sqlAddMasqueConstraint($params, $db, $req, $this->conteneur); |
|
|
// 1) grunt-work: *la* requête de récupération des id valides (+ SQL_CALC_FOUND_ROWS) |
$idobs_tab = self::getIdObs($params, $req, $db); |
// idobs est une liste (toujours ordonnée) des id d'observations recherchées |
$idobs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'), $idobs_tab)); |
|
|
if($idobs) { |
$total = $db->recuperer('SELECT FOUND_ROWS() AS c'); $total = intval($total['c']); |
|
|
// 2) récupération des données nécessaires pour ces observations (obs + images) |
// ici les champs récupérés sont issus de self::$sql_fields_liaisons mais sans préfixes |
// car tout provient de v_del_image |
$obs_unfmt = self::getInfos($idobs, $db); |
|
|
// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output |
$observations = self::reformateObservation($obs_unfmt, $this->conteneur->getParametre('url_images')); |
|
|
// 4) récupération des données nécessaires pour ces observations (commentaires + votes) |
// modifie $observations |
$this->configurer(); |
$this->chargerDeterminations($observations); |
|
|
// 5) restauration de l'ordre souhaité initialement |
$observations = self::sortArrayByArray($observations, $idobs); |
} else { |
141,12 → 141,12 |
$observations = array(); |
$total = 0; |
} |
|
|
// 6) JSON output |
$resultat = new ResultatService(); |
$resultat->corps = array('entete' => DelTk::makeJSONHeader($total, $params, Config::get('url_service')), |
'resultats' => $observations); |
|
|
return $resultat; |
} |
|
179,7 → 179,7 |
' %s'. // having (si commentaires) |
' ORDER BY %s %s %s'. |
' LIMIT %d, %d -- %s', |
|
|
$req['join'] ? implode(' ', $req['join']) : '', |
$req['where'] ? implode(' AND ', $req['where']) : 'TRUE', |
|
373,7 → 373,7 |
$idComment = $proposition['id_commentaire']; |
$comment = $this->formaterDetermination($idComment, $proposition); |
if($comment) $observations['"' . $idObs . '"']['commentaires'][$idComment] = $comment; |
|
|
} |
} |
|
390,7 → 390,7 |
// Charger les votes sur les déterminations |
$resultatsVotes = $this->bdd->recupererTous( |
sprintf('SELECT * FROM del_commentaire_vote WHERE ce_proposition = %d', $commentId)); |
|
|
foreach ($resultatsVotes as $vote) { |
$proposition_formatee['votes'][$vote['id_vote']] = $this->formaterVote($vote); |
} |