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 0000000000000000000000000000000000000000..effa2c9aee5479a0151cf5d2003227e663ff5efd --- /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 ea418491aa477feca741fcdb8fe513f7e4f211db..66d0c2cb05fa32a0b0072e0931b1de2814e32ea2 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 0000000000000000000000000000000000000000..b1dbda32522718b190283e8a7b9f86f5a5e65d25 --- /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 86c2fc88a018231af60ab19772cf1786945883fe..aea1b58abb91513c0f8a8b06d94c81fa22f67b71 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 dde7bdfe310fca31cc3e4f0ebc15fb78f0bd4755..d9cb28cd8cbda2b151f1929972071b1d640a7390 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."""