From f85743ad95cef74590695a0fd0d66f2c19514c3b Mon Sep 17 00:00:00 2001 From: Grollicus <cccvgitlab.db5c7b60@grollmann.eu> Date: Fri, 18 Aug 2023 17:55:16 +0200 Subject: [PATCH] edit static page, delete static page --- src/backoffice/forms.py | 6 ++ .../locale/de/LC_MESSAGES/django.po | 22 ++++++- .../locale/en/LC_MESSAGES/django.po | 22 ++++++- .../backoffice/staticpage_detail.html | 10 +++- .../templates/backoffice/staticpage_form.html | 29 ---------- src/backoffice/urls.py | 2 +- src/backoffice/views/pages.py | 58 +++++-------------- 7 files changed, 67 insertions(+), 82 deletions(-) delete mode 100644 src/backoffice/templates/backoffice/staticpage_form.html diff --git a/src/backoffice/forms.py b/src/backoffice/forms.py index 6c1aef84c..c4a6863bd 100644 --- a/src/backoffice/forms.py +++ b/src/backoffice/forms.py @@ -506,6 +506,12 @@ class CreateAssemblyRoomLinkForm(forms.ModelForm): fields = ['name', 'link_type', 'link'] +class StaticPageEditForm(forms.ModelForm): + class Meta: + model = StaticPage + fields = ['protection', 'privacy'] + + class StaticPageCreateForm(forms.ModelForm): class Meta: model = StaticPage diff --git a/src/backoffice/locale/de/LC_MESSAGES/django.po b/src/backoffice/locale/de/LC_MESSAGES/django.po index 2b50d473b..3f43e97c3 100644 --- a/src/backoffice/locale/de/LC_MESSAGES/django.po +++ b/src/backoffice/locale/de/LC_MESSAGES/django.po @@ -104,9 +104,6 @@ msgstr "Hangar-Zugriff" msgid "Room-hangar_backend_link__help" msgstr "Private FTP-Zugang um Dateien im Hangar abzulegen" -msgid "StaticPage__cannot_publish_draft" -msgstr "eine als Entwurf markierte Revision kann nicht veröffentlicht werden" - msgid "Event--schedule_end--after_conference_end" msgstr "Muss mit der Konferenz enden!" @@ -845,9 +842,22 @@ msgstr "Hiermit wird diese Selforganized Session gelöscht. Wenn du sie nur unsi msgid "Event--sos-delete-confirm" msgstr "Diese Selforganized Session wirklich löschen?" +msgid "StaticPage--delete-confirm" +msgstr "Diese Seite und zugehörige Historie wirklich löschen?" + msgid "StaticPage" msgstr "statische Seite" +msgid "StaticPage--delete-page" +msgstr "Seite löschen" + +msgid "StaticPage--revisions" +msgstr "Versionen" + +#, python-format +msgid "StaticPage--preview %(object.public_revision)s" +msgstr "Aktuell veröffentlichte Version: %(object.public_revision)s" + msgid "StaticPages" msgstr "statische Seiten" @@ -857,6 +867,9 @@ msgstr "Kurzname" msgid "StaticPage__title" msgstr "Überschrift" +msgid "StaticPage__language" +msgstr "Sprache" + msgid "StaticPage__last_edited_by" msgstr "Zuletzt Von" @@ -1254,6 +1267,9 @@ msgstr "Projekte" msgid "StaticPage__slug__duplicate" msgstr "Dieser Kurzname wird bereits verwendet." +msgid "StaticPage--deleted" +msgstr "Statische Seite und zugehörige Historie gelöscht." + msgid "userprofile_updated" msgstr "Benutzerprofil aktualisiert" diff --git a/src/backoffice/locale/en/LC_MESSAGES/django.po b/src/backoffice/locale/en/LC_MESSAGES/django.po index cbee3127c..80fb5e090 100644 --- a/src/backoffice/locale/en/LC_MESSAGES/django.po +++ b/src/backoffice/locale/en/LC_MESSAGES/django.po @@ -104,9 +104,6 @@ msgstr "Hangar Access" msgid "Room-hangar_backend_link__help" msgstr "your private ftp access to put files on your hangar" -msgid "StaticPage__cannot_publish_draft" -msgstr "Cannot publish a revision marked as draft." - msgid "Event--schedule_end--after_conference_end" msgstr "Must end with the conference!" @@ -844,9 +841,22 @@ msgstr "This removes this selforganized session. If you only want to hide it for msgid "Event--sos-delete-confirm" msgstr "Are you sure you want to remove this selforganized session?" +msgid "StaticPage--delete-confirm" +msgstr "Are you sure you want to remove this Static Page session? All revisions and all stored history will be removed as well!" + msgid "StaticPage" msgstr "static page" +msgid "StaticPage--delete-page" +msgstr "Delete Page" + +msgid "StaticPage--revisions" +msgstr "Versionen" + +#, python-format +msgid "StaticPage--preview %(object.public_revision)s" +msgstr "Preview of currently published version %(object.public_revision)s" + msgid "StaticPages" msgstr "Static Pages" @@ -856,6 +866,9 @@ msgstr "Slug" msgid "StaticPage__title" msgstr "Title" +msgid "StaticPage__language" +msgstr "Language" + msgid "StaticPage__last_edited_by" msgstr "Last modified by" @@ -1252,6 +1265,9 @@ msgstr "Projects" msgid "StaticPage__slug__duplicate" msgstr "This slug is already in use on another page." +msgid "StaticPage--deleted" +msgstr "StaticPage and all corresponding revisions deleted." + msgid "userprofile_updated" msgstr "user profile updated" diff --git a/src/backoffice/templates/backoffice/staticpage_detail.html b/src/backoffice/templates/backoffice/staticpage_detail.html index 10d3db147..a55697db5 100644 --- a/src/backoffice/templates/backoffice/staticpage_detail.html +++ b/src/backoffice/templates/backoffice/staticpage_detail.html @@ -4,13 +4,17 @@ {% block content %} +<form action="{% url 'backoffice:page-delete' pk=object.pk %}" method="POST" id="delete_page" onsubmit="return confirm('{% trans 'StaticPage--delete-confirm' %}')"> + {% csrf_token %} +</form> + + <form action="{% url 'backoffice:page-detail' pk=object.pk %}" method="POST"> {% csrf_token %} <div class="card"> <div class="card-header">{% trans 'StaticPage' %} {{ object.pk }}</div> <div class="card-body"> - <p>Slug: <strong>{{ object.slug }}</strong> (<a href="{% url 'backoffice:page-edit' pk=object.pk %}">edit</a>)</p> <p>Revision: <strong>{{ object.newest_revision.revision }}</strong>{% if object.newest_revision.revision != object.public_version %} (public: {{ object.public_revision }}){% endif %}</p> {% if form.errors %} <div class="row"><div class="col-md-12"> @@ -22,15 +26,15 @@ {% bootstrap_form form %} </div> <div class="card-footer text-right"> + <button type="submit" class="btn btn-danger" form="delete_page">{% trans "StaticPage--delete-page" %}</button> <button type="submit" class="btn btn-primary">{% trans "assemblyedit_submitbtn" %}</button> </div> </div> - </form> {% if object.public_revision > 0 %} <div class="card mt-3"> - <div class="card-header">preview: published rev. {{ object.public_revision }}</div> + <div class="card-header">{% blocktranslate %}StaticPage--preview {{ object.public_revision }}{% endblocktranslate%}</div> <div class="card-body"> {{ object.body_html|safe }} </div> diff --git a/src/backoffice/templates/backoffice/staticpage_form.html b/src/backoffice/templates/backoffice/staticpage_form.html deleted file mode 100644 index b3f29e68e..000000000 --- a/src/backoffice/templates/backoffice/staticpage_form.html +++ /dev/null @@ -1,29 +0,0 @@ -{% extends 'backoffice/base.html' %} -{% load bootstrap4 %} -{% load i18n %} - -{% block content %} - -<form action="#" method="POST"> -{% csrf_token %} - -<div class="card"> - <div class="card-header">{% trans 'StaticPage' %} {{ object.pk }}</div> - <div class="card-body"> - {% if form.errors %} - <div class="row"><div class="col-md-12"> - <div class="alert alert-danger"> - {{ form.errors }} - </div> - </div></div> - {% endif %} - {% bootstrap_form form %} - </div> -</div> - -<div class="row"><div class="col-md-12 text-right mb-5"> - <button type="submit" class="btn btn-primary">{% trans "assemblyedit_submitbtn" %}</button> -</div> -</form> - -{% endblock %} \ No newline at end of file diff --git a/src/backoffice/urls.py b/src/backoffice/urls.py index 70738b5c4..ae8275233 100644 --- a/src/backoffice/urls.py +++ b/src/backoffice/urls.py @@ -44,8 +44,8 @@ urlpatterns = [ path('pages', pages.PagesView.as_view(), name='pages'), path('page/new', pages.NewPageView.as_view(), name='page-new'), - path('page/<uuid:pk>/edit', pages.EditPageView.as_view(), name='page-edit'), path('page/<uuid:pk>', pages.PageView.as_view(), name='page-detail'), + path('page/<uuid:pk>/delete', pages.PageDeleteView.as_view(), name='page-delete'), path('assemblies', assemblyteam.AssembliesView.as_view(), name='assemblies'), path('assemblies/list/<str:variant>', assemblyteam.AssembliesListsView.as_view(), name='assemblieslist'), diff --git a/src/backoffice/views/pages.py b/src/backoffice/views/pages.py index 0bb7922bd..d040e329e 100644 --- a/src/backoffice/views/pages.py +++ b/src/backoffice/views/pages.py @@ -10,13 +10,13 @@ from django.db.models.expressions import F from django.db.models.functions import JSONObject from django.shortcuts import redirect from django.views.generic import FormView, ListView -from django.views.generic.edit import CreateView, UpdateView -from django.urls import reverse +from django.views.generic.edit import UpdateView, DeleteView +from django.urls import reverse, reverse_lazy from django.utils.translation import gettext_lazy as _, get_language from core.models import StaticPage, StaticPageRevision -from ..forms import StaticPageCreateForm +from ..forms import StaticPageCreateForm, StaticPageEditForm from .mixins import ConferenceMixin @@ -95,38 +95,14 @@ class NewPageView(ConferenceMixin, FormView): return reverse('backoffice:page-detail', kwargs={'pk': self.object.pk}) -class PageView(ConferenceMixin, FormView): +class PageView(ConferenceMixin, UpdateView): permission_required = ('core.static_pages') - form_class = StaticPageForm + form_class = StaticPageEditForm template_name = 'backoffice/staticpage_detail.html' require_conference = True - def dispatch(self, *args, **kwargs): - self.object = StaticPage.objects.accessible_by_user(self.request.user, self.conference, language=get_language()).get(pk=kwargs.get('pk')) - return super().dispatch(*args, **kwargs) - - def get_initial(self): - if (rev := self.object.newest_revision) is None: - return None - - initial = {'title': rev.title, 'is_draft': rev.is_draft, 'public': False, 'body': rev.body} - return initial - - def form_valid(self, form): - if not form.has_changed(): - return redirect(self.get_success_url()) - - rev = form.save(commit=False) - rev.page = self.object - rev.save() - messages.success(self.request, f'Saved revision {rev.revision} of page {self.conference.slug}/{self.object.slug}') - - if form.cleaned_data['publish']: - rev.set_public() - messages.success(self.request, f'Made revision {rev.revision} of page {self.conference.slug}/{self.object.slug} public.') - self.object.refresh_from_db() - - return redirect(self.get_success_url()) + def get_object(self): + return StaticPage.objects.accessible_by_user(self.request.user, self.conference, language=None).get(pk=self.kwargs.get('pk')) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) @@ -138,20 +114,16 @@ class PageView(ConferenceMixin, FormView): return reverse('backoffice:page-detail', kwargs={'pk': self.object.pk}) -class EditPageView(ConferenceMixin, UpdateView): +class PageDeleteView(ConferenceMixin, DeleteView): permission_required = ('core.static_pages') model = StaticPage - fields = ['slug', 'public_revision'] - template_name = 'backoffice/staticpage_form.html' + success_url = reverse_lazy('backoffice:pages') require_conference = True - def get_queryset(self, *args, **kwargs): - return StaticPage.objects.accessible_by_user(conference=self.conference, user=self.request.user, language=get_language()) + def get_object(self): + return StaticPage.objects.accessible_by_user(self.request.user, self.conference, language=None).get(pk=self.kwargs.get('pk')) - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - context['active_page'] = 'pages' - return context - - def get_success_url(self, *args, **kwargs): - return reverse('backoffice:page-detail', kwargs={'pk': self.kwargs['pk']}) + def form_valid(self, form): + res = super().form_valid(form) + messages.success(self.request, _("StaticPage--deleted")) + return res -- GitLab