1 | from Products.Five import BrowserView |
---|
2 | from Products.CMFCore.utils import getToolByName |
---|
3 | from Products.CMFPlone.PloneBatch import Batch |
---|
4 | from quintagroup.blog.star.interfaces import IQGBlogEntryRetriever |
---|
5 | try: |
---|
6 | from plone.app.discussion.interfaces import IConversation |
---|
7 | USE_PAD = True |
---|
8 | except ImportError: |
---|
9 | USE_PAD = False |
---|
10 | |
---|
11 | class BlogView(BrowserView): |
---|
12 | """ |
---|
13 | Blog view |
---|
14 | """ |
---|
15 | |
---|
16 | def __init__(self, context, request): |
---|
17 | self.context = context |
---|
18 | self.request = request |
---|
19 | self.portal_discussion = getToolByName(self.context, 'portal_discussion') |
---|
20 | |
---|
21 | def blogitems(self): |
---|
22 | """List all blog items as brains""" |
---|
23 | # XXX Could perhaps be cached? |
---|
24 | year = int(self.request.form.get('year',0)) |
---|
25 | month = int(self.request.form.get('month',0)) |
---|
26 | subject = list(self.request.form.get('Subject','')) |
---|
27 | return IQGBlogEntryRetriever(self.context).get_entries( |
---|
28 | year=year, month=month, Subject=subject) |
---|
29 | |
---|
30 | def batch(self): |
---|
31 | portal_properties = getToolByName(self.context, 'portal_properties') |
---|
32 | site_properties = getattr(portal_properties, 'site_properties') |
---|
33 | b_size = site_properties.getProperty('blog_view_items', 10) |
---|
34 | b_start = self.request.form.get('b_start', 0) |
---|
35 | return Batch(self.blogitems(), b_size, b_start, orphan=2) |
---|
36 | |
---|
37 | def commentsEnabled(self, ob): |
---|
38 | if USE_PAD: |
---|
39 | conversation = IConversation(ob) |
---|
40 | return conversation.enabled() |
---|
41 | else: |
---|
42 | return self.portal_discussion.isDiscussionAllowedFor(ob) |
---|
43 | |
---|
44 | def commentCount(self, ob): |
---|
45 | if USE_PAD: |
---|
46 | conversation = IConversation(ob) |
---|
47 | return len(conversation) |
---|
48 | else: |
---|
49 | discussion = self.portal_discussion.getDiscussionFor(ob) |
---|
50 | return discussion.replyCount(ob) |
---|
51 | |
---|
52 | def item_url(self, item): |
---|
53 | portal_properties = getToolByName(self.context, 'portal_properties') |
---|
54 | site_properties = getattr(portal_properties, 'site_properties') |
---|
55 | use_view = site_properties.getProperty('typesUseViewActionInListings') |
---|
56 | url = item.getURL() |
---|
57 | if item.portal_type in use_view: |
---|
58 | return '%s/view' % url |
---|
59 | return url |
---|