Test coverage for vnccollab.theme.browser.portlet_manager
1: from AccessControl import getSecurityManager
1: from zope.component import adapts
1: from zope.interface import Interface
1: from zope.publisher.interfaces.browser import IBrowserView
1: from zope.annotation.interfaces import IAnnotations
1: from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
1: from Products.CMFCore.utils import getToolByName
1: from plone.app.portlets.interfaces import IColumn, IDashboard
1: from plone.memoize.instance import memoize
1: from plone.portlets.interfaces import IPortletManager
1: from plone.app.portlets import manager
1: from plone.app.portlets.browser import editmanager
1: from plone.app.portlets.browser.interfaces import IManageColumnPortletsView, \
IManageContextualPortletsView, IManageDashboardPortletsView
1: from vnccollab.theme.browser.interfaces import IThemeSpecific
1: from vnccollab.theme.config import PORTLETS_STATES_ANNO_KEY
2: class ColumnPortletManagerRenderer(manager.ColumnPortletManagerRenderer):
"""A renderer for the column portlets
1: """
1: adapts(Interface, IThemeSpecific, IBrowserView, IColumn)
1: template = ViewPageTemplateFile('templates/portlets-column.pt')
1: def portlet_states(self, hash):
>>>>>> return self._portlets_states().get(hash, {})
1: @memoize
def _portlets_states(self):
"""Returns portlets states settings for currently logged in user."""
>>>>>> user = getSecurityManager().getUser()
>>>>>> if not user or getattr(user, 'name', '') == 'Anonymous User':
>>>>>> return {}
>>>>>> portal = getToolByName(self.context, 'portal_url').getPortalObject()
>>>>>> annotations = IAnnotations(portal)
>>>>>> users = annotations.get(PORTLETS_STATES_ANNO_KEY, None)
>>>>>> if users is None:
>>>>>> return {}
>>>>>> userid = getattr(user, '_id', user.getId())
>>>>>> return users.get(userid, {})
2: class DashboardPortletManagerRenderer(ColumnPortletManagerRenderer):
"""Render a column of the dashboard
1: """
1: adapts(Interface, IThemeSpecific, IBrowserView, IDashboard)
1: template = ViewPageTemplateFile('templates/portlets-dashboard-column.pt')
2: class EditPortletManagerRenderer(editmanager.EditPortletManagerRenderer):
1: adapts(Interface, IThemeSpecific, IManageColumnPortletsView,
1: IPortletManager)
2: class ContextualEditPortletManagerRenderer(
1: editmanager.ContextualEditPortletManagerRenderer):
1: adapts(Interface, IThemeSpecific, IManageContextualPortletsView,
1: IPortletManager)
2: class DashboardEditPortletManagerRenderer(
1: editmanager.DashboardEditPortletManagerRenderer):
1: adapts(Interface, IThemeSpecific, IManageDashboardPortletsView,
1: IDashboard)
1: ANONYMOUS_KEY = 'AnonymousUsers'
'''List of the names of the portlets that are allowed to be
shown in @@manage-group-dashboard?key=AnonymousUsers.
The name is the last part of the path in the <option> value.
'''
allowed_portlets = [
1: 'plone.portlet.static.Static',
1: 'portlets.Calendar',
1: 'portlets.Events',
1: 'portlets.News',
1: 'collective.plonetruegallery.gallery',
1: 'portlets.rss',
1: 'portlets.Recent',
1: 'portlets.Search',
1: 'vnccollab.theme.portlets.WorldClockPortlet',
]
1: def is_anonymous_group(self):
'''true if we are viewing the dashboard for anonymous homepage.'''
12: return self.request.get('key', '') == self.ANONYMOUS_KEY
1: def addable_portlets(self):
'''Overrides parent's portlets to show only a few, if it's for
anonymous group.'''
12: portlets = editmanager.DashboardEditPortletManagerRenderer. \
12: addable_portlets(self)
12: if self.is_anonymous_group():
8: allowed = []
176: for portlet in portlets:
168: name = portlet['addview'].split('/')[-1]
168: if name in self.allowed_portlets:
72: allowed.append(portlet)
8: return allowed
else:
4: return portlets