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 @@
+
+
+
+
+
+
+
+