forms: add a "remove draft" button under tracking code (#10102)
This commit is contained in:
parent
53f7bc9d06
commit
c3d308c818
|
@ -865,13 +865,13 @@ def test_form_tracking_code(pub):
|
|||
resp = resp.follow()
|
||||
assert resp.location.startswith('http://example.net/test/?mt=')
|
||||
resp = resp.follow()
|
||||
resp = resp.forms[0].submit('previous')
|
||||
assert resp.forms[0]['f0'].value == 'foobar'
|
||||
resp = resp.forms[1].submit('previous')
|
||||
assert resp.forms[1]['f0'].value == 'foobar'
|
||||
|
||||
# check submitted form keeps the tracking code
|
||||
resp.forms[0]['f0'] = 'barfoo'
|
||||
resp = resp.forms[0].submit('submit') # -> confirmation page
|
||||
resp = resp.forms[0].submit('submit') # -> done
|
||||
resp.forms[1]['f0'] = 'barfoo'
|
||||
resp = resp.forms[1].submit('submit') # -> confirmation page
|
||||
resp = resp.forms[1].submit('submit') # -> done
|
||||
resp = resp.follow()
|
||||
assert 'barfoo' in resp.body
|
||||
assert formdef.data_class().count() == 1 # check the draft one has been removed
|
||||
|
@ -931,13 +931,13 @@ def test_form_tracking_code_as_user(pub):
|
|||
resp = resp.follow()
|
||||
assert resp.location.startswith('http://example.net/test/?mt=')
|
||||
resp = resp.follow()
|
||||
resp = resp.forms[0].submit('previous')
|
||||
assert resp.forms[0]['f0'].value == 'foobar'
|
||||
resp = resp.forms[1].submit('previous')
|
||||
assert resp.forms[1]['f0'].value == 'foobar'
|
||||
|
||||
# check submitted form keeps the tracking code
|
||||
resp.forms[0]['f0'] = 'barfoo'
|
||||
resp = resp.forms[0].submit('submit') # -> confirmation page
|
||||
resp = resp.forms[0].submit('submit') # -> done
|
||||
resp.forms[1]['f0'] = 'barfoo'
|
||||
resp = resp.forms[1].submit('submit') # -> confirmation page
|
||||
resp = resp.forms[1].submit('submit') # -> done
|
||||
resp = resp.follow()
|
||||
assert 'barfoo' in resp.body
|
||||
assert formdef.data_class().count() == 1 # check the draft one has been removed
|
||||
|
@ -1013,6 +1013,51 @@ def test_form_tracking_code_email(pub):
|
|||
assert 'ABCDEF' in emails.emails.values()[0]['payload']
|
||||
assert resp.location == 'http://example.net/test/code/ABCDEF/load'
|
||||
|
||||
def test_form_tracking_code_remove_draft(pub):
|
||||
formdef = create_formdef()
|
||||
formdef.fields = [fields.StringField(id='0', label='string')]
|
||||
formdef.enable_tracking_codes = True
|
||||
formdef.store()
|
||||
resp = get_app(pub).get('/test/')
|
||||
formdef.data_class().wipe()
|
||||
assert '<h3>Tracking code</h3>' in resp.body
|
||||
resp.forms[0]['f0'] = 'foobar'
|
||||
resp = resp.forms[0].submit('submit')
|
||||
tracking_code = get_displayed_tracking_code(resp)
|
||||
assert tracking_code is not None
|
||||
|
||||
assert formdef.data_class().count() == 1
|
||||
assert formdef.data_class().select()[0].is_draft()
|
||||
assert formdef.data_class().select()[0].tracking_code == tracking_code
|
||||
assert formdef.data_class().select()[0].data['0'] == 'foobar'
|
||||
formdata_id = formdef.data_class().select()[0].id
|
||||
|
||||
app = get_app(pub)
|
||||
|
||||
# visit page, check there's no remove draft button
|
||||
resp = app.get('/test/')
|
||||
assert '<h3>Tracking code</h3>' in resp.body
|
||||
assert not 'removedraft' in resp.body
|
||||
|
||||
# check we can load the formdata as a draft
|
||||
resp = app.get('/')
|
||||
resp.forms[0]['code'] = tracking_code
|
||||
resp = resp.forms[0].submit()
|
||||
assert resp.location == 'http://example.net/code/%s/load' % tracking_code
|
||||
resp = resp.follow()
|
||||
assert resp.location == 'http://example.net/test/%s' % formdata_id
|
||||
resp = resp.follow()
|
||||
assert resp.location.startswith('http://example.net/test/?mt=')
|
||||
resp = resp.follow()
|
||||
assert '<h3>Tracking code</h3>' in resp.body
|
||||
assert 'removedraft' in resp.body
|
||||
resp = resp.forms[1].submit('previous')
|
||||
assert resp.forms[1]['f0'].value == 'foobar'
|
||||
|
||||
resp = resp.forms[0].submit() # remove draft
|
||||
assert resp.location == 'http://example.net/'
|
||||
assert formdef.data_class().count() == 0
|
||||
|
||||
def test_form_invalid_tracking_code(pub):
|
||||
formdef = create_formdef()
|
||||
formdef.fields = [fields.StringField(id='0', label='string')]
|
||||
|
|
|
@ -206,7 +206,7 @@ class TrackingCodesDirectory(Directory):
|
|||
|
||||
class FormPage(Directory):
|
||||
_q_exports = ['', 'listing', 'tempfile', 'tokens', 'schema', 'tryauth',
|
||||
'auth', 'qrcode', 'autosave', 'code']
|
||||
'auth', 'qrcode', 'autosave', 'code', 'removedraft']
|
||||
|
||||
def __init__(self, component):
|
||||
try:
|
||||
|
@ -482,6 +482,12 @@ class FormPage(Directory):
|
|||
return ''
|
||||
r += htmltext('<button>%s</button>') % _('Save')
|
||||
r += TextsDirectory.get_html_text('tracking-code-short-text')
|
||||
if data.get('is_recalled_draft'):
|
||||
r += htmltext('<form action="removedraft" method="POST">')
|
||||
r += htmltext('<input type="hidden" name="magictoken" value="%s">') % (
|
||||
get_request().form.get('magictoken'))
|
||||
r += htmltext('<button>%s</button>') % _('Remove Draft')
|
||||
r += htmltext('</form>')
|
||||
r += htmltext('</div>') # <!-- #tracking-code -->
|
||||
return r.getvalue()
|
||||
|
||||
|
@ -664,8 +670,7 @@ class FormPage(Directory):
|
|||
return self.previous_page(page_no, magictoken)
|
||||
|
||||
if self.formdef.enable_tracking_codes and form.get_submit() == 'removedraft':
|
||||
self.remove_draft()
|
||||
return redirect(get_publisher().get_root_url())
|
||||
return self.removedraft()
|
||||
|
||||
if self.formdef.enable_tracking_codes and form.get_submit() == 'savedraft':
|
||||
form_data = session.get_by_magictoken(magictoken, {})
|
||||
|
@ -796,8 +801,7 @@ class FormPage(Directory):
|
|||
return self.previous_page(self.page_number, magictoken)
|
||||
|
||||
if self.formdef.enable_tracking_codes and form.get_submit() == 'removedraft':
|
||||
self.remove_draft()
|
||||
return redirect(get_publisher().get_root_url())
|
||||
return self.removedraft()
|
||||
|
||||
if self.formdef.enable_tracking_codes and form.get_submit() == 'savedraft':
|
||||
filled = self.save_draft(form_data, page_no = -1)
|
||||
|
@ -837,12 +841,13 @@ class FormPage(Directory):
|
|||
|
||||
return self.page(page_no, page_change=True)
|
||||
|
||||
def remove_draft(self):
|
||||
def removedraft(self):
|
||||
magictoken = get_request().form.get('magictoken')
|
||||
if magictoken:
|
||||
form_data = get_session().get_by_magictoken(magictoken, {})
|
||||
if form_data.get('draft_formdata_id'):
|
||||
self.formdef.data_class().remove_object(form_data.get('draft_formdata_id'))
|
||||
return redirect(get_publisher().get_root_url())
|
||||
|
||||
def autosave_draft(self, draft_id, page_no, form_data):
|
||||
try:
|
||||
|
@ -1147,6 +1152,7 @@ class FormPage(Directory):
|
|||
for field, value in form_data.items():
|
||||
if value is None:
|
||||
del form_data[field]
|
||||
form_data['is_recalled_draft'] = True
|
||||
form_data['draft_formdata_id'] = filled.id
|
||||
form_data['page_no'] = filled.page_no
|
||||
session.add_magictoken(magictoken, form_data)
|
||||
|
|
Loading…
Reference in New Issue