diff --git a/allianceauth/authentication/admin.py b/allianceauth/authentication/admin.py index ff21f902..34129db9 100644 --- a/allianceauth/authentication/admin.py +++ b/allianceauth/authentication/admin.py @@ -1,15 +1,28 @@ +from django.conf import settings + 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.utils.text import slugify +from django.contrib.auth.models import User as BaseUser, \ + Permission as BasePermission from django.db.models import Q from allianceauth.services.hooks import ServicesHook -from django.db.models.signals import pre_save, post_save, pre_delete, post_delete, m2m_changed +from django.db.models.signals import pre_save, post_save, pre_delete, \ + post_delete, m2m_changed from django.dispatch import receiver -from allianceauth.authentication.models import State, get_guest_state, CharacterOwnership, UserProfile, OwnershipRecord +from django.forms import ModelForm +from django.utils.safestring import mark_safe +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 django.forms import ModelForm + +if 'allianceauth.eveonline.autogroups' in settings.INSTALLED_APPS: + _has_auto_groups = True + from allianceauth.eveonline.autogroups.models import * +else: + _has_auto_groups = False def make_service_hooks_update_groups_action(service): @@ -83,6 +96,25 @@ class UserProfileInline(admin.StackedInline): return False +class MyGroupFilter(admin.SimpleListFilter): + title = 'group' + parameter_name = 'my_groups' + + def lookups(self, request, model_admin): + qs = Group.objects.all().order_by('name') + if _has_auto_groups: + qs = qs\ + .filter(managedalliancegroup__exact=None)\ + .filter(managedcorpgroup__exact=None) + return tuple([(x.pk, x.name) for x in qs]) + + def queryset(self, request, queryset): + if self.value() is None: + return queryset.all() + else: + return queryset.filter(groups__pk=self.value()) + + class UserAdmin(BaseUserAdmin): """ Extending Django's UserAdmin model @@ -106,48 +138,139 @@ class UserAdmin(BaseUserAdmin): action.short_description) return actions + inlines = BaseUserAdmin.inlines + [UserProfileInline] - list_select_related = True - - list_filter = BaseUserAdmin.list_filter + ( - 'profile__main_character__corporation_name', - 'profile__main_character__alliance_name', - 'profile__state', - 'date_joined' - ) + list_select_related = True + show_full_result_count = True list_display = ( - 'username', - 'get_main_character', - 'get_main_corporation', - 'get_main_alliance', - 'get_state', + '_profile_pic', + '_username', + '_state', + '_groups', + '_main_organization', + '_characters', + 'is_active', 'date_joined', - 'is_active' + '_role' + ) + list_display_links = None + + list_filter = ( + 'profile__state', + MyGroupFilter, + 'profile__main_character__corporation_name', + 'profile__main_character__alliance_name', + 'is_active', + 'date_joined', + 'is_staff', + 'is_superuser' + ) + search_fields = ( + 'username', + 'character_ownerships__character__character_name', + 'groups__name' ) - def get_main_character(self, obj): - return obj.profile.main_character - get_main_character.short_description = "Main Character" - - def get_main_corporation(self, obj): + def _profile_pic(self, obj): if obj.profile.main_character: - return obj.profile.main_character.corporation_name + return mark_safe( + ''.format( + obj.profile.main_character.portrait_url(size=32) + )) else: - return None - get_main_corporation.short_description = "Main Corporation" + return '' + _profile_pic.short_description = '' - def get_main_alliance(self, obj): + + def _username(self, obj): + #/admin////change/ + link = '/admin/authentication/{}/{}/change/'.format( + type(obj).__name__.lower(), + obj.pk + ) + return mark_safe('{}
{}'.format( + link, + obj.username, + obj.email + )) + + _username.short_description = 'user' + _username.admin_order_field = 'username' + + def _main_organization(self, obj): if obj.profile.main_character: - return obj.profile.main_character.alliance_name + corporation = obj.profile.main_character.corporation_name else: - return None - get_main_alliance.short_description = "Main Alliance" + corporation = '' + if (obj.profile.main_character + and obj.profile.main_character.alliance_id + ): + alliance = obj.profile.main_character.alliance_name + else: + alliance = '' + return mark_safe('{}
{}'.format(corporation, alliance)) - def get_state(self, obj): + _main_organization.short_description = 'Corporation / Alliance (Main)' + _main_organization.admin_order_field = \ + 'profile__main_character__corporation_name' + + + def _characters(self, obj): + alts = [ + x.character.character_name + for x in CharacterOwnership.objects\ + .filter(user=obj)\ + .order_by('character__character_name') + .exclude(character=obj.profile.main_character) + ] + if obj.profile.main_character: + result = [ + '{}'.format(obj.profile.main_character.character_name) + ] + else: + result = [] + return mark_safe(', '.join(result + alts)) + + _characters.short_description = 'characters' + + + def _state(self, obj): return obj.profile.state - get_state.short_description = "State" + + _state.short_description = 'state' + _state.admin_order_field = 'profile__state' + + + def _groups(self, obj): + if not _has_auto_groups: + my_groups = [x.name for x in obj.groups.order_by('name')] + else: + my_groups = [ + x.name for x in obj.groups\ + .filter(managedalliancegroup=None)\ + .filter(managedcorpgroup=None)\ + .order_by('name') + ] + + return ', '.join(my_groups) + + _groups.short_description = 'groups' + + + def _role(self, obj): + if obj.is_superuser: + role = 'Superuser' + elif obj.is_staff: + role = 'Staff' + else: + role = 'User' + + return role + + _role.short_description = 'role' + def has_change_permission(self, request, obj=None): return request.user.has_perm('auth.change_user') diff --git a/allianceauth/groupmanagement/admin.py b/allianceauth/groupmanagement/admin.py index 6ddb8414..48969d08 100644 --- a/allianceauth/groupmanagement/admin.py +++ b/allianceauth/groupmanagement/admin.py @@ -102,9 +102,12 @@ class GroupAdmin(admin.ModelAdmin): def _attributes(self, obj): attributes = list() - if _has_auto_groups and (obj.managedalliancegroup_set.exists() + if (_has_auto_groups + and ( + obj.managedalliancegroup_set.exists() or obj.managedcorpgroup_set.exists() - ): + ) + ): attributes.append('Auto Group') elif obj.authgroup.internal: attributes.append('Internal')