Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 2137 → Rev 2138

/branches/v1.10-sodium/services/modules/0.1/observations/ListeObservations.php
73,7 → 73,7
$this->chargerDeterminations();
 
$resultat->corps = array(
'entete' => $this->navigation->getEntete(),
'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));
107,28 → 107,29
}
private function renvoyerRequeteSelonType() {
if($this->monActiviteEstDemandee()) {
$gestion_utilisateur = new GestionUtilisateur($this->conteneur);
if($this->monActiviteEstDemandee()) {
$gestion_utilisateur = new GestionUtilisateur($this->conteneur);
$utilisateur = $gestion_utilisateur->getUtilisateur();
if ($utilisateur['connecte'] === true) {
$id_utilisateur = $utilisateur['id_utilisateur'];
if ($utilisateur['connecte'] === true) {
$id_utilisateur = $utilisateur['id_utilisateur'];
$requete = $this->sql->getRequeteIdObsMonactiviteTout($id_utilisateur, $this->sql->getLimit()).' -- '.__FILE__.':'.__LINE__;
// Enregistrement de la date de consultation pour ne pas réafficher des événements déjà consultés
$gestion_utilisateur->setDerniereDateConsultationEvenements($id_utilisateur, date('Y-m-d H:i:s'));
} else {
//TODO: que faire si l'on n'est pas connecté ?
}
} else {
$requete = 'SELECT SQL_CALC_FOUND_ROWS id_observation '.
'FROM del_observation AS do '.
$this->sql->getJoin().
'WHERE '.$this->sql->getWhere().
$this->sql->getGroupBy().
$this->sql->getOrderBy().
$this->sql->getLimit().
' -- '.__FILE__.':'.__LINE__;
}
} else {
$requete = 'SELECT SQL_CALC_FOUND_ROWS id_observation '.
'FROM del_observation AS do '.
$this->sql->getJoin().
'WHERE '.$this->sql->getWhere().
$this->sql->getGroupBy().
$this->sql->getOrderBy().
$this->sql->getLimit().
' -- '.__FILE__.':'.__LINE__;
}
/*echo "REQ: "; var_dump($requete);
exit;*/
return $requete;
}
155,8 → 156,8
"WHERE id_observation IN ($idsObsConcat) ".
' -- '.__FILE__.':'.__LINE__;
if ($this->monActiviteEstDemandee()) {
$this->stockerEvenementsObs($idsObsConcat);
if ($this->monActiviteEstDemandee()) {
$this->stockerEvenementsObs($idsObsConcat);
}
//Debug::printr($requete);
163,11 → 164,11
return $this->bdd->recupererTous($requete);
}
private function stockerEvenementsObs($idsObsConcat) {
$gestion_utilisateur = new GestionUtilisateur($this->conteneur);
$utilisateur = $gestion_utilisateur->getUtilisateur();
$id_utilisateur = $utilisateur['id_utilisateur'];
private function stockerEvenementsObs($idsObsConcat) {
$gestion_utilisateur = new GestionUtilisateur($this->conteneur);
$utilisateur = $gestion_utilisateur->getUtilisateur();
$id_utilisateur = $utilisateur['id_utilisateur'];
$evenements = $this->sql->getEvenementsObs($idsObsConcat, $id_utilisateur);
$this->evenements_obs = array();
181,37 → 182,37
$type = "";
$infos = "";
// La date maximale détermine le type d'évènement
switch($evenement['date_max']) {
// Quelqu'un a fait un nouveau commentaire ou proposition
case $evenement['date_com']:
if(!empty($evenement['nom_sel_com'])) {
// La date maximale détermine le type d'évènement
switch($evenement['date_max']) {
// Quelqu'un a fait un nouveau commentaire ou proposition
case $evenement['date_com']:
if(!empty($evenement['nom_sel_com'])) {
$type = 'nouvelle_proposition';
$infos = $evenement['proposition_commentaire_nom_sel'];
} else {
$infos = $evenement['proposition_commentaire_nom_sel'];
} else {
$type = 'nouveau_commentaire';
$infos = $evenement['proposition_commentaire_texte'];
$infos = $evenement['proposition_commentaire_texte'];
}
// J'ai commenté ou fait une proposition
if($evenement['utilisateur_commentaire'] == $id_utilisateur) {
$type .= "_vous_a_obs_autre";
} else {
} else {
$type .= "_autre_sur_obs_vous";
}
}
break;
 
// Quelqu'un a répondu à un de mes commentaires ou une de mes propositions
case $evenement['date_com_reponse']:
if(!empty($evenement['nom_sel_com_parent'])) {
$type = 'nouvelle_reponse_autre_sur_proposition_vous';
} else {
$type = 'nouvelle_reponse_autre_sur_commentaire_vous';
if(!empty($evenement['nom_sel_com_parent'])) {
$type = 'nouvelle_reponse_autre_sur_proposition_vous';
} else {
$type = 'nouvelle_reponse_autre_sur_commentaire_vous';
}
$infos = $evenement['proposition_commentaire_texte_commente'];
break;
// Quelqu'un a fait un nouveau vote
case $evenement['date_vote']:
$infos = $evenement['proposition_commentaire_texte_commente'];
break;
// Quelqu'un a fait un nouveau vote
case $evenement['date_vote']:
$type = 'nouveau_vote';
// Sur une proposition qui n'est pas à moi sur une observation à moi
if($evenement['utilisateur_commentaire_vote'] != $evenement['utilisateur_observation'] && $evenement['utilisateur_commentaire_vote'] != $id_utilisateur) {
220,19 → 221,19
// Sur une proposition qui est à moi sur une observation (à moi ou non)
$type .= "_autre_sur_com_vous";
}
$infos = $evenement['proposition_commentaire_nom_sel_votee'];
break;
// Quelqu'un a validé une proposition
case $evenement['date_validation']:
$infos = $evenement['proposition_commentaire_nom_sel_votee'];
break;
// Quelqu'un a validé une proposition
case $evenement['date_validation']:
$type = "nouvelle_validation_autre_sur_prop_vous";
$infos = $evenement['proposition_validee_nom_sel'];
// $type = "nouvelle_validation_vous_a_prop_autre";
break;
// Cas qui ne devrait jamais arriver
default:
$infos = $evenement['proposition_validee_nom_sel'];
// $type = "nouvelle_validation_vous_a_prop_autre";
break;
// Cas qui ne devrait jamais arriver
default:
$type = 'inconnu';
$infos = "";
$infos = "";
}
$infos_evts = array('type' => $type, 'infos_complementaires' => $infos);
357,12 → 358,12
}
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__;
$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();
369,8 → 370,8
foreach($commentaires as $commentaire) {
$commentaires_par_obs[$commentaire['ce_observation']] = $commentaire['nb'];
}
return $commentaires_par_obs;
return $commentaires_par_obs;
}
 
private function chargerNombreCommentaire($propositionId) {
/branches/v1.10-sodium/services/configurations/config.defaut.ini
245,6 → 245,7
masques_possibles = "masque,masque.famille,masque.genre,
masque.referentiel, masque.ns, masque.nn, masque.auteur, masque.date,
masque.commune, masque.departement, masque.tag_cel, masque.espece,
masque.pninscritsseulement,
navigation.depart, navigation.limite, tri, ordre, masque.type, masque.pays"
; Valeurs par défaut pour les paramètres de l'url :
parametres_valeurs_defaut = "
289,6 → 290,7
masque.commune, masque.departement, masque.id_zone_geo,
masque.auteur, masque.date, masque.type, masque.milieu,
masque.tag, masque.tag_cel, masque.tag_del,
masque.pninscritsseulement,
navigation.depart, navigation.limite, tri, ordre, format, masque.pays"
; Valeurs par défaut pour les paramètres de l'url :
parametres_valeurs_defaut = "
/branches/v1.10-sodium/services/bibliotheque/Sql.php
70,11 → 70,11
}
 
private function etreAppliImg() {
return $this->appli === 'IMG' ? true : false;
return $this->appli === 'IMG';
}
 
private function etreAppliObs() {
return $this->appli === 'OBS' ? true : false;
return $this->appli === 'OBS';
}
 
public function getRequeteSql() {
158,8 → 158,6
}
 
/**
 
*
* @param $p les paramètres (notamment de masque) passés par l'URL et déjà traités/filtrés (sauf quotes)
* @param $req le tableau, passé par référence représentant les composants de la requête à bâtir
*/
175,6 → 173,7
$this->ajouterContrainteNn();
$this->ajouterContrainteReferentiel();
$this->ajouterContrainteCommune();
$this->ajouterContraintePnInscrits();
}
 
private function ajouterContrainteAuteur() {
379,6 → 378,21
$this->ajouterJoinObsSiNecessaire();
}
}
 
/**
* Si masque.pninscritsseulement vaut true, les observations ayant un tag
* "plantnet" mais dont l'auteur n'est pas inscrit à TB seront éliminées
* (décision FlorisTic 2016-09)
*/
protected function ajouterContraintePnInscrits() {
if (isset($this->parametres['masque.pninscritsseulement'])) {
// avec la classe ParametresFiltrage, on ne passe là que si le masque vaut 1
$motifMotClePlantnet = "'%plantnet%'";
$this->addWhere('masque.pninscritsseulement', "((do.mots_cles_texte NOT LIKE $motifMotClePlantnet OR do.mots_cles_texte IS NULL) OR do.ce_utilisateur != 0)");
 
$this->ajouterJoinObsSiNecessaire();
}
}
private function ajouterJoinObsSiNecessaire() {
if ($this->etreAppliImg()) {
391,10 → 405,11
return $typeJointure.' JOIN del_observation AS do ON (di.ce_observation = do.id_observation) ';
}
 
// la constrainte de nostre bon roy
public function ajouterConstrainteAppliObs() {
$this->ajouterContrainteTagCel();
$this->ajouterContrainteType();
// TODO : ATTENTION -> vue que l'on utilise une vue basée sur les images, nous devons grouper par obs
// TODO : ATTENTION -> vu que l'on utilise une vue basée sur les images, nous devons grouper par obs
$this->addGroupBy('do.id_observation');
}
 
491,6 → 506,7
$this->ajouterContrainteTri();
$this->ajouterContrainteTagCel();
$this->ajouterContrainteTagDel();
$this->ajouterContraintePnInscrits();
}
 
private function ajouterContrainteMilieu() {
/branches/v1.10-sodium/services/bibliotheque/ParametresFiltrage.php
194,6 → 194,8
$this->filtrerCommune();
$this->filtrerType();
 
$this->filtrerPnInscrits();
 
$this->filtrerTagCel();
$this->filtrerTagDel();
}
344,6 → 346,14
}
}
 
