[Erp5-report] r16542 - /erp5/trunk/products/CMFCategory/CategoryTool.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Fri Sep 21 16:12:23 CEST 2007
Author: romain
Date: Fri Sep 21 16:12:23 2007
New Revision: 16542
URL: http://svn.erp5.org?rev=16542&view=rev
Log:
Fix getSingleCategoryMembershipList in order to handle checked_permission
parameter.
Modified:
erp5/trunk/products/CMFCategory/CategoryTool.py
Modified: erp5/trunk/products/CMFCategory/CategoryTool.py
URL: http://svn.erp5.org/erp5/trunk/products/CMFCategory/CategoryTool.py?rev=16542&r1=16541&r2=16542&view=diff
==============================================================================
--- erp5/trunk/products/CMFCategory/CategoryTool.py (original)
+++ erp5/trunk/products/CMFCategory/CategoryTool.py Fri Sep 21 16:12:23 2007
@@ -678,7 +678,9 @@
security.declareProtected( Permissions.AccessContentsInformation, 'setDefaultCategoryMembership' )
def setDefaultCategoryMembership(self, context, base_category, default_category,
- spec=(), filter=None, portal_type=(), base=0 ):
+ spec=(), filter=None,
+ portal_type=(), base=0,
+ checked_permission=None ):
"""
Sets the membership of the context on the specified base_category
list and for the specified portal_type spec
@@ -711,10 +713,11 @@
self.setCategoryMembership(context, base_category, new_category_list,
spec=spec, filter=filter, portal_type=portal_type, base=base, keep_default = 0)
- security.declareProtected( Permissions.AccessContentsInformation,
- 'getSingleCategoryMembershipList' )
+ security.declareProtected(Permissions.AccessContentsInformation,
+ 'getSingleCategoryMembershipList')
def getSingleCategoryMembershipList(self, context, base_category, base=0,
- spec=(), filter=None, checked_permission=None, **kw):
+ spec=(), filter=None,
+ checked_permission=None, **kw):
"""
Returns the local membership of the context for a single base category
represented as a list of relative URLs
@@ -727,47 +730,51 @@
base -- if set to 1, returns relative URLs to portal_categories
if set to 0, returns relative URLs to the base category
+
+ checked_permission -- a string which defined the permission
+ to filter the object on
"""
# XXX We must use filters in the future
# where_expression = self._buildQuery(spec, filter, kw)
- portal_type = kw.get('portal_type', ())
- if spec is (): spec = portal_type
+ if spec is ():
+ spec = kw.get('portal_type', ())
# Build the ckecked_permission filter
- if checked_permission is None:
- permissionFilter = lambda x: x
- else:
- def permissionFilter(category_list):
- filtered_category_list = []
- checkPermission = self.portal_membership.checkPermission
- for category in category_list:
- object = self.unrestrictedTraverse(category)
- if object is not None and checkPermission(checked_permission, object):
- filtered_category_list.append(category)
- return filtered_category_list
+ if checked_permission is not None:
+ checkPermission = self.portal_membership.checkPermission
+ def permissionFilter(category):
+ object = self.unrestrictedTraverse(category)
+ if object is not None and checkPermission(checked_permission, object):
+ return category
+ else:
+ return None
+
# We must treat parent in a different way
#LOG('getSingleCategoryMembershipList', 0, 'base_category = %s, spec = %s, base = %s, context = %s, context.aq_inner.aq_parent = %s' % (repr(base_category), repr(spec), repr(base), repr(context), repr(context.aq_inner.aq_parent)))
if base_category == 'parent':
parent = context.aq_inner.aq_parent # aq_inner is required to make sure we use containment
if parent.portal_type in spec:
- if base:
- return permissionFilter(['parent/' + parent.getRelativeUrl()])
- else:
- return permissionFilter([parent.getRelativeUrl()])
+ parent_relative_url = parent.getRelativeUrl()
+ if (checked_permission is None) or \
+ (permissionFilter(parent_relative_url) is not None):
+ if base:
+ return 'parent/%s' % parent_relative_url
+ else:
+ return parent_relative_url
#LOG('getSingleCategoryMembershipList', 0, 'not in spec: parent.portal_type = %s, spec = %s' % (repr(parent.portal_type), repr(spec)))
return []
+ # XXX We must use filters in the future
+ # where_expression = self._buildQuery(spec, filter, kw)
result = []
append = result.append
- # XXX We must use filters in the future
- # where_expression = self._buildQuery(spec, filter, kw)
- spec = kw.get('portal_type', ())
# Make sure spec is a list or tuple
if isinstance(spec, str):
spec = [spec]
# Filter categories
if getattr(aq_base(context), 'categories', _marker) is not _marker:
+
for category_url in self._getCategoryList(context):
try:
index = category_url.index('/')
@@ -777,20 +784,22 @@
if my_base_category == base_category:
#LOG("getSingleCategoryMembershipList",0,"%s %s %s %s" % (context.getRelativeUrl(),
# my_base_category, base_category, category_url))
- if spec is ():
- if base:
- append(category_url)
+ if (checked_permission is None) or \
+ (permissionFilter(category_url) is not None):
+ if spec is ():
+ if base:
+ append(category_url)
+ else:
+ append(category_url[len(my_base_category)+1:])
else:
- append(category_url[len(my_base_category)+1:])
- else:
- my_reference = self.unrestrictedTraverse(category_url, None)
- if my_reference is not None:
- if my_reference.portal_type in spec:
- if base:
- append(category_url)
- else:
- append(category_url[len(my_base_category)+1:])
- return permissionFilter(result)
+ my_reference = self.unrestrictedTraverse(category_url, None)
+ if my_reference is not None:
+ if my_reference.portal_type in spec:
+ if base:
+ append(category_url)
+ else:
+ append(category_url[len(my_base_category)+1:])
+ return result
security.declareProtected( Permissions.AccessContentsInformation,
'getSingleCategoryAcquiredMembershipList' )
More information about the Erp5-report
mailing list