def test_published_news_items(self): setRoles(self.portal, TEST_USER_ID, ['Manager']) self.portal.invokeFactory('News Item', 'n1') self.portal.invokeFactory('News Item', 'n2') self.portal.portal_workflow.doActionFor(self.portal.n1, 'publish') r = self.renderer(assignment=news.Assignment(count=5, state=('draft', ))) self.assertEqual(0, len(r.published_news_items())) r = self.renderer(assignment=news.Assignment(count=5, state=('published', ))) self.assertEqual(1, len(r.published_news_items())) r = self.renderer(assignment=news.Assignment(count=5, state=('published', 'private', ))) self.assertEqual(2, len(r.published_news_items()))
def convert_legacy_portlets(context): """Convert legacy portlets (left_slots, right_slots) in the given context to new-style portlets. """ portletsMapping = { 'portlet_login': login.Assignment(), 'portlet_news': news.Assignment(count=5), 'portlet_navigation': navigation.Assignment(), 'portlet_review': review.Assignment(), 'portlet_recent': recent.Assignment(count=5), 'portlet_related': DONT_MIGRATE, 'portlet_languages': DONT_MIGRATE, 'portlet_calendar': calendar.Assignment(), 'portlet_events': events.Assignment(count=5), } # Convert left_slots and right_slots to portlets left = getUtility(IPortletManager, name='plone.leftcolumn') right = getUtility(IPortletManager, name='plone.rightcolumn') leftAssignable = getMultiAdapter((context, left), IPortletAssignmentMapping).__of__(context) rightAssignable = getMultiAdapter( (context, right), IPortletAssignmentMapping).__of__(context) IPortletPermissionChecker(leftAssignable)() IPortletPermissionChecker(rightAssignable)() leftChooser = INameChooser(leftAssignable) rightChooser = INameChooser(rightAssignable) left_slots = getattr(aq_base(context), 'left_slots', []) right_slots = getattr(aq_base(context), 'right_slots', []) for item in left_slots: path = item.split('/') if len(path) == 4: newPortlet = portletsMapping.get(path[1], None) if newPortlet is None and path[0] in ( 'context', 'here') and path[2] == 'macros': newPortlet = classic.Assignment(path[1], path[3]) if newPortlet is not None and newPortlet is not DONT_MIGRATE: leftAssignable[leftChooser.chooseName(None, newPortlet)] = newPortlet for item in right_slots: path = item.split('/') if len(path) == 4: newPortlet = portletsMapping.get(path[1], None) if newPortlet is None and path[0] in ( 'context', 'here') and path[2] == 'macros': newPortlet = classic.Assignment(path[1], path[3]) if newPortlet is not None and newPortlet is not DONT_MIGRATE: rightAssignable[rightChooser.chooseName( None, newPortlet)] = newPortlet context.left_slots = [] context.right_slots = []
def test_all_news_link(self): if 'news' in self.portal: self.portal._delObject('news') r = self.renderer(assignment=news.Assignment(count=5)) self.assertEqual(r.all_news_link(), None) self.portal.invokeFactory('Folder', 'news') self.assertTrue(r.all_news_link().endswith('/news'))
def testInvokeEditView(self): mapping = PortletAssignmentMapping() request = self.folder.REQUEST mapping['foo'] = news.Assignment(count=5) editview = getMultiAdapter((mapping['foo'], request), name='edit') self.assertTrue(isinstance(editview, news.EditForm))
def test_invoke_edit_form(self): mapping = PortletAssignmentMapping() request = self.folder.REQUEST mapping['foo'] = news.Assignment(count=5) editview = getMultiAdapter((mapping['foo'], request), name='edit') editview.update() editview.applyChanges(data={ 'count': 6, EXTENDER_PREFIX + '.css_class': 'my-class' }) portlet_assignment = mapping.values()[0] settings = IPortletAssignmentSettings(portlet_assignment) self.assertEqual(portlet_assignment.count, 6) # We have not extended our storage adapter, so nothing gets saved: self.assertIsNone(settings.get('css_class', None)) # Register our schemaextender gsm = getGlobalSiteManager() gsm.registerAdapter(PortletCssClassAdapter, (IPortletAssignment, )) gsm.registerAdapter( PortletCssClassFormExtender, (Interface, IDefaultBrowserLayer, IPortletEditForm), IFormExtender, 'portletcssclass.extender') mapping = PortletAssignmentMapping() request = self.folder.REQUEST mapping['foo'] = news.Assignment(count=5) editview = getMultiAdapter((mapping['foo'], request), name='edit') editview.update() editview.applyChanges(data={ 'count': 6, EXTENDER_PREFIX + '.css_class': 'my-class' }) portlet_assignment = mapping.values()[0] settings = IPortletAssignmentSettings(portlet_assignment) gsm.unregisterAdapter( PortletCssClassFormExtender, (Interface, IDefaultBrowserLayer, IPortletEditForm), IFormExtender, 'portletcssclass.extender') gsm.unregisterAdapter(PortletCssClassAdapter, (IPortletAssignment, )) self.assertEqual(portlet_assignment.count, 6) # The prefix is used for the form field, not for the stored data: self.assertEqual(settings.get('css_class'), 'my-class')
def renderer(self, context=None, request=None, view=None, manager=None, assignment=None): context = context or self.folder request = request or self.folder.REQUEST view = view or self.folder.restrictedTraverse('@@plone') manager = manager or getUtility(IPortletManager, name='plone.leftcolumn', context=self.portal) assignment = assignment or news.Assignment(template='portlet_recent', macro='portlet') return getMultiAdapter((context, request, view, manager, assignment), IPortletRenderer)
def test_invoke_edit_view(self): # NOTE: This test can be removed if the portlet has no edit form mapping = PortletAssignmentMapping() request = self.folder.REQUEST mapping['foo'] = news.Assignment() editview = getMultiAdapter((mapping['foo'], request), name='edit') self.failUnless(isinstance(editview, news.EditForm))
def testRenderer(self): context = self.folder request = self.folder.REQUEST view = self.folder.restrictedTraverse('@@plone') manager = getUtility(IPortletManager, name='plone.leftcolumn', context=self.portal) assignment = news.Assignment(count=5) renderer = getMultiAdapter((context, request, view, manager, assignment), IPortletRenderer) self.assertTrue(isinstance(renderer, news.Renderer))
def test_editform_fields(self): schema_field_names = field.Fields(news.INewsPortlet).keys() mapping = PortletAssignmentMapping() request = self.folder.REQUEST mapping['foo'] = news.Assignment(count=5) editview = getMultiAdapter((mapping['foo'], request), name='edit') editview.update() editview_field_names = editview.fields.keys() # Our editview schema before we register our extender: self.assertEqual(editview_field_names, schema_field_names) # Register our schemaextender gsm = getGlobalSiteManager() gsm.registerAdapter(PortletCssClassAdapter, (IPortletAssignment, )) gsm.registerAdapter( PortletCssClassFormExtender, (Interface, IDefaultBrowserLayer, IPortletEditForm), IFormExtender, 'portletcssclass.extender') mapping = PortletAssignmentMapping() request = self.folder.REQUEST mapping['foo'] = news.Assignment(count=5) editview = getMultiAdapter((mapping['foo'], request), name='edit') editview.update() editview_field_names = editview.fields.keys() gsm.unregisterAdapter( PortletCssClassFormExtender, (Interface, IDefaultBrowserLayer, IPortletEditForm), IFormExtender, 'portletcssclass.extender') gsm.unregisterAdapter(PortletCssClassAdapter, (IPortletAssignment, )) # Our editview schema now includes our extended schema: self.assertEqual(editview_field_names, schema_field_names + [EXTENDER_PREFIX + '.css_class'])
def test_obtain_renderer(self): context = self.folder request = self.folder.REQUEST view = self.folder.restrictedTraverse('@@plone') manager = getUtility(IPortletManager, name='plone.rightcolumn', context=self.portal) # TODO: Pass any keyword arguments to the Assignment constructor assignment = news.Assignment() renderer = getMultiAdapter( (context, request, view, manager, assignment), IPortletRenderer) self.failUnless(isinstance(renderer, news.Renderer))
def test_portlets_render_news(self): self.portal.invokeFactory('News Item', 'n1') self.portal.invokeFactory('News Item', 'n2') self.portal.invokeFactory('News Item', 'n3') self.portal.invokeFactory('News Item', 'n4') self.portal.portal_workflow.doActionFor(self.portal.n1, 'publish') self.portal.portal_workflow.doActionFor(self.portal.n2, 'publish') self.portal.portal_workflow.doActionFor(self.portal.n3, 'publish') assignment = news.Assignment(count=2) renderer = NewsPortletRenderer(self.context, self.request, None, None, assignment) result = renderer.render() self.assertEqual(len(result['items']), 2)
def renderer(self, context=None, request=None, view=None, manager=None, assignment=None): context = context or self.folder request = request or self.folder.REQUEST view = view or self.folder.restrictedTraverse('@@plone') manager = manager or getUtility( IPortletManager, name='plone.rightcolumn', context=self.portal) # TODO: Pass any default keyword arguments to the Assignment # constructor. assignment = assignment or news.Assignment() return getMultiAdapter((context, request, view, manager, assignment), IPortletRenderer)
def addEventsAndNewsPortlets(self): """ """ parent = getParent(self) obj = getattr(parent, 'oshnetwork') column = getUtility(IPortletManager, name='plone.leftcolumn') manager = getMultiAdapter(( obj, column, ), IPortletAssignmentMapping) assignment = events.Assignment() chooser = INameChooser(manager) manager[chooser.chooseName(None, assignment)] = assignment column = getUtility(IPortletManager, name='plone.rightcolumn') manager = getMultiAdapter(( obj, column, ), IPortletAssignmentMapping) assignment = news.Assignment() chooser = INameChooser(manager) manager[chooser.chooseName(None, assignment)] = assignment
def news_create(self, data): return news.Assignment(**data)
def testInterfaces(self): portlet = news.Assignment(count=5) self.assertTrue(IPortletAssignment.providedBy(portlet)) self.assertTrue(IPortletDataProvider.providedBy(portlet.data))
def testInterfaces(self): portlet = news.Assignment(count=5) self.failUnless(IPortletAssignment.providedBy(portlet)) self.failUnless(IPortletDataProvider.providedBy(portlet.data))
def setNewsEvents(self): portal = self.portal_url.getPortalObject() portal_path = self.portal_url.getPortalPath() langs = portal.portal_languages.getSupportedLanguages() out = StringIO() folders = [ 'good_practice', 'good_practice/topics', 'good_practice/topics/accident_prevention', 'good_practice/topics/msd', 'good_practice/topics/whp', 'good_practice/topics/stress', 'good_practice/topics/dangerous_substances', 'good_practice/topics/noise', 'good_practice/sector', 'good_practice/sector/construction', 'good_practice/sector/agriculture', 'good_practice/sector/eductation', 'good_practice/sector/fisheries', 'good_practice/sector/healthcare', 'good_practice/sector/horeca', 'good_practice/sector/road_transport', 'good_practice/priority_groups', 'good_practice/priority_groups/disability', 'good_practice/priority_groups/gender', 'good_practice/priority_groups/young_people', # 'about', 'about/organisation', 'about/jobs', 'about/partners', 'about/director_corner', 'about/calls', 'about/contact_us', # 'topics', 'topics/prevent', 'topics/business', 'topics/change', 'topics/ds', 'topics/osheducation', # 'topics/msds', 'topics/noise', 'topics/stress', 'topics/whp', # 'sector', 'sector/agriculture', 'sector/construction', 'sector/education', 'sector/fisheries', 'sector/healthcare', # 'sector/horeca', # 'priority_groups', 'priority_groups/ageingworkers', 'priority_groups/migrant_workers', 'priority_groups/disability', # 'priority_groups/sme', 'priority_groups/gender', 'priority_groups/young_people', # 'campaigns', # 'press', # 'publications', # 'legislation', # 'statistics' ] for fname in folders: f_path = "%s/%s/%s" % (portal_path, 'en', fname) f = self.restrictedTraverse(f_path, None) if f is None: #import pdb; pdb.set_trace() out.write('Not found: %s \n' % f_path) continue for lang in langs: f_trans = f.getTranslation(lang) if not f_trans: out.write('No trnslation for %s in %s \n' % (f_path, lang)) continue indexpage = f_trans.getDefaultPage() #out.write('\nindexpage: ' + str([indexpage])) if not indexpage: out.write('\tNo default page for %s in %s\n' % (f_path, lang)) continue d = getattr(f_trans, indexpage, None) if not d: out.write('\tNo default page for %s in %s\n' % (f_path, lang)) continue path = '/'.join(d.getPhysicalPath()) #out.write('path:' + path + ' d: '+ str(d) + '\n'); continue if d.portal_type == 'LinguaLink': continue below = assignment_mapping_from_key(d, 'osha.belowcontent.portlets', CONTEXT_CATEGORY, path) for x in list(below.keys()): del below[x] below['news'] = news.Assignment() below['events'] = events.Assignment() return out.getvalue()
def test_interfaces(self): # TODO: Pass any keyword arguments to the Assignment constructor portlet = news.Assignment() self.failUnless(IPortletAssignment.providedBy(portlet)) self.failUnless(IPortletDataProvider.providedBy(portlet.data))