02/02: edit and add participant in existing group
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 405ee1cb5304e3d9a3c12f08f2988ceb0288d067 Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Fri Jun 6 18:00:14 2014 +0200 edit and add participant in existing group --- pollen-rest-api/src/main/resources/mapping | 48 +++++------ pollen-ui-angular/src/main/webapp/js/app.js | 13 +++ .../src/main/webapp/js/controllers/pollCtrl.js | 94 ++++++++++++++++++---- pollen-ui-angular/src/main/webapp/js/services.js | 32 ++++++-- .../main/webapp/partials/poll-listParticipant.html | 12 +-- .../src/main/webapp/partials/poll-popupChoice.html | 2 +- 6 files changed, 146 insertions(+), 55 deletions(-) diff --git a/pollen-rest-api/src/main/resources/mapping b/pollen-rest-api/src/main/resources/mapping index e3fb135..7276722 100644 --- a/pollen-rest-api/src/main/resources/mapping +++ b/pollen-rest-api/src/main/resources/mapping @@ -77,18 +77,18 @@ DELETE /v1/polls/{pollId}/comments/{commentId} CommentApi.deleteComment # FavoriteListApi -GET /v1/favoriteLists FavoriteListApi.getFavoriteLists -GET /v1/favoriteLists/{favoriteListId} FavoriteListApi.getFavoriteList -POST /v1/favoriteLists/{favoriteListId}/importCsv FavoriteListApi.importFavoriteListMembersFromCsv -POST /v1/favoriteLists/{favoriteListId}/importLdap FavoriteListApi.importFavoriteListMembersFromLdap -POST /v1/favoriteLists FavoriteListApi.createFavoriteList -PUT /v1/favoriteLists/{favoriteListId} FavoriteListApi.editFavoriteList -DELETE /v1/favoriteLists/{favoriteListId} FavoriteListApi.deleteFavoriteList -GET /v1/favoriteLists/{favoriteListId}/members FavoriteListApi.getMembers -GET /v1/favoriteLists/{favoriteListId}/members/{memberId} FavoriteListApi.getMember -POST /v1/favoriteLists/{favoriteListId}/members FavoriteListApi.addMember -PUT /v1/favoriteLists/{favoriteListId}/members/{memberId} FavoriteListApi.editMember -DELETE /v1/favoriteLists/{favoriteListId}/members/{memberId} FavoriteListApi.removeMember +GET /v1/favoriteLists FavoriteListApi.getFavoriteLists +GET /v1/favoriteLists/{favoriteListId} FavoriteListApi.getFavoriteList +POST /v1/favoriteLists/{favoriteListId}/importCsv FavoriteListApi.importFavoriteListMembersFromCsv +POST /v1/favoriteLists/{favoriteListId}/importLdap FavoriteListApi.importFavoriteListMembersFromLdap +POST /v1/favoriteLists FavoriteListApi.createFavoriteList +PUT,POST /v1/favoriteLists/{favoriteListId} FavoriteListApi.editFavoriteList +DELETE /v1/favoriteLists/{favoriteListId} FavoriteListApi.deleteFavoriteList +GET /v1/favoriteLists/{favoriteListId}/members FavoriteListApi.getMembers +GET /v1/favoriteLists/{favoriteListId}/members/{memberId} FavoriteListApi.getMember +POST /v1/favoriteLists/{favoriteListId}/members FavoriteListApi.addMember +PUT,POST /v1/favoriteLists/{favoriteListId}/members/{memberId} FavoriteListApi.editMember +DELETE /v1/favoriteLists/{favoriteListId}/members/{memberId} FavoriteListApi.removeMember # PollApi @@ -129,18 +129,18 @@ GET /v1/polls/{pollId}/groupResults VoteCountingApi.getGroupResult # VoterListApi -PUT /v1/polls/{pollId}/favoriteLists/{favoriteListId} VoterListApi.importFavoriteList -GET /v1/polls/{pollId}/voterLists VoterListApi.getVoterLists -GET /v1/polls/{pollId}/voterLists/{voterListId} VoterListApi.getVoterList -POST /v1/polls/{pollId}/voterLists VoterListApi.createVoterList -PUT /v1/polls/{pollId}/voterLists/{voterListId} VoterListApi.editVoterList -DELETE /v1/polls/{pollId}/voterLists/{voterListId} VoterListApi.deleteVoterList - -GET /v1/polls/{pollId}/voterLists/{voterListId}/members VoterListApi.getMembers -GET /v1/polls/{pollId}/voterLists/{voterListId}/members/{memberId} VoterListApi.getMember -POST /v1/polls/{pollId}/voterLists/{voterListId}/members VoterListApi.addMember -PUT /v1/polls/{pollId}/voterLists/{voterListId}/members/{memberId} VoterListApi.editMember -DELETE /v1/polls/{pollId}/voterLists/{voterListId}/members/{memberId} VoterListApi.deleteMember +PUT /v1/polls/{pollId}/favoriteLists/{favoriteListId} VoterListApi.importFavoriteList +GET /v1/polls/{pollId}/voterLists VoterListApi.getVoterLists +GET /v1/polls/{pollId}/voterLists/{voterListId} VoterListApi.getVoterList +POST /v1/polls/{pollId}/voterLists VoterListApi.createVoterList +PUT,POST /v1/polls/{pollId}/voterLists/{voterListId} VoterListApi.editVoterList +DELETE /v1/polls/{pollId}/voterLists/{voterListId} VoterListApi.deleteVoterList + +GET /v1/polls/{pollId}/voterLists/{voterListId}/members VoterListApi.getMembers +GET /v1/polls/{pollId}/voterLists/{voterListId}/members/{memberId} VoterListApi.getMember +POST /v1/polls/{pollId}/voterLists/{voterListId}/members VoterListApi.addMember +PUT,POST /v1/polls/{pollId}/voterLists/{voterListId}/members/{memberId} VoterListApi.editMember +DELETE /v1/polls/{pollId}/voterLists/{voterListId}/members/{memberId} VoterListApi.deleteMember # VoteApi diff --git a/pollen-ui-angular/src/main/webapp/js/app.js b/pollen-ui-angular/src/main/webapp/js/app.js index 34a0dbf..3763db6 100644 --- a/pollen-ui-angular/src/main/webapp/js/app.js +++ b/pollen-ui-angular/src/main/webapp/js/app.js @@ -175,6 +175,19 @@ angular.module('pollen', ['pollenServices', 'ngRoute', 'pollControllers', 'userC }; }) +.directive('inputError', function() { + return { + restrict:'A', + require: '?ngModel', + link: function (scope, element, attrs) { + element.bind('change', function () { + + }) + } + }; +}) + + .directive('selectOnClick', function () { return { restrict: 'A', 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 0b2b942..e13a381 100644 --- a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js +++ b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js @@ -334,9 +334,8 @@ angular.module('pollControllers', []) Poll.add(poll, function (data) { SessionStorage.save({saved: true}); if ($scope.data.poll.pollType != 'FREE') { - PollVoterList.add({pollId:data.id, permission:data.permission}, $scope.data.voterList[0], function (dataVoterList) { - $location.url('/poll/edit/'+data.id+'?token='+data.permission); - }) + SessionStorage.save({'voterList':$scope.data.voterList}) + $location.url('/poll/edit/'+data.id+'?token='+data.permission); } else { $location.url('/poll/edit/'+data.id+'?token='+data.permission); @@ -358,8 +357,8 @@ angular.module('pollControllers', []) }]) -.controller('PollEditCtrl', ['$scope', '$controller', '$routeParams', '$location', '$timeout', 'Poll', 'PollChoice', 'PollVote', 'PollVoterList', 'PollVoterListMember', - function ( $scope, $controller, $routeParams, $location, $timeout, Poll, PollChoice, PollVote, PollVoterList, PollVoterListMember) { +.controller('PollEditCtrl', ['$scope', '$controller', '$routeParams', '$location', '$timeout', 'Poll', 'PollChoice', 'PollVote', 'PollVoterList', 'PollVoterListMember', 'SessionStorage', + function ( $scope, $controller, $routeParams, $location, $timeout, Poll, PollChoice, PollVote, PollVoterList, PollVoterListMember, SessionStorage) { $controller('PollAdminCtrl', {$scope:$scope}); $scope.globalVariables.edit = true; @@ -415,20 +414,81 @@ angular.module('pollControllers', []) //////////////////////////////// var initVoterList = function () { - PollVoterList.query({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission}, function (voterList) { - if (voterList.length > 0) { - $scope.data.voterList = []; - angular.forEach(voterList, function (list) { - PollVoterListMember.query({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId: list.id}, function (voterListMember) { - $scope.data.voterList.push({group:list, members:voterListMember}); - }) - }) + if ($scope.data.poll.pollType != 'FREE') { + var session = SessionStorage.get(); + if (angular.isDefined(session.voterList)) { + $scope.data.voterList = session.voterList; + angular.forEach($scope.data.voterList, function (voterList) { + $scope.saveVoterList(voterList); + }); + SessionStorage.remove('voterList'); + } else { + PollVoterList.query({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission}, function (voterList) { + if (voterList.length > 0) { + $scope.data.voterList = []; + angular.forEach(voterList, function (list) { + PollVoterListMember.query({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId: list.id}, function (voterListMember) { + $scope.data.voterList.push({group:list, members:voterListMember}); + }) + }) + } + }); } - }) + } }; - $scope.saveVoterList = function (member) { - console.log(member); + $scope.saveVoterList = function (voterList) { + if (angular.isDefined(voterList.group.id)) { + console.log(voterList); + PollVoterList.update({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission}, voterList.group, function (data) { + $scope.globalVariables.saved = true; + delete voterList.group.restError; + }, function (error) { + voterList.group.restError = error.data; + }); + } else { + // set default name for restricted poll type + if ($scope.data.poll.pollType == 'RESTRICTED') { + voterList.group.name = 'restricted'; + } + + var vl = {group: voterList.group, members:[]}; + angular.forEach(value.members, function(member, key) { + if (member.name != '' || member.email != '') { + vl.members.push(member); + } + }); + PollVoterList.add({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission}, vl, function (data) { + $scope.globalVariables.saved = true; + voterList.group.id = data.id; + delete voterList.group.restError; + }, function (error) { + voterList.group.restError = error.data.group; + }); + } + }; + + $scope.saveVoterListMember = function (member, vlId) { + var vlMemberPromise; + if (angular.isDefined(vlId)) { + if (angular.isDefined(member.id)) { + console.log({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId:vlId}); + vlMemberPromise = PollVoterListMember.update({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId:vlId}, member).$promise; + } else { + vlMemberPromise = PollVoterListMember.add({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId:vlId}, member).$promise; + } + + vlMemberPromise.then(function (data) { + $scope.globalVariables.saved = true; + member.id = data.id; + delete member.restError; + }, function (error) { + member.restError = error.data; + }) + } + else { + + } } //////////////////////////////// @@ -441,6 +501,7 @@ angular.module('pollControllers', []) $location.path('/'); } $scope.data.poll = poll; + initVoterList(); }); PollChoice.query({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission}).$promise.then(function (choices) { @@ -462,7 +523,6 @@ angular.module('pollControllers', []) }) }) }); - initVoterList(); } initPoll(); diff --git a/pollen-ui-angular/src/main/webapp/js/services.js b/pollen-ui-angular/src/main/webapp/js/services.js index be047a0..ab3f2be 100644 --- a/pollen-ui-angular/src/main/webapp/js/services.js +++ b/pollen-ui-angular/src/main/webapp/js/services.js @@ -121,25 +121,43 @@ angular.module('pollenServices', ['ngResource']) }]) .factory('PollVoterList', ['$resource', function ($resource) { - var transformParam = function (data) { - return 'voterList='+encodeURIComponent(JSON.stringify(data.group))+'&members='+encodeURIComponent(JSON.stringify(data.members)); - }; - return $resource(conf.restURL+'/polls/:pollId/voterLists/:voterListId', {voterListId: '@group.id'}, + return $resource(conf.restURL+'/polls/:pollId/voterLists/:voterListId', {voterListId:'@id'}, { 'add' : { method : 'POST', transformRequest: function (data, headersGetter) { - return transformParam(data); + return 'voterList='+encodeURIComponent(JSON.stringify(data.group))+'&members='+encodeURIComponent(JSON.stringify(data.members)); } }, + 'update' : { + method : 'POST', + transformRequest: function (data, headersGetter) { + return 'voterList='+encodeURIComponent(JSON.stringify(data)); + } + } + }) }]) .factory('PollVoterListMember', ['$resource', function ($resource) { - return $resource(conf.restURL+'/polls/:pollId/voterLists/:voterListId/members/:memberId', {voterListId: '@group.id'}, + var transformParam = function (data) { + return 'member='+encodeURIComponent(JSON.stringify(data)); + }; + return $resource(conf.restURL+'/polls/:pollId/voterLists/:voterListId/members/:memberId', {memberId:'@id'}, { - + 'add' : { + method : 'POST', + transformRequest: function (data, headersGetter) { + return transformParam(data); + } + }, + 'update' : { + method : 'POST', + transformRequest: function (data, headersGetter) { + return transformParam(data); + } + } }) }]) 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 014211f..8462a0a 100644 --- a/pollen-ui-angular/src/main/webapp/partials/poll-listParticipant.html +++ b/pollen-ui-angular/src/main/webapp/partials/poll-listParticipant.html @@ -37,8 +37,8 @@ <table ng-repeat="voterList in data.voterList" class="voterList" ng-hide="data.poll.pollType == 'FREE'"> <tr ng-show="data.poll.pollType == 'GROUP'"> - <th colspan="2"> <input type="text" name="group" placeholder="name group" ng-model="voterList.group.name" class="form-control" /></th> - <th> <input type="number" ng-model="voterList.group.weight" select-on-click class="form-control" /> </th> + <th colspan="2"> <input type="text" name="group" placeholder="name group" ng-model="voterList.group.name" class="form-control" auto-save="saveVoterList(voterList)"/></th> + <th> <input type="number" ng-model="voterList.group.weight" select-on-click class="form-control" auto-save="saveVoterList(voterList)" /> </th> </tr> <tr> @@ -47,10 +47,10 @@ <th> {{ 'poll.restricted.weight' | translate }} </th> </tr> - <tr ng-repeat="member in voterList.members"> - <td> <div ng-class="{'has-error':member.name == ''}"><input type="text" ng-model="member.name" class="form-control" auto-save="saveVoterList(member)"/></div></td> - <td> <div ng-class="{'has-error':member.email == ''}"><input type="text" ng-model="member.email" class="form-control" auto-save="saveVoterList(member)" /></div></td> - <td> <input type="number" ng-model="member.weight" select-on-click class="form-control" auto-save="saveVoterList(member)"/></td> + <tr ng-repeat="member in voterList.members" ng-class="{'has-success':member.id && !member.restError}"> + <td> <div ng-class="{'has-error':member.restError.name}"><input type="text" ng-model="member.name" class="form-control" auto-save="saveVoterListMember(member, voterList.group.id)"/></div></td> + <td> <div ng-class="{'has-error':member.restError.email}"><input type="text" ng-model="member.email" class="form-control" auto-save="saveVoterListMember(member, voterList.group.id)" /></div></td> + <td> <div ng-class="{'has-error':member.restError.weight}"><input type="number" ng-model="member.weight" select-on-click class="form-control" auto-save="saveVoterListMember(member, voterList.group.id)"/></div></td> </tr> <tr> diff --git a/pollen-ui-angular/src/main/webapp/partials/poll-popupChoice.html b/pollen-ui-angular/src/main/webapp/partials/poll-popupChoice.html index f7abff3..cc659b7 100644 --- a/pollen-ui-angular/src/main/webapp/partials/poll-popupChoice.html +++ b/pollen-ui-angular/src/main/webapp/partials/poll-popupChoice.html @@ -30,7 +30,7 @@ <div class="col-sm-8 btn-group"> <button type="button" class="btn btn-default" ng-model="choice.choiceType" btn-radio="'TEXT'">Text</button> - <button type="button" class="btn btn-default" ng-model="choice.choiceType" btn-radio="'DATE'">Date</button> + <button type="button" class="btn btn-default" ng-model="choice.choiceType" btn-radio="'DATE'" disabled>Date</button> <button type="button" class="btn btn-default" ng-model="choice.choiceType" btn-radio="'PICTURE'" disabled>Image</button> </div> </div> -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm