def _add_portlets(obj, events_topic, news_topic, lang):
    log.info('_add_portlets for language %s' % lang)
    path = "/".join(obj.getPhysicalPath())
    oshabelow = assignment_mapping_from_key(obj, 'osha.belowcontent.portlets',
                                            CONTEXT_CATEGORY, path)

    events_topic_path = "/".join(events_topic.getPhysicalPath())
    news_topic_path = "/".join(news_topic.getPhysicalPath())

    translate = getTranslationService().translate
    news_trans = translate(target_language=lang,
                           msgid=u'News',
                           default=u'News',
                           context=obj,
                           domain='plone')
    oshabelow[u'news-collection'] = collection.Assignment(
        header=news_trans,
        target_collection=news_topic_path,
        limit=5,
    )

    events_trans = translate(target_language=lang,
                             msgid=u'Events',
                             default=u'Events',
                             context=obj,
                             domain='plone')
    oshabelow[u'events-collection'] = collection.Assignment(
        header=events_trans,
        target_collection=events_topic_path,
        limit=5,
    )

    rightcolumn_manager = component.getUtility(IPortletManager,
                                               name=u'plone.rightcolumn',
                                               context=obj)

    rightcolumn = component.getMultiAdapter((obj, rightcolumn_manager),
                                            IPortletAssignmentMapping,
                                            context=obj)

    rightcolumn[u'activities'] = osha_portlets.image.Assignment(
        header=u"Agency's Activities",
        image="/en/press/photos/banners/hw_08_banner/hwp_%s.swf" % lang,
        url="/%s/campaigns/hw2008/" % lang,
        width="167",
        height="74",
    )

    rightcolumn[u'links'] = osha_portlets.network_member_links.Assignment()
    def testSimpleQuery(self):
        # set up our collection to search for Folders
        self.folder.collection.query = [{
            'i': 'portal_type',
            'o': 'plone.app.querystring.operation.string.is',
            'v': 'Folder',
        }]

        # add a few folders
        for i in range(6):
            self.folder.invokeFactory('Folder', 'folder_%s' % i)
            getattr(self.folder, 'folder_%s' % i).reindexObject()

        # the folders are returned by the topic
        collection_num_items = len(self.folder.collection.results())
        # We better have some folders
        self.assertTrue(collection_num_items >= 6)

        mapping = PortletAssignmentMapping()
        mapping['foo'] = collection.Assignment(
            header=u"title",
            uid=self.folder.collection.UID(),
            exclude_context=False,
        )
        collectionrenderer = self.renderer(context=None,
                                           request=None,
                                           view=None,
                                           manager=None,
                                           assignment=mapping['foo'])
        # we want the portlet to return us the same results as the collection
        self.assertEqual(collection_num_items,
                         len(collectionrenderer.results()))
 def test_render(self):
     r = self.renderer(context=self.portal,
                       assignment=collection.Assignment(header=u"title"))
     r = r.__of__(self.folder)
     r.update()
     output = r.render()
     self.assertTrue('title' in output)
示例#4
0
 def test_collection_path_unicode(self):
     self.portal.invokeFactory('Collection', 'events')
     # Cover problem in #9184
     renderer = self.renderer(context=self.portal,
                              assignment=collection.Assignment(
                                  header=u"title",
                                  target_collection=u"/events"))
     renderer = renderer.__of__(self.folder)
     self.assertEqual(renderer.collection().id, 'events')
    def testRenderer(self):
        context = self.folder
        request = self.folder.REQUEST
        view = self.folder.restrictedTraverse('@@plone')
        manager = getUtility(IPortletManager,
                             name='plone.rightcolumn',
                             context=self.portal)
        assignment = collection.Assignment(header=u"title")

        renderer = getMultiAdapter(
            (context, request, view, manager, assignment), IPortletRenderer)
        self.assertTrue(isinstance(renderer, collection.Renderer))
    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)
        assignment = assignment or collection.Assignment(header=u"title")

        return getMultiAdapter((context, request, view, manager, assignment),
                               IPortletRenderer)
    def testPortletAvailabilityWithPrivateFolders(self):
        private_folder = self._createType(self.folder, 'Folder', 'private')
        public_subfolder = self._createType(private_folder, 'Folder', 'public')
        self.portal.portal_workflow.doActionFor(public_subfolder, 'publish')
        self.collection = self._createType(public_subfolder, 'Collection',
                                           'collection')
        self.portal.portal_workflow.doActionFor(self.collection, 'publish')

        mapping = PortletAssignmentMapping()
        mapping['foo'] = collection.Assignment(
            header=u"title",
            uid=self.portal.folder.private.public.collection.UID())
        logout()
        collectionrenderer = self.renderer(context=None,
                                           request=None,
                                           view=None,
                                           manager=None,
                                           assignment=mapping['foo'])

        self.assertEqual(self.collection, collectionrenderer.collection())
