0001-admin-don-t-allow-removal-of-form-if-there-are-open-.patch
tests/test_admin_pages.py | ||
---|---|---|
992 | 992 |
assert FormDef.count() == 0 |
993 | 993 | |
994 | 994 | |
995 |
def test_form_delete_with_data(pub): |
|
996 |
create_superuser(pub) |
|
997 |
create_role() |
|
998 | ||
999 |
FormDef.wipe() |
|
1000 |
formdef = FormDef() |
|
1001 |
formdef.name = 'form title' |
|
1002 |
formdef.fields = [] |
|
1003 |
formdef.store() |
|
1004 | ||
1005 |
formdata = formdef.data_class()() |
|
1006 |
formdata.just_created() |
|
1007 |
formdata.store() |
|
1008 | ||
1009 |
app = login(get_app(pub)) |
|
1010 | ||
1011 |
resp = app.get('/backoffice/forms/%s/' % formdef.id) |
|
1012 |
resp = resp.click(href='delete') |
|
1013 |
if pub.is_using_postgresql(): |
|
1014 |
assert 'Deletion is not possible' in resp |
|
1015 | ||
1016 |
formdata.status = 'draft' |
|
1017 |
formdata.store() |
|
1018 |
resp = app.get('/backoffice/forms/%s/' % formdef.id) |
|
1019 |
resp = resp.click(href='delete') |
|
1020 |
assert 'Deletion is not possible' not in resp |
|
1021 | ||
1022 |
formdata.status = 'wf-rejected' |
|
1023 |
formdata.store() |
|
1024 |
resp = app.get('/backoffice/forms/%s/' % formdef.id) |
|
1025 |
resp = resp.click(href='delete') |
|
1026 |
assert 'Deletion is not possible' not in resp |
|
1027 | ||
1028 | ||
995 | 1029 |
def test_form_duplicate(pub): |
996 | 1030 |
create_superuser(pub) |
997 | 1031 |
create_role() |
... | ... | |
5955 | 5989 |
assert CardDef.get(1).disabled is False |
5956 | 5990 | |
5957 | 5991 | |
5992 |
def test_cards_delete(pub, studio): |
|
5993 |
test_cards_new(pub, studio) |
|
5994 |
app = login(get_app(pub)) |
|
5995 | ||
5996 |
carddef = CardDef.select()[0] |
|
5997 |
carddata = carddef.data_class()() |
|
5998 |
carddata.just_created() |
|
5999 |
carddata.data = {} |
|
6000 |
carddata.store() |
|
6001 | ||
6002 |
resp = app.get('http://example.net/backoffice/cards/1/') |
|
6003 |
resp = resp.click('Delete') |
|
6004 |
resp = resp.form.submit('submit') |
|
6005 |
assert CardDef.count() == 0 |
|
6006 | ||
6007 |
carddata.remove_self() # don't keep leftovers |
|
6008 | ||
6009 | ||
5958 | 6010 |
def test_cards_duplicate(pub, studio): |
5959 | 6011 |
test_cards_new(pub, studio) |
5960 | 6012 |
app = login(get_app(pub)) |
wcs/admin/forms.py | ||
---|---|---|
32 | 32 |
from wcs.qommon import misc |
33 | 33 |
from wcs.qommon.errors import * |
34 | 34 |
from wcs.qommon.form import * |
35 |
from wcs.qommon.storage import (Equal, NotEqual, Null) |
|
35 | 36 |
from wcs.qommon.backoffice.menu import html_top |
36 | 37 |
from wcs.qommon import get_logger |
37 | 38 |
from wcs.qommon.misc import C_ |
... | ... | |
368 | 369 |
formdef_ui_class = FormDefUI |
369 | 370 |
formdef_default_workflow = '_default' |
370 | 371 | |
372 |
check_open_forms_at_deletion = True |
|
371 | 373 |
delete_message = N_('You are about to irrevocably delete this form.') |
372 | 374 |
delete_title = N_('Deleting Form:') |
373 | 375 |
overwrite_message = N_( |
... | ... | |
919 | 921 | |
920 | 922 |
def delete(self): |
921 | 923 |
form = Form(enctype='multipart/form-data') |
922 |
form.widgets.append(HtmlWidget('<p>%s</p>' % _(self.delete_message))) |
|
923 |
form.add_submit('delete', _('Delete')) |
|
924 |
count = None |
|
925 |
if self.check_open_forms_at_deletion and get_publisher().is_using_postgresql(): |
|
926 |
from wcs import sql |
|
927 |
criterias = [ |
|
928 |
Equal('formdef_id', self.formdefui.formdef.id), |
|
929 |
NotEqual('status', 'draft'), |
|
930 |
Equal('is_at_endpoint', False), |
|
931 |
Null('anonymised'), |
|
932 |
] |
|
933 |
count = sql.AnyFormData.count(criterias) |
|
934 |
if count and count > 0: |
|
935 |
form.widgets.append(HtmlWidget('<p>%s</p>' % _( |
|
936 |
'Deletion is not possible as there are open forms.'))) |
|
937 |
else: |
|
938 |
form.widgets.append(HtmlWidget('<p>%s</p>' % _(self.delete_message))) |
|
939 |
form.add_submit('delete', _('Delete')) |
|
924 | 940 |
form.add_submit('cancel', _('Cancel')) |
925 | 941 |
if form.get_widget('cancel').parse(): |
926 | 942 |
return redirect('..') |
wcs/backoffice/cards.py | ||
---|---|---|
46 | 46 |
formdef_ui_class = CardDefUI |
47 | 47 |
formdef_default_workflow = '_carddef_default' |
48 | 48 | |
49 |
check_open_forms_at_deletion = False |
|
49 | 50 |
delete_message = N_('You are about to irrevocably delete this card model.') |
50 | 51 |
delete_title = N_('Deleting Card Model:') |
51 | 52 |
overwrite_message = N_( |
52 |
- |