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 1515fcc60e92c2020b3c6031eb724ed8a25ab825..a32947d88555cae9681b8f761dab64bb58831959 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 ee0ac3729c3cda31e30b4fb01499e5ece4983fdb..3f3e949c6f56fb24c554254f7f29e39df5f68bce 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 3a01c5665f04dca4be2fb645fcb342dedc82fa07..f2ca3858aabd981b6746d6f0c7d1274c0754b67e 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 02f110429d6dc650220fc00abce2e109b800e61b..1fba9b5f90d755f4df2285f3b35c0b5cc7099969 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 080e11381879d128ee9326d2848495f3bba37220..7ea69b5502af492fb04768ab26f6286d44afdc5a 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 e53470acc27fcc32d857f685bd7569322752aee6..354b705ebdfd3d46af1015f2a4d43a7b314cd6d8 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();