Example #1
0
    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()))
Example #2
0
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 = []
Example #3
0
 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'))
Example #4
0
    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))
Example #5
0
    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')
Example #6
0
    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)
Example #7
0
    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))
Example #8
0
    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))
Example #9
0
    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'])
Example #10
0
    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))
Example #11
0
    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)
Example #12
0
    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)
Example #13
0
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
Example #14
0
def news_create(self, data):
    return news.Assignment(**data)
Example #15
0
 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))
Example #17
0
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()
Example #18
0
 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))