Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1385 → Rev 1386

/trunk/services/modules/0.1/observations/ListeObservations2.php
66,7 → 66,7
'ce_utilisateur AS `auteur.id`', 'prenom_utilisateur AS `auteur.prenom`',
'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é */),
'di' => array('id_image', 'date_prise_de_vue AS `date`', 'hauteur',/* 'largeur','nom_original' // apparemment inutilisés */),
'du' => array('prenom', 'nom', 'courriel'),
'dc' => array('commentaire')
);
89,6 → 89,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(!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']);
98,7 → 104,10
return $obs_merged;
}
 
// utilisée uniquement par Observation.php
static function reformateObservationSimpleIndex($obs, $url_pattern = '') {
// XXX: cf Observation.php::consulter(), nous pourriouns ici
// conserver les valeurs vides (pour les phptests notamment, ou non)
$obs = array_map('array_filter', $obs);
$obs_merged = array();
foreach($obs as $o) {
480,61 → 489,55
if(!$propositions) return;
foreach ($propositions as $proposition) {
$idObs = $proposition['ce_observation'];
$observations['"' . $idObs . '"']['commentaires'][] = $this->formaterDeterminations($proposition);
$idComment = $proposition['id_commentaire'];
$comment = $this->formaterDetermination($idComment, $proposition);
if($comment) $observations['"' . $idObs . '"']['commentaires'][$idComment] = $comment;
}
}
 
/**
* Charger les votes sur les déterminations
* @param Array $observations le tableau des observations à mettre à jour
* */
private function chargerVotes($ids_proposition, &$propositions) {
$resultatsVotes = $this->bdd->recupererTous(sprintf('SELECT * FROM del_commentaire_vote WHERE ce_proposition IN (%s)',
implode(',', $ids_proposition)));
private function formaterDetermination($commentId, $proposition) {
if(!$proposition) return NULL;
 
$proposition_formatee = array('nb_commentaires' => '0');
foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {
if (isset($proposition[$nomOriginal])) {
$proposition_formatee[$nomFinal] = $proposition[$nomOriginal];
}
}
 
// 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) {
$propositions[$vote['ce_proposition']]['votes'][$vote['id_vote']] = $this->formaterVote($vote);
$proposition_formatee['votes'][$vote['id_vote']] = $this->formaterVote($vote);
}
}
 
/**
* Charger le nombre de commentaires (sans détermination) associé à l'observation
* @param Array $observations le tableau des observatins à mettre à jour
* */
private function chargerNombreCommentaire($ids_proposition, &$propositions) {
$listeCommentaires = $this->bdd->recupererTous(sprintf('SELECT ce_commentaire_parent, ce_proposition, COUNT( id_commentaire ) AS nb '.
'FROM del_commentaire WHERE ce_proposition IN (%s) GROUP BY ce_proposition',
implode(',', $ids_proposition)));
 
// chargerNombreCommentaire()
// Charger le nombre de commentaires (sans détermination) associé à l'observation
$listeCommentaires = $this->bdd->recupererTous(sprintf(
'SELECT ce_commentaire_parent, ce_proposition, COUNT( id_commentaire ) AS nb '.
'FROM del_commentaire WHERE ce_proposition = %d GROUP BY ce_proposition -- %s',
$commentId, __FILE__ . ':' . __LINE__));
foreach ($listeCommentaires as $ligneProposition) {
// ce test sert à exclure les proposition de 1er niveau qui sont elles aussi des commentaires
if($ligneProposition['ce_commentaire_parent'] != null && $ligneProposition['ce_commentaire_parent'] != 0) {
$propositions[$ligneProposition['ce_commentaire_parent']]['nb_commentaires'] = $ligneProposition['nb'];
if($ligneProposition['ce_commentaire_parent']) {
// TODO/debug: id_commentaire_parent != $commentId ??
// reprendre la "logique" du code... moins de boucles, moins de requêtes, ...
if($ligneProposition['ce_commentaire_parent'] != $commentId) {
// restore_error_handler();
error_log(sprintf("possible error: nb_commentaires = %s: comment = %d, parent = %d, %s",
$ligneProposition['nb'], $commentId, $ligneProposition['ce_commentaire_parent'], __FILE__));
}
$proposition_formatee['nb_commentaires'] = $ligneProposition['nb'];
} else {
$propositions[$ligneProposition['ce_proposition']]['observation']['nb_commentaires'] = $ligneProposition['nb'];
$proposition_formatee['observation']['nb_commentaires'] = $ligneProposition['nb'];
}
}
}
 
/**
*
* Formate une liste de proposition en fonction du fichier de configuration
*/
private function formaterDeterminations($proposition) {
if(!$proposition) return array();
$propositions_format = array();
$ids_proposition[] = $proposition['id_commentaire'];
 
$proposition_formatee = array('nb_commentaires' => '0');
foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) {
if (isset($proposition[$nomOriginal])) {
$proposition_formatee[$nomFinal] = $proposition[$nomOriginal];
}
}
$propositions_format[$proposition['id_commentaire']] = $proposition_formatee;
// modifie $propositions_format
$this->chargerVotes($ids_proposition, $propositions_format);
// modifie $propositions_format
$this->chargerNombreCommentaire($ids_proposition, $propositions_format);
return $propositions_format;
return $proposition_formatee;
}
 
/**