Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 2066 → Rev 2067

/trunk/services/bibliotheque/Sql.php
784,8 → 784,11
"dcv.ce_utilisateur as utilisateur_vote_commentaire, do.ce_utilisateur as utilisateur_observation, ".
"dcp.ce_validateur as utilisateur_validation, dcvp.ce_utilisateur as utilisateur_commentaire_vote, ".
"dcpr.ce_utilisateur as utilisateur_commentaire_reponse";
$requete = "SELECT DISTINCT id_observation, ".$sous_champs_utilisateurs.", ".$sous_champ_date_max.", ".$sous_champ_date." ".
 
$sous_champs_infos = "dc.nom_sel as proposition_commentaire_nom_sel, dc.texte as proposition_commentaire_texte, dcp.nom_sel as proposition_validee_nom_sel, ".
"dcvp.nom_sel as proposition_commentaire_nom_sel_votee, dcpr.texte as proposition_commentaire_texte_commente";
$requete = "SELECT DISTINCT id_observation, ".$sous_champs_utilisateurs.", ".$sous_champ_date_max.", ".$sous_champ_date.", ".$sous_champs_infos." ".
"FROM del_observation do ".
$this->getJointureMonActivite($id_utilisateur).
$this->getConditionMonActivite($id_utilisateur).
/trunk/services/modules/0.1/observations/ListeObservations.php
172,21 → 172,25
$this->evenements_obs = array();
foreach($evenements as &$evenement) {
$this->affecterTypeEvenement($evenement, $id_utilisateur);
$this->evenementsObs[$evenement['id_observation']][] = $evenement['type'];
$this->affecterTypeEvenement($evenement, $id_utilisateur, $evenement['id_observation']);
}
}
 
private function affecterTypeEvenement(&$evenement, $id_utilisateur) {
private function affecterTypeEvenement(&$evenement, $id_utilisateur, $id_observation) {
 
$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'])) {
$type = 'nouvelle_proposition';
$type = 'nouvelle_proposition';
$infos = $evenement['proposition_commentaire_nom_sel'];
} else {
$type = 'nouveau_commentaire';
$type = 'nouveau_commentaire';
$infos = $evenement['proposition_commentaire_texte'];
}
// J'ai commenté ou fait une proposition
203,7 → 207,8
$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']:
214,19 → 219,32
} else {
// 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']:
$type = "nouvelle_validation_autre_sur_prop_vous";
$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:
$type = 'inconnu';
$type = 'inconnu';
$infos = "";
}
$evenement['type'] = $type;
$infos_evts = array('type' => $type, 'infos_complementaires' => $infos);
// La requête est un peu trop complexe et certains évènements sortent en doublons
// donc on dédoublonne ici (mais ça n'est pas une solution pérenne)
// TODO: optimiser et simplifier ceci
if(empty($this->evenementsObs[$id_observation])) {
$this->evenementsObs[$id_observation] = array();
}
if(array_search($infos_evts, $this->evenementsObs[$id_observation]) === false) {
$this->evenementsObs[$id_observation][] = $infos_evts;
}
}
 
