Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 2108 → Rev 2109

/trunk/src/org/tela_botanica/del/client/utils/Analytics.java
New file
0,0 → 1,70
package org.tela_botanica.del.client.utils;
 
import org.tela_botanica.del.client.Del;
import org.tela_botanica.del.client.config.Config;
 
public class Analytics {
 
/**
* Envoie une notification à Google Analytics, comme quoi la page "url" a été visitée;
* passer par pageVisitee() pour s'assurer qu'on est bien en prod
*
* @param url adresse ou surnom de la page visitée
*/
public static native void pageVisiteeNatif(String url) /*-{
if (url == "") {
url = $wnd.location.href;
}
$wnd.ga('send', 'pageview', url);
}-*/;
 
/**
* Proxy pour evenementNatif() qui n'envoie l'événement que si on est en prod
*/
public static void pageVisitee(String url) {
Config config = new Config();
if (config.isProd()) {
//Del.LogVersFirebug("Page vue: " + url);
Analytics.pageVisiteeNatif(url);
} else {
}
}
 
public static void pageVisitee() {
pageVisitee("");
}
 
/**
* Envoie une notification à Google Analytics, comme quoi l'événement "action" a été déclenché
* sur la ressource "categorie" - passer par evenement() pour s'assurer qu'on
* est bien en prod
*
* @param categorie - la ressource sur laquelle l'utilisateur a agi
* @param action - ce que l'utilisateur a fait avec cette ressource
* @param label - un bout de JSON avec des détails
* @param nombre - nombre d'actions à enregistrer
*/
public static native void evenementNatif(String categorie, String action, String label, int nombre) /*-{
$wnd.ga('send', 'event', categorie, action, label, nombre);
}-*/;
 
/**
* Proxy pour evenementNatif() qui n'envoie l'événement que si on est en prod
*/
public static void evenement(String categorie, String action, String label, int nombre) {
Config config = new Config();
if (config.isProd()) {
//Del.LogVersFirebug("Evenement: " + categorie + ", " + action + ", " + label + ", " + nombre);
Analytics.evenementNatif(categorie, action, label, nombre);
}
}
 
public static void evenement(String categorie, String action, String label) {
Analytics.evenement(categorie, action, label, 1);
}
 
public static void evenement(String categorie, String action) {
Analytics.evenement(categorie, action, "", 1);
}
}
/trunk/src/org/tela_botanica/del/client/vues/identiplante/moteur/MoteurIdentiplantePresenteur.java
18,6 → 18,7
import org.tela_botanica.del.client.services.rest.ObservationServiceConcret;
import org.tela_botanica.del.client.services.rest.UtilisateurServiceConcret;
import org.tela_botanica.del.client.services.rest.async.ActiviteUtilisateurCallback;
import org.tela_botanica.del.client.utils.Analytics;
import org.tela_botanica.del.client.vues.identiplante.resultats.ResultatsIdentiplantePresenteur;
import org.tela_botanica.del.client.vues.identiplante.resultats.ResultatsIdentiplanteVue;
 
126,31 → 127,39
@Override
public void onClick(ClickEvent event) {
activerOnglet("tous");
// stats
Analytics.pageVisitee("Identiplante/tous");
}
});
vue.getOngletADeterminer().addClickHandler(new ClickHandler() {
vue.getOngletADeterminer().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
activerOnglet("adeterminer");
// stats
Analytics.pageVisitee("Identiplante/adeterminer");
}
});
vue.getOngletAConfirmer().addClickHandler(new ClickHandler() {
vue.getOngletAConfirmer().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
activerOnglet("aconfirmer");
// stats
Analytics.pageVisitee("Identiplante/aconfirmer");
}
});
 
vue.getOngletValidees().addClickHandler(new ClickHandler() {
vue.getOngletValidees().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
activerOnglet("validees");
// stats
Analytics.pageVisitee("Identiplante/validees");
}
});
vue.getOngletMonActivite().addClickHandler(new ClickHandler() {
vue.getOngletMonActivite().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// S'il y a de nouveau évènements sur l'obs, on les affichera tous sur la même page (dans la limite de 50)
161,6 → 170,8
}
activerOnglet("monactivite");
// stats
Analytics.pageVisitee("Identiplante/monactivite");
vue.cacherNbEvenements();
CacheClient.reinitialiserTitreOngletNavigateur();
}
/trunk/src/org/tela_botanica/del/client/services/rest/MotsClesServiceConcret.java
5,6 → 5,7
import org.tela_botanica.del.client.services.rest.async.AjoutMotsClesImageCallback;
import org.tela_botanica.del.client.services.rest.async.ListeMotsClesImageCallBack;
import org.tela_botanica.del.client.services.rest.async.PHPCallback.ModeRequete;
import org.tela_botanica.del.client.utils.Analytics;
import org.tela_botanica.del.client.services.rest.async.SuppressionMotCleImageCallback;
 
import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
53,7 → 54,8
} catch (Exception e) {
//TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
}
 
// stats
Analytics.evenement("mot-cle-image", "ajout", "{\"mot-cle\": \"" + motCle + "\", \"image\": \"" + idImage + "\"}");
}
 
