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
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
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
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
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
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