custom folder type (#3758)

This commit is contained in:
Frédéric Péters 2013-11-27 11:36:43 +01:00
parent 53fc533d99
commit 72a4d81bc3
4 changed files with 77 additions and 1 deletions

View File

@ -2,6 +2,7 @@ from AccessControl import getSecurityManager
from zope.interface import implements from zope.interface import implements
from five import grok from five import grok
from zope import component from zope import component
from zope import schema
from zc.relation.interfaces import ICatalog from zc.relation.interfaces import ICatalog
from zope.app.intid.interfaces import IIntIds from zope.app.intid.interfaces import IIntIds
@ -16,12 +17,37 @@ import plone.app.contenttypes.interfaces
from plone.dexterity.interfaces import IDexterityContainer from plone.dexterity.interfaces import IDexterityContainer
from plone.app.contentlisting.interfaces import IContentListingObject 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 pfwbged.collection.searchview import ResultsTable
from collective.dms.thesaurus.keywordsfield import ThesaurusKeywords
from .link import ILink from .link import ILink
from . import _
class IFolder(model.Schema): 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): class Folder(Container):

View File

@ -28,7 +28,8 @@ def ContentTreeFieldWidget(field, request):
class ILink(model.Schema): class ILink(model.Schema):
""" """ """ """
folder = RelationChoice(title=_(u'Folder'), required=True, folder = RelationChoice(title=_(u'Folder'), required=True,
source=ObjPathSourceBinder(navigation_tree_query={'portal_type': ('Folder',)})) source=ObjPathSourceBinder(
navigation_tree_query={'portal_type': ('Folder', 'pfwbgedfolder',)}))
form.widget(folder=ContentTreeFieldWidget) form.widget(folder=ContentTreeFieldWidget)

View File

@ -2,4 +2,5 @@
<object name="portal_types" meta_type="Plone Types Tool"> <object name="portal_types" meta_type="Plone Types Tool">
<property name="title">Controls the available content types in your portal</property> <property name="title">Controls the available content types in your portal</property>
<object name="pfwbgedlink" meta_type="Dexterity FTI"/> <object name="pfwbgedlink" meta_type="Dexterity FTI"/>
<object name="pfwbgedfolder" meta_type="Dexterity FTI"/>
</object> </object>

View File

@ -0,0 +1,48 @@
<?xml version="1.0"?>
<object name="pfwbgedfolder" meta_type="Dexterity FTI" i18n:domain="plone"
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<property name="title" i18n:translate="">Classifying Folder</property>
<property name="icon_expr">string:${portal_url}/++resource++pfwbgedfolder_icon.png</property>
<property name="factory">pfwbgedfolder</property>
<property name="add_view_expr">string:${folder_url}/++add++pfwbgedfolder</property>
<property name="link_target"></property>
<property name="immediate_view">view</property>
<property name="global_allow">True</property>
<property name="filter_content_types">True</property>
<property name="allow_discussion">False</property>
<property name="default_view">view</property>
<property name="view_methods">
<element value="view"/>
</property>
<property name="default_view_fallback">False</property>
<property name="add_permission">cmf.AddPortalContent</property>
<property name="klass">pfwbged.folder.Folder</property>
<property name="behaviors">
<element value="plone.app.content.interfaces.INameFromTitle"/>
<element value="plone.app.dexterity.behaviors.metadata.IBasic"/>
</property>
<!-- Contained Types -->
<property name="filter_content_types">True</property>
<property name="allowed_content_types" purge="False">
<element value="pfwbgedlink"/>
</property>
<!-- DO NOT use a model_source or it removes manually added fields while reapplying the profile -->
<!--property name="model_source" /-->
<property name="schema">pfwbged.folder.IFolder</property>
<alias from="(Default)" to="(dynamic view)"/>
<alias from="edit" to="@@edit"/>
<alias from="sharing" to="@@sharing"/>
<alias from="view" to="(selected layout)"/>
<action title="View" action_id="view" category="object" condition_expr=""
description="" icon_expr="" link_target="" url_expr="string:${object_url}"
visible="True">
<permission value="View"/>
</action>
<action title="Edit" action_id="edit" category="object" condition_expr=""
description="" icon_expr="" link_target=""
url_expr="string:${object_url}/edit" visible="True">
<permission value="Modify portal content"/>
</action>
</object>