Add dead-simple captcha to show the z3c-form-extender works.
svn path=/plone.app.discussion/trunk/; revision=28371
This commit is contained in:
		
							parent
							
								
									8e9c75a6fc
								
							
						
					
					
						commit
						ef8e34adbb
					
				
							
								
								
									
										44
									
								
								plone/app/discussion/browser/captcha.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								plone/app/discussion/browser/captcha.py
									
									
									
									
									
										Normal 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")
 | 
			
		||||
@ -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"
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user