src/pyams_content/root/zmi/search.py
changeset 1112 6f9d0e77f4ce
parent 1070 ea0c7ac589c4
child 1123 6f299ad6e72f
equal deleted inserted replaced
1111:e937fd3c40c2 1112:6f9d0e77f4ce
    10 # FOR A PARTICULAR PURPOSE.
    10 # FOR A PARTICULAR PURPOSE.
    11 #
    11 #
    12 
    12 
    13 __docformat__ = 'restructuredtext'
    13 __docformat__ = 'restructuredtext'
    14 
    14 
    15 
    15 from hypatia.catalog import CatalogQuery
    16 # import standard library
       
    17 
       
    18 # import interfaces
       
    19 from hypatia.interfaces import ICatalog
    16 from hypatia.interfaces import ICatalog
       
    17 from hypatia.query import Any, Contains, Eq, Ge, Le
       
    18 from pyramid.view import view_config
       
    19 from z3c.form import field
       
    20 from z3c.table.interfaces import IValues
       
    21 from zope.interface import implementer
       
    22 from zope.intid import IIntIds
       
    23 from zope.schema import Choice, Datetime, List
       
    24 
       
    25 from pyams_catalog.query import CatalogResultSet
    20 from pyams_content.component.theme.interfaces import ITagsManager
    26 from pyams_content.component.theme.interfaces import ITagsManager
    21 from pyams_content.profile.interfaces import IAdminProfile
    27 from pyams_content.profile.interfaces import IAdminProfile
    22 from pyams_content.root import ISiteRoot
    28 from pyams_content.root import ISiteRoot
       
    29 from pyams_content.shared.common import CONTENT_TYPES
    23 from pyams_content.shared.common.interfaces import CONTENT_TYPES_VOCABULARY
    30 from pyams_content.shared.common.interfaces import CONTENT_TYPES_VOCABULARY
    24 from pyams_content.shared.common.interfaces.zmi import ISiteRootDashboardTable
    31 from pyams_content.shared.common.interfaces.zmi import ISiteRootDashboardTable
    25 from pyams_content.zmi.interfaces import IAllContentsMenu
    32 from pyams_content.zmi.interfaces import IAllContentsMenu
    26 from pyams_form.search import ISearchFields, SearchForm, SearchView, SearchResultsView
    33 from pyams_form.search import ISearchFields, SearchForm, SearchResultsView, SearchView
    27 from pyams_i18n.interfaces import INegotiator
    34 from pyams_i18n.interfaces import INegotiator
    28 from pyams_sequence.interfaces import ISequentialIntIds
       
    29 from pyams_skin.interfaces import IInnerPage, IContentSearch, IPageHeader
       
    30 from pyams_skin.layer import IPyAMSLayer
       
    31 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
       
    32 from pyams_workflow.interfaces import IWorkflowVersions
       
    33 from pyams_zmi.layer import IAdminLayer
       
    34 from z3c.table.interfaces import IValues
       
    35 from zope.intid import IIntIds
       
    36 
       
    37 # import packages
       
    38 from hypatia.catalog import CatalogQuery
       
    39 from hypatia.query import Eq, Any, Contains, Ge, Le
       
    40 from pyams_catalog.query import CatalogResultSet
       
    41 from pyams_content.shared.common import CONTENT_TYPES
       
    42 from pyams_pagelet.interfaces import PageletCreatedEvent
    35 from pyams_pagelet.interfaces import PageletCreatedEvent
    43 from pyams_pagelet.pagelet import pagelet_config
    36 from pyams_pagelet.pagelet import pagelet_config
    44 from pyams_security.schema import Principal
    37 from pyams_security.schema import Principal
       
    38 from pyams_sequence.interfaces import ISequentialIntIds
       
    39 from pyams_sequence.reference import get_last_version
       
    40 from pyams_skin.interfaces import IContentSearch, IInnerPage, IPageHeader
       
    41 from pyams_skin.layer import IPyAMSLayer
    45 from pyams_skin.page import DefaultPageHeaderAdapter
    42 from pyams_skin.page import DefaultPageHeaderAdapter
    46 from pyams_skin.skin import apply_skin
    43 from pyams_skin.skin import apply_skin
    47 from pyams_skin.table import BaseTable
    44 from pyams_skin.table import BaseTable
    48 from pyams_skin.viewlet.menu import MenuItem
    45 from pyams_skin.viewlet.menu import MenuItem
    49 from pyams_template.template import template_config
    46 from pyams_template.template import template_config
    50 from pyams_thesaurus.schema import ThesaurusTermsListField
    47 from pyams_thesaurus.schema import ThesaurusTermsListField
    51 from pyams_thesaurus.zmi.widget import ThesaurusTermsTreeFieldWidget
    48 from pyams_thesaurus.zmi.widget import ThesaurusTermsTreeFieldWidget
    52 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
    49 from pyams_utils.adapter import ContextRequestViewAdapter, adapter_config
       
    50 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
    53 from pyams_utils.list import unique
    51 from pyams_utils.list import unique
    54 from pyams_utils.registry import get_utility
    52 from pyams_utils.registry import get_utility
    55 from pyams_utils.url import absolute_url
    53 from pyams_utils.url import absolute_url
    56 from pyams_viewlet.viewlet import viewlet_config
    54 from pyams_viewlet.viewlet import viewlet_config
       
    55 from pyams_zmi.layer import IAdminLayer
    57 from pyams_zmi.view import AdminView
    56 from pyams_zmi.view import AdminView
    58 from pyramid.view import view_config
       
    59 from z3c.form import field
       
    60 from zope.interface import implementer
       
    61 from zope.schema import Datetime, Choice, List
       
    62 
    57 
    63 from pyams_content import _
    58 from pyams_content import _
    64 
    59 
    65 
    60 
    66 #
    61 #
   132                     if index_name in catalog:
   127                     if index_name in catalog:
   133                         index = catalog[index_name]
   128                         index = catalog[index_name]
   134                         if index.check_query(query):
   129                         if index.check_query(query):
   135                             query_params |= Contains(index, ' and '.join((w+'*' for w in query.split())))
   130                             query_params |= Contains(index, ' and '.join((w+'*' for w in query.split())))
   136                 params &= query_params
   131                 params &= query_params
   137         return unique(map(lambda x: IWorkflowVersions(x).get_last_versions()[0],
   132         return unique(map(get_last_version,
   138                           CatalogResultSet(CatalogQuery(catalog).query(params,
   133                           CatalogResultSet(CatalogQuery(catalog).query(params,
   139                                                                        sort_index='modified_date',
   134                                                                        sort_index='modified_date',
   140                                                                        reverse=True))))
   135                                                                        reverse=True))))
   141 
   136 
   142 
   137 
   245         if data.get('modified_before'):
   240         if data.get('modified_before'):
   246             params &= Le(catalog['modified_date'], data['modified_before'])
   241             params &= Le(catalog['modified_date'], data['modified_before'])
   247         if data.get('tags'):
   242         if data.get('tags'):
   248             tags = [intids.register(term) for term in data['tags']]
   243             tags = [intids.register(term) for term in data['tags']]
   249             params &= Any(catalog['tags'], tags)
   244             params &= Any(catalog['tags'], tags)
   250         return unique(map(lambda x: IWorkflowVersions(x).get_last_versions()[0],
   245         return unique(map(get_last_version,
   251                           CatalogResultSet(CatalogQuery(catalog).query(params,
   246                           CatalogResultSet(CatalogQuery(catalog).query(params,
   252                                                                        sort_index='modified_date',
   247                                                                        sort_index='modified_date',
   253                                                                        reverse=True))))
   248                                                                        reverse=True))))
   254 
   249 
   255 
   250