--- 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):