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', []) tokens = request.get('tokens', [])
for token in tokens: for token in tokens:
parts = token.split(':') parts = token.split(':')
token = parts[0] cToken = parts[0]
if len(parts) > 1: if len(parts) > 1:
relToken = parts[1] relToken = parts[1]
concept = self.loopsRoot.loopsTraverse(token) concept = self.loopsRoot.loopsTraverse(cToken)
if action == 'assign': if action == 'assign':
assignAs = request.get('assignAs', 'child') assignAs = request.get('assignAs', 'child')
predicate = request.get('predicate') or None predicate = request.get('predicate') or None
@ -448,23 +448,40 @@ class ConceptConfigureView(ConceptView):
order, relevance) order, relevance)
else: else:
raise(BadRequest, 'Illegal assignAs parameter: %s.' % assignAs) raise(BadRequest, 'Illegal assignAs parameter: %s.' % assignAs)
elif action == 'remove': elif action in( 'remove',):
predicate = self.loopsRoot.loopsTraverse(relToken) predicate = self.loopsRoot.loopsTraverse(relToken)
qualifier = request.get('qualifier') qualifier = request.get('qualifier')
if qualifier == 'parents': if 'form.button.submit' in request:
self.context.deassignParent(concept, [predicate]) if predicate == self.typePredicate:
elif qualifier == 'children': continue
self.context.deassignChild(concept, [predicate]) if qualifier == 'parents':
elif qualifier == 'resources': self.context.deassignParent(concept, [predicate])
self.context.deassignResource(concept, [predicate]) elif qualifier == 'children':
elif qualifier == 'concepts': self.context.deassignChild(concept, [predicate])
self.context.deassignConcept(concept, [predicate]) elif qualifier == 'resources':
else: self.context.deassignResource(concept, [predicate])
raise(BadRequest, 'Illegal qualifier: %s.' % qualifier) 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: else:
raise(BadRequest, 'Illegal action: %s.' % action) raise(BadRequest, 'Illegal action: %s.' % action)
return True 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): def createAndAssign(self):
request = self.request request = self.request
name = request.get('create.name') name = request.get('create.name')

View file

@ -5,7 +5,10 @@
<div metal:fill-slot="body"> <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; <div tal:define="items view/parents;
action string:remove; action string:remove;

View file

@ -5,7 +5,10 @@
<div metal:fill-slot="body"> <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; <div tal:define="items view/resources;
action string:remove; action string:remove;

View file

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

View file

@ -36,6 +36,11 @@
<td><span i18n:translate="">Creators</span>:</td> <td><span i18n:translate="">Creators</span>:</td>
<td tal:content="item/creators"></td> <td tal:content="item/creators"></td>
</tr> </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> <tr>
<td colspan="2"><br /> <td colspan="2"><br />
<input type="button" value="Close" onclick="closeDialog()" <input type="button" value="Close" onclick="closeDialog()"

View file

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

View file

@ -277,10 +277,10 @@ class ResourceConfigureView(ResourceView, ConceptConfigureView):
tokens = request.get('tokens', []) tokens = request.get('tokens', [])
for token in tokens: for token in tokens:
parts = token.split(':') parts = token.split(':')
token = parts[0] cToken = parts[0]
if len(parts) > 1: if len(parts) > 1:
relToken = parts[1] relToken = parts[1]
concept = self.loopsRoot.loopsTraverse(token) concept = self.loopsRoot.loopsTraverse(cToken)
if action == 'assign': if action == 'assign':
predicate = request.get('predicate') or None predicate = request.get('predicate') or None
order = int(request.get('order') or 0) order = int(request.get('order') or 0)
@ -290,9 +290,17 @@ class ResourceConfigureView(ResourceView, ConceptConfigureView):
self.loopsRoot.loopsTraverse(predicate)) self.loopsRoot.loopsTraverse(predicate))
self.context.assignConcept(removeSecurityProxy(concept), predicate, self.context.assignConcept(removeSecurityProxy(concept), predicate,
order, relevance) order, relevance)
elif action == 'remove': elif action in ('remove',):
predicate = self.loopsRoot.loopsTraverse(relToken) 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 return True
def search(self): def search(self):