misc: do not display captchas if site option is disabled (#29278) #607

Merged
fpeters merged 1 commits from wip/29278-no-captcha into main 2023-08-16 09:28:59 +02:00
2 changed files with 8 additions and 3 deletions

View File

@ -416,6 +416,9 @@ class FormDef(StorableObject):
self.update_storage()
self.store_related_custom_views()
def has_captcha_enabled(self):
return self.has_captcha and get_publisher().has_site_option('formdef-captcha-option')
def update_storage(self):
from . import sql

View File

@ -338,7 +338,7 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
def has_confirmation_page(self):
if self.formdef.confirmation:
return True
if self.formdef.has_captcha:
if self.formdef.has_captcha_enabled():
session = get_session()
if not (session.get_user() or session.won_captcha):
return True
@ -1427,7 +1427,9 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
# so it gets FakeFileWidget in preview mode
form = self.create_view_form(form_data, use_tokens=self.has_confirmation_page())
if self.formdef.has_captcha and not (get_session().get_user() or get_session().won_captcha):
if self.formdef.has_captcha_enabled() and not (
get_session().get_user() or get_session().won_captcha
):
form.add_captcha(hint='')
if form.captcha.has_error():
return self.validating(form_data)
@ -1876,7 +1878,7 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
form.add_global_errors(page_error_messages)
token_widget = form.get_widget(form.TOKEN_NAME)
token_widget._parsed = True
if self.formdef.has_captcha and not (get_session().get_user() or get_session().won_captcha):
if self.formdef.has_captcha_enabled() and not (get_session().get_user() or get_session().won_captcha):
get_request().form['captcha$q'] = ''
captcha_text = TextsDirectory.get_html_text('captcha-page')
if captcha_text: