1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.exoplatform.social.core.listeners;
18
19 import org.exoplatform.commons.utils.CommonsUtils;
20 import org.exoplatform.container.ExoContainer;
21 import org.exoplatform.container.ExoContainerContext;
22 import org.exoplatform.portal.config.UserACL;
23 import org.exoplatform.services.organization.Membership;
24 import org.exoplatform.services.organization.MembershipEventListener;
25 import org.exoplatform.services.organization.MembershipTypeHandler;
26 import org.exoplatform.services.organization.OrganizationService;
27 import org.exoplatform.services.security.ConversationState;
28 import org.exoplatform.social.core.space.SpaceUtils;
29 import org.exoplatform.social.core.space.model.Space;
30 import org.exoplatform.social.core.space.spi.SpaceService;
31 import org.exoplatform.social.core.storage.api.IdentityStorage;
32
33
34
35
36
37
38
39
40
41
42 public class SocialMembershipListenerImpl extends MembershipEventListener {
43
44 public SocialMembershipListenerImpl() {
45
46 }
47
48 @Override
49 public void postDelete(Membership m) throws Exception {
50 if (m.getGroupId().startsWith(SpaceUtils.SPACE_GROUP)) {
51 OrganizationService orgService = CommonsUtils.getService(OrganizationService.class);
52
53 UserACL acl = CommonsUtils.getService(UserACL.class);
54
55
56
57 SpaceService spaceService = CommonsUtils.getService(SpaceService.class);
58 Space space = spaceService.getSpaceByGroupId(m.getGroupId());
59 if (space != null) {
60 ConversationState state = ConversationState.getCurrent();
61 if(state != null && state.getIdentity() != null && space.getEditor() == null) {
62 space.setEditor(state.getIdentity().getUserId());
63 }
64 if (acl.getAdminMSType().equalsIgnoreCase(m.getMembershipType()) ||
65 MembershipTypeHandler.ANY_MEMBERSHIP_TYPE.equalsIgnoreCase(m.getMembershipType())) {
66 spaceService.setManager(space, m.getUserName(), false);
67 SpaceUtils.refreshNavigation();
68 } else if (SpaceUtils.MEMBER.equalsIgnoreCase(m.getMembershipType())) {
69 spaceService.removeMember(space, m.getUserName());
70 spaceService.setManager(space, m.getUserName(), false);
71 SpaceUtils.refreshNavigation();
72 }
73 }
74 } else if (m.getGroupId().startsWith(SpaceUtils.PLATFORM_USERS_GROUP)) {
75 clearIdentityCaching();
76 }
77 }
78
79 @Override
80 public void postSave(Membership m, boolean isNew) throws Exception {
81
82 if (m.getGroupId().startsWith(SpaceUtils.SPACE_GROUP)) {
83
84 ExoContainer container = ExoContainerContext.getCurrentContainer();
85 UserACL acl = (UserACL) container.getComponentInstanceOfType(UserACL.class);
86
87
88 SpaceService spaceService = (SpaceService) container.getComponentInstanceOfType(SpaceService.class);
89 Space space = spaceService.getSpaceByGroupId(m.getGroupId());
90
91 if (space != null) {
92 ConversationState state = ConversationState.getCurrent();
93 if(state != null && state.getIdentity() != null && space.getEditor() == null) {
94 space.setEditor(state.getIdentity().getUserId());
95 }
96 String userName = m.getUserName();
97 if (acl.getAdminMSType().equalsIgnoreCase(m.getMembershipType()) ||
98 MembershipTypeHandler.ANY_MEMBERSHIP_TYPE.equalsIgnoreCase(m.getMembershipType())) {
99 if (spaceService.isManager(space, userName)) {
100 return;
101 }
102 if (spaceService.isMember(space, userName)) {
103 spaceService.setManager(space, userName, true);
104 } else {
105 spaceService.addMember(space, userName);
106 spaceService.setManager(space, userName, true);
107 }
108 } else if (SpaceUtils.MEMBER.equalsIgnoreCase(m.getMembershipType())) {
109 if (spaceService.isMember(space, userName)) {
110 return;
111 }
112 spaceService.addMember(space, userName);
113 }
114
115
116 SpaceUtils.refreshNavigation();
117 }
118
119 } else if (m.getGroupId().startsWith(SpaceUtils.PLATFORM_USERS_GROUP)) {
120 clearIdentityCaching();
121 }
122 }
123
124 private void clearIdentityCaching() {
125 IdentityStorage storage = (IdentityStorage) ExoContainerContext.getCurrentContainer().getComponentInstanceOfType(IdentityStorage.class);
126
127
128 storage.updateIdentityMembership(null);
129 }
130 }