source: products/quintagroup.plonecaptchas/trunk/quintagroup/plonecaptchas/captcha.py

Last change on this file was 3611, checked in by vmaksymiv, 9 years ago

fixed pep8

File size: 1.6 KB
Line 
1from plone.app.discussion.browser.captcha import CaptchaExtender
2from quintagroup.z3cform.captcha.widget import CaptchaWidgetFactory
3from plone.app.discussion import vocabularies
4from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
5from quintagroup.plonecaptchas.interfaces import IQGDiscussionCaptchas
6from quintagroup.plonecaptchas.interfaces import ICaptchaProvider
7from zope.interface import Interface
8from zope.component import adapts, getUtilitiesFor, queryUtility
9from plone.app.discussion.browser.comments import CommentForm
10
11
12class CaptchaProvider(object):
13
14    def __init__(self):
15        self.widget_factory = CaptchaWidgetFactory
16
17
18class CaptchaExtender(CaptchaExtender):
19    adapts(Interface, IQGDiscussionCaptchas, CommentForm)
20
21    def update(self):
22        super(CaptchaExtender, self).update()
23        if self.isAnon:
24            cp = queryUtility(ICaptchaProvider, name=self.captcha)
25            if cp:
26                self.form.fields['captcha'].widgetFactory = cp.widget_factory
27                self.form.fields['captcha'].mode = None
28
29
30def captcha_vocabulary(context):
31    """ Extend captcha vocabulary with quintagroup.plonecaptchas"""
32    terms = vocabularies.captcha_vocabulary(context)._terms
33    captchas = set((t.value for t in terms))
34
35    providers = getUtilitiesFor(ICaptchaProvider)
36    for name, util in providers:
37        if name and name not in captchas:
38            terms.append(SimpleTerm(value=name,
39                                    token=name,
40                                    title=name.capitalize()))
41    return SimpleVocabulary(terms)
Note: See TracBrowser for help on using the repository browser.