Compare commits

...

96 Commits

Author SHA1 Message Date
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
argirok 3599fc3742 Merge branch 'develop' 2023-11-08 12:32:20 +02:00
argirok b9e3c7130f commit libraries 2023-11-08 12:30:45 +02:00
argirok 9db0195119 [DONE] :update properties - use common properties from library 2023-11-01 16:36:39 +02:00
Konstantinos Triantafyllou b37994307d Merge pull request 'angular-16' (#9) from angular-16 into develop
Reviewed-on: #9
2023-11-01 13:04:06 +01:00
Konstantinos Triantafyllou c1a35ce967 Merge pull request '[angular-16-community-projects-availableSince | DONE | UPDATE] : for the community projects, check if there is the date added, and when db is loaded to set id to "-1"' (#8) from angular-16-community-projects-availableSince into angular-16
Reviewed-on: #8
2023-10-26 15:48:19 +02:00
argirok 0c2c02b659 [angular-16-community-projects-availableSince | DONE | UPDATE] : for the community projects, check if there is the date added, and when db is loaded to set id to "-1" 2023-10-26 16:33:44 +03:00
Konstantinos Triantafyllou 295b56b0e1 Merge pull request '[angular-16-update-zenodo-api | DONE] : update zenodo community API - update method signature' (#7) from angular-16-update-zenodo-api into angular-16
Reviewed-on: #7
2023-10-26 14:29:37 +02:00
argirok 39ce7a7656 [angular-16-update-zenodo-api | DONE] : update zenodo community API - update method signature 2023-10-23 14:33:41 +03:00
argirok 23c6d4aebd Merge remote-tracking branch 'origin/develop' into angular-16
# Conflicts:
#	src/app/community/community.component.html
2023-10-18 09:06:09 +03:00
argirok d55480d830 change claims api to new 2023-10-17 09:17:58 +03:00
argirok 9e5505c297 fix issue with enermaps tab: use search-results instead of search-tab 2023-10-16 12:13:42 +03:00
argirok 62de83cf5a fix issue with enermaps feature tab 2023-10-13 13:25:29 +03:00
Konstantinos Triantafyllou 3427707d7f Remove opacity from search-from background for connect 2023-10-12 14:07:24 +03:00
Konstantinos Triantafyllou 31f7375e7d Merge remote-tracking branch 'origin/develop' into angular-16 2023-10-11 12:56:07 +03:00
Konstantinos Triantafyllou cc5d3cbdb3 Enable invite button for byInvitation commmunities with a link to admin portal. 2023-10-11 12:55:11 +03:00
Konstantinos Triantafyllou fba2d9161f Merge from Develop 2023-10-10 22:48:18 +03:00
Konstantinos Triantafyllou 7841e84ca1 Hide invite and join buttons in case of byInvitation membership. 2023-10-10 22:40:55 +03:00
Konstantinos Triantafyllou d900650016 Change slider nav items, period and infinite 2023-10-10 17:33:27 +03:00
Konstantinos Triantafyllou 0193362596 Merge from Develop 2023-10-06 19:52:40 +03:00
Konstantinos Triantafyllou c61927fa23 Update library 2023-10-06 19:50:52 +03:00
Konstantinos Triantafyllou 630bce44c9 Update library 2023-10-06 19:48:45 +03:00
argirok 38246614e1 Merge branch 'develop' 2023-10-06 17:56:08 +03:00
argirok 096d601d29 Merge branch 'new-api' into develop 2023-10-06 17:51:55 +03:00
argirok bd85954ece commit libraries 2023-10-06 17:51:26 +03:00
argirok bfcbaa6b7b Browse projects with new API: get results for the first load, after loading the funders 2023-10-06 17:28:37 +03:00
argirok 65da725887 Merge branch 'develop' into new-api 2023-10-06 16:43:50 +03:00
Konstantina Galouni 42d6aaf6eb Connect | develop: environments/: Added property swhURL 2023-10-06 15:39:32 +03:00
argirok 6824746d8a use new community API for filters and paging 2023-10-06 15:30:10 +03:00
Konstantinos Triantafyllou e9cfa28d5b Update theme and library 2023-10-06 14:51:06 +03:00
Konstantinos Triantafyllou 414cc8af19 Add connect logo in background of slider section in home page. Update theme. 2023-10-06 10:14:53 +03:00
Konstantinos Triantafyllou 48f04f313d Change scroll section with slider in home page of connect. 2023-10-05 17:06:54 +03:00
argirok 9603b117f9 Merge branch 'develop' into new-api 2023-10-02 15:09:49 +03:00
Konstantinos Triantafyllou 0de04c4017 Merge remote-tracking branch 'origin/develop' into angular-16 2023-09-26 11:55:28 +03:00
Konstantinos Triantafyllou 77b080ca9d Update types/node to version 16 2023-09-26 11:53:49 +03:00
Konstantinos Triantafyllou c31205bec8 Merge from Develop 2023-08-30 16:49:36 +03:00
Konstantinos Triantafyllou c04c32fa00 Fix get-started button in mobile and add hasStickyHeaderInMobile for home and about pages. 2023-08-30 12:36:29 +03:00
Konstantinos Triantafyllou 0cc7d8ba10 Update uikit to version 3.16.24 2023-08-23 16:19:12 +03:00
Konstantinos Triantafyllou f4b62d391a Delete ServerTranferStateModule 2023-08-04 15:51:14 +03:00
Konstantinos Triantafyllou 3accce265c Update material to angular 16. 2023-08-04 13:41:12 +03:00
Konstantinos Triantafyllou e503f70782 Update angular to version 16 2023-08-04 13:40:26 +03:00
Konstantinos Triantafyllou b1a7906892 Update Zone to 0.13.1 2023-08-04 13:36:29 +03:00
Konstantinos Triantafyllou 16e7a9ff0a Update material to angular 15. 2023-08-04 13:35:48 +03:00
Konstantinos Triantafyllou 0d0c71b03d Migrate angular core and cli to version 15 and update dependencies to be compatible with the newer version. 2023-08-04 13:32:54 +03:00
Konstantinos Triantafyllou 3d7cba5343 Update typescript to version 4.9.5 2023-08-04 13:30:30 +03:00
argirok b978fb087b my communities: change status check 2023-07-19 14:37:26 +03:00
argirok 7eb2335c20 use methods isPublic, isRestricted, isPrivate instead of using the previous checks and add validateStatus method 2023-07-19 14:21:39 +03:00
argirok 8aae6d6d80 Deposit: show zenodo communities page if there is main OR other related communities 2023-07-17 12:09:49 +03:00
argirok f53af36929 apply changes to projects and zenodo communities pages and queries 2023-07-14 14:54:58 +03:00
65 changed files with 1287 additions and 3094 deletions

View File

@ -197,7 +197,7 @@
"tsConfig": "src/tsconfig.spec.json",
"karmaConfig": "src/karma.conf.js",
"styles": [
"src/styles.css"
"src/styles.less"
],
"scripts": [],
"assets": [
@ -212,13 +212,16 @@
"main": "server.ts",
"tsConfig": "src/tsconfig.server.json",
"sourceMap": true,
"optimization": false
"optimization": false,
"buildOptimizer": false
},
"configurations": {
"development": {
"outputHashing": "media",
"sourceMap": false,
"optimization": true
"optimization": true,
"vendorChunk": true,
"buildOptimizer": true
},
"beta": {
"outputHashing": "media",
@ -229,7 +232,8 @@
}
],
"sourceMap": false,
"optimization": true
"optimization": true,
"buildOptimizer": true
},
"production": {
"outputHashing": "media",
@ -240,7 +244,8 @@
}
],
"sourceMap": false,
"optimization": true
"optimization": true,
"buildOptimizer": true
}
},
"defaultConfiguration": ""

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",
@ -21,19 +21,19 @@
},
"private": true,
"dependencies": {
"@angular/animations": "^14.2.3",
"@angular/cdk": "^14.2.2",
"@angular/common": "^14.2.3",
"@angular/compiler": "^14.2.3",
"@angular/core": "^14.2.3",
"@angular/forms": "^14.2.3",
"@angular/localize": "^14.2.3",
"@angular/material": "^14.2.2",
"@angular/platform-browser": "^14.2.3",
"@angular/platform-browser-dynamic": "^14.2.3",
"@angular/platform-server": "^14.2.3",
"@angular/router": "^14.2.3",
"@nguniversal/express-engine": "^14.2.0",
"@angular/animations": "^16.1.8",
"@angular/cdk": "^16.1.7",
"@angular/common": "^16.1.8",
"@angular/compiler": "^16.1.8",
"@angular/core": "^16.1.8",
"@angular/forms": "^16.1.8",
"@angular/localize": "^16.1.8",
"@angular/material": "^16.1.7",
"@angular/platform-browser": "^16.1.8",
"@angular/platform-browser-dynamic": "^16.1.8",
"@angular/platform-server": "^16.1.8",
"@angular/router": "^16.1.8",
"@nguniversal/express-engine": "^16.1.1",
"@node-minify/clean-css": "^6.2.0",
"@node-minify/core": "^6.2.0",
"axios": "^0.27.2",
@ -41,25 +41,25 @@
"core-js": "^2.5.4",
"express": "^4.15.2",
"jquery": "^3.4.1",
"ng-recaptcha": "^10.0.0",
"ng-recaptcha": "^12.0.2",
"ng2-ckeditor": "1.3.7",
"rxjs": "^6.5.1",
"ts-md5": "^1.2.0",
"tslib": "^2.0.0",
"uikit": "3.13.10",
"zone.js": "~0.11.4"
"uikit": "3.16.24",
"zone.js": "~0.13.1"
},
"devDependencies": {
"@angular-devkit/build-angular": "^14.2.3",
"@angular/cli": "^14.2.3",
"@angular/compiler-cli": "^14.2.3",
"@angular/language-service": "^14.2.3",
"@nguniversal/builders": "^14.2.0",
"@angular-devkit/build-angular": "^16.1.7",
"@angular/cli": "^16.1.7",
"@angular/compiler-cli": "^16.1.8",
"@angular/language-service": "^16.1.8",
"@nguniversal/builders": "^16.1.1",
"@types/compression": "^1.7.0",
"@types/express": "^4.17.0",
"@types/jasmine": "~3.6.0",
"@types/jasminewd2": "~2.0.3",
"@types/node": "^12.11.1",
"@types/node": "^16.18.50",
"@types/ckeditor": "^4.9.10",
"codelyzer": "^6.0.0",
"jasmine-core": "~3.8.0",
@ -71,6 +71,6 @@
"karma-jasmine-html-reporter": "^1.6.0",
"protractor": "~7.0.0",
"ts-node": "~7.0.0",
"typescript": "~4.6.4"
"typescript": "~4.9.5"
}
}

View File

