[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/ - improved join form
Yvo Schubbe
cvs-admin at zope.org
Sat Jun 23 14:49:55 UTC 2012
Log message for revision 127053:
- improved join form
Changed:
U Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/join.pt
U Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/join.py
U Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/join.txt
-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/join.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/join.pt 2012-06-23 04:11:43 UTC (rev 127052)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/join.pt 2012-06-23 14:49:50 UTC (rev 127053)
@@ -16,14 +16,6 @@
to change your membership information. </p>
</tal:case>
- <tal:case condition="view/registered">
- <p i18n:translate="">You have been registered as a member.</p>
-
- <p tal:condition="view/validate_email" i18n:translate="">You will receive
- an email shortly containing your password and instructions on how to
- activate your membership.</p>
- </tal:case>
-
<tal:case condition="not: view/isOrdinaryMember">
<metal:macro metal:use-macro="view/base_template/macros/form" />
</tal:case>
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/join.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/join.py 2012-06-23 04:11:43 UTC (rev 127052)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/join.py 2012-06-23 14:49:50 UTC (rev 127053)
@@ -13,8 +13,10 @@
"""Join form.
"""
+import transaction
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from zope.component import getUtility
+from zope.component import queryUtility
from zope.formlib import form
from zope.interface import Interface
from zope.interface import Invalid
@@ -24,6 +26,7 @@
from zope.schema import Password
from Products.CMFCore.interfaces import IActionsTool
+from Products.CMFCore.interfaces import ICookieCrumbler
from Products.CMFCore.interfaces import IMembershipTool
from Products.CMFCore.interfaces import IPropertiesTool
from Products.CMFCore.interfaces import IRegistrationTool
@@ -69,7 +72,6 @@
base_template = EditFormBase.template
template = ViewPageTemplateFile("join.pt")
- registered = False
actions = form.Actions(
form.Action(
@@ -112,7 +114,7 @@
@property
@memoize
def isOrdinaryMember(self):
- return not (self.registered or self.isManager or self.isAnon)
+ return not (self.isManager or self.isAnon)
@property
def title(self):
@@ -142,29 +144,57 @@
u"or is not valid. Please choose another."))
return errors
- def add_member(self, data):
- """Add new member and notify if requested or required"""
+ def _add_member(self, data):
+ member_id = data['member_id']
+ password = data['password'].encode(self._getDefaultCharset())
rtool = getUtility(IRegistrationTool)
- rtool.addMember(
- id=data['member_id'],
- password=data['password'],
- properties={
- 'username': data['member_id'],
- 'email': data['email']
- }
- )
- if self.validate_email or data['send_password']:
- rtool.registeredNotify(data['member_id'])
- self.registered = True
- self.label = _(u'Success')
+ rtool.addMember(id=member_id, password=password,
+ properties={'username': member_id,
+ 'email': data['email']})
+ def _notify_member(self, data):
+ if not (self.validate_email or data['send_password']):
+ return False
+ rtool = getUtility(IRegistrationTool)
+ try:
+ rtool.registeredNotify(data['member_id'], REQUEST=self.request)
+ except IOError:
+ return False
+ return True
+
def handle_register_success(self, action, data):
"""Register user and inform they have been registered"""
- self.add_member(data)
- self.status = _(u'You have been registered as a member.')
- if not self.validate_email:
- self._setRedirect('portal_actions', 'user/login')
+ try:
+ self._add_member(data)
+ except ValueError, errmsg:
+ transaction.abort()
+ self.form_reset = False
+ self.status = errmsg
+ return self.handle_failure(action, data, ())
+ if self.isManager:
+ if self._notify_member(data):
+ self.status = _(u'Member registered and notified.')
+ else:
+ self.status = _(u'Member registered.')
+ return self._setRedirect('portal_actions',
+ 'global/members_register',
+ keys='b_start')
+ if self._notify_member(data):
+ self.status = _(u'You will receive an email shortly containing '
+ u'your password and instructions on how to '
+ u'activate your membership.')
+ else:
+ self.status = _(u'You have been registered as a member.')
+ try:
+ cctool = queryUtility(ICookieCrumbler)
+ ac_name_id = cctool.name_cookie
+ except AttributeError:
+ ac_name_id = '__ac_name'
+ self.request.form[ac_name_id] = data['member_id']
+ return self._setRedirect('portal_actions', 'user/login',
+ keys=ac_name_id)
+
def handle_cancel_success(self, action, data):
return self._setRedirect('portal_actions', 'global/manage_members',
keys='b_start')
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/join.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/join.txt 2012-06-23 04:11:43 UTC (rev 127052)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/join.txt 2012-06-23 14:49:50 UTC (rev 127053)
@@ -15,6 +15,8 @@
Open the join form. Password field should be visible
>>> browser.open('http://localhost/site/@@join.html')
+ >>> '[[cmf_default][Become a Member]]' in browser.contents
+ True
>>> browser.getControl(name='form.password').value == ''
True
@@ -25,10 +27,58 @@
>>> browser.url
'http://localhost/site'
-Cancel redirects managers to the members_manage_form.
+Use the form without input as anonymous user.
+ >>> browser.open('http://localhost/site/@@join.html')
+ >>> browser.getControl('[[cmf_default][Register]]').click()
+ >>> '[[zope][There were errors]]' in browser.contents
+ True
+ >>> '[[zope][Required input is missing.]]' in browser.contents
+ True
+
+Use the form with valid input as anonymous user.
+
+ >>> browser.open('http://localhost/site/@@join.html')
+ >>> browser.getControl(name='form.member_id').value = 'FOO'
+ >>> browser.getControl(name='form.email').value = 'FOO at EXAMPLE.ORG'
+ >>> browser.getControl(name='form.password').value = 'SECRET'
+ >>> browser.getControl(name='form.confirmation').value = 'SECRET'
+ >>> browser.getControl('[[cmf_default][Register]]').click()
+ >>> '[[cmf_default][You have been registered' in browser.contents
+ True
+
+Open the join form as manager.
+
>>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
>>> browser.open('http://localhost/site/@@join.html')
+ >>> '[[cmf_default][Register a New Member]]' in browser.contents
+ True
+ >>> browser.getControl(name='form.password').value == ''
+ True
+
+Cancel redirects managers to the members_manage_form.
+
+ >>> browser.open('http://localhost/site/@@join.html')
>>> browser.getControl('[[cmf_default][Cancel]]').click()
>>> browser.url
'http://localhost/site/members_manage_form'
+
+Use the form without input as manager.
+
+ >>> browser.open('http://localhost/site/@@join.html')
+ >>> browser.getControl('[[cmf_default][Register]]').click()
+ >>> '[[zope][There were errors]]' in browser.contents
+ True
+ >>> '[[zope][Required input is missing.]]' in browser.contents
+ True
+
+Use the form with valid input as manager.
+
+ >>> browser.open('http://localhost/site/@@join.html')
+ >>> browser.getControl(name='form.member_id').value = 'BAR'
+ >>> browser.getControl(name='form.email').value = 'BAR at EXAMPLE.ORG'
+ >>> browser.getControl(name='form.password').value = 'SECRET'
+ >>> browser.getControl(name='form.confirmation').value = 'SECRET'
+ >>> browser.getControl('[[cmf_default][Register]]').click()
+ >>> '[[cmf_default][Member registered.]]' in browser.contents
+ True
More information about the checkins
mailing list