[CMF-checkins] SVN: CMF/trunk/C - fixed unicode issues in mail templates

Yvo Schubbe y.2006_ at wcm-solutions.de
Tue Feb 14 16:47:31 EST 2006


Log message for revision 41621:
  - fixed unicode issues in mail templates
  - disabled password encryption
  - updated cmf_default.pot

Changed:
  U   CMF/trunk/CHANGES.txt
  U   CMF/trunk/CMFDefault/RegistrationTool.py
  U   CMF/trunk/CMFDefault/locales/cmf_default.pot
  U   CMF/trunk/CMFDefault/setuphandlers.py
  D   CMF/trunk/CMFDefault/skins/zpt_generic/mail_password_template.pt
  A   CMF/trunk/CMFDefault/skins/zpt_generic/member_password_mail.py
  A   CMF/trunk/CMFDefault/skins/zpt_generic/member_password_mail_template.pt
  A   CMF/trunk/CMFDefault/skins/zpt_generic/member_registered_mail.py
  A   CMF/trunk/CMFDefault/skins/zpt_generic/member_registered_mail_template.pt
  D   CMF/trunk/CMFDefault/skins/zpt_generic/registered_notify_template.pt

-=-
Modified: CMF/trunk/CHANGES.txt
===================================================================
--- CMF/trunk/CHANGES.txt	2006-02-14 20:30:28 UTC (rev 41620)
+++ CMF/trunk/CHANGES.txt	2006-02-14 21:47:30 UTC (rev 41621)
@@ -123,9 +123,9 @@
 
   Bug Fixes
 
-    - CMFDefault skins: Refactored 'logged_in' page and 'password_form'.
-      'logged_in' now redirects to the 'password_form' if a new member has to
-      change her password.
+    - CMFDefault setuphandlers: Disabled password encryption.
+      'registeredNotify' and 'mailPassword' don't work with encrypted
+      passwords.
 
     - CMFDefault skins: Fixed clipboard data validation.
       Split off validateClipboardData from folder_paste_control.
@@ -183,6 +183,15 @@
 
   Others
 
+    - CMFDefault RegistrationTool and skins: Refactored mail creation.
+      'mailPassword' now calls the 'member_password_mail' script and
+      'registeredNotify' the 'member_registered_mail' script. These scripts
+      call the templates and do the necessary string decoding and encoding.
+
+    - CMFDefault skins: Refactored 'logged_in' page and 'password_form'.
+      'logged_in' now redirects to the 'password_form' if a new member has to
+      change her password.
+
     - Replaced deprecated 'manage_afterAdd' and 'manage_beforeDelete' hooks
       in CookieCrumbler with a Z3-style event subscriber which does the
       registration with the container's __before_traverse__.

Modified: CMF/trunk/CMFDefault/RegistrationTool.py
===================================================================
--- CMF/trunk/CMFDefault/RegistrationTool.py	2006-02-14 20:30:28 UTC (rev 41620)
+++ CMF/trunk/CMFDefault/RegistrationTool.py	2006-02-14 21:47:30 UTC (rev 41621)
@@ -18,6 +18,7 @@
 import re
 
 from AccessControl import ClassSecurityInfo
+from Acquisition import aq_base
 from Globals import InitializeClass
 
 from Products.CMFCore.RegistrationTool import RegistrationTool as BaseTool
@@ -130,12 +131,15 @@
         # 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).
-        mail_text = self.mail_password_template( self
-                                               , REQUEST
-                                               , member=member
-                                               , password=member.getPassword()
-                                               )
+        method = getattr(self, 'member_password_mail',
+                         getattr(self, 'mail_password_template'))
+        kw = {'member': member, 'password': member.getPassword()}
 
+        if getattr(aq_base(method), 'isDocTemp', 0):
+            mail_text = method(self, self.REQUEST, **kw)
+        else:
+            mail_text = method(**kw)
+
         host = self.MailHost
         host.send( mail_text )
 
