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