prepare for custom add form for versions (#3769)
This commit is contained in:
parent
e67f7c6387
commit
01412996bc
|
@ -0,0 +1,84 @@
|
|||
from five import grok
|
||||
from zope.interface import implements
|
||||
from zope.component import getUtility, createObject
|
||||
|
||||
from Acquisition import aq_inner, aq_base
|
||||
from Acquisition.interfaces import IAcquirer
|
||||
from zope.annotation.interfaces import IAnnotations
|
||||
|
||||
from zope import schema
|
||||
from plone.supermodel import model
|
||||
from z3c.form import field, form, button
|
||||
|
||||
from plone.dexterity.interfaces import IDexterityFTI
|
||||
from plone.dexterity.browser.add import DefaultAddView, DefaultAddForm
|
||||
from plone.namedfile.field import NamedBlobFile
|
||||
from plone.directives.form import default_value
|
||||
|
||||
|
||||
from collective.dms.basecontent.dmsfile import IDmsFile, DmsFile
|
||||
from collective.dms.basecontent.dmsdocument import IDmsDocument
|
||||
|
||||
from collective.dms.basecontent import _
|
||||
|
||||
|
||||
class IAddVersion(model.Schema):
|
||||
model.primary('file')
|
||||
file = NamedBlobFile(
|
||||
title=_(u"File"),
|
||||
required=True,
|
||||
)
|
||||
|
||||
label = schema.TextLine(
|
||||
title=_(u'Label'),
|
||||
required=False,
|
||||
)
|
||||
|
||||
signed = schema.Bool(
|
||||
title=_("Signed version"),
|
||||
default=False)
|
||||
|
||||
|
||||
class AddVersion(DefaultAddForm, form.AddForm):
|
||||
grok.name('adddmsmainfile')
|
||||
grok.context(IDmsDocument)
|
||||
|
||||
label = _(u'New version')
|
||||
description = u''
|
||||
schema = IAddVersion
|
||||
portal_type = 'dmsmainfile'
|
||||
|
||||
def create(self, data):
|
||||
fti = getUtility(IDexterityFTI, name=self.portal_type)
|
||||
|
||||
container = aq_inner(self.context)
|
||||
content = createObject(fti.factory)
|
||||
|
||||
# Note: The factory may have done this already, but we want to be sure
|
||||
# that the created type has the right portal type. It is possible
|
||||
# to re-define a type through the web that uses the factory from an
|
||||
# existing type, but wants a unique portal_type!
|
||||
|
||||
if hasattr(content, '_setPortalTypeName'):
|
||||
content._setPortalTypeName(fti.getId())
|
||||
|
||||
# Acquisition wrap temporarily to satisfy things like vocabularies
|
||||
# depending on tools
|
||||
if IAcquirer.providedBy(content):
|
||||
content = content.__of__(container)
|
||||
|
||||
content.signed = data.get('signed')
|
||||
content.label = data.get('label')
|
||||
content.file = data.get('file')
|
||||
|
||||
annotations = IAnnotations(container)
|
||||
if 'higher_version' not in annotations:
|
||||
content.title = u'1'
|
||||
else:
|
||||
content.title = unicode(annotations['higher_version'].value + 1)
|
||||
|
||||
for group in self.groups:
|
||||
form.applyChanges(group, content, data)
|
||||
|
||||
return aq_base(content)
|
||||
|
|
@ -63,4 +63,12 @@
|
|||
image="pfwb.medicalcertificate_icon.png"
|
||||
/>
|
||||
|
||||
<browser:page
|
||||
name="adddmsmainfile"
|
||||
for="..types.IDmsDocument"
|
||||
class=".adddmsfile.AddVersion"
|
||||
permission="cmf.AddPortalContent"
|
||||
/>
|
||||
|
||||
|
||||
</configure>
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0"?>
|
||||
<object name="dmsmainfile" meta_type="Dexterity FTI" i18n:domain="plone"
|
||||
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
|
||||
<property name="add_view_expr">string:${folder_url}/adddmsmainfile</property>
|
||||
</object>
|
Reference in New Issue