@@ -169,13 +173,15 @@
         # 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).
-        mail_text = self.registered_notify_template( self
-                                                   , self.REQUEST
-                                                   , member=member
-                                                   , password=password
-                                                   , email=email
-                                                   )
+        method = getattr(self, 'member_registered_mail',
+                         getattr(self, 'registered_notify_template'))
+        kw = {'member': member, 'password': password, 'email': email}
 
+        if getattr(aq_base(method), 'isDocTemp', 0):
+            mail_text = method(self, self.REQUEST, **kw)
+        else:
+            mail_text = method(**kw)
+
         host = self.MailHost
         host.send( mail_text )
 

Modified: CMF/trunk/CMFDefault/locales/cmf_default.pot
===================================================================
--- CMF/trunk/CMFDefault/locales/cmf_default.pot	2006-02-14 20:30:28 UTC (rev 41620)
+++ CMF/trunk/CMFDefault/locales/cmf_default.pot	2006-02-14 21:47:30 UTC (rev 41621)
@@ -13,14 +13,14 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: CMF 2.0\n"
-"POT-Creation-Date: Fri Feb 10 13:04:50 2006\n"
+"POT-Creation-Date: Tue Feb 14 21:58:36 2006\n"
 "Language-Team: CMF Developers <zope-cmf at zope.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 #: CMFCore/RegistrationTool.py:144
-#: CMFDefault/RegistrationTool.py:80
+#: CMFDefault/RegistrationTool.py:81
 msgid "The login name you selected is already in use or is not valid. Please choose another."
 msgstr ""
 
@@ -28,43 +28,43 @@
 msgid "Intervening changes from elsewhere detected. Please refetch the document and reapply your changes. (You may be able to recover your version using the browser 'back' button, but will have to apply them to a freshly fetched copy.)"
 msgstr ""
 
-#: CMFDefault/RegistrationTool.py:118
-#: CMFDefault/RegistrationTool.py:152
+#: CMFDefault/RegistrationTool.py:119
+#: CMFDefault/RegistrationTool.py:156
 msgid "The username you entered could not be found."
 msgstr ""
 
-#: CMFDefault/RegistrationTool.py:124
+#: CMFDefault/RegistrationTool.py:125
 msgid "That user does not have an email address."
 msgstr ""
 
-#: CMFDefault/RegistrationTool.py:161
+#: CMFDefault/RegistrationTool.py:165
 # Default: ""
 msgid "No email address is registered for member: ${member_id}"
 msgstr ""
 
-#: CMFDefault/RegistrationTool.py:54
+#: CMFDefault/RegistrationTool.py:55
 msgid "You must enter a password."
 msgstr ""
 
-#: CMFDefault/RegistrationTool.py:57
+#: CMFDefault/RegistrationTool.py:58
 msgid "Your password must contain at least 5 characters."
 msgstr ""
 
-#: CMFDefault/RegistrationTool.py:60
+#: CMFDefault/RegistrationTool.py:61
 msgid "Your password and confirmation did not match. Please try again."
 msgstr ""
 
-#: CMFDefault/RegistrationTool.py:77
+#: CMFDefault/RegistrationTool.py:78
 msgid "You must enter a valid name."
 msgstr ""
 
-#: CMFDefault/RegistrationTool.py:85
+#: CMFDefault/RegistrationTool.py:86
 msgid "You must enter an email address."
 msgstr ""
 
-#: CMFDefault/RegistrationTool.py:89
-#: CMFDefault/RegistrationTool.py:98
-#: CMFDefault/RegistrationTool.py:104
+#: CMFDefault/RegistrationTool.py:90
+#: CMFDefault/RegistrationTool.py:99
+#: CMFDefault/RegistrationTool.py:105
 msgid "You must enter a valid email address."
 msgstr ""
 
