[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/ - refactored createMemberArea using a standard factory
Yvo Schubbe
cvs-admin at zope.org
Fri Jul 26 14:14:55 CEST 2013
Log message for revision 130275:
- refactored createMemberArea using a standard factory
(this should not change any behavior)
Changed:
U Products.CMFDefault/trunk/Products/CMFDefault/MembershipTool.py
U Products.CMFDefault/trunk/Products/CMFDefault/content.zcml
U Products.CMFDefault/trunk/Products/CMFDefault/tests/test_MembershipTool.py
-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/MembershipTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/MembershipTool.py 2013-07-26 12:11:21 UTC (rev 130274)
+++ Products.CMFDefault/trunk/Products/CMFDefault/MembershipTool.py 2013-07-26 12:14:55 UTC (rev 130275)
@@ -14,24 +14,29 @@
"""
from AccessControl.SecurityInfo import ClassSecurityInfo
-from Acquisition import aq_base
from Acquisition import aq_inner
from Acquisition import aq_parent
from App.class_init import InitializeClass
from App.special_dtml import DTMLFile
+from zope.component import getUtility
+from zope.component.interfaces import IFactory
from zope.globalrequest import getRequest
-from zope.interface import implements
+from zope.interface import implementedBy
+from zope.interface import implementer
from ZPublisher.BaseRequest import RequestContainer
+from Products.CMFCore.interfaces import IMembershipTool as IBaseTool
from Products.CMFCore.MembershipTool import MembershipTool as BaseTool
+from Products.CMFCore.PortalFolder import PortalFolder
from Products.CMFCore.utils import _checkPermission
-from Products.CMFDefault.Document import addDocument
+from Products.CMFDefault.Document import Document
from Products.CMFDefault.interfaces import IMembershipTool
from Products.CMFDefault.permissions import ListPortalMembers
from Products.CMFDefault.permissions import ManagePortal
from Products.CMFDefault.permissions import ManageUsers
from Products.CMFDefault.permissions import View
from Products.CMFDefault.utils import _dtmldir
+from Products.CMFDefault.utils import Message as _
DEFAULT_MEMBER_CONTENT = """\
Default page for %s
@@ -44,15 +49,15 @@
"""
+ at implementer(IMembershipTool)
class MembershipTool(BaseTool):
""" Implement 'portal_membership' interface using "stock" policies.
"""
- implements(IMembershipTool)
-
meta_type = 'Default Membership Tool'
membersfolder_id = 'Members'
+ _MEMBERAREA_FACTORY_NAME = 'cmf.memberarea.bbb2'
security = ClassSecurityInfo()
@@ -113,69 +118,6 @@
request_container = RequestContainer(REQUEST=getRequest())
return members_folder.__of__(request_container)
- security.declarePublic('createMemberArea')
- def createMemberArea(self, member_id=''):
- """ Create a member area for 'member_id' or authenticated user.
- """
- if not self.getMemberareaCreationFlag():
- return None
- members = self.getMembersFolder()
- if members is None:
- return None
- if self.isAnonymousUser():
- return None
- if member_id:
- if not self.isMemberAccessAllowed(member_id):
- return None
- member = self.getMemberById(member_id)
- if member is None:
- return None
- else:
- member = self.getAuthenticatedMember()
- member_id = member.getId()
- if hasattr( aq_base(members), member_id ):
- return None
-
- # Note: We can't use invokeFactory() to add folder and content because
- # the user might not have the necessary permissions.
-
- # Create Member's home folder.
- members.manage_addPortalFolder(id=member_id,
- title="%s's Home" % member_id)
- f = members._getOb(member_id)
-
- # Grant Ownership and Owner role to Member
- f.changeOwnership(member)
- f.__ac_local_roles__ = None
- f.manage_setLocalRoles(member_id, ['Owner'])
-
- # Create Member's initial content.
- if hasattr(self, 'createMemberContent'):
- self.createMemberContent(member=member,
- member_id=member_id,
- member_folder=f)
- else:
- addDocument( f
- , 'index_html'
- , member_id+"'s Home"
- , member_id+"'s front page"
- , "structured-text"
- , (DEFAULT_MEMBER_CONTENT % member_id)
- )
-
- # Grant Ownership and Owner role to Member
- f.index_html.changeOwnership(member)
- f.index_html.__ac_local_roles__ = None
- f.index_html.manage_setLocalRoles(member_id, ['Owner'])
-
- f.index_html._setPortalTypeName( 'Document' )
- f.index_html.reindexObject()
- f.index_html.notifyWorkflowCreated()
- return f
-
- security.declarePublic('createMemberarea')
- createMemberarea = createMemberArea
-
def getHomeFolder(self, id=None, verifyPermission=0):
""" Return a member's home folder object, or None.
"""
@@ -206,3 +148,39 @@
return None
InitializeClass(MembershipTool)
+
+
+ at implementer(IFactory)
+class _BBBMemberAreaFactory(object):
+
+ """Creates a member area.
+ """
+
+ title = _(u'Member Area')
+ description = _(u'Classic CMFDefault home folder for portal members.')
+
+ def __call__(self, id, title=None, *args, **kw):
+ if title is None:
+ title = "{0}'s Home".format(id)
+ item = PortalFolder(id, title, *args, **kw)
+ item.manage_setLocalRoles(id, ['Owner'])
+
+ # Create Member's initial content
+ mtool = getUtility(IBaseTool)
+ if hasattr(mtool, 'createMemberContent'):
+ mtool.createMemberContent(member=mtool.getMemberById(id),
+ member_id=id,
+ member_folder=item)
+ else:
+ subitem = Document('index_html', "{0}'s Home".format(id),
+ "{0}'s front page".format(id),
+ 'structured-text', DEFAULT_MEMBER_CONTENT % id)
+ subitem.manage_setLocalRoles(id, ['Owner'])
+ subitem._setPortalTypeName('Document')
+ item._setObject('index_html', subitem, suppress_events=True)
+ return item
+
+ def getInterfaces(self):
+ return implementedBy(PortalFolder)
+
+BBBMemberAreaFactory = _BBBMemberAreaFactory()
Modified: Products.CMFDefault/trunk/Products/CMFDefault/content.zcml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/content.zcml 2013-07-26 12:11:21 UTC (rev 130274)
+++ Products.CMFDefault/trunk/Products/CMFDefault/content.zcml 2013-07-26 12:14:55 UTC (rev 130275)
@@ -95,6 +95,13 @@
name="cmf.folder.skinned"
/>
+ <!-- MemberArea -->
+
+ <utility
+ component=".MembershipTool.BBBMemberAreaFactory"
+ name="cmf.memberarea.bbb2"
+ />
+
<include package="zope.annotation" />
<class class="Products.CMFCore.PortalFolder.PortalFolder">
Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_MembershipTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_MembershipTool.py 2013-07-26 12:11:21 UTC (rev 130274)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_MembershipTool.py 2013-07-26 12:14:55 UTC (rev 130275)
@@ -21,6 +21,7 @@
from zope.component import getSiteManager
from zope.component.hooks import clearSite
from zope.component.hooks import setSite
+from zope.component.interfaces import IFactory
from zope.globalrequest import clearRequest
from zope.globalrequest import setRequest
from zope.interface.verify import verifyClass
@@ -28,6 +29,7 @@
from Products.CMFCore.interfaces import IWorkflowTool
from Products.CMFCore.PortalFolder import PortalFolder
+from Products.CMFCore.testing import EventZCMLLayer
from Products.CMFCore.tests.base.dummy import DummyFolder
from Products.CMFCore.tests.base.dummy import DummySite
from Products.CMFCore.tests.base.dummy import DummyTool
@@ -104,6 +106,8 @@
class MembershipToolSecurityTests(SecurityTest):
+ layer = EventZCMLLayer
+
def _makeOne(self, *args, **kw):
from Products.CMFDefault.MembershipTool import MembershipTool
@@ -114,16 +118,19 @@
self.site = DummySite('site').__of__(self.app)
self.site._setObject('portal_membership', self._makeOne())
- def tearDown(self):
- cleanUp()
- SecurityTest.tearDown(self)
+ def test_createMemberArea(self):
+ from Products.CMFDefault.interfaces import IMembershipTool
+ from Products.CMFDefault.MembershipTool import BBBMemberAreaFactory
- def test_createMemberArea(self):
mtool = self.site.portal_membership
members = self.site._setObject('Members', PortalFolder('Members'))
acl_users = self.site._setObject('acl_users', DummyUserFolder())
wtool = DummyTool()
- getSiteManager().registerUtility(wtool, IWorkflowTool)
+ sm = getSiteManager()
+ sm.registerUtility(mtool, IMembershipTool)
+ sm.registerUtility(wtool, IWorkflowTool)
+ sm.registerUtility(BBBMemberAreaFactory, IFactory,
+ 'cmf.memberarea.bbb2')
# permission
mtool.createMemberArea('user_foo')
More information about the checkins
mailing list