@ -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');
}
@ -198,6 +203,30 @@ export function app() {
buildCss(req.params.id, req.params.suffix, variables);
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
@ -20,11 +20,12 @@ const routes: Routes = [
/** Other Pages */
{
path: '',
loadChildren: () => import('./communitywrapper/communityWrapper.module').then(m => m.CommunityWrapperModule)
loadChildren: () => import('./communitywrapper/communityWrapper.module').then(m => m.CommunityWrapperModule),
data: {hasStickyHeaderOnMobile: true}
},
{path: 'about', redirectTo: 'about/learn-how', pathMatch: 'full'},
{path: 'about/learn-how', loadChildren: () => import('./learn-how/learn-how.module').then(m => m.LearnHowModule)},
{path: 'about/faq', loadChildren: () => import('./learn-how/faqs/faqs.module').then(m => m.FaqsModule)},
{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: 'get-started', loadChildren: () => import('./get-started/get-started.module').then(m => m.GetStartedModule)},
{
path: 'contact-us',
@ -39,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',
@ -87,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',
@ -113,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)},
@ -121,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'},
@ -167,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',
@ -270,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

@ -28,7 +28,7 @@ import {LoginErrorCodes} from "./openaireLibrary/login/utils/guardHelper.class";
import {Layout} from "./openaireLibrary/connect/community/CustomizationOptions";
import {CustomizationService} from "./openaireLibrary/services/customization.service";
import {SmoothScroll} from "./openaireLibrary/utils/smooth-scroll";
import {makeStateKey, Meta, StateKey, TransferState} from "@angular/platform-browser";
import {makeStateKey, StateKey, TransferState} from "@angular/core";
import {CommunityInfo} from "./openaireLibrary/connect/community/communityInfo";
import {SEOService} from "./openaireLibrary/sharedComponents/SEO/SEO.service";
import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
@ -42,20 +42,19 @@ import {OpenaireEntities} from "./openaireLibrary/utils/properties/searchFields"
import {DOCUMENT, isPlatformServer} from "@angular/common";
import {AdvancedAsyncSubject} from "./openaireLibrary/utils/AdvancedAsyncSubject";
import {LayoutService} from "./openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
import {Meta} from "@angular/platform-browser";
@Component({
selector: 'app-root',
template: `
<div [class]="(community)?(community.communityId +'App communityApp'):'connectApp'">
<div id="modal-container"></div>
<navbar *ngIf="properties && showMenu && !community && header" [portal]="properties.dashboard" [onlyTop]=false
<navbar #navbar *ngIf="properties && showMenu && !community && header" [portal]="properties.dashboard" [onlyTop]=false
[userMenuItems]=userMenuItems [menuItems]=menuItems [user]="user" [header]="header"
[showMenu]=showMenu [properties]="properties" [showHomeMenuItem]="false" communityId="connect">
<ul *ngIf="showGetStarted" extra-s class="uk-nav uk-nav-default uk-margin-small-top">
<li routerLinkActive="uk-active">
<a routerLink="/get-started">Get Started</a>
</li>
</ul>
<div *ngIf="showGetStarted" extra-s class="uk-margin-large-top uk-margin-left">
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/get-started" (click)="navbar.closeCanvas()">Get Started</a>
</div>
<a *ngIf="showGetStarted" extra-m
class="uk-button uk-button-small uk-button-primary uk-text-uppercase uk-margin-left"
routerLink="/get-started">Get Started</a>
@ -79,7 +78,7 @@ import {LayoutService} from "./openaireLibrary/dashboard/sharedComponents/sideba
<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">
@ -88,8 +87,8 @@ import {LayoutService} from "./openaireLibrary/dashboard/sharedComponents/sideba
</main>
</div>
<div id="joinAndInviteBtn" *ngIf="isClient && communityId && community">
<subscribe [communityId]="community.communityId"></subscribe>
<invite *ngIf="isManager" [longView]="false"></invite>
<subscribe *ngIf="community.isOpen()" [communityId]="community.communityId"></subscribe>
<invite *ngIf="isManager" [longView]="false" [communityId]="communityId" [isOpen]="community.isOpen()"></invite>
</div>
<!--feedback *ngIf= "isClient && properties" portalName="Connect" [feedbackQuestionaire]=properties.feedbackQuestionaire></feedback-->
<cookie-law *ngIf="isClient" position="bottom">
@ -117,7 +116,7 @@ import {LayoutService} from "./openaireLibrary/dashboard/sharedComponents/sideba
[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>
`
@ -190,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();
@ -377,10 +377,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',
@ -444,11 +445,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, [], [], {}))
}
@ -458,7 +462,7 @@ export class AppComponent implements OnInit, OnDestroy {
this.communityId = (this.community && ConnectHelper.isPrivate(this.community, this.user))?this.community.communityId:null;
this.configurationService.initPortal(this.properties, "connect");
this.buildConnectMenu(true);
if (this.community && this.community.status == "manager") {
if (this.community && this.community.isRestricted()) {
if (!this.user) {
if (typeof location !== 'undefined' && location.pathname.indexOf("user-info") == -1) {
this.router.navigate(['/user-info'], {
@ -473,7 +477,7 @@ export class AppComponent implements OnInit, OnDestroy {
this.router.navigate(['/'], {queryParamsHandling: "merge"});
}
}
} else if (this.community && this.community.status == "hidden") {
} else if (this.community && (this.community.isPrivate())) {
this.router.navigate([this.properties.errorLink]);
} else {
this.router.navigate(['/'], this.community && this.community.status ? {queryParamsHandling: "merge"} : {});

View File

@ -1,8 +1,8 @@
import {NgModule} from '@angular/core';
import {APP_ID, NgModule} from '@angular/core';
import {FormsModule} from '@angular/forms';
import {CommonModule} from '@angular/common';
import {HTTP_INTERCEPTORS, HttpClientModule} from "@angular/common/http";
import {BrowserModule, BrowserTransferStateModule} from '@angular/platform-browser';
import {BrowserModule} from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {AppComponent} from './app.component';
@ -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({
@ -41,16 +41,16 @@ import {CustomizationService} from "./openaireLibrary/services/customization.ser
BottomModule,
CookieLawModule,
SubscribeModule.forRoot(), InviteBasicModule,
BrowserModule.withServerTransition({appId: 'serverApp'}),
BrowserModule,
AppRoutingModule,
BrowserTransferStateModule,
BrowserAnimationsModule,
PageURLResolverModule, Schema2jsonldModule, RoleVerificationModule, QuickContactModule, AlertModalModule
],
declarations: [AppComponent, OpenaireErrorPageComponent],
exports: [AppComponent],
providers: [
CommunitiesService, CustomizationService, IsCommunity, SubscribeService,
CommunitiesService, CustomizationService, CommunityAccessGuard, SubscribeService,
{provide: APP_ID, useValue: 'serverApp'},
{
provide: HTTP_INTERCEPTORS,
useClass: HttpInterceptorService,

View File

@ -1,5 +1,5 @@
import { NgModule } from '@angular/core';
import {ServerModule, ServerTransferStateModule} from '@angular/platform-server';
import {ServerModule} from '@angular/platform-server';
import { AppModule } from './app.module';
import { AppComponent } from './app.component';
@ -8,7 +8,6 @@ import { AppComponent } from './app.component';
imports: [
AppModule,
ServerModule,
ServerTransferStateModule
],
bootstrap: [AppComponent],
})

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

@ -12,12 +12,12 @@
class="uk-text-background uk-text-small uk-position-top-left uk-padding-small uk-text-uppercase uk-text-bold">
Member
</div>
<div *ngIf="community.status === 'manager'"
<div *ngIf="community.isRestricted()"
class="uk-position-top-right uk-margin-small-top uk-margin-small-right uk-flex uk-flex-column uk-flex-middle">
<icon [name]="visibilityIcon.get('RESTRICTED')" ratio="1.2" [flex]="true"></icon>
<span class="uk-text-small uk-text-capitalize">restricted</span>
</div>
<div *ngIf="community.status === 'hidden'"
<div *ngIf="community.isPrivate()"
class="uk-position-top-right uk-margin-small-top uk-margin-small-right uk-flex uk-flex-column uk-flex-middle">
<icon [name]="visibilityIcon.get('PRIVATE')" ratio="1.2" [flex]="true"></icon>
<span class="uk-text-small uk-text-capitalize">private</span>
@ -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

@ -1,302 +1,287 @@
<div>
<div class="uk-overflow-hidden uk-tile-default">
<div class="uk-section uk-padding-remove-bottom uk-background-norepeat hero-background">
<div class="uk-container uk-container-large" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
<div class="uk-grid uk-flex-middle" uk-grid>
<div class="uk-width-3-5 uk-margin-large-bottom">
<h1 class="uk-heading-large" uk-scrollspy-class>
Build a <span class="uk-text-primary">Gateway</span>
for your Community<span class="uk-text-primary">.</span>
</h1>
<div class="uk-text-large uk-margin-medium-top" uk-scrollspy-class>
<div>Turn Open Science into Practice.</div>
<div>It takes your open and linked {{entities.RESULTS | lowercase}}.</div>
<div>A service customized to your needs.</div>
</div>
<div class="uk-margin-medium-top" uk-scrollspy-class>
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/about/learn-how">Learn More</a>
</div>
</div>
<div class="uk-width-expand uk-visible@m" uk-scrollspy-class>
<div class="uk-position-relative">
<img style="padding: 1px" src="assets/connect-assets/home/connect-hero.jpg" uk-parallax="y: 300">
<img class="uk-position-top-left" src="assets/connect-assets/home/connect-hero-mask.svg">
</div>
</div>
</div>
</div>
</div>
</div>
<ng-template #scrolling_text let-position_class="position_class">
<div #scrolling_element [class]="position_class" uk-parallax="target: #js-sticky-parallax-images-all; start: 15%; end: 100% + 100vh - 150vh; opacity: 0,1 20%,1 99%,0">
<h3 class="uk-h2">
<span class="uk-text-primary">Find a repository to deposit </span>
<span>your {{entities.RESULT | lowercase}}</span>
<span class="uk-text-primary">.</span>
</h3>
</div>
<div #scrolling_element [class]="position_class" uk-parallax="target: #js-sticky-parallax-images-all; start: 150vh; end: 100% + 100vh - 200vh; opacity: 0,1 20%,1 99%,0">
<h3 class="uk-h2">
<span class="uk-text-primary">Link your {{entities.RESULT | lowercase}} </span>
<span>with your community, funding, and other {{entities.RESULTS | lowercase}}</span>
<span class="uk-text-primary">.</span>
</h3>
</div>
<div #scrolling_element [class]="position_class" uk-parallax="target: #js-sticky-parallax-images-all; start: 200vh; end: 100% + 100vh - 250vh; opacity: 0,1 20%,1 99%,0">
<h3 class="uk-h2">
<span>View community's </span>
<span class="uk-text-primary">overview at a glance.</span>
</h3>
</div>
<div #scrolling_element [class]="position_class" uk-parallax="target: #js-sticky-parallax-images-all; start: 250vh; end: 100% + 100vh - 300vh; opacity: 0,1 20%,1">
<h3 class="uk-h2">
<span class="uk-text-primary">Search & browse </span>
<span>your community's {{entities.RESULTS | lowercase}}</span>
<span class="uk-text-primary">.</span>
</h3>
</div>
<!-- <div #scrolling_element [class]="position_class" uk-parallax="target: #js-sticky-parallax-images-all; start: 300vh; end: 100% + 100vh - 350vh; opacity: 0,1 20%,1">
<h3 class="uk-h2">
<span class="uk-text-primary">View statistics </span>
<span>for your community's {{entities.RESULTS | lowercase}}</span>
<span class="uk-text-primary">.</span>
</h3>
</div> -->
</ng-template>
<div class="uk-section uk-section-secondary">
<div class="uk-container uk-container-large">
<div class="uk-width-1-1">
<span class="uk-h6 uk-text-primary">Benefits.</span>
<h2 class="uk-h1 uk-margin-remove-top uk-width-1-2@m">
Find the best for your community<span class="uk-text-primary">.</span>
</h2>
</div>
<div id="js-sticky-parallax-images-all" style="min-height: 400vh">
<div class="uk-visible@m uk-height-viewport connect-dark-logo-background uk-sticky" uk-sticky="bottom: #js-sticky-parallax-images-all; target-offset: true">
<div class="uk-grid" uk-grid style="height: 100vh;">
<div class="uk-width-expand uk-first-column uk-position-relative uk-height-1-1">
<div class="connect-dark-logo-background">
<div uk-parallax="target: #js-sticky-parallax-images-all;">
<img class="uk-position-center uk-position-z-index" src="assets/connect-assets/home/tablet.png" alt="ipad" loading="lazy"
style="width: 100%;">
<img class="uk-position-center" src="assets/connect-assets/home/1.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 100vh; end: 100% + 100vh - 160vh; opacity: 1,1 99%,0; easing:0"
style="width: 100%;">
<img class="uk-position-center" src="assets/connect-assets/home/2.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 150vh; end: 100% + 100vh - 210vh; opacity: 0,1 20%,1 99%,0; easing:0"
style="width: 100%;">
<img class="uk-position-center" src="assets/connect-assets/home/3.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 200vh; end: 100% + 100vh - 260vh; opacity: 0,1 20%,1 99%,0; easing:0"
style="width: 100%;">
<img class="uk-position-center" src="assets/connect-assets/home/4.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 250vh; end: 100% + 100vh - 310vh; opacity: 0,1 20%,1; easing:0"
style="width: 100%;">
</div>
</div>
</div>
<div class="uk-inline uk-width-expand uk-height-1-1 uk-margin-large-left">
<div class="uk-width-3-4@l">
<div uk-parallax="target: #js-sticky-parallax-images-all; y: 55vh, 40vh;">
<ng-container *ngTemplateOutlet="scrolling_text; context: {position_class: 'uk-position-center-left'}"></ng-container>
</div>
</div>
</div>
</div>
</div>
<div class="uk-hidden@m uk-height-viewport connect-dark-logo-background" uk-sticky="bottom: #js-sticky-parallax-images-all">
<div class="uk-flex uk-flex-column uk-flex-middle">
<div class="connect-dark-logo-background uk-inline uk-width-1-1" style="height: 40vh;">
<img class="uk-position-center uk-position-z-index" src="assets/connect-assets/home/tablet.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all;" style="width: 70%;">
<img class="uk-position-center" src="assets/connect-assets/home/1.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 100vh; end: 100% + 100vh - 160vh; opacity: 1,1 99%,0; easing:0" style="width: 70%;">
<img class="uk-position-center" src="assets/connect-assets/home/2.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 150vh; end: 100% + 100vh - 210vh; opacity: 0,1 20%,1 99%,0; easing:0" style="width: 70%;">
<img class="uk-position-center" src="assets/connect-assets/home/3.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 200vh; end: 100% + 100vh - 260vh; opacity: 0,1 20%,1 99%,0; easing:0" style="width: 70%;">
<img class="uk-position-center" src="assets/connect-assets/home/4.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 250vh; end: 100% + 100vh - 310vh; opacity: 0,1 20%,1; easing:0" style="width: 70%;">
<div class="uk-overflow-hidden uk-tile-default">
<div class="uk-section uk-padding-remove-bottom uk-background-norepeat hero-background">
<div class="uk-container uk-container-large"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
<div class="uk-grid uk-flex-middle" uk-grid>
<div class="uk-width-3-5 uk-margin-large-bottom">
<h1 class="uk-heading-large" uk-scrollspy-class>
Build a <span class="uk-text-primary">Gateway</span>
for your Community<span class="uk-text-primary">.</span>
</h1>
<div class="uk-text-large uk-margin-medium-top" uk-scrollspy-class>
<div>Turn Open Science into Practice.</div>
<div>It takes your open and linked {{entities.RESULTS | lowercase}}.</div>
<div>A service customized to your needs.</div>
</div>
<div class="uk-margin-medium-top" uk-scrollspy-class>
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/about/learn-how">Learn
More</a>
</div>
</div>
<div class="uk-width-expand uk-visible@m" uk-scrollspy-class>
<div class="uk-position-relative">
<img style="padding: 1px" src="assets/connect-assets/home/connect-hero.jpg"
uk-parallax="y: 300">
<img class="uk-position-top-left" src="assets/connect-assets/home/connect-hero-mask.svg">
</div>
</div>
</div>
</div>
<div class="uk-inline uk-width-2-3">
<ng-container *ngTemplateOutlet="scrolling_text; context: {position_class: 'uk-position-top-center'}"></ng-container>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div #parent class="uk-section uk-section-secondary connect-dark-logo-background">
<div class="uk-container uk-container-large uk-margin-large-bottom">
<div class="uk-width-1-1 uk-margin-medium-bottom">
<span class="uk-h6 uk-text-primary">Benefits.</span>
<h2 class="uk-margin-remove-top uk-width-1-2@m">
Find the best for your community<span class="uk-text-primary">.</span>
</h2>
</div>
<slider-container [total]="4" [navigation]="'progress'" [period]="6000" [infinite]="true" [parent]="parent">
<slider-column type="slider">
<slider-item type="static">
<img class="uk-position-center uk-position-z-index" src="assets/connect-assets/home/tablet.png"
alt="ipad" loading="lazy">
</slider-item>
<slider-item type="slide" [start]="0">
<img src="assets/connect-assets/home/1.png" alt="ipad" loading="lazy">
</slider-item>
<slider-item type="slide" [start]="1">
<img src="assets/connect-assets/home/2.png" alt="ipad" loading="lazy">
</slider-item>
<slider-item type="slide" [start]="2">
<img src="assets/connect-assets/home/3.png" alt="ipad" loading="lazy">
</slider-item>
<slider-item type="slide" [start]="3">
<img src="assets/connect-assets/home/4.png" alt="ipad" loading="lazy">
</slider-item>
</slider-column>
<slider-column type="nav" class="slider-nav">
<slider-nav-item [start]="0">
<h5 class="uk-margin-remove">
<i class="uk-text-primary">Find a repository </i>
<span>to deposit your {{entities.RESULT | lowercase}}</span>
<span class="uk-text-primary">.</span>
</h5>
</slider-nav-item>
<slider-nav-item [start]="1">
<h5 class="uk-margin-remove">
<i class="uk-text-primary">Link your {{entities.RESULT | lowercase}} </i>
<span>with your community, funding, and other {{entities.RESULTS | lowercase}}</span>
<span class="uk-text-primary">.</span>
</h5>
</slider-nav-item>
<slider-nav-item [start]="2">
<h5 class="uk-margin-remove">
<span>View community's </span>
<i class="uk-text-primary">overview at a glance.</i>
</h5>
</slider-nav-item>
<slider-nav-item [start]="3">
<h5 class="uk-margin-remove">
<i class="uk-text-primary">Search & browse </i>
<span>your community's {{entities.RESULTS | lowercase}}</span>
<span class="uk-text-primary">.</span>
</h5>
</slider-nav-item>
</slider-column>
</slider-container>
</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
<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
<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
<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>
<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 *ngIf="researchCommunities.length === 0" class="uk-container uk-container-large uk-margin-large-bottom">
<errorMessages [status]="[status]" [type]="'communities'"></errorMessages>
</div>
<div *ngIf="!loading && researchCommunities.length > 0" class="uk-section uk-container uk-container-large">
<h2 class="uk-h1">Community Gateways already in action<span class="uk-text-primary">.</span></h2>
<div class="uk-margin-large-top uk-margin-large-bottom">
<div class="uk-visible@xl">
<div class="uk-grid-match uk-grid-medium uk-child-width-1-4 uk-flex-center uk-text-center" uk-grid>
<div *ngFor="let community of researchCommunities.slice(0, 4); let i = index">
<div class="uk-card uk-card-default uk-card-hover" [class.uk-disabled]="!hasPermission(community)">
<browse-community [community]=community></browse-community>
</div>
</div>
</div>
<div class="uk-text-center uk-margin-medium-top">
<a *ngIf="researchCommunities.length > 4"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/search/find/communities">
<div *ngIf="researchCommunities.length === 0" class="uk-container uk-container-large uk-margin-large-bottom">
<errorMessages [status]="[status]" [type]="'communities'"></errorMessages>
</div>
<div *ngIf="!loading && researchCommunities.length > 0" class="uk-section uk-container uk-container-large">
<h2 class="uk-h1">Community Gateways already in action<span class="uk-text-primary">.</span></h2>
<div class="uk-margin-large-top uk-margin-large-bottom">
<div class="uk-visible@xl">
<div class="uk-grid-match uk-grid-medium uk-child-width-1-4 uk-flex-center uk-text-center" uk-grid>
<div *ngFor="let community of researchCommunities.slice(0, 4); let i = index">
<div class="uk-card uk-card-default uk-card-hover"
[class.uk-disabled]="!hasPermission(community)">
<browse-community [community]=community></browse-community>
</div>
</div>
</div>
<div class="uk-text-center uk-margin-medium-top">
<a *ngIf="researchCommunities.length > 4"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/search/find/communities">
<span class="uk-flex uk-flex-middle">
<span>View All</span>
</span>
</a>
</div>
</div>
</a>
</div>
</div>
<div class="uk-hidden@xl">
<div class="uk-grid-match uk-grid-medium uk-child-width-1-3@m uk-child-width-1-1 uk-flex-center uk-text-center" uk-grid>
<div *ngFor="let community of researchCommunities.slice(0, 3); let i = index">
<div class="uk-card uk-card-default uk-card-hover">
<browse-community [community]=community></browse-community>
</div>
</div>
</div>
<div class="uk-text-center uk-margin-medium-top">
<a *ngIf="researchCommunities.length > 3"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/search/find/communities">
<div class="uk-hidden@xl">
<div class="uk-grid-match uk-grid-medium uk-child-width-1-3@m uk-child-width-1-1 uk-flex-center uk-text-center"
uk-grid>
<div *ngFor="let community of researchCommunities.slice(0, 3); let i = index">
<div class="uk-card uk-card-default uk-card-hover"
[class.uk-disabled]="!hasPermission(community)">
<browse-community [community]=community></browse-community>
</div>
</div>
</div>
<div class="uk-text-center uk-margin-medium-top">
<a *ngIf="researchCommunities.length > 3"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/search/find/communities">
<span class="uk-flex uk-flex-middle">
<span>View All</span>
</span>
</a>
</div>
</div>
</div>
</div>
</a>
</div>
</div>
</div>
</div>
<div #contact class="uk-section uk-container uk-container-large uk-margin-large-bottom uk-flex uk-flex-middle uk-flex-column">
<h2 class="uk-text-center uk-width-3-4@m">
<div>Let us Help you Develop a Collaborative Science Gateway<span class="uk-text-primary">.</span></div>
<div>It is fast<span class="uk-text-primary">.</span> It is reliable<span class="uk-text-primary">.</span></div>
</h2>
<a class="uk-button uk-button-primary uk-margin-medium-top uk-margin-medium-bottom" routerLink="/contact-us">Contact us</a>
</div>
<div #contact
class="uk-section uk-container uk-container-large uk-margin-large-bottom uk-flex uk-flex-middle uk-flex-column">
<h2 class="uk-text-center uk-width-3-4@m">
<div>Let us Help you Develop a Collaborative Science Gateway<span class="uk-text-primary">.</span></div>
<div>It is fast<span class="uk-text-primary">.</span> It is reliable<span class="uk-text-primary">.</span>
</div>
</h2>
<a class="uk-button uk-button-primary uk-margin-medium-top uk-margin-medium-bottom" routerLink="/contact-us">Contact
us</a>
</div>
</div>

View File

@ -7,7 +7,11 @@
.connect-dark-logo-background {
background-image: url("~src/assets/connect-assets/home/connect-dark-logo.svg");
background-repeat: no-repeat;
background-position: left 95%;
background-size: 65%;
background-position: -5% 102%;
background-size: 35%;
}
}
.slider-nav {
max-width: 650px;
}
}

View File

@ -175,7 +175,7 @@ export class CommunitiesComponent implements OnInit, OnDestroy, AfterViewInit {
let showCommunity: boolean = true;
community.isSubscribed = Session.isSubscribedTo('community', community.communityId, this.user);
if (community['status'] == "hidden" || community['status'] == "manager") {
if (community.isPrivate() || community.isRestricted()) {
showCommunity = false;
}
if (showCommunity) {
@ -193,7 +193,7 @@ export class CommunitiesComponent implements OnInit, OnDestroy, AfterViewInit {
}
hasPermission(communityInfo: CommunityInfo) {
return communityInfo.status === "all" || (communityInfo.status === "manager" && communityInfo.isManager);
return communityInfo.isPublic() || (communityInfo.isRestricted() && communityInfo.isManager);
}
private sort(results: CommunityInfo[]) {

View File

@ -14,19 +14,19 @@ import {ErrorMessagesModule} from '../openaireLibrary/utils/errorMessages.m
import {SearchFormModule} from '../openaireLibrary/searchPages/searchUtils/searchForm.module';
import {BrowseCommunityModule} from './browseCommunity/browse-community.module';
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
import {GifSliderModule} from "../openaireLibrary/utils/gif-slider/gif-slider.module";
import {OtherPortalsModule} from "../openaireLibrary/sharedComponents/other-portals/other-portals.module";
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
import {SectionScrollModule} from "../openaireLibrary/utils/section-scroll/section-scroll.module";
import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
import {SliderUtilsModule} from "../openaireLibrary/sharedComponents/slider-utils/slider-utils.module";
@NgModule({
imports: [
CommonModule, FormsModule, RouterModule,
ManageModule, ErrorMessagesModule,
SearchFormModule, BrowseCommunityModule, GifSliderModule, OtherPortalsModule,
HelperModule, SEOServiceModule, SectionScrollModule, IconsModule
SearchFormModule, BrowseCommunityModule, OtherPortalsModule,
HelperModule, SEOServiceModule, SectionScrollModule, IconsModule, SliderUtilsModule
],
declarations: [
CommunitiesComponent

View File

@ -1,831 +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">
<search-tab [fetch]="fetchFeaturedDatasets" [resultType]="'dataset'"
[properties]="properties" customTitle="Featured Datasets" [currentPage]="page"
[showEnermaps]="true">
<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.results.length > size" [type]="'Featured Datasets'"
(pageChange)="updatePage($event)"
[page]="page" [pageSize]="size"
[totalResults]="fetchFeaturedDatasets.results.length" >
</no-load-paging>
</search-tab>
</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,147 +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 {SearchZenodoCommunitiesService} from '../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunities.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,
@ -153,16 +48,10 @@ export class CommunityComponent {
private _piwikService: PiwikService,
private config: ConfigurationService,
private _communityService: CommunityService,
private _searchCommunityDataprovidersService: SearchCommunityDataprovidersService,
private _searchCommunityProjectsService: SearchCommunityProjectsService,
private _searchResearchResultsService: SearchResearchResultsService,
private _searchZenodoCommunitiesService: SearchZenodoCommunitiesService,
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";
@ -171,506 +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(
this.subscriptions.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;
}
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.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.properties.zenodoCommunities + this.community.zenodoCommunity, null).subscribe(
result => {
this.masterZenodoCommunity = result;
},
error => {
this.handleError("Error getting Master Zenodo community with id: " + this.community.zenodoCommunity, error);
}
));
}
this.subs.push(this._searchZenodoCommunitiesService.searchZCommunities(this.properties, this.communityId).subscribe(
result => {
this.zenodoCommunityIdS = result;
},
error => {
this.handleError("Error getting list of zenodo communities for community with openaire id: " + this.communityId, error);
}
));
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.countResearchResults("publication");
this.countResearchResults("dataset");
this.countResearchResults("software");
this.countResearchResults("other");
if(this.communityId == "enermaps"){
this.countResearchResults("dataset", "enermaps::selection" );
}
}
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});
}
}
});
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");
// console.log(this.fetchFeaturedDatasets);
}
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;
error => {}));
}
}

