src/pyams_content/features/search/manager.py
changeset 1389 1485db1e2b5e
parent 1269 08b31decc8d7
--- a/src/pyams_content/features/search/manager.py	Wed Jun 24 12:07:40 2020 +0200
+++ b/src/pyams_content/features/search/manager.py	Fri Jun 26 12:54:13 2020 +0200
@@ -16,22 +16,91 @@
 from zope.container.contained import Contained
 from zope.schema.fieldproperty import FieldProperty
 
-from pyams_content.component.links import InternalReferenceMixin
 from pyams_content.features.search.interfaces import ISearchManagerInfo
 from pyams_content.root import ISiteRoot
+from pyams_sequence.reference import get_reference_target
 from pyams_utils.adapter import adapter_config, get_annotation_adapter
 from pyams_utils.factory import factory_config
+from pyams_utils.zodb import volatile_property
+
 
 SEARCH_MANAGER_INFO_KEY = 'pyams_content.search'
 
 
 @factory_config(ISearchManagerInfo)
-class SearchManagerInfo(Persistent, Contained, InternalReferenceMixin):
+class SearchManagerInfo(Persistent, Contained):
     """Search manager persistent info"""
 
+    _reference = FieldProperty(ISearchManagerInfo['reference'])
     name = FieldProperty(ISearchManagerInfo['name'])
     description = FieldProperty(ISearchManagerInfo['description'])
 
+    enable_tags_search = FieldProperty(ISearchManagerInfo['enable_tags_search'])
+    _tags_search_target = FieldProperty(ISearchManagerInfo['tags_search_target'])
+
+    enable_collections_search = FieldProperty(ISearchManagerInfo['enable_collections_search'])
+    _collections_search_target = FieldProperty(ISearchManagerInfo['collections_search_target'])
+
+    # main search target
+
+    @property
+    def reference(self):
+        return self._reference
+
+    @reference.setter
+    def reference(self, value):
+        self._reference = value
+        del self.search_target
+
+    @volatile_property
+    def search_target(self):
+        return get_reference_target(self._reference)
+
+    # tags search target
+
+    @property
+    def tags_search_target(self):
+        return self._tags_search_target
+
+    @tags_search_target.setter
+    def tags_search_target(self, value):
+        self._tags_search_target = value
+        del self.tags_target
+
+    @volatile_property
+    def tags_target(self):
+        if self.enable_tags_search:
+            return get_reference_target(self._tags_search_target)
+        return None
+
+    # collections search target
+
+    @property
+    def collections_search_target(self):
+        return self._collections_search_target
+
+    @collections_search_target.setter
+    def collections_search_target(self, value):
+        self._collections_search_target = value
+        del self.collections_target
+
+    @volatile_property
+    def collections_target(self):
+        if self.enable_collections_search:
+            return get_reference_target(self._collections_search_target)
+        return None
+
+    @property
+    def references(self):
+        return list(filter(lambda x: x is not None, [self.reference,
+                                                     self.tags_search_target,
+                                                     self.collections_search_target]))
+
+    def get_targets(self, state=None):
+        for reference in [self.reference, self.tags_search_target, self.collections_search_target]:
+            if reference is not None:
+                yield get_reference_target(reference, state)
+
 
 @adapter_config(context=ISiteRoot, provides=ISearchManagerInfo)
 def site_root_search_manager_adapter(context):