jonathan briffaut wrote:
En effet je recherche le même effet que cette fonction de lister tous
les membres ayant un role dans un espace de travail
J'avais écrit ce script pour un projet: cf PJ
A adapter en fonction des besoins.
PS, il n'extrait pas les membres des groupes.
--
Olivier
##parameters=roles_filter=None, ptype_filter=True, REQUEST=None
# $Id: getUsersByLocalRoles.py 23056 2005-06-14 18:15:50Z ogrisel $
"""Return a dictionary of user's (id, type, display_name) sorted by localroles
The localroles are computed according to the current context.
- id is a string like 'user:login'
- type is 'user' or 'group'
- display_name is the user fullname or the group name (with i18n support)
"""
if REQUEST is not None:
return
mtool = context.portal_membership
mdir = context.portal_directories.members
cpsmcat = context.Localizer.default
lroles = mtool.getMergedLocalRoles(context)
# Building the filters
filters = []
if ptype_filter:
ptype = context.portal_type
if ptype in ('Chat', 'CPSForum'):
ptype = context.aq_parent.portal_type
if ptype == 'MetaSection':
# Use the same localroles names for Meta and Sections
ptype = 'Section'
filters.append(lambda r: r.startswith(ptype))
if roles_filter is not None:
filters.append(lambda r: r in roles_filter)
def compound_filter(role, test_list):
for test in test_list:
if not test(role):
return False
return True
# Filtering
if filters:
for user, roles in lroles.items():
# Applying the filters
lroles[user] = [ role for role in roles
if compound_filter(role, filters) ]
# Removing users with no roles
if not lroles[user]:
del lroles[user]
# Computing the display_names (only once for each user)
display_names = {}
for user in lroles.keys():
type, uid = user.split(':', 1)
if type == 'user':
display_names[user] = mdir.getEntry(uid, {}).get('fullname')
if type == 'group':
if uid.startswith('role:'):
display_names[user] = cpsmcat(uid)
else:
display_names[user] = uid
# Cross-sorting the results
users_by_roles = {}
for user, roles in lroles.items():
type, id = user.split(':', 1)
display_name = display_names[user]
if display_name is None:
continue
for role in roles:
users = users_by_roles.get(role, [])
users.append((id, type, display_name))
users_by_roles[role] = users
return users_by_roles
_______________________________________________
cps-users-fr
Adresse de la liste : [email protected]
Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr>