fix removal of versions; apply also to versionable concepts

This commit is contained in:
Helmut Merz 2014-03-05 09:31:37 +01:00
parent 930249e057
commit 40cc2c4079
2 changed files with 16 additions and 13 deletions

View file

@ -1,10 +1,7 @@
<!-- $Id$ -->
<configure <configure
xmlns:zope="http://namespaces.zope.org/zope" xmlns:zope="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser" xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="zope" i18n_domain="zope">
>
<zope:adapter factory="loops.versioning.versionable.VersionableResource" <zope:adapter factory="loops.versioning.versionable.VersionableResource"
trusted="True" /> trusted="True" />
@ -19,8 +16,12 @@
<zope:subscriber <zope:subscriber
for="loops.interfaces.IResource for="loops.interfaces.IResource
zope.app.container.interfaces.IObjectRemovedEvent" 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 --> <!-- user interface -->
@ -28,7 +29,6 @@
name="listversions" name="listversions"
for="loops.interfaces.IResource" for="loops.interfaces.IResource"
class="loops.versioning.browser.ListVersions" class="loops.versioning.browser.ListVersions"
permission="zope.View" permission="zope.View" />
/>
</configure> </configure>

View file

@ -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 # 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 # it under the terms of the GNU General Public License as published by
@ -222,22 +222,25 @@ class VersionableResource(object):
def cleanupVersions(context, event): def cleanupVersions(context, event):
""" Called upon deletion of a resource. """ Called upon deletion of a resource or concept.
""" """
vContext = IVersionable(context, None) vContext = IVersionable(context, None)
if vContext is None: if vContext is None:
return return
rm = context.getLoopsRoot().getResourceManager() #rm = context.getLoopsRoot().getResourceManager()
rm = getParent(context)
if context == vContext.master: if context == vContext.master:
toBeDeleted = [] toBeDeleted = []
for v in vContext.versions.values(): for v in vContext.versions.values():
if v != context: if v != context:
toBeDeleted.append(getName(v)) toBeDeleted.append(getName(v))
for name in toBeDeleted: for name in toBeDeleted:
# TODO: notify(ObjectRemovedEvent(rm[name]))
del rm[name] del rm[name]
else: else:
vId = vContext.versionId vId = vContext.versionId
vMaster = IVersionable(vContext.master) vMaster = vContext.versionableMaster
if vId in vMaster.versions:
del vMaster.versions[vId] del vMaster.versions[vId]
if vMaster.getVersioningAttribute('currentVersion', None) == context: if vMaster.getVersioningAttribute('currentVersion', None) == context:
newCurrent = sorted(vMaster.versions.items())[-1][1] newCurrent = sorted(vMaster.versions.items())[-1][1]