コード例 #1
0
 def test_create_faceted_folder_with_id(self):
     faceted = utils.create_faceted_folder(self.portal,
                                           "Test Faceted",
                                           id="test-faceted")
     self.assertEqual("Test Faceted", faceted.title)
     self.assertEqual("test-faceted", faceted.id)
     IFacetedNavigable.providedBy(faceted)
コード例 #2
0
    def _get_generation_context(self, helper_view, pod_template):
        """Include brains/uids if we are on a dashboard."""
        if not IFacetedNavigable.providedBy(self.context):
            return super(DashboardDocumentGenerationView,
                         self)._get_generation_context(helper_view,
                                                       pod_template)

        generation_context = {'brains': [], 'uids': []}
        brains = getDashboardQueryResult(self.context) or []
        max_objects = getattr(pod_template, 'max_objects', None)
        if max_objects:
            brains = brains[:max_objects]
        generation_context['brains'] = brains
        if getattr(pod_template, 'use_objects', False):
            wrapped_objects = []
            brain_and_objects = []
            for brain in brains:
                generation_context['uids'].append(brain.UID)
                obj = brain.getObject()
                helper = obj.unrestrictedTraverse(
                    '@@document_generation_helper_view')
                wrapped_objects.append((helper.context, helper))
                brain_and_objects.append((brain, helper.context, helper))
            generation_context['objects'] = wrapped_objects
            generation_context['all'] = brain_and_objects
        else:
            generation_context['uids'] = [brain.UID for brain in brains]

        generation_context.update(
            super(DashboardDocumentGenerationView,
                  self)._get_generation_context(helper_view, pod_template))
        return generation_context
コード例 #3
0
 def _get_generation_context(self, helper_view, pod_template):
     result = super(IDocumentGenerationView,
                    self)._get_generation_context(helper_view, pod_template)
     # if pod_template.portal_type == 'ConfigurablePODTemplate':
     if IFacetedNavigable.providedBy(self.context):
         brains = getDashboardQueryResult(self.context)
         result['brains'] = brains
         if len(brains) > 0 and brains[0].portal_type == 'Event':
             expandevents = expand_events(brains, 2)
             events = []
             for event in expandevents:
                 if IOccurrence.providedBy(event):
                     start = event.start
                     end = event.end
                     parent = zope.copy.copy(event.aq_parent.aq_base)
                     parent.start = start
                     parent.end = end
                     req = event.REQUEST
                     parent.REQUEST = req
                     parent.occurrence = True
                     parent.base_event = event.aq_parent
                     events.append(parent)
                 else:
                     events.append(event)
             result['brains'] = events
         return result
コード例 #4
0
ファイル: pages.py プロジェクト: IMIO/cpskin.core
 def _get_generation_context(self, helper_view, pod_template):
     result = super(IDocumentGenerationView, self)._get_generation_context(
         helper_view, pod_template)
     # if pod_template.portal_type == 'ConfigurablePODTemplate':
     if IFacetedNavigable.providedBy(self.context):
         brains = getDashboardQueryResult(self.context)
         result['brains'] = brains
         if len(brains) > 0 and brains[0].portal_type == 'Event':
             expandevents = expand_events(brains, 2)
             events = []
             for event in expandevents:
                 if IOccurrence.providedBy(event):
                     start = event.start
                     end = event.end
                     parent = zope.copy.copy(event.aq_parent.aq_base)
                     parent.start = start
                     parent.end = end
                     req = event.REQUEST
                     parent.REQUEST = req
                     parent.occurrence = True
                     parent.base_event = event.aq_parent
                     events.append(parent)
                 else:
                     events.append(event)
             result['brains'] = events
         return result
コード例 #5
0
 def _criteriaHolder(self):
     '''Override to not consider IMeeting as a criteria holder.'''
     parent = self.context
     # look up parents until we found the criteria holder or we reach the 'Plone Site'
     while parent and not parent.portal_type == 'Plone Site':
         if IFacetedNavigable.providedBy(
                 parent) and not IMeeting.providedBy(parent):
             return parent
         parent = parent.aq_inner.aq_parent
