source: products/qMemberdataExport/trunk/BaseMemberdataHandler.py @ 1552

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

Building directory structure

  • Property svn:eol-style set to native
File size: 2.4 KB
Line 
1from types import UnicodeType
2
3from Products.CMFCore.utils import getToolByName
4
5from MemberdataHandlers import registerMemberdataHandler, IMemberdataHandler
6
7class BaseMemberdataHandler:
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_memberdata')
17        self.fieldnames = []
18        self.compatible = True
19        self.is_compatible()
20
21    def is_compatible(self):
22        """
23            Take portal_memberdata tool and analyse possibility of working
24            with it.
25            If handler does not know how to work with given portal_memberdata,
26            it return 'False' on init, otherwise - 'True'.
27        """
28        if not self.compatible:
29                raise
30        return self.compatible
31
32    def listAllMemberProperties(self, exclude_props=[], include_props=None):
33        """
34            Return all properties from portal_memberdatas' property sheet.
35            Exclude properties that given in exclude_props list.
36        """
37        if not self.is_compatible(): return []
38        return [prop for prop in ['id',] + self.tool.propertyIds()
39                   if (prop not in exclude_props) and (include_props and prop in include_props or not include_props)]
40
41    def getAllMembers(self):
42        """
43            Return all members with portal_membership.listMembers() method
44        """
45        if not self.is_compatible(): return []
46        mtool = getToolByName(self.context, 'portal_membership')
47        return mtool.listMembers()
48
49    def getMemberProperties(self, member, exclude_props=[], include_props=None):
50        """
51            Return all needed members' properties as dictionary
52            {property name : property value, ...},
53            exclude properties from exclue_props parameter.
54            Get properties from portal_memberdata property sheet.
55        """
56        if not self.is_compatible: return {}
57        self.fieldnames = self.listAllMemberProperties(exclude_props=exclude_props, include_props=include_props)
58        props = {}
59        for field in self.fieldnames:
60            value = member.getProperty(field, '')
61            if type(value) is UnicodeType:
62                value = value.encode('UTF8')
63            props[field] = value
64        return props
65
66registerMemberdataHandler(BaseMemberdataHandler)
Note: See TracBrowser for help on using the repository browser.