[344] | 1 | import sys |
---|
| 2 | from ZODB.POSException import ConflictError |
---|
| 3 | |
---|
| 4 | from zope.interface import Interface |
---|
| 5 | from zope.component import adapts, getMultiAdapter |
---|
| 6 | |
---|
| 7 | from zope.publisher.interfaces.browser import IBrowserView |
---|
| 8 | from zope.publisher.interfaces.browser import IDefaultBrowserLayer |
---|
| 9 | |
---|
| 10 | from Acquisition import aq_inner, aq_acquire |
---|
| 11 | from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile |
---|
| 12 | from Products.CMFCore.utils import getToolByName |
---|
| 13 | |
---|
| 14 | from plone.portlets.interfaces import ILocalPortletAssignable |
---|
| 15 | |
---|
| 16 | from plone.app.portlets.interfaces import IColumn |
---|
| 17 | from plone.app.portlets.interfaces import IDashboard |
---|
| 18 | from plone.app.portlets.manager import PortletManagerRenderer |
---|
| 19 | |
---|
| 20 | import logging |
---|
| 21 | logger = logging.getLogger('portlets') |
---|
| 22 | |
---|
| 23 | class ColumnPortletManagerRenderer(PortletManagerRenderer): |
---|
| 24 | """A renderer for the column portlets |
---|
| 25 | """ |
---|
| 26 | adapts(Interface, IDefaultBrowserLayer, IBrowserView, IColumn) |
---|
| 27 | template = ViewPageTemplateFile('browser/templates/column.pt') |
---|
| 28 | error_message = ViewPageTemplateFile('browser/templates/error_message.pt') |
---|
| 29 | |
---|
| 30 | def _context(self): |
---|
| 31 | context = aq_inner(self.context) |
---|
| 32 | return context |
---|
| 33 | |
---|
| 34 | def base_url(self): |
---|
| 35 | """If context is a default-page, return URL of folder, else |
---|
| 36 | return URL of context. |
---|
| 37 | """ |
---|
| 38 | return str(getMultiAdapter((self._context(), self.request,), name=u'absolute_url')) |
---|
| 39 | |
---|
| 40 | def can_manage_portlets(self): |
---|
| 41 | context = self._context() |
---|
| 42 | if not ILocalPortletAssignable.providedBy(context): |
---|
| 43 | return False |
---|
| 44 | mtool = getToolByName(context, 'portal_membership') |
---|
| 45 | return mtool.checkPermission("Portlets: Manage portlets", context) |
---|
| 46 | |
---|
| 47 | def safe_render(self, portlet_renderer): |
---|
| 48 | try: |
---|
| 49 | return portlet_renderer.render() |
---|
| 50 | except ConflictError: |
---|
| 51 | raise |
---|
| 52 | except Exception: |
---|
| 53 | logger.exception('Error while rendering %r' % (self,)) |
---|
| 54 | aq_acquire(self, 'error_log').raising(sys.exc_info()) |
---|
| 55 | return self.error_message() |
---|