| 1 | import calendar |
|---|
| 2 | from zope import interface, component |
|---|
| 3 | from DateTime import DateTime |
|---|
| 4 | from quintagroup.blog.star.interfaces import IQGBlogEntryRetriever |
|---|
| 5 | from Products.CMFCore.utils import getToolByName |
|---|
| 6 | from OFS.interfaces import IFolder |
|---|
| 7 | from Products.ATContentTypes.interface import IATTopic |
|---|
| 8 | |
|---|
| 9 | class FolderEntryGetter: |
|---|
| 10 | """Gets blog entries in any sort of folder""" |
|---|
| 11 | |
|---|
| 12 | interface.implements(IQGBlogEntryRetriever) |
|---|
| 13 | component.adapts(IFolder) |
|---|
| 14 | |
|---|
| 15 | def __init__(self, context): |
|---|
| 16 | self.context = context |
|---|
| 17 | |
|---|
| 18 | def _base_query(self): |
|---|
| 19 | portal_properties = getToolByName(self.context, 'portal_properties', None) |
|---|
| 20 | site_properties = getattr(portal_properties, 'site_properties', None) |
|---|
| 21 | portal_types = site_properties.getProperty('blog_types', None) |
|---|
| 22 | if portal_types is None: |
|---|
| 23 | portal_types = ('Document', 'News Item', 'File') |
|---|
| 24 | |
|---|
| 25 | path = '/'.join(self.context.getPhysicalPath()) |
|---|
| 26 | |
|---|
| 27 | return dict(path={'query': path, 'depth':1}, |
|---|
| 28 | portal_type=portal_types, |
|---|
| 29 | sort_on='effective', sort_order='reverse') |
|---|
| 30 | |
|---|
| 31 | def get_entries(self, year=None, month=None, **kw): |
|---|
| 32 | catalog = getToolByName(self.context, 'portal_catalog') |
|---|
| 33 | query = self._base_query() |
|---|
| 34 | if year: |
|---|
| 35 | if month: |
|---|
| 36 | lastday = calendar.monthrange(year, month)[1] |
|---|
| 37 | startdate = DateTime(year, month, 1, 0, 0) |
|---|
| 38 | enddate = DateTime(year, month, lastday, 23, 59, 59) |
|---|
| 39 | else: |
|---|
| 40 | startdate = DateTime(year, 1, 1, 0, 0) |
|---|
| 41 | enddate = DateTime(year, 12, 31, 0, 0) |
|---|
| 42 | query['effective'] = dict(query=(startdate, enddate), |
|---|
| 43 | range='minmax') |
|---|
| 44 | query.update(dict([(k,v) for k,v in kw.items() if v])) |
|---|
| 45 | |
|---|
| 46 | return catalog.searchResults(**query) |
|---|
| 47 | |
|---|
| 48 | |
|---|
| 49 | class TopicEntryGetter(FolderEntryGetter): |
|---|
| 50 | """Gets blog entries for collections""" |
|---|
| 51 | |
|---|
| 52 | interface.implements(IQGBlogEntryRetriever) |
|---|
| 53 | component.adapts(IATTopic) |
|---|
| 54 | |
|---|
| 55 | def __init__(self, context): |
|---|
| 56 | self.context = context |
|---|
| 57 | |
|---|
| 58 | def _base_query(self): |
|---|
| 59 | return self.context.buildQuery() |
|---|