Édition des propriétés des membres, à partir de l'annuaire, à nouveau possible.
[Plinn.git] / MemberDataTool.py
index e9e0b32..4eea631 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,44 @@ 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()
+       
+       # security overload
+       security.declareProtected(SetMemberProperties, 'setMemberProperties')
+       def setMemberProperties(self, mapping):
+               super(MemberAdapter, self).setMemberProperties(mapping)
+               self.reindexObject()
+    
+
+InitializeClass(MemberAdapter)
+
+
 class MemberData (BaseData, DynamicType, CMFCatalogAware):
 
 ##              __implements__ = IMemberData
 class MemberData (BaseData, DynamicType, CMFCatalogAware):
 
 ##              __implements__ = IMemberData
@@ -147,24 +150,26 @@ class MemberData (BaseData, DynamicType, CMFCatalogAware):
                if domains is not None:
                        u.domains = domains
 
                if domains is not None:
                        u.domains = domains
 
-
-       def getMemberFullName(self, nameBefore=1) :
-               """ Return the best full name representation """
-               memberName = self.getProperty('name', default='')
-               memberGivenName = self.getProperty('given_name', default='')
-               memberId = self.getProperty('id', default='')
-               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()
-
-
-       ## overload default security declaration
-       security.declareProtected(SetMemberProperties, 'setMemberProperties')
-       def setMemberProperties(self, mapping):
-               BaseData.setMemberProperties(self, mapping)
-               self.reindexObject()
+# migré
+#      def getMemberFullName(self, nameBefore=1) :
+#              """ Return the best full name representation """
+#              memberName = self.getProperty('name', default='')
+#              memberGivenName = self.getProperty('given_name', default='')
+#              memberId = self.getProperty('id', default='')
+#              return formatFullName(memberName, memberGivenName, memberId, nameBefore=nameBefore)
+
+# migré
+#      def getMemberSortableFormat(self) :
+#              """ Return a specific format of full name for alphabetical sorting """
+#              return self.getMemberFullName(nameBefore = 1).lower()
+
+
+# migré
+#      ## overload default security declaration
+#      security.declareProtected(SetMemberProperties, 'setMemberProperties')
+#      def setMemberProperties(self, mapping):
+#              BaseData.setMemberProperties(self, mapping)
+#              self.reindexObject()
 
        security.declarePrivate('manage_beforeDelete')
        def manage_beforeDelete(self) :
 
        security.declarePrivate('manage_beforeDelete')
        def manage_beforeDelete(self) :