This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
pfwbged.folder/src/pfwbged/folder/link.py

98 lines
2.7 KiB
Python

from AccessControl import getSecurityManager
from zope.interface import Interface, implements, implementer
from zope.cachedescriptors.property import CachedProperty
from five import grok
from plone.directives import form
from plone.dexterity.content import Item
from plone.supermodel import model
from plone.formwidget.contenttree import ObjPathSourceBinder
from plone import api
from z3c.relationfield.schema import RelationChoice
from . import _
from plone.formwidget.contenttree.widget import ContentTreeWidget
import z3c.form.widget
@implementer(z3c.form.interfaces.IFieldWidget)
def ContentTreeFieldWidget(field, request):
tree_widget = ContentTreeWidget(request)
tree_widget.show_all_content_types = False
return z3c.form.widget.FieldWidget(field, tree_widget)
class ILink(model.Schema):
""" """
folder = RelationChoice(title=_(u'Folder'), required=True,
source=ObjPathSourceBinder(
navigation_tree_query={'portal_type': ('Folder', 'pfwbgedfolder',)}))
form.widget(folder=ContentTreeFieldWidget)
class Link(Item):
""" """
implements(ILink)
from collective.dms.basecontent.dmsdocument import IDmsDocument
grok.templatedir('templates')
grok.context(IDmsDocument)
from collective.dms.basecontent.browser.viewlets import BaseViewlet
from collective.dms.basecontent.browser import column
from collective.dms.basecontent.browser.table import Table
class LinksTable(Table):
@CachedProperty
def values(self):
links = []
sm = getSecurityManager()
portal_catalog = api.portal.get_tool('portal_catalog')
folder_path = '/'.join(self.context.getPhysicalPath())
query = {'path': {'query' : folder_path},
'portal_type': 'pfwbgedlink',
'sort_on': 'sortable_title',
'sort_order': 'ascending'}
results = portal_catalog.searchResults(query)
for brain in results:
link = brain.getObject()
target = link.folder.to_object
if sm.checkPermission('View', target):
links.append(brain)
return links
class TitleColumn(column.TitleColumn):
grok.name('dms.title')
grok.adapts(Interface, Interface, LinksTable)
def getLinkContent(self, item):
t = item.getObject().folder.to_object.Title()
if isinstance(t, str):
t = unicode(t, 'utf-8')
return t
def getLinkURL(self, item):
return item.getObject().folder.to_object.absolute_url()
class DeleteColumn(column.DeleteColumn):
grok.name('dms.delete')
grok.adapts(Interface, Interface, LinksTable)
class LinkViewlet(BaseViewlet):
grok.order(15)
label = _(u"Filed in folders")
__table__ = LinksTable