minecraft_manager/admin.py

117 lines
3.3 KiB
Python

from __future__ import absolute_import
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
from django.utils.translation import gettext as _
from minecraft_manager.models import Application, Note, Ticket, TicketNote, Player, IP, UserSettings, Alert, Attachment
from minecraft_manager.api.admin import register as api_register
class PlayerInline(admin.StackedInline):
model = Player
can_delete = False
verbose_name_plural = 'player'
class UserAdmin(BaseUserAdmin):
inlines = (PlayerInline, )
actions = ['deactivate_account']
def deactivate_account(self, request, queryset):
rows_updated = queryset.update(is_active=False)
if rows_updated == 1:
message_bit = "1 user was"
else:
message_bit = "%s users were" % rows_updated
self.message_user(request, "%s successfully deactivated." % message_bit)
deactivate_account.short_description = "Deactivate selected accounts"
class PlayerAdmin(admin.ModelAdmin):
search_fields = ["username", "uuid"]
class ApplicationAdmin(admin.ModelAdmin):
search_fields = ["username"]
class TicketPriorityFilter(admin.SimpleListFilter):
title = _('Priority')
parameter_name = 'priority'
def lookups(self, request, model_admin):
return (
('0', _('Low')),
('1', _('Medium')),
('2', _('High'))
)
def queryset(self, request, queryset):
if self.value() == '0':
return queryset.filter(priority='L')
if self.value() == '1':
return queryset.filter(priority='M')
if self.value() == '2':
return queryset.filter(priority='H')
class TicketAdmin(admin.ModelAdmin):
search_fields = ["player__username", "staff__username"]
list_filter = (TicketPriorityFilter,)
class NoteImportanceFilter(admin.SimpleListFilter):
title = _('Importance')
parameter_name = 'importance'
def lookups(self, request, model_admin):
return (
('0', _('Low')),
('1', _('Medium')),
('2', _('High'))
)
def queryset(self, request, queryset):
if self.value() == '0':
return queryset.filter(priority='L')
if self.value() == '1':
return queryset.filter(priority='M')
if self.value() == '2':
return queryset.filter(priority='H')
class NoteAdmin(admin.ModelAdmin):
search_fields = ["player__username", "staff__username"]
list_filter = (NoteImportanceFilter,)
class IPAdmin(admin.ModelAdmin):
search_fields = ["player__username", "ip"]
class AttachmentAdmin(admin.ModelAdmin):
list_display = ["file_name", "model_name"]
def model_name(self, attachment):
return attachment.ref_name
model_name.short_description = "Model"
try:
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
admin.site.register(UserSettings)
admin.site.register(Application, ApplicationAdmin)
admin.site.register(Ticket, TicketAdmin)
admin.site.register(TicketNote)
admin.site.register(Note, NoteAdmin)
admin.site.register(Player, PlayerAdmin)
admin.site.register(IP, IPAdmin)
admin.site.register(Alert)
admin.site.register(Attachment, AttachmentAdmin)
api_register()
except admin.sites.AlreadyRegistered:
pass