private String assemblerChaineRequeteAjout(String idImage, String motCle) {
73,5 → 75,7
} catch (Exception e) {
//TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
}
// stats
Analytics.evenement("mot-cle-image", "suppression", "{\"id_mot-cle\": \"" + idMotCle + "\"}");
}
}
/trunk/src/org/tela_botanica/del/client/services/rest/ObservationServiceConcret.java
7,6 → 7,7
import org.tela_botanica.del.client.services.rest.async.DepublicationObservationCallBack;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
import org.tela_botanica.del.client.services.rest.async.PHPCallback.ModeRequete;
import org.tela_botanica.del.client.utils.Analytics;
import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
 
public class ObservationServiceConcret implements ObservationService {
65,5 → 66,7
} catch (Exception e) {
//TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
}
// stats
Analytics.evenement("observation", "depublication", "{\"observation\": {\"id\": \"" + observation.getId() + "\", \"auteur\": \"" + observation.getAuteur() + "\"}}");
}
}
/trunk/src/org/tela_botanica/del/client/services/rest/VoteDeterminationServiceConcret.java
6,7 → 6,7
import org.tela_botanica.del.client.services.rest.async.AjoutVoteDeterminationCallback;
import org.tela_botanica.del.client.services.rest.async.ListeVotesDeterminationCallback;
import org.tela_botanica.del.client.services.rest.async.PHPCallback.ModeRequete;
 
import org.tela_botanica.del.client.utils.Analytics;
import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
import com.google.gwt.user.client.Window;
 
44,6 → 44,9
} catch (Exception e) {
//TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
}
// stats
Analytics.evenement("vote", "ajout", "{\"vote\": {\"valeur\": \"" + voteDetermination.getVote() + "\", \"auteur\": \"" + voteDetermination.getAuteur()
+ "\"}, \"proposition\": {\"auteur\": \"" + voteDetermination.getPropositionDetermination().getAuteur() + "\", \"nom_sci\": \"" + voteDetermination.getPropositionDetermination().getEspece() + "\", \"referentiel\": \"" + voteDetermination.getPropositionDetermination().getReferentiel() + "\"}}");
}
 
@Override
65,6 → 68,9
} catch (Exception e) {
//TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
}
// stats
Analytics.evenement("vote", "modification", "{\"vote\": {\"valeur\": \"" + voteDetermination.getVote() + "\", \"auteur\": \"" + voteDetermination.getAuteur()
+ "\"}, \"proposition\": {\"auteur\": \"" + voteDetermination.getPropositionDetermination().getAuteur() + "\", \"nom_sci\": \"" + voteDetermination.getPropositionDetermination().getEspece() + "\", \"referentiel\": \"" + voteDetermination.getPropositionDetermination().getReferentiel() + "\"}}");
}
 
private String assemblerChaineRequeteAjoutModif(VoteDetermination voteDetermination) {
/trunk/src/org/tela_botanica/del/client/services/rest/CommentaireServiceConcret.java
1,13 → 1,15
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.services.rest.async.AjoutCommentaireCallback;
import org.tela_botanica.del.client.services.rest.async.ListeCommentairesCallback;
import org.tela_botanica.del.client.services.rest.async.PHPCallback.ModeRequete;
import org.tela_botanica.del.client.services.rest.async.SuppressionCommentaireCallback;
 
import org.tela_botanica.del.client.utils.Analytics;
import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
import com.google.gwt.http.client.URL;
 
19,17 → 21,17
Config config = new Config();
this.baseUrl = config.getServiceBaseUrl();
}
 
public CommentaireServiceConcret(Config config) {
this.baseUrl = config.getServiceBaseUrl();
}
 
@Override
public void ajouterCommentaire(Commentaire commentaire, AjoutCommentaireCallback callback) {
 
String urlService = baseUrl+"commentaires/";
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.PUT, urlService);
 
callback.setMode(ModeRequete.AJOUT);
String chainePost = assemblerChaineRequeteAjoutModif(commentaire);
try {
37,8 → 39,10
} catch (Exception e) {
//TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
}
// stats
Analytics.evenement("commentaire", "ajout", "{\"auteur\": \"" + commentaire.getAuteur() + "\", \"observation\": \"" + commentaire.getObservation().getId() + "\"}");
}
 
private String assemblerChaineRequeteAjoutModif(Commentaire commentaire) {
 
String chaineRequete = "";
87,5 → 91,7
} catch (Exception e) {
//TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
}
// stats
Analytics.evenement("commentaire", "suppression", "{\"auteur\": \"" + commentaire.getAuteur() + "\", \"observation\": \"" + commentaire.getObservation().getId() + "\"}");
}
}
/trunk/src/org/tela_botanica/del/client/services/rest/VoteProtocoleServiceConcret.java
6,6 → 6,7
import org.tela_botanica.del.client.modeles.VoteProtocole;
import org.tela_botanica.del.client.services.rest.async.AjoutVoteProtocoleCallback;
import org.tela_botanica.del.client.services.rest.async.PHPCallback.ModeRequete;
import org.tela_botanica.del.client.utils.Analytics;
import org.tela_botanica.del.client.services.rest.async.VoteProtocoleCallback;
 
