Projet

Général

Profil

0001-backoffice-warn-about-data-deletion-when-removing-a-.patch

Frédéric Péters, 10 mai 2019 11:11

Télécharger (5,06 ko)

Voir les différences:

Subject: [PATCH] backoffice: warn about data deletion when removing a field
 (#32950)

 tests/test_admin_pages.py | 34 ++++++++++++++++++++++++++++++++++
 wcs/admin/fields.py       | 11 ++++++++---
 wcs/admin/forms.py        |  5 +++++
 wcs/wf/form.py            |  3 +++
 4 files changed, 50 insertions(+), 3 deletions(-)
tests/test_admin_pages.py
1075 1075
    assert '<h3 data-field-id="1">baz</h3>' in resp.body
1076 1076

  
1077 1077
def test_form_delete_field(pub):
1078
    create_superuser(pub)
1078 1079
    create_role()
1079 1080

  
1080 1081
    FormDef.wipe()
......
1090 1091
    assert 'Use drag and drop' in resp.body
1091 1092

  
1092 1093
    resp = resp.click(href='1/delete')
1094
    assert 'You are about to remove the "1st field" field.' in resp.body
1095
    assert 'Warning:' not in resp.body
1096
    resp = resp.forms[0].submit()
1097
    assert resp.location == 'http://example.net/backoffice/forms/1/fields/'
1098
    resp = resp.follow()
1099
    assert len(FormDef.get(1).fields) == 0
1100

  
1101
def test_form_delete_field_existing_data(pub):
1102
    create_superuser(pub)
1103
    create_role()
1104

  
1105
    FormDef.wipe()
1106
    formdef = FormDef()
1107
    formdef.name = 'form title'
1108
    formdef.fields = [fields.StringField(id='1', label='1st field', type='string')]
1109
    formdef.store()
1110

  
1111
    formdata = formdef.data_class()()
1112
    formdata.just_created()
1113
    formdata.data = {'1': 'hello'}
1114
    formdata.store()
1115

  
1116
    app = login(get_app(pub))
1117
    resp = app.get('/backoffice/forms/1/')
1118
    resp = resp.click(href='fields/')
1119
    resp = resp.click(href='1/delete')
1120
    assert 'You are about to remove the "1st field" field.' in resp.body
1121
    assert 'Warning:' in resp.body
1093 1122
    resp = resp.forms[0].submit()
1094 1123
    assert resp.location == 'http://example.net/backoffice/forms/1/fields/'
1095 1124
    resp = resp.follow()
......
2553 2582
    assert 'foobar' in resp.body
2554 2583
    resp = resp.click('Edit')
2555 2584
    assert not 'in_listing' in resp.form.fields.keys()
2585
    resp = resp.form.submit('cancel')
2586
    resp = resp.follow()
2587
    resp = resp.click('Remove')
2588
    assert 'You are about to remove the "foobar" field.' in resp.body
2589
    assert not 'Warning:' in resp.body
2556 2590

  
2557 2591
def test_workflows_edit_choice_action(pub):
2558 2592
    create_superuser(pub)
wcs/admin/fields.py
98 98
            setattr(self.field, f.replace('-', '_'), widget.parse())
99 99
        self.objectdef.store()
100 100

  
101
    def get_deletion_extra_warning(self):
102
        return _('Warning: this field data will be permanently deleted.')
101 103

  
102 104
    def delete(self):
103 105
        form = Form(enctype='multipart/form-data')
106
        ellipsized_field_label = misc.ellipsize(self.field.unhtmled_label, 60)
104 107
        form.widgets.append(HtmlWidget('<p>%s</p>' % _(
105
                        "You are about to remove a field.")))
108
            "You are about to remove the \"%s\" field.") % ellipsized_field_label))
109
        warning = self.get_deletion_extra_warning()
110
        if warning:
111
            form.widgets.append(HtmlWidget('<div class="warningnotice">%s</div>' % warning))
106 112
        form.add_submit('delete', _('Submit'))
107 113
        form.add_submit("cancel", _("Cancel"))
108 114
        if form.get_widget('cancel').parse():
......
114 120
            get_response().breadcrumb.append(('delete', _('Delete')))
115 121
            self.html_top(title = _('Delete Field'))
116 122
            r = TemplateIO(html=True)
117
            r += htmltext('<h2>%s %s</h2>') % (_('Deleting Field:'),
118
                    misc.ellipsize(self.field.unhtmled_label, 60))
123
            r += htmltext('<h2>%s</h2>') % _('Deleting Field: %s') % ellipsized_field_label
119 124
            r += form.render()
120 125
            return r.getvalue()
121 126
        else:
wcs/admin/forms.py
116 116
class FieldDefPage(FieldDefPage):
117 117
    section = 'forms'
118 118

  
119
    def get_deletion_extra_warning(self):
120
        if not self.objectdef.data_class().count():
121
            return None
122
        return _('Warning: this field data will be permanently deleted from existing forms.')
123

  
119 124

  
120 125
class FieldsDirectory(FieldsDirectory):
121 126
    field_def_page_class = FieldDefPage
wcs/wf/form.py
62 62
        form.remove('in_listing')
63 63
        return form
64 64

  
65
    def get_deletion_extra_warning(self):
66
        return None
67

  
65 68

  
66 69
class WorkflowFormFieldsDirectory(FieldsDirectory):
67 70
    section = 'workflows'
68
-