--- a/src/pyams_content/shared/common/zmi/search.py Tue Aug 28 16:19:33 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/search.py Tue Aug 28 17:24:59 2018 +0200
@@ -17,6 +17,8 @@
# import interfaces
from hypatia.interfaces import ICatalog
+from pyams_content.component.theme.interfaces import ITagsManager, IThemesManagerTarget, IThemesManager, \
+ ICollectionsManagerTarget, ICollectionsManager
from pyams_content.profile.interfaces import IAdminProfile
from pyams_content.shared.common.interfaces import IBaseSharedTool
from pyams_content.shared.common.interfaces.zmi import ISharedToolDashboardTable
@@ -46,6 +48,8 @@
from pyams_skin.table import BaseTable
from pyams_skin.viewlet.menu import MenuItem
from pyams_template.template import template_config
+from pyams_thesaurus.schema import ThesaurusTermsListField
+from pyams_thesaurus.zmi.widget import ThesaurusTermsTreeFieldWidget
from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
from pyams_utils.list import unique
from pyams_utils.registry import get_utility
@@ -182,6 +186,15 @@
modified_before = Datetime(title=_("Modified before..."),
required=False)
+ tags = ThesaurusTermsListField(title=_("Tags"),
+ required=False)
+
+ themes = ThesaurusTermsListField(title=_("Themes"),
+ required=False)
+
+ collections = ThesaurusTermsListField(title=_("Collections"),
+ required=False)
+
@template_config(template='templates/advanced-search.pt', layer=IPyAMSLayer)
@implementer(IInnerPage)
@@ -202,8 +215,35 @@
workflow = IWorkflow(self.context)
fields = field.Fields(ISharedToolAdvancedSearchFields)
fields['status'].vocabulary = workflow.states
+ fields['tags'].widgetFactory = ThesaurusTermsTreeFieldWidget
+ if IThemesManagerTarget.providedBy(self.context):
+ fields['themes'].widgetFactory = ThesaurusTermsTreeFieldWidget
+ else:
+ fields = fields.omit('themes')
+ if ICollectionsManagerTarget.providedBy(self.context):
+ fields['collections'].widgetFactory = ThesaurusTermsTreeFieldWidget
+ else:
+ fields = fields.omit('collections')
return fields
+ def updateWidgets(self, prefix=None):
+ super(SharedToolAdvancedSearchForm, self).updateWidgets(prefix)
+ if 'tags' in self.widgets:
+ widget = self.widgets['tags']
+ manager = ITagsManager(self.request.root)
+ widget.thesaurus_name = manager.thesaurus_name
+ widget.extract_name = manager.extract_name
+ if 'themes' in self.widgets:
+ widget = self.widgets['themes']
+ manager = IThemesManager(self.context)
+ widget.thesaurus_name = manager.thesaurus_name
+ widget.extract_name = manager.extract_name
+ if 'collections' in self.widgets:
+ widget = self.widgets['collections']
+ manager = ICollectionsManager(self.context)
+ widget.thesaurus_name = manager.thesaurus_name
+ widget.extract_name = manager.extract_name
+
@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolAdvancedSearchForm), provides=IContentSearch)
class SharedToolAdvancedSearchFormSearchAdapter(ContextRequestViewAdapter):
@@ -243,6 +283,15 @@
params &= Ge(catalog['modified_date'], data['modified_after'])
if data.get('modified_before'):
params &= Le(catalog['modified_date'], data['modified_before'])
+ if data.get('tags'):
+ tags = [intids.register(term) for term in data['tags']]
+ params &= Any(catalog['tags'], tags)
+ if data.get('themes'):
+ tags = [intids.register(term) for term in data['themes']]
+ params &= Any(catalog['themes'], tags)
+ if data.get('collections'):
+ tags = [intids.register(term) for term in data['collections']]
+ params &= Any(catalog['collections'], tags)
if data.get('status'):
return unique(map(lambda x: sorted(IWorkflowVersions(x).get_versions(data['status']),
key=lambda y: IZopeDublinCore(y).modified)[0],