[pollen] branch feature/permissionPollRestricted created (now 43fe236)
This is an automated email from the git hooks/post-receive script. New change to branch feature/permissionPollRestricted in repository pollen. See http://git.chorem.org/pollen.git at 43fe236 Add PollenPrincipal in VoterListMember, check permission for restricted poll. This branch includes the following new commits: new b786236 Implement method to find all invited poll new 0077c6b add permission for resticted poll when user is connected new 43fe236 Add PollenPrincipal in VoterListMember, check permission for restricted poll. The 3 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 43fe2364666957f525ea3b47ed39e839b45c38ad Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Mon Aug 4 16:54:47 2014 +0200 Add PollenPrincipal in VoterListMember, check permission for restricted poll. commit 0077c6baae3c4ba75efea3fa9326526317208e37 Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Mon Aug 4 11:38:49 2014 +0200 add permission for resticted poll when user is connected commit b786236756759ec479e5d4e678cc0c07dc185b14 Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Mon Aug 4 11:38:39 2014 +0200 Implement method to find all invited poll -- 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/permissionPollRestricted in repository pollen. See http://git.chorem.org/pollen.git commit b786236756759ec479e5d4e678cc0c07dc185b14 Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Mon Aug 4 11:38:39 2014 +0200 Implement method to find all invited poll --- .../pollen/persistence/entity/PollTopiaDao.java | 23 ++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 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 a07efa5..d9b1532 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 @@ -44,8 +44,27 @@ public class PollTopiaDao extends AbstractPollTopiaDao<Poll> { } public PaginationResult<Poll> findAllInvited(PollenUser user, PaginationParameter paginationParameter) { - //TODO - return PaginationResult.of(new ArrayList<Poll>(), 0, paginationParameter); + //TODO : use HQL + + VoterListMemberTopiaDao voterListMemberDao = + topiaDaoSupplier.getDao(VoterListMember.class, VoterListMemberTopiaDao.class); + + List<VoterListMember> voterListMembers = + voterListMemberDao.forEquals(VoterListMember.PROPERTY_EMAIL, user.getEmail()).findAll(); + + VoterListTopiaDao voterListDao = topiaDaoSupplier.getDao(VoterList.class, VoterListTopiaDao.class); + + Set<Poll> polls = new HashSet<Poll>(); + for (VoterListMember member : voterListMembers) { + polls.add( + voterListDao.forEquals( + VoterList.PROPERTY_TOPIA_ID, + member.getVoterList().getTopiaId() + ).findUnique().getPoll() + ); + } + + return PaginationResult.of(new ArrayList<>(polls), 0, paginationParameter); } public PaginationResult<Poll> findAllParticipated(PollenUser user, PaginationParameter paginationParameter) { -- 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/permissionPollRestricted in repository pollen. See http://git.chorem.org/pollen.git commit 0077c6baae3c4ba75efea3fa9326526317208e37 Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Mon Aug 4 11:38:49 2014 +0200 add permission for resticted poll when user is connected --- .../services/service/security/SecurityService.java | 115 +++++++++++---------- 1 file changed, 62 insertions(+), 53 deletions(-) diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java index b5a652d..546b278 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java @@ -34,16 +34,13 @@ import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.SimplePrincipalCollection; import org.apache.shiro.subject.Subject; import org.chorem.pollen.persistence.entity.*; +import org.chorem.pollen.services.bean.PaginationParameterBean; import org.chorem.pollen.services.bean.PollenEntityRef; import org.chorem.pollen.services.service.PollenServiceSupport; import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.pagination.PaginationParameter; -import java.util.Calendar; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.util.*; /** * TODO @@ -365,53 +362,7 @@ public class SecurityService extends PollenServiceSupport { Set<Poll> polls = getPollDao().findAllFreePolls(); for (Poll poll : polls) { - - permissions.add(createSubjectPermission(PermissionVerb.readPoll, poll)); - permissions.add(createSubjectPermission(PermissionVerb.addVote, poll)); - permissions.add(createSubjectPermission(PermissionVerb.addComment, poll)); - - if (poll.getCommentVisibility() == CommentVisibility.EVERYBODY) { - permissions.add(createSubjectPermission(PermissionVerb.readComment, poll)); - } - - if (poll.getVoteVisibility() == VoteVisibility.EVERYBODY) { - permissions.add(createSubjectPermission(PermissionVerb.readVote, poll)); - } - - if (poll.getResultVisibility() == ResultVisibility.EVERYBODY && (poll.isClosed() || poll.isContinuousResults())) { - permissions.add(createSubjectPermission(PermissionVerb.readPollResult, poll)); - } - - if (poll.isChoiceAddAllowed()) { - permissions.add(createSubjectPermission(PermissionVerb.addChoice, poll)); - } - - // add choices permissions - - List<Choice> choices = getChoiceDao().forPollEquals(poll).findAll(); - if (CollectionUtils.isNotEmpty(choices)) { - for (Choice choice : choices) { - permissions.add(createSubjectPermission(PermissionVerb.readChoice, choice)); - } - } - - // add comment permissions - - List<Comment> comments = getCommentDao().forPollEquals(poll).findAll(); - if (CollectionUtils.isNotEmpty(comments)) { - for (Comment comment : comments) { - permissions.add(createSubjectPermission(PermissionVerb.readComment, comment)); - } - } - - // add vote permissions - - List<Vote> votes = getVoteDao().forPollEquals(poll).findAll(); - if (CollectionUtils.isNotEmpty(votes)) { - for (Vote vote : votes) { - permissions.add(createSubjectPermission(PermissionVerb.readVote, vote)); - } - } + generatePollAccessPermission(permissions, poll); } if (user == null && pollenPrincipal == null) { @@ -438,6 +389,15 @@ public class SecurityService extends PollenServiceSupport { getPollenPrincipalDao().forPollenUserEquals(user).findAll(); principals.addAll(allByPollenUser); + PaginationParameterBean paginationParameter = new PaginationParameterBean(); + paginationParameter.setPageNumber(0); + paginationParameter.setPageSize(-1); + List<Poll> invitedPoll = getPollDao().findAllInvited(user, paginationParameter.toPaginationParameter()).getElements(); + + for (Poll poll : invitedPoll) { + generatePollAccessPermission(permissions, poll); + } + } PrincipalByType principalByType = resolvePrincipals(principals); @@ -507,6 +467,55 @@ public class SecurityService extends PollenServiceSupport { } + protected void generatePollAccessPermission(Set<String> permissions, Poll poll) { + permissions.add(createSubjectPermission(PermissionVerb.readPoll, poll)); + permissions.add(createSubjectPermission(PermissionVerb.addVote, poll)); + permissions.add(createSubjectPermission(PermissionVerb.addComment, poll)); + + if (poll.getCommentVisibility() == CommentVisibility.EVERYBODY) { + permissions.add(createSubjectPermission(PermissionVerb.readComment, poll)); + } + + if (poll.getVoteVisibility() == VoteVisibility.EVERYBODY) { + permissions.add(createSubjectPermission(PermissionVerb.readVote, poll)); + } + + if (poll.getResultVisibility() == ResultVisibility.EVERYBODY && (poll.isClosed() || poll.isContinuousResults())) { + permissions.add(createSubjectPermission(PermissionVerb.readPollResult, poll)); + } + + if (poll.isChoiceAddAllowed()) { + permissions.add(createSubjectPermission(PermissionVerb.addChoice, poll)); + } + + // add choices permissions + + List<Choice> choices = getChoiceDao().forPollEquals(poll).findAll(); + if (CollectionUtils.isNotEmpty(choices)) { + for (Choice choice : choices) { + permissions.add(createSubjectPermission(PermissionVerb.readChoice, choice)); + } + } + + // add comment permissions + + List<Comment> comments = getCommentDao().forPollEquals(poll).findAll(); + if (CollectionUtils.isNotEmpty(comments)) { + for (Comment comment : comments) { + permissions.add(createSubjectPermission(PermissionVerb.readComment, comment)); + } + } + + // add vote permissions + + List<Vote> votes = getVoteDao().forPollEquals(poll).findAll(); + if (CollectionUtils.isNotEmpty(votes)) { + for (Vote vote : votes) { + permissions.add(createSubjectPermission(PermissionVerb.readVote, vote)); + } + } + } + protected PrincipalByType resolvePrincipals(Set<PollenPrincipal> principals) { PrincipalByType principalByType = new PrincipalByType(); -- 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/permissionPollRestricted in repository pollen. See http://git.chorem.org/pollen.git commit 43fe2364666957f525ea3b47ed39e839b45c38ad Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Mon Aug 4 16:54:47 2014 +0200 Add PollenPrincipal in VoterListMember, check permission for restricted poll. --- .../pollen/persistence/entity/PollTopiaDao.java | 25 +++++++++++++++++- pollen-persistence/src/main/xmi/pollen.zargo | Bin 20479 -> 20954 bytes .../pollen/services/bean/VoterListMemberBean.java | 12 ++++++--- .../pollen/services/service/VoterListService.java | 27 ++++++++++++------- .../services/service/security/SecurityService.java | 6 +++++ pollen-ui-angular/src/main/webapp/js/app.js | 8 +++--- .../src/main/webapp/js/controllers/pollCtrl.js | 29 ++++++++++++++------- 7 files changed, 81 insertions(+), 26 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 d9b1532..cfbec52 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 @@ -50,7 +50,7 @@ public class PollTopiaDao extends AbstractPollTopiaDao<Poll> { topiaDaoSupplier.getDao(VoterListMember.class, VoterListMemberTopiaDao.class); List<VoterListMember> voterListMembers = - voterListMemberDao.forEquals(VoterListMember.PROPERTY_EMAIL, user.getEmail()).findAll(); + voterListMemberDao.forEquals(VoterListMember.PROPERTY_MEMBER + "." + PollenPrincipal.PROPERTY_POLLEN_USER, user).findAll(); VoterListTopiaDao voterListDao = topiaDaoSupplier.getDao(VoterList.class, VoterListTopiaDao.class); @@ -85,6 +85,29 @@ public class PollTopiaDao extends AbstractPollTopiaDao<Poll> { } + public Set<Poll> findByVoterListMemberPermission(PollenToken token) { + + VoterListMemberTopiaDao voterListMemberDao = + topiaDaoSupplier.getDao(VoterListMember.class, VoterListMemberTopiaDao.class); + + List<VoterListMember> voterListMembers = + voterListMemberDao.forEquals(VoterListMember.PROPERTY_MEMBER+"."+PollenPrincipal.PROPERTY_PERMISSION+"."+PollenToken.PROPERTY_TOKEN, token.getToken()).findAll(); + + VoterListTopiaDao voterListDao = topiaDaoSupplier.getDao(VoterList.class, VoterListTopiaDao.class); + + Set<Poll> polls = new HashSet<Poll>(); + for (VoterListMember member : voterListMembers) { + polls.add( + voterListDao.forEquals( + VoterList.PROPERTY_TOPIA_ID, + member.getVoterList().getTopiaId() + ).findUnique().getPoll() + ); + } + + return polls; + } + @Override public void delete(Poll entity) { diff --git a/pollen-persistence/src/main/xmi/pollen.zargo b/pollen-persistence/src/main/xmi/pollen.zargo index 8f51a6f..b32f5a8 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/bean/VoterListMemberBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListMemberBean.java index c9d630e..80b8932 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 @@ -46,8 +46,10 @@ public class VoterListMemberBean extends PollenBean<VoterListMember> { public void fromEntity(VoterListMember entity) { setEntityId(entity.getTopiaId()); - setName(entity.getName()); - setEmail(entity.getEmail()); + if (entity.getMember() != null) { + setName(entity.getMember().getName()); + setEmail(entity.getMember().getEmail()); + } setWeight(entity.getWeight()); } @@ -57,8 +59,10 @@ public class VoterListMemberBean extends PollenBean<VoterListMember> { VoterListMember entity = new VoterListMemberImpl(); entity.setTopiaId(getEntityId()); - entity.setEmail(getEmail()); - entity.setName(getName()); + if (entity.getMember() != null) { + entity.getMember().setEmail(getEmail()); + entity.getMember().setName(getName()); + } entity.setWeight(getWeight()); return entity; 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 327b8af..1d74c3e 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 @@ -416,12 +416,21 @@ public class VoterListService extends PollenServiceSupport { } else { toSave = getVoterListMemberDao().create(); + + PollenPrincipal member = getPollenPrincipalDao().forEmailEquals(voterListMember.getEmail()).findUniqueOrNull(); + + if (member == null) { + member = getSecurityService().generatePollenPrincipal(); + } + + toSave.setMember(member); + toSave.setVoterList(voterList); } - toSave.setName(voterListMember.getName()); - toSave.setEmail(getCleanMail(voterListMember.getEmail())); + toSave.getMember().setName(voterListMember.getName()); + toSave.getMember().setEmail(getCleanMail(voterListMember.getEmail())); toSave.setWeight(voterListMember.getWeight()); return toSave; @@ -499,32 +508,32 @@ public class VoterListService extends PollenServiceSupport { continue; } - voterListMemberNames.add(voterListMember1.getName()); - voterListMemberEmails.add(voterListMember1.getEmail()); + voterListMemberNames.add(voterListMember1.getMember().getName()); + voterListMemberEmails.add(voterListMember1.getMember().getEmail()); } } String voterListMemberName = voterListMember.getName(); - boolean nameNotblank = checkNotBlank(errors, VoterListMember.PROPERTY_NAME, voterListMemberName, "member name can not be empty"); + boolean nameNotblank = checkNotBlank(errors, VoterListMember.PROPERTY_MEMBER+"."+PollenPrincipal.PROPERTY_NAME, voterListMemberName, "member name can not be empty"); if (nameNotblank) { boolean nameAdded = voterListMemberNames.add(voterListMemberName); - check(errors, VoterListMember.PROPERTY_NAME, nameAdded, "member name already used in this list"); + check(errors, VoterListMember.PROPERTY_MEMBER+"."+PollenPrincipal.PROPERTY_NAME, nameAdded, "member name already used in this list"); } String voterListMemberEmail = getCleanMail(voterListMember.getEmail()); - boolean emailNotBlank = checkNotBlank(errors, VoterListMember.PROPERTY_EMAIL, voterListMemberEmail, "member email can not be empty"); + boolean emailNotBlank = checkNotBlank(errors, VoterListMember.PROPERTY_MEMBER+"."+PollenPrincipal.PROPERTY_EMAIL, voterListMemberEmail, "member email can not be empty"); if (emailNotBlank) { - checkValidEmail(errors, VoterListMember.PROPERTY_EMAIL, voterListMemberEmail, "member email is not valid"); + checkValidEmail(errors, VoterListMember.PROPERTY_MEMBER+"."+PollenPrincipal.PROPERTY_EMAIL, voterListMemberEmail, "member email is not valid"); boolean emailAdded = voterListMemberEmails.add(voterListMemberEmail); - check(errors, VoterListMember.PROPERTY_EMAIL, emailAdded, "member email already used in this list"); + check(errors, VoterListMember.PROPERTY_MEMBER+"."+PollenPrincipal.PROPERTY_EMAIL, emailAdded, "member email already used in this list"); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java index 546b278..0a1d197 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java @@ -380,6 +380,12 @@ public class SecurityService extends PollenServiceSupport { if (pollenPrincipal != null) { principals.add(pollenPrincipal); + + Set<Poll> invitedPoll = getPollDao().findByVoterListMemberPermission(pollenPrincipal.getPermission()); + + for (Poll poll : invitedPoll) { + generatePollAccessPermission(permissions, poll); + } } if (user != null) { diff --git a/pollen-ui-angular/src/main/webapp/js/app.js b/pollen-ui-angular/src/main/webapp/js/app.js index e286736..89b1812 100644 --- a/pollen-ui-angular/src/main/webapp/js/app.js +++ b/pollen-ui-angular/src/main/webapp/js/app.js @@ -61,9 +61,11 @@ angular.module('pollen', ['pollenDirective', 'pollenServices', 'ngRoute', 'Polle $routeProvider.when('/', {templateUrl: './partials/home.html', controller: "HomeCtrl"}) .when('/poll/create/:tab?', {templateUrl: './partials/poll.html', controller: "PollCreateCtrl"}) .when('/poll/edit/:pollId/:pollToken?/:tab?', {templateUrl: './partials/poll.html', controller:"PollCtrl"}) - .when('/poll/vote/:pollId/:voteToken?', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) - .when('/poll/result/:pollId/:token?', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) - .when('/poll/comment/:pollId/:commentToken?', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) + .when('/poll/vote/:pollId/:pollToken?', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) + .when('/poll/vote/:pollId/:pollToken?/vote/:voteToken', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) + .when('/poll/result/:pollId/:pollToken?', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) + .when('/poll/comment/:pollId/:pollToken?', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) + .when('/poll/comment/:pollId/:pollToken?/comment/:commentToken', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) .when('/poll/list/:cmd?', {templateUrl: './partials/poll-list.html', controller :"PollListCtrl"}) .when('/user/list', {templateUrl: './partials/user-admin-list.html', controller:"UserListCtrl"}) .when('/user/register', {templateUrl: './partials/user-register.html', controller:"UserRegisterCtrl"}) 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 faa9b13..b9ebaab 100644 --- a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js +++ b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js @@ -120,16 +120,15 @@ angular.module('pollControllers', ['ngRoute', 'pollenServices', 'pascalprecht.tr var pollDeferred = $scope.pollDeferred; Poll.get({pollId:$routeParams.pollId, permission:$scope.globalVariables.pollToken}, function (poll) { $scope.data.poll = poll; - $scope.globalVariables.pollToken = poll.permission; - pollDeferred.resolve('read-write poll'); + pollDeferred.resolve('get poll'); }, function (error) { - Poll.get({pollId:$routeParams.pollId}, function (poll) { + Poll.get({pollId:$routeParams.pollId, permission:$routeParams.voteToken}, function (poll) { $scope.data.poll = poll; // clean permission SessionStorage.remove('pollToken'); delete $scope.globalVariables.pollToken; - pollDeferred.resolve('read-only poll') + pollDeferred.resolve('bad token') }, function (error) { pollDeferred.reject(error); }); @@ -1158,7 +1157,7 @@ angular.module('pollControllers', ['ngRoute', 'pollenServices', 'pascalprecht.tr }); } - PollVote.add({pollId:$routeParams.pollId}, sendVote, function (returnRequest) { + PollVote.add({pollId:$routeParams.pollId, permission:$scope.globalVariables.pollToken}, sendVote, function (returnRequest) { $scope.data.vote.id = returnRequest.id; $scope.data.vote.permission = returnRequest.permission; @@ -1175,17 +1174,23 @@ angular.module('pollControllers', ['ngRoute', 'pollenServices', 'pascalprecht.tr $scope.data.votants.push(newVote); }) + var redirect = '/poll/vote/' + $routeParams.pollId; + if (angular.isDefined($scope.globalVariables.pollToken)) { + redirect += '/' + $scope.globalVariables.pollToken; + } + redirect += '/vote/' + returnRequest.permission; + $rootScope.$broadcast('newInfo', $filter('translate')('vote.added.printLink', {url: '<input type="text" class="form-control" value="' + - $scope.globalVariables.baseUrl+'#/poll/vote/'+$routeParams.pollId+'/'+ returnRequest.permission + + $scope.globalVariables.baseUrl+'#' + redirect + '" readonly />'}) , -1); $rootScope.$broadcast('newSuccess', 'vote.added'); initVote(); - $location.url('/poll/vote/'+$routeParams.pollId+'/'+ returnRequest.permission); + $location.url(redirect); }, function (error) { if (angular.isDefined(error.data["voter.name"])) { $scope.data.vote.restError = { voterName : error.data["voter.name"]}; @@ -1417,14 +1422,20 @@ angular.module('pollControllers', ['ngRoute', 'pollenServices', 'pascalprecht.tr // save Permission $scope.commentToken = data.permission; + var redirect = '/poll/comment/' + $routeParams.pollId; + if (angular.isDefined($scope.globalVariables.pollToken)) { + redirect += '/' + $scope.globalVariables.pollToken; + } + redirect += '/comment/' + data.permission; + $rootScope.$broadcast('newInfo', $filter('translate')('comment.added.printLink', {url : '<input type="text" class="form-control" value="' + - $scope.globalVariables.baseUrl+'#/poll/comment/'+$routeParams.pollId+'/'+data.permission + + $scope.globalVariables.baseUrl+'#' + redirect + '" readonly />' }) , -1); - $location.url('/poll/comment/'+$routeParams.pollId+'/'+data.permission); + $location.url(redirect); // reload comments if ($scope.data.commentsPagination.desc) { -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm