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 c25e040439d6a5f1925ff1827fd855074fa8b68e Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Thu Jun 19 18:17:08 2014 +0200 import favoriteList to voterList --- .../chorem/pollen/rest/api/v1/VoterListApi.java | 9 +++- pollen-rest-api/src/main/resources/mapping | 1 + .../pollen/services/service/VoterListService.java | 52 +++++++++++++++------- pollen-ui-angular/src/main/webapp/css/style.css | 1 + pollen-ui-angular/src/main/webapp/i18n/en.js | 1 + pollen-ui-angular/src/main/webapp/i18n/fr.js | 4 +- .../main/webapp/js/controllers/favoriteListCtrl.js | 25 +++++++---- .../src/main/webapp/js/controllers/pollCtrl.js | 25 ++++++++++- pollen-ui-angular/src/main/webapp/js/services.js | 9 ++++ .../main/webapp/partials/favoriteList-edit.html | 3 ++ .../main/webapp/partials/poll-listParticipant.html | 16 +++++++ 11 files changed, 116 insertions(+), 30 deletions(-) diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoterListApi.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoterListApi.java index d3242a4..7ce915e 100644 --- a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoterListApi.java +++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoterListApi.java @@ -49,11 +49,18 @@ public class VoterListApi extends WebMotionController { public PollenEntityRef<VoterList> importFavoriteList(VoterListService voterListService, PollenEntityId<Poll> pollId, PollenEntityId<FavoriteList> favoriteListId) { - PollenEntityRef<VoterList> principalRef = voterListService.importFavoriteList(pollId.getEntityId(), favoriteListId.getEntityId()); + PollenEntityRef<VoterList> principalRef = voterListService.importFavoriteList(pollId.getEntityId(), null, favoriteListId.getEntityId()); return principalRef; } + public PollenEntityRef<VoterList> importFavoriteList(VoterListService voterListService, PollenEntityId<Poll> pollId, PollenEntityId<VoterList> voterListId, PollenEntityId<FavoriteList> favoriteListId) { + + PollenEntityRef<VoterList> principalRef = voterListService.importFavoriteList(pollId.getEntityId(), voterListId.getEntityId(),favoriteListId.getEntityId()); + return principalRef; + + } + public List<VoterListBean> getVoterLists(VoterListService voterListService, PollenEntityId<Poll> pollId) { List<VoterListBean> voterLists = voterListService.getVoterLists(pollId.getEntityId()); diff --git a/pollen-rest-api/src/main/resources/mapping b/pollen-rest-api/src/main/resources/mapping index 3d8011e..22f2d98 100644 --- a/pollen-rest-api/src/main/resources/mapping +++ b/pollen-rest-api/src/main/resources/mapping @@ -137,6 +137,7 @@ GET /v1/polls/{pollId}/voterLists/{voterListId} VoterListApi.getVoter POST /v1/polls/{pollId}/voterLists VoterListApi.createVoterList PUT,POST /v1/polls/{pollId}/voterLists/{voterListId} VoterListApi.editVoterList DELETE /v1/polls/{pollId}/voterLists/{voterListId} VoterListApi.deleteVoterList +PUT /v1/polls/{pollId}/voterLists/{voterListId}/favoriteLists/{favoriteListId} VoterListApi.importFavoriteList GET /v1/polls/{pollId}/voterLists/{voterListId}/members VoterListApi.getMembers GET /v1/polls/{pollId}/voterLists/{voterListId}/members/{memberId} VoterListApi.getMember 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 8526432..9f2b529 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 @@ -25,14 +25,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.FavoriteList; -import org.chorem.pollen.persistence.entity.FavoriteListMember; -import org.chorem.pollen.persistence.entity.Poll; -import org.chorem.pollen.persistence.entity.PollenUser; -import org.chorem.pollen.persistence.entity.VoterList; -import org.chorem.pollen.persistence.entity.VoterListMember; -import org.chorem.pollen.persistence.entity.VoterListMemberTopiaDao; -import org.chorem.pollen.persistence.entity.VoterListTopiaDao; +import org.chorem.pollen.persistence.entity.*; import org.chorem.pollen.services.bean.PollenEntityRef; import org.chorem.pollen.services.bean.VoterListBean; import org.chorem.pollen.services.bean.VoterListMemberBean; @@ -68,6 +61,7 @@ public class VoterListService extends PollenServiceSupport { } public PollenEntityRef<VoterList> importFavoriteList(String pollId, + String voterListId, String favoriteListId) { checkIsConnected(); @@ -81,11 +75,28 @@ public class VoterListService extends PollenServiceSupport { FavoriteList favoriteList = getFavoriteListService().getFavoriteList0(user, favoriteListId); - VoterListTopiaDao dao = getVoterListDao(); - VoterList result = dao.create(); + VoterList result = null; + List<VoterListMember> existingVoterListMembers = null; + if (voterListId != null) { + result = getVoterList0(poll, voterListId); + } + else { + if (poll.getPollType() == PollType.RESTRICTED) { + List<VoterList> existingVoterList = getVoterLists0(poll); + if (existingVoterList.size() > 0) { + result = getVoterList0(poll, existingVoterList.get(0).getTopiaId()); + } + } + } - result.setName(favoriteList.getName()); - result.setWeight(1d); + if (result == null) { + VoterListTopiaDao dao = getVoterListDao(); + result = dao.create(); + result.setName(favoriteList.getName()); + result.setWeight(1d); + } else { + existingVoterListMembers = getVoterListMembers0(result); + } VoterListMemberTopiaDao voterListMemberDao = getVoterListMemberDao(); @@ -93,11 +104,18 @@ public class VoterListService extends PollenServiceSupport { List<FavoriteListMember> favoriteListMembers = getFavoriteListService().getFavoriteListMembers0(favoriteList); for (FavoriteListMember favoriteListMember : favoriteListMembers) { - - VoterListMember voterListMember = voterListMemberDao.create(); - voterListMember.setWeight(1d); - voterListMember.setEmail(favoriteListMember.getEmail()); - voterListMember.setVoterList(result); + VoterListMemberBean voterListMemberBean = new VoterListMemberBean(); + voterListMemberBean.setWeight(1d); + voterListMemberBean.setName(favoriteListMember.getName()); + voterListMemberBean.setEmail(favoriteListMember.getEmail()); + + ErrorMap errorMap = checkVoterListMember(existingVoterListMembers, voterListMemberBean); + if (errorMap.isEmpty()) { + // no error then create member + VoterListMember voterListMember = voterListMemberBean.toEntity(); + voterListMember.setVoterList(result); + voterListMemberDao.create(voterListMember); + } } diff --git a/pollen-ui-angular/src/main/webapp/css/style.css b/pollen-ui-angular/src/main/webapp/css/style.css index a71f43a..ab77b85 100644 --- a/pollen-ui-angular/src/main/webapp/css/style.css +++ b/pollen-ui-angular/src/main/webapp/css/style.css @@ -249,6 +249,7 @@ i.icon-collapse { .voterList { width:100%; + margin-top:25px; margin-bottom:15px; border:3px solid #DDD; } diff --git a/pollen-ui-angular/src/main/webapp/i18n/en.js b/pollen-ui-angular/src/main/webapp/i18n/en.js index e0338f4..164d011 100644 --- a/pollen-ui-angular/src/main/webapp/i18n/en.js +++ b/pollen-ui-angular/src/main/webapp/i18n/en.js @@ -78,6 +78,7 @@ var translateEN = { 'action.restricted.addGroup' : 'Add a Group', 'action.restricted.deleteGroup' : 'Delete the Group', 'action.restricted.notify' : 'Notify', +'action.favoriteList.import' : 'Import favorite list', 'action.favoriteList.add' : 'Add favorite list', 'action.favoriteList.delete' : 'Delete the favorite list', 'action.favoriteList.addMember' : 'Add a member', diff --git a/pollen-ui-angular/src/main/webapp/i18n/fr.js b/pollen-ui-angular/src/main/webapp/i18n/fr.js index 8ce94c4..9466e8e 100644 --- a/pollen-ui-angular/src/main/webapp/i18n/fr.js +++ b/pollen-ui-angular/src/main/webapp/i18n/fr.js @@ -78,7 +78,9 @@ var translateFR = { 'action.restricted.addGroup' : 'Ajouter un Groupe de Votant', 'action.restricted.deleteGroup' : 'Supprimer le Groupe de Votant', 'action.restricted.notify' : 'Envoyer un mail', -'action.favoriteList.add' : 'Ajouter une liste de diffusion', +'action.favoriteList.import.addGroup' : 'Importer dans un nouveau groupe', +'action.favoriteList.import.inGroup' : 'Importer dans ce groupe', +'action.favoriteList.add' : 'Créer une nouvelle liste de diffusion', 'action.favoriteList.delete' : 'Supprimer la liste de diffusion', 'action.favoriteList.addMember' : 'Ajouter un membre', 'action.favoriteList.deleteMember' : 'Supprimer le membre', diff --git a/pollen-ui-angular/src/main/webapp/js/controllers/favoriteListCtrl.js b/pollen-ui-angular/src/main/webapp/js/controllers/favoriteListCtrl.js index 0f364be..6bd03aa 100644 --- a/pollen-ui-angular/src/main/webapp/js/controllers/favoriteListCtrl.js +++ b/pollen-ui-angular/src/main/webapp/js/controllers/favoriteListCtrl.js @@ -70,15 +70,17 @@ angular.module('favoriteListControllers', []) } }); - if ($routeParams.favoriteListId) { - FavoriteList.get({favoriteListId:$routeParams.favoriteListId}, function (favList) { - $scope.data.favoriteList = favList; - initFavoriteListMember(); - }); - } - else { - $scope.data.favoriteList = {name:'', members: []}; - } + var initFavoriteList = function () { + if ($routeParams.favoriteListId) { + FavoriteList.get({favoriteListId:$routeParams.favoriteListId}, function (favList) { + $scope.data.favoriteList = favList; + initFavoriteListMember(); + }); + } + else { + $scope.data.favoriteList = {name:'', members: []}; + } + }; initFavoriteList(); var initFavoriteListMember = function () { var deferred = $q.defer(); @@ -187,6 +189,11 @@ angular.module('favoriteListControllers', []) } }; + $scope.newFavoriteList = function () { + initFavoriteList(); + $location.url('/favoriteList/new'); + } + var lastRoute = $route.current; $scope.$on('$locationChangeSuccess', function(event) { if (lastRoute.$$route.controller == $route.current.$$route.controller) { 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 a11de83..d9df9cd 100644 --- a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js +++ b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js @@ -384,8 +384,8 @@ angular.module('pollControllers', []) }]) -.controller('PollEditCtrl', ['$scope', '$controller', '$routeParams', '$location', '$timeout', '$translate', 'Poll', 'PollChoice', 'PollVote', 'PollVoterList', 'PollVoterListMember', 'SessionStorage', - function ( $scope, $controller, $routeParams, $location, $timeout, $translate, Poll, PollChoice, PollVote, PollVoterList, PollVoterListMember, SessionStorage) { +.controller('PollEditCtrl', ['$scope', '$controller', '$routeParams', '$location', '$timeout', '$translate', 'Poll', 'PollChoice', 'PollVote', 'PollVoterList', 'PollVoterListMember', 'FavoriteList', 'SessionStorage', + function ( $scope, $controller, $routeParams, $location, $timeout, $translate, Poll, PollChoice, PollVote, PollVoterList, PollVoterListMember, FavoriteList, SessionStorage) { $controller('PollAdminCtrl', {$scope:$scope}); $scope.globalVariables.edit = true; @@ -466,6 +466,27 @@ angular.module('pollControllers', []) } }; + var initFavoriteList = function () { + FavoriteList.get({paginationParameter:{pageSize:-1}}, function (data) { + $scope.data.favoriteList = data.elements; + $scope.data.favoriteListImport = null; + }); + }; initFavoriteList(); + + $scope.importFavoriteList = function (voterListId) { + if (angular.isDefined(voterListId)) { + PollVoterList.importInGroup({pollId:$routeParams.pollId, voterListId:voterListId, favoriteListId:$scope.data.favoriteListImport}, null, function (data) { + $scope.data.favoriteListImport = null; + initVoterList(); + }); + } else { + PollVoterList.importAddGroup({pollId:$routeParams.pollId, favoriteListId:$scope.data.favoriteListImport}, null, function (data) { + $scope.data.favoriteListImport = null; + initVoterList(); + }) + } + }; + $scope.saveVoterList = function (voterList) { if (angular.isDefined(voterList.group.id)) { PollVoterList.update({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId:voterList.group.id}, voterList.group, function (data) { diff --git a/pollen-ui-angular/src/main/webapp/js/services.js b/pollen-ui-angular/src/main/webapp/js/services.js index 03579b8..74b248b 100644 --- a/pollen-ui-angular/src/main/webapp/js/services.js +++ b/pollen-ui-angular/src/main/webapp/js/services.js @@ -139,7 +139,16 @@ angular.module('pollenServices', ['ngResource']) transformRequest: function (data, headersGetter) { return 'voterList='+encodeURIComponent(JSON.stringify(data)); } + }, + 'importAddGroup': { + method : 'PUT', + url: conf.restURL+'/polls/:pollId/favoriteLists/:favoriteListId' + }, + 'importInGroup': { + method : 'PUT', + url: conf.restURL+'/polls/:pollId/voterLists/:voterListId/favoriteLists/:favoriteListId' } + }) }]) diff --git a/pollen-ui-angular/src/main/webapp/partials/favoriteList-edit.html b/pollen-ui-angular/src/main/webapp/partials/favoriteList-edit.html index 130d492..9592724 100644 --- a/pollen-ui-angular/src/main/webapp/partials/favoriteList-edit.html +++ b/pollen-ui-angular/src/main/webapp/partials/favoriteList-edit.html @@ -47,4 +47,7 @@ </tr> </table> + <div class="text-right"> + <button class="btn btn-info" ng-click="newFavoriteList()"><span class="glyphicon glyphicon-plus"></span> {{ 'action.favoriteList.add' | translate }}</button> + </div> </div> \ No newline at end of file diff --git a/pollen-ui-angular/src/main/webapp/partials/poll-listParticipant.html b/pollen-ui-angular/src/main/webapp/partials/poll-listParticipant.html index db05d20..3984cc4 100644 --- a/pollen-ui-angular/src/main/webapp/partials/poll-listParticipant.html +++ b/pollen-ui-angular/src/main/webapp/partials/poll-listParticipant.html @@ -35,6 +35,21 @@ </label> <hr/> + <div ng-if="data.favoriteList" class="container-fluid"> + <h3>{{ 'user.favoriteList' | translate }}</h3> + <div class="row text-right"> + <div class="col-sm-6"> + <button class="btn btn-info" ng-click="importFavoriteList()" ng-if="data.poll.pollType == 'GROUP'"><span class="glyphicon glyphicon-plus"></span> {{ 'action.favoriteList.import.addGroup' | translate }}</button> + </div> + <div class="col-sm-6"> + <select class="form-control" + ng-model="data.favoriteListImport" + ng-options="favList.id as favList.name for favList in data.favoriteList"> + </select> + + </div> + </div> + </div> <table ng-repeat="voterList in data.voterList" class="voterList" ng-hide="data.poll.pollType == 'FREE'"> @@ -62,6 +77,7 @@ <th colspan="4"> <button class="btn btn-info" ng-click="addVoter($index);"> <span class="glyphicon glyphicon-plus"></span> {{ 'action.restricted.addVoter' | translate }} </button> <button class="btn btn-danger" ng-click="deleteVoterList(voterList);" ng-show="voterList.group.id"> <span class="glyphicon glyphicon-trash"></span> {{ 'action.restricted.deleteGroup' | translate }} </button> + <button class="btn btn-info" ng-click="importFavoriteList(voterList.group.id)"><span class="glyphicon glyphicon-plus"></span> {{ 'action.favoriteList.import.inGroup' | translate }}</button> </th> </tr> -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.