diff --git a/src/backoffice/locale/de/LC_MESSAGES/django.po b/src/backoffice/locale/de/LC_MESSAGES/django.po index 3f43e97c34f4790f005cd467ce6858f504bf2417..7bd838090ca14219827574b8ce0680869f2c4777 100644 --- a/src/backoffice/locale/de/LC_MESSAGES/django.po +++ b/src/backoffice/locale/de/LC_MESSAGES/django.po @@ -851,9 +851,27 @@ msgstr "statische Seite" msgid "StaticPage--delete-page" msgstr "Seite löschen" +msgid "StaticPageRevision--delete-confirm" +msgstr "Diesen Historieneintrag wirklich löschen?" + msgid "StaticPage--revisions" msgstr "Versionen" +msgid "StaticPageRevision--revision" +msgstr "Version" + +msgid "StaticPageRevision--title" +msgstr "Titel" + +msgid "StaticPageRevision--author" +msgstr "Author" + +msgid "StaticPageRevision--date" +msgstr "Datum" + +msgid "StaticPageRevision--delete" +msgstr "Historieneintrag löschen" + #, python-format msgid "StaticPage--preview %(object.public_revision)s" msgstr "Aktuell veröffentlichte Version: %(object.public_revision)s" @@ -1270,6 +1288,9 @@ msgstr "Dieser Kurzname wird bereits verwendet." msgid "StaticPage--deleted" msgstr "Statische Seite und zugehörige Historie gelöscht." +msgid "StaticPageRevision--deleted" +msgstr "Historieneintrag 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 80fb5e09021499196870e7939eb7d094f8c1c778..26df3953de17dade7c08d25ee901fd7fde5899d8 100644 --- a/src/backoffice/locale/en/LC_MESSAGES/django.po +++ b/src/backoffice/locale/en/LC_MESSAGES/django.po @@ -842,7 +842,7 @@ 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!" +msgstr "Are you sure you want to remove this Static Page? All revisions and all stored history will be removed as well!" msgid "StaticPage" msgstr "static page" @@ -850,8 +850,26 @@ msgstr "static page" msgid "StaticPage--delete-page" msgstr "Delete Page" +msgid "StaticPageRevision--delete-confirm" +msgstr "Are you sure you want to remove this Static Page Revision?" + msgid "StaticPage--revisions" -msgstr "Versionen" +msgstr "Versions" + +msgid "StaticPageRevision--revision" +msgstr "Version" + +msgid "StaticPageRevision--title" +msgstr "Title" + +msgid "StaticPageRevision--author" +msgstr "Author" + +msgid "StaticPageRevision--date" +msgstr "Date" + +msgid "StaticPageRevision--delete" +msgstr "Delete Version" #, python-format msgid "StaticPage--preview %(object.public_revision)s" @@ -1268,6 +1286,9 @@ msgstr "This slug is already in use on another page." msgid "StaticPage--deleted" msgstr "StaticPage and all corresponding revisions deleted." +msgid "StaticPageRevision--deleted" +msgstr "StaticPageRevision 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 a55697db59a98c3eeed1a2919d37c01ed5a8d677..c2fd9e73970407028f23e1c5ac17b49a18daeae4 100644 --- a/src/backoffice/templates/backoffice/staticpage_detail.html +++ b/src/backoffice/templates/backoffice/staticpage_detail.html @@ -32,6 +32,37 @@ </div> </form> +<form method="POST" action="{% url 'backoffice:page-revision-delete' pk=object.pk %}" onsubmit="return confirm('{% trans 'StaticPageRevision--delete-confirm' %}')"> +{% csrf_token %} + +<div class="card mt-2"> + <div class="card-header">{% trans 'StaticPage--revisions' %}</div> + <div class="card-body"> + <table class="table table-sm"> + <thead><tr> + <th>{% trans "StaticPageRevision--revision" %}</th> + <th>{% trans "StaticPageRevision--title" %}</th> + <th>{% trans "StaticPageRevision--author" %}</th> + <th>{% trans "StaticPageRevision--date" %}</th> + <th> </th> + </tr></thead> + <tbody> + {% for revision in revisions %} + <tr> + <td>{{ revision.revision }}</td> + <td>{{ revision.title }}</td> + <td>{{ revision.author | default:"-" }}</td> + <td>{{ revision.timestamp | date:"DATETIME_FORMAT" }}</td> + <td><button class="btn btn-danger btn-sm" type="submit" name="revision" value="{{ revision.revision }}">{% trans "StaticPageRevision--delete" %}</button></td> + </tr> + {% endfor %} + </tbody> + </table> + </div> +</div> +</form> + + {% if object.public_revision > 0 %} <div class="card mt-3"> <div class="card-header">{% blocktranslate %}StaticPage--preview {{ object.public_revision }}{% endblocktranslate%}</div> diff --git a/src/backoffice/urls.py b/src/backoffice/urls.py index ae8275233dff14eacd486dad9c88b7cc0a73cbee..4c23b967fc44f81d95abb134b8ae2d924556f8ff 100644 --- a/src/backoffice/urls.py +++ b/src/backoffice/urls.py @@ -46,6 +46,7 @@ urlpatterns = [ path('page/new', pages.NewPageView.as_view(), name='page-new'), path('page/<uuid:pk>', pages.PageView.as_view(), name='page-detail'), path('page/<uuid:pk>/delete', pages.PageDeleteView.as_view(), name='page-delete'), + path('page/<uuid:pk>/delete-revision', pages.PageRevisionDeleteView.as_view(), name='page-revision-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 d040e329e5530a76c51f2b214ebbb0cfcfd0f09b..745d34450c51ba717f93f9441e50e1d2d13e44c9 100644 --- a/src/backoffice/views/pages.py +++ b/src/backoffice/views/pages.py @@ -108,6 +108,7 @@ class PageView(ConferenceMixin, UpdateView): context = super().get_context_data(**kwargs) context['active_page'] = 'pages' context['object'] = self.object + context['revisions'] = self.object.revisions.filter(is_draft=False).order_by('-timestamp', '-pk') return context def get_success_url(self, *args, **kwargs): @@ -127,3 +128,22 @@ class PageDeleteView(ConferenceMixin, DeleteView): res = super().form_valid(form) messages.success(self.request, _("StaticPage--deleted")) return res + + +class PageRevisionDeleteView(ConferenceMixin, DeleteView): + permission_required = ('core.static_pages') + model = StaticPage + success_url = reverse_lazy('backoffice:pages') + require_conference = True + + def get_object(self): + page = StaticPage.objects.accessible_by_user(self.request.user, self.conference, language=None).get(pk=self.kwargs.get('pk')) + return page.revisions.filter(revision=self.request.POST.get('revision')) + + def get_success_url(self) -> str: + return reverse('backoffice:page-detail', kwargs={'pk': self.kwargs.get('pk')}) + + def form_valid(self, form): + res = super().form_valid(form) + messages.success(self.request, _("StaticPageRevision--deleted")) + return res