Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1932 → Rev 1933

/trunk/services/modules/0.1/observations/ListeObservations.php
65,18 → 65,16
 
// 2) récupération des données nécessaires pour ces observations (obs + images)
$this->infosObs = $this->getInfosObs();
 
// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output
$this->infosObsOrdonnees = $this->formaterObservations();
 
// 4) Ajouter commentaires + votes à $this->infosObsOrdonnees
$this->chargerDeterminations();
 
$resultat->corps = array(
'entete' => $this->navigation->getEntete(),
//'resultats' => array_values($this->infosObsOrdonnees));
// TODO : renvoyer un vrai tableau et non un objet
'resultats' => $this->infosObsOrdonnees);
'entete' => $this->navigation->getEntete(),
// 5) Applatissage du tableau afin de garder l'ordre de tri
// (qui n'est pas garanti dans un objet json)
'resultats' => array_values($this->infosObsOrdonnees));
}
return $resultat;
}
187,6 → 185,8
'WHERE dc.nom_sel IS NOT NULL '.
"AND ce_observation IN ($idObsConcat) ".
'-- '.__FILE__.':'.__LINE__;
$commentaires = $this->chargerNombreCommentaireObs();
 
$propositions = $this->bdd->recupererTous($requete);
if ($propositions) {
197,6 → 197,7
if ($comment) {
$this->infosObsOrdonnees[$idObs]['commentaires'][$idComment] = $comment;
}
$this->infosObsOrdonnees[$idObs]['nb_commentaires'] = isset($commentaires[$idObs]) ? $commentaires[$idObs] : 0;
}
}
}
235,6 → 236,23
}
return $voteFormate;
}
private function chargerNombreCommentaireObs() {
$idObsConcat = implode(',', $this->idsObsOrdonnees);
$requete = 'SELECT ce_observation, COUNT( id_commentaire ) AS nb '.
'FROM del_commentaire '.
"WHERE ce_observation IN ($idObsConcat) ".
'GROUP BY ce_observation '.
'-- '.__FILE__.':'.__LINE__;
$commentaires = $this->bdd->recupererTous($requete);
$commentaires_par_obs = array();
foreach($commentaires as $commentaire) {
$commentaires_par_obs[$commentaire['ce_observation']] = $commentaire['nb'];
}
return $commentaires_par_obs;
}
 
private function chargerNombreCommentaire($propositionId) {
$requete = 'SELECT COUNT( id_commentaire ) AS nb '.
/trunk/services/bibliotheque/Sql.php
390,9 → 390,14
}
 
