forms: don't set tracking code unless enabled (#30887)

This commit is contained in:
Frédéric Péters 2019-02-25 18:46:48 +01:00
parent e4ee1a902b
commit 6ddfd68c6d
2 changed files with 31 additions and 2 deletions

View File

@ -1258,6 +1258,35 @@ def test_form_no_tracking_code(pub):
resp = get_app(pub).get('/test/')
assert not '<h3>Tracking code</h3>' in resp.body
def test_form_no_tracking_code_variable(pub):
create_user(pub)
FormDef.wipe()
formdef = create_formdef()
formdef.data_class().wipe()
formdef.fields = [fields.PageField(id='0', label='1st page', type='page'),
fields.StringField(id='1', label='string'),
fields.PageField(id='2', label='2nd page', type='page'),
fields.CommentField(id='3', label='<p>xxx{{form_tracking_code|default:""}}yyy</p>', type='comment'),
]
formdef.store()
app = login(get_app(pub), username='foo', password='foo')
resp = app.get('/test/')
resp.form['f1'] = 'foo'
app.post('/test/autosave', params=resp.form.submit_fields())
resp = resp.form.submit('submit')
assert_current_page(resp, '2nd page')
assert 'xxxyyy' in resp.body
resp = resp.form.submit('submit')
assert_current_page(resp, 'Validating')
resp = resp.form.submit('submit').follow()
assert 'The form has been recorded' in resp.body
assert formdef.data_class().count() == 1
data_id = formdef.data_class().select()[0].id
data = formdef.data_class().get(data_id)
assert data.data == {'1': 'foo'}
assert data.tracking_code is None
def get_displayed_tracking_code(resp):
tracking_code = None
for a_tag in resp.html.findAll('a'):

View File

@ -611,7 +611,7 @@ class FormPage(Directory, FormTemplateMixin):
# first hit on first page, if tracking code are enabled and we
# are not editing an existing formdata, generate a new tracking
# code.
if not self.edit_mode and self.has_draft_support() and not get_request().form.has_key('mt'):
if not self.edit_mode and self.formdef.enable_tracking_codes and not get_request().form.has_key('mt'):
tracking_code = get_publisher().tracking_code_class()
tracking_code.store()
token = randbytes(8)
@ -1134,7 +1134,7 @@ class FormPage(Directory, FormTemplateMixin):
return redirect(get_publisher().get_root_url())
def set_tracking_code(self, formdata, magictoken_data=None):
if not self.has_draft_support():
if not self.formdef.enable_tracking_codes:
return
if formdata.tracking_code:
return