diff --git a/browser/concept.py b/browser/concept.py
index 443508a..96360dd 100644
--- a/browser/concept.py
+++ b/browser/concept.py
@@ -119,8 +119,6 @@ class ConceptView(BaseView):
cm = self.loopsRoot.getConceptManager()
hasType = cm.getTypePredicate()
standard = cm.getDefaultPredicate()
- #rels = sorted(self.context.getChildRelations(),
- # key=(lambda x: x.second.title.lower()))
rels = self.context.getChildRelations()
for r in rels:
if r.predicate == hasType:
@@ -140,8 +138,7 @@ class ConceptView(BaseView):
yield ConceptRelationView(r, self.request)
def resources(self):
- rels = sorted(self.context.getResourceRelations(),
- key=(lambda x: x.second.title.lower()))
+ rels = self.context.getResourceRelations()
for r in rels:
yield ConceptRelationView(r, self.request, contextIsSecond=True)
@@ -197,15 +194,20 @@ class ConceptConfigureView(ConceptView):
if action == 'assign':
assignAs = request.get('assignAs', 'child')
predicate = request.get('predicate') or None
+ order = int(request.get('order') or 0)
+ relevance = float(request.get('relevance') or 1.0)
if predicate:
predicate = removeSecurityProxy(
self.loopsRoot.loopsTraverse(predicate))
if assignAs == 'child':
- self.context.assignChild(removeSecurityProxy(concept), predicate)
+ self.context.assignChild(removeSecurityProxy(concept), predicate,
+ order, relevance)
elif assignAs == 'parent':
- self.context.assignParent(removeSecurityProxy(concept), predicate)
+ self.context.assignParent(removeSecurityProxy(concept), predicate,
+ order, relevance)
elif assignAs == 'resource':
- self.context.assignResource(removeSecurityProxy(concept), predicate)
+ self.context.assignResource(removeSecurityProxy(concept), predicate,
+ order, relevance)
else:
raise(BadRequest, 'Illegal assignAs parameter: %s.' % assignAs)
elif action == 'remove':
@@ -246,14 +248,16 @@ class ConceptConfigureView(ConceptView):
if predicate:
predicate = removeSecurityProxy(
self.loopsRoot.loopsTraverse(predicate))
+ order = int(request.get('create.order') or 0)
+ relevance = float(request.get('create.relevance') or 1.0)
if assignAs == 'child':
- self.context.assignChild(concept, predicate)
+ self.context.assignChild(concept, predicate, order, relevance)
elif assignAs == 'parent':
- self.context.assignParent(concept, predicate)
+ self.context.assignParent(concept, predicate, order, relevance)
elif assignAs == 'resource':
- self.context.assignResource(concept, predicate)
+ self.context.assignResource(concept, predicate, order, relevance)
elif assignAs == 'concept':
- self.context.assignConcept(concept, predicate)
+ self.context.assignConcept(concept, predicate, order, relevance)
else:
raise(BadRequest, 'Illegal assignAs parameter: %s.' % assignAs)
@@ -303,6 +307,7 @@ class ConceptRelationView(BaseView):
self.other = relation.second
self.context = getVersion(self.context, request)
self.predicate = relation.predicate
+ self.relation = relation
self.request = request
@Lazy
@@ -327,3 +332,11 @@ class ConceptRelationView(BaseView):
def predicateUrl(self):
return zapi.absoluteURL(self.predicate, self.request)
+ @Lazy
+ def relevance(self):
+ return self.relation.relevance
+
+ @Lazy
+ def order(self):
+ return self.relation.order
+
diff --git a/browser/concept_related.pt b/browser/concept_related.pt
index 9097b61..5efb49a 100644
--- a/browser/concept_related.pt
+++ b/browser/concept_related.pt
@@ -61,6 +61,10 @@
tal:content="pred/title">Predicate
+ Order
+
+ Relevance
+
diff --git a/browser/concept_resources.pt b/browser/concept_resources.pt
index 8c46029..1e032cb 100644
--- a/browser/concept_resources.pt
+++ b/browser/concept_resources.pt
@@ -2,11 +2,11 @@
-
+
diff --git a/browser/form.py b/browser/form.py
index 80931b6..5b3d5f8 100644
--- a/browser/form.py
+++ b/browser/form.py
@@ -67,6 +67,7 @@ class ObjectForm(NodeView):
"""
template = ViewPageTemplateFile('form_macros.pt')
+ customMacro = None
formState = FormState() # dummy, don't update!
isInnerHtml = True
diff --git a/browser/form_macros.pt b/browser/form_macros.pt
index e18f251..fde5191 100644
--- a/browser/form_macros.pt
+++ b/browser/form_macros.pt
@@ -27,6 +27,10 @@
+
+
+
@@ -72,7 +76,6 @@
-
|
@@ -80,10 +83,14 @@
Assign Concept(s) |
+ i18n:translate="">Assign Parent Concepts
+
+
+
diff --git a/browser/relation_macros.pt b/browser/relation_macros.pt
index 56c03d4..97a3925 100644
--- a/browser/relation_macros.pt
+++ b/browser/relation_macros.pt
@@ -24,8 +24,11 @@
|
Title |
Type |
- Predicate |
+
+ Predicate |
+ Ord |
+ RF |
+
@@ -51,13 +54,17 @@
Type
-
-
- Predicate
-
- |
+
+
+
+ Predicate
+
+ |
+ 0 |
+ 1.0 |
+
@@ -119,6 +126,10 @@
+ Order
+
+ Relevance
+
diff --git a/browser/resource.py b/browser/resource.py
index eba6e48..be3c3f9 100644
--- a/browser/resource.py
+++ b/browser/resource.py
@@ -239,10 +239,13 @@ class ResourceConfigureView(ResourceView, ConceptConfigureView):
concept = self.loopsRoot.loopsTraverse(token)
if action == 'assign':
predicate = request.get('predicate') or None
+ order = int(request.get('order') or 0)
+ relevance = float(request.get('relevance') or 1.0)
if predicate:
predicate = removeSecurityProxy(
self.loopsRoot.loopsTraverse(predicate))
- self.context.assignConcept(removeSecurityProxy(concept), predicate)
+ self.context.assignConcept(removeSecurityProxy(concept), predicate,
+ order, relevance)
elif action == 'remove':
predicate = self.loopsRoot.loopsTraverse(relToken)
self.context.deassignConcept(concept, [predicate])
diff --git a/browser/resource_configure.pt b/browser/resource_configure.pt
index 03d5ab1..c3fefec 100644
--- a/browser/resource_configure.pt
+++ b/browser/resource_configure.pt
@@ -61,6 +61,10 @@
tal:content="pred/title">Predicate
+ Order
+
+ Relevance
+
diff --git a/concept.py b/concept.py
index 4088eab..feb0433 100644
--- a/concept.py
+++ b/concept.py
@@ -205,11 +205,14 @@ class Concept(Contained, Persistent):
# resource relations
- def getResourceRelations(self, predicates=None, resource=None):
+ def getResourceRelations(self, predicates=None, resource=None, sort='default'):
predicates = predicates is None and ['*'] or predicates
relationships = [ResourceRelation(self, None, p) for p in predicates]
- # TODO: sort...
- return getRelations(first=self, second=resource, relationships=relationships)
+ if sort == 'default':
+ sort = lambda x: (x.order, x.second.title.lower())
+ return sorted(getRelations(
+ first=self, second=resource, relationships=relationships),
+ key=sort)
def getResources(self, predicates=None):
return [r.second for r in self.getResourceRelations(predicates)]
diff --git a/knowledge/glossary/browser.py b/knowledge/glossary/browser.py
index 17155e2..52bc9e6 100755
--- a/knowledge/glossary/browser.py
+++ b/knowledge/glossary/browser.py
@@ -28,6 +28,8 @@ from zope.app.pagetemplate import ViewPageTemplateFile
from loops.browser.action import Action, DialogAction
from loops.browser.concept import ConceptView
+from loops.browser.form import CreateConceptForm, EditConceptForm
+from loops.browser.form import CreateConcept, EditConcept
from loops.common import adapted
from loops import util
@@ -46,7 +48,7 @@ class GlossaryView(ConceptView):
if category == 'portlet':
actions.append(DialogAction(self, title='Create Glossary Item...',
description='Create a new glossary item.',
- viewName='create_concept.html',
+ viewName='create_glossaryitem.html',
dialogName='createGlossaryItem',
#qualifier='concept',
typeToken='.loops/concepts/glossaryitem',
@@ -67,8 +69,20 @@ class GlossaryItemView(ConceptView):
if category == 'portlet':
actions.append(DialogAction(self, title='Edit Glossary Item...',
description='Modify glossary item.',
- viewName='edit_concept.html',
+ viewName='edit_glossaryitem.html',
dialogName='editGlossaryItem',
page=page))
return actions
+
+class CreateGlossaryItemForm(CreateConceptForm):
+
+ @Lazy
+ def customMacro(self):
+ return template.macros['children']
+
+
+class EditGlossaryItemForm(CreateGlossaryItemForm, EditConceptForm):
+
+ pass
+
diff --git a/knowledge/glossary/configure.zcml b/knowledge/glossary/configure.zcml
index 629475a..a219532 100755
--- a/knowledge/glossary/configure.zcml
+++ b/knowledge/glossary/configure.zcml
@@ -24,4 +24,18 @@
permission="zope.View"
/>
+
+
+
+
diff --git a/knowledge/glossary/view_macros.pt b/knowledge/glossary/view_macros.pt
index 9464a64..bdcc429 100755
--- a/knowledge/glossary/view_macros.pt
+++ b/knowledge/glossary/view_macros.pt
@@ -28,3 +28,11 @@
+
+
+
+
+ Assign Child Concepts |
+
+
\ No newline at end of file
diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo
index 782d3b0..0357d4e 100644
Binary files a/locales/de/LC_MESSAGES/loops.mo and b/locales/de/LC_MESSAGES/loops.mo differ
diff --git a/locales/de/LC_MESSAGES/loops.po b/locales/de/LC_MESSAGES/loops.po
index c519a0b..625ca74 100644
--- a/locales/de/LC_MESSAGES/loops.po
+++ b/locales/de/LC_MESSAGES/loops.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: $Id$\n"
"POT-Creation-Date: 2007-05-22 12:00 CET\n"
-"PO-Revision-Date: 2007-11-18 12:00 CET\n"
+"PO-Revision-Date: 2007-12-04 12:00 CET\n"
"Last-Translator: Helmut Merz \n"
"Language-Team: loops developers \n"
"MIME-Version: 1.0\n"
@@ -86,8 +86,11 @@ msgstr "Format"
msgid "Link URL"
msgstr "URL"
-msgid "Assign Concept(s)"
-msgstr "Begriff(e) zuordnen"
+msgid "Assign Parent Concepts"
+msgstr "Oberbegriffe zuordnen"
+
+msgid "Assign Child Concepts"
+msgstr "Unterbegriffe zuordnen"
msgid "State"
msgstr "Status"
diff --git a/resource.py b/resource.py
index e55495b..079be8b 100644
--- a/resource.py
+++ b/resource.py
@@ -191,12 +191,14 @@ class Resource(Image, Contained):
rels = getRelations(second=obj, relationships=relationships)
return [r.first for r in rels]
- def getConceptRelations (self, predicates=None, concept=None):
+ def getConceptRelations (self, predicates=None, concept=None, sort='default'):
predicates = predicates is None and ['*'] or predicates
obj = getMaster(self)
relationships = [ResourceRelation(None, obj, p) for p in predicates]
- # TODO: sort...
- return getRelations(first=concept, second=obj, relationships=relationships)
+ if sort == 'default':
+ sort = lambda x: (x.order, x.first.title.lower())
+ return sorted(getRelations(first=concept, second=obj, relationships=relationships),
+ key=sort)
def getConcepts(self, predicates=None):
obj = getMaster(self)
diff --git a/setup.py b/setup.py
index b2f1cc7..70c127f 100644
--- a/setup.py
+++ b/setup.py
@@ -85,6 +85,7 @@ class SetupManager(object):
note = self.addObject(conceptManager, Concept, 'note', title=u'Note')
for c in (typeConcept, domain, query, note, file, textdocument, predicate):
c.conceptType = typeConcept
+ notify(ObjectModifiedEvent(c))
ITypeConcept(typeConcept).typeInterface = ITypeConcept
ITypeConcept(query).typeInterface = IQueryConcept
ITypeConcept(file).typeInterface = IFile
diff --git a/xmlrpc/common.py b/xmlrpc/common.py
index b188e60..f2c57bd 100644
--- a/xmlrpc/common.py
+++ b/xmlrpc/common.py
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2005 Helmut Merz helmutm@cy55.de
+# Copyright (c) 2007 Helmut Merz helmutm@cy55.de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -37,6 +37,7 @@ from cybertools.typology.interfaces import IType
from loops.concept import Concept
from loops.util import getUidForObject, getObjectForUid, toUnicode
+
class LoopsMethods(MethodPublisher):
""" XML-RPC methods for the loops root object.
"""
@@ -143,6 +144,7 @@ class LoopsMethods(MethodPublisher):
if ti is not None:
obj = ti(obj)
# TODO: provide conversion if necessary
+ value = value.strip() # remove spaces appended by Flash
setattr(obj, attr, toUnicode(value))
notify(ObjectModifiedEvent(obj))
return 'OK'