[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/ - fixed acquisition context used for mail templates
Yvo Schubbe
y.2011 at wcm-solutions.de
Wed Sep 21 10:40:56 EST 2011
Log message for revision 122875:
- fixed acquisition context used for mail templates
Changed:
U Products.CMFDefault/trunk/Products/CMFDefault/RegistrationTool.py
U Products.CMFDefault/trunk/Products/CMFDefault/tests/RegistrationTool.txt
-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/RegistrationTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/RegistrationTool.py 2011-09-21 14:33:18 UTC (rev 122874)
+++ Products.CMFDefault/trunk/Products/CMFDefault/RegistrationTool.py 2011-09-21 15:40:56 UTC (rev 122875)
@@ -16,10 +16,12 @@
from AccessControl.requestmethod import postonly
from AccessControl.SecurityInfo import ClassSecurityInfo
from Acquisition import aq_base
+from Acquisition import aq_chain
from App.class_init import InitializeClass
from Products.MailHost.interfaces import IMailHost
from zope.component import getUtility
from zope.schema import ValidationError
+from ZPublisher.BaseRequest import RequestContainer
from Products.CMFCore.interfaces import IMembershipTool
from Products.CMFCore.RegistrationTool import RegistrationTool as BaseTool
@@ -136,7 +138,13 @@
# Rather than have the template try to use the mailhost, we will
# render the message ourselves and send it from here (where we
# don't need to worry about 'UseMailHost' permissions).
- method = self.password_email
+ if getattr(self, 'REQUEST', None) is None:
+ context = RequestContainer(REQUEST=REQUEST)
+ for item in reversed(aq_chain(self)):
+ context = aq_base(item).__of__(context)
+ else:
+ context = self
+ method = context.password_email
kw = {'member': member, 'password': member.getPassword()}
if getattr(aq_base(method), 'isDocTemp', 0):
@@ -171,7 +179,13 @@
# Rather than have the template try to use the mailhost, we will
# render the message ourselves and send it from here (where we
# don't need to worry about 'UseMailHost' permissions).
- method = self.registered_email
+ if getattr(self, 'REQUEST', None) is None:
+ context = RequestContainer(REQUEST=REQUEST)
+ for item in reversed(aq_chain(self)):
+ context = aq_base(item).__of__(context)
+ else:
+ context = self
+ method = context.registered_email
kw = {'member': member, 'password': password, 'email': email}
if getattr(aq_base(method), 'isDocTemp', 0):
Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/RegistrationTool.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/RegistrationTool.txt 2011-09-21 14:33:18 UTC (rev 122874)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/RegistrationTool.txt 2011-09-21 15:40:56 UTC (rev 122875)
@@ -15,8 +15,11 @@
>>> class MailHost:
... def send(self, messageText): self.lastMessage = messageText
- >>> def password_email(**kw):
- ... return 'Reminder: %(member)s, %(password)s' % kw
+ >>> class PasswordEmail(Implicit):
+ ... def __call__(self, **kw):
+ ... container = self.aq_parent.aq_inner
+ ... kw['ip'] = container.REQUEST['HTTP_X_FORWARDED_FOR']
+ ... return 'Reminder: %(member)s, %(password)s, %(ip)s' % kw
>>> def mail_password_response(*args):
... return 'done'
@@ -31,6 +34,7 @@
>>> from zope.globalrequest import setRequest
>>> from zope.site.hooks import setSite
>>> from Products.CMFCore.interfaces import IMembershipTool
+ >>> from Products.CMFCore.interfaces import IRegistrationTool
>>> from Products.MailHost.interfaces import IMailHost
>>> setSite(app.site)
>>> setRequest(app.REQUEST)
@@ -38,10 +42,11 @@
>>> sm = getSiteManager()
>>> sm.registerUtility(MailHost(), IMailHost)
>>> sm.registerUtility(MembershipTool(), IMembershipTool)
- >>> rtool = app.site.portal_registration
- >>> rtool.password_email = password_email
+ >>> rtool = sm.getUtility(IRegistrationTool)
+ >>> rtool.password_email = PasswordEmail()
>>> rtool.mail_password_response = mail_password_response
>>> rtool.registered_email = registered_email
+ >>> app.REQUEST.environ['HTTP_X_FORWARDED_FOR'] = 'NNN.NNN.NNN.NNN'
mailPassword sends a password reminder and returns a response page::
@@ -49,7 +54,7 @@
'done'
>>> getUtility(IMailHost).lastMessage
- 'Reminder: foo, secret'
+ 'Reminder: foo, secret, NNN.NNN.NNN.NNN'
registeredNotify sends a welcome message::
More information about the checkins
mailing list