Migration de la classe MemberData vers adaptateur.
[Plinn.git] / MemberDataTool.py
index e9e0b32..a2c25db 100755 (executable)
 #######################################################################################
 """ Workflow aware MemberData to provide reviewed member registration.
 
 #######################################################################################
 """ Workflow aware MemberData to provide reviewed member registration.
 
-$Id: MemberDataTool.py 1316 2008-07-29 15:37:23Z pin $
-$URL: http://svn.cri.ensmp.fr/svn/Plinn/branches/CMF-2.1/MemberDataTool.py $
-"""
 
 
+
+"""
+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 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 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
 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')
                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):
 
        def __bobo_traverse__(self, REQUEST, name):
                if hasattr(self,name):
@@ -109,6 +74,38 @@ class MemberDataTool (BaseTool):
 InitializeClass(MemberDataTool)
 
 
 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
 class MemberData (BaseData, DynamicType, CMFCatalogAware):
 
 ##              __implements__ = IMemberData