import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
46,6 → 47,8
} catch (Exception e) {
//TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
}
// stats
Analytics.evenement("vote", "ajout", "{\"valeur\": \"" + voteProtocole.getVote() + "\", \"auteur\": \"" + voteProtocole.getAuteur() + "\", \"id_image\": \"" + idImage + "\"}");
}
 
private String assemblerChaineRequeteAjoutModif(VoteProtocole voteProtocole) {
65,6 → 68,8
} catch (Exception e) {
//TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
}
// stats
Analytics.evenement("vote", "modification", "{\"valeur\": \"" + voteProtocole.getVote() + "\", \"auteur\": \"" + voteProtocole.getAuteur() + "\", \"id_image\": \"" + idImage + "\"}");
}
 
@Override
77,5 → 82,7
} catch (Exception e) {
//TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
}
// stats
Analytics.evenement("vote", "suppression", "{\"valeur\": \"" + voteProtocole.getVote() + "\", \"auteur\": \"" + voteProtocole.getAuteur() + "\", \"id_image\": \"" + idImage + "\"}");
}
}
/trunk/src/org/tela_botanica/del/client/services/rest/PropositionDeterminationServiceConcret.java
1,9 → 1,12
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.services.rest.async.PHPCallback.ModeRequete;
import org.tela_botanica.del.client.utils.Analytics;
import org.tela_botanica.del.client.services.rest.async.PropositionDeterminationCallBack;
import org.tela_botanica.del.client.services.rest.async.SuppressionCommentaireCallback;
import org.tela_botanica.del.client.services.rest.async.SuppressionPropositionDeterminationCallback;
40,6 → 43,9
} catch (Exception e) {
//TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
}
// stats
Analytics.evenement("proposition", "ajout", "{\"observation\": {\"id\": \"" + proposition.getObservation().getId() + "\", \"auteur\": \"" + proposition.getObservation().getAuteur()
+ "\"}, \"proposition\": {\"auteur\": \"" + proposition.getAuteur() + "\", \"nom_sci\": \"" + proposition.getEspece() + "\", \"referentiel\": \"" + proposition.getReferentiel() + "\"}}");
}
private String assemblerChaineRequeteAjoutModif(PropositionDetermination proposition) {
91,6 → 97,9
} catch (Exception e) {
//TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
}
// stats
Analytics.evenement("proposition", "suppression", "{\"observation\": {\"id\": \"" + proposition.getObservation().getId() + "\", \"auteur\": \"" + proposition.getObservation().getAuteur()
+ "\"}, \"proposition\": {\"auteur\": \"" + proposition.getAuteur() + "\", \"nom_sci\": \"" + proposition.getEspece() + "\", \"referentiel\": \"" + proposition.getReferentiel() + "\"}}");
}
108,5 → 117,9
} catch (Exception e) {
//TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
}
// stats
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
Analytics.evenement("proposition", "validation", "{\"validateur\": \"" + utilisateur.getNomPrenomFormate() + "\", \"observation\": {\"id\": \"" + proposition.getObservation().getId() + "\", \"auteur\": \"" + proposition.getObservation().getAuteur()
+ "\"}, \"proposition\": {\"auteur\": \"" + proposition.getAuteur() + "\", \"nom_sci\": \"" + proposition.getEspece() + "\", \"referentiel\": \"" + proposition.getReferentiel() + "\"}}");
}
}
/trunk/src/org/tela_botanica/del/client/Del.java
2,12 → 2,11
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.gestionhistorique.GestionnaireHistorique;
import org.tela_botanica.del.client.config.Config;
 
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.History;
import com.google.web.bindery.event.shared.UmbrellaException;
import com.google.gwt.core.client.*;
import com.google.gwt.user.client.Window;
 
public class Del implements EntryPoint {
/trunk/src/org/tela_botanica/del/client/config/Config.java
12,7 → 12,6
*/
public class Config {
 
/**
* Tableau associatif contenant les identifiants des urls externes
*/
23,11 → 22,15
*/
private LinkedHashMap<String, String> infos = new LinkedHashMap<String, String>();
 
/** true si l'appli est en prod, false si elle est en test */
protected boolean prod;
 
/**
* Constructeur sans argument
*/
public Config() {
// on utilise le dictionnaire d'internationalisation pour lire les variables du fichier javascript
// @WTF quel intérêt de copier un dictionnaire dans un autre ??
Dictionary configuration = Dictionary.getDictionary("configuration");
urls.put("base", configuration.get("serviceBaseUrl"));
urls.put("del", configuration.get("delUrl"));
48,6 → 51,8
urls.put("serviceUtilisateursBaseUrl", configuration.get("serviceUtilisateursBaseUrl"));
urls.put("serviceAuthBaseUrl", configuration.get("serviceAuthBaseUrl"));
 
prod = Boolean.parseBoolean(configuration.get("prod"));
 
infos.put("popupOptions", "menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes");
}
67,6 → 72,10
}
return url;
}
 
public boolean isProd() {
return prod;
}
public String getInfo(String code) {
String info = "";