def existing_users(context):
    """
    Look up the full user details for current workspace members
    """
    members = IWorkspace(context).members
    info = []
    for userid, details in members.items():
        user = api.user.get(userid)
        if user is None:
            continue
        user = user.getUser()
        title = user.getProperty("fullname") or user.getId() or userid
        # XXX tbd, we don't know what a persons description is, yet
        description = _(u"Here we could have a nice status of this person")
        classes = description and "has-description" or "has-no-description"
        portal = api.portal.get()
        portrait = "%s/portal_memberdata/portraits/%s" % (portal.absolute_url(), userid)
        info.append(
            dict(
                id=userid,
                title=title,
                description=description,
                portrait=portrait,
                cls=classes,
                member=True,
                admin="Admins" in details["groups"],
            )
        )

    return info
Example #2
0
def existing_users(context):
    """
    Look up the full user details for current workspace members
    """
    members = IWorkspace(context).members
    info = []
    for userid, details in members.items():
        user = api.user.get(userid)
        if user is None:
            continue
        user = user.getUser()
        title = user.getProperty('fullname') or user.getId() or userid
        # XXX tbd, we don't know what a persons description is, yet
        description = ''
        classes = description and 'has-description' or 'has-no-description'
        portal = api.portal.get()
        portrait = '%s/@@avatars/%s' % \
                   (portal.absolute_url(), userid)
        info.append(
            dict(
                id=userid,
                title=title,
                description=description,
                portrait=portrait,
                cls=classes,
                member=True,
                admin='Admins' in details['groups'],
            )
        )

    return info
    def existing_users(self):
        """
        Look up the full user details for current workspace members
        """
        members = IWorkspace(self).members
        info = []
        for userid, details in members.items():
            user = api.user.get(userid)
            if user is None:
                continue
            user = user.getUser()
            title = user.getProperty('fullname') or user.getId() or userid
            # XXX tbd, we don't know what a persons description is, yet
            description = MessageFactory(u'Here we could have a nice status of'
                                         u' this person')
            classes = description and 'has-description' or 'has-no-description'
            portrait = pi_api.userprofile.avatar_url(userid)
            info.append(
                dict(
                    id=userid,
                    title=title,
                    description=description,
                    portrait=portrait,
                    cls=classes,
                    member=True,
                    admin='Admins' in details['groups'],
                )
            )

        return info
Example #4
0
def existing_users(context):
    """
    Look up the full user details for current workspace members
    """
    members = IWorkspace(context).members
    info = []
    for userid, details in members.items():
        user = api.user.get(userid)
        if user is None:
            continue
        user = user.getUser()
        title = user.getProperty('fullname') or user.getId() or userid
        # XXX tbd, we don't know what a persons description is, yet
        description = ''
        classes = description and 'has-description' or 'has-no-description'
        portal = api.portal.get()
        portrait = '%s/@@avatars/%s' % \
                   (portal.absolute_url(), userid)
        info.append(
            dict(
                id=userid,
                title=title,
                description=description,
                portrait=portrait,
                cls=classes,
                member=True,
                admin='Admins' in details['groups'],
            ))

    return info
    def existing_users(self):
        members = IWorkspace(self.context).members
        info = []
        for userid, details in members.items():
            user = api.user.get(userid).getUser()
            title = user.getProperty('fullname') or user.getId() or userid
            info.append(
                dict(
                    id=userid,
                    title=title,
                    member=True,
                    admin='Admins' in details['groups'],
                )
            )

        return info
Example #6
0
    def existing_users(self):
        ''' The existing users

        BBB: check if we can use some optimized methods from the workspace view
        '''
        members = IWorkspace(self.context).members
        info = []

        for userid, details in members.items():
            title = self.get_principal_title(userid)
            # XXX tbd, we don't know what a persons description is, yet
            description = ''
            classes = description and 'has-description' or 'has-no-description'
            info.append(
                dict(
                    id=userid,
                    title=title,
                    description=description,
                    cls=classes,
                    member=True,
                    admin='Admins' in details['groups'],
                ))
        return info
    def existing_users(self):
        """
        Look up the full user details for current workspace members
        """
        members = IWorkspace(self).members
        info = []

        for user_or_group_id, details in members.items():
            user = api.user.get(user_or_group_id)
            if user is not None:
                user = user.getUser()
                title = (user.getProperty('fullname') or user.getId() or
                         user_or_group_id)
                # XXX tbd, we don't know what a persons description is, yet
                description = ''
                classes = 'user ' + (description and 'has-description'
                                     or 'has-no-description')
                portrait = pi_api.userprofile.avatar_url(user_or_group_id)
            else:
                group = api.group.get(user_or_group_id)
                if group is None:
                    continue
                title = (group.getProperty('title') or group.getId() or
                         user_or_group_id)
                description = _(
                    u"number_of_members",
                    default=u'${no_members} Members',
                    mapping={
                        u'no_members': len(group.getAllGroupMemberIds())})
                classes = 'user-group has-description'
                portrait = ''

            # User's 'role' is any group they are a member of
            # that is not the default participation policy group
            # (including Admins group)
            role = None
            groups = details['groups']
            if 'Admins' in groups:
                role = 'Admin'
            for policy in PARTICIPANT_POLICY:
                if policy == self.participant_policy:
                    continue
                if policy.title() in groups:
                    role = PARTICIPANT_POLICY[policy]['title']
                    # According to the design there is at most one extra role
                    # per user, so we go with the first one we find. This may
                    # not be enforced in the backend though.
                    break
            if role:
                classes += ' has-label'

            info.append(
                dict(
                    id=user_or_group_id,
                    title=title,
                    description=description,
                    portrait=portrait,
                    cls=classes,
                    member=True,
                    admin='Admins' in details['groups'],
                    role=role,
                )
            )

        return info
