src/pyams_content/features/search/__init__.py
changeset 1171 41310cefa42a
parent 1167 04429c162338
child 1174 f385d7d24af9
--- a/src/pyams_content/features/search/__init__.py	Fri Dec 14 11:59:12 2018 +0100
+++ b/src/pyams_content/features/search/__init__.py	Fri Dec 14 13:32:54 2018 +0100
@@ -9,11 +9,13 @@
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
 # FOR A PARTICULAR PURPOSE.
 #
+from pyams_content.shared.view.portlet import SEARCH_EXCLUDED_ITEMS
+
 
 __docformat__ = 'restructuredtext'
 
 from hypatia.interfaces import ICatalog
-from hypatia.query import Contains, Or
+from hypatia.query import Contains, Or, NotAny
 from zope.interface import implementer
 from zope.schema.fieldproperty import FieldProperty
 
@@ -89,9 +91,30 @@
         return params
 
 
+@adapter_config(name='exclusions', context=SearchFolderQuery, provides=IViewUserQuery)
+class SearchFolderExclusionsQuery(ContextAdapter):
+    """Search folder exclusions query
+
+    This adapter is looking into request's annotations for items which should be excluded
+    from search.
+    """
+
+    @staticmethod
+    def get_user_params(request):
+        # check for results excluded by previous views
+        if request is not None:
+            excluded_items = request.annotations.get(SEARCH_EXCLUDED_ITEMS)
+            if excluded_items:
+                catalog = get_utility(ICatalog)
+                yield NotAny(catalog['oid'], excluded_items)
+
+
 @adapter_config(name='user_search', context=SearchFolderQuery, provides=IViewUserQuery)
 class SearchFolderUserQuery(ContextAdapter):
-    """Search folder user query"""
+    """Search folder user query
+
+    This adapter is looking for any fulltext search entered by user
+    """
 
     @staticmethod
     def get_user_params(request):