示例#8
0
def get_assignments_for_sitehome_collectionportlets(portal, views, logger):
    assignments = []
    from plone.portlet.collection import collection

    for item in default_sitehome_smartviews:
        try:
            objsmartview = getattr(views, item["id"])
            target_coll = "/".join(objsmartview.getPhysicalPath())
            assignments.append(
                collection.Assignment(header=item["displaytitle"],
                                      target_collection=target_coll,
                                      limit=item["limit"],
                                      show_more=True,
                                      show_dates=False))
        except:
            logger.info(
                "Unable to assign collection portlet for smartview : %s" %
                (item["id"], ))

    return assignments
 def testInvokeEditView(self):
     mapping = PortletAssignmentMapping()
     request = self.folder.REQUEST
     mapping['foo'] = collection.Assignment(header=u"title")
     editview = getMultiAdapter((mapping['foo'], request), name='edit')
     self.assertTrue(isinstance(editview, collection.EditForm))
 def testInterfaces(self):
     portlet = collection.Assignment(header=u"title")
     self.assertTrue(IPortletAssignment.providedBy(portlet))
     self.assertTrue(IPortletDataProvider.providedBy(portlet.data))
    def test_exclude_context(self):
        """
        The exclude context field controls including self in the results.
        """
        for idx in range(4):
            self._createType(self.folder, 'News Item',
                             'foo-news-item-title-{0}'.format(idx))
        self.folder.collection.query = [{
            'i': 'portal_type',
            'o': 'plone.app.querystring.operation.string.is',
            'v': 'News Item'
        }]
        self.folder.collection.sort_on = 'id'
        context = self.folder['foo-news-item-title-1']
        included = [
            self.folder['foo-news-item-title-{0}'.format(idx)].absolute_url()
            for idx in (0, 2)
        ]
        limited = self.folder['foo-news-item-title-3'].absolute_url()

        assignment = collection.Assignment(header=u"title",
                                           uid=self.folder.collection.UID(),
                                           limit=2)

        folder_renderer = self.renderer(context=self.folder,
                                        assignment=assignment)
        folder_results = [
            brain.getURL() for brain in folder_renderer.results()
        ]
        self.assertEqual(len(folder_results), 2,
                         'Wrong number of folder rendered results')
        self.assertIn(included[0], folder_results,
                      'Folder rendered results missing item')
        self.assertIn(context.absolute_url(), folder_results,
                      'Folder rendered results missing context item')
        self.assertNotIn(included[1], folder_results,
                         'Folder rendered results included too many items')
        self.assertNotIn(
            limited, folder_results,
            'Folder rendered results included way too many items')

        renderer = self.renderer(context=context, assignment=assignment)
        results = [brain.getURL() for brain in renderer.results()]
        self.assertEqual(len(results), 2,
                         'Wrong number of context rendered results')
        self.assertIn(included[0], results,
                      'Context rendered results missing item')
        self.assertIn(included[1], results,
                      'Context rendered results missing item')
        self.assertNotIn(context.absolute_url(), results,
                         'Context rendered results included context')
        self.assertNotIn(limited, results,
                         'Context rendered results included too many items')

        assignment.exclude_context = False
        context_renderer = self.renderer(context=context,
                                         assignment=assignment)
        context_results = [
            brain.getURL() for brain in context_renderer.results()
        ]
        self.assertEqual(len(context_results), 2,
                         'Wrong number of context rendered results')
        self.assertIn(included[0], context_results,
                      'Context rendered results missing item')
        self.assertIn(context.absolute_url(), context_results,
                      'Context rendered results missing context')
        self.assertNotIn(included[1], context_results,
                         'Context rendered results included too many items')
        self.assertNotIn(
            limited, context_results,
            'Context rendered results included way too many items')

        del assignment.exclude_context
        missing_renderer = self.renderer(context=context,
                                         assignment=assignment)
        missing_results = [
            brain.getURL() for brain in missing_renderer.results()
        ]
        self.assertEqual(len(missing_results), 2,
                         'Wrong number of context rendered results')
        self.assertIn(included[0], missing_results,
                      'Context rendered results missing item')
        self.assertIn(context.absolute_url(), missing_results,
                      'Context rendered results missing context')
        self.assertNotIn(included[1], missing_results,
                         'Context rendered results included too many items')
        self.assertNotIn(
            limited, missing_results,
            'Context rendered results included way too many items')

        assignment.limit = 4
        assignment.random = True
        assignment.exclude_context = True
        random_renderer = self.renderer(context=context, assignment=assignment)
        random_results = [
            brain.getURL() for brain in random_renderer.results()
        ]
        self.assertEqual(len(random_results), 3,
                         'Wrong number of random rendered results')
        self.assertIn(included[0], random_results,
                      'Context rendered results missing item')
        self.assertIn(included[1], random_results,
                      'Context rendered results missing item')
        self.assertIn(limited, random_results,
                      'Context rendered results missing item')
        self.assertNotIn(context.absolute_url(), random_results,
                         'Context rendered results included context')
    def testRandomQuery(self):
        # set up our portlet renderer
        mapping = PortletAssignmentMapping()
        mapping['foo'] = collection.Assignment(
            header=u"title", random=True, uid=self.folder.collection.UID())
        # add some folders
        for i in range(6):
            self.folder.invokeFactory('Folder', 'folder_%s' % i)
            getattr(self.folder, 'folder_%s' % i).reindexObject()

        # collection with no criteria -- should return empty list
        collectionrenderer = self.renderer(context=None,
                                           request=None,
                                           view=None,
                                           manager=None,
                                           assignment=mapping['foo'])
        self.assertEqual(len(collectionrenderer.results()), 0)

        # collection with simple criterion -- should return 1 (random) folder
        self.folder.collection.query = [{
            'i': 'portal_type',
            'o': 'plone.app.querystring.operation.string.is',
            'v': 'Folder',
        }]
        collectionrenderer = self.renderer(context=None,
                                           request=None,
                                           view=None,
                                           manager=None,
                                           assignment=mapping['foo'])
        self.assertEqual(len(collectionrenderer.results()), 1)

        # collection with multiple criteria -- should behave similarly
        self.folder.collection.query = [
            {
                'i': 'portal_type',
                'o': 'plone.app.querystring.operation.string.is',
                'v': 'Folder',
            },
            {
                'i': 'creator',
                'o': 'plone.app.querystring.operation.string.is',
                'v': 'test_user_1_',
            },
        ]
        collectionrenderer = self.renderer(context=None,
                                           request=None,
                                           view=None,
                                           manager=None,
                                           assignment=mapping['foo'])
        collectionrenderer.results()

        # collection with sorting -- should behave similarly (sort is ignored
        # internally)
        self.folder.collection.sort_on = 'modified'
        collectionrenderer = self.renderer(context=None,
                                           request=None,
                                           view=None,
                                           manager=None,
                                           assignment=mapping['foo'])
        self.assertEqual(len(collectionrenderer.results()), 1)

        # same criteria, now with limit set to 2 -- should return 2 (random)
        # folders
        collectionrenderer = self.renderer(context=None,
                                           request=None,
                                           view=None,
                                           manager=None,
                                           assignment=mapping['foo'])
        collectionrenderer.data.limit = 2
        self.assertEqual(len(collectionrenderer.results()), 2)

        # make sure there's no error if the limit is greater than the # of
        # results found
        collectionrenderer = self.renderer(context=None,
                                           request=None,
                                           view=None,
                                           manager=None,
                                           assignment=mapping['foo'])
        collectionrenderer.data.limit = 10
        self.assertTrue(len(collectionrenderer.results()) >= 6)
 def test_css_class(self):
     r = self.renderer(
         context=self.portal,
         assignment=collection.Assignment(header=u"Welcome text"))
     self.assertEqual('portlet-collection-welcome-text', r.css_class())