Example #8
0
    def existing_users(self):
        """
        Look up the full user details for current workspace members

        BBB: this has to go away. The workspace view has more performant
             methods
        """
        members = IWorkspace(self).members
        gtool = self.portal_groups
        group_names = gtool.listGroupNames()
        info = []
        portal_url = api.portal.get().absolute_url()

        for user_or_group_id, details in members.items():
            user = api.user.get(user_or_group_id)
            if user is not None:
                typ = 'user'
                user = user.getUser()
                title = (user.getProperty('fullname') or user.getId() or
                         user_or_group_id)
                # XXX tbd, we don't know what a persons description is, yet
                description = ''
                classes = 'user ' + (description and 'has-description' or
                                     'has-no-description')
                portrait = pi_api.userprofile.avatar_url(user_or_group_id)
                obj = user
                absolute_url = '/'.join(
                    (portal_url, 'profiles', user.getId())
                )
            else:
                typ = 'group'
                group = api.group.get(user_or_group_id)
                if group is None:
                    continue
                # Don't show a secret group, ever
                if group.getProperty('state') == 'secret':
                    continue
                title = (group.getProperty('title') or group.getGroupId() or
                         user_or_group_id)
                # Resolving all users of a group with nested groups is
                # ridiculously slow. PAS resolves each member and if it
                # doesn't return a valid user, it resolves it as group
                # and from that group every member again. With LDAP,
                # Each of these is one ldap request. 'Hammering' is not
                # the right word for this.
                # At this position, it is not vital to return this information
                # Instead we can simply say how many members/groups there are.
                # People can click and see for themselves.
                group_members = gtool.getGroupMembers(group.getId())
                groups = 0
                for member in group_members:
                    if member in group_names:
                        groups += 1
                description = _(
                    u"number_of_members",
                    default=u'${no_users} Users / ${no_groups} Groups',
                    mapping={
                        u'no_users': len(group_members) - groups,
                        u'no_groups': groups})
                classes = 'user-group has-description'
                portrait = ''
                obj = group
                obj.getProperty('object_id') or obj.getId()

                absolute_url = '/'.join((
                    portal_url,
                    'groups',
                    obj.getProperty('object_id') or obj.getId()
                ))

            # User's 'role' is any group they are a member of
            # that is not the default participation policy group
            # (including Admins group)
            role = None
            groups = details['groups']
            if 'Admins' in groups:
                role = 'Admin'
            for policy in PARTICIPANT_POLICY:
                if policy == self.participant_policy:
                    continue
                if policy.title() in groups:
                    role = PARTICIPANT_POLICY[policy]['title']
                    # According to the design there is at most one extra role
                    # per user, so we go with the first one we find. This may
                    # not be enforced in the backend though.
                    break
            if role:
                classes += ' has-label'

            info.append(
                dict(
                    id=user_or_group_id,
                    title=title,
                    description=description,
                    portrait=portrait,
                    cls=classes,
                    member=True,
                    admin='Admins' in details['groups'],
                    role=role,
                    typ=typ,
                    obj=obj,
                    absolute_url=absolute_url,
                )
            )

        return info
Example #9
0
    def existing_users(self):
        """
        Look up the full user details for current workspace members
        """
        members = IWorkspace(self).members
        info = []

        for user_or_group_id, details in members.items():
            user = api.user.get(user_or_group_id)
            if user is not None:
                typ = 'user'
                user = user.getUser()
                title = (user.getProperty('fullname') or user.getId()
                         or user_or_group_id)
                # XXX tbd, we don't know what a persons description is, yet
                description = ''
                classes = 'user ' + (description and 'has-description'
                                     or 'has-no-description')
                portrait = pi_api.userprofile.avatar_url(user_or_group_id)
            else:
                typ = 'group'
                group = api.group.get(user_or_group_id)
                if group is None:
                    continue
                title = (group.getProperty('title') or group.getId()
                         or user_or_group_id)
                description = _(
                    u"number_of_members",
                    default=u'${no_members} Members',
                    mapping={u'no_members': len(group.getAllGroupMemberIds())})
                classes = 'user-group has-description'
                portrait = ''

            # User's 'role' is any group they are a member of
            # that is not the default participation policy group
            # (including Admins group)
            role = None
            groups = details['groups']
            if 'Admins' in groups:
                role = 'Admin'
            for policy in PARTICIPANT_POLICY:
                if policy == self.participant_policy:
                    continue
                if policy.title() in groups:
                    role = PARTICIPANT_POLICY[policy]['title']
                    # According to the design there is at most one extra role
                    # per user, so we go with the first one we find. This may
                    # not be enforced in the backend though.
                    break
            if role:
                classes += ' has-label'

            info.append(
                dict(id=user_or_group_id,
                     title=title,
                     description=description,
                     portrait=portrait,
                     cls=classes,
                     member=True,
                     admin='Admins' in details['groups'],
                     role=role,
                     typ=typ))

        return info