Projet

Général

Profil

0001-manager-duplicate-cell-51075.patch

Lauréline Guérin, 26 février 2021 10:17

Télécharger (6,45 ko)

Voir les différences:

Subject: [PATCH 1/2] manager: duplicate cell (#51075)

 combo/data/models.py                          |  8 ++++++-
 .../combo/manager_edit_cell_block.html        |  1 +
 combo/manager/urls.py                         |  5 ++++
 combo/manager/views.py                        | 17 +++++++++++++
 tests/test_manager.py                         | 24 ++++++++++++++++---
 5 files changed, 51 insertions(+), 4 deletions(-)
combo/data/models.py
1099 1099
    def import_subobjects(self, cell_json):
1100 1100
        pass
1101 1101

  
1102
    def duplicate(self, page_target=None, placeholder=None):
1102
    def duplicate(self, page_target=None, placeholder=None, reset_slug=False, set_order=False):
1103 1103
        # clone current cell
1104 1104
        new_cell = copy.deepcopy(self)
1105 1105
        new_cell.pk = None
......
1107 1107
        new_cell.page = page_target or self.page
1108 1108
        # set placeholder
1109 1109
        new_cell.placeholder = placeholder or new_cell.placeholder
1110
        # reset slug if requested
1111
        if reset_slug:
1112
            new_cell.slug = ''
1113
        # set order if requested
1114
        if set_order:
1115
            new_cell.order = self.order + 1
1110 1116
        # store new cell
1111 1117
        new_cell.save()
1112 1118

  
combo/manager/templates/combo/manager_edit_cell_block.html
18 18
<a rel="popup" href="{% url 'combo-manager-page-visibility-cell' page_pk=page.id cell_reference=cell.get_reference %}">{% trans 'Visibility' %}</a> |
19 19
<a rel="popup" href="{% url 'combo-manager-page-options-cell' page_pk=page.id cell_reference=cell.get_reference %}">{% trans 'Options' %}</a> |
20 20
{% if cell.can_have_assets %}<a rel="popup" data-selector="div#assets-listing" href="{% url 'combo-manager-slot-assets' cell_reference=cell.get_reference %}">{% trans 'Assets' %}</a> |{% endif %}
21
<a href="{% url 'combo-manager-page-duplicate-cell' page_pk=page.id cell_reference=cell.get_reference %}">{% trans 'Duplicate' %}</a> |
21 22
<a class="close-button" href="#">{% trans 'Close' %}</a>
22 23
{% if form %}
23 24
<button class="save submit-button">{% trans 'Save' %}</button>
combo/manager/urls.py
84 84
        views.page_delete_cell,
85 85
        name='combo-manager-page-delete-cell',
86 86
    ),
87
    url(
88
        r'^pages/(?P<page_pk>\d+)/cell/(?P<cell_reference>[\w_-]+)/duplicate$',
89
        views.page_duplicate_cell,
90
        name='combo-manager-page-duplicate-cell',
91
    ),
87 92
    url(
88 93
        r'^pages/(?P<page_pk>\d+)/cell/(?P<cell_reference>[\w_-]+)/options$',
89 94
        views.page_cell_options,
combo/manager/views.py
623 623
page_delete_cell = PageDeleteCellView.as_view()
624 624

  
625 625

  
626
class PageDuplicateCellView(RedirectView):
627
    permanent = False
628

  
629
    def get_redirect_url(self, page_pk, cell_reference):
630
        try:
631
            cell = CellBase.get_cell(cell_reference, page_id=page_pk)
632
        except ObjectDoesNotExist:
633
            raise Http404()
634
        cell.duplicate(reset_slug=True, set_order=True)
635
        PageSnapshot.take(cell.page, request=self.request, comment=_('duplicated cell "%s"') % cell)
636
        messages.info(self.request, _('Cell %s has been duplicated.') % cell)
637
        return reverse('combo-manager-page-view', kwargs={'pk': page_pk}) + '#cell-' + cell.get_reference()
638

  
639

  
640
page_duplicate_cell = PageDuplicateCellView.as_view()
641

  
642

  
626 643
class PageCellVisibilityView(PageEditCellView):
627 644
    template_name = 'combo/cell_visibility.html'
628 645

  
tests/test_manager.py
1061 1061

  
1062 1062
    app = login(app)
1063 1063
    resp = app.get('/manage/pages/%s/' % page.pk)
1064
    resp = resp.click('Duplicate')
1064
    resp = resp.click(href='/%s/duplicate' % page.pk)
1065 1065
    resp = resp.form.submit()
1066 1066
    new_page = Page.objects.latest('pk')
1067 1067
    assert resp.status_int == 302
......
1076 1076
    page.exclude_from_navigation = True
1077 1077
    page.save()
1078 1078
    resp = app.get('/manage/pages/%s/' % page.pk)
1079
    resp = resp.click('Duplicate')
1079
    resp = resp.click(href='/%s/duplicate' % page.pk)
1080 1080
    resp = resp.form.submit()
1081 1081
    new_page = Page.objects.latest('pk')
1082 1082
    assert resp.status_int == 302
......
1086 1086
    assert new_page.exclude_from_navigation is True
1087 1087

  
1088 1088
    resp = app.get('/manage/pages/%s/' % page.pk)
1089
    resp = resp.click('Duplicate')
1089
    resp = resp.click(href='/%s/duplicate' % page.pk)
1090 1090
    resp.form['title'] = 'Two'
1091 1091
    resp = resp.form.submit()
1092 1092
    new_page = Page.objects.latest('pk')
......
1202 1202
    assert TextCell.objects.count() == 0
1203 1203

  
1204 1204

  
1205
def test_duplicate_cell(app, admin_user):
1206
    page = Page.objects.create(
1207
        title='One', slug='one', template_name='standard', exclude_from_navigation=False
1208
    )
1209
    cell = TextCell.objects.create(page=page, placeholder='content', text='Foobar', order=0, slug='foobar')
1210
    app = login(app)
1211
    resp = app.get('/manage/pages/%s/' % page.pk)
1212
    resp = resp.click(href='/data_textcell-%s/duplicate' % cell.pk).follow()
1213
    assert 'Cell %s has been duplicated.' % cell in resp.text
1214
    assert TextCell.objects.count() == 2
1215
    new_cell = TextCell.objects.latest('pk')
1216
    assert new_cell.slug == ''
1217
    assert new_cell.order == 1
1218
    assert new_cell.page == page
1219
    assert new_cell.placeholder == 'content'
1220
    assert PageSnapshot.objects.all().count() == 1
1221

  
1222

  
1205 1223
def test_edit_cell_visibility(app, admin_user):
1206 1224
    Page.objects.all().delete()
1207 1225
    page = Page(title='One', slug='one', template_name='standard')
1208
-