Index: /quintagroup.plonecaptchas/tags/4.1/MANIFEST.in
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/MANIFEST.in (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/MANIFEST.in (revision 3272)
@@ -0,0 +1,3 @@
+recursive-include docs *
+recursive-include quintagroup *
+global-exclude *pyc
Index: /quintagroup.plonecaptchas/tags/4.1/README.txt
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/README.txt (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/README.txt (revision 3272)
@@ -0,0 +1,92 @@
+Plone Captchas
+==============
+
+quintagroup.plonecaptchas is a simple captchas implementation for Plone, designed
+for validation of human input in insecure forms. This is a standalone
+implementation which does not depend on captchas.net services.
+
+quintagroup.plonecaptchas adds captcha support to Plone, it works together with
+quintagroup.captcha.core package (http://projects.quintagroup.com/products/wiki/quintagroup.captcha.core) and quintagroup.formlib.captcha (http://projects.quintagroup.com/products/wiki/quintagroup.formlib.captcha)
+
+With these products installed captchas will be added to Plone's 'Send this',
+'Contact Us' (/contact-info) forms, and Plone's default discussion mechanism:
+'Add Comment' and 'Reply' forms.
+
+quintagroup.plonecaptchas does not automatically plug to Plone's default registration
+(/@@register). You can make captcha plug to Plone's Register form via Zope Management Interface.
+Instructions here: http://projects.quintagroup.com/products/wiki/quintagroup.plonecaptchas#JoinForm
+
+Requirements
+------------
+
+* Plone 4.0 and above
+
+Notes
+-----
+
+* For Plone 4 versions - use quintagroup.plonecaptchas 4.0 release and up http://plone.org/products/plone-captchas/releases/4.0. In your buildout.cfg file's egg section set product version::
+
+ [buildout]
+ ....
+ eggs =
+ ...
+ quintagroup.plonecaptchas >=4.0
+
+* For Plone 3 versions - use quintagroup.plonecaptcha 3.x releases http://plone.org/products/plone-captchas/releases/3.0. In your buildout.cfg file's egg section set product version::
+
+ [buildout]
+ ....
+ eggs =
+ ...
+ quintagroup.plonecaptchas >=3.0,<4.0
+
+* For Plone 2.x versions - use 1.3.4 version of qPloneCaptchas product for use on forms
+
+
+Dependencies
+------------
+
+* quintagroup.captcha.core (PIL with _imagingft C module for dynamic captcha)
+* quintagroup.formlib.captcha
+* PIL with Jpeg and FreeType support
+
+Plone Captchas on PloneFormGen forms
+------------------------------------
+
+To make captchas work on forms created with PloneFormGen, please use 'quintagroup.pfg.captcha' product:
+http://projects.quintagroup.com/products/wiki/quintagroup.pfg.captcha
+
+Installation
+------------
+
+See docs/INSTALL.txt for instructions.
+
+Note: If Plone Captchas is expected to be used with Plone Comments
+http://quintagroup.com/services/plone-development/products/plone-comments,
+for proper behavior you have to install Plone Captchas first, and then Plone Comments.
+
+Links
+-----
+
+* Plone Captchas home page - http://quintagroup.com/services/plone-development/products/plone-captchas
+* Plone Captchas Screencasts - http://quintagroup.com/cms/screencasts/qplonecaptchas
+* Documentation - http://projects.quintagroup.com/products/wiki/quintagroup.plonecaptchas
+* SVN Repository - http://svn.quintagroup.com/products/quintagroup.plonecaptchas
+
+Authors
+-------
+
+The product was developed by Quintagroup team:
+
+* Andriy Mylenkyi
+* Volodymyr Cherepanyak
+* Mykola Kharechko
+* Vitaliy Stepanov
+* Bohdan Koval
+
+Contributors
+------------
+
+* Dorneles Tremea
+
+Copyright (c) "Quintagroup": http://quintagroup.com, 2004-2010
Index: /quintagroup.plonecaptchas/tags/4.1/docs/HISTORY.txt
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/docs/HISTORY.txt (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/docs/HISTORY.txt (revision 3272)
@@ -0,0 +1,35 @@
+Changelog
+=========
+
+4.1 - Sep 5, 2011
+------------------
+
+* compatibility with plone.app.discussion added
+
+4.0 - June 9, 2010
+------------------
+
+* compatibility with Plone 4 added
+
+3.0 - Apr 7, 2010
+-----------------
+
+* product was refactored: captcha support for the standard Plone forms remained
+ in quintagroup.plonecaptchas; the captchas core rendering and validation
+ functionality were factored into quintagroup.captcha.core package
+
+2.0.0 - July 15, 2009
+---------------------
+
+* product was transformed to meet new standards: eggified package
+
+* compatibility with Plone 3.x added
+
+* support for earlier Plone versions 2.0.x -2.5.x removed
+
+* test install/uninstall skins & configlet added
+
+1.3.4 - March 2, 2009
+---------------------
+
+* Fixed bug in method parseKey [Maik Röder]
Index: /quintagroup.plonecaptchas/tags/4.1/docs/INSTALL.txt
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/docs/INSTALL.txt (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/docs/INSTALL.txt (revision 3272)
@@ -0,0 +1,90 @@
+Installation
+============
+
+Buildout
+--------
+
+To install quintagroup.plonecaptchas to your buildout-based project:
+
+* Add ``quintagroup.plonecaptchas`` to the list of eggs to install::
+
+ [buildout]
+ ...
+ eggs =
+ ...
+ quintagroup.plonecaptchas
+
+* Tell the plone.recipe.zope2instance recipe to install a ZCML slug::
+
+ [instance]
+ recipe = plone.recipe.zope2instance
+ ...
+ zcml =
+ quintagroup.plonecaptchas
+
+* Re-run buildout, e.g. with::
+
+ $ ./bin/buildout
+
+* Restart the Zope server, e.g with the following command in the terminal::
+
+ $ ./bin/instance restart
+
+* Install ``Plone Captchas`` with Quickinstaller in Plone (Site Setup -> Add/Remove Products).
+``Quintagroup Captcha Core`` will automatically be installed as dependency.
+
+
+Traditional Zope 2 instance
+---------------------------
+
+To install quintagroup.plonecaptchas into the global Python environment (or a workingenv),
+using a traditional Zope 2 instance, you can do this:
+
+* Copy ``quintagroup`` folder to your instance's ``/lib/python`` directory.
+
+* Create a file called ``quintagroup.plonecaptchas-configure.zcml`` in your instance's ``/etc/package-includes`` directory. The file
+should only contain this::
+
+
+
+* Restart the Zope server, for example with the following command in the terminal::
+
+ $ ./bin/zopectl restart
+
+* Install ``Plone Captchas`` with Quickinstaller in Plone (Site Setup -> Add/Remove Products).
+``Quintagroup Captcha Core`` will automatically be installed as dependency.
+
+
+Protecting Register form with captcha
+-------------------------------------
+
+quintagroup.plonecaptchas does not automatically plug to Plone's default registration
+(/@@register), to protect register form with captcha - you must follow the instructions here:
+http://projects.quintagroup.com/products/wiki/quintagroup.plonecaptchas#JoinForm
+
+
+Migration notes
+===============
+
+Following migration notes must be done only if you protect join (registration) form with captcha.
+All steps performed in ZMI (/manage_main).
+
+=== Migration from Plone-3.X to Plone-3.Y ===
+
+If you have Plone-3.X site with installed quintagroup.plonecaptchas v3 package, and want to migrate site to Plone-3.Y, you must perform following steps:
+ * migrate your plone site to Plone-3.Y
+ * update *Directory:* property of `/portal_skins/captchas_join_form` Filesystem Directory View' - go to `/portal_skins/captchas_join_form/manage_propertiesForm` and update value of the *Directory* property according to the following rooles:
+ * for Plone-3.0: quintagroup.plonecaptchas:skins/captchas_join_form_30
+ * for Plone-3.1 or Plone-3.2: quintagroup.plonecaptchas:skins/captchas_join_form_31_32
+ * for Plone-3.3+: quintagroup.plonecaptchas:skins/captchas_join_form_33
+
+
+=== Migration from Plone-3 to Plone-4 ===
+
+If you have Plone-3 site with installed quintagroup.plonecaptchas v3 package, and want to migrate site to Plone-4, you must perform following steps:
+ * update plone-4 buildout/instance - to use quintagroup.plonecaptchas v4 package instead of quintagroup.plonecaptchas v3
+ * migrate your plone site to Plone-4
+ * remove `/portal_skins/captchas_join_form` Filesystem Directory View'
+ * remove *captchas_join_form* layer from all skins in `/portal_skins/manage_propertiesForm`
+ * run all steps with "Plone Captchas Register Forms for Plone 4" upgrade profile - go to `/portal_setup/manage_importSteps`, select mentioned profile and push "Import all steps" button.
+
Index: /quintagroup.plonecaptchas/tags/4.1/docs/LICENSE.GPL
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/docs/LICENSE.GPL (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/docs/LICENSE.GPL (revision 3272)
@@ -0,0 +1,225 @@
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
Index: /quintagroup.plonecaptchas/tags/4.1/docs/LICENSE.txt
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/docs/LICENSE.txt (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/docs/LICENSE.txt (revision 3272)
@@ -0,0 +1,16 @@
+ quintagroup.plonecaptchas is copyright Quintagroup
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ MA 02111-1307 USA.
Index: /quintagroup.plonecaptchas/tags/4.1/quintagroup/__init__.py
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/quintagroup/__init__.py (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/quintagroup/__init__.py (revision 3272)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Index: /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/Extensions/Install.py
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/Extensions/Install.py (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/Extensions/Install.py (revision 3272)
@@ -0,0 +1,30 @@
+import transaction
+from Products.CMFCore.utils import getToolByName
+REQUIRED = 'quintagroup.captcha.core'
+from quintagroup.plonecaptchas.config import HAS_APP_DISCUSSION
+from quintagroup.plonecaptchas.setuphandlers import registerDiscussionLayer
+
+
+def install(self):
+ qi = getToolByName(self, 'portal_quickinstaller')
+ # install required quintagroup.captcha.core product
+ # BBB: Need to success installation in Plone<3.1
+ # (with GenericSetup < v1.4.2, where dependency
+ # support was not yet implemented)
+ if not REQUIRED in qi.listInstalledProducts():
+ qi.installProduct(REQUIRED)
+ # install plonecaptchas
+ gs = getToolByName(self, 'portal_setup')
+ profile = 'profile-quintagroup.plonecaptchas:default'
+ gs.runAllImportStepsFromProfile(profile)
+ if HAS_APP_DISCUSSION:
+ # register browser layer
+ registerDiscussionLayer(self)
+ transaction.savepoint()
+
+
+def uninstall(self):
+ portal_setup = getToolByName(self, 'portal_setup')
+ profile = 'profile-quintagroup.plonecaptchas:uninstall'
+ portal_setup.runAllImportStepsFromProfile(profile, purge_old=False)
+ transaction.savepoint()
Index: /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/Extensions/__init__.py
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/Extensions/__init__.py (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/Extensions/__init__.py (revision 3272)
@@ -0,0 +1,1 @@
+#
Index: /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/__init__.py
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/__init__.py (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/__init__.py (revision 3272)
@@ -0,0 +1,14 @@
+from zope.i18nmessageid import MessageFactory
+
+from AccessControl import ModuleSecurityInfo
+
+product = 'quintagroup.plonecaptchas'
+ProductMessageFactory = MessageFactory(product)
+ModuleSecurityInfo(product).declarePublic("ProductMessageFactory")
+
+#from quintagroup.plonecaptchas import config
+#allow_module('quintagroup.plonecaptchas.config')
+
+
+def initialize(context):
+ pass
Index: /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/__init__.py
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/__init__.py (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/__init__.py (revision 3272)
@@ -0,0 +1,1 @@
+#
Index: /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/configure.zcml
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/configure.zcml (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/configure.zcml (revision 3272)
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
Index: /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/newuser_form.pt
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/newuser_form.pt (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/newuser_form.pt (revision 3272)
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/register.py
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/register.py (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/register.py (revision 3272)
@@ -0,0 +1,30 @@
+from zope.formlib import form
+from zope.interface import Interface
+from plone.app.users.browser.register import RegistrationForm
+
+from quintagroup.formlib.captcha import Captcha
+from quintagroup.formlib.captcha import CaptchaWidget
+
+from quintagroup.plonecaptchas import ProductMessageFactory as _
+
+
+class CaptchaSchema(Interface):
+ captcha = Captcha(
+ title=_(u'Type the code'),
+ description=_(u'Type the code from the picture shown below.'))
+
+
+class CaptchaRegistrationForm(RegistrationForm):
+ """Registration form with captacha."""
+
+ @property
+ def form_fields(self):
+ """Add captcha field to form_fields."""
+ ffields = super(CaptchaRegistrationForm, self).form_fields
+ if len(ffields):
+ ffields = ffields + form.Fields(CaptchaSchema)
+ # XXX: Because of raising ConfigurationConflictError when include
+ # configure.zcml slug of quintagroup.formlib.captcha, we must
+ # explicytly define custom CaptchaWidget widget for Captcha field.
+ ffields["captcha"].custom_widget = CaptchaWidget
+ return ffields
Index: /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/register_form.pt
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/register_form.pt (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/browser/register_form.pt (revision 3272)
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This site doesn't have a valid email setup, so you
+ cannot register at this time.
+
+ This site doesn't have a valid email setup, so you cannot use
+ any contact forms.
+
+
+
+
+
+
+
+ Fill in this form to contact the site owners.
+
+
+
+
+
+
+
+
Index: /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/skins/captchas_contact_info/contact-info.cpt.metadata
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/skins/captchas_contact_info/contact-info.cpt.metadata (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/skins/captchas_contact_info/contact-info.cpt.metadata (revision 3272)
@@ -0,0 +1,12 @@
+[default]
+title= Contact information
+
+[security]
+View=0:Anonymous
+
+[validators]
+validators=validate_site_feedback, captcha_validator
+
+[actions]
+action.success=traverse_to:string:send_feedback_site
+action.failure=traverse_to:string:contact-info
Index: /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/skins/captchas_discussion/discussion_reply.cpy
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/skins/captchas_discussion/discussion_reply.cpy (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/skins/captchas_discussion/discussion_reply.cpy (revision 3272)
@@ -0,0 +1,68 @@
+## Script (Python) "discussion_reply"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind state=state
+##bind subpath=traverse_subpath
+##parameters=subject,body_text,text_format='plain',username=None,password=None
+##title=Reply to content
+
+from Products.PythonScripts.standard import url_quote_plus
+from Products.CMFCore.utils import getToolByName
+from Products.CMFPlone import PloneMessageFactory as _
+mtool = getToolByName(context, 'portal_membership')
+dtool = getToolByName(context, 'portal_discussion')
+req = context.REQUEST
+
+if username or password:
+ # The user username/password inputs on on the comment form were used,
+ # which might happen when anonymous commenting is enabled. If they typed
+ # something in to either of the inputs, we send them to 'logged_in'.
+ # 'logged_in' will redirect them back to this script if authentication
+ # succeeds with a query string which will post the message appropriately
+ # and show them the result. if 'logged_in' fails, the user will be
+ # presented with the stock login failure page. This all depends
+ # heavily on cookiecrumbler, but I believe that is a Plone requirement.
+ came_from = '%s?subject=%s&body_text=%s' % (req['URL'], subject, body_text)
+ came_from = url_quote_plus(came_from)
+ portal_url = context.portal_url()
+
+ return req.RESPONSE.redirect(
+ '%s/logged_in?__ac_name=%s'
+ '&__ac_password=%s'
+ '&came_from=%s' % (portal_url,
+ url_quote_plus(username),
+ url_quote_plus(password),
+ came_from,
+ )
+ )
+
+# if (the user is already logged in) or (if anonymous commenting is enabled and
+# they posted without typing a username or password into the form), we do
+# the following
+
+creator = mtool.getAuthenticatedMember().getId()
+tb = dtool.getDiscussionFor(context)
+id = tb.createReply(title=subject, text=body_text, Creator=creator)
+reply = tb.getReply(id)
+
+# TODO THIS NEEDS TO GO AWAY!
+if hasattr(dtool.aq_explicit, 'cookReply'):
+ dtool.cookReply(reply, text_format='plain')
+
+parent = tb.aq_parent
+
+# return to the discussable object.
+redirect_target = context.plone_utils.getDiscussionThread(tb)[0]
+view = redirect_target.getTypeInfo().getActionInfo('object/view',
+ redirect_target)['url']
+anchor = reply.getId()
+
+from Products.CMFPlone.utils import transaction_note
+transaction_note('Added comment to %s at %s' % (parent.title_or_id(),
+ reply.absolute_url()))
+
+context.plone_utils.addPortalMessage(_(u'Comment added.'))
+target = '%s#%s' % (view, anchor)
+return req.RESPONSE.redirect(target)
Index: /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/skins/captchas_discussion/discussion_reply.cpy.metadata
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/skins/captchas_discussion/discussion_reply.cpy.metadata (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/skins/captchas_discussion/discussion_reply.cpy.metadata (revision 3272)
@@ -0,0 +1,5 @@
+[validators]
+validators=captcha_validator
+
+[actions]
+action.failure=traverse_to:string:discussion_reply_form
Index: /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/skins/captchas_discussion/discussion_reply_form.cpt
===================================================================
--- /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/skins/captchas_discussion/discussion_reply_form.cpt (revision 3272)
+++ /quintagroup.plonecaptchas/tags/4.1/quintagroup/plonecaptchas/skins/captchas_discussion/discussion_reply_form.cpt (revision 3272)
@@ -0,0 +1,191 @@
+
+
+
+
+
+
+
+
+
+
+
Title
+
+ Description
+
+
+
+
+
+
+
+
+
+
+
+
+ Comment title
+
+
+ Posted by
+ Poster Name
+ Anonymous User
+ at
+ 8/23/2001 12:40:44 PM
+
Title
+