diff --git a/allianceauth/authentication/admin.py b/allianceauth/authentication/admin.py
index 34129db9..47772d18 100644
--- a/allianceauth/authentication/admin.py
+++ b/allianceauth/authentication/admin.py
@@ -4,19 +4,19 @@ from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User as BaseUser, \
Permission as BasePermission
-from django.db.models import Q
+from django.db.models import Q, F
from allianceauth.services.hooks import ServicesHook
from django.db.models.signals import pre_save, post_save, pre_delete, \
post_delete, m2m_changed
from django.dispatch import receiver
from django.forms import ModelForm
-from django.utils.safestring import mark_safe
+from django.utils.html import format_html
from django.utils.text import slugify
from allianceauth.authentication.models import State, get_guest_state,\
CharacterOwnership, UserProfile, OwnershipRecord
from allianceauth.hooks import get_hooks
-from allianceauth.eveonline.models import EveCharacter
+from allianceauth.eveonline.models import EveCharacter, EveCorporationInfo
if 'allianceauth.eveonline.autogroups' in settings.INSTALLED_APPS:
_has_auto_groups = True
@@ -96,9 +96,10 @@ class UserProfileInline(admin.StackedInline):
return False
-class MyGroupFilter(admin.SimpleListFilter):
+class RealGroupsFilter(admin.SimpleListFilter):
+ """Custom filter to get groups w/o Autogroups"""
title = 'group'
- parameter_name = 'my_groups'
+ parameter_name = 'real_groups'
def lookups(self, request, model_admin):
qs = Group.objects.all().order_by('name')
@@ -113,7 +114,54 @@ class MyGroupFilter(admin.SimpleListFilter):
return queryset.all()
else:
return queryset.filter(groups__pk=self.value())
-
+
+
+class MainCorporationsFilter(admin.SimpleListFilter):
+ """Custom filter to show corporations from mains only"""
+ title = 'corporation'
+ 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'))\
+ .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(profile__main_character__corporation_id=self.value())
+
+
+class MainAllianceFilter(admin.SimpleListFilter):
+ """Custom filter to show alliances from mains only"""
+ title = 'alliance'
+ 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'))\
+ .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(profile__main_character__alliance_id=self.value())
+
class UserAdmin(BaseUserAdmin):
"""
@@ -159,9 +207,11 @@ class UserAdmin(BaseUserAdmin):
list_filter = (
'profile__state',
- MyGroupFilter,
- 'profile__main_character__corporation_name',
- 'profile__main_character__alliance_name',
+ RealGroupsFilter,
+ #'profile__main_character__corporation_name',
+ MainCorporationsFilter,
+ #'profile__main_character__alliance_name',
+ MainAllianceFilter,
'is_active',
'date_joined',
'is_staff',
@@ -175,10 +225,10 @@ class UserAdmin(BaseUserAdmin):
def _profile_pic(self, obj):
if obj.profile.main_character:
- return mark_safe(
- '
'.format(
- obj.profile.main_character.portrait_url(size=32)
- ))
+ return format_html(
+ '
',
+ obj.profile.main_character.portrait_url(size=32)
+ )
else:
return ''
_profile_pic.short_description = ''
@@ -190,11 +240,12 @@ class UserAdmin(BaseUserAdmin):
type(obj).__name__.lower(),
obj.pk
)
- return mark_safe('{}
{}'.format(
+ return format_html(
+ '{}
{}',
link,
obj.username,
obj.email
- ))
+ )
_username.short_description = 'user'
_username.admin_order_field = 'username'
@@ -210,7 +261,10 @@ class UserAdmin(BaseUserAdmin):
alliance = obj.profile.main_character.alliance_name
else:
alliance = ''
- return mark_safe('{}
{}'.format(corporation, alliance))
+ return format_html('{}
{}',
+ corporation,
+ alliance
+ )
_main_organization.short_description = 'Corporation / Alliance (Main)'
_main_organization.admin_order_field = \
@@ -227,11 +281,13 @@ class UserAdmin(BaseUserAdmin):
]
if obj.profile.main_character:
result = [
- '{}'.format(obj.profile.main_character.character_name)
+ '{}'.format(
+ obj.profile.main_character.character_name
+ )
]
else:
result = []
- return mark_safe(', '.join(result + alts))
+ return format_html(', '.join(result + alts))
_characters.short_description = 'characters'