コード例 #6
0
    def test_PODTemplateViewlet(self):
        """Test the IDDocumentGeneratorLinksViewlet
        that list available PODTemplates."""

        # by default, viewlet is not displayed as no template to display
        viewlet = DocumentGeneratorLinksViewlet(self.folder2, self.request,
                                                None, None)
        viewlet.update()
        self.assertFalse(viewlet.available())
        self.assertFalse(viewlet.get_generable_templates())

        # add a DashboardPODTemplate, still not available
        api.content.create(id='dashtemplate',
                           type='DashboardPODTemplate',
                           title='Dashboard template',
                           container=self.portal)
        # need to clean memoize because available() calls
        # get_generable_templates that use it
        del IAnnotations(self.request)['plone.memoize']
        self.assertFalse(viewlet.available())
        self.assertFalse(viewlet.get_generable_templates())

        # add a PODTemplate, this time it is available
        template = api.content.create(id='template',
                                      type='PODTemplate',
                                      title='POD template',
                                      container=self.portal)
        # clean memoize
        del IAnnotations(self.request)['plone.memoize']
        self.assertTrue(viewlet.available())
        self.assertEquals(len(viewlet.get_generable_templates()), 1)
        self.assertEquals(viewlet.get_generable_templates()[0].UID(),
                          template.UID())

        # this viewlet will not be displayed if current context is a faceted
        self.assertFalse(IFacetedNavigable.providedBy(self.folder2))
        self.assertTrue(IFacetedNavigable.providedBy(self.folder))
        viewlet = DocumentGeneratorLinksViewlet(self.folder, self.request,
                                                None, None)
        viewlet.update()
        del IAnnotations(self.request)['plone.memoize']
        self.assertTrue(viewlet.available())
        # no matter there are pod templates
        self.assertTrue(viewlet.get_generable_templates())
コード例 #7
0
    def test_enableFacetedDashboardFor(self):
        """This method will enable the faceted navigation for a given folder."""
        # faceted can be enabled using the default widgets
        catalog = self.portal.portal_catalog
        folder2_id = self.portal.invokeFactory('Folder', 'folder2', title='Folder2')
        folder2 = getattr(self.portal, folder2_id)
        folder2.reindexObject()
        folder2UID = folder2.UID()
        # not enabled for now
        self.assertFalse(IFacetedNavigable.providedBy(folder2))
        self.assertTrue(catalog(UID=folder2UID))
        self.assertFalse(catalog(UID=folder2UID, object_provides=IFacetedNavigable.__identifier__))
        enableFacetedDashboardFor(folder2)
        # several things are done :
        # faceted is enabled
        self.assertTrue(IFacetedNavigable.providedBy(folder2))
        # used faceted layout is 'faceted-table-items'
        self.assertEquals(IFacetedLayout(folder2).layout, 'faceted-table-items')
        # left portlets are shown
        self.assertFalse(IHidePloneLeftColumn.providedBy(folder2))
        # folder2 was reindexed, especially provided interfaces
        self.assertTrue(catalog(UID=folder2UID, object_provides=IFacetedNavigable.__identifier__))
        # redirect is swallowed, indeed enabling faceted on a folder redirects to it
        self.assertEquals(self.portal.REQUEST.RESPONSE.status, 200)

        # a xmlpath parameter can be passed to use a specific widgets xml file
        # calling this on an already enabled faceted will do nothing
        xmlpath = os.path.dirname(__file__) + '/faceted_conf/testing_widgets.xml'
        enableFacetedDashboardFor(folder2, xmlpath=xmlpath)
        # only one 'c44' widget in testing_widgets.xml, not added here
        self.assertFalse(ICriteria(folder2).get('c44'))
        # create a new folder and apply faceted with xmlpath to it
        folder3_id = self.portal.invokeFactory('Folder', 'folder3', title='Folder3')
        folder3 = getattr(self.portal, folder3_id)
        folder3.reindexObject()
        # an Exception is raised if xmlpath does not exist
        wrong_xmlpath = os.path.dirname(__file__) + '/faceted_conf/wrong_testing_widgets.xml'
        self.assertRaises(Exception, enableFacetedDashboardFor, folder3, wrong_xmlpath)
        # apply correct xmlpath
        enableFacetedDashboardFor(folder3, xmlpath=xmlpath)
        # same things are done except that the widgets are taken from the given xmlpath
        self.assertEquals(len(ICriteria(folder3).criteria), 1)
        self.assertTrue(ICriteria(folder3).get('c44'))
コード例 #8
0
def activate_faceted_tasks_listing(task_container, event):
    """
    Set the listing tasks faceted view on the faceted tasks container.
    """
    if hasattr(aq_base(task_container), 'checkCreationFlag'):
        if task_container.checkCreationFlag():
            return

    if IFacetedNavigable.providedBy(task_container):
        return
    elif IPossibleFacetedNavigable.providedBy(task_container):
        subtyper = task_container.unrestrictedTraverse('@@faceted_subtyper')
        subtyper.enable()
        IFacetedLayout(task_container).update_layout('list_tasks')
        task_container.manage_delProperties(['layout'])
