[Erp5-report] r13440 - in /erp5/trunk/products: ERP5/Tool/ ERP5Catalog/
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Mar 15 23:04:20 CET 2007
Author: jp
Date: Thu Mar 15 23:04:16 2007
New Revision: 13440
URL: http://svn.erp5.org?rev=13440&view=rev
Log:
Added support for retrieval of my content through webdav.
Modified:
erp5/trunk/products/ERP5/Tool/ContributionTool.py
erp5/trunk/products/ERP5Catalog/CatalogTool.py
Modified: erp5/trunk/products/ERP5/Tool/ContributionTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Tool/ContributionTool.py?rev=13440&r1=13439&r2=13440&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Tool/ContributionTool.py (original)
+++ erp5/trunk/products/ERP5/Tool/ContributionTool.py Thu Mar 15 23:04:16 2007
@@ -337,6 +337,13 @@
if document_url is not None:
return self.getPortalObject().unrestrictedTraverse(document_url)
+ # Try first to return an object listed bv listDAVObjects
+ uid = str(id).split('-')[-1]
+ object = self.getPortalObject().portal_catalog.unrestrictedGetResultValue(uid=uid)
+ if object is not None:
+ return object.getObject()
+
+ # Fallback to default method
if default is _marker:
return BaseTool._getOb(self, id)
else:
@@ -358,19 +365,30 @@
return BaseTool._delOb(self, id)
def listDAVObjects(self):
- """
- Get all docs contributed by the current user
- XXX you can only list them this way, but they're not accessible
- to make it fully usable we should set their id's with module name
- and possibly something nicer to display
- """
- sm = getSecurityManager()
- u = sm.getUser()
- kw = {}
- res = self.portal_catalog(portal_type=self.getPortalDocumentTypeList())
- res = [r.getObject() for r in res]
- res = [o for o in res if u.allowed(o, ('Owner',))] # XXX terrible - needs to use portal_catalog
- return res
+ """
+ Get all contents contributed by the current user. This is
+ delegated to a script in order to help customisation.
+ """
+ method = getattr(self, 'ContributionTool_getMyContentList', None)
+ if method is not None:
+ object_list = method()
+ else:
+ sm = getSecurityManager()
+ user = sm.getUser()
+ object_list = self.portal_catalog(portal_type=self.getPortalMyDocumentTypeList(),
+ owner=str(user))
+
+ def wrapper(o_list):
+ for o in o_list:
+ o = o.getObject()
+ reference = o.getReference()
+ if reference:
+ id = '%s-%s' % (reference, o.getUid())
+ else:
+ id = '%s' % o.getUid()
+ yield o.getObject().asContext(id=id)
+
+ return wrapper(object_list)
InitializeClass(ContributionTool)
Modified: erp5/trunk/products/ERP5Catalog/CatalogTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Catalog/CatalogTool.py?rev=13440&r1=13439&r2=13440&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Catalog/CatalogTool.py (original)
+++ erp5/trunk/products/ERP5Catalog/CatalogTool.py Thu Mar 15 23:04:16 2007
@@ -535,7 +535,20 @@
return result[0].getObject()
except IndexError:
return None
-
+
+ security.declarePrivate('unrestrictedGetResultValue')
+ def unrestrictedGetResultValue(self, query=None, **kw):
+ """
+ A method to factor common code used to search a single
+ object in the database. Same as getResultValue but without
+ taking into account security.
+ """
+ result = self.unrestrictedSearchResults(query=query, **kw)
+ try:
+ return result[0].getObject()
+ except IndexError:
+ return None
+
def countResults(self, query=None, **kw):
"""
Calls ZCatalog.countResults with extra arguments that
More information about the Erp5-report
mailing list