Skip to content

Commit a3d86c6

Browse files
authored
Merge pull request #7225 from akatsoulas/fix-member-removal
Do not automatically remove leader from group
2 parents 461d853 + 6f61e4c commit a3d86c6

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

kitsune/groups/tests/test_views.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ def test_add_leader(self):
160160

161161
def test_remove_leader(self):
162162
self.group_profile.leaders.add(self.leader)
163+
self.leader.groups.add(self.group_profile.group)
163164
url = reverse(
164165
"groups.remove_leader", locale="en-US", args=[self.group_profile.slug, self.leader.id]
165166
)
@@ -168,6 +169,7 @@ def test_remove_leader(self):
168169
r = self.client.post(url)
169170
self.assertEqual(302, r.status_code)
170171
assert self.leader not in self.group_profile.leaders.all()
172+
assert self.leader in self.group_profile.group.user_set.all()
171173

172174
def test_cannot_remove_last_leader_from_root(self):
173175
"""Cannot remove the last leader from a root group."""

kitsune/groups/views.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,20 @@
1616
from kitsune.upload.tasks import create_image_thumbnail
1717

1818

19-
def _remove_group_member(profile, user, request):
19+
def _remove_group_member(profile, user, request, remove_from_group=True):
2020
"""
2121
Remove a member/leader from a group with validation.
2222
2323
Handles both regular members and leaders, with appropriate validation
2424
and error messages for the last leader scenario.
2525
26+
Args:
27+
profile: The GroupProfile to remove the user from
28+
user: The user to remove
29+
request: The HTTP request object
30+
remove_from_group: If True, removes user from group entirely.
31+
If False, only removes from leaders (demotes to regular member).
32+
2633
Returns True if removed successfully, False if validation failed.
2734
"""
2835
is_leader = profile.leaders.filter(pk=user.pk).exists()
@@ -38,7 +45,10 @@ def _remove_group_member(profile, user, request):
3845

3946
if is_leader:
4047
profile.leaders.remove(user)
41-
user.groups.remove(profile.group)
48+
49+
if remove_from_group:
50+
user.groups.remove(profile.group)
51+
4252
return True
4353

4454

@@ -235,7 +245,7 @@ def remove_leader(request, group_slug, user_id):
235245
raise PermissionDenied
236246

237247
if request.method == "POST":
238-
if _remove_group_member(prof, user, request):
248+
if _remove_group_member(prof, user, request, remove_from_group=False):
239249
msg = _("{user} removed from the group leaders successfully!").format(
240250
user=user.username
241251
)

0 commit comments

Comments
 (0)