diff --git a/src/collective/dms/thesaurus/browser/dmskeyword_view.pt b/src/collective/dms/thesaurus/browser/dmskeyword_view.pt
index e1546bb..4d8e667 100644
--- a/src/collective/dms/thesaurus/browser/dmskeyword_view.pt
+++ b/src/collective/dms/thesaurus/browser/dmskeyword_view.pt
@@ -43,18 +43,16 @@
tal:define="rel_widget python:view.widgets.get('related')">
- ,
+ tal:content="value/label"
+ tal:attributes="href value/url"
+ />
diff --git a/src/collective/dms/thesaurus/browser/view.py b/src/collective/dms/thesaurus/browser/view.py
index a65b670..5051b37 100644
--- a/src/collective/dms/thesaurus/browser/view.py
+++ b/src/collective/dms/thesaurus/browser/view.py
@@ -26,7 +26,12 @@ class DmsKeywordView(DefaultView):
else:
for ref in catalog.findRelations(
{'to_id': doc_intid, 'from_attribute': 'broader'}):
- tp = (ref.from_path, ref.from_object.Title())
+ tp = dict(
+ url=ref.from_path,
+ label=ref.from_object.Title(),
+ hn=ref.from_object.historical_note,
+ sn=ref.from_object.scope_note
+ )
if tp not in value:
value.append(tp)
return value
diff --git a/src/collective/dms/thesaurus/configure.zcml b/src/collective/dms/thesaurus/configure.zcml
index 49a5732..41f3bad 100644
--- a/src/collective/dms/thesaurus/configure.zcml
+++ b/src/collective/dms/thesaurus/configure.zcml
@@ -19,6 +19,7 @@
+
+
diff --git a/src/collective/dms/thesaurus/profiles/default/metadata.xml b/src/collective/dms/thesaurus/profiles/default/metadata.xml
index 275f57c..eb0f8a6 100644
--- a/src/collective/dms/thesaurus/profiles/default/metadata.xml
+++ b/src/collective/dms/thesaurus/profiles/default/metadata.xml
@@ -3,6 +3,7 @@
0001
profile-plone.app.dexterity:default
+ profile-plone.app.intid:default
profile-collective.dms.thesaurus:default
diff --git a/src/collective/dms/thesaurus/related-thesaurus-keywords-display.pt b/src/collective/dms/thesaurus/related-thesaurus-keywords-display.pt
index e1e7713..4dcdf47 100644
--- a/src/collective/dms/thesaurus/related-thesaurus-keywords-display.pt
+++ b/src/collective/dms/thesaurus/related-thesaurus-keywords-display.pt
@@ -1,4 +1,4 @@
-,
+ tal:content="value/label"
+ tal:attributes="href value/url"
+ />
diff --git a/src/collective/dms/thesaurus/relatedkeywords.py b/src/collective/dms/thesaurus/relatedkeywords.py
index 4a36e3b..0987548 100644
--- a/src/collective/dms/thesaurus/relatedkeywords.py
+++ b/src/collective/dms/thesaurus/relatedkeywords.py
@@ -21,37 +21,60 @@ class IRelatedThesaurusKeywords(IRelationList):
class RelatedThesaurusKeywordsWidget(MultiContentTreeWidget):
display_template = ViewPageTemplateFile('related-thesaurus-keywords-display.pt')
- def __init__(self, request):
+ def __init__(self, request, from_attribute='related', display_backrefs=False):
+ self.from_attribute = from_attribute
+ self.display_backrefs = display_backrefs
super(RelatedThesaurusKeywordsWidget, self).__init__(request)
def get_url(self, v):
return v
- def get_label(self, v):
- term = self.terms.getTermByToken(v)
- return term.title
+ def get_term(self, v):
+ return self.terms.getTermByToken(v)
- def tuples(self):
- refs = [(self.get_url(x), self.get_label(x)) for x in self.value]
- intids = getUtility(IIntIds)
- catalog = getUtility(ICatalog)
- try:
- doc_intid = intids.getId(self.context)
- except KeyError:
- pass
- else:
- for ref in catalog.findRelations(
- {'to_id': doc_intid, 'from_attribute': 'related'}):
- tp = (ref.from_path, ref.from_object.Title())
- if tp not in refs:
- refs.append(tp)
+ def get_label(self, v):
+ return self.get_term(v).title
+
+ def get_hn(self, v):
+ return self.get_term(v).value.historical_note
+
+ def get_sn(self, v):
+ return self.get_term(v).value.scope_note
+
+ def dictvalues(self):
+ refs = [dict(
+ url=self.get_url(x),
+ label=self.get_label(x),
+ hn=self.get_hn(x),
+ sn=self.get_sn(x),
+ ) for x in self.value]
+ if self.display_backrefs:
+ intids = getUtility(IIntIds)
+ catalog = getUtility(ICatalog)
+ try:
+ doc_intid = intids.getId(self.context)
+ except KeyError:
+ pass
+ else:
+ for ref in catalog.findRelations(
+ {'to_id': doc_intid,
+ 'from_attribute': self.from_attribute}):
+ tp = dict(
+ url=ref.from_path,
+ label=ref.from_object.Title(),
+ hn=ref.from_object.historical_note,
+ sn=ref.from_object.scope_note
+ )
+ if tp not in refs:
+ refs.append(tp)
return refs
@adapter(IRelatedThesaurusKeywords, IFormLayer)
@implementer(IFieldWidget)
def RelatedThesaurusKeywordsFieldWidget(field, request):
- return FieldWidget(field, RelatedThesaurusKeywordsWidget(request))
+ return FieldWidget(field, RelatedThesaurusKeywordsWidget(
+ request, display_backrefs=field.display_backrefs))
class ThesaurusPathSourceBinder(ObjPathSourceBinder):
@@ -69,7 +92,8 @@ class ThesaurusPathSourceBinder(ObjPathSourceBinder):
class RelatedThesaurusKeywords(RelationList):
implements(IRelatedThesaurusKeywords)
- def __init__(self, **kwargs):
+ def __init__(self, display_backrefs=False, **kwargs):
+ self.display_backrefs = display_backrefs
RelationList.__init__(self,
value_type=RelationChoice(
title=u'',