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; |
} |
|
/** |