from Acquisition import aq_base
from Products.CMFCore.CMFCorePermissions import ManagePortal

from Products.CMFDefault.MembershipTool import MembershipTool
from Products.CMFCore.MembershipTool import MembershipTool as BaseTool

#XXX: Does it still keep the permissions from the tool?
def createMemberarea(self, member_id):
    """ Create a member area for 'member_id'.
    """
    members = self.getMembersFolder()
    if members is not None and not hasattr( aq_base(members), member_id ):
        f_title = "%s's Home" % member_id
        members.manage_addPortalFolder( id=member_id, title=f_title )
        f=getattr(members, member_id)

        # Gets something we can call getUsers() and getUserNames() on.
        acl_users = self.acl_users
        user = acl_users.getUser(member_id)

        if user is not None:
            user= user.__of__(acl_users)
        else:
            from AccessControl import getSecurityManager
            user= getSecurityManager().getUser()
            # check that we do not do something wrong
            if user.getId() != member_id:
                raise NotImplementedError, \
                    'cannot get user for member area creation'

        # Grant Ownership and Owner role to Member
        f.changeOwnership(user)
        f.__ac_local_roles__ = None
        f.manage_setLocalRoles(member_id, ['Owner'])


from Products.CMFDefault.MembershipTool import MembershipTool
MembershipTool.createMemberarea = createMemberarea
from Products.CMFCore.MembershipTool import MembershipTool
MembershipTool.createMemberarea = createMemberarea
