From 85741772e1b2d0f750f8fb17849f13bee1456d80 Mon Sep 17 00:00:00 2001 From: Agate Date: Wed, 6 Jul 2022 15:04:14 +0200 Subject: [PATCH] manager: support for setting labels on page snapshots (#56519) --- .../migrations/0057_pagesnapshot_label.py | 18 ++++++++ combo/data/models.py | 1 + combo/manager/forms.py | 8 +++- .../manager/templates/combo/page_history.html | 41 ++++++++++++++----- .../templates/combo/snapshot_set_label.html | 26 ++++++++++++ combo/manager/urls.py | 5 +++ combo/manager/views.py | 17 ++++++++ tests/test_manager.py | 7 ++++ 8 files changed, 112 insertions(+), 11 deletions(-) create mode 100644 combo/data/migrations/0057_pagesnapshot_label.py create mode 100644 combo/manager/templates/combo/snapshot_set_label.html diff --git a/combo/data/migrations/0057_pagesnapshot_label.py b/combo/data/migrations/0057_pagesnapshot_label.py new file mode 100644 index 00000000..886f7d26 --- /dev/null +++ b/combo/data/migrations/0057_pagesnapshot_label.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.26 on 2022-07-06 12:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('data', '0056_display_condition'), + ] + + operations = [ + migrations.AddField( + model_name='pagesnapshot', + name='label', + field=models.CharField(blank=True, max_length=150, verbose_name='Label'), + ), + ] diff --git a/combo/data/models.py b/combo/data/models.py index 92648b9e..cff266d5 100644 --- a/combo/data/models.py +++ b/combo/data/models.py @@ -717,6 +717,7 @@ class PageSnapshot(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True) comment = models.TextField(blank=True, null=True) serialization = JSONField(blank=True, default=dict) + label = models.CharField(_('Label'), max_length=150, blank=True) class Meta: ordering = ('-timestamp',) diff --git a/combo/manager/forms.py b/combo/manager/forms.py index 0baf6f8f..e67b5bb0 100644 --- a/combo/manager/forms.py +++ b/combo/manager/forms.py @@ -26,7 +26,7 @@ from django.template.loader import TemplateDoesNotExist, get_template from django.utils.translation import ugettext_lazy as _ from combo.data.forms import get_page_choices -from combo.data.models import Page, ParentContentCell, SiteSettings, compile_sub_slug +from combo.data.models import Page, PageSnapshot, ParentContentCell, SiteSettings, compile_sub_slug from .fields import ImageIncludingSvgField @@ -408,3 +408,9 @@ class PlaceholderOptionsForm(forms.Form): ('fx-grid--t3', _('3 columns')), ], ) + + +class PageSnapshotSetLabelForm(forms.ModelForm): + class Meta: + model = PageSnapshot + fields = ['label'] diff --git a/combo/manager/templates/combo/page_history.html b/combo/manager/templates/combo/page_history.html index de324f53..616a81fb 100644 --- a/combo/manager/templates/combo/page_history.html +++ b/combo/manager/templates/combo/page_history.html @@ -16,16 +16,37 @@ {% block content %}
- + + + + + + + + + + {% for snapshot in object_list %} + + + + + + + + {% endfor %} + +
{% trans 'Date' %}{% trans 'Description' %}{% trans 'User' %}{% trans 'Label' %}{% trans 'Actions' %}
+ {{ snapshot.timestamp }} + + {{ snapshot.comment }} + {% if snapshot.user %} ({{ snapshot.user.get_full_name }}){% endif %} + {% if snapshot.label %}{{ snapshot.label }}{% endif %} + + {% trans "view" %} + — {% trans "export" %} + — {% trans "restore" %} + — {% trans "set label" %} +
{% include "gadjo/pagination.html" %} diff --git a/combo/manager/templates/combo/snapshot_set_label.html b/combo/manager/templates/combo/snapshot_set_label.html new file mode 100644 index 00000000..bd2ed6fc --- /dev/null +++ b/combo/manager/templates/combo/snapshot_set_label.html @@ -0,0 +1,26 @@ +{% extends "combo/manager_base.html" %} +{% load i18n %} +{% load cells %} +{% load thumbnail %} + +{% block appbar %} +

{% trans 'Snapshot Set Label' %} - {{ snapshot.page.title }}

+{% endblock %} + +{% block breadcrumb %} + {{ block.super }} + {% trans 'Page' %} - {{page.title }} + {% trans "History" %} + {% trans "Snapshot Set Label" %} +{% endblock %} + +{% block content %} +
+ {% csrf_token %} + {{ form.as_p }} +
+ + {% trans 'Cancel' %} +
+
+{% endblock %} diff --git a/combo/manager/urls.py b/combo/manager/urls.py index 79ff209b..2e65133e 100644 --- a/combo/manager/urls.py +++ b/combo/manager/urls.py @@ -101,6 +101,11 @@ urlpatterns = [ pages_admin_required(views.snapshot_export), name='combo-manager-snapshot-export', ), + url( + r'^pages/(?P\d+)/history/(?P\d+)/set-label$', + pages_admin_required(views.snapshot_set_label), + name='combo-manager-snapshot-set-label', + ), url( r'^pages/(?P\d+)/add-cell-to-(?P[\w_-]+)/(?P\w+)/(?P[\w-]+)/$', views.page_add_cell, diff --git a/combo/manager/views.py b/combo/manager/views.py index a789008e..2fd02f9b 100644 --- a/combo/manager/views.py +++ b/combo/manager/views.py @@ -36,6 +36,7 @@ from django.http import ( ) from django.shortcuts import get_object_or_404, redirect, render from django.template import engines +from django.template.response import TemplateResponse from django.urls import reverse, reverse_lazy from django.utils.encoding import force_bytes, force_text from django.utils.formats import date_format @@ -83,6 +84,7 @@ from .forms import ( PageExportForm, PageRestrictedAddForm, PageSelectTemplateForm, + PageSnapshotSetLabelForm, PageVisibilityForm, PlaceholderOptionsForm, SiteExportForm, @@ -644,6 +646,21 @@ def snapshot_export(request, *args, **kwargs): return response +def snapshot_set_label(request, *args, **kwargs): + snapshot = get_object_or_404(PageSnapshot, id=kwargs['pk']) + if request.method == 'POST': + form = PageSnapshotSetLabelForm(instance=snapshot, data=request.POST) + if form.is_valid(): + form.save() + return HttpResponseRedirect( + reverse('combo-manager-page-history', kwargs={'pk': kwargs['page_pk']}) + ) + else: + form = PageSnapshotSetLabelForm(instance=snapshot) + + return TemplateResponse(request, 'combo/snapshot_set_label.html', {'form': form, 'snapshot': snapshot}) + + class PageRedirectToEditView(RedirectView): permanent = False diff --git a/tests/test_manager.py b/tests/test_manager.py index 2a655adc..f87cc45f 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -2500,6 +2500,13 @@ def test_page_versionning(app, admin_user): app.get('/logout/') resp3 = app.get(json_cell_url, status=403) + # add a label to a snapshot + app = login(app) + resp = resp.click('set label', index=4) + resp.form['label'] = 'CGUv1' + resp = resp.form.submit().follow() + assert PageSnapshot.objects.all()[4].label == 'CGUv1' + # restore a snapshot app = login(app) resp = resp.click('restore', index=6) -- 2.36.1