[master]: Add open access indicator in all monitors

This commit is contained in:
Konstantinos Triantafyllou 2024-04-30 15:40:03 +03:00
parent 4c4429b1ea
commit 79585f565b
14 changed files with 311 additions and 166 deletions

View File

@ -11,8 +11,6 @@ import {CustomFilterService} from "../openaireLibrary/shared/customFilter.servic
import {StakeholderBaseComponent} from "../openaireLibrary/monitor-admin/utils/stakeholder-base.component";
import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields";
import {RouterHelper} from "../openaireLibrary/utils/routerHelper.class";
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
import {ConfigurationService} from "../openaireLibrary/utils/configuration/configuration.service";
import {Session} from "../openaireLibrary/login/utils/helper.class";
import {properties as beta} from "../../environments/environment.beta";
@ -22,49 +20,56 @@ import {UserManagementService} from "../openaireLibrary/services/user-management
selector: 'national',
template: `
<div>
<loading *ngIf="loading" class="uk-position-center"></loading>
<div *ngIf="!loading && stakeholder">
<div class="uk-banner uk-light">
<div class="uk-container uk-container-large">
<div class="uk-padding-small uk-padding-remove-vertical">
<div class="uk-grid uk-grid-large uk-flex-middle uk-margin-medium-bottom" uk-grid>
<div class="uk-width-expand">
<h1 *ngIf="stakeholder" class="uk-h3 uk-margin-remove uk-text-truncate">{{entities.country}} {{entities.stakeholder}}</h1>
<loading *ngIf="loading" class="uk-position-center"></loading>
<div *ngIf="!loading && stakeholder">
<div class="uk-banner uk-light">
<div class="uk-container uk-container-large">
<div class="uk-padding-small uk-padding-remove-vertical">
<div class="uk-grid uk-grid-large uk-flex-middle uk-margin-medium-bottom" uk-grid>
<div class="uk-width-expand">
<h1 class="uk-h3 uk-margin-remove uk-text-truncate">{{ entities.country }} {{ entities.stakeholder }}</h1>
</div>
<div class="uk-width-auto">
<oa-indicator [stakeholder]="stakeholder"></oa-indicator>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="uk-banner-footer">
<div class="uk-container uk-container-large uk-flex uk-flex-between">
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
<li [class.uk-active]="!isSearch">
<a [routerLink]="'/national'">{{entities.stakeholder}}</a>
</li>
<li [class.uk-active]="isSearch">
<a [routerLink]="'/national/search/find/research-outcomes'" [queryParams]="routerHelper.createQueryParams(['type','peerreviewed'], [quote('publications'), quote('true')])">
Browse {{openaireEntities.RESULTS}}</a>
</li>
</ul>
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
Manage
</a>
<a *ngIf="sandboxLink" [href]="sandboxLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
Sandbox
</a>
</div>
</div>
</div>
</div>
<div class="uk-margin-medium-top uk-margin-medium-bottom">
<router-outlet></router-outlet>
</div>
</div>
<h3 *ngIf="!loading && !stakeholder" class="uk-position-center">
No {{entities.country}} {{entities.stakeholder}} yet.
</h3>
<div class="uk-banner-footer">
<div class="uk-container uk-container-large uk-flex uk-flex-between">
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
<li [class.uk-active]="!isSearch">
<a [routerLink]="'/national'">{{ entities.stakeholder }}</a>
</li>
<li [class.uk-active]="isSearch">
<a [routerLink]="'/national/search/find/research-outcomes'"
[queryParams]="routerHelper.createQueryParams(['type','peerreviewed'], [quote('publications'), quote('true')])">
Browse {{ openaireEntities.RESULTS }}</a>
</li>
</ul>
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank"
class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
Manage
</a>
<a *ngIf="sandboxLink" [href]="sandboxLink" target="_blank"
class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
Sandbox
</a>
</div>
</div>
</div>
</div>
<div class="uk-margin-medium-top uk-margin-medium-bottom">
<router-outlet></router-outlet>
</div>
</div>
<h3 *ngIf="!loading && !stakeholder" class="uk-position-center">
No {{ entities.country }} {{ entities.stakeholder }} yet.
</h3>
</div>
<role-verification *ngIf="stakeholder" [id]="stakeholder.alias" [name]="stakeholder.name" [dashboard]="'National Open Access Monitor, Ireland'"
<role-verification *ngIf="stakeholder" [id]="stakeholder.alias" [name]="stakeholder.name"
[dashboard]="'National Open Access Monitor, Ireland'"
[type]="stakeholder.type" [service]="'irish'" [relativeTo]="null"></role-verification>
`
})

