Projet

Général

Profil

0001-manager-support-for-setting-labels-on-page-snapshots.patch

A. Berriot, 06 juillet 2022 15:04

Télécharger (8,8 ko)

Voir les différences:

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
combo/data/migrations/0057_pagesnapshot_label.py
1
# Generated by Django 2.2.26 on 2022-07-06 12:14
2

  
3
from django.db import migrations, models
4

  
5

  
6
class Migration(migrations.Migration):
7

  
8
    dependencies = [
9
        ('data', '0056_display_condition'),
10
    ]
11

  
12
    operations = [
13
        migrations.AddField(
14
            model_name='pagesnapshot',
15
            name='label',
16
            field=models.CharField(blank=True, max_length=150, null=True, verbose_name='Label'),
17
        ),
18
    ]
combo/data/models.py
717 717
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
718 718
    comment = models.TextField(blank=True, null=True)
719 719
    serialization = JSONField(blank=True, default=dict)
720
    label = models.CharField(_('Label'), max_length=150, blank=True, null=True)
720 721

  
721 722
    class Meta:
722 723
        ordering = ('-timestamp',)
combo/manager/forms.py
26 26
from django.utils.translation import ugettext_lazy as _
27 27

  
28 28
from combo.data.forms import get_page_choices
29
from combo.data.models import Page, ParentContentCell, SiteSettings, compile_sub_slug
29
from combo.data.models import Page, PageSnapshot, ParentContentCell, SiteSettings, compile_sub_slug
30 30

  
31 31
from .fields import ImageIncludingSvgField
32 32

  
......
408 408
            ('fx-grid--t3', _('3 columns')),
409 409
        ],
410 410
    )
411

  
412

  
413
class PageSnapshotSetLabelForm(forms.ModelForm):
414
    class Meta:
415
        model = PageSnapshot
416
        fields = ['label']
combo/manager/templates/combo/page_history.html
16 16
{% block content %}
17 17

  
18 18
<div>
19
<ul class="objects-list">
20
{% for snapshot in object_list %}
21
<li>{{ snapshot.timestamp }}, {{ snapshot.comment }}
22
    {% if snapshot.user %} ({{ snapshot.user.get_full_name }}){% endif %}
23
    — <a href="{% url 'combo-snapshot-view' pk=snapshot.id %}">{% trans "view" %}</a>
24
    — <a href="{% url 'combo-manager-snapshot-export' page_pk=view.page.id pk=snapshot.id %}">{% trans "export" %}</a>
25
    — <a href="{% url 'combo-manager-snapshot-restore' page_pk=view.page.id pk=snapshot.id %}" rel="popup">{% trans "restore" %}</a>
26
</li>
27
{% endfor %}
28
</ul>
19
<table class="main">
20
  <thead>
21
    <th>{% trans 'Date' %}</th>
22
    <th>{% trans 'Description' %}</th>
23
    <th>{% trans 'User' %}</th>
24
    <th>{% trans 'Label' %}</th>
25
    <th>{% trans 'Actions' %}</th>
26
  </thead>
27
  <tbody>
28
   {% for snapshot in object_list %}
29
    <tr>
30
      <td>
31
        {{ snapshot.timestamp }}
32
      </td>
33
      <td>
34
        {{ snapshot.comment }}
35
      </td>
36
      <td>{% if snapshot.user %} ({{ snapshot.user.get_full_name }}){% endif %}</td>
37
      <td>
38
        {% if snapshot.label %}{{ snapshot.label }}{% endif %}
39
      </td>
40
      <td>
41
        <a href="{% url 'combo-snapshot-view' pk=snapshot.id %}">{% trans "view" %}</a>
42
        — <a href="{% url 'combo-manager-snapshot-export' page_pk=view.page.id pk=snapshot.id %}">{% trans "export" %}</a>
43
        — <a href="{% url 'combo-manager-snapshot-restore' page_pk=view.page.id pk=snapshot.id %}" rel="popup">{% trans "restore" %}</a>
44
        — <a href="{% url 'combo-manager-snapshot-set-label' page_pk=view.page.id pk=snapshot.id %}" rel="popup">{% trans "set label" %}</a>
45
      </td>
46
    </tr>
47
    {% endfor %}
48
  </tbody>
