X-Git-Url: https://scm.cri.mines-paristech.fr/git/Plinn.git/blobdiff_plain/99afe0ce8700bf835ff7bbedf77bb46e58f996d8..8393e88f33f604ce16fb229cf7f116ac106e2b0f:/MemberDataTool.py?ds=sidebyside diff --git a/MemberDataTool.py b/MemberDataTool.py index 29f8040..a2c25db 100755 --- a/MemberDataTool.py +++ b/MemberDataTool.py @@ -22,13 +22,19 @@ """ - +from AccessControl.interfaces import IUser +from Products.CMFCore.interfaces import IMemberDataTool from Globals import InitializeClass from Acquisition import aq_inner, aq_parent, aq_base from AccessControl import ClassSecurityInfo +from OFS.SimpleItem import SimpleItem from Products.CMFCore.MemberDataTool import MemberDataTool as BaseTool from Products.CMFCore.MemberDataTool import MemberData as BaseData -from Products.CMFCore.MemberDataTool import CleanupTemp +from Products.CMFCore.MemberDataTool import MemberAdapter as BaseMemberAdapter +from zope.component import adapts +from zope.interface import implements +from Products.CMFCore.interfaces import IMember +# from Products.CMFCore.MemberDataTool import CleanupTemp from Products.CMFCore.utils import getToolByName from Products.CMFCore.CMFCatalogAware import CMFCatalogAware from Products.CMFCore.DynamicType import DynamicType @@ -52,52 +58,11 @@ class MemberDataTool (BaseTool): self._setProperty('given_name', '', 'string') self._setProperty('wysiwyg_editor', 'FCK', 'string') self._setProperty('photo_width', 800, 'int') - - security.declarePrivate('wrapUser') - def wrapUser(self, u): - ''' - If possible, returns the Member object that corresponds - to the given User object. - ''' - id = u.getId() - members = self._members - if not id in members: - base = aq_base(self) - members[id] = MemberData(base, id) - # Return a wrapper with self as containment and - # the user as context. - return members[id].__of__(self).__of__(u) - -# security.declarePrivate('wrapUser') -# def wrapUser(self, u): -# """ -# If possible, returns the Member object that corresponds -# to the given User object. -# """ -# id = u.getId() -# members = self._members -# if not members.has_key(id): -# # Get a temporary member that might be -# # registered later via registerMemberData(). -# temps = self._v_temps -# if temps is not None and temps.has_key(id): -# m = temps[id] -# else: -# base = aq_base(self) -# m = MemberData(base, id) -# if temps is None: -# self._v_temps = {id:m} -# if hasattr(self, 'REQUEST'): -# # No REQUEST during tests. -# self.REQUEST._hold(CleanupTemp(self)) -# else: -# temps[id] = m -# else: -# m = members[id] -# # Return a wrapper with self as containment and -# # the user as context. -# return m.__of__(self).__of__(u) - + + def wrapUser(self, u) : + wu = super(MemberDataTool, self).wrapUser(u) + return wu.__of__(self).__of__(u) + def __bobo_traverse__(self, REQUEST, name): if hasattr(self,name): @@ -109,6 +74,38 @@ class MemberDataTool (BaseTool): InitializeClass(MemberDataTool) +class MemberAdapter(BaseMemberAdapter, SimpleItem, DynamicType, CMFCatalogAware): + + """Member data adapter. + """ + + adapts(IUser, IMemberDataTool) + implements(IMember) + + portal_type = 'Member Data' + + security = ClassSecurityInfo() + + def __init__(self, user, tool): + super(MemberAdapter, self).__init__(user, tool) + self.id = self.getId() + + security.declarePublic('getMemberFullName') + def getMemberFullName(self, nameBefore=1) : + """ Return the best full name representation """ + memberName = self.getProperty('name', default='') + memberGivenName = self.getProperty('given_name', default='') + memberId = self.getId() + return formatFullName(memberName, memberGivenName, memberId, nameBefore=nameBefore) + + def getMemberSortableFormat(self) : + """ Return a specific format of full name for alphabetical sorting """ + return self.getMemberFullName(nameBefore = 1).lower() + + +InitializeClass(MemberAdapter) + + class MemberData (BaseData, DynamicType, CMFCatalogAware): ## __implements__ = IMemberData