private function ajouterContrainteType() {
// Les contraintes régissant les onglets sont issus de la réunion dont le compte rendu
// disponible ici : http://tela-botanica.net/intranet/wakka.php?wiki=Octobre2014
// Ce lien est à modifier pour pointer vers toute nouvelle réunion modifiant ce fonctionnement
if (isset($this->parametres['masque.type'])) {
if (array_key_exists('adeterminer', $this->parametres['masque.type'])) {
// Récupèration de toutes les observations qui on le tag "aDeterminer" *ou* qui n'ont pas de nom d'espèce
// A DETERMINER : toutes les observations qui ont le tag "aDeterminer"
// *ou* qui n'ont pas de nom d'espèce
// *ou* qui ont la "certitude" à ("aDeterminer" *ou* "douteux")
$this->addWhere('masque.type', '('.
'do.certitude = "aDeterminer" '.
402,23 → 407,77
'OR do.nom_sel_nn = 0 '.// il ne DEVRAIT pas y avoir d'entrées à 0, mais il y en a quand-même !!
')');
}
if (array_key_exists('validees', $this->parametres['masque.type'])) {
// Récupèration de toutes les observations ayant un commentaire doté de proposition_retenue = 1
// VALIDEES : toutes les observations ayant un commentaire doté de proposition_retenue = 1
// ou bien possédant une proposition initiale avec un nom valide ayant totalisé un score d'au moins 4
// (ce qui correspond à au moins deux votes positifs dans la plupart des cas, dont un identifié)
$sous_requete_score_prop_votees = $this->getSousRequeteSommeVotesPropositions();
$this->addJoin('INNER JOIN del_commentaire AS dc '.
'ON (do.id_observation = dc.ce_observation AND dc.proposition_retenue = 1) ');
'ON ( '.
'do.id_observation = dc.ce_observation '.
'AND ( '.
'dc.proposition_retenue = 1 OR '.
'( '.
'dc.proposition_initiale = 1 '.
'AND dc.nom_sel_nn != 0 '.
'AND dc.nom_sel_nn IS NOT NULL '.
' AND dc.id_commentaire IN ('.$sous_requete_score_prop_votees.' >= 4) '.
') '.
') '.
')'
);
}
if(array_key_exists('aconfirmer', $this->parametres['masque.type'])) {
// A CONFIRMER : toutes les observations moins les validées et à confirmer
// i.e. : des observations avec un nom valide, qui ne sont pas à déterminer
// (ni certitude "aDeterminer" ou "douteuse", ni mot clé),
// ne possédant pas de proposition officiellement retenue
// et ayant une proposition initiale totalisant un score de moins de 4
$sous_requete_score_prop_votees = $this->getSousRequeteSommeVotesPropositions();
$this->addWhere('masque.type',
'('.
'do.id_observation IN ('.
'SELECT dc.ce_observation FROM del_commentaire dc WHERE dc.proposition_retenue = 0'.
' OR ( '.
'dc.proposition_initiale = 1 '.
'AND dc.nom_sel_nn != 0 '.
'AND dc.nom_sel_nn IS NOT NULL '.
'AND dc.id_commentaire IN ('.$sous_requete_score_prop_votees.' < 4) '.
') '.
') AND do.id_observation NOT IN ('.
'SELECT dc.ce_observation FROM del_commentaire dc '.
'WHERE '.
' dc.proposition_retenue = 1'.
') '.
'AND do.certitude != "douteux" AND do.certitude != "aDeterminer" '.
'AND do.mots_cles_texte NOT LIKE "%aDeterminer%" '.
'AND do.nom_sel_nn != 0 '.
'AND do.nom_sel_nn IS NOT NULL'.
') '
);
}
 
if (array_key_exists('endiscussion', $this->parametres['masque.type'])) {
$nbreCommentaire =(int) ($this->conteneur->getParametre('observations.nb_commentaires_discussion'));
$this->addWhere('masque.type', '(SELECT COUNT(id_commentaire) FROM del_commentaire AS dc '.
"WHERE ce_observation = id_observation) > $nbreCommentaire ");
}
 
if ($this->etreAppliImg()) {
$this->addJoin('LEFT JOIN del_observation AS do ON (di.ce_observation = do.id_observation) ');
}
}
}
private function getSousRequeteSommeVotesPropositions() {
// ATTENTION : un vote identifié compte 3 votes anonymes (dans les deux sens)
return 'SELECT ce_proposition '.
'FROM del_commentaire_vote dcv '.
'GROUP BY ce_proposition HAVING '.
'SUM(CASE '.
' WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP \'^-?[0-9]+$\' != 0 THEN 3 '.
' WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP \'^-?[0-9]+$\' != 0 THEN -3 '.
' WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP \'^-?[0-9]+$\' = 0 THEN 1 '.
' WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP \'^-?[0-9]+$\' = 0 THEN -1 '.
'END '.
') ';
}
 
public function ajouterConstrainteAppliImg() {
$this->ajouterContrainteMilieu();
567,7 → 626,12
switch ($this->parametres['tri']) {
case 'date_observation' :
$this->addOrderBy("date_observation $ordre, id_observation $ordre");
break;
case 'nb_commentaires' :
$sql_nb_comms = '(SELECT COUNT(id_commentaire) FROM del_commentaire AS dc WHERE ce_observation = id_observation)';
$this->addOrderBy("$sql_nb_comms $ordre, id_observation $ordre");
break;
case 'date_transmission' :
default:
$this->addOrderBy("do.date_transmission $ordre, id_observation $ordre");
}