98 lines
2.7 KiB
Python
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
|