plone.app.discussion/plone/app/discussion/browser/comments.py

71 lines
2.5 KiB
Python
Raw Normal View History

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')