Table of Contents
collective.z3cform.norobots
provides a "human" captcha widget based on a list of
question/answer(s).
This captcha can be used :
- as a
plone.app.discussion
(Plone Discussions) captcha plugin- as a
z3c form
field- as a macro in a custom form
- as a PloneFormGen field with collective.pfg.norobots
The widget is based on z3c.form.TextWidget.
Since version 1.4, questions configuration uses a dedicated control panel (using plone.app.registry
)
instead of a simple properties sheet. An upgrade step provides migration from earlier versions.
Interface is translated in the following languages: Czech [cs], Danish [da], German [de], Basque [eu], Spanish [es], Suomeksi [fi], French [fr], Dutch [nl], Simplified Chinese [zh_CN], Italian [it] and Russian [ru].
I have tested this release with Plone 4.3.10, Plone 5.0.5. Since version 2.0 Plone 6 is supported.
See previous releases for old Plone versions.
Getting the module - pip based
Add collective.z3cform.norobots
to your requirements.txt
Add collective.z3cform.norobots
to your plone.recipe.zope2instance
buildout section e.g.:
[instance] ... eggs = Plone ... collective.z3cform.norobots ... zcml = ... collective.z3cform.norobots
Or, you can add it as a dependency on your own product setup.py:
install_requires=[ ... 'collective.z3cform.norobots', ],
In the Addons control panel, install "Norobots captcha field (collective.z3cform.norobots)".
In the "Norobots widget settings" control panel, add a new line in the field "Norobots question::answer":
your_question::the_answer Example : What is 10 + 12 ?::22
Answer can contain multiple values delimited by semicolon:
your_question::the_answer;another_answer Example : What is 5 + 5 ?::10;ten
Checkout collective.z3cform.norobots
and use venv
and pip
to test the module:
python3 -m venv ./venv source venv/bin/activate (venv) pip install mxdev (venv) pip install -r requirements-mxdev.txt (venv) pip install cookiecutter (venv) cookiecutter -f --no-input --config-file instance.yml https://github.com/plone/cookiecutter-zope-instance (venv) runwsgi -v instance/etc/zope.ini
Go to http://localhost:8080, add a new Plone Site and install collective.z3cform.norobots (see above).
Launch tests:
(venv) pip install tox (venv) tox
Launch code coverage:
(venv) tox -e coverage
and open with a browser htmlcov/index.html
In the Discussion control panel, activate anonymous comments then select "Norobots" for the captcha. This enable the captcha for anonymous users.
You can use this widget setting the "widgetFactory" property of a form field:
from zope import interface, schema from z3c.form import interfaces, form, field, button, validator from plone.z3cform.layout import wrap_form from collective.z3cform.norobots.i18n import MessageFactory as _ from collective.z3cform.norobots.widget import NorobotsFieldWidget from collective.z3cform.norobots.validator import NorobotsValidator class INorobotsForm(interface.Interface): norobots = schema.TextLine(title=_(u'Are you a human ?'), description=_(u'In order to avoid spam, please answer the question below.'), required=True) class NorobotsForm(form.Form): fields = field.Fields(INorobotsForm) fields['norobots'].widgetFactory = NorobotsFieldWidget # wrap the form with plone.z3cform's Form wrapper NorobotsFormView = wrap_form(NorobotsForm) # Register Norobots validator for the corresponding field in the IContactInfo interface validator.WidgetValidatorDiscriminators(NorobotsValidator, field=INorobotsForm['norobots'])
In your configure.zcml you have to add the following adapter, to make the validation work.
<adapter factory=".contact_info.NorobotsValidator" />
For more information see contact_info.py
in the plone_forms
directory.
To activate this example, add <include package=".plone_forms" />
in the package's
configure.zml
file and open http://localhost:8080/Plone/@@z3cform-contact-info
See browser/norobots_macro.pt
available through @@norobots_macro browser page.
- In a fresh Plone 5.0.5 the captcha widget does not appear in the comments form even if
Norobots
is the selected captcha. Installing an other captcha likeplone.formwidget.captcha
solve this problem (sic!). In my website, updated from Plone 5.0.4 to 5.0.5, all is ok.- I have the following error when launching the tests: "ImportError: No module named lxml.html" => In order to run the tests you need lxml. You can add for example "z3c.form [test]" to your buildout. See http://plone.293351.n2.nabble.com/Custom-Dexterity-Widgets-td5594532.html for more details.
- Sylvain Boureliou [sylvainb] - GitHub - Website
- Makina Corpus Makina Corpus
Source code is hosted on Github.
Source code and an issue tracker is hosted on Github.
- Sylvain Boureliou [sylvainb]
- Mikel Larreategi [erral]
- Aijun Jian
- Radim Novotny [naro]
- Thomas Clement Mogensen [tmog]
- Peter Mathis [petschki]
- Petri Savolainen [petri]
- Helmut Toplitzer
- Luca Fabbri [keul]
- Andrea Cecchi [cekk]
- [serge73]
- [1letter]