fix removal of versions; apply also to versionable concepts
This commit is contained in:
parent
930249e057
commit
40cc2c4079
2 changed files with 16 additions and 13 deletions
|
@ -1,10 +1,7 @@
|
|||
<!-- $Id$ -->
|
||||
|
||||
<configure
|
||||
xmlns:zope="http://namespaces.zope.org/zope"
|
||||
xmlns:browser="http://namespaces.zope.org/browser"
|
||||
i18n_domain="zope"
|
||||
>
|
||||
i18n_domain="zope">
|
||||
|
||||
<zope:adapter factory="loops.versioning.versionable.VersionableResource"
|
||||
trusted="True" />
|
||||
|
@ -19,8 +16,12 @@
|
|||
<zope:subscriber
|
||||
for="loops.interfaces.IResource
|
||||
zope.app.container.interfaces.IObjectRemovedEvent"
|
||||
handler="loops.versioning.versionable.cleanupVersions"
|
||||
/>
|
||||
handler="loops.versioning.versionable.cleanupVersions" />
|
||||
|
||||
<zope:subscriber
|
||||
for="loops.interfaces.IConcept
|
||||
zope.app.container.interfaces.IObjectRemovedEvent"
|
||||
handler="loops.versioning.versionable.cleanupVersions" />
|
||||
|
||||
<!-- user interface -->
|
||||
|
||||
|
@ -28,7 +29,6 @@
|
|||
name="listversions"
|
||||
for="loops.interfaces.IResource"
|
||||
class="loops.versioning.browser.ListVersions"
|
||||
permission="zope.View"
|
||||
/>
|
||||
permission="zope.View" />
|
||||
|
||||
</configure>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2012 Helmut Merz helmutm@cy55.de
|
||||
# Copyright (c) 2014 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -222,23 +222,26 @@ class VersionableResource(object):
|
|||
|
||||
|
||||
def cleanupVersions(context, event):
|
||||
""" Called upon deletion of a resource.
|
||||
""" Called upon deletion of a resource or concept.
|
||||
"""
|
||||
vContext = IVersionable(context, None)
|
||||
if vContext is None:
|
||||
return
|
||||
rm = context.getLoopsRoot().getResourceManager()
|
||||
#rm = context.getLoopsRoot().getResourceManager()
|
||||
rm = getParent(context)
|
||||
if context == vContext.master:
|
||||
toBeDeleted = []
|
||||
for v in vContext.versions.values():
|
||||
if v != context:
|
||||
toBeDeleted.append(getName(v))
|
||||
for name in toBeDeleted:
|
||||
# TODO: notify(ObjectRemovedEvent(rm[name]))
|
||||
del rm[name]
|
||||
else:
|
||||
vId = vContext.versionId
|
||||
vMaster = IVersionable(vContext.master)
|
||||
del vMaster.versions[vId]
|
||||
vMaster = vContext.versionableMaster
|
||||
if vId in vMaster.versions:
|
||||
del vMaster.versions[vId]
|
||||
if vMaster.getVersioningAttribute('currentVersion', None) == context:
|
||||
newCurrent = sorted(vMaster.versions.items())[-1][1]
|
||||
vMaster.setVersioningAttribute('currentVersion', newCurrent)
|
||||
|
|
Loading…
Add table
Reference in a new issue