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/folder.py

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