from django.conf import settings from django.views.generic import FormView, ListView, DeleteView from django.urls import reverse_lazy from django.contrib.auth import get_user_model from core.models import AdminProfile from core.forms import AdminEditForm class AdminListView(ListView): template_name = f"{settings.EXPEPHALON_BACKEND}/profiles/index.html" model = AdminProfile def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["title"] = "Administrator Users" return context class AdminEditView(FormView): template_name = f"{settings.EXPEPHALON_BACKEND}/profiles/update.html" form_class = AdminEditForm success_url = reverse_lazy("admins") def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["title"] = "Edit Administrator" return context def get_initial(self): initial = super().get_initial() admin = get_user_model().objects.get(id=self.kwargs["pk"]) assert type(admin.profile) == AdminProfile initial["first_name"] = admin.first_name initial["last_name"] = admin.last_name initial["email"] = admin.username initial["mobile"] = admin.profile.mobile initial["role"] = admin.profile.role initial["display_name"] = admin.profile.display_name return initial def form_valid(self, form): admin = get_user_model().objects.get(id=self.kwargs["pk"]) admin.first_name = form.cleaned_data["first_name"] admin.last_name = form.cleaned_data["last_name"] admin.username = form.cleaned_data["email"] admin.email = form.cleaned_data["email"] admin.profile.mobile = form.cleaned_data["mobile"] admin.profile.role = form.cleaned_data["role"] admin.profile.display_name = form.cleaned_data["display_name"] if form.cleaned_data["image"] or form.cleaned_data["remove_image"]: admin.profile.image = form.cleaned_data["image"] admin.profile.save() admin.save() return super().form_valid(form) class AdminDeleteView(DeleteView): template_name = f"{settings.EXPEPHALON_BACKEND}/profiles/delete.html" model = get_user_model() success_url = reverse_lazy("admins") def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["title"] = "Delete Administrator" return context def get_object(self, queryset=None): admin = super().get_object(queryset=queryset) assert type(admin.profile) == AdminProfile return admin class AdminCreateView(FormView): template_name = f"{settings.EXPEPHALON_BACKEND}/profiles/create.html" model = get_user_model() success_url = reverse_lazy("admins") fields = ["key", "value"] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["title"] = "Create Administrator" return context