예제 #1
0
    def createMemberarea(self, member_id=None, minimal=None):
        """
        Create a member area for 'member_id' or the authenticated
        user, but don't assume that member_id is url-safe.
        """
        if not self.getMemberareaCreationFlag():
            return None
        catalog = getToolByName(self, 'portal_catalog')
        membership = getToolByName(self, 'portal_membership')
        members = self.getMembersFolder()

        if not member_id:
            # member_id is optional (see CMFCore.interfaces.portal_membership:
            #     Create a member area for 'member_id' or authenticated user.)
            member = membership.getAuthenticatedMember()
            member_id = member.getId()

        if hasattr(members, 'aq_explicit'):
            members=members.aq_explicit

        if members is None:
            # no members area
            logger.debug('createMemberarea: members area does not exist.')
            return

        safe_member_id = cleanId(member_id)
        if hasattr(members, safe_member_id):
            # has already this member
            logger.debug(
                'createMemberarea: member area '
                'for %r already exists.' % safe_member_id)
            return

        if not safe_member_id:
            # Could be one of two things:
            # - A Emergency User
            # - cleanId made a empty string out of member_id
            logger.debug(
                'createMemberarea: empty member id '
                '(%r, %r), skipping member area creation.' % (
                member_id, safe_member_id))
            return

        # Create member area without security checks
        typesTool = getToolByName(members, 'portal_types')
        fti = typesTool.getTypeInfo(self.memberarea_type)
        member_folder = fti._constructInstance(members, safe_member_id)

        # Get the user object from acl_users
        acl_users = getToolByName(self, "acl_users")
        user = acl_users.getUserById(member_id)
        if user is not None:
            user = user.__of__(acl_users)
        else:
            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'

        member_object = self.getMemberById(member_id)

        ## Modify member folder
        member_folder = self.getHomeFolder(member_id)
        # Grant Ownership and Owner role to Member
        member_folder.changeOwnership(user)
        member_folder.__ac_local_roles__ = None
        member_folder.manage_setLocalRoles(member_id, ['Owner'])
        # We use ATCT now use the mutators
        fullname = member_object.getProperty('fullname')
        member_folder.setTitle(fullname or member_id)
        member_folder.reindexObject()

        ## Hook to allow doing other things after memberarea creation.
        notify_script = getattr(member_folder, 'notifyMemberAreaCreated', None)
        if notify_script is not None:
            notify_script()
예제 #2
0
    def createMemberarea(self, member_id=None, minimal=None):
        """
        Create a member area for 'member_id' or the authenticated
        user, but don't assume that member_id is url-safe.
        """
        if not self.getMemberareaCreationFlag():
            return None
        membership = getToolByName(self, 'portal_membership')
        members = self.getMembersFolder()

        if not member_id:
            # member_id is optional (see CMFCore.interfaces.portal_membership:
            #     Create a member area for 'member_id' or authenticated user.)
            member = membership.getAuthenticatedMember()
            member_id = member.getId()

        if hasattr(members, 'aq_explicit'):
            members = members.aq_explicit

        if members is None:
            # no members area
            logger.debug('createMemberarea: members area does not exist.')
            return

        safe_member_id = cleanId(member_id)
        if hasattr(members, safe_member_id):
            # has already this member
            logger.debug('createMemberarea: member area '
                         'for %r already exists.' % safe_member_id)
            return

        if not safe_member_id:
            # Could be one of two things:
            # - A Emergency User
            # - cleanId made a empty string out of member_id
            logger.debug('createMemberarea: empty member id '
                         '(%r, %r), skipping member area creation.' %
                         (member_id, safe_member_id))
            return

        # Create member area without security checks
        typesTool = getToolByName(members, 'portal_types')
        fti = typesTool.getTypeInfo(self.memberarea_type)
        member_folder = fti._constructInstance(members, safe_member_id)

        # Get the user object from acl_users
        acl_users = getToolByName(self, "acl_users")
        user = acl_users.getUserById(member_id)
        if user is not None:
            user = user.__of__(acl_users)
        else:
            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')

        member_object = self.getMemberById(member_id)

        # Modify member folder
        member_folder = self.getHomeFolder(member_id)
        # Grant Ownership and Owner role to Member
        member_folder.changeOwnership(user)
        member_folder.__ac_local_roles__ = None
        member_folder.manage_setLocalRoles(member_id, ['Owner'])
        # We use ATCT now use the mutators
        fullname = member_object.getProperty('fullname')
        member_folder.setTitle(fullname or member_id)
        member_folder.reindexObject()

        # Hook to allow doing other things after memberarea creation.
        notify_script = getattr(member_folder, 'notifyMemberAreaCreated', None)
        if notify_script is not None:
            notify_script()
