/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 = ""; |