コード例 #9
0
    def migrate(self, old, new):
        new_path = "/".join(new.getPhysicalPath())
        for iface in interfaces:
            if iface.providedBy(old):
                alsoProvides(new, iface)
                logger.warn("{0} also provides {1}".format(new_path, str(iface)))

        if old.getConstrainTypesMode() != 0:
            behaviour = ISelectableConstrainTypes(new)
            behaviour.setConstrainTypesMode(1)
            if old.getConstrainTypesMode() == 1:
                behaviour.setLocallyAllowedTypes(old.getLocallyAllowedTypes())
                behaviour.setImmediatelyAddableTypes(old.getImmediatelyAddableTypes())

        if IFacetedNavigable.providedBy(old):
            criteria = Criteria(new)
            criteria._update(ICriteria(old).criteria)
            IFacetedLayout(new).update_layout('faceted-table-items')
            logger.warn("Added faceted criteria and layout to {0}".format(new_path))
コード例 #10
0
    def get_facted_criteria(self):
        from eea.facetednavigation.criteria.handler import Criteria
        from eea.facetednavigation.criteria.interfaces import ICriteria
        from eea.facetednavigation.indexes.language.interfaces import ILanguageWidgetAdapter  # noqa
        from eea.facetednavigation.interfaces import IFacetedNavigable
        from eea.facetednavigation.settings.interfaces import IDisableSmartFacets  # noqa
        from eea.facetednavigation.settings.interfaces import IHidePloneLeftColumn  # noqa
        from eea.facetednavigation.settings.interfaces import IHidePloneRightColumn  # noqa
        from eea.facetednavigation.subtypes.interfaces import IFacetedWrapper
        from eea.facetednavigation.views.interfaces import IViewsInfo
        from eea.facetednavigation.widgets.alphabetic.interfaces import IAlphabeticWidget  # noqa
        from eea.facetednavigation.widgets.interfaces import ICriterion
        from eea.facetednavigation.widgets.interfaces import IWidget
        from eea.facetednavigation.widgets.interfaces import IWidgetsInfo
        from eea.facetednavigation.widgets.resultsfilter.interfaces import IResultsFilterWidget  # noqa

        interfaces = [
            IFacetedNavigable,
            IDisableSmartFacets,
            IHidePloneLeftColumn,
            IHidePloneRightColumn,
            ICriteria,
            ILanguageWidgetAdapter,
            IFacetedWrapper,
            IViewsInfo,
            IAlphabeticWidget,
            ICriterion,
            IWidget,
            IWidgetsInfo,
            IResultsFilterWidget,
        ]
        inter = []
        for interface in interfaces:
            if interface.providedBy(self.context):
                inter.append(interface.__identifier__)
        self['faceted_interfaces'] = inter
        if IFacetedNavigable.providedBy(self.context):
            criteria = Criteria(self.context)
            criterias = []
            for crit in criteria.criteria:
                criterias.append(crit.__dict__)
            self['faceted_criteria'] = criterias
コード例 #11
0
ファイル: wrapper.py プロジェクト: IMIO/cpskin.core
    def get_facted_criteria(self):
        from eea.facetednavigation.criteria.handler import Criteria
        from eea.facetednavigation.criteria.interfaces import ICriteria
        from eea.facetednavigation.indexes.language.interfaces import ILanguageWidgetAdapter  # noqa
        from eea.facetednavigation.interfaces import IFacetedNavigable
        from eea.facetednavigation.settings.interfaces import IDisableSmartFacets  # noqa
        from eea.facetednavigation.settings.interfaces import IHidePloneLeftColumn  # noqa
        from eea.facetednavigation.settings.interfaces import IHidePloneRightColumn  # noqa
        from eea.facetednavigation.subtypes.interfaces import IFacetedWrapper
        from eea.facetednavigation.views.interfaces import IViewsInfo
        from eea.facetednavigation.widgets.alphabetic.interfaces import IAlphabeticWidget  # noqa
        from eea.facetednavigation.widgets.interfaces import ICriterion
        from eea.facetednavigation.widgets.interfaces import IWidget
        from eea.facetednavigation.widgets.interfaces import IWidgetsInfo
        from eea.facetednavigation.widgets.resultsfilter.interfaces import IResultsFilterWidget  # noqa

        interfaces = [
            IFacetedNavigable,
            IDisableSmartFacets,
            IHidePloneLeftColumn,
            IHidePloneRightColumn,
            ICriteria,
            ILanguageWidgetAdapter,
            IFacetedWrapper,
            IViewsInfo,
            IAlphabeticWidget,
            ICriterion,
            IWidget,
            IWidgetsInfo,
            IResultsFilterWidget,
        ]
        inter = []
        for interface in interfaces:
            if interface.providedBy(self.context):
                inter.append(interface.__identifier__)
        self['faceted_interfaces'] = inter
        if IFacetedNavigable.providedBy(self.context):
            criteria = Criteria(self.context)
            criterias = []
            for crit in criteria.criteria:
                criterias.append(crit.__dict__)
            self['faceted_criteria'] = criterias
