src/pyams_content/shared/view/__init__.py
changeset 1090 d6d041577ae0
parent 1041 e22f30b4ef3a
child 1121 852aa448da04
--- a/src/pyams_content/shared/view/__init__.py	Wed Nov 14 12:25:30 2018 +0100
+++ b/src/pyams_content/shared/view/__init__.py	Wed Nov 14 17:29:40 2018 +0100
@@ -163,26 +163,33 @@
         # check publication dates
         now = tztime(datetime.utcnow())
         params = Lt(catalog['effective_date'], now)
-        params &= Gt(catalog['push_end_date'], now)
-        # check content types
-        content_types = view.get_content_types(context)
-        if content_types:
-            params &= Any(catalog['content_type'], content_types)
-        # check data types
-        data_types = view.get_data_types(context)
-        if data_types:
-            params &= Any(catalog['data_type'], data_types)
         # check workflow states
         wf_params = None
         for workflow in registry.getAllUtilitiesRegisteredFor(IWorkflow):
             wf_params = or_(wf_params, Any(catalog['workflow_state'], workflow.published_states))
         params &= wf_params
         # check custom extensions
+        do_search = True
         for name, adapter in sorted(registry.getAdapters((view,), IViewQueryParamsExtension),
                                     key=lambda x: x[1].weight):
             new_params = adapter.get_params(context)
+            if isinstance(new_params, tuple):
+                new_params, do_search = new_params
             if new_params:
                 params &= new_params
+            if not do_search:
+                break
+        # activate search
+        if do_search:
+            params &= Gt(catalog['push_end_date'], now)
+            # check content types
+            content_types = view.get_content_types(context)
+            if content_types:
+                params &= Any(catalog['content_type'], content_types)
+            # check data types
+            data_types = view.get_data_types(context)
+            if data_types:
+                params &= Any(catalog['data_type'], data_types)
         return params
 
     def get_results(self, context, sort_index, reverse, limit):