View File

@ -12,12 +12,10 @@ import {InviteModule} from '../utils/subscribe/invite/invite.module';
import {ManageModule} from '../openaireLibrary/utils/manage/manage.module';
import {StatisticsModule} from "../statistics/statistics.module";
import {
SearchZenodoCommunitiesServiceModule
} from '../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunitiesService.module';
import {
ZenodoCommunitiesServiceModule
} from '../openaireLibrary/connect/zenodoCommunities/zenodo-communitiesService.module';
import {SearchFormModule} from '../openaireLibrary/searchPages/searchUtils/searchForm.module';
import {
SearchDataprovidersServiceModule
@ -25,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";
@ -42,25 +40,30 @@ 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: [
CommonModule, FormsModule, RouterModule,
SubscribeModule, StatisticsModule, ManageModule, InviteModule,
SearchZenodoCommunitiesServiceModule, ZenodoCommunitiesServiceModule, SearchFormModule, SearchDataprovidersServiceModule, SearchProjectsServiceModule,
ZenodoCommunitiesServiceModule, SearchFormModule, SearchDataprovidersServiceModule, SearchProjectsServiceModule,
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

@ -6,11 +6,9 @@ import {ZenodoInformationClass} from "../openaireLibrary/deposit/utils/zenodoInf
import {FetchZenodoInformation} from "./utils/fetchZenodoInformation.class";
import {ZenodoCommunitiesService} from "../openaireLibrary/connect/zenodoCommunities/zenodo-communities.service";
import {CommunityService} from "../openaireLibrary/connect/community/community.service";
import {
SearchZenodoCommunitiesService
} from "../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunities.service";
import {Subscriber, Subscription} from "rxjs";
import {properties} from "../../environments/environment";
import {SearchCommunityDataprovidersService} from "../openaireLibrary/connect/contentProviders/searchDataproviders.service";
@Component({
selector: 'openaire-deposit',
@ -34,8 +32,8 @@ export class OpenaireDepositComponent {
constructor(private route: ActivatedRoute,
private _zenodoCommunitieService: ZenodoCommunitiesService,
private _communityService: CommunityService,
private _searchZenodoCommunitiesService: SearchZenodoCommunitiesService) {
this.fetchZenodoInformation = new FetchZenodoInformation(this._zenodoCommunitieService, this._searchZenodoCommunitiesService);
private searchCommunityDataprovidersService: SearchCommunityDataprovidersService) {
this.fetchZenodoInformation = new FetchZenodoInformation(this._zenodoCommunitieService);
}
public ngOnInit() {
@ -44,12 +42,22 @@ export class OpenaireDepositComponent {
if(community) {
this.communityId = community.communityId
let masterZenodoCommunityId = community.zenodoCommunity;
if (masterZenodoCommunityId) {
if (masterZenodoCommunityId || (community.otherZenodoCommunities && community.otherZenodoCommunities.length > 0)) {
this.zenodoInformation.shareInZenodoUrl = this.properties.shareInZenodoPage;
} else {
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,7 +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 {SearchZenodoCommunitiesService} from "../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunities.service";
import {SearchCommunityDataprovidersService} from "../openaireLibrary/connect/contentProviders/searchDataproviders.service";
@NgModule({
imports: [
@ -22,7 +22,7 @@ import {SearchZenodoCommunitiesService} from "../openaireLibrary/connect/zenodoC
exports: [
OpenaireDepositComponent,
],
providers: [PreviousRouteRecorder, IsRouteEnabled,
ZenodoCommunitiesService, SearchZenodoCommunitiesService]
providers: [PreviousRouteRecorder, IsRouteEnabled, SearchCommunityDataprovidersService,
ZenodoCommunitiesService]
})
export class LibDepositModule { }

View File

@ -3,15 +3,13 @@ import {ActivatedRoute} from '@angular/router';
import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties';
import {ZenodoCommunitiesService} from '../openaireLibrary/connect/zenodoCommunities/zenodo-communities.service';
import {
SearchZenodoCommunitiesService
} from '../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunities.service';
import {CommunityService} from '../openaireLibrary/connect/community/community.service';
import {ZenodoInformationClass} from '../openaireLibrary/deposit/utils/zenodoInformation.class';
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',
@ -31,8 +29,9 @@ export class OpenaireSearchDataprovidersToDepositComponent {
constructor(private route: ActivatedRoute,
private _zenodoCommunitieService: ZenodoCommunitiesService,
private _communityService: CommunityService, private _searchZenodoCommunitiesService: SearchZenodoCommunitiesService) {
this.fetchZenodoInformation = new FetchZenodoInformation(this._zenodoCommunitieService, this._searchZenodoCommunitiesService);
private _communityService: CommunityService,
private searchCommunityDataprovidersService: SearchCommunityDataprovidersService) {
this.fetchZenodoInformation = new FetchZenodoInformation(this._zenodoCommunitieService);
}
public ngOnInit() {
@ -41,12 +40,22 @@ export class OpenaireSearchDataprovidersToDepositComponent {
if(community) {
this.communityId = community.communityId;
let masterZenodoCommunityId = community.zenodoCommunity;
if (masterZenodoCommunityId) {
if (masterZenodoCommunityId || (community.otherZenodoCommunities && community.otherZenodoCommunities.length > 0)) {
this.zenodoInformation.shareInZenodoUrl = this.properties.shareInZenodoPage;
} else {
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,14 +9,14 @@ 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 {SearchZenodoCommunitiesServiceModule} from '../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunitiesService.module';
import {SearchCommunityDataprovidersService} from "../openaireLibrary/connect/contentProviders/searchDataproviders.service";
@NgModule({
imports: [
CommonModule, FormsModule,
SearchDataprovidersToDepositModule,
SearchDataprovidersToDepositRoutingModule,
ZenodoCommunitiesServiceModule, SearchZenodoCommunitiesServiceModule
ZenodoCommunitiesServiceModule
],
declarations: [
OpenaireSearchDataprovidersToDepositComponent
@ -24,6 +24,6 @@ import {SearchZenodoCommunitiesServiceModule} from '../openaireLibrary/connect/z
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,6 +1,5 @@
import {EnvProperties} from '../../openaireLibrary/utils/properties/env-properties';
import {ZenodoCommunitiesService} from '../../openaireLibrary/connect/zenodoCommunities/zenodo-communities.service';
import {SearchZenodoCommunitiesService} from '../../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunities.service';
import {ZenodoInformationClass} from '../../openaireLibrary/deposit/utils/zenodoInformation.class';
import {Subscriber} from "rxjs";
@ -11,8 +10,7 @@ import {Injectable} from "@angular/core";
})
export class FetchZenodoInformation {
private subscriptions = [];
constructor ( private _zenodoCommunitieService: ZenodoCommunitiesService,
private _searchZenodoCommunitiesService: SearchZenodoCommunitiesService ) { }
constructor ( private _zenodoCommunitieService: ZenodoCommunitiesService ) { }
public ngOnDestroy() {
this.clearSubscriptions();
@ -26,7 +24,7 @@ export class FetchZenodoInformation {
});
}
public getZenodoCommunityNameAndUrlById(masterZenodoCommunityId: string, properties:EnvProperties, zenodoInformation: ZenodoInformationClass){
this.subscriptions.push(this._zenodoCommunitieService.getZenodoCommunityById(properties, properties.zenodoCommunities+masterZenodoCommunityId, null).subscribe(
this.subscriptions.push(this._zenodoCommunitieService.getZenodoCommunityById(properties, masterZenodoCommunityId).subscribe(
result => {
console.info("getZenodoCommunityNameAndUrlById", result);
var masterZenodoCommunity = result;
@ -38,22 +36,4 @@ export class FetchZenodoInformation {
}
));
}
public searchNumberOfZCommunities(communityId: string, properties: EnvProperties, zenodoInformation: ZenodoInformationClass) {
this.subscriptions.push(this._searchZenodoCommunitiesService.searchZCommunities(properties,communityId).subscribe (
result => {
console.info("searchNumberOfZCommunities", result);
var CommunityIds = result;
var totalResults = CommunityIds.length;
if(totalResults > 0) {
zenodoInformation.shareInZenodoUrl = properties.shareInZenodoPage;
console.info(zenodoInformation.shareInZenodoUrl);
}
},
error => {
console.error("list of zenodo communities couldn't be loaded");
}
));
}
}

View File

@ -1,145 +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="{{masterZenodoCommunity.title}}">
</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 class="uk-margin-medium-bottom">Other 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]['zenodoid']]"
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]['zenodoid']].logoUrl">
<a target="_blank" [href]="communities[this.communityIds[i]['zenodoid']].link">
<img *ngIf="communities[this.communityIds[i]['zenodoid']].logoUrl"
src="{{communities[this.communityIds[i]['zenodoid']].logoUrl}}" width="80" height="80" alt="{{communities[this.communityIds[i]['zenodoid']].title}}">
</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]['zenodoid']].link}}">
<span *ngIf="communities[this.communityIds[i]['zenodoid']].title">{{communities[this.communityIds[i]['zenodoid']].title}}</span>
<span *ngIf="!communities[this.communityIds[i]['zenodoid']].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]['zenodoid']].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]['zenodoid']].description" class="uk-margin-remove" [innerHtml]="communities[this.communityIds[i]['zenodoid']].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]['zenodoid']].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">
<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">
<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

@ -3,9 +3,6 @@ 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 {
SearchZenodoCommunitiesService
} from '../../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunities.service';
import {CommunityService} from '../../openaireLibrary/connect/community/community.service';
import {CommunityInfo} from '../../openaireLibrary/connect/community/communityInfo';
import {SearchUtilsClass} from '../../openaireLibrary/searchPages/searchUtils/searchUtils.class';
@ -27,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;
@ -58,7 +55,6 @@ export class ShareInZenodoComponent {
private _title: Title,
private _zenodoCommunitieService: ZenodoCommunitiesService,
private _communityService: CommunityService,
private _searchZenodoCommunitiesService: SearchZenodoCommunitiesService,
private helper: HelperService,
private _piwikService: PiwikService,
private seoService: SEOService) {
@ -86,34 +82,29 @@ export class ShareInZenodoComponent {
this.community = community;
this.masterZenodoCommunityId = this.community.zenodoCommunity;
if (this.masterZenodoCommunityId) {
this.subs.push(this._zenodoCommunitieService.getZenodoCommunityById(this.properties, this.properties.zenodoCommunities + this.masterZenodoCommunityId, null).subscribe(
this.subs.push(this._zenodoCommunitieService.getZenodoCommunityById(this.properties, this.masterZenodoCommunityId).subscribe(
result => {
this.masterZenodoCommunity = result;
},
error => {
this.handleError("Error getting Master Zenodo community with id: " + this.masterZenodoCommunityId, error);
}
));
}
this.zenodoSearchUtils.status = this.errorCodes.LOADING;
this.subs.push(this._searchZenodoCommunitiesService.searchZCommunities(this.properties, this.communityId).subscribe(
result => {
this.communityIds = result;
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;
}
this.getCommunities()
},
error => {
//console.error("list of zenodo communities couldn't be loaded");
this.handleError("Error getting list of zenodo communities for community with openaire id: " + this.communityId, error);
this.zenodoSearchUtils.status = this.errorCodes.ERROR;
} //this.handleError('System error retrieving community profile', error)
));
}
}));
@ -154,8 +145,8 @@ export class ShareInZenodoComponent {
}));
}
getZenodoCommunityById(zenodoid, openaireId) {
this.subs.push(this._zenodoCommunitieService.getZenodoCommunityById(this.properties, this.properties.zenodoCommunities + zenodoid, openaireId).subscribe(
getZenodoCommunityById(zenodoid) {
this.subs.push(this._zenodoCommunitieService.getZenodoCommunityById(this.properties, zenodoid).subscribe(
result => {
this.communities[zenodoid] = result;
this.zenodoCommunitiesLoadedCount++;
@ -176,7 +167,7 @@ export class ShareInZenodoComponent {
this.zenodoSearchUtils.status = this.errorCodes.DONE;
}
//console.error("Zenodo community'"+zenodoid+"' couldn't be loaded");
this.handleError("Error getting Zenodo community with id: " + zenodoid + " and openaire id: " + openaireId, error);
this.handleError("Error getting Zenodo community with id: " + zenodoid, error);
}
));
@ -190,7 +181,7 @@ export class ShareInZenodoComponent {
this.page = $event.value;
for (let i = (this.page - 1) * this.size; i < this.communityIds.length && i < this.page * this.size; i++) {
if (!this.communities[this.communityIds[i]["zenodoid"]]) {
this.getZenodoCommunityById(this.communityIds[i]["zenodoid"], this.communityIds[i]["id"]);
this.getZenodoCommunityById(this.communityIds[i]);
}
}
}

View File

@ -7,7 +7,6 @@ import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard'
import {ShareInZenodoComponent} from './shareInZenodo.component';
import {ShareInZenodoRoutingModule} from './shareInZenodo-routing.module';
import {ZenodoCommunitiesServiceModule} from '../../openaireLibrary/connect/zenodoCommunities/zenodo-communitiesService.module';
import {SearchZenodoCommunitiesServiceModule} from '../../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunitiesService.module';
import {RouterModule} from "@angular/router";
import {HelperModule} from "../../openaireLibrary/utils/helper/helper.module";
@ -18,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, SearchZenodoCommunitiesServiceModule,
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

@ -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

@ -7,7 +7,6 @@ import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.servic
import {LearnHowComponent} from "./learn-how.component";
import {LearnHowRoutingModule} from "./learn-how-routing.module";
import {GifSliderModule} from "../openaireLibrary/utils/gif-slider/gif-slider.module";
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
@ -20,7 +19,7 @@ import {TabsModule} from '../openaireLibrary/utils/tabs/tabs.module';
@NgModule({
imports: [
CommonModule, RouterModule, LearnHowRoutingModule, GifSliderModule, HelperModule,
CommonModule, RouterModule, LearnHowRoutingModule, HelperModule,
Schema2jsonldModule, SEOServiceModule, BreadcrumbsModule, HtmlPagesModule, IconsModule, TabsModule
],
declarations: [

View File

@ -97,7 +97,7 @@ export class MyCommunitiesComponent {
}
hasPermission(communityInfo: CommunityInfo) {
return communityInfo.status === "all" || (communityInfo.status === "manager" && communityInfo.isManager);
return communityInfo.isPublic() || (communityInfo.isRestricted() && communityInfo.isManager);
}
public getCommunities() {
@ -122,10 +122,10 @@ export class MyCommunitiesComponent {
communitiesResults.forEach((community, index) => {
let showCommunity: boolean = true;
community.isManager = Session.isCommunityCurator(this.user) || Session.isPortalAdministrator(this.user) || Session.isManager('community', community.communityId, this.user);
if (community['status'] == "hidden") {
if (community.isPrivate()) {
showCommunity = false;
} else {
if(!community.isManager && community['status'] == "manager") {
if(!community.isManager && community.isRestricted()) {
showCommunity = false;
}
}

@ -1 +1 @@
Subproject commit 9b2524c1c72972b593654081e1d917ca8a1a7909
Subproject commit 2e2a71c3101660480ede67c06edc22aa00faa79d

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') {
@ -175,9 +175,9 @@ export class SearchCommunitiesComponent {
private showCommunities() {
let ret: CommunityInfo[] = [];
for (let result of this.results) {
if (result.status == 'hidden' && result.isManager) {
if (result.isPrivate() && result.isManager) {
ret.push(result);
} else if (result.status == "manager" || result.status == "all") {
} else if (result.isRestricted() || result.isPublic()) {
ret.push(result);
}
}
@ -284,6 +284,7 @@ export class SearchCommunitiesComponent {
if (params[filterId]) {
values = (StringUtils.URIDecode(params[filterId])).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/, -1);
}
console.log(filterId + ": " +values)
if (filterId == 'type') {
for (let i = 0; i < this.results.length; i++) {
if (values.length == 0) {
@ -302,19 +303,20 @@ export class SearchCommunitiesComponent {
if (values.length == 0) {
results.push(this.results[i]);
} else {
// console.log(this.results[i].status, this.results[i].isPublic(),this.results[i].isRestricted(), this.results[i].isPrivate() )
for (let value of values) {
if (value.replace(/["']/g, "") == 'public') {
if (this.results[i].status === 'all') {
if (this.results[i].isPublic()) {
results.push(this.results[i]);
break;
}
} else if (value.replace(/["']/g, "") == 'restricted') {
if (this.results[i].status === 'manager') {
if (this.results[i].isRestricted()) {
results.push(this.results[i]);
break;
}
} else if (value.replace(/["']/g, "") == 'private') {
if (this.results[i].status === 'hidden') {
if (this.results[i].isPrivate()) {
results.push(this.results[i]);
break;
}
@ -381,9 +383,9 @@ export class SearchCommunitiesComponent {
}
}
} else if (this.filters[i].filterId == 'access') {
if (results[k].status === 'all') {
if (results[k].isPublic()) {
this.filters[i].values[0].number++;
} else if (results[k].status === 'manager') {
} else if (results[k].isRestricted()) {
this.filters[i].values[1].number++;
} else if (this.user) {
this.filters[i].values[2].number++;

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

@ -1,8 +1,6 @@
import {Component, ViewChild} from '@angular/core';
import {ActivatedRoute} from '@angular/router';
import {AdvancedField, Filter, Value} from '../../openaireLibrary/searchPages/searchUtils/searchHelperClasses.class';
import {ErrorCodes} from '../../openaireLibrary/utils/properties/errorCodes';
import {ErrorMessagesComponent} from '../../openaireLibrary/utils/errorMessages.component';
import {SearchFields} from '../../openaireLibrary/utils/properties/searchFields';
@ -14,6 +12,8 @@ import {CommunityService} from "../../openaireLibrary/connect/community/communit
import {Subscriber} from "rxjs";
import {NewSearchPageComponent} from "../../openaireLibrary/searchPages/searchUtils/newSearchPage.component";
import {SearchResult} from "../../openaireLibrary/utils/entities/searchResult";
import {StringUtils} from "../../openaireLibrary/utils/string-utils.class";
import {IndexInfoService} from "../../openaireLibrary/utils/indexInfo.service";
@Component({
selector: 'openaire-search-projects',
@ -50,8 +50,9 @@ export class OpenaireSearchProjectsComponent {
private errorMessages: ErrorMessagesComponent;
public columnNames = ['Project', 'GrantId', 'Funder'];
public results =[];
public originalFilters =[];
public originalFunders =[];
public filters =[];
selectedFunder = null;
public searchUtils:SearchUtilsClass = new SearchUtilsClass();
subscriptions = [];
public searchFields:SearchFields = new SearchFields();
@ -64,7 +65,6 @@ export class OpenaireSearchProjectsComponent {
private communityId: string = '';
customFilter: SearchCustomFilter = null;
initialLoad = true;
public allResults =[];
@ViewChild(NewSearchPageComponent, { static: true }) searchPage: NewSearchPageComponent;
public fieldIds: string[] = this.searchFields.PROJECT_ADVANCED_FIELDS;
public fieldIdsMap= this.searchFields.PROJECT_FIELDS;
@ -73,13 +73,17 @@ export class OpenaireSearchProjectsComponent {
public loadPaging: boolean = true;
public oldTotalResults: number = 0;
keyword;
constructor (private route: ActivatedRoute, private _searchProjectsService: SearchCommunityProjectsService, private _communityService: CommunityService) {
lastDBLoadDate = null;
constructor (private route: ActivatedRoute, private _searchProjectsService: SearchCommunityProjectsService, private _communityService: CommunityService, private indexInfoService: IndexInfoService) {
this.errorCodes = new ErrorCodes();
this.errorMessages = new ErrorMessagesComponent();
this.searchUtils.status = this.errorCodes.LOADING;
}
public ngOnInit() {
this.subscriptions.push(this.indexInfoService.getLastIndexDate(this.properties).subscribe(res => {
this.lastDBLoadDate = res;
}));
this.searchUtils.baseUrl = this.properties.searchLinkToProjects;
this.subscriptions.push(this._communityService.getCommunityAsObservable().subscribe(community =>{
if(community != null){
@ -88,14 +92,14 @@ export class OpenaireSearchProjectsComponent {
this.subscriptions.push(this.route.queryParams.subscribe(params => {
let page = (params['page'] === undefined) ? 1 : +params['page'];
this.searchUtils.page = (page <= 0) ? 1 : page;
this.selectedFunder = params["funder"]?StringUtils.unquote(params["funder"]):null;
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._getResults();
this._getCommunityFunders();
}else{
this._getResults();
}
@ -119,73 +123,60 @@ export class OpenaireSearchProjectsComponent {
this.disableForms = true;
this.disableRefineForms = true;
this.enableSearchView = false;
if(this.allResults) {
this.subscriptions.push(this._searchProjectsService.searchProjects(this.properties, this.communityId).subscribe(
data => {
this.originalFilters = this.createFilters(data).slice(); //copy array
this.allResults = this.parseResults(data);
this.filters = this.searchPage.prepareFiltersToShow(this.originalFilters, this.allResults.length);
this.filterResults();
},
err => {
this.handleError("Error getting projects for community with id: " + this.communityId, err);
this.searchUtils.status = this.errorMessages.getErrorCode(err.status);
this.enableSearchView = true;
}
));
}else{
this.filters = this.searchPage.prepareFiltersToShow(this.originalFilters, this.allResults.length);
this.filterResults();
}
this.subscriptions.push(this._searchProjectsService.searchProjectsWithPaging(this.properties, this.communityId, this.searchUtils.page, this.searchUtils.size, this.searchUtils.keyword, this.selectedFunder, "name" ).subscribe(
data => {
this.searchUtils.totalResults = data['totalElements'];
this.filters = this.selectedFunder?this.createFilters([this.selectedFunder]):this.createFilters(this.originalFunders);
this.results = this.parseResults(data.content);
this.oldTotalResults = data['totalElements'];
this.searchUtils.totalResults = data['totalElements'];
this.searchUtils.status = this.results.length == 0 ? this.errorCodes.NONE: this.errorCodes.DONE;
this.disableForms = false;
this.disableRefineForms = false;
this.enableSearchView = true;
this.searchUtils.refineStatus = this.errorCodes.DONE;
},
err => {
this.handleError("Error getting projects for community with id: " + this.communityId, err);
this.searchUtils.status = this.errorMessages.getErrorCode(err.status);
this.enableSearchView = true;
}
));
}
private createFilters(data):Filter[] {
let length = Array.isArray(data) ? data.length : 1;
var filter_names=["Funder"];
var filter_ids=["funder"];
var filter_original_ids = ["funder"];
var value_names=[];
var value_original_ids=[];
var funders = new Set<String>();
var value_name = [];
var value_original_id = [];
let i;
for(i=0; i<length; i++) {
let resData = Array.isArray(data) ? data[i] : data;
if(resData.funder && !funders.has(resData.funder)) {
funders.add(resData.funder);
value_name.push(resData.funder);
value_original_id.push(resData.funder.trim());
}
for(let funder of data) {
funders.add(funder);
value_name.push(funder);
value_original_id.push(funder);
}
value_names.push(value_name);
value_original_ids.push(value_original_id);
var filters: Filter[] =[];
for(i =0 ; i < filter_names.length;i++){
if(value_names[i].length > 0) {
if(value_name.length > 0) {
var values: Value[] = [];
for (var j = 0; j < value_names[i].length; j++) {
var value: Value = {name: value_names[i][j], id: value_original_ids[i][j], number: j, selected: false}
for (var j = 0; j < value_name.length; j++) {
var value: Value = {name: value_name[j], id:value_name[j], number: 0, selected: this.selectedFunder == value_name[j] }
values.push(value);
}
var filter: Filter = {
title: filter_names[i],
filterId: filter_ids[i],
originalFilterId: filter_original_ids[i],
title: "Funder",
filterId: "funder",
originalFilterId: "funder",
values: values,
countSelectedValues: 0,
countSelectedValues: this.selectedFunder?1:0,
"filterOperator": 'or',
valueIsExact: true,
filterType: "checkbox"
};
filters.push(filter);
}
}
return filters;
}
@ -193,7 +184,11 @@ export class OpenaireSearchProjectsComponent {
let results:SearchResult[]=[];
for(let result of data){
let sResult:SearchResult = new SearchResult();
sResult.id = result.openaireId;
if(!result["availableSince"] || !this.lastDBLoadDate || (result["availableSince"] && this.lastDBLoadDate && result["availableSince"] < this.lastDBLoadDate)){
sResult.id = result.openaireId;
}else{
sResult.id = "-1"; //not yet in the graph
}
sResult.title = {name:"", accessMode: null};
sResult.title.name = result.name?result.name:result.acronym;
sResult.acronym = result['acronym'];
@ -203,33 +198,32 @@ export class OpenaireSearchProjectsComponent {
}
return results;
}
filterResults(){
let results = this.allResults.filter(value => { return value.title.name && value.title.name.toLowerCase().indexOf(this.keyword.toLowerCase()) !=-1 || value.acronym && value.acronym.toLowerCase().indexOf(this.keyword.toLowerCase()) !=-1});
let funderFilterValues = [];
getFunderFilterValue(){
for(let filter of this.filters){
if(filter.countSelectedValues > 0){
for(let value of filter.values){
if(value.selected) {
funderFilterValues.push(value.name);
return value.name;
}
}
}
}
if(funderFilterValues.length > 0) {
results = results.filter(value => {
return funderFilterValues.indexOf(value.funderShortname) != -1
});
}
this.oldTotalResults = results.length;
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.disableForms = false;
this.disableRefineForms = false;
this.enableSearchView = true;
this.searchUtils.refineStatus = this.errorCodes.DONE;
return null;
}
private handleError(message: string, error) {
console.error("Projects simple Search Page: "+message, error);
}
public _getCommunityFunders() {
this.subscriptions.push(this._searchProjectsService.getProjectFunders(this.properties, this.communityId).subscribe(
data => {
this.originalFunders = data
this._getResults();
},
err => {
}
));
}
}

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

@ -2,13 +2,13 @@ import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {InviteComponent} from './invite.component';
import {LoginGuard} from '../../../openaireLibrary/login/loginGuard.guard';
import {PreviousRouteRecorder} from '../../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {ConnectAdminLoginGuard} from "../../../openaireLibrary/connect/communityGuard/connectAdminLoginGuard.guard";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: InviteComponent, canActivate: [LoginGuard], canDeactivate: [PreviousRouteRecorder] }
{ path: '', component: InviteComponent, canActivate: [ConnectAdminLoginGuard], canDeactivate: [PreviousRouteRecorder] }
])
]

View File

@ -30,8 +30,12 @@
</div>
</div>
<div *ngIf="!longView" class="uk-margin-top">
<a id="invite" routerLink="/invite" class="uk-button uk-flex uk-flex-middle uk-flex-center">
<a *ngIf="isOpen" id="invite" routerLink="/invite" class="uk-button uk-flex uk-flex-middle uk-flex-center">
<icon name="person_add" [flex]="true"></icon>
<span class="uk-margin-small-left">Invite users</span>
</a>
<a *ngIf="!isOpen" id="invite" [href]="this.adminInviteURL" target="_blank" class="uk-button uk-flex uk-flex-middle uk-flex-center">
<icon name="person_add" [flex]="true"></icon>
<span class="uk-margin-small-left">Invite members</span>
</a>
</div>

View File

@ -21,6 +21,7 @@ declare var UIkit;
export class InviteComponent implements OnInit {
@Input() longView: boolean = true;
@Input() communityId = null;
@Input() isOpen: boolean = true;
public properties: EnvProperties = properties;
public pageTitle: string = "Invite";
public user: User;
@ -31,13 +32,11 @@ export class InviteComponent implements OnInit {
private subs: Subscription[] = [];
constructor(
private route: ActivatedRoute,
private _router: Router,
private _meta: Meta,
private helper: HelperService,
private _title: Title,
private seoService: SEOService,
private _piwikService: PiwikService,
private userManageService: UserManagementService) {
}
@ -46,9 +45,9 @@ export class InviteComponent implements OnInit {
user => {
this.user = user;
}));
this.getPageContents();
this.url = this.properties.domain + this._router.url;
if(this.longView) {
this.url = this.properties.domain + this._router.url;
this.getPageContents();
this.seoService.createLinkForCanonicalURL(this.url);
this.updateUrl(this.url);
this.updateTitle(this.pageTitle);
@ -90,9 +89,12 @@ export class InviteComponent implements OnInit {
private updateUrl(url: string) {
this._meta.updateTag({content: url}, "property='og:url'");
}
get adminInviteURL() {
return this.properties.adminPortalURL + '/' + this.communityId + '/users/member';
}
close(element) {
UIkit.dropdown(element).hide();
this
}
}

View File

@ -1,13 +1,12 @@
import {NgModule} from '@angular/core';
import {NgModule} from '@angular/core';
import {InviteRoutingModule} from './invite-routing.module';
import {LoginGuard} from '../../../openaireLibrary/login/loginGuard.guard';
import {InviteRoutingModule} from './invite-routing.module';
import {InviteBasicModule} from "./inviteBasic.module";
import {ConnectAdminLoginGuard} from "../../../openaireLibrary/connect/communityGuard/connectAdminLoginGuard.guard";
@NgModule({
imports: [InviteBasicModule, InviteRoutingModule],
providers: [LoginGuard]
providers: [ConnectAdminLoginGuard]
})
export class InviteModule { }

@ -1 +1 @@
Subproject commit 031329d5ca890663a0911e3dac5649eb5c00c601
Subproject commit 5026b8b38fcae493ec7bcdc272bf167798c18fa3

View File

@ -20,7 +20,7 @@
#joinAndInviteBtn #join,
#joinAndInviteBtn #member,
#joinAndInviteBtn #invite {
width: 140px;
width: 160px;
line-height: 60px;
height: 60px;
padding: 0 20px;
@ -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
}

View File

@ -30,4 +30,4 @@
@inverse-text-primary-color: @connect-color;
/* General */
@general-search-form-background: fade(@global-secondary-background, 20%);
@general-search-form-background: lighten(@global-secondary-background, 33%);

@ -1 +1 @@
Subproject commit ac458b5a6d156167d7b6c9005ef1f9cfac75d3ae
Subproject commit 56f08f2c2eeecf7a2df1167757b4fc46f17ed82f

View File

@ -1,119 +1,24 @@
import {EnvProperties} from "../app/openaireLibrary/utils/properties/env-properties";
import {common, commonBeta} from "../app/openaireLibrary/utils/properties/environments/environment";
export let properties: EnvProperties = {
environment: "beta",
let props: EnvProperties = {
dashboard: 'connect',
adminToolsPortalType: "connect",
dashboard: "connect",
adminToolsCommunity: 'connect',
enablePiwikTrack: true,
piwikSiteId: '80',
useCache: false,
useLongCache: true,
showContent: true,
showAddThis: true,
framesAPIURL: "https://beta.openaire.eu/stats3/",
statisticsAPIURL: "https://beta.services.openaire.eu/stats-api/",
statisticsFrameAPIURL: "https://beta.openaire.eu/stats/",
statisticsFrameNewAPIURL: "https://beta.services.openaire.eu/stats-tool/",
useNewStatistisTool: true,
enermapsURL:"https://lab.idiap.ch/enermaps",
impactFactorsAPIURL: "https://bip-api.imsi.athenarc.gr/paper/scores/batch/",
claimsAPIURL: "https://beta.services.openaire.eu/claims/rest/claimsService/",
searchAPIURLLAst: "https://beta.services.openaire.eu/search/v2/api/",
searchResourcesAPIURL: "https://beta.services.openaire.eu/search/v2/api/resources",
openCitationsAPIURL: "https://services.openaire.eu/opencitations/getCitations?id=",
csvAPIURL: "https://beta.services.openaire.eu/search/v2/api/reports",
searchCrossrefAPIURL: "https://api.crossref.org/works",
searchDataciteAPIURL: "https://api.datacite.org/works",
searchOrcidURL: "https://pub.orcid.org/v2.1/",
orcidURL: "https://orcid.org/",
orcidAPIURL: "https://services.openaire.eu/uoa-orcid-service/",
orcidTokenURL: "https://orcid.org/oauth/authorize?",
orcidClientId: "APP-IN0O56SBVVTB7NN4",
doiURL: "https://doi.org/",
pmcURL: "http://europepmc.org/articles/",
pmidURL: "https://www.ncbi.nlm.nih.gov/pubmed/",
handleURL: "http://hdl.handle.net/",
cordisURL: "http://cordis.europa.eu/projects/",
openDoarURL: "http://v2.sherpa.ac.uk/id/repository/",
r3DataURL: "http://service.re3data.org/repository/",
fairSharingURL: "https://fairsharing.org/",
eoscMarketplaceURL: "https://marketplace.eosc-portal.eu/services/",
sherpaURL: "http://sherpa.ac.uk/romeo/issn/",
sherpaURLSuffix: "/",
zenodo: "https://zenodo.org/",
zenodoCommunities: "https://zenodo.org/api/communities/",
openAccess: "https://www.openaire.eu/support/faq#article-id-234",
openAccessRepo: "https://www.openaire.eu/support/faq#article-id-310",
fp7Guidlines: "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme",
h2020Guidlines: "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020",
ercGuidlines: "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf",
helpdesk: "https://www.openaire.eu/support/helpdesk",
helpdeskEmail: "helpdesk@openaire.eu",
utilsService: "https://demo.openaire.eu/utils-service",
vocabulariesAPI: "https://beta.services.openaire.eu/provision/mvc/vocabularies/",
piwikBaseUrl: "https://analytics.openaire.eu/piwik.php?idsite=",
piwikSiteId: "80",
loginUrl: "https://beta.services.openaire.eu/login-service/openid_connect_login",
userInfoUrl: "https://beta.services.openaire.eu/login-service/userInfo",
registryUrl: 'https://beta.services.openaire.eu/uoa-user-management/api/registry/',
logoutUrl: "https://beta.services.openaire.eu/login-service/openid_logout",
cookieDomain: ".openaire.eu",
feedbackmail: "feedback@openaire.eu",
cacheUrl: "https://demo.openaire.eu/cache/get?url=",
adminToolsAPIURL: "https://beta.services.openaire.eu/uoa-admin-tools/",
adminToolsCommunity: "connect",
datasourcesAPI: "https://beta.services.openaire.eu/openaire/ds/search/",
contextsAPI: "https://beta.services.openaire.eu/openaire/context",
communityAPI: "https://beta.services.openaire.eu/openaire/community/",
communitiesAPI: "https://beta.services.openaire.eu/openaire/community/communities",
csvLimit: 2000,
pagingLimit: 20,
resultsPerPage: 10,
baseLink:"",
domain:"https://beta.connect.openaire.eu",
afterLoginRedirectLink: "/myCommunities",
searchLinkToResult: "/search/result?id=",
searchLinkToPublication: "/search/publication?articleId=",
searchLinkToProject: "/search/project?projectId=",
searchLinkToDataProvider: "/search/dataprovider?datasourceId=",
searchLinkToDataset: "/search/dataset?datasetId=",
searchLinkToSoftwareLanding: "/search/software?softwareId=",
searchLinkToOrganization: "/search/organization?organizationId=",
searchLinkToOrp: "/search/other?orpId=",
searchLinkToCommunities: "/search/find/communities",
searchLinkToPublications: "/search/find/publications",
searchLinkToDataProviders: "/search/find/dataproviders",
searchLinkToProjects: "/search/find/projects",
searchLinkToDatasets: "/search/find/datasets",
searchLinkToSoftware: "/search/find/software",
searchLinkToOrps: "/search/find/other",
searchLinkToOrganizations: "/search/find/organizations",
searchLinkToCompatibleDataProviders: "/search/content-providers",
searchLinkToEntityRegistriesDataProviders: "/search/entity-registries",
searchLinkToJournals: "/search/journals",
searchLinkToResults: "/search/find/research-outcomes",
searchLinkToAdvancedPublications: "/search/advanced/publications",
searchLinkToAdvancedProjects: "/search/advanced/projects",
searchLinkToAdvancedDatasets: "/search/advanced/datasets",
searchLinkToAdvancedSoftware: "/search/advanced/software",
searchLinkToAdvancedOrps: "/search/advanced/other",
searchLinkToAdvancedDataProviders: "/search/advanced/dataproviders",
searchLinkToAdvancedOrganizations: "/search/advanced/organizations",
searchLinkToAdvancedResults: "/search/advanced/research-outcomes",
errorLink: '/error',
lastIndexInformationLink: "https://beta.openaire.eu/aggregation-and-content-provision-workflows",
showLastIndexInformationLink: true,
bipFrameAPIURL: "https://bip.imsi.athenarc.gr/api/impact-chart?id=",
widgetLink: "https://beta.openaire.eu/index.php?option=com_openaire&view=widget&format=raw&projectId=",
claimsInformationLink: "https://beta.openaire.eu/linking",
depositLearnHowPage: "/participate/deposit/learn-how",
depositSearchPage: "/participate/deposit/search",
shareInZenodoPage: "/participate/deposit/zenodo",
reCaptchaSiteKey: "6LezhVIUAAAAAOb4nHDd87sckLhMXFDcHuKyS76P",
admins: ["feedback@openaire.eu"],
lastIndexUpdate: "2020-05-06",
indexInfoAPI: "https://beta.services.openaire.eu/openaire/info/",
altMetricsAPIURL: "https://api.altmetric.com/v1/doi/",
b2noteAPIURL: 'https://b2note.eudat.eu/',
adminPortalURL: "https://beta.admin.connect.openaire.eu",
myOrcidLinksPage: "/my-orcid-links"
showAddThis: false,
domain: 'https://beta.connect.openaire.eu',
baseLink : "",
monitorStatsFrameUrl:"https://beta.services.openaire.eu/stats-tool/"
};
export let properties: EnvProperties = {
...common, ...commonBeta, ...props
}

View File

@ -1,120 +1,24 @@
import {EnvProperties} from "../app/openaireLibrary/utils/properties/env-properties";
import {common, commonProd} from "../app/openaireLibrary/utils/properties/environments/environment";
export let properties: EnvProperties = {
environment: "production",
let props: EnvProperties = {
dashboard: 'connect',
adminToolsPortalType: "connect",
dashboard: "connect",
adminToolsCommunity: 'connect',
enablePiwikTrack: true,
piwikSiteId: '80',
useCache: false,
useLongCache: true,
showContent: true,
showAddThis: true,
framesAPIURL: "https://www.openaire.eu/stats3/",
statisticsAPIURL: "https://services.openaire.eu/stats-api/",
statisticsFrameAPIURL: "https://www.openaire.eu/stats/",
statisticsFrameNewAPIURL: "https://services.openaire.eu/stats-tool/",
useNewStatistisTool: true,
enermapsURL:"https://lab.idiap.ch/enermaps",
impactFactorsAPIURL: "https://bip-api.imsi.athenarc.gr/paper/scores/batch/",
claimsAPIURL: "https://services.openaire.eu/claims/rest/claimsService/",
searchAPIURLLAst: "https://services.openaire.eu/search/v2/api/",
searchResourcesAPIURL: "https://services.openaire.eu/search/v2/api/resources",
openCitationsAPIURL: "https://services.openaire.eu/opencitations/getCitations?id=",
csvAPIURL: "https://services.openaire.eu/search/v2/api/reports",
searchCrossrefAPIURL: "https://api.crossref.org/works",
searchDataciteAPIURL: "https://api.datacite.org/works",
searchOrcidURL: "https://pub.orcid.org/v2.1/",
orcidURL: "https://orcid.org/",
orcidAPIURL: "https://services.openaire.eu/uoa-orcid-service/",
orcidTokenURL: "https://orcid.org/oauth/authorize?",
orcidClientId: "APP-IN0O56SBVVTB7NN4",
doiURL: "https://doi.org/",
pmcURL: "http://europepmc.org/articles/",
pmidURL: "https://www.ncbi.nlm.nih.gov/pubmed/",
handleURL: "http://hdl.handle.net/",
cordisURL: "http://cordis.europa.eu/projects/",
openDoarURL: "http://v2.sherpa.ac.uk/id/repository/",
r3DataURL: "http://service.re3data.org/repository/",
fairSharingURL: "https://fairsharing.org/",
eoscMarketplaceURL: "https://marketplace.eosc-portal.eu/services/",
sherpaURL: "http://sherpa.ac.uk/romeo/issn/",
sherpaURLSuffix: "/",
zenodo: "https://zenodo.org/",
zenodoCommunities: "https://zenodo.org/api/communities/",
openAccess: "https://www.openaire.eu/support/faq#article-id-234",
openAccessRepo: "https://www.openaire.eu/support/faq#article-id-310",
fp7Guidlines: "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme",
h2020Guidlines: "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020",
ercGuidlines: "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf",
helpdesk: "https://www.openaire.eu/support/helpdesk",
helpdeskEmail: "helpdesk@openaire.eu",
utilsService: "https://explore.openaire.eu/utils-service",
vocabulariesAPI: "https://services.openaire.eu/provision/mvc/vocabularies/",
piwikBaseUrl: "https://analytics.openaire.eu/piwik.php?idsite=",
piwikSiteId: "112",
loginUrl: "https://services.openaire.eu/login-service/openid_connect_login",
registryUrl: 'https://services.openaire.eu/uoa-user-management/api/registry/',
userInfoUrl: "https://services.openaire.eu/login-service/userInfo",
logoutUrl: "https://services.openaire.eu/login-service/openid_logout",
cookieDomain: ".openaire.eu",
feedbackmail: "feedback@openaire.eu",
cacheUrl: "https://explore.openaire.eu/cache/get?url=",
datasourcesAPI: "https://services.openaire.eu/openaire/ds/search/",
adminToolsAPIURL: "https://services.openaire.eu/uoa-admin-tools/",
adminToolsCommunity: "connect",
contextsAPI: "https://services.openaire.eu/openaire/context",
communityAPI: "https://services.openaire.eu/openaire/community/",
communitiesAPI: "https://services.openaire.eu/openaire/community/communities",
csvLimit: 2000,
pagingLimit: 20,
resultsPerPage: 10,
baseLink:"",
domain: "https://connect.openaire.eu",
afterLoginRedirectLink: "/myCommunities",
searchLinkToResult: "/search/result?id=",
searchLinkToPublication: "/search/publication?articleId=",
searchLinkToProject: "/search/project?projectId=",
searchLinkToDataProvider: "/search/dataprovider?datasourceId=",
searchLinkToDataset: "/search/dataset?datasetId=",
searchLinkToSoftwareLanding: "/search/software?softwareId=",
searchLinkToOrganization: "/search/organization?organizationId=",
searchLinkToOrp: "/search/other?orpId=",
searchLinkToCommunities: "/search/find/communities",
searchLinkToPublications: "/search/find/publications",
searchLinkToDataProviders: "/search/find/dataproviders",
searchLinkToProjects: "/search/find/projects",
searchLinkToDatasets: "/search/find/datasets",
searchLinkToSoftware: "/search/find/software",
searchLinkToOrps: "/search/find/other",
searchLinkToOrganizations: "/search/find/organizations",
searchLinkToCompatibleDataProviders: "/search/content-providers",
searchLinkToEntityRegistriesDataProviders: "/search/entity-registries",
searchLinkToJournals: "/search/journals",
searchLinkToResults: "/search/find/research-outcomes",
searchLinkToAdvancedPublications: "/search/advanced/publications",
searchLinkToAdvancedProjects: "/search/advanced/projects",
searchLinkToAdvancedDatasets: "/search/advanced/datasets",
searchLinkToAdvancedSoftware: "/search/advanced/software",
searchLinkToAdvancedOrps: "/search/advanced/other",
searchLinkToAdvancedDataProviders: "/search/advanced/dataproviders",
searchLinkToAdvancedOrganizations: "/search/advanced/organizations",
searchLinkToAdvancedResults: "/search/advanced/research-outcomes",
errorLink: '/error',
lastIndexInformationLink: "https://www.openaire.eu/aggregation-and-content-provision-workflows",
showLastIndexInformationLink: true,
bipFrameAPIURL: "https://bip.imsi.athenarc.gr/api/impact-chart?id=",
widgetLink: "https://www.openaire.eu/index.php?option=com_openaire&view=widget&format=raw&projectId=",
claimsInformationLink: "https://www.openaire.eu/linking",
depositLearnHowPage: "/participate/deposit/learn-how",
depositSearchPage: "/participate/deposit/search",
shareInZenodoPage: "/participate/deposit/zenodo",
reCaptchaSiteKey: "6LezhVIUAAAAAOb4nHDd87sckLhMXFDcHuKyS76P",
admins: ["feedback@openaire.eu"],
lastIndexUpdate: "2019-07-24",
indexInfoAPI: "https://services.openaire.eu/openaire/info/",
altMetricsAPIURL: "https://api.altmetric.com/v1/doi/",
b2noteAPIURL: 'https://b2note.eudat.eu/',
adminPortalURL: "https://admin.connect.openaire.eu",
myOrcidLinksPage: "/my-orcid-links",
hasMachineCache: true
showAddThis: false,
domain: 'https://connect.openaire.eu',
baseLink : "",
hasMachineCache: true,
monitorStatsFrameUrl:"https://services.openaire.eu/stats-tool/"
};
export let properties: EnvProperties = {
...common, ...commonProd, ...props
}

View File

@ -4,121 +4,28 @@
// The list of which env maps to which file can be found in `.angular.json`.
import {EnvProperties} from '../app/openaireLibrary/utils/properties/env-properties';
import {common, commonDev} from "../app/openaireLibrary/utils/properties/environments/environment";
export let properties: EnvProperties = {
environment: 'development',
adminToolsPortalType: "connect",
let props: EnvProperties = {
dashboard: 'connect',
adminToolsPortalType: "connect",
adminToolsCommunity: 'connect',
enablePiwikTrack: false,
piwikSiteId: '80',
useCache: false,
useLongCache: false,
showContent: true,
showAddThis: false,
framesAPIURL: 'https://beta.openaire.eu/stats3/',
statisticsAPIURL: 'https://beta.services.openaire.eu/stats-api/',
statisticsFrameAPIURL: 'https://beta.openaire.eu/stats/',
statisticsFrameNewAPIURL: "https://beta.services.openaire.eu/stats-tool/",
useNewStatistisTool: true,
enermapsURL:"https://lab.idiap.ch/enermaps",
impactFactorsAPIURL: 'https://bip-api.imsi.athenarc.gr/paper/scores/batch/',
claimsAPIURL: 'http://scoobydoo.di.uoa.gr:8080/dnet-claims-service-2.0.0-SNAPSHOT/rest/claimsService/',
searchAPIURLLAst: 'https://beta.services.openaire.eu/search/v2/api/',
searchResourcesAPIURL: 'https://beta.services.openaire.eu/search/v2/api/resources',
openCitationsAPIURL: 'https://services.openaire.eu/opencitations/getCitations?id=',
csvAPIURL: 'https://beta.services.openaire.eu/search/v2/api/reports',
searchCrossrefAPIURL: 'https://api.crossref.org/works',
searchDataciteAPIURL: 'https://api.datacite.org/works',
searchOrcidURL: "https://pub.orcid.org/v2.1/",
orcidURL: "https://orcid.org/",
orcidAPIURL: "http://duffy.di.uoa.gr:19480/uoa-orcid-service/",
orcidTokenURL: "https://sandbox.orcid.org/oauth/authorize?",
orcidClientId: "APP-A5M3KTX6NCN67L91",
doiURL: 'https://doi.org/',
pmcURL: 'http://europepmc.org/articles/',
pmidURL: 'https://www.ncbi.nlm.nih.gov/pubmed/',
handleURL: 'http://hdl.handle.net/',
cordisURL: 'http://cordis.europa.eu/projects/',
openDoarURL: 'http://v2.sherpa.ac.uk/id/repository/',
r3DataURL: 'http://service.re3data.org/repository/',
fairSharingURL: "https://fairsharing.org/",
eoscMarketplaceURL: "https://marketplace.eosc-portal.eu/services/",
sherpaURL: 'http://sherpa.ac.uk/romeo/issn/',
sherpaURLSuffix: '/',
zenodo: 'https://zenodo.org/',
zenodoCommunities: 'https://zenodo.org/api/communities/',
openAccess: 'https://www.openaire.eu/support/faq#article-id-234',
openAccessRepo: 'https://www.openaire.eu/support/faq#article-id-310',
fp7Guidlines: 'https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme',
h2020Guidlines: 'https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020',
ercGuidlines: 'http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf',
helpdesk: 'https://www.openaire.eu/support/helpdesk',
helpdeskEmail: 'helpdesk@openaire.eu',
utilsService: 'http://mpagasas.di.uoa.gr:8000',
vocabulariesAPI: 'https://dev-openaire.d4science.org/provision/mvc/vocabularies/',
piwikBaseUrl: 'https://analytics.openaire.eu/piwik.php?idsite=',
piwikSiteId: '80',
registryUrl: 'http://mpagasas.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/api/registry/',
loginUrl: "http://mpagasas.di.uoa.gr:19080/login-service/openid_connect_login",
userInfoUrl: "http://mpagasas.di.uoa.gr:19080/login-service/userInfo",
logoutUrl: "http://mpagasas.di.uoa.gr:19080/login-service/openid_logout",
cookieDomain: '.di.uoa.gr',
feedbackmail: 'openaire.test@gmail.com',
cacheUrl: 'http://dl170.madgik.di.uoa.gr:3000/get?url=',
adminToolsAPIURL: 'http://duffy.di.uoa.gr:19280/uoa-admin-tools/',
adminToolsCommunity: 'connect',
datasourcesAPI: 'https://beta.services.openaire.eu/openaire/ds/search/',
contextsAPI: 'https://dev-openaire.d4science.org/openaire/context',
communityAPI: 'https://dev-openaire.d4science.org/openaire/community/',
communitiesAPI: 'https://dev-openaire.d4science.org/openaire/community/communities',
csvLimit: 2000,
pagingLimit: 20,
resultsPerPage: 10,
baseLink: "",
domain: 'https://beta.connect.openaire.eu',
afterLoginRedirectLink: '/myCommunities',
searchLinkToResult: "/search/result?id=",
searchLinkToPublication: '/search/publication?articleId=',
searchLinkToProject: '/search/project?projectId=',
searchLinkToDataProvider: '/search/dataprovider?datasourceId=',
searchLinkToDataset: '/search/dataset?datasetId=',
searchLinkToSoftwareLanding: '/search/software?softwareId=',
searchLinkToOrganization: '/search/organization?organizationId=',
searchLinkToOrp: '/search/other?orpId=',
searchLinkToCommunities: '/search/find/communities',
searchLinkToPublications: '/search/find/publications',
searchLinkToDataProviders: '/search/find/dataproviders',
searchLinkToProjects: '/search/find/projects',
searchLinkToDatasets: '/search/find/datasets',
searchLinkToSoftware: '/search/find/software',
searchLinkToOrps: '/search/find/other',
searchLinkToOrganizations: '/search/find/organizations',
searchLinkToCompatibleDataProviders: '/search/content-providers',
searchLinkToEntityRegistriesDataProviders: '/search/entity-registries',
searchLinkToJournals: '/search/journals',
searchLinkToResults: '/search/find/research-outcomes',
searchLinkToAdvancedPublications: '/search/advanced/publications',
searchLinkToAdvancedProjects: '/search/advanced/projects',
searchLinkToAdvancedDatasets: '/search/advanced/datasets',
searchLinkToAdvancedSoftware: '/search/advanced/software',
searchLinkToAdvancedOrps: '/search/advanced/other',
searchLinkToAdvancedDataProviders: '/search/advanced/dataproviders',
searchLinkToAdvancedOrganizations: '/search/advanced/organizations',
searchLinkToAdvancedResults: '/search/advanced/research-outcomes',
errorLink: '/error',
lastIndexInformationLink: 'https://beta.openaire.eu/aggregation-and-content-provision-workflows',
showLastIndexInformationLink: true,
bipFrameAPIURL: "https://bip.imsi.athenarc.gr/api/impact-chart?id=",
widgetLink: 'https://beta.openaire.eu/index.php?option=com_openaire&view=widget&format=raw&projectId=',
claimsInformationLink: 'https://beta.openaire.eu/linking',
depositLearnHowPage: '/participate/deposit/learn-how',
depositSearchPage: '/participate/deposit/search',
shareInZenodoPage: '/participate/deposit/zenodo',
reCaptchaSiteKey: '6LcVtFIUAAAAAB2ac6xYivHxYXKoUvYRPi-6_rLu',
admins: ['kostis30fylloy@gmail.com'],
lastIndexUpdate: '2019-11-01',
indexInfoAPI: 'https://dev-openaire.d4science.org/openaire/info/',
altMetricsAPIURL: 'https://api.altmetric.com/v1/doi/',
b2noteAPIURL: 'https://b2note.eudat.eu/',
adminPortalURL: 'https://beta.admin.connect.openaire.eu',
myOrcidLinksPage: "/my-orcid-links"
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/",
};
export let properties: EnvProperties = {
...common, ...commonDev, ...props
}

View File

@ -12,4 +12,4 @@ if (properties.environment !== "development") {
}
export { AppServerModule } from './app/app.server.module';
export { renderModule } from '@angular/platform-server';

View File

@ -7,8 +7,6 @@ import {
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
@ -16,7 +14,3 @@ getTestBed().initTestEnvironment(
teardown: { destroyAfterEach: false }
}
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@ -2,7 +2,6 @@
"extends": "./tsconfig.app.json",
"compilerOptions": {
"outDir": "../out-tsc/app-server",
"target": "es2016",
"types": [
"node"
]

View File

@ -10,13 +10,14 @@
"moduleResolution": "node",
"experimentalDecorators": true,
"importHelpers": true,
"target": "es2020",
"target": "ES2022",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2018",
"dom"
]
],
"useDefineForClassFields": false
}
}