21 from zope.intid.interfaces import IIntIds |
21 from zope.intid.interfaces import IIntIds |
22 from zope.schema import Choice, Datetime |
22 from zope.schema import Choice, Datetime |
23 |
23 |
24 from pyams_catalog.query import CatalogResultSet |
24 from pyams_catalog.query import CatalogResultSet |
25 from pyams_content.component.theme.interfaces import ICollectionsManager, \ |
25 from pyams_content.component.theme.interfaces import ICollectionsManager, \ |
26 ICollectionsManagerTarget, ITagsManager, IThemesManager, IThemesManagerTarget |
26 ITagsManager, IThemesManager, IThemesManagerTarget |
27 from pyams_content.profile.interfaces import IAdminProfile |
27 from pyams_content.profile.interfaces import IAdminProfile |
28 from pyams_content.shared.common import CONTENT_TYPES |
28 from pyams_content.shared.common import CONTENT_TYPES |
29 from pyams_content.shared.common.interfaces import IBaseSharedTool, \ |
29 from pyams_content.shared.common.interfaces import IBaseSharedTool, \ |
30 SHARED_TOOL_WORKFLOW_STATES_VOCABULARY |
30 SHARED_TOOL_WORKFLOW_STATES_VOCABULARY |
31 from pyams_content.shared.common.interfaces.types import DATA_TYPES_VOCABULARY, ITypedSharedTool |
31 from pyams_content.shared.common.interfaces.types import DATA_TYPES_VOCABULARY, ITypedSharedTool |
99 |
99 |
100 @property |
100 @property |
101 def data_attributes(self): |
101 def data_attributes(self): |
102 attributes = super(SharedToolQuickSearchResults, self).data_attributes |
102 attributes = super(SharedToolQuickSearchResults, self).data_attributes |
103 attributes['table'] = { |
103 attributes['table'] = { |
104 'data-ams-datatable-sorting': '{0},{1}'.format(len(self.columns) - 1, self.dt_sort_order), |
104 'data-ams-datatable-sorting': |
105 'data-ams-datatable-display-length': IAdminProfile(self.request.principal).table_page_length |
105 '{0},{1}'.format(len(self.columns) - 1, self.dt_sort_order), |
|
106 'data-ams-datatable-display-length': |
|
107 IAdminProfile(self.request.principal).table_page_length |
106 } |
108 } |
107 return attributes |
109 return attributes |
108 |
110 |
109 |
111 |
110 @adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolQuickSearchResults), provides=IValues) |
112 @adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolQuickSearchResults), |
|
113 provides=IValues) |
111 class SharedToolQuickSearchValues(ContextRequestViewAdapter): |
114 class SharedToolQuickSearchValues(ContextRequestViewAdapter): |
112 """Shared tool quick search results view values adapter""" |
115 """Shared tool quick search results view values adapter""" |
113 |
116 |
114 @property |
117 @property |
115 def values(self): |
118 def values(self): |
124 else: |
127 else: |
125 params = Eq(catalog['parents'], intids.register(self.context)) & \ |
128 params = Eq(catalog['parents'], intids.register(self.context)) & \ |
126 Any(catalog['content_type'], CONTENT_TYPES.keys()) |
129 Any(catalog['content_type'], CONTENT_TYPES.keys()) |
127 query_params = Eq(catalog['oid'], sequence.get_full_oid(query)) |
130 query_params = Eq(catalog['oid'], sequence.get_full_oid(query)) |
128 negotiator = get_utility(INegotiator) |
131 negotiator = get_utility(INegotiator) |
129 for lang in {self.request.registry.settings.get('pyramid.default_locale_name', 'en'), |
132 for lang in {self.request.registry.settings.get('pyramid.default_locale_name', |
|
133 'en'), |
130 self.request.locale_name, |
134 self.request.locale_name, |
131 negotiator.server_language} | negotiator.offered_languages: |
135 negotiator.server_language} | negotiator.offered_languages: |
132 index_name = 'title:{0}'.format(lang) |
136 index_name = 'title:{0}'.format(lang) |
133 if index_name in catalog: |
137 if index_name in catalog: |
134 index = catalog[index_name] |
138 index = catalog[index_name] |
135 if index.check_query(query): |
139 if index.check_query(query): |
136 query_params |= Contains(index, ' and '.join((w+'*' for w in query.split()))) |
140 query_params |= Contains(index, |
|
141 ' and '.join((w+'*' for w in query.split()))) |
137 params &= query_params |
142 params &= query_params |
138 return unique(map(get_last_version, |
143 return unique(map(get_last_version, |
139 CatalogResultSet(CatalogQuery(catalog).query(params, |
144 CatalogResultSet(CatalogQuery(catalog).query( |
140 sort_index='modified_date', |
145 params, sort_index='modified_date', reverse=True)))) |
141 reverse=True)))) |
|
142 else: |
146 else: |
143 return () |
147 return () |
144 |
148 |
145 |
149 |
146 # |
150 # |
248 manager = ICollectionsManager(self.request.root) |
252 manager = ICollectionsManager(self.request.root) |
249 widget.thesaurus_name = manager.thesaurus_name |
253 widget.thesaurus_name = manager.thesaurus_name |
250 widget.extract_name = manager.extract_name |
254 widget.extract_name = manager.extract_name |
251 |
255 |
252 |
256 |
253 @adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolAdvancedSearchForm), provides=IContentSearch) |
257 @adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolAdvancedSearchForm), |
|
258 provides=IContentSearch) |
254 class SharedToolAdvancedSearchFormSearchAdapter(ContextRequestViewAdapter): |
259 class SharedToolAdvancedSearchFormSearchAdapter(ContextRequestViewAdapter): |
255 """Shared tool adavanced search form search adapter""" |
260 """Shared tool adavanced search form search adapter""" |
256 |
261 |
257 def get_search_results(self, data): |
262 def get_search_results(self, data): |
258 intids = get_utility(IIntIds) |
263 intids = get_utility(IIntIds) |
265 if query.startswith('+'): |
270 if query.startswith('+'): |
266 params &= Eq(catalog['oid'], sequence.get_full_oid(query)) |
271 params &= Eq(catalog['oid'], sequence.get_full_oid(query)) |
267 else: |
272 else: |
268 query_params = Eq(catalog['oid'], sequence.get_full_oid(query)) |
273 query_params = Eq(catalog['oid'], sequence.get_full_oid(query)) |
269 negotiator = get_utility(INegotiator) |
274 negotiator = get_utility(INegotiator) |
270 for lang in {self.request.registry.settings.get('pyramid.default_locale_name', 'en'), |
275 for lang in {self.request.registry.settings.get('pyramid.default_locale_name', |
|
276 'en'), |
271 self.request.locale_name, |
277 self.request.locale_name, |
272 negotiator.server_language} | negotiator.offered_languages: |
278 negotiator.server_language} | negotiator.offered_languages: |
273 index_name = 'title:{0}'.format(lang) |
279 index_name = 'title:{0}'.format(lang) |
274 if index_name in catalog: |
280 if index_name in catalog: |
275 index = catalog[index_name] |
281 index = catalog[index_name] |
276 if index.check_query(query): |
282 if index.check_query(query): |
277 query_params |= Contains(index, ' and '.join((w+'*' for w in query.split()))) |
283 query_params |= Contains(index, |
|
284 ' and '.join((w+'*' for w in query.split()))) |
278 params &= query_params |
285 params &= query_params |
279 if data.get('owner'): |
286 if data.get('owner'): |
280 params &= Eq(catalog['role:owner'], data['owner']) |
287 params &= Eq(catalog['role:owner'], data['owner']) |
281 if data.get('status'): |
288 if data.get('status'): |
282 params &= Eq(catalog['workflow_state'], data['status']) |
289 params &= Eq(catalog['workflow_state'], data['status']) |
300 tags = [intids.register(term) for term in data['collections']] |
307 tags = [intids.register(term) for term in data['collections']] |
301 params &= Any(catalog['collections'], tags) |
308 params &= Any(catalog['collections'], tags) |
302 if data.get('status'): |
309 if data.get('status'): |
303 return unique(map(lambda x: sorted(IWorkflowVersions(x).get_versions(data['status']), |
310 return unique(map(lambda x: sorted(IWorkflowVersions(x).get_versions(data['status']), |
304 key=lambda y: IZopeDublinCore(y).modified)[0], |
311 key=lambda y: IZopeDublinCore(y).modified)[0], |
305 CatalogResultSet(CatalogQuery(catalog).query(params, |
312 CatalogResultSet(CatalogQuery(catalog).query( |
306 sort_index='modified_date', |
313 params, sort_index='modified_date', reverse=True)))) |
307 reverse=True)))) |
|
308 else: |
314 else: |
309 return unique(map(get_last_version, |
315 return unique(map(get_last_version, |
310 CatalogResultSet(CatalogQuery(catalog).query(params, |
316 CatalogResultSet(CatalogQuery(catalog).query( |
311 sort_index='modified_date', |
317 params, sort_index='modified_date', reverse=True)))) |
312 reverse=True)))) |
|
313 |
318 |
314 |
319 |
315 @pagelet_config(name='advanced-search.html', context=IBaseSharedTool, layer=IPyAMSLayer, |
320 @pagelet_config(name='advanced-search.html', context=IBaseSharedTool, layer=IPyAMSLayer, |
316 permission=VIEW_SYSTEM_PERMISSION) |
321 permission=VIEW_SYSTEM_PERMISSION) |
317 class SharedToolAdvancedSearchView(SearchView): |
322 class SharedToolAdvancedSearchView(SearchView): |
318 """Shared tool advanced search view""" |
323 """Shared tool advanced search view""" |
319 |
324 |
320 search_form_factory = SharedToolAdvancedSearchForm |
325 search_form_factory = SharedToolAdvancedSearchForm |
321 |
326 |
322 |
327 |
323 @adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolAdvancedSearchView), provides=IPageHeader) |
328 @adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolAdvancedSearchView), |
|
329 provides=IPageHeader) |
324 class SharedToolAdvancedSearchHeaderAdapter(DefaultPageHeaderAdapter): |
330 class SharedToolAdvancedSearchHeaderAdapter(DefaultPageHeaderAdapter): |
325 """Shared tool advanced search header adapter""" |
331 """Shared tool advanced search header adapter""" |
326 |
332 |
327 back_url = '#dashboard.html' |
333 back_url = '#dashboard.html' |
328 back_target = None |
334 back_target = None |
329 |
335 |
330 icon_class = 'fa fa-fw fa-search' |
336 icon_class = 'fa fa-fw fa-search' |
331 |
337 |
332 |
338 |
333 @view_config(name='advanced-search-results.html', context=IBaseSharedTool, request_type=IPyAMSLayer, |
339 @view_config(name='advanced-search-results.html', context=IBaseSharedTool, |
334 permission=VIEW_SYSTEM_PERMISSION) |
340 request_type=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION) |
335 @implementer(ISharedToolDashboardTable) |
341 @implementer(ISharedToolDashboardTable) |
336 class SharedToolAdvancedSearchResultsView(AdminView, SearchResultsView): |
342 class SharedToolAdvancedSearchResultsView(AdminView, SearchResultsView): |
337 """Shared tool advanced search results view""" |
343 """Shared tool advanced search results view""" |
338 |
344 |
339 title = _("Advanced search results") |
345 title = _("Advanced search results") |
348 |
354 |
349 @property |
355 @property |
350 def data_attributes(self): |
356 def data_attributes(self): |
351 attributes = super(SharedToolAdvancedSearchResultsView, self).data_attributes |
357 attributes = super(SharedToolAdvancedSearchResultsView, self).data_attributes |
352 attributes['table'] = { |
358 attributes['table'] = { |
353 'data-ams-datatable-sorting': "{0},{1}".format(len(self.columns) - 1, self.dt_sort_order), |
359 'data-ams-datatable-sorting': |
354 'data-ams-datatable-display-length': IAdminProfile(self.request.principal).table_page_length |
360 "{0},{1}".format(len(self.columns) - 1, self.dt_sort_order), |
|
361 'data-ams-datatable-display-length': |
|
362 IAdminProfile(self.request.principal).table_page_length |
355 } |
363 } |
356 return attributes |
364 return attributes |
357 |
365 |
358 |
366 |
359 @adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolAdvancedSearchResultsView), provides=IValues) |
367 @adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolAdvancedSearchResultsView), |
|
368 provides=IValues) |
360 class SearchResultsViewValuesAdapter(ContextRequestViewAdapter): |
369 class SearchResultsViewValuesAdapter(ContextRequestViewAdapter): |
361 """Search results view values adapter""" |
370 """Search results view values adapter""" |
362 |
371 |
363 @property |
372 @property |
364 def values(self): |
373 def values(self): |