[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