예제 #3
0
def createMemberarea(self, member_id=None, minimal=None):
    """
    Create a member area for 'member_id' or the authenticated
    user, but don't assume that member_id is url-safe.
    """
    if not self.getMemberareaCreationFlag():
        return None

    membership = getToolByName(self, 'portal_membership')
    members = self.getMembersFolder()
    if not member_id:
        # member_id is optional (see CMFCore.interfaces.portal_membership:
        #     Create a member area for 'member_id' or authenticated user.)
        member = membership.getAuthenticatedMember()
        member_id = member.getId()

        fname = member.getProperty('first_name', '').split(' ')[0] if member.getProperty('first_name') else ''
        mname = member.getProperty('mid_initial', '')[:1] if member.getProperty('mid_initial') else '' 
        lname = member.getProperty('last_name', '') if member.getProperty('last_name') else ''
        new_id = normalizeString(fname + mname + lname)
        complete_name = '%s %s. %s' % (fname, mname, lname)
        
        if hasattr(members, new_id):
            #context_id = new_id
            return
        else:
            # Try juandcruz-1, juandcruz-2, etc.
            idx = 1
            while idx <= RENAME_AFTER_CREATION_ATTEMPTS:
                if idx == 1:
                    new_id1 = "%s" % new_id
                else:
                    new_id1 = "%s%d" % (new_id, idx-1)
                
                if hasattr(members, new_id1):
                    continue
                else:
                    context_id = new_id1
                    break;
                idx += 1
        
    if hasattr(members, 'aq_explicit'):
        members = members.aq_explicit

    if members is None:
        # no members area
        logger.debug('createMemberarea: members area does not exist.')
        return

    safe_member_id = cleanId(context_id).replace('--', '-')
    if hasattr(members, safe_member_id):
        # has already this member
        logger.debug(
            'createMemberarea: member area '
            'for %r already exists.' % safe_member_id)
        return

    if not safe_member_id:
        # Could be one of two things:
        # - A Emergency User
        # - cleanId made a empty string out of member_id
        logger.debug(
            'createMemberarea: empty member id '
            '(%r, %r), skipping member area creation.' %
            (member_id, safe_member_id)
        )
        return

    # Create member area without security checks
    typesTool = getToolByName(members, 'portal_types')
    fti = typesTool.getTypeInfo(self.memberarea_type)
    member_folder = fti._constructInstance(members, safe_member_id)

    # Get the user object from acl_users
    acl_users = getToolByName(self, "acl_users")
    user = acl_users.getUserById(member_id)
    if user is not None:
        user = user.__of__(acl_users)
    else:
        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'
            )

    # Modify member folder
    member_folder = self.getHomeFolder(safe_member_id)
    # Grant Ownership and Owner role to Member
    
    member_folder.changeOwnership(user)
    member_folder.__ac_local_roles__ = None
    member_folder.manage_setLocalRoles(member_id, ['Owner'])
    # We use ATCT now use the mutators
    #member_folder.setTitle(safe_member_id or member_id)
    #custom Title
    member_folder.setTitle(complete_name or '')
    member_folder.reindexObject()

    # Hook to allow doing other things after memberarea creation.
    notify_script = getattr(member_folder, 'notifyMemberAreaCreated', None)
    if notify_script is not None:
        notify_script()