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>

Répondre à