From 4703556bbe83a2c92018bc8245bc64904a7691c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Mon, 2 Dec 2013 15:06:07 +0100 Subject: [PATCH] add portlet to navigate between classifying folders (#3779) --- src/pfwbged/folder/configure.zcml | 10 +++++ src/pfwbged/folder/folder.py | 34 ++++++++++++++ src/pfwbged/folder/portlet.pt | 25 +++++++++++ src/pfwbged/folder/portlet.py | 45 +++++++++++++++++++ .../folder/profiles/default/portlets.xml | 16 +++++++ 5 files changed, 130 insertions(+) create mode 100644 src/pfwbged/folder/portlet.pt create mode 100644 src/pfwbged/folder/portlet.py create mode 100644 src/pfwbged/folder/profiles/default/portlets.xml diff --git a/src/pfwbged/folder/configure.zcml b/src/pfwbged/folder/configure.zcml index 8772d64..18f695f 100644 --- a/src/pfwbged/folder/configure.zcml +++ b/src/pfwbged/folder/configure.zcml @@ -5,6 +5,7 @@ xmlns:i18n="http://namespaces.zope.org/i18n" xmlns:genericsetup="http://namespaces.zope.org/genericsetup" xmlns:browser="http://namespaces.zope.org/browser" + xmlns:plone="http://namespaces.plone.org/plone" i18n_domain="pfwbged.folder"> @@ -38,4 +39,13 @@ permission="zope2.View" /> + + diff --git a/src/pfwbged/folder/folder.py b/src/pfwbged/folder/folder.py index ac65802..7a805f8 100644 --- a/src/pfwbged/folder/folder.py +++ b/src/pfwbged/folder/folder.py @@ -65,6 +65,40 @@ class Folder(Container): """ """ implements(IFolder) + def parent_folders(self): + parents = [] + for id, item in self.contentItems(): + if not ILink.providedBy(item): + continue + parents.append(item.folder.to_object) + return parents + + def child_folders(self): + intids = component.getUtility(IIntIds) + intid_catalog = component.getUtility(ICatalog) + try: + intid = intids.getId(self) + except KeyError: + return [] + + children = [] + sm = getSecurityManager() + for item in intid_catalog.findRelations({ + 'to_id': intid, + 'from_interfaces_flattened': ILink}): + if item.isBroken(): + continue + + link = item.from_object + if not sm.checkPermission('View', link): + continue + + document = aq_parent(link) + if IFolder.providedBy(document): + children.append(IContentListingObject(document)) + + return children + grok.templatedir('templates') grok.context(IDexterityContainer) diff --git a/src/pfwbged/folder/portlet.pt b/src/pfwbged/folder/portlet.pt new file mode 100644 index 0000000..9b78dbb --- /dev/null +++ b/src/pfwbged/folder/portlet.pt @@ -0,0 +1,25 @@ +
+
+ + +
+
+ + + +title + + + +
+
+ + +
+
diff --git a/src/pfwbged/folder/portlet.py b/src/pfwbged/folder/portlet.py new file mode 100644 index 0000000..30d32aa --- /dev/null +++ b/src/pfwbged/folder/portlet.py @@ -0,0 +1,45 @@ +from zope import schema +from zope.formlib import form +from zope.interface import implements +from zope.component import getMultiAdapter +from plone.app.portlets.portlets import base +from plone.portlets.interfaces import IPortletDataProvider +from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile +from Products.CMFCore.utils import getToolByName + +from . import _ +from folder import IFolder + + +class INavigationPortlet(IPortletDataProvider): + ''' ''' + + +class Assignment(base.Assignment): + implements(INavigationPortlet) + + +class Renderer(base.Renderer): + render = ViewPageTemplateFile('portlet.pt') + + def title(self): + return _('Folder Navigation') + + @property + def available(self): + return IFolder.providedBy(self.context) + + +class AddForm(base.AddForm): + form_fields = form.Fields(INavigationPortlet) + label = _(u"Add Folder Navigation Portlet") + description = _(u"This portlet display folder navigation elements.") + + def create(self, data): + return Assignment() + + +class EditForm(base.EditForm): + form_fields = form.Fields(INavigationPortlet) + label = _(u"Edit Folder Navigation Portlet") + description = _(u"This portlet display folder navigation elements.") diff --git a/src/pfwbged/folder/profiles/default/portlets.xml b/src/pfwbged/folder/profiles/default/portlets.xml new file mode 100644 index 0000000..9ed5b3d --- /dev/null +++ b/src/pfwbged/folder/profiles/default/portlets.xml @@ -0,0 +1,16 @@ + + + + + + + +