provide editing of relation properties (order, relevance) in management interface

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3955 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2010-08-15 09:25:42 +00:00
parent 59ea8b368c
commit ae534d7bfc
7 changed files with 67 additions and 26 deletions

View file

@ -425,10 +425,10 @@ class ConceptConfigureView(ConceptView):
tokens = request.get('tokens', [])
for token in tokens:
parts = token.split(':')
token = parts[0]
cToken = parts[0]
if len(parts) > 1:
relToken = parts[1]
concept = self.loopsRoot.loopsTraverse(token)
concept = self.loopsRoot.loopsTraverse(cToken)
if action == 'assign':
assignAs = request.get('assignAs', 'child')
predicate = request.get('predicate') or None
@ -448,23 +448,40 @@ class ConceptConfigureView(ConceptView):
order, relevance)
else:
raise(BadRequest, 'Illegal assignAs parameter: %s.' % assignAs)
elif action == 'remove':
elif action in( 'remove',):
predicate = self.loopsRoot.loopsTraverse(relToken)
qualifier = request.get('qualifier')
if qualifier == 'parents':
self.context.deassignParent(concept, [predicate])
elif qualifier == 'children':
self.context.deassignChild(concept, [predicate])
elif qualifier == 'resources':
self.context.deassignResource(concept, [predicate])
elif qualifier == 'concepts':
self.context.deassignConcept(concept, [predicate])
else:
raise(BadRequest, 'Illegal qualifier: %s.' % qualifier)
if 'form.button.submit' in request:
if predicate == self.typePredicate:
continue
if qualifier == 'parents':
self.context.deassignParent(concept, [predicate])
elif qualifier == 'children':
self.context.deassignChild(concept, [predicate])
elif qualifier == 'resources':
self.context.deassignResource(concept, [predicate])
elif qualifier == 'concepts':
self.context.deassignConcept(concept, [predicate])
else:
raise(BadRequest, 'Illegal qualifier: %s.' % qualifier)
elif 'form.button.change_relations' in request:
self.changeRelation(concept, predicate, qualifier,
request.get('order.' + token),
request.get('relevance.' + token))
else:
raise(BadRequest, 'Illegal action: %s.' % action)
return True
def changeRelation(self, target, predicate, qualifier, order, relevance):
methodNames = dict(parents='getParentRelations',
children='getChildRelations',
resources='getResourceRelations',
concepts='getConceptRelations')
method = getattr(self.context, methodNames[qualifier])
for r in method([predicate], target):
r.order = int(order or 0)
r.relevance = float(relevance or 1.0)
def createAndAssign(self):
request = self.request
name = request.get('create.name')

View file

@ -5,7 +5,10 @@
<div metal:fill-slot="body">
<h1 tal:content="context/title">Concept Title</h1><br />
<h1 tal:content="context/title">Concept Title</h1>
<div tal:condition="not:request/edit_relations|nothing">
[<a href="?edit_relations=yes"
i18n:translate="">Edit Relations</a>]</div><br />
<div tal:define="items view/parents;
action string:remove;

View file

@ -5,7 +5,10 @@
<div metal:fill-slot="body">
<h1 tal:content="context/title">Concept Title</h1><br />
<h1 tal:content="context/title">Concept Title</h1>
<div tal:condition="not:request/edit_relations|nothing">
[<a href="?edit_relations=yes"
i18n:translate="">Edit Relations</a>]</div><br />
<div tal:define="items view/resources;
action string:remove;

View file

@ -749,5 +749,6 @@
/>
<include package=".skin" />
<include package=".lobo" />
</configure>

View file

@ -36,6 +36,11 @@
<td><span i18n:translate="">Creators</span>:</td>
<td tal:content="item/creators"></td>
</tr>
<tr tal:repeat="info item/additionalInfos">
<td><span i18n:translate=""
tal:content="info/label">Creators</span>:</td>
<td tal:content="info/value"></td>
</tr>
<tr>
<td colspan="2"><br />
<input type="button" value="Close" onclick="closeDialog()"

View file

@ -48,7 +48,7 @@
<td class="field">
<input class="formSelection"
type="checkbox" name="tokens:list" value=""
tal:condition="not:item/isProtected|nothing"
xxtal:condition="not:item/isProtected|nothing"
tal:attributes="value item/token" />
</td>
<td>
@ -78,14 +78,16 @@
<span tal:condition="not:editable"
tal:content="item/order" />
<input size="1"
tal:attributes="value item/order"
tal:attributes="value item/order;
name string:order.${item/token}"
tal:condition="editable" />
</td>
<td style="text-align: center">
<span tal:condition="not:editable"
tal:content="item/relevance" />
<input size="1"
tal:attributes="value item/relevance"
tal:attributes="value item/relevance;
name string:relevance.${item/token}"
tal:condition="editable" />
</td>
</tal:relation>
@ -97,10 +99,12 @@
i18n:attributes="value"
tal:attributes="value buttonText" />
<metal:buttons define-slot="specialButtons" />
<!--&nbsp;&nbsp;
<input class="context" type="submit" name="form.button.change_relations"
value="Change Relations"
i18n:attributes="value" />-->
<tal:change condition="python: showPredicate and editable">
&nbsp;&nbsp;
<input class="context" type="submit" name="form.button.change_relations"
value="Change Relations"
i18n:attributes="value" />
</tal:change>
</div>
</form>
</fieldset>

View file

@ -277,10 +277,10 @@ class ResourceConfigureView(ResourceView, ConceptConfigureView):
tokens = request.get('tokens', [])
for token in tokens:
parts = token.split(':')
token = parts[0]
cToken = parts[0]
if len(parts) > 1:
relToken = parts[1]
concept = self.loopsRoot.loopsTraverse(token)
concept = self.loopsRoot.loopsTraverse(cToken)
if action == 'assign':
predicate = request.get('predicate') or None
order = int(request.get('order') or 0)
@ -290,9 +290,17 @@ class ResourceConfigureView(ResourceView, ConceptConfigureView):
self.loopsRoot.loopsTraverse(predicate))
self.context.assignConcept(removeSecurityProxy(concept), predicate,
order, relevance)
elif action == 'remove':
elif action in ('remove',):
predicate = self.loopsRoot.loopsTraverse(relToken)
self.context.deassignConcept(concept, [predicate])
if 'form.button.submit' in request:
if predicate != self.typePredicate:
self.context.deassignConcept(concept, [predicate])
elif 'form.button.change_relations' in request:
order = request.get('order.' + token)
relevance = request.get('relevance.' + token)
for r in self.context.getConceptRelations([predicate], concept):
r.order = int(order or 0)
r.relevance = float(relevance or 1.0)
return True
def search(self):