Compare commits

...

62 Commits

Author SHA1 Message Date
argirok 5f67a4d11e Merge branch 'develop' 2024-09-09 13:07:00 +03:00
argirok 7d8e78f025 [develop | DONE | FIXED] customCss add checks if identity/customCss not defined 2024-09-09 12:54:04 +03:00
Alex Martzios 760afd89ea [develop | DONE | CHANGED] adminToolsAPIURL: remove duplicate '/' 2024-09-05 13:49:50 +03:00
argirok 3e55965ec7 [develop | DONE | FIXED] fixed loosing funder filter wn change page 2024-09-02 12:23:04 +03:00
argirok 40a060ed21 [develop | DONE | FIXED] fixed keyword search in Search projects 2024-09-02 11:50:46 +03:00
argirok 75714b8b27 [develop | DONE | ADDED] server.ts add custom css when generating the community css 2024-08-30 13:11:13 +03:00
argirok d15c3bd565 [develop | DONE | REMOVED] remove FAQ pages - add link to helpdesk 2024-08-14 15:31:17 +03:00
argirok 43dbbd4c47 [develop | DONE | CHANGED] Develop: update text
Change pricing to subscriptions, updates on ssubscriptions content
2024-07-31 11:42:13 +03:00
Konstantinos Triantafyllou 65f85ef1bc Update axios library 2024-07-22 11:52:18 +03:00
argirok 3968f744d5 [develop | DONE | CHANGED] Develop: update wording again to Graph API 2024-07-19 14:03:05 +03:00
argirok b11bd3b86f [develop | DONE | CHANGED] FAQs: update texts add categories 2024-07-19 14:02:33 +03:00
argirok 847a50dbf2 [develop | DONE | FIXED] Develop: fix broken link to Selective Access APIs documentation, update text 2024-07-18 09:56:17 +03:00
argirok edf7491c26 [develop | DONE | ADDED] Add Organization refine field in results for Connect 2024-07-17 13:25:44 +03:00
argirok 355889dc92 [develop | DONE | ADDED] Add pricing page and section in home page 2024-07-17 13:23:46 +03:00
argirok be730e7857 Merge branch 'develop' 2024-06-13 11:06:36 +03:00
argirok 7d5d23a503 Merge branch 'plugins-functionality' into develop 2024-06-13 10:18:43 +03:00
argirok e311db3d77 [pluginsFunctionality | DONE | CHANGED] Show official name and if not available, show name 2024-06-13 09:30:46 +03:00
argirok 6615e27941 [pluginsFunctionality | DONE | CHANGED] add link to name, comment out repository link 2024-06-11 14:12:59 +03:00
argirok a5e43c4bf9 [pluginsFunctionality | DONE | FIXED] allow multiple custom plugins 2024-06-11 12:18:46 +03:00
argirok 8d54218dbb [pluginsFunctionality | DONE | CHANGED] add required header 2024-06-10 09:09:48 +03:00
argirok 44e3e7f4bd [pluginsFunctionality | DONE | CHANGED] zenodo community code, imports cleanup 2024-06-10 09:09:23 +03:00
argirok f769567a7e [pluginsFunctionality | DONE | CHANGED] Deposit add page-enabled check to show links only if page is enabled, updates on the list of zenodo communities that contains master 2024-06-10 09:08:32 +03:00
Konstantinos Triantafyllou 5a55f3869d Update libraries 2024-05-30 15:45:47 +03:00
Konstantinos Triantafyllou 04151f5d0b Update library 2024-05-30 14:51:01 +03:00
Konstantinos Triantafyllou db6f83b23e Merge from develop 2024-05-30 14:49:56 +03:00
Konstantinos Triantafyllou 7e88e41037 [develop]: Fix a bug with search bar and dropdown in home page. 2024-05-29 19:39:46 +03:00
argirok a56e91b7ec [pluginsFunctionality | DONE | CHANGED] Deposit: add Suggested repos component and links 2024-05-17 10:04:58 +03:00
argirok ecd1682cc1 [pluginsFunctionality | DONE | CHANGED] use display title & short title 2024-05-14 14:51:37 +03:00
argirok dee055b392 [pluginsFunctionality | DONE | ADDED] pass helptexts in sdg page 2024-05-09 10:19:12 +03:00
argirok 0c92b719b3 [pluginsFunctionality | DONE | CHANGED] update plan values 2024-05-09 10:18:46 +03:00
argirok 3e3a98e522 [pluginsFunctionality | DONE | ADDED] add a test file app.component.spec.ts checking about piwik, run tests on build 2024-05-08 12:08:21 +03:00
argirok e0242ddace [pluginsFunctionality | DONE | FIXED] re-enable piwik tracking 2024-04-24 13:25:09 +03:00
argirok ca4cb0ea9e Merge branch 'develop' into plugins-functionality 2024-04-19 12:40:17 +03:00
argirok 2171875ca5 [pluginsFunctionality | DONE | CHANGED] read properly route without parameters 2024-04-04 09:29:37 +03:00
argirok 8f6ca702b1 [pluginsFunctionality | DONE | REMOVED] remove FOS component, use directly the library component - fixes the back issue after click to go to search page 2024-04-04 09:28:59 +03:00
argirok e0bd40c485 [pluginsFunctionality | DONE | ADDED] read parameter and save property forceCacheReload 2024-03-27 09:29:59 +02:00
argirok 6b634f93e0 [develop | DONE | FIX] undo setting this.properties.adminToolsCommunity in app component - fixes issue with wrong community in the server 2024-03-22 11:27:49 +02:00
argirok 8456115eb1 [plugins-functionality | WIP] 2024-03-21 09:52:20 +02:00
argirok 44d626d867 [plugins-functionality | WIP] 2024-03-15 20:19:31 +02:00
argirok 1aa3b54a1a [develop | DONE | REMOVED] remove test logs 2024-03-14 10:29:51 +02:00
argirok 1f29b3200f [develop | DONE | CHANGED] community home page: use method for grouped count queries 2024-03-13 12:05:31 +02:00
argirok cfb4d3bc2b [plugins-functionality | WIP] 2024-03-13 10:33:02 +02:00
argirok 2b1de70ce0 [plugins-functionality | WIP] 2024-03-11 13:27:27 +02:00
argirok 0137e57583 Merge branch 'develop' into plugins-functionality 2024-03-07 11:25:58 +02:00
argirok 73b9a03d60 [develop | DONE | ADDED] create CommunityAccess guard, replace isCommunity guard 2024-03-06 11:17:01 +02:00
argirok 9d54e942b7 [develop | DONE | CHANGED] remove default properties footer in case of community dashboard 2024-03-04 12:32:55 +02:00
argirok 159a175089 [develop | DONE | ADDED] add /health-check method 2024-02-29 09:35:33 +02:00
argirok 82f2baf865 [plugins-functionality | WIP] move affiliations component to be used in library - plugins 2024-02-22 12:57:52 +02:00
Alex Martzios 72f1f8c5be [develop] update submodules 2024-02-20 12:23:04 +02:00
argirok 8486fea501 Merge branch 'develop' 2024-02-15 12:18:17 +02:00
argirok 9ddc866ec9 [develop | DONE | FIXED] Search communities: add missing attribute in method signature 2024-02-14 13:05:09 +02:00
argirok 194778e639 [develop | DONE | REMOVED] Remove my orcid links from user menu for beta 2024-02-14 12:29:41 +02:00
Konstantinos Triantafyllou 7805be2e0b [develop | REMOVED]: Remove userInfoUrl usage 2024-02-13 12:16:04 +02:00
Alex Martzios 25629733e9 [plugins-functionality | WIP] move curators component in openaireLibrary, update submodules 2024-02-05 09:42:52 +02:00
argirok f6a50d81bb [plugins-functionality | DONE | FIXED] : changes after merge 2024-01-22 11:54:22 +02:00
argirok 81092cad50 [plugins-functionality | DONE | FIXED] : changes after merge 2024-01-22 11:54:12 +02:00
Alex Martzios c122ce01e1 [develop | DONE] update submodule 2024-01-11 12:50:33 +02:00
Alex Martzios 6efcd9df60 [develop | FIXED | DONE] add missing parameter (staticFields) in search dataproviders+projects for function prepareSearchPage() 2024-01-11 12:16:43 +02:00
Konstantinos Triantafyllou 8bb4862a7f Merge branch 'develop' of code-repo.d4science.org:MaDgIK/connect into develop 2023-12-01 18:38:49 +02:00
Konstantinos Triantafyllou c390216c22 [develop | DONE | FIXED]: Fixed dropdown position in entities selection of home page search. 2023-12-01 18:38:36 +02:00
argirok c51efd5713 [develop | DONE | FIXED] : in home and subjects page remove quoted from the advanced search link to make it work 2023-12-01 18:06:41 +02:00
Konstantinos Triantafyllou 89f8011e76 [develop | DONE]: Fix search input placeholders in home page. 2023-12-01 17:02:10 +02:00
58 changed files with 2277 additions and 2731 deletions

View File

@ -34,6 +34,12 @@
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"fileReplacements": [
{
"replace": "src/app/openaireLibrary/utils/properties/searchFields.ts",
"with": "src/app/shared/searchFields.community.ts"
}
],
"outputPath": "dist/connect/browser",
"index": "src/index.html",
"main": "src/main.ts",
@ -74,6 +80,12 @@
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/app/openaireLibrary/utils/properties/searchFields.ts",
"with": "src/app/shared/searchFields.community.ts"
}
],
"styles": [
"src/assets/common-assets/library-css/material.scss"
],
@ -98,6 +110,10 @@
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.beta.ts"
},
{
"replace": "src/app/openaireLibrary/utils/properties/searchFields.ts",
"with": "src/app/shared/searchFields.community.ts"
}
],
"optimization": {
@ -138,6 +154,10 @@
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
},
{
"replace": "src/app/openaireLibrary/utils/properties/searchFields.ts",
"with": "src/app/shared/searchFields.community.ts"
}
],
"optimization": {
@ -197,7 +217,7 @@
"tsConfig": "src/tsconfig.spec.json",
"karmaConfig": "src/karma.conf.js",
"styles": [
"src/styles.css"
"src/styles.less"
],
"scripts": [],
"assets": [
@ -221,7 +241,13 @@
"sourceMap": false,
"optimization": true,
"vendorChunk": true,
"buildOptimizer": true
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/app/openaireLibrary/utils/properties/searchFields.ts",
"with": "src/app/shared/searchFields.community.ts"
}
]
},
"beta": {
"outputHashing": "media",
@ -229,6 +255,10 @@
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.beta.ts"
},
{
"replace": "src/app/openaireLibrary/utils/properties/searchFields.ts",
"with": "src/app/shared/searchFields.community.ts"
}
],
"sourceMap": false,
@ -241,6 +271,10 @@
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
},
{
"replace": "src/app/openaireLibrary/utils/properties/searchFields.ts",
"with": "src/app/shared/searchFields.community.ts"
}
],
"sourceMap": false,

View File

@ -5,9 +5,9 @@
"ng": "ng",
"start": "ng serve --disable-host-check --host 0.0.0.0 --port 4200",
"build": "ng build",
"build-dev": "ng build --configuration=development",
"build-beta": "ng build --configuration=beta",
"build-prod": "ng build --configuration production",
"build-dev": "ng build --configuration=development && ng test --watch=false",
"build-beta": "ng build --configuration=beta && ng test --watch=false",
"build-prod": "ng build --configuration production && ng test --watch=false",
"webpack-bundle-analyzer": "ng build --stats-json && webpack-bundle-analyzer dist/connect/browser/stats.json --host 0.0.0.0",
"test": "ng test",
"e2e": "ng e2e",
@ -36,7 +36,7 @@
"@nguniversal/express-engine": "^16.1.1",
"@node-minify/clean-css": "^6.2.0",
"@node-minify/core": "^6.2.0",
"axios": "^0.27.2",
"axios": "^1.4.0",
"clipboard": "^1.5.16",
"core-js": "^2.5.4",
"express": "^4.15.2",

View File