protected function filtrerPnInscrits() {
if (isset($this->parametres['masque.pninscritsseulement'])) {
if ($this->parametres['masque.pninscritsseulement'] == 1) {
$this->parametresFiltres['masque.pninscritsseulement'] = 1;
}
}
}
 
/** masque.commune (zone_geo)
* TODO: que faire avec des '%' en INPUT ?
* Le masque doit *permettre* une regexp et non l'imposer. Charge au client de faire son travail.
/branches/v1.10-sodium/src/org/tela_botanica/del/client/modeles/InformationsRecherche.java
32,6 → 32,8
 
private String commune;
 
private boolean pnInscritsSeulement;
 
private String famille;
 
private String tag;
127,6 → 129,14
public String getPays() {
return pays;
}
 
public boolean getPnInscritsSeulement() {
return pnInscritsSeulement;
}
 
public void setPnInscritsSeulement(boolean pnInscritsSeulement) {
this.pnInscritsSeulement = pnInscritsSeulement;
}
public String getCommune() {
return commune;
246,7 → 256,8
chaine += estNonNull(famille) ? "&masque.famille=" + URL.encodeQueryString(famille) : "";
chaine += estNonNull(auteur) ? "&masque.auteur=" + URL.encodeQueryString(auteur) : "";
chaine += estNonNull(pays) ? "&masque.pays=" + URL.encodeQueryString(pays) : "";
chaine += pnInscritsSeulement ? "&masque.pninscritsseulement=" + URL.encodeQueryString("1") : "";
 
String urlCourante = Window.Location.getHref();
Config config = new Config();
String urlAppliImg = config.getUrl("pictoflora");
262,12 → 273,12
chaine += triParNbCommentaires != ModeTri.PAS_DE_TRI ? "&tri=nb_commentaires" : "";
chaine += triParNbCommentaires != ModeTri.PAS_DE_TRI ? "&ordre=" + triParNbCommentaires : "";
}
 
chaine += triParDateObservation != ModeTri.PAS_DE_TRI ? "&tri=date_observation" : "";
chaine += triParDateObservation != ModeTri.PAS_DE_TRI ? "&ordre=" + triParDateObservation : "";
chaine += triParDatePublication != ModeTri.PAS_DE_TRI ? "&tri=date_transmission" : "";
chaine += triParDatePublication != ModeTri.PAS_DE_TRI ? "&ordre=" + triParDatePublication : "";
 
return chaine;
}
 
/branches/v1.10-sodium/src/org/tela_botanica/del/client/i18n/Vocabulary.properties
230,6 → 230,8
pays = Pays
commune = Commune
famille = Famille (Latin)
pnInscritsSeulement = Masquer les observations smartphone anonymes
pnISCourt = Obs mobiles anonymes
tag = Tag
tagDel = Tag pictoflora
tagCel = Tag cel
/branches/v1.10-sodium/src/org/tela_botanica/del/client/i18n/Vocabulary.java
394,6 → 394,24
String departement();
 
/**
* Translated "Masquer les observations smartphone anonymes".
*
* @return translated "Masquer les observations smartphone anonymes"
*/
@DefaultStringValue("Masquer les observations smartphone anonymes")
@Key("pnInscritsSeulement")
String pnInscritsSeulement();
 
