fix errors that are thrown when plone.formwidget.captcha is not installed.
svn path=/plone.app.discussion/trunk/; revision=28755
This commit is contained in:
parent
e1b068dbbc
commit
f4f0e29e96
@ -1,5 +1,6 @@
|
||||
from persistent import Persistent
|
||||
|
||||
from z3c.form import validator
|
||||
from z3c.form.field import Fields
|
||||
|
||||
from zope import interface, schema
|
||||
@ -20,15 +21,27 @@ from plone.app.discussion.browser.comments import CommentForm
|
||||
from plone.app.discussion.comment import Comment
|
||||
from plone.app.discussion.interfaces import IDiscussionSettings, ICaptcha
|
||||
|
||||
HAS_CAPTCHA = False
|
||||
try:
|
||||
from plone.formwidget.captcha import CaptchaFieldWidget
|
||||
from plone.formwidget.captcha.validator import CaptchaValidator
|
||||
HAS_CAPTCHA = True
|
||||
except ImportError:
|
||||
pass
|
||||
# Fall back to SimpleFieldValidator, when Captcha is not installed,
|
||||
# since otherwise the registration of the Captcha validator adapter
|
||||
# would fail.
|
||||
from z3c.form.validator import SimpleFieldValidator as CaptchaValidator
|
||||
|
||||
HAS_RECAPTCHA = False
|
||||
try:
|
||||
from plone.formwidget.recaptcha import ReCaptchaFieldWidget
|
||||
HAS_RECAPTCHA = True
|
||||
except ImportError:
|
||||
pass
|
||||
# Fall back to SimpleFieldValidator, when ReCaptcha is not installed,
|
||||
# since otherwise the registration of the ReCaptcha validator adapter
|
||||
# would fail.
|
||||
from z3c.form.validator import SimpleFieldValidator as CaptchaValidator
|
||||
|
||||
|
||||
class Captcha(Persistent):
|
||||
interface.implements(ICaptcha)
|
||||
@ -37,11 +50,12 @@ class Captcha(Persistent):
|
||||
|
||||
Captcha = factory(Captcha)
|
||||
|
||||
if HAS_CAPTCHA or HAS_RECAPTCHA:
|
||||
# Extend the comment form with captcha, only if a captcha solution is installed.
|
||||
class CaptchaExtender(extensible.FormExtender):
|
||||
adapts(Interface, IDefaultBrowserLayer, CommentForm) # context, request, form
|
||||
|
||||
fields = Fields(ICaptcha)
|
||||
fields['captcha'].widgetFactory = CaptchaFieldWidget
|
||||
|
||||
def __init__(self, context, request, form):
|
||||
self.context = context
|
||||
@ -54,14 +68,31 @@ class CaptchaExtender(extensible.FormExtender):
|
||||
|
||||
def update(self):
|
||||
if self.captcha != 'disabled':
|
||||
# Add all fields from the captcha interface
|
||||
# Add captcha field if captcha is enabled in the registry
|
||||
self.add(ICaptcha, prefix="")
|
||||
if self.captcha == 'captcha':
|
||||
if HAS_CAPTCHA and self.captcha == 'captcha':
|
||||
# If Captcha is installed and Captcha is enabled,
|
||||
# use the CaptchaFieldWidget
|
||||
self.form.fields['captcha'].widgetFactory = CaptchaFieldWidget
|
||||
elif self.captcha == 'recaptcha':
|
||||
elif HAS_RECAPTCHA and self.captcha == 'recaptcha':
|
||||
# If ReCaptcha is installed and ReCaptcha is enabled,
|
||||
# use the ReCaptchaFieldWidget
|
||||
self.form.fields['captcha'].widgetFactory = ReCaptchaFieldWidget
|
||||
else:
|
||||
#
|
||||
pass
|
||||
|
||||
from z3c.form import validator
|
||||
from plone.formwidget.captcha.validator import CaptchaValidator
|
||||
# Register Captcha validator for the captcha field in the ICaptchaForm
|
||||
validator.WidgetValidatorDiscriminators(CaptchaValidator, field=ICaptcha['captcha'])
|
||||
|
||||
else:
|
||||
# This is necessary, otherwise the zcml registration of the CaptchaExtender
|
||||
# would fail if no captcha solution is installed.
|
||||
class CaptchaExtender(extensible.FormExtender):
|
||||
adapts(Interface, IDefaultBrowserLayer, CommentForm)
|
||||
|
||||
def __init__(self, context, request, form):
|
||||
pass
|
||||
|
||||
def update(self):
|
||||
pass
|
Loading…
Reference in New Issue
Block a user