This is an automated email from the git hooks/post-receive script. New commit to branch feature/23_manage_notification in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit c999ae1cbdf6bbb67692d14f507f0044a0402ab9 Author: Kevin Morin <morin@codelutin.com> Date: Tue May 9 11:34:42 2017 +0200 refs #23 mails de notification de vote et de fin de sondage --- .../services/service/NotificationService.java | 51 +++++++++++++-- .../services/service/mail/AbstractVoteEmail.java | 72 ++++++++++++++++++++++ .../pollen/services/service/mail/EmailService.java | 30 ++++++++- ...teAddedEmail.java => PollEndReminderEmail.java} | 26 +++----- .../services/service/mail/VoteAddedEmail.java | 12 +--- .../services/service/mail/VoteDeletedEmail.java | 12 +--- .../services/service/mail/VoteEditedEmail.java | 15 +---- ...{VoteEditedEmail.java => VoteSummaryEmail.java} | 43 +++++++------ .../resources/email/PollEndReminderEmail.mustache | 3 + .../email/PollEndReminderEmail_fr.mustache | 3 + .../main/resources/email/VoteAddedEmail.mustache | 18 ++++++ .../resources/email/VoteAddedEmail_fr.mustache | 18 ++++++ .../main/resources/email/VoteDeletedEmail.mustache | 18 ++++++ .../resources/email/VoteDeletedEmail_fr.mustache | 18 ++++++ .../main/resources/email/VoteEditedEmail.mustache | 18 ++++++ .../resources/email/VoteEditedEmail_fr.mustache | 18 ++++++ .../main/resources/email/VoteSummaryEmail.mustache | 26 ++++++++ .../resources/email/VoteSummaryEmail_fr.mustache | 26 ++++++++ .../pollen/votecounting/NormalVoteCounting.java | 2 +- .../votecounting/PercentageVoteCounting.java | 2 +- 20 files changed, 351 insertions(+), 80 deletions(-) diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/NotificationService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/NotificationService.java index 0566e7a..6750666 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/NotificationService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/NotificationService.java @@ -29,17 +29,24 @@ import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.PollType; import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.persistence.entity.Vote; +import org.chorem.pollen.persistence.entity.VoteNotification; import org.chorem.pollen.persistence.entity.VoterListMember; import org.chorem.pollen.services.PollenUIContext; import org.chorem.pollen.services.service.mail.EmailService; import org.chorem.pollen.services.service.mail.LostPasswordEmail; import org.chorem.pollen.services.service.mail.PollClosedEmail; import org.chorem.pollen.services.service.mail.PollCreatedEmail; +import org.chorem.pollen.services.service.mail.PollEndReminderEmail; import org.chorem.pollen.services.service.mail.PollInvitationEmail; import org.chorem.pollen.services.service.mail.ResendValidationEmail; import org.chorem.pollen.services.service.mail.RestrictedPollInvitationEmail; import org.chorem.pollen.services.service.mail.UserAccountCreatedEmail; +import org.chorem.pollen.services.service.mail.VoteAddedEmail; +import org.chorem.pollen.services.service.mail.VoteDeletedEmail; +import org.chorem.pollen.services.service.mail.VoteEditedEmail; +import org.chorem.pollen.services.service.mail.VoteSummaryEmail; +import java.util.Collection; import java.util.List; import java.util.Set; @@ -171,7 +178,7 @@ public class NotificationService extends PollenServiceSupport { } public void onChoiceAdded(Poll poll, Choice choice) { - + // TODO } public void onChoiceEdited(Poll poll, Choice choice) { @@ -183,27 +190,45 @@ public class NotificationService extends PollenServiceSupport { } public void onCommentAdded(Poll poll, Comment comment) { - + // TODO } public void onCommentEdited(Poll poll, Comment comment) { - + // TODO } public void onCommentDeleted(Poll poll, Comment comment) { - + // TODO } public void onVoteAdded(Poll poll, Vote vote) { + if (poll.getVoteNotification() == VoteNotification.EVERY_VOTE) { + EmailService emailService = getEmailService(); + VoteAddedEmail voteAddedEmail = emailService.newVoteAddedEmail(poll, vote); + voteAddedEmail.addTo(poll.getCreator().getEmail()); + emailService.send(voteAddedEmail); + } } public void onVoteEdited(Poll poll, Vote vote) { + if (poll.getVoteNotification() == VoteNotification.EVERY_VOTE) { + EmailService emailService = getEmailService(); + VoteEditedEmail voteEditedEmail = emailService.newVoteEditedEmail(poll, vote); + voteEditedEmail.addTo(poll.getCreator().getEmail()); + emailService.send(voteEditedEmail); + } } public void onVoteDeleted(Poll poll, Vote vote) { + if (poll.getVoteNotification() == VoteNotification.EVERY_VOTE) { + EmailService emailService = getEmailService(); + VoteDeletedEmail voteDeletedEmail = emailService.newVoteDeletedEmail(poll, vote); + voteDeletedEmail.addTo(poll.getCreator().getEmail()); + emailService.send(voteDeletedEmail); + } } public void onAddVoterList(Poll poll, List<VoterListMember> voterListMembers) { @@ -219,4 +244,22 @@ public class NotificationService extends PollenServiceSupport { }); } + + public void sendVoteSummary(Poll poll, Collection<Vote> votes) { + if (poll.getVoteNotification() == VoteNotification.DAILY_SUMMARY) { + EmailService emailService = getEmailService(); + VoteSummaryEmail voteSummaryEmail = emailService.newVoteSummaryEmail(poll, votes); + + voteSummaryEmail.addTo(poll.getCreator().getEmail()); + emailService.send(voteSummaryEmail); + } + } + + public void sendPollEndReminder(Poll poll) { + EmailService emailService = getEmailService(); + PollEndReminderEmail pollEndReminderEmail = emailService.newPollEndReminderEmail(poll); + + pollEndReminderEmail.addTo(poll.getCreator().getEmail()); + emailService.send(pollEndReminderEmail); + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/AbstractVoteEmail.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/AbstractVoteEmail.java new file mode 100644 index 0000000..1251865 --- /dev/null +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/AbstractVoteEmail.java @@ -0,0 +1,72 @@ +package org.chorem.pollen.services.service.mail; + +/* + * #%L + * Pollen :: Service + * %% + * Copyright (C) 2009 - 2017 Code Lutin, Tony Chemit + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import org.chorem.pollen.persistence.entity.Poll; +import org.chorem.pollen.persistence.entity.VoteVisibility; +import org.chorem.pollen.votecounting.VoteCounting; +import org.chorem.pollen.votecounting.model.ChoiceToVoteRenderType; + +import java.util.Locale; +import java.util.function.Function; + +/** + * @author Kevin Morin + */ +public abstract class AbstractVoteEmail extends PollenMail { + + protected Poll poll; + + protected Function<String, String> voteCountingDisplayVoteValueFunction; + + protected boolean voteCountingCheckboxEditorType; + + protected AbstractVoteEmail(Locale locale) { + super(locale); + } + + public Poll getPoll() { + return poll; + } + + public void setPoll(Poll poll) { + this.poll = poll; + } + + public Function<String, String> getVoteCountingDisplayVoteValue() { + return voteCountingDisplayVoteValueFunction; + } + + public boolean isVoteCountingCheckboxEditorType() { + return voteCountingCheckboxEditorType; + } + + public void setVoteCounting(VoteCounting voteCounting) { + this.voteCountingDisplayVoteValueFunction = + voteValue -> voteCounting.getDisplayVoteValue(Double.parseDouble(voteValue)); + this.voteCountingCheckboxEditorType = voteCounting.getVoteValueEditorType() == ChoiceToVoteRenderType.CHECKBOX; + } + + public boolean isVoteVisible() { + return poll.getVoteVisibility() == VoteVisibility.CREATOR || poll.getVoteVisibility() == VoteVisibility.EVERYBODY; + } +} diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/EmailService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/EmailService.java index d3450cb..a104a06 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/EmailService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/EmailService.java @@ -26,6 +26,7 @@ import com.github.mustachejava.Mustache; import com.github.mustachejava.MustacheException; import com.github.mustachejava.MustacheFactory; import com.google.common.base.Charsets; +import com.google.common.base.Preconditions; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.mail.Email; @@ -42,8 +43,11 @@ import org.chorem.pollen.services.PollenUIContext; import org.chorem.pollen.services.bean.PollenEntityId; import org.chorem.pollen.services.config.PollenServicesConfig; import org.chorem.pollen.services.service.PollenServiceSupport; +import org.chorem.pollen.votecounting.VoteCounting; +import org.chorem.pollen.votecounting.VoteCountingFactory; import java.io.StringWriter; +import java.util.Collection; import java.util.Locale; /** @@ -101,14 +105,21 @@ public class EmailService extends PollenServiceSupport { public VoteAddedEmail newVoteAddedEmail(Poll poll, Vote vote) { VoteAddedEmail email = new VoteAddedEmail(getLocale()); - email.setPoll(poll); + initAbstractVoteEmail(email, poll); email.setVote(vote); return email; } + public VoteSummaryEmail newVoteSummaryEmail(Poll poll, Collection<Vote> votes) { + VoteSummaryEmail email = new VoteSummaryEmail(getLocale()); + initAbstractVoteEmail(email, poll); + email.setVotes(votes); + return email; + } + public VoteEditedEmail newVoteEditedEmail(Poll poll, Vote vote) { VoteEditedEmail email = new VoteEditedEmail(getLocale()); - email.setPoll(poll); + initAbstractVoteEmail(email, poll); email.setVote(vote); return email; } @@ -120,6 +131,15 @@ public class EmailService extends PollenServiceSupport { return email; } + private void initAbstractVoteEmail(AbstractVoteEmail email, Poll poll) { + email.setPoll(poll); + VoteCountingFactory voteCountingFactory = serviceContext.getVoteCountingFactory(); + VoteCounting voteCounting = voteCountingFactory.getVoteCounting(poll.getVoteCountingType()); + Preconditions.checkNotNull( + voteCounting, "Could not find vote counting for id " + poll.getVoteCountingType()); + email.setVoteCounting(voteCounting); + } + public PollCreatedEmail newPollCreatedEmail(Poll poll) { PollCreatedEmail email = new PollCreatedEmail(getLocale()); email.setPoll(poll); @@ -248,6 +268,12 @@ public class EmailService extends PollenServiceSupport { return email; } + public PollEndReminderEmail newPollEndReminderEmail(Poll poll) { + PollEndReminderEmail email = new PollEndReminderEmail(getLocale()); + email.setPoll(poll); + return email; + } + public void send(PollenMail mail) { if (getPollenServiceConfig().isDevMode()) { diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteAddedEmail.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/PollEndReminderEmail.java similarity index 71% copy from pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteAddedEmail.java copy to pollen-services/src/main/java/org/chorem/pollen/services/service/mail/PollEndReminderEmail.java index 7f9f376..ecc8836 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteAddedEmail.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/PollEndReminderEmail.java @@ -22,38 +22,30 @@ package org.chorem.pollen.services.service.mail; */ import org.chorem.pollen.persistence.entity.Poll; -import org.chorem.pollen.persistence.entity.Vote; import org.nuiton.i18n.I18n; +import java.text.DateFormat; import java.util.Locale; /** - * Created on 4/30/14. - * - * @author Tony Chemit - dev@tchemit.fr - * @since 2.0 + * @author Kevin Morin + * @since 3.0 */ -public class VoteAddedEmail extends PollenMail { +public class PollEndReminderEmail extends PollenMail { protected Poll poll; - protected Vote vote; + protected final DateFormat dateFormat; - protected VoteAddedEmail(Locale locale) { + public PollEndReminderEmail(Locale locale) { super(locale); + dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale); } @Override public String getSubject() { - return I18n.l(locale, "pollen.service.mail.VoteAddedEmail.subject", poll.getTitle()); - } - - public Vote getVote() { - return vote; - } - - public void setVote(Vote vote) { - this.vote = vote; + return I18n.l(locale, "pollen.service.mail.PollEndReminderEmail.subject", + poll.getTitle()); } public Poll getPoll() { diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteAddedEmail.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteAddedEmail.java index 7f9f376..82000f0 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteAddedEmail.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteAddedEmail.java @@ -21,7 +21,6 @@ package org.chorem.pollen.services.service.mail; * #L% */ -import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.Vote; import org.nuiton.i18n.I18n; @@ -33,9 +32,7 @@ import java.util.Locale; * @author Tony Chemit - dev@tchemit.fr * @since 2.0 */ -public class VoteAddedEmail extends PollenMail { - - protected Poll poll; +public class VoteAddedEmail extends AbstractVoteEmail { protected Vote vote; @@ -56,11 +53,4 @@ public class VoteAddedEmail extends PollenMail { this.vote = vote; } - public Poll getPoll() { - return poll; - } - - public void setPoll(Poll poll) { - this.poll = poll; - } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteDeletedEmail.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteDeletedEmail.java index d6c4661..c12841f 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteDeletedEmail.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteDeletedEmail.java @@ -21,7 +21,6 @@ package org.chorem.pollen.services.service.mail; * #L% */ -import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.Vote; import org.nuiton.i18n.I18n; @@ -33,9 +32,7 @@ import java.util.Locale; * @author Tony Chemit - dev@tchemit.fr * @since 2.0 */ -public class VoteDeletedEmail extends PollenMail { - - protected Poll poll; +public class VoteDeletedEmail extends AbstractVoteEmail { protected Vote vote; @@ -56,11 +53,4 @@ public class VoteDeletedEmail extends PollenMail { this.vote = vote; } - public Poll getPoll() { - return poll; - } - - public void setPoll(Poll poll) { - this.poll = poll; - } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteEditedEmail.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteEditedEmail.java index 0bf1452..eeac3b6 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteEditedEmail.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteEditedEmail.java @@ -21,7 +21,6 @@ package org.chorem.pollen.services.service.mail; * #L% */ -import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.Vote; import org.nuiton.i18n.I18n; @@ -33,9 +32,7 @@ import java.util.Locale; * @author Tony Chemit - dev@tchemit.fr * @since 2.0 */ -public class VoteEditedEmail extends PollenMail { - - protected Poll poll; +public class VoteEditedEmail extends AbstractVoteEmail { protected Vote vote; @@ -55,12 +52,4 @@ public class VoteEditedEmail extends PollenMail { public void setVote(Vote vote) { this.vote = vote; } - - public Poll getPoll() { - return poll; - } - - public void setPoll(Poll poll) { - this.poll = poll; - } -} +} \ No newline at end of file diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteEditedEmail.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteSummaryEmail.java similarity index 51% copy from pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteEditedEmail.java copy to pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteSummaryEmail.java index 0bf1452..aa96dad 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteEditedEmail.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/VoteSummaryEmail.java @@ -21,46 +21,49 @@ package org.chorem.pollen.services.service.mail; * #L% */ -import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.Vote; import org.nuiton.i18n.I18n; +import java.text.DateFormat; +import java.util.Collection; +import java.util.Date; import java.util.Locale; /** - * Created on 4/30/14. - * - * @author Tony Chemit - dev@tchemit.fr - * @since 2.0 + * @author Kevin Morin + * @since 3.0 */ -public class VoteEditedEmail extends PollenMail { +public class VoteSummaryEmail extends AbstractVoteEmail { - protected Poll poll; + protected Collection<Vote> votes; - protected Vote vote; + protected final DateFormat dateFormat; - protected VoteEditedEmail(Locale locale) { + protected VoteSummaryEmail(Locale locale) { super(locale); + dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale); } @Override public String getSubject() { - return I18n.l(locale, "pollen.service.mail.VoteEditedEmail.subject", poll.getTitle()); + return I18n.l(locale, "pollen.service.mail.VoteSummaryEmail.subject", + getLastVoteNotification(), + poll.getTitle()); } - public Vote getVote() { - return vote; + public Collection<Vote> getVotes() { + return votes; } - public void setVote(Vote vote) { - this.vote = vote; + public void setVotes(Collection<Vote> votes) { + this.votes = votes; } - public Poll getPoll() { - return poll; - } - - public void setPoll(Poll poll) { - this.poll = poll; + public String getLastVoteNotification() { + Date lastVoteNotification = poll.getLastVoteNotification(); + if (lastVoteNotification == null) { + lastVoteNotification = poll.getBeginDate(); + } + return dateFormat.format(lastVoteNotification); } } diff --git a/pollen-services/src/main/resources/email/PollEndReminderEmail.mustache b/pollen-services/src/main/resources/email/PollEndReminderEmail.mustache new file mode 100644 index 0000000..7f00f3f --- /dev/null +++ b/pollen-services/src/main/resources/email/PollEndReminderEmail.mustache @@ -0,0 +1,3 @@ +Hello {{poll.creator.name}}, + +Your poll '{{poll.title}}' ends in less than {{poll.notifyMeHoursBeforePollEnds}} hours. \ No newline at end of file diff --git a/pollen-services/src/main/resources/email/PollEndReminderEmail_fr.mustache b/pollen-services/src/main/resources/email/PollEndReminderEmail_fr.mustache new file mode 100644 index 0000000..162c0cb --- /dev/null +++ b/pollen-services/src/main/resources/email/PollEndReminderEmail_fr.mustache @@ -0,0 +1,3 @@ +Bonjour {{poll.creator.name}}, + +Votre sondage '{{poll.title}}' termine dans moins de {{poll.notifyMeHoursBeforePollEnds}} heures. \ No newline at end of file diff --git a/pollen-services/src/main/resources/email/VoteAddedEmail.mustache b/pollen-services/src/main/resources/email/VoteAddedEmail.mustache index e69de29..89008df 100644 --- a/pollen-services/src/main/resources/email/VoteAddedEmail.mustache +++ b/pollen-services/src/main/resources/email/VoteAddedEmail.mustache @@ -0,0 +1,18 @@ +Hello {{poll.creator.name}}, + +{{#vote.anonymous}} +Someone answered your poll '{{poll.title}}'. +{{/vote.anonymous}} +{{^vote.anonymous}} +{{vote.voter.name}} answered your poll '{{poll.title}}'. +{{/vote.anonymous}} +{{#voteVisible}} +{{#vote.voteToChoice}} +{{#voteCountingCheckboxEditorType}} +{{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} {{choice.choiceValue}} +{{/voteCountingCheckboxEditorType}} +{{^voteCountingCheckboxEditorType}} +- {{choice.choiceValue}}: {{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} +{{/voteCountingCheckboxEditorType}} +{{/vote.voteToChoice}} +{{/voteVisible}} \ No newline at end of file diff --git a/pollen-services/src/main/resources/email/VoteAddedEmail_fr.mustache b/pollen-services/src/main/resources/email/VoteAddedEmail_fr.mustache index e69de29..f908540 100644 --- a/pollen-services/src/main/resources/email/VoteAddedEmail_fr.mustache +++ b/pollen-services/src/main/resources/email/VoteAddedEmail_fr.mustache @@ -0,0 +1,18 @@ +Bonjour {{poll.creator.name}}, + +{{#vote.anonymous}} +Quelqu'un a répondu à votre sondage '{{poll.title}}'. +{{/vote.anonymous}} +{{^vote.anonymous}} +{{vote.voter.name}} a répondu à votre sondage '{{poll.title}}'. +{{/vote.anonymous}} +{{#voteVisible}} +{{#vote.voteToChoice}} +{{#voteCountingCheckboxEditorType}} +{{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} {{choice.choiceValue}} +{{/voteCountingCheckboxEditorType}} +{{^voteCountingCheckboxEditorType}} +- {{choice.choiceValue}} : {{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} +{{/voteCountingCheckboxEditorType}} +{{/vote.voteToChoice}} +{{/voteVisible}} \ No newline at end of file diff --git a/pollen-services/src/main/resources/email/VoteDeletedEmail.mustache b/pollen-services/src/main/resources/email/VoteDeletedEmail.mustache index e69de29..eb7aa22 100644 --- a/pollen-services/src/main/resources/email/VoteDeletedEmail.mustache +++ b/pollen-services/src/main/resources/email/VoteDeletedEmail.mustache @@ -0,0 +1,18 @@ +Hello {{poll.creator.name}}, + +{{#vote.anonymous}} +Someone deleted his vote on your poll '{{poll.title}}'. +{{/vote.anonymous}} +{{^vote.anonymous}} +{{vote.voter.name}} deleted his vote on your poll '{{poll.title}}'. +{{/vote.anonymous}} +{{#voteVisible}} +{{#vote.voteToChoice}} +{{#voteCountingCheckboxEditorType}} +{{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} {{choice.choiceValue}} +{{/voteCountingCheckboxEditorType}} +{{^voteCountingCheckboxEditorType}} +- {{choice.choiceValue}}: {{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} +{{/voteCountingCheckboxEditorType}} +{{/vote.voteToChoice}} +{{/voteVisible}} \ No newline at end of file diff --git a/pollen-services/src/main/resources/email/VoteDeletedEmail_fr.mustache b/pollen-services/src/main/resources/email/VoteDeletedEmail_fr.mustache index e69de29..dfeef3b 100644 --- a/pollen-services/src/main/resources/email/VoteDeletedEmail_fr.mustache +++ b/pollen-services/src/main/resources/email/VoteDeletedEmail_fr.mustache @@ -0,0 +1,18 @@ +Bonjour {{poll.creator.name}}, + +{{#vote.anonymous}} + Quelqu'un a supprimé son vote sur votre sondage '{{poll.title}}'. +{{/vote.anonymous}} +{{^vote.anonymous}} + {{vote.voter.name}} a supprimé son vote sur votre sondage '{{poll.title}}'. +{{/vote.anonymous}} +{{#voteVisible}} + {{#vote.voteToChoice}} + {{#voteCountingCheckboxEditorType}} + {{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} {{choice.choiceValue}} + {{/voteCountingCheckboxEditorType}} + {{^voteCountingCheckboxEditorType}} + - {{choice.choiceValue}} : {{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} + {{/voteCountingCheckboxEditorType}} + {{/vote.voteToChoice}} +{{/voteVisible}} \ No newline at end of file diff --git a/pollen-services/src/main/resources/email/VoteEditedEmail.mustache b/pollen-services/src/main/resources/email/VoteEditedEmail.mustache index e69de29..482fedd 100644 --- a/pollen-services/src/main/resources/email/VoteEditedEmail.mustache +++ b/pollen-services/src/main/resources/email/VoteEditedEmail.mustache @@ -0,0 +1,18 @@ +Hello {{poll.creator.name}}, + +{{#vote.anonymous}} +Someone edited his vote on your poll '{{poll.title}}'. +{{/vote.anonymous}} +{{^vote.anonymous}} +{{vote.voter.name}} edited his vote on your poll '{{poll.title}}'. +{{/vote.anonymous}} +{{#voteVisible}} +{{#vote.voteToChoice}} +{{#voteCountingCheckboxEditorType}} +{{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} {{choice.choiceValue}} +{{/voteCountingCheckboxEditorType}} +{{^voteCountingCheckboxEditorType}} +- {{choice.choiceValue}}: {{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} +{{/voteCountingCheckboxEditorType}} +{{/vote.voteToChoice}} +{{/voteVisible}} \ No newline at end of file diff --git a/pollen-services/src/main/resources/email/VoteEditedEmail_fr.mustache b/pollen-services/src/main/resources/email/VoteEditedEmail_fr.mustache index e69de29..4f9c6f6 100644 --- a/pollen-services/src/main/resources/email/VoteEditedEmail_fr.mustache +++ b/pollen-services/src/main/resources/email/VoteEditedEmail_fr.mustache @@ -0,0 +1,18 @@ +Bonjour {{poll.creator.name}}, + +{{#vote.anonymous}} +Quelqu'un a modifié son vote sur votre sondage '{{poll.title}}'. +{{/vote.anonymous}} +{{^vote.anonymous}} +{{vote.voter.name}} a modifié son vote sur votre sondage '{{poll.title}}'. +{{#voteVisible}} +{{#vote.voteToChoice}} +{{#voteCountingCheckboxEditorType}} +{{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} {{choice.choiceValue}} +{{/voteCountingCheckboxEditorType}} +{{^voteCountingCheckboxEditorType}} +- {{choice.choiceValue}} : {{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} +{{/voteCountingCheckboxEditorType}} +{{/vote.voteToChoice}} +{{/voteVisible}} +{{/vote.anonymous}} \ No newline at end of file diff --git a/pollen-services/src/main/resources/email/VoteSummaryEmail.mustache b/pollen-services/src/main/resources/email/VoteSummaryEmail.mustache new file mode 100644 index 0000000..5367b60 --- /dev/null +++ b/pollen-services/src/main/resources/email/VoteSummaryEmail.mustache @@ -0,0 +1,26 @@ +Hello {{poll.creator.name}}, + +Since {{lastVoteNotification}}, {{votes.size}} person(s) answered your poll '{{poll.title}}' +{{#votes}} +{{#voteVisible}} +{{#anonymous}} +Someone answered: +{{/anonymous}} +{{^anonymous}} +{{voter.name}} answered: +{{/anonymous}} +{{#voteToChoice}} +{{#voteCountingCheckboxEditorType}} +{{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} {{choice.choiceValue}} +{{/voteCountingCheckboxEditorType}} +{{^voteCountingCheckboxEditorType}} +- {{choice.choiceValue}}: {{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} +{{/voteCountingCheckboxEditorType}} +{{/voteToChoice}} +{{/voteVisible}} +{{^voteVisible}} +{{^anonymous}} +- {{voter.name}} +{{/anonymous}} +{{/voteVisible}} +{{/votes}} \ No newline at end of file diff --git a/pollen-services/src/main/resources/email/VoteSummaryEmail_fr.mustache b/pollen-services/src/main/resources/email/VoteSummaryEmail_fr.mustache new file mode 100644 index 0000000..6bf86b3 --- /dev/null +++ b/pollen-services/src/main/resources/email/VoteSummaryEmail_fr.mustache @@ -0,0 +1,26 @@ +Bonjour {{poll.creator.name}}, + +Depuis le {{lastVoteNotification}}, {{votes.size}} personne(s) a(ont) répondu à votre sondage '{{poll.title}}' +{{#votes}} +{{#voteVisible}} +{{#anonymous}} +Quelqu'un a répondu : +{{/anonymous}} +{{^anonymous}} +{{voter.name}} a répondu : +{{/anonymous}} +{{#voteToChoice}} +{{#voteCountingCheckboxEditorType}} +{{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} {{choice.choiceValue}} +{{/voteCountingCheckboxEditorType}} +{{^voteCountingCheckboxEditorType}} +- {{choice.choiceValue}} : {{#voteCountingDisplayVoteValueFunction}}{{voteValue}}{{/voteCountingDisplayVoteValueFunction}} +{{/voteCountingCheckboxEditorType}} +{{/voteToChoice}} +{{/voteVisible}} +{{^voteVisible}} +{{^anonymous}} +- {{voter.name}} +{{/anonymous}} +{{/voteVisible}} +{{/votes}} \ No newline at end of file diff --git a/pollen-votecounting-normal/src/main/java/org/chorem/pollen/votecounting/NormalVoteCounting.java b/pollen-votecounting-normal/src/main/java/org/chorem/pollen/votecounting/NormalVoteCounting.java index c190b7a..c69bc61 100644 --- a/pollen-votecounting-normal/src/main/java/org/chorem/pollen/votecounting/NormalVoteCounting.java +++ b/pollen-votecounting-normal/src/main/java/org/chorem/pollen/votecounting/NormalVoteCounting.java @@ -48,7 +48,7 @@ public class NormalVoteCounting extends AbstractVoteCounting<NormalVoteCountingS @Override public String getDisplayVoteValue(Double voteValue) { - return voteValue != null ? "OK" : ""; + return isChoiceInVote(voteValue) ? "[x]" : "[ ]"; } @Override diff --git a/pollen-votecounting-percentage/src/main/java/org/chorem/pollen/votecounting/PercentageVoteCounting.java b/pollen-votecounting-percentage/src/main/java/org/chorem/pollen/votecounting/PercentageVoteCounting.java index 4672d48..efd1e3e 100644 --- a/pollen-votecounting-percentage/src/main/java/org/chorem/pollen/votecounting/PercentageVoteCounting.java +++ b/pollen-votecounting-percentage/src/main/java/org/chorem/pollen/votecounting/PercentageVoteCounting.java @@ -49,7 +49,7 @@ public class PercentageVoteCounting extends AbstractVoteCounting<PercentageVoteC @Override public String getDisplayVoteValue(Double voteValue) { - return voteValue == null ? "" : String.valueOf(voteValue); + return voteValue == null ? "" : String.valueOf(voteValue) + "%"; } @Override -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.