diff --git a/browser/concept_macros.pt b/browser/concept_macros.pt
index dfbf97b..74d805a 100644
--- a/browser/concept_macros.pt
+++ b/browser/concept_macros.pt
@@ -103,8 +103,12 @@
Type |
-
- 1.1
+ |
+ 1.1
|
Type
diff --git a/browser/node_macros.pt b/browser/node_macros.pt
index 4a422d9..4d2b004 100644
--- a/browser/node_macros.pt
+++ b/browser/node_macros.pt
@@ -32,7 +32,7 @@
diff --git a/browser/resource.py b/browser/resource.py
index 673cca4..1ed3ad4 100644
--- a/browser/resource.py
+++ b/browser/resource.py
@@ -36,12 +36,14 @@ from zope.security import canAccess, canWrite
from zope.security.proxy import removeSecurityProxy
from cybertools.typology.interfaces import IType
-from loops.interfaces import IBaseResource, IDocument, IMediaAsset, ITextDocument
from loops.browser.common import EditForm, BaseView, Action
from loops.browser.concept import ConceptRelationView, ConceptConfigureView
from loops.browser.node import NodeView, node_macros
-from loops.interfaces import ITypeConcept
from loops.browser.util import html_quote
+from loops.interfaces import IBaseResource, IDocument, IMediaAsset, ITextDocument
+from loops.interfaces import ITypeConcept
+from loops.versioning.browser import version_macros
+from loops.versioning.interfaces import IVersionable
renderingFactories = {
'text/plain': 'zope.source.plaintext',
@@ -103,6 +105,13 @@ class ResourceView(BaseView):
cont.macros.register('portlet_right', 'related', title='Related Items',
subMacro=self.template.macros['related'],
position=0, info=self)
+ if not IUnauthenticatedPrincipal.providedBy(self.request.principal):
+ versionable = IVersionable(self.context, None)
+ if versionable is not None and len(versionable.versions) > 1:
+ cont.macros.register('portlet_right', 'versions',
+ title='Version ' + versionable.versionId,
+ subMacro=version_macros.macros['portlet_versions'],
+ position=1, info=self)
@Lazy
def view(self):
diff --git a/browser/resource_macros.pt b/browser/resource_macros.pt
index 73edd6a..13bff18 100644
--- a/browser/resource_macros.pt
+++ b/browser/resource_macros.pt
@@ -58,7 +58,7 @@
|
+ tal:attributes="href string:$url/external_edit?version=this">
Open for editing
diff --git a/query.py b/query.py
index 95d2bd3..febd019 100644
--- a/query.py
+++ b/query.py
@@ -32,6 +32,7 @@ from cybertools.typology.interfaces import IType
from loops.interfaces import IConcept
from loops.common import AdapterBase
from loops.type import TypeInterfaceSourceList
+from loops.versioning.util import getVersion
from loops import util
from loops.util import _
@@ -101,7 +102,7 @@ class BaseQuery(object):
queue.append(child)
for c in concepts:
result.add(c)
- result.update(c.getResources())
+ result.update(getVersion(r) for r in c.getResources())
return result
@@ -136,7 +137,9 @@ class FullQuery(BaseQuery):
result = result.intersection(rc)
else:
result = rc
- result = set(r for r in result if r.getLoopsRoot() == self.loopsRoot)
+ result = set(r for r in result
+ if r.getLoopsRoot() == self.loopsRoot
+ and getVersion(r) == r)
return result
diff --git a/search/search.pt b/search/search.pt
index 7a7de0c..6ae8da5 100644
--- a/search/search.pt
+++ b/search/search.pt
@@ -50,6 +50,7 @@
Title |
Type |
+ V |
Size |
Modification Date |
@@ -60,11 +61,18 @@
description row/description">
-
|
Type |
+
+ 1.1
+ |
Size
|
diff --git a/versioning/browser.py b/versioning/browser.py
index 8d0bb3a..ea64db5 100644
--- a/versioning/browser.py
+++ b/versioning/browser.py
@@ -32,23 +32,17 @@ from loops.versioning.interfaces import IVersionable
from loops.versioning.util import getVersion
+version_macros = ViewPageTemplateFile('version_macros.pt')
+
+
class ListVersions(BaseView):
- template = ViewPageTemplateFile('version_macros.pt')
+ template = version_macros
@Lazy
def macro(self):
return self.template.macros['versions']
- def __init__(self, context, request):
- super(ListVersions, self).__init__(context, request)
- cont = self.controller
- if (cont is not None and not IUnauthenticatedPrincipal.providedBy(
- self.request.principal)):
- cont.macros.register('portlet_right', 'versions', title='Versions',
- subMacro=self.template.macros['portlet_versions'],
- info=self)
-
def versions(self):
versionable = IVersionable(self.context)
versions = versionable.versions
diff --git a/versioning/interfaces.py b/versioning/interfaces.py
index 0011c12..1241dea 100644
--- a/versioning/interfaces.py
+++ b/versioning/interfaces.py
@@ -43,6 +43,11 @@ class IVersionable(Interface):
'version-independent attributes and central '
'versioning metadata')
+ parent = Attribute(u'The version this one was created from')
+
+ comment = Attribute(u'Somme informative text provided when creating '
+ 'this version')
+
# attributes taken from the master version:
versions = Attribute(u'A dictionary of all versions of this object')
diff --git a/versioning/util.py b/versioning/util.py
index c96bb79..e6f6438 100644
--- a/versioning/util.py
+++ b/versioning/util.py
@@ -25,11 +25,11 @@ $Id$
from loops.versioning.interfaces import IVersionable
-def getVersion(obj, request):
+def getVersion(obj, request=None):
""" Check if another version should be used for the object
provided and return it.
"""
- versionRequest = request.form.get('version')
+ versionRequest = request and request.get('version') or None
if versionRequest == 'this':
# we really want this object, not another version
return obj
@@ -54,3 +54,10 @@ def getMaster(obj):
return obj
return versionable.master
+
+def cleanupVersionsOnList(lst):
+ result = []
+ for el in lst:
+ result.append(el)
+ return result
+
diff --git a/versioning/version_macros.pt b/versioning/version_macros.pt
index 83e9d41..5534c9b 100644
--- a/versioning/version_macros.pt
+++ b/versioning/version_macros.pt
@@ -3,6 +3,7 @@
ondblclick python: item.openEditWindow('resources.html')"
tal:define="versions python: list(item.versions())"
tal:condition="versions">
+ Title
Versions
@@ -18,7 +19,7 @@
Resource Title
@@ -42,13 +43,11 @@
-
+
-
diff --git a/versioning/versionable.py b/versioning/versionable.py
index 181fa9f..c498284 100644
--- a/versioning/versionable.py
+++ b/versioning/versionable.py
@@ -91,6 +91,14 @@ class VersionableResource(object):
""" The adapted master... """
return IVersionable(self.master)
+ @Lazy
+ def parent(self):
+ return self.getVersioningAttribute('parent', None)
+
+ @Lazy
+ def comment(self):
+ return self.getVersioningAttribute('comment', u'')
+
@property
def versions(self):
return self.versionableMaster.getVersioningAttribute('versions', {})
@@ -104,7 +112,7 @@ class VersionableResource(object):
m = self.versionableMaster
return self.versionableMaster.getVersioningAttribute('releasedVersion', None)
- def createVersion(self, level=1):
+ def createVersion(self, level=1, comment=u''):
context = self.context
versionableMaster = self.versionableMaster
# get the new version numbers
@@ -123,6 +131,8 @@ class VersionableResource(object):
versionableObj.setVersioningAttribute('versionNumbers', tuple(vn))
versionableObj.setVersioningAttribute('variantIds', self.variantIds)
versionableObj.setVersioningAttribute('master', self.master)
+ versionableObj.setVersioningAttribute('parent', context)
+ versionableObj.setVersioningAttribute('comment', comment)
# generate name for new object, register in parent
versionId = versionableObj.versionId
name = self.generateName(getName(context),
| |