From 1494f44362ac80549e6325b3b5a92d6b0812e4cf Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Thu, 20 Jun 2024 15:36:56 +0300 Subject: [PATCH 1/7] [develop | DONE | CHANGED]: utils-service: beta-properties.file & production-properties.file & properties.file: Added property fundersServiceAPIUrl | uploadService.js: Added query and parsing of funders from new Funders API (created by CNR) for extra info (country, websiteUrl, registered, etc..) --- services/utils-service/beta-properties.file | 1 + .../utils-service/production-properties.file | 1 + services/utils-service/properties.file | 1 + services/utils-service/uploadService.js | 59 ++++++++++++++----- 4 files changed, 48 insertions(+), 14 deletions(-) diff --git a/services/utils-service/beta-properties.file b/services/utils-service/beta-properties.file index e66a9f36..4fd7d30a 100644 --- a/services/utils-service/beta-properties.file +++ b/services/utils-service/beta-properties.file @@ -1,6 +1,7 @@ userInfoUrl = https://beta.services.openaire.eu/login-service/userInfo searchServiceAPIUrl = https://beta.services.openaire.eu/search/v2/api/ monitorAPIUrl = https://beta.services.openaire.eu/uoa-monitor-service/ +fundersServiceAPIUrl = https://beta.services.openaire.eu/openaire/funders/ ssl = true localPath = false # photo size in KB diff --git a/services/utils-service/production-properties.file b/services/utils-service/production-properties.file index 539e3cd1..f0110b3e 100644 --- a/services/utils-service/production-properties.file +++ b/services/utils-service/production-properties.file @@ -1,6 +1,7 @@ userInfoUrl = https://services.openaire.eu/login-service/userInfo searchServiceAPIUrl = https://services.openaire.eu/search/v2/api/ monitorAPIUrl = https://services.openaire.eu/uoa-monitor-service/ +fundersServiceAPIUrl = https://services.openaire.eu/openaire/funders/ ssl = true localPath = false # photo size in KB diff --git a/services/utils-service/properties.file b/services/utils-service/properties.file index 8ab7aa3b..031495a9 100644 --- a/services/utils-service/properties.file +++ b/services/utils-service/properties.file @@ -1,6 +1,7 @@ userInfoUrl = http://mpagasas.di.uoa.gr:19080/login-service/userInfo searchServiceAPIUrl = https://beta.services.openaire.eu/search/v2/api/ monitorAPIUrl = http://duffy.di.uoa.gr:19380/uoa-monitor-service/ +fundersServiceAPIUrl = https://beta.services.openaire.eu/openaire/funders/ ssl = false localPath = true # photo size in KB diff --git a/services/utils-service/uploadService.js b/services/utils-service/uploadService.js index 5d6202d5..01919451 100644 --- a/services/utils-service/uploadService.js +++ b/services/utils-service/uploadService.js @@ -15,6 +15,7 @@ if (properties.get('ssl')) { } var searchServiceAPIUrl = properties.get('searchServiceAPIUrl'); var monitorServiceAPIUrl = properties.get('monitorAPIUrl'); +var fundersServiceAPIUrl = properties.get('fundersServiceAPIUrl'); var auth = properties.get('userInfoUrl'); /** @deprecated*/ var authDeprecated = auth.includes("accessToken"); @@ -223,7 +224,7 @@ app.get('/explore/funders', async function (req, res) { searchServiceAPIUrl + 'resources2/?format=json&type=results&fq=relfunder=*&refine=true&fields=relfunder&sf=relfunder&page=0&size=0&fq=resultbestaccessright%20exact%20%22Open%20Access%22', searchServiceAPIUrl + 'resources2/?format=json&type=projects&fq=funder=*&fq=projectcode<>"unidentified"&refine=true&fields=funder&sf=funder&page=0&size=0', monitorServiceAPIUrl + 'stakeholder?type=funder', - + fundersServiceAPIUrl ] const dataPromises = requests.map((url) => axios.get( url)); const dataResponses = await Promise.all(dataPromises); @@ -233,37 +234,67 @@ app.get('/explore/funders', async function (req, res) { let resultsFunders = dataResponses[0].data.refineResults.relfunder; resultsFunders.forEach(queriedFunder => { - if (!fundersMap.has(queriedFunder.id)) { - fundersMap.set(queriedFunder.id,{name: queriedFunder.name.split("||")[0], id: queriedFunder.id, results:queriedFunder.count, openResults: null, projects:null, stakeholder:null}); + let id = queriedFunder.id.split("||")[0]; + if (!fundersMap.has(id)) { + fundersMap.set(id,{name: queriedFunder.name.split("||")[0], id: id, results:queriedFunder.count, openResults: null, projects:null, stakeholder:null}); } }); let openResultsFunders = dataResponses[1].data.refineResults.relfunder; openResultsFunders.forEach(queriedFunder => { - if (!fundersMap.has(queriedFunder.id)) { - fundersMap.set(queriedFunder.id,{name: queriedFunder.name.split("||")[0], id: queriedFunder.id, results:null, openResults: queriedFunder.count, projects:null, stakeholder:null}); + let id = queriedFunder.id.split("||")[0]; + if (!fundersMap.has(id)) { + fundersMap.set(id,{name: queriedFunder.name.split("||")[0], id: id, results:null, openResults: queriedFunder.count, projects:null, stakeholder:null}); }else{ - fundersMap.get(queriedFunder.id).openResults = queriedFunder.count; + fundersMap.get(id).openResults = queriedFunder.count; } }); let projectFunders = dataResponses[2].data.refineResults.funder; projectFunders.forEach(queriedFunder => { - if (!fundersMap.has(queriedFunder.id) ) { - fundersMap.set(queriedFunder.id,{name: queriedFunder.name.split("||")[0], id: queriedFunder.id, results:null, openResults: null, projects:queriedFunder.count, stakeholder:null}); + let id = queriedFunder.id.split("||")[0]; + if (!fundersMap.has(id) ) { + fundersMap.set(id,{name: queriedFunder.name.split("||")[0], id: id, results:null, openResults: null, projects:queriedFunder.count, stakeholder:null}); }else{ - fundersMap.get(queriedFunder.id).projects = queriedFunder.count; + fundersMap.get(id).projects = queriedFunder.count; } }); let stakeholders = dataResponses[3].data; stakeholders.forEach(stakeholder => { - let id = stakeholder.index_id + "||" + stakeholder.index_name + "||" + stakeholder.index_shortName; - // console.log(id); + let id = stakeholder.index_id;// + "||" + stakeholder.index_name + "||" + stakeholder.index_shortName; if (fundersMap.has(id)) { - let ministakeholder = {id:id, name:stakeholder.name, alias: stakeholder.alias, visibility: stakeholder.visibility, - logoUrl:stakeholder.logoUrl, isUpload: stakeholder.isUpload} - fundersMap.get(id).stakeholder = ministakeholder; + let ministakeholder = {id:id, name:stakeholder.name, alias: stakeholder.alias, visibility: stakeholder.visibility, + logoUrl:stakeholder.logoUrl, isUpload: stakeholder.isUpload, websiteUrl: null} + fundersMap.get(id).stakeholder = ministakeholder; } }); + let funders = dataResponses[4].data; + funders.forEach(funder => { + if (fundersMap.has(funder.id)) { + let storedFunder = fundersMap.get(funder.id); + if(funder.legalName) { + storedFunder.name = funder.legalName; + } + storedFunder.country = funder.country; + storedFunder.registered = funder.registered; + let storedStakeholder = storedFunder.stakeholder; + let ministakeholder = { + id:funder.id, name:storedStakeholder?.name, alias: storedStakeholder?.alias ? storedStakeholder.alias : funder.legalShortName, + websiteUrl: funder.websiteUrl, logoUrl: storedStakeholder?.logoUrl ? storedStakeholder.logoUrl : funder.logoUrl, + visibility: storedStakeholder?.visibility, isUpload: storedStakeholder?.isUpload + }; + storedFunder.stakeholder = ministakeholder; + // } else { + // console.log(funder.id); + } + }); + + // console.log("") + // for(let f of fundersMap.keys()) { + // if(!fundersMap.get(f).stakeholder || (!fundersMap.get(f).stakeholder.websiteUrl && !fundersMap.get(f).country && !fundersMap.get(f).registered)) { + // console.log(f); + // } + // } + // Combine the data // Send the aggregated data as the response From faad25e780f8421f71a19ac71c3ff0fec611d7db Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Thu, 20 Jun 2024 16:23:51 +0300 Subject: [PATCH 2/7] [develop | DONE | ADDED]: package.json: Added on dependencies "flag-icons": "^7.2.1" (library to show flag icon according to country code) | funders.component.less: Import "flag-icons/css/flag-icons.min.css" | funders.component.ts: Added for funders fields "websiteUrl", "country", "registered" & added sorting option by country (asc) | funders.component.html: Display new fundes info ("websiteUrl", "country", "registered"). --- explore/package.json | 1 + .../src/app/funders/funders.component.html | 28 +++++---- .../src/app/funders/funders.component.less | 2 +- explore/src/app/funders/funders.component.ts | 63 ++++++++++++------- 4 files changed, 59 insertions(+), 35 deletions(-) diff --git a/explore/package.json b/explore/package.json index 6b878b15..4c4c7078 100644 --- a/explore/package.json +++ b/explore/package.json @@ -39,6 +39,7 @@ "clipboard": "^1.5.16", "core-js": "^2.5.4", "express": "^4.15.2", + "flag-icons": "^7.2.1", "jquery": "^3.4.1", "ng-recaptcha": "^12.0.2", "prom-client": "^11.3.0", diff --git a/explore/src/app/funders/funders.component.html b/explore/src/app/funders/funders.component.html index d45e11c3..0ee945d6 100644 --- a/explore/src/app/funders/funders.component.html +++ b/explore/src/app/funders/funders.component.html @@ -126,17 +126,18 @@
- - + +
+
Registered
-
--> +
@@ -156,11 +157,11 @@ {{funder.name}}
- +
@@ -237,6 +238,7 @@
+
{{funder.name}} @@ -310,19 +312,19 @@
- +
diff --git a/explore/src/app/funders/funders.component.less b/explore/src/app/funders/funders.component.less index 7da80274..df313bbc 100644 --- a/explore/src/app/funders/funders.component.less +++ b/explore/src/app/funders/funders.component.less @@ -1,5 +1,5 @@ @import (reference) "~src/assets/openaire-theme/less/color.less"; - +@import "flag-icons/css/flag-icons.min.css"; .custom-coins-dot:after { content: ""; diff --git a/explore/src/app/funders/funders.component.ts b/explore/src/app/funders/funders.component.ts index 29a587cd..a9ea2a88 100644 --- a/explore/src/app/funders/funders.component.ts +++ b/explore/src/app/funders/funders.component.ts @@ -59,22 +59,25 @@ export class FundersComponent implements OnInit { "projects": number, "monitorDashboard": string, "monitorDashboardStatus": string, - "logoUrl": string + "logoUrl": string, + "websiteUrl": string, + "country": string, + "registered": boolean }>(); - staticLogos: Set = new Set([ - "arc_________::ARC||Australian Research Council (ARC)||ARC", - "asap________::ASAP||Aligning Science Across Parkinson's||ASAP", - "cihr________::CIHR||Canadian Institutes of Health Research||CIHR", - "euenvagency_::EEA||European Environment Agency||EEA", - "inca________::INCA||Institut National du Cancer||INCa", - "nhmrc_______::NHMRC||National Health and Medical Research Council (NHMRC)||NHMRC", - "nih_________::NIH||National Institutes of Health||NIH", - "nserc_______::NSERC||Natural Sciences and Engineering Research Council of Canada||NSERC", - "nsf_________::NSF||National Science Foundation||NSF", - "sshrc_______::SSHRC||Social Sciences and Humanities Research Council||SSHRC", - "taraexp_____::tara||Tara Expeditions Foundation||TARA", - "ukri________::UKRI||UK Research and Innovation||UKRI", - "wt__________::WT||Wellcome Trust||WT" + staticLogos: Map = new Map([ + ["arc_________::ARC", "ARC"], + ["asap________::ASAP", "ASAP"], + ["cihr________::CIHR", "CIHR"], + ["euenvagency_::EEA", "EEA"], + ["inca________::INCA", "INCa"], + ["nhmrc_______::NHMRC", "NHMRC"], + ["nih_________::NIH", "NIH"], + ["nserc_______::NSERC", "NSERC"], + ["nsf_________::NSF", "NSF"], + ["sshrc_______::SSHRC", "SSHRC"], + ["taraexp_____::tara", "TARA"], + ["ukri________::UKRI", "UKRI"], + ["wt__________::WT", "WT"] ]); constructor(private router: Router, @@ -111,7 +114,8 @@ export class FundersComponent implements OnInit { this.sortOptions = [ {value: 'alphAsc', label: 'Alphabetically Asc. (A-Z)'}, {value: 'alphDsc', label: 'Alphabetically Dsc. (Z-A)'}, - {value: 'oaDsc', label: '"Open Access %" Dsc.'} + {value: 'oaDsc', label: '"Open Access %" Dsc.'}, + {value: 'countryAsc', label: 'Country Asc. (A-Z)'} ]; this.getFunders(); this.keywordControl = this.fb.control(''); @@ -160,7 +164,10 @@ export class FundersComponent implements OnInit { "projects": +queriedFunder.projects, "monitorDashboard": '', "monitorDashboardStatus": '', - "logoUrl": '' + "logoUrl": '', + "websiteUrl": '', + "country": queriedFunder.country, + "registered": queriedFunder.registered }; if((!funder.researchProducts || funder.researchProducts == 0) && (!funder.projects || funder.projects == 0)) { @@ -172,7 +179,10 @@ export class FundersComponent implements OnInit { funder.alias = stakeholder.alias; funder.monitorDashboard = stakeholder.alias; funder.monitorDashboardStatus = stakeholder.visibility; - funder.logoUrl = (stakeholder.isUpload ? properties.utilsService + "/download/" : "")+ (stakeholder.logoUrl); + if(stakeholder.logoUrl) { + funder.logoUrl = (stakeholder.isUpload ? properties.utilsService + "/download/" : "") + (stakeholder.logoUrl); + } + funder.websiteUrl = stakeholder.websiteUrl; } if(funder.openAccessResearchProducts && funder.researchProducts) { @@ -180,9 +190,7 @@ export class FundersComponent implements OnInit { } if(!funder.logoUrl && this.staticLogos.has(funder.id)) { - let split = funder.id.split("||"); - let shortname = (split && split.length==3) ? funder.id.split("||")[2] : funder.id; - funder.logoUrl = "assets/explore-assets/funders/logos/"+shortname+".png"; + funder.logoUrl = "assets/explore-assets/funders/logos/"+this.staticLogos.get(funder.id)+".png"; } this.fundersMap.set(queriedFunder.id, funder); @@ -335,6 +343,19 @@ export class FundersComponent implements OnInit { case 'oaDsc': this.funders = this.funders.sort((a, b) => b['openAccessPercentage'] - a['openAccessPercentage']); break; + case 'countryAsc': + this.funders = this.funders.sort((a, b) => { + if(a['country'] && b['country']) { + return a['country'].localeCompare(b['country']) + } else if(!a['country'] && !b['country']) { + return 0; + } else if(!a['country']) { + return 1; + } else { + return -1; + } + }); + break; } this.filtering(); } From 7a863e3d4bed7c4ce0128d277cdbe01631760877 Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Fri, 5 Jul 2024 15:55:12 +0300 Subject: [PATCH 3/7] [develop | DONE | FIXED]: Initialize properties on field definition (files: contact.component.ts & funders.component.ts) --- explore/src/app/contact/contact.component.ts | 1 - explore/src/app/funders/funders.component.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/explore/src/app/contact/contact.component.ts b/explore/src/app/contact/contact.component.ts index d421ce75..116b35a9 100644 --- a/explore/src/app/contact/contact.component.ts +++ b/explore/src/app/contact/contact.component.ts @@ -58,7 +58,6 @@ export class ContactComponent implements OnInit { ngOnInit() { this._title.setTitle('OpenAIRE - Explore | Contact Us'); - this.properties = properties; this.email = {body: '', subject: '', recipients: []}; this.subscriptions.push( this._piwikService.trackView(this.properties, this.pageTitle).subscribe()); this.url = this.properties.domain + this._router.url; diff --git a/explore/src/app/funders/funders.component.ts b/explore/src/app/funders/funders.component.ts index a9ea2a88..4fedc5ec 100644 --- a/explore/src/app/funders/funders.component.ts +++ b/explore/src/app/funders/funders.component.ts @@ -96,7 +96,6 @@ export class FundersComponent implements OnInit { ngOnInit() { this.layoutService.setRootClass('funders'); this.title.setTitle('OpenAIRE - Explore | Funders'); - this.properties = properties; this.subscriptions.push( this.piwikService.trackView(this.properties, this.pageTitle).subscribe()); this.url = this.properties.domain + this.router.url; this.seoService.createLinkForCanonicalURL(this.url); From 01810354094a4efd94fa9ae061d40d7151702827 Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Tue, 9 Jul 2024 17:22:28 +0300 Subject: [PATCH 4/7] Updating libraries --- explore/src/app/openaireLibrary | 2 +- explore/src/assets/common-assets | 2 +- explore/src/assets/openaire-theme | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/explore/src/app/openaireLibrary b/explore/src/app/openaireLibrary index 9ae1ee92..0896d5a3 160000 --- a/explore/src/app/openaireLibrary +++ b/explore/src/app/openaireLibrary @@ -1 +1 @@ -Subproject commit 9ae1ee928a7c467540cefe3ffea96efe54a91456 +Subproject commit 0896d5a3ceba923b6958cd8ec55fca308302deaa diff --git a/explore/src/assets/common-assets b/explore/src/assets/common-assets index c5ba8700..6bc02125 160000 --- a/explore/src/assets/common-assets +++ b/explore/src/assets/common-assets @@ -1 +1 @@ -Subproject commit c5ba8700be5b8fcf98522fe167246281545d7985 +Subproject commit 6bc02125166daa907d39ff523cd635088bdb63c2 diff --git a/explore/src/assets/openaire-theme b/explore/src/assets/openaire-theme index 99e7fe14..b4d09b7c 160000 --- a/explore/src/assets/openaire-theme +++ b/explore/src/assets/openaire-theme @@ -1 +1 @@ -Subproject commit 99e7fe14bc804271116cc8ee54f2547e4f04034f +Subproject commit b4d09b7cd942893c238d4152eeac1bbc822a0b13 From ff3e56465e3803d65ba50ab42bc5a4c497c5f5e3 Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Thu, 11 Jul 2024 15:32:48 +0300 Subject: [PATCH 5/7] [develop | DONE | ADDED]: funders.component.ts: Adding sorting options by Research products and by Projects & Renamed typo for descending order (desc instead of dsc) | funders.component.less: Commented css rule for "custom-view-button" class (now available on general.less). --- .../src/app/funders/funders.component.less | 32 +++++++++---------- explore/src/app/funders/funders.component.ts | 18 ++++++++--- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/explore/src/app/funders/funders.component.less b/explore/src/app/funders/funders.component.less index df313bbc..3c28bf03 100644 --- a/explore/src/app/funders/funders.component.less +++ b/explore/src/app/funders/funders.component.less @@ -21,22 +21,22 @@ margin-left: 10px; } -.custom-view-button { - padding: 4px; - background: @light-color; - border: 1px solid @disable-color; - border-radius: 4px; - icon { - color: @disable-color; - } - - &.active { - background: transparent linear-gradient(315deg, @primary-light-color 0%, @primary-dark-color 100%) 0% 0% no-repeat padding-box; - icon { - color: @light-color; - } - } -} +//.custom-view-button { +// padding: 4px; +// background: @light-color; +// border: 1px solid @disable-color; +// border-radius: 4px; +// icon { +// color: @disable-color; +// } +// +// &.active { +// background: transparent linear-gradient(315deg, @primary-light-color 0%, @primary-dark-color 100%) 0% 0% no-repeat padding-box; +// icon { +// color: @light-color; +// } +// } +//} // .uk-card { // &.funder-grid { diff --git a/explore/src/app/funders/funders.component.ts b/explore/src/app/funders/funders.component.ts index 4fedc5ec..2e0834a8 100644 --- a/explore/src/app/funders/funders.component.ts +++ b/explore/src/app/funders/funders.component.ts @@ -18,6 +18,7 @@ import {LayoutService} from '../openaireLibrary/dashboard/sharedComponents/sideb import {FormBuilder, FormControl} from '@angular/forms'; import {debounceTime, distinctUntilChanged} from 'rxjs/operators'; import {GroupedRequestsService} from "../openaireLibrary/services/groupedRequests.service"; +import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields"; @Component({ selector: 'funders', @@ -31,6 +32,7 @@ export class FundersComponent implements OnInit { pageTitle: string = "OpenAIRE - Explore | Funders"; pageDescription: string = "Funders | Be an integral part of the open R&I ecosystem"; properties: EnvProperties = properties; + public openaireEntities = OpenaireEntities; breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'funders'}]; showLoading: boolean = true; isMobile: boolean = false; @@ -111,10 +113,12 @@ export class FundersComponent implements OnInit { {value: 'dashboard', label: 'Funders with dashboard'} ]; this.sortOptions = [ - {value: 'alphAsc', label: 'Alphabetically Asc. (A-Z)'}, - {value: 'alphDsc', label: 'Alphabetically Dsc. (Z-A)'}, - {value: 'oaDsc', label: '"Open Access %" Dsc.'}, - {value: 'countryAsc', label: 'Country Asc. (A-Z)'} + {value: 'alphAsc', label: 'Alphabetically asc. (A-Z)'}, + {value: 'alphDsc', label: 'Alphabetically desc. (Z-A)'}, + {value: 'oaDsc', label: 'Open Access % desc.'}, + {value: 'countryAsc', label: 'Country desc. (A-Z)'}, + {value: 'researcProductsDsc', label: this.openaireEntities.RESULTS+' desc.'}, + {value: 'projectsDsc', label: this.openaireEntities.PROJECTS+' desc.'} ]; this.getFunders(); this.keywordControl = this.fb.control(''); @@ -355,6 +359,12 @@ export class FundersComponent implements OnInit { } }); break; + case "researcProductsDsc": + this.funders = this.funders.sort((a, b) => b['researchProducts'] - a['researchProducts']); + break; + case "projectsDsc": + this.funders = this.funders.sort((a, b) => b['projects'] - a['projects']); + break; } this.filtering(); } From c4e8a2b390e922e16ed2462d97ec1d7cd3cfcbe1 Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Thu, 11 Jul 2024 16:36:25 +0300 Subject: [PATCH 6/7] Updating openaireLibrary --- explore/src/app/openaireLibrary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/explore/src/app/openaireLibrary b/explore/src/app/openaireLibrary index 0896d5a3..7a18b65b 160000 --- a/explore/src/app/openaireLibrary +++ b/explore/src/app/openaireLibrary @@ -1 +1 @@ -Subproject commit 0896d5a3ceba923b6958cd8ec55fca308302deaa +Subproject commit 7a18b65b40c151cabbee93998f8ced4683ed0a90 From 45f93d79efeaf47644dc7c88bfa4ea955292d248 Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Fri, 12 Jul 2024 10:59:56 +0300 Subject: [PATCH 7/7] [develop | DONE | CHANGED]: Added logs for [production-release-july-2024] - 2024/07/11. --- explore/CHANGELOG.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/explore/CHANGELOG.md b/explore/CHANGELOG.md index 84c6afde..79df2a0f 100644 --- a/explore/CHANGELOG.md +++ b/explore/CHANGELOG.md @@ -14,6 +14,21 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - *Fixed (for any bug fixes)* - *Security (in case of vulnerabilities)* +## [production-release-july-2024] - 2024/07/11 +### Changed +* Parse instances new info (to delete deletedbyinference records) +* Detailed page: Remove subjects by vocabulary section and show all subjects under keywords + +### Fixed +* Updated vocabulary for Fields of Science level 4 +* Linking: Do not add unidentified code in queries - missing irish funders + +### Added +* Funders page: More information in cards (i.e. country, registered) +* Funders page: New sorting options by research products & projects +* Links between Research products and Data sources +* Design of compact search results + ## [production-release-june-2024] - 2024/06/04 ### Changed * Filter out unidentified projects from the search page and related tabs in detailed pages