Add dead-simple captcha to show the z3c-form-extender works.

svn path=/plone.app.discussion/trunk/; revision=28371
This commit is contained in:
Timo Stollenwerk 2009-08-05 09:01:58 +00:00
parent 8e9c75a6fc
commit ef8e34adbb
2 changed files with 52 additions and 0 deletions

View File

@ -0,0 +1,44 @@
from persistent import Persistent
from z3c.form.field import Fields
from zope import interface, schema
from zope.annotation import factory
from zope.annotation.attribute import AttributeAnnotations
from zope.component import adapts, provideAdapter
from zope.publisher.interfaces.browser import IDefaultBrowserLayer
from zope.interface import Interface, implements
from plone.z3cform.fieldsets import extensible
from plone.z3cform.fieldsets.interfaces import IFormExtender
from plone.app.discussion.comment import Comment
class ICaptcha(Interface):
captcha = schema.TextLine(title=u"Type the word 'human' in all capital letters.",
required=False)
class Captcha(Persistent):
interface.implements(ICaptcha)
adapts(Comment)
captcha = u""
Captcha = factory(Captcha)
provideAdapter(Captcha)
provideAdapter(AttributeAnnotations)
class CaptchaExtender(extensible.FormExtender):
adapts(Interface, IDefaultBrowserLayer, Interface) # context, request, form
def __init__(self, context, request, form):
self.context = context
self.request = request
self.form = form
def update(self):
# Add all fields from the captcha interface
self.add(ICaptcha, prefix="extra")

View File

@ -64,6 +64,14 @@
permission="zope2.View"
/>
<!-- Comment form extender -->
<adapter
factory=".captcha.Captcha" />
<adapter
factory=".captcha.CaptchaExtender"
provides="plone.z3cform.fieldsets.interfaces.IFormExtender" />
<!-- Comment view -->
<browser:view
name="view"