You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
3.0 KiB
87 lines
3.0 KiB
from django.contrib import admin
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from unfold.admin import ModelAdmin
|
|
from unfold.contrib.filters.admin import (
|
|
ChoicesDropdownFilter,
|
|
MultipleRelatedDropdownFilter,
|
|
RangeDateFilter,
|
|
)
|
|
|
|
from utils.admin import project_admin_site
|
|
from apps.course.models import (
|
|
CourseLiveSession,
|
|
LiveSessionRecording,
|
|
LiveSessionUser,
|
|
USER_ROLE_CHOICES,
|
|
RECORDING_TYPE_CHOICES,
|
|
)
|
|
|
|
|
|
class CourseLiveSessionAdmin(ModelAdmin):
|
|
list_display = ("subject", "course", "started_at", "ended_at", "created_at")
|
|
list_filter = (
|
|
("course", MultipleRelatedDropdownFilter),
|
|
("started_at", RangeDateFilter),
|
|
)
|
|
search_fields = ("subject", "course__title")
|
|
ordering = ("-started_at",)
|
|
autocomplete_fields = ("course",)
|
|
readonly_fields = ("created_at", "updated_at")
|
|
fieldsets = (
|
|
(None, {"fields": ("course", "subject", "started_at", "ended_at")}),
|
|
(_("Timestamps"), {"fields": ("created_at", "updated_at")}),
|
|
)
|
|
|
|
|
|
class LiveSessionUserAdmin(ModelAdmin):
|
|
list_display = ("user", "session", "role", "is_online", "entered_at", "exited_at")
|
|
list_filter = (
|
|
("session", MultipleRelatedDropdownFilter),
|
|
("user", MultipleRelatedDropdownFilter),
|
|
("role", ChoicesDropdownFilter),
|
|
("entered_at", RangeDateFilter),
|
|
("is_online", admin.BooleanFieldListFilter),
|
|
)
|
|
search_fields = (
|
|
"user__email",
|
|
"user__fullname",
|
|
"session__subject",
|
|
)
|
|
autocomplete_fields = ("user", "session")
|
|
readonly_fields = ("created_at", "updated_at")
|
|
fieldsets = (
|
|
(None, {"fields": ("session", "user", "role")}),
|
|
(_("Session Timing"), {"fields": ("entered_at", "exited_at", "is_online")}),
|
|
(_("Timestamps"), {"fields": ("created_at", "updated_at")}),
|
|
)
|
|
|
|
def get_role_choices(self, request):
|
|
return USER_ROLE_CHOICES
|
|
|
|
|
|
class LiveSessionRecordingAdmin(ModelAdmin):
|
|
list_display = ("title", "session", "recording_type", "is_active", "created_at")
|
|
list_filter = (
|
|
("session", MultipleRelatedDropdownFilter),
|
|
("recording_type", ChoicesDropdownFilter),
|
|
("created_at", RangeDateFilter),
|
|
("is_active", admin.BooleanFieldListFilter),
|
|
)
|
|
search_fields = ("title", "session__subject", "session__course__title")
|
|
autocomplete_fields = ("session",)
|
|
readonly_fields = ("created_at", "updated_at")
|
|
fieldsets = (
|
|
(None, {"fields": ("session", "title", "recording_type")}),
|
|
(_("Files"), {"fields": ("file", "file_time", "thumbnail")}),
|
|
(_("Status"), {"fields": ("is_active",)}),
|
|
(_("Timestamps"), {"fields": ("created_at", "updated_at")}),
|
|
)
|
|
|
|
def get_recording_type_choices(self, request):
|
|
return RECORDING_TYPE_CHOICES
|
|
|
|
|
|
project_admin_site.register(CourseLiveSession, CourseLiveSessionAdmin)
|
|
project_admin_site.register(LiveSessionUser, LiveSessionUserAdmin)
|
|
project_admin_site.register(LiveSessionRecording, LiveSessionRecordingAdmin)
|