This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository pollen. See http://git.chorem.org/pollen.git commit aa2f89f8de73c2af3fa2806f1f78309ab1b8da1f Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Tue Aug 12 15:20:06 2014 +0200 Server verify the limitedVote if nbChoice < maxChoiceNumber --- .../services/service/VoteCountingService.java | 21 ++++++++++++--------- .../chorem/pollen/services/service/VoteService.java | 16 +++++++++++++++- .../resources/i18n/pollen-services_en_GB.properties | 1 + .../resources/i18n/pollen-services_fr_FR.properties | 3 ++- .../src/main/webapp/js/controllers/pollCtrl.js | 21 +++++++++++++++++---- .../src/main/webapp/partials/poll-settings.html | 2 +- .../pollen/votecounting/CondorcetVoteCounting.java | 2 +- 7 files changed, 49 insertions(+), 17 deletions(-) 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 e469da1..9ecddb2 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 @@ -259,18 +259,21 @@ public class VoteCountingService extends PollenServiceSupport { Double total = null; for(VoteToChoiceBean choice: vote.getChoice()) { - if (choice.getVoteValue() != null) { - if (total == null) { - total = 0.0; - } - total += choice.getVoteValue(); + if (voteCounting.isVoteValueNull(choice.getVoteValue())) { + continue; + } - check(errors, - "voteValue[" + choice.getChoiceId().getReducedId() + "]", - voteCounting.isVoteValueValid(choice.getVoteValue()), - l(getLocale(), "pollen.error.vote.voteValue.invalid")); + if (total == null) { + total = 0.0; } + + total += choice.getVoteValue(); + + check(errors, + "voteValue[" + choice.getChoiceId().getReducedId() + "]", + voteCounting.isVoteValueValid(choice.getVoteValue()), + l(getLocale(), "pollen.error.vote.voteValue.invalid")); } check(errors, 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 97910a1..367b9c6 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 @@ -31,6 +31,7 @@ import org.chorem.pollen.services.bean.PollenEntityRef; import org.chorem.pollen.services.bean.VoteBean; import org.chorem.pollen.services.bean.VoteToChoiceBean; import org.chorem.pollen.services.service.security.PermissionVerb; +import org.chorem.pollen.votecounting.VoteCounting; import java.util.*; @@ -212,9 +213,22 @@ public class VoteService extends PollenServiceSupport { } - ErrorMap valueErrors = getVoteCountingService().voteIsValid(vote, getVoteCountingService().getVoteCounting(poll)); + VoteCounting voteCounting = getVoteCountingService().getVoteCounting(poll); + + ErrorMap valueErrors = getVoteCountingService().voteIsValid(vote, voteCounting); valueErrors.copyTo(errors, "vote."); + if (poll.getMaxChoiceNumber() > 0) { + int nbChoice = 0; + for ( VoteToChoiceBean voteToChoice : vote.getChoice() ) { + if ( voteCounting.isChoiceInVote(voteToChoice.getVoteValue()) ) { + nbChoice++; + } + } + + check(errors, "vote.limitedVote", nbChoice <= poll.getMaxChoiceNumber(), l(getLocale(), "pollen.error.vote.limitedVote.overflow")); + } + //TODO Finish validation } return errors; 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 a1cfeb7..d308101 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 @@ -52,6 +52,7 @@ pollen.error.user.mailExist=email already exists pollen.error.user.mailInvalid=email is not valid pollen.error.user.passwordEmpty=password can not be empty pollen.error.user.passwordInvalid=password is not valid +pollen.error.vote.limitedVote.overflow=Too many choices pollen.error.vote.poll.isClosed=poll is closed, you can't vote pollen.error.vote.poll.notStarted=poll is not started pollen.error.vote.totalVote.invalid=Total vote value is invalid 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 f72b463..5d2c9c8 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 @@ -51,9 +51,10 @@ pollen.error.user.mailExist=Courriel existe déjà pollen.error.user.mailInvalid=Courriel est invalide pollen.error.user.passwordEmpty=Mot de passe ne peut pas être vide pollen.error.user.passwordInvalid=Mot de passe est invalide +pollen.error.vote.limitedVote.overflow=Le nombre de choix maximal atteind pollen.error.vote.poll.isClosed=Le sondage est clos, vous pouvez voter pollen.error.vote.poll.notStarted=les votes n'ont pas commencé -pollen.error.vote.totalVote.invalid=le total des valuers est invalide +pollen.error.vote.totalVote.invalid=le total des valeurs est invalide pollen.error.vote.voteValue.invalid=la valeur est invalid pollen.error.vote.voterName.alreadyExist=le nom existe déjà pollen.error.vote.voterName.mandatory=le nom est obligatoire diff --git a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js index d557d2a..ccc01c5 100644 --- a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js +++ b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js @@ -1259,14 +1259,18 @@ angular.module('pollControllers', ['ngRoute', 'pollenServices', 'pascalprecht.tr $location.url(redirect); }, function (error) { - if (angular.isDefined(error.data["voter.name"])) { + if (error.data.hasOwnProperty("voter.name")) { $scope.data.vote.restError = { voterName : error.data["voter.name"]}; } - if (angular.isDefined(error.data["vote.totalVoteValue"])) { + if (error.data.hasOwnProperty("vote.totalVoteValue")) { $rootScope.$broadcast('newError', error.data["vote.totalVoteValue"][0]); } + if (error.data.hasOwnProperty("vote.limitedVote")) { + $rootScope.$broadcast('newError', error.data["vote.limitedVote"][0]); + } + angular.forEach($scope.data.vote.choice, function (choice) { if (angular.isDefined(error.data["vote.voteValue["+choice.choiceId+"]"])) { choice.restError = error.data["vote.voteValue["+choice.choiceId+"]"]; @@ -1335,8 +1339,17 @@ angular.module('pollControllers', ['ngRoute', 'pollenServices', 'pascalprecht.tr $rootScope.$broadcast('newSuccess', 'vote.added'); $location.url('/poll/vote/'+$routeParams.pollId+'/'+ data.permission); }, function (error) { - $scope.data.vote.restError = { voterName : error.data["voter.name"]}; - }) + if (error.data.hasOwnProperty("vote.totalVoteValue")) { + $rootScope.$broadcast('newError', error.data["vote.totalVoteValue"][0]); + } + + if (error.data.hasOwnProperty("vote.limitedVote")) { + $rootScope.$broadcast('newError', error.data["vote.limitedVote"][0]); + } + if (error.data.hasOwnProperty("voter.name")) { + $scope.data.vote.restError = { voterName: error.data["voter.name"]}; + } + }); }; $scope.toggleVoteValue = function (choice, onEdit, event) { diff --git a/pollen-ui-angular/src/main/webapp/partials/poll-settings.html b/pollen-ui-angular/src/main/webapp/partials/poll-settings.html index 789cecf..7bd7a89 100644 --- a/pollen-ui-angular/src/main/webapp/partials/poll-settings.html +++ b/pollen-ui-angular/src/main/webapp/partials/poll-settings.html @@ -181,7 +181,7 @@ {{ 'poll.config.label.limitedVote' | translate }} </label> <div class="col-sm-6"> - <input type="checkbox" id="formLimitedVote" ng-model="data.poll.limitedVote" auto-save="autoSavePoll()" /> + <input type="number" min="0" step="1" id="formLimitedVote" ng-model="data.poll.limitedVote" auto-save="autoSavePoll()" /> </div> <div class="col-sm-2"></div> </div> diff --git a/pollen-votecounting-condorcet/src/main/java/org/chorem/pollen/votecounting/CondorcetVoteCounting.java b/pollen-votecounting-condorcet/src/main/java/org/chorem/pollen/votecounting/CondorcetVoteCounting.java index e9af235..bf67f49 100644 --- a/pollen-votecounting-condorcet/src/main/java/org/chorem/pollen/votecounting/CondorcetVoteCounting.java +++ b/pollen-votecounting-condorcet/src/main/java/org/chorem/pollen/votecounting/CondorcetVoteCounting.java @@ -75,7 +75,7 @@ public class CondorcetVoteCounting extends AbstractVoteCounting<CondorcetVoteCou @Override public boolean isChoiceInVote(Double voteValue) { - return voteValue != null && voteValue > 0 && voteValue < 100; + return voteValue != null && voteValue > 0; } @Override -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.