diff --git a/src/backoffice/forms.py b/src/backoffice/forms.py index 6c1aef84c0ebd2885960c7a7440c4bd9547d456f..c4a6863bd43740701eb2e3c6233fcc6375c8e6ae 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 2b50d473bb6c4e7e603d97a9172eadf383236ad5..3f43e97c34f4790f005cd467ce6858f504bf2417 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 cbee3127cf265bd91a231d370dc544b7ca59703d..80fb5e09021499196870e7939eb7d094f8c1c778 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 10d3db147ab00c349d9e71818976710827d1339f..a55697db59a98c3eeed1a2919d37c01ed5a8d677 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 b3f29e68e6bee2aaef0d55df2356579802b3a6bf..0000000000000000000000000000000000000000 --- 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 70738b5c46a1332f60e16ed5e0915ca015e0b12b..ae8275233dff14eacd486dad9c88b7cc0a73cbee 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 0bb7922bd91afe83c050611babda4b1c6e878e91..d040e329e5530a76c51f2b214ebbb0cfcfd0f09b 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