edf956f01c
svn path=/plone.app.discussion/trunk/; revision=27055
71 lines
2.5 KiB
Python
71 lines
2.5 KiB
Python
from urllib import quote as url_quote
|
|
|
|
from Acquisition import aq_inner, aq_parent
|
|
from AccessControl import getSecurityManager
|
|
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
|
|
from Products.CMFCore.utils import getToolByName
|
|
from Products.CMFDefault.DiscussionTool import DiscussionNotAllowed
|
|
|
|
from plone.app.layout.viewlets.common import ViewletBase
|
|
|
|
|
|
class CommentsViewlet(ViewletBase):
|
|
index = ViewPageTemplateFile('comments.pt')
|
|
|
|
def update(self):
|
|
super(CommentsViewlet, self).update()
|
|
self.portal_discussion = getToolByName(self.context, 'portal_discussion', None)
|
|
self.portal_membership = getToolByName(self.context, 'portal_membership', None)
|
|
|
|
def can_reply(self):
|
|
return getSecurityManager().checkPermission('Reply to item', aq_inner(self.context))
|
|
|
|
def is_discussion_allowed(self):
|
|
if self.portal_discussion is None:
|
|
return False
|
|
else:
|
|
return self.portal_discussion.isDiscussionAllowedFor(aq_inner(self.context))
|
|
|
|
def get_replies(self):
|
|
replies = []
|
|
|
|
context = aq_inner(self.context)
|
|
container = aq_parent(context)
|
|
pd = self.portal_discussion
|
|
|
|
def getRs(obj, replies, counter):
|
|
rs = pd.getDiscussionFor(obj).getReplies()
|
|
if len(rs) > 0:
|
|
rs.sort(lambda x, y: cmp(x.modified(), y.modified()))
|
|
for r in rs:
|
|
replies.append({'depth':counter, 'object':r})
|
|
getRs(r, replies, counter=counter + 1)
|
|
|
|
try:
|
|
getRs(context, replies, 0)
|
|
except DiscussionNotAllowed:
|
|
# We tried to get discussions for an object that has not only
|
|
# discussions turned off but also no discussion container.
|
|
return []
|
|
return replies
|
|
|
|
def is_anonymous(self):
|
|
return self.portal_state.anonymous()
|
|
|
|
def login_action(self):
|
|
return '%s/login_form?came_from=%s' % (self.navigation_root_url, url_quote(self.request.get('URL', '')),)
|
|
|
|
def can_manage(self):
|
|
return getSecurityManager().checkPermission('Manage portal', aq_inner(self.context))
|
|
|
|
def member_info(self, creator):
|
|
if self.portal_membership is None:
|
|
return None
|
|
else:
|
|
return self.portal_membership.getMemberInfo(creator)
|
|
|
|
def format_time(self, time):
|
|
context = aq_inner(self.context)
|
|
util = getToolByName(context, 'translation_service')
|
|
return util.ulocalized_time(time, 1, context, domain='plonelocales')
|