[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/ - converted several tools into utilities

Yvo Schubbe y.2011 at wcm-solutions.de
Tue Sep 13 04:22:16 EST 2011


Log message for revision 122785:
  - converted several tools into utilities

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt
  UU  Products.CMFDefault/trunk/Products/CMFDefault/DefaultWorkflow.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/RegistrationTool.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/tests/test_syndication.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/content/folder.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/content/tests/test_folder.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/authentication.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/join.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/members.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/preferences.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/test_members.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/search/interfaces.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/search/search.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/search/tests/test_search.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_icons.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/utils.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/componentregistry.xml
  UU  Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/addtoFavorites.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/change_password.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/folder_localrole_edit.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/logout.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/members_add_control.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/members_delete_control.py
  UU  Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/validatePassword.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/folder_contents.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/getMainGlobals.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/join_form.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/logged_in.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/members_delete_form.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/members_manage_form.py
  UU  Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/password_form.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/search_form.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/setup_talkback_tree.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/tests/RegistrationTool.txt
  U   Products.CMFDefault/trunk/Products/CMFDefault/tests/test_RegistrationTool.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/upgrade/configure.zcml
  U   Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt	2011-09-13 09:22:16 UTC (rev 122785)
@@ -4,6 +4,10 @@
 2.3.0-alpha (unreleased)
 ------------------------
 
+- tools: Converted several tools into utilities.
+  CookieCrumbler, MemberDataTool, MembershipTool and RegistrationTool are now
+  local utilities.
+
 - skins and browser views: setRedirect now checks Action conditions.
 
 - Actions: Added 'global/members_register' Action for redirects.

Modified: Products.CMFDefault/trunk/Products/CMFDefault/DefaultWorkflow.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/DefaultWorkflow.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/DefaultWorkflow.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -11,8 +11,6 @@
 #
 ##############################################################################
 """ A simple submit/review/publish workflow.
-
-$Id$
 """
 
 from AccessControl.SecurityInfo import ClassSecurityInfo
@@ -21,8 +19,10 @@
 from Acquisition import aq_parent
 from App.class_init import InitializeClass
 from DateTime.DateTime import DateTime
+from zope.component import getUtility
 from zope.interface import implements
 
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.interfaces import IWorkflowDefinition
 from Products.CMFCore.utils import _checkPermission
 from Products.CMFCore.utils import _modifyPermissionMappings
@@ -94,8 +94,8 @@
         content = info.object
         content_url = info.object_url
         content_creator = content.Creator()
-        pm = getToolByName(self, 'portal_membership')
-        current_user = pm.getAuthenticatedMember().getId()
+        mtool = getUtility(IMembershipTool)
+        current_user = mtool.getAuthenticatedMember().getId()
         review_state = self.getReviewStateOf(content)
         actions = []
 
@@ -198,8 +198,8 @@
             elif review_state == 'private':
                 raise AccessControl_Unauthorized('Already private')
             content_creator = ob.Creator()
-            pm = getToolByName(self, 'portal_membership')
-            current_user = pm.getAuthenticatedMember().getId()
+            mtool = getUtility(IMembershipTool)
+            current_user = mtool.getAuthenticatedMember().getId()
             if (content_creator != current_user) and not allow_review:
                 raise AccessControl_Unauthorized('Not creator or reviewer')
             self.setReviewStateOf(ob, 'private', action, comment)
@@ -245,8 +245,8 @@
     security.declarePrivate('setReviewStateOf')
     def setReviewStateOf(self, ob, review_state, action, comment):
         tool = aq_parent(aq_inner(self))
-        pm = getToolByName(self, 'portal_membership')
-        current_user = pm.getAuthenticatedMember().getId()
+        mtool = getUtility(IMembershipTool)
+        current_user = mtool.getAuthenticatedMember().getId()
         status = {
             'actor': current_user,
             'action': action,


Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/DefaultWorkflow.py
___________________________________________________________________
Deleted: svn:keywords
   - Author Date Id Revision

Modified: Products.CMFDefault/trunk/Products/CMFDefault/RegistrationTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/RegistrationTool.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/RegistrationTool.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -21,9 +21,9 @@
 from zope.component import getUtility
 from zope.schema import ValidationError
 
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.RegistrationTool import RegistrationTool as BaseTool
 from Products.CMFCore.utils import _checkPermission
-from Products.CMFCore.utils import getToolByName
 from Products.CMFDefault.permissions import ManagePortal
 from Products.CMFDefault.utils import checkEmailAddress
 from Products.CMFDefault.utils import Message as _
@@ -124,10 +124,8 @@
 
         o Raise an exception if user ID is not found.
         """
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
-        membership = getToolByName(self, 'portal_membership')
-        member = membership.getMemberById(forgotten_userid)
+        mtool = getUtility(IMembershipTool)
+        member = mtool.getMemberById(forgotten_userid)
 
         if member is None:
             raise ValueError(_(u'The username you entered could not be '
@@ -158,8 +156,8 @@
         if REQUEST is None:
             raise ValueError(u"'REQUEST' argument is missing.")
 
-        membership = getToolByName( self, 'portal_membership' )
-        member = membership.getMemberById( new_member_id )
+        mtool = getUtility(IMembershipTool)
+        member = mtool.getMemberById(new_member_id)
 
         if member is None:
             raise ValueError(_(u'The username you entered could not be '
@@ -193,12 +191,10 @@
         o Checks should be done before this method is called using
           testPropertiesValidity and testPasswordValidity
         """
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
-        mtool = getToolByName(self, 'portal_membership')
+        mtool = getUtility(IMembershipTool)
         member = mtool.getMemberById(member_id)
         member.setMemberProperties(properties)
-        member.setSecurityProfile(password,roles,domains)
+        member.setSecurityProfile(password, roles, domains)
 
         return member
 

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/tests/test_syndication.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/tests/test_syndication.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/admin/tests/test_syndication.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -18,8 +18,10 @@
 from zope.component import getSiteManager
 from zope.i18n.interfaces import IUserPreferredCharsets
 from zope.interface import alsoProvides
+from zope.testing.cleanup import cleanUp
 
 from Products.CMFCore.interfaces import IFolderish
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.interfaces import ISyndicationInfo
 from Products.CMFCore.tests.base.dummy import DummyFolder
 from Products.CMFCore.tests.base.dummy import DummySite
@@ -51,8 +53,11 @@
         site.portal_syndication = DummySyndicationTool()
         site._setObject('portal_actions', DummyTool())
         site._setObject('portal_url', DummyTool())
-        site._setObject('portal_membership', DummyTool())
+        getSiteManager().registerUtility(DummyTool(), IMembershipTool)
 
+    def tearDown(self):
+        cleanUp()
+
     def _getTargetClass(self):
         from Products.CMFDefault.browser.admin.syndication import Site
         request = DummyRequest(ACTUAL_URL="http://example.com")
@@ -115,13 +120,15 @@
 
         self.site = site = DummySite('site')
         sm = getSiteManager()
-        info = SyndicationInfo
-        sm.registerAdapter(info, [IFolderish], ISyndicationInfo)
+        sm.registerAdapter(SyndicationInfo, [IFolderish], ISyndicationInfo)
         site.portal_syndication = DummySyndicationTool()
         site._setObject('portal_actions', DummyTool())
         site._setObject('portal_url', DummyTool())
-        site._setObject('portal_membership', DummyTool())
+        sm.registerUtility(DummyTool(), IMembershipTool)
 
+    def tearDown(self):
+        cleanUp()
+
     def _getTargetClass(self):
         from Products.CMFDefault.browser.admin.syndication import Syndicate
         self.site._setObject('folder', DummyFolder('Folder'))

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/content/folder.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/content/folder.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/content/folder.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -17,6 +17,7 @@
 import urllib
 
 from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
+from zope.component import getUtility
 from zope.formlib import form
 from zope.schema.vocabulary import SimpleTerm
 from zope.schema.vocabulary import SimpleVocabulary
@@ -25,6 +26,7 @@
 from ZTUtils import LazyFilter
 
 from Products.CMFCore.interfaces import IDynamicType
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFDefault.browser.utils import decode
 from Products.CMFDefault.browser.utils import memoize
 from Products.CMFDefault.browser.utils import ViewBase
@@ -349,7 +351,7 @@
     def up_info(self):
         """Link to the contens view of the parent object"""
         up_obj = self.context.aq_inner.aq_parent
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         allowed = mtool.checkPermission(ListFolderContents, up_obj)
         if allowed:
             if IDynamicType.providedBy(up_obj):

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/content/tests/test_folder.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/content/tests/test_folder.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/content/tests/test_folder.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -14,23 +14,21 @@
 """
 
 import unittest
-
-from AccessControl.SecurityManagement import newSecurityManager
-from AccessControl.User import UnrestrictedUser
 from Testing import ZopeTestCase
 
 from zope.component import getSiteManager
 from zope.publisher.browser import TestRequest
 from zope.publisher.interfaces.browser import IBrowserPublisher
+from zope.testing.cleanup import cleanUp
 
+from Products.CMFCore.interfaces import IMembershipTool
+from Products.CMFCore.interfaces import IPropertiesTool
 from Products.CMFCore.PortalFolder import PortalFolder
-from Products.CMFCore.tests.base.dummy import DummySite, DummyTool
-from Products.CMFCore.tests.base.dummy import DummyUserFolder, DummyContent
-from Products.CMFCore.interfaces import IPropertiesTool
-
-from Products.CMFDefault.browser.content.folder import (
-                ContentsView, FolderView
-                )
+from Products.CMFCore.tests.base.dummy import DummyContent
+from Products.CMFCore.tests.base.dummy import DummySite
+from Products.CMFCore.tests.base.dummy import DummyTool
+from Products.CMFDefault.browser.content.folder import ContentsView
+from Products.CMFDefault.browser.content.folder import FolderView
 from Products.CMFDefault.browser.content.tests.utils import clearVocabulary
 from Products.CMFDefault.browser.content.tests.utils import setupVocabulary
 from Products.CMFDefault.testing import FunctionalLayer
@@ -41,15 +39,17 @@
     def setUp(self):
         """Setup a site"""
         self.site = site = DummySite('site')
-        self.sm = getSiteManager()
-        site._setObject('portal_membership', DummyTool())
-        ptool = site._setObject('portal_properties', DummyTool())
-        self.sm.registerUtility(ptool, IPropertiesTool)
+        sm = getSiteManager()
+        sm.registerUtility(DummyTool(), IMembershipTool)
+        sm.registerUtility(DummyTool().__of__(site), IPropertiesTool)
         site._setObject('portal_types', DummyTool())
         site._setObject('portal_url', DummyTool())
         folder = PortalFolder('test_folder')
         self.folder = site._setObject('test_folder', folder)
 
+    def tearDown(self):
+        cleanUp()
+
     def _make_one(self, name="DummyItem"):
         content = DummyContent(name)
         content.portal_type = "Dummy Content"

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/authentication.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/authentication.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/authentication.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -20,6 +20,8 @@
 from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
 from zExceptions import Forbidden
 from zExceptions import Redirect
+from zope.component import getUtility
+from zope.component import queryUtility
 from zope.formlib import form
 from zope.formlib.widgets import TextWidget
 from zope.interface import implements
@@ -30,23 +32,25 @@
 from zope.schema import TextLine
 from zope.schema import URI
 from zope.schema.interfaces import ISource
-from zope.site.hooks import getSite
 
 from Products.CMFCore.CookieCrumbler import ATTEMPT_LOGIN
 from Products.CMFCore.CookieCrumbler import ATTEMPT_NONE
+from Products.CMFCore.interfaces import ICookieCrumbler
+from Products.CMFCore.interfaces import IMembershipTool
+from Products.CMFCore.interfaces import IRegistrationTool
 from Products.CMFCore.utils import getToolByName
+from Products.CMFDefault.browser.utils import ViewBase, memoize
 from Products.CMFDefault.formlib.form import EditFormBase
 from Products.CMFDefault.utils import Message as _
-from Products.CMFDefault.browser.utils import ViewBase, memoize
 
 
 def _expireAuthCookie(view):
-    try:
-        cctool = getToolByName(view, 'cookie_authentication')
+    cctool = queryUtility(ICookieCrumbler)
+    if cctool is not None:
         method = cctool.getCookieMethod('expireAuthCookie',
                                         cctool.defaultExpireAuthCookie)
         method(view.request.response, cctool.auth_cookie)
-    except AttributeError:
+    else:
         view.request.response.expireCookie('__ac', path='/')
 
 
@@ -98,8 +102,7 @@
     implements(ISource)
 
     def __contains__(self, value):
-        rich_context = getSite()
-        mtool = getToolByName(rich_context, 'portal_membership')
+        mtool = getUtility(IMembershipTool)
         if mtool.getMemberById(value):
             return True
         candidates = mtool.searchMembers('email', value)
@@ -165,12 +168,12 @@
             failure='handle_failure'))
 
     def setUpWidgets(self, ignore_request=False):
-        try:
-            cctool = self._getTool('cookie_authentication')
+        cctool = queryUtility(ICookieCrumbler)
+        if cctool is not None:
             ac_name_id = cctool.name_cookie
             ac_password_id = cctool.pw_cookie
             ac_persistent_id = cctool.persist_cookie
-        except AttributeError:
+        else:
             ac_name_id = '__ac_name'
             ac_password_id = '__ac_password'
             ac_persistent_id = '__ac_persistent'
@@ -192,7 +195,7 @@
         self.widgets['persistent'].name = ac_persistent_id
 
     def handle_login_validate(self, action, data):
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         if mtool.isAnonymousUser():
             _expireAuthCookie(self)
             return (_(u'Login failure'),)
@@ -223,7 +226,7 @@
 
     def __call__(self):
         self.set_skin_cookie()
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         mtool.createMemberArea()
         member = mtool.getAuthenticatedMember()
         now = DateTime()
@@ -263,10 +266,10 @@
             failure='handle_failure'))
 
     def setUpWidgets(self, ignore_request=False):
-        try:
-            cctool = self._getTool('cookie_authentication')
+        cctool = queryUtility(ICookieCrumbler)
+        if cctool is not None:
             ac_name_id = cctool.name_cookie
-        except AttributeError:
+        else:
             ac_name_id = '__ac_name'
         ac_name = self.request.get(ac_name_id)
         if ac_name and not self.request.has_key('%s.name' % self.prefix):
@@ -275,14 +278,14 @@
               self).setUpWidgets(ignore_request=ignore_request)
 
     def handle_send_success(self, action, data):
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         if not mtool.getMemberById(data['name']):
             candidates = mtool.searchMembers('email', data['name'])
             for candidate in candidates:
                 if candidate['email'].lower() == data['name'].lower():
                     data['name'] = candidate['username']
                     break
-        rtool = self._getTool('portal_registration')
+        rtool = getUtility(IRegistrationTool)
         rtool.mailPassword(data['name'], self.request)
         self.status = _(u'Your password has been mailed to you.')
         return self._setRedirect('portal_actions', 'user/login')
@@ -296,7 +299,7 @@
     @memoize
     def logged_in(self):
         """Check whether the user is (still logged in)"""
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         return not mtool.isAnonymousUser()
 
     @memoize

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/join.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/join.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/join.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -23,7 +23,9 @@
 from zope.schema import Bool
 from zope.schema import Password
 
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.interfaces import IPropertiesTool
+from Products.CMFCore.interfaces import IRegistrationTool
 from Products.CMFDefault.browser.utils import memoize
 from Products.CMFDefault.formlib.form import EditFormBase
 from Products.CMFDefault.formlib.schema import EmailLine
@@ -97,13 +99,13 @@
     @property
     @memoize
     def isAnon(self):
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         return mtool.isAnonymousUser()
 
     @property
     @memoize
     def isManager(self):
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         return mtool.checkPermission(ManageUsers, mtool)
 
     @property
@@ -126,7 +128,7 @@
         errors = self.validate(action, data)
         if errors:
             return errors
-        rtool = self._getTool('portal_registration')
+        rtool = getUtility(IRegistrationTool)
         if self.validate_email:
             data['password'] = rtool.generatePassword()
         else:
@@ -141,7 +143,7 @@
 
     def add_member(self, data):
         """Add new member and notify if requested or required"""
-        rtool = self._getTool('portal_registration')
+        rtool = getUtility(IRegistrationTool)
         rtool.addMember(
                         id=data['member_id'],
                         password=data['password'],

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/members.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/members.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/members.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -14,6 +14,7 @@
 """
 
 from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
+from zope.component import getUtility
 from zope.formlib import form
 from zope.interface import Interface
 from zope.schema import Bool
@@ -22,6 +23,7 @@
 from zope.sequencesort.ssort import sort
 from ZTUtils import LazyFilter
 
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFDefault.browser.content.folder import BatchViewBase
 from Products.CMFDefault.browser.content.interfaces import IBatchForm
 from Products.CMFDefault.browser.utils import memoize
@@ -113,7 +115,7 @@
 
     @memoize
     def _get_items(self):
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         return mtool.listMembers()
 
     def members_exist(self, action=None):
@@ -130,7 +132,7 @@
         """Create content field objects only for batched items
         Also create pseudo-widget for each item
         """
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         f = IMemberItem['select']
         members = []
         fields = form.FormFields()
@@ -168,7 +170,7 @@
 
     def handle_delete(self, action, data):
         """Delete selected members"""
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         mtool.deleteMembers(self._get_ids(data))
         self.status = _(u"Selected members deleted.")
         self._setRedirect('portal_actions', "global/manage_members")
@@ -189,7 +191,7 @@
     @property
     @memoize
     def mtool(self):
-        return self._getTool('portal_membership')
+        return getUtility(IMembershipTool)
 
     @memoize
     def isUserManager(self):

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -24,6 +24,7 @@
 from zope.schema import Password
 
 from Products.CMFCore.interfaces import IMember
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.interfaces import IPropertiesTool
 from Products.CMFCore.interfaces import ISiteRoot
 from Products.CMFDefault.browser.utils import decode
@@ -116,7 +117,7 @@
 
     @memoize
     def getContent(self):
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         member = mtool.getAuthenticatedMember()
         return PasswordSchemaAdapter(member)
 
@@ -128,7 +129,7 @@
         changes = super(PasswordFormView, self).applyChanges(data)
         if self.getContent().last_login_time == DateTime('1999/01/01'):
             self.getContent().last_login_time = DateTime('2000/01/01')
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         mtool.credentialsChanged(self.getContent().context.getPassword(),
                                  self.request)
         return changes

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/preferences.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/preferences.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/preferences.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -24,6 +24,7 @@
 from zope.schema.vocabulary import SimpleVocabulary
 
 from Products.CMFCore.interfaces import IMember
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.interfaces import IPropertiesTool
 from Products.CMFCore.utils import getToolByName
 from Products.CMFDefault.browser.utils import memoize
@@ -115,7 +116,7 @@
 
     @memoize
     def getContent(self):
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         member = mtool.getAuthenticatedMember()
         return PreferencesSchemaAdapter(member)
 

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/test_members.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/test_members.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/test_members.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -13,18 +13,18 @@
 """ Tests for membership views """
 
 import unittest
-
 from Testing import ZopeTestCase
 
+from DateTime.DateTime import DateTime
 from zope.component import getSiteManager
 from zope.publisher.browser import TestRequest
 from zope.publisher.interfaces.browser import IBrowserPublisher
-from DateTime.DateTime import DateTime
+from zope.testing.cleanup import cleanUp
 
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.tests.base.dummy import DummySite
 from Products.CMFCore.tests.base.dummy import DummyTool
 from Products.CMFCore.tests.base.dummy import DummyUser
-
 from Products.CMFDefault.browser.membership.members import Manage
 from Products.CMFDefault.browser.membership.members import MemberProxy
 from Products.CMFDefault.testing import FunctionalLayer
@@ -67,11 +67,14 @@
     def setUp(self):
         """Setup a site"""
         self.site = site = DummySite('site')
-        self.sm = getSiteManager()
-        self.mtool = site._setObject('portal_membership', DummyMemberTool())
+        self.mtool = DummyMemberTool()
+        getSiteManager().registerUtility(self.mtool, IMembershipTool)
         site._setObject('portal_actions', DummyTool())
         site._setObject('portal_url', DummyTool())
 
+    def tearDown(self):
+        cleanUp()
+
     def _make_one(self, name="DummyUser"):
         user = DummyUser(name)
         self.mtool.addMember(user)

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/search/interfaces.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/search/interfaces.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/search/interfaces.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -17,6 +17,7 @@
 from datetime import timedelta
 
 from DateTime import DateTime
+from zope.component import getUtility
 from zope.interface import directlyProvides
 from zope.interface import Interface
 from zope.schema import ASCIILine
@@ -24,9 +25,10 @@
 from zope.schema import List
 from zope.schema import TextLine
 from zope.schema.interfaces import IContextSourceBinder
+from zope.schema.vocabulary import SimpleTerm
 from zope.schema.vocabulary import SimpleVocabulary
-from zope.schema.vocabulary import SimpleTerm
 
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.utils import getToolByName
 from Products.CMFDefault.utils import Message as _
 
@@ -50,7 +52,7 @@
 
 def date_vocab(context):
     """Provides a list of dates for searching with"""
-    mtool = getToolByName(context, 'portal_membership')
+    mtool = getUtility(IMembershipTool)
     dates = [SimpleTerm(date(1970, 1, 1), date(1970, 1, 1), _(u'Ever'))]
     if not mtool.isAnonymousUser():
         member = mtool.getAuthenticatedMember()

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/search/search.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/search/search.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/search/search.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -11,21 +11,22 @@
 #
 ##############################################################################
 """Search views"""
+
 import datetime
 
+from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
+from zope.component import getUtility
 from zope.formlib import form
 
-from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
-
+from .interfaces import ISearchSchema
+from Products.CMFCore.interfaces import IMembershipTool
+from Products.CMFDefault.browser.content.folder import BatchViewBase
+from Products.CMFDefault.browser.content.interfaces import IBatchForm
+from Products.CMFDefault.browser.utils import memoize
 from Products.CMFDefault.formlib.form import EditFormBase
 from Products.CMFDefault.formlib.widgets import ChoiceMultiSelectWidget
 from Products.CMFDefault.utils import Message as _
-from Products.CMFDefault.browser.utils import memoize
-from Products.CMFDefault.browser.content.interfaces import IBatchForm
-from Products.CMFDefault.browser.content.folder import BatchViewBase
 
-from interfaces import ISearchSchema
-
 EPOCH = datetime.date(1970, 1, 1)
 
 
@@ -76,7 +77,7 @@
     @property
     @memoize
     def is_anonymous(self):
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         return mtool.isAnonymousUser()
 
     @memoize

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/search/tests/test_search.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/search/tests/test_search.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/search/tests/test_search.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -14,16 +14,24 @@
 
 import unittest
 
-from Products.CMFCore.tests.base.dummy import DummySite, DummyTool
-from Products.CMFDefault.browser.test_utils import DummyRequest, DummyResponse
+from zope.component import getSiteManager
+from zope.testing.cleanup import cleanUp
 
+from Products.CMFCore.interfaces import IMembershipTool
+from Products.CMFCore.tests.base.dummy import DummySite
+from Products.CMFCore.tests.base.dummy import DummyTool
+from Products.CMFDefault.browser.test_utils import DummyRequest
 
+
 class SearchFormTests(unittest.TestCase):
 
     def setUp(self):
-        self.site = site = DummySite('site')
-        site._setObject('portal_membership', DummyTool())
+        self.site = DummySite('site')
+        getSiteManager().registerUtility(DummyTool(), IMembershipTool)
 
+    def tearDown(self):
+        cleanUp()
+
     def _getTargetClass(self):
         from Products.CMFDefault.browser.search.search import Search
         return Search(self.site, DummyRequest())
@@ -35,7 +43,7 @@
 
     def test_is_not_anonymous(self):
         view = self._getTargetClass()
-        self.site.portal_membership.anon = 0
+        getSiteManager().getUtility(IMembershipTool).anon = 0
         self.assertFalse(view.is_anonymous)
         self.assertNotEqual(view.search_fields.get('review_state'), None)
 
@@ -59,6 +67,7 @@
         view.handle_search('search', {})
         self.assertEqual(view.template.filename, view.results.filename)
 
+
 def test_suite():
     suite = unittest.TestSuite()
     suite.addTest(unittest.makeSuite(SearchFormTests))

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_icons.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_icons.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_icons.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -16,11 +16,14 @@
 import unittest
 from zope.component.testing import PlacelessSetup
 
-from test_ursa import (
-                    DummyRequest, DummySite, DummyContext,
-                    DummyPropertiesTool, DummyURLTool, DummyActionsTool
-                    )
+from .test_ursa import DummyActionsTool
+from .test_ursa import DummyContext
+from .test_ursa import DummyPropertiesTool
+from .test_ursa import DummyRequest
+from .test_ursa import DummyURLTool
+from Products.CMFCore.interfaces import IMembershipTool
 
+
 class AbsolutIconsTests(unittest.TestCase, PlacelessSetup):
 
     def setUp(self):
@@ -49,7 +52,7 @@
         if types is not None:
             site.portal_types = DummyTypesTool(types)
             site.portal_url = DummyURLTool(site)
-            site.portal_membership = DummyMembershipTool()
+            sm.registerUtility(DummyMembershipTool(), IMembershipTool)
         if actions is not None:
             site.portal_actions = DummyActionsTool(actions)
         site.absolute_url = lambda: 'http://example.com'

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -14,9 +14,14 @@
 """
 
 import unittest
+
+from zope.component import getSiteManager
 from zope.component.testing import PlacelessSetup
 
+from Products.CMFCore.interfaces import IMembershipTool
+from Products.CMFCore.interfaces import IPropertiesTool
 
+
 class UrsineGlobalsTests(unittest.TestCase, PlacelessSetup):
 
     def setUp(self):
@@ -37,12 +42,12 @@
         return self._getTargetClass()(context, request)
 
     def _makeContext(self):
-        from zope.component import getSiteManager
-        from Products.CMFCore.interfaces import IPropertiesTool
         context = DummyContext()
+        sm = getSiteManager()
         tool = context.portal_properties = DummyPropertiesTool()
-        sm = getSiteManager()
         sm.registerUtility(tool, IPropertiesTool)
+        tool = context.portal_membership = DummyMembershipTool()
+        sm.registerUtility(tool, IMembershipTool)
         return context
 
     def test_ctor_wo_def_charset_doesnt_set_content_type(self):
@@ -92,7 +97,7 @@
 
     def test_mtool(self):
         view = self._makeOne()
-        tool = view.context.portal_membership = DummyMembershipTool()
+        tool = view.context.portal_membership
         self.failUnless(view.mtool is tool)
 
     def test_atool(self):
@@ -225,7 +230,9 @@
     def test_breadcrumbs_at_root(self):
         PATHS_TO_CONTEXTS = []
         site = DummySite(PATHS_TO_CONTEXTS)
+        sm = getSiteManager()
         ptool = site.portal_properties = DummyPropertiesTool()
+        sm.registerUtility(ptool, IPropertiesTool)
         ptool.title = lambda: 'SITE'
         utool = site.portal_url = DummyURLTool(site, PATHS_TO_CONTEXTS)
         utool.__call__ = lambda: 'http://example.com/'
@@ -247,7 +254,9 @@
                              (('parent', 'child'), context),
                             ]
         site = DummySite(PATHS_TO_CONTEXTS)
+        sm = getSiteManager()
         ptool = context.portal_properties = DummyPropertiesTool()
+        sm.registerUtility(ptool, IPropertiesTool)
         ptool.title = lambda: 'SITE'
         utool = context.portal_url = DummyURLTool(site, PATHS_TO_CONTEXTS)
         utool.__call__ = lambda: 'http://example.com/'
@@ -269,39 +278,39 @@
 
     def test_member(self):
         view = self._makeOne()
-        tool = view.context.portal_membership = DummyMembershipTool()
+        tool = view.context.portal_membership
         member = DummyUser()
         tool.getAuthenticatedMember = lambda: member
         self.failUnless(view.member is member)
 
     def test_membersfolder(self):
         view = self._makeOne()
-        tool = view.context.portal_membership = DummyMembershipTool()
+        tool = view.context.portal_membership
         membersfolder = object()
         tool.getMembersFolder = lambda: membersfolder
         self.failUnless(view.membersfolder is membersfolder)
 
     def test_isAnon_tool_returns_True(self):
         view = self._makeOne()
-        tool = view.context.portal_membership = DummyMembershipTool()
+        tool = view.context.portal_membership
         tool.isAnonymousUser = lambda: True
         self.failUnless(view.isAnon)
 
     def test_isAnon_tool_returns_False(self):
         view = self._makeOne()
-        tool = view.context.portal_membership = DummyMembershipTool()
+        tool = view.context.portal_membership
         tool.isAnonymousUser = lambda: False
         self.failIf(view.isAnon)
 
     def test_membername_anonymous(self):
         view = self._makeOne()
-        tool = view.context.portal_membership = DummyMembershipTool()
+        tool = view.context.portal_membership
         tool.isAnonymousUser = lambda: True
         self.assertEqual(view.membername, u'Guest')
 
     def test_membername_not_anonymous(self):
         view = self._makeOne()
-        tool = view.context.portal_membership = DummyMembershipTool()
+        tool = view.context.portal_membership
         tool.isAnonymousUser = lambda: False
         member = DummyUser()
         member.getProperty = lambda x: 'John Smith'
@@ -310,7 +319,7 @@
 
     def test_membername_not_anonymous_wo_fullname(self):
         view = self._makeOne()
-        tool = view.context.portal_membership = DummyMembershipTool()
+        tool = view.context.portal_membership
         tool.isAnonymousUser = lambda: False
         member = DummyUser()
         member.getId = lambda: 'luser'
@@ -394,6 +403,7 @@
         tool = view.context.portal_actions = DummyActionsTool(ACTIONS)
         self.assertEqual(view.workflow_actions, ACTIONS['workflow'])
 
+
 class DummyContext:
     pass
 
@@ -471,6 +481,7 @@
     def __init__(self):
         self.RESPONSE = DummyResponse()
 
+
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(UrsineGlobalsTests),

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -13,12 +13,17 @@
 """
 """
 
+from zope.component import getUtility
+
+from Products.CMFCore.interfaces import IMembershipTool
+from Products.CMFCore.interfaces import IPropertiesTool
 from Products.CMFCore.utils import getToolByName
+from Products.CMFDefault.browser.utils import memoize
+from Products.CMFDefault.browser.utils import ViewBase
+from Products.CMFDefault.utils import decode
 from Products.CMFDefault.utils import Message as _
-from Products.CMFDefault.utils import decode
-from Products.CMFDefault.browser.utils import ViewBase
-from Products.CMFDefault.browser.utils import memoize
 
+
 class UrsineGlobals(ViewBase):
     """ Provide lazy / efficient template-level globals.
 
@@ -38,7 +43,7 @@
     @property
     @memoize
     def ptool(self):
-        return self._getTool('portal_properties')
+        return getUtility(IPropertiesTool)
 
     @property
     @memoize
@@ -48,7 +53,7 @@
     @property
     @memoize
     def mtool(self):
-        return self._getTool('portal_membership')
+        return getUtility(IMembershipTool)
 
     @property
     @memoize

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/utils.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/utils.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/utils.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -18,6 +18,7 @@
 from Products.Five import BrowserView
 from zope.component import getUtility
 
+from Products.CMFCore.interfaces import IMembershipTool
 from Products.CMFCore.interfaces import IPropertiesTool
 from Products.CMFCore.utils import getToolByName
 from Products.CMFDefault.permissions import View
@@ -69,7 +70,7 @@
 
     @memoize
     def _checkPermission(self, permission):
-        mtool = self._getTool('portal_membership')
+        mtool = getUtility(IMembershipTool)
         return mtool.checkPermission(permission, self.context)
 
     @memoize

Modified: Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/componentregistry.xml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/componentregistry.xml	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/componentregistry.xml	2011-09-13 09:22:16 UTC (rev 122785)
@@ -3,12 +3,20 @@
  <adapters/>
  <subscribers/>
  <utilities>
+  <utility interface="Products.CMFCore.interfaces.ICookieCrumbler"
+     object="cookie_authentication"/>
   <utility interface="Products.CMFCore.interfaces.IDiscussionTool"
      object="portal_discussion"/>
+  <utility interface="Products.CMFCore.interfaces.IMemberDataTool"
+     object="portal_memberdata"/>
+  <utility interface="Products.CMFCore.interfaces.IMembershipTool"
+     object="portal_membership"/>
   <utility interface="Products.CMFCore.interfaces.IMetadataTool"
      object="portal_metadata"/>
   <utility interface="Products.CMFCore.interfaces.IPropertiesTool"
      object="portal_properties"/>
+  <utility interface="Products.CMFCore.interfaces.IRegistrationTool"
+     object="portal_registration"/>
   <utility interface="Products.CMFCore.interfaces.ISiteRoot" object=""/>
   <utility interface="Products.CMFCore.interfaces.ISyndicationTool"
      object="portal_syndication"/>

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/addtoFavorites.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/addtoFavorites.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/addtoFavorites.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -1,8 +1,8 @@
 ##parameters=
 ##
-from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import getUtilityByInterfaceName
 
-mtool = getToolByName(script, 'portal_membership')
+mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
 
 home = mtool.getHomeFolder()
 if not hasattr(home, 'Favorites'):


Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/addtoFavorites.py
___________________________________________________________________
Deleted: svn:keywords
   - Author Date Id Revision

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/change_password.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/change_password.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/change_password.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -1,11 +1,11 @@
 ##parameters=password, confirm, domains=None, **kw
 ##title=Action to change password
 ##
-from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import getUtilityByInterfaceName
 from Products.CMFDefault.utils import Message as _
 
-mtool = getToolByName(script, 'portal_membership')
-rtool = getToolByName(script, 'portal_registration')
+mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
+rtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IRegistrationTool')
 
 result = rtool.testPasswordValidity(password, confirm)
 if result:

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/folder_localrole_edit.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/folder_localrole_edit.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/folder_localrole_edit.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -1,10 +1,10 @@
 ##parameters=change_type
 ##title=Set local roles
 ##
-from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import getUtilityByInterfaceName
 from Products.CMFDefault.utils import Message as _
 
-mtool = getToolByName(script, 'portal_membership')
+mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
 
 if change_type == 'add':
     mtool.setLocalRoles(obj=context,

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/logout.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/logout.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/logout.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -2,6 +2,7 @@
 ##title=Logout handler
 ##parameters=
 from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import getUtilityByInterfaceName
 
 stool = getToolByName(context, 'portal_skins')
 utool = getToolByName(context, 'portal_url')
@@ -9,7 +10,7 @@
 
 stool.clearSkinCookie()
 try:
-    cctool = getToolByName(context, 'cookie_authentication')
+    cctool = getUtilityByInterfaceName('Products.CMFCore.interfaces.ICookieCrumbler')
     cctool.logout(REQUEST.RESPONSE)
 except AttributeError:
     REQUEST.RESPONSE.expireCookie('__ac', path='/')

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/members_add_control.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/members_add_control.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/members_add_control.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -2,13 +2,12 @@
 ##title=Add a member
 ##
 from Products.CMFCore.utils import getUtilityByInterfaceName
-from Products.CMFCore.utils import getToolByName
 from Products.CMFDefault.permissions import ManageUsers
 from Products.CMFDefault.utils import Message as _
 
-mtool = getToolByName(script, 'portal_membership')
+mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
 ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool')
-rtool = getToolByName(script, 'portal_registration')
+rtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IRegistrationTool')
 
 try:
     rtool.addMember( id=member_id, password=password,

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/members_delete_control.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/members_delete_control.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/members_delete_control.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -1,10 +1,10 @@
 ##parameters=ids, **kw
 ##title=Delete members
 ##
-from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import getUtilityByInterfaceName
 from Products.CMFDefault.utils import Message as _
 
-mtool = getToolByName(script, 'portal_membership')
+mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
 
 mtool.deleteMembers(ids, REQUEST=context.REQUEST)
 

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/validatePassword.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/validatePassword.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/validatePassword.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -1,12 +1,9 @@
-## Script (Python) "validatePassword"
 ##parameters=password='', confirm='', **kw
-##title=
 ##
 from Products.CMFCore.utils import getUtilityByInterfaceName
-from Products.CMFCore.utils import getToolByName
 
 ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool')
-rtool = getToolByName(script, 'portal_registration')
+rtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IRegistrationTool')
 
 if ptool.getProperty('validate_email'):
     password = rtool.generatePassword()


Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_control/validatePassword.py
___________________________________________________________________
Deleted: svn:keywords
   - Author Date Id Revision

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/folder_contents.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/folder_contents.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/folder_contents.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -3,6 +3,7 @@
 from ZTUtils import Batch
 from ZTUtils import make_query
 from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import getUtilityByInterfaceName
 from Products.CMFDefault.permissions import AddPortalContent
 from Products.CMFDefault.permissions import DeleteObjects
 from Products.CMFDefault.permissions import ListFolderContents
@@ -12,7 +13,7 @@
 from Products.CMFDefault.utils import html_marshal
 from Products.CMFDefault.utils import Message as _
 
-mtool = getToolByName(script, 'portal_membership')
+mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
 utool = getToolByName(script, 'portal_url')
 portal_url = utool()
 

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/getMainGlobals.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/getMainGlobals.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/getMainGlobals.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -7,7 +7,7 @@
 
 atool = getToolByName(script, 'portal_actions')
 caltool = getToolByName(script, 'portal_calendar', None)
-mtool = getToolByName(script, 'portal_membership')
+mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
 ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool')
 utool = getToolByName(script, 'portal_url')
 wtool = getToolByName(script, 'portal_workflow')

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/join_form.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/join_form.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/join_form.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -7,7 +7,7 @@
 from Products.CMFDefault.utils import Message as _
 
 atool = getToolByName(script, 'portal_actions')
-mtool = getToolByName(script, 'portal_membership')
+mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
 ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool')
 utool = getToolByName(script, 'portal_url')
 portal_url = utool()

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/logged_in.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/logged_in.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/logged_in.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -6,7 +6,7 @@
 from Products.CMFDefault.utils import Message as _
 
 atool = getToolByName(script, 'portal_actions')
-mtool = getToolByName(script, 'portal_membership')
+mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
 ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool')
 stool = getToolByName(script, 'portal_skins')
 

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/members_delete_form.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/members_delete_form.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/members_delete_form.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -1,12 +1,13 @@
 ##parameters=ids, b_start=0, delete='', cancel=''
 ##
 from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import getUtilityByInterfaceName
 from Products.CMFDefault.utils import decode
 from Products.CMFDefault.utils import html_marshal
 from Products.CMFDefault.utils import Message as _
 
 atool = getToolByName(script, 'portal_actions')
-mtool = getToolByName(script, 'portal_membership')
+mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
 
 
 form = context.REQUEST.form

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/members_manage_form.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/members_manage_form.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/members_manage_form.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -2,12 +2,13 @@
 ##
 from ZTUtils import Batch
 from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import getUtilityByInterfaceName
 from Products.CMFDefault.utils import decode
 from Products.CMFDefault.utils import html_marshal
 from Products.CMFDefault.utils import Message as _
 
 atool = getToolByName(script, 'portal_actions')
-mtool = getToolByName(script, 'portal_membership')
+mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
 
 
 form = context.REQUEST.form

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/password_form.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/password_form.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/password_form.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -6,7 +6,7 @@
 from Products.CMFDefault.utils import Message as _
 
 atool = getToolByName(script, 'portal_actions')
-mtool = getToolByName(script, 'portal_membership')
+mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
 ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool')
 utool = getToolByName(script, 'portal_url')
 member = mtool.getAuthenticatedMember()


Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/password_form.py
___________________________________________________________________
Deleted: svn:keywords
   - Id

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/search_form.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/search_form.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/search_form.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -1,12 +1,13 @@
 ##parameters=search=''
 ##
 from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import getUtilityByInterfaceName
 from Products.CMFDefault.permissions import ReviewPortalContent
 from Products.CMFDefault.utils import decode
 from Products.CMFDefault.utils import Message as _
 
 ctool = getToolByName(script, 'portal_catalog')
-mtool = getToolByName(script, 'portal_membership')
+mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
 ttool = getToolByName(script, 'portal_types')
 utool = getToolByName(script, 'portal_url')
 portal_url = utool()

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/setup_talkback_tree.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/setup_talkback_tree.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/setup_talkback_tree.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -2,11 +2,11 @@
 ##title=Standard Tree
 ##
 from ZTUtils import SimpleTreeMaker
-from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import getUtilityByInterfaceName
 from Products.CMFDefault.permissions import ManagePortal
 from Products.CMFDefault.utils import decode
 
-mtool = getToolByName(script, 'portal_membership')
+mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
 
 tm = SimpleTreeMaker('tb_tree')
 def getKids(object):

Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/RegistrationTool.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/RegistrationTool.txt	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/RegistrationTool.txt	2011-09-13 09:22:16 UTC (rev 122785)
@@ -29,13 +29,14 @@
     >>> from zope.component import getSiteManager
     >>> from zope.component import getUtility
     >>> from zope.site.hooks import setSite
+    >>> from Products.CMFCore.interfaces import IMembershipTool
     >>> from Products.MailHost.interfaces import IMailHost
     >>> setSite(app.site)
     >>> app.site.setupCurrentSkin(app.REQUEST)
     >>> sm = getSiteManager()
     >>> sm.registerUtility(MailHost(), IMailHost)
+    >>> sm.registerUtility(MembershipTool(), IMembershipTool)
     >>> rtool = app.site.portal_registration
-    >>> rtool.portal_membership = MembershipTool()
     >>> rtool.password_email = password_email
     >>> rtool.mail_password_response = mail_password_response
     >>> rtool.registered_email = registered_email
@@ -57,7 +58,7 @@
 
   Now we have to restore the normal MembershipTool::
 
-    >>> del rtool.portal_membership
+    >>> sm.registerUtility(app.site.portal_membership, IMembershipTool)
 
 password_email and registered_email
 -----------------------------------

Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_RegistrationTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_RegistrationTool.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_RegistrationTool.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -17,10 +17,12 @@
 from Testing import ZopeTestCase
 
 from Acquisition import Implicit
+from zope.component import getSiteManager
 from zope.interface.verify import verifyClass
 from zope.testing.cleanup import cleanUp
 
-from Products.CMFCore.tests.base.testcase import RequestTest
+from Products.CMFCore.interfaces import IMembershipTool
+from Products.CMFCore.tests.base.testcase import TransactionalTest
 from Products.CMFDefault.testing import FunctionalLayer
 
 
@@ -30,7 +32,7 @@
         return None
 
 
-class RegistrationToolTests(RequestTest):
+class RegistrationToolTests(TransactionalTest):
 
     def _getTargetClass(self):
         from Products.CMFDefault.RegistrationTool import RegistrationTool
@@ -42,14 +44,14 @@
 
     def tearDown(self):
         cleanUp()
-        RequestTest.tearDown(self)
+        TransactionalTest.tearDown(self)
 
     def test_interfaces(self):
         from Products.CMFCore.interfaces import IRegistrationTool
 
         verifyClass(IRegistrationTool, self._getTargetClass())
 
-    def test_spamcannon_collector_243( self ):
+    def test_spamcannon_collector_243(self):
 
         INJECTED_HEADERS = """
 To:someone at example.com
@@ -61,7 +63,7 @@
 """
 
         rtool = self._makeOne().__of__(self.app)
-        self.app.portal_membership = FauxMembershipTool()
+        getSiteManager().registerUtility(FauxMembershipTool(), IMembershipTool)
 
         props = { 'email' : INJECTED_HEADERS
                 , 'username' : 'username'

Modified: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/configure.zcml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/upgrade/configure.zcml	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/upgrade/configure.zcml	2011-09-13 09:22:16 UTC (rev 122785)
@@ -224,6 +224,13 @@
         checker=".to23.check_member_data_tool"
         />
 
+    <genericsetup:upgradeStep
+        title="Upgrade root site manager"
+        description="Add utility registrations if missing."
+        handler=".to23.upgrade_root_site_manager"
+        checker=".to23.check_root_site_manager"
+        />
+
   </genericsetup:upgradeSteps>
 
   <genericsetup:upgradeStep

Modified: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py	2011-09-13 09:19:30 UTC (rev 122784)
+++ Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py	2011-09-13 09:22:16 UTC (rev 122785)
@@ -15,12 +15,14 @@
 
 import logging
 
-from zope.component import getMultiAdapter
-
 from Acquisition import aq_base
 from Acquisition import aq_inner
 from Acquisition import aq_parent
 from OFS.userfolder import UserFolder
+from zope.component import getMultiAdapter
+from zope.component.interfaces import ComponentLookupError
+from zope.dottedname.resolve import resolve
+
 from Products.CMFCore.utils import getToolByName
 from Products.GenericSetup.context import SetupEnviron
 from Products.GenericSetup.interfaces import IBody
@@ -259,3 +261,54 @@
         if changed:
             mdtool._p_changed = True
             logger.info("Member data tool property modes fixed.")
+
+_TOOL_UTILITIES = (
+    ('cookie_authentication', 'Products.CMFCore.interfaces.ICookieCrumbler'),
+    ('portal_memberdata', 'Products.CMFCore.interfaces.IMemberDataTool'),
+    ('portal_membership', 'Products.CMFCore.interfaces.IMembershipTool'),
+    ('portal_registration', 'Products.CMFCore.interfaces.IRegistrationTool'),
+)
+
+def check_root_site_manager(tool):
+    """2.2.x to 2.3.0 upgrade step checker
+    """
+    portal = aq_parent(aq_inner(tool))
+    try:
+        sm = portal.getSiteManager()
+    except ComponentLookupError:
+        return True
+
+    for tool_id, tool_interface in _TOOL_UTILITIES:
+        tool_obj = getToolByName(portal, tool_id, default=None)
+        try:
+            iface = resolve(tool_interface)
+        except ImportError:
+            continue
+
+        if tool_obj is not None and sm.queryUtility(iface) is None:
+            return True
+
+    return False
+
+def upgrade_root_site_manager(tool):
+    """2.2.x to 2.3.0 upgrade step handler
+    """
+    logger = logging.getLogger('GenericSetup.upgrade')
+    portal = aq_parent(aq_inner(tool))
+    try:
+        sm = portal.getSiteManager()
+    except ComponentLookupError:
+        logger.warning("Site manager missing.")
+        return
+
+    for tool_id, tool_interface in _TOOL_UTILITIES:
+        tool_obj = getToolByName(portal, tool_id, default=None)
+        try:
+            iface = resolve(tool_interface)
+        except ImportError:
+            continue
+
+        if tool_obj is not None and sm.queryUtility(iface) is None:
+            sm.registerUtility(tool_obj, iface)
+            logger.info('Registered %s for interface %s' % (tool_id,
+                                                            tool_interface))



More information about the checkins mailing list