From ae534d7bfcbac0444ae9b9ea731892f3375cb2f8 Mon Sep 17 00:00:00 2001 From: helmutm Date: Sun, 15 Aug 2010 09:25:42 +0000 Subject: [PATCH] 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 --- browser/concept.py | 43 +++++++++++++++++++++++++----------- browser/concept_related.pt | 5 ++++- browser/concept_resources.pt | 5 ++++- browser/configure.zcml | 1 + browser/info.pt | 5 +++++ browser/relation_macros.pt | 18 +++++++++------ browser/resource.py | 16 ++++++++++---- 7 files changed, 67 insertions(+), 26 deletions(-) diff --git a/browser/concept.py b/browser/concept.py index 1c30391..7efff3d 100644 --- a/browser/concept.py +++ b/browser/concept.py @@ -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') diff --git a/browser/concept_related.pt b/browser/concept_related.pt index 401891c..1348617 100644 --- a/browser/concept_related.pt +++ b/browser/concept_related.pt @@ -5,7 +5,10 @@
-

Concept Title


+

Concept Title

+
+ [Edit Relations]

-

Concept Title


+

Concept Title

+
+ [Edit Relations]

+ diff --git a/browser/info.pt b/browser/info.pt index 3a9e85e..61a503e 100644 --- a/browser/info.pt +++ b/browser/info.pt @@ -36,6 +36,11 @@ Creators: + + Creators: + +
@@ -78,14 +78,16 @@ @@ -97,10 +99,12 @@ i18n:attributes="value" tal:attributes="value buttonText" /> - + +    + +
diff --git a/browser/resource.py b/browser/resource.py index 0a81c53..e09a48e 100644 --- a/browser/resource.py +++ b/browser/resource.py @@ -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):