92 lines
2.4 KiB
Python
92 lines
2.4 KiB
Python
from django import forms
|
|
from django.utils.decorators import method_decorator
|
|
from django.views.generic import CreateView, DeleteView, ListView, UpdateView
|
|
|
|
from users.decorators import admin_required
|
|
from users.models import Announcement
|
|
from users.views.admin.generic import HTMXActionView
|
|
|
|
|
|
@method_decorator(admin_required, name="dispatch")
|
|
class AnnouncementsRoot(ListView):
|
|
|
|
template_name = "admin/announcements.html"
|
|
paginate_by = 30
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
self.extra_context = {
|
|
"section": "announcements",
|
|
}
|
|
return super().get(request, *args, **kwargs)
|
|
|
|
def get_queryset(self):
|
|
reports = Announcement.objects.order_by("created")
|
|
return reports
|
|
|
|
|
|
@method_decorator(admin_required, name="dispatch")
|
|
class AnnouncementCreate(CreateView):
|
|
|
|
model = Announcement
|
|
template_name = "admin/announcement_create.html"
|
|
extra_context = {"section": "announcements"}
|
|
success_url = Announcement.urls.admin_root
|
|
|
|
class form_class(forms.ModelForm):
|
|
class Meta:
|
|
model = Announcement
|
|
fields = ["text", "published", "start", "end"]
|
|
widgets = {
|
|
"published": forms.Select(
|
|
choices=[(True, "Published"), (False, "Draft")]
|
|
)
|
|
}
|
|
|
|
|
|
@method_decorator(admin_required, name="dispatch")
|
|
class AnnouncementEdit(UpdateView):
|
|
|
|
model = Announcement
|
|
template_name = "admin/announcement_edit.html"
|
|
extra_context = {"section": "announcements"}
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context["page"] = self.request.GET.get("page")
|
|
return context
|
|
|
|
class form_class(AnnouncementCreate.form_class):
|
|
pass
|
|
|
|
|
|
@method_decorator(admin_required, name="dispatch")
|
|
class AnnouncementDelete(DeleteView):
|
|
|
|
model = Announcement
|
|
template_name = "admin/announcement_delete.html"
|
|
success_url = Announcement.urls.admin_root
|
|
|
|
|
|
class AnnouncementPublish(HTMXActionView):
|
|
"""
|
|
Marks the announcement as published.
|
|
"""
|
|
|
|
model = Announcement
|
|
|
|
def action(self, announcement: Announcement):
|
|
announcement.published = True
|
|
announcement.save()
|
|
|
|
|
|
class AnnouncementUnpublish(HTMXActionView):
|
|
"""
|
|
Marks the announcement as unpublished.
|
|
"""
|
|
|
|
model = Announcement
|
|
|
|
def action(self, announcement: Announcement):
|
|
announcement.published = False
|
|
announcement.save()
|