Skip to content

Commit

Permalink
[Resolves #7377] Thesauri in metadata details (#7424)
Browse files Browse the repository at this point in the history
  • Loading branch information
mattiagiupponi authored Apr 29, 2021
1 parent 77a90b6 commit 73a9d14
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 31 deletions.
44 changes: 22 additions & 22 deletions geonode/base/templates/base/_resourcebase_info_panel.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{% load i18n %}
{% block content %}
{% load thesaurus %}

<dl class="dl-horizontal">
{% if resource.title %}
Expand Down Expand Up @@ -54,30 +55,29 @@
<dd>{{ resource.display_type }}</dd>
{% endif %}

{% if resource.keywords.count > 0 or resource.tkeywords.count > 0 %}
{% if resource.keywords.count > 0 or resource.tkeywords.count > 0 %}
<dt>{% trans "Keywords" %}</dt>
<dd itemprop="keywords">
{% for keyword in resource.keywords.all %}
<a itemscope itemtype="http://schema.org/Text" href="{% url "search" %}?keywords__slug__in={{ keyword.slug }}" >
{{ keyword.name }}
</a>
{% if not forloop.last %},{% endif %}
{% endfor %}
{% if THESAURI_FILTERS %}
{% if resource.tkeywords.count > 0 %}
{% get_current_language as LANGUAGE_CODE %}
{% for keyword in resource.tkeywords.all %}
<a itemscope itemtype="http://schema.org/Text" href="{% url "search" %}?tkeywords__id__in={{ keyword.id }}">
{% for label in keyword.labels %}
{% if forloop.first %},{% endif %}
{% if label.lang == LANGUAGE_CODE %}
{{ label }}
{% endif %}
{% endfor %}
</a>
{% endfor %}
{% endif %}
{% endif %}
<ul>
{% for keyword in resource.keywords.all %}
<li>
<a itemscope itemtype="http://schema.org/Text" href="{% url "search" %}?keywords__slug__in={{ keyword.slug }}" >
{{ keyword.name }}
</a>
</li>
{% endfor %}
{% for tid in resource.tkeywords.all|get_unique_thesaurus_set %}
<li>{{ tid|get_thesaurus_translation_by_id }}
{% for tkeywords in resource.tkeywords.all %}
<ul>
{% if tid == tkeywords.thesaurus.id %}
<li><a itemscope itemtype="http://schema.org/Text" href="{% url "search" %}?tkeywords__id__in={{ tkeywords.id }}">{{tkeywords|get_thesaurus_localized_label}}</a></li>
{% endif %}
</ul>
{% endfor %}
</li>
{% endfor %}
</ul>
</dd>
{% endif %}

Expand Down
21 changes: 20 additions & 1 deletion geonode/base/templatetags/thesaurus.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.core.exceptions import ObjectDoesNotExist
from django import template
from django.utils.translation import get_language
from geonode.base.models import Thesaurus, ThesaurusLabel
from geonode.base.models import Thesaurus, ThesaurusKeyword, ThesaurusKeywordLabel, ThesaurusLabel

register = template.Library()

Expand Down Expand Up @@ -35,3 +35,22 @@ def get_name_translation(tidentifier):
if not lname:
return available.first().title
return lname.first()

@register.filter
def get_thesaurus_translation_by_id(id):
available = Thesaurus.objects.filter(id=id)
if not available.exists():
raise ObjectDoesNotExist("Selected idenfifier does not exists")
return get_name_translation(available.first().identifier)

@register.filter
def get_thesaurus_localized_label(tkeyword):
lang = get_language()
translation = (
ThesaurusKeywordLabel.objects.values_list("label", flat=True)
.filter(keyword__id=tkeyword.id)
.filter(lang=lang)
)
if not translation:
return tkeyword.alt_label
return translation.first()
17 changes: 16 additions & 1 deletion geonode/base/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
from geonode.base.models import CuratedThumbnail
from geonode.base.templatetags.base_tags import get_visibile_resources, facets
from geonode.base.templatetags.thesaurus import (
get_name_translation, get_unique_thesaurus_set,
get_name_translation, get_thesaurus_localized_label, get_thesaurus_translation_by_id, get_unique_thesaurus_set,
get_thesaurus_title,
get_thesaurus_date,
)
Expand Down Expand Up @@ -898,6 +898,21 @@ def test_get_name_translation_return_thesauro_title_if_label_for_selected_langua
expected = "GEMET - INSPIRE themes, version 1.0"
self.assertEqual(expected, actual)

@patch('geonode.base.templatetags.thesaurus.get_language')
def test_get_thesaurus_translation_by_id(self, lang):
lang.return_value = 'it'
actual = get_thesaurus_translation_by_id(1)
expected = "Tema GEMET - INSPIRE, versione 1.0"
self.assertEqual(expected, actual)

@patch('geonode.base.templatetags.thesaurus.get_language')
def test_get_thesaurus_localized_label(self, lang):
lang.return_value = 'de'
keyword = ThesaurusKeyword.objects.get(id=1)
actual = get_thesaurus_localized_label(keyword)
expected = "Adressen"
self.assertEqual(expected, actual)

@patch('geonode.base.templatetags.thesaurus.get_language')
def test_get_name_translation_return_label_title_if_label_for_selected_language_exists(self, lang):
lang.return_value = 'it'
Expand Down
33 changes: 26 additions & 7 deletions geonode/templates/metadata_detail.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{% extends "geonode_base.html" %}
{% load i18n %}
{% load bootstrap_tags %}

{% load thesaurus %}
{% block title %}{{ resource.title }} — {{ block.super }}{% endblock %}

{% block body_class %}data{% endblock %}
Expand Down Expand Up @@ -89,12 +89,31 @@ <h2 class="page-title">{% trans "Metadata" %} : {{ resource.title }}</h2>
{% endblock display_type %}

{% block keyword_list %}
{% if resource.keyword_list %}
<dt>{% trans "Keywords" %}</dt>
<dd>{% for keyword in resource.keyword_list %}
{{ keyword }}
{% endfor %}</dd>
{% endif %}
{% if resource.keywords.count > 0 or resource.tkeywords.count > 0 %}
<dt>{% trans "Keywords" %}</dt>
<dd itemprop="keywords">
<ul>
{% for keyword in resource.keywords.all %}
<li>
<a itemscope itemtype="http://schema.org/Text" href="{% url "search" %}?keywords__slug__in={{ keyword.slug }}" >
{{ keyword.name }}
</a>
</li>
{% endfor %}
{% for tid in resource.tkeywords.all|get_unique_thesaurus_set %}
<li>{{ tid|get_thesaurus_translation_by_id }}
{% for tkeywords in resource.tkeywords.all %}
<ul>
{% if tid == tkeywords.thesaurus.id %}
<li><a itemscope itemtype="http://schema.org/Text" href="{% url "search" %}?tkeywords__id__in={{ tkeywords.id }}">{{tkeywords|get_thesaurus_localized_label}}</a></li>
{% endif %}
</ul>
{% endfor %}
</li>
{% endfor %}
</ul>
</dd>
{% endif %}
{% endblock keyword_list %}

{% block category %}
Expand Down

0 comments on commit 73a9d14

Please sign in to comment.