0001-backoffice-delete-page-fields-41770.patch
tests/test_admin_pages.py | ||
---|---|---|
1196 | 1196 |
resp = resp.click(href='fields/') |
1197 | 1197 |
assert '1st field' in resp.text |
1198 | 1198 |
assert 'Use drag and drop' in resp.text |
1199 |
assert 'Also remove all fields from the page' not in resp.text |
|
1199 | 1200 | |
1200 | 1201 |
resp = resp.click(href='1/delete') |
1201 | 1202 |
assert 'You are about to remove the "1st field" field.' in resp.text |
... | ... | |
1246 | 1247 |
resp = resp.follow() |
1247 | 1248 |
assert len(FormDef.get(1).fields) == 0 |
1248 | 1249 | |
1250 | ||
1251 |
def test_form_delete_page_field(pub): |
|
1252 |
create_superuser(pub) |
|
1253 |
create_role() |
|
1254 | ||
1255 |
FormDef.wipe() |
|
1256 |
formdef = FormDef() |
|
1257 |
formdef.name = 'form title' |
|
1258 |
formdef.fields = [ |
|
1259 |
fields.PageField(id='1', label='page 1', type='page'), |
|
1260 |
fields.StringField(id='2', label='field 1 1', type='string'), |
|
1261 |
fields.StringField(id='3', label='field 1 2', type='string'), |
|
1262 |
fields.PageField(id='4', label='page 2', type='page'), |
|
1263 |
fields.PageField(id='5', label='page 3', type='page'), |
|
1264 |
fields.StringField(id='6', label='field 3 1', type='string'), |
|
1265 |
fields.StringField(id='7', label='field 3 2', type='string'), |
|
1266 |
] |
|
1267 |
formdef.store() |
|
1268 |
formdef.data_class().wipe() |
|
1269 | ||
1270 |
app = login(get_app(pub)) |
|
1271 | ||
1272 |
# delete fields from the page |
|
1273 |
resp = app.get('/backoffice/forms/1/fields/1/delete') |
|
1274 |
assert 'You are about to remove the "page 1" field.' in resp.text |
|
1275 |
assert 'Also remove all fields from the page' in resp.text |
|
1276 |
resp.forms[0]['delete_fields'] = True |
|
1277 |
resp = resp.forms[0].submit() |
|
1278 |
resp = resp.follow() |
|
1279 |
assert len(FormDef.get(1).fields) == 4 |
|
1280 | ||
1281 |
# empty page |
|
1282 |
resp = app.get('/backoffice/forms/1/fields/4/delete') |
|
1283 |
assert 'You are about to remove the "page 2" field.' in resp.text |
|
1284 |
assert 'Also remove all fields from the page' not in resp.text |
|
1285 |
resp = resp.forms[0].submit() |
|
1286 |
resp = resp.follow() |
|
1287 |
assert len(FormDef.get(1).fields) == 3 |
|
1288 | ||
1289 |
# keep fields |
|
1290 |
resp = app.get('/backoffice/forms/1/fields/5/delete') |
|
1291 |
assert 'You are about to remove the "page 3" field.' in resp.text |
|
1292 |
assert 'Also remove all fields from the page' in resp.text |
|
1293 |
resp.forms[0]['delete_fields'] = False |
|
1294 |
resp = resp.forms[0].submit() |
|
1295 |
resp = resp.follow() |
|
1296 |
assert len(FormDef.get(1).fields) == 2 |
|
1297 | ||
1298 | ||
1249 | 1299 |
def test_form_duplicate_field(pub): |
1250 | 1300 |
user = create_superuser(pub) |
1251 | 1301 |
create_role() |
wcs/admin/fields.py | ||
---|---|---|
118 | 118 |
warning = self.get_deletion_extra_warning() |
119 | 119 |
if warning: |
120 | 120 |
form.widgets.append(HtmlWidget('<div class="warningnotice">%s</div>' % warning)) |
121 |
current_field_index = self.objectdef.fields.index(self.field) |
|
122 |
to_be_deleted = [] |
|
123 |
if self.field.type == 'page': |
|
124 |
# get fields of the page and store indexes for deletion |
|
125 |
for index in range(current_field_index + 1, len(self.objectdef.fields)): |
|
126 |
field = self.objectdef.fields[index] |
|
127 |
if field.type == 'page': |
|
128 |
# next page found; break |
|
129 |
break |
|
130 |
to_be_deleted.append(index) |
|
131 |
to_be_deleted.reverse() |
|
132 |
# add delete_fields checkbox only if the page has fields |
|
133 |
if to_be_deleted: |
|
134 |
form.add(CheckboxWidget, 'delete_fields', title=_('Also remove all fields from the page')) |
|
121 | 135 |
form.add_submit('delete', _('Submit')) |
122 | 136 |
form.add_submit("cancel", _("Cancel")) |
123 | 137 |
if form.get_widget('cancel').parse(): |
... | ... | |
130 | 144 |
r += form.render() |
131 | 145 |
return r.getvalue() |
132 | 146 |
else: |
133 |
field_index = self.objectdef.fields.index(self.field) |
|
134 |
del self.objectdef.fields[field_index] |
|
147 |
# delete page fields if requested |
|
148 |
delete_fields = form.get_widget('delete_fields') |
|
149 |
if delete_fields and delete_fields.parse(): |
|
150 |
for index in to_be_deleted: |
|
151 |
del self.objectdef.fields[index] |
|
152 |
# delete current field |
|
153 |
del self.objectdef.fields[current_field_index] |
|
135 | 154 |
self.objectdef.store() |
136 | 155 |
# redirect to the field that was above this one |
137 | 156 |
if self.objectdef.fields: |
138 |
if field_index == 0: |
|
157 |
if current_field_index == 0:
|
|
139 | 158 |
above_field = self.objectdef.fields[0] |
140 | 159 |
else: |
141 |
above_field = self.objectdef.fields[field_index-1] |
|
160 |
above_field = self.objectdef.fields[current_field_index-1]
|
|
142 | 161 |
else: |
143 | 162 |
above_field = None |
144 | 163 |
return self.redirect_field_anchor(above_field) |
145 |
- |