Skip to content
Snippets Groups Projects
Commit 2f9789a8 authored by Benjamin Hättasch's avatar Benjamin Hättasch
Browse files

Introduce generic admin action view with form & adapt orga message deletion

Introduce a new generic view that can be used for all admin actions that require a preview/confirmation or a form to specify parameters
Change AK Orga Message deletion view to use this generic view instead of a manually adapted delete view
parent 1133ded4
No related branches found
No related tags found
No related merge requests found
...@@ -68,3 +68,7 @@ class NewEventWizardActivateForm(forms.ModelForm): ...@@ -68,3 +68,7 @@ class NewEventWizardActivateForm(forms.ModelForm):
class Meta: class Meta:
fields = ["active"] fields = ["active"]
model = Event model = Event
class AdminIntermediateForm(forms.Form):
pass
{% extends "admin/base_site.html" %}
{% load tags_AKModel %}
{% load i18n %}
{% load bootstrap4 %}
{% load fontawesome_5 %}
{% block title %}{{event}}: {{ title }}{% endblock %}
{% block content %}
{% block action_preview %}
<p>
{{ preview|linebreaksbr }}
</p>
{% endblock %}
<form method="post">{% csrf_token %}
{% bootstrap_form form %}
<div class="float-right">
<button type="submit" class="save btn btn-success" value="Submit">
{% fa5_icon "check" 'fas' %} {% trans "Confirm" %}
</button>
</div>
<a href="javascript:history.back()" class="btn btn-info">
{% fa5_icon "times" 'fas' %} {% trans "Cancel" %}
</a>
</form>
{% endblock %}
{% extends "admin/base_site.html" %} {% extends "admin/AKModel/action_intermediate.html" %}
{% load tags_AKModel %} {% load tags_AKModel %}
{% load i18n %} {% load i18n %}
{% load fontawesome_5 %} {% load fontawesome_5 %}
{% block title %}{{event}}: {% trans "Delete Orga-Messages" %}{% endblock %} {% block action_preview %}
{% block content %}
<h2>{% trans "Delete AK Orga Messages" %}</h2>
<p>{% blocktrans with message_count=ak_messages.count %}Are you sure you want to delete all orga messages for {{ event }}? This will permanently delete {{ message_count }} message(s):{% endblocktrans %}</p> <p>{% blocktrans with message_count=ak_messages.count %}Are you sure you want to delete all orga messages for {{ event }}? This will permanently delete {{ message_count }} message(s):{% endblocktrans %}</p>
{% include "admin/AKModel/render_ak_messages.html" %} {% include "admin/AKModel/render_ak_messages.html" %}
<form method="post">{% csrf_token %}
<button type="submit" class="save btn btn-danger float-right" value="Confirm">
{% fa5_icon "check" 'fas' %} {% trans "Delete" %}
</button>
<a href="{% url 'admin:event_status' slug=event.slug %}" class="btn btn-info">
{% fa5_icon "times" 'fas' %} {% trans "Cancel" %}
</a>
</form>
{% endblock %} {% endblock %}
...@@ -115,7 +115,7 @@ ...@@ -115,7 +115,7 @@
<div class="col-md-4"> <div class="col-md-4">
<h3 class="block-header">{% trans "Messages" %}</h3> <h3 class="block-header">{% trans "Messages" %}</h3>
{% include "admin/AKModel/render_ak_messages.html" %} {% include "admin/AKModel/render_ak_messages.html" %}
<a class="btn btn-danger" href="{% url 'admin:ak_delete_orga_messages' slug=event.slug %}">{% trans "Delete all messages" %}</a> <a class="btn btn-danger" href="{% url 'admin:ak_delete_orga_messages' event_slug=event.slug %}">{% trans "Delete all messages" %}</a>
</div> </div>
</div> </div>
{% endtimezone %} {% endtimezone %}
......
...@@ -79,7 +79,7 @@ def get_admin_urls_event(admin_site): ...@@ -79,7 +79,7 @@ def get_admin_urls_event(admin_site):
name="ak_csv_export"), name="ak_csv_export"),
path('<slug:slug>/ak-wiki-export/', admin_site.admin_view(AKWikiExportView.as_view()), path('<slug:slug>/ak-wiki-export/', admin_site.admin_view(AKWikiExportView.as_view()),
name="ak_wiki_export"), name="ak_wiki_export"),
path('<slug:slug>/delete-orga-messages/', admin_site.admin_view(AKMessageDeleteView.as_view()), path('<slug:event_slug>/delete-orga-messages/', admin_site.admin_view(AKMessageDeleteView.as_view()),
name="ak_delete_orga_messages"), name="ak_delete_orga_messages"),
path('<slug:event_slug>/ak-slide-export/', export_slides, name="ak_slide_export"), path('<slug:event_slug>/ak-slide-export/', export_slides, name="ak_slide_export"),
......
from abc import ABC, abstractmethod
from itertools import zip_longest from itertools import zip_longest
from django.contrib import admin, messages from django.contrib import admin, messages
...@@ -11,7 +12,7 @@ from django_tex.shortcuts import render_to_pdf ...@@ -11,7 +12,7 @@ from django_tex.shortcuts import render_to_pdf
from rest_framework import viewsets, permissions, mixins from rest_framework import viewsets, permissions, mixins
from AKModel.forms import NewEventWizardStartForm, NewEventWizardSettingsForm, NewEventWizardPrepareImportForm, \ from AKModel.forms import NewEventWizardStartForm, NewEventWizardSettingsForm, NewEventWizardPrepareImportForm, \
NewEventWizardImportForm, NewEventWizardActivateForm NewEventWizardImportForm, NewEventWizardActivateForm, AdminIntermediateForm
from AKModel.models import Event, AK, AKSlot, Room, AKTrack, AKCategory, AKOwner, AKOrgaMessage, AKRequirement from AKModel.models import Event, AK, AKSlot, Room, AKTrack, AKCategory, AKOwner, AKOrgaMessage, AKRequirement
from AKModel.serializers import AKSerializer, AKSlotSerializer, RoomSerializer, AKTrackSerializer, AKCategorySerializer, \ from AKModel.serializers import AKSerializer, AKSlotSerializer, RoomSerializer, AKTrackSerializer, AKCategorySerializer, \
AKOwnerSerializer AKOwnerSerializer
...@@ -194,22 +195,43 @@ class AKWikiExportView(AdminViewMixin, DetailView): ...@@ -194,22 +195,43 @@ class AKWikiExportView(AdminViewMixin, DetailView):
return context return context
class AKMessageDeleteView(AdminViewMixin, DeleteView): class IntermediateAdminView(AdminViewMixin, FormView, ABC):
model = Event template_name = "admin/AKModel/action_intermediate.html"
form_class = AdminIntermediateForm
@abstractmethod
def get_preview(self):
pass
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = self.title
context["preview"] = self.get_preview()
return context
class AKMessageDeleteView(EventSlugMixin, IntermediateAdminView):
template_name = "admin/AKModel/message_delete.html" template_name = "admin/AKModel/message_delete.html"
title = _("Delete AK Orga Messages")
def get_orga_messages_for_event(self, event): def get_orga_messages_for_event(self, event):
return AKOrgaMessage.objects.filter(ak__event=event) return AKOrgaMessage.objects.filter(ak__event=event)
def get_preview(self):
return None
def get_success_url(self):
return reverse_lazy('admin:event_status', kwargs={'slug': self.event.slug})
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context["ak_messages"] = self.get_orga_messages_for_event(self.get_object()) context["ak_messages"] = self.get_orga_messages_for_event(self.event)
return context return context
def post(self, request, *args, **kwargs): def form_valid(self, form):
self.get_orga_messages_for_event(self.get_object()).delete() self.get_orga_messages_for_event(self.event).delete()
messages.add_message(self.request, messages.SUCCESS, _("AK Orga Messages successfully deleted")) messages.add_message(self.request, messages.SUCCESS, _("AK Orga Messages successfully deleted"))
return HttpResponseRedirect(reverse_lazy('admin:event_status', kwargs={'slug': self.get_object().slug})) return super().form_valid(form)
class WizardViewMixin: class WizardViewMixin:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment