[CMF-checkins] SVN: CMF/branches/2.0/C - CMFCore.CMFBTreeFolder: CMFBTreeFolders could not be used as the

Jens Vagelpohl jens at dataflake.org
Fri Jun 8 11:08:16 EDT 2007


Log message for revision 76502:
  - CMFCore.CMFBTreeFolder: CMFBTreeFolders could not be used as the 
    toplevel /Members container.
    (http://www.zope.org/Collectors/CMF/441)
  

Changed:
  U   CMF/branches/2.0/CHANGES.txt
  U   CMF/branches/2.0/CMFCore/CMFBTreeFolder.py
  U   CMF/branches/2.0/CMFCore/MembershipTool.py
  U   CMF/branches/2.0/CMFCore/tests/test_MembershipTool.py

-=-
Modified: CMF/branches/2.0/CHANGES.txt
===================================================================
--- CMF/branches/2.0/CHANGES.txt	2007-06-08 15:07:56 UTC (rev 76501)
+++ CMF/branches/2.0/CHANGES.txt	2007-06-08 15:08:16 UTC (rev 76502)
@@ -2,6 +2,10 @@
 
   Bug Fixes
 
+    - CMFCore.CMFBTreeFolder: CMFBTreeFolders could not be used as the
+      toplevel /Members container. 
+      (http://www.zope.org/Collectors/CMF/441)
+
     - Fixed DST-driven test breakage in CMFCalendar by adding an optional
       'zone' argument to the DublineCore methods which return string
       rednitions of date metadata.

Modified: CMF/branches/2.0/CMFCore/CMFBTreeFolder.py
===================================================================
--- CMF/branches/2.0/CMFCore/CMFBTreeFolder.py	2007-06-08 15:07:56 UTC (rev 76501)
+++ CMF/branches/2.0/CMFCore/CMFBTreeFolder.py	2007-06-08 15:08:16 UTC (rev 76502)
@@ -20,6 +20,8 @@
 from Globals import InitializeClass
 from Products.BTreeFolder2.BTreeFolder2 import BTreeFolder2Base
 
+from permissions import AddPortalFolders
+from PortalFolder import PortalFolder
 from PortalFolder import PortalFolderBase
 
 
@@ -51,4 +53,14 @@
         PortalFolderBase._checkId(self, id, allow_dup)
         BTreeFolder2Base._checkId(self, id, allow_dup)
 
+    security.declareProtected(AddPortalFolders, 'manage_addPortalFolder')
+    def manage_addPortalFolder(self, id, title='', REQUEST=None):
+        """Add a new PortalFolder object with id *id*.
+        """
+        ob = PortalFolder(id, title)
+        self._setObject(id, ob)
+        if REQUEST is not None:
+            return self.folder_contents( # XXX: ick!
+                self, REQUEST, portal_status_message="Folder added")
+
 InitializeClass(CMFBTreeFolder)

Modified: CMF/branches/2.0/CMFCore/MembershipTool.py
===================================================================
--- CMF/branches/2.0/CMFCore/MembershipTool.py	2007-06-08 15:07:56 UTC (rev 76501)
+++ CMF/branches/2.0/CMFCore/MembershipTool.py	2007-06-08 15:08:16 UTC (rev 76502)
@@ -242,7 +242,7 @@
         if not self.getMemberareaCreationFlag():
             return None
         members = self.getMembersFolder()
-        if not members:
+        if members is None:
             return None
         if self.isAnonymousUser():
             return None

Modified: CMF/branches/2.0/CMFCore/tests/test_MembershipTool.py
===================================================================
--- CMF/branches/2.0/CMFCore/tests/test_MembershipTool.py	2007-06-08 15:07:56 UTC (rev 76501)
+++ CMF/branches/2.0/CMFCore/tests/test_MembershipTool.py	2007-06-08 15:08:16 UTC (rev 76502)
@@ -23,6 +23,7 @@
 from AccessControl.SecurityManagement import newSecurityManager
 from OFS.Folder import Folder
 
+from Products.CMFCore.CMFBTreeFolder import CMFBTreeFolder
 from Products.CMFCore.MemberDataTool import MemberDataTool
 from Products.CMFCore.PortalFolder import PortalFolder
 from Products.CMFCore.tests.base.dummy import DummySite
@@ -111,6 +112,39 @@
                           'CMF Collector issue #162 (LocalRoles broken): %s'
                           % str( f.get_local_roles() ) )
 
+    def test_createMemberAreaCMFBTreeFolder(self):
+        # Test member area creation if the toplevel "Members" folder is
+        # a CMFBTreeFolder (http://www.zope.org/Collectors/CMF/441
+        site = self._makeSite()
+        mtool = site.portal_membership
+        members = site._setObject( 'Members', CMFBTreeFolder('Members') )
+        acl_users = site._setObject( 'acl_users', DummyUserFolder() )
+        wtool = site._setObject( 'portal_workflow', DummyTool() )
+
+        # permission
+        mtool.createMemberArea('user_foo')
+        self.failIf( hasattr(members.aq_self, 'user_foo') )
+        newSecurityManager(None, acl_users.user_bar)
+        mtool.createMemberArea('user_foo')
+        self.failIf( hasattr(members.aq_self, 'user_foo') )
+        newSecurityManager(None, acl_users.user_foo)
+        mtool.setMemberareaCreationFlag()
+        mtool.createMemberArea('user_foo')
+        self.failIf( hasattr(members.aq_self, 'user_foo') )
+        newSecurityManager(None, acl_users.all_powerful_Oz)
+        mtool.setMemberareaCreationFlag()
+        mtool.createMemberArea('user_foo')
+        self.failUnless( hasattr(members.aq_self, 'user_foo') )
+
+        # default content
+        f = members.user_foo
+        ownership = acl_users.user_foo
+        localroles = ( ( 'user_foo', ('Owner',) ), )
+        self.assertEqual( f.getOwner(), ownership )
+        self.assertEqual( f.get_local_roles(), localroles,
+                          'CMF Collector issue #162 (LocalRoles broken): %s'
+                          % str( f.get_local_roles() ) )
+
     def test_deleteMembers(self):
         site = self._makeSite()
         mtool = site.portal_membership



More information about the CMF-checkins mailing list