@@ -355,7 +355,7 @@
 #: CMFDefault/skins/zpt_generic/main_template.pt:207
 #: CMFDefault/skins/zpt_generic/main_template.pt:221
 #: CMFDefault/skins/zpt_generic/main_template.pt:235
-#: CMFDefault/skins/zpt_generic/main_template.pt:270
+#: CMFDefault/skins/zpt_generic/main_template.pt:268
 #: CMFDefault/skins/zpt_generic/review.pt:59
 #: CMFDefault/skins/zpt_generic/roster.pt:46
 #: CMFDefault/skins/zpt_generic/search_results_template.pt:37
@@ -1160,12 +1160,14 @@
 
 #: CMFDefault/skins/zpt_generic/join_template.pt:59
 #: CMFDefault/skins/zpt_generic/login_form.pt:24
+#: CMFDefault/skins/zpt_generic/member_registered_mail_template.pt:27
 #: CMFDefault/skins/zpt_generic/password_form_template.pt:26
 msgid "Member ID"
 msgstr ""
 
 #: CMFDefault/skins/zpt_generic/join_template.pt:73
 #: CMFDefault/skins/zpt_generic/login_form.pt:31
+#: CMFDefault/skins/zpt_generic/member_registered_mail_template.pt:29
 msgid "Password"
 msgstr ""
 
@@ -1245,23 +1247,11 @@
 msgid "Your password has been mailed. <br /> It should arrive in your mailbox momentarily."
 msgstr ""
 
-#: CMFDefault/skins/zpt_generic/mail_password_template.pt:12
-msgid "Your password: ${password}"
-msgstr ""
-
-#: CMFDefault/skins/zpt_generic/mail_password_template.pt:17
-msgid "Request made by IP ${ip} at ${time}"
-msgstr ""
-
-#: CMFDefault/skins/zpt_generic/mail_password_template.pt:4
-msgid "${portal_title}: Membership reminder"
-msgstr ""
-
 #: CMFDefault/skins/zpt_generic/main_template.pt:199
 msgid "Status:"
 msgstr ""
 
-#: CMFDefault/skins/zpt_generic/main_template.pt:297
+#: CMFDefault/skins/zpt_generic/main_template.pt:295
 msgid "Permanent Link:"
 msgstr ""
 
@@ -1277,6 +1267,46 @@
 msgid "search"
 msgstr ""
 
+#: CMFDefault/skins/zpt_generic/member_password_mail_template.pt:13
+msgid "Request made by IP ${ip} at ${time}"
+msgstr ""
+
+#: CMFDefault/skins/zpt_generic/member_password_mail_template.pt:2
+msgid "${portal_title}: Membership reminder"
+msgstr ""
+
+#: CMFDefault/skins/zpt_generic/member_password_mail_template.pt:8
+msgid "Your password: ${password}"
+msgstr ""
+
+#: CMFDefault/skins/zpt_generic/member_registered_mail_template.pt:10
+msgid "You have been registered as a member of \"${portal_title}\", which allows you to personalize your view of the website and participate in the community."
+msgstr ""
+
+#: CMFDefault/skins/zpt_generic/member_registered_mail_template.pt:15
+msgid "This describes the purpose of the website:"
+msgstr ""
+
+#: CMFDefault/skins/zpt_generic/member_registered_mail_template.pt:2
+msgid "${portal_title}: Your Membership Information"
+msgstr ""
+
+#: CMFDefault/skins/zpt_generic/member_registered_mail_template.pt:21
+msgid "Visit us at ${portal_url}"
+msgstr ""
+
+#: CMFDefault/skins/zpt_generic/member_registered_mail_template.pt:24
+msgid "Here is your login data (mind upper and lower case):"
+msgstr ""
+
+#: CMFDefault/skins/zpt_generic/member_registered_mail_template.pt:32
+msgid "You can use this URL to log in:"
+msgstr ""
+
+#: CMFDefault/skins/zpt_generic/member_registered_mail_template.pt:37
+msgid "Be aware that this URL might wrap over two lines. If your browser shows an error message when you try to access the URL please make sure that you put in the complete string."
+msgstr ""
+
 #: CMFDefault/skins/zpt_generic/members_delete_template.pt:15
 msgid "The following members - including all their data, home folders and roles - are selected for deletion:"
 msgstr ""
