source: products/qMemberdataExport/tags/0.1.0/PASMemberdataHandler.py @ 1061

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

Building directory structure

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