mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-11 05:20:16 +02:00
Merge branch 'issue/1308-groups-without-assigned-group-leade' into 'v2.9.x'
[FIX] Pending Count for superuser for groups without group lead assigned Closes #1308 See merge request allianceauth/allianceauth!1349
This commit is contained in:
commit
f79e764439
@ -195,12 +195,11 @@ finally:
|
|||||||
@admin.register(GroupRequest)
|
@admin.register(GroupRequest)
|
||||||
class GroupRequestAdmin(admin.ModelAdmin):
|
class GroupRequestAdmin(admin.ModelAdmin):
|
||||||
search_fields = ('user__username', )
|
search_fields = ('user__username', )
|
||||||
list_display = ('id', 'group', 'user', '_leave_request', 'status')
|
list_display = ('id', 'group', 'user', '_leave_request')
|
||||||
list_filter = (
|
list_filter = (
|
||||||
('group', admin.RelatedOnlyFieldListFilter),
|
('group', admin.RelatedOnlyFieldListFilter),
|
||||||
('user', admin.RelatedOnlyFieldListFilter),
|
('user', admin.RelatedOnlyFieldListFilter),
|
||||||
'leave_request',
|
'leave_request',
|
||||||
'status'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def _leave_request(self, obj) -> True:
|
def _leave_request(self, obj) -> True:
|
||||||
|
@ -108,11 +108,10 @@ class GroupManager:
|
|||||||
"""Returns the number of pending group requests for the given user"""
|
"""Returns the number of pending group requests for the given user"""
|
||||||
|
|
||||||
if cls.has_management_permission(user):
|
if cls.has_management_permission(user):
|
||||||
return GroupRequest.objects.filter(status="pending").count()
|
return GroupRequest.objects.all().count()
|
||||||
else:
|
else:
|
||||||
return (
|
return (
|
||||||
GroupRequest.objects
|
GroupRequest.objects
|
||||||
.filter(status="pending")
|
|
||||||
.filter(group__authgroup__group_leaders__exact=user)
|
.filter(group__authgroup__group_leaders__exact=user)
|
||||||
.select_related("group__authgroup__group_leaders")
|
.select_related("group__authgroup__group_leaders")
|
||||||
.count()
|
.count()
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
# Generated by Django 3.2.8 on 2021-10-19 18:53
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("groupmanagement", "0015_make_descriptions_great_again"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name="grouprequest",
|
||||||
|
name="status",
|
||||||
|
),
|
||||||
|
]
|
@ -7,7 +7,6 @@ from allianceauth.authentication.models import State
|
|||||||
|
|
||||||
|
|
||||||
class GroupRequest(models.Model):
|
class GroupRequest(models.Model):
|
||||||
status = models.CharField(max_length=254)
|
|
||||||
leave_request = models.BooleanField(default=0)
|
leave_request = models.BooleanField(default=0)
|
||||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||||
group = models.ForeignKey(Group, on_delete=models.CASCADE)
|
group = models.ForeignKey(Group, on_delete=models.CASCADE)
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<button type="button" class="btn btn-primary" disabled>
|
<button type="button" class="btn btn-primary" disabled>
|
||||||
{{ g.request.status }}
|
{% translate "Pending" %}
|
||||||
</button>
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif not g.request %}
|
{% elif not g.request %}
|
||||||
@ -46,7 +46,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<button type="button" class="btn btn-primary" disabled>
|
<button type="button" class="btn btn-primary" disabled>
|
||||||
{{ g.request.status }}
|
{% translate "Pending" %}
|
||||||
</button>
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
|
@ -339,11 +339,16 @@ class TestPendingRequestsCountForUser(TestCase):
|
|||||||
def setUp(self) -> None:
|
def setUp(self) -> None:
|
||||||
self.group_1 = Group.objects.create(name="Group 1")
|
self.group_1 = Group.objects.create(name="Group 1")
|
||||||
self.group_2 = Group.objects.create(name="Group 2")
|
self.group_2 = Group.objects.create(name="Group 2")
|
||||||
|
self.group_3 = Group.objects.create(name="Group 3")
|
||||||
|
|
||||||
self.user_leader_1 = AuthUtils.create_member('Clark Kent')
|
self.user_leader_1 = AuthUtils.create_member('Clark Kent')
|
||||||
self.group_1.authgroup.group_leaders.add(self.user_leader_1)
|
self.group_1.authgroup.group_leaders.add(self.user_leader_1)
|
||||||
self.user_leader_2 = AuthUtils.create_member('Peter Parker')
|
self.user_leader_2 = AuthUtils.create_member('Peter Parker')
|
||||||
self.group_2.authgroup.group_leaders.add(self.user_leader_2)
|
self.group_2.authgroup.group_leaders.add(self.user_leader_2)
|
||||||
|
|
||||||
self.user_requestor = AuthUtils.create_member('Bruce Wayne')
|
self.user_requestor = AuthUtils.create_member('Bruce Wayne')
|
||||||
|
self.user_superuser = AuthUtils.create_member('Q')
|
||||||
|
self.user_superuser.is_superuser = True
|
||||||
|
|
||||||
def test_single_request_for_leader(self):
|
def test_single_request_for_leader(self):
|
||||||
# given user_leader_1 is leader of group_1
|
# given user_leader_1 is leader of group_1
|
||||||
@ -351,7 +356,7 @@ class TestPendingRequestsCountForUser(TestCase):
|
|||||||
# when user_requestor is requesting access to group 1
|
# when user_requestor is requesting access to group 1
|
||||||
# then return 1 for user_leader 1 and 0 for user_leader_2
|
# then return 1 for user_leader 1 and 0 for user_leader_2
|
||||||
GroupRequest.objects.create(
|
GroupRequest.objects.create(
|
||||||
status="pending", user=self.user_requestor, group=self.group_1
|
user=self.user_requestor, group=self.group_1
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
GroupManager.pending_requests_count_for_user(self.user_leader_1), 1
|
GroupManager.pending_requests_count_for_user(self.user_leader_1), 1
|
||||||
@ -365,7 +370,21 @@ class TestPendingRequestsCountForUser(TestCase):
|
|||||||
# when user_requestor is requesting access to group 1
|
# when user_requestor is requesting access to group 1
|
||||||
# then return 0 for user_requestor
|
# then return 0 for user_requestor
|
||||||
GroupRequest.objects.create(
|
GroupRequest.objects.create(
|
||||||
status="pending", user=self.user_requestor, group=self.group_1
|
user=self.user_requestor, group=self.group_1
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
GroupManager.pending_requests_count_for_user(self.user_requestor), 0
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_single_request_for_superuser(self):
|
||||||
|
# given group_3 has no leader
|
||||||
|
# when user_requestor is requesting access to group 1
|
||||||
|
# then return 1 for user_superuser but 0 for user_requestor
|
||||||
|
GroupRequest.objects.create(
|
||||||
|
user=self.user_requestor, group=self.group_3
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
GroupManager.pending_requests_count_for_user(self.user_superuser), 1
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
GroupManager.pending_requests_count_for_user(self.user_requestor), 0
|
GroupManager.pending_requests_count_for_user(self.user_requestor), 0
|
||||||
@ -379,7 +398,6 @@ class TestPendingRequestsCountForUser(TestCase):
|
|||||||
self.user_requestor.groups.add(self.group_2)
|
self.user_requestor.groups.add(self.group_2)
|
||||||
|
|
||||||
GroupRequest.objects.create(
|
GroupRequest.objects.create(
|
||||||
status="pending",
|
|
||||||
user=self.user_requestor,
|
user=self.user_requestor,
|
||||||
group=self.group_2,
|
group=self.group_2,
|
||||||
leave_request=True
|
leave_request=True
|
||||||
@ -397,12 +415,10 @@ class TestPendingRequestsCountForUser(TestCase):
|
|||||||
self.user_requestor.groups.add(self.group_2)
|
self.user_requestor.groups.add(self.group_2)
|
||||||
user_requestor_2 = AuthUtils.create_member("Lex Luther")
|
user_requestor_2 = AuthUtils.create_member("Lex Luther")
|
||||||
GroupRequest.objects.create(
|
GroupRequest.objects.create(
|
||||||
status="pending",
|
|
||||||
user=user_requestor_2,
|
user=user_requestor_2,
|
||||||
group=self.group_2
|
group=self.group_2
|
||||||
)
|
)
|
||||||
GroupRequest.objects.create(
|
GroupRequest.objects.create(
|
||||||
status="pending",
|
|
||||||
user=self.user_requestor,
|
user=self.user_requestor,
|
||||||
group=self.group_2,
|
group=self.group_2,
|
||||||
leave_request=True
|
leave_request=True
|
||||||
@ -420,7 +436,7 @@ class TestPendingRequestsCountForUser(TestCase):
|
|||||||
AuthUtils.add_permission_to_user_by_name("auth.group_management", user_leader_4)
|
AuthUtils.add_permission_to_user_by_name("auth.group_management", user_leader_4)
|
||||||
user_leader_4 = User.objects.get(pk=user_leader_4.pk)
|
user_leader_4 = User.objects.get(pk=user_leader_4.pk)
|
||||||
GroupRequest.objects.create(
|
GroupRequest.objects.create(
|
||||||
status="pending", user=self.user_requestor, group=self.group_1
|
user=self.user_requestor, group=self.group_1
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
GroupManager.pending_requests_count_for_user(self.user_leader_1), 1
|
GroupManager.pending_requests_count_for_user(self.user_leader_1), 1
|
||||||
|
@ -60,7 +60,6 @@ class TestGroupRequest(TestCase):
|
|||||||
|
|
||||||
def test_main_char(self):
|
def test_main_char(self):
|
||||||
group_request = GroupRequest.objects.create(
|
group_request = GroupRequest.objects.create(
|
||||||
status='Pending',
|
|
||||||
user=self.user_1,
|
user=self.user_1,
|
||||||
group=self.group
|
group=self.group
|
||||||
)
|
)
|
||||||
@ -69,7 +68,6 @@ class TestGroupRequest(TestCase):
|
|||||||
|
|
||||||
def test_str(self):
|
def test_str(self):
|
||||||
group_request = GroupRequest.objects.create(
|
group_request = GroupRequest.objects.create(
|
||||||
status='Pending',
|
|
||||||
user=self.user_1,
|
user=self.user_1,
|
||||||
group=self.group
|
group=self.group
|
||||||
)
|
)
|
||||||
|
@ -354,7 +354,6 @@ def group_request_add(request, group_id):
|
|||||||
messages.warning(request, _("You already have a pending application for that group."))
|
messages.warning(request, _("You already have a pending application for that group."))
|
||||||
return redirect("groupmanagement:groups")
|
return redirect("groupmanagement:groups")
|
||||||
grouprequest = GroupRequest()
|
grouprequest = GroupRequest()
|
||||||
grouprequest.status = _('Pending')
|
|
||||||
grouprequest.group = group
|
grouprequest.group = group
|
||||||
grouprequest.user = request.user
|
grouprequest.user = request.user
|
||||||
grouprequest.leave_request = False
|
grouprequest.leave_request = False
|
||||||
@ -396,7 +395,6 @@ def group_request_leave(request, group_id):
|
|||||||
request.user.groups.remove(group)
|
request.user.groups.remove(group)
|
||||||
return redirect('groupmanagement:groups')
|
return redirect('groupmanagement:groups')
|
||||||
grouprequest = GroupRequest()
|
grouprequest = GroupRequest()
|
||||||
grouprequest.status = _('Pending')
|
|
||||||
grouprequest.group = group
|
grouprequest.group = group
|
||||||
grouprequest.user = request.user
|
grouprequest.user = request.user
|
||||||
grouprequest.leave_request = True
|
grouprequest.leave_request = True
|
||||||
|
Loading…
x
Reference in New Issue
Block a user