fix versioning bug (see BaseView.target)

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2137 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2007-11-01 16:02:23 +00:00
parent b5a8ddc1f9
commit 43d5639b55
5 changed files with 62 additions and 32 deletions

View file

@ -109,6 +109,11 @@ class BaseView(GenericView):
except ForbiddenAttribute: # ignore when testing
pass
@Lazy
def target(self):
# allow for having a separate object the view acts upon
return self.context
def setSkin(self, skinName):
skin = None
if skinName and IView.providedBy(self.context):
@ -279,33 +284,38 @@ class BaseView(GenericView):
@Lazy
def versionId(self):
versionable = IVersionable(self.context, None)
#versionable = IVersionable(self.context, None)
versionable = IVersionable(self.target, None)
return versionable and versionable.versionId or ''
@Lazy
def currentVersionId(self):
versionable = IVersionable(self.context, None)
#versionable = IVersionable(self.context, None)
versionable = IVersionable(self.target, None)
return versionable and versionable.currentVersion.versionId or ''
@Lazy
def hasVersions(self):
versionable = IVersionable(self.context, None)
#versionable = IVersionable(self.context, None)
versionable = IVersionable(self.target, None)
return versionable and len(versionable.versions) > 1 or False
@Lazy
def versionInfo(self):
if not self.useVersioning:
return None
context = self.context
versionable = IVersionable(context, None)
#context = self.context
#versionable = IVersionable(context, None)
target = self.target
versionable = IVersionable(target, None)
if versionable is None:
return ''
versionId = versionable.versionId
td = component.getUtility(ITranslationDomain, _._domain)
current = ((versionable.currentVersion == context)
current = ((versionable.currentVersion == target)
and td.translate(_(u'current'), context=self.request)
or u'')
released = ((versionable.releasedVersion == context)
released = ((versionable.releasedVersion == target)
and td.translate(_(u'released'), context=self.request)
or u'')
if not current and not released:

View file

@ -53,6 +53,7 @@ from loops import util
from loops.util import _
from loops.browser.common import BaseView
from loops.browser.concept import ConceptView
from loops.versioning.util import getVersion
node_macros = ViewPageTemplateFile('node_macros.pt')
@ -148,25 +149,33 @@ class NodeView(BaseView):
def targetObject(self):
# xxx: use virtualTargetObject
#return self.virtualTargetObject
return self.context.target
target = self.context.target
if target is not None:
target = getVersion(target, self.request)
return target
@Lazy
def target(self):
def targetObjectView(self):
obj = self.targetObject
if obj is not None:
basicView = zapi.getMultiAdapter((obj, self.request))
basicView._viewName = self.context.viewName
return basicView.view
#@Lazy
#def target(self):
# # obsolete and confusing - TODO: remove...
# return self.targetObjectView
@Lazy
def targetUrl(self):
t = self.target
t = self.targetObjectView
if t is not None:
return '%s/.target%s' % (self.url, t.uniqueId)
return ''
def renderTarget(self):
target = self.target
target = self.targetObjectView
return target is not None and target.render() or u''
@Lazy
@ -256,6 +265,15 @@ class NodeView(BaseView):
# virtual target support
@Lazy
def virtualTargetObject(self):
target = self.request.annotations.get('loops.view', {}).get('target')
if target is None:
target = self.context.target
if target is not None:
target = getVersion(target, self.request)
return target
def targetView(self, name='index.html', methodName='show'):
target = self.virtualTargetObject
if target is not None:
@ -286,13 +304,6 @@ class NodeView(BaseView):
def targetDownload(self):
return self.targetView('download.html', 'download')
@Lazy
def virtualTargetObject(self):
target = self.request.annotations.get('loops.view', {}).get('target')
if target is None:
target = self.context.target
return target
@Lazy
def virtualTarget(self):
obj = self.virtualTargetObject

View file

@ -23,7 +23,7 @@
tal:content="structure body">
The body
</div>
<div tal:define="target nocall:item/target"
<div tal:define="target nocall:item/targetObjectView"
tal:condition="nocall:target">
<tal:ignore condition="nothing">
<div metal:define-macro="editicons"
@ -70,7 +70,7 @@
ondblclick python: item.openEditWindow('configure.html')">
<span tal:content="structure body">Node Body</span>
</div>
<tal:concepts define="item nocall:item/target;
<tal:concepts define="item nocall:item/targetObjectView;
macro item/macro">
<div metal:use-macro="macro" />
</tal:concepts>
@ -131,7 +131,7 @@
<metal:resources define-macro="listresources"
tal:define="target nocall:item/target">
tal:define="target nocall:item/targetObjectView">
<div class="content-1"
tal:content="structure item/body"
tal:attributes="ondblclick python: item.openEditWindow();
@ -139,7 +139,7 @@
Listing
</div><br />
<div tal:attributes="ondblclick python: target.openEditWindow('resources.html')"
tal:define="item nocall:item/target"
tal:define="item nocall:item/targetObjectView"
tal:condition="nocall:target">
<div tal:repeat="related item/resources">
<a href="#"
@ -152,7 +152,7 @@
<metal:children define-macro="listchildren"
tal:define="target nocall:item/target">
tal:define="target nocall:item/targetObjectView">
<div class="content-1"
tal:content="structure item/body"
tal:attributes="ondblclick python:
@ -162,7 +162,7 @@
Listing
</div><br />
<div tal:attributes="ondblclick python: target.openEditWindow('configure.html')"
tal:define="item nocall:item/target"
tal:define="item nocall:item/targetObjectView"
tal:condition="nocall:target">
<div tal:repeat="related item/children">
<a href="#"

View file

@ -175,16 +175,20 @@ class Concept(Contained, Persistent):
def getParents(self, predicates=None):
return [r.first for r in self.getParentRelations(predicates)]
def assignChild(self, concept, predicate=None):
def assignChild(self, concept, predicate=None, order=0, relevance=1.0):
if predicate is None:
predicate = self.getConceptManager().getDefaultPredicate()
registry = zapi.getUtility(IRelationRegistry)
rel = ConceptRelation(self, concept, predicate)
registry.register(rel)
if order != 0:
rel.order = order
if relevance != 1.0:
rel.relevance = relevance
# TODO (?): avoid duplicates
registry.register(rel)
def assignParent(self, concept, predicate=None):
concept.assignChild(self, predicate)
def assignParent(self, concept, predicate=None, order=0, relevance=1.0):
concept.assignChild(self, predicate, order, relevance)
def deassignChild(self, child, predicates=None):
registry = zapi.getUtility(IRelationRegistry)
@ -205,12 +209,17 @@ class Concept(Contained, Persistent):
def getResources(self, predicates=None):
return [r.second for r in self.getResourceRelations(predicates)]
def assignResource(self, resource, predicate=None):
def assignResource(self, resource, predicate=None, order=0, relevance=1.0):
if predicate is None:
predicate = self.getConceptManager().getDefaultPredicate()
registry = zapi.getUtility(IRelationRegistry)
registry.register(ResourceRelation(self, resource, predicate))
rel = ResourceRelation(self, resource, predicate)
if order != 0:
rel.order = order
if relevance != 1.0:
rel.relevance = relevance
# TODO (?): avoid duplicates
registry.register(rel)
def deassignResource(self, resource, predicates=None):
registry = zapi.getUtility(IRelationRegistry)

View file

@ -199,9 +199,9 @@ class Resource(Image, Contained):
obj = getMaster(self)
return [r.first for r in obj.getConceptRelations(predicates)]
def assignConcept(self, concept, predicate=None):
def assignConcept(self, concept, predicate=None, order=0, relevance=1.0):
obj = getMaster(self)
concept.assignResource(obj, predicate)
concept.assignResource(obj, predicate, order, relevance)
def deassignConcept(self, concept, predicates=None):
obj = getMaster(self)