X-Git-Url: https://svn.cri.mines-paristech.fr/git/Plinn.git/blobdiff_plain/99afe0ce8700bf835ff7bbedf77bb46e58f996d8..9fa2baa127ef53fca03011ce2295e9306c40a306:/MemberDataTool.py?ds=sidebyside

diff --git a/MemberDataTool.py b/MemberDataTool.py
index 29f8040..4eea631 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,44 @@ 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()
+	
+	# 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
@@ -147,24 +150,26 @@ class MemberData (BaseData, DynamicType, CMFCatalogAware):
 		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) :