source: products/quintagroup.blog.star/trunk/quintagroup/blog/star/adapters.py @ 2656

Last change on this file since 2656 was 2656, checked in by chervol, 14 years ago

#27: Force blog_view accept additional query parameters

  • Property svn:eol-style set to native
File size: 2.2 KB
Line 
1import calendar
2from zope import interface, component
3from DateTime import DateTime
4from quintagroup.blog.star.interfaces import IQGBlogEntryRetriever
5from Products.CMFCore.utils import getToolByName
6from OFS.interfaces import IFolder
7from Products.ATContentTypes.interface import IATTopic
8
9class 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        #import pdb;pdb.set_trace()
45        query.update(dict([(k,v) for k,v in kw.items() if v]))
46
47        return catalog.searchResults(**query)
48
49   
50class TopicEntryGetter(FolderEntryGetter):
51    """Gets blog entries for collections"""
52   
53    interface.implements(IQGBlogEntryRetriever)
54    component.adapts(IATTopic)
55   
56    def __init__(self, context):
57        self.context = context
58       
59    def _base_query(self):
60        return self.context.buildQuery()
Note: See TracBrowser for help on using the repository browser.