/**
/trunk/src/org/tela_botanica/del/client/vues/identiplante/resultats/observations/ObservationPresenteur.java
11,6 → 11,7
import org.tela_botanica.del.client.composants.observations.ObservationImagesPresenteur;
import org.tela_botanica.del.client.composants.observations.ObservationImagesVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.modeles.EvenementObs;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.modeles.Observation;
99,31 → 100,22
}
 
private void gererAffichageEvenementsObs() {
if(!observation.getEvenementsAssocies().isEmpty()) {
Map<String, Integer> nbEventsParEvent = new HashMap<String, Integer>();
List<String> evts = observation.getEvenementsAssocies();
for (Iterator<String> iterator = evts.iterator(); iterator.hasNext();) {
String evenement = iterator.next();
if(nbEventsParEvent.containsKey(evenement)) {
Integer nbEvent = nbEventsParEvent.get(evenement);
nbEvent++;
nbEventsParEvent.put(evenement, nbEvent);
} else {
nbEventsParEvent.put(evenement, 1);
}
}
if(!observation.getEvenementsAssocies().isEmpty()) {
List<EvenementObs> evts = observation.getEvenementsAssocies();
StringBuilder stb = new StringBuilder();
stb.append("<ul class=\"listeEvenementsObs\">");
for (Iterator<String> iterator = nbEventsParEvent.keySet().iterator(); iterator.hasNext();) {
String evtNom = (String) iterator.next();
stb.append("<li>");
stb.append(StringUtils.getCorrespondanceChaineEvenementObs(evtNom, nbEventsParEvent.get(evtNom)));
stb.append("</li>");
for (Iterator<EvenementObs> iterator = evts.iterator(); iterator.hasNext();) {
EvenementObs evt = iterator.next();
stb.append("<li>");
stb.append(StringUtils.getCorrespondanceChaineEvenementObs(evt.getType()));
if(!evt.getInfosComplementaires().isEmpty()) {
String infos = StringUtils.ellipsize(evt.getInfosComplementaires(), 50, 10);
String classeEvt = StringUtils.getClasseEvenementObs(evt.getType());
stb.append("<span class=\"evtObsinfosComplementaires "+classeEvt+"\">"+infos+"</span>");
}
stb.append("</li>");
}
stb.append("</ul>");
vue.afficherEvenementsObservation(stb.toString());
} else {
vue.cacherEvenementsObservation();
/trunk/src/org/tela_botanica/del/client/modeles/EvenementObs.java
New file
0,0 → 1,28
package org.tela_botanica.del.client.modeles;
 
public class EvenementObs {
public String type = "";
public String infosComplementaires = "";
public EvenementObs(String type, String infosComplementaires) {
this.type = type;
this.infosComplementaires = infosComplementaires;
}
 
public String getType() {
return type;
}
 
public void setType(String type) {
this.type = type;
}
 
public String getInfosComplementaires() {
return infosComplementaires;
}
 
public void setInfosComplementaires(String infosComplementaires) {
this.infosComplementaires = infosComplementaires;
}
}
/trunk/src/org/tela_botanica/del/client/modeles/Observation.java
14,7 → 14,7
milieu, commentaire, dateReleve, station, referentiel, pays;
 
private List<String> motsClefs = new ArrayList<String>();
private List<String> evenements = new ArrayList<String>();
private List<EvenementObs> evenements = new ArrayList<EvenementObs>();
 
// les propositions sont une liste ordonnée qui contient soit des
// proposition de determinations, soit des commentaires
310,11 → 310,11
this.pays = pays;
}
public List<String> setEvenementsAssocies(List<String> evenements) {
public List<EvenementObs> setEvenementsAssocies(List<EvenementObs> evenements) {
return this.evenements = evenements;
}
public List<String> getEvenementsAssocies() {
public List<EvenementObs> getEvenementsAssocies() {
return evenements;
}
}
/trunk/src/org/tela_botanica/del/client/i18n/Vocabulary.properties
139,7 → 139,7
nouvellePropositionVousAObsAutre = Vous avez proposé un nom pour cette observation
nouvellePropositionAutreSurObsVous = Un utilisateur a proposé un nom pour votre observation
nouveauVoteVousAComAutre = Vous avez voté pour une proposition
nouveauVoteAutreSurComVous = Un utilisateur a voté pour votre proposition
nouveauVoteAutreSurComVous = Un utilisateur a voté pour votre proposition
nouvelleValidationVousAPropAutre = Vous avez validé une proposition
nouvelleValidationAutreAPropVous = Un utilisateur a validé votre proposition
nouveauVoteAutreSurComAutreObsVous = Un utilisateur à voté sur une proposition sur votre observation
/trunk/src/org/tela_botanica/del/client/utils/StringUtils.java
3,6 → 3,7
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.user.client.Window;
 
public class StringUtils {
49,17 → 50,17
return NumberFormat.getFormat(patternNb.toString()).format(valeur);
}
public static String getCorrespondanceChaineEvenementObs(String evenement, int nb) {
public static String getCorrespondanceChaineEvenementObs(String evenement) {
String trad = "";
// Arghhhh pourquoi on ne peut pas faire de switch sur une string !!!!!!
// arggh arrrghghhhhhh
if(evenement.equals("nouveau_vote")) {
trad = nb > 1 ? I18n.getMessages().nouveauxVotes(nb+"") : I18n.getVocabulary().nouveauVote();
trad = I18n.getVocabulary().nouveauVote();
}
if(evenement.equals("nouveau_commentaire")) {
trad = nb > 1 ? I18n.getMessages().nouveauxCommentaires(nb+"") : I18n.getVocabulary().nouveauCommentaire();
trad = I18n.getVocabulary().nouveauCommentaire();
}
if(evenement.equals("nouvelle_observation")) {
112,4 → 113,31
return trad;
}
public static String getClasseEvenementObs(String evenement) {
String classeEvt = "";
if(evenement.equals("nouveau_commentaire_vous_a_obs_autre") ||
evenement.equals("nouveau_commentaire_autre_sur_obs_vous") ||
evenement.equals("nouvelle_reponse_autre_sur_commentaire_vous") ||
evenement.equals("nouvelle_reponse_autre_sur_proposition_vous")) {
classeEvt = "evtObsCitation";
} else {
classeEvt = "evtObsAction";
}
return classeEvt;
}
/**
* Puts ellipses in input strings that are longer than than maxCharacters. Shorter strings or
* null is returned unchanged.
* @param input the input string that may be subjected to shortening
* @param maxCharacters the maximum characters that are acceptable for the unshortended string. Must be at least 3, otherwise a string with ellipses is too long already.
* @param the number of characters that should appear after the ellipsis (0 or larger)
*/
public static String ellipsize(String input, int maxCharacters, int charactersAfterEllipsis) {
if (input == null || input.length() < maxCharacters) {
return input;
}
return input.substring(0, maxCharacters - 3 - charactersAfterEllipsis) + "..." + input.substring(input.length() - charactersAfterEllipsis);
}
}
/trunk/src/org/tela_botanica/del/client/utils/UtilitairesServiceResultat.java
14,6 → 14,7
import org.tela_botanica.del.client.modeles.ActiviteUtilisateur;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.Contributeur;
import org.tela_botanica.del.client.modeles.EvenementObs;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ImageServiceResultat;
import org.tela_botanica.del.client.modeles.InterventionForum;
108,11 → 109,14
JSONValue propositions = observationJson.get("commentaires");
JSONValue evenements = observationJson.get("evenements");
List<String> evenementsObs = new ArrayList<String>();
List<EvenementObs> evenementsObs = new ArrayList<EvenementObs>();
if (evenements != null && evenements.isArray() != null) {
JSONArray evenementsTab = evenements.isArray();
for (int i = 0; i < evenementsTab.size(); i++) {
evenementsObs.add(evenementsTab.get(i).isString().stringValue());
String type = evenementsTab.get(i).isObject().get("type").isString().stringValue();
String infosComplementaires = evenementsTab.get(i).isObject().get("infos_complementaires").isString().stringValue();
EvenementObs evtObs = new EvenementObs(type, infosComplementaires);
evenementsObs.add(evtObs);
}
}
observation.setEvenementsAssocies(evenementsObs);