/trunk/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) { |
/trunk/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 = " |
/trunk/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() { |
/trunk/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. |
/trunk/services |
---|
Property changes: |
Modified: svn:mergeinfo |
Merged /branches/v1.10-sodium/services:r2138-2139 |
/trunk/src/org/tela_botanica/del/client/modeles/InformationsRecherche.java |
---|
1,6 → 1,7 |
package org.tela_botanica.del.client.modeles; |
import org.tela_botanica.del.client.config.Config; |
import org.tela_botanica.del.client.Del; |
import com.google.gwt.http.client.URL; |
import com.google.gwt.user.client.Window; |
32,6 → 33,8 |
private String commune; |
private boolean pnInscritsSeulement; |
private String famille; |
private String tag; |
127,6 → 130,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 → 257,9 |
chaine += estNonNull(famille) ? "&masque.famille=" + URL.encodeQueryString(famille) : ""; |
chaine += estNonNull(auteur) ? "&masque.auteur=" + URL.encodeQueryString(auteur) : ""; |
chaine += estNonNull(pays) ? "&masque.pays=" + URL.encodeQueryString(pays) : ""; |
Del.LogVersFirebug("Avant de composer l'URL, pninscritsseulement vaut : " + pnInscritsSeulement); |
chaine += "&masque.pninscritsseulement=" + (pnInscritsSeulement ? URL.encodeQueryString("1") : URL.encodeQueryString("0")); |
String urlCourante = Window.Location.getHref(); |
Config config = new Config(); |
String urlAppliImg = config.getUrl("pictoflora"); |
262,12 → 275,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; |
} |
/trunk/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 |
/trunk/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 : " |
/trunk/src/org/tela_botanica/del/client/cache/CacheClient.java |
---|
14,6 → 14,7 |
import org.tela_botanica.del.client.modeles.Protocole; |
import org.tela_botanica.del.client.modeles.Utilisateur; |
import org.tela_botanica.del.client.utils.URLUtils; |
import org.tela_botanica.del.client.Del; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.dom.client.Document; |
111,7 → 112,18 |
String protocole = Location.getParameter("protocole"); |
String statutParam = Location.getParameter("masque.type"); |
String paysParam = Location.getParameter("masque.pays"); |
String pnInscritsSeulement = Location.getParameter("masque.pninscritsseulement"); |
// filtrage par défaut |
boolean pnInscritsSeulementBool = true; |
if (pnInscritsSeulement != null) { |
Del.LogVersFirebug("le paramètre n'était pas NULL; on le teste"); |
// un jour on aura "0" et ça annulera le paramètre par défaut |
pnInscritsSeulementBool = pnInscritsSeulement.equals("1"); |
Del.LogVersFirebug("Il vaut : " + pnInscritsSeulementBool); |
} |
String page = Location.getParameter("page"); |
Integer pageInt = null; |
try { |
141,6 → 153,7 |
rechercheParArguments.setDate(date); |
rechercheParArguments.setTag(tag); |
rechercheParArguments.setPays(paysParam); |
rechercheParArguments.setPnInscritsSeulement(pnInscritsSeulementBool); |
if (protocole != null && !protocole.equals("")) { |
CacheClient.getInstance().setIdProtocoleEnAttente(protocole); |
232,11 → 245,11 |
} |
} |
} |
public void setIdProtocoleEnAttente(String idProtocole) { |
idProtocoleEnAttente = idProtocole; |
} |
public String getIdProtocoleEnAttente() { |
return idProtocoleEnAttente; |
} |
/trunk/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 { |
/trunk/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"> |
/trunk/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()) { |
/trunk/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()); |
} |
/trunk |
---|
Property changes: |
Modified: svn:mergeinfo |
Merged /branches/v1.10-sodium:r2138-2139 |