View File

@ -8,6 +8,7 @@ import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
import {open_access} from "../openaireLibrary/utils/icons/icons";
import {SandboxGuard} from "../shared/sandbox.guard";
import {OaIndicatorModule} from "../shared/oa-indicator/oa-indicator.module";
const routes: Route[] = [
{
@ -19,7 +20,7 @@ const routes: Route[] = [
];
@NgModule({
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule],
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule, OaIndicatorModule],
declarations: [NationalComponent],
exports: [NationalComponent],
})

@ -1 +1 @@
Subproject commit 4231b65880df19494dbde5ecbbbc17af63f9ca9b
Subproject commit fb34dd415e3b9eaf6149d930c378b60e7975c110

View File

@ -24,88 +24,112 @@ import {properties as beta} from "../../environments/environment.beta";
template: `
<loading *ngIf="loading" class="uk-position-center"></loading>
<div *ngIf="!loading">
<div class="uk-banner uk-light">
<div class="uk-container uk-container-large">
<div class="uk-padding-small uk-padding-remove-vertical">
<div *ngIf="stakeholder" class="uk-grid uk-grid-large uk-flex-middle uk-margin-medium-bottom" uk-grid>
<div class="uk-width-expand">
<div class="uk-grid uk-grid-small uk-flex-middle" uk-grid>
<div class="uk-card uk-card-default uk-padding-small">
<img *ngIf="stakeholder.logoUrl; else elseBlock" [src]="stakeholder | logoUrl" [alt]="stakeholder.name + ' logo'" class="uk-height-max-xsmall" style="max-width: 180px;">
<ng-template #elseBlock>
<img src="assets/common-assets/placeholder.png" alt="OpenAIRE placeholder logo" class="uk-height-max-xsmall" style="max-width: 180px;">
</ng-template>
</div>
<div class="uk-width-expand uk-margin-small-left">
<div class="uk-h4 uk-margin-remove uk-text-truncate">{{stakeholder.name}}</div>
<ng-container *ngIf="stakeholder.details">
<div class="uk-text-xsmall uk-margin-small-bottom">
<entity-metadata [entityType]="stakeholder.details.type"
[compatibilityString]="stakeholder.details.compatibility"
[organizations]="stakeholder.details.organizations">
</entity-metadata>
</div>
<div class="uk-text-small">
<!-- Website URL -->
<div *ngIf="stakeholder.details?.websiteURL" class="uk-margin-xsmall-bottom">
<span>Website URL: </span>
<span class="uk-text-italic">
<div class="uk-banner uk-light">
<div class="uk-container uk-container-large">
<div class="uk-padding-small uk-padding-remove-vertical">
<div *ngIf="stakeholder" class="uk-grid uk-grid-large uk-flex-middle uk-margin-medium-bottom"
uk-grid>
<div class="uk-width-expand">
<div class="uk-grid uk-grid-small uk-flex-middle" uk-grid>
<div class="uk-card uk-card-default uk-padding-small">
<img *ngIf="stakeholder.logoUrl; else elseBlock" [src]="stakeholder | logoUrl"
[alt]="stakeholder.name + ' logo'" class="uk-height-max-xsmall"
style="max-width: 180px;">
<ng-template #elseBlock>
<img src="assets/common-assets/placeholder.png"
alt="OpenAIRE placeholder logo" class="uk-height-max-xsmall"
style="max-width: 180px;">
</ng-template>
</div>
<div class="uk-width-expand uk-margin-small-left">
<div class="uk-text-small uk-flex uk-flex-middle uk-margin-small-bottom">
<icon [name]="'navigate_before'" [flex]="true" [ratio]="0.8"
class="uk-margin-xsmall-right"></icon>
<a routerLink=".">Back to
all {{ entities.datasource }} {{ entities.stakeholders }}</a>
</div>
<div class="uk-h4 uk-margin-remove uk-text-truncate">{{ stakeholder.name }}</div>
<ng-container *ngIf="stakeholder.details">
<div class="uk-text-xsmall uk-margin-small-bottom">
<entity-metadata [entityType]="stakeholder.details.type"
[compatibilityString]="stakeholder.details.compatibility"
[organizations]="stakeholder.details.organizations">
</entity-metadata>
</div>
<div class="uk-text-small">
<!-- Website URL -->
<div *ngIf="stakeholder.details?.websiteURL"
class="uk-margin-xsmall-bottom">
<span>Website URL: </span>
<span class="uk-text-italic">
<a href="{{stakeholder.details.websiteURL}}" target="_blank" class="custom-external">
{{stakeholder.details.websiteURL}}
{{ stakeholder.details.websiteURL }}
</a>
</span>
</div>
<!-- OAI-PMH URL-->
<div *ngIf="stakeholder.details?.OAIPMHURL" class="uk-margin-xsmall-bottom">
<span>OAI-PMH URL: </span>
<span class="uk-text-italic">
</div>
<!-- OAI-PMH URL-->
<div *ngIf="stakeholder.details?.OAIPMHURL"
class="uk-margin-xsmall-bottom">
<span>OAI-PMH URL: </span>
<span class="uk-text-italic">
<a href="{{stakeholder.details.OAIPMHURL}}" target="_blank" class="custom-external">
{{stakeholder.details.OAIPMHURL}}
{{ stakeholder.details.OAIPMHURL }}
</a>
</span>
</div>
</div>
</ng-container>
</div>
</div>
</div>
</div>
</ng-container>
</div>
<div class="uk-width-auto">
<oa-indicator [stakeholder]="stakeholder"></oa-indicator>
</div>
</div>
<h1 *ngIf="!stakeholder" class="uk-h3 uk-margin-small-bottom">{{ entities.datasources }}</h1>
</div>
</div>
</div>
<h1 *ngIf="!stakeholder" class="uk-h3 uk-margin-small-bottom">{{entities.datasources}}</h1>
</div>
</div>
<div *ngIf="stakeholder" class="uk-banner-footer">
<div class="uk-container uk-container-large uk-flex uk-flex-between">
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
<li [class.uk-active]="!isSearch">
<a [routerLink]="['./', stakeholder.alias]" [relativeTo]="_route" (click)="isSearch = false">
{{entities.stakeholder}}
</a>
</li>
<li [class.uk-active]="isSearch">
<a [routerLink]="['./', stakeholder.alias, 'search']" [queryParams]="routerHelper.createQueryParams(['type','peerreviewed'], [quote('publications'), quote('true')])" [relativeTo]="_route">
Browse {{openaireEntities.RESULTS}}
</a>
</li>
</ul>
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
Manage
</a>
<a *ngIf="sandboxLink" [href]="sandboxLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
Sandbox
</a>
<a *ngIf="isProvideManager && provideLink" [href]="provideLink" target="_blank" class="uk-button uk-flex uk-flex-middle">
<img class="uk-margin-xsmall-bottom" width="78" src="assets/common-assets/logo-small-provide.png">
</a>
<div *ngIf="stakeholder" class="uk-banner-footer">
<div class="uk-container uk-container-large uk-flex uk-flex-between">
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
<li [class.uk-active]="!isSearch">
<a [routerLink]="['./', stakeholder.alias]" [relativeTo]="_route"
(click)="isSearch = false">
{{ entities.stakeholder }}
</a>
</li>
<li [class.uk-active]="isSearch">
<a [routerLink]="['./', stakeholder.alias, 'search']"
[queryParams]="routerHelper.createQueryParams(['type','peerreviewed'], [quote('publications'), quote('true')])"
[relativeTo]="_route">
Browse {{ openaireEntities.RESULTS }}
</a>
</li>
</ul>
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank"
class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
Manage
</a>
<a *ngIf="sandboxLink" [href]="sandboxLink" target="_blank"
class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
Sandbox
</a>
<a *ngIf="isProvideManager && provideLink" [href]="provideLink" target="_blank"
class="uk-button uk-flex uk-flex-middle">
<img class="uk-margin-xsmall-bottom" width="78"
src="assets/common-assets/logo-small-provide.png">
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div *ngIf="!this.alias || this.stakeholder" class="uk-margin-medium-top uk-margin-medium-bottom">
<router-outlet></router-outlet>
</div>
<role-verification *ngIf="stakeholder" [id]="stakeholder.alias" [name]="stakeholder.name" [type]="stakeholder.type" [dashboard]="'National Open Access Monitor, Ireland'"
[service]="'irish'" [relativeTo]="null"></role-verification>
<div *ngIf="!this.alias || this.stakeholder" class="uk-margin-medium-top uk-margin-medium-bottom">
<router-outlet></router-outlet>
</div>
<role-verification *ngIf="stakeholder" [id]="stakeholder.alias" [name]="stakeholder.name"
[type]="stakeholder.type" [dashboard]="'National Open Access Monitor, Ireland'"
[service]="'irish'" [relativeTo]="null"></role-verification>
</div>
`
})