コード例 #12
0
def get_criteria_holder(context):
    pst = getProjectSpace(context)
    if IProjectSpace.providedBy(context):
        return pst.strategicobjectives
    elif context.portal_type == 'strategicobjective':
        return pst.operationalobjectives
    elif context.portal_type == 'operationalobjective':
        return pst.pstactions
    elif context.portal_type == 'pstaction':
        if context.listFolderContents({'portal_type': 'pstsubaction'}):
            context.REQUEST.set('has_subaction', True)
            return pst.pstactions
        else:
            context.REQUEST.set('has_subaction', False)
            return pst.tasks
    elif context.portal_type == 'pstsubaction':
        return pst.tasks
    elif not IFacetedNavigable.providedBy(context):
        return pst

    return context
コード例 #13
0
 def is_faceted(self):
     """ Is faceted navigable?
     """
     return IFacetedNavigable.providedBy(self.context)
コード例 #14
0
 def available(self):
     """ Is this menu available?
     """
     return (IFacetedNavigable.providedBy(self.context) and
             checkPermission('eea.faceted.configure', self.context))
コード例 #15
0
    def test_DashboardPODTemplateViewlet(self):
        """Test the IDDashboardDocumentGeneratorLinksViewlet
        that list available DashboardPODTemplates."""

        # by default, viewlet is not displayed as no template to display
        # but it needs a faceted enabled folder and to be able to getCurrentCollection
        self.assertTrue(IFacetedNavigable.providedBy(self.folder))
        dashboardcoll = api.content.create(id='dc1',
                                           type='DashboardCollection',
                                           title='Dashboard collection 1',
                                           container=self.folder)
        self.request.form['c1[]'] = dashboardcoll.UID()
        self.assertEquals(getCurrentCollection(self.folder), dashboardcoll)
        viewlet = DashboardDocumentGeneratorLinksViewlet(
            self.folder, self.request, None, None)
        viewlet.update()
        self.assertFalse(viewlet.available())
        self.assertFalse(viewlet.get_generable_templates())

        # add a PODTemplate, still not available
        api.content.create(id='template',
                           type='PODTemplate',
                           title='POD template',
                           container=self.portal)
        # need to clean memoize because available() calls
        # get_generable_templates that use it
        del IAnnotations(self.request)['plone.memoize']
        self.assertFalse(viewlet.available())
        self.assertFalse(viewlet.get_generable_templates())

        # add a DashboardPODTemplate, this time it is available
        dashtemplate = api.content.create(id='dashtemplate',
                                          type='DashboardPODTemplate',
                                          title='Dashboard template',
                                          container=self.portal)
        # clean memoize
        del IAnnotations(self.request)['plone.memoize']
        self.assertTrue(viewlet.available())
        self.assertEquals(len(viewlet.get_generable_templates()), 1)
        self.assertEquals(viewlet.get_generable_templates()[0].UID(),
                          dashtemplate.UID())

        # this viewlet will not be displayed if current context is not a faceted
        self.assertFalse(IFacetedNavigable.providedBy(self.folder2))
        self.assertTrue(IFacetedNavigable.providedBy(self.folder))
        # not faceted context
        viewlet = self._get_viewlet(
            context=self.folder2,
            manager_name='collective.eeafaceted.z3ctable.topabovenav',
            viewlet_name='dashboard-document-generation-link')
        self.assertIsNone(viewlet)
        # collection criterion not found
        viewlet = self._get_viewlet(
            context=self.folder,
            manager_name='collective.eeafaceted.z3ctable.topabovenav',
            viewlet_name='dashboard-document-generation-link')
        self.assertIsNotNone(viewlet)
        del IAnnotations(self.request)['plone.memoize']
        self.assertTrue(viewlet.available())
        criteria = ICriteria(self.folder).criteria
        index = [
            i for i, crit in enumerate(criteria)
            if crit.widget == u'collection-link'
        ][0]
        del criteria[index]  # we remove collectionwidget criterion
        self.assertFalse(viewlet.available())
        # no matter there are pod templates
        self.assertTrue(viewlet.get_generable_templates())
コード例 #16
0
 def is_faceted(self):
     """ Is faceted navigable?
     """
     return IFacetedNavigable.providedBy(self.context)
コード例 #17
0
 def _getParents(self, obj):
     ret = []
     while IFacetedNavigable.providedBy(obj.aq_inner.aq_parent):
         obj = obj.aq_inner.aq_parent
         ret.append(obj.UID())
     return ','.join(reversed(ret))
コード例 #18
0
 def available(self):
     """ Is this menu available?
     """
     return (IFacetedNavigable.providedBy(self.context)
             and checkPermission('eea.faceted.configure', self.context))