From e695e173f746bdeceb52b1f7bab43eefa76fae35 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Tue, 2 Sep 2014 09:49:03 +0200 Subject: [PATCH] OO-1172: remove deleted users from courses and groups --- .../delete/service/UserDeletionManager.java | 14 ++++++- .../olat/basesecurity/manager/GroupDAO.java | 10 ++++- .../model/GroupMembershipImpl.java | 4 +- .../ui/main/EditMembershipController.java | 2 +- .../org/olat/user/_spring/userContext.xml | 1 + .../basesecurity/manager/GroupDAOTest.java | 38 ++++++++++++++++++- 6 files changed, 63 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java b/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java index 1515fcc60e9..a32947d8855 100644 --- a/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java +++ b/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java @@ -40,6 +40,7 @@ import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.BaseSecurityManager; import org.olat.basesecurity.IdentityImpl; import org.olat.basesecurity.SecurityGroup; +import org.olat.basesecurity.manager.GroupDAO; import org.olat.commons.calendar.CalendarManagerFactory; import org.olat.commons.lifecycle.LifeCycleManager; import org.olat.core.CoreSpringFactory; @@ -97,6 +98,7 @@ public class UserDeletionManager extends BasicManager { private DeletionModule deletionModule; private BaseSecurity securityManager; private MailManager mailManager; + private GroupDAO groupDao; /** * [used by spring] @@ -122,6 +124,14 @@ public class UserDeletionManager extends BasicManager { public void setMailManager(MailManager mailManager) { this.mailManager = mailManager; } + + /** + * [used by Spring] + * @param groupDao + */ + public void setGroupDao(GroupDAO groupDao) { + this.groupDao = groupDao; + } /** @@ -304,7 +314,9 @@ public class UserDeletionManager extends BasicManager { securityManager.removeIdentityFromSecurityGroup(identity, secGroup); logInfo("Removing user=" + identity + " from security group=" + secGroup.toString()); } - + //remove identity from groups + groupDao.removeMemberships(identity); + // fxdiff: FXOLAT-44 delete emails still in change-workflow RegistrationManager rm = RegistrationManager.getInstance(); String key = identity.getUser().getProperty("emchangeKey", null); diff --git a/src/main/java/org/olat/basesecurity/manager/GroupDAO.java b/src/main/java/org/olat/basesecurity/manager/GroupDAO.java index ee0ac3729c3..3f3e949c6f5 100644 --- a/src/main/java/org/olat/basesecurity/manager/GroupDAO.java +++ b/src/main/java/org/olat/basesecurity/manager/GroupDAO.java @@ -46,7 +46,7 @@ import org.springframework.stereotype.Service; * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ -@Service +@Service("groupDao") public class GroupDAO { @Autowired @@ -134,6 +134,14 @@ public class GroupDAO { return memberships.size(); } + public int removeMemberships(IdentityRef identity) { + String deleteQuery = "delete from bgroupmember as membership where membership.identity.key=:identityKey"; + + return dbInstance.getCurrentEntityManager() + .createQuery(deleteQuery).setParameter("identityKey", identity.getKey()) + .executeUpdate(); + } + public int countMembers(Group group) { Number count = dbInstance.getCurrentEntityManager() .createNamedQuery("countMembersByGroup", Number.class) diff --git a/src/main/java/org/olat/basesecurity/model/GroupMembershipImpl.java b/src/main/java/org/olat/basesecurity/model/GroupMembershipImpl.java index 3a01c5665f0..f2ca3858aab 100644 --- a/src/main/java/org/olat/basesecurity/model/GroupMembershipImpl.java +++ b/src/main/java/org/olat/basesecurity/model/GroupMembershipImpl.java @@ -150,8 +150,8 @@ public class GroupMembershipImpl implements GroupMembership, ModifiedInfo, Persi if (this == obj) { return true; } - if (obj instanceof GroupImpl) { - GroupImpl other = (GroupImpl) obj; + if (obj instanceof GroupMembershipImpl) { + GroupMembershipImpl other = (GroupMembershipImpl)obj; return getKey().equals(other.getKey()); } return false; diff --git a/src/main/java/org/olat/group/ui/main/EditMembershipController.java b/src/main/java/org/olat/group/ui/main/EditMembershipController.java index 02f110429d6..1fba9b5f90d 100644 --- a/src/main/java/org/olat/group/ui/main/EditMembershipController.java +++ b/src/main/java/org/olat/group/ui/main/EditMembershipController.java @@ -202,7 +202,7 @@ public class EditMembershipController extends FormBasicController { private MultipleSelectionElement createSelection(boolean selected, boolean enabled) { String name = "cb" + UUID.randomUUID().toString().replace("-", ""); - MultipleSelectionElement selection = new MultipleSelectionElementImpl(name, Layout.vertical); + MultipleSelectionElement selection = new MultipleSelectionElementImpl(name, Layout.horizontal); selection.setKeysAndValues(keys, values); flc.add(name, selection); selection.select(keys[0], selected); diff --git a/src/main/java/org/olat/user/_spring/userContext.xml b/src/main/java/org/olat/user/_spring/userContext.xml index 080e1138187..7ea69b5502a 100644 --- a/src/main/java/org/olat/user/_spring/userContext.xml +++ b/src/main/java/org/olat/user/_spring/userContext.xml @@ -289,6 +289,7 @@ <constructor-arg index="0" ref="deletionModule" /> <property name="baseSecurityManager" ref="baseSecurityManager" /> <property name="mailManager" ref="mailManager"/> + <property name="groupDao" ref="groupDao"/> <property name="keepUserLoginAfterDeletion" value="${keepUserLoginAfterDeletion}" /> <property name="keepUserEmailAfterDeletion" value="${keepUserEmailAfterDeletion}" /> </bean> diff --git a/src/test/java/org/olat/basesecurity/manager/GroupDAOTest.java b/src/test/java/org/olat/basesecurity/manager/GroupDAOTest.java index e53470acc27..354b705ebdf 100644 --- a/src/test/java/org/olat/basesecurity/manager/GroupDAOTest.java +++ b/src/test/java/org/olat/basesecurity/manager/GroupDAOTest.java @@ -223,7 +223,7 @@ public class GroupDAOTest extends OlatTestCase { } @Test - public void removeMemberships() { + public void removeMemberships_group() { Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-7-"); Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-8-"); Group group = groupDao.createGroup(); @@ -246,6 +246,42 @@ public class GroupDAOTest extends OlatTestCase { Assert.assertTrue(deletedMemberships.isEmpty()); } + @Test + public void removeMemberships_identity() { + // + Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-9-"); + Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("bgrp-10-"); + Group group1 = groupDao.createGroup(); + GroupMembership membership1 = groupDao.addMembership(group1, id1, "pilot"); + GroupMembership membership2 = groupDao.addMembership(group1, id2, "pilot"); + Assert.assertNotNull(membership1); + Assert.assertNotNull(membership2); + dbInstance.commitAndCloseSession(); + Group group2 = groupDao.createGroup(); + GroupMembership membership3 = groupDao.addMembership(group2, id1, "passanger"); + GroupMembership membership4 = groupDao.addMembership(group2, id2, "passanger"); + Assert.assertNotNull(membership3); + Assert.assertNotNull(membership4); + dbInstance.commitAndCloseSession(); + + //check + List<GroupMembership> memberships = groupDao.getMemberships(group1, "pilot"); + Assert.assertEquals(2, memberships.size()); + + //remove + groupDao.removeMemberships(id1); + dbInstance.commitAndCloseSession(); + + //check + List<GroupMembership> deletedMemberships1 = groupDao.getMemberships(group1, "pilot"); + Assert.assertEquals(1, deletedMemberships1.size()); + Assert.assertEquals(membership2, deletedMemberships1.get(0)); + + List<GroupMembership> deletedMemberships2 = groupDao.getMemberships(group2, "passanger"); + Assert.assertEquals(1, deletedMemberships2.size()); + Assert.assertEquals(membership4, deletedMemberships2.get(0)); + } + @Test public void addGrant() { Group group = groupDao.createGroup(); -- GitLab