Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1932 → Rev 1933

/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");
}