From 691131e700b3bc5c558201cf7c3afaeca007f5a9 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Wed, 14 Jul 2021 12:50:03 +0200 Subject: [PATCH] Add view for editing posters --- .../resint/migrations/0004_edit_permission.py | 17 +++++++++++++++++ aleksis/apps/resint/models.py | 1 + .../resint/templates/resint/poster/edit.html | 17 +++++++++++++++++ aleksis/apps/resint/urls.py | 2 ++ aleksis/apps/resint/views.py | 17 +++++++++++++++++ 5 files changed, 54 insertions(+) create mode 100644 aleksis/apps/resint/migrations/0004_edit_permission.py create mode 100644 aleksis/apps/resint/templates/resint/poster/edit.html diff --git a/aleksis/apps/resint/migrations/0004_edit_permission.py b/aleksis/apps/resint/migrations/0004_edit_permission.py new file mode 100644 index 0000000..effa2c9 --- /dev/null +++ b/aleksis/apps/resint/migrations/0004_edit_permission.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.5 on 2021-07-14 10:49 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('resint', '0003_group_in_unique_constraint'), + ] + + operations = [ + migrations.AlterModelOptions( + name='postergroup', + options={'permissions': [('view_poster_of_group', 'Can view all posters of this group'), ('upload_poster_to_group', 'Can upload new posters to this group'), ('change_poster_to_group', 'Can change all posters of this group'), ('delete_poster_of_group', 'Can delete all posters of this group')], 'verbose_name': 'Poster group', 'verbose_name_plural': 'Poster groups'}, + ), + ] diff --git a/aleksis/apps/resint/models.py b/aleksis/apps/resint/models.py index ea41849..66d0c2c 100644 --- a/aleksis/apps/resint/models.py +++ b/aleksis/apps/resint/models.py @@ -44,6 +44,7 @@ class PosterGroup(ExtensibleModel): permissions = [ ("view_poster_of_group", _("Can view all posters of this group")), ("upload_poster_to_group", _("Can upload new posters to this group")), + ("change_poster_to_group", _("Can change all posters of this group")), ("delete_poster_of_group", _("Can delete all posters of this group")), ] diff --git a/aleksis/apps/resint/templates/resint/poster/edit.html b/aleksis/apps/resint/templates/resint/poster/edit.html new file mode 100644 index 0000000..b1dbda3 --- /dev/null +++ b/aleksis/apps/resint/templates/resint/poster/edit.html @@ -0,0 +1,17 @@ +{% extends 'core/base.html' %} +{% load material_form i18n %} + +{% block page_title %} + {% trans "Edit poster" %} +{% endblock %} +{% block browser_title %} + {% trans "Edit poster" %} +{% endblock %} + +{% block content %} + <form method="post" enctype="multipart/form-data"> + {% csrf_token %} + {% form form=form %}{% endform %} + {% include "core/partials/save_button.html" %} + </form> +{% endblock %} diff --git a/aleksis/apps/resint/urls.py b/aleksis/apps/resint/urls.py index 86c2fc8..aea1b58 100644 --- a/aleksis/apps/resint/urls.py +++ b/aleksis/apps/resint/urls.py @@ -3,6 +3,7 @@ from django.urls import path from .views import ( PosterCurrentView, PosterDeleteView, + PosterEditView, PosterGroupCreateView, PosterGroupDeleteView, PosterGroupEditView, @@ -14,6 +15,7 @@ from .views import ( urlpatterns = [ path("", PosterListView.as_view(), name="poster_index"), path("upload/", PosterUploadView.as_view(), name="poster_upload"), + path("<int:pk>/edit/", PosterEditView.as_view(), name="poster_edit"), path("<int:pk>/delete/", PosterDeleteView.as_view(), name="poster_delete"), path("<str:slug>.pdf", PosterCurrentView.as_view(), name="poster_show_current"), path("groups/", PosterGroupListView.as_view(), name="poster_group_list"), diff --git a/aleksis/apps/resint/views.py b/aleksis/apps/resint/views.py index dde7bdf..d9cb28c 100644 --- a/aleksis/apps/resint/views.py +++ b/aleksis/apps/resint/views.py @@ -98,6 +98,23 @@ class PosterUploadView(PermissionRequiredMixin, AdvancedCreateView): form_class = PosterUploadForm permission_required = "resint.upload_poster_rule" + def get_form_kwargs(self) -> Dict[str, Any]: + return {"request": self.request} + + +class PosterEditView(PermissionRequiredMixin, AdvancedEditView): + """Edit an uploaded poster.""" + + model = Poster + success_url = reverse_lazy("poster_index") + template_name = "resint/poster/edit.html" + success_message = _("The poster has been changed.") + form_class = PosterUploadForm + permission_required = "resint.edit_poster_rule" + + def get_form_kwargs(self) -> Dict[str, Any]: + return {"request": self.request} + class PosterDeleteView(PermissionRequiredMixin, AdvancedDeleteView): """Delete an uploaded poster.""" -- GitLab