diff --git a/data/organisations/data.json b/data/organisations/data.json index 9b630028b..fbdbbd03a 100644 --- a/data/organisations/data.json +++ b/data/organisations/data.json @@ -13,7 +13,24 @@ { "code": "hepvs", "name": "HEP Valais", - "description": "Description in **markdown**", + "description": [ + { + "language": "de", + "value": "Description in German in **markdown** format" + }, + { + "language": "en", + "value": "Description in English in **markdown** format" + }, + { + "language": "fr", + "value": "Description in French in **markdown** format" + }, + { + "language": "it", + "value": "Description in Italian in **markdown** format" + } + ], "isShared": true, "isDedicated": true, "platformName": "FREDI", @@ -40,7 +57,24 @@ { "code": "unifr", "name": "Université de Fribourg", - "description": "#### Français\nFOLIA est le serveur de dépôt institutionnel de l'Université de Fribourg (Suisse). Il fournit un accès libre aux publications des chercheurs et chercheuses de l'Université. FOLIA est géré par la Bibliothèque cantonale et universitaire de Fribourg.\n#### Deutsch\nFOLIA ist das institutionelle Repositorium der Universität Freiburg (Schweiz). Es bietet freien Zugang zu den Publikationen der Forschenden der Universität. FOLIA wird von der Kantons- und Universitätsbibliothek Freiburg betreut.\n#### English\nFOLIA is the institutional repository of the University of Fribourg (Switzerland). It provides free access to the publications of the researchers of the University. FOLIA is managed by the Bibliothèque cantonale et universitaire de Fribourg.\n#### Italiano\nFOLIA è l'archivio istituzionale dell'Università di Friburgo (Svizzera). Fornisce un accesso gratuito alle pubblicazioni dei ricercatrici e ricercatori dell'Università. FOLIA è gestito dalla Bibliothèque cantonale et universitaire de Fribourg.", + "description": [ + { + "language": "de", + "value": "FOLIA ist das institutionelle Repositorium der Universität Freiburg (Schweiz). Es bietet freien Zugang zu den Publikationen der Forschenden der Universität. FOLIA wird von der Kantons- und Universitätsbibliothek Freiburg betreut." + }, + { + "language": "en", + "value": "FOLIA is the institutional repository of the University of Fribourg (Switzerland). It provides free access to the publications of the researchers of the University. FOLIA is managed by the Bibliothèque cantonale et universitaire de Fribourg." + }, + { + "language": "fr", + "value": "FOLIA est le serveur de dépôt institutionnel de l'Université de Fribourg (Suisse). Il fournit un accès libre aux publications des chercheurs et chercheuses de l'Université. FOLIA est géré par la Bibliothèque cantonale et universitaire de Fribourg." + }, + { + "language": "it", + "value": "FOLIA è l'archivio istituzionale dell'Università di Friburgo (Svizzera). Fornisce un accesso gratuito alle pubblicazioni dei ricercatrici e ricercatori dell'Università. FOLIA è gestito dalla Bibliothèque cantonale et universitaire de Fribourg." + } + ], "isShared": true, "isDedicated": true, "platformName": "# FOLIA\n#### Fribourg Open Library and Archive", diff --git a/sonar/common/jsonschemas/interface_language-v1.0.0.json b/sonar/common/jsonschemas/interface_language-v1.0.0.json new file mode 100644 index 000000000..192062b32 --- /dev/null +++ b/sonar/common/jsonschemas/interface_language-v1.0.0.json @@ -0,0 +1,33 @@ +{ + "title": "language", + "type": "string", + "enum": [ + "de", + "en", + "fr", + "it" + ], + "form": { + "templateOptions": { + "sort": true + }, + "options": [ + { + "label": "lang_ger", + "value": "de" + }, + { + "label": "lang_eng", + "value": "en" + }, + { + "label": "lang_fre", + "value": "fr" + }, + { + "label": "lang_ita", + "value": "it" + } + ] + } +} diff --git a/sonar/modules/organisations/jsonschemas/organisations/organisation-v1.0.0_src.json b/sonar/modules/organisations/jsonschemas/organisations/organisation-v1.0.0_src.json index 0cd850825..5a2201089 100644 --- a/sonar/modules/organisations/jsonschemas/organisations/organisation-v1.0.0_src.json +++ b/sonar/modules/organisations/jsonschemas/organisations/organisation-v1.0.0_src.json @@ -35,14 +35,50 @@ "minLength": 1 }, "description": { - "title": "Description", - "description": "HTML markup admitted.", - "type": "string", - "minLength": 1, + "title": "Descriptions", + "type": "array", + "minItems": 1, + "items": { + "title": "Description", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "Value", + "type": "string", + "minLength": 1, + "form": { + "type": "markdown", + "templateOptions": { + "rows": 5 + } + } + }, + "language": { + "$ref": "interface_language-v1.0.0.json" + } + }, + "propertiesOrder": [ + "language", + "value" + ], + "required": [ + "value", + "language" + ] + }, "form": { - "type": "markdown", - "templateOptions": { - "rows": 5 + "validation": { + "validators": { + "uniqueValueKeysInObject": { + "keys": [ + "language" + ] + } + }, + "messages": { + "uniqueValueKeysInObjectMessage": "Only one value per language is allowed" + } } } }, diff --git a/sonar/modules/organisations/mappings/v7/organisations/organisation-v1.0.0.json b/sonar/modules/organisations/mappings/v7/organisations/organisation-v1.0.0.json index badb86082..1810a424c 100644 --- a/sonar/modules/organisations/mappings/v7/organisations/organisation-v1.0.0.json +++ b/sonar/modules/organisations/mappings/v7/organisations/organisation-v1.0.0.json @@ -15,7 +15,15 @@ "type": "keyword" }, "description": { - "type": "text" + "type": "object", + "properties": { + "language": { + "type": "keyword" + }, + "value": { + "type": "text" + } + } }, "name": { "type": "text", diff --git a/sonar/modules/organisations/marshmallow/json.py b/sonar/modules/organisations/marshmallow/json.py index 82a7e27de..359369da4 100644 --- a/sonar/modules/organisations/marshmallow/json.py +++ b/sonar/modules/organisations/marshmallow/json.py @@ -43,7 +43,7 @@ class OrganisationMetadataSchemaV1(StrictKeysMixin): pid = PersistentIdentifier() code = SanitizedUnicode(required=True) name = SanitizedUnicode(required=True) - description = SanitizedUnicode() + description = fields.List(fields.Dict()) isShared = fields.Boolean() isDedicated = fields.Boolean() allowedIps = SanitizedUnicode() diff --git a/sonar/modules/organisations/serializers/schemas/export.py b/sonar/modules/organisations/serializers/schemas/export.py index 27efdb10c..fefe34ded 100644 --- a/sonar/modules/organisations/serializers/schemas/export.py +++ b/sonar/modules/organisations/serializers/schemas/export.py @@ -25,7 +25,7 @@ class ExportSchemaV1(Schema): code = fields.String(dump_only=True) name = fields.String(dump_only=True) - description = fields.String(dump_only=True) + description = fields.List(fields.Dict(dump_only=True)) isShared = fields.Boolean(dump_only=True) isDedicated = fields.Boolean(dump_only=True) files = fields.Method('get_files', dump_only=True) diff --git a/sonar/theme/templates/sonar/frontpage.html b/sonar/theme/templates/sonar/frontpage.html index 92093b90f..0f5e9f3ea 100755 --- a/sonar/theme/templates/sonar/frontpage.html +++ b/sonar/theme/templates/sonar/frontpage.html @@ -89,7 +89,7 @@
{% include config['SONAR_APP_ORGANISATION_CONFIG'][g.organisation.pid]['home_template'] %} {% else %} {% if g.organisation.get('description') %} - {{ g.organisation.description | markdown_filter | safe }} + {{ g.organisation.description | description_current_language(current_i18n.locale.language) | markdown_filter | safe }} {% endif %} {% endif %} diff --git a/sonar/theme/templates/sonar/partial/organisation.html b/sonar/theme/templates/sonar/partial/organisation.html index 22cc1b02d..c65232988 100644 --- a/sonar/theme/templates/sonar/partial/organisation.html +++ b/sonar/theme/templates/sonar/partial/organisation.html @@ -1,3 +1,20 @@ +{# -*- coding: utf-8 -*- + Swiss Open Access Repository + Copyright (C) 2021 RERO + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, version 3 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +#} + {% if g.get('organisation') and not g.organisation['isDedicated'] %}
@@ -11,7 +28,7 @@

{{ g.organisation.name }}

{% if g.organisation.get('description') %} -

{{ g.organisation.description | markdown_filter | safe }}

+

{{ g.organisation.description | description_current_language(current_i18n.locale.language) | markdown_filter | safe }}

{% endif %}
diff --git a/sonar/theme/templates/sonar/partial/switch_aai_dropdown.html b/sonar/theme/templates/sonar/partial/switch_aai_dropdown.html index c9744acf3..6be2a583c 100644 --- a/sonar/theme/templates/sonar/partial/switch_aai_dropdown.html +++ b/sonar/theme/templates/sonar/partial/switch_aai_dropdown.html @@ -1,3 +1,20 @@ +{# -*- coding: utf-8 -*- + Swiss Open Access Repository + Copyright (C) 2021 RERO + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, version 3 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +#} +