/**
* Translated "Obs mobiles anonymes".
*
* @return translated "Obs mobiles anonymes"
*/
@DefaultStringValue("Obs mobiles anonymes")
@Key("pnISCourt")
String pnISCourt();
 
/**
* Translated "Détermination la plus probable : ".
*
* @return translated "Détermination la plus probable : "
/branches/v1.10-sodium/src/org/tela_botanica/del/client/cache/CacheClient.java
111,7 → 111,10
String protocole = Location.getParameter("protocole");
String statutParam = Location.getParameter("masque.type");
String paysParam = Location.getParameter("masque.pays");
 
String pnInscritsSeulement = Location.getParameter("masque.pninscritsseulement");
boolean pnInscritsSeulementBool = pnInscritsSeulement.equals("1");
 
String page = Location.getParameter("page");
Integer pageInt = null;
try {
141,6 → 144,7
rechercheParArguments.setDate(date);
rechercheParArguments.setTag(tag);
rechercheParArguments.setPays(paysParam);
rechercheParArguments.setPnInscritsSeulement(pnInscritsSeulementBool);
if (protocole != null && !protocole.equals("")) {
CacheClient.getInstance().setIdProtocoleEnAttente(protocole);
232,11 → 236,11
}
}
}
 
public void setIdProtocoleEnAttente(String idProtocole) {
idProtocoleEnAttente = idProtocole;
}
 
public String getIdProtocoleEnAttente() {
return idProtocoleEnAttente;
}
/branches/v1.10-sodium/src/org/tela_botanica/del/client/composants/moteurrecherche/MoteurRechercheVue.ui.xml
81,15 → 81,18
<g:TextBox ui:field="motCleCel" />
</g:HTMLPanel>
<g:HTMLPanel ui:field="conteneurMotCleDel" styleName="{style.champRecherche}">
<g:HTMLPanel ui:field="conteneurMotCleDel" styleName="{style.champRecherche}">
<g:Label text="{constants.tagDel}" styleName="petit"/>
<g:TextBox ui:field="motCleDel" />
</g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
 
<g:Button styleName="{style.boutonRecherche} {style.rechercherAvance}" ui:field="boutonRechercheAvancee" text="{constants.rechercher}"></g:Button>
<g:HTMLPanel styleName="nettoyage" />
 
<g:CheckBox ui:field="casePnInscritsSeulement" styleName="{style.casePnInscritsSeulement}"></g:CheckBox>
<g:Label text="{constants.pnInscritsSeulement}" ui:field="labelPnInscritsSeulement" styleName="{style.labelPnInscritsSeulement}" />
</g:HTMLPanel>
<g:HTMLPanel styleName="droite">
/branches/v1.10-sodium/src/org/tela_botanica/del/client/composants/moteurrecherche/MoteurRecherchePresenteur.java
56,6 → 56,8
 
public String getContientMots();
 
public boolean getPnInscritsSeulement();
 
public String getDepartement();
 
public HasWidgets getCommune();
78,6 → 80,8
 
public void setContientMots(String mots);
 
public void setPnInscritsSeulement(boolean valeur);
 
public void setValeurDepartement(String dpt);
 
public void chargerValeursRecherchePrecedente(InformationsRecherche informationsRecherche);
382,6 → 386,7
informationRecherche.setDate(vue.getDate());
informationRecherche.setReferentiel(vue.getReferentiel());
informationRecherche.setPays(vue.getPays());
informationRecherche.setPnInscritsSeulement(vue.getPnInscritsSeulement());
}
if(CacheClient.getInstance().getReferentielNonModifiable()) {
/branches/v1.10-sodium/src/org/tela_botanica/del/client/composants/moteurrecherche/MoteurRechercheVue.java
14,6 → 14,7
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
40,7 → 41,7
@UiField
Panel rechercheAvancee, taxon, commune, zoneRss, conteneurMotCle, conteneurMotCleCel, conteneurMotCleDel ;
@UiField
Label lienRechercheAvancee, recherchePrecedente;
Label lienRechercheAvancee, recherchePrecedente, labelPnInscritsSeulement;
@UiField
Button boutonRecherche, boutonRechercheAvancee, boutonFermer, boutonVider;
@UiField
47,6 → 48,8
TextBox recherchePrincipale, contientMots, departement, famille, genre, motCle, motCleCel, motCleDel, auteur, date;
@UiField
ListBox referentiel, pays;
@UiField
CheckBox casePnInscritsSeulement;
 
public MoteurRechercheVue(String labelRecherche) {
initWidget(uiBinder.createAndBindUi(this));
134,6 → 137,14
public void setContientMots(String mots) {
contientMots.setText(mots);
}
 
public boolean getPnInscritsSeulement() {
return casePnInscritsSeulement.getValue();
}
 
public void setPnInscritsSeulement(boolean valeur) {
casePnInscritsSeulement.setValue(valeur);
}
public String getPays() {
return pays.getValue(pays.getSelectedIndex());
209,6 → 220,7
motCleDel.setText(informationsRecherche.getMotClefDel());
auteur.setText(informationsRecherche.getAuteur());
date.setText(informationsRecherche.getDate());
casePnInscritsSeulement.setValue(informationsRecherche.getPnInscritsSeulement());
for(int i = 0; i < referentiel.getItemCount(); i++) {
if(referentiel.getValue(i).equals(informationsRecherche.getReferentiel())) {
286,6 → 298,9
if (informationRecherche.getReferentiel() != null && !informationRecherche.getReferentiel().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().referentiel() + ":" + informationRecherche.getReferentiel() + " ");
}
if (informationRecherche.getPnInscritsSeulement()) {
texteRecherchePrecedente.append(I18n.getVocabulary().pnISCourt() + ":non");
}
recherchePrecedente.setText(texteRecherchePrecedente.toString());
}
/branches/v1.10-sodium/src/org/tela_botanica/del/client/composants/moteurrecherche/MoteurRecherche.css
93,6 → 93,14
left: 25px;
}
 
.casePnInscritsSeulement {
float: left;
}
 
.labelPnInscritsSeulement {
margin-top: 4px;
}
 
.zoneRecherche {
}
.zoneRss {