14 |
14 |
15 from persistent import Persistent |
15 from persistent import Persistent |
16 from zope.container.contained import Contained |
16 from zope.container.contained import Contained |
17 from zope.schema.fieldproperty import FieldProperty |
17 from zope.schema.fieldproperty import FieldProperty |
18 |
18 |
19 from pyams_content.component.links import InternalReferenceMixin |
|
20 from pyams_content.features.search.interfaces import ISearchManagerInfo |
19 from pyams_content.features.search.interfaces import ISearchManagerInfo |
21 from pyams_content.root import ISiteRoot |
20 from pyams_content.root import ISiteRoot |
|
21 from pyams_sequence.reference import get_reference_target |
22 from pyams_utils.adapter import adapter_config, get_annotation_adapter |
22 from pyams_utils.adapter import adapter_config, get_annotation_adapter |
23 from pyams_utils.factory import factory_config |
23 from pyams_utils.factory import factory_config |
|
24 from pyams_utils.zodb import volatile_property |
|
25 |
24 |
26 |
25 SEARCH_MANAGER_INFO_KEY = 'pyams_content.search' |
27 SEARCH_MANAGER_INFO_KEY = 'pyams_content.search' |
26 |
28 |
27 |
29 |
28 @factory_config(ISearchManagerInfo) |
30 @factory_config(ISearchManagerInfo) |
29 class SearchManagerInfo(Persistent, Contained, InternalReferenceMixin): |
31 class SearchManagerInfo(Persistent, Contained): |
30 """Search manager persistent info""" |
32 """Search manager persistent info""" |
31 |
33 |
|
34 _reference = FieldProperty(ISearchManagerInfo['reference']) |
32 name = FieldProperty(ISearchManagerInfo['name']) |
35 name = FieldProperty(ISearchManagerInfo['name']) |
33 description = FieldProperty(ISearchManagerInfo['description']) |
36 description = FieldProperty(ISearchManagerInfo['description']) |
|
37 |
|
38 enable_tags_search = FieldProperty(ISearchManagerInfo['enable_tags_search']) |
|
39 _tags_search_target = FieldProperty(ISearchManagerInfo['tags_search_target']) |
|
40 |
|
41 enable_collections_search = FieldProperty(ISearchManagerInfo['enable_collections_search']) |
|
42 _collections_search_target = FieldProperty(ISearchManagerInfo['collections_search_target']) |
|
43 |
|
44 # main search target |
|
45 |
|
46 @property |
|
47 def reference(self): |
|
48 return self._reference |
|
49 |
|
50 @reference.setter |
|
51 def reference(self, value): |
|
52 self._reference = value |
|
53 del self.search_target |
|
54 |
|
55 @volatile_property |
|
56 def search_target(self): |
|
57 return get_reference_target(self._reference) |
|
58 |
|
59 # tags search target |
|
60 |
|
61 @property |
|
62 def tags_search_target(self): |
|
63 return self._tags_search_target |
|
64 |
|
65 @tags_search_target.setter |
|
66 def tags_search_target(self, value): |
|
67 self._tags_search_target = value |
|
68 del self.tags_target |
|
69 |
|
70 @volatile_property |
|
71 def tags_target(self): |
|
72 if self.enable_tags_search: |
|
73 return get_reference_target(self._tags_search_target) |
|
74 return None |
|
75 |
|
76 # collections search target |
|
77 |
|
78 @property |
|
79 def collections_search_target(self): |
|
80 return self._collections_search_target |
|
81 |
|
82 @collections_search_target.setter |
|
83 def collections_search_target(self, value): |
|
84 self._collections_search_target = value |
|
85 del self.collections_target |
|
86 |
|
87 @volatile_property |
|
88 def collections_target(self): |
|
89 if self.enable_collections_search: |
|
90 return get_reference_target(self._collections_search_target) |
|
91 return None |
|
92 |
|
93 @property |
|
94 def references(self): |
|
95 return list(filter(lambda x: x is not None, [self.reference, |
|
96 self.tags_search_target, |
|
97 self.collections_search_target])) |
|
98 |
|
99 def get_targets(self, state=None): |
|
100 for reference in [self.reference, self.tags_search_target, self.collections_search_target]: |
|
101 if reference is not None: |
|
102 yield get_reference_target(reference, state) |
34 |
103 |
35 |
104 |
36 @adapter_config(context=ISiteRoot, provides=ISearchManagerInfo) |
105 @adapter_config(context=ISiteRoot, provides=ISearchManagerInfo) |
37 def site_root_search_manager_adapter(context): |
106 def site_root_search_manager_adapter(context): |
38 """Site root search manager adapter""" |
107 """Site root search manager adapter""" |