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

188 lines
5.4 KiB
Python
Raw Normal View History

2013-07-19 20:49:51 +02:00
from AccessControl import getSecurityManager
2013-07-11 22:41:14 +02:00
from zope.interface import implements
from five import grok
2013-07-19 20:49:51 +02:00
from zope import component
2013-11-27 11:36:43 +01:00
from zope import schema
from zope.interface import Interface
2013-07-11 22:41:14 +02:00
from zc.relation.interfaces import ICatalog
from zope.app.intid.interfaces import IIntIds
2013-07-11 22:41:14 +02:00
from plone.dexterity.content import Container
from plone.uuid.interfaces import IUUID
2013-07-11 22:41:14 +02:00
from Acquisition import aq_parent
2013-07-11 22:41:14 +02:00
from plone.supermodel import model
from plone.app.layout.viewlets.interfaces import IBelowContentBody
import plone.app.contenttypes.interfaces
from plone.dexterity.interfaces import IDexterityContainer
2013-07-20 14:46:01 +02:00
from plone.app.contentlisting.interfaces import IContentListingObject
from plone import api
2013-11-27 16:40:31 +01:00
from plone.dexterity.browser.view import DefaultView
2013-11-27 11:36:43 +01:00
from collective.z3cform.rolefield.field import LocalRolesToPrincipals
from collective.dms.basecontent.widget import AjaxChosenMultiFieldWidget
from plone.autoform import directives as form
from plone.directives.form import default_value
2013-11-27 11:36:43 +01:00
import z3c.table.column
from pfwbged.collection.searchview import ResultsTable
2013-11-27 11:36:43 +01:00
from collective.dms.thesaurus.keywordsfield import ThesaurusKeywords
from collective.dms.basecontent.dmsdocument import IDmsDocument
2013-07-11 22:41:14 +02:00
2013-07-19 20:49:51 +02:00
from .link import ILink
2013-07-11 22:41:14 +02:00
2013-11-27 11:36:43 +01:00
from . import _
2013-07-11 22:41:14 +02:00
class IFolder(model.Schema):
""" """
2013-11-27 11:36:43 +01:00
treating_groups = LocalRolesToPrincipals(
title=_(u"Can edit"),
2013-11-27 11:36:43 +01:00
required=False,
roles_to_assign=('Editor', 'Contributor',),
2013-11-27 11:36:43 +01:00
value_type=schema.Choice(vocabulary=u'collective.dms.basecontent.treating_groups',)
)
form.widget(treating_groups=AjaxChosenMultiFieldWidget)
recipient_groups = LocalRolesToPrincipals(
title=_(u"Can view"),
2013-11-27 11:36:43 +01:00
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)
2013-07-11 22:41:14 +02:00
@default_value(field=IDmsDocument['treating_groups'])
@default_value(field=IFolder['treating_groups'])
def canEditDefaultValue(data):
try:
return data.context.treating_groups
except AttributeError:
return []
@default_value(field=IDmsDocument['recipient_groups'])
@default_value(field=IFolder['recipient_groups'])
def canEditDefaultValue(data):
try:
return data.context.recipient_groups
except AttributeError:
return []
2013-07-11 22:41:14 +02:00
class Folder(Container):
""" """
implements(IFolder)
def parent_folders(self):
parents = []
for id, item in self.contentItems():
if not ILink.providedBy(item):
continue
if item.folder.to_object:
parents.append(item.folder.to_object)
return parents
def child_folders_brains(self):
intids = component.getUtility(IIntIds)
intid_catalog = component.getUtility(ICatalog)
try:
intid = intids.getId(self)
except KeyError:
return []
children = []
uuids = []
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):
uuids.append(IUUID(document))
portal_catalog = api.portal.get_tool('portal_catalog')
return portal_catalog.searchResults({'UID': uuids})
def child_folders(self):
return [IContentListingObject(x) for x in self.child_folders_brains()]
def child_folders_objects(self):
return [x.getObject() for x in self.child_folders_brains()]
def intid(self):
intids = component.getUtility(IIntIds)
try:
return intids.getId(self)
except KeyError:
return None
grok.templatedir('templates')
grok.context(IDexterityContainer)
from collective.dms.basecontent.browser import column
2013-11-27 16:40:31 +01:00
class ClassifiedItems:
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 []
2013-07-19 20:49:51 +02:00
intids = component.getUtility(IIntIds)
intid_catalog = component.getUtility(ICatalog)
2013-07-16 14:51:39 +02:00
try:
intid = intids.getId(self.context)
except KeyError:
return []
2013-07-19 20:49:51 +02:00
uuids = []
2013-07-19 20:49:51 +02:00
sm = getSecurityManager()
for item in intid_catalog.findRelations({
'to_id': intid,
'from_interfaces_flattened': ILink}):
if item.isBroken():
continue
2013-07-19 20:49:51 +02:00
link = item.from_object
if not sm.checkPermission('View', link):
continue
document = aq_parent(link)
uuids.append(IUUID(document))
2013-07-19 20:49:51 +02:00
portal_catalog = api.portal.get_tool('portal_catalog')
children = portal_catalog.searchResults({'UID': uuids})
2013-11-27 16:40:31 +01:00
return [IContentListingObject(x) for x in children]
2013-11-27 16:40:31 +01:00
2014-01-22 13:46:41 +01:00
#class FolderViewlet(grok.Viewlet, ClassifiedItems):
# grok.context(plone.app.contenttypes.interfaces.IFolder)
# grok.template('foldersviewlet')
# grok.viewletmanager(IBelowContentBody)
# grok.order(15)
2013-11-27 16:40:31 +01:00
class FolderView(DefaultView, ClassifiedItems):
pass