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
Branches
No related tags found
No related merge requests found
......@@ -68,3 +68,7 @@ class NewEventWizardActivateForm(forms.ModelForm):
class Meta:
fields = ["active"]
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 i18n %}
{% load fontawesome_5 %}
{% block title %}{{event}}: {% trans "Delete Orga-Messages" %}{% endblock %}
{% block content %}
<h2>{% trans "Delete AK Orga Messages" %}</h2>
{% block action_preview %}
<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" %}
<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 %}
......@@ -115,7 +115,7 @@
<div class="col-md-4">
<h3 class="block-header">{% trans "Messages" %}</h3>
{% 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>
{% endtimezone %}
......
......@@ -79,7 +79,7 @@ def get_admin_urls_event(admin_site):
name="ak_csv_export"),
path('<slug:slug>/ak-wiki-export/', admin_site.admin_view(AKWikiExportView.as_view()),
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"),
path('<slug:event_slug>/ak-slide-export/', export_slides, name="ak_slide_export"),
......
from abc import ABC, abstractmethod
from itertools import zip_longest
from django.contrib import admin, messages
......@@ -11,7 +12,7 @@ from django_tex.shortcuts import render_to_pdf
from rest_framework import viewsets, permissions, mixins
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.serializers import AKSerializer, AKSlotSerializer, RoomSerializer, AKTrackSerializer, AKCategorySerializer, \
AKOwnerSerializer
......@@ -194,22 +195,43 @@ class AKWikiExportView(AdminViewMixin, DetailView):
return context
class AKMessageDeleteView(AdminViewMixin, DeleteView):
model = Event
class IntermediateAdminView(AdminViewMixin, FormView, ABC):
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"
title = _("Delete AK Orga Messages")
def get_orga_messages_for_event(self, 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):
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
def post(self, request, *args, **kwargs):
self.get_orga_messages_for_event(self.get_object()).delete()
def form_valid(self, form):
self.get_orga_messages_for_event(self.event).delete()
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:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment