source: products/qMemberdataExport/trunk/PASMemberdataHandler.py

Last change on this file was 1, checked in by myroslav, 18 years ago

Building directory structure

File size: 3.6 KB
Line 
1from types import UnicodeType
2
3from Products.CMFCore.utils import getToolByName
4
5from MemberdataHandlers import registerMemberdataHandler, IMemberdataHandler
6
7class PASMemberdataHandler:
8    """
9        Manage standard portal_memberdata and portal_membership tools
10    """
11
12    __implements__ = IMemberdataHandler
13
14    def __init__(self, context):
15        self.context = context
16        self.tool = getToolByName(self.context, 'portal_membership', None)
17        self.fieldnames = []
18        # for compatibility with Plone 2.0 (import next only on instance init)
19        from Products.PluggableAuthService.interfaces.authservice import IPluggableAuthService
20        self.compatible = IPluggableAuthService.providedBy(self.context.acl_users)
21        self.is_compatible()
22
23    def is_compatible(self):
24        """
25            Take portal_memberdata tool and analyse possibility of working
26            with it.
27            If handler does not know how to work with given portal_memberdata,
28            it return 'False' on init, otherwise - 'True'.
29        """
30        if not self.compatible:
31            raise
32        return self.compatible
33
34    def listAllMemberProperties(self, exclude_props=[], include_props=None):
35        """
36            Return all properties from portal_memberdatas' property sheet.
37            Exclude properties that given in exclude_props list.
38        """
39        if not self.is_compatible(): return []
40
41        if ('id' not in exclude_props) and (include_props and 'id' in include_props or not include_props):
42            if 'id' not in self.fieldnames: self.fieldnames.append('id')
43        for memberId in self.getAllMembers():
44            user = self.tool.acl_users.getUserById(memberId)
45            for sheet in user.getOrderedPropertySheets():
46                for name in sheet.propertyIds():
47                    if (name not in exclude_props) and (include_props and name in include_props or not include_props):
48                        if name not in self.fieldnames: self.fieldnames.append(name)
49
50        return self.fieldnames
51
52    def getAllMembers(self):
53        """
54            Return all members with portal_membership.listMembers() method
55            (now this method returns only member ids)
56        """
57        if not self.is_compatible(): return []
58        mid_list = [user['userid'] for user in self.tool.acl_users.searchUsers()]
59
60        return mid_list
61
62    def getMemberProperties(self, member, exclude_props=[], include_props=None):
63        """
64            Return all needed members' properties as dictionary
65            {property name : property value, ...},
66            exclude properties from exclue_props parameter.
67            Get properties from portal_memberdata property sheet.
68        """
69
70        if not self.is_compatible: return {}
71        props = {}
72        # manually set id
73        if ('id' not in exclude_props) and (include_props and 'id' in include_props or not include_props):
74            if not props.has_key('id'): props['id'] = member
75            if 'id' not in self.fieldnames: self.fieldnames.append('id')
76        user = self.tool.acl_users.getUserById(member)
77        for sheet in user.getOrderedPropertySheets():
78            for field, value in sheet.propertyItems():
79                if type(value) is UnicodeType:
80                    value = value.encode('UTF8')
81                if (field not in exclude_props) and (include_props and field in include_props or not include_props):
82                    if not props.has_key(field):
83                        props[field] = value
84                    if field not in self.fieldnames:
85                        self.fieldnames.append(str(field))
86
87        return props
88
89registerMemberdataHandler(PASMemberdataHandler)
Note: See TracBrowser for help on using the repository browser.