[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