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

Jens Vagelpohl jens at dataflake.org
Fri Jun 8 11:07:57 EDT 2007


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

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

-=-
Modified: CMF/branches/1.6/CHANGES.txt
===================================================================
--- CMF/branches/1.6/CHANGES.txt	2007-06-08 15:01:44 UTC (rev 76500)
+++ CMF/branches/1.6/CHANGES.txt	2007-06-08 15:07:56 UTC (rev 76501)
@@ -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)
+
     - CMFCore.WorkflowTool: Using the '(Default)' keyword for a type's 
       workflow chain will now reset any custom workflow chains for the type
       (http://www.zope.org/Collectors/CMF/475)

Modified: CMF/branches/1.6/CMFCore/CMFBTreeFolder.py
===================================================================
--- CMF/branches/1.6/CMFCore/CMFBTreeFolder.py	2007-06-08 15:01:44 UTC (rev 76500)
+++ CMF/branches/1.6/CMFCore/CMFBTreeFolder.py	2007-06-08 15:07:56 UTC (rev 76501)
@@ -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
 from PortalFolder import factory_type_information as PortalFolder_FTI
 
@@ -66,4 +68,14 @@
         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/1.6/CMFCore/MembershipTool.py
===================================================================
--- CMF/branches/1.6/CMFCore/MembershipTool.py	2007-06-08 15:01:44 UTC (rev 76500)
+++ CMF/branches/1.6/CMFCore/MembershipTool.py	2007-06-08 15:07:56 UTC (rev 76501)
@@ -243,7 +243,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/1.6/CMFCore/tests/test_MembershipTool.py
===================================================================
--- CMF/branches/1.6/CMFCore/tests/test_MembershipTool.py	2007-06-08 15:01:44 UTC (rev 76500)
+++ CMF/branches/1.6/CMFCore/tests/test_MembershipTool.py	2007-06-08 15:07:56 UTC (rev 76501)
@@ -26,6 +26,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
@@ -118,6 +119,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