make number and labels of version levels configurable
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@4044 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
499f86848b
commit
b55a2f8952
7 changed files with 47 additions and 8 deletions
|
@ -487,6 +487,10 @@ class BaseView(GenericView, I18NView):
|
||||||
|
|
||||||
# versioning
|
# versioning
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def versionable(self):
|
||||||
|
return IVersionable(self.target, None)
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def useVersioning(self):
|
def useVersioning(self):
|
||||||
if self.globalOptions('useVersioning'):
|
if self.globalOptions('useVersioning'):
|
||||||
|
@ -495,6 +499,13 @@ class BaseView(GenericView, I18NView):
|
||||||
if options:
|
if options:
|
||||||
return 'useVersioning' in options.value
|
return 'useVersioning' in options.value
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def versionLevels(self):
|
||||||
|
if self.versionable is not None:
|
||||||
|
return reversed([dict(token=idx, label=label)
|
||||||
|
for idx, label in enumerate(self.versionable.versionLevels)])
|
||||||
|
return []
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def versionId(self):
|
def versionId(self):
|
||||||
versionable = IVersionable(self.target, None)
|
versionable = IVersionable(self.target, None)
|
||||||
|
|
|
@ -617,7 +617,8 @@ class EditObject(FormController, I18NView):
|
||||||
form = self.request.form
|
form = self.request.form
|
||||||
if form.get('version.create'):
|
if form.get('version.create'):
|
||||||
versionable = IVersionable(obj)
|
versionable = IVersionable(obj)
|
||||||
level = int(form.get('version.level', 1))
|
#level = int(form.get('version.level', 1))
|
||||||
|
level = int(form.get('version.level', 0))
|
||||||
version = versionable.createVersion(level)
|
version = versionable.createVersion(level)
|
||||||
notify(ObjectCreatedEvent(version))
|
notify(ObjectCreatedEvent(version))
|
||||||
return version
|
return version
|
||||||
|
|
|
@ -231,9 +231,12 @@
|
||||||
<label style="display: inline"
|
<label style="display: inline"
|
||||||
for="version.create"><span i18n:translate="">
|
for="version.create"><span i18n:translate="">
|
||||||
New version</span>:</label>
|
New version</span>:</label>
|
||||||
<select name="version.level">
|
<select name="version.level"
|
||||||
<option value="1" i18n:translate="">minor</option>
|
tal:condition="python: len(view.versionLevels) > 1">
|
||||||
<option value="0" i18n:translate="">major</option>
|
<option tal:repeat="level view/versionLevels"
|
||||||
|
i18n:translate=""
|
||||||
|
tal:attributes="value level/token"
|
||||||
|
tal:content="level/label" />
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -29,6 +29,10 @@ configuration):
|
||||||
>>> len(concepts) + len(resources)
|
>>> len(concepts) + len(resources)
|
||||||
18
|
18
|
||||||
|
|
||||||
|
>>> loopsRoot = site['loops']
|
||||||
|
>>> #loopsRoot.options = ['useVersioning:rev']
|
||||||
|
>>> loopsRoot.options = ['useVersioning']
|
||||||
|
|
||||||
|
|
||||||
External Collections
|
External Collections
|
||||||
====================
|
====================
|
||||||
|
|
|
@ -31,6 +31,9 @@ configuration):
|
||||||
>>> len(concepts) + len(resources)
|
>>> len(concepts) + len(resources)
|
||||||
23
|
23
|
||||||
|
|
||||||
|
>>> loopsRoot = site['loops']
|
||||||
|
>>> loopsRoot.options = ['useVersioning']
|
||||||
|
|
||||||
|
|
||||||
Version Information
|
Version Information
|
||||||
===================
|
===================
|
||||||
|
@ -46,6 +49,8 @@ adapter on the object.
|
||||||
>>> d001.title
|
>>> d001.title
|
||||||
u'Doc 001'
|
u'Doc 001'
|
||||||
>>> vD001 = IVersionable(d001)
|
>>> vD001 = IVersionable(d001)
|
||||||
|
>>> vD001.versionLevels
|
||||||
|
['major', 'minor']
|
||||||
|
|
||||||
If there aren't any versions associated with the object we get the default
|
If there aren't any versions associated with the object we get the default
|
||||||
values:
|
values:
|
||||||
|
|
|
@ -29,6 +29,7 @@ from loops.interfaces import IResource, IIndexAttributes
|
||||||
from loops.common import LoopsDCAdapter
|
from loops.common import LoopsDCAdapter
|
||||||
from loops.concept import Concept
|
from loops.concept import Concept
|
||||||
from loops.concept import IndexAttributes as ConceptIndexAttributes
|
from loops.concept import IndexAttributes as ConceptIndexAttributes
|
||||||
|
from loops.config.base import LoopsOptions
|
||||||
from loops.interfaces import ILoopsObject, IConcept
|
from loops.interfaces import ILoopsObject, IConcept
|
||||||
from loops.resource import Resource
|
from loops.resource import Resource
|
||||||
from loops.resource import IndexAttributes as ResourceIndexAttributes
|
from loops.resource import IndexAttributes as ResourceIndexAttributes
|
||||||
|
@ -55,6 +56,7 @@ class TestSite(object):
|
||||||
component.provideAdapter(ZDCAnnotatableAdapter, (ILoopsObject,), IZopeDublinCore)
|
component.provideAdapter(ZDCAnnotatableAdapter, (ILoopsObject,), IZopeDublinCore)
|
||||||
component.provideAdapter(AttributeAnnotations, (ILoopsObject,))
|
component.provideAdapter(AttributeAnnotations, (ILoopsObject,))
|
||||||
component.provideAdapter(LoopsDCAdapter, (IConcept,), IZopeDublinCore)
|
component.provideAdapter(LoopsDCAdapter, (IConcept,), IZopeDublinCore)
|
||||||
|
component.provideAdapter(LoopsOptions)
|
||||||
|
|
||||||
component.provideAdapter(ConceptType)
|
component.provideAdapter(ConceptType)
|
||||||
component.provideAdapter(ResourceType)
|
component.provideAdapter(ResourceType)
|
||||||
|
|
|
@ -29,9 +29,10 @@ from zope.cachedescriptors.property import Lazy
|
||||||
from zope.schema.interfaces import IField
|
from zope.schema.interfaces import IField
|
||||||
from zope.traversing.api import getName, getParent
|
from zope.traversing.api import getName, getParent
|
||||||
|
|
||||||
|
from cybertools.meta.interfaces import IOptions
|
||||||
from cybertools.text.mimetypes import extensions
|
from cybertools.text.mimetypes import extensions
|
||||||
from cybertools.typology.interfaces import IType
|
from cybertools.typology.interfaces import IType
|
||||||
from loops.common import adapted
|
from loops.common import adapted, baseObject
|
||||||
from loops.interfaces import IResource, IExternalFile
|
from loops.interfaces import IResource, IExternalFile
|
||||||
from loops.versioning.interfaces import IVersionable
|
from loops.versioning.interfaces import IVersionable
|
||||||
|
|
||||||
|
@ -67,13 +68,25 @@ class VersionableResource(object):
|
||||||
value = getattr(self.context, attrName, _not_found)
|
value = getattr(self.context, attrName, _not_found)
|
||||||
if value is _not_found:
|
if value is _not_found:
|
||||||
versions = OOBTree()
|
versions = OOBTree()
|
||||||
versions['1.1'] = self.context
|
versionId = '.'.join('1' for x in self.versionLevels)
|
||||||
|
#versions['1.1'] = self.context
|
||||||
|
versions[versionId] = self.context
|
||||||
setattr(self.context, attrName, versions)
|
setattr(self.context, attrName, versions)
|
||||||
#self.versions['1.1'] = self.context
|
|
||||||
|
@Lazy
|
||||||
|
def versionLevels(self):
|
||||||
|
options = IOptions(self.master.getLoopsRoot()).useVersioning
|
||||||
|
if options:
|
||||||
|
if isinstance(options, list):
|
||||||
|
return options
|
||||||
|
return ['major', 'minor']
|
||||||
|
return []
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def versionNumbers(self):
|
def versionNumbers(self):
|
||||||
return self.getVersioningAttribute('versionNumbers', (1, 1))
|
#return self.getVersioningAttribute('versionNumbers', (1, 1))
|
||||||
|
return self.getVersioningAttribute('versionNumbers',
|
||||||
|
tuple(1 for x in self.versionLevels))
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def variantIds(self):
|
def variantIds(self):
|
||||||
|
|
Loading…
Add table
Reference in a new issue