@@ -1561,34 +1591,6 @@
 msgid "Charset used to decode portal content strings. If empty, 'ascii' is used."
 msgstr ""
 
-#: CMFDefault/skins/zpt_generic/registered_notify_template.pt:16
-msgid "You have been registered as a member of \"${portal_title}\", which allows you to personalize your view of the website and participate in the community."
-msgstr ""
-
-#: CMFDefault/skins/zpt_generic/registered_notify_template.pt:21
-msgid "This describes the purpose of the website:"
-msgstr ""
-
-#: CMFDefault/skins/zpt_generic/registered_notify_template.pt:27
-msgid "Visit us at ${portal_url}"
-msgstr ""
-
-#: CMFDefault/skins/zpt_generic/registered_notify_template.pt:35
-msgid "Your member id and password are: Member ID: ${member_id} Password: ${password}"
-msgstr ""
-
-#: CMFDefault/skins/zpt_generic/registered_notify_template.pt:38
-msgid "You can use this URL to log in:"
-msgstr ""
-
-#: CMFDefault/skins/zpt_generic/registered_notify_template.pt:43
-msgid "Be aware that this URL might wrap over two lines. If your browser shows an error message when you try to access the URL please make sure that you put in the complete string."
-msgstr ""
-
-#: CMFDefault/skins/zpt_generic/registered_notify_template.pt:7
-msgid "${portal_title}: Your Membership Information"
-msgstr ""
-
 #: CMFDefault/skins/zpt_generic/review.pt:106
 msgid "There are no items matching your specified criteria."
 msgstr ""
@@ -1625,27 +1627,27 @@
 msgid "items"
 msgstr ""
 
-#: CMFDefault/skins/zpt_generic/search_form.py:25
+#: CMFDefault/skins/zpt_generic/search_form.py:24
 msgid "Ever"
 msgstr ""
 
-#: CMFDefault/skins/zpt_generic/search_form.py:28
+#: CMFDefault/skins/zpt_generic/search_form.py:27
 msgid "Last login"
 msgstr ""
 
-#: CMFDefault/skins/zpt_generic/search_form.py:29
+#: CMFDefault/skins/zpt_generic/search_form.py:28
 msgid "Yesterday"
 msgstr ""
 
-#: CMFDefault/skins/zpt_generic/search_form.py:30
+#: CMFDefault/skins/zpt_generic/search_form.py:29
 msgid "Last week"
 msgstr ""
 
-#: CMFDefault/skins/zpt_generic/search_form.py:31
+#: CMFDefault/skins/zpt_generic/search_form.py:30
 msgid "Last month"
 msgstr ""
 
-#: CMFDefault/skins/zpt_generic/search_form.py:38
+#: CMFDefault/skins/zpt_generic/search_form.py:37
 #: CMFDefault/skins/zpt_generic/folder_localrole_form.pt:38
 msgid "Search"
 msgstr ""

Modified: CMF/trunk/CMFDefault/setuphandlers.py
===================================================================
--- CMF/trunk/CMFDefault/setuphandlers.py	2006-02-14 20:30:28 UTC (rev 41620)
+++ CMF/trunk/CMFDefault/setuphandlers.py	2006-02-14 21:47:30 UTC (rev 41621)
@@ -32,5 +32,6 @@
         return 'Various settings: Nothing to import.'
     site.Members.manage_addProduct['OFSP'].manage_addDTMLMethod('index_html',
                                         'Member list', '<dtml-return roster>')
+    site.acl_users.encrypt_passwords = False
 
     return 'Various settings from PortalGenerator imported.'

