2023-08-01 12:52:05 +02:00

74 lines
2.1 KiB
Python

from django import forms
from django.contrib import admin
from allianceauth import hooks
from allianceauth.authentication.admin import (
MainAllianceFilter,
MainCorporationsFilter,
user_main_organization,
user_profile_pic,
user_username,
)
from .models import NameFormatConfig
class ServicesUserAdmin(admin.ModelAdmin):
"""Parent class for UserAdmin classes for all services"""
class Media:
css = {
"all": ("allianceauth/services/admin.css",)
}
search_fields = ('user__username',)
ordering = ('user__username',)
list_select_related = True
list_display = (
user_profile_pic,
user_username,
'_state',
user_main_organization,
'_date_joined'
)
list_filter = (
'user__profile__state',
MainCorporationsFilter,
MainAllianceFilter,
'user__date_joined',
)
list_select_related = (
'user', 'user__profile__main_character', 'user__profile__state'
)
@admin.display(ordering='user__profile__state__name')
def _state(self, obj):
return obj.user.profile.state.name
@admin.display(ordering='user__date_joined')
def _date_joined(self, obj):
return obj.user.date_joined
class NameFormatConfigForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
SERVICE_CHOICES = \
[(s.name, s.name) for h in hooks.get_hooks('services_hook') for s in [h()]]
if self.instance.id:
current_choice = (self.instance.service_name, self.instance.service_name)
if current_choice not in SERVICE_CHOICES:
SERVICE_CHOICES.append(current_choice)
self.fields['service_name'] = forms.ChoiceField(choices=SERVICE_CHOICES)
@admin.register(NameFormatConfig)
class NameFormatConfigAdmin(admin.ModelAdmin):
form = NameFormatConfigForm
list_display = ('service_name', 'get_state_display_string')
@admin.display(
description='States'
)
def get_state_display_string(self, obj):
return ', '.join([state.name for state in obj.states.all()])