21 from zope.interface import implementer |
21 from zope.interface import implementer |
22 from zope.intid import IIntIds |
22 from zope.intid import IIntIds |
23 from zope.schema import Choice, Datetime, List |
23 from zope.schema import Choice, Datetime, List |
24 |
24 |
25 from pyams_catalog.query import CatalogResultSet |
25 from pyams_catalog.query import CatalogResultSet |
|
26 from pyams_content.component.theme import ICollectionsManager |
26 from pyams_content.component.theme.interfaces import ITagsManager |
27 from pyams_content.component.theme.interfaces import ITagsManager |
27 from pyams_content.profile.interfaces import IAdminProfile |
28 from pyams_content.profile.interfaces import IAdminProfile |
28 from pyams_content.root import ISiteRoot |
29 from pyams_content.root import ISiteRoot |
29 from pyams_content.shared.common import CONTENT_TYPES |
30 from pyams_content.shared.common import CONTENT_TYPES |
30 from pyams_content.shared.common.interfaces import CONTENT_TYPES_VOCABULARY |
31 from pyams_content.shared.common.interfaces import CONTENT_TYPES_VOCABULARY |
175 required=False) |
176 required=False) |
176 |
177 |
177 tags = ThesaurusTermsListField(title=_("Tags"), |
178 tags = ThesaurusTermsListField(title=_("Tags"), |
178 required=False) |
179 required=False) |
179 |
180 |
|
181 collections = ThesaurusTermsListField(title=_("Collections"), |
|
182 required=False) |
|
183 |
180 |
184 |
181 @template_config(template='templates/advanced-search.pt', layer=IPyAMSLayer) |
185 @template_config(template='templates/advanced-search.pt', layer=IPyAMSLayer) |
182 @implementer(IInnerPage) |
186 @implementer(IInnerPage) |
183 class SiteRootAdvancedSearchForm(SearchForm): |
187 class SiteRootAdvancedSearchForm(SearchForm): |
184 """Site root advanced search form""" |
188 """Site root advanced search form""" |
190 request.registry.notify(PageletCreatedEvent(self)) |
194 request.registry.notify(PageletCreatedEvent(self)) |
191 apply_skin(self.request, 'PyAMS admin skin') |
195 apply_skin(self.request, 'PyAMS admin skin') |
192 |
196 |
193 fields = field.Fields(ISiteRootAdvancedSearchFields) |
197 fields = field.Fields(ISiteRootAdvancedSearchFields) |
194 fields['tags'].widgetFactory = ThesaurusTermsTreeFieldWidget |
198 fields['tags'].widgetFactory = ThesaurusTermsTreeFieldWidget |
|
199 fields['collections'].widgetFactory = ThesaurusTermsTreeFieldWidget |
195 ajax_handler = 'advanced-search-results.html' |
200 ajax_handler = 'advanced-search-results.html' |
196 |
201 |
197 def updateWidgets(self, prefix=None): |
202 def updateWidgets(self, prefix=None): |
198 super(SiteRootAdvancedSearchForm, self).updateWidgets(prefix) |
203 super(SiteRootAdvancedSearchForm, self).updateWidgets(prefix) |
199 if 'tags' in self.widgets: |
204 if 'tags' in self.widgets: |
200 widget = self.widgets['tags'] |
205 widget = self.widgets['tags'] |
201 manager = ITagsManager(self.request.root) |
206 manager = ITagsManager(self.request.root) |
|
207 widget.thesaurus_name = manager.thesaurus_name |
|
208 widget.extract_name = manager.extract_name |
|
209 if 'collections' in self.widgets: |
|
210 widget = self.widgets['collections'] |
|
211 manager = ICollectionsManager(self.request.root) |
202 widget.thesaurus_name = manager.thesaurus_name |
212 widget.thesaurus_name = manager.thesaurus_name |
203 widget.extract_name = manager.extract_name |
213 widget.extract_name = manager.extract_name |
204 |
214 |
205 |
215 |
206 @adapter_config(context=(ISiteRoot, IPyAMSLayer, SiteRootAdvancedSearchForm), provides=IContentSearch) |
216 @adapter_config(context=(ISiteRoot, IPyAMSLayer, SiteRootAdvancedSearchForm), provides=IContentSearch) |
221 if query.startswith('+'): |
231 if query.startswith('+'): |
222 params &= Eq(catalog['oid'], sequence.get_full_oid(query)) |
232 params &= Eq(catalog['oid'], sequence.get_full_oid(query)) |
223 else: |
233 else: |
224 query_params = Eq(catalog['oid'], sequence.get_full_oid(query)) |
234 query_params = Eq(catalog['oid'], sequence.get_full_oid(query)) |
225 negotiator = get_utility(INegotiator) |
235 negotiator = get_utility(INegotiator) |
226 for lang in {self.request.registry.settings.get('pyramid.default_locale_name', 'en'), |
236 for lang in {self.request.registry.settings.get('pyramid.default_locale_name', |
|
237 'en'), |
227 self.request.locale_name, |
238 self.request.locale_name, |
228 negotiator.server_language} | negotiator.offered_languages: |
239 negotiator.server_language} | negotiator.offered_languages: |
229 index_name = 'title:{0}'.format(lang) |
240 index_name = 'title:{0}'.format(lang) |
230 if index_name in catalog: |
241 if index_name in catalog: |
231 index = catalog[index_name] |
242 index = catalog[index_name] |
232 if index.check_query(query): |
243 if index.check_query(query): |
233 query_params |= Contains(index, ' and '.join((w+'*' for w in query.split()))) |
244 query_params |= Contains(index, ' and '.join( |
|
245 (w + '*' for w in query.split()))) |
234 params &= query_params |
246 params &= query_params |
235 if data.get('owner'): |
247 if data.get('owner'): |
236 params &= Eq(catalog['role:owner'], data['owner']) |
248 params &= Eq(catalog['role:owner'], data['owner']) |
237 if data.get('created_after'): |
249 if data.get('created_after'): |
238 params &= Ge(catalog['created_date'], data['created_after']) |
250 params &= Ge(catalog['created_date'], data['created_after']) |
243 if data.get('modified_before'): |
255 if data.get('modified_before'): |
244 params &= Le(catalog['modified_date'], data['modified_before']) |
256 params &= Le(catalog['modified_date'], data['modified_before']) |
245 if data.get('tags'): |
257 if data.get('tags'): |
246 tags = [intids.register(term) for term in data['tags']] |
258 tags = [intids.register(term) for term in data['tags']] |
247 params &= Any(catalog['tags'], tags) |
259 params &= Any(catalog['tags'], tags) |
|
260 if data.get('collections'): |
|
261 tags = [intids.register(term) for term in data['collections']] |
|
262 params &= Any(catalog['collections'], tags) |
248 return unique(map(get_last_version, |
263 return unique(map(get_last_version, |
249 CatalogResultSet(CatalogQuery(catalog).query(params, |
264 CatalogResultSet(CatalogQuery(catalog).query(params, |
250 sort_index='modified_date', |
265 sort_index='modified_date', |
251 reverse=True)))) |
266 reverse=True)))) |
252 |
267 |