2024-01-15 09:14:49 +01:00
|
|
|
"""Admin classes and registrations for People's core app."""
|
2024-03-07 10:57:05 +01:00
|
|
|
|
2024-01-15 09:14:49 +01:00
|
|
|
from django.contrib import admin
|
|
|
|
|
from django.contrib.auth import admin as auth_admin
|
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
|
|
|
|
|
|
from . import models
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TeamAccessInline(admin.TabularInline):
|
|
|
|
|
"""Inline admin class for team accesses."""
|
|
|
|
|
|
|
|
|
|
extra = 0
|
|
|
|
|
autocomplete_fields = ["user", "team"]
|
|
|
|
|
model = models.TeamAccess
|
|
|
|
|
readonly_fields = ("created_at", "updated_at")
|
|
|
|
|
|
|
|
|
|
|
2024-03-22 14:47:08 +01:00
|
|
|
class TeamWebhookInline(admin.TabularInline):
|
|
|
|
|
"""Inline admin class for team webhooks."""
|
|
|
|
|
|
|
|
|
|
extra = 0
|
|
|
|
|
autocomplete_fields = ["team"]
|
|
|
|
|
model = models.TeamWebhook
|
|
|
|
|
readonly_fields = ("created_at", "updated_at")
|
|
|
|
|
|
|
|
|
|
|
2024-01-15 09:14:49 +01:00
|
|
|
@admin.register(models.User)
|
|
|
|
|
class UserAdmin(auth_admin.UserAdmin):
|
|
|
|
|
"""Admin class for the User model"""
|
|
|
|
|
|
|
|
|
|
fieldsets = (
|
|
|
|
|
(
|
|
|
|
|
None,
|
|
|
|
|
{
|
|
|
|
|
"fields": (
|
|
|
|
|
"id",
|
2024-06-09 22:43:42 +02:00
|
|
|
"sub",
|
2024-01-15 09:14:49 +01:00
|
|
|
"password",
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
),
|
2024-06-09 22:43:42 +02:00
|
|
|
(_("Personal info"), {"fields": ("email", "language", "timezone")}),
|
2024-01-15 09:14:49 +01:00
|
|
|
(
|
|
|
|
|
_("Permissions"),
|
|
|
|
|
{
|
|
|
|
|
"fields": (
|
|
|
|
|
"is_active",
|
|
|
|
|
"is_device",
|
|
|
|
|
"is_staff",
|
|
|
|
|
"is_superuser",
|
|
|
|
|
"groups",
|
|
|
|
|
"user_permissions",
|
|
|
|
|
),
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
(_("Important dates"), {"fields": ("created_at", "updated_at")}),
|
|
|
|
|
)
|
2024-02-14 22:22:36 +01:00
|
|
|
add_fieldsets = (
|
|
|
|
|
(
|
|
|
|
|
None,
|
|
|
|
|
{
|
|
|
|
|
"classes": ("wide",),
|
2024-06-09 22:43:42 +02:00
|
|
|
"fields": ("sub", "email", "password1", "password2"),
|
2024-02-14 22:22:36 +01:00
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
)
|
2024-06-09 22:43:42 +02:00
|
|
|
inlines = (TeamAccessInline,)
|
2024-01-15 09:14:49 +01:00
|
|
|
list_display = (
|
2024-06-09 22:43:42 +02:00
|
|
|
"sub",
|
|
|
|
|
"email",
|
2024-01-15 09:14:49 +01:00
|
|
|
"created_at",
|
|
|
|
|
"updated_at",
|
|
|
|
|
"is_active",
|
|
|
|
|
"is_device",
|
|
|
|
|
"is_staff",
|
|
|
|
|
"is_superuser",
|
|
|
|
|
)
|
|
|
|
|
list_filter = ("is_staff", "is_superuser", "is_device", "is_active")
|
|
|
|
|
ordering = ("is_active", "-is_superuser", "-is_staff", "-is_device", "-updated_at")
|
2024-06-09 22:43:42 +02:00
|
|
|
readonly_fields = ["id", "created_at", "updated_at"]
|
|
|
|
|
search_fields = ("id", "email", "sub")
|
|
|
|
|
|
|
|
|
|
def get_readonly_fields(self, request, obj=None):
|
|
|
|
|
"""The sub should only be editable for a create, not for updates."""
|
|
|
|
|
if obj:
|
|
|
|
|
return self.readonly_fields + ["sub"]
|
|
|
|
|
return self.readonly_fields
|
2024-01-15 09:14:49 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@admin.register(models.Team)
|
|
|
|
|
class TeamAdmin(admin.ModelAdmin):
|
|
|
|
|
"""Team admin interface declaration."""
|
|
|
|
|
|
2024-03-22 14:47:08 +01:00
|
|
|
inlines = (TeamAccessInline, TeamWebhookInline)
|
2024-01-15 09:14:49 +01:00
|
|
|
list_display = (
|
|
|
|
|
"name",
|
2024-02-12 10:35:29 +01:00
|
|
|
"slug",
|
2024-01-15 09:14:49 +01:00
|
|
|
"created_at",
|
|
|
|
|
"updated_at",
|
|
|
|
|
)
|
|
|
|
|
search_fields = ("name",)
|
2024-02-07 18:03:12 +01:00
|
|
|
|
|
|
|
|
|
2024-07-10 11:49:18 +02:00
|
|
|
@admin.register(models.TeamAccess)
|
|
|
|
|
class TeamAccessAdmin(admin.ModelAdmin):
|
|
|
|
|
"""Team access admin interface declaration."""
|
|
|
|
|
|
|
|
|
|
list_display = (
|
|
|
|
|
"user",
|
|
|
|
|
"team",
|
|
|
|
|
"role",
|
|
|
|
|
"created_at",
|
|
|
|
|
"updated_at",
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2024-02-07 18:03:12 +01:00
|
|
|
@admin.register(models.Invitation)
|
|
|
|
|
class InvitationAdmin(admin.ModelAdmin):
|
|
|
|
|
"""Admin interface to handle invitations."""
|
|
|
|
|
|
|
|
|
|
fields = (
|
|
|
|
|
"email",
|
|
|
|
|
"team",
|
|
|
|
|
"role",
|
|
|
|
|
"created_at",
|
|
|
|
|
"issuer",
|
|
|
|
|
)
|
|
|
|
|
readonly_fields = (
|
|
|
|
|
"created_at",
|
|
|
|
|
"is_expired",
|
|
|
|
|
"issuer",
|
|
|
|
|
)
|
|
|
|
|
list_display = (
|
|
|
|
|
"email",
|
|
|
|
|
"team",
|
|
|
|
|
"created_at",
|
|
|
|
|
"is_expired",
|
|
|
|
|
)
|
|
|
|
|
|
2024-03-06 16:24:28 +01:00
|
|
|
def get_readonly_fields(self, request, obj=None):
|
|
|
|
|
if obj:
|
|
|
|
|
# all fields read only = disable update
|
|
|
|
|
return self.fields
|
|
|
|
|
return self.readonly_fields
|
|
|
|
|
|
|
|
|
|
def change_view(self, request, object_id, form_url="", extra_context=None):
|
|
|
|
|
"""Custom edit form. Remove 'save' buttons."""
|
|
|
|
|
extra_context = extra_context or {}
|
|
|
|
|
extra_context["show_save_and_continue"] = False
|
|
|
|
|
extra_context["show_save"] = False
|
|
|
|
|
extra_context["show_save_and_add_another"] = False
|
|
|
|
|
return super().change_view(request, object_id, extra_context=extra_context)
|
|
|
|
|
|
2024-02-07 18:03:12 +01:00
|
|
|
def save_model(self, request, obj, form, change):
|
|
|
|
|
obj.issuer = request.user
|
|
|
|
|
obj.save()
|