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=path, |
---|
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() |
---|