Use distinct class/interface for appendixes

This commit is contained in:
Cédric Messiant 2013-08-27 10:55:56 +02:00
parent 25a2cd9b2a
commit 7ee319a0c2
5 changed files with 47 additions and 6 deletions

View File

@ -23,7 +23,7 @@ class BaseTable(Table):
def values(self):
portal_catalog = getToolByName(self, 'portal_catalog')
folder_path = '/'.join(self.context.getPhysicalPath())
query = {'path': {'query' : folder_path},
query = {'path': {'query': folder_path},
'sort_on': 'getObjPositionInParent',
'sort_order': 'ascending'}
query.update(self.viewlet.contentFilter())
@ -35,6 +35,13 @@ class VersionsTable(BaseTable):
pass
class DmsAppendixTable(VersionsTable):
def setUpColumns(self):
columns = super(DmsAppendixTable, self).setUpColumns()
return [column for column in columns if column.__name__ != 'dms.state']
class TasksTable(BaseTable):
pass

View File

@ -2,7 +2,10 @@ from five import grok
from collective.dms.basecontent.dmsdocument import IDmsDocument
from collective.dms.basecontent import _
from collective.dms.basecontent.browser.listing import VersionsTable, TasksTable, InformationsTable
from collective.dms.basecontent.browser.listing import (VersionsTable,
TasksTable,
InformationsTable,
DmsAppendixTable)
from collective.dms.basecontent.browser.table import TableViewlet
@ -38,6 +41,7 @@ class VersionsViewlet(BaseViewlet):
portal_type = 'dmsmainfile'
label = _(u"Versions")
noresult_message = _(u"There is no version note for this document.")
def contentFilter(self):
return {'portal_type': self.portal_type,
'sort_on': 'getObjPositionInParent',
@ -50,6 +54,8 @@ class AppendixViewlet(BaseViewlet):
portal_type = 'dmsappendixfile'
label = _(u"Appendix")
noresult_message = _(u"There is no appendix for this document.")
__table__ = DmsAppendixTable
def contentFilter(self):
return {'portal_type': self.portal_type,
'sort_on': 'getObjPositionInParent',

View File

@ -51,6 +51,11 @@
name="schema_policy_dmsfile"
/>
<utility
factory=".dmsfile.DmsAppendixFileSchemaPolicy"
name="schema_policy_dmsappendixfile"
/>
<adapter
for=".dmsfile.IDmsFile"
provides="zope.filerepresentation.interfaces.IRawReadFile"

View File

@ -7,6 +7,7 @@ from five import grok
from zope import schema
from zope.annotation.interfaces import IAnnotations
from zope.interface import implements
from zope.lifecycleevent.interfaces import IObjectAddedEvent
from plone.autoform import directives as form
from plone.dexterity.content import Item
@ -17,7 +18,6 @@ from plone.supermodel import model
from plone.app.contenttypes.interfaces import IFile
from . import _
from zope.lifecycleevent.interfaces import IObjectAddedEvent
class IDmsFile(model.Schema, IFile):
@ -34,6 +34,7 @@ class IDmsFile(model.Schema, IFile):
required=True,
)
class DmsFile(Item):
"""DmsFile"""
implements(IDmsFile)
@ -57,6 +58,28 @@ class DmsFileSchemaPolicy(DexteritySchemaPolicy):
return (IDmsFile, )
class IDmsAppendixFile(model.Schema, IFile):
"""Schema for DmsAppendixFile"""
model.primary('file')
file = NamedBlobFile(
title=_(u"File"),
required=True,
)
class DmsAppendixFile(Item):
"""DmsAppendixFile"""
implements(IDmsAppendixFile)
__ac_local_roles_block__ = True
class DmsAppendixFileSchemaPolicy(DexteritySchemaPolicy):
"""Schema Policy for DmsAppendixFile"""
def bases(self, schemaName, tree):
return (IDmsAppendixFile, )
@default_value(field=IDmsFile['title'])
def titleDefaultValue(data):
container = data.context
@ -80,11 +103,11 @@ def update_higher_version(context, event):
from plone.dexterity.filerepresentation import ReadFileBase, DefaultWriteFile
from zope.component import adapts
from ZPublisher.Iterators import IStreamIterator
from zope.filerepresentation.interfaces import IRawWriteFile
from plone.memoize.instance import memoize
class DmsFileReadFile(ReadFileBase):
adapts(IDmsFile)

View File

@ -16,7 +16,7 @@
</property>
<property name="default_view_fallback">False</property>
<property name="add_permission">cmf.AddPortalContent</property>
<property name="klass">collective.dms.basecontent.dmsfile.DmsFile</property>
<property name="klass">collective.dms.basecontent.dmsfile.DmsAppendixFile</property>
<property name="behaviors">
<element value="plone.app.content.interfaces.INameFromTitle"/>
<element value="plone.app.dexterity.behaviors.metadata.IBasic"/>
@ -25,7 +25,7 @@
<property name="schema" />
<!-- DO NOT use a model_source or it removes manually added fields while reapplying the profile -->
<!--property name="model_source" /-->
<property name="schema_policy">schema_policy_dmsfile</property>
<property name="schema_policy">schema_policy_dmsappendixfile</property>
<alias from="(Default)" to="@@display-file"/>
<alias from="edit" to="@@edit"/>
<alias from="sharing" to="@@sharing"/>