src/pyams_content/shared/common/zmi/search.py
changeset 1407 85e615286c7a
parent 1405 a123fc2a6f69
child 1408 916c81459d6b
equal deleted inserted replaced
1406:a568b9d2f7dd 1407:85e615286c7a
    11 #
    11 #
    12 
    12 
    13 from hypatia.catalog import CatalogQuery
    13 from hypatia.catalog import CatalogQuery
    14 from hypatia.interfaces import ICatalog
    14 from hypatia.interfaces import ICatalog
    15 from hypatia.query import Any, Contains, Eq, Ge, Le
    15 from hypatia.query import Any, Contains, Eq, Ge, Le
       
    16 from pyramid.decorator import reify
    16 from pyramid.view import view_config
    17 from pyramid.view import view_config
    17 from z3c.form import field
    18 from z3c.form import field
    18 from z3c.table.interfaces import IValues
    19 from z3c.table.interfaces import IValues
    19 from zope.dublincore.interfaces import IZopeDublinCore
    20 from zope.dublincore.interfaces import IZopeDublinCore
    20 from zope.interface import implementer
    21 from zope.interface import implementer
    29 from pyams_content.shared.common.interfaces import IBaseSharedTool, \
    30 from pyams_content.shared.common.interfaces import IBaseSharedTool, \
    30     SHARED_TOOL_WORKFLOW_STATES_VOCABULARY
    31     SHARED_TOOL_WORKFLOW_STATES_VOCABULARY
    31 from pyams_content.shared.common.interfaces.types import DATA_TYPES_VOCABULARY, ITypedSharedTool
    32 from pyams_content.shared.common.interfaces.types import DATA_TYPES_VOCABULARY, ITypedSharedTool
    32 from pyams_content.shared.common.interfaces.zmi import ISharedToolDashboardTable
    33 from pyams_content.shared.common.interfaces.zmi import ISharedToolDashboardTable
    33 from pyams_content.zmi.interfaces import IAllContentsMenu
    34 from pyams_content.zmi.interfaces import IAllContentsMenu
       
    35 from pyams_form.interfaces.form import ISearchFormFactory, ISearchFormResultsFactory
    34 from pyams_form.search import ISearchFields, SearchForm, SearchResultsView, SearchView
    36 from pyams_form.search import ISearchFields, SearchForm, SearchResultsView, SearchView
    35 from pyams_i18n.interfaces import INegotiator
    37 from pyams_i18n.interfaces import INegotiator
    36 from pyams_pagelet.interfaces import PageletCreatedEvent
    38 from pyams_pagelet.interfaces import PageletCreatedEvent
    37 from pyams_pagelet.pagelet import pagelet_config
    39 from pyams_pagelet.pagelet import pagelet_config
    38 from pyams_security.schema import Principal
    40 from pyams_security.schema import Principal
   218     def __init__(self, context, request):
   220     def __init__(self, context, request):
   219         super(SharedToolAdvancedSearchForm, self).__init__(context, request)
   221         super(SharedToolAdvancedSearchForm, self).__init__(context, request)
   220         request.registry.notify(PageletCreatedEvent(self))
   222         request.registry.notify(PageletCreatedEvent(self))
   221         apply_skin(self.request, 'PyAMS admin skin')
   223         apply_skin(self.request, 'PyAMS admin skin')
   222 
   224 
       
   225     fields_interface = ISharedToolAdvancedSearchFields
       
   226 
   223     @property
   227     @property
   224     def fields(self):
   228     def fields(self):
   225         workflow = IWorkflow(self.context)
   229         workflow = IWorkflow(self.context)
   226         fields = field.Fields(ISharedToolAdvancedSearchFields)
   230         fields = field.Fields(self.fields_interface)
   227         fields['status'].vocabulary = workflow.states
   231         fields['status'].vocabulary = workflow.states
   228         if not ITypedSharedTool.providedBy(self.context):
   232         if not ITypedSharedTool.providedBy(self.context):
   229             fields = fields.omit('data_type')
   233             fields = fields.omit('data_type')
   230         fields['tags'].widgetFactory = ThesaurusTermsTreeFieldWidget
   234         fields['tags'].widgetFactory = ThesaurusTermsTreeFieldWidget
   231         if IThemesManagerTarget.providedBy(self.context):
   235         if IThemesManagerTarget.providedBy(self.context):
   350 
   354 
   351     def __init__(self, context, request):
   355     def __init__(self, context, request):
   352         super(SharedToolAdvancedSearchResultsView, self).__init__(context, request)
   356         super(SharedToolAdvancedSearchResultsView, self).__init__(context, request)
   353         request.registry.notify(PageletCreatedEvent(self))
   357         request.registry.notify(PageletCreatedEvent(self))
   354 
   358 
       
   359     @reify
       
   360     def search_form(self):
       
   361         form = self.request.registry.queryMultiAdapter((self.context, self.request, self),
       
   362                                                        ISearchFormResultsFactory)
       
   363         if form is None:
       
   364             form = self.request.registry.queryMultiAdapter((self.context, self.request, self),
       
   365                                                            ISearchFormFactory)
       
   366         if form is None:
       
   367             form = self.search_form_factory(self.context, self.request)
       
   368         return form
       
   369 
   355     @property
   370     @property
   356     def data_attributes(self):
   371     def data_attributes(self):
   357         attributes = super(SharedToolAdvancedSearchResultsView, self).data_attributes
   372         attributes = super(SharedToolAdvancedSearchResultsView, self).data_attributes
   358         attributes['table'] = {
   373         attributes['table'] = {
   359             'data-ams-datatable-sorting':
   374             'data-ams-datatable-sorting':
   369 class SearchResultsViewValuesAdapter(ContextRequestViewAdapter):
   384 class SearchResultsViewValuesAdapter(ContextRequestViewAdapter):
   370     """Search results view values adapter"""
   385     """Search results view values adapter"""
   371 
   386 
   372     @property
   387     @property
   373     def values(self):
   388     def values(self):
   374         form = self.view.search_form_factory(self.context, self.request)
   389         return self.view.search_form.get_search_results() or ()
   375         return form.get_search_results() or ()