示例#14
0
    def setUpPloneSite(self, portal):
        if IS_PLONE_5:
            applyProfile(portal, 'plone.app.contenttypes:default')

        setRoles(portal, TEST_USER_ID, ['Manager'])
        login(portal, TEST_USER_NAME)

        self.folder = portal.get(
            portal.invokeFactory('Folder', 'testing_example_data'))

        # add some default plone types
        testdoc1id = self.folder.invokeFactory('Document', 'test-doc-1')
        self['testdoc1'] = getattr(self.folder, testdoc1id, None)
        folder1id = self.folder.invokeFactory('Folder', 'test-folder-1')
        self['folder1'] = getattr(self.folder, folder1id, None)
        self['newfolder'] = getattr(
            self['folder1'],
            self['folder1'].invokeFactory('Folder', 'newfolder'))
        folderid2 = self.folder.invokeFactory('Folder', 'test-folder-2')
        self['folder2'] = getattr(self.folder, folderid2, None)
        testdoc2id = self['folder1'].invokeFactory('Document', 'test-doc-2')
        self['testdoc2'] = getattr(self['folder1'], testdoc2id, None)
        # create a topic
        if not IS_PLONE_5:
            topicid = self.folder.manage_addProduct[
                'ATContentTypes'].addATTopic(id='atopic', title='A topic')
            self.topic = getattr(self.folder, topicid, None)

        # set some custom properties
        self['testdoc1'].manage_addProperty(id='bool',
                                            value=True,
                                            type='boolean')
        self['testdoc1'].manage_addProperty(id='date',
                                            value='2000/01/01',
                                            type='date')
        self['testdoc1'].manage_addProperty(id='float',
                                            value=2.1,
                                            type='float')
        self['testdoc1'].manage_addProperty(id='int', value=2, type='int')
        self['testdoc1'].manage_addProperty(id='lines',
                                            value=('row1', 'row2'),
                                            type='lines')
        self['testdoc1'].manage_addProperty(id='string',
                                            value='Hello World!',
                                            type='string')

        # put some custom portlets on folder1 - prepare to get
        # portlets from folder 2
        self['left_column'] = getUtility(IPortletManager,
                                         name=u'plone.leftcolumn',
                                         context=self['folder1'])

        self['left_column2'] = getUtility(IPortletManager,
                                          name=u'plone.leftcolumn',
                                          context=self['folder2'])

        self['right_column'] = getUtility(IPortletManager,
                                          name=u'plone.rightcolumn',
                                          context=self['folder1'])
        self['right_column2'] = getUtility(IPortletManager,
                                           name=u'plone.rightcolumn',
                                           context=self['folder2'])
        self['left_portlets'] = getMultiAdapter((
            self['folder1'],
            self['left_column'],
        ),
                                                IPortletAssignmentMapping,
                                                context=self['folder1'])

        self['right_portlets'] = getMultiAdapter((
            self['folder1'],
            self['right_column'],
        ),
                                                 IPortletAssignmentMapping,
                                                 context=self['folder1'])

        # static-text-portlets on right and left column
        self['left_portlets']['title1'] = static.Assignment(header='Title1',
                                                            text="some text",
                                                            omit_border=False)
        self['right_portlets']['title2'] = static.Assignment(header='Title2',
                                                             text="some text",
                                                             omit_border=False)
        self['right_portlets']['blubb'] = static.Assignment(header='blubb',
                                                            text="some text",
                                                            omit_border=False)
        self['right_portlets']['news'] = portlets.news.Assignment()
        self['right_portlets']['search'] = portlets.search.Assignment()
        # collection portlet on the right
        if not IS_PLONE_5:
            self['right_portlets']['collection'] = collection.Assignment(
                header="My collection",
                target_collection='/'.join(self.topic.getPhysicalPath()),
                limit="5",
                random=False,
                show_more=False,
                show_dates=True,
            )

        if IS_PLONE_5:
            root = 'root_uid'
        else:
            root = 'root'
        custom_navi_portlet = {
            'name': 'custom Navigation',
            root: '/'.join(self.folder.getPhysicalPath())
        }

        # custom Navigation portlet on the left side
        self['left_portlets']['custom_navigation'] = navigation.Assignment(
            **custom_navi_portlet)

        # set dummy interfaces
        alsoProvides(self['testdoc1'], IDummyIface)
        alsoProvides(self['testdoc1'], IDummyIface2)
        alsoProvides(self['folder2'], IDummyIface2)
        alsoProvides(self['folder2'], IDummyIface3)