49
</table>
29 50

  
30 51
{% include "gadjo/pagination.html" %}
31 52

  
combo/manager/templates/combo/snapshot_set_label.html
1
{% extends "combo/manager_base.html" %}
2
{% load i18n %}
3
{% load cells %}
4
{% load thumbnail %}
5

  
6
{% block appbar %}
7
<h2>{% trans 'Snapshot Set Label' %} - {{ snapshot.page.title }}</h2>
8
{% endblock %}
9

  
10
{% block breadcrumb %}
11
  {{ block.super }}
12
  <a href="{% url 'combo-manager-page-view' pk=snapshot.page.id %}">{% trans 'Page' %} - {{page.title }}</a>
13
  <a href="{% url 'combo-manager-page-history' pk=snapshot.page.id %}">{% trans "History" %}</a>
14
  <a href="{% url 'combo-manager-snapshot-set-label' page_pk=snapshot.page.id pk=snapshot.id %}">{% trans "Snapshot Set Label" %}</a>
15
{% endblock %}
16

  
17
{% block content %}
18
<form method="post">
19
  {% csrf_token %}
20
  {{ form.as_p }}
21
  <div class="buttons">
22
    <button class="submit-button">{% trans 'Save' %}</button>
23
    <a class="cancel" href="{% url 'combo-manager-page-history' pk=snapshot.page.id %}">{% trans 'Cancel' %}</a>
24
  </div>
25
</form>
26
{% endblock %}
combo/manager/urls.py
101 101
        pages_admin_required(views.snapshot_export),
102 102
        name='combo-manager-snapshot-export',
103 103
    ),
104
    url(
105
        r'^pages/(?P<page_pk>\d+)/history/(?P<pk>\d+)/set-label$',
106
        pages_admin_required(views.snapshot_set_label),
107
        name='combo-manager-snapshot-set-label',
108
    ),
104 109
    url(
105 110
        r'^pages/(?P<page_pk>\d+)/add-cell-to-(?P<ph_key>[\w_-]+)/(?P<cell_type>\w+)/(?P<variant>[\w-]+)/$',
106 111
        views.page_add_cell,
combo/manager/views.py
36 36
)
37 37
from django.shortcuts import get_object_or_404, redirect, render
38 38
from django.template import engines
39
from django.template.response import TemplateResponse
39 40
from django.urls import reverse, reverse_lazy
40 41
from django.utils.encoding import force_bytes, force_text
41 42
from django.utils.formats import date_format
......
83 84
    PageExportForm,
84 85
    PageRestrictedAddForm,
85 86
    PageSelectTemplateForm,
87
    PageSnapshotSetLabelForm,
86 88
    PageVisibilityForm,
87 89
    PlaceholderOptionsForm,
88 90
    SiteExportForm,
......
644 646
    return response
645 647

  
646 648

  
649
def snapshot_set_label(request, *args, **kwargs):
650
    snapshot = get_object_or_404(PageSnapshot, id=kwargs['pk'])
651
    if request.method == 'POST':
652
        form = PageSnapshotSetLabelForm(instance=snapshot, data=request.POST)
653
        if form.is_valid():
654
            form.save()
655
            return HttpResponseRedirect(
656
                reverse('combo-manager-page-history', kwargs={'pk': kwargs['page_pk']})
657
            )
658
    else:
659
        form = PageSnapshotSetLabelForm(instance=snapshot)
660

  
661
    return TemplateResponse(request, 'combo/snapshot_set_label.html', {'form': form, 'snapshot': snapshot})
662

  
663

  
647 664
class PageRedirectToEditView(RedirectView):
648 665
    permanent = False
649 666

  
tests/test_manager.py
2500 2500
        app.get('/logout/')
2501 2501
        resp3 = app.get(json_cell_url, status=403)
2502 2502

  
2503
    # add a label to a snapshot
2504
    app = login(app)
2505
    resp = resp.click('set label', index=4)
2506
    resp.form['label'] = 'CGUv1'
2507
    resp = resp.form.submit().follow()
2508
    assert PageSnapshot.objects.all()[4].label == 'CGUv1'
2509

  
2503 2510
    # restore a snapshot
2504 2511
    app = login(app)
2505 2512
    resp = resp.click('restore', index=6)
2506
-