View File

@ -11,6 +11,7 @@ import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
import {open_access} from "../openaireLibrary/utils/icons/icons";
import {LogoUrlPipeModule} from "../openaireLibrary/utils/pipes/logoUrlPipe.module";
import {SandboxGuard} from "../shared/sandbox.guard";
import {OaIndicatorModule} from "../shared/oa-indicator/oa-indicator.module";
const routes: Route[] = [
{
@ -23,7 +24,7 @@ const routes: Route[] = [
];
@NgModule({
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule, EntityMetadataModule, LogoUrlPipeModule],
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule, EntityMetadataModule, LogoUrlPipeModule, OaIndicatorModule],
declarations: [RepositoryComponent],
providers: [SearchDataprovidersService],
exports: [RepositoryComponent],

View File

@ -46,12 +46,8 @@ import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields
</a>
</div>
</div>
<div *ngIf="openResults && totalResults" class="uk-width-auto">
<div class="uk-progress-semicircle open-access" [attr.percentage]="getPercentage()" [style]="'--percentage:' + getPercentage()"></div>
<div class="uk-flex uk-flex-middle uk-margin-small-top">
<icon class="open-access" [name]="'open_access'" [flex]="true"></icon>
<span class="uk-margin-xsmall-left">Open Access</span>
</div>
<div *ngIf="stakeholder" class="uk-width-auto">
<oa-indicator [stakeholder]="stakeholder"></oa-indicator>
</div>
</div>
</div>
@ -85,7 +81,6 @@ import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields
})
export class ResearcherComponent extends ResearcherBaseComponent implements OnInit {
totalResults: number;
openResults: number;
loading: boolean = false;
stakeholder;
isSearch: boolean = false;
@ -149,9 +144,6 @@ export class ResearcherComponent extends ResearcherBaseComponent implements OnI
this.stakeholder = stakeholder;
}));
this.subscriptions.push(this._searchResearchResultsService.numOfResearchOutcomes(this.param + ' and (resultbestaccessright exact "Open Access") and (peerreviewed exact "true")', properties, null).subscribe(res => {
this.openResults = +res;
}));
}
}
}
@ -178,9 +170,4 @@ export class ResearcherComponent extends ResearcherBaseComponent implements OnI
this.layoutService.setRootClass(null);
LinksResolver.resetProperties();
}
getPercentage(){
let num = (this.openResults/this.totalResults)*100;
return num == 100?100:num.toPrecision(2);
}
}