Deleted: CMF/trunk/CMFDefault/skins/zpt_generic/mail_password_template.pt
===================================================================
--- CMF/trunk/CMFDefault/skins/zpt_generic/mail_password_template.pt	2006-02-14 20:30:28 UTC (rev 41620)
+++ CMF/trunk/CMFDefault/skins/zpt_generic/mail_password_template.pt	2006-02-14 21:47:30 UTC (rev 41621)
@@ -1,19 +0,0 @@
-<tal:page i18n:domain="cmf_default"
-   tal:define="ptool context/portal_properties;
-               member_email options/member/email | string:foo at example.org"
->Subject: <tal:span i18n:translate=""><tal:span i18n:name="portal_title"
-    tal:content="ptool/title" />: Membership reminder</tal:span>
-From: <tal:span
-   tal:content="ptool/email_from_name" /> <tal:span
-   tal:replace="structure string:&lt;${ptool/email_from_address}>" />
-To: <tal:span tal:replace="structure string:&lt;${member_email}>" />
-Content-Type: text/plain
-
-<tal:span i18n:translate="">Your password: <tal:span i18n:name="password"
-    tal:content="options/password | default">baz</tal:span></tal:span>
-
-<tal:span i18n:translate="">Request made by IP <tal:span i18n:name="ip"
-    tal:define="ip python:request.HTTP_X_FORWARDED_FOR or request.REMOTE_ADDR"
-    tal:content="ip" /> at <tal:span i18n:name="time"
-    tal:content="context/ZopeTime" /></tal:span>
-</tal:page>

Added: CMF/trunk/CMFDefault/skins/zpt_generic/member_password_mail.py
===================================================================
--- CMF/trunk/CMFDefault/skins/zpt_generic/member_password_mail.py	2006-02-14 20:30:28 UTC (rev 41620)
+++ CMF/trunk/CMFDefault/skins/zpt_generic/member_password_mail.py	2006-02-14 21:47:30 UTC (rev 41621)
@@ -0,0 +1,29 @@
+##parameters=tool=None, request=None, member=None, password='baz', **kw
+##
+from Products.CMFCore.utils import getToolByName
+from Products.CMFDefault.utils import decode
+
+atool = getToolByName(script, 'portal_actions')
+ptool = getToolByName(script, 'portal_properties')
+utool = getToolByName(script, 'portal_url')
+default_charset = ptool.getProperty('default_charset')
+portal_url = utool()
+
+
+options = {}
+
+email_from_name = ptool.getProperty('email_from_name')
+email_from_address = ptool.getProperty('email_from_address')
+options['portal_address'] = '%s <%s>' % (email_from_name, email_from_address)
+member_address = member and member.email or 'foo at example.org'
+options['member_address'] = '<%s>' % member_address
+options['content_type'] = 'text/plain; charset=%s' % default_charset
+
+options['portal_title'] = ptool.title()
+options['password'] = password
+
+rendered = context.member_password_mail_template(**decode(options, script))
+if isinstance(rendered, unicode):
+    return rendered.encode(default_charset)
+else:
+    return rendered