@ -26,7 +26,7 @@ var bodyParser = require('body-parser')
var jsonParser = bodyParser.json()
function buildCss(portal: string, suffix = null, variables: {} = null) {
function buildCss(portal: string, suffix = null, variables: {} = null, customCss = "") {
let lessFile = 'community.less'
if (portal === 'connect') {
lessFile = 'connect.less'
@ -48,7 +48,7 @@ function buildCss(portal: string, suffix = null, variables: {} = null) {
rewriteUrls: 'all',
modifyVars: modifyVars
};
less.render(input, options, function (error, result) {
less.render(customCss + input , options, function (error, result) {
if (error) {
console.log(error);
} else {
@ -80,7 +80,7 @@ function buildAll(res: Response = null) {
if (response.data && Array.isArray(response.data) && response.data.length > 0) {
response.data.forEach((layout: Layout) => {
let variables = Layout.getVariables(CustomizationOptions.checkForObsoleteVersion(layout.layoutOptions, layout.portalPid));
buildCss(layout.portalPid, layout.date ? layout.date : null, variables);
buildCss(layout.portalPid, layout.date ? layout.date : null, variables, layout.layoutOptions.identity.customCss);
});
if (res) {
res.status(200).send({
@ -128,8 +128,13 @@ export function app() {
referer = isArray(req.headers.referer) ? req.headers.referer[0] : (<string>req.headers.referer);
referer = referer.split("?")[0];
}
if (referer && (XFRAME_WHITELIST.indexOf(referer) != -1 || referer.indexOf("/customize-layout") != -1 || referer.indexOf(".d4science.org") != -1)) {
// res.header('X-FRAME-OPTIONS', 'allow from ' +req.headers.referer);
if (referer && (XFRAME_WHITELIST.indexOf(referer) != -1 || referer.indexOf("/customize-layout") != -1 || referer.indexOf(".d4science.org") != -1 || referer.indexOf(".di.uoa.gr") != -1 || referer.indexOf(".openaire.eu") != -1 )) {
res.header('X-FRAME-OPTIONS', 'allow from ' +req.headers.referer);
res.header('Access-Control-Allow-Origin',req.headers.origin);
res.header('Access-Control-Allow-Methods', 'GET, HEAD, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Cache-control, Expires, Content-Type, Pragma');
res.header('Allow', 'GET, HEAD, OPTIONS');
} else {
res.header('X-FRAME-OPTIONS', 'SAMEORIGIN');
}
@ -186,7 +191,7 @@ export function app() {
server.post('/build-css/:id/:suffix', jsonParser,(req, res) => {
let variables = Layout.getVariables(CustomizationOptions.checkForObsoleteVersion(req.body, req.params.id));
buildCss(req.params.id , req.params.suffix, variables);
buildCss(req.params.id , req.params.suffix, variables, req.body.layoutOptions?.identity?.customCss);
res.status(200).send({
code: 200,
message: 'CSS build for ' + req.params.id + ' layout was successful'
@ -195,9 +200,33 @@ export function app() {
server.post('/build-css/preview/:id/:suffix', jsonParser, (req, res) => {
let variables = Layout.getVariables(CustomizationOptions.checkForObsoleteVersion(req.body, req.params.id));
buildCss(req.params.id, req.params.suffix, variables);
buildCss(req.params.id, req.params.suffix, variables, req.body.identity.customCss);
res.status(200).send({code: 200, message: 'CSS build for ' + req.params.id + ' layout was successful'});
});
server.get('/health-check', async (_req, res, _next) => {
var uptime = process.uptime();
const date = new Date(uptime*1000);
const days = date.getUTCDate() - 1,
hours = date.getUTCHours(),
minutes = date.getUTCMinutes(),
seconds = date.getUTCSeconds(),
milliseconds = date.getUTCMilliseconds();
const healthcheck = {
uptime: days + " days, " + hours + " hours, " + minutes + " minutes, " + seconds + " seconds, " + milliseconds + " milliseconds",
message: 'OK',
timestamp: new Date()
};
try {
res.send(healthcheck);
} catch (error) {
healthcheck.message = error;
res.status(503).send();
}
});
// Example Express Rest API endpoints
// server.get('/api/**', (req, res) => { });
// Serve static files from /browser

View File

@ -1,69 +0,0 @@
<ng-template #card let-organization="organization" let-fullView="fullView">
<div [class]="fullView?'uk-card-body uk-height-1-1 uk-flex uk-flex-column uk-flex-around':''">
<div class="affiliation-logo">
<img *ngIf="organization.logo_url"
[src]="organization.logo_url | urlPrefix"
alt="{{(organization.name)?organization.name:''}} logo"
class="uk-blend-multiply uk-height-max-xsmall" loading="lazy">
</div>
<div class="affiliation-name multi-line-ellipsis lines-3" *ngIf="organization.name && fullView">
<p class="uk-text-emphasis uk-text-bold uk-margin-remove">
{{organization.name}}
</p>
</div>
</div>
</ng-template>
<ng-container *ngIf="affiliations.length > 0">
<div *ngIf="showLoading" class="uk-animation-fade uk-width-1-1" role="alert">
<span class="loading-gif uk-align-center"></span>
</div>
<div *ngIf="longView"
class="uk-child-width-1-5@xl uk-child-width-1-4@l uk-child-width-1-3@m uk-child-width-1-2@s uk-text-center uk-grid"
uk-height-match="target: .affiliation-logo, .affiliation-name"
uk-scrollspy="cls: uk-animation-fade; target: .uk-card; repeat: false"
uk-grid>
<div *ngFor="let affiliation of affiliations;">
<div>
<div class="uk-card uk-card-default uk-card-hover affiliationCard">
<a *ngIf="affiliation.website_url" target="_blank" [href]="affiliation.website_url | urlPrefix" class="uk-link-reset">
<ng-container *ngTemplateOutlet="card; context: { organization: affiliation, fullView: true}"></ng-container>
</a>
<span *ngIf="!affiliation.website_url" class="uk-link-reset">
<ng-container *ngTemplateOutlet="card; context: { organization: affiliation, fullView: true}"></ng-container>
</span>
</div>
</div>
</div>
</div>
<div *ngIf="affiliations.length > 0 && communityFirstPage && !longView" class="uk-margin-large-top uk-margin-large-bottom uk-grid" uk-grid>
<div class="uk-width-1-3@m">
<h2>
Supporting Organizations
</h2>
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text uk-margin-top"
routerLinkActive="router-link-active" routerLink="/organizations">
<span class="uk-flex uk-flex-middle">
<span>Browse all</span>
</span>
</a>
</div>
<div class="uk-width-2-3@m">
<div class="uk-grid uk-child-width-1-3@m uk-child-width-1-2@s supportingOrganizations" uk-grid>
<div *ngFor="let affiliation of affiliations.slice(0,9);">
<a *ngIf="affiliation.website_url" target="_blank" [href]="affiliation.website_url | urlPrefix" class="uk-link-reset">
<ng-container *ngTemplateOutlet="card; context: {organization: affiliation, fullView: false}"></ng-container>
</a>
<span *ngIf="!affiliation.website_url" class="uk-link-reset">
<ng-container *ngTemplateOutlet="card; context: {organization: affiliation, fullView: false}"></ng-container>
</span>
</div>
</div>
</div>
</div>
</ng-container>
<!--<div *ngIf="affiliations.length == 0 && longView" class="uk-animation-fade uk-alert uk-alert-primary" role="alert">-->
<!-- No affiliations available-->
<!--</div>-->

View File

@ -1,18 +0,0 @@
.affiliationCard {
width: 260px !important;
height: 260px !important;
}
.supportingOrganizations a {
img, svg {
-webkit-filter: grayscale(1);
filter: grayscale(1);
transition-duration: 0.3s;
}
&:hover img, svg {
-webkit-filter: grayscale(0);
filter: grayscale(0);
transition-duration: 0.3s;
}
}

View File

@ -1,58 +0,0 @@
import {Component, Input} from '@angular/core';
import {ActivatedRoute} from '@angular/router';
import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties';
import {AffiliationService} from "../openaireLibrary/connect/affiliations/affiliation.service";
import {Affiliation} from "../openaireLibrary/utils/entities/CuratorInfo";
import {ConnectHelper} from "../openaireLibrary/connect/connectHelper";
import {Subscriber} from "rxjs";
import {properties} from "../../environments/environment";
@Component({
selector: 'affiliations',
templateUrl: './affiliations.component.html',
styleUrls: ['./affiliations.component.less']
})
export class AffiliationsComponent {
@Input() getAffiliationsFromAPI: boolean = false;
@Input() longView: boolean = false;
@Input() communityFirstPage: boolean = false;
@Input() affiliationsInSlider: number = 5;
@Input() affiliations: Affiliation[] = [];
@Input() sliderOptions = '';
@Input() arrows = true;
public showLoading: boolean = false;
public communityId: string;
public properties: EnvProperties = properties;
private subscriptions = [];
constructor(private route: ActivatedRoute, private affiliationService: AffiliationService) {
}
public ngOnInit() {
this.communityId = ConnectHelper.getCommunityFromDomain(properties.domain);
if (this.getAffiliationsFromAPI) {
this.showLoading = true;
this.affiliationService.initAffiliations(this.communityId);
this.subscriptions.push(this.affiliationService.affiliations.subscribe(
affiliations => {
this.affiliations = affiliations.filter((affiliation) => this.longView || !!affiliation['logo_url']);
this.showLoading = false;
},
error => {
console.error("Affiliations Component: Error getting affiliations for community with id: " + this.communityId, error);
this.showLoading = false;
}
));
}
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscriber) {
subscription.unsubscribe();
}
});
this.affiliationService.clearSubscriptions();
}
}

View File

@ -1,26 +0,0 @@
import {NgModule} from '@angular/core';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../openaireLibrary/error/isRouteEnabled.guard'
import {RouterModule} from '@angular/router';
import {AffiliationsComponent} from './affiliations.component';
import {AffiliationService} from "../openaireLibrary/connect/affiliations/affiliation.service";
import {CommonModule} from "@angular/common";
import {UrlPrefixModule} from "../openaireLibrary/utils/pipes/url-prefix.module";
@NgModule({
imports: [
CommonModule, RouterModule, UrlPrefixModule
],
declarations: [
AffiliationsComponent
],
providers:[PreviousRouteRecorder, IsRouteEnabled, AffiliationService],
exports: [
AffiliationsComponent
]
})
export class AffiliationsModule{}

View File

@ -2,7 +2,7 @@ import {NgModule} from '@angular/core';
import {RouterModule, Routes} from '@angular/router';
import {OpenaireErrorPageComponent} from './error/errorPage.component';
import {PageURLResolverComponent} from "./openaireLibrary/utils/pageURLResolver.component";
import {IsCommunity} from "./openaireLibrary/connect/communityGuard/isCommunity.guard";
import {CommunityAccessGuard} from "./utils/communityAccess.guard";
const routes: Routes = [
// ORCID Pages
@ -25,7 +25,7 @@ const routes: Routes = [
},
{path: 'about', redirectTo: 'about/learn-how', pathMatch: 'full'},
{path: 'about/learn-how', loadChildren: () => import('./learn-how/learn-how.module').then(m => m.LearnHowModule), data: {hasStickyHeaderOnMobile: true}},
{path: 'about/faq', loadChildren: () => import('./learn-how/faqs/faqs.module').then(m => m.FaqsModule), data: {hasStickyHeaderOnMobile: true}},
{path: 'subscriptions', loadChildren: () => import('./pricing/pricing.module').then(m => m.PricingModule)},
{path: 'get-started', loadChildren: () => import('./get-started/get-started.module').then(m => m.GetStartedModule)},
{
path: 'contact-us',
@ -40,37 +40,33 @@ const routes: Routes = [
{
path: 'content',
loadChildren: () => import('./content/contentPage.module').then(m => m.ContentPageModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'sdgs',
loadChildren: () => import('./sdg/sdg.module').then(m => m.LibSdgModule),
data: {hasQuickContact: false}
},
{
path: 'fields-of-science',
loadChildren: () => import('./fos/fos.module').then(m => m.LibFosModule),
data: {extraOffset: 100, hasQuickContact: false}
},
{path: 'fields-of-science', loadChildren: () => import('./openaireLibrary/fos/fos.module').then(m => m.FosModule), data: {extraOffset: 100, hasQuickContact: false}},
{
path: 'organizations',
loadChildren: () => import('./htmlPages/organizations/organizationsPage.module').then(m => m.OrganizationsPageModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'publications',
loadChildren: () => import('./htmlPages/publications/publications-page.module').then(m => m.PublicationsPageModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'projects',
loadChildren: () => import('./htmlPages/projects/projectsPage.module').then(m => m.ProjectsPageModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'national-bulletins',
loadChildren: () => import('./htmlPages/nationalBulletins/nationalBulletinsPage.module').then(m => m.NaionalBulletinPageModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'faqs',
@ -88,24 +84,24 @@ const routes: Routes = [
// {
// path: '',
// loadChildren: () => import('./htmlPages/featured/featuredPage.module').then(m => m.FeaturedPageModule),
// data: {hasQuickContact: false}, canActivateChild: [IsCommunity],
// data: {hasQuickContact: false}, canActivateChild: [CommunityAccessGuard],
// },
// {
// path: '**',
// loadChildren: () => import('./htmlPages/featured/featuredPage.module').then(m => m.FeaturedPageModule),
// data: {hasQuickContact: false}, canActivateChild: [IsCommunity],
// data: {hasQuickContact: false}, canActivateChild: [CommunityAccessGuard],
// },
// ]
// },
{
path: 'curators',
loadChildren: () => import('./curators/curators.module').then(m => m.CuratorsModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
loadChildren: () => import('./openaireLibrary/connect/components/curators/curators.module').then(m => m.CuratorsModule),
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'subjects',
loadChildren: () => import('./subjects/subjects.module').then(m => m.SubjectsModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'myCommunities',
@ -114,7 +110,7 @@ const routes: Routes = [
{
path: 'develop',
loadChildren: () => import('./develop/develop.module').then(m => m.DevelopModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
/** Testing Page for help contents */
{path: 'helper-test', loadChildren: () => import('./helper-test/helper-test.module').then(m => m.HelperTestModule)},
@ -122,41 +118,41 @@ const routes: Routes = [
{
path: 'search/result',
loadChildren: () => import('./landingPages/result/libResult.module').then(m => m.LibResultModule),
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [IsCommunity]
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [CommunityAccessGuard]
},
{
path: 'search/publication',
loadChildren: () => import('./landingPages/publication/libPublication.module').then(m => m.LibPublicationModule),
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [IsCommunity]
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [CommunityAccessGuard]
},
{
path: 'search/dataset',
loadChildren: () => import('./landingPages/dataset/libDataset.module').then(m => m.LibDatasetModule),
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [IsCommunity]
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [CommunityAccessGuard]
},
{
path: 'search/software',
loadChildren: () => import('./landingPages/software/libSoftware.module').then(m => m.LibSoftwareModule),
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [IsCommunity]
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [CommunityAccessGuard]
},
{
path: 'search/other', loadChildren: () => import('./landingPages/orp/libOrp.module').then(m => m.LibOrpModule),
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [IsCommunity]
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [CommunityAccessGuard]
},
{
path: 'search/project',
loadChildren: () => import('./landingPages/project/libProject.module').then(m => m.LibProjectModule),
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [IsCommunity]
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [CommunityAccessGuard]
},
{
path: 'search/dataprovider',
loadChildren: () => import('././landingPages/dataProvider/libDataProvider.module').then(m => m.LibDataProviderModule),
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [IsCommunity]
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [CommunityAccessGuard]
},
{
path: 'search/organization',
loadChildren: () => import('./landingPages/organization/libOrganization.module').then(m => m.LibOrganizationModule),
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [IsCommunity]
data: {hasQuickContact: false, hasMenuSearchBar: true}, canActivate: [CommunityAccessGuard]
},
/** Search Pages */
{path: 'search/find', redirectTo: 'search/find/research-outcomes', pathMatch: 'full'},
@ -168,86 +164,86 @@ const routes: Routes = [
{
path: 'search/find/research-outcomes',
loadChildren: () => import('./searchPages/simple/searchResearchResults.module').then(m => m.OpenaireSearchResearchResultsModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'search/find/publications',
component: PageURLResolverComponent,
data: {hasQuickContact: false},
canActivate: [IsCommunity]
canActivate: [CommunityAccessGuard]
},
{
path: 'search/find/datasets',
component: PageURLResolverComponent,
data: {hasQuickContact: false},
canActivate: [IsCommunity]
canActivate: [CommunityAccessGuard]
},
{
path: 'search/find/software',
component: PageURLResolverComponent,
data: {hasQuickContact: false},
canActivate: [IsCommunity]
canActivate: [CommunityAccessGuard]
},
{
path: 'search/find/other',
component: PageURLResolverComponent,
data: {hasQuickContact: false},
canActivate: [IsCommunity]
canActivate: [CommunityAccessGuard]
},
{
path: 'search/find/projects',
loadChildren: () => import('./searchPages/simple/searchProjects.module').then(m => m.LibSearchProjectsModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'search/find/dataproviders',
loadChildren: () => import('./searchPages/simple/searchDataProviders.module').then(m => m.LibSearchDataProvidersModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
/** Advanced Search Pages */
{
path: 'search/advanced/research-outcomes',
loadChildren: () => import('./searchPages/advanced/searchResearchResults.module').then(m => m.OpenaireAdvancedSearchResearchResultsModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'search/advanced/publications',
component: PageURLResolverComponent,
data: {hasQuickContact: false},
canActivate: [IsCommunity]
canActivate: [CommunityAccessGuard]
},
{
path: 'search/advanced/datasets',
component: PageURLResolverComponent,
data: {hasQuickContact: false},
canActivate: [IsCommunity]
canActivate: [CommunityAccessGuard]
},
{
path: 'search/advanced/software',
component: PageURLResolverComponent,
data: {hasQuickContact: false},
canActivate: [IsCommunity]
canActivate: [CommunityAccessGuard]
},
{
path: 'search/advanced/other',
component: PageURLResolverComponent,
data: {hasQuickContact: false},
canActivate: [IsCommunity]
canActivate: [CommunityAccessGuard]
},
{
path: 'search/advanced/organizations',
loadChildren: () => import('./searchPages/advanced/advancedSearchOrganizations.module').then(m => m.LibAdvancedSearchOrganizationsModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'search/advanced/dataproviders',
loadChildren: () => import('./searchPages/advanced/advancedSearchDataProviders.module').then(m => m.LibAdvancedSearchDataProvidersModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'search/advanced/projects',
loadChildren: () => import('./searchPages/advanced/advancedSearchProjects.module').then(m => m.LibAdvancedSearchProjectsModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
/** Deposit Pages */
{ path: 'participate/deposit-datasets',
@ -271,37 +267,42 @@ const routes: Routes = [
{
path: 'participate/deposit/learn-how',
loadChildren: () => import('./deposit/deposit.module').then(m => m.LibDepositModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'participate/deposit/search',
loadChildren: () => import('./deposit/searchDataprovidersToDeposit.module').then(m => m.LibSearchDataprovidersToDepositModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'participate/deposit/zenodo',
loadChildren: () => import('./deposit/zenodo/shareInZenodo.module').then(m => m.ShareInZenodoModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'participate/deposit/suggested',
loadChildren: () => import('./deposit/suggested/suggestedRepositories.module').then(m => m.SuggestedRepositoriesModule),
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
/** Linking Pages */
{
path: 'myclaims', loadChildren: () => import('./claims/myClaims/myClaims.module').then(m => m.LibMyClaimsModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'participate/claim',
loadChildren: () => import('./claims/linking/linkingGeneric.module').then(m => m.LibLinkingGenericModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'participate/direct-claim',
loadChildren: () => import('./claims/directLinking/directLinking.module').then(m => m.LibDirectLinkingModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
{
path: 'preview',
loadChildren: () => import('./demo/demo.module').then(m => m.DemoModule),
data: {hasQuickContact: false}, canActivate: [IsCommunity]
data: {hasQuickContact: false}, canActivate: [CommunityAccessGuard]
},
/** help pages - do not exist in Admin portal/api/db */
{

View File

@ -0,0 +1,19 @@
import {TestBed } from '@angular/core/testing';
import {properties} from "../environments/environment";
describe('Environment Configuration', () => {
beforeEach(() => {
TestBed.configureTestingModule({
});
});
it('should have correct setting for piwik tracking based on environment', () => {
if (properties.environment == "beta" || properties.environment == "production") {
expect(properties.enablePiwikTrack).toBe(true,`Piwik tracking: Expected enablePiwikTrack to be true but it is ${properties.enablePiwikTrack}`);
} else {
expect(properties.enablePiwikTrack).toBe(false, `Piwik tracking: Expected enablePiwikTrack to be false but it is ${properties.enablePiwikTrack}`);
}
});
// Add more tests for other properties as needed
});

View File

@ -78,7 +78,7 @@ import {Meta} from "@angular/platform-browser";
<schema2jsonld *ngIf="properties && showMenu && communityId && communityId.length > 0 && community"
[URL]="properties.domain + properties.baseLink"
[logoURL]="community.logoUrl" type="home" [searchActionRoute]="properties.searchLinkToResults"
[name]="(community.shortTitle) ? community.shortTitle : community.title"
[name]="(community.displayShortTitle) ? community.displayShortTitle : community.diplayTitle"
[description]="community.description">
</schema2jsonld>
<div class="custom-main-content">
@ -116,7 +116,7 @@ import {Meta} from "@angular/platform-browser";
[contactForm]="contactForm" [sending]="sending"></quick-contact>
<modal-alert #modal [overflowBody]="false"></modal-alert>
<role-verification *ngIf="community" service="connect"
[id]="community.communityId" [name]="community.title"
[id]="community.communityId" [name]="community.displayTitle"
[type]="community.type"></role-verification>
</div>
`
@ -189,6 +189,7 @@ export class AppComponent implements OnInit, OnDestroy {
ngOnInit() {
this.subscriptions.push(this.route.queryParams.subscribe(data => {
this.previewLayout = (data['previewLayout'] && data['previewLayout'].length > 0 ? data['previewLayout'] : null);
this.properties.forceCacheReload = (data['forceCacheReload'] ? true : false);
if (this.properties.environment == "production" || this.properties.environment == "development") {
this._meta.updateTag({content: 'all', name: 'robots'});
this.seoService.removeLinkForPrevURL();
@ -308,11 +309,13 @@ export class AppComponent implements OnInit, OnDestroy {
initAdminToolCommunity(communityId) {
if (communityId) {
this.properties.adminToolsPortalType = "community";
this.properties.plan = communityId == 'covid-19'?'Premium':this.community.plan;
if (this.document) {
this.initLayout(communityId);
}
} else {
this.properties.adminToolsPortalType = "connect";
this.properties.plan = null;
if (this.document) {
this.initLayout(this.communityId?this.communityId:'connect');
}
@ -376,10 +379,11 @@ export class AppComponent implements OnInit, OnDestroy {
if (this.community && !ConnectHelper.isPrivate(this.community, this.user)) {
this.communityId = this.community.communityId;
this.initAdminToolCommunity(this.communityId);
this.properties.footerGrantText = ""; //
this.header = {
// url: 'https://' + (this.properties.environment == 'beta' ? 'beta.' : '') + this.community.id + '.openaire.eu',
route: "/",
title: (this.community.shortTitle) ? this.community.shortTitle : this.community.title,
title: (this.community.displayShortTitle) ? this.community.displayShortTitle : this.community.displayTitle,
logoUrl: (this.community.isUpload) ? (properties.utilsService + '/download/' + this.community.logoUrl) : (StringUtils.urlPrefix(this.community.logoUrl) + this.community.logoUrl),
logoSmallUrl: (this.community.isUpload) ? (properties.utilsService + '/download/' + this.community.logoUrl) : (StringUtils.urlPrefix(this.community.logoUrl) + this.community.logoUrl),
position: 'left',
@ -407,7 +411,7 @@ export class AppComponent implements OnInit, OnDestroy {
new MenuItem("search", "Search", "", "/search/find", false, [], ["/search/find"], {},
null, null, null, null, "_blank", "internal", false,
[
new MenuItem("", OpenaireEntities.RESULTS, "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {resultbestaccessright: '"' + encodeURIComponent("Open Access") + '"'}),
new MenuItem("", OpenaireEntities.RESULTS, "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {}),
new MenuItem("", OpenaireEntities.PROJECTS, "", "/search/find/projects/", false, ["project"], ["/search/find/projects"], {}),
new MenuItem("", OpenaireEntities.DATASOURCES, "", "/search/find/dataproviders", false, ["datasource"], ["/search/find/dataproviders"], {}),
]
@ -443,11 +447,14 @@ export class AppComponent implements OnInit, OnDestroy {
this.bottomMenuItems.push(new MenuItem("", "Sources and methodology", "", "/content", false, [], [], {}));
}
if (this.user) {
this.userMenuItems = [ /*new MenuItem("","My profile","","",false,[],[],{}),*/
new MenuItem("", "My ORCID links", "", "/my-orcid-links", false, [], [], {}),
this.userMenuItems = [
new MenuItem("", "My links", "", "/myclaims", false, [], ["/myclaims"], {}),
new MenuItem("", "Invite users", "", "/invite", false, [], [], {}),
];
if(properties.environment != 'beta'){
this.userMenuItems = [new MenuItem("", "My ORCID links", "", "/my-orcid-links", false, [], [], {})]
.concat(this.userMenuItems)
}
if (this.isManager) {
this.userMenuItems.push(new MenuItem("", "Support", "https://tools.openaire.eu/group/openaire_rcd", "", false, [], [], {}))
}
@ -500,12 +507,14 @@ export class AppComponent implements OnInit, OnDestroy {
new MenuItem("", "Learn the process", restrictedData ? url + "/about/learn-how" : "", restrictedData ? "" : "/about/learn-how", false, [], ["/about/learn-in-depth"], {}),
new MenuItem("", "Publications", restrictedData ? url + "/publications" : "", restrictedData ? "" : "/publications", false, [], ["/publications"], {}),
new MenuItem("", "Roadmap", "https://trello.com/b/yfzUz0kp/openaire-connect-dashboard", "", false, [], [], {}),
new MenuItem("", "FAQs", restrictedData ? url + "/about/faq" : "", restrictedData ? "" : "/about/faq", false, [], ["/about/faq"], {})
new MenuItem("", "FAQs", "https://helpdesk.openaire.eu/help/en-gb/6", "", false, [], ["/about/faq"], {})
]
)
);
this.menuItems.push(
new MenuItem("communities", "Communities", restrictedData ? url + "/search/find/communities" : "", restrictedData ? "" : "/search/find/communities", false, [], ['/search/find/communities'], {}),
this.menuItems.push(new MenuItem("subscriptions", "Subscriptions", restrictedData ? url + "/subscriptions" : "",
restrictedData ? "" : "/subscriptions", false, [], ["/subscriptions"], {}));
this.menuItems.push(new MenuItem("communities", "Communities", restrictedData ? url + "/search/find/communities" : "",
restrictedData ? "" : "/search/find/communities", false, [], ['/search/find/communities'], {}),
);
this.bottomMenuItems = [
new MenuItem("", "About", "https://openaire.eu/project-factsheets", "", false, [], [], {}),

View File

@ -22,12 +22,12 @@ import {PageURLResolverModule} from "./openaireLibrary/utils/pageURLResolver.mod
import {Schema2jsonldModule} from "./openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
import {DEFAULT_TIMEOUT, TimeoutInterceptor} from "./openaireLibrary/timeout-interceptor.service";
import {ErrorInterceptorService} from "./openaireLibrary/error-interceptor.service";
import {IsCommunity} from "./openaireLibrary/connect/communityGuard/isCommunity.guard";
import {SubscribeService} from "./openaireLibrary/utils/subscribe/subscribe.service";
import {RoleVerificationModule} from "./openaireLibrary/role-verification/role-verification.module";
import {QuickContactModule} from "./openaireLibrary/sharedComponents/quick-contact/quick-contact.module";
import {AlertModalModule} from "./openaireLibrary/utils/modal/alertModal.module";
import {CustomizationService} from "./openaireLibrary/services/customization.service";
import {CommunityAccessGuard} from "./utils/communityAccess.guard";
@NgModule({
@ -49,7 +49,7 @@ import {CustomizationService} from "./openaireLibrary/services/customization.ser
declarations: [AppComponent, OpenaireErrorPageComponent],
exports: [AppComponent],
providers: [
CommunitiesService, CustomizationService, IsCommunity, SubscribeService,
CommunitiesService, CustomizationService, CommunityAccessGuard, SubscribeService,
{provide: APP_ID, useValue: 'serverApp'},
{
provide: HTTP_INTERCEPTORS,

View File

@ -8,13 +8,12 @@ import {properties} from "../../../environments/environment";
@Component({
selector: 'openaire-my-claims',
template: `
<my-claims [claimsInfoURL]=claimsInfoURL [userInfoURL]="userInfoURL" [communityId]=communityId></my-claims>
<my-claims [claimsInfoURL]="claimsInfoURL" [communityId]=communityId></my-claims>
`
})
export class OpenaireMyClaimsComponent {
claimsInfoURL:string;
userInfoURL: string;
communityId:string;
sub;
@ -27,8 +26,7 @@ import {properties} from "../../../environments/environment";
}
public ngOnInit() {
this.claimsInfoURL = properties.claimsInformationLink;
this.userInfoURL = properties.userInfoUrl;
this.claimsInfoURL = properties.claimsInformationLink;
this.sub = this.route.queryParams.subscribe(
communityId => {
this.communityId = ConnectHelper.getCommunityFromDomain(properties.domain);

View File

@ -26,18 +26,18 @@
uk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">
<div>
<img *ngIf="community.logoUrl != null && community.logoUrl != ''" src="{{community | logoUrl}}"
alt="{{(community.title)?community.title:community.shortTitle}} logo" class="uk-height-max-xsmall">
alt="{{(community.displayTitle)?community.displayTitle:community.displayShortTitle}} logo" class="uk-height-max-xsmall">
</div>
</div>
<div class="uk-card-body uk-padding-remove uk-margin-small-bottom">
<h3 class="uk-text-center uk-h6 uk-link" [ngClass]="(showDescription)?'uk-margin-small-bottom':''">
<span *ngIf="community.title">
{{community.title.slice(0, thresholdTitle)}}
<span *ngIf="community.title.length > thresholdTitle">...</span>
<span *ngIf="community.displayTitle">
{{community.displayTitle.slice(0, thresholdTitle)}}
<span *ngIf="community.displayTitle.length > thresholdTitle">...</span>
</span>
<span *ngIf="!community.title && community.shortTitle">
{{community.shortTitle.slice(0, thresholdTitle)}}
<span *ngIf="community.shortTitle.length > thresholdTitle">...</span>
<span *ngIf="!community.displayTitle && community.displayShortTitle">
{{community.displayShortTitle.slice(0, thresholdTitle)}}
<span *ngIf="community.displayShortTitle.length > thresholdTitle">...</span>
</span>
</h3>
<div class="uk-text-center" *ngIf="community.description != null && showDescription">

View File

@ -90,139 +90,139 @@
</div>
</div>
<div class="uk-section uk-section-large uk-container uk-container-large">
<div class="uk-margin-medium-top">
<h2 class="uk-h1">
Our mission for an Open and FAIR science<span class="uk-text-primary">.</span>
</h2>
<div class="uk-margin-large-top">
<div class="uk-child-width-1-3@m uk-child-width-1-1@s uk-grid-large uk-grid-match uk-grid" uk-grid=""
uk-height-match=".target">
<div class="uk-first-column">
<div class="uk-card uk-card-default uk-padding">
<div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center
uk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">
<div>
<img src="assets/connect-assets/home/virtual.svg"
alt="A Virtual Research Environment" style="height:60px; width:67px"/>
</div>
</div>
<div class="uk-card-body uk-padding-remove uk-margin-small-bottom">
<div class="target uk-text-center">
<h3 class="uk-6 uk-card-title uk-margin-small-bottom">A Virtual Research
Environment</h3>
<div>An overlay platform making it easy to share, link, disseminate and monitor all
your {{entities.PUBLICATIONS | lowercase}},
{{entities.DATASETS | lowercase}}, {{entities.SOFTWARE | lowercase}}, methods.
In one place.
</div>
</div>
<hr/>
<div>
<ul class="uk-list uk-text-small">
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
Access to OpenAIRE research graph
</li>
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
Moderated, front-end linking
</li>
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
Cross-platform search
</li>
</ul>
</div>
</div>
</div>
</div>
<div>
<div class="uk-card uk-card-default uk-padding">
<div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center
uk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">
<div>
<img src="assets/connect-assets/home/open_science.svg" alt="Open science in action"
style="height:60px; width:67px"/>
</div>
</div>
<div class="uk-card-body uk-padding-remove uk-margin-small-bottom">
<div class="target uk-text-center" style="">
<h3 class="uk-h6 uk-card-title uk-margin-small-bottom">Open Science in action</h3>
<div>A time-saving bundle of services for researchers to effortlessly practice open
science. An integral
part of the&nbsp;European Open Science Cloud.
</div>
</div>
<hr>
<div>
<ul class="uk-list uk-text-small">
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
Use of OpenAIRE Guidelines
</li>
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
Publish and get DOIs with Zenodo
</li>
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
EOSC Single Sign-On
</li>
</ul>
</div>
</div>
</div>
</div>
<div>
<div class="uk-card uk-card-default uk-padding">
<div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center
uk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">
<div>
<img src="assets/connect-assets/home/customize.svg" alt="Customized to your needs"
style="height:60px; width:67px"/>
</div>
</div>
<div class="uk-card-body uk-padding-remove uk-margin-small-bottom">
<div class="target uk-text-center" style="">
<h3 class="uk-h6 uk-card-title uk-margin-small-bottom">Customized to your needs</h3>
<div>A Gateway with your own brand, rules for aggregation, text &amp; data mining,
and presentation. Run
by you via a simple, yet powerful backend administration tool.
</div>
</div>
<hr>
<div>
<ul class="uk-list uk-text-small">
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
Access control
</li>
<!--<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85" flex="true"></icon>
Analytics: rich set of indicators
</li>-->
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
Look &amp; feel to match your brand
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- <div class="uk-section uk-section-large uk-container uk-container-large">-->
<!-- <div class="uk-margin-medium-top">-->
<!-- <h2 class="uk-h1">-->
<!-- Our mission for an Open and FAIR science<span class="uk-text-primary">.</span>-->
<!-- </h2>-->
<!-- <div class="uk-margin-large-top">-->
<!-- <div class="uk-child-width-1-3@m uk-child-width-1-1@s uk-grid-large uk-grid-match uk-grid" uk-grid=""-->
<!-- uk-height-match=".target">-->
<!-- <div class="uk-first-column">-->
<!-- <div class="uk-card uk-card-default uk-padding">-->
<!-- <div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center-->
<!-- uk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">-->
<!-- <div>-->
<!-- <img src="assets/connect-assets/home/virtual.svg"-->
<!-- alt="A Virtual Research Environment" style="height:60px; width:67px"/>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="uk-card-body uk-padding-remove uk-margin-small-bottom">-->
<!-- <div class="target uk-text-center">-->
<!-- <h3 class="uk-6 uk-card-title uk-margin-small-bottom">A Virtual Research-->
<!-- Environment</h3>-->
<!-- <div>An overlay platform making it easy to share, link, disseminate and monitor all-->
<!-- your {{entities.PUBLICATIONS | lowercase}},-->
<!-- {{entities.DATASETS | lowercase}}, {{entities.SOFTWARE | lowercase}}, methods.-->
<!-- In one place.-->
<!-- </div>-->
<!-- </div>-->
<!-- <hr/>-->
<!-- <div>-->
<!-- <ul class="uk-list uk-text-small">-->
<!-- <li class="uk-flex uk-flex-middle">-->
<!-- <icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"-->
<!-- flex="true"></icon>-->
<!-- Access to OpenAIRE research graph-->
<!-- </li>-->
<!-- <li class="uk-flex uk-flex-middle">-->
<!-- <icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"-->
<!-- flex="true"></icon>-->
<!-- Moderated, front-end linking-->
<!-- </li>-->
<!-- <li class="uk-flex uk-flex-middle">-->
<!-- <icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"-->
<!-- flex="true"></icon>-->
<!-- Cross-platform search-->
<!-- </li>-->
<!-- </ul>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div>-->
<!-- <div class="uk-card uk-card-default uk-padding">-->
<!-- <div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center-->
<!-- uk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">-->
<!-- <div>-->
<!-- <img src="assets/connect-assets/home/open_science.svg" alt="Open science in action"-->
<!-- style="height:60px; width:67px"/>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="uk-card-body uk-padding-remove uk-margin-small-bottom">-->
<!-- <div class="target uk-text-center" style="">-->
<!-- <h3 class="uk-h6 uk-card-title uk-margin-small-bottom">Open Science in action</h3>-->
<!-- <div>A time-saving bundle of services for researchers to effortlessly practice open-->
<!-- science. An integral-->
<!-- part of the&nbsp;European Open Science Cloud.-->
<!-- </div>-->
<!-- </div>-->
<!-- <hr>-->
<!-- <div>-->
<!-- <ul class="uk-list uk-text-small">-->
<!-- <li class="uk-flex uk-flex-middle">-->
<!-- <icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"-->
<!-- flex="true"></icon>-->
<!-- Use of OpenAIRE Guidelines-->
<!-- </li>-->
<!-- <li class="uk-flex uk-flex-middle">-->
<!-- <icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"-->
<!-- flex="true"></icon>-->
<!-- Publish and get DOIs with Zenodo-->
<!-- </li>-->
<!-- <li class="uk-flex uk-flex-middle">-->
<!-- <icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"-->
<!-- flex="true"></icon>-->
<!-- EOSC Single Sign-On-->
<!-- </li>-->
<!-- </ul>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div>-->
<!-- <div class="uk-card uk-card-default uk-padding">-->
<!-- <div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center-->
<!-- uk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">-->
<!-- <div>-->
<!-- <img src="assets/connect-assets/home/customize.svg" alt="Customized to your needs"-->
<!-- style="height:60px; width:67px"/>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="uk-card-body uk-padding-remove uk-margin-small-bottom">-->
<!-- <div class="target uk-text-center" style="">-->
<!-- <h3 class="uk-h6 uk-card-title uk-margin-small-bottom">Customized to your needs</h3>-->
<!-- <div>A Gateway with your own brand, rules for aggregation, text &amp; data mining,-->
<!-- and presentation. Run-->
<!-- by you via a simple, yet powerful backend administration tool.-->
<!-- </div>-->
<!-- </div>-->
<!-- <hr>-->
<!-- <div>-->
<!-- <ul class="uk-list uk-text-small">-->
<!-- <li class="uk-flex uk-flex-middle">-->
<!-- <icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"-->
<!-- flex="true"></icon>-->
<!-- Access control-->
<!-- </li>-->
<!-- &lt;!&ndash;<li class="uk-flex uk-flex-middle">-->
<!-- <icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85" flex="true"></icon>-->
<!-- Analytics: rich set of indicators-->
<!-- </li>&ndash;&gt;-->
<!-- <li class="uk-flex uk-flex-middle">-->
<!-- <icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"-->
<!-- flex="true"></icon>-->
<!-- Look &amp; feel to match your brand-->
<!-- </li>-->
<!-- </ul>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<div *ngIf="researchCommunities.length === 0" class="uk-container uk-container-large uk-margin-large-bottom">
<errorMessages [status]="[status]" [type]="'communities'"></errorMessages>
@ -272,6 +272,110 @@
</div>
</div>
</div>
<div class="uk-section uk-section-large uk-container uk-container-large">
<div class="uk-margin-medium-top">
<h2 class="uk-h1">
Subscription plans
</h2>
<div class="uk-margin-large-top">
<div class="uk-child-width-1-4@m uk-child-width-1-1@s uk-grid-medium uk-grid-match uk-grid" uk-grid=""
uk-height-match=".target">
<div class="uk-first-column">
<div class="uk-card uk-card-default uk-padding uk-flex">
<!--<div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center
uk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">
<div>
<img src="assets/connect-assets/home/virtual.svg"
alt="A Virtual Research Environment" style="height:60px; width:67px"/>
</div>
</div>-->
<div class="uk-card-body uk-padding-remove uk-margin-medium-bottom">
<div class="target uk-text-center">
<h5 class=" uk-card-title uk-margin-medium-bottom uk-text-uppercase uk-text-primary">Standard</h5>
<div>
Suggested for thematic research communities.
</div>
</div>
</div>
</div>
</div>
<div class="uk-first-column">
<div class="uk-card uk-card-default uk-padding uk-flex">
<!--<div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center
uk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">
<div>
<img src="assets/connect-assets/home/virtual.svg"
alt="A Virtual Research Environment" style="height:60px; width:67px"/>
</div>
</div>-->
<div class="uk-card-body uk-padding-remove uk-margin-medium-bottom">
<div class="target uk-text-center">
<h5 class=" uk-card-title uk-margin-medium-bottom uk-text-uppercase uk-text-primary ">Advanced</h5>
<div>
Suggested for research infrastructures.
</div>
</div>
</div>
</div>
</div>
<div class="uk-first-column">
<div class="uk-card uk-card-default uk-padding uk-flex">
<!--<div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center
uk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">
<div>
<img src="assets/connect-assets/home/virtual.svg"
alt="A Virtual Research Environment" style="height:60px; width:67px"/>
</div>
</div>-->
<div class="uk-card-body uk-padding-remove uk-margin-medium-bottom">
<div class="target uk-text-center">
<h5 class=" uk-card-title uk-margin-medium-bottom uk-text-uppercase uk-text-primary">Premium</h5>
<div>
Suggested for university alliances and networks of research organisations.
</div>
</div>
</div>
</div>
</div>
<div class="uk-first-column">
<div class="uk-card uk-card-default uk-padding uk-flex">
<!--<div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center
uk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">
<div>
<img src="assets/connect-assets/home/virtual.svg"
alt="A Virtual Research Environment" style="height:60px; width:67px"/>
</div>
</div>-->
<div class="uk-card-body uk-padding-remove uk-margin-medium-bottom">
<div class="target uk-text-center">
<h5 class=" uk-card-title uk-margin-small-bottom uk-text-uppercase uk-text-primary">CONNECT +<br>MONITOR BUNDLE</h5>
<div>
Bundle CONNECT and MONITOR plans at a special price.
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="uk-text-center uk-margin-medium-top">
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="subscriptions">
<span class="uk-flex uk-flex-middle">
<span>Learn more</span>
</span>
</a>
</div>
</div>
<div #contact
class="uk-section uk-container uk-container-large uk-margin-large-bottom uk-flex uk-flex-middle uk-flex-column">

View File

@ -1,837 +1,14 @@
<div>
<ng-template #tab_content
let-resultType="resultType" let-fetch="fetch" let-searchLinkToAdvancedPage="searchLinkToAdvancedPage"
let-params="params" let-type="type" let-typeName="typeName">
<div class="uk-grid uk-margin-remove">
<div class="uk-width-expand uk-padding uk-padding-remove-horizontal">
<search-tab [fetch]="fetch" [resultType]="resultType" [params]="params"
[searchLinkToAdvancedPage]="searchLinkToAdvancedPage" [properties]="properties">
</search-tab>
</div>
</div>
</ng-template>
<ng-template #analytics_tab_content
let-type="type" let-typeName="typeName">
<div *ngIf="analyticsActiveTab == type && isEntityEnabled(type)
&& statistics.statisticsSum && statistics.statisticsDisplay && statistics.statisticsSum[type].total>0
&& (statistics.statisticsDisplay.entities[type].numbers.map['total']['showInMonitor']
|| statistics.statisticsDisplay.entities[type].numbers.map['project']['showInMonitor']
|| statistics.statisticsDisplay.entities[type].numbers.map['open']['showInMonitor']
|| statistics.statisticsDisplay.entities[type].numbers.map['closed']['showInMonitor']
|| statistics.statisticsDisplay.entities[type].numbers.map['embargo']['showInMonitor']
|| statistics.statisticsDisplay.entities[type].numbers.map['restricted']['showInMonitor']
|| (statistics.allowedEntitiesMode['showInMonitor'] && statistics.statisticsSum
&& statistics.allowedChartsMode['showInMonitor'] && statistics.statisticsSum[type]
&& statistics.allowedChartsMode['showInMonitor'][type] && statistics.statisticsSum[type].total > 0
&& statistics.allowedChartsMode['showInMonitor'][type].length > 0) )">
<div class="tab-header uk-margin-bottom">
{{typeName}}
</div>
<ng-container *ngTemplateOutlet="stats; context: {
entity: type, entityName: typeName,
statisticsSum:statistics.statisticsSum, statisticsDisplay:statistics.statisticsDisplay,
allowedEntities: statistics.allowedEntitiesMode['showInMonitor'],
allowedCharts:statistics.allowedChartsMode['showInMonitor'],
showChartTitle: statistics.chartTitlesMode['showInMonitor'],
chartsInfoMap:statistics.chartsInfoMap, showIn:'showInMonitor'}">
</ng-container>
</div>
</ng-template>
<ng-template #stats let-entity="entity" let-entityName="entityName" let-statisticsSum="statisticsSum"
let-statisticsDisplay="statisticsDisplay" let-allowedEntities="allowedEntities"
let-allowedCharts="allowedCharts" let-chartsInfoMap="chartsInfoMap"
let-showChartTitle="showChartTitle"
let-showIn="showIn">
<div *ngIf=" showIn == 'showInMonitor' && allowedCharts && allowedCharts[entity] && allowedCharts[entity].length == 0 &&
!statisticsDisplay.entities[entity].numbers.map['total'][showIn] && !statisticsDisplay.entities[entity].numbers.map['project'][showIn] &&
!statisticsDisplay.entities[entity].numbers.map['open'][showIn] && !statisticsDisplay.entities[entity].numbers.map['closed'][showIn] &&
!statisticsDisplay.entities[entity].numbers.map['embargo'][showIn] && !statisticsDisplay.entities[entity].numbers.map['restricted'][showIn]"
class="uk-alert uk-alert-primary">
No graphs available
</div>
<div *ngIf="statisticsSum && statisticsDisplay && statisticsSum[entity].total > 0"
[class]="'uk-grid uk-grid-small uk-grid-match ' + (showIn == 'showInMonitor' ? ' uk-child-width-1-3@s uk-child-width-1-6@m' : ' uk-child-width-1-1@s uk-child-width-1-3@m')"
uk-grid>
<div *ngIf="statisticsDisplay.entities[entity].numbers.map['total'][showIn]">
<div class="uk-card uk-card-default uk-padding-small">
<div class="uk-h4 uk-text-bold">
{{statisticsSum[entity].total|number}}
</div>
<div>
Total
</div>
</div>
</div>
<div *ngIf="statisticsDisplay.entities[entity].numbers.map['project'][showIn] && statisticsSum[entity].projects">
<div class="uk-card uk-card-default uk-padding-small">
<div class="uk-h4 uk-text-bold">
{{statisticsSum[entity].projects|number}}
</div>
<div>
Total linked projects
</div>
</div>
</div>
<div *ngIf="statisticsDisplay.entities[entity].numbers.map['open'][showIn] && statisticsSum[entity].open_access">
<div class="uk-card uk-card-default uk-padding-small">
<div class="uk-h4 uk-text-bold">
{{statisticsSum[entity].open_access|number}}
</div>
<div>
Open access
</div>
</div>
</div>
<div *ngIf="statisticsDisplay.entities[entity].numbers.map['closed'][showIn] && statisticsSum[entity].closed_access">
<div class="uk-card uk-card-default uk-padding-small">
<div class="uk-h4 uk-text-bold">
{{statisticsSum[entity].closed_access|number}}
</div>
<div>
Closed access
</div>
</div>
</div>
<div *ngIf="statisticsDisplay.entities[entity].numbers.map['embargo'][showIn] && statisticsSum[entity].embargo">
<div class="uk-card uk-card-default uk-padding-small">
<div class="uk-h4 uk-text-bold">
{{statisticsSum[entity].embargo|number}}
</div>
<div>
Embargoed
</div>
</div>
</div>
<div *ngIf="statisticsDisplay.entities[entity].numbers.map['restricted'][showIn] && statisticsSum[entity].restricted">
<div class="uk-card uk-card-default uk-padding-small">
<div class="uk-h4 uk-text-bold">
{{statisticsSum[entity].restricted|number}}
</div>
<div>
Restricted
</div>
</div>
</div>
</div>
<div *ngIf="allowedEntities &&
statisticsSum && allowedCharts && statisticsSum[entity] &&
allowedCharts[entity] && statisticsSum[entity].total>0 &&
allowedCharts[entity].length>0">
<div *ngIf="showIn == 'showInDashboard'">
<div>
<div class="uk-position-relative">
<ul class="uk-list">
<li *ngFor="let chart of allowedCharts[entity]">
<div class="iframeContainer uk-height-medium uk-margin-medium-top uk-card uk-card-default uk-card-body">
<div *ngIf="showChartTitle[chart]">
{{chartsInfoMap[chart].title}}
</div>
<iframe [src]=chartsInfoMap[chart].url scrolling="no"></iframe>
</div>
</li>
</ul>
</div>
</div>
</div>
<div *ngIf="showIn == 'showInMonitor'" class="uk-grid uk-child-width-1-2@l uk-child-width-1-1@m ">
<div *ngFor="let chart of allowedCharts[entity]" class="uk-clearfix uk-margin-bottom">
<div class="iframeContainer uk-height-large uk-margin-medium-top uk-card uk-card-default uk-card-body">
<div *ngIf="showChartTitle[chart]">
{{chartsInfoMap[chart].title}}
</div>
<iframe [src]=chartsInfoMap[chart].url scrolling="no"></iframe>
</div>
</div>
</div>
</div>
</ng-template>
<div *ngIf="portal && community && !isPrivate()" >
<div *ngIf="portal && community" class="generalSearchForm heroBackground"> <!-- this div will have the
customized color or image -->
<div class="uk-container uk-container-large uk-flex uk-flex-center">
<div class="uk-width-2-3@m uk-width-1-2@l uk-margin-large-top uk-margin-large-bottom">
<h1 *ngIf="community.title" class="uk-text-center uk-h2 uk-margin-remove">
{{community.shortTitle}}
</h1>
<div *ngIf="community.shortTitle && community.title != community.shortTitle"
class="uk-text-center uk-margin-top">
{{community.title}}
</div>
<!-- <div [class.uk-invisible]="disableSelect" class="uk-margin-medium-top">-->
<!-- <advanced-search-input #advanced (searchEmitter)="goTo(true)">-->
<!-- <entities-selection [simpleView]="true" currentEntity="result" [selectedEntity]="selectedEntity" [customFilter]="customFilter"-->
<!-- (selectionChange)="entityChanged($event);advanced.focusNext(input, $event)" (disableSelectEmitter)="disableSelectChange($event)"-->
<!-- [onChangeNavigate]="false"></entities-selection>-->
<!-- <div input #input placeholder="Scholary works" [searchable]="true" [hint]="'Search in OpenAIRE'" [(value)]="keyword"></div>-->
<!-- </advanced-search-input>-->
<!-- <div *ngIf="selectedEntity === 'result' && input.focused" (click)="$event.stopPropagation();advanced.focusNext(input, $event)" class="uk-dropdown uk-display-block uk-margin-small-top uk-width-auto">-->
<!-- <div class="uk-padding-small">-->
<!-- <quick-selections [resultTypes]="resultTypes" [quickFilter]="resultsQuickFilter"></quick-selections>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<div [class.uk-invisible]="disableSelect" class="uk-margin-medium-top">
<advanced-search-input #advanced (searchEmitter)="goTo(true)">
<entities-selection class="uk-width-1-3" [simpleView]="true" currentEntity="result" [selectedEntity]="selectedEntity" [customFilter]="customFilter"
(selectionChange)="entityChanged($event);advanced.focusNext(input, $event)" (disableSelectEmitter)="disableSelectChange($event)"
[onChangeNavigate]="false"></entities-selection>
<div input #input class="uk-width-expand" placeholder="Scholary works" [searchable]="true" [hint]="'Search in OpenAIRE'" [(value)]="keyword"></div>
</advanced-search-input>
<div *ngIf="selectedEntity === 'result' && input.focused" (click)="$event.stopPropagation();advanced.focusNext(input, $event)" class="uk-dropdown uk-display-block uk-margin-small-top uk-width-auto">
<div class="uk-padding-small">
<quick-selections [resultTypes]="resultTypes" [quickFilter]="resultsQuickFilter"></quick-selections>
</div>
</div>
</div>
</div>
</div>
</div>
<div *ngIf="portal && community" class=" uk-container uk-container-large uk-section uk-section-small">
<div *ngIf="communityId" >
<div>
<div class="main-tabs-div">
<!-- <ng-template #summary_tab>
<div *ngIf="community" class="uk-grid uk-margin-remove">
<div class="uk-width-expand uk-padding uk-inline">
<div *ngIf="community.description" class="uk-margin-bottom ">
<div [innerHTML]="community.description | safeHtml"></div>
</div>
<div *ngIf="isRouteEnabled('/curators')" class="uk-margin-small-bottom">
<curators [longView]="false"></curators>
</div>
<div [class]="community.date || subscribers ? 'uk-margin-small-bottom' : ''">
<span *ngIf="community.date" class="uk-margin-right">
<span
class="lowOpacityColor uk-text-meta">Created: </span> {{community.date | date:'dd-MMM-yyyy'}}
</span>
<span>
<subscribe *ngIf="communityId" [communityId]="communityId" showNumbers=true
(countSubscribersEvent)="countSubscribersEvent($event)"></subscribe>
</span>
</div>
<div [class]="((projectTotal && projectTotal > 0 && isEntityEnabled('project') && isRouteEnabled(searchLinkToProjects)) ||
(contentProviderTotal && contentProviderTotal > 0 && isEntityEnabled('datasource') && isRouteEnabled(searchLinkToDataProviders)))
? 'uk-margin-small-bottom' : ''">
<span
*ngIf="projectTotal && projectTotal > 0 && isEntityEnabled('project') && isRouteEnabled(searchLinkToProjects)">
<span class="uk-text-meta">Projects: </span>
<a class="uk-margin-auto-vertical uk-margin-auto portal-link" [queryParams]=params
routerLinkActive="router-link-active"
[routerLink]="searchLinkToProjects">{{projectTotal|number}}
</a>
</span>
<span
*ngIf="contentProviderTotal && contentProviderTotal > 0 && isEntityEnabled('datasource') && isRouteEnabled(searchLinkToDataProviders)"
[class]="'uk-display-inline-block '+((projectTotal && projectTotal > 0 && isEntityEnabled('project') && isRouteEnabled(searchLinkToProjects)) ? 'uk-margin-left' : '')">
<span class="uk-text-meta">Content Providers: </span>
<a class="uk-margin-auto-vertical uk-margin-auto portal-link" [queryParams]=params
routerLinkActive="router-link-active"
[routerLink]="searchLinkToDataProviders">{{contentProviderTotal|number}}
</a>
</span>
<span *ngIf="projectsCalculated && contentProvidersCalculated &&
((projectTotal && projectTotal > 0 && isEntityEnabled('project') && isRouteEnabled(searchLinkToProjects))
|| (contentProviderTotal && contentProviderTotal > 0 && isEntityEnabled('datasource') && isRouteEnabled(searchLinkToDataProviders)))"
class="uk-icon uk-text-meta uk-margin-small-left"
title="{{buildProjectsAndContentProvidesTooltip()}}"
uk-tooltip="pos:bottom-right; delay:10; cls: community-page-tooltip uk-width-medium">
<svg width="15" height="15" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" icon="question"
ratio="1">
<circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9"></circle>
<circle cx="10.44" cy="14.42" r="1.05"></circle>
<path fill="none" stroke="#000" stroke-width="1.2"
d="M8.17,7.79 C8.17,4.75 12.72,4.73 12.72,7.72 C12.72,8.67 11.81,9.15 11.23,9.75 C10.75,10.24 10.51,10.73 10.45,11.4 C10.44,11.53 10.43,11.64 10.43,11.75"></path>
</svg>
</span>
</div>
<div
*ngIf="(zenodoCommunityIdS.length + ((masterZenodoCommunity) ? 1 : 0) > 0) && isRouteEnabled(shareInZenodoPage)"
class="">
<span class="lowOpacityColor uk-text-meta">Linked to</span>
<a class="portal-link uk-margin-small-left uk-margin-small-right" [queryParams]=params
routerLinkActive="router-link-active" [routerLink]="shareInZenodoPage">
<span>{{zenodoCommunityIdS.length + ((masterZenodoCommunity) ? 1 : 0)}}</span>
</a>
<span class="lowOpacityColor uk-text-meta">Zenodo Communities</span>
<span class="uk-icon uk-text-meta uk-margin-small-left"
title="{{buildZenodoCommunitiesTooltip()}}"
uk-tooltip="pos:bottom-right; delay:10; cls: community-page-tooltip uk-width-medium">
<svg width="15" height="15" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" icon="question"
ratio="1">
<circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9"></circle>
<circle cx="10.44" cy="14.42" r="1.05"></circle>
<path fill="none" stroke="#000" stroke-width="1.2"
d="M8.17,7.79 C8.17,4.75 12.72,4.73 12.72,7.72 C12.72,8.67 11.81,9.15 11.23,9.75 C10.75,10.24 10.51,10.73 10.45,11.4 C10.44,11.53 10.43,11.64 10.43,11.75"></path>
</svg>
</span>
</div>
</div>
<div *ngIf="isRouteEnabled('/subjects') && community.subjects && community.subjects.length > 0"
class="uk-width-1-3@m uk-padding right-column uk-inline">
<div class="uk-margin-bottom">
<div class="uk-text-meta uk-margin-small-bottom">Subjects</div>
<span *ngFor="let subject of community.subjects.slice(0,20) let i=index">
<span *ngIf="subject != ''">
<a class="portal-link"
[queryParams]="{f0:'resultsubject',fv0:createParams(subject)}"
routerLinkActive="router-link-active" [routerLink]="searchLinkToAdvancedResults">
<span>{{subject}}</span>
</a>
<span *ngIf="i < community.subjects.length-1 && i != 19">, </span>
</span>
</span>
<div
class="uk-margin-top uk-animation-fade uk-padding uk-padding-remove-top uk-position-bottom-right">
<a class="portal-link" routerLinkActive="router-link-active" [routerLink]="'/subjects'">
View all
</a>
</div>
</div>
</div>
</div>
</ng-template>
<ng-template #publications_tab>
<ng-container *ngTemplateOutlet="tab_content; context: {
resultType: 'publication', fetch: fetchPublications,
searchLinkToAdvancedPage: properties.searchLinkToAdvancedResults,
params: getParamsForSearchLink('publications'),
type: 'publication', typeName: 'publication',
showImpactFactors:(community.communityId == 'elixir-gr' || community.communityId == 'inspired-ris' )}">
</ng-container>
</ng-template>
<ng-template #datasets_tab>
<ng-container *ngTemplateOutlet="tab_content; context: {
resultType: 'dataset', fetch: fetchDatasets,
searchLinkToAdvancedPage: properties.searchLinkToAdvancedResults,
params: getParamsForSearchLink('datasets'),
type: 'dataset', typeName: 'research data',
showImpactFactors:(community.communityId == 'elixir-gr' || community.communityId == 'inspired-ris')}">
</ng-container>
</ng-template>
<ng-template #software_tab>
<ng-container *ngTemplateOutlet="tab_content; context: {
resultType: 'software', fetch: fetchSoftware,
searchLinkToAdvancedPage: properties.searchLinkToAdvancedResults,
params: getParamsForSearchLink('software'),
type: 'software', typeName: 'software',
showImpactFactors:(community.communityId == 'elixir-gr' || community.communityId == 'inspired-ris')}">
</ng-container>
</ng-template>
<ng-template #other_tab>
<ng-container *ngTemplateOutlet="tab_content; context: {
resultType: 'other', fetch: fetchOrps,
searchLinkToAdvancedPage: properties.searchLinkToAdvancedResults,
params: getParamsForSearchLink('other'),
type: 'orp', typeName: 'other products',
showImpactFactors:(community.communityId == 'elixir-gr' || community.communityId == 'inspired-ris')}">
</ng-container>
</ng-template>
<ng-template #analytics_tab>
<div *ngIf="statistics && statistics.statisticsDisplay && statistics.statisticsDisplay.isActive"
class="content-overflow uk-overflow-auto">
<div *ngIf="statistics && activeTab=='analytics'" class="uk-width-expand uk-padding">
<div class="uk-text-center">
<button *ngIf="isEntityEnabled('publication')
&& statistics.statisticsSum && statistics.statisticsDisplay && statistics.statisticsSum['publication'].total>0
&& statistics.statisticsSum && statistics.statisticsDisplay && statistics.statisticsSum['publication'].total>0
&&
( statistics.statisticsDisplay.entities['publication'].numbers.map['total']['showInMonitor']
|| statistics.statisticsDisplay.entities['publication'].numbers.map['project']['showInMonitor']
|| statistics.statisticsDisplay.entities['publication'].numbers.map['open']['showInMonitor']
|| statistics.statisticsDisplay.entities['publication'].numbers.map['closed']['showInMonitor']
|| statistics.statisticsDisplay.entities['publication'].numbers.map['embargo']['showInMonitor']
|| statistics.statisticsDisplay.entities['publication'].numbers.map['restricted']['showInMonitor']
|| ( statistics.allowedEntitiesMode['showInMonitor'] && statistics.statisticsSum
&& statistics.allowedChartsMode['showInMonitor'] && statistics.statisticsSum['publication']
&& statistics.allowedChartsMode['showInMonitor']['publication'] && statistics.statisticsSum['publication'].total > 0
&& statistics.allowedChartsMode['showInMonitor']['publication'].length > 0))"
[class]="(analyticsActiveTab == 'publication' ? 'active ' : '')+' publicationAnalytics uk-icon uk-icon-button uk-margin-right'"
uk-tooltip="title: Publications" (click)="analyticsActiveTab = 'publication'">
<img src="assets/connect-assets/home/entities/publication.svg">
</button>
<button *ngIf="isEntityEnabled('dataset')
&& statistics.statisticsSum && statistics.statisticsDisplay && statistics.statisticsSum['dataset'].total>0
&&
( statistics.statisticsDisplay.entities['dataset'].numbers.map['total']['showInMonitor']
|| statistics.statisticsDisplay.entities['dataset'].numbers.map['project']['showInMonitor']
|| statistics.statisticsDisplay.entities['dataset'].numbers.map['open']['showInMonitor']
|| statistics.statisticsDisplay.entities['dataset'].numbers.map['closed']['showInMonitor']
|| statistics.statisticsDisplay.entities['dataset'].numbers.map['embargo']['showInMonitor']
|| statistics.statisticsDisplay.entities['dataset'].numbers.map['restricted']['showInMonitor']
|| ( statistics.allowedEntitiesMode['showInMonitor'] && statistics.statisticsSum
&& statistics.allowedChartsMode['showInMonitor'] && statistics.statisticsSum['dataset']
&& statistics.allowedChartsMode['showInMonitor']['dataset'] && statistics.statisticsSum['dataset'].total > 0
&& statistics.allowedChartsMode['showInMonitor']['dataset'].length > 0))"
[class]="(analyticsActiveTab == 'dataset' ? 'active ' : '')+' datasetAnalytics uk-icon uk-icon-button uk-margin-right'"
uk-tooltip="title: Research Data" (click)="analyticsActiveTab = 'dataset'">
<img src="assets/connect-assets/home/entities/dataset.svg">
</button>
<button *ngIf="isEntityEnabled('software')
&& statistics.statisticsSum && statistics.statisticsDisplay && statistics.statisticsSum['software'].total>0
&&
( statistics.statisticsDisplay.entities['software'].numbers.map['total']['showInMonitor']
|| statistics.statisticsDisplay.entities['software'].numbers.map['project']['showInMonitor']
|| statistics.statisticsDisplay.entities['software'].numbers.map['open']['showInMonitor']
|| statistics.statisticsDisplay.entities['software'].numbers.map['closed']['showInMonitor']
|| statistics.statisticsDisplay.entities['software'].numbers.map['embargo']['showInMonitor']
|| statistics.statisticsDisplay.entities['software'].numbers.map['restricted']['showInMonitor']
|| ( statistics.allowedEntitiesMode['showInMonitor'] && statistics.statisticsSum
&& statistics.allowedChartsMode['showInMonitor'] && statistics.statisticsSum['software']
&& statistics.allowedChartsMode['showInMonitor']['software'] && statistics.statisticsSum['software'].total > 0
&& statistics.allowedChartsMode['showInMonitor']['software'].length > 0))"
[class]="(analyticsActiveTab == 'software' ? 'active ' : '')+' softwareAnalytics uk-icon uk-icon-button uk-margin-right'"
uk-tooltip="title: Software" (click)="analyticsActiveTab = 'software'">
<img src="assets/connect-assets/home/entities/software.svg">
</button>
<button *ngIf="isEntityEnabled('orp')
&& statistics.statisticsSum && statistics.statisticsDisplay && statistics.statisticsSum['orp'].total>0
&&
( statistics.statisticsDisplay.entities['orp'].numbers.map['total']['showInMonitor']
|| statistics.statisticsDisplay.entities['orp'].numbers.map['project']['showInMonitor']
|| statistics.statisticsDisplay.entities['orp'].numbers.map['open']['showInMonitor']
|| statistics.statisticsDisplay.entities['orp'].numbers.map['closed']['showInMonitor']
|| statistics.statisticsDisplay.entities['orp'].numbers.map['embargo']['showInMonitor']
|| statistics.statisticsDisplay.entities['orp'].numbers.map['restricted']['showInMonitor']
|| ( statistics.allowedEntitiesMode['showInMonitor'] && statistics.statisticsSum
&& statistics.allowedChartsMode['showInMonitor'] && statistics.statisticsSum['orp']
&& statistics.allowedChartsMode['showInMonitor']['orp'] && statistics.statisticsSum['orp'].total > 0
&& statistics.allowedChartsMode['showInMonitor']['orp'].length > 0))"
[class]="(analyticsActiveTab == 'orp' ? 'active ' : '')+' otherAnalytics uk-icon uk-icon-button'"
uk-tooltip="title: Other Research Products" (click)="analyticsActiveTab = 'orp'">
<img src="assets/connect-assets/home/entities/other.svg">
</button>
</div>
<hr>
<ng-container *ngTemplateOutlet="analytics_tab_content; context: {
type: 'publication', typeName: 'publications'}">
</ng-container>
<ng-container *ngTemplateOutlet="analytics_tab_content; context: {
type: 'dataset', typeName: 'research data'}">
</ng-container>
<ng-container *ngTemplateOutlet="analytics_tab_content; context: {
type: 'software', typeName: 'software'}">
</ng-container>
<ng-container *ngTemplateOutlet="analytics_tab_content; context: {
type: 'orp', typeName: 'other products'}">
</ng-container>
</div>
</div>
</ng-template>
<ng-template #enermaps_tab>
<div class="uk-grid uk-margin-remove">
<div class="uk-width-expand uk-padding">
<search-tab [fetch]="fetchFeaturedDatasets" [resultType]="'dataset'"
[properties]="properties" customTitle="Featured Datasets"
[showImpactFactors]="false" [showEnermaps]="true">
<div class="uk-margin-top uk-margin-bottom uk-text-meta">
<div>Here are listed some of the most important energy datasets as selected by energy experts.</div>
<div>
Check them if you want to easily explore and visualize the European energy landscape,
using only well-known datasets which you can trust.
</div>
</div>
</search-tab>
</div>
</div>
</ng-template>
<ng-template #mapping_tab>
<div *ngIf="activeTab == 'mapping'">
<div
class="uk-margin-left tab-header uk-margin uk-margin-top ">
Browse OpenAIRE Research Graph through a map of the main concepts linked to Coronavirus
</div>
<div class="uk-padding">
<iframe src="https://openaire.opscidia.com/?iframe=true&keyword=covid19&mapping_size=4"
title="Opscidia Ontology mapping" class="uk-width-1-1" style="height:700px"></iframe>
<span
class=" uk-text-baseline uk-text-meta uk-text-left ">Powered by <a
href="http://www.opscidia.com/" target="_blank" class="">Opscidia</a> and <a
href="https://graph.openaire.eu/" target="_blank" class="">OpenAIRE Research Graph</a> </span>
<span class="uk-text-right uk-float-right uk-text-baseline uk-text-meta"> Visit <a
class=" uk-margin-right uk-margin-small-top"
href="https://openaire.opscidia.com/?iframe=true&keyword=covid19&mapping_size=4" target="_blank" >
Opscidia Tool
</a></span>
</div>
</div>
</ng-template>
<ng-template #twitter_tab *ngIf="properties.environment == 'development'">
<div>
<div>
<a href="https://twitter.com/{{ communityInfo.twitterAccount }}?ref_src=twsrc%5Etfw" class="twitter-timeline" data-height="900">
Tweets by {{ communityInfo.twitterAccount }}
</a>
</div>
</div>
</ng-template> -->
<div id="mytabs" class="uk-grid uk-margin-remove-left uk-position-relative">
<div class="uk-margin-medium-right uk-margin-top uk uk-padding-remove uk-width-expand">
<div class="uk-width-1-1" uk-slider="finite: true">
<div class="uk-position-relative " >
<div class="uk-slider-container ">
<ul class=" uk-slider-items " style="flex-wrap: nowrap !important;" >
<li (click)="onSelectActiveTab('summary')">
<ul class="uk-tab">
<li [class.uk-active]="activeTab == 'summary'">
<a class="uk-width-1-1 uk-height-1-1 uk-flex uk-flex-center">
Summary
</a>
</li>
</ul>
</li>
<li *ngIf="fetchPublications.searchUtils.totalResults > 0 && isEntityEnabled('publication')"
(click)="onSelectActiveTab('publications')">
<ul class="uk-tab">
<li [class.uk-active]="activeTab == 'publication'">
<a class="uk-width-1-1 uk-height-1-1 uk-flex uk-flex-center">
{{openaireEntities.PUBLICATIONS}} ({{fetchPublications.searchUtils.totalResults | number}})
</a>
</li>
</ul>
</li>
<li *ngIf="fetchDatasets.searchUtils.totalResults > 0 && isEntityEnabled('dataset')"
(click)="onSelectActiveTab('datasets')">
<ul class="uk-tab">
<li [class.uk-active]="activeTab == 'dataset'">
<a class="uk-width-1-1 uk-height-1-1 uk-flex uk-flex-center">
{{openaireEntities.DATASETS}} ({{fetchDatasets.searchUtils.totalResults | number}})
</a>
</li>
</ul>
</li>
<li *ngIf="fetchSoftware.searchUtils.totalResults > 0 && isEntityEnabled('software')"
(click)="onSelectActiveTab('software')">
<ul class="uk-tab">
<li [class.uk-active]="activeTab == 'software'">
<a class="uk-width-1-1 uk-height-1-1 uk-flex uk-flex-center">
{{openaireEntities.SOFTWARE}} ({{fetchSoftware.searchUtils.totalResults | number}})
</a>
</li>
</ul>
</li>
<li *ngIf="fetchOrps.searchUtils.totalResults > 0 && isEntityEnabled('orp')"
(click)="onSelectActiveTab('other')">
<ul class="uk-tab">
<li [class.uk-active]="activeTab == 'orp'">
<a class="uk-width-1-1 uk-height-1-1 uk-flex uk-flex-center">
{{openaireEntities.OTHER}} ({{fetchOrps.searchUtils.totalResults | number}})
</a>
</li>
</ul>
</li>
<li *ngIf="properties.environment == 'development' && portal.twitterAccount"
(click)="onSelectActiveTab('twitter')">
<ul class="uk-tab">
<li [class.uk-active]="activeTab == 'twitter'">
<a class="uk-width-1-1 uk-height-1-1 uk-flex uk-flex-center">
Twitter
</a>
</li>
</ul>
</li>
</ul>
</div>
<div class="">
<a class="uk-position-center-left uk-blur-background" uk-slider-item="previous"><span uk-icon="chevron-left"></span></a>
<a class="uk-position-center-right uk-blur-background" uk-slider-item="next"><span uk-icon="chevron-right"></span></a>
</div>
</div>
</div>
</div>
<div class="uk-padding-small uk-padding-remove-bottom uk-padding-remove-right">
<ul class="uk-tab uk-height-1-1">
<li *ngIf="properties.environment != 'production' && communityId == 'covid-19'" (click)="onSelectActiveTab('mapping')" [class.uk-active]="activeTab == 'mapping'">
<a class="uk-width-1-1 uk-height-1-1 uk-flex uk-flex-center featuredTab">
Ontology Mapping
</a>
</li>
<li
*ngIf="communityId == 'enermaps' && fetchFeaturedDatasets.searchUtils.totalResults > 0 && isEntityEnabled('dataset')"
(click)="onSelectActiveTab('enermaps')" [class.uk-active]="activeTab == 'enermaps'">
<a class="uk-width-1-1 uk-height-1-1 uk-flex uk-flex-center featuredTab">
Featured Datasets ({{fetchFeaturedDatasets.searchUtils.totalResults | number}})
</a>
</li>
</ul>
</div>
</div>
<div *ngIf="activeTab == 'summary'">
<div *ngIf="community" class="uk-grid uk-grid-divider uk-padding uk-padding-remove-horizontal" uk-grid>
<div class="uk-width-expand">
<div *ngIf="community.description" class="uk-margin-bottom ">
<div [innerHTML]="community.description | safeHtml">
</div>
</div>
<div class="uk-card uk-card-default uk-padding-small">
<div *ngIf="isRouteEnabled('/curators')" class="uk-margin-bottom">
<curators [longView]="false"></curators>
</div>
<div class="uk-grid uk-grid-divider uk-child-width-1-2@m" uk-grid>
<div>
<div *ngIf="community.date" class="uk-margin-small-bottom">
<span class="uk-text-meta">Created: </span> {{community.date | date:'dd-MMM-yyyy'}}
</div>
<div [class]="projectTotal && projectTotal > 0 && isEntityEnabled('project') && isRouteEnabled(searchLinkToProjects) ? 'uk-margin-small-bottom' : ''">
<span *ngIf="projectTotal && projectTotal > 0 && isEntityEnabled('project') && isRouteEnabled(searchLinkToProjects)">
<span class="uk-text-meta">Projects: </span>
<a [queryParams]=params
routerLinkActive="router-link-active"
[routerLink]="searchLinkToProjects">{{projectTotal|number}}
</a>
<a *ngIf="projectsCalculated && (projectTotal && projectTotal > 0 && isEntityEnabled('project') && isRouteEnabled(searchLinkToProjects))"
[title]="buildProjectsTooltip()"
[attr.uk-tooltip]="'pos: bottom-right; delay: 10;'"
class="uk-link-reset uk-display-inline-block uk-margin-small-left">
<svg width="15" height="15" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" icon="question" ratio="1">
<circle fill="none" stroke="#8E8E8E" stroke-width="1.1" cx="10" cy="10" r="9"></circle>
<circle fill="none" stroke="#8E8E8E" cx="10.44" cy="14.42" r="1.05"></circle>
<path fill="none" stroke="#8E8E8E" stroke-width="1.2"
d="M8.17,7.79 C8.17,4.75 12.72,4.73 12.72,7.72 C12.72,8.67 11.81,9.15 11.23,9.75 C10.75,10.24 10.51,10.73 10.45,11.4 C10.44,11.53 10.43,11.64 10.43,11.75"></path>
</svg>
</a>
</span>
</div>
<div *ngIf="(zenodoCommunityIdS.length + ((masterZenodoCommunity) ? 1 : 0) > 0) && isRouteEnabled(shareInZenodoPage)">
<span class="uk-text-meta">Linked Zenodo Communities: </span>
<a [queryParams]=params
routerLinkActive="router-link-active" [routerLink]="shareInZenodoPage">
<span>{{zenodoCommunityIdS.length + ((masterZenodoCommunity) ? 1 : 0)}}</span>
</a>
<a [title]="buildZenodoCommunitiesTooltip()"
[attr.uk-tooltip]="'pos: bottom-right; delay: 10;'"
class="uk-link-reset uk-display-inline-block uk-margin-small-left">
<svg width="15" height="15" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" icon="question" ratio="1">
<circle fill="none" stroke="#8E8E8E" stroke-width="1.1" cx="10" cy="10" r="9"></circle>
<circle fill="none" stroke="#8E8E8E" cx="10.44" cy="14.42" r="1.05"></circle>
<path fill="none" stroke="#8E8E8E" stroke-width="1.2"
d="M8.17,7.79 C8.17,4.75 12.72,4.73 12.72,7.72 C12.72,8.67 11.81,9.15 11.23,9.75 C10.75,10.24 10.51,10.73 10.45,11.4 C10.44,11.53 10.43,11.64 10.43,11.75"></path>
</svg>
</a>
</div>
</div>
<div>
<div [class]="community.date || subscribers ? 'uk-margin-small-bottom' : ''">
<span>
<subscribe *ngIf="communityId" [communityId]="communityId" showNumbers=true
(countSubscribersEvent)="countSubscribersEvent($event)">
</subscribe>
</span>
</div>
<div [class]="contentProviderTotal && contentProviderTotal > 0 && isEntityEnabled('datasource') && isRouteEnabled(searchLinkToDataProviders) ? 'uk-margin-small-bottom' : ''">
<span *ngIf="contentProviderTotal && contentProviderTotal > 0 && isEntityEnabled('datasource') && isRouteEnabled(searchLinkToDataProviders)">
<span class="uk-text-meta">Content Providers: </span>
<a [queryParams]=params
routerLinkActive="router-link-active"
[routerLink]="searchLinkToDataProviders">{{contentProviderTotal|number}}
</a>
<a *ngIf="contentProvidersCalculated && (contentProviderTotal && contentProviderTotal > 0 && isEntityEnabled('datasource') && isRouteEnabled(searchLinkToDataProviders))"
[title]="buildContentProvidersTooltip()"
[attr.uk-tooltip]="'pos: bottom-right; delay: 10;'"
class="uk-link-reset uk-display-inline-block uk-margin-small-left">
<svg width="15" height="15" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" icon="question" ratio="1">
<circle fill="none" stroke="#8E8E8E" stroke-width="1.1" cx="10" cy="10" r="9"></circle>
<circle fill="none" stroke="#8E8E8E" cx="10.44" cy="14.42" r="1.05"></circle>
<path fill="none" stroke="#8E8E8E" stroke-width="1.2"
d="M8.17,7.79 C8.17,4.75 12.72,4.73 12.72,7.72 C12.72,8.67 11.81,9.15 11.23,9.75 C10.75,10.24 10.51,10.73 10.45,11.4 C10.44,11.53 10.43,11.64 10.43,11.75"></path>
</svg>
</a>
</span>
</div>
</div>
</div>
</div>
</div>
<div *ngIf="isRouteEnabled('/subjects') && displayedAllSubjects && displayedAllSubjects.length > 0" class="uk-width-1-3@m">
<div>
<div class="uk-text-meta uk-margin-small-bottom">Subjects</div>
<span *ngFor="let item of displayedAllSubjects.slice(0,20) let i=index">
<span *ngIf="item.value != ''">
<a class="portal-link"
[queryParams]="{f0:item.type,fv0:createParams(item.value)}"
routerLinkActive="router-link-active" [routerLink]="searchLinkToAdvancedResults">
<span>{{item.value}}</span>
</a>
<span *ngIf="i < displayedAllSubjects.length-1 && i != 19">, </span>
</span>
</span>
<div class="uk-animation-fade uk-margin-top">
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text" routerLinkActive="router-link-active" [routerLink]="'/subjects'">
View all
</a>
</div>
</div>
</div>
</div>
</div>
<div *ngIf="activeTab == 'publication' && fetchPublications.searchUtils.totalResults > 0 && isEntityEnabled('publication')">
<ng-container *ngTemplateOutlet="tab_content; context: {
resultType: 'publication', fetch: fetchPublications,
searchLinkToAdvancedPage: properties.searchLinkToAdvancedResults,
params: getParamsForSearchLink('publications'),
type: 'publication', typeName: 'publication'}">
</ng-container>
</div>
<div *ngIf="activeTab == 'dataset' && fetchDatasets.searchUtils.totalResults > 0 && isEntityEnabled('dataset')">
<ng-container *ngTemplateOutlet="tab_content; context: {
resultType: 'dataset', fetch: fetchDatasets,
searchLinkToAdvancedPage: properties.searchLinkToAdvancedResults,
params: getParamsForSearchLink('datasets'),
type: 'dataset', typeName: 'research data'}">
</ng-container>
</div>
<div *ngIf="activeTab == 'software' && fetchSoftware.searchUtils.totalResults > 0 && isEntityEnabled('software')">
<ng-container *ngTemplateOutlet="tab_content; context: {
resultType: 'software', fetch: fetchSoftware,
searchLinkToAdvancedPage: properties.searchLinkToAdvancedResults,
params: getParamsForSearchLink('software'),
type: 'software', typeName: 'software'}">
</ng-container>
</div>
<div *ngIf="activeTab == 'orp' && fetchOrps.searchUtils.totalResults > 0 && isEntityEnabled('orp')">
<ng-container *ngTemplateOutlet="tab_content; context: {
resultType: 'other', fetch: fetchOrps,
searchLinkToAdvancedPage: properties.searchLinkToAdvancedResults,
params: getParamsForSearchLink('other'),
type: 'orp', typeName: 'other products'}">
</ng-container>
</div>
<div *ngIf="activeTab == 'twitter' && properties.environment == 'development' && portal.twitterAccount">
<div>
<div>
<a href="https://twitter.com/{{ portal.twitterAccount }}?ref_src=twsrc%5Etfw" class="twitter-timeline" data-height="900">
Tweets by {{portal.twitterAccount}}
</a>
</div>
</div>
</div>
<div *ngIf="activeTab == 'mapping' && properties.environment != 'production' && communityId == 'covid-19'"
class="uk-padding uk-padding-remove-horizontal">
<div>
Browse OpenAIRE Research Graph through a map of the main concepts linked to Coronavirus
</div>
<div class="uk-margin-medium-top">
<iframe src="https://openaire.opscidia.com/?iframe=true&keyword=covid19&mapping_size=4"
title="Opscidia Ontology mapping" class="uk-width-1-1" style="height:700px"></iframe>
<span class=" uk-text-baseline uk-text-meta uk-text-left ">
Powered by
<a href="http://www.opscidia.com/" target="_blank" class="">Opscidia</a> and
<a href="https://graph.openaire.eu/" target="_blank" class="">OpenAIRE Research Graph</a>
</span>
<span class="uk-text-right uk-float-right uk-text-baseline uk-text-meta"> Visit
<a class="uk-margin-right uk-margin-small-top" href="https://openaire.opscidia.com/?iframe=true&keyword=covid19&mapping_size=4" target="_blank">
Opscidia Tool
</a>
</span>
</div>
</div>
<div
*ngIf="activeTab == 'enermaps' && communityId == 'enermaps' && fetchFeaturedDatasets.searchUtils.totalResults > 0 && isEntityEnabled('dataset')">
<div class="uk-grid uk-margin-remove">
<div class="uk-width-expand uk-padding uk-padding-remove-horizontal">
<div class="uk-flex uk-flex-between uk-flex-middle uk-margin-bottom" >
<div class="uk-text-meta uk-text-large uk-text-uppercase">
<span>Featured Datasets</span>
</div>
</div>
<div class="uk-margin-top uk-margin-medium-bottom uk-text-meta">
<div>Here are listed some of the most important energy datasets as selected by energy experts.</div>
<div>
Check them if you want to easily explore and visualize the European energy landscape,
using only well-known datasets which you can trust.
</div>
</div>
<no-load-paging *ngIf="fetchFeaturedDatasets && fetchFeaturedDatasets.searchUtils.totalResults > size" [type]="'Featured Datasets'"
(pageChange)="updatePage($event)"
[page]="fetchFeaturedDatasets.searchUtils.page" [pageSize]="size"
[totalResults]="fetchFeaturedDatasets.searchUtils.totalResults" >
</no-load-paging>
<search-result [properties]="properties"
[results]="fetchFeaturedDatasets.results"
[status]="fetchFeaturedDatasets.searchUtils.status"
[type]="'dataset'" [showEnermaps]="true" >
</search-result>
</div>
</div>
</div>
</div>
</div>
</div>
<ng-container *ngIf="showLoading">
<div class="uk-container uk-container-large uk-section">
<loading></loading>
</div>
<!-- <ng-container *ngIf="communityId == 'enermaps'">
<div class="uk-section uk-container uk-container-large tm-middle">
<div class="uk-margin-large-bottom">
<h2 class="uk-margin-top uk-text-center">
About Enermaps
</h2>
<div class="uk-padding uk-grid uk-child-width-1-1@s uk-child-width-1-2@m uk-child-width-1-4@l uk-grid-large uk-margin-medium-top" uk-grid>
<div class="uk-flex uk-flex-column uk-flex-middle">
<div class="icon-wrapper uk-flex uk-flex-center uk-flex-middle">
<img src="assets/connect-assets/home/website.svg">
</div>
<div class="uk-margin-medium-top">
<a href="https://enermaps.eu/" target="_blank" class="uk-button uk-button-text uk-text-bolder custom-text">Project Website</a>
</div>
</div>
<div class="uk-flex uk-flex-column uk-flex-middle">
<div class="icon-wrapper uk-flex uk-flex-center uk-flex-middle">
<img src="assets/connect-assets/home/map.svg">
</div>
<div class="uk-margin-medium-top">
<a href="https://lab.idiap.ch/enermaps/" target="_blank" class="uk-button uk-button-text uk-text-bolder custom-text">Open Data Management Tool</a>
</div>
</div>
<div class="uk-flex uk-flex-column uk-flex-middle">
<div class="icon-wrapper uk-flex uk-flex-center uk-flex-middle">
<img src="assets/connect-assets/home/wiki.svg">
</div>
<div class="uk-margin-medium-top">
<a href="https://enermaps-wiki.herokuapp.com/" target="_blank" class="uk-button uk-button-text uk-text-bolder custom-text">Wiki</a>
</div>
</div>
<div class="uk-flex uk-flex-column uk-flex-middle">
<div class="icon-wrapper uk-flex uk-flex-center uk-flex-middle">
<img src="assets/connect-assets/home/training.svg">
</div>
<div class="uk-margin-medium-top">
<a href="https://www.youtube.com/watch?v=fHBeaKWS8Ss&list=PLhwt57nEFA8n295WJq_ickGCIBYHDcjm3&ab_channel=REVOLVE" target="_blank" class="uk-button uk-button-text uk-text-bolder custom-text">Training</a>
</div>
</div>
</div>
</div>
</div>
</ng-container> -->
<div *ngIf="communityId && portal && isRouteEnabled('/organizations')"
class="uk-container uk-container-large">
<affiliations [longView]="false" [getAffiliationsFromAPI]="true" [communityFirstPage]="true"></affiliations>
</div>
<div *ngIf="(communityId == null || communityId == '' ) && !portal"
class="uk-section tm-middle uk-container uk-margin-large-top ">
<div class="uk-container uk-margin-bottom uk-grid">
<div class="uk-width-expand uk-padding-remove">
<article class="uk-article ">
<div class="uk-child-width-1-6@l uk-child-width-1-6@m uk-child-width-1-3@s uk-text-center uk-alert uk-alert-primary">
No community chosen
</div>
<div *ngIf="communityId">
</div>
</article>
</div>
</div>
</div>
</div>
<error *ngIf="portal && community && isPrivate()" [page]="community.status == 'manager'?'-1':null">
</error>
</div>
</ng-container>
<ng-container *ngIf="!showLoading">
<ng-container *ngFor="let pluginGroup of pluginsByPlacement.get('top') ; let i=index">
<ng-container *ngIf="(pluginGroup.template.portalSpecific.length == 0 || pluginGroup.template.portalSpecific.indexOf(community.communityId) != -1 ) &&
(pluginGroup.template.plan == 'Default'|| pluginGroup.template.plan == 'Standard'|| pluginGroup.template.plan == community.plan ) && pluginGroup.plugin.active">
<plugin-wrapper [pluginTemplate]="pluginGroup.template" [plugin]="pluginGroup.plugin"
[pluginObject]="pluginGroup.plugin.object"></plugin-wrapper>
</ng-container>
</ng-container>
</ng-container>

View File

@ -1,146 +1,42 @@
import {ChangeDetectorRef, Component, ElementRef, Inject, Input, Renderer2, ViewChild} from '@angular/core';
import {Component, ElementRef, Input} from '@angular/core';
import {ActivatedRoute, Router} from '@angular/router';
import {DOCUMENT, Location} from '@angular/common';
import {Location} from '@angular/common';
import {Meta, Title} from '@angular/platform-browser';
import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties';
import {CommunityService} from "../openaireLibrary/connect/community/community.service";
import {ConfigurationService} from '../openaireLibrary/utils/configuration/configuration.service';
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
import {ZenodoCommunitiesService} from '../openaireLibrary/connect/zenodoCommunities/zenodo-communities.service';
import {Session, User} from '../openaireLibrary/login/utils/helper.class';
import {StatisticsForDashboardComponent} from '../statistics/statistics.component';
import {StringUtils} from '../openaireLibrary/utils/string-utils.class';
import {SearchCommunityDataprovidersService} from "../openaireLibrary/connect/contentProviders/searchDataproviders.service";
import {SearchCommunityProjectsService} from "../openaireLibrary/connect/projects/searchProjects.service";
import {SearchResearchResultsService} from "../openaireLibrary/services/searchResearchResults.service";
import {RouterHelper} from "../openaireLibrary/utils/routerHelper.class";
import {User} from '../openaireLibrary/login/utils/helper.class';
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
import {SearchCustomFilter} from "../openaireLibrary/searchPages/searchUtils/searchUtils.class";
import {FetchResearchResults} from "../openaireLibrary/utils/fetchEntitiesClasses/fetchResearchResults.class";
import {ErrorCodes} from "../openaireLibrary/utils/properties/errorCodes";
import {Subscription} from "rxjs";
import {properties} from "../../environments/environment";
import {ConnectHelper} from "../openaireLibrary/connect/connectHelper";
import {Filter} from "../openaireLibrary/searchPages/searchUtils/searchHelperClasses.class";
import {OpenaireEntities} from '../openaireLibrary/utils/properties/searchFields';
import {PluginsService} from "../openaireLibrary/services/plugins.service";
import {PluginTemplate} from "../openaireLibrary/utils/entities/adminTool/pluginTemplate";
import {Plugin} from "../openaireLibrary/utils/entities/adminTool/plugin";
import {PluginUtils} from "../openaireLibrary/dashboard/plugins/utils/pluginUtils";
@Component({
selector: 'community',
templateUrl: 'community.component.html',
styles: [
`
#mytabs .uk-tab::before {
border-bottom: none;
}
#mytabs::before {
content: "";
position: absolute;
bottom: 0;
left: 0;
right: 0;
border-bottom: 1px solid #eaeaea;
}
`
]
})
export class CommunityComponent {
public url: string = null;
public projectTotal = null;
public contentProviderTotal = null;
public projectsCalculated: boolean = false;
public contentProvidersCalculated: boolean = false;
params: any = {};
properties: EnvProperties = properties;
public errorCodes: ErrorCodes = new ErrorCodes();
// Request results of each tab only the one time (first time tab is clicked)
private reloadPublications: boolean = true;
private reloadDatasets: boolean = true;
private reloadSoftware: boolean = true;
private reloadOrps: boolean = true;
private reloadFeaturedDatasets: boolean = true;
// Variables for publications, research data, projects, content providers, related content providers tabs
public fetchPublications: FetchResearchResults;
public fetchDatasets: FetchResearchResults;
public fetchSoftware: FetchResearchResults;
public fetchOrps: FetchResearchResults;
public fetchFeaturedDatasets: FetchResearchResults;
public searchNumber: number = 5;
@Input() communityId = null;
public community = null;
public portal = null;
public showLoading: boolean = true;
masterZenodoCommunity = null;
zenodoCommunityIdS = [];
showAllDescription = false;
public thresholdDescription: number = 500;
public descriptionDiff: number = 100;
page = 1;
size = 5;
subscribers: number = 0;
subs: Subscription[] = [];
displayedAllSubjects = [];
displayedSubjects = [];
displayedSdg = [];
displayedFos = [];
@ViewChild(StatisticsForDashboardComponent) statistics: StatisticsForDashboardComponent = null;
public activeTab = "summary";
public show: string = 'overview';
public analyticsActiveTab: string = "";
public analyticsChecked: boolean = false;
searchLinkToResults: string = null;
searchLinkToProjects: string = null;
searchLinkToDataProviders: string = null;
searchLinkToAdvancedResults: string = null;
shareInZenodoPage: string = null;
public routerHelper: RouterHelper = new RouterHelper();
subscriptions: Subscription[] = [];
private user: User;
selectedEntity = 'result';
selectedEntitySimpleUrl;
selectedEntityAdvancedUrl;
resultTypes: Filter = {
values: [],
filterId: "type",
countSelectedValues: 0,
filterType: 'checkbox',
originalFilterId: "",
valueIsExact: true,
title: "Type",
filterOperator: "or"
};
showPublications: boolean = false;
showDatasets: boolean = false;
showSoftware: boolean = false;
showOrp: boolean = false;
showProjects: boolean = false;
showDataProviders: boolean = false;
keyword: string = "";
customFilter;
placeholderText = "Search by title, author, abstract, DOI, orcid... ";
resultsQuickFilter: { filter: Filter, selected: boolean, filterId: string, value: string } = {
filter: null,
selected: true,
filterId: "resultbestaccessright",
value: "Open Access"
};
disableSelect: boolean = true;
openaireEntities= OpenaireEntities;
public showLoading = true;
pluginTemplates: PluginTemplate[] = [];
plugins: Plugin[] = [];
public pluginsByPlacement: Map<string,{plugin:Plugin, template:PluginTemplate}[]> = new Map();
public pluginUtils = new PluginUtils();
constructor(
private element: ElementRef,
@ -152,15 +48,10 @@ export class CommunityComponent {
private _piwikService: PiwikService,
private config: ConfigurationService,
private _communityService: CommunityService,
private _searchCommunityDataprovidersService: SearchCommunityDataprovidersService,
private _searchCommunityProjectsService: SearchCommunityProjectsService,
private _searchResearchResultsService: SearchResearchResultsService,
private _zenodoCommunitieService: ZenodoCommunitiesService,
private seoService: SEOService,
private userManagementService: UserManagementService,
private _renderer2: Renderer2,
private cdr: ChangeDetectorRef,
@Inject(DOCUMENT) private _document: Document) {
private _pluginsService:PluginsService) {
var description = "OpenAIRE - Connect, Community Dashboard, research community";
var title = "OpenAIRE - Connect";
@ -169,500 +60,88 @@ export class CommunityComponent {
this._meta.updateTag({content: title}, "property='og:title'");
this._title.setTitle(title);
this.fetchPublications = new FetchResearchResults(this._searchResearchResultsService);
this.fetchDatasets = new FetchResearchResults(this._searchResearchResultsService);
this.fetchSoftware = new FetchResearchResults(this._searchResearchResultsService);
this.fetchOrps = new FetchResearchResults(this._searchResearchResultsService);
this.fetchFeaturedDatasets = new FetchResearchResults(this._searchResearchResultsService);
}
public ngOnInit() {
this.searchLinkToResults = this.properties.searchLinkToResults;
this.searchLinkToProjects = this.properties.searchLinkToProjects;
this.searchLinkToDataProviders = this.properties.searchLinkToDataProviders;
this.searchLinkToAdvancedResults = this.properties.searchLinkToAdvancedResults;
this.shareInZenodoPage = this.properties.shareInZenodoPage;
this.url = properties.domain + properties.baseLink + this._router.url;
this.url = properties.domain + properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(this.url, false);
this._meta.updateTag({content: this.url}, "property='og:url'");
this.subs.push(this.userManagementService.getUserInfo().subscribe(user => {
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
this.user = user;
}));
this.customFilter = new SearchCustomFilter("Community", "communityId", this.communityId, "");
this.subs.push(this._communityService.getCommunityAsObservable().subscribe(
community => {
this.community = community;
if(community && !ConnectHelper.isPrivate(community, this.user)) {
this.displayedSubjects = community.subjects;
this.displayedSdg = community.sdg;
this.displayedFos = community.fos;
this.displayedSubjects.forEach(element => {
this.displayedAllSubjects.push({value: element, type: 'resultsubject'});
});
this.displayedSdg.forEach(element => {
this.displayedAllSubjects.push({value: element, type: 'sdg'});
});
this.displayedFos.forEach(element => {
this.displayedAllSubjects.push({value: element, type: 'fos'});
});
if (community.description != null && (community.description.length - this.thresholdDescription <= this.descriptionDiff)) {
this.thresholdDescription = community.description.length;
}
this.subscriptions.push(this._communityService.getCommunityAsObservable().subscribe(
community => {
this.community = community;
if(community && !ConnectHelper.isPrivate(community, this.user)) {
if (this.properties.environment == "development") {
this.params = {communityId: community.communityId};
this._meta.updateTag({content: community.description}, "name='description'");
this._meta.updateTag({content: community.description}, "property='og:description'");
this._meta.updateTag({content: community.displayTitle}, "property='og:title'");
this._title.setTitle(community.displayTitle);
this.subscriptions.push(this._piwikService.trackView(this.properties, community.displayTitle).subscribe());
this.getPagePlugins();
}
this._meta.updateTag({content: community.description}, "name='description'");
this._meta.updateTag({content: community.description}, "property='og:description'");
this._meta.updateTag({content: community.title}, "property='og:title'");
this._title.setTitle(community.title);
this.subs.push(this._piwikService.trackView(this.properties, community.title).subscribe());
if (this.community.zenodoCommunity) {
this.subs.push(this._zenodoCommunitieService.getZenodoCommunityById(this.properties, this.community.zenodoCommunity).subscribe(
result => {
this.masterZenodoCommunity = result;
},
error => {
this.handleError("Error getting Master Zenodo community with id: " + this.community.zenodoCommunity, error);
}));
}));
}
getPagePlugins() {
this.showLoading = true;
this.subscriptions.push(this._pluginsService.getPluginTemplatesByPageRoute(this.properties.adminToolsAPIURL, this.community.communityId, this._router.url.split('?')[0] ).subscribe(
templates => {
this.pluginTemplates = templates;
this.subscriptions.push(this._pluginsService.getPluginsByPageRoute(this.properties.adminToolsAPIURL, this.community.communityId, this._router.url.split('?')[0]).subscribe(
plugins => {
this.plugins = plugins;
this.pluginsByPlacement = new Map();
for(let pos of this.pluginUtils.placementsOptions){
this.pluginsByPlacement.set(pos.value,[]);
}
let self = this;
this.pluginTemplates.forEach(_ => {
let plugin:Plugin = null;
if(!_.custom) {
for (let pl of plugins) {
if (pl.templateId == _._id) {
plugin = pl;
}
}
if (!plugin) {
plugin = new Plugin("", "", _);
this.plugins.push(plugin);
}
plugin.object = PluginUtils.initializeObjectAndCompare(_.code, plugin.object)
this.pluginsByPlacement.get(plugin.placement).push({plugin: plugin, template: _});
}
});
//add custom plugins in the list
this.plugins.forEach(_ => {
if(_.custom == true){
let customTemplate = null;
this.pluginTemplates.forEach(template => {
if (_.templateId == template._id) {
customTemplate = template;
}
});
if(customTemplate && customTemplate.custom){
this.pluginsByPlacement.get(customTemplate.placement).push({plugin: _, template: customTemplate});
}
}
));
}
this.zenodoCommunityIdS = this.community.otherZenodoCommunities;
}
}));
});
this.countResearchResults("publication");
this.countResearchResults("dataset");
this.countResearchResults("software");
this.countResearchResults("other");
if(this.communityId == "enermaps"){
this.countResearchResults("dataset", "enermaps::selection" );
}
for(let placement of this.pluginUtils.placementsOptions){
this.pluginsByPlacement.get(placement.value).sort(function (a, b) {
return a.plugin.order - b.plugin.order;
})
}
this.showLoading = false;
},
error => {}));
this.subs.push(this._searchCommunityProjectsService.countTotalProjects(this.properties, this.communityId).subscribe(
projectTotal => {
this.projectTotal = projectTotal;
},
error => {
this.handleError("Error getting number of projects for community with id: " + this.communityId, error);
},
() => {
this.projectsCalculated = true;
}
));
this.subs.push(this._searchCommunityDataprovidersService.countTotalDataproviders(this.properties, this.communityId).subscribe(
contentProviderTotal => {
this.contentProviderTotal = contentProviderTotal;
//console.log(contentProviderTotal);
},
error => {
this.handleError("Error getting number of content providers for community with id: " + this.communityId, error);
},
() => {
this.contentProvidersCalculated = true;
}
));
this.subs.push(this.config.portalAsObservable.subscribe(
res => {
this.portal = res;
// loading twitter widget script conditionally
if (properties.environment == "development") {
if (this.portal && this.portal.twitterAccount) {
let script = this._renderer2.createElement('script');
script.charset = "utf-8";
script.src = "https://platform.twitter.com/widgets.js";
this._renderer2.appendChild(this._document.body, script);
}
}
},
error => {
//console.log(error)
this.handleError("Error getting community with id: " + this.communityId, error);
}
));
this.subs.push(this.config.portalAsObservable.subscribe(data => {
if (data) {
var showEntity = {};
for (var i = 0; i < data['entities'].length; i++) {
showEntity["" + data['entities'][i]["pid"] + ""] = data['entities'][i]["isEnabled"];
}
this.showPublications = !!showEntity["publication"];
this.showDatasets = !!showEntity["dataset"];
this.showSoftware = !!showEntity["software"];
this.showOrp = !!showEntity["orp"];
this.showProjects = !!showEntity["project"];
this.showDataProviders = !!showEntity["datasource"];
this.resultTypes.values = [];
if (this.showPublications) {
this.resultTypes.values.push({
name: this.openaireEntities.PUBLICATIONS,
id: "publications",
selected: false,
number: 0
});
}
if (this.showDatasets) {
this.resultTypes.values.push({
name: this.openaireEntities.DATASETS,
id: "datasets",
selected: false,
number: 0
});
}
if (this.showSoftware) {
this.resultTypes.values.push({
name: this.openaireEntities.SOFTWARE,
id: "software",
selected: false,
number: 0
});
}
if (this.showOrp) {
this.resultTypes.values.push({name: this.openaireEntities.OTHER, id: "other", selected: false, number: 0});
}
}
}));
}
private searchPublications(page: number, size: number) {
this.setActiveTab("publication");
if (this.reloadPublications &&
(this.fetchPublications.searchUtils.status == this.errorCodes.LOADING ||
(this.fetchPublications.searchUtils.status == this.errorCodes.DONE && this.fetchPublications.searchUtils.totalResults > 0)
)
) {
this.fetchPublications.getResultsForCommunity("publication", this.communityId, page, size, this.properties);
}
this.reloadPublications = false;
}
private searchDatasets(page: number, size: number) {
this.setActiveTab("dataset");
if (this.reloadDatasets &&
(this.fetchDatasets.searchUtils.status == this.errorCodes.LOADING ||
(this.fetchDatasets.searchUtils.status == this.errorCodes.DONE && this.fetchDatasets.searchUtils.totalResults > 0)
)
) {
this.fetchDatasets.getResultsForCommunity("dataset", this.communityId, page, size, this.properties);
}
this.reloadDatasets = false;
}
private searchSoftware(page: number, size: number) {
this.setActiveTab("software");
if (this.reloadSoftware &&
(this.fetchSoftware.searchUtils.status == this.errorCodes.LOADING ||
(this.fetchSoftware.searchUtils.status == this.errorCodes.DONE && this.fetchSoftware.searchUtils.totalResults > 0)
)
) {
this.fetchSoftware.getResultsForCommunity("software", this.communityId, page, size, this.properties);
}
this.reloadSoftware = false;
}
private searchOrps(page: number, size: number) {
this.setActiveTab("other");
if (this.reloadOrps &&
(this.fetchOrps.searchUtils.status == this.errorCodes.LOADING ||
(this.fetchOrps.searchUtils.status == this.errorCodes.DONE && this.fetchOrps.searchUtils.totalResults > 0)
)
) {
this.fetchOrps.getResultsForCommunity("other", this.communityId, page, size, this.properties);
}
this.reloadOrps = false;
}
private searchFeaturedDatasets(page: number, size: number) {
this.setActiveTab("enermaps");
if (this.reloadFeaturedDatasets &&
(this.fetchFeaturedDatasets.searchUtils.status == this.errorCodes.LOADING ||
(this.fetchFeaturedDatasets.searchUtils.status == this.errorCodes.DONE && this.fetchFeaturedDatasets.searchUtils.totalResults > 0)
)
) {
this.fetchFeaturedDatasets.getAllResultsForCommunity("dataset", this.communityId, page, size, this.properties, "enermaps::selection");
}
this.reloadFeaturedDatasets = false;
}
private countResearchResults(resultType: string, contextId = null) {
let fetch: FetchResearchResults;
if (resultType == "publication") {
fetch = this.fetchPublications;
} else if (resultType == "dataset" && !contextId) {
fetch = this.fetchDatasets;
} else if (resultType == "software") {
fetch = this.fetchSoftware;
} else if (resultType == "other") {
fetch = this.fetchOrps;
} else if (resultType == "dataset" && contextId) {
fetch = this.fetchFeaturedDatasets;
this.fetchFeaturedDatasets.getAllResultsForCommunity("dataset", this.communityId, 0, 0, this.properties, contextId);
return;
}
fetch.getNumForCommunity(resultType, this.communityId, this.properties, contextId);
}
public ngOnDestroy() {
for (let sub of this.subs) {
sub.unsubscribe();
}
this.fetchPublications.clearSubscriptions();
this.fetchDatasets.clearSubscriptions();
this.fetchOrps.clearSubscriptions();
this.fetchSoftware.clearSubscriptions();
this.fetchFeaturedDatasets.clearSubscriptions();
}
isEntityEnabled(entity: string) {
return this.portal.entities.some(x => x['pid'] == entity && x['isEnabled'] === true);
}
isRouteEnabled(route: string) {
return this.portal.pages.some(x => x['route'] == route && x['isEnabled'] === true);
}
showInvite() {
return this.isManager();
}
isManager() {
if (!this.user) {
return false;
}
var email = this.user.email;
var index = -1;
if (email && this.community != null && this.community.managers != null) {
index = this.community.managers.indexOf(email);
}
return Session.isPortalAdministrator(this.user) || Session.isCommunityCurator(this.user) || index != -1;
}
private handleError(message: string, error) {
console.error("Community (component): " + message, error);
}
getSearchPlaceHolder() {
var entities = [];
if (this.isEntityEnabled("publication")) {
entities.push("publications");
}
if (this.isEntityEnabled("dataset")) {
entities.push("research data");
}
if (this.isEntityEnabled("software")) {
entities.push("software");
}
if (this.isEntityEnabled("orp")) {
entities.push("other research products");
}
return "Search" + ((entities.length > 0) ? (" for " + entities.join(', ') + "...") : "");
}
countOtherGraphs() {
var count = 0;
if (this.statistics && this.statistics.allowedEntities) {
for (var entity of this.statistics.allowedEntities) {
if (this.statistics.statisticsSum[entity].total > 0 && this.statistics.allowedCharts[entity].length > 0 && this.activeTab != entity) {
count += this.statistics.allowedCharts[entity].length;
}
}
}
return count;
}
createParams(param) {
return StringUtils.quote(StringUtils.URIEncode(param));
}
private setActiveTab(entityType: string) {
if (entityType == "other") {
this.activeTab = "orp";
} else {
this.activeTab = entityType;
}
}
public getParamsForSearchLink(type: string = "") {
if (type) {
return this.routerHelper.createQueryParams(['type', 'qf', 'sortBy'], [type, 'false', 'resultdateofacceptance,descending']);
} else {
return {};
}
}
private getEntityName(entityType: string, plural: boolean, full: boolean): string {
if (entityType == "publication") {
return "publication" + (plural ? "s" : "");
} else if (entityType == "dataset") {
return (full ? "research data" : ("dataset" + (plural ? "s" : "")));
} else if (entityType == "software") {
return "software";
} else if (entityType == "other") {
return (full ? ("other research product" + (plural ? "s" : "")) : "other");
}
}
public buildProjectsTooltip(): string {
let tooltipContent: string = "<div>";
if (this.projectTotal != null && this.projectTotal > 0 && this.isEntityEnabled('project') && this.isRouteEnabled(this.searchLinkToProjects)) {
tooltipContent += "<span class='uk-text-bold'>Projects</span>";
}
tooltipContent += " have been selected as relevant for your community by the gateway curators.";
tooltipContent += "</div>";
return tooltipContent;
}
public buildContentProvidersTooltip(): string {
let tooltipContent: string = "<div>";
if (this.contentProviderTotal != null && this.contentProviderTotal > 0 && this.isEntityEnabled('datasource') && this.isRouteEnabled(this.searchLinkToDataProviders)) {
tooltipContent += "<span class='uk-text-bold'>Content Providers</span>";
}
tooltipContent += " have been selected as relevant for your community by the gateway curators.";
tooltipContent += "</div>";
return tooltipContent;
}
public buildZenodoCommunitiesTooltip(): string {
let tooltipContent: string = "<div>";
tooltipContent += "<span class='uk-text-bold'>Zenodo</span> is a catch-all repository for OpenAIRE.";
tooltipContent += "<div class='uk-margin-small-top'>A <span class='uk-text-bold'>Zenodo Community</span> is created and curated by Zenodo users.</div>";
tooltipContent += "</div>";
return tooltipContent;
}
entityChanged($event) {
this.selectedEntity = $event.entity;
this.selectedEntitySimpleUrl = $event.simpleUrl;
this.selectedEntityAdvancedUrl = $event.advancedUrl;
if (this.selectedEntity == 'result') {
this.placeholderText = "Search by title, author, abstract, DOI, orcid... ";
} else if (this.selectedEntity == 'project') {
this.placeholderText = "Search by project title, grant id, funder...";
} else if (this.selectedEntity == 'dataprovider') {
this.placeholderText = "Search by name...";
} else {
this.placeholderText = "Search community content";
}
}
goTo(simple: boolean) {
let url = (simple) ? this.selectedEntitySimpleUrl : this.selectedEntityAdvancedUrl;
let parameterNames = [];
let parameterValues = [];
if (this.selectedEntity == "result" && this.resultsQuickFilter && this.resultsQuickFilter.selected) {
parameterNames.push(this.resultsQuickFilter.filterId);
parameterValues.push('"'+ encodeURIComponent(this.resultsQuickFilter.value)+'"');
}
if (this.keyword.length > 0) {
parameterNames.push("fv0");
parameterValues.push(this.keyword);
parameterNames.push("f0");
parameterValues.push("q");
}
this._router.navigate([url], {queryParams: this.routerHelper.createQueryParams(parameterNames, parameterValues)});
}
public countSubscribersEvent($event) {
this.subscribers = $event.value;
}
public checkStatistics(type: string) {
return !!(this.isEntityEnabled(type)
&& this.statistics && this.statistics.statisticsDisplay && this.statistics.statisticsDisplay.isActive
&& this.statistics.statisticsSum && this.statistics.statisticsSum[type] && this.statistics.statisticsSum[type].total > 0
&&
(this.statistics.statisticsDisplay.entities[type].numbers.map['total']['showInMonitor']
|| this.statistics.statisticsDisplay.entities[type].numbers.map['project']['showInMonitor']
|| this.statistics.statisticsDisplay.entities[type].numbers.map['open']['showInMonitor']
|| this.statistics.statisticsDisplay.entities[type].numbers.map['closed']['showInMonitor']
|| this.statistics.statisticsDisplay.entities[type].numbers.map['embargo']['showInMonitor']
|| this.statistics.statisticsDisplay.entities[type].numbers.map['restricted']['showInMonitor']
|| (this.statistics.allowedEntitiesMode['showInMonitor']
&& this.statistics.allowedChartsMode['showInMonitor'][type]
&& this.statistics.allowedChartsMode['showInMonitor'][type].length > 0)));
}
public initializeAnalyticsActiveTab() {
if (!this.analyticsChecked) {
if (this.checkStatistics("publication")) {
this.analyticsActiveTab = "publication";
} else if (this.checkStatistics("dataset")) {
this.analyticsActiveTab = "dataset";
} else if (this.checkStatistics("software")) {
this.analyticsActiveTab = "software";
} else if (this.checkStatistics("orp")) {
this.analyticsActiveTab = "orp";
}
}
}
public showAnalyticsTab() {
this.initializeAnalyticsActiveTab();
return this.analyticsActiveTab;
}
public onSelectActiveTab(activeTabId) {
if (this.activeTab != "activaTabId") { // tab really changed
if (activeTabId == 'summary') {
this.activeTab = 'summary';
} else if (activeTabId == 'publications') {
this.show = 'overview';
this.searchPublications(1, this.searchNumber);
} else if (activeTabId == 'datasets') {
this.show = 'overview';
this.searchDatasets(1, this.searchNumber);
} else if (activeTabId == 'software') {
this.show = 'overview';
this.searchSoftware(1, this.searchNumber);
} else if (activeTabId == 'other') {
this.show = 'overview';
this.searchOrps(1, this.searchNumber);
} else if (activeTabId == 'analytics') {
this.show = 'analysis';
this.activeTab = 'analytics';
this.analyticsChecked = true;
} else if (activeTabId == 'mapping') {
this.show = 'mapping';
this.activeTab = 'mapping';
} else if (activeTabId == 'enermaps') {
this.show = 'enermaps';
this.activeTab = 'enermaps';
this.searchFeaturedDatasets(1, this.fetchFeaturedDatasets.searchUtils.totalResults);
} else if (activeTabId == 'twitter') {
this.show = 'twitter';
this.activeTab = 'twitter';
}
}
}
isPrivate(){
return ConnectHelper.isPrivate(this.community, this.user);
}
disableSelectChange(event: boolean) {
this.disableSelect = event;
this.cdr.detectChanges();
}
public updatePage(event) {
this.page = event.value;
this.fetchFeaturedDatasets.searchUtils.page = event.value;
this.fetchFeaturedDatasets.results = this.fetchFeaturedDatasets.allResults.slice((this.page - 1) * this.searchNumber, this.page * this.searchNumber) ;
error => {}));
}
}

View File

@ -23,8 +23,8 @@ import {
import {SearchProjectsServiceModule} from '../openaireLibrary/connect/projects/searchProjectsService.module';
import {SearchResearchResultsServiceModule} from "../openaireLibrary/services/searchResearchResultsService.module";
import {SearchResultsModule} from "../openaireLibrary/searchPages/searchUtils/searchResults.module";
import {CuratorsModule} from "../curators/curators.module";
import {AffiliationsModule} from "../affiliations/affiliations.module";
import {CuratorsModule} from "../openaireLibrary/connect/components/curators/curators.module";
import {AffiliationsModule} from "../openaireLibrary/connect/affiliations/affiliations.module";
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
import {MatSelectModule} from "@angular/material/select";
import {EntitiesSelectionModule} from "../openaireLibrary/searchPages/searchUtils/entitiesSelection.module";
@ -40,6 +40,10 @@ import {InputModule} from '../openaireLibrary/sharedComponents/input/input.modul
import {QuickSelectionsModule} from '../openaireLibrary/searchPages/searchUtils/quick-selections.module';
import {IconsModule} from '../openaireLibrary/utils/icons/icons.module';
import {NoLoadPaging} from '../openaireLibrary/searchPages/searchUtils/no-load-paging.module';
import {NumberRoundModule} from '../openaireLibrary/utils/pipes/number-round.module';
import {PluginsService} from '../openaireLibrary/services/plugins.service';
import {PluginWrapperModule} from "../openaireLibrary/dashboard/plugins/wrapper/plugin-wrapper.module";
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
@NgModule({
imports: [
@ -49,16 +53,17 @@ import {NoLoadPaging} from '../openaireLibrary/searchPages/searchUtils/no-load-p
SearchResearchResultsServiceModule, SearchResultsModule, CuratorsModule, AffiliationsModule,
SEOServiceModule, MatSelectModule, EntitiesSelectionModule,
TabsModule, SearchTabModule, ErrorMessagesModule, SafeHtmlPipeModule, ErrorModule,
AdvancedSearchInputModule, InputModule, QuickSelectionsModule, IconsModule, NoLoadPaging
AdvancedSearchInputModule, InputModule, QuickSelectionsModule, IconsModule, NoLoadPaging, NumberRoundModule, PluginWrapperModule, LoadingModule
],
declarations: [
CommunityComponent
],
providers:[
PreviousRouteRecorder, PiwikService
PreviousRouteRecorder, PiwikService, PluginsService
],
exports: [
CommunityComponent
]
})
export class CommunityModule { }
export class CommunityModule {
}

View File

@ -1,15 +0,0 @@
import { NgModule} from '@angular/core';
import { RouterModule } from '@angular/router';
import {CuratorsComponent} from "./curators.component";
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: CuratorsComponent, canActivate: [IsRouteEnabled], canDeactivate: [PreviousRouteRecorder]}
])
]
})
export class CuratorsRoutingModule {
}

View File

@ -1,152 +0,0 @@
<schema2jsonld *ngIf="url" [URL]="url" [name]="pageTitle" type="other"></schema2jsonld>
<ng-container *ngIf="longView else shortView">
<div style="min-height: 650px;">
<div class="uk-container uk-container-large uk-section uk-section-small uk-padding-remove-bottom">
<div class="uk-padding-small uk-padding-remove-horizontal">
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
</div>
</div>
<div class="uk-container uk-container-large uk-section uk-section-small">
<div *ngIf="showLoading" class="uk-margin-large uk-padding-large uk-padding-remove-horizontal">
<loading></loading>
</div>
<div *ngIf="!showLoading">
<h1 class="uk-margin-top">
Curators
</h1>
<div *ngIf="pageContents && pageContents['top'] && pageContents['top'].length > 0" class="uk-margin-medium">
<helper *ngIf="pageContents && pageContents['top'] && pageContents['top'].length > 0"
[texts]="pageContents['top']">
</helper>
</div>
<div *ngIf="curators" class="uk-margin-large-top">
<div *ngFor="let curator of curators let i=index;" class="uk-card uk-card-default uk-padding uk-margin-medium-bottom">
<div class="uk-grid" uk-grid>
<div class="uk-width-2-3@m uk-flex uk-flex-middle">
<div class="uk-width-small">
<img *ngIf="curator.photo && curator.photo !== ''" class="uk-border-circle" style="width: 150px; height: 150px;"
src="{{downloadUrl + curator.photo}}" alt="Curator Photo">
<img *ngIf="!curator.photo || curator.photo == ''" class="uk-border-circle" style="width: 150px; height: 150px;"
src="../../assets/common-assets/curator-default.png" alt="Curator Photo">
</div>
<div class="uk-width-expand">
<div class="uk-padding">
<h4 class="uk-margin-remove">{{curator.name}}</h4>
<div *ngIf="curator.bio" class="uk-margin-top uk-height-max-large uk-overflow-auto">
<div class="uk-text-muted uk-margin-small-bottom">
Biography
</div>
<div>
<div *ngIf="!viewingMore">{{format(curator.bio)}}</div>
<div *ngIf="viewingMore">{{curator.bio}}</div>
<div *ngIf="curator.bio.length >= maxCharacters" class="uk-text-right uk-margin-small-top">
<a *ngIf="curator.bio.length >= maxCharacters"
(click)="openFsModal(curator)">
View details
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div *ngIf="curator.affiliations && curator.affiliations.length > 0" class="uk-width-1-3@m uk-padding" style="border-left: 1px solid #eaeaea">
<div class="uk-text-muted uk-margin-bottom">
Affiliations
</div>
<div class="uk-grid uk-flex-middle uk-child-width-1-2" uk-grid>
<div *ngFor="let affiliation of curator.affiliations">
<span *ngIf="!affiliation.website_url">
<img [src]="affiliation.logo_url | urlPrefix" [alt]="affiliation.name">
</span>
<a *ngIf="affiliation.website_url"
target="_blank" [href]="affiliation.website_url | urlPrefix">
<img [src]="affiliation.logo_url | urlPrefix" [alt]="affiliation.name">
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="uk-margin-medium">
<helper *ngIf="pageContents && pageContents['bottom'] && pageContents['bottom'].length > 0"
[texts]="pageContents['bottom']">
</helper>
</div>
</div>
</div>
</ng-container>
<!-- Short view for community's homepage -->
<ng-template #shortView>
<div *ngIf=" curators && curators.length > 0" class="uk-grid">
<span class="uk-text-meta uk-width-auto">
Curated by:
</span>
<div class="uk-width-expand uk-padding-remove uk-overflow-auto">
<div class="uk-height-max-medium uk-margin-xsmall-left">
<a routerLink="/curators">
<span *ngFor="let curator of curators.slice(0,curatorsLimit) let i=index;">
{{curator.name}}
<span *ngIf="i < curators.length-1 && i < curatorsLimit-1">, </span>
</span>
<span *ngIf="curators.length > curatorsLimit">
+{{curators.length-curatorsLimit}} more
</span>
</a>
</div>
</div>
</div>
</ng-template>
<fs-modal #fsModal classTitle="">
<div *ngIf="curatorInModal" class="uk-width-1-1 uk-height-1-1">
<div class="uk-container uk-container-large uk-section">
<div class="uk-margin-large-top uk-grid uk-grid-large" uk-grid>
<div class="uk-width-1-3@m">
<h2>
{{curatorInModal.name}}
</h2>
<img *ngIf="curatorInModal.photo && curatorInModal.photo !== ''" class="uk-width-2-3 uk-border-circle uk-margin-top uk-margin-bottom"
src="{{downloadUrl + curatorInModal.photo}}" alt="Curator Photo">
<img *ngIf="!curatorInModal.photo || curatorInModal.photo == ''" class="uk-width-2-3 uk-border-circle uk-margin-top uk-margin-bottom"
src="../../assets/common-assets/curator-default.png" alt="Curator Photo">
</div>
<div class="uk-width-2-3@m">
<ul class="uk-tab" uk-tab>
<li>
<a>Biography</a>
</li>
<li *ngIf="curatorInModal.affiliations && curatorInModal.affiliations.length > 0">
<a>Affiliations</a>
</li>
</ul>
<ul class="uk-switcher">
<li class="uk-padding uk-padding-remove-left">
<h5>
Biography
</h5>
<div>
{{curatorInModal.bio}}
</div>
</li>
<li *ngIf="curatorInModal.affiliations && curatorInModal.affiliations.length > 0" class="uk-padding uk-padding-remove-left">
<div class="uk-grid uk-flex-middle uk-child-width-1-3" uk-grid>
<div *ngFor="let affiliation of curatorInModal.affiliations">
<span *ngIf="!affiliation.website_url">
<img [src]="affiliation.logo_url | urlPrefix" [alt]="affiliation.name">
</span>
<a *ngIf="affiliation.website_url"
target="_blank" [href]="affiliation.website_url | urlPrefix">
<img [src]="affiliation.logo_url | urlPrefix" [alt]="affiliation.name">
</a>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</fs-modal>

View File

@ -1,155 +0,0 @@
import {Component, Input, ViewChild} from '@angular/core';
import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties';
import {CuratorService} from "../openaireLibrary/connect/curators/curator.service";
import {Curator} from "../openaireLibrary/utils/entities/CuratorInfo";
import {ActivatedRoute, Router} from "@angular/router";
import {CommunityService} from "../openaireLibrary/connect/community/community.service";
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
import {Meta, Title} from "@angular/platform-browser";
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
import {Subscription} from "rxjs";
import {properties} from "../../environments/environment";
import {UserRegistryService} from "../openaireLibrary/services/user-registry.service";
import {FullScreenModalComponent} from '../openaireLibrary/utils/modal/full-screen-modal/full-screen-modal.component';
import {CommunityInfo} from "../openaireLibrary/connect/community/communityInfo";
@Component({
selector: 'curators',
templateUrl: './curators.component.html'
})
export class CuratorsComponent {
@Input() longView = true;
community: CommunityInfo;
public downloadUrl = null;
public showLoading = true;
public curators: Curator[] = [];
public curatorsLimit: number = 5;
public numberOfCurators: number = 5;
public showMore = [];
public maxCharacters = 450;
public viewingMore: boolean = false;
public curatorInModal;
public properties: EnvProperties;
public pageContents = null;
public divContents = null;
public url: string = null;
public pageTitle: string = "Curators";
public breadcrumbs: Breadcrumb[] = [{name: 'Home', route: '/'}, {name: 'About - Curators'}];
subs: Subscription[] = [];
@ViewChild('fsModal', { static: true }) fsModal: FullScreenModalComponent;
constructor(private route: ActivatedRoute,
private curatorsService: CuratorService,
private communityService: CommunityService,
private userRegistryService: UserRegistryService,
private _router: Router,
private helper: HelperService,
private _meta: Meta,
private _title: Title,
private seoService: SEOService,
private _piwikService: PiwikService) {
}
ngOnInit() {
this.showLoading = true;
this.properties = properties;
this.downloadUrl = this.properties.utilsService + '/download/';
//if (properties.environment !== 'development') {
if (!this.longView) {
this.subs.push(this.communityService.getCommunityAsObservable().subscribe(community => {
if (community) {
this.community = community;
this.getCurators();
}
}));
} else {
this.subs.push(this.communityService.getCommunityAsObservable().subscribe(community => {
if (community) {
this.community = community;
this.subs.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
this.url = this.properties.domain + this._router.url;
this.seoService.createLinkForCanonicalURL(this.url);
this.updateUrl(this.url);
this.updateTitle(this.pageTitle);
this.updateDescription("OpenAIRE - Connect, Community Gateway, research community");
//this.getDivContents();
this.getPageContents();
this.getCurators();
}
}));
}
}
ngOnDestroy() {
for (let sub of this.subs) {
sub.unsubscribe();
}
}
private getCurators() {
this.subs.push(this.curatorsService.getCurators(this.properties, this.community.communityId).subscribe(curators => {
this.curators = curators;
this.showLoading = false;
}, error => {
console.error(error);
this.curators = [];
this.showLoading = false;
}));
}
private getPageContents() {
this.subs.push(this.helper.getPageHelpContents(this.properties, this.community.communityId, this._router.url).subscribe(contents => {
this.pageContents = contents;
}));
}
private getDivContents() {
this.subs.push(this.helper.getDivHelpContents(this.properties, this.community.communityId, this._router.url).subscribe(contents => {
this.divContents = contents;
}));
}
format(name: string) {
if (name) {
return (((name).length > this.maxCharacters) ? (name.substring(0, (this.maxCharacters - ('...').length)) + '...') : name);
} else {
return null;
}
}
public viewMore() {
this.viewingMore = !this.viewingMore;
}
public openFsModal(curator) {
this.curatorInModal = curator;
this.fsModal.title = this.community.shortTitle + ' Curator';
this.fsModal.open();
}
private updateDescription(description: string) {
this._meta.updateTag({content: description}, "name='description'");
this._meta.updateTag({content: description}, "property='og:description'");
}
private updateTitle(title: string) {
var _title = ((title.length > 50) ? title.substring(0, 50) : title);
this._title.setTitle(_title);
this._meta.updateTag({content: _title}, "property='og:title'");
}
private updateUrl(url: string) {
this._meta.updateTag({content: url}, "property='og:url'");
}
}

View File

@ -1,35 +0,0 @@
import { NgModule} from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { RouterModule } from '@angular/router';
import {CuratorsComponent} from './curators.component';
import {CuratorService} from "../openaireLibrary/connect/curators/curator.service";
import {CuratorsRoutingModule} from "./curators-routing.module";
import {AffiliationsModule} from "../affiliations/affiliations.module";
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
import {PiwikServiceModule} from "../openaireLibrary/utils/piwik/piwikService.module";
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
import {UrlPrefixModule} from "../openaireLibrary/utils/pipes/url-prefix.module";
import {LoadingModule} from '../openaireLibrary/utils/loading/loading.module';
import {FullScreenModalModule} from '../openaireLibrary/utils/modal/full-screen-modal/full-screen-modal.module';
@NgModule({
imports: [
CommonModule, FormsModule, RouterModule,
CuratorsRoutingModule, AffiliationsModule, HelperModule,
Schema2jsonldModule, SEOServiceModule, PiwikServiceModule,
BreadcrumbsModule, UrlPrefixModule, LoadingModule,
FullScreenModalModule
],
declarations: [
CuratorsComponent
],
providers: [CuratorService],
exports: [
CuratorsComponent
]
})
export class CuratorsModule {}

View File

@ -8,6 +8,7 @@ import {ZenodoCommunitiesService} from "../openaireLibrary/connect/zenodoCommuni
import {CommunityService} from "../openaireLibrary/connect/community/community.service";
import {Subscriber, Subscription} from "rxjs";
import {properties} from "../../environments/environment";
import {SearchCommunityDataprovidersService} from "../openaireLibrary/connect/contentProviders/searchDataproviders.service";
@Component({
selector: 'openaire-deposit',
@ -30,7 +31,8 @@ export class OpenaireDepositComponent {
constructor(private route: ActivatedRoute,
private _zenodoCommunitieService: ZenodoCommunitiesService,
private _communityService: CommunityService) {
private _communityService: CommunityService,
private searchCommunityDataprovidersService: SearchCommunityDataprovidersService) {
this.fetchZenodoInformation = new FetchZenodoInformation(this._zenodoCommunitieService);
}
@ -46,6 +48,16 @@ export class OpenaireDepositComponent {
this.zenodoInformation.url = this.properties.zenodo;
this.zenodoInformation.name = "Zenodo";
}
this.subs.push(this.searchCommunityDataprovidersService.searchDataproviders(this.properties, this.communityId, true).subscribe(
res => {
if(res && res.length > 0){
this.zenodoInformation.hasSuggestedRepositories = true;
}
},
error => {
console.log(error);
}
));
}
}));
if (!this.zenodoInformation.shareInZenodoUrl) {

View File

@ -9,6 +9,7 @@ import {DepositRoutingModule} from "./deposit-routing.module";
import {DepositFirstPageModule} from "../openaireLibrary/deposit/depositFirstPage.module";
import {ZenodoCommunitiesService} from "../openaireLibrary/connect/zenodoCommunities/zenodo-communities.service";
import {SearchCommunityDataprovidersService} from "../openaireLibrary/connect/contentProviders/searchDataproviders.service";
@NgModule({
imports: [
@ -21,7 +22,7 @@ import {ZenodoCommunitiesService} from "../openaireLibrary/connect/zenodoCommuni
exports: [
OpenaireDepositComponent,
],
providers: [PreviousRouteRecorder, IsRouteEnabled,
providers: [PreviousRouteRecorder, IsRouteEnabled, SearchCommunityDataprovidersService,
ZenodoCommunitiesService]
})
export class LibDepositModule { }

View File

@ -9,6 +9,7 @@ import {ZenodoInformationClass} from '../openaireLibrary/deposit/utils/zenodoInf
import {FetchZenodoInformation} from './utils/fetchZenodoInformation.class';
import {Subscriber, Subscription} from "rxjs";
import {properties} from "../../environments/environment";
import {SearchCommunityDataprovidersService} from "../openaireLibrary/connect/contentProviders/searchDataproviders.service";
@Component({
selector: 'openaire-search-deposit',
@ -28,7 +29,8 @@ export class OpenaireSearchDataprovidersToDepositComponent {
constructor(private route: ActivatedRoute,
private _zenodoCommunitieService: ZenodoCommunitiesService,
private _communityService: CommunityService) {
private _communityService: CommunityService,
private searchCommunityDataprovidersService: SearchCommunityDataprovidersService) {
this.fetchZenodoInformation = new FetchZenodoInformation(this._zenodoCommunitieService);
}
@ -44,6 +46,16 @@ export class OpenaireSearchDataprovidersToDepositComponent {
this.zenodoInformation.url = this.properties.zenodo;
this.zenodoInformation.name = "Zenodo";
}
this.subs.push(this.searchCommunityDataprovidersService.searchDataproviders(this.properties, this.communityId, true).subscribe(
res => {
if(res && res.length > 0){
this.zenodoInformation.hasSuggestedRepositories = true;
}
},
error => {
console.log(error);
}
));
}
}
));

View File

@ -9,6 +9,7 @@ import {SearchDataprovidersToDepositModule} from '../openaireLibrary/deposit/sea
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../openaireLibrary/error/isRouteEnabled.guard';
import {ZenodoCommunitiesServiceModule} from '../openaireLibrary/connect/zenodoCommunities/zenodo-communitiesService.module';
import {SearchCommunityDataprovidersService} from "../openaireLibrary/connect/contentProviders/searchDataproviders.service";
@NgModule({
imports: [
@ -23,6 +24,6 @@ import {ZenodoCommunitiesServiceModule} from '../openaireLibrary/connect/zenodoC
exports: [
OpenaireSearchDataprovidersToDepositComponent,
],
providers: [PreviousRouteRecorder, IsRouteEnabled]
providers: [PreviousRouteRecorder, IsRouteEnabled, SearchCommunityDataprovidersService]
})
export class LibSearchDataprovidersToDepositModule { }

View File

@ -0,0 +1,16 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from "../../openaireLibrary/error/isRouteEnabled.guard";
import {SuggestedRepositoriesComponent} from "./suggestedRepositories.component";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: SuggestedRepositoriesComponent, canActivate: [IsRouteEnabled], canDeactivate: [PreviousRouteRecorder] }
])
]
})
export class SuggestedRepositoriesRoutingModule { }

View File

@ -0,0 +1,79 @@
<schema2jsonld *ngIf="url" [URL]="url" [name]="title" type="other"></schema2jsonld>
<div class="uk-container uk-container-large uk-section uk-section-small uk-padding-remove-bottom">
<div class="uk-padding-small uk-padding-remove-horizontal">
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
</div>
</div>
<div class="uk-container uk-container-large uk-section uk-section-small uk-margin-medium-bottom" id="tm-main">
<div class="uk-container uk-container-large uk-margin-bottom">
<div class=" uk-grid uk-flex uk-flex-middle">
<h2 class="uk-margin-top uk-margin-medium-bottom uk-width-1-2@m">Repositories suggested by the curators.</h2>
<div class="uk-flex uk-flex-center uk-flex-middle uk-width-expand@m uk-width-1-1@s">
<div class="uk-padding">
<div page-enabled [pageRoute]="'/participate/deposit/zenodo'" class="uk-flex uk-flex-column uk-flex-middle uk-margin-large-bottom">
<img src="assets/common-assets/common/logo-zenodo.png" alt="Zenodo logo" class="uk-width-small ">
<div *ngIf="this.community.zenodoCommunity || this.community.otherZenodoCommunities.length > 0" class="">
<a class="uk-button uk-button-text" [routerLink]="['../zenodo']" >
Use related Zenodo communities
</a>
</div>
<div *ngIf="!(this.community.zenodoCommunity || this.community.otherZenodoCommunities.length > 0)"
class="">
<a class="uk-button uk-button-text custom-external" [href]="properties.zenodo" target="_blank">
Zenodo Repository
</a>
</div>
</div>
<div page-enabled [pageRoute]="'/participate/deposit/search'" class="uk-flex uk-flex-column uk-flex-middle">
<img src="assets/common-assets/common/Logo_Horizontal.png" alt="OpenAIRE logo" class="uk-width-small uk-margin-bottom">
<a routerLink="/participate/deposit/search" type="submit"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text">
OpenAIRE Compliant Repositories
</a>
</div>
</div>
</div>
</div>
<helper *ngIf="pageContents && pageContents['top'] && pageContents['top'].length > 0"
[texts]="pageContents['top']"></helper>
<div *ngIf="zenodoSearchUtils.status == errorCodes.LOADING"
class="uk-animation-fade uk-margin-large uk-padding-large uk-padding-remove-horizontal" role="alert">
<loading></loading>
</div>
<div *ngIf="(zenodoSearchUtils.status == errorCodes.ERROR || zenodoSearchUtils.status == errorCodes.NONE)"
class="uk-animation-fade uk-margin-top uk-width-1-1 uk-alert uk-alert-warning" role="alert">
No suggested repositories found
</div>
<div class="uk-section">
<div *ngIf="contentProviders && contentProviders.length > 0" class="uk-grid uk-grid-medium uk-grid-match uk-child-width-1-2@m uk-margin-top" uk-grid
uk-height-match="target: .header, .body">
<ng-template ngFor let-item [ngForOf]="contentProviders" let-i="index">
<div
class="uk-animation-fade">
<div class="uk-card uk-card-default uk-card-body uk-card-hover">
<a [routerLink]="properties.searchLinkToDataProvider.split('?')[0]" [queryParams]="{datasourceId : item.openaireId}" >{{item.officialname?item.officialname:item.name}}</a>
<hr>
<div class="uk-text-small" [innerHTML]="item.message">
</div>
<!-- update with link to dataprovider -->
<!--<div class="uk-flex uk-flex-right uk-margin-small-top">
<a [href]="properties.connectPortalUrl + properties.searchLinkToDataProvider + item.openaireId " class="uk-float-right uk-margin-small-left uk-display-inline-block uk-text-uppercase uk-button uk-button-text" target="_blank">
<span class="uk-flex uk-flex-middle">
<icon [name]="'file_upload'" [type]="'outlined'" class="uk-margin-small-right"></icon>
<span>Go to repository</span>
</span>
</a>
</div>-->
</div>
</div>
</ng-template>
</div>
</div>
</div>
<helper *ngIf="pageContents && pageContents['bottom'] && pageContents['bottom'].length > 0"
[texts]="pageContents['bottom']"></helper>
</div>

View File

@ -0,0 +1,141 @@
import {Component} from '@angular/core';
import {ActivatedRoute, Router} from '@angular/router';
import {Meta, Title} from '@angular/platform-browser';
import {EnvProperties} from '../../openaireLibrary/utils/properties/env-properties';
import {ZenodoCommunitiesService} from '../../openaireLibrary/connect/zenodoCommunities/zenodo-communities.service';
import {CommunityService} from '../../openaireLibrary/connect/community/community.service';
import {CommunityInfo} from '../../openaireLibrary/connect/community/communityInfo';
import {SearchUtilsClass} from '../../openaireLibrary/searchPages/searchUtils/searchUtils.class';
import {ErrorCodes} from '../../openaireLibrary/utils/properties/errorCodes';
import {HelperService} from "../../openaireLibrary/utils/helper/helper.service";
import {RouterHelper} from "../../openaireLibrary/utils/routerHelper.class";
import {SEOService} from "../../openaireLibrary/sharedComponents/SEO/SEO.service";
import {PiwikService} from "../../openaireLibrary/utils/piwik/piwik.service";
import {Breadcrumb} from "../../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
import {properties} from "../../../environments/environment";
import {Subscriber, Subscription} from "rxjs";
import {SearchCommunityDataprovidersService} from "../../openaireLibrary/connect/contentProviders/searchDataproviders.service";
@Component({
selector: 'suggested-repositories',
templateUrl: './suggestedRepositories.component.html'
})
export class SuggestedRepositoriesComponent {
public url: string = null;
public title: string = "Suggested Repositories";
properties: EnvProperties = properties;
communityId: string = null;
community: CommunityInfo = null;
public pageContents = null;
public divContents = null;
// public warningMessage = "";
// public infoMessage = "";
masterZenodoCommunityId = null;
masterZenodoCommunity = null;
communityIds = null;
communities = [];
page = 1;
size = 5;
zenodoCommunitiesLoadedCount = 0;
zenodoSearchUtils: SearchUtilsClass = new SearchUtilsClass();
errorCodes: ErrorCodes = new ErrorCodes();
depositLink = "https://zenodo.org/deposit/new?c=";
depositLearnHowPage: string = null;
public routerHelper: RouterHelper = new RouterHelper();
breadcrumbs: Breadcrumb[] = [];
subs: Subscription[] = [];
contentProviders;
constructor(private route: ActivatedRoute,
private _router: Router,
private _meta: Meta,
private _title: Title,
private _zenodoCommunitieService: ZenodoCommunitiesService,
private _communityService: CommunityService,
private searchCommunityDataprovidersService: SearchCommunityDataprovidersService,
private helper: HelperService,
private _piwikService: PiwikService,
private seoService: SEOService) {
}
public ngOnInit() {
this.zenodoSearchUtils.status = this.errorCodes.LOADING;
this.url = properties.domain + properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(this.url, false);
this.updateUrl(this.url);
this.updateTitle(this.title);
this.updateDescription("sugested repositories, deposit");
this.depositLearnHowPage = this.properties.depositLearnHowPage;
this.breadcrumbs.push({name: 'home', route: '/'}, {
name: "Deposit",
route: this.depositLearnHowPage
}, {name: "Suggested Repositories", route: null});
//this.getDivContents();
this.getPageContents();
this.subs.push(this._communityService.getCommunityAsObservable().subscribe(
community => {
if (community) {
this.communityId = community.communityId;
this.subs.push(this._piwikService.trackView(this.properties, this.title).subscribe());
this.community = community;
this.masterZenodoCommunityId = this.community.zenodoCommunity;
this.subs.push(this.searchCommunityDataprovidersService.searchDataproviders(this.properties, this.community.communityId, true).subscribe(
res => {
this.contentProviders = res;
this.zenodoSearchUtils.status = this.contentProviders && this.contentProviders.length > 0 ? this.errorCodes.DONE: this.errorCodes.NONE;
},
error => {
console.log(error);
}
));
}
}));
}
public ngOnDestroy() {
for (let sub of this.subs) {
if (sub instanceof Subscriber) {
sub.unsubscribe();
}
}
}
private updateDescription(description: string) {
this._meta.updateTag({content: description}, "name='description'");
this._meta.updateTag({content: description}, "property='og:description'");
}
private updateTitle(title: string) {
var _title = ((title.length > 50) ? title.substring(0, 50) : title);
this._title.setTitle(_title);
this._meta.updateTag({content: _title}, "property='og:title'");
}
private updateUrl(url: string) {
this._meta.updateTag({content: url}, "property='og:url'");
}
private getPageContents() {
this.subs.push(this.helper.getPageHelpContents(this.properties, this.communityId, this._router.url).subscribe(contents => {
this.pageContents = contents;
}));
}
private getDivContents() {
this.subs.push(this.helper.getDivHelpContents(this.properties, this.communityId, this._router.url).subscribe(contents => {
this.divContents = contents;
}));
}
private handleError(message: string, error) {
console.error("Share in Zenodo Page: " + message, error);
}
}

View File

@ -0,0 +1,39 @@
import { NgModule} from '@angular/core';
import { CommonModule } from '@angular/common';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard'
import {ZenodoCommunitiesServiceModule} from '../../openaireLibrary/connect/zenodoCommunities/zenodo-communitiesService.module';
import {RouterModule} from "@angular/router";
import {HelperModule} from "../../openaireLibrary/utils/helper/helper.module";
import {PiwikServiceModule} from "../../openaireLibrary/utils/piwik/piwikService.module";
import {Schema2jsonldModule} from "../../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
import {SEOServiceModule} from "../../openaireLibrary/sharedComponents/SEO/SEOService.module";
import {BreadcrumbsModule} from "../../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
import {NoLoadPaging} from "../../openaireLibrary/searchPages/searchUtils/no-load-paging.module";
import {IconsModule} from 'src/app/openaireLibrary/utils/icons/icons.module';
import {LoadingModule} from 'src/app/openaireLibrary/utils/loading/loading.module';
import {SuggestedRepositoriesRoutingModule} from "./suggestedRepositories-routing.module";
import {SuggestedRepositoriesComponent} from "./suggestedRepositories.component";
import {SearchCommunityDataprovidersService} from "../../openaireLibrary/connect/contentProviders/searchDataproviders.service";
import {IsPageEnabledModule} from "../../openaireLibrary/utils/isPageEnabled/isPageEnabled.module";
@NgModule({
imports: [
CommonModule, SuggestedRepositoriesRoutingModule, ZenodoCommunitiesServiceModule,
RouterModule, HelperModule, LoadingModule,
PiwikServiceModule, Schema2jsonldModule, SEOServiceModule, BreadcrumbsModule, NoLoadPaging, IconsModule, IsPageEnabledModule
],
declarations: [
SuggestedRepositoriesComponent
],
providers:[PreviousRouteRecorder, IsRouteEnabled, SearchCommunityDataprovidersService],
exports: [
SuggestedRepositoriesComponent
]
})
export class SuggestedRepositoriesModule {}

View File

@ -1,150 +1,157 @@
<schema2jsonld *ngIf="url" [URL]="url" [name]="title" type="other"></schema2jsonld>
<div class="uk-container uk-container-large uk-section uk-section-small uk-padding-remove-bottom">
<div class="uk-padding-small uk-padding-remove-horizontal">
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
</div>
</div>
<div class="uk-container uk-container-large uk-section uk-section-small uk-margin-medium-bottom" id="tm-main">
<helper *ngIf="pageContents && pageContents['top'] && pageContents['top'].length > 0"
[texts]="pageContents['top']"></helper>
<div class="uk-container uk-container-large uk-margin-bottom">
<h2 class="uk-margin-top uk-margin-medium-bottom uk-width-2-5@m">Deposit your research in Zenodo.</h2>
<div *ngIf="masterZenodoCommunity" class="uk-animation-fade uk-margin-medium-top uk-margin-large-bottom">
<h6 class="uk-margin-medium-bottom">Main Zenodo community</h6>
<div class="uk-grid uk-grid-large uk-child-width-1-2@s" uk-grid>
<div>
<div class="uk-card uk-card-default">
<div class="uk-card-body">
<div class="uk-grid uk-grid-medium uk-flex-middle" uk-grid>
<div class="uk-width-auto" *ngIf="masterZenodoCommunity.logoUrl">
<a target="_blank" [href]="masterZenodoCommunity.link">
<img *ngIf="masterZenodoCommunity.logoUrl"
src="{{masterZenodoCommunity.logoUrl}}" width="80" height="80" alt="">
</a>
</div>
<div class="uk-width-expand">
<h2 class="uk-margin-remove uk-text-break uk-inline-block uk-h6">
<a *ngIf="masterZenodoCommunity.link" class="custom-external uk-link uk-link-heading uk-width-expand" target="_blank"
href="{{masterZenodoCommunity.link}}">
<span *ngIf="masterZenodoCommunity.title">{{masterZenodoCommunity.title}}</span>
<span *ngIf="!masterZenodoCommunity.title">[no name available]</span>
</a>
<span *ngIf="!masterZenodoCommunity.link">
<helper *ngIf="pageContents && pageContents['top'] && pageContents['top'].length > 0"
[texts]="pageContents['top']"></helper>
<div class="uk-container uk-container-large uk-margin-bottom">
<div class="uk-grid uk-grid-large uk-child-width-1-2@s uk-flex uk-flex-middle" uk-grid>
<div>
<h2 class="uk-margin-top uk-margin-medium-bottom">Deposit your research in Zenodo.</h2>
<div *ngIf="masterZenodoCommunity" class="uk-animation-fade uk-margin-medium-top uk-margin-large-bottom">
<h6 class="uk-margin-medium-bottom">Main Zenodo community</h6>
<div class="uk-card uk-card-default">
<div class="uk-card-body">
<div class="uk-grid uk-grid-medium uk-flex-middle" uk-grid>
<div class="uk-width-auto" *ngIf="masterZenodoCommunity.logoUrl">
<a target="_blank" [href]="masterZenodoCommunity.link">
<img *ngIf="masterZenodoCommunity.logoUrl"
src="{{masterZenodoCommunity.logoUrl}}" width="80" height="80" alt="">
</a>
</div>
<div class="uk-width-expand">
<h2 class="uk-margin-remove uk-text-break uk-inline-block uk-h6">
<a *ngIf="masterZenodoCommunity.link"
class="custom-external uk-link uk-link-heading uk-width-expand" target="_blank"
href="{{masterZenodoCommunity.link}}">
<span *ngIf="masterZenodoCommunity.title">{{masterZenodoCommunity.title}}</span>
<span *ngIf="!masterZenodoCommunity.title">[no name available]</span>
</a>
<span *ngIf="!masterZenodoCommunity.link">
<span *ngIf="masterZenodoCommunity.title">{{masterZenodoCommunity.title}}</span>
<span *ngIf="!masterZenodoCommunity.title">[no name available]</span>
</span>
</h2>
<div *ngIf="masterZenodoCommunity.date" class="uk-text-small uk-margin-small-top">
<span class="uk-text-meta">Last update: </span>{{masterZenodoCommunity.date | date:'yyyy/MM/dd'}}
</div>
</div>
</div>
<div *ngIf="masterZenodoCommunity.description" class="uk-margin-top uk-margin-bottom uk-text-small">
<p *ngIf="masterZenodoCommunity.description" class="uk-margin-remove" [innerHTML]="masterZenodoCommunity.description"></p>
</div>
<div>
</h2>
<div *ngIf="masterZenodoCommunity.date" class="uk-text-small uk-margin-small-top">
<span class="uk-text-meta">Last update: </span>{{masterZenodoCommunity.date | date:'yyyy/MM/dd'}}
</div>
</div>
</div>
<div *ngIf="masterZenodoCommunity.description" class="uk-margin-top uk-margin-bottom uk-text-small">
<p *ngIf="masterZenodoCommunity.description" class="uk-margin-remove"
[innerHTML]="masterZenodoCommunity.description"></p>
</div>
<div>
<span class="uk-width-expand uk-flex-right">
<a [href]="depositLink + masterZenodoCommunity.id" target="_blank" type="submit"
class="uk-float-right uk-margin-small-left uk-display-inline-block uk-text-uppercase uk-button uk-button-text">
class="uk-float-right uk-margin-small-left uk-display-inline-block uk-text-uppercase uk-button uk-button-text">
<span class="uk-flex uk-flex-middle">
<icon name="file_upload" type="outlined" [flex]="true" class="uk-margin-small-right"></icon>
<span>New upload</span>
</span>
</a>
</span>
</div>
</div>
</div>
</div>
<div class="uk-flex uk-flex-center uk-flex-middle">
<div class="uk-padding">
<!-- <div class="uk-flex uk-flex-column uk-flex-middle uk-margin-large-bottom">
<img src="assets/connect-assets/deposit/suggested-repositories.svg" alt="Suggested Repositories" class="uk-width-small uk-margin-bottom" style="height: 70px;">
<a routerLink="/participate/deposit/search" type="submit"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text">
Suggested Repositories
</a>
</div> -->
<div class="uk-flex uk-flex-column uk-flex-middle">
<img src="assets/common-assets/common/Logo_Horizontal.png" alt="OpenAIRE logo" class="uk-width-small uk-margin-bottom">
<a routerLink="/participate/deposit/search" type="submit"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text">
OpenAIRE Compliant Repositories
</a>
</div>
</div>
</div>
</div>
</div>
<div *ngIf="zenodoSearchUtils.status == errorCodes.LOADING"
class="uk-animation-fade uk-margin-large uk-padding-large uk-padding-remove-horizontal" role="alert">
<loading></loading>
</div>
<div *ngIf="(zenodoSearchUtils.status == errorCodes.ERROR || zenodoSearchUtils.status == errorCodes.NONE) && !masterZenodoCommunity"
class="uk-animation-fade uk-margin-top uk-width-1-1 uk-alert uk-alert-warning" role="alert">
No zenodo communities found
</div>
<div class="uk-section">
<h6 *ngIf="masterZenodoCommunity" class="uk-margin-medium-bottom">Other related Zenodo communities</h6>
<h6 *ngIf="!masterZenodoCommunity" class="uk-margin-medium-bottom">Related Zenodo communities</h6>
<div *ngIf="!masterZenodoCommunity" class="uk-margin-top uk-text-center uk-margin-medium-bottom">
<a routerLink="/participate/deposit/search" target="_blank" class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text">
OpenAIRE Compliant Repositories
</a>
</div>
<no-load-paging *ngIf="communityIds && communityIds.length > size" [type]="'Zenodo communities'"
(pageChange)="getCommunities($event)"
[page]="page" [pageSize]="size"
[totalResults]="communityIds.length" >
</no-load-paging>
<div *ngIf="communityIds && communityIds.length > 0" class="uk-grid uk-grid-medium uk-grid-match uk-child-width-1-2@m uk-margin-top" uk-grid
uk-height-match="target: .header, .body">
<ng-template ngFor let-item [ngForOf]="communityIds" let-i="index">
<div *ngIf="i>=((page-1)*size) && i < communityIds.length && i< this.page * this.size && communities[this.communityIds[i]]"
class="uk-animation-fade">
<div class="uk-card uk-card-default">
<div class="uk-card-body">
<div class="header uk-grid uk-grid-medium uk-flex-middle" uk-grid>
<div class="uk-width-auto" *ngIf="communities[this.communityIds[i]].logoUrl">
<a target="_blank" [href]="communities[this.communityIds[i]].link">
<img *ngIf="communities[this.communityIds[i]].logoUrl"
src="{{communities[this.communityIds[i]].logoUrl}}" width="80" height="80" alt="">
</a>
</div>
<div class="uk-width-expand">
<h2 class="uk-margin-remove uk-text-break uk-inline-block uk-h6">
<a class="custom-external uk-link uk-link-heading uk-width-expand" target="_blank"
href="{{communities[this.communityIds[i]].link}}">
<span *ngIf="communities[this.communityIds[i]].title">{{communities[this.communityIds[i]].title}}</span>
<span *ngIf="!communities[this.communityIds[i]].title">[no name available]</span>
</a>
</h2>
<div class="uk-text-small uk-margin-small-top">
<span class="uk-text-meta">Last update: </span>{{communities[this.communityIds[i]].date | date:'yyyy/MM/dd'}}
</div>
</div>
</div>
<div class="body uk-margin-top uk-margin-bottom uk-text-small multi-line-ellipsis lines-3"> <!-- uk-height-max-small uk-overflow-auto -->
<p *ngIf="communities[this.communityIds[i]].description" class="uk-margin-remove" [innerHtml]="communities[this.communityIds[i]].description"></p>
</div>
<div>
</div>
</div>
</div>
</div>
</div>
<div class="uk-flex uk-flex-center uk-flex-middle">
<div class="uk-padding">
<div page-enabled [pageRoute]="'/participate/deposit/suggested'"
class="uk-flex uk-flex-column uk-flex-middle uk-margin-large-bottom">
<img src="assets/connect-assets/deposit/suggested-repositories.svg" alt="Suggested Repositories"
class="uk-width-small uk-margin-bottom" style="height: 70px;">
<a routerLink="/participate/deposit/suggested" type="submit"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text">
Suggested Repositories
</a>
</div>
<div page-enabled [pageRoute]="'/participate/deposit/search'" class="uk-flex uk-flex-column uk-flex-middle">
<img src="assets/common-assets/common/Logo_Horizontal.png" alt="OpenAIRE logo"
class="uk-width-small uk-margin-bottom">
<a routerLink="/participate/deposit/search" type="submit"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text">
OpenAIRE Compliant Repositories
</a>
</div>
</div>
</div>
</div>
<div *ngIf="zenodoSearchUtils.status == errorCodes.LOADING"
class="uk-animation-fade uk-margin-large uk-padding-large uk-padding-remove-horizontal" role="alert">
<loading></loading>
</div>
<div
*ngIf="(zenodoSearchUtils.status == errorCodes.ERROR || zenodoSearchUtils.status == errorCodes.NONE) && !masterZenodoCommunity"
class="uk-animation-fade uk-margin-top uk-width-1-1 uk-alert uk-alert-warning" role="alert">
No zenodo communities found
</div>
<div class="uk-section">
<h6 *ngIf="masterZenodoCommunity" class="uk-margin-medium-bottom">Other related Zenodo communities</h6>
<h6 *ngIf="!masterZenodoCommunity" class="uk-margin-medium-bottom">Related Zenodo communities</h6>
<no-load-paging *ngIf="communityIds && communityIds.length > size" [type]="'Zenodo communities'"
(pageChange)="getCommunities($event)"
[page]="page" [pageSize]="size"
[totalResults]="communityIds.length">
</no-load-paging>
<div *ngIf="communityIds && communityIds.length > 0"
class="uk-grid uk-grid-medium uk-grid-match uk-child-width-1-2@m uk-margin-top" uk-grid
uk-height-match="target: .header, .body">
<ng-template ngFor let-item [ngForOf]="communityIds" let-i="index">
<div
*ngIf="i>=((page-1)*size) && i < communityIds.length && i< this.page * this.size && communities[this.communityIds[i]]"
class="uk-animation-fade">
<div class="uk-card uk-card-default">
<div class="uk-card-body">
<div class="header uk-grid uk-grid-medium uk-flex-middle" uk-grid>
<div class="uk-width-auto" *ngIf="communities[this.communityIds[i]].logoUrl">
<a target="_blank" [href]="communities[this.communityIds[i]].link">
<img *ngIf="communities[this.communityIds[i]].logoUrl"
src="{{communities[this.communityIds[i]].logoUrl}}" width="80" height="80" alt="">
</a>
</div>
<div class="uk-width-expand">
<h2 class="uk-margin-remove uk-text-break uk-inline-block uk-h6">
<a class="custom-external uk-link uk-link-heading uk-width-expand" target="_blank"
href="{{communities[this.communityIds[i]].link}}">
<span
*ngIf="communities[this.communityIds[i]].title">{{communities[this.communityIds[i]].title}}</span>
<span *ngIf="!communities[this.communityIds[i]].title">[no name available]</span>
</a>
</h2>
<div class="uk-text-small uk-margin-small-top">
<span
class="uk-text-meta">Last update: </span>{{communities[this.communityIds[i]].date | date:'yyyy/MM/dd'}}
</div>
</div>
</div>
<div class="body uk-margin-top uk-margin-bottom uk-text-small multi-line-ellipsis lines-3">
<!-- uk-height-max-small uk-overflow-auto -->
<p *ngIf="communities[this.communityIds[i]].description" class="uk-margin-remove"
[innerHtml]="communities[this.communityIds[i]].description"></p>
</div>
<div>
<span class="uk-width-expand uk-flex-right">
<a [href]="depositLink + communities[this.communityIds[i]].id" target="_blank" type="submit"
class="uk-float-right uk-margin-small-left uk-display-inline-block uk-text-uppercase uk-button uk-button-text">
class="uk-float-right uk-margin-small-left uk-display-inline-block uk-text-uppercase uk-button uk-button-text">
<span class="uk-flex uk-flex-middle">
<icon name="file_upload" type="outlined" [flex]="true" class="uk-margin-small-right"></icon>
<span>New upload</span>
</span>
</a>
</span>
</div>
</div>
</div>
</div>
</ng-template>
</div>
</div>
</div>
<helper *ngIf="pageContents && pageContents['bottom'] && pageContents['bottom'].length > 0"
[texts]="pageContents['bottom']"></helper>
</div>
</div>
</div>
</div>
</ng-template>
</div>
</div>
</div>
<helper *ngIf="pageContents && pageContents['bottom'] && pageContents['bottom'].length > 0"
[texts]="pageContents['bottom']"></helper>
</div>

View File

@ -24,7 +24,7 @@ export class ShareInZenodoComponent {
public title: string = "Share in Zenodo";
properties: EnvProperties = properties;
communityId: string = null;
private community: CommunityInfo = null;
community: CommunityInfo = null;
public pageContents = null;
public divContents = null;
@ -89,12 +89,15 @@ export class ShareInZenodoComponent {
},
error => {
this.handleError("Error getting Master Zenodo community with id: " + this.masterZenodoCommunityId, error);
}
));
}
this.zenodoSearchUtils.status = this.errorCodes.LOADING;
this.communityIds = this.community.otherZenodoCommunities;
if(this.communityIds && this.masterZenodoCommunityId && this.communityIds.indexOf(this.masterZenodoCommunityId) !=-1){
this.communityIds.splice(this.communityIds.indexOf(this.masterZenodoCommunityId), 1)
}
this.zenodoSearchUtils.totalResults = this.communityIds.length;
if (this.communityIds.length == 0) {
this.zenodoSearchUtils.status = this.errorCodes.NONE;

View File

@ -17,17 +17,19 @@ import {BreadcrumbsModule} from "../../openaireLibrary/utils/breadcrumbs/breadcr
import {NoLoadPaging} from "../../openaireLibrary/searchPages/searchUtils/no-load-paging.module";
import {IconsModule} from 'src/app/openaireLibrary/utils/icons/icons.module';
import {LoadingModule} from 'src/app/openaireLibrary/utils/loading/loading.module';
import {SearchCommunityDataprovidersService} from "../../openaireLibrary/connect/contentProviders/searchDataproviders.service";
import {IsPageEnabledModule} from "../../openaireLibrary/utils/isPageEnabled/isPageEnabled.module";
@NgModule({
imports: [
CommonModule, ShareInZenodoRoutingModule, ZenodoCommunitiesServiceModule,
RouterModule, HelperModule, LoadingModule,
PiwikServiceModule, Schema2jsonldModule, SEOServiceModule, BreadcrumbsModule, NoLoadPaging, IconsModule
PiwikServiceModule, Schema2jsonldModule, SEOServiceModule, BreadcrumbsModule, NoLoadPaging, IconsModule, IsPageEnabledModule
],
declarations: [
ShareInZenodoComponent
],
providers:[PreviousRouteRecorder, IsRouteEnabled],
providers:[PreviousRouteRecorder, IsRouteEnabled, SearchCommunityDataprovidersService],
exports: [
ShareInZenodoComponent
]

View File

@ -25,12 +25,12 @@ import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties"
</div>
<h3>For {{openaireEntities.RESULTS | lowercase}}</h3>
<div class="uk-margin-bottom">
For {{openaireEntities.RESULTS | lowercase}} ({{openaireEntities.PUBLICATIONS | lowercase}}, {{openaireEntities.DATASETS | lowercase}}, {{openaireEntities.SOFTWARE | lowercase}} and {{openaireEntities.OTHER | lowercase}}) you can use the Selective Access APIs by adding the community parameter.
For {{openaireEntities.RESULTS | lowercase}} ({{openaireEntities.PUBLICATIONS | lowercase}}, {{openaireEntities.DATASETS | lowercase}}, {{openaireEntities.SOFTWARE | lowercase}} and {{openaireEntities.OTHER | lowercase}}) you can use the Graph API by adding the community parameter.
</div>
<a class="uk-display-inline-block uk-button uk-button-text"
href="https://graph.openaire.eu/develop/api.html" target="_blank">
href="https://graph.openaire.eu/docs/apis/search-api/research-products" target="_blank">
<span class="uk-flex uk-flex-middle">
<span>Selective Access APIs</span>
<span>Graph APIs</span>
</span>
</a>
</div>

View File

@ -1,20 +0,0 @@
import {NgModule} from "@angular/core";
import {RouterModule} from "@angular/router";
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
import {CommunityFosComponent} from "./fos.component";
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
@NgModule({
imports: [
RouterModule.forChild([
{
path: '',
component: CommunityFosComponent,
canActivate: [IsRouteEnabled],
canDeactivate: [PreviousRouteRecorder]
}
])
]
})
export class LibFosRoutingModule {
}

View File

@ -1,21 +0,0 @@
import {Component} from "@angular/core";
import {properties} from "../../environments/environment";
import {ConnectHelper} from "../openaireLibrary/connect/connectHelper";
@Component({
selector: 'community-fos',
template: `
<fos></fos>
`
})
export class CommunityFosComponent {
communityId;
constructor() {
}
ngOnInit() {
this.communityId = ConnectHelper.getCommunityFromDomain(properties.domain);
}
}

View File

@ -1,27 +0,0 @@
import {CommonModule} from "@angular/common";
import {NgModule} from "@angular/core";
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
import {LibFosRoutingModule} from "./fos-routing.module";
import {FosRoutingModule} from "../openaireLibrary/fos/fos-routing.module";
import {FosModule} from "../openaireLibrary/fos/fos.module";
import {CommunityFosComponent} from "./fos.component";
@NgModule({
imports: [
CommonModule,
LibFosRoutingModule,
FosRoutingModule,
FosModule
],
declarations: [
CommunityFosComponent
],
exports: [
CommunityFosComponent
],
providers: [
PreviousRouteRecorder
]
})
export class LibFosModule {
}

View File

@ -6,7 +6,7 @@ import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard'
import {OrganizationsPageComponent} from './organizationsPage.component';
import {OrganizationsPageRoutingModule} from './organizationsPage-routing.module';
import {AffiliationsModule} from "../../affiliations/affiliations.module";
import {AffiliationsModule} from "../../openaireLibrary/connect/affiliations/affiliations.module";
import {HelperModule} from "../../openaireLibrary/utils/helper/helper.module";
import {CommonModule} from "@angular/common";
import {HtmlPagesModule} from "../htmlPages.module";

View File

@ -1,16 +0,0 @@
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {FaqsComponent} from "./faqs.component";
import {IsRouteEnabled} from "../../openaireLibrary/error/isRouteEnabled.guard";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: FaqsComponent, canActivate: [ IsRouteEnabled], canDeactivate: [PreviousRouteRecorder] }
])
]
})
export class FaqsRoutingModule { }

View File

@ -1,269 +0,0 @@
import {Component} from '@angular/core';
import {Breadcrumb} from "../../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties";
import {ActivatedRoute, Router} from "@angular/router";
import {Meta, Title} from "@angular/platform-browser";
import {SEOService} from "../../openaireLibrary/sharedComponents/SEO/SEO.service";
import {PiwikService} from "../../openaireLibrary/utils/piwik/piwik.service";
import {HelperService} from "../../openaireLibrary/utils/helper/helper.service";
import {Subscriber} from "rxjs";
import {properties} from "../../../environments/environment";
@Component({
selector: 'faqs',
template: `
<schema2jsonld *ngIf="url" [URL]="url" [name]="pageTitle" type="other"></schema2jsonld>
<div class="uk-container uk-container-large uk-section uk-section-small uk-padding-remove-bottom">
<div class="uk-padding-small uk-padding-remove-horizontal">
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
</div>
</div>
<div class="uk-section uk-padding-remove-top">
<div class="uk-container uk-container-large uk-margin-top">
<h1>Frequently Asked Questions</h1>
<div class="uk-container uk-margin-large-top">
<ul class="uk-accordion" uk-accordion="">
<li>
<a class="uk-accordion-title" href="#">What is a &quot;Research community&quot;?</a>
<div aria-hidden="true" class="uk-accordion-content text-small uk-margin-medium-bottom" hidden="">
<p>A research community is a community of practice that gathers together researchers and practitioners
with common research interests (e.g. a research discipline or a specific research topic) and,
possibly, a decisional board. In some cases, a community builds and grows in the context of a research
infrastructure that provides services and tools supporting the research activities of the members of a
community. In other cases, a community builds and grows in the context of one or more research
projects, forming what we call a &ldquo;research initiative&rdquo;.</p>
</div>
</li>
<li>
<a class="uk-accordion-title" href="#">What is the difference between a Community Gateway and the
Research Community Dashboard (RCD)?</a>
<div aria-hidden="true" class="uk-accordion-content text-small uk-margin-medium-bottom" hidden="">
<p>The RCD offers on demand Community Gateways that communities can customize to fit their sharing,
publishing and discovery needs. Through the RCD, gateway managers can configure the respective
Community Gateway by providing (i) the criteria identifying the subset of the OpenAIRE Research Graph
that pertains to the community, and (ii) the community statistics to be made public or private.</p>
</div>
</li>
<li>
<a class="uk-accordion-title" href="#">How can Research Community thematic services integrate with
the Research Community Dashboard (RCD)?</a>
<div aria-hidden="true" class="uk-accordion-content text-small uk-margin-medium-bottom" hidden="">
<p>Once a Community Gateway has been created, several thematic service integration patterns are
possible:</p>
<ol>
<li>
<span class="uk-text-bold">Community-specific repository:</span> OpenAIRE can guide your
repository managers on how to make the repository
<a href="https://www.openaire.eu/validator-registration-guide" target="_blank"> &ldquo;OpenAIRE-compliant&rdquo;</a>.
The gateway managers can configure the gateway so that all metadata records collected from the
repository are available in the gateway. If the repository manager wants to get the enrichments
OpenAIRE applies to the records, he/she can <a href="https://www.openaire.eu/content-enrichment-guide"
target="_blank">
activate the Broker service</a> using <a href="https://provide.openaire.eu/landing" target="_blank">the
Content
Provider Dashboard</a>.
</li>
<li>
<span class="uk-text-bold">Continuous publishing:</span> thematic services, once authorized by the
user, can publish their outputs (e.g. datasets, digital experiments) on behalf of the user. Thematic
services and digital experiment platforms can be easily enhanced with a publishing step by
integrating the <a href="https://developers.zenodo.org/" target="_blank">Zenodo API</a>. To know
more, <a class="uk-link" href="https://doi.org/10.5281/zenodo.1314672" target="_blank"> check out
the pilot we have designed with the EPOS-IT infrastructure. </a></li>
<li>
<span class="uk-text-bold">Community web site:</span> you can use the
<a href="http://develop.openaire.eu/api.html" target="_blank">OpenAIRE Search API</a> to show the
research products relevant to your community on your own website.
</li>
</ol>
</div>
</li>
<li><a class="uk-accordion-title" href="#">What does my Research Community gain in terms of Open
Science?</a>
<div aria-hidden="true" class="uk-accordion-content text-small uk-grid uk-margin-medium-bottom" hidden="" uk-grid="">
<div class="uk-width-1-1 uk-first-column"><span
class="uk-text-bold">Discovery and reproducibility:</span> Your community will have a single entry
point where all research products, of any type (literature, datasets, software, workflows, protocols),
are gathered together and linked with semantic relationships. Researchers can find a research product
in the gateway (e.g. a research dataset) and easily find out everything related to it and that is
needed to re-use it, but also to replicate and reproduce a research activity (e.g. software used to
process the dataset, the journal article where the research is described).
</div>
<div class="uk-width-1-1 uk-grid-margin uk-first-column"><span class="uk-text-bold">Sharing:</span>
scientific literature is only the tip of the iceberg. With a Community Gateway, you say to the members
of your community that everything they produce is relevant and that they should get credit for it.
</div>
<div class="uk-width-1-1 uk-grid-margin uk-first-column"><span
class="uk-text-bold">Credit for all:</span> Making research data, software, methods and scientific
workflows available &ldquo;as soon as possible&rdquo; is one of the &ldquo;mantra&rdquo; of Open
Science. If your community has integrated Zenodo into a digital experiment platform, researchers no
longer bear the burden of manually publishing their research products, while it is also easier for
them to publish different versions, which reflect different stages of their activities.
</div>
<div class="uk-width-1-1 uk-grid-margin uk-first-column"><span class="uk-text-bold">Awareness:</span>
Thanks to dedicated pages of the Community Gateway you can suggest best practices to the researchers
of the community. Open Science experts of OpenAIRE will be available to assist you.
</div>
</div>
</li>
<li>
<a class="uk-accordion-title" href="#">How is the service part of the European Open Science Cloud?</a>
<div aria-hidden="true" class="uk-accordion-content text-small uk-margin-medium-bottom" hidden="">
<p>OpenAIRE has onboarded in the EOSC Market Place both the RCD, as a service that offers on-demand
Community Gateways, and the Gateways as services openly accessible by researchers to explore specific
domains of interest.
</p>
</div>
</li>
<li>
<a class="uk-accordion-title" href="#">Who owns the gateway?</a>
<div aria-hidden="true" class="uk-accordion-content text-small uk-margin-medium-bottom" hidden="">
<p>The community owns the portal, OpenAIRE operates it.</p>
</div>
</li>
<li>
<a class="uk-accordion-title" href="#">How is the gateway operated?</a>
<div aria-hidden="true" class="uk-accordion-content text-small uk-margin-medium-bottom" hidden="">
<p>The gateway is hosted on a virtual machine operated by OpenAIRE and hosted at the <a
href="https://icm.edu.pl/en/centre-of-technology/" target="_blank">ICM data centre</a>. The Gateway
is built with Angular and uses RESTful APIs, built with Java and the Spring Framework, to access the
OpenAIRE Research Graph. OpenAIRE is responsible to keep the back-end and front-end services
up-to-date and monitors the uptime and usage of the gateway, via the matomo web analytics platform.
Aggregated usage data is used by the OpenAIRE team for reporting purposes and does not include any
personal data.
</p>
</div>
</li>
<li>
<a class="uk-accordion-title" href="#">What is the SLA of the service?</a>
<div aria-hidden="true" class="uk-accordion-content text-small uk-margin-medium-bottom" hidden="">
<p>The RCD and the gateways are subject to the generic <a class="uk-link"
href="https://www.openaire.eu/service-level-agreement"
target="_blank">OpenAIRE services SLA</a>.
</p>
</div>
</li>
<li>
<a class="uk-accordion-title" href="#">What are the costs?</a>
<div aria-hidden="true" class="uk-accordion-content text-small uk-margin-medium-bottom" hidden="">
<div>Researchers of the community shall not pay to access the Community Gateway.</div>
<div>For the deployment and maintenance of a gateway, OpenAIRE may need support to cover part of the
costs (hardware, hardware management, application administration, software maintenance, and text
mining).
</div>
<div>Please <a routerLink="/contact-us">contact us</a> to learn more about the service and the possible
options.
</div>
</div>
</li>
<li>
<a class="uk-accordion-title" href="#">In what other areas can my Research community collaborate with
OpenAIRE?</a>
<div aria-hidden="true" class="uk-accordion-content text-small uk-grid uk-margin-medium-bottom" hidden="" uk-grid="">
<div class="uk-width-1-1">
<div style="font-style: italic">Open Science training</div>
Help us training on Open Science students and researchers of your community by organising a workshop.
<a class="uk-link" href="https://www.openaire.eu/workshops-page" target="_blank">Check for ideas and
materials</a>.
</div>
<div class="uk-width-1-1">
<div style="font-style: italic">Train the trainer</div>
Join the <a class="uk-link" href="https://www.openaire.eu/cop-training" target="_blank">OpenAIRE
Community of Practice</a>, an informal network to share training experience on Open Science, research
and e-infrastructures.
</div>
<div class="uk-width-1-1">
<div style="font-style: italic">Citizen Science</div>
Do you collaborate with schools? Learn more about the
<a class="uk-link" href="https://www.openaire.eu/citizen-science-activities-in-openaire"
target="_blank">
OpenAIRE activities for Citizen Science
</a>.
</div>
<div class="uk-width-1-1">
<div style="font-style: italic">Open Innovation Programme</div>
Spread the word about the OpenAIRE
<a class="uk-link" href="https://www.openaire.eu/open-innovation-in-openaire" target="_blank">Open
Innovation programme</a>
for SMEs, start-ups and research labs. The programme&rsquo;s goal is to discover, support and fund
innovative
ideas and implementations of software in the Open Science domain.
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
`
})
export class FaqsComponent {
public pageTitle: string = "OpenAIRE - Connect | FAQs";
public pageDescription: string = "Frequently asked questions about OpenAIRE Connect research gateway";
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'About', route: '/about'}, {name: 'FAQs'}];
private subscriptions = [];
public pageContents = null;
public divContents = null;
public url: string = null;
properties: EnvProperties;
constructor(
private route: ActivatedRoute,
private _router: Router,
private _meta: Meta,
private _title: Title,
private seoService: SEOService,
private _piwikService: PiwikService,
private helper: HelperService) {
}
public ngOnInit() {
this.properties = properties;
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
this.url = this.properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(this.url);
this.updateUrl(this.url);
this.updateTitle(this.pageTitle);
this.updateDescription(this.pageDescription);
//this.getDivContents();
this.getPageContents();
}
private getPageContents() {
this.subscriptions.push(this.helper.getPageHelpContents(this.properties, 'connect', this._router.url).subscribe(contents => {
this.pageContents = contents;
}));
}
private getDivContents() {
this.subscriptions.push(this.helper.getDivHelpContents(this.properties, 'connect', this._router.url).subscribe(contents => {
this.divContents = contents;
}));
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscriber) {
subscription.unsubscribe();
}
});
}
private updateDescription(description: string) {
this._meta.updateTag({content: description}, "name='description'");
this._meta.updateTag({content: description}, "property='og:description'");
}
private updateTitle(title: string) {
var _title = ((title.length > 50) ? title.substring(0, 50) : title);
this._title.setTitle(_title);
this._meta.updateTag({content: _title}, "property='og:title'");
}
private updateUrl(url: string) {
this._meta.updateTag({content: url}, "property='og:url'");
}
}

View File

@ -1,32 +0,0 @@
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {RouterModule} from '@angular/router';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {PiwikService} from '../../openaireLibrary/utils/piwik/piwik.service';
import {FaqsComponent} from "./faqs.component";
import {FaqsRoutingModule} from "./faqs-routing.module";
import {HelperModule} from "../../openaireLibrary/utils/helper/helper.module";
import {IsRouteEnabled} from "../../openaireLibrary/error/isRouteEnabled.guard";
import {Schema2jsonldModule} from "../../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
import {SEOServiceModule} from "../../openaireLibrary/sharedComponents/SEO/SEOService.module";
import {BreadcrumbsModule} from "../../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
import {HtmlPagesModule} from "../../htmlPages/htmlPages.module";
@NgModule({
imports: [
CommonModule, RouterModule, FaqsRoutingModule, HelperModule,
Schema2jsonldModule, SEOServiceModule, BreadcrumbsModule, HtmlPagesModule
],
declarations: [
FaqsComponent
],
exports: [
FaqsComponent
],
providers:[
PreviousRouteRecorder, PiwikService, IsRouteEnabled
]
})
export class FaqsModule { }

View File

@ -9,6 +9,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo
import {Subscriber} from "rxjs";
import {properties} from "../../environments/environment";
import {QuickContactService} from '../openaireLibrary/sharedComponents/quick-contact/quick-contact.service';
import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields";
@Component({
selector: 'learn-how',
@ -19,7 +20,41 @@ import {QuickContactService} from '../openaireLibrary/sharedComponents/quick-con
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
</div>
</div>
<div class="uk-section uk-padding-remove-top pattern-background">
<div class="uk-section uk-padding-remove-top">
<div class="uk-container uk-container-large uk-margin-top uk-margin-large-bottom">
<p>
OpenAIRE CONNECT is a platform-as-a-service that enables research communities, research performing organizations
and research infrastructures to create customized web portals for discovering and sharing their research
outcomes and Open Science practices. It supports both public and private settings, integrates Open Science for
enhanced collaboration, and offers rapid setup and branding customization. In short, a virtual gateway for your
community, however you define it.
</p>
<p>
OpenAIRE CONNECT significantly improves the visibility and dissemination of research within and beyond the
community, connecting it to the wider scientific landscape.
</p>
<p>
This service was created for use by research communities that want to gather their research outcomes, currently
scattered across multiple repositories and archives, into a single entry-point, such as:
</p>
<ul>
<li>Research projects, that want research outcomes related to a specific research topic to be collected at a
single entry-point
</li>
<li>Research infrastructures, that want to track the research outcomes produced thanks to the resources they
offer
</li>
<li>
University alliances, that require a single entry-point to all research outcomes of their alliance members
</li>
</ul>
</div>
</div>
<div class="uk-section uk-padding-remove-top pattern-background">
<div class="uk-container uk-container-large uk-margin-top uk-margin-large-bottom">
<div class="uk-grid uk-grid-large" uk-grid>
<div class="uk-width-1-3@m uk-width-1-1">
@ -214,6 +249,139 @@ import {QuickContactService} from '../openaireLibrary/sharedComponents/quick-con
</div>
</div>
</div>
<div class="uk-section uk-section-large uk-container uk-container-large">
<div class="uk-margin-medium-top">
<h2 class="uk-h1">
Our mission for an Open and FAIR science<span class="uk-text-primary">.</span>
</h2>
<div class="uk-margin-large-top">
<div class="uk-child-width-1-3@m uk-child-width-1-1@s uk-grid-large uk-grid-match uk-grid" uk-grid=""
uk-height-match=".target">
<div class="uk-first-column">
<div class="uk-card uk-card-default uk-padding">
<div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center
\t\t\t\t\t\t\t\tuk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">
<div>
<img src="assets/connect-assets/home/virtual.svg"
alt="A Virtual Research Environment" style="height:60px; width:67px"/>
</div>
</div>
<div class="uk-card-body uk-padding-remove uk-margin-small-bottom">
<div class="target uk-text-center">
<h3 class="uk-6 uk-card-title uk-margin-small-bottom">A Virtual Research
Environment</h3>
<div>An overlay platform making it easy to share, link, disseminate and monitor all
your {{entities.PUBLICATIONS | lowercase}},
{{entities.DATASETS | lowercase}}, {{entities.SOFTWARE | lowercase}}, methods.
In one place.
</div>
</div>
<hr/>
<div>
<ul class="uk-list uk-text-small">
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
Access to OpenAIRE research graph
</li>
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
Moderated, front-end linking
</li>
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
Cross-platform search
</li>
</ul>
</div>
</div>
</div>
</div>
<div>
<div class="uk-card uk-card-default uk-padding">
<div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center
\t\t\t\t\t\t\t\t\t\t\t\t\tuk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">
<div>
<img src="assets/connect-assets/home/open_science.svg" alt="Open science in action"
style="height:60px; width:67px"/>
</div>
</div>
<div class="uk-card-body uk-padding-remove uk-margin-small-bottom">
<div class="target uk-text-center" style="">
<h3 class="uk-h6 uk-card-title uk-margin-small-bottom">Open Science in action</h3>
<div>A time-saving bundle of services for researchers to effortlessly practice open
science. An integral
part of the&nbsp;European Open Science Cloud.
</div>
</div>
<hr>
<div>
<ul class="uk-list uk-text-small">
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
Use of OpenAIRE Guidelines
</li>
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
Publish and get DOIs with Zenodo
</li>
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
EOSC Single Sign-On
</li>
</ul>
</div>
</div>
</div>
</div>
<div>
<div class="uk-card uk-card-default uk-padding">
<div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center
\t\t\t\t\t\t\t\t\t\t\t\t\tuk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">
<div>
<img src="assets/connect-assets/home/customize.svg" alt="Customized to your needs"
style="height:60px; width:67px"/>
</div>
</div>
<div class="uk-card-body uk-padding-remove uk-margin-small-bottom">
<div class="target uk-text-center" style="">
<h3 class="uk-h6 uk-card-title uk-margin-small-bottom">Customized to your needs</h3>
<div>A Gateway with your own brand, rules for aggregation, text &amp; data mining,
and presentation. Run
by you via a simple, yet powerful backend administration tool.
</div>
</div>
<hr>
<div>
<ul class="uk-list uk-text-small">
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
Access control
</li>
<!--<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85" flex="true"></icon>
Analytics: rich set of indicators
</li>-->
<li class="uk-flex uk-flex-middle">
<icon class="uk-margin-small-right uk-text-primary" name="done" ratio="0.85"
flex="true"></icon>
Look &amp; feel to match your brand
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div #contact class="uk-section uk-container uk-container-large uk-text-center uk-flex uk-flex-column uk-flex-middle">
<h2 class="uk-h2 uk-margin-medium-top uk-width-3-5@m">We look forward to working together and helping you unlock the full potential of your research community through open science<span class="uk-text-primary">.</span></h2>
<a class="uk-button uk-button-primary uk-text-uppercase uk-margin-medium-top uk-margin-medium-bottom" routerLink="/contact-us">Contact us</a>
@ -225,6 +393,8 @@ export class LearnHowComponent implements OnInit {
public pageContents = null;
public divContents = null;
public activeStep = 0;
public entities = OpenaireEntities;
steps: any[] = [
{name: 'All 4 Steps', icon: '<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 234.82 236.48"><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><circle class="cls-1" cx="48.45" cy="48.45" r="48.45"/><circle class="cls-1" cx="186.37" cy="48.45" r="48.45"/><circle class="cls-1" cx="48.45" cy="188.03" r="48.45"/><circle class="cls-1" cx="186.37" cy="188.03" r="48.45"/></g></g></svg>'},
{name: '1st Step', icon: '<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 227.96 265.77"><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M195.82,3.62h-29V27h29a7.74,7.74,0,0,1,8,7.48V234.88a7.73,7.73,0,0,1-8,7.47H32.14a7.73,7.73,0,0,1-8-7.47V34.52a7.74,7.74,0,0,1,8-7.48h29V3.62h-29C14.42,3.62,0,17.48,0,34.52V234.88c0,17,14.42,30.89,32.14,30.89H195.82c17.72,0,32.14-13.86,32.14-30.89V34.52C228,17.48,213.54,3.62,195.82,3.62Z"/><path class="cls-1" d="M75.47,30.67h77a4.7,4.7,0,0,0,4.6-4.79V4.78A4.7,4.7,0,0,0,152.48,0h-77a4.7,4.7,0,0,0-4.6,4.78v21.1A4.7,4.7,0,0,0,75.47,30.67Z"/><rect class="cls-1" x="49.23" y="122.53" width="42.79" height="30.11" rx="5.57"/><polygon class="cls-1" points="173.33 99.65 151.52 129.09 147.3 124.17 136.14 133.74 152.37 152.65 185.14 108.39 173.33 99.65"/></g></g></svg>'},

@ -1 +1 @@
Subproject commit e63d61b4693843c30ed41440e90bd3b6b6865806
Subproject commit d6735a566fac343c8887791c8f25b30b1c56cd53

View File

@ -0,0 +1,914 @@
import {Component, OnDestroy, OnInit} from "@angular/core";
import {CommunityService} from "../openaireLibrary/connect/community/community.service";
import {Subscription} from "rxjs";
import {Meta, Title} from "@angular/platform-browser";
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
import {properties} from "../../environments/environment";
import {Router} from "@angular/router";
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
@Component({
selector: 'pricing',
template: `
<div class="uk-container uk-container-large uk-section uk-section-small uk-padding-remove-bottom">
<div class="uk-padding-small">
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
</div>
</div>
<div class="uk-container uk-container-large">
<div class="">
<h1>Subscriptions</h1>
<div>
<div>
As demand for our services grows, along with the features included in each of them, traditional sources of
funding may not be sufficient. By introducing subscription fees, we can ensure their long-term
sustainability; by achieving financial stability we can continue to invest in better resources, technology,
and talent, thereby increasing our capacity to deliver impactful programs and services to all interested
parties. Subscriptions support immediate operational needs, while at the same time enabling us to scale our
efforts and make a greater, more sustainable difference in the communities we serve.
</div>
</div>
</div>
<div class="uk-section">
<table id="pricing-table" class="uk-table uk-table-striped uk-box-shadow-medium uk-text-center">
<tbody>
<tr>
<td></td>
<td>
<p class="uk-text-primary"><strong>STANDARD</strong></p>
</td>
<td class="">
<p class="uk-text-primary"><strong>ADVANCED</strong></p>
</td>
<td>
<p class="uk-text-primary"><strong>PREMIUM</strong></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Suggested for</strong></p>
</td>
<td>
<p>Thematic Communities</p>
</td>
<td>
<p>Research Infrastructures or Communities</p>
</td>
<td>
<p>Research Organisations and Networks</p>
</td>
</tr>
<!-- <tr>
<td colspan="4">
<p><strong>Features</strong></p>
</td>
</tr>-->
<tr>
<td>
<p class="uk-text-left"><strong>Gateway on the cloud</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Gateway Customisation for Menu and Page Editing, and your Brand</strong>
</p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Customised pages</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Unlimited Number of Managers/Administrators</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Login via OpenAIRE AAI</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Standard search &amp; browse </strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Search &amp; browse by sub-communities</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Search &amp; browse by organisation members</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p>coming soon</p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Fields of Science classification</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Sustainable Development Goals classification</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Research Linking Functionality</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Link with your Zenodo Community</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Curated Affiliations by OpenAIRE via OpenOrgs</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Text mining</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Customised text mining</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Default Charts</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Customised charts per organisation</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p>coming soon</p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Data Update (via OpenAIRE Graph)</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Integration of Community Services*</strong>
<br>
<span class="uk-text-small">*<i>subject to feasibility study</i></span>
</p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Metadata Access via APIs</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Metadata Snapshots Every 6 Months if Public</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Frequent metadata snapshot upon request</strong></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
<td>
<p></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Support time to reply</strong></p>
</td>
<td>
<p>72h</p>
</td>
<td>
<p>48h</p>
</td>
<td>
<p>48h</p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Training</strong></p>
</td>
<td>
<p>1h</p>
</td>
<td>
<p>4h</p>
</td>
<td>
<p>10h</p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Backup, archive after the subscription ends</strong></p>
</td>
<td>
<p>Up to 1 month</p>
</td>
<td>
<p>Up to 2 months</p>
</td>
<td>
<p>Up to 2 months</p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong><span>Trial Period
<!-- <span uk-icon="info" uk-tooltip="Try OpenAIRE CONNECT for free"></span>--></span></strong></p>
</td>
<td>
<p><span>2 months</span></p>
</td>
<td>
<p><span>3 months</span></p>
</td>
<td>
<p><span>3 months</span></p>
</td>
</tr>
<tr>
<td>
<p class="uk-text-left"><strong>Annual fee ()</strong></p>
</td>
<td>
<p>4000</p>
</td>
<td>
<p>5500</p>
</td>
<td>
<p>5500 + <i>800 per member</i></p>
</td>
</tr>
</tbody>
</table>
<div>
<ul>
<!--<li><b> CONNECT+MONITOR BUNDLE</b>: Its possible to combine OpenAIRE CONNECT Advanced and OpenAIRE
Monitor
premium at the Special Price of 10 000
</li>-->
<!-- <li> OpenAIRE members get a 30% discount</li>-->
<li>0% VAT (24% VAT applies only for Greek TAX ID number holders)</li>
</ul>
</div>
</div>
<div class="uk-section">
<h2>Special Packages</h2>
<div class="uk-margin-large-top">
<div class="uk-child-width-1-2@m uk-child-width-1-1@s uk-grid-large uk-grid-match uk-grid" uk-grid=""
uk-height-match=".target">
<div class="uk-first-column">
<div class="uk-card uk-card-default uk-padding">
<!--<div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center
\t\t\t\t\t\t\t\tuk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">
<div>
<img src="assets/connect-assets/home/virtual.svg"
alt="A Virtual Research Environment" style="height:60px; width:67px"/>
</div>
</div>-->
<div class="uk-card-body ">
<div class="target uk-text-center">
<h5 class=" uk-card-title uk-margin-medium-bottom">OpenAIRE CONNECT and MONITOR <br>at the special price
of 10 000</h5>
<!--<div>
Its possible to combine OpenAIRE CONNECT Advanced and OpenAIRE
MONITOR
Premium at the special price of 10 000
</div>-->
</div>
</div>
</div>
</div>
<div class="uk-first-column">
<div class="uk-card uk-card-default uk-padding">
<!--<div class="uk-card-media-top uk-flex uk-flex-middle uk-flex-center
\t\t\t\t\t\t\t\tuk-padding-small uk-padding-remove-vertical uk-margin-top uk-margin-bottom">
<div>
<img src="assets/connect-assets/home/virtual.svg"
alt="A Virtual Research Environment" style="height:60px; width:67px"/>
</div>
</div>-->
<div class="uk-card-body ">
<div class="target uk-text-center">
<h5 class=" uk-card-title uk-margin-medium-bottom">OpenAIRE members <br>get a 30% discount</h5>
<!--<div>
OpenAIRE members get a 30% discount
</div>-->
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="uk-container uk-container-large">
<div class="uk-section">
<h2>Description of the features </h2>
<div>The OpenAIRE CONNECT Gateway provides a comprehensive set of features designed to support and enhance research communities in bringing forward their results and Open Science activities/practices.
</div>
<table class="uk-table uk-table-striped uk-table-responsive uk-box-shadow-medium uk-margin-large-top">
<tbody>
<tr style="cursor: pointer" uk-toggle="target: .toggle">
<td class="uk-width-medium@m">
<p class="uk-text-left"><strong>Features</strong></p>
</td>
<td class="">
<p class="uk-text-left"><strong>Description</strong></p>
</td>
<td style="width:30px">
<icon name="expand_more" class=" toggle"></icon>
<icon class=" toggle" hidden name="expand_less"></icon>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Gateway on the Cloud</strong></p>
</td>
<td>
<p>Full IT support of the service: hosting, installation, maintenance, upgrade, backups. Ensures
reliable
and secure cloud deployment on the OpenAIRE infrastructure, providing scalable and accessible
cloud
services.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Gateway Customisation for Menu and Page Editing, and your
Brand</strong></p>
</td>
<td>
<p>Create your own menu, edit pages, and adapt to your visual identity with logo, banner,
background,
buttons, colours. Edit the home page to include your personalised content.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Customised pages</strong></p>
</td>
<td>
<p>Request new pages for you to customise.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Unlimited Number of Managers/Administrators</strong></p>
</td>
<td>
<p>Supports an unlimited number of administrators or managers, enhancing collaborative management
and
oversight capabilities.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Login via OpenAIRE AAI</strong></p>
</td>
<td>
<p>Sign in via an institutional account (eduGAIN), GitHub, Google, LinkedIn, ORCID, or with an
OpenAIRE
account.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Standard Search &amp; Browse</strong></p>
</td>
<td>
<p>Search and browse for research products, projects, and data sources.</p>
<p>Users can use all the filters of <a href="https://explore.openaire.eu/" target="_blank">OpenAIRE
EXPLORE,</a>
including
filters for type of products (publications, data, software and more), FoS (Field of Science) and
SDGs
(UN Sustainable Development Goals). You can enable or disable the search functionality on specific
entity types according to your needs.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Search &amp; browse by sub-communities</strong></p>
</td>
<td>
<p>You define how your community is organised (e.g. by theme, by geographical nodes). OpenAIRE
CONNECT
can
associate research products to the sub-communities and offer dedicated options to search and
browse.</p>
<p>Available for CONNECT Advanced.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Search &amp; browse by organisation members</strong></p>
</td>
<td>
<p>Search and browse for organisations that are members of your research communities. Filter
research
products by organisation.</p>
<p>Coming soon for CONNECT Premium.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Fields of Science classification</strong></p>
</td>
<td>
<p>Publications are classified by SciNoBo: a novel system classifying scholarly communication in a
dynamically constructed hierarchical Field-of-Science taxonomy -
<a href="https://doi.org/10.3389/frma.2023.1149834" target="_blank">https://doi.org/10.3389/frma.2023.1149834</a>
</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Sustainable Development Goals classification</strong></p>
</td>
<td>
<p>Publications are classified by SciNoBo. For more information, please visit
<a href="https://www.openaire.eu/openaire-explore-introducing-sdgs-and-fos" target="_blank">https://www.openaire.eu/openaire-explore-introducing-sdgs-and-fos</a>
</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Research Linking Functionality</strong></p>
</td>
<td>
<p>Allows your users to link articles, dataset, or software within a same project (see <a
href="https://www.openaire.eu/claim-publication" target="_blank">this guide</a>) and claim their
authorship with
ORCID
(<a href="https://www.openaire.eu/openaire-explore-integration-with-the-orcid-search-and-link-wizard"
target="_blank">guide</a>)
</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Link with your Zenodo Community</strong></p>
</td>
<td>
<p>Seamlessly integrates with Zenodo communities, allowing users to manage and share their research
outputs within a dedicated community space.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Curated Affiliations by OpenAIRE Team via OpenOrgs</strong></p>
</td>
<td>
<p>Utilizes affiliations curated by the OpenAIRE team, ensuring data accuracy and organisational
integrity
through verified affiliations.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Text mining</strong></p>
</td>
<td>
<p>Employs advanced data mining algorithms to extract and analyse data, enhancing the platform's
ability
to provide deep insights and comprehensive research intelligence. Learn more about the text mining
algorithms on the <a href="https://graph.openaire.eu/what-is-the-openaire-graph#Id-How"
target="_blank">web site of
the
OpenAIRE Graph</a>.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Customised text mining</strong></p>
</td>
<td>
<p>OpenAIRE develops a text mining algorithm for the identification of research products of your
community. You help us with the tests and fine tuning to reach the optimal precision and
recall.</p>
<p>Available for CONNECT Advanced and Premium.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Default Charts</strong></p>
</td>
<td>
<p>A set of charts to check the uptake of Open Science practices within your community: percentage
of
Open
Access publications and datasets, geographic distribution of publications, datasets with
persistent
Identifiers over time, download counts of publications by year, and publications by access rights
over
time.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Customised charts per organisation</strong></p>
</td>
<td>
<p>The set of default charts customised for the organisations that are members of your research
community.</p>
<p>Coming soon for CONNECT Premium.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Data Update (via OpenAIRE Graph)</strong></p>
</td>
<td>
<p>Regularly, every time the OpenAIRE Graph is updated (about once a month).</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Integration of community services</strong></p>
</td>
<td>
<p>Integration of services developed and operated by your research community into your gateway. The
integration is subject to a feasibility study.</p>
<p>Available for CONNECT Advanced and Premium.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Metadata Access via APIs</strong></p>
</td>
<td>
<p>Provides API access to metadata, allowing for integration with other systems and enabling
developers
to
build custom applications or enhance existing systems.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Metadata Snapshots Every 6 Months if Public</strong></p>
</td>
<td>
<p>Takes snapshots of metadata every six months for publicly available data, facilitating data
preservation and historical analysis.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Support time to reply</strong></p>
</td>
<td>
<p>We support you during the business hours of the week, generally defined as 9:00 - 17:00 CET
excluding
holidays and weekends. The OpenAIRE team is an international team working in Europe in different
time
zones.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Training</strong></p>
</td>
<td>
<p>Online training sessions to help you set up your gateway. Based on your needs we can organise
trainings
on other OpenAIRE services related to CONNECT like PROVIDE (to support your repositories at
becoming
compliant with the OpenAIRE guidelines).</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Backup, archive after the subscription ends</strong></p>
</td>
<td>
<p>OpenAIRE will keep a backup of your gateway configuration after the end of your subscriptions.
Just
in
case you change your mind and do not want to start from scratch.</p>
</td>
</tr>
<tr class=" toggle" hidden>
<td>
<p class="uk-text-left"><strong>Trial Period</strong></p>
</td>
<td>
<p>Try OpenAIRE CONNECT for free.</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="uk-container uk-container-large uk-flex uk-flex-center">
<div class="uk-section uk-text-center">
<h4 class="uk-text-center uk-width-xlarge@m ">
<div> Contact us to discover OpenAIRE CONNECT and the rest of OpenAIRE services<span
class="uk-text-primary">.</span></div>
</h4>
<a class="uk-button uk-button-primary uk-margin-medium-top uk-margin-medium-bottom" routerLink="/contact-us">Contact
us</a>
</div>
</div>
`,
styles: [`
/* #pricing-table td:nth-child(3) {
!*border-right: 2px solid #211F7E;*!
!*border-left: 2px solid #211F7E;*!
background-image: linear-gradient(110deg,#feca1d 0,#fe9f1d 100%);
color:black;
}*/
#pricing-table tr:last-child td:nth-child(3) {
/*border-bottom: 2px solid #211F7E;*/
}
#pricing-table tr:first-child td:nth-child(3) {
/*border-top: 2px solid #211F7E;*/
/*background-color: #211F7E;*/
/*color: white;*/
}
`]
})
export class PricingComponent implements OnInit, OnDestroy {
public properties: EnvProperties = properties;
private subscriptions: any[] = [];
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Subscriptions'}];
constructor(private communityService: CommunityService,
private seoService: SEOService,
private _meta: Meta,
private _router: Router,
private _title: Title) {
}
ngOnInit() {
/* Metadata */
const url = properties.domain + properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(url, false);
this._meta.updateTag({content: url}, "property='og:url'");
const description = "Subscriptions "
const title = "Subscriptions "
this._meta.updateTag({content: description}, "name='description'");
this._meta.updateTag({content: description}, "property='og:description'");
this._meta.updateTag({content: title}, "property='og:title'");
this._title.setTitle(title);
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscription) {
subscription.unsubscribe();
}
});
}
}

View File

@ -0,0 +1,26 @@
import {NgModule} from "@angular/core";
import {CommonModule} from "@angular/common";
import {PricingComponent} from "./pricing.component";
import {RouterModule} from "@angular/router";
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
import {PageContentModule} from "../openaireLibrary/dashboard/sharedComponents/page-content/page-content.module";
import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
@NgModule({
imports: [CommonModule, RouterModule, RouterModule.forChild([
{
path: '',
component: PricingComponent,
canDeactivate: [PreviousRouteRecorder],
canActivate: [IsRouteEnabled]
},
]), PageContentModule, IconsModule, BreadcrumbsModule],
declarations: [PricingComponent],
exports: [PricingComponent]
})
export class PricingModule {
}

View File

@ -2,22 +2,41 @@ import {Component} from "@angular/core";
import {properties} from "../../environments/environment";
import {ConnectHelper} from "../openaireLibrary/connect/connectHelper";
import {SearchCustomFilter} from "../openaireLibrary/searchPages/searchUtils/searchUtils.class";
import {Router} from "@angular/router";
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
import {Subscription} from "rxjs";
@Component({
selector: 'community-sdg',
template: `
<sdg [customFilter]="customFilter"></sdg>
<sdg *ngIf="pageContents" [customFilter]="customFilter" [pageContents]="pageContents"></sdg>
`
})
export class CommunitySdgComponent {
communityId;
customFilter: SearchCustomFilter = null;
constructor() {
public pageContents = null;
subs: Subscription[] = [];
constructor(
private _router: Router,
private helper: HelperService) {
}
ngOnInit() {
this.communityId = ConnectHelper.getCommunityFromDomain(properties.domain);
this.customFilter = new SearchCustomFilter("Community", "communityId", this.communityId, "");
this.getPageContents();
}
ngOnDestroy() {
for (let sub of this.subs) {
sub.unsubscribe();
}
}
private getPageContents() {
this.subs.push(this.helper.getPageHelpContents(properties, this.communityId, this._router.url).subscribe(contents => {
this.pageContents = contents;
console.log(this.pageContents)
}));
}
}

View File

@ -97,7 +97,7 @@ export class SearchCommunitiesComponent {
this.searchPage.refineFields = this.refineFields;
this.searchLink = this.properties.searchLinkToCommunities;
this.selectedFields = [];
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, [], this.fieldIdsMap, null, params, "community", null);
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, [],[], this.fieldIdsMap, null, params, "community", null);
let queryParams = params;
if (typeof document !== 'undefined') {

View File

@ -94,7 +94,7 @@ export class OpenaireSearchDataprovidersComponent {
this.searchUtils.validateSize(params['size']);
this.keyword = decodeURIComponent(params['fv0']?params['fv0']:(params['keyword']?params['keyword']:''));
this.selectedFields = [];
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, [], [], this.fieldIdsMap, this.customFilter, params, "dataprovider");
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, [], [], [], this.fieldIdsMap, this.customFilter, params, "dataprovider");
if (this.initialLoad) {
this.initialLoad = false;
this._getResults();
@ -163,7 +163,7 @@ export class OpenaireSearchDataprovidersComponent {
this.searchUtils.totalResults = results.length;
this.results = results.slice((this.searchUtils.page - 1) * this.searchUtils.size, this.searchUtils.page *this.searchUtils.size );
this.searchUtils.status = this.results.length == 0 ? this.errorCodes.NONE: this.errorCodes.DONE;
this.searchPage.buildPageURLParameters(this.filters, [], false);
this.searchPage.buildPageURLParameters(this.filters, [], [], false);
this.disableForms = false;
this.enableSearchView = true;
}

View File

@ -96,7 +96,7 @@ export class OpenaireSearchProjectsComponent {
this.searchUtils.validateSize(params['size']);
this.keyword = decodeURIComponent(params['fv0']?params['fv0']:(params['keyword']?params['keyword']:''));
this.selectedFields = [];
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, [], this.fieldIdsMap, this.customFilter, params, "project");
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, [], ["funder"], this.fieldIdsMap, this.customFilter, params, "project");
if(this.initialLoad) {
this.initialLoad = false;
this._getCommunityFunders();
@ -123,7 +123,7 @@ export class OpenaireSearchProjectsComponent {
this.disableForms = true;
this.disableRefineForms = true;
this.enableSearchView = false;
this.subscriptions.push(this._searchProjectsService.searchProjectsWithPaging(this.properties, this.communityId, this.searchUtils.page, this.searchUtils.size, this.searchUtils.keyword, this.selectedFunder, "name" ).subscribe(
this.subscriptions.push(this._searchProjectsService.searchProjectsWithPaging(this.properties, this.communityId, this.searchUtils.page, this.searchUtils.size, this.keyword, this.selectedFunder, "name" ).subscribe(
data => {
this.searchUtils.totalResults = data['totalElements'];
this.filters = this.selectedFunder?this.createFilters([this.selectedFunder]):this.createFilters(this.originalFunders);
@ -135,6 +135,7 @@ export class OpenaireSearchProjectsComponent {
this.disableRefineForms = false;
this.enableSearchView = true;
this.searchUtils.refineStatus = this.errorCodes.DONE;
this.searchPage.prepareFiltersToShow(this.filters, this.searchUtils.totalResults);
},
err => {
this.handleError("Error getting projects for community with id: " + this.communityId, err);

View File

@ -0,0 +1,71 @@
import {SearchFieldsBase} from "src/app/openaireLibrary/utils/properties/searchFields.base";
import {properties} from "src/environments/environment";
export class SearchFields extends SearchFieldsBase {
constructor() {
super();
if(properties.plan == "Premium" && properties.environment != 'production'){
this.RESULT_REFINE_FIELDS.push("relorganization");
this.RESULT_FIELDS_ORDERED[3].values.push("relorganization")
}
}
public static getParameterOrder(fieldId: string, params): number {
let fields = [];
let searchFields = new SearchFields();
if (searchFields.RESULT_REFINE_FIELDS.indexOf(fieldId) != -1) {
fields = searchFields.RESULT_REFINE_FIELDS;
} else if (searchFields.PROJECT_REFINE_FIELDS.indexOf(fieldId) != -1) {
fields = searchFields.PROJECT_REFINE_FIELDS
} else if (searchFields.ORGANIZATION_REFINE_FIELDS.indexOf(fieldId) != -1) {
fields = searchFields.ORGANIZATION_REFINE_FIELDS;
} else if (searchFields.DATASOURCE_REFINE_FIELDS.indexOf(fieldId) != -1) {
fields = searchFields.DATASOURCE_REFINE_FIELDS;
}
let index = fields.indexOf(fieldId);
let paramIndex = 0;
if (index != -1) {
for (let keyValue of params) {
if (fields.indexOf(keyValue[0]) > index) {
break;
}
paramIndex++
}
}
return paramIndex;
}
}
export enum OpenaireEntities {
RESULTS = "Research products",
PUBLICATIONS = "Publications",
DATASETS = "Research data",
SOFTWARE = "Research software",
OTHER = "Other research products",
PROJECTS = "Projects",
ORGANIZATIONS = "Organizations",
DATASOURCES = "Data sources",
SERVICES = "Services",
COMMUNITIES = "Research communities",
RESULT = "Research product",
PUBLICATION = "Publication",
DATASET = "Research data",
SOFTWARE_SINGULAR = "Research software",
OTHER_SINGULAR = "Other research product",
PROJECT = "Project",
ORGANIZATION = "Organization",
DATASOURCE = "Data source",
SERVICE = "Service",
COMMUNITY = "Research community",
RESULTS_FILE = "research-products",
PUBLICATIONS_FILE = "publications",
DATASETS_FILE = "research-data",
SOFTWARE_FILE = "research-software",
OTHER_FILE = "other-research-products",
PROJECTS_FILE = "projects",
ORGANIZATIONS_FILE = "organizations",
DATASOURCES_FILE = "data-sources",
SERVICES_FILE = "services",
}

View File

@ -382,7 +382,7 @@ export class SubjectsComponent {
}
createParams(param) {
return StringUtils.quote(StringUtils.URIEncode(param));
return StringUtils.URIEncode(param);
}
ngOnDestroy() {

View File

@ -0,0 +1,74 @@
import {Injectable} from '@angular/core';
import {ActivatedRouteSnapshot, Router, RouterStateSnapshot, UrlTree} from '@angular/router';
import {forkJoin, Observable} from 'rxjs';
import {CommunityService} from "../openaireLibrary/connect/community/community.service";
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
import {ConnectHelper} from "../openaireLibrary/connect/connectHelper";
import {properties} from "../../environments/environment";
import {map, take} from "rxjs/operators";
import {LoginErrorCodes} from "../openaireLibrary/login/utils/guardHelper.class";
import {Session} from "../openaireLibrary/login/utils/helper.class";
@Injectable()
export class CommunityAccessGuard {
constructor(private router: Router,
private communityService: CommunityService, private userManagementService: UserManagementService) {
}
check(path: string): Observable<boolean> | boolean {
let community = ConnectHelper.getCommunityFromDomain(properties.domain);
if (!community) {
this.router.navigate([properties.errorLink], {queryParams: {page: path}});
return false;
}
return forkJoin([
this.userManagementService.getUserInfo().pipe(take(1)),
this.communityService.getCommunity(community).pipe(take(1))
]).pipe(
map(([user, communityInfo]) => {
if (communityInfo) {
if (communityInfo.isPublic()) {
return true;
} else if (communityInfo.isPrivate()) {
this.router.navigate([properties.errorLink], {queryParams: {page: path}});
return false;
} else {
if (!user) {
this.router.navigate(['/user-info'], {
queryParams: {
'errorCode': LoginErrorCodes.NOT_LOGIN,
'redirectUrl': path
}
})
return false;
}
if (Session.isPortalAdministrator(user) || Session.isCommunityCurator(user) || Session.isManager('community', community, user) || Session.isSubscribedTo('community', community, user)) {
return true;
} else {
this.router.navigate(['/user-info'], {
queryParams: {
'errorCode': LoginErrorCodes.NOT_AUTHORIZED,
'redirectUrl': path
}
})
return false;
}
}
}
this.router.navigate([properties.errorLink], {queryParams: {page: path}});
return false;
})
);
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
return this.check(state.url);
}
canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
return this.check(state.url);
}
}

View File

@ -21,7 +21,7 @@ export class StatisticsService {
}
getCommunityAdminStatisticsChoices(properties: EnvProperties, communityId: string): Observable<StatisticsDisplay> {
let url = properties.adminToolsAPIURL+"/statistics/"+communityId;
let url = properties.adminToolsAPIURL+"statistics/"+communityId;
//console.log(`getting admin choices for statistics from: ${url}`);
return this.http.get<StatisticsDisplay>((properties.useCache) ? (properties.cacheUrl + encodeURIComponent(url)) : url)
//.map(stats => <StatisticsDisplay>stats.json())

@ -1 +1 @@
Subproject commit e82544c43fa55393581d5278a8b0540d64bf30f0
Subproject commit 014adfe4588975e499c72b284ce7368fc2cb5d14

View File

@ -61,3 +61,11 @@
.hook-inverse();
}
//services slider
@slider-nav-item-background-active: white;
slider-container slider-nav-item {
background-color:#FFFFFF80;
}
slider-container slider-nav-item when (@hero-fonts-mode = light) {
.hook-inverse
}

@ -1 +1 @@
Subproject commit 921802642010c1057b79de55f93361f0b25a7b3d
Subproject commit 55765bf0829910661a55337e0e7ca7b1262b7298

View File

@ -6,7 +6,7 @@ let props: EnvProperties = {
dashboard: 'connect',
adminToolsPortalType: "connect",
adminToolsCommunity: 'connect',
enablePiwikTrack: false,
enablePiwikTrack: true,
piwikSiteId: '80',
useCache: false,
useLongCache: true,
@ -14,6 +14,8 @@ let props: EnvProperties = {
showAddThis: false,
domain: 'https://beta.connect.openaire.eu',
baseLink : "",
monitorStatsFrameUrl:"https://beta.services.openaire.eu/stats-tool/"
};

View File

@ -6,7 +6,7 @@ let props: EnvProperties = {
dashboard: 'connect',
adminToolsPortalType: "connect",
adminToolsCommunity: 'connect',
enablePiwikTrack: false,
enablePiwikTrack: true,
piwikSiteId: '80',
useCache: false,
useLongCache: true,
@ -14,7 +14,9 @@ let props: EnvProperties = {
showAddThis: false,
domain: 'https://connect.openaire.eu',
baseLink : "",
hasMachineCache: true
hasMachineCache: true,
monitorStatsFrameUrl:"https://services.openaire.eu/stats-tool/"
};
export let properties: EnvProperties = {

View File

@ -19,6 +19,10 @@ let props: EnvProperties = {
domain: 'https://beta.connect.openaire.eu',
baseLink : "",
adminToolsAPIURL: 'http://scoobydoo.di.uoa.gr:8880/uoa-admin-tools/',
utilsService:"http://scoobydoo.di.uoa.gr:8000",
monitorStatsFrameUrl:"https://stats.madgik.di.uoa.gr/stats-api/",
};