View File

@ -9,6 +9,7 @@ import {IconsModule} from '../openaireLibrary/utils/icons/icons.module';
import {IconsService} from '../openaireLibrary/utils/icons/icons.service';
import {open_access} from '../openaireLibrary/utils/icons/icons';
import {SandboxGuard} from "../shared/sandbox.guard";
import {OaIndicatorModule} from "../shared/oa-indicator/oa-indicator.module";
const routes: Route[] = [
{
@ -22,7 +23,7 @@ const routes: Route[] = [
];
@NgModule({
imports: [CommonModule, RouterModule.forChild(routes), SearchOrcidServiceModule, SearchResearchResultsServiceModule, LoadingModule, IconsModule],
imports: [CommonModule, RouterModule.forChild(routes), SearchOrcidServiceModule, SearchResearchResultsServiceModule, LoadingModule, IconsModule, OaIndicatorModule],
declarations: [ResearcherComponent],
exports: [ResearcherComponent],
})

View File

@ -25,26 +25,37 @@ import {properties as beta} from "../../environments/environment.beta";
<div class="uk-banner uk-light">
<div class="uk-container uk-container-large">
<div class="uk-padding-small uk-padding-remove-vertical">
<div *ngIf="stakeholder" class="uk-grid uk-grid-large uk-flex-middle uk-margin-medium-bottom" uk-grid>
<div class="uk-width-expand">
<div class="uk-grid uk-grid-small uk-flex-middle" uk-grid>
<div class="uk-card uk-card-default uk-padding-small">
<img *ngIf="stakeholder.logoUrl; else elseBlock" [src]="stakeholder | logoUrl" [alt]="stakeholder.name + ' logo'" class="uk-height-max-xsmall" style="max-width: 180px;">
<ng-template #elseBlock>
<img src="assets/common-assets/placeholder.png" alt="OpenAIRE placeholder logo" class="uk-height-max-xsmall" style="max-width: 180px;">
</ng-template>
<div *ngIf="stakeholder" class="uk-grid uk-grid-large uk-flex-middle uk-margin-medium-bottom"
uk-grid>
<div class="uk-width-expand">
<div class="uk-grid uk-grid-small uk-flex-middle" uk-grid>
<div class="uk-card uk-card-default uk-padding-small">
<img *ngIf="stakeholder.logoUrl; else elseBlock" [src]="stakeholder | logoUrl"
[alt]="stakeholder.name + ' logo'" class="uk-height-max-xsmall"
style="max-width: 180px;">
<ng-template #elseBlock>
<img src="assets/common-assets/placeholder.png"
alt="OpenAIRE placeholder logo" class="uk-height-max-xsmall"
style="max-width: 180px;">
</ng-template>
</div>
<div class="uk-width-expand uk-margin-small-left">
<div class="uk-text-small uk-flex uk-flex-middle uk-margin-small-bottom">
<icon [name]="'navigate_before'" [flex]="true" [ratio]="0.8"
class="uk-margin-xsmall-right"></icon>
<a routerLink=".">Back to
all {{ entities.funder }} {{ entities.stakeholders }}</a>
</div>
<h1 class="uk-h4 uk-margin-remove uk-text-truncate">{{ stakeholder.name }}</h1>
</div>
</div>
</div>
<div class="uk-width-expand uk-margin-small-left">
<div class="uk-text-small uk-flex uk-flex-middle uk-margin-small-bottom">
<icon [name]="'navigate_before'" [flex]="true" [ratio]="0.8" class="uk-margin-xsmall-right"></icon>
<a routerLink=".">Back to all {{entities.funder}} {{entities.stakeholders}}</a>
</div>
<h1 class="uk-h4 uk-margin-remove uk-text-truncate">{{stakeholder.name}}</h1>
<div class="uk-width-auto">
<oa-indicator [stakeholder]="stakeholder"></oa-indicator>
</div>
</div>
</div>
</div>
<h1 *ngIf="!stakeholder" class="uk-h3 uk-margin-small-bottom">Research Funding Organisations ({{entities.funders}})</h1>
<h1 *ngIf="!stakeholder" class="uk-h3 uk-margin-small-bottom">Research Funding Organisations
({{ entities.funders }})</h1>
</div>
</div>
<div *ngIf="stakeholder" class="uk-banner-footer">
@ -52,18 +63,21 @@ import {properties as beta} from "../../environments/environment.beta";
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
<li [class.uk-active]="!isSearch">
<a [routerLink]="['./', stakeholder.alias]" [relativeTo]="_route"
(click)="isSearch = false">{{entities.stakeholder}}</a>
(click)="isSearch = false">{{ entities.stakeholder }}</a>
</li>
<li [class.uk-active]="isSearch">
<a [routerLink]="['./', stakeholder.alias, 'search']" [queryParams]="routerHelper.createQueryParams(['type','peerreviewed'], [quote('publications'), quote('true')])"
[relativeTo]="_route">Browse {{openaireEntities.RESULTS}}</a>
<a [routerLink]="['./', stakeholder.alias, 'search']"
[queryParams]="routerHelper.createQueryParams(['type','peerreviewed'], [quote('publications'), quote('true')])"
[relativeTo]="_route">Browse {{ openaireEntities.RESULTS }}</a>
</li>
</ul>
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank"
class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
Manage
</a>
<a *ngIf="sandboxLink" [href]="sandboxLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
<a *ngIf="sandboxLink" [href]="sandboxLink" target="_blank"
class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
Sandbox
</a>
</div>
@ -74,7 +88,8 @@ import {properties as beta} from "../../environments/environment.beta";
<router-outlet></router-outlet>
</div>
</div>
<role-verification *ngIf="stakeholder" [id]="stakeholder.alias" [name]="stakeholder.name" [type]="stakeholder.type" [service]="'irish'"
<role-verification *ngIf="stakeholder" [id]="stakeholder.alias" [name]="stakeholder.name"
[type]="stakeholder.type" [service]="'irish'"
[relativeTo]="null" [dashboard]="'National Open Access Monitor, Ireland'"></role-verification>
`
})

View File

@ -9,6 +9,7 @@ import {LogoUrlPipeModule} from "../openaireLibrary/utils/pipes/logoUrlPipe.modu
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
import {open_access} from "../openaireLibrary/utils/icons/icons";
import {SandboxGuard} from "../shared/sandbox.guard";
import {OaIndicatorModule} from "../shared/oa-indicator/oa-indicator.module";
const routes: Route[] = [
{
@ -21,7 +22,7 @@ const routes: Route[] = [
];
@NgModule({
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule, LogoUrlPipeModule],
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule, LogoUrlPipeModule, OaIndicatorModule],
declarations: [RfoComponent],
exports: [RfoComponent],
})

View File

@ -43,6 +43,9 @@ import {UserManagementService} from "../openaireLibrary/services/user-management
</div>
</div>
</div>
<div class="uk-width-auto">
<oa-indicator [stakeholder]="stakeholder"></oa-indicator>
</div>
</div>
<h1 *ngIf="!stakeholder" class="uk-h3 uk-margin-small-bottom">Research Performing Organisations ({{entities.organizations}})</h1>
</div>

View File

@ -9,6 +9,7 @@ import {LogoUrlPipeModule} from "../openaireLibrary/utils/pipes/logoUrlPipe.modu
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
import {open_access} from "../openaireLibrary/utils/icons/icons";
import {SandboxGuard} from "../shared/sandbox.guard";
import {OaIndicatorModule} from "../shared/oa-indicator/oa-indicator.module";
const routes: Route[] = [
{
@ -21,7 +22,7 @@ const routes: Route[] = [
];
@NgModule({
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule, LogoUrlPipeModule],
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule, LogoUrlPipeModule, OaIndicatorModule],
declarations: [RpoComponent],
exports: [RpoComponent],
})

View File

@ -2,7 +2,7 @@ import {Portal} from "../openaireLibrary/utils/entities/adminTool/portal";
import {StakeholderConfiguration} from "../openaireLibrary/monitor-admin/utils/indicator-utils";
import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
import {Role} from "../openaireLibrary/login/utils/helper.class";
import {Stakeholder} from "../openaireLibrary/monitor/entities/stakeholder";
import {IndicatorPath, Stakeholder} from "../openaireLibrary/monitor/entities/stakeholder";
import {LinksResolver} from "../search/links-resolver";
export class Irish {
@ -10,7 +10,7 @@ export class Irish {
public static irishAdminToolsCommunity = "irish";
public static METADATA_PREFIX = '';
public portal: Portal = Portal.getMockCommunityInfo("noami", "Noami",['service'],['/search/advanced/services', '/search/find/services']);
public portal: Portal = Portal.getMockCommunityInfo("noami", "Noami", ['service'], ['/search/advanced/services', '/search/find/services']);
constructor() {
LinksResolver.resetProperties();
@ -19,9 +19,9 @@ export class Irish {
StakeholderConfiguration.ROLES.member = 'manager';
StakeholderConfiguration.ENTITIES.stakeholder = 'Monitor';
StakeholderConfiguration.ENTITIES.stakeholders = 'Monitors';
StakeholderConfiguration.ENTITIES.funder = 'RFO';
StakeholderConfiguration.ENTITIES.funders = 'RFOs';
StakeholderConfiguration.ENTITIES.stakeholders = 'Monitors';
StakeholderConfiguration.ENTITIES.funder = 'RFO';
StakeholderConfiguration.ENTITIES.funders = 'RFOs';
StakeholderConfiguration.ENTITIES.organization = 'RPO';
StakeholderConfiguration.ENTITIES.organizations = 'RPOs';
StakeholderConfiguration.ENTITIES.datasource = 'Repository';
@ -36,13 +36,12 @@ export class Irish {
{value: 'country', label: StakeholderConfiguration.ENTITIES.country},
{value: 'datasource', label: StakeholderConfiguration.ENTITIES.datasource},
{value: 'researcher', label: StakeholderConfiguration.ENTITIES.researcher}
];
StakeholderConfiguration.FUNDER_TYPES = [
{value: null, label: 'None'},
{value: 'private', label: 'Private'},
{value: 'government', label: 'Government'}
{value: null, label: 'None'},
{value: 'private', label: 'Private'},
{value: 'government', label: 'Government'}
];
StakeholderConfiguration.VISIBILITIES = [
@ -54,10 +53,40 @@ export class Irish {
LayoutService.HEADER_HEIGHT = '60px';
Role.GROUP = 'irish.';
/** OA Indicator */
Irish.initializeOAIndicators();
}
public static initializeOAIndicators(): void {
StakeholderConfiguration.openAccess.set('country', {
numerator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.indi_result_oa_with_license.oa_with_license\",\"type\":\"=\",\"values\":[\"1\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"ie_monitor\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0},
denominator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"ie_monitor\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0}
});
StakeholderConfiguration.openAccess.set('organization', {
numerator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.organization.id\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]},{\"field\":\"publication.indi_result_oa_with_license.oa_with_license\",\"type\":\"=\",\"values\":[\"1\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0},
denominator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.organization.id\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0}
});
StakeholderConfiguration.openAccess.set('funder', {
numerator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.project.funder.id\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.indi_result_oa_with_license.oa_with_license\",\"type\":\"=\",\"values\":[\"1\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0},
denominator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.project.funder.id\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0}
});
StakeholderConfiguration.openAccess.set('researcher', {
numerator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.result_orcid.orcid\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]},{\"field\":\"publication.indi_result_oa_with_license.oa_with_license\",\"type\":\"=\",\"values\":[\"1\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {"statsProfile": "openaire_stats"}, "filters": {}, "filtersApplied": 0},
denominator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.result_orcid.orcid\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {"statsProfile": "openaire_stats"}, "filters": {}, "filtersApplied": 0}
});
StakeholderConfiguration.openAccess.set('datasource', {
numerator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.datasource.id\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]},{\"field\":\"publication.indi_result_oa_with_license.oa_with_license\",\"type\":\"=\",\"values\":[\"1\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0},
denominator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.datasource.id\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0}
});
}
}
export class StakeholderPublication extends Stakeholder {
publications: number;
}
export interface OAIndicator {
numerator: IndicatorPath;
denominator: IndicatorPath;
}

View File

@ -0,0 +1,66 @@
import {Component, Input, OnInit} from "@angular/core";
import {Stakeholder} from "../../openaireLibrary/monitor/entities/stakeholder";
import {StatisticsService} from "../../openaireLibrary/monitor-admin/utils/services/statistics.service";
import {IndicatorStakeholderBaseComponent} from "../../openaireLibrary/monitor-admin/utils/stakeholder-base.component";
import {OAIndicator} from "../irish";
import {zip} from "rxjs";
@Component({
selector: "oa-indicator",
template: `
<ng-container *ngIf="percentage > 0">
<div class="uk-progress-semicircle open-access" [attr.percentage]="percentage"
[style]="'--percentage:' + percentage"></div>
<div class="uk-flex uk-flex-middle uk-margin-small-top">
<icon class="open-access" [name]="'open_access'" [flex]="true"></icon>
<span class="uk-margin-xsmall-left">Open Access</span>
</div>
</ng-container>
`
})
export class OaIndicatorComponent extends IndicatorStakeholderBaseComponent implements OnInit {
@Input()
public stakeholder: Stakeholder;
public percentage: number = 0;
constructor(private statisticsService: StatisticsService) {
super();
}
ngOnInit(): void {
this.initPercentage();
}
public initPercentage(): void {
let OAIndicator: OAIndicator = this.stakeholderUtils.openAccess.get(this.stakeholder.type);
if(OAIndicator) {
this.subscriptions.push(zip(
this.statisticsService.getNumbers(this.indicatorUtils.getSourceType(OAIndicator.numerator.source), this.indicatorUtils.getFullUrl(this.stakeholder, OAIndicator.numerator)),
this.statisticsService.getNumbers(this.indicatorUtils.getSourceType(OAIndicator.denominator.source), this.indicatorUtils.getFullUrl(this.stakeholder, OAIndicator.denominator))).subscribe(res => {
let numerator = this.calculate(res[0], OAIndicator.numerator.jsonPath);
let denominator = this.calculate(res[1], OAIndicator.denominator.jsonPath);
if (denominator > 0) {
this.percentage = Math.round(numerator * 100 / denominator);
}
}));
}
}
public calculate(response: any, jsonPath: string[]) {
let result = JSON.parse(JSON.stringify(response));
jsonPath.forEach(path => {
if (result) {
result = result[path];
}
});
if (typeof result === 'string' || typeof result === 'number') {
result = Number(result);
if (result === Number.NaN) {
result = 0;
}
} else {
result = 0;
}
return result;
}
}

View File

@ -0,0 +1,11 @@
import {NgModule} from "@angular/core";
import {CommonModule} from "@angular/common";
import {OaIndicatorComponent} from "./oa-indicator.component";
import {IconsModule} from "../../openaireLibrary/utils/icons/icons.module";
@NgModule({
declarations: [OaIndicatorComponent],
imports: [CommonModule, IconsModule],
exports: [OaIndicatorComponent]
})
export class OaIndicatorModule {}