Property changes on: CMF/trunk/CMFDefault/skins/zpt_generic/member_password_mail.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Copied: CMF/trunk/CMFDefault/skins/zpt_generic/member_password_mail_template.pt (from rev 41610, CMF/trunk/CMFDefault/skins/zpt_generic/mail_password_template.pt)
===================================================================
--- CMF/trunk/CMFDefault/skins/zpt_generic/mail_password_template.pt	2006-02-12 18:07:46 UTC (rev 41610)
+++ CMF/trunk/CMFDefault/skins/zpt_generic/member_password_mail_template.pt	2006-02-14 21:47:30 UTC (rev 41621)
@@ -0,0 +1,15 @@
+<tal:page i18n:domain="cmf_default"
+>Subject: <tal:span i18n:translate=""><tal:span i18n:name="portal_title"
+    tal:content="options/portal_title" />: Membership reminder</tal:span>
+From: <tal:span tal:replace="structure options/portal_address" />
+To: <tal:span tal:replace="structure options/member_address" />
+Content-Type: <tal:span tal:replace="structure options/content_type" />
+
+<tal:span i18n:translate="">Your password: <tal:span i18n:name="password"
+    tal:content="options/password | default">baz</tal:span></tal:span>
+
+<tal:span i18n:translate="">Request made by IP <tal:span i18n:name="ip"
+    tal:define="ip python:request.HTTP_X_FORWARDED_FOR or request.REMOTE_ADDR"
+    tal:content="ip" /> at <tal:span i18n:name="time"
+    tal:content="context/ZopeTime" /></tal:span>
+</tal:page>

Added: CMF/trunk/CMFDefault/skins/zpt_generic/member_registered_mail.py
===================================================================
--- CMF/trunk/CMFDefault/skins/zpt_generic/member_registered_mail.py	2006-02-14 20:30:28 UTC (rev 41620)
+++ CMF/trunk/CMFDefault/skins/zpt_generic/member_registered_mail.py	2006-02-14 21:47:30 UTC (rev 41621)
@@ -0,0 +1,37 @@
+##parameters=tool=None, request=None, member=None, password='baz', email='foo at example.org', **kw
+##
+from Products.CMFCore.utils import getToolByName
+from Products.CMFDefault.utils import decode
+
+atool = getToolByName(script, 'portal_actions')
+ptool = getToolByName(script, 'portal_properties')
+utool = getToolByName(script, 'portal_url')
+default_charset = ptool.getProperty('default_charset')
+portal_url = utool()
+
+
+options = {}
+
+email_from_name = ptool.getProperty('email_from_name')
+email_from_address = ptool.getProperty('email_from_address')
+options['portal_address'] = '%s <%s>' % (email_from_name, email_from_address)
+options['member_address'] = '<%s>' % email
+options['content_type'] = 'text/plain; charset=%s' % default_charset
+
+options['portal_title'] = ptool.title()
+options['portal_description'] = ptool.getProperty('description')
+options['portal_url'] = portal_url
+
+member_id = member and member.getId() or 'foo'
+options['member_id'] = member_id
+options['password'] = password
+
+target = atool.getActionInfo('user/login')['url']
+options['login_url'] = '%s' % target
+options['signature'] = email_from_name
+
+rendered = context.member_registered_mail_template(**decode(options, script))
+if isinstance(rendered, unicode):
+    return rendered.encode(default_charset)
+else:
+    return rendered


