[Erp5-report] r13433 - /erp5/trunk/products/CMFCategory/CategoryTool.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Mar 15 17:22:55 CET 2007


Author: romain
Date: Thu Mar 15 17:22:48 2007
New Revision: 13433

URL: http://svn.erp5.org?rev=13433&view=rev
Log:
Add a query parameter to getRelatedValueList.
Use Query class from ZSQLCatalog.

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=13433&r1=13432&r2=13433&view=diff
==============================================================================
--- erp5/trunk/products/CMFCategory/CategoryTool.py (original)
+++ erp5/trunk/products/CMFCategory/CategoryTool.py Thu Mar 15 17:22:48 2007
@@ -42,6 +42,7 @@
 from Products.CMFCore.PortalFolder import ContentFilter
 from Products.CMFCategory.Renderer import Renderer
 from OFS.Traversable import NotFound
+from Products.ZSQLCatalog.SQLCatalog import Query, ComplexQuery
 
 import re
 
@@ -1268,7 +1269,8 @@
     security.declareProtected( Permissions.AccessContentsInformation,
                                'getRelatedValueList' )
     def getRelatedValueList(self, context, base_category_list=None,
-                           spec=(), filter=None, base=1, **kw):
+                            spec=(), filter=None, base=1, 
+                            query=None, **kw):
       """
         This methods returns the list of objects related to the context
         with the given base_category_list.
@@ -1278,7 +1280,9 @@
 
       if isinstance(portal_type, str):
         portal_type = [portal_type]
-      if spec is (): spec = None # We do not want to care about spec
+      if spec is (): 
+        # We do not want to care about spec
+        spec = None
 
       # Base Category may not be related, besides sub categories
       if context.getPortalType() == 'Base Category':
@@ -1292,10 +1296,22 @@
         for base_category in base_category_list:
           category_list.append("%s/%s" % (base_category, context.getRelativeUrl()))
 
+      if portal_type is not None:
+        portal_type_query = Query(portal_type=portal_type)
+        if query is None:
+          query = portal_type_query
+        else:
+          query = ComplexQuery(query, portal_type_query, operator='AND')
+
+      # XXX Is Base_zSearchRelatedObjectsByCategoryList still usefull ?
+      # It may possible to call portal catalog directly
+      # Base_zSearchRelatedObjectsByCategoryList add a dependency to ERP5
+      query = self.portal_catalog.buildSQLQuery(query=query)
       brain_result = self.Base_zSearchRelatedObjectsByCategoryList(
-                           category_list = category_list,
-                           portal_type = portal_type,
-                           strict_membership = strict_membership )
+                           category_list=category_list,
+                           strict_membership=strict_membership,
+                           where_expression=query['where_expression'],
+                           order_by_expression=query['order_by_expression'],)
 
       result = []
       for b in brain_result:
@@ -1311,15 +1327,17 @@
     security.declareProtected( Permissions.AccessContentsInformation,
                                'getRelatedPropertyList' )
     def getRelatedPropertyList(self, context, base_category_list=None,
-                          property_name=None, spec=(), filter=None, base=1, **kw):
+                               property_name=None, spec=(), 
+                               filter=None, base=1, query=None, **kw):
       """
         This methods returns the list of property_name on  objects
         related to the context with the given base_category_list.
       """
       result = []
-      for o in self.getRelatedValueList(context=context,
+      for o in self.getRelatedValueList(
+                          context=context,
                           base_category_list=base_category_list, spec=spec,
-                          filter=filter, base=base, **kw) :
+                          filter=filter, base=base, query=query, **kw):
         result.append(o.getProperty(property_name, None))
       return result
 




More information about the Erp5-report mailing list