From 2d24d064d5f792a72d2f90c4c04272189413201e Mon Sep 17 00:00:00 2001 From: ErikKalkoken Date: Thu, 6 Feb 2020 18:51:52 +0100 Subject: [PATCH] Improve admin site --- allianceauth/authentication/admin.py | 16 ++--- allianceauth/groupmanagement/admin.py | 18 +++-- .../services/modules/discord/admin.py | 55 ++++++++++++++- .../services/modules/teamspeak3/admin.py | 67 ++++++++++++++++++- 4 files changed, 134 insertions(+), 22 deletions(-) diff --git a/allianceauth/authentication/admin.py b/allianceauth/authentication/admin.py index 03263aef..874858b0 100644 --- a/allianceauth/authentication/admin.py +++ b/allianceauth/authentication/admin.py @@ -122,10 +122,9 @@ class MainCorporationsFilter(admin.SimpleListFilter): parameter_name = 'main_corporations' def lookups(self, request, model_admin): - qs = UserProfile.objects\ - .exclude(main_character=None)\ - .values(corporation_id=F('main_character__corporation_id'))\ - .annotate(corporation_name=F('main_character__corporation_name'))\ + qs = EveCharacter.objects\ + .exclude(userprofile=None)\ + .values('corporation_id', 'corporation_name')\ .distinct() return tuple([ (x['corporation_id'], x['corporation_name']) for x in qs @@ -145,11 +144,10 @@ class MainAllianceFilter(admin.SimpleListFilter): parameter_name = 'main_alliances' def lookups(self, request, model_admin): - qs = UserProfile.objects\ - .exclude(main_character=None)\ - .exclude(main_character__alliance_id=None)\ - .values(alliance_id=F('main_character__alliance_id'))\ - .annotate(alliance_name=F('main_character__alliance_name'))\ + qs = EveCharacter.objects\ + .exclude(alliance_id=None)\ + .exclude(userprofile=None)\ + .values('alliance_id', 'alliance_name')\ .distinct() return tuple([ (x['alliance_id'], x['alliance_name']) for x in qs diff --git a/allianceauth/groupmanagement/admin.py b/allianceauth/groupmanagement/admin.py index 59c05716..35a86354 100644 --- a/allianceauth/groupmanagement/admin.py +++ b/allianceauth/groupmanagement/admin.py @@ -52,7 +52,8 @@ class GroupAdmin(admin.ModelAdmin): 'authgroup__open', 'authgroup__public' ) - + search_fields = ('name', 'authgroup__description') + filter_horizontal = ('permissions',) inlines = (AuthGroupInlineAdmin,) @@ -83,12 +84,15 @@ class GroupAdmin(admin.ModelAdmin): def _properties(self, obj): properties = list() - if obj.authgroup.hidden: - properties.append('Hidden') - if obj.authgroup.open: - properties.append('Open') - if obj.authgroup.public: - properties.append('Public') + if obj.authgroup.internal: + properties.append('Internal') + else: + if obj.authgroup.hidden: + properties.append('Hidden') + if obj.authgroup.open: + properties.append('Open') + if obj.authgroup.public: + properties.append('Public') if not properties: properties.append('Default') diff --git a/allianceauth/services/modules/discord/admin.py b/allianceauth/services/modules/discord/admin.py index bdcdb62a..d7ca52a6 100644 --- a/allianceauth/services/modules/discord/admin.py +++ b/allianceauth/services/modules/discord/admin.py @@ -1,7 +1,56 @@ from django.contrib import admin +from allianceauth.eveonline.models import EveCharacter + from .models import DiscordUser +class MainCorporationsFilter(admin.SimpleListFilter): + """Custom filter to show corporations from service users only""" + title = 'corporation' + parameter_name = 'main_corporations' + + def lookups(self, request, model_admin): + qs = EveCharacter.objects\ + .exclude(userprofile=None)\ + .exclude(userprofile__user__discord=None)\ + .values('corporation_id', 'corporation_name')\ + .distinct() + return tuple([ + (x['corporation_id'], x['corporation_name']) for x in qs + ]) + + def queryset(self, request, queryset): + if self.value() is None: + return queryset.all() + else: + return queryset\ + .filter(user__profile__main_character__corporation_id=self.value()) + + +class MainAllianceFilter(admin.SimpleListFilter): + """Custom filter to show alliances from service users only""" + title = 'alliance' + parameter_name = 'main_alliances' + + def lookups(self, request, model_admin): + qs = EveCharacter.objects\ + .exclude(alliance_id=None)\ + .exclude(userprofile=None)\ + .exclude(userprofile__user__discord=None)\ + .values('alliance_id', 'alliance_name')\ + .distinct() + return tuple([ + (x['alliance_id'], x['alliance_name']) for x in qs + ]) + + def queryset(self, request, queryset): + if self.value() is None: + return queryset.all() + else: + return queryset\ + .filter(user__profile__main_character__alliance_id=self.value()) + + class DiscordUserAdmin(admin.ModelAdmin): ordering = ('user__username', ) list_select_related = True @@ -17,9 +66,9 @@ class DiscordUserAdmin(admin.ModelAdmin): 'user__username', 'uid' ) - list_filter = ( - 'user__profile__main_character__corporation_name', - 'user__profile__main_character__alliance_name', + list_filter = ( + MainCorporationsFilter, + MainAllianceFilter, 'user__date_joined', ) diff --git a/allianceauth/services/modules/teamspeak3/admin.py b/allianceauth/services/modules/teamspeak3/admin.py index c3cc2403..26dd1291 100644 --- a/allianceauth/services/modules/teamspeak3/admin.py +++ b/allianceauth/services/modules/teamspeak3/admin.py @@ -1,7 +1,56 @@ from django.contrib import admin +from allianceauth.eveonline.models import EveCharacter + from .models import AuthTS, Teamspeak3User, StateGroup +class MainCorporationsFilter(admin.SimpleListFilter): + """Custom filter to show corporations from service users only""" + title = 'corporation' + parameter_name = 'main_corporations' + + def lookups(self, request, model_admin): + qs = EveCharacter.objects\ + .exclude(userprofile=None)\ + .exclude(userprofile__user__teamspeak3=None)\ + .values('corporation_id', 'corporation_name')\ + .distinct() + return tuple([ + (x['corporation_id'], x['corporation_name']) for x in qs + ]) + + def queryset(self, request, queryset): + if self.value() is None: + return queryset.all() + else: + return queryset\ + .filter(user__profile__main_character__corporation_id=self.value()) + + +class MainAllianceFilter(admin.SimpleListFilter): + """Custom filter to show alliances from service users only""" + title = 'alliance' + parameter_name = 'main_alliances' + + def lookups(self, request, model_admin): + qs = EveCharacter.objects\ + .exclude(alliance_id=None)\ + .exclude(userprofile=None)\ + .exclude(userprofile__user__teamspeak3=None)\ + .values('alliance_id', 'alliance_name')\ + .distinct() + return tuple([ + (x['alliance_id'], x['alliance_name']) for x in qs + ]) + + def queryset(self, request, queryset): + if self.value() is None: + return queryset.all() + else: + return queryset\ + .filter(user__profile__main_character__alliance_id=self.value()) + + class Teamspeak3UserAdmin(admin.ModelAdmin): ordering = ('user__username', ) list_select_related = True @@ -20,8 +69,8 @@ class Teamspeak3UserAdmin(admin.ModelAdmin): 'perm_key' ) list_filter = ( - 'user__profile__main_character__corporation_name', - 'user__profile__main_character__alliance_name', + MainCorporationsFilter, + MainAllianceFilter, 'user__date_joined', ) @@ -57,9 +106,21 @@ class Teamspeak3UserAdmin(admin.ModelAdmin): class AuthTSgroupAdmin(admin.ModelAdmin): - fields = ['auth_group', 'ts_group'] + ordering = ('auth_group__name', ) + list_select_related = True + + list_display = ('auth_group', '_ts_group') + list_filter = ('ts_group', ) + + fields = ('auth_group', 'ts_group') filter_horizontal = ('ts_group',) + def _ts_group(self, obj): + return [x for x in obj.ts_group.all().order_by('ts_group_id')] + + _ts_group.short_description = 'ts groups' + #_ts_group.admin_order_field = 'profile__state' + @admin.register(StateGroup) class StateGroupAdmin(admin.ModelAdmin):