branch feature/58-limitation-des-votants updated (17683bc5 -> 627ddf75)
This is an automated email from the git hooks/post-receive script. New change to branch feature/58-limitation-des-votants in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git omits 17683bc5 envoyer un mail quand le nombre de votants dépasse la valeur max (ref #58) omits 4187caaa Création et modification d'un sondage restreint, avertir si le nombre de participant dépasse le nombre maximum de votants (ref #58) omits 9616ed8e Dans les listes des sondages : voir les sondage hors limites du nombre de votants (ref #58) omits 7bb7905a ne pas afficher les votes ignorés (ref #58) omits d87ac9ff indiquer la limite de votants pour un sondage (ref #58) omits e83acf6a Limitations du nombre votants (ref #58), Déplacement des méthodes de transformation des entités en bean dans les services adds 02a5af9d ajout de l'url de voe à partager dans la page de résumé du sondage + warning pour ne pas partager la page de résumé adds 6e45bf56 ajout d'un tooltip sur le bouton copier + suppression du warning adds 863823eb style new 6b9eb30f Limitations du nombre votants (ref #58), Déplacement des méthodes de transformation des entités en bean dans les services new 1c59baba indiquer la limite de votants pour un sondage (ref #58) new 9703cece ne pas afficher les votes ignorés (ref #58) new 7bf3bbd6 Dans les listes des sondages : voir les sondage hors limites du nombre de votants (ref #58) new 3e454d67 Création et modification d'un sondage restreint, avertir si le nombre de participant dépasse le nombre maximum de votants (ref #58) new 627ddf75 envoyer un mail quand le nombre de votants dépasse la valeur max (ref #58) This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (17683bc5) \ N -- N -- N refs/heads/feature/58-limitation-des-votants (627ddf75) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omits" are not gone; other references still refer to them. Any revisions marked "discards" are gone forever. The 6 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 627ddf75861ef1f06b8bcfd5415e2ad1844f0d09 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Thu Sep 28 16:26:07 2017 +0200 envoyer un mail quand le nombre de votants dépasse la valeur max (ref #58) commit 3e454d6786e129134f829abb0e0d97d63c428167 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Thu Sep 28 13:33:36 2017 +0200 Création et modification d'un sondage restreint, avertir si le nombre de participant dépasse le nombre maximum de votants (ref #58) commit 7bf3bbd6a248364421577b605c93e1d06356ccbb Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Thu Sep 28 09:14:46 2017 +0200 Dans les listes des sondages : voir les sondage hors limites du nombre de votants (ref #58) commit 9703cece80388014678074d1eb9c5f52870b39b7 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Thu Sep 28 08:43:02 2017 +0200 ne pas afficher les votes ignorés (ref #58) commit 1c59babae94d984cc840c6d982622db13efb6378 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Wed Sep 27 16:48:26 2017 +0200 indiquer la limite de votants pour un sondage (ref #58) commit 6b9eb30fb3a16af73f38a16ca8ca0170ed2d0b4d Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Sep 26 11:21:41 2017 +0200 Limitations du nombre votants (ref #58), Déplacement des méthodes de transformation des entités en bean dans les services Summary of changes: pollen-ui-riot-js/src/main/web/i18n/en.json | 2 + pollen-ui-riot-js/src/main/web/i18n/fr.json | 2 + .../src/main/web/tag/poll/Summary.tag.html | 58 ++++++++++++++++++---- 3 files changed, 53 insertions(+), 9 deletions(-) -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/58-limitation-des-votants in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit 6b9eb30fb3a16af73f38a16ca8ca0170ed2d0b4d Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Sep 26 11:21:41 2017 +0200 Limitations du nombre votants (ref #58), Déplacement des méthodes de transformation des entités en bean dans les services --- .../pollen/persistence/entity/VoteToChoices.java | 15 +- .../db/migration/h2/V3_1_0_1__add_premium.sql | 5 + .../migration/postgresql/V3_1_0_1__add_premium.sql | 5 + pollen-persistence/src/main/xmi/pollen.properties | 2 +- pollen-persistence/src/main/xmi/pollen.zargo | Bin 28355 -> 28471 bytes .../org/chorem/pollen/rest/api/AuthApiTest.java | 8 +- .../chorem/pollen/rest/api/PollenUserApiTest.java | 2 +- pollen-services/src/main/config/PollenServices.ini | 8 +- .../services/bean/ChildFavoriteListBean.java | 23 --- .../chorem/pollen/services/bean/ChoiceBean.java | 29 ---- .../chorem/pollen/services/bean/CommentBean.java | 44 ------ .../pollen/services/bean/FavoriteListBean.java | 20 --- .../services/bean/FavoriteListMemberBean.java | 24 ---- .../pollen/services/bean/LoginProviderBean.java | 23 --- .../org/chorem/pollen/services/bean/PollBean.java | 129 ++--------------- .../chorem/pollen/services/bean/PollenBean.java | 4 - .../chorem/pollen/services/bean/PollenBeans.java | 49 +------ .../pollen/services/bean/PollenUserBean.java | 63 +++----- .../chorem/pollen/services/bean/ReportBean.java | 21 --- .../pollen/services/bean/ResourceFileBean.java | 31 ---- .../pollen/services/bean/ResourceMetaBean.java | 26 ---- .../pollen/services/bean/ResourceStreamBean.java | 36 ----- .../pollen/services/bean/UserCredentialBean.java | 21 +-- .../org/chorem/pollen/services/bean/VoteBean.java | 72 +--------- .../pollen/services/bean/VoteToChoiceBean.java | 24 ---- .../chorem/pollen/services/bean/VoterListBean.java | 24 ---- .../pollen/services/bean/VoterListMemberBean.java | 34 ----- .../bean/export/ChildFavoriteListExport.java | 16 --- .../pollen/services/service/ChoiceService.java | 56 +++++--- .../pollen/services/service/CommentService.java | 45 ++++-- .../services/service/FavoriteListService.java | 73 +++++++--- .../pollen/services/service/FeedbackService.java | 3 +- .../pollen/services/service/FixturesService.java | 14 +- .../chorem/pollen/services/service/GtuService.java | 50 ++++--- .../pollen/services/service/PollService.java | 158 +++++++++++++++------ .../services/service/PollenResourceService.java | 35 ++++- .../services/service/PollenServiceSupport.java | 43 +----- .../pollen/services/service/PollenUserService.java | 116 ++++++++------- .../pollen/services/service/ReportService.java | 30 +++- .../pollen/services/service/SocialAuthService.java | 17 ++- .../services/service/VoteCountingService.java | 13 +- .../pollen/services/service/VoteService.java | 80 ++++++++--- .../pollen/services/service/VoterListService.java | 72 +++++----- .../i18n/pollen-services_en_GB.properties | 1 + .../i18n/pollen-services_fr_FR.properties | 1 + .../services/service/PollenUserServiceTest.java | 8 +- pollen-ui-riot-js/src/main/web/i18n/en.json | 4 + pollen-ui-riot-js/src/main/web/i18n/fr.json | 4 + .../src/main/web/tag/admin/UserCard.tag.html | 16 +++ .../src/main/web/tag/admin/UserEditModal.tag.html | 19 +++ .../src/main/web/tag/components/InnerHtml.tag.html | 14 ++ .../main/web/tag/components/date-picker.tag.html | 13 +- .../src/main/web/tag/poll/Poll.tag.html | 7 + 53 files changed, 678 insertions(+), 972 deletions(-) diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoteToChoices.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoteToChoices.java index f4a8498a..19720752 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoteToChoices.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoteToChoices.java @@ -21,9 +21,7 @@ package org.chorem.pollen.persistence.entity; * #L% */ -import java.io.Serializable; import java.util.Comparator; -import java.util.List; /** * Created on 5/16/14. @@ -33,18 +31,7 @@ import java.util.List; */ public class VoteToChoices { - public static void sortByChoiceOrder(List<VoteToChoice> voteToChoices) { - voteToChoices.sort(new VoteToChoiceComparator()); - } + public static Comparator<VoteToChoice> VOTE_TO_CHOICE_COMPARATOR = Comparator.comparingInt(v -> v.getChoice().getChoiceOrder()); - protected static class VoteToChoiceComparator implements Comparator<VoteToChoice>, Serializable { - - private static final long serialVersionUID = 1L; - - @Override - public int compare(VoteToChoice o1, VoteToChoice o2) { - return o1.getChoice().getChoiceOrder() - o2.getChoice().getChoiceOrder(); - } - } } diff --git a/pollen-persistence/src/main/resources/db/migration/h2/V3_1_0_1__add_premium.sql b/pollen-persistence/src/main/resources/db/migration/h2/V3_1_0_1__add_premium.sql new file mode 100644 index 00000000..dc4a1849 --- /dev/null +++ b/pollen-persistence/src/main/resources/db/migration/h2/V3_1_0_1__add_premium.sql @@ -0,0 +1,5 @@ +-- add premium in poll and user +alter table poll add premium boolean; +update poll set premium = false; + +alter table pollenUser add premiumTo TIMESTAMP; diff --git a/pollen-persistence/src/main/resources/db/migration/postgresql/V3_1_0_1__add_premium.sql b/pollen-persistence/src/main/resources/db/migration/postgresql/V3_1_0_1__add_premium.sql new file mode 100644 index 00000000..dc4a1849 --- /dev/null +++ b/pollen-persistence/src/main/resources/db/migration/postgresql/V3_1_0_1__add_premium.sql @@ -0,0 +1,5 @@ +-- add premium in poll and user +alter table poll add premium boolean; +update poll set premium = false; + +alter table pollenUser add premiumTo TIMESTAMP; diff --git a/pollen-persistence/src/main/xmi/pollen.properties b/pollen-persistence/src/main/xmi/pollen.properties index 926a53e6..d941b130 100644 --- a/pollen-persistence/src/main/xmi/pollen.properties +++ b/pollen-persistence/src/main/xmi/pollen.properties @@ -18,7 +18,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # #L% ###m -model.tagvalue.version=3.0.0.10 +model.tagvalue.version=3.1.0.1 #model.tagValue.notGenerateToString=true #model.tagValue.constantPrefix=PROPERTY_ #model.tagValue.useEnumerationName=true diff --git a/pollen-persistence/src/main/xmi/pollen.zargo b/pollen-persistence/src/main/xmi/pollen.zargo index 0da955ef..004634d3 100644 Binary files a/pollen-persistence/src/main/xmi/pollen.zargo and b/pollen-persistence/src/main/xmi/pollen.zargo differ diff --git a/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/AuthApiTest.java b/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/AuthApiTest.java index e3271e23..65f71e93 100644 --- a/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/AuthApiTest.java +++ b/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/AuthApiTest.java @@ -47,7 +47,7 @@ public class AuthApiTest extends AbstractPollenRestApiTest { URI uri = createRequest(RestApiFixtures.login()) - .addParameter("login", "admin@pollen.org") + .addParameter("login", "admin@chorem.org") .addParameter("password", "admin") .build(); @@ -63,7 +63,7 @@ public class AuthApiTest extends AbstractPollenRestApiTest { public void loginThenLogout() throws URISyntaxException, IOException { URI uri = createRequest(RestApiFixtures.login()) - .addParameter("login", "admin@pollen.org") + .addParameter("login", "admin@chorem.org") .addParameter("password", "admin") .build(); @@ -89,7 +89,7 @@ public class AuthApiTest extends AbstractPollenRestApiTest { public void badLogin() throws URISyntaxException, IOException { URI uri = createRequest(RestApiFixtures.login()) - .addParameter("login", "admin@pollen.org" + System.nanoTime()) + .addParameter("login", "admin@chorem.org" + System.nanoTime()) .addParameter("password", "admin" + System.nanoTime()) .build(); @@ -105,7 +105,7 @@ public class AuthApiTest extends AbstractPollenRestApiTest { public void badPassword() throws URISyntaxException, IOException { URI uri = createRequest(RestApiFixtures.login()) - .addParameter("login", "admin@pollen.org") + .addParameter("login", "admin@chorem.org") .addParameter("password", "admin" + System.nanoTime()) .build(); diff --git a/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/PollenUserApiTest.java b/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/PollenUserApiTest.java index 7bd1d92e..95b2e8d5 100644 --- a/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/PollenUserApiTest.java +++ b/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/PollenUserApiTest.java @@ -141,7 +141,7 @@ public class PollenUserApiTest extends AbstractPollenRestApiTest { private String login() throws URISyntaxException, IOException { URI uri = createRequest(RestApiFixtures.login()) - .addParameter("login", "admin@pollen.org") + .addParameter("login", "admin@chorem.org") .addParameter("password", "admin") .build(); Request request = Request.Post(uri); diff --git a/pollen-services/src/main/config/PollenServices.ini b/pollen-services/src/main/config/PollenServices.ini index f6a42182..0dee8b98 100644 --- a/pollen-services/src/main/config/PollenServices.ini +++ b/pollen-services/src/main/config/PollenServices.ini @@ -205,4 +205,10 @@ type = String description = pollen.configuration.feedback.locale key = pollen.feedback.locale type = String -defaultValue = en \ No newline at end of file +defaultValue = en + +[option maxVoters] +description = pollen.configuration.maxVoters +key = pollen.default.maxVoters +type = int +defaultValue = 0 \ No newline at end of file diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChildFavoriteListBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChildFavoriteListBean.java index 83c79b9e..a122fc85 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChildFavoriteListBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChildFavoriteListBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.ChildFavoriteList; -import org.chorem.pollen.persistence.entity.ChildFavoriteListImpl; /** * @author Sylvain Bavencoff - bavencoff@codelutin.com @@ -37,28 +36,6 @@ public class ChildFavoriteListBean extends PollenBean<ChildFavoriteList> { super(ChildFavoriteList.class); } - @Override - public void fromEntity(ChildFavoriteList entity) { - - setEntityId(entity.getTopiaId()); - FavoriteListBean child = new FavoriteListBean(); - child.fromEntity(entity.getChild()); - setChild(child); - setWeight(entity.getWeight()); - - - } - - @Override - public ChildFavoriteList toEntity() { - - ChildFavoriteList entity = new ChildFavoriteListImpl(); - entity.setWeight(getWeight()); - - return entity; - - } - public FavoriteListBean getChild() { return child; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChoiceBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChoiceBean.java index 7f8d42e5..40df2410 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChoiceBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ChoiceBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.Choice; -import org.chorem.pollen.persistence.entity.ChoiceImpl; import org.chorem.pollen.persistence.entity.ChoiceType; /** @@ -51,34 +50,6 @@ public class ChoiceBean extends PollenBean<Choice> { super(Choice.class); } - @Override - public void fromEntity(Choice entity) { - setEntityId(entity.getTopiaId()); - if (entity.getCreator() == null || entity.getCreator().getPermission() == null) { - setPermission(null); - } else { - setPermission(entity.getCreator().getPermission().getToken()); - } - setChoiceValue(entity.getChoiceValue()); - setDescription(entity.getDescription()); - setChoiceType(entity.getChoiceType()); - setChoiceOrder(entity.getChoiceOrder()); - - } - - @Override - public Choice toEntity() { - Choice entity = new ChoiceImpl(); - entity.setTopiaId(getEntityId()); - entity.setChoiceValue(getChoiceValue()); - entity.setDescription(getDescription()); - entity.setChoiceType(getChoiceType()); - entity.setChoiceOrder(getChoiceOrder()); - - return entity; - - } - public String getPermission() { return permission; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/CommentBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/CommentBean.java index e4d235da..17b88b86 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/CommentBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/CommentBean.java @@ -22,8 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.Comment; -import org.chorem.pollen.persistence.entity.CommentImpl; -import org.chorem.pollen.persistence.entity.PollenPrincipalImpl; import java.util.Date; @@ -49,48 +47,6 @@ public class CommentBean extends PollenBean<Comment> { super(Comment.class); } - @Override - public void fromEntity(Comment entity) { - - setEntityId(entity.getTopiaId()); - - if (entity.getAuthor() == null || entity.getAuthor().getPermission() == null) { - - setPermission(null); - - } else { - - setPermission(entity.getAuthor().getPermission().getToken()); - - } - - setText(entity.getText()); - setPostDate(entity.getPostDate()); - - if (entity.getAuthor() != null) { - - setAuthorName(entity.getAuthor().getName()); - - } - - } - - @Override - public Comment toEntity() { - - Comment entity = new CommentImpl(); - - entity.setTopiaId(getEntityId()); - entity.setText(getText()); - entity.setPostDate(getPostDate()); - PollenPrincipalImpl author = new PollenPrincipalImpl(); - entity.setAuthor(author); - author.setName(getAuthorName()); - - return entity; - - } - public String getPermission() { return permission; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListBean.java index 200ee182..13398e26 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.FavoriteList; -import org.chorem.pollen.persistence.entity.FavoriteListImpl; /** * Created on 5/15/14. @@ -42,25 +41,6 @@ public class FavoriteListBean extends PollenBean<FavoriteList> { super(FavoriteList.class); } - @Override - public void fromEntity(FavoriteList entity) { - - setEntityId(entity.getTopiaId()); - setName(entity.getName()); - - } - - @Override - public FavoriteList toEntity() { - - FavoriteList entity = new FavoriteListImpl(); - entity.setTopiaId(getEntityId()); - entity.setName(getName()); - - return entity; - - } - public String getName() { return name; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListMemberBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListMemberBean.java index 1af9bcb0..bce83bc4 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListMemberBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/FavoriteListMemberBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.FavoriteListMember; -import org.chorem.pollen.persistence.entity.FavoriteListMemberImpl; /** * Created on 5/15/14. @@ -42,29 +41,6 @@ public class FavoriteListMemberBean extends PollenBean<FavoriteListMember> { super(FavoriteListMember.class); } - @Override - public void fromEntity(FavoriteListMember entity) { - - setEntityId(entity.getTopiaId()); - setName(entity.getName()); - setEmail(entity.getEmail()); - setWeight(entity.getWeight()); - - } - - @Override - public FavoriteListMember toEntity() { - - FavoriteListMember entity = new FavoriteListMemberImpl(); - entity.setEmail(getEmail()); - entity.setName(getName()); - entity.setWeight(getWeight()); - - return entity; - - } - - public String getName() { return name; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/LoginProviderBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/LoginProviderBean.java index c847df07..7d6725de 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/LoginProviderBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/LoginProviderBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.LoginProvider; -import org.chorem.pollen.persistence.entity.LoginProviderImpl; /** * @author Kevin Morin (Code Lutin) @@ -39,28 +38,6 @@ public class LoginProviderBean extends PollenBean<LoginProvider> { super(LoginProvider.class); } - @Override - public void fromEntity(LoginProvider entity) { - setEntityId(entity.getTopiaId()); - setName(entity.getName()); - setKey(entity.getKey()); - setSecret(entity.getSecret()); - setPermissions(entity.getPermissions()); - setActive(entity.isActive()); - } - - @Override - public LoginProvider toEntity() { - LoginProvider entity = new LoginProviderImpl(); - entity.setTopiaId(getEntityId()); - entity.setName(getName()); - entity.setKey(getKey()); - entity.setSecret(getSecret()); - entity.setPermissions(getPermissions()); - entity.setActive(isActive()); - return entity; - } - public String getName() { return name; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollBean.java index c382bafa..f7f0c2e7 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollBean.java @@ -21,23 +21,15 @@ package org.chorem.pollen.services.bean; * #L% */ -import com.google.common.base.Joiner; import org.apache.commons.collections4.CollectionUtils; import org.chorem.pollen.persistence.entity.ChoiceType; import org.chorem.pollen.persistence.entity.CommentVisibility; import org.chorem.pollen.persistence.entity.Poll; -import org.chorem.pollen.persistence.entity.PollImpl; import org.chorem.pollen.persistence.entity.PollType; -import org.chorem.pollen.persistence.entity.PollenPrincipal; -import org.chorem.pollen.persistence.entity.PollenPrincipalImpl; -import org.chorem.pollen.persistence.entity.Polls; import org.chorem.pollen.persistence.entity.ResultVisibility; import org.chorem.pollen.persistence.entity.VoteVisibility; -import java.util.Arrays; -import java.util.Collections; import java.util.Date; -import java.util.LinkedHashSet; import java.util.Objects; import java.util.Set; @@ -146,118 +138,7 @@ public class PollBean extends PollenBean<Poll> { protected boolean gtuValidated; - @Override - public void fromEntity(Poll entity) { - - setEntityId(entity.getTopiaId()); - - if (entity.getCreator() == null || entity.getCreator().getPermission() == null) { - - setPermission(null); - - } else { - - setPermission(entity.getCreator().getPermission().getToken()); - - } - - if (entity.getCreator() != null) { - - setCreatorName(entity.getCreator().getName()); - setCreatorEmail(entity.getCreator().getEmail()); - - } - - setTitle(entity.getTitle()); - setDescription(entity.getDescription()); - setCreateDate(entity.getTopiaCreateDate()); - setBeginChoiceDate(entity.getBeginChoiceDate()); - setEndChoiceDate(entity.getEndChoiceDate()); - setBeginDate(entity.getBeginDate()); - setEndDate(entity.getEndDate()); - setMaxChoiceNumber(entity.getMaxChoiceNumber()); - setChoiceAddAllowed(entity.isChoiceAddAllowed()); - setAnonymousVoteAllowed(entity.isAnonymousVoteAllowed()); - setContinuousResults(entity.isContinuousResults()); - setVoteCountingType(entity.getVoteCountingType()); - setPollType(entity.getPollType()); - setVoteVisibility(entity.getVoteVisibility()); - setCommentVisibility(entity.getCommentVisibility()); - setResultVisibility(entity.getResultVisibility()); - setParticipants(new LinkedHashSet<>(entity.getParticipants() == null ? Collections.emptyList() : Arrays.asList(entity.getParticipants().split("\\s")))); - setWithMe(entity.isWithMe()); - setChoiceType(entity.getChoiceType()); - setNotifyMeHoursBeforePollEnds(entity.getNotifyMeHoursBeforePollEnds()); - setVoteNotification(entity.isVoteNotification()); - setCommentNotification(entity.isCommentNotification()); - setNewChoiceNotification(entity.isNewChoiceNotification()); - setNotificationLocale(entity.getNotificationLocale()); - - Date now = new Date(); - if (Polls.isFinished(entity, now)) { - setStatus(PollStatus.CLOSED); - setClosed(true); - } else { - setClosed(false); - setStatus(PollStatus.CREATED); - - if (entity.isChoiceAddAllowed()) { - Date beginChoiceDate = entity.getBeginChoiceDate(); - Date endChoiceDate = entity.getEndChoiceDate(); - if ((beginChoiceDate == null || now.after(beginChoiceDate)) - && (endChoiceDate == null || now.before(endChoiceDate))) { - setStatus(PollStatus.ADDING_CHOICES); - } - } - - if (PollStatus.ADDING_CHOICES != getStatus()) { - Date beginDate = entity.getBeginDate(); - Date endDate = entity.getEndDate(); - if (beginDate != null && now.after(beginDate) && (endDate == null || now.before(endDate))) { - setStatus(PollStatus.VOTING); - } - } - } - } - - @Override - public Poll toEntity() { - - Poll entity = new PollImpl(); - entity.setTopiaId(getEntityId()); - PollenPrincipal creator = new PollenPrincipalImpl(); - creator.setName(getCreatorName()); - creator.setEmail(getCreatorEmail()); - entity.setCreator(creator); - - entity.setTitle(getTitle()); - entity.setDescription(getDescription()); - entity.setTitle(getTitle()); - entity.setDescription(getDescription()); - entity.setBeginChoiceDate(getBeginChoiceDate()); - entity.setEndChoiceDate(getEndChoiceDate()); - entity.setBeginDate(getBeginDate()); - entity.setEndDate(getEndDate()); - entity.setMaxChoiceNumber(getMaxChoiceNumber()); - entity.setChoiceAddAllowed(isChoiceAddAllowed()); - entity.setAnonymousVoteAllowed(isAnonymousVoteAllowed()); - entity.setContinuousResults(isContinuousResults()); - entity.setVoteCountingType(getVoteCountingType()); - entity.setPollType(getPollType()); - entity.setVoteVisibility(getVoteVisibility()); - entity.setCommentVisibility(getCommentVisibility()); - entity.setResultVisibility(getResultVisibility()); - entity.setParticipants(Joiner.on(' ').join(getParticipants())); - entity.setChoiceType(getChoiceType()); - entity.setWithMe(isWithMe()); - entity.setNotifyMeHoursBeforePollEnds(getNotifyMeHoursBeforePollEnds()); - entity.setVoteNotification(isVoteNotification()); - entity.setCommentNotification(isCommentNotification()); - entity.setNewChoiceNotification(isNewChoiceNotification()); - entity.setNotificationLocale(getNotificationLocale()); - return entity; - - } + protected int maxVoters; public String getPermission() { return permission; @@ -573,4 +454,12 @@ public class PollBean extends PollenBean<Poll> { public void setGtuValidated(boolean gtuValidated) { this.gtuValidated = gtuValidated; } + + public int getMaxVoters() { + return maxVoters; + } + + public void setMaxVoters(int maxVoters) { + this.maxVoters = maxVoters; + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBean.java index 9a2fe4ed..32bbd3f6 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBean.java @@ -76,10 +76,6 @@ public abstract class PollenBean<E extends TopiaEntity> { this.id.setEntityId(id); } - public abstract void fromEntity(E entity); - - public abstract E toEntity(); - @Override public boolean equals(Object o) { return this == o || o instanceof PollenBean && Objects.equals(id, ((PollenBean) o).id); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBeans.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBeans.java index 03211c99..1d245206 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBeans.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenBeans.java @@ -24,12 +24,10 @@ package org.chorem.pollen.services.bean; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import org.apache.commons.collections4.CollectionUtils; -import org.chorem.pollen.services.PollenTechnicalException; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.util.pagination.PaginationOrder; import org.nuiton.util.pagination.PaginationResult; -import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.function.Function; @@ -42,30 +40,9 @@ import java.util.function.Function; */ public class PollenBeans { - public static <E extends TopiaEntity, B extends PollenBean<E>> B toBean(Class<B> beanType, E entity, Function<B, B> beanFunction) { + public static <E extends TopiaEntity, B extends PollenBean<E>> PaginationResultBean<B> toBean(PaginationResult<E> entities, Function<E, B> beanFunction) { - try { - - B bean = beanType.newInstance(); - bean.fromEntity(entity); - - if (beanFunction != null) { - - bean = beanFunction.apply(bean); - - } - - return bean; - - } catch (InstantiationException | IllegalAccessException e) { - throw new PollenTechnicalException("Could not instanciate bean", e); - } - - } - - public static <E extends TopiaEntity, B extends PollenBean<E>> PaginationResultBean<B> toBean(Class<B> beanType, PaginationResult<E> entities, Function<B, B> beanFunction) { - - ImmutableList<B> bs = toBeanList(beanType, entities.getElements(), beanFunction); + ImmutableList<B> bs = toBeanList(entities.getElements(), beanFunction); PaginationResultBean<B> result = new PaginationResultBean<>(); result.setElements(bs); @@ -88,29 +65,15 @@ public class PollenBeans { } - public static <E extends TopiaEntity, B extends PollenBean<E>> ImmutableSet<B> toBeanSet(Class<B> beanType, Collection<E> entities, Function<B, B> beanFunction) { - - Collection<B> copy = new ArrayList<>(); - - for (E entity : entities) { - B bean = toBean(beanType, entity, beanFunction); - copy.add(bean); - } + public static <E extends TopiaEntity, B extends PollenBean<E>> ImmutableSet<B> toBeanSet(Collection<E> entities, Function<E, B> beanFunction) { - return ImmutableSet.copyOf(copy); + return entities.stream().map(beanFunction).collect(ImmutableSet.toImmutableSet()); } - public static <E extends TopiaEntity, B extends PollenBean<E>> ImmutableList<B> toBeanList(Class<B> beanType, Collection<E> entities, Function<B, B> beanFunction) { - - Collection<B> copy = new ArrayList<>(); - - for (E entity : entities) { - B bean = toBean(beanType, entity, beanFunction); - copy.add(bean); - } + public static <E extends TopiaEntity, B extends PollenBean<E>> ImmutableList<B> toBeanList(Collection<E> entities, Function<E, B> beanFunction) { - return ImmutableList.copyOf(copy); + return entities.stream().map(beanFunction).collect(ImmutableList.toImmutableList()); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenUserBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenUserBean.java index d1d1ccb5..a070b2d1 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenUserBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenUserBean.java @@ -22,11 +22,10 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.PollenUser; -import org.chorem.pollen.persistence.entity.PollenUserImpl; import java.util.ArrayList; +import java.util.Date; import java.util.List; -import java.util.stream.Collectors; /** * Created on 5/15/14. @@ -56,48 +55,12 @@ public class PollenUserBean extends PollenBean<PollenUser> { protected boolean gtuValidated; - public PollenUserBean() { - super(PollenUser.class); - } - - @Override - public void fromEntity(PollenUser entity) { - - setEntityId(entity.getTopiaId()); - - setName(entity.getName()); - setAdministrator(entity.isAdministrator()); - setBanned(entity.isBanned()); - setLanguage(entity.getLanguage()); - setEmail(entity.getEmail()); - setPassword(entity.getPassword()); - setEmailIsValidate(entity.getEmailActivationToken() == null); - setWithPassword(entity.getPassword() != null); - if (entity.getUserCredential() != null) { - setCredentials(entity.getUserCredential().stream() - .map(userCredential -> { - UserCredentialBean userCredentialBean = new UserCredentialBean(); - userCredentialBean.fromEntity(userCredential); - return userCredentialBean; - }) - .collect(Collectors.toList())); - } - } - - @Override - public PollenUser toEntity() { - - PollenUser entity = new PollenUserImpl(); - - entity.setTopiaId(getEntityId()); - entity.setName(getName()); - entity.setAdministrator(isAdministrator()); - entity.setLanguage(getLanguage()); - entity.setEmail(getEmail()); - entity.setPassword(getPassword()); + protected Date premiumTo; - return entity; + protected boolean premium; + public PollenUserBean() { + super(PollenUser.class); } public String getName() { @@ -179,4 +142,20 @@ public class PollenUserBean extends PollenBean<PollenUser> { public void setGtuValidated(boolean gtuValidated) { this.gtuValidated = gtuValidated; } + + public Date getPremiumTo() { + return premiumTo; + } + + public void setPremiumTo(Date premiumTo) { + this.premiumTo = premiumTo; + } + + public boolean isPremium() { + return premium; + } + + public void setPremium(boolean premium) { + this.premium = premium; + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ReportBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ReportBean.java index c7470363..6d44ca0a 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ReportBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ReportBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.Report; -import org.chorem.pollen.persistence.entity.ReportImpl; /** * @author Sylvain Bavencoff - bavencoff@codelutin.com @@ -63,24 +62,4 @@ public class ReportBean extends PollenBean<Report> { this.ignore = ignore; } - @Override - public void fromEntity(Report entity) { - setEntityId(entity.getTopiaId()); - - setLevel(ReportLevel.of(entity.getLevel())); - setEmail(entity.getEmail()); - setIgnore(entity.isIgnore()); - } - - @Override - public Report toEntity() { - Report entity = new ReportImpl(); - - entity.setTopiaId(getEntityId()); - entity.setLevel(getLevel().getScore()); - entity.setEmail(getEmail()); - entity.setIgnore(isIgnore()); - - return entity; - } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceFileBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceFileBean.java index 526d9fa2..61ae8b07 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceFileBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceFileBean.java @@ -23,7 +23,6 @@ package org.chorem.pollen.services.bean; import org.apache.commons.io.IOUtils; import org.chorem.pollen.persistence.entity.PollenResource; -import org.chorem.pollen.persistence.entity.PollenResourceImpl; import org.chorem.pollen.persistence.entity.ResourceType; import javax.sql.rowset.serial.SerialBlob; @@ -57,36 +56,6 @@ public class ResourceFileBean extends PollenBean<PollenResource> { super(PollenResource.class); } - @Override - public void fromEntity(PollenResource entity) { - setEntityId(entity.getTopiaId()); - - setName(entity.getName()); - setSize(entity.getSize()); - setContentType(entity.getContentType()); - setResourceType(entity.getResourceType()); - } - - @Override - public PollenResource toEntity() { - PollenResource entity = new PollenResourceImpl(); - - entity.setTopiaId(getEntityId()); - - try { - entity.setResourceContent(getResourceBlob()); - } catch (IOException | SQLException e) { - e.printStackTrace(); - } - - entity.setName(getName()); - entity.setSize(getSize()); - entity.setContentType(getContentType()); - entity.setResourceType(getResourceType()); - - return entity; - } - public File getFile() { return file; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceMetaBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceMetaBean.java index eea72c85..7c6c0d9e 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceMetaBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceMetaBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.PollenResource; -import org.chorem.pollen.persistence.entity.PollenResourceImpl; import org.chorem.pollen.persistence.entity.ResourceType; import java.util.Date; @@ -48,31 +47,6 @@ public class ResourceMetaBean extends PollenBean<PollenResource> { super(PollenResource.class); } - @Override - public void fromEntity(PollenResource entity) { - setEntityId(entity.getTopiaId()); - - setName(entity.getName()); - setSize(entity.getSize()); - setContentType(entity.getContentType()); - setResourceType(entity.getResourceType()); - setUploadDate(entity.getTopiaCreateDate()); - } - - @Override - public PollenResource toEntity() { - PollenResource entity = new PollenResourceImpl(); - - entity.setTopiaId(getEntityId()); - - entity.setName(getName()); - entity.setSize(getSize()); - entity.setContentType(getContentType()); - entity.setResourceType(getResourceType()); - - return entity; - } - public String getName() { return name; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceStreamBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceStreamBean.java index 75cd147c..c2a4088d 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceStreamBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceStreamBean.java @@ -23,7 +23,6 @@ package org.chorem.pollen.services.bean; import org.apache.commons.io.IOUtils; import org.chorem.pollen.persistence.entity.PollenResource; -import org.chorem.pollen.persistence.entity.PollenResourceImpl; import javax.sql.rowset.serial.SerialBlob; import java.io.IOException; @@ -50,41 +49,6 @@ public class ResourceStreamBean extends PollenBean<PollenResource> { super(PollenResource.class); } - @Override - public void fromEntity(PollenResource entity) { - setEntityId(entity.getTopiaId()); - - try { - setResourceContent(entity.getResourceContent().getBinaryStream()); - } catch (SQLException e) { - e.printStackTrace(); - } - - setName(entity.getName()); - setSize(entity.getSize()); - setContentType(entity.getContentType()); - } - - @Override - public PollenResource toEntity() { - PollenResource entity = new PollenResourceImpl(); - - entity.setTopiaId(getEntityId()); - - try { - entity.setResourceContent(getResourceBlob()); - } catch (IOException | SQLException e) { - e.printStackTrace(); - } - - entity.setName(getName()); - entity.setSize(getSize()); - entity.setContentType(getContentType()); - - - return entity; - } - public InputStream getResourceContent() { return resourceContent; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/UserCredentialBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/UserCredentialBean.java index fb52615b..0bf393b7 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/UserCredentialBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/UserCredentialBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.UserCredential; -import org.chorem.pollen.persistence.entity.UserCredentialImpl; /** * @author Kevin Morin (Code Lutin) @@ -33,28 +32,10 @@ public class UserCredentialBean extends PollenBean<UserCredential> { protected String userName; protected String emailAddress; - protected UserCredentialBean() { + public UserCredentialBean() { super(UserCredential.class); } - @Override - public void fromEntity(UserCredential entity) { - setEntityId(entity.getTopiaId()); - setProvider(entity.getProvider()); - setUserName(entity.getUserName()); - setEmailAddress(entity.getEmail()); - } - - @Override - public UserCredential toEntity() { - UserCredential entity = new UserCredentialImpl(); - entity.setTopiaId(getEntityId()); - entity.setProvider(getProvider()); - entity.setUserName(getUserName()); - entity.setEmail(getEmailAddress()); - return entity; - } - public String getProvider() { return provider; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java index 58fd29d8..cf2ead11 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java @@ -23,17 +23,11 @@ package org.chorem.pollen.services.bean; import com.google.common.collect.Sets; import org.chorem.pollen.persistence.entity.PollenPrincipal; -import org.chorem.pollen.persistence.entity.PollenPrincipalImpl; import org.chorem.pollen.persistence.entity.Vote; -import org.chorem.pollen.persistence.entity.VoteImpl; -import org.chorem.pollen.persistence.entity.VoteToChoice; -import org.chorem.pollen.persistence.entity.VoteToChoices; import org.chorem.pollen.persistence.entity.VoterListMember; -import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashSet; -import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -61,74 +55,12 @@ public class VoteBean extends PollenBean<Vote> { private ReportResumeBean report; + protected boolean ignored; + public VoteBean() { super(Vote.class); } - @Override - public void fromEntity(Vote vote) { - - setEntityId(vote.getTopiaId()); - - if (vote.getVoter() == null || vote.getVoter().getPermission() == null) { - - setPermission(null); - - } else { - - setPermission(vote.getVoter().getPermission().getToken()); - - } - - setAnonymous(vote.isAnonymous()); - getVoterId().setEntityId(vote.getVoter().getTopiaId()); - setVoterName(vote.getVoter().getName()); - setWeight(vote.getWeight()); - - List<VoteToChoice> voteToChoices = new ArrayList<>(vote.getVoteToChoice()); - VoteToChoices.sortByChoiceOrder(voteToChoices); - - for (VoteToChoice voteToChoice : voteToChoices) { - - VoteToChoiceBean choiceBean = new VoteToChoiceBean(); - choiceBean.fromEntity(voteToChoice); - addChoice(choiceBean); - - } - - if (vote.getVoterListMember() != null) { - - setVoterListMembers(vote.getVoterListMember()); - - } - - } - - @Override - public Vote toEntity() { - - Vote entity = new VoteImpl(); - - entity.setTopiaId(getEntityId()); - entity.setAnonymous(getAnonymous() != null && getAnonymous()); - entity.setWeight(getWeight()); - - PollenPrincipal voter = new PollenPrincipalImpl(); - entity.setVoter(voter); - voter.setTopiaId(getVoterId().getEntityId()); - voter.setName(getVoterName()); - - for (VoteToChoiceBean choiceBean : choice) { - - VoteToChoice voteToChoice = choiceBean.toEntity(); - entity.addVoteToChoice(voteToChoice); - - } - - return entity; - - } - public String getVoterName() { return voterName; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteToChoiceBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteToChoiceBean.java index 031a5705..4f3df80f 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteToChoiceBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteToChoiceBean.java @@ -22,9 +22,7 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.Choice; -import org.chorem.pollen.persistence.entity.ChoiceImpl; import org.chorem.pollen.persistence.entity.VoteToChoice; -import org.chorem.pollen.persistence.entity.VoteToChoiceImpl; /** * Created on 5/15/14. @@ -42,28 +40,6 @@ public class VoteToChoiceBean extends PollenBean<VoteToChoice> { super(VoteToChoice.class); } - @Override - public void fromEntity(VoteToChoice entity) { - - setEntityId(entity.getTopiaId()); - setVoteValue(entity.getVoteValue()); - getChoiceId().setEntityId(entity.getChoice().getTopiaId()); - - } - - @Override - public VoteToChoice toEntity() { - - VoteToChoice entity = new VoteToChoiceImpl(); - entity.setTopiaId(getEntityId()); - entity.setVoteValue(getVoteValue()); - entity.setChoice(new ChoiceImpl()); - entity.getChoice().setTopiaId(getChoiceId().getEntityId()); - - return entity; - - } - public PollenEntityId<Choice> getChoiceId() { if (choiceId == null) { choiceId = PollenEntityId.newId(Choice.class); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java index 2eec3235..7d76b4f8 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java @@ -22,7 +22,6 @@ package org.chorem.pollen.services.bean; */ import org.chorem.pollen.persistence.entity.VoterList; -import org.chorem.pollen.persistence.entity.VoterListImpl; /** * Created on 5/15/14. @@ -46,29 +45,6 @@ public class VoterListBean extends PollenBean<VoterList> { super(VoterList.class); } - @Override - public void fromEntity(VoterList entity) { - - setEntityId(entity.getTopiaId()); - setName(entity.getName()); - setWeight(entity.getWeight()); - if (entity.getParent() != null) { - getParentId().setEntityId(entity.getParent().getTopiaId()); - } - } - - @Override - public VoterList toEntity() { - - VoterList entity = new VoterListImpl(); - entity.setTopiaId(getEntityId()); - entity.setName(getName()); - entity.setWeight(getWeight()); - - return entity; - - } - public String getName() { return name; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListMemberBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListMemberBean.java index 09825fd6..929f3a16 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListMemberBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListMemberBean.java @@ -21,11 +21,8 @@ package org.chorem.pollen.services.bean; * #L% */ -import org.chorem.pollen.persistence.entity.PollenPrincipal; -import org.chorem.pollen.persistence.entity.PollenPrincipalImpl; import org.chorem.pollen.persistence.entity.VoterList; import org.chorem.pollen.persistence.entity.VoterListMember; -import org.chorem.pollen.persistence.entity.VoterListMemberImpl; /** * Created on 5/15/14. @@ -49,37 +46,6 @@ public class VoterListMemberBean extends PollenBean<VoterListMember> { super(VoterListMember.class); } - @Override - public void fromEntity(VoterListMember entity) { - - setEntityId(entity.getTopiaId()); - if (entity.getMember() != null) { - setName(entity.getMember().getName()); - setEmail(entity.getMember().getEmail()); - } - setWeight(entity.getWeight()); - getVoterListId().setEntityId(entity.getVoterList().getTopiaId()); - - } - - @Override - public VoterListMember toEntity() { - - VoterListMember entity = new VoterListMemberImpl(); - entity.setTopiaId(getEntityId()); - - PollenPrincipal member = new PollenPrincipalImpl(); - member.setEmail(getEmail()); - member.setName(getName()); - entity.setMember(member); - - entity.setWeight(getWeight()); - - return entity; - - } - - public String getName() { return name; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/export/ChildFavoriteListExport.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/export/ChildFavoriteListExport.java index 205e5d93..c7816a76 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/export/ChildFavoriteListExport.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/export/ChildFavoriteListExport.java @@ -24,8 +24,6 @@ package org.chorem.pollen.services.bean.export; import org.chorem.pollen.persistence.entity.ChildFavoriteList; import org.chorem.pollen.persistence.entity.ChildFavoriteListImpl; import org.chorem.pollen.persistence.entity.FavoriteList; -import org.chorem.pollen.services.bean.ChildFavoriteListBean; -import org.chorem.pollen.services.bean.FavoriteListBean; import java.util.List; @@ -75,18 +73,4 @@ public class ChildFavoriteListExport { return entity; } - - public ChildFavoriteListBean toBean(List<FavoriteList> existingFavoriteLists) { - ChildFavoriteListBean bean = new ChildFavoriteListBean(); - bean.setWeight(getWeight()); - FavoriteList childEntity = existingFavoriteLists.stream() - .filter(favoriteList -> getChild().equals(favoriteList.getName())) - .findFirst() - .orElse(null); - FavoriteListBean childBean = new FavoriteListBean(); - childBean.fromEntity(childEntity); - bean.setChild(childBean); - - return bean; - } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/ChoiceService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/ChoiceService.java index 333fd53e..ae12f859 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/ChoiceService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/ChoiceService.java @@ -24,6 +24,7 @@ package org.chorem.pollen.services.service; import com.google.common.collect.Sets; import org.apache.commons.collections4.CollectionUtils; import org.chorem.pollen.persistence.entity.Choice; +import org.chorem.pollen.persistence.entity.ChoiceImpl; import org.chorem.pollen.persistence.entity.ChoiceTopiaDao; import org.chorem.pollen.persistence.entity.ChoiceType; import org.chorem.pollen.persistence.entity.Poll; @@ -37,7 +38,6 @@ import org.chorem.pollen.services.service.security.PermissionVerb; import java.util.Calendar; import java.util.List; import java.util.Set; -import java.util.function.Function; import static org.nuiton.i18n.I18n.l; @@ -50,23 +50,49 @@ import static org.nuiton.i18n.I18n.l; public class ChoiceService extends PollenServiceSupport { - protected final Function<ChoiceBean, ChoiceBean> choiceBeanFunction = input -> { - if (isNotPermitted(PermissionVerb.editChoice, input.getEntityId())) { - input.setPermission(null); + public ChoiceBean toChoiceBean(Choice entity) { + ChoiceBean bean = new ChoiceBean(); + bean.setEntityId(entity.getTopiaId()); + + if (entity.getCreator() == null + || entity.getCreator().getPermission() == null + || isNotPermitted(PermissionVerb.editChoice, entity.getTopiaId())) { + bean.setPermission(null); } else { - ReportResumeBean report = getReportService().getReport(input.getEntityId()); - input.setReport(report); + bean.setPermission(entity.getCreator().getPermission().getToken()); } - if (input.getChoiceType() == ChoiceType.RESOURCE) { - input.setChoiceValue(getPollenResourceService().getReduceIdByTopiaId(input.getChoiceValue())); + if (bean.getChoiceType() == ChoiceType.RESOURCE) { + bean.setChoiceValue(getPollenResourceService().getReduceIdByTopiaId(entity.getChoiceValue())); + } else { + bean.setChoiceValue(entity.getChoiceValue()); + } + + bean.setDescription(entity.getDescription()); + bean.setChoiceType(entity.getChoiceType()); + bean.setChoiceOrder(entity.getChoiceOrder()); + + if (isPermitted(PermissionVerb.editChoice, entity.getTopiaId())) { + ReportResumeBean report = getReportService().getReport(entity.getTopiaId()); + bean.setReport(report); } - input.setChoiceIsDeletable(isPermitted(PermissionVerb.deleteChoice, input.getEntityId())); + bean.setChoiceIsDeletable(isPermitted(PermissionVerb.deleteChoice, entity.getTopiaId())); - return input; + return bean; }; + public Choice toChoice(ChoiceBean bean) { + Choice entity = new ChoiceImpl(); + entity.setTopiaId(bean.getEntityId()); + entity.setChoiceValue(bean.getChoiceValue()); + entity.setDescription(bean.getDescription()); + entity.setChoiceType(bean.getChoiceType()); + entity.setChoiceOrder(bean.getChoiceOrder()); + + return entity; + } + public List<ChoiceBean> getChoices(String pollId) { checkNotNull(pollId); @@ -75,7 +101,7 @@ public class ChoiceService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); List<Choice> choices = getChoiceDao().findAll(poll); - return toBeanList(ChoiceBean.class, choices, choiceBeanFunction); + return toBeanList(choices, this::toChoiceBean); } @@ -88,7 +114,7 @@ public class ChoiceService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); Choice choice = getChoice(poll, choiceId); - return toBean(ChoiceBean.class, choice, choiceBeanFunction); + return toChoiceBean(choice); } @@ -135,7 +161,7 @@ public class ChoiceService extends PollenServiceSupport { getNotificationService().onChoiceEdited(poll, result); - return toBean(ChoiceBean.class, result, choiceBeanFunction); + return toChoiceBean(result); } @@ -340,9 +366,7 @@ public class ChoiceService extends PollenServiceSupport { } - public long getChoiceCount(String pollId) { - checkNotNull(pollId); - Poll poll = getPollService().getPoll0(pollId); + public long getChoiceCount(Poll poll) { return getChoiceDao().forPollEquals(poll).count(); } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/CommentService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/CommentService.java index 34f6e8a4..d7dd28b3 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/CommentService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/CommentService.java @@ -35,8 +35,6 @@ import org.chorem.pollen.services.service.security.PermissionVerb; import org.nuiton.util.pagination.PaginationParameter; import org.nuiton.util.pagination.PaginationResult; -import java.util.function.Function; - import static org.nuiton.i18n.I18n.l; /** @@ -47,14 +45,39 @@ import static org.nuiton.i18n.I18n.l; */ public class CommentService extends PollenServiceSupport { - private final Function<CommentBean, CommentBean> commentFunction = input -> { - if (isNotPermitted(PermissionVerb.editComment, input.getEntityId())) { - input.setPermission(null); + protected CommentBean toCommentBean(Comment entity) { + + CommentBean bean = new CommentBean(); + bean.setEntityId(entity.getTopiaId()); + + if (entity.getAuthor() == null + || entity.getAuthor().getPermission() == null + || isNotPermitted(PermissionVerb.editComment, entity.getTopiaId())) { + + bean.setPermission(null); + } else { - ReportResumeBean report = getReportService().getReport(input.getEntityId()); - input.setReport(report); + + bean.setPermission(entity.getAuthor().getPermission().getToken()); + + } + + bean.setText(entity.getText()); + bean.setPostDate(entity.getPostDate()); + + if (entity.getAuthor() != null) { + + bean.setAuthorName(entity.getAuthor().getName()); + + } + + if (isPermitted(PermissionVerb.editComment, entity.getTopiaId())) { + + ReportResumeBean report = getReportService().getReport(entity.getTopiaId()); + bean.setReport(report); + } - return input; + return bean; }; public PaginationResultBean<CommentBean> getComments(String pollId, PaginationParameterBean paginationParameter) { @@ -67,7 +90,7 @@ public class CommentService extends PollenServiceSupport { PaginationResult<Comment> comments = getCommentDao().find(poll, page); - return toPaginationListBean(CommentBean.class, comments, commentFunction); + return toPaginationListBean(comments, this::toCommentBean); } @@ -114,7 +137,7 @@ public class CommentService extends PollenServiceSupport { Comment comment = getComment(poll, commentId); - return toBean(CommentBean.class, comment, commentFunction); + return toCommentBean(comment); } @@ -156,7 +179,7 @@ public class CommentService extends PollenServiceSupport { getNotificationService().onCommentEdited(poll, result); getFeedService().onCommentEdited(poll, result); - return toBean(CommentBean.class, result); + return toCommentBean(result); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/FavoriteListService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/FavoriteListService.java index 8b0666f9..3127617f 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/FavoriteListService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/FavoriteListService.java @@ -72,28 +72,48 @@ import static org.nuiton.i18n.I18n.l; */ public class FavoriteListService extends PollenServiceSupport { - public FavoriteListBean favoriteListBeanFunction(FavoriteListBean input) { + public FavoriteListBean toFavoriteListBean(FavoriteList entity) { + FavoriteListBean bean = new FavoriteListBean(); + + bean.setEntityId(entity.getTopiaId()); + bean.setName(entity.getName()); long countChildren = getChildFavoriteListDao() - .forProperties(ChildFavoriteList.PROPERTY_PARENT + "." + FavoriteList.PROPERTY_TOPIA_ID, input.getEntityId()) + .forParentEquals(entity) .count(); - input.setCountChildren(countChildren); + bean.setCountChildren(countChildren); long countMembers = getFavoriteListMemberDao() - .forProperties(FavoriteListMember.PROPERTY_FAVORITE_LIST + "." + FavoriteList.PROPERTY_TOPIA_ID, input.getEntityId()) + .forFavoriteListEquals(entity) .count(); - input.setCountMembers(countMembers); + bean.setCountMembers(countMembers); - return input; + return bean; } - public ChildFavoriteListBean childFavoriteListBeanFunction(ChildFavoriteListBean input) { - input.setChild(favoriteListBeanFunction(input.getChild())); + protected ChildFavoriteListBean toChildFavoriteListBean(ChildFavoriteList entity) { + + ChildFavoriteListBean bean = new ChildFavoriteListBean(); + + bean.setEntityId(entity.getTopiaId()); + bean.setChild(toFavoriteListBean(entity.getChild())); + bean.setWeight(entity.getWeight()); - return input; + return bean; + } + + protected FavoriteListMemberBean toFavoriteListMemberBean(FavoriteListMember entity) { + FavoriteListMemberBean bean = new FavoriteListMemberBean(); + + bean.setEntityId(entity.getTopiaId()); + bean.setName(entity.getName()); + bean.setEmail(entity.getEmail()); + bean.setWeight(entity.getWeight()); + + return bean; } public PaginationResultBean<FavoriteListBean> getFavoriteLists(PaginationParameterBean paginationParameter, String search) { @@ -110,7 +130,7 @@ public class FavoriteListService extends PollenServiceSupport { favoriteLists = getFavoriteListDao().forPollenUserEquals(user).findPage(page); } - return toPaginationListBean(FavoriteListBean.class, favoriteLists, this::favoriteListBeanFunction); + return toPaginationListBean(favoriteLists, this::toFavoriteListBean); } @@ -121,7 +141,7 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); - return toBean(FavoriteListBean.class, favoriteList, this::favoriteListBeanFunction); + return toFavoriteListBean(favoriteList); } @@ -164,7 +184,7 @@ public class FavoriteListService extends PollenServiceSupport { getNotificationService().onFavoriteListEdited(user, result); - return toBean(FavoriteListBean.class, result, this::favoriteListBeanFunction); + return toFavoriteListBean(result); } @@ -230,7 +250,7 @@ public class FavoriteListService extends PollenServiceSupport { } - return toPaginationListBean(FavoriteListMemberBean.class, members); + return toPaginationListBean(members, this::toFavoriteListMemberBean); } @@ -243,7 +263,7 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); FavoriteListMember member = getFavoriteListMember0(favoriteList, memberId); - return toBean(FavoriteListMemberBean.class, member); + return toFavoriteListMemberBean(member); } @@ -289,7 +309,7 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteListMember result = saveFavoriteListMember(favoriteList, member); commit(); - return toBean(FavoriteListMemberBean.class, result); + return toFavoriteListMemberBean(result); } @@ -658,7 +678,7 @@ public class FavoriteListService extends PollenServiceSupport { } - return toPaginationListBean(ChildFavoriteListBean.class, children, this::childFavoriteListBeanFunction); + return toPaginationListBean(children, this::toChildFavoriteListBean); } @@ -671,7 +691,7 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteList favoriteList = getFavoriteList0(user, favoriteListId); ChildFavoriteList child = getChildList0(favoriteList, childListId); - return toBean(ChildFavoriteListBean.class, child, this::childFavoriteListBeanFunction); + return toChildFavoriteListBean(child); } @@ -713,7 +733,7 @@ public class FavoriteListService extends PollenServiceSupport { ChildFavoriteList result = saveChildFavoriteList(favoriteList, childList); commit(); - return toBean(ChildFavoriteListBean.class, result, this::childFavoriteListBeanFunction); + return toChildFavoriteListBean(result); } @@ -774,7 +794,7 @@ public class FavoriteListService extends PollenServiceSupport { FavoriteList favoriteList = importFavoriteListMembersFromVoterList(voterList, user); commit(); - return toBean(FavoriteListBean.class, favoriteList); + return toFavoriteListBean(favoriteList); } protected FavoriteList importFavoriteListMembersFromVoterList(VoterList voterList, PollenUser user) { @@ -954,7 +974,7 @@ public class FavoriteListService extends PollenServiceSupport { int childIndex = 0; for (ChildFavoriteListExport childFavoriteListExport : favoriteListExport.getChildren()) { - ErrorMap errorsChild = checkChildList(favoriteList, children, childFavoriteListExport.toBean(existingFavoriteLists)); + ErrorMap errorsChild = checkChildList(favoriteList, children, toChildFavoriteListBean(childFavoriteListExport, existingFavoriteLists)); errorsChild.copyTo(errors, "favoriteLists[" + favoriteListIndex + "].children[" + childIndex + "]"); @@ -968,6 +988,19 @@ public class FavoriteListService extends PollenServiceSupport { return errors; } + protected ChildFavoriteListBean toChildFavoriteListBean(ChildFavoriteListExport entity, List<FavoriteList> existingFavoriteLists) { + ChildFavoriteListBean bean = new ChildFavoriteListBean(); + bean.setWeight(entity.getWeight()); + FavoriteList childEntity = existingFavoriteLists.stream() + .filter(favoriteList -> entity.getChild().equals(favoriteList.getName())) + .findFirst() + .orElse(null); + FavoriteListBean childBean = toFavoriteListBean(childEntity); + bean.setChild(childBean); + + return bean; + } + public ExportBean exportFavoriteLists() { PollenUser user = checkAndGetConnectedUser(); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/FeedbackService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/FeedbackService.java index 8854e5ec..c54df79d 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/FeedbackService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/FeedbackService.java @@ -42,8 +42,7 @@ public class FeedbackService extends PollenServiceSupport { PollenUser user = getConnectedUser(); PollenUserBean userBean = null; if (user != null) { - userBean = new PollenUserBean(); - userBean.fromEntity(user); + userBean = getUserService().toPollenUserBean(user); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java index a6e5f465..970dcecf 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/FixturesService.java @@ -38,11 +38,11 @@ import org.chorem.pollen.services.bean.PollBean; import org.chorem.pollen.services.bean.PollenEntityRef; import org.chorem.pollen.services.service.security.SecurityService; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; public class FixturesService extends PollenServiceSupport { @@ -106,18 +106,14 @@ public class FixturesService extends PollenServiceSupport { Collection<Poll> polls = fixtures.fixture("polls"); List<Choice> choices = fixtures.fixture("choices"); - List<ChoiceBean> choicesBean = new ArrayList<>(); - for (Choice choice : choices) { - ChoiceBean choiceBean = new ChoiceBean(); - choiceBean.fromEntity(choice); - choicesBean.add(choiceBean); - } + List<ChoiceBean> choicesBean = choices.stream() + .map(getChoiceService()::toChoiceBean) + .collect(Collectors.toList()); for (Poll poll : polls) { try { - PollBean pollBean = new PollBean(); - pollBean.fromEntity(poll); + PollBean pollBean = getPollService().toPollBean(poll); PollenEntityRef<Poll> createdPoll = pollService.createPoll(pollBean, choicesBean, Collections.emptyList(), Collections.emptyList()); poll.setTopiaId(createdPoll.getEntityId()); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/GtuService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/GtuService.java index d129a0bf..83a01416 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/GtuService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/GtuService.java @@ -10,17 +10,18 @@ package org.chorem.pollen.services.service; * 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 com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import org.apache.commons.collections4.CollectionUtils; import org.chorem.pollen.persistence.entity.Poll; @@ -41,15 +42,24 @@ import java.util.Optional; */ public class GtuService extends PollenServiceSupport { - public ResourceStreamBean getCurrentGtu() { + public GtuMetaBean toGtuMetaBean(PollenResource entity) { + GtuMetaBean bean = new GtuMetaBean(); + bean.setEntityId(entity.getTopiaId()); - ResourceStreamBean result = null; + bean.setName(entity.getName()); + bean.setSize(entity.getSize()); + bean.setContentType(entity.getContentType()); + bean.setResourceType(entity.getResourceType()); + bean.setUploadDate(entity.getTopiaCreateDate()); - Optional<PollenResource> currentGtu = getCurrentGtu0(); - if (currentGtu.isPresent()) { - result = toBean(ResourceStreamBean.class, currentGtu.get()); - } - return result; + return bean; + } + + public ResourceStreamBean getCurrentGtu() { + + return getCurrentGtu0() + .map(getPollenResourceService()::toResourceStreamBean) + .orElse(null); } public List<GtuMetaBean> getAllGtus() { @@ -62,10 +72,14 @@ public class GtuService extends PollenServiceSupport { String currentId = CollectionUtils.isNotEmpty(gtus) ? Iterables.getLast(gtus).getTopiaId() : null; - return toBeanList(GtuMetaBean.class, gtus, input -> { - input.setCurrent(input.getEntityId().equals(currentId)); - return input; - }); + ImmutableList<GtuMetaBean> gtuMetaBeans = toBeanList(gtus, this::toGtuMetaBean); + + if (CollectionUtils.isNotEmpty(gtus)) { + Iterables.getLast(gtuMetaBeans).setCurrent(true); + } + + return gtuMetaBeans; + } public boolean isGtu() { @@ -83,16 +97,6 @@ public class GtuService extends PollenServiceSupport { .toJavaUtil(); } - protected boolean isPollGtuValidated(String pollId) { - Poll poll = getPollService().getPoll0(pollId); - return isGtuValidated(poll); - } - - protected boolean isUserGtuValidated(String userId) { - PollenUser user = getUserService().getUser0(userId); - return isGtuValidated(user); - } - public boolean isGtuValidated(PollenUser user) { return isGtuValidatedForDate(user.getGtuValidationDate()); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java index dc7f72d2..084d48b1 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java @@ -31,6 +31,7 @@ import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.PollType; import org.chorem.pollen.persistence.entity.PollenPrincipal; import org.chorem.pollen.persistence.entity.PollenUser; +import org.chorem.pollen.persistence.entity.Polls; import org.chorem.pollen.services.bean.ChoiceBean; import org.chorem.pollen.services.bean.PaginationParameterBean; import org.chorem.pollen.services.bean.PaginationResultBean; @@ -52,9 +53,9 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; +import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -import java.util.function.Function; import static org.nuiton.i18n.I18n.l; @@ -66,57 +67,136 @@ import static org.nuiton.i18n.I18n.l; */ public class PollService extends PollenServiceSupport { - private final Function<PollBean, PollBean> pollBeanFunction = input -> { - if (isNotPermitted(PermissionVerb.editPoll, input.getEntityId())) { - input.setPermission(null); - input.setCreatorEmail(null); + public PollBean toPollBean(Poll entity) { + PollBean bean = new PollBean(); + + bean.setEntityId(entity.getTopiaId()); + + if (entity.getCreator() == null || entity.getCreator().getPermission() == null) { + + bean.setPermission(null); } else { - ReportResumeBean report = getReportService().getReport(input.getEntityId()); - input.setReport(report); + + bean.setPermission(entity.getCreator().getPermission().getToken()); + } - boolean commentIsVisible = isPermitted(PermissionVerb.readComment, input.getEntityId()); - input.setCommentIsVisible(commentIsVisible); + if (entity.getCreator() != null) { + + bean.setCreatorName(entity.getCreator().getName()); + bean.setCreatorEmail(entity.getCreator().getEmail()); + + } - input.setVoteIsVisible(isPermitted(PermissionVerb.readVote, input.getEntityId())); + bean.setTitle(entity.getTitle()); + bean.setDescription(entity.getDescription()); + bean.setCreateDate(entity.getTopiaCreateDate()); + bean.setBeginChoiceDate(entity.getBeginChoiceDate()); + bean.setEndChoiceDate(entity.getEndChoiceDate()); + bean.setBeginDate(entity.getBeginDate()); + bean.setEndDate(entity.getEndDate()); + bean.setMaxChoiceNumber(entity.getMaxChoiceNumber()); + bean.setChoiceAddAllowed(entity.isChoiceAddAllowed()); + bean.setAnonymousVoteAllowed(entity.isAnonymousVoteAllowed()); + bean.setContinuousResults(entity.isContinuousResults()); + bean.setVoteCountingType(entity.getVoteCountingType()); + bean.setPollType(entity.getPollType()); + bean.setVoteVisibility(entity.getVoteVisibility()); + bean.setCommentVisibility(entity.getCommentVisibility()); + bean.setResultVisibility(entity.getResultVisibility()); + bean.setParticipants(new LinkedHashSet<>(entity.getParticipants() == null ? Collections.emptyList() : Arrays.asList(entity.getParticipants().split("\\s")))); + bean.setWithMe(entity.isWithMe()); + bean.setChoiceType(entity.getChoiceType()); + bean.setNotifyMeHoursBeforePollEnds(entity.getNotifyMeHoursBeforePollEnds()); + bean.setVoteNotification(entity.isVoteNotification()); + bean.setCommentNotification(entity.isCommentNotification()); + bean.setNewChoiceNotification(entity.isNewChoiceNotification()); + bean.setNotificationLocale(entity.getNotificationLocale()); Date now = getNow(); - boolean beforePollEndDate = input.getEndDate() == null || now.before(input.getEndDate()); + if (Polls.isFinished(entity, now)) { + bean.setStatus(PollBean.PollStatus.CLOSED); + bean.setClosed(true); + } else { + bean.setClosed(false); + bean.setStatus(PollBean.PollStatus.CREATED); + + if (entity.isChoiceAddAllowed()) { + Date beginChoiceDate = entity.getBeginChoiceDate(); + Date endChoiceDate = entity.getEndChoiceDate(); + if ((beginChoiceDate == null || now.after(beginChoiceDate)) + && (endChoiceDate == null || now.before(endChoiceDate))) { + bean.setStatus(PollBean.PollStatus.ADDING_CHOICES); + } + } - boolean resultIsVisible = (beforePollEndDate || input.isContinuousResults()) - && isPermitted(PermissionVerb.readPollResult, input.getEntityId()); + if (PollBean.PollStatus.ADDING_CHOICES != bean.getStatus()) { + Date beginDate = entity.getBeginDate(); + Date endDate = entity.getEndDate(); + if (beginDate != null && now.after(beginDate) && (endDate == null || now.before(endDate))) { + bean.setStatus(PollBean.PollStatus.VOTING); + } + } + } - input.setResultIsVisible(resultIsVisible); + if (isNotPermitted(PermissionVerb.editPoll, entity.getTopiaId())) { + bean.setPermission(null); + bean.setCreatorEmail(null); + + } else { + ReportResumeBean report = getReportService().getReport(entity.getTopiaId()); + bean.setReport(report); + } + + boolean commentIsVisible = isPermitted(PermissionVerb.readComment, entity.getTopiaId()); + bean.setCommentIsVisible(commentIsVisible); + + bean.setVoteIsVisible(isPermitted(PermissionVerb.readVote, entity.getTopiaId())); + + boolean beforePollEndDate = entity.getEndDate() == null || now.before(entity.getEndDate()); + + boolean resultIsVisible = (beforePollEndDate || entity.isContinuousResults()) + && isPermitted(PermissionVerb.readPollResult, entity.getTopiaId()); + + bean.setResultIsVisible(resultIsVisible); boolean canVote = beforePollEndDate - && (input.getBeginDate() == null || !now.before(input.getBeginDate())) - && isPermitted(PermissionVerb.addVote, input.getEntityId()); + && (entity.getBeginDate() == null || !now.before(entity.getBeginDate())) + && isPermitted(PermissionVerb.addVote, entity.getTopiaId()); - input.setCanVote(canVote); + bean.setCanVote(canVote); if (commentIsVisible) { - long commentCount = getCommentService().getCommentCount(input.getEntityId()); - input.setCommentCount(commentCount); + long commentCount = getCommentService().getCommentCount(entity.getTopiaId()); + bean.setCommentCount(commentCount); + } + if (entity.isPersisted()) { + long voteCount = getVoteService().getVoteCount(entity); + bean.setVoteCount(voteCount); + long participantCount = getVoterListService().getVoterListMemberCount(entity); + bean.setParticipantCount(participantCount); + long choiceCount = getChoiceService().getChoiceCount(entity); + bean.setChoiceCount(choiceCount); } - long voteCount = getVoteService().getVoteCount(input.getEntityId()); - input.setVoteCount(voteCount); - long participantCount = getVoterListService().getVoterListMemberCount(input.getEntityId()); - input.setParticipantCount(participantCount); - long choiceCount = getChoiceService().getChoiceCount(input.getEntityId()); - input.setChoiceCount(choiceCount); - input.setGtuValidated(getGtuService().isPollGtuValidated(input.getEntityId())); + bean.setGtuValidated(getGtuService().isGtuValidated(entity)); + bean.setMaxVoters(getMaxVoters(entity)); - return input; + return bean; }; + protected int getMaxVoters(Poll poll) { + boolean premium = poll.isPremium() || getUserService().isPremium(poll.getCreator().getPollenUser()); + return premium ? 0 : getPollenServiceConfig().getMaxVoters(); + } + public PaginationResultBean<PollBean> getPolls(PaginationParameterBean paginationParameter, String search) { checkIsAdmin(); PaginationParameter page = getPaginationParameter(paginationParameter); PaginationResult<Poll> polls = getPollDao().findAll(page, search); - return toPaginationListBean(PollBean.class, polls, pollBeanFunction); + return toPaginationListBean(polls, this::toPollBean); } @@ -126,7 +206,7 @@ public class PollService extends PollenServiceSupport { PaginationParameter page = getPaginationParameter(paginationParameter); PaginationResult<Poll> polls = getPollDao().findAllCreated(connectedUser, page, search); - return toPaginationListBean(PollBean.class, polls, pollBeanFunction); + return toPaginationListBean(polls, this::toPollBean); } @@ -136,7 +216,7 @@ public class PollService extends PollenServiceSupport { PaginationParameter page = getPaginationParameter(paginationParameter); PaginationResult<Poll> polls = getPollDao().findAllInvited(connectedUser, page, search); - return toPaginationListBean(PollBean.class, polls, pollBeanFunction); + return toPaginationListBean(polls, this::toPollBean); } @@ -146,7 +226,7 @@ public class PollService extends PollenServiceSupport { PaginationParameter page = getPaginationParameter(paginationParameter); PaginationResult<Poll> polls = getPollDao().findAllParticipated(connectedUser, page, search); - return toPaginationListBean(PollBean.class, polls, pollBeanFunction); + return toPaginationListBean(polls, this::toPollBean); } @@ -157,7 +237,7 @@ public class PollService extends PollenServiceSupport { Poll poll = getPoll0(pollId); - return toBean(PollBean.class, poll, pollBeanFunction); + return toPollBean(poll); } @@ -258,7 +338,7 @@ public class PollService extends PollenServiceSupport { getNotificationService().onPollEdited(savedPoll, newParticipants); getFeedService().onPollEdited(savedPoll, newParticipants); - return toBean(PollBean.class, savedPoll, pollBeanFunction); + return toPollBean(savedPoll); } @@ -285,7 +365,7 @@ public class PollService extends PollenServiceSupport { Poll poll = getPoll0(pollId); // Clone Poll - PollBean clonedPoll = toBean(PollBean.class, poll); + PollBean clonedPoll = toPollBean(poll); clonedPoll.setEntityId(null); clonedPoll.setPermission(null); @@ -324,9 +404,6 @@ public class PollService extends PollenServiceSupport { poll.setEndDate(getNow()); - savePoll(toBean(PollBean.class, poll), null); - - //TODO : check if correct commit(); getNotificationService().onPollClosed(poll); @@ -344,9 +421,6 @@ public class PollService extends PollenServiceSupport { poll.setEndDate(null); - savePoll(toBean(PollBean.class, poll), null); - - //TODO : check if correct commit(); getNotificationService().onPollReopened(poll); @@ -389,7 +463,7 @@ public class PollService extends PollenServiceSupport { poll.getCreator().setPollenUser(connectedUser); commit(); - return toBean(PollBean.class, poll, pollBeanFunction); + return toPollBean(poll); } public Collection<Poll> getPollsWithReminderNeeded() { @@ -580,7 +654,7 @@ public class PollService extends PollenServiceSupport { ErrorMap choiceErrors = getChoiceService().checkChoice(existingChoices, choice); choiceErrors.copyTo(errorMap, "choice[" + i + "]."); - existingChoices.add(choice.toEntity()); + existingChoices.add(getChoiceService().toChoice(choice)); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java index 158b22e9..9cdd15f3 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java @@ -26,6 +26,7 @@ import org.chorem.pollen.persistence.entity.ResourceType; import org.chorem.pollen.services.PollenService; import org.chorem.pollen.services.PollenTechnicalException; import org.chorem.pollen.services.UnitHuman; +import org.chorem.pollen.services.bean.GtuMetaBean; import org.chorem.pollen.services.bean.PollenEntityId; import org.chorem.pollen.services.bean.PollenEntityRef; import org.chorem.pollen.services.bean.ResourceFileBean; @@ -50,12 +51,42 @@ import static org.nuiton.i18n.I18n.l; */ public class PollenResourceService extends PollenServiceSupport implements PollenService { + public ResourceStreamBean toResourceStreamBean(PollenResource entity) { + ResourceStreamBean bean = new ResourceStreamBean(); + bean.setEntityId(entity.getTopiaId()); + + try { + bean.setResourceContent(entity.getResourceContent().getBinaryStream()); + } catch (SQLException e) { + throw new PollenTechnicalException(e); + } + + bean.setName(entity.getName()); + bean.setSize(entity.getSize()); + bean.setContentType(entity.getContentType()); + + return bean; + } + + public ResourceMetaBean toResourceMetaBean(PollenResource entity) { + ResourceMetaBean bean = new GtuMetaBean(); + bean.setEntityId(entity.getTopiaId()); + + bean.setName(entity.getName()); + bean.setSize(entity.getSize()); + bean.setContentType(entity.getContentType()); + bean.setResourceType(entity.getResourceType()); + bean.setUploadDate(entity.getTopiaCreateDate()); + + return bean; + } + public ResourceStreamBean getResource(String resourceId) { checkNotNull(resourceId); PollenResource resource = getResource0(resourceId); - return toBean(ResourceStreamBean.class, resource); + return toResourceStreamBean(resource); } public ResourceMetaBean getMetaResource(String resourceId) { @@ -63,7 +94,7 @@ public class PollenResourceService extends PollenServiceSupport implements Polle PollenResource resource = getResource0(resourceId); - return toBean(ResourceMetaBean.class, resource); + return toResourceMetaBean(resource); } public ResourceStreamBean getResourcePreview(String resourceId) { diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java index 586a2947..faa2887d 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java @@ -443,52 +443,21 @@ public abstract class PollenServiceSupport implements PollenService { } - protected <T extends TopiaEntity, B extends PollenBean<T>> B toBean(Class<B> beanType, T entity) { + protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableList<B> toBeanList(Collection<T> entities, Function<T, B> beanFunction) { - return toBean(beanType, entity, null); + return PollenBeans.toBeanList(entities, beanFunction); } - protected <T extends TopiaEntity, B extends PollenBean<T>> B toBean(Class<B> beanType, T entity, Function<B, B> beanFunction) { + protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableSet<B> toBeanSet(Collection<T> entities, Function<T, B> beanFunction) { - return PollenBeans.toBean(beanType, entity, beanFunction); + return PollenBeans.toBeanSet(entities, beanFunction); } - protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableList<B> toBeanList(Class<B> beanType, Collection<T> entities) { + protected <E extends TopiaEntity, B extends PollenBean<E>> PaginationResultBean<B> toPaginationListBean(PaginationResult<E> entities, Function<E, B> beanFunction) { - return toBeanList(beanType, entities, null); - - } - - - protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableList<B> toBeanList(Class<B> beanType, Collection<T> entities, Function<B, B> beanFunction) { - - return PollenBeans.toBeanList(beanType, entities, beanFunction); - - } - - protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableSet<B> toBeanSet(Class<B> beanType, Collection<T> entities) { - - return toBeanSet(beanType, entities, null); - - } - - protected <T extends TopiaEntity, B extends PollenBean<T>> ImmutableSet<B> toBeanSet(Class<B> beanType, Collection<T> entities, Function<B, B> beanFunction) { - - return PollenBeans.toBeanSet(beanType, entities, beanFunction); - - } - - protected <E extends TopiaEntity, B extends PollenBean<E>> PaginationResultBean<B> toPaginationListBean(Class<B> beanType, PaginationResult<E> entities) { - - return toPaginationListBean(beanType, entities, null); - - } - - protected <E extends TopiaEntity, B extends PollenBean<E>> PaginationResultBean<B> toPaginationListBean(Class<B> beanType, PaginationResult<E> entities, Function<B, B> beanFunction) { - - return PollenBeans.toBean(beanType, entities, beanFunction); + return PollenBeans.toBean(entities, beanFunction); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java index f911963a..9bb0ed06 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java @@ -29,22 +29,25 @@ import org.chorem.pollen.persistence.entity.PollenPrincipal; import org.chorem.pollen.persistence.entity.PollenToken; import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.persistence.entity.PollenUserTopiaDao; +import org.chorem.pollen.persistence.entity.UserCredential; import org.chorem.pollen.persistence.entity.Vote; import org.chorem.pollen.services.PollenService; import org.chorem.pollen.services.bean.PaginationParameterBean; import org.chorem.pollen.services.bean.PaginationResultBean; import org.chorem.pollen.services.bean.PollenEntityRef; import org.chorem.pollen.services.bean.PollenUserBean; +import org.chorem.pollen.services.bean.UserCredentialBean; import org.chorem.pollen.services.service.security.PollenInvalidEmailActivationTokenException; import org.chorem.pollen.services.service.security.PollenInvalidPasswordException; +import org.chorem.pollen.services.service.security.PollenSecurityContext; import org.nuiton.util.pagination.PaginationOrder; import org.nuiton.util.pagination.PaginationParameter; import org.nuiton.util.pagination.PaginationResult; -import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Objects; -import java.util.function.Function; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.l; @@ -56,12 +59,40 @@ import static org.nuiton.i18n.I18n.l; */ public class PollenUserService extends PollenServiceSupport implements PollenService { - private final Function<PollenUserBean, PollenUserBean> pollenUserFunction = input -> { - input.setPassword(null); - input.setGtuValidated(getGtuService().isUserGtuValidated(input.getEntityId())); + public PollenUserBean toPollenUserBean(PollenUser entity) { + PollenUserBean bean = new PollenUserBean(); + bean.setEntityId(entity.getTopiaId()); + + bean.setName(entity.getName()); + bean.setAdministrator(entity.isAdministrator()); + bean.setBanned(entity.isBanned()); + bean.setLanguage(entity.getLanguage()); + bean.setEmail(entity.getEmail()); + bean.setPassword(null); + bean.setEmailIsValidate(entity.getEmailActivationToken() == null); + bean.setWithPassword(entity.getPassword() != null); + if (entity.getUserCredential() != null) { + bean.setCredentials(entity.getUserCredential().stream() + .map(this::toUserCredentialBean) + .collect(Collectors.toList())); + } + bean.setPremiumTo(entity.getPremiumTo()); + - return input; - }; + bean.setGtuValidated(getGtuService().isGtuValidated(entity)); + bean.setPremium(isPremium(entity)); + + return bean; + } + + public UserCredentialBean toUserCredentialBean(UserCredential entity) { + UserCredentialBean bean = new UserCredentialBean(); + bean.setEntityId(entity.getTopiaId()); + bean.setProvider(entity.getProvider()); + bean.setUserName(entity.getUserName()); + bean.setEmailAddress(entity.getEmail()); + return bean; + } public PaginationResultBean<PollenUserBean> getUsers(PaginationParameterBean paginationParameter, String search) { @@ -73,7 +104,7 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer } PaginationResult<PollenUser> pollenUsers = getPollenUserDao().findAll(page, search); - return toPaginationListBean(PollenUserBean.class, pollenUsers, pollenUserFunction); + return toPaginationListBean(pollenUsers, this::toPollenUserBean); } @@ -86,7 +117,7 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer checkIsAdmin(); pollenUser = getUser0(userId); } - return toBean(PollenUserBean.class, pollenUser, pollenUserFunction); + return toPollenUserBean(pollenUser); } @@ -126,7 +157,7 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer getNotificationService().onUserEdited(result); - return toBean(PollenUserBean.class, result); + return toPollenUserBean(result); } @@ -218,46 +249,19 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer if (getPollenUserDao().count() == 0) { - List<PollenUserBean> listUser = new ArrayList<>(); - - { // set users - PollenUserBean user = new PollenUserBean(); - - user.setAdministrator(true); - user.setEmail("admin@pollen.org"); - user.setPassword("admin"); - user.setName("admin"); - - listUser.add(user); - - user = new PollenUserBean(); - - user.setAdministrator(false); - user.setEmail("user@pollen.org"); - user.setPassword("user"); - user.setName("user"); - - listUser.add(user); - - } - - - for (PollenUserBean user : listUser) { - - // create user - PollenEntityRef<PollenUser> newUser = createUser(user); - - // validate user - PollenUser pollenUser = getPollenUserDao().forTopiaIdEquals(newUser.getEntityId()).findUnique(); - - try { - validateUserEmail(newUser.getEntityId(), pollenUser.getEmailActivationToken().getToken()); - } catch (PollenInvalidEmailActivationTokenException e) { - e.printStackTrace(); - } + PollenUserBean adminBean = new PollenUserBean(); + adminBean.setEmail("admin@chorem.org"); + adminBean.setPassword("admin"); + adminBean.setName("admin"); + PollenUser admin = savePollenUser(adminBean); + admin.setAdministrator(true); + try { + validateUserEmail(admin.getTopiaId(), admin.getEmailActivationToken().getToken()); + } catch (PollenInvalidEmailActivationTokenException e) { + e.printStackTrace(); } - + commit(); } } @@ -354,10 +358,14 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer } - toSave.setAdministrator(user.isAdministrator()); + PollenSecurityContext securityContext = getSecurityContext(); + if (securityContext.isAdmin()) { + toSave.setAdministrator(user.isAdministrator()); + toSave.setBanned(user.isBanned()); + toSave.setPremiumTo(user.getPremiumTo()); + } toSave.setName(user.getName()); toSave.setLanguage(user.getLanguage()); - toSave.setBanned(user.isBanned()); toSave.setEmail(cleanMail); if (user.isEmailIsValidate() && toSave.getEmailActivationToken() != null) { toSave.setEmailActivationToken(null); @@ -411,4 +419,12 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer commit(); } + + public boolean isPremium(PollenUser user) { + return user != null && isPremium(user.getPremiumTo()); + } + + protected boolean isPremium(Date premiumTo) { + return premiumTo != null && premiumTo.after(getNow()); + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/ReportService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/ReportService.java index b6a13c1b..121fdb7c 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/ReportService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/ReportService.java @@ -25,8 +25,10 @@ import org.chorem.pollen.persistence.entity.Choice; import org.chorem.pollen.persistence.entity.Comment; import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.Report; +import org.chorem.pollen.persistence.entity.ReportImpl; import org.chorem.pollen.persistence.entity.ReportResume; import org.chorem.pollen.services.bean.ReportBean; +import org.chorem.pollen.services.bean.ReportLevel; import org.chorem.pollen.services.bean.ReportResumeBean; import org.chorem.pollen.services.service.security.PermissionVerb; import org.nuiton.topia.persistence.TopiaEntity; @@ -40,6 +42,19 @@ import static org.nuiton.i18n.I18n.l; */ public class ReportService extends PollenServiceSupport { + public ReportBean toReportBean(Report entity) { + ReportBean bean = new ReportBean(); + + bean.setEntityId(entity.getTopiaId()); + + bean.setLevel(ReportLevel.of(entity.getLevel())); + bean.setEmail(entity.getEmail()); + bean.setIgnore(entity.isIgnore()); + + return bean; + + } + public void addPollReport(String pollId, ReportBean reportBean) throws InvalidFormException { @@ -59,7 +74,7 @@ public class ReportService extends PollenServiceSupport { checkNotNull(pollId); checkPermission(PermissionVerb.editPoll, pollId); - return getReportService().getReports(pollId); + return getReports(pollId); } @@ -92,7 +107,7 @@ public class ReportService extends PollenServiceSupport { checkNotNull(choiceId); checkPermission(PermissionVerb.editPoll, pollId); - return getReportService().getReports(choiceId); + return getReports(choiceId); } @@ -125,7 +140,7 @@ public class ReportService extends PollenServiceSupport { checkNotNull(commentId); checkPermission(PermissionVerb.editPoll, pollId); - return getReportService().getReports(commentId); + return getReports(commentId); } @@ -142,7 +157,7 @@ public class ReportService extends PollenServiceSupport { List<Report> reports = getReportTopiaDao().forTargetIdEquals(targetId).findAll(); - return toBeanList(ReportBean.class, reports); + return toBeanList(reports, this::toReportBean); } protected Report addReport(ReportBean report, TopiaEntity target) throws InvalidFormException { @@ -156,7 +171,12 @@ public class ReportService extends PollenServiceSupport { ErrorMap errorMap = checkReport(report); errorMap.failIfNotEmpty(); - Report reportEntity = report.toEntity(); + Report reportEntity = new ReportImpl(); + + reportEntity.setTopiaId(report.getEntityId()); + reportEntity.setLevel(report.getLevel().getScore()); + reportEntity.setEmail(report.getEmail()); + reportEntity.setIgnore(report.isIgnore()); reportEntity.setTargetId(target.getTopiaId()); reportEntity = getReportTopiaDao().create(reportEntity); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java index 6997c249..8300665d 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java @@ -181,11 +181,24 @@ public class SocialAuthService extends PollenServiceSupport { return manager; } + public LoginProviderBean toLoginProviderBean(LoginProvider entity) { + LoginProviderBean bean = new LoginProviderBean(); + + bean.setEntityId(entity.getTopiaId()); + bean.setName(entity.getName()); + bean.setKey(entity.getKey()); + bean.setSecret(entity.getSecret()); + bean.setPermissions(entity.getPermissions()); + bean.setActive(entity.isActive()); + + return bean; + } + public List<LoginProviderBean> getAllLoginProviders() { checkIsAdmin(); LoginProviderTopiaDao dao = getLoginProviderDao(); List<LoginProvider> loginProviders = dao.findAll(); - return toBeanList(LoginProviderBean.class, loginProviders); + return toBeanList(loginProviders, this::toLoginProviderBean); } public List<String> getActiveLoginProviders() { @@ -238,7 +251,7 @@ public class SocialAuthService extends PollenServiceSupport { toSave.setActive(loginProvider.isActive()); commit(); - return toBean(LoginProviderBean.class, toSave); + return toLoginProviderBean(toSave); } public void deleteLoginProvider(String providerId) { diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java index 56826893..145cb25d 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java @@ -87,7 +87,7 @@ public class VoteCountingService extends PollenServiceSupport { Preconditions.checkNotNull(pollId); Poll poll = getPollService().getPoll0(pollId); - List<Vote> votes = getVoteService().getVotes0(poll); + List<Vote> votes = getVotes(poll); VoteCounting voteCounting = getVoteCounting(poll); VoteCountingStrategy strategy = voteCounting.newStrategy(); @@ -105,6 +105,15 @@ public class VoteCountingService extends PollenServiceSupport { } + protected List<Vote> getVotes(Poll poll) { + List<Vote> votes = getVoteService().getVotes0(poll); + int maxVoters = getPollService().getMaxVoters(poll); + if (maxVoters > 0 && votes.size() > maxVoters) { + votes = votes.subList(0, maxVoters); + } + return votes; + } + public ListVoteCountingResultBean getGroupResult(String pollId) { Preconditions.checkNotNull(pollId); @@ -112,7 +121,7 @@ public class VoteCountingService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); VoterList mainVoterList = getVoterListService().getMainVoterList0(poll); - List<Vote> votes = getVoteService().getVotes0(poll); + List<Vote> votes = getVotes(poll); VoteCounting voteCounting = getVoteCounting(poll); VoteCountingStrategy strategy = voteCounting.newStrategy(); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java index c2e2838e..fc907339 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java @@ -30,6 +30,7 @@ import org.chorem.pollen.persistence.entity.Polls; import org.chorem.pollen.persistence.entity.Vote; import org.chorem.pollen.persistence.entity.VoteToChoice; import org.chorem.pollen.persistence.entity.VoteToChoiceTopiaDao; +import org.chorem.pollen.persistence.entity.VoteToChoices; import org.chorem.pollen.persistence.entity.VoterList; import org.chorem.pollen.persistence.entity.VoterListMember; import org.chorem.pollen.services.bean.ChoiceBean; @@ -50,7 +51,6 @@ import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.function.Function; import static org.nuiton.i18n.I18n.l; @@ -62,19 +62,62 @@ import static org.nuiton.i18n.I18n.l; */ public class VoteService extends PollenServiceSupport { - private final Function<VoteBean, VoteBean> voteBeanFunction = input -> { - if (isNotPermitted(PermissionVerb.editVote, input.getEntityId())) { - input.setPermission(null); - if (input.isAnonymous()) { - input.setVoterName(null); + public VoteBean toVoteBean(Vote entity) { + + VoteBean bean = new VoteBean(); + + bean.setEntityId(entity.getTopiaId()); + + if (entity.getVoter() == null || entity.getVoter().getPermission() == null) { + + bean.setPermission(null); + + } else { + + bean.setPermission(entity.getVoter().getPermission().getToken()); + + } + + bean.setAnonymous(entity.isAnonymous()); + bean.getVoterId().setEntityId(entity.getVoter().getTopiaId()); + bean.setVoterName(entity.getVoter().getName()); + bean.setWeight(entity.getWeight()); + + entity.getVoteToChoice().stream() + .sorted(VoteToChoices.VOTE_TO_CHOICE_COMPARATOR) + .map(this::toVoteToChoiceBean) + .forEach(bean::addChoice); + + + if (entity.getVoterListMember() != null) { + + bean.setVoterListMembers(entity.getVoterListMember()); + + } + + if (isNotPermitted(PermissionVerb.editVote, entity.getTopiaId())) { + bean.setPermission(null); + if (entity.isAnonymous()) { + bean.setVoterName(null); } } else { - ReportResumeBean report = getReportService().getReport(input.getEntityId()); - input.setReport(report); + ReportResumeBean report = getReportService().getReport(entity.getTopiaId()); + bean.setReport(report); } - return input; + return bean; }; + public VoteToChoiceBean toVoteToChoiceBean(VoteToChoice entity) { + + VoteToChoiceBean bean = new VoteToChoiceBean(); + + bean.setEntityId(entity.getTopiaId()); + bean.setVoteValue(entity.getVoteValue()); + bean.getChoiceId().setEntityId(entity.getChoice().getTopiaId()); + + return bean; + } + public VoteBean getNewVote(String pollId) { checkPermission(PermissionVerb.addVote, pollId); @@ -113,17 +156,22 @@ public class VoteService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); List<Vote> allVotes = getVotes0(poll); + int maxVoters = getPollService().getMaxVoters(poll); + List<Vote> votes = new ArrayList<>(); + int indexVote = 0; for (Vote vote : allVotes) { - if (isPermitted(PermissionVerb.readVote, vote.getTopiaId())) { + if (isPermitted(PermissionVerb.editVote, vote.getTopiaId()) + || (isPermitted(PermissionVerb.readVote, vote.getTopiaId()) && (maxVoters == 0 || indexVote < maxVoters))) { votes.add(vote); } + indexVote++; } PaginationResult<Vote> votePaginationResult = PaginationResult.fromFullList(votes, getPaginationParameter(paginationParameter)); - return toPaginationListBean(VoteBean.class, votePaginationResult, voteBeanFunction); + return toPaginationListBean(votePaginationResult, this::toVoteBean); } @@ -136,7 +184,7 @@ public class VoteService extends PollenServiceSupport { Vote result = getVote(poll, voteId); - return toBean(VoteBean.class, result, voteBeanFunction); + return toVoteBean(result); } @@ -181,7 +229,7 @@ public class VoteService extends PollenServiceSupport { getNotificationService().onVoteEdited(poll, result); getFeedService().onVoteEdited(poll, result); - return toBean(VoteBean.class, result); + return toVoteBean(result); } @@ -423,11 +471,7 @@ public class VoteService extends PollenServiceSupport { } - public long getVoteCount(String pollId) { - checkNotNull(pollId); - - Poll poll = getPollService().getPoll0(pollId); - + public long getVoteCount(Poll poll) { return getVoteDao().forPollEquals(poll).count(); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java index 40bb172f..c9038094 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java @@ -136,30 +136,40 @@ public class VoterListService extends PollenServiceSupport { // // } - protected Function<VoterListMemberBean, VoterListMemberBean> getAddVotingField(String pollId) { - List<Vote> votes = getVoteDao().forProperties(Vote.PROPERTY_POLL + "." + Poll.PROPERTY_TOPIA_ID, pollId).findAll(); + public VoterListMemberBean toVoterListMemberBean(VoterListMember entity) { - final Set<String> memberIdVoting = votes.stream() - .map(Vote::getVoterListMember) - .flatMap(Collection::stream) - .map(VoterListMember::getTopiaId) - .collect(Collectors.toSet()); + VoterListMemberBean bean = new VoterListMemberBean(); + + bean.setEntityId(entity.getTopiaId()); + if (entity.getMember() != null) { + bean.setName(entity.getMember().getName()); + bean.setEmail(entity.getMember().getEmail()); + } + bean.setWeight(entity.getWeight()); + bean.getVoterListId().setEntityId(entity.getVoterList().getTopiaId()); + + boolean voting = getVoteDao().forVoterListMemberContains(entity).exists(); + bean.setVoting(voting); - return member -> { - member.setVoting(memberIdVoting.contains(member.getEntityId())); - return member; - }; + return bean; } - protected VoterListBean voterListBeanFunction(VoterListBean bean) { + public VoterListBean toVoterListBean(VoterList entity) { + + VoterListBean bean = new VoterListBean(); + bean.setEntityId(entity.getTopiaId()); + bean.setName(entity.getName()); + bean.setWeight(entity.getWeight()); + if (entity.getParent() != null) { + bean.getParentId().setEntityId(entity.getParent().getTopiaId()); + } - String entityId = bean.getEntityId(); long countSubLists = getVoterListDao() - .forProperties(VoterList.PROPERTY_PARENT + "." + VoterList.PROPERTY_TOPIA_ID, entityId) + .forParentEquals(entity) .count(); long countMembers = getVoterListMemberDao() - .forProperties(VoterListMember.PROPERTY_VOTER_LIST + "." + VoterList.PROPERTY_TOPIA_ID, entityId) + .forVoterListEquals(entity) .count(); bean.setCountSubLists(countSubLists); @@ -174,7 +184,7 @@ public class VoterListService extends PollenServiceSupport { Poll poll = getPollService().getPoll0(pollId); List<VoterList> voterLists = getVoterLists0(poll, parentId); - return toBeanList(VoterListBean.class, voterLists, this::voterListBeanFunction); + return toBeanList(voterLists, this::toVoterListBean); } @@ -190,7 +200,7 @@ public class VoterListService extends PollenServiceSupport { VoterListBean result = null; if (voterList != null) { - result = toBean(VoterListBean.class, voterList, this::voterListBeanFunction); + result = toVoterListBean(voterList); } return result; @@ -203,7 +213,7 @@ public class VoterListService extends PollenServiceSupport { checkPermission(PermissionVerb.readPoll, pollId); VoterList voterList = getVoterList0(pollId, voterListId); - return toBean(VoterListBean.class, voterList, this::voterListBeanFunction); + return toVoterListBean(voterList); } @@ -239,7 +249,7 @@ public class VoterListService extends PollenServiceSupport { VoterList result = getVoterListDao().forTopiaIdEquals(voterList.getEntityId()).findUnique(); //TODO Notify - return toBean(VoterListBean.class, result, this::voterListBeanFunction); + return toVoterListBean(result); } @@ -266,7 +276,7 @@ public class VoterListService extends PollenServiceSupport { VoterList voterList = getVoterList0(pollId, voterListId); List<VoterListMember> members = getVoterListMembers0(voterList); - return toBeanSet(VoterListMemberBean.class, members, getAddVotingField(pollId)); + return toBeanSet(members, this::toVoterListMemberBean); } @@ -280,7 +290,7 @@ public class VoterListService extends PollenServiceSupport { VoterList voterList = getVoterList0(pollId, voterListId); VoterListMember member = getVoterListMember0(voterList, memberId); - return toBean(VoterListMemberBean.class, member, getAddVotingField(pollId)); + return toVoterListMemberBean(member); } @@ -295,7 +305,7 @@ public class VoterListService extends PollenServiceSupport { Collections.emptyList()); VoterListMember result = getVoterListMemberDao().forTopiaIdEquals(member.getEntityId()).findUnique(); - return toBean(VoterListMemberBean.class, result); + return toVoterListMemberBean(result); } @@ -311,7 +321,7 @@ public class VoterListService extends PollenServiceSupport { Collections.emptyList()); VoterListMember result = getVoterListMemberDao().forTopiaIdEquals(member.getEntityId()).findUnique(); - return toBean(VoterListMemberBean.class, result, getAddVotingField(pollId)); + return toVoterListMemberBean(result); } @@ -658,10 +668,10 @@ public class VoterListService extends PollenServiceSupport { VoterList oldVoterList = getVoterList0(poll, voterList.getEntityId()); sisterNames.remove(oldVoterList.getName()); - List<VoterListMember> existingVoterListMembers = getVoterListMembers0(voterList.toEntity()); - members = toBeanList(VoterListMemberBean.class, existingVoterListMembers); + List<VoterListMember> existingVoterListMembers = getVoterListMembers0(voterList.getEntityId()); + members = toBeanList(existingVoterListMembers, this::toVoterListMemberBean); List<VoterList> existingSubVoterLists = getVoterLists0(poll, voterList.getEntityId()); - subLists = toBeanList(VoterListBean.class, existingSubVoterLists); + subLists = toBeanList(existingSubVoterLists, this::toVoterListBean); } else if (listsToSave.size() == 1){ members = membersToSave; @@ -812,14 +822,8 @@ public class VoterListService extends PollenServiceSupport { return memberToSend.size(); } - public long getVoterListMemberCount(String pollId) { - checkNotNull(pollId); - checkPermission(PermissionVerb.readPoll, pollId); - - VoterList voterList = getVoterListDao() - .forProperties(VoterList.PROPERTY_POLL + "." + Poll.PROPERTY_TOPIA_ID, pollId) - .addNull(VoterList.PROPERTY_PARENT) - .findUniqueOrNull(); + public long getVoterListMemberCount(Poll poll) { + VoterList voterList = getMainVoterList0(poll); List<VoterListMember> allMembers = getVoterListDao().getAllMembers(voterList); diff --git a/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties b/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties index b41d405e..ad5f2ecd 100644 --- a/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties +++ b/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties @@ -25,6 +25,7 @@ pollen.configuration.devMode=Dev mode pollen.configuration.feedback.locale=locale to send feedback pollen.configuration.feedback.mails=mails to send feedback pollen.configuration.logConfigurationFile=Path to log configuration file +pollen.configuration.maxVoters=Maximum number of votes for standar poll pollen.configuration.registration.emailAddressPattern=Regular expression that the user email address must match for registration pollen.configuration.report.maxScore=Maximum score for reporting before administrators are notified pollen.configuration.resendEmailsCronSchedule=Time between two cron jobs of email resending diff --git a/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties b/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties index 2a17b57e..dce0f1f5 100644 --- a/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties +++ b/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties @@ -25,6 +25,7 @@ pollen.configuration.devMode=Mode développement pollen.configuration.feedback.locale=La locale pour envoyer les retours utlisateur pollen.configuration.feedback.mails=Courriel destinataires des retours utilisateur pollen.configuration.logConfigurationFile=Chemin vers le fichier de configuration des logs +pollen.configuration.maxVoters=Nombre maximum de votes pris en compte pour de sondage standard pollen.configuration.registration.emailAddressPattern=Expression régulière que doivent vérifier les adresses email des utilisateurs lors de l'inscription pollen.configuration.report.maxScore=Score maximum pour un signalement avant que les administrateurs soient avertis pollen.configuration.resendEmailsCronSchedule=Intervalle entre deux lancements de la tâche de renvoi des emails en erreur diff --git a/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java b/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java index 13a97308..9314c446 100644 --- a/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java +++ b/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java @@ -91,15 +91,17 @@ public class PollenUserServiceTest extends AbstractPollenServiceTest { PollenUserBean user = service.getUser(this.user.getTopiaId()); Assert.assertNotNull(user); - Assert.assertEquals(this.user, user.toEntity()); + Assert.assertEquals(this.user.getName(), user.getName()); + Assert.assertEquals(this.user.isAdministrator(), user.isAdministrator()); + Assert.assertEquals(this.user.getEmail(), user.getEmail()); + Assert.assertEquals(this.user.isBanned(), user.isBanned()); } @Test public void testCreatePollenUser() throws InvalidFormException { try { - PollenUserBean u = new PollenUserBean(); - u.fromEntity(user); + PollenUserBean u = service.toPollenUserBean(user); service.createUser(u); Assert.fail(); } catch (IllegalStateException e) { diff --git a/pollen-ui-riot-js/src/main/web/i18n/en.json b/pollen-ui-riot-js/src/main/web/i18n/en.json index 42f8a434..efcf7cf0 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/en.json +++ b/pollen-ui-riot-js/src/main/web/i18n/en.json @@ -65,6 +65,8 @@ "poll_subscribers": "subscribers", "poll_participants": "participants", "poll_participation": "of participation", + "poll_maxVotersAlert": "<strong>Warnning</strong> : Strandard offers has limited to {0} voters. Users can continue to vote but only the first {0} votes are taken into account in the calculation of the resultles.", + "poll_maxVotersAlert_offers": "Read <a href=\"#home\">the offers page</a> to unlock this limit.", "poll_closedFrom": "Closing from", "poll_urlForAdmin" : "Administrate poll with this address", "poll_urlForVote" : "Invited new participants with this address", @@ -383,6 +385,8 @@ "user_deleteUserMessage": "Delete user ?", "user_name": "Name", "user_email": "Email", + "user_premiumTo": "Unlimited until ", + "user_premiumOf": "Unlimited end from", "user_cancel": "Cancel", "user_save": "Save", "userProfile_title": "My profile", diff --git a/pollen-ui-riot-js/src/main/web/i18n/fr.json b/pollen-ui-riot-js/src/main/web/i18n/fr.json index f114a1f3..65abdae4 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/fr.json +++ b/pollen-ui-riot-js/src/main/web/i18n/fr.json @@ -65,6 +65,8 @@ "poll_subscribers": "invités", "poll_participants": "participants", "poll_participation": "de participation", + "poll_maxVotersAlert": "<strong>Attention</strong> : L'offre standard est limitée à {0} votants. Les utilisateurs peuvent continuer à voter mais seul les {0} premiers votes sont pris en compte dans le calcul du résultat.", + "poll_maxVotersAlert_offers": "Cousulter <a href=\"#home\">la page des nos offres</a> pour déverrouiller cette limite.", "poll_closedFrom": "Fermé depuis le", "poll_urlForAdmin" : "Administrer ce sondage avec cette adresse", "poll_urlForVote" : "Inviter de nouveaux participants en leur envoyant cette adresse", @@ -383,6 +385,8 @@ "user_deleteUserMessage": "Supprimer l'utilisateur ?", "user_name": "Nom", "user_email": "Courriel", + "user_premiumTo": "Illimité jusqu'au", + "user_premiumOf": "Fin de l'illimité depuis le", "user_cancel": "Annuler", "user_save": "Enregistrer", "userProfile_title": "Mon profil", diff --git a/pollen-ui-riot-js/src/main/web/tag/admin/UserCard.tag.html b/pollen-ui-riot-js/src/main/web/tag/admin/UserCard.tag.html index 6bf7f5a0..72e1b301 100644 --- a/pollen-ui-riot-js/src/main/web/tag/admin/UserCard.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/admin/UserCard.tag.html @@ -27,6 +27,15 @@ require("./UserEditModal.tag.html"); onedit={edit} class="user-card"> <yield to="detail"> + <i if={parent.opts.user.premium} + class="premium winner fa fa-star" + aria-hidden="true" + title={parent.__.premiumTo + ' ' + parent.formatDate(parent.opts.user.premiumTo, 'LL')}> + </i> + <i if={!parent.opts.user.premium && parent.opts.user.premiumTo} + class="premium fa fa-star-o" + aria-hidden="true" + title={parent.__.premiumOf + ' ' + parent.formatDate(parent.opts.user.premiumTo, 'LL')}></i> <div class="user-email"> <i class="fa fa-refresh" if={!parent.opts.user.emailIsValidate} title={parent.__.emailValidate}></i> {parent.opts.user.email} @@ -127,5 +136,12 @@ require("./UserEditModal.tag.html"); justify-content: space-around; } + .premium { + position: absolute; + top: 65px; + font-size: 3em; + left: 105px; + } + </style> </UserCard> diff --git a/pollen-ui-riot-js/src/main/web/tag/admin/UserEditModal.tag.html b/pollen-ui-riot-js/src/main/web/tag/admin/UserEditModal.tag.html index 28610825..e8ccf5d2 100644 --- a/pollen-ui-riot-js/src/main/web/tag/admin/UserEditModal.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/admin/UserEditModal.tag.html @@ -47,6 +47,17 @@ require("../popup/Modal.tag.html"); <div class="c-hint c-hint--static c-hint--error" each={error in parent.errors.email}>{error}</div> </div> <div class="o-form-element"> + <label class="c-label" for="premiumTo">{parent.__.premiumTo}</label> + <date-picker class="o-field o-field--icon-left" + inputclass="c-field o-field--icon-left" + iconleftclass="calendar" + id="premiumTo" + ref="premiumTo" + date="{parent.premiumTo}"> + </date-picker> + <div class="c-hint c-hint--static c-hint--error" each={error in parent.errors.premiumTo}>{error}</div> + </div> + <div class="o-form-element"> <label class="c-toggle c-toggle--info"> {parent.__.administrator} <input type="checkbox" @@ -91,8 +102,10 @@ require("../popup/Modal.tag.html"); let Message = require("../../js/Message"); this.installBundle(session, "user"); let userService = require("../../js/UserService"); + let moment = require("moment-timezone"); this.errors = {}; + this.premiumTo = {date: moment(this.opts.user.premiumTo)}; this.open = () => { return this.refs.modal.open(); @@ -105,6 +118,7 @@ require("../popup/Modal.tag.html"); user2.administrator = this.refs.modal.refs.administrator.checked; user2.banned = this.refs.modal.refs.banned.checked; user2.emailIsValidate = this.refs.modal.refs.emailIsValidate.checked; + user2.premiumTo = this.refs.modal.refs.premiumTo.getValue(); return userService.saveUser(user2).then(() => { this.errors = {}; @@ -118,5 +132,10 @@ require("../popup/Modal.tag.html"); }; </script> + <style> + date-picker { + display: inherit; + } + </style> </UserEditModal> diff --git a/pollen-ui-riot-js/src/main/web/tag/components/InnerHtml.tag.html b/pollen-ui-riot-js/src/main/web/tag/components/InnerHtml.tag.html new file mode 100644 index 00000000..66958648 --- /dev/null +++ b/pollen-ui-riot-js/src/main/web/tag/components/InnerHtml.tag.html @@ -0,0 +1,14 @@ +<InnerHtml> + + <span ref="html"></span> + + <script> + + this.updateHtml = () => { + this.refs.html.innerHTML = this.opts.html; + }; + + this.on("update", this.updateHtml); + </script> + +</InnerHtml> diff --git a/pollen-ui-riot-js/src/main/web/tag/components/date-picker.tag.html b/pollen-ui-riot-js/src/main/web/tag/components/date-picker.tag.html index e2ba23f8..a0f93916 100644 --- a/pollen-ui-riot-js/src/main/web/tag/components/date-picker.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/components/date-picker.tag.html @@ -58,7 +58,7 @@ this.session = require("../../js/Session"); this.format = "LL"; - this.moment = require("moment"); + this.moment = require("moment-timezone"); this.moment.locale(this.session.locale); this.installBundle(this.session, "date-picker", locale => { @@ -231,6 +231,17 @@ this.refs.date.focus(); }; + this.getValue = () => { + if (this.session.dateInputSupported) { + return this.moment(this.refs.date.value).valueOf(); + } + if (!this.date.date) { + return null; + } + let selectedMoment = this.moment.tz(this.date.date, this.moment.tz.guess()); + return selectedMoment.valueOf(); + }; + </script> <style scoped> diff --git a/pollen-ui-riot-js/src/main/web/tag/poll/Poll.tag.html b/pollen-ui-riot-js/src/main/web/tag/poll/Poll.tag.html index 00f4c110..ba136545 100644 --- a/pollen-ui-riot-js/src/main/web/tag/poll/Poll.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/poll/Poll.tag.html @@ -25,6 +25,7 @@ require("./Choices.tag.html"); require("./Settings.tag.html"); require("../popup/QrCodeButton.tag.html"); require("../components/MultiLineLabel.tag.html"); +require("../components/InnerHtml.tag.html"); require("./Report.tag.html"); <Poll> @@ -131,6 +132,12 @@ require("./Report.tag.html"); <p><MultiLineLabel label="{poll.description}"></MultiLineLabel></p> </div> + <div if={poll.maxVoters > 0 && poll.voteCount > poll.maxVoters} + class="c-alert c-alert--warning"> + <InnerHtml html={_l("maxVotersAlert", poll.maxVoters)}/> + <InnerHtml if={poll.permission} html={__.maxVotersAlert_offers} /> + </div> + <Votes if={selectedTab === "votes"}/> <Results if={selectedTab === "results"}/> -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/58-limitation-des-votants in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit 1c59babae94d984cc840c6d982622db13efb6378 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Wed Sep 27 16:48:26 2017 +0200 indiquer la limite de votants pour un sondage (ref #58) --- pollen-ui-riot-js/src/main/web/i18n/en.json | 3 ++- pollen-ui-riot-js/src/main/web/i18n/fr.json | 3 ++- .../src/main/web/tag/poll/Poll.tag.html | 29 ++++++++++++++++------ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/pollen-ui-riot-js/src/main/web/i18n/en.json b/pollen-ui-riot-js/src/main/web/i18n/en.json index efcf7cf0..4f49b4e4 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/en.json +++ b/pollen-ui-riot-js/src/main/web/i18n/en.json @@ -65,7 +65,8 @@ "poll_subscribers": "subscribers", "poll_participants": "participants", "poll_participation": "of participation", - "poll_maxVotersAlert": "<strong>Warnning</strong> : Strandard offers has limited to {0} voters. Users can continue to vote but only the first {0} votes are taken into account in the calculation of the resultles.", + "poll_maxVotersAlert_title": "Number of voters limitation", + "poll_maxVotersAlert": "Strandard offers has limited to {0} voters. Users can continue to vote but only the first {0} votes are taken into account in the calculation of the resultles.", "poll_maxVotersAlert_offers": "Read <a href=\"#home\">the offers page</a> to unlock this limit.", "poll_closedFrom": "Closing from", "poll_urlForAdmin" : "Administrate poll with this address", diff --git a/pollen-ui-riot-js/src/main/web/i18n/fr.json b/pollen-ui-riot-js/src/main/web/i18n/fr.json index 65abdae4..585cc2b5 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/fr.json +++ b/pollen-ui-riot-js/src/main/web/i18n/fr.json @@ -65,7 +65,8 @@ "poll_subscribers": "invités", "poll_participants": "participants", "poll_participation": "de participation", - "poll_maxVotersAlert": "<strong>Attention</strong> : L'offre standard est limitée à {0} votants. Les utilisateurs peuvent continuer à voter mais seul les {0} premiers votes sont pris en compte dans le calcul du résultat.", + "poll_maxVotersAlert_title": "Limitation du Nombre de votants", + "poll_maxVotersAlert": "L'offre standard est limitée à {0} votants. Les utilisateurs peuvent continuer à voter mais seul les {0} premiers votes sont pris en compte dans le calcul du résultat.", "poll_maxVotersAlert_offers": "Cousulter <a href=\"#home\">la page des nos offres</a> pour déverrouiller cette limite.", "poll_closedFrom": "Fermé depuis le", "poll_urlForAdmin" : "Administrer ce sondage avec cette adresse", diff --git a/pollen-ui-riot-js/src/main/web/tag/poll/Poll.tag.html b/pollen-ui-riot-js/src/main/web/tag/poll/Poll.tag.html index ba136545..d36b97c5 100644 --- a/pollen-ui-riot-js/src/main/web/tag/poll/Poll.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/poll/Poll.tag.html @@ -8,12 +8,12 @@ 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% @@ -113,11 +113,15 @@ require("./Report.tag.html"); <p>{__.createdBy} <span class="brand">{poll.creatorName}</span></p> </div> - <div class="left-icon"> + <div class="left-icon" onclick="{toggleMaxVoters}"> <i class="fa fa-envelope"></i> - <p if={poll.voteCount === 0}>{__.noVote}</p> - <p if={poll.voteCount === 1}><span class="brand">1</span> {__.vote}</p> - <p if={poll.voteCount > 1}><span class="brand">{poll.voteCount}</span> {__.votes}</p> + <p> + <span if={poll.voteCount > 0} class="brand">{poll.voteCount}</span> + {poll.voteCount === 0 ? __.noVote : (poll.voteCount === 1 ? __.vote : __.votes)} + <a if={poll.maxVoters > 0} class="info-label"> + <i class="fa fa-exclamation-circle" aria-hidden="true"></i> + </a> + </p> </div> <div class="left-icon" if="{poll.pollType === 'RESTRICTED'}"> @@ -134,7 +138,10 @@ require("./Report.tag.html"); <div if={poll.maxVoters > 0 && poll.voteCount > poll.maxVoters} class="c-alert c-alert--warning"> - <InnerHtml html={_l("maxVotersAlert", poll.maxVoters)}/> + <div> + <strong> {__.maxVotersAlert_title}</strong> + </div> + {_l("maxVotersAlert", poll.maxVoters)} <InnerHtml if={poll.permission} html={__.maxVotersAlert_offers} /> </div> @@ -204,6 +211,14 @@ require("./Report.tag.html"); this.info(this.poll.voteCountingTypeValue.name, this.poll.voteCountingTypeValue.helper, null, "info"); }; + this.toggleMaxVoters = () => { + let message = this._l("maxVotersAlert", this.poll.maxVoters); + if (this.poll.permission) { + message += " " + this.__.maxVotersAlert_offers; + } + this.info(this.__.maxVotersAlert_title, message, null, "warning"); + }; + </script> <style> -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/58-limitation-des-votants in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit 9703cece80388014678074d1eb9c5f52870b39b7 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Thu Sep 28 08:43:02 2017 +0200 ne pas afficher les votes ignorés (ref #58) --- .../pollen/persistence/entity/VoteTopiaDao.java | 11 ++++++++ .../org/chorem/pollen/services/bean/VoteBean.java | 8 ++++++ .../pollen/services/service/VoteService.java | 27 +++++++++----------- pollen-ui-riot-js/src/main/web/css/custom.css | 6 +++-- pollen-ui-riot-js/src/main/web/i18n/en.json | 1 + pollen-ui-riot-js/src/main/web/i18n/fr.json | 1 + .../src/main/web/tag/poll/Votes.tag.html | 29 ++++++++++++++++++---- 7 files changed, 61 insertions(+), 22 deletions(-) diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoteTopiaDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoteTopiaDao.java index a8ada816..6af63b31 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoteTopiaDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/VoteTopiaDao.java @@ -21,6 +21,8 @@ package org.chorem.pollen.persistence.entity; * #L% */ +import org.nuiton.topia.persistence.HqlAndParametersBuilder; + import java.util.Date; import java.util.List; @@ -33,6 +35,15 @@ public class VoteTopiaDao extends AbstractVoteTopiaDao<Vote> { .findAll(); } + public long getVoteIndex(Vote vote) { + + HqlAndParametersBuilder<Vote> builder = newHqlAndParametersBuilder(); + builder.addEquals(Vote.PROPERTY_POLL, vote.getPoll()); + builder.addLowerOrEquals(Vote.PROPERTY_TOPIA_CREATE_DATE, vote.getTopiaCreateDate()); + builder.setSelectClause("select count(" + Vote.PROPERTY_TOPIA_ID + ")"); + return count(builder.getHql(), builder.getHqlParameters()); + } + public List<Vote> findAllSince(Poll poll, Date since) { if (since == null) { return findAll(poll); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java index cf2ead11..7b79f09a 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java @@ -138,4 +138,12 @@ public class VoteBean extends PollenBean<Vote> { public ReportResumeBean getReport() { return report; } + + public boolean isIgnored() { + return ignored; + } + + public void setIgnored(boolean ignored) { + this.ignored = ignored; + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java index fc907339..724178f8 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java @@ -45,12 +45,12 @@ import org.chorem.pollen.votecounting.VoteCounting; import org.nuiton.util.pagination.PaginationParameter; import org.nuiton.util.pagination.PaginationResult; -import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.l; @@ -100,12 +100,19 @@ public class VoteService extends PollenServiceSupport { if (entity.isAnonymous()) { bean.setVoterName(null); } + + int maxVoters = getPollService().getMaxVoters(entity.getPoll()); + if (maxVoters > 0 && getVoteDao().getVoteIndex(entity) >= maxVoters) { + bean.setIgnored(true); + bean.getChoice().forEach(vc -> vc.setVoteValue(null)); + } + } else { ReportResumeBean report = getReportService().getReport(entity.getTopiaId()); bean.setReport(report); } return bean; - }; + } public VoteToChoiceBean toVoteToChoiceBean(VoteToChoice entity) { @@ -155,19 +162,9 @@ public class VoteService extends PollenServiceSupport { checkNotNull(pollId); Poll poll = getPollService().getPoll0(pollId); - List<Vote> allVotes = getVotes0(poll); - int maxVoters = getPollService().getMaxVoters(poll); - - List<Vote> votes = new ArrayList<>(); - - int indexVote = 0; - for (Vote vote : allVotes) { - if (isPermitted(PermissionVerb.editVote, vote.getTopiaId()) - || (isPermitted(PermissionVerb.readVote, vote.getTopiaId()) && (maxVoters == 0 || indexVote < maxVoters))) { - votes.add(vote); - } - indexVote++; - } + List<Vote> votes = getVotes0(poll).stream() + .filter(vote -> isPermitted(PermissionVerb.readVote, vote.getTopiaId())) + .collect(Collectors.toList()); PaginationResult<Vote> votePaginationResult = PaginationResult.fromFullList(votes, getPaginationParameter(paginationParameter)); diff --git a/pollen-ui-riot-js/src/main/web/css/custom.css b/pollen-ui-riot-js/src/main/web/css/custom.css index 6545f121..ecd2d8a5 100644 --- a/pollen-ui-riot-js/src/main/web/css/custom.css +++ b/pollen-ui-riot-js/src/main/web/css/custom.css @@ -8,12 +8,12 @@ * 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% @@ -116,4 +116,6 @@ --report-hover: #04c4bb; --list-alternate-row: #f3f3f3; + + --hatching: #f3f3f3; } diff --git a/pollen-ui-riot-js/src/main/web/i18n/en.json b/pollen-ui-riot-js/src/main/web/i18n/en.json index 4f49b4e4..39b46372 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/en.json +++ b/pollen-ui-riot-js/src/main/web/i18n/en.json @@ -154,6 +154,7 @@ "poll_votes_results_unit_7_many": "votes", "poll_votes_voteNotOpen": "Votes are not open.", "poll_votes_voteClosed": "Votes are closed", + "poll_votes_ignored": "Ignored", "polls_createdPolls": "My polls", "polls_assignPollToMe": "Link a poll to my account", "polls_assignPollToMe_title": "Link the poll", diff --git a/pollen-ui-riot-js/src/main/web/i18n/fr.json b/pollen-ui-riot-js/src/main/web/i18n/fr.json index 585cc2b5..5d451158 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/fr.json +++ b/pollen-ui-riot-js/src/main/web/i18n/fr.json @@ -154,6 +154,7 @@ "poll_votes_results_unit_7_many": "votes", "poll_votes_voteNotOpen": "Les votes ne sont pas encore ouverts.", "poll_votes_voteClosed": "Les votes sont clos.", + "poll_votes_ignored": "Ignoré", "polls_createdPolls": "Mes sondages", "polls_assignPollToMe": "Attacher le sondage", "polls_assignPollToMe_title": "Attacher un sondage à mon compte", diff --git a/pollen-ui-riot-js/src/main/web/tag/poll/Votes.tag.html b/pollen-ui-riot-js/src/main/web/tag/poll/Votes.tag.html index fec772d8..182bc16b 100644 --- a/pollen-ui-riot-js/src/main/web/tag/poll/Votes.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/poll/Votes.tag.html @@ -8,12 +8,12 @@ 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% @@ -194,7 +194,7 @@ require("../components/LazyLoad.tag.html"); <i class="fa fa-trash"></i> </button> </div> - <div class="results separator-left" ref="results{index}"> + <div class="results separator-left {'ignored': element.ignored}" ref="results{index}"> <div each="{choice in parent.parent.poll.choices}" class="result separator-right {'checkbox' : parent.parent.pollTypeCheckbox} {'selected' : parent.parent.pollTypeCheckbox && parent.parent.poll.getVoteValue(element, choice) == 1}" onmouseenter="{parent.parent.parent.showTooltip(element, choice)}" onclick="{parent.parent.parent.showTooltip(element, choice)}" onmouseleave="{parent.parent.parent.hideTooltip}"> @@ -223,7 +223,8 @@ require("../components/LazyLoad.tag.html"); <div class="vote-tooltip" ref="voteTooltip" show="{voteTooltip.show}"> <ChoiceView if="{voteTooltip.choice}" choice="{voteTooltip.choice}" center="true" hideReport="true"></ChoiceView> - <div class="vote-value" if="{!pollTypeCheckbox && voteTooltip.vote && voteTooltip.choice}">{poll.getVoteValue(voteTooltip.vote, voteTooltip.choice)}</div> + <div class="vote-value" if="{!pollTypeCheckbox && voteTooltip.vote && voteTooltip.choice}"> + {voteTooltip.vote.ignored ? __.ignored :poll.getVoteValue(voteTooltip.vote, voteTooltip.choice)}</div> <div if="{voteTooltip.vote && !voteTooltip.choice}">{voteTooltip.vote.voterName}</div> </div> </div> @@ -723,10 +724,28 @@ require("../components/LazyLoad.tag.html"); text-overflow:ellipsis; } - .voters .row:hover .result { + .voters .row .ignored { + background: repeating-linear-gradient( + 45deg, + transparent, + transparent 10px, + var(--hatching) 10px, + var(--hatching) 20px); + } + + .voters .row:hover { background-color: var(--vote-hover); } + .voters .row:hover .ignored { + background: repeating-linear-gradient( + 45deg, + var(--vote-hover), + var(--vote-hover) 10px, + var(--hatching) 10px, + var(--hatching) 20px); + } + .voters .result.checkbox { background-color: var(--vote-not-selected); } -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/58-limitation-des-votants in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit 7bf3bbd6a248364421577b605c93e1d06356ccbb Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Thu Sep 28 09:14:46 2017 +0200 Dans les listes des sondages : voir les sondage hors limites du nombre de votants (ref #58) --- pollen-ui-riot-js/src/main/web/i18n/en.json | 1 + pollen-ui-riot-js/src/main/web/i18n/fr.json | 1 + .../src/main/web/tag/poll/PollCard.tag.html | 26 +++++++++++++++++----- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/pollen-ui-riot-js/src/main/web/i18n/en.json b/pollen-ui-riot-js/src/main/web/i18n/en.json index 39b46372..1c0226d9 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/en.json +++ b/pollen-ui-riot-js/src/main/web/i18n/en.json @@ -65,6 +65,7 @@ "poll_subscribers": "subscribers", "poll_participants": "participants", "poll_participation": "of participation", + "poll_maxVoters": "Limited to {0}", "poll_maxVotersAlert_title": "Number of voters limitation", "poll_maxVotersAlert": "Strandard offers has limited to {0} voters. Users can continue to vote but only the first {0} votes are taken into account in the calculation of the resultles.", "poll_maxVotersAlert_offers": "Read <a href=\"#home\">the offers page</a> to unlock this limit.", diff --git a/pollen-ui-riot-js/src/main/web/i18n/fr.json b/pollen-ui-riot-js/src/main/web/i18n/fr.json index 5d451158..73dda9d6 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/fr.json +++ b/pollen-ui-riot-js/src/main/web/i18n/fr.json @@ -65,6 +65,7 @@ "poll_subscribers": "invités", "poll_participants": "participants", "poll_participation": "de participation", + "poll_maxVoters": "Limité à {0}", "poll_maxVotersAlert_title": "Limitation du Nombre de votants", "poll_maxVotersAlert": "L'offre standard est limitée à {0} votants. Les utilisateurs peuvent continuer à voter mais seul les {0} premiers votes sont pris en compte dans le calcul du résultat.", "poll_maxVotersAlert_offers": "Cousulter <a href=\"#home\">la page des nos offres</a> pour déverrouiller cette limite.", diff --git a/pollen-ui-riot-js/src/main/web/tag/poll/PollCard.tag.html b/pollen-ui-riot-js/src/main/web/tag/poll/PollCard.tag.html index b70f2bca..a2347c15 100644 --- a/pollen-ui-riot-js/src/main/web/tag/poll/PollCard.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/poll/PollCard.tag.html @@ -8,12 +8,12 @@ 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% @@ -57,10 +57,16 @@ </div> </div> - <a class="poll-votes" - href="#poll/{opts.poll.id}/vote/{opts.poll.permission}"> - {opts.poll.voteCount === 0 ? __.noVote : (opts.poll.voteCount + " " + (count === 1 ? __.vote : __.votes))} - </a> + <span class="poll-votes"> + <a href="#poll/{opts.poll.id}/vote/{opts.poll.permission}"> + {opts.poll.voteCount === 0 ? __.noVote : (opts.poll.voteCount + " " + (count === 1 ? __.vote : __.votes))} + </a> + <a if={opts.poll.maxVoters > 0 &&opts.poll.voteCount > opts.poll.maxVoters} + class="c-badge c-badge--rounded c-badge--warning" + onclick={toggleMaxVoters}>{_l("maxVoters", opts.poll.maxVoters)} + </a> + </span> + </div> <script type="es6"> @@ -80,6 +86,14 @@ }); }; + this.toggleMaxVoters = () => { + let message = this._l("maxVotersAlert", this.opts.poll.maxVoters); + if (this.opts.poll.permission) { + message += " " + this.__.maxVotersAlert_offers; + } + this.info(this.__.maxVotersAlert_title, message, null, "warning"); + }; + </script> <style> -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/58-limitation-des-votants in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit 3e454d6786e129134f829abb0e0d97d63c428167 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Thu Sep 28 13:33:36 2017 +0200 Création et modification d'un sondage restreint, avertir si le nombre de participant dépasse le nombre maximum de votants (ref #58) --- .../chorem/pollen/services/bean/VoterListBean.java | 12 +++++++++++ .../pollen/services/service/PollService.java | 3 +++ .../pollen/services/service/VoterListService.java | 19 +++++++++++++++- pollen-ui-riot-js/src/main/web/i18n/en.json | 2 ++ pollen-ui-riot-js/src/main/web/i18n/fr.json | 2 ++ .../src/main/web/js/VoterListService.js | 25 ++++++++++++++++++++-- .../src/main/web/tag/voterList/VoterList.tag.html | 17 +++++++++++++-- 7 files changed, 75 insertions(+), 5 deletions(-) diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java index 7d76b4f8..97ff6fce 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListBean.java @@ -23,6 +23,8 @@ package org.chorem.pollen.services.bean; import org.chorem.pollen.persistence.entity.VoterList; +import java.util.Set; + /** * Created on 5/15/14. * @@ -41,6 +43,8 @@ public class VoterListBean extends PollenBean<VoterList> { protected long countMembers; + protected Set<String> allEmails; + public VoterListBean() { super(VoterList.class); } @@ -87,4 +91,12 @@ public class VoterListBean extends PollenBean<VoterList> { public void setCountMembers(long countMembers) { this.countMembers = countMembers; } + + public Set<String> getAllEmails() { + return allEmails; + } + + public void setAllEmails(Set<String> allEmails) { + this.allEmails = allEmails; + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java index 084d48b1..050f9e7f 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java @@ -272,6 +272,9 @@ public class PollService extends PollenServiceSupport { } + boolean premium = getUserService().isPremium(connectedUser); + pollBean.setMaxVoters(premium ? 0 : getPollenServiceConfig().getMaxVoters()); + return pollBean; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java index c9038094..eb9a3833 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java @@ -174,6 +174,8 @@ public class VoterListService extends PollenServiceSupport { bean.setCountSubLists(countSubLists); bean.setCountMembers(countMembers); + bean.setAllEmails(getVoterListMemberMails(entity)); + return bean; } @@ -825,11 +827,26 @@ public class VoterListService extends PollenServiceSupport { public long getVoterListMemberCount(Poll poll) { VoterList voterList = getMainVoterList0(poll); + return getVoterListMemberCount(voterList); + } + + public long getVoterListMemberCount(VoterList voterList) { + List<VoterListMember> allMembers = getVoterListDao().getAllMembers(voterList); - + return allMembers.stream() .map(VoterListMember::getMember) .distinct() .count(); } + + public Set<String> getVoterListMemberMails(VoterList voterList) { + + List<VoterListMember> allMembers = getVoterListDao().getAllMembers(voterList); + + return allMembers.stream() + .map(VoterListMember::getMember) + .map(PollenPrincipal::getEmail) + .collect(Collectors.toSet()); + } } diff --git a/pollen-ui-riot-js/src/main/web/i18n/en.json b/pollen-ui-riot-js/src/main/web/i18n/en.json index 1c0226d9..9265717a 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/en.json +++ b/pollen-ui-riot-js/src/main/web/i18n/en.json @@ -531,6 +531,8 @@ "voterList_member_deleteMessage": "Delete member ?", "voterList_member_resendInvitation": "Resent a invitation", "voterList_member_resendInvitation_success": "invitation send", + "voterList_maxVotersAlert_title": "Number of voters limitation", + "voterList_maxVotersAlert": "The number of voters exceeds the limit of the standard offer ({0} voters). Users can continue to vote but only the first {0} votes are taken into account in the calculation of the resultles. Read <a href=\"#home\">the offers page</a> to unlock this limit.", "modal_cancel": "Cancel", "modal_ok": "Ok", "confirm_cancel": "Cancel", diff --git a/pollen-ui-riot-js/src/main/web/i18n/fr.json b/pollen-ui-riot-js/src/main/web/i18n/fr.json index 73dda9d6..007eb6b3 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/fr.json +++ b/pollen-ui-riot-js/src/main/web/i18n/fr.json @@ -531,6 +531,8 @@ "voterList_member_deleteMessage": "Supprimer le participant ?", "voterList_member_resendInvitation": "Renvoyer une invitation", "voterList_member_resendInvitation_success": "L'invitation est envoyée", + "voterList_maxVotersAlert_title": "Limitation du Nombre de votants", + "voterList_maxVotersAlert": "Le nombre de participants dépasse la limite de l'offre standard ({0} votants). Tout les participants pourront voter mais seul les {0} premiers votes seront pris en compte dans le calcul du résultat. Cousulter <a href=\"#home\">la page des nos offres</a> pour déverrouiller cette limite.", "modal_cancel": "Annuler", "modal_ok": "Ok", "confirm_cancel": "Annuler", diff --git a/pollen-ui-riot-js/src/main/web/js/VoterListService.js b/pollen-ui-riot-js/src/main/web/js/VoterListService.js index 7ebaa475..173f4743 100644 --- a/pollen-ui-riot-js/src/main/web/js/VoterListService.js +++ b/pollen-ui-riot-js/src/main/web/js/VoterListService.js @@ -8,12 +8,12 @@ * 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% @@ -46,6 +46,7 @@ class VoterListService extends FetchService { subLists: [], countMembers: 0, members: [], + allEmails: [], name: name, weight: weight || 1, loadded: true, @@ -216,6 +217,26 @@ class VoterListService extends FetchService { return Promise.resolve(member); } + countAllEmails(voterList) { + let emails = this.getAllEmails(voterList); + return emails.size; + } + + getAllEmails(voterList) { + let emails = new Set(); + if (voterList.loadded) { + voterList.members + .map(m => m.email) + .forEach(email => emails.add(email)); + voterList.subLists + .map(subList => this.getAllEmails(subList)) + .forEach(subEmails => subEmails.forEach(email => emails.add(email))); + } else { + voterList.allEmails.forEach(email => emails.add(email)); + } + return emails; + } + deleteMember(member) { let voterList = this.voterListsById[member.voterListId]; let index = voterList.members.indexOf(member); diff --git a/pollen-ui-riot-js/src/main/web/tag/voterList/VoterList.tag.html b/pollen-ui-riot-js/src/main/web/tag/voterList/VoterList.tag.html index c1251aa9..fecfd26b 100644 --- a/pollen-ui-riot-js/src/main/web/tag/voterList/VoterList.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/voterList/VoterList.tag.html @@ -8,12 +8,12 @@ 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% @@ -38,6 +38,14 @@ require("../components/ContextualMenu.tag.html"); </li> </ol> + <div show={isOutOfLimite()} + class="c-alert c-alert--warning"> + <div> + <strong> {__.maxVotersAlert_title}</strong> + </div> + <InnerHtml html={_l("maxVotersAlert", opts.form.model.maxVoters)} /> + </div> + <div class="elements"> <VoterListCard each={subList in opts.form.currentVoterList.subLists} voter-list={subList} @@ -186,6 +194,11 @@ require("../components/ContextualMenu.tag.html"); }); }; + this.isOutOfLimite = () => { + return this.opts.form.model.maxVoters > 0 + && voterListService.countAllEmails(this.opts.form.mainVoterList) > this.opts.form.model.maxVoters; + }; + this.submit = () => { this.opts.form.mainVoterList.name = this.__.mainList + this.opts.form.model.title; }; -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/58-limitation-des-votants in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit 627ddf75861ef1f06b8bcfd5415e2ad1844f0d09 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Thu Sep 28 16:26:07 2017 +0200 envoyer un mail quand le nombre de votants dépasse la valeur max (ref #58) --- .../pollen/persistence/entity/PollTopiaDao.java | 12 ++++ .../db/migration/h2/V3_1_0_1__add_premium.sql | 3 + .../migration/postgresql/V3_1_0_1__add_premium.sql | 3 + pollen-persistence/src/main/xmi/pollen.zargo | Bin 28471 -> 28560 bytes .../chorem/pollen/services/PollenUIContext.java | 10 +++ .../services/service/NotificationService.java | 9 +++ .../pollen/services/service/VoteService.java | 9 +++ .../pollen/services/service/mail/EmailService.java | 8 +++ .../service/mail/ExceedingMaxVotersEmail.java | 73 +++++++++++++++++++++ .../email/ExceedingMaxVotersEmail.mustache | 5 ++ .../email/ExceedingMaxVotersEmail_fr.mustache | 6 ++ .../i18n/pollen-services_en_GB.properties | 1 + .../i18n/pollen-services_fr_FR.properties | 1 + pollen-ui-riot-js/src/main/web/i18n/en.json | 4 +- pollen-ui-riot-js/src/main/web/i18n/fr.json | 4 +- pollen-ui-riot-js/src/main/web/js/Session.js | 3 +- 16 files changed, 146 insertions(+), 5 deletions(-) diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollTopiaDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollTopiaDao.java index 88e8ea39..900d140d 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollTopiaDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollTopiaDao.java @@ -31,6 +31,7 @@ import org.nuiton.util.pagination.PaginationResult; import java.util.Calendar; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.List; @@ -208,4 +209,15 @@ public class PollTopiaDao extends AbstractPollTopiaDao<Poll> { .collect(Collectors.toList()); } + public boolean setFlagNotificationMaxVoterSend(Poll poll) { + + int nbModif = topiaJpaSupport.execute("UPDATE " + Poll.class.getCanonicalName() + + " SET " + Poll.PROPERTY_NOTIFICATION_MAX_VOTER_SEND + " = true" + + " WHERE " + Poll.PROPERTY_TOPIA_ID + " = :" + Poll.PROPERTY_TOPIA_ID + + " AND " + Poll.PROPERTY_NOTIFICATION_MAX_VOTER_SEND + " = false", + Collections.singletonMap(Poll.PROPERTY_TOPIA_ID, poll.getTopiaId())); + + return nbModif > 0; + } + } diff --git a/pollen-persistence/src/main/resources/db/migration/h2/V3_1_0_1__add_premium.sql b/pollen-persistence/src/main/resources/db/migration/h2/V3_1_0_1__add_premium.sql index dc4a1849..e43b96d3 100644 --- a/pollen-persistence/src/main/resources/db/migration/h2/V3_1_0_1__add_premium.sql +++ b/pollen-persistence/src/main/resources/db/migration/h2/V3_1_0_1__add_premium.sql @@ -2,4 +2,7 @@ alter table poll add premium boolean; update poll set premium = false; +alter table poll add notificationMaxVoterSend boolean; +update poll set notificationMaxVoterSend = false; + alter table pollenUser add premiumTo TIMESTAMP; diff --git a/pollen-persistence/src/main/resources/db/migration/postgresql/V3_1_0_1__add_premium.sql b/pollen-persistence/src/main/resources/db/migration/postgresql/V3_1_0_1__add_premium.sql index dc4a1849..e43b96d3 100644 --- a/pollen-persistence/src/main/resources/db/migration/postgresql/V3_1_0_1__add_premium.sql +++ b/pollen-persistence/src/main/resources/db/migration/postgresql/V3_1_0_1__add_premium.sql @@ -2,4 +2,7 @@ alter table poll add premium boolean; update poll set premium = false; +alter table poll add notificationMaxVoterSend boolean; +update poll set notificationMaxVoterSend = false; + alter table pollenUser add premiumTo TIMESTAMP; diff --git a/pollen-persistence/src/main/xmi/pollen.zargo b/pollen-persistence/src/main/xmi/pollen.zargo index 004634d3..99dbdb63 100644 Binary files a/pollen-persistence/src/main/xmi/pollen.zargo and b/pollen-persistence/src/main/xmi/pollen.zargo differ diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/PollenUIContext.java b/pollen-services/src/main/java/org/chorem/pollen/services/PollenUIContext.java index a707476e..b9bc6aeb 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/PollenUIContext.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/PollenUIContext.java @@ -44,6 +44,8 @@ public class PollenUIContext implements Serializable { private String profileUrl; + private String offersUrl; + public String getUiEndPoint() { return uiEndPoint; } @@ -107,4 +109,12 @@ public class PollenUIContext implements Serializable { public void setProfileUrl(String profileUrl) { this.profileUrl = profileUrl; } + + public String getOffersUrl() { + return offersUrl; + } + + public void setOffersUrl(String offersUrl) { + this.offersUrl = offersUrl; + } } 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 074c6198..ba7c6dbf 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 @@ -42,6 +42,7 @@ import org.chorem.pollen.services.service.mail.CommentEditedEmail; import org.chorem.pollen.services.service.mail.CommentReportEmail; import org.chorem.pollen.services.service.mail.CommentReportForAdminEmail; import org.chorem.pollen.services.service.mail.EmailService; +import org.chorem.pollen.services.service.mail.ExceedingMaxVotersEmail; import org.chorem.pollen.services.service.mail.LostPasswordEmail; import org.chorem.pollen.services.service.mail.PollClosedEmail; import org.chorem.pollen.services.service.mail.PollCreatedEmail; @@ -405,4 +406,12 @@ public class NotificationService extends PollenServiceSupport { }); } + + public void onExceedingMaxVoters(Poll poll, int maxVoters) { + EmailService emailService = getEmailService(); + + ExceedingMaxVotersEmail email = emailService.newExceedingMaxVotersEmail(poll, maxVoters); + email.addTo(poll.getCreator().getEmail()); + emailService.send(email); + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java index 724178f8..12c244a3 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java @@ -204,6 +204,15 @@ public class VoteService extends PollenServiceSupport { getNotificationService().onVoteAdded(poll, result); getFeedService().onVoteAdded(poll, result); + int maxVoters = getPollService().getMaxVoters(poll); + if (maxVoters > 0 && getVoteCount(poll) > maxVoters) { + boolean notificationSend = getPollDao().setFlagNotificationMaxVoterSend(poll); + if (notificationSend) { + commit(); + getNotificationService().onExceedingMaxVoters(poll, maxVoters); + } + } + return PollenEntityRef.of(result); } 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 eed9fe95..f2d15d13 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 @@ -610,4 +610,12 @@ public class EmailService extends PollenServiceSupport { email.setApplicationVersion(getPollenServiceConfig().getVersion()); return email; } + + public ExceedingMaxVotersEmail newExceedingMaxVotersEmail(Poll poll, int maxVoters) { + ExceedingMaxVotersEmail email = new ExceedingMaxVotersEmail(getLocale()); + email.setPoll(poll); + email.setMaxVoters(maxVoters); + email.setOffersUrl(getUIContext().getOffersUrl()); + return email; + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/ExceedingMaxVotersEmail.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/ExceedingMaxVotersEmail.java new file mode 100644 index 00000000..eb862893 --- /dev/null +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/ExceedingMaxVotersEmail.java @@ -0,0 +1,73 @@ +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.nuiton.i18n.I18n; + +import java.util.Locale; + +/** + * Created on 4/30/14. + * + * @author Tony Chemit - dev@tchemit.fr + * @since 2.0 + */ +public class ExceedingMaxVotersEmail extends PollenMail { + + protected Poll poll; + private int maxVoters; + private String offersUrl; + + protected ExceedingMaxVotersEmail(Locale locale) { + super(locale); + } + + @Override + public String getSubject() { + return I18n.l(locale, "pollen.service.mail.ExceedingMaxVotersEmail.subject", poll.getTitle()); + } + + public Poll getPoll() { + return poll; + } + + public void setPoll(Poll poll) { + this.poll = poll; + } + + public void setMaxVoters(int maxVoters) { + this.maxVoters = maxVoters; + } + + public int getMaxVoters() { + return maxVoters; + } + + public void setOffersUrl(String offersUrl) { + this.offersUrl = offersUrl; + } + + public String getOffersUrl() { + return offersUrl; + } +} \ No newline at end of file diff --git a/pollen-services/src/main/resources/email/ExceedingMaxVotersEmail.mustache b/pollen-services/src/main/resources/email/ExceedingMaxVotersEmail.mustache new file mode 100644 index 00000000..8a1757ec --- /dev/null +++ b/pollen-services/src/main/resources/email/ExceedingMaxVotersEmail.mustache @@ -0,0 +1,5 @@ +Hello {{poll.creator.name}}, + +Your poll "{{poll.title}}" has just exceeded the maximum number of voters for the standard offer ({{maxVoters}} voters). +Users can continue to vote but only the first {{maxVoters}} votes are taken into account in the calculation of the result. +Read the offers page ({{offersUrl}}) to unlock this limit. \ No newline at end of file diff --git a/pollen-services/src/main/resources/email/ExceedingMaxVotersEmail_fr.mustache b/pollen-services/src/main/resources/email/ExceedingMaxVotersEmail_fr.mustache new file mode 100644 index 00000000..26ac89f3 --- /dev/null +++ b/pollen-services/src/main/resources/email/ExceedingMaxVotersEmail_fr.mustache @@ -0,0 +1,6 @@ +Bonjour {{poll.creator.name}}, + +Votre sondage "{{poll.title}}" vient de dépasser le nombre de votants maximum pour l'offre standard ({{maxVoters}} votants). +Les utilisateurs peuvent continuer à voter mais seul les {{maxVoters}} premiers votes sont pris en compte dans le calcul du résultat. + +Consulter la page des nos offres ({{offersUrl}}) pour déverrouiller cette limite. diff --git a/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties b/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties index ad5f2ecd..5680fe60 100644 --- a/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties +++ b/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties @@ -148,6 +148,7 @@ pollen.service.mail.CommentDeletedEmail.subject=[Pollen] A comment was deleted i pollen.service.mail.CommentEditedEmail.subject=[Pollen] A comment was edited in poll %s pollen.service.mail.CommentReportEmail.subject=[Pollen] A comment was reported in your poll %s pollen.service.mail.CommentReportForAdminEmail.subject=[Pollen] A comment was reported in poll %s +pollen.service.mail.ExceedingMaxVotersEmail.subject=[Pollen] Poll exceeded number of voter pollen.service.mail.LostPasswordEmail.subject=[Pollen] Lost password for %s pollen.service.mail.PollChoicePeriodEndedEmail.subject=[Pollen] Add Choice period ended for poll %s pollen.service.mail.PollChoicePeriodStartedEmail.subject=[Pollen] Add Choice period started for poll %s diff --git a/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties b/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties index dce0f1f5..615a21a6 100644 --- a/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties +++ b/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties @@ -147,6 +147,7 @@ pollen.service.mail.CommentDeletedEmail.subject=[Pollen] Un commentaire a été pollen.service.mail.CommentEditedEmail.subject=[Pollen] Un commentaire a été modifié sur le sondage %s pollen.service.mail.CommentReportEmail.subject=[Pollen] Un commentaire a été signalé comme inapproprié sur votre sondage %s pollen.service.mail.CommentReportForAdminEmail.subject=[Pollen] Un commentaire a été signalé comme inapproprié sur le sondage %s +pollen.service.mail.ExceedingMaxVotersEmail.subject=[Pollen] Vote sondage dépasse le nombre maximal de votants pollen.service.mail.LostPasswordEmail.subject=[Pollen] Mot de passe perdu du compte %s pollen.service.mail.PollChoicePeriodEndedEmail.subject=[Pollen] Période d'ajout de choix terminée pour le sondage %s pollen.service.mail.PollChoicePeriodStartedEmail.subject=[Pollen] Période d'ajout de choix commencée pour le sondage %s diff --git a/pollen-ui-riot-js/src/main/web/i18n/en.json b/pollen-ui-riot-js/src/main/web/i18n/en.json index 9265717a..9dee1eb1 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/en.json +++ b/pollen-ui-riot-js/src/main/web/i18n/en.json @@ -67,7 +67,7 @@ "poll_participation": "of participation", "poll_maxVoters": "Limited to {0}", "poll_maxVotersAlert_title": "Number of voters limitation", - "poll_maxVotersAlert": "Strandard offers has limited to {0} voters. Users can continue to vote but only the first {0} votes are taken into account in the calculation of the resultles.", + "poll_maxVotersAlert": "Strandard offers has limited to {0} voters. Users can continue to vote but only the first {0} votes are taken into account in the calculation of the result.", "poll_maxVotersAlert_offers": "Read <a href=\"#home\">the offers page</a> to unlock this limit.", "poll_closedFrom": "Closing from", "poll_urlForAdmin" : "Administrate poll with this address", @@ -532,7 +532,7 @@ "voterList_member_resendInvitation": "Resent a invitation", "voterList_member_resendInvitation_success": "invitation send", "voterList_maxVotersAlert_title": "Number of voters limitation", - "voterList_maxVotersAlert": "The number of voters exceeds the limit of the standard offer ({0} voters). Users can continue to vote but only the first {0} votes are taken into account in the calculation of the resultles. Read <a href=\"#home\">the offers page</a> to unlock this limit.", + "voterList_maxVotersAlert": "The number of voters exceeds the limit of the standard offer ({0} voters). Users can continue to vote but only the first {0} votes are taken into account in the calculation of the result. Read <a href=\"#home\">the offers page</a> to unlock this limit.", "modal_cancel": "Cancel", "modal_ok": "Ok", "confirm_cancel": "Cancel", diff --git a/pollen-ui-riot-js/src/main/web/i18n/fr.json b/pollen-ui-riot-js/src/main/web/i18n/fr.json index 007eb6b3..9a84ddc0 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/fr.json +++ b/pollen-ui-riot-js/src/main/web/i18n/fr.json @@ -68,7 +68,7 @@ "poll_maxVoters": "Limité à {0}", "poll_maxVotersAlert_title": "Limitation du Nombre de votants", "poll_maxVotersAlert": "L'offre standard est limitée à {0} votants. Les utilisateurs peuvent continuer à voter mais seul les {0} premiers votes sont pris en compte dans le calcul du résultat.", - "poll_maxVotersAlert_offers": "Cousulter <a href=\"#home\">la page des nos offres</a> pour déverrouiller cette limite.", + "poll_maxVotersAlert_offers": "Consulter <a href=\"#home\">la page des nos offres</a> pour déverrouiller cette limite.", "poll_closedFrom": "Fermé depuis le", "poll_urlForAdmin" : "Administrer ce sondage avec cette adresse", "poll_urlForVote" : "Inviter de nouveaux participants en leur envoyant cette adresse", @@ -532,7 +532,7 @@ "voterList_member_resendInvitation": "Renvoyer une invitation", "voterList_member_resendInvitation_success": "L'invitation est envoyée", "voterList_maxVotersAlert_title": "Limitation du Nombre de votants", - "voterList_maxVotersAlert": "Le nombre de participants dépasse la limite de l'offre standard ({0} votants). Tout les participants pourront voter mais seul les {0} premiers votes seront pris en compte dans le calcul du résultat. Cousulter <a href=\"#home\">la page des nos offres</a> pour déverrouiller cette limite.", + "voterList_maxVotersAlert": "Le nombre de participants dépasse la limite de l'offre standard ({0} votants). Tout les participants pourront voter mais seul les {0} premiers votes seront pris en compte dans le calcul du résultat. Consulter <a href=\"#home\">la page des nos offres</a> pour déverrouiller cette limite.", "modal_cancel": "Annuler", "modal_ok": "Ok", "confirm_cancel": "Annuler", diff --git a/pollen-ui-riot-js/src/main/web/js/Session.js b/pollen-ui-riot-js/src/main/web/js/Session.js index 251dcd1c..f5072b6e 100644 --- a/pollen-ui-riot-js/src/main/web/js/Session.js +++ b/pollen-ui-riot-js/src/main/web/js/Session.js @@ -48,7 +48,8 @@ class Session { pollEditUrl: window.location.origin + "/#poll/{pollId}/summary/{token}", resourceUrl: this.configuration.endPoint + "/v1/resources/{resourceId}", resourceDownloadUrl: this.configuration.endPoint + "/v1/resources/{resourceId}/download", - profileUrl: window.location.origin + "/#user/profile" + profileUrl: window.location.origin + "/#user/profile", + offersUrl: window.location.origin + "/#home" }; // pour contenir les traductions this.i18n = { -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm