102 lines
3.0 KiB
Python
102 lines
3.0 KiB
Python
from AccessControl import getSecurityManager
|
|
from zope.interface import implements
|
|
from five import grok
|
|
from zope import component
|
|
from zope import schema
|
|
|
|
from zc.relation.interfaces import ICatalog
|
|
from zope.app.intid.interfaces import IIntIds
|
|
|
|
from plone.dexterity.content import Container
|
|
|
|
from Acquisition import aq_parent
|
|
|
|
from plone.supermodel import model
|
|
from plone.app.layout.viewlets.interfaces import IBelowContentBody
|
|
import plone.app.contenttypes.interfaces
|
|
from plone.dexterity.interfaces import IDexterityContainer
|
|
from plone.app.contentlisting.interfaces import IContentListingObject
|
|
|
|
from collective.z3cform.rolefield.field import LocalRolesToPrincipals
|
|
from collective.dms.basecontent.widget import AjaxChosenMultiFieldWidget
|
|
from plone.autoform import directives as form
|
|
|
|
from pfwbged.collection.searchview import ResultsTable
|
|
from collective.dms.thesaurus.keywordsfield import ThesaurusKeywords
|
|
|
|
|
|
from .link import ILink
|
|
|
|
from . import _
|
|
|
|
class IFolder(model.Schema):
|
|
""" """
|
|
treating_groups = LocalRolesToPrincipals(
|
|
title=_(u"Treating groups"),
|
|
required=False,
|
|
roles_to_assign=('Editor',),
|
|
value_type=schema.Choice(vocabulary=u'collective.dms.basecontent.treating_groups',)
|
|
)
|
|
form.widget(treating_groups=AjaxChosenMultiFieldWidget)
|
|
|
|
recipient_groups = LocalRolesToPrincipals(
|
|
title=_(u"Recipient groups"),
|
|
required=False,
|
|
roles_to_assign=('Reader',),
|
|
value_type=schema.Choice(vocabulary=u'collective.dms.basecontent.recipient_groups')
|
|
)
|
|
form.widget(recipient_groups=AjaxChosenMultiFieldWidget)
|
|
|
|
keywords = ThesaurusKeywords(title=_(u'Keywords'), required=False)
|
|
|
|
|
|
class Folder(Container):
|
|
""" """
|
|
implements(IFolder)
|
|
|
|
grok.templatedir('templates')
|
|
grok.context(IDexterityContainer)
|
|
|
|
|
|
class FolderViewlet(grok.Viewlet):
|
|
grok.context(plone.app.contenttypes.interfaces.IFolder)
|
|
grok.template('foldersviewlet')
|
|
grok.viewletmanager(IBelowContentBody)
|
|
grok.order(15)
|
|
|
|
@property
|
|
def table(self):
|
|
table = ResultsTable(self.context, self.request)
|
|
table.values = self.documents()
|
|
table.update()
|
|
return table
|
|
|
|
def documents(self):
|
|
if self.context.id == 'documents' and aq_parent(self.context).portal_type == 'Plone Site':
|
|
# never return anything in the main documents folder
|
|
return []
|
|
|
|
intids = component.getUtility(IIntIds)
|
|
intid_catalog = component.getUtility(ICatalog)
|
|
try:
|
|
intid = intids.getId(self.context)
|
|
except KeyError:
|
|
return []
|
|
|
|
documents = []
|
|
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)
|
|
documents.append(IContentListingObject(document))
|
|
|
|
return documents
|