[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/ Member preferences view.

Charlie Clark charlie at begeistert.org
Wed Jun 30 08:47:44 EDT 2010


Log message for revision 114014:
  Member preferences view.

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/configure.zcml
  A   Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/preferences.pt
  A   Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/preferences.py
  A   Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/test_preferences.py

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/configure.zcml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/configure.zcml	2010-06-30 12:47:22 UTC (rev 114013)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/configure.zcml	2010-06-30 12:47:44 UTC (rev 114014)
@@ -50,5 +50,20 @@
       permission="zope.Public"
   />
   
+  <browser:page
+      for="Products.CMFCore.interfaces.ISiteRoot"
+      layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"
+      name="preferences.html"
+      class=".preferences.Preferences"
+      permission="cmf.SetOwnProperties"
+  />
+  
+  <utility
+   component=".preferences.portal_skins"
+   provides="zope.schema.interfaces.IVocabularyFactory"
+   name="cmf.portal_skins"
+  />
+  
+  
 
 </configure>

Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/preferences.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/preferences.pt	                        (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/preferences.pt	2010-06-30 12:47:44 UTC (rev 114014)
@@ -0,0 +1,20 @@
+<html metal:use-macro="context/@@standard_macros/page">
+<body>
+
+<metal:slot metal:fill-slot="body" i18n:domain="cmf_default">
+
+<h1 i18n:translate="">Member Preferences</h1>
+
+   <p i18n:translate="">
+     <a href="password_form" 
+        tal:attributes="href view/change_password"
+        i18n:translate="">Click here</a> to change your password.
+  </p>
+  
+  <metal:macro metal:use-macro="view/base_template/macros/form" />
+   
+
+</metal:slot>
+
+</body>
+</html>

Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/preferences.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/preferences.py	                        (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/preferences.py	2010-06-30 12:47:44 UTC (rev 114014)
@@ -0,0 +1,93 @@
+"""
+Change user preferences
+$Id$
+"""
+
+from zope.schema import Choice, Bool
+from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
+from zope.schema.interfaces import IVocabulary, IVocabularyFactory
+from zope.interface import Interface, directlyProvides, alsoProvides
+from zope.formlib import form
+
+from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
+from Products.CMFCore.utils import Message as _
+from Products.CMFCore.utils import getToolByName
+from Products.CMFDefault.formlib.schema import EmailLine
+from Products.CMFDefault.formlib.form import EditFormBase
+
+
+def portal_skins(context):
+    stool = getToolByName(context, 'portal_skins')
+    return SimpleVocabulary.fromValues(stool.getSkinSelections())
+    
+
+class IPreferencesSchema(Interface):
+    
+    email = EmailLine(
+                title=_(u"E-mail address")
+                )
+
+    listed = Bool(
+                title=_(u"Listed status"),
+                description=_(u"Select to be listed on the public membership roster.")
+                )
+    
+    portal_skin = Choice(
+                title=_(u"Skin"),
+                vocabulary="cmf.portal_skins",
+                required=False)
+
+
+class Preferences(EditFormBase):
+
+    form_fields = form.FormFields(IPreferencesSchema)
+    base_template = EditFormBase.template
+    template = ViewPageTemplateFile("preferences.pt")
+    actions = form.Actions(
+                form.Action(
+                name="change",
+                label=u"Change",
+                success="handle_success",
+                failure="handle_failure"
+                    )
+                )
+                
+    def __init__(self, context, request):
+        super(Preferences, self).__init__(context, request)
+        self.mtool = self._getTool('portal_membership')
+        self.stool = self._getTool('portal_skins')
+        self.atool = self._getTool('portal_actions')
+        
+    def get_skin_cookie(self):
+        """Check for user cookie"""
+        cookies = self.request.cookies
+        return cookies.get('portal_skin')
+
+    @property
+    def member(self):
+        """Get the current user"""
+        return self.mtool.getAuthenticatedMember()
+        
+    def change_password(self):
+        """URL for the password form"""
+        return self.atool.getActionInfo("user/change_password")['url']
+        
+    def setUpWidgets(self, ignore_request=False):
+        """Populate form with member preferences"""
+        data = {}
+        data['email'] = self.member.email
+        data['listed'] = getattr(self.member, 'listed', None)
+        data['portal_skin'] = self.get_skin_cookie()
+        
+        self.widgets = form.setUpDataWidgets(self.form_fields,
+                                        self.prefix,
+                                        self.context,
+                                        self.request,
+                                        data=data,
+                                        ignore_request=False)
+        
+    def handle_success(self, action, data):
+        if 'portal_skin' in data:
+            self.stool.portal_skins.updateSkinCookie()
+        self.member.setProperties(data)
+        self.label = _(u"Member changed.")
\ No newline at end of file


Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/preferences.py
___________________________________________________________________
Added: svn:keywords
   + Id
Added: svn:eol-style
   + native

Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/test_preferences.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/test_preferences.py	                        (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/test_preferences.py	2010-06-30 12:47:44 UTC (rev 114014)
@@ -0,0 +1,77 @@
+##############################################################################
+#
+# Copyright (c) 2010 Zope Foundation and Contributors.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+""" Test Products.CMFDefault.browser.preferences
+
+$Id$
+"""
+
+import unittest
+
+from zope.component.testing import PlacelessSetup
+
+from Products.CMFDefault.browser.skins.tests.test_ursa import (
+                    DummyRequest, DummySite, DummyContext,
+                    DummyPropertiesTool, DummyURLTool, DummyActionsTool
+                    )
+
+class PreferencesFormTests(unittest.TestCase, PlacelessSetup):
+    
+    def setUp(self):
+        PlacelessSetup.setUp(self)
+
+    def tearDown(self):
+        PlacelessSetup.tearDown(self)
+        
+    def _getTargetClass(self):
+        from Products.CMFDefault.browser.membership.join import Join
+        return Join
+
+    def _makeOne(self, site=None):
+        if site is None:
+            site = self._makeSite()
+        request = DummyRequest()
+        return self._getTargetClass()(site, request)
+        
+    def _makeSite(self,):
+        from zope.component import getSiteManager
+        from Products.CMFCore.interfaces import IPropertiesTool
+        site = DummyContext()
+        tool = site.portal_properties = DummyPropertiesTool()
+        sm = getSiteManager()
+        sm.registerUtility(tool, IPropertiesTool)
+        site.portal_url = DummyURLTool(site)
+        site.portal_membership = DummyMembershipTool()
+        site.portal_registration = DummyRegistrationTool()
+        site.portal_actions = DummyActionsTool()
+        site.absolute_url = lambda: 'http://example.com'
+        return site
+        
+    def test_user_folder(self):
+        site = self._makeSite()
+        view = self._makeOne(site)
+                        
+
+class DummyRegistrationTool:
+    pass
+
+
+class DummyMembershipTool:
+    pass
+
+
+class DummyActionsTool:
+    pass
+
+
+class DummySkinsTool:
+    pass
\ No newline at end of file


Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/test_preferences.py
___________________________________________________________________
Added: svn:keywords
   + Id
Added: svn:eol-style
   + native



More information about the checkins mailing list