Property changes on: CMF/trunk/CMFDefault/skins/zpt_generic/member_registered_mail.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Copied: CMF/trunk/CMFDefault/skins/zpt_generic/member_registered_mail_template.pt (from rev 41610, CMF/trunk/CMFDefault/skins/zpt_generic/registered_notify_template.pt)
===================================================================
--- CMF/trunk/CMFDefault/skins/zpt_generic/registered_notify_template.pt	2006-02-12 18:07:46 UTC (rev 41610)
+++ CMF/trunk/CMFDefault/skins/zpt_generic/member_registered_mail_template.pt	2006-02-14 21:47:30 UTC (rev 41621)
@@ -0,0 +1,44 @@
+<tal:page i18n:domain="cmf_default"
+>Subject: <tal:span i18n:translate=""><tal:span i18n:name="portal_title"
+    tal:content="options/portal_title"
+    />: Your Membership Information</tal:span>
+From: <tal:span tal:replace="structure options/portal_address" />
+To: <tal:span tal:replace="structure options/member_address" />
+Content-Type: <tal:span tal:replace="structure options/content_type" />
+
+<tal:span i18n:translate=""
+>You have been registered as a member of "<tal:span i18n:name="portal_title"
+   tal:content="options/portal_title" />", which
+allows you to personalize your view of the website and participate in the
+community.</tal:span>
+<tal:case tal:condition="options/portal_description">
+<tal:span i18n:translate=""
+>This describes the purpose of the website:</tal:span>
+
+<tal:span tal:content="options/portal_description" />
+</tal:case>
+<tal:span i18n:translate=""
+>Visit us at <tal:span i18n:name="portal_url"
+   tal:content="options/portal_url" /></tal:span>
+
+<tal:span i18n:translate=""
+>Here is your login data (mind upper and lower case):</tal:span>
+
+<tal:span i18n:translate=""
+>Member ID</tal:span>: <tal:span tal:content="options/member_id" />
+<tal:span i18n:translate=""
+>Password</tal:span>: <tal:span tal:content="options/password" />
+
+<tal:span i18n:translate=""
+>You can use this URL to log in:</tal:span>
+
+<tal:span tal:content="options/login_url" />
+<tal:case tal:condition="python:len(options['login_url'])>70">
+<tal:span i18n:translate=""
+>Be aware that this URL might wrap over two lines. If your browser shows an
+error message when you try to access the URL please make sure that you put
+in the complete string.</tal:span>
+</tal:case>
+
+<tal:span tal:content="options/signature" />
+</tal:page>

Deleted: CMF/trunk/CMFDefault/skins/zpt_generic/registered_notify_template.pt
===================================================================
--- CMF/trunk/CMFDefault/skins/zpt_generic/registered_notify_template.pt	2006-02-14 20:30:28 UTC (rev 41620)
+++ CMF/trunk/CMFDefault/skins/zpt_generic/registered_notify_template.pt	2006-02-14 21:47:30 UTC (rev 41621)
@@ -1,50 +0,0 @@
-<tal:page i18n:domain="cmf_default"
-   tal:define="atool context/portal_actions;
-               ptool context/portal_properties;
-               utool nocall:context/portal_url;
-               member_email options/member/email | string:foo at example.org;
-               login_url python:atool.getActionInfo('user/login')['url']"
->Subject: <tal:span i18n:translate=""><tal:span i18n:name="portal_title"
-    tal:content="ptool/title" />: Your Membership Information</tal:span>
-From: <tal:span
-   tal:content="ptool/email_from_name" /> <tal:span
-   tal:replace="structure string:&lt;${ptool/email_from_address}>" />
-To: <tal:span tal:replace="structure string:&lt;${member_email}>" />
-Content-Type: text/plain
-
-<tal:span i18n:translate=""
->You have been registered as a member of "<tal:span i18n:name="portal_title"
-   tal:content="ptool/title" />", which
-allows you to personalize your view of the website and participate in the
-community.</tal:span>
-<tal:case tal:condition="ptool/description">
-<tal:span i18n:translate=""
->This describes the purpose of the website:</tal:span>
-
-<tal:span tal:content="ptool/description" />
-</tal:case>
-<tal:span i18n:translate=""
->Visit us at <tal:span i18n:name="portal_url"
-   tal:content="utool" /></tal:span>
-
-<tal:span i18n:translate=""
->Your member id and password are:
-
-Member ID: <tal:span i18n:name="member_id"
-   tal:content="options/member/getId | default">foo</tal:span>
-Password: <tal:span i18n:name="password"
-   tal:content="options/password | default">baz</tal:span></tal:span>
-
-<tal:span i18n:translate=""
->You can use this URL to log in:</tal:span>
-
-<tal:span tal:content="login_url" />
-<tal:case tal:condition="python:len(login_url)>70">
-<tal:span i18n:translate=""
->Be aware that this URL might wrap over two lines. If your browser shows an
-error message when you try to access the URL please make sure that you put
-in the complete string.</tal:span>
-</tal:case>
-
-<tal:span tal:content="ptool/email_from_name" />
-</tal:page>



More information about the CMF-checkins mailing list