[Trunk | Library]:

Add components and modules for Deposit First Page (depositFirstPage) - Deposit Search Page (searchDataprovidersToDeposit & searchResultsInDeposit) for new mocks in connect.


git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-services-library/trunk/ng-openaire-library/src/app@56563 d315682c-612b-4755-9ff5-7f18f6832af3
This commit is contained in:
konstantina.galouni 2019-07-15 16:14:27 +00:00
parent a4d51b6d7f
commit 32e2077319
7 changed files with 748 additions and 0 deletions

View File

@ -0,0 +1,247 @@
import {Component, Input} from '@angular/core';
import {Router, ActivatedRoute} from '@angular/router';
import {ErrorCodes} from '../utils/properties/errorCodes';
import{EnvProperties} from '../utils/properties/env-properties';
import {RouterHelper} from '../utils/routerHelper.class';
import {ZenodoInformationClass} from './utils/zenodoInformation.class';
import {ZenodoCommunitiesService} from "../connect/zenodoCommunities/zenodo-communities.service";
import {CommunityService} from "../connect/community/community.service";
import {SearchZenodoCommunitiesService} from "../connect/zenodoCommunities/searchZenodoCommunities.service";
import {FetchZenodoInformation} from "../../deposit/utils/fetchZenodoInformation.class";
import {ConnectHelper} from "../connect/connectHelper";
import {StringUtils} from "../utils/string-utils.class";
import {SearchFields} from "../utils/properties/searchFields";
@Component({
selector: 'deposit-first-page',
template: `
<div class="uk-section uk-margin-top uk-padding-remove-bottom">
<div class="communityPanelBackground uk-margin-top uk-padding-small">
<div class="uk-align-center uk-container uk-container-large uk-margin-top uk-margin-bottom">
<div class="uk-text-center font-41 uk-margin-large-top">
<span class="uk-text-bold">Deposit</span> your research
</div>
<div class="uk-container uk-container-large uk-margin-large-top">
<div class="uk-grid-divider" uk-grid>
<div class="uk-width-1-2@m uk-width-1-1@s">
<p class="uk-margin-auto uk-text-large">How to <span class="uk-text-bold">deposit</span> your research...</p>
<span class="uk-grid">
<span class="uk-margin-top uk-icon"><svg width="30" height="30" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="search"><circle fill="none" stroke="#000" stroke-width="1.1" cx="9" cy="9" r="7"></circle><path fill="none" stroke="#000" stroke-width="1.1" d="M14,14 L18,18 L14,14 Z"></path></svg></span>
<!-- <span class="uk-margin-small-right" uk-icon="search"></span>-->
<span class="uk-width-expand">
<div class="uk-margin-small-bottom">Find the appropriate repository, archive or journal</div>
<div class="uk-text-small">
Find the appropriate thematic repository or archive to deposit your research products of any type (publication, data, software, other) or to include in your data management plan.
Search and browse for OpenAIRE compliant repositories registered in OpenDOAR and re3data.
Looking for Open Access journals? Find those that suits your community among the journals registered in the Directory of Open Access Journals (DOAJ).
</div>
</span>
</span>
<span class="uk-margin-top uk-grid">
<span class="uk-margin-top uk-icon"><svg width="30" height="30" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" data-svg="upload"><polyline fill="none" stroke="#000" points="5 8 9.5 3.5 14 8"></polyline><rect x="3" y="17" width="13" height="1"></rect><line fill="none" stroke="#000" x1="9.5" y1="15" x2="9.5" y2="4"></line></svg></span>
<!-- <span class="uk-margin-small-right" uk-icon="upload"></span>-->
<span class="uk-width-expand">
<div class="uk-margin-small-bottom">Deposit</div>
<div class="uk-text-small">
Find the repository to deposit your research or use the Zenodo communities suggested by the community curators.
</div>
</span>
</span>
<div></div>
</div>
<div class="uk-width-1-2@m uk-width-1-1@s">
<p class="uk-margin-auto-top uk-margin-remove-bottom">
Start by <span class="uk-text-bold">searching</span> repositories
</p>
<div class="uk-margin">
<form class="uk-search uk-search-default uk-width-xlarge@l uk-width-medium@m uk-width-auto">
<!-- <span uk-search-icon class="uk-icon"></span>-->
<button routerLinkActive="uk-link"
routerLink="{{depositRoute}}" [queryParams]="{keyword: keyword}" class="uk-search-icon uk-icon" uk-search-icon>
</button>
<input class="uk-search-input uk-input"
type="search" [(ngModel)]="keyword" name="keyword"
placeholder="{{searchPlaceHolder}}">
</form>
</div>
<div class="uk-width-1-4 uk-text-right">
<hr class="uk-divider-vertical">
<div>OR</div>
<hr class="uk-divider-vertical">
</div>
<div>
<a [queryParams]="{}" routerLinkActive="router-link-active" routerLink="/search-deposit"
type="submit" class="uk-button uk-button-large uk-button-primary uk-padding uk-padding-remove-vertical">
<span><span>Browse all repositories</span><span uk-icon="arrow-right"></span></span>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="uk-section tm-middle uk-container uk-container-large uk-margin-small-top uk-padding-remove-top uk-padding-remove-bottom">
<div class="uk-container uk-container-large uk-margin-bottom border-grey uk-margin-medium-top">
<div class="uk-grid">
<div class="uk-width-1-2 uk-text-center">
<div class="uk-margin-top">
<svg xmlns="http://www.w3.org/2000/svg" width="173" height="56.685" viewBox="0 0 173 56.685"><defs><style>.a{fill:#191919;}</style></defs><path class="a" d="M171.749,22.311a16.158,16.158,0,0,0-3.364-4.953A15.511,15.511,0,0,0,157.4,12.837a15.213,15.213,0,0,0-6.074,1.206,16.4,16.4,0,0,0-2.63,1.424,16.2,16.2,0,0,0-2.325,1.891,14.893,14.893,0,0,0-1.242,1.383,19.241,19.241,0,0,0-1.173,1.7,19.372,19.372,0,0,0-1.482,3.343c.048-1.943.332-4.842,1.482-6.468V3.272a3.081,3.081,0,0,0-.993-2.323,3.251,3.251,0,0,0-5.556,2.323V15.765a17.084,17.084,0,0,0-4.261-2.156,14.8,14.8,0,0,0-4.781-.773,15.314,15.314,0,0,0-6.028,1.206,15.575,15.575,0,0,0-4.959,3.316,16.056,16.056,0,0,0-3.352,4.953c-.063.142-.118.286-.177.43-.056-.144-.111-.288-.173-.43a16.158,16.158,0,0,0-3.364-4.953,15.519,15.519,0,0,0-4.95-3.316,15.795,15.795,0,0,0-12.105,0,16.068,16.068,0,0,0-4.954,3.316,15.182,15.182,0,0,0-3.359,4.953c-.058.136-.109.272-.162.407-.056-.135-.109-.271-.167-.407a16.056,16.056,0,0,0-3.357-4.953,15.532,15.532,0,0,0-4.956-3.316,15.795,15.795,0,0,0-12.105,0,16.084,16.084,0,0,0-4.948,3.316,15.129,15.129,0,0,0-3.366,4.953c-.051.125-.1.253-.148.378-.051-.125-.1-.253-.155-.378a16.165,16.165,0,0,0-3.366-4.953,15.489,15.489,0,0,0-10.979-4.521,15.185,15.185,0,0,0-6.072,1.206,16.01,16.01,0,0,0-4.622,3.017v-.521A3.335,3.335,0,0,0,27.211,13.2H3.837a3.334,3.334,0,0,0,0,6.669h18.37L.658,48.884A3.333,3.333,0,0,0,0,50.872v2.176a3.337,3.337,0,0,0,3.336,3.336H28.214a3.335,3.335,0,0,0,3.324-3.09,15.693,15.693,0,0,0,3.675,2.184,15.189,15.189,0,0,0,6.031,1.207A14.892,14.892,0,0,0,49.857,54.1a15.447,15.447,0,0,0,4.827-5.188v4.5a3.245,3.245,0,0,0,3.277,3.275,3.194,3.194,0,0,0,2.281-.949,3.077,3.077,0,0,0,.991-2.326V41.733h-.012a.087.087,0,0,1,.012-.015h-8.17a3.175,3.175,0,0,0-1.851.558,3.007,3.007,0,0,0-1.161,1.507l-.535,1.1a8.969,8.969,0,0,1-8.271,5.254,9.141,9.141,0,0,1-3.493-.684,8.463,8.463,0,0,1-2.883-1.939,9.963,9.963,0,0,1-1.94-2.888,8.4,8.4,0,0,1-.729-3.447V38.252H61.234V28.34a8.74,8.74,0,0,1,.688-3.442,8.959,8.959,0,0,1,8.355-5.515,9.117,9.117,0,0,1,3.493.687,8.459,8.459,0,0,1,2.883,1.94,10.032,10.032,0,0,1,1.94,2.889,8.36,8.36,0,0,1,.734,3.442V53.409A3.233,3.233,0,0,0,82.6,56.684a3.211,3.211,0,0,0,2.286-.949,3.107,3.107,0,0,0,.986-2.326v-4.5a15.828,15.828,0,0,0,2.482,3.249,15.454,15.454,0,0,0,4.954,3.314,15.671,15.671,0,0,0,12.061,0,16.035,16.035,0,0,0,5-3.314,15.226,15.226,0,0,0,3.359-4.951c.044-.112.087-.225.129-.338.046.113.087.226.134.338a15.068,15.068,0,0,0,3.359,4.951,16.075,16.075,0,0,0,4.951,3.314,15.79,15.79,0,0,0,12.109,0,15.476,15.476,0,0,0,4.946-3.314,16.166,16.166,0,0,0,3.366-4.951c.06-.142.116-.283.173-.426.058.143.111.284.173.426a16.07,16.07,0,0,0,3.359,4.951,15.454,15.454,0,0,0,4.954,3.314,15.671,15.671,0,0,0,12.061,0,16.008,16.008,0,0,0,5-3.314A15.314,15.314,0,0,0,173,41.178V28.341A14.991,14.991,0,0,0,171.749,22.311ZM8.35,49.716,25.794,26.224a16.054,16.054,0,0,0-.143,2.117V41.178A14.759,14.759,0,0,0,26.9,47.211a16.514,16.514,0,0,0,1.366,2.5H8.35ZM50.285,31.7H32.2V28.34a8.738,8.738,0,0,1,.686-3.442,8.951,8.951,0,0,1,8.36-5.515,9.1,9.1,0,0,1,3.486.687,8.423,8.423,0,0,1,2.885,1.94,10.033,10.033,0,0,1,1.94,2.889,8.318,8.318,0,0,1,.729,3.442V31.7Zm58.093,9.48a8.7,8.7,0,0,1-.688,3.447,8.941,8.941,0,0,1-8.352,5.511,9.141,9.141,0,0,1-3.493-.684,8.417,8.417,0,0,1-2.883-1.939,9.917,9.917,0,0,1-1.94-2.888,8.353,8.353,0,0,1-.729-3.447V28.341A8.74,8.74,0,0,1,90.98,24.9a8.935,8.935,0,0,1,1.937-2.889,9.165,9.165,0,0,1,9.9-1.94,8.433,8.433,0,0,1,2.888,1.94,10.129,10.129,0,0,1,1.94,2.889,8.356,8.356,0,0,1,.729,3.442V41.178Zm29.035,0a8.32,8.32,0,0,1-.729,3.447,9.947,9.947,0,0,1-1.94,2.888,8.358,8.358,0,0,1-2.888,1.939,9.337,9.337,0,0,1-7.018,0,9.046,9.046,0,0,1-4.825-4.826,8.735,8.735,0,0,1-.69-3.447V28.341a8.439,8.439,0,0,1,.732-3.442,10.1,10.1,0,0,1,1.94-2.889,8.522,8.522,0,0,1,2.883-1.94,9.152,9.152,0,0,1,3.493-.687,8.985,8.985,0,0,1,8.357,5.515,8.775,8.775,0,0,1,.686,3.442V41.178Zm29.035,0a8.82,8.82,0,0,1-.686,3.447,9.129,9.129,0,0,1-11.85,4.826,8.424,8.424,0,0,1-2.882-1.939,9.946,9.946,0,0,1-1.942-2.888,8.337,8.337,0,0,1-.732-3.447V28.341a8.742,8.742,0,0,1,.69-3.442,8.935,8.935,0,0,1,1.937-2.889,9.169,9.169,0,0,1,9.905-1.94,8.423,8.423,0,0,1,2.885,1.94,10.088,10.088,0,0,1,1.942,2.889,8.356,8.356,0,0,1,.729,3.442V41.178Z"/></svg>
</div>
<div class="uk-margin-top">
<span class="uk-text-bold">Deposit</span> your research <span class="uk-text-bold">immediately</span>
</div>
<a *ngIf="zenodoInformation.shareInZenodoUrl" href="{{zenodoInformation.shareInZenodoUrl}}" type="submit"
class="uk-button uk-button-primary uk-padding uk-padding-remove-vertical uk-margin-medium-top uk-margin-bottom">
<span><span>Related zenodo communities</span><span uk-icon="arrow-right"></span></span>
</a>
<a *ngIf="!zenodoInformation.shareInZenodoUrl" target="_blank" href="{{zenodoInformation.url}}" type="submit"
class="uk-button uk-button-primary uk-padding uk-padding-remove-vertical uk-margin-medium-top uk-margin-bottom">
<span><span>Deposit in Zenodo</span><span uk-icon="arrow-right"></span></span>
</a>
</div>
<div class="uk-width-1-2">
<div class="uk-margin-top">
<div class="uk-text-bold">Research. Shared.</div>
<p>
All research outputs from across all fields of research are welcome! Sciences and Humanities, really! </p>
</div>
<div class="uk-margin-top">
<div class="uk-text-bold">Citeable. Discoverable. </div>
<p>
Uploads gets a Digital Object Identifier (DOI) to make them easily and uniquely citeable.
</p>
</div>
<div class="uk-margin-top">
<div class="uk-text-bold">Funding</div>
<p>
Identify grants, integrated in reporting lines for research funded by the European Commission via OpenAIRE.
</p>
</div>
<div class="uk-margin-top">
<div class="uk-text-bold">Flexible licensing</div>
<p>
Because not everything is under Creative Commons.
</p>
</div>
<div class="uk-margin-top">
<div class="uk-text-bold">Safe</div>
<p>
Your research output is stored safely for the future in the same cloud infrastructure as CERN's own LHC research data.
</p>
</div>
</div>
</div>
</div>
</div>
<div class="uk-section uk-section-muted uk-margin-top uk-margin-bottom uk-padding-remove-bottom uk-padding-remove-top">
<!-- grey-background-->
<div class="uk-margin-top uk-padding-small">
<div class="uk-align-center uk-container uk-container-large uk-margin-top uk-margin-bottom">
<helper position="bottom"></helper>
</div>
</div>
</div>
`
})
export class DepositFirstPageComponent {
public zenodoInformation: ZenodoInformationClass = new ZenodoInformationClass();
fetchZenodoInformation: FetchZenodoInformation;
@Input() compatibility: string = '';
@Input() piwikSiteId = null;
// Type of entity: Publication or Research Data
@Input() requestFor: string = "Publications";
public organization: {"name": string, "url": string};
public organizationId: string = "";
// Id of the new selected organization to be searched
public selectedId: string = "";
@Input() subjectResults: boolean = false;
@Input() subject: string = "";
public status: number;
public warningMessage: string = "";
public parameterNames:string[] =[];
public parameterValues:string[] =[];
public routerHelper:RouterHelper = new RouterHelper();
public errorCodes:ErrorCodes = new ErrorCodes();
sub: any; piwiksub: any;
properties:EnvProperties;
url=null;
public keyword: string;
public depositRoute = "/search-deposit";
public searchPlaceHolder = "Search for repositories by title, country, organization, subject...";
constructor (private _router: Router,
private route: ActivatedRoute,
private _zenodoCommunitieService: ZenodoCommunitiesService,
private _communityService: CommunityService,
private _searchZenodoCommunitiesService: SearchZenodoCommunitiesService) {
this.fetchZenodoInformation = new FetchZenodoInformation(this._zenodoCommunitieService, this._searchZenodoCommunitiesService);
}
ngOnInit() {
this.route.data
.subscribe((data: { envSpecific: EnvProperties }) => {
this.properties = data.envSpecific;
this.route.queryParams.subscribe(params => {
let communityId = ConnectHelper.getCommunityFromDomain(this.properties.domain);
if (!communityId) {
communityId = params['communityId'];
}
if (communityId) {
if (communityId != null && communityId != '') {
this._communityService.getCommunity(this.properties, this.properties.communityAPI + communityId).subscribe(
community => {
let masterZenodoCommunityId = community.zenodoCommunity;
if (masterZenodoCommunityId) {
this.zenodoInformation.shareInZenodoUrl = this.properties.shareInZenodoPage+communityId;
//this.fetchZenodoInformation.getZenodoCommunityNameAndUrlById(masterZenodoCommunityId, this.properties, this.zenodoInformation);
} else {
this.zenodoInformation.url = this.properties.zenodo;
this.zenodoInformation.name = "Zenodo";
}
//this.fetchZenodoInformation.searchNumberOfZCommunities(communityId, this.properties, this.zenodoInformation);
},
error => {
this.handleError("Error getting community with id: " + communityId, error);
}
);
}
}
if (!this.zenodoInformation.shareInZenodoUrl) {
this.zenodoInformation.url = this.properties.zenodo;
}
if (!this.zenodoInformation.name) {
this.zenodoInformation.name = "Zenodo";
}
});
});
}
ngOnDestroy() {}
private handleError(message: string, error) {
console.error("Deposit Result Page: "+message, error);
}
}

View File

@ -0,0 +1,37 @@
/* Common Component of deposit for both research data & ppublications*/
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { RouterModule } from '@angular/router';
import {PiwikServiceModule} from '../utils/piwik/piwikService.module';
import {HelperModule} from '../utils/helper/helper.module';
import {IFrameModule} from '../utils/iframe.module';
import {Schema2jsonldModule} from '../sharedComponents/schema2jsonld/schema2jsonld.module';
import { SEOServiceModule } from '../sharedComponents/SEO/SEOService.module';
import {DepositFirstPageComponent} from "./depositFirstPage.component";
import {ZenodoCommunitiesService} from "../connect/zenodoCommunities/zenodo-communities.service";
import {CommunityService} from "../connect/community/community.service";
import {SearchZenodoCommunitiesService} from "../connect/zenodoCommunities/searchZenodoCommunities.service";
@NgModule({
imports: [
CommonModule, FormsModule,
RouterModule,
PiwikServiceModule,
HelperModule,
IFrameModule, Schema2jsonldModule, SEOServiceModule
],
declarations: [
DepositFirstPageComponent
],
exports: [
DepositFirstPageComponent
],
providers: [
ZenodoCommunitiesService, CommunityService, SearchZenodoCommunitiesService
]
})
export class DepositFirstPageModule { }

View File

@ -0,0 +1,207 @@
import {Component, Input, ViewChild} from '@angular/core';
import {ActivatedRoute} from '@angular/router';
import {Location} from '@angular/common';
import {SearchDataprovidersService} from '../services/searchDataproviders.service';
import {ErrorCodes} from '../utils/properties/errorCodes';
import {ErrorMessagesComponent} from '../utils/errorMessages.component';
import {SearchFields} from '../utils/properties/searchFields';
import {SearchPageComponent } from '../searchPages/searchUtils/searchPage.component';
import {SearchCustomFilter, SearchUtilsClass} from '../searchPages/searchUtils/searchUtils.class';
import {EnvProperties} from '../utils/properties/env-properties';
import {ZenodoInformationClass} from "./utils/zenodoInformation.class";
import {ConnectHelper} from "../connect/connectHelper";
import {PiwikHelper} from "../../utils/piwikHelper";
import {CommunityService} from "../connect/community/community.service";
import {SearchZenodoCommunitiesService} from "../connect/zenodoCommunities/searchZenodoCommunities.service";
import {FetchZenodoInformation} from "../../deposit/utils/fetchZenodoInformation.class";
import {ZenodoCommunitiesService} from "../connect/zenodoCommunities/zenodo-communities.service";
import {StringUtils} from "../utils/string-utils.class";
@Component({
selector: 'search-dataproviders',
template: `
<div class="uk-section uk-margin-top">
<div class="communityPanelBackground uk-margin-top uk-padding-small">
<div class="uk-container uk-container-large uk-margin-small-top uk-margin-small-bottom">
<ul class="uk-breadcrumb">
<li><a class="breadcrumb" routerLinkActive="router-link-active" routerLink="/deposit">Deposit</a></li>
<li><span class="active">Browse repositories</span></li>
</ul>
</div>
</div>
</div>
<search-page pageTitle="Search Content Providers"
formPlaceholderText = "Search for Content Providers"
type="content providers" entityType="dataprovider" [(filters)] = "filters"
[(results)] = "results" [(searchUtils)] = "searchUtils" [baseUrl] = "baseUrl"
(queryChange)="queryChanged($event)"
[csvParams]="csvParams" csvPath="datasources"
[disableForms]="disableForms"
[loadPaging]="loadPaging"
[oldTotalResults]="oldTotalResults"
[piwikSiteId]=piwikSiteId
[usedBy]="'deposit'"
[showMoreFilterValuesInline]=true
[filterValuesNum]=4
[lastIndex]=false>
</search-page>
`
})
export class SearchDataprovidersToDepositComponent {
private errorCodes: ErrorCodes;
private errorMessages: ErrorMessagesComponent;
@Input() piwikSiteId = null;
@Input() customFilter:SearchCustomFilter= null;
public results =[];
public filters =[];
public totalResults:number = 0 ;
public baseUrl:string;
public searchUtils:SearchUtilsClass = new SearchUtilsClass();
public sub: any; public subResults: any;
public _location:Location;
public searchFields:SearchFields = new SearchFields();
public refineFields: string[] = this.searchFields.DEPOSIT_DATASOURCE_REFINE_FIELDS;
public fieldIdsMap= this.searchFields.DEPOSIT_DATASOURCE_FIELDS;
public keywordFields = this.searchFields.DEPOSIT_DATASOURCE_KEYWORD_FIELDS;
public csvParams: string;
public disableForms: boolean = false;
public loadPaging: boolean = true;
public oldTotalResults: number = 0;
pagingLimit = 0;
properties:EnvProperties;
@ViewChild (SearchPageComponent) searchPage : SearchPageComponent ;
constructor (private route: ActivatedRoute, private _searchDataprovidersService: SearchDataprovidersService) {
this.errorCodes = new ErrorCodes();
this.errorMessages = new ErrorMessagesComponent();
this.searchUtils.status = this.errorCodes.LOADING;
this.searchUtils.page =1;
}
public ngOnInit() {
this.route.data
.subscribe((data: { envSpecific: EnvProperties }) => {
this.properties = data.envSpecific;
this.baseUrl = "/search-deposit";//data.envSpecific.searchLinkToDataProviders;
this.pagingLimit = data.envSpecific.pagingLimit;
});
this.searchPage.refineFields = this.refineFields;
this.searchPage.fieldIdsMap = this.fieldIdsMap;
this.searchPage.keywordFields = this.keywordFields;
var firstLoad =true;
this.sub = this.route.queryParams.subscribe(params => {
if(params['page'] && this.searchUtils.page != params['page']) {
this.loadPaging = false;
this.oldTotalResults = this.searchUtils.totalResults;
}
this.searchUtils.keyword = (params['keyword']?params['keyword']:'');
var refine = true;
if(this.searchUtils.page != ((params['page']=== undefined)?1:+params['page']) && this.filters && !firstLoad){
refine = false;
}
firstLoad = false;
this.searchUtils.page = (params['page']=== undefined)?1:+params['page'];
this.searchUtils.size = (params['size']=== undefined)?5:+params['size'];
if(this.searchUtils.size != 5 && this.searchUtils.size != 10 && this.searchUtils.size != 20 && this.searchUtils.size != 50) {
this.searchUtils.size = 5;
}
this.searchPage.customFilter = this.customFilter;
this.searchPage.usedBy = "deposit";
var queryParameters = this.searchPage.getQueryParametersFromUrl(params);
this._getResults(queryParameters, refine, this.searchUtils.page, this.searchUtils.size);
});
}
public ngOnDestroy() {
if(this.sub){
this.sub.unsubscribe();
}
if(this.subResults){
this.subResults.unsubscribe();
}
}
public getResults(keyword:string,refine:boolean, page: number, size: number){
var parameters = "";
if(keyword.length > 0){
//parameters = "q="+ keyword;
if(this.keywordFields.length > 0) {
parameters = "&fq=";
}
for(let i=0; i< this.keywordFields.length ; i++) {
if(i > 0) {
parameters += " or ";
}
let field = this.keywordFields[i];
parameters += field.name+field.equalityOperator+StringUtils.URIEncode(this.searchUtils.keyword);
}
}
this._getResults(parameters,refine,page, size);
}
private _getResults(parameters:string,refine:boolean, page: number, size: number){
if(page > this.pagingLimit) {
size=0;
}
if(page <= this.pagingLimit || this.searchUtils.status == this.errorCodes.LOADING) {
this.csvParams = parameters;
this.searchUtils.status = this.errorCodes.LOADING;
this.disableForms = true;
this.results = [];
this.searchUtils.totalResults = 0;
this.subResults = this._searchDataprovidersService.searchDataprovidersForDepositSearch(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, this.searchPage.getFields(),this.properties, "deposit").subscribe(
data => {
this.searchUtils.totalResults = data[0];
this.results = data[1];
if(refine){
this.filters = data[2];
}
this.searchPage.checkSelectedFilters(this.filters);
this.searchPage.updateBaseUrlWithParameters(this.filters);
this.searchUtils.status = this.errorCodes.DONE;
if(this.searchUtils.totalResults == 0 ){
this.searchUtils.status = this.errorCodes.NONE;
}
this.disableForms = false;
if(this.searchUtils.status == this.errorCodes.DONE) {
// Page out of limit!!!
let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size);
if(!(Number.isInteger(totalPages))) {
totalPages = (parseInt(totalPages, 10) + 1);
}
if(totalPages < page) {
this.searchUtils.totalResults = 0;
this.searchUtils.status = this.errorCodes.OUT_OF_BOUND;
}
}
},
err => {
this.handleError("Error getting content providers", err);
this.searchUtils.status = this.errorMessages.getErrorCode(err.status);
this.disableForms = false;
}
);
}
}
public queryChanged($event) {
this.loadPaging = true;
}
private handleError(message: string, error) {
console.error("Content Providers simple Search Page: "+message, error);
}
}

View File

@ -0,0 +1,32 @@
import { NgModule} from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { RouterModule } from '@angular/router';
import{SearchDataprovidersToDepositComponent} from './searchDataprovidersToDeposit.component';
import {SearchResultsModule } from '../searchPages/searchUtils/searchResults.module';
import {DataProvidersServiceModule} from '../services/dataProvidersService.module';
import {SearchFormModule} from '../searchPages/searchUtils/searchForm.module';
import {SearchPageModule} from '../searchPages/searchUtils/searchPage.module';
import {FreeGuard} from'../login/freeGuard.guard';
import {IsRouteEnabled} from '../error/isRouteEnabled.guard';
@NgModule({
imports: [
CommonModule, FormsModule,
RouterModule,
DataProvidersServiceModule,
SearchFormModule, SearchResultsModule, SearchPageModule
],
declarations: [
SearchDataprovidersToDepositComponent
],
providers:[FreeGuard, IsRouteEnabled],
exports: [
SearchDataprovidersToDepositComponent
]
})
export class SearchDataprovidersToDepositModule { }

View File

@ -0,0 +1,81 @@
<errorMessages *ngIf="status != errorCodes.NONE" [status]="[status]" [type]="'results'"></errorMessages>
<div *ngIf="status == errorCodes.NONE" class="uk-text-center uk-align-center uk-width-3-5">
<p class="uk-text-large uk-text-muted uk-margin">There are no repositories for your preferences</p>
<p class="uk-text-large uk-text-muted">We suggest to deposit your research in</p>
<!-- <a href="{{zenodoInformation.url}}" target="_blank" class="custom-external custom-icon">{{zenodoInformation.name}}</a>-->
<svg xmlns="http://www.w3.org/2000/svg" width="173" height="56.685" viewBox="0 0 173 56.685"><defs><style>.a{fill:#191919;}</style></defs><path class="a" d="M171.749,22.311a16.158,16.158,0,0,0-3.364-4.953A15.511,15.511,0,0,0,157.4,12.837a15.213,15.213,0,0,0-6.074,1.206,16.4,16.4,0,0,0-2.63,1.424,16.2,16.2,0,0,0-2.325,1.891,14.893,14.893,0,0,0-1.242,1.383,19.241,19.241,0,0,0-1.173,1.7,19.372,19.372,0,0,0-1.482,3.343c.048-1.943.332-4.842,1.482-6.468V3.272a3.081,3.081,0,0,0-.993-2.323,3.251,3.251,0,0,0-5.556,2.323V15.765a17.084,17.084,0,0,0-4.261-2.156,14.8,14.8,0,0,0-4.781-.773,15.314,15.314,0,0,0-6.028,1.206,15.575,15.575,0,0,0-4.959,3.316,16.056,16.056,0,0,0-3.352,4.953c-.063.142-.118.286-.177.43-.056-.144-.111-.288-.173-.43a16.158,16.158,0,0,0-3.364-4.953,15.519,15.519,0,0,0-4.95-3.316,15.795,15.795,0,0,0-12.105,0,16.068,16.068,0,0,0-4.954,3.316,15.182,15.182,0,0,0-3.359,4.953c-.058.136-.109.272-.162.407-.056-.135-.109-.271-.167-.407a16.056,16.056,0,0,0-3.357-4.953,15.532,15.532,0,0,0-4.956-3.316,15.795,15.795,0,0,0-12.105,0,16.084,16.084,0,0,0-4.948,3.316,15.129,15.129,0,0,0-3.366,4.953c-.051.125-.1.253-.148.378-.051-.125-.1-.253-.155-.378a16.165,16.165,0,0,0-3.366-4.953,15.489,15.489,0,0,0-10.979-4.521,15.185,15.185,0,0,0-6.072,1.206,16.01,16.01,0,0,0-4.622,3.017v-.521A3.335,3.335,0,0,0,27.211,13.2H3.837a3.334,3.334,0,0,0,0,6.669h18.37L.658,48.884A3.333,3.333,0,0,0,0,50.872v2.176a3.337,3.337,0,0,0,3.336,3.336H28.214a3.335,3.335,0,0,0,3.324-3.09,15.693,15.693,0,0,0,3.675,2.184,15.189,15.189,0,0,0,6.031,1.207A14.892,14.892,0,0,0,49.857,54.1a15.447,15.447,0,0,0,4.827-5.188v4.5a3.245,3.245,0,0,0,3.277,3.275,3.194,3.194,0,0,0,2.281-.949,3.077,3.077,0,0,0,.991-2.326V41.733h-.012a.087.087,0,0,1,.012-.015h-8.17a3.175,3.175,0,0,0-1.851.558,3.007,3.007,0,0,0-1.161,1.507l-.535,1.1a8.969,8.969,0,0,1-8.271,5.254,9.141,9.141,0,0,1-3.493-.684,8.463,8.463,0,0,1-2.883-1.939,9.963,9.963,0,0,1-1.94-2.888,8.4,8.4,0,0,1-.729-3.447V38.252H61.234V28.34a8.74,8.74,0,0,1,.688-3.442,8.959,8.959,0,0,1,8.355-5.515,9.117,9.117,0,0,1,3.493.687,8.459,8.459,0,0,1,2.883,1.94,10.032,10.032,0,0,1,1.94,2.889,8.36,8.36,0,0,1,.734,3.442V53.409A3.233,3.233,0,0,0,82.6,56.684a3.211,3.211,0,0,0,2.286-.949,3.107,3.107,0,0,0,.986-2.326v-4.5a15.828,15.828,0,0,0,2.482,3.249,15.454,15.454,0,0,0,4.954,3.314,15.671,15.671,0,0,0,12.061,0,16.035,16.035,0,0,0,5-3.314,15.226,15.226,0,0,0,3.359-4.951c.044-.112.087-.225.129-.338.046.113.087.226.134.338a15.068,15.068,0,0,0,3.359,4.951,16.075,16.075,0,0,0,4.951,3.314,15.79,15.79,0,0,0,12.109,0,15.476,15.476,0,0,0,4.946-3.314,16.166,16.166,0,0,0,3.366-4.951c.06-.142.116-.283.173-.426.058.143.111.284.173.426a16.07,16.07,0,0,0,3.359,4.951,15.454,15.454,0,0,0,4.954,3.314,15.671,15.671,0,0,0,12.061,0,16.008,16.008,0,0,0,5-3.314A15.314,15.314,0,0,0,173,41.178V28.341A14.991,14.991,0,0,0,171.749,22.311ZM8.35,49.716,25.794,26.224a16.054,16.054,0,0,0-.143,2.117V41.178A14.759,14.759,0,0,0,26.9,47.211a16.514,16.514,0,0,0,1.366,2.5H8.35ZM50.285,31.7H32.2V28.34a8.738,8.738,0,0,1,.686-3.442,8.951,8.951,0,0,1,8.36-5.515,9.1,9.1,0,0,1,3.486.687,8.423,8.423,0,0,1,2.885,1.94,10.033,10.033,0,0,1,1.94,2.889,8.318,8.318,0,0,1,.729,3.442V31.7Zm58.093,9.48a8.7,8.7,0,0,1-.688,3.447,8.941,8.941,0,0,1-8.352,5.511,9.141,9.141,0,0,1-3.493-.684,8.417,8.417,0,0,1-2.883-1.939,9.917,9.917,0,0,1-1.94-2.888,8.353,8.353,0,0,1-.729-3.447V28.341A8.74,8.74,0,0,1,90.98,24.9a8.935,8.935,0,0,1,1.937-2.889,9.165,9.165,0,0,1,9.9-1.94,8.433,8.433,0,0,1,2.888,1.94,10.129,10.129,0,0,1,1.94,2.889,8.356,8.356,0,0,1,.729,3.442V41.178Zm29.035,0a8.32,8.32,0,0,1-.729,3.447,9.947,9.947,0,0,1-1.94,2.888,8.358,8.358,0,0,1-2.888,1.939,9.337,9.337,0,0,1-7.018,0,9.046,9.046,0,0,1-4.825-4.826,8.735,8.735,0,0,1-.69-3.447V28.341a8.439,8.439,0,0,1,.732-3.442,10.1,10.1,0,0,1,1.94-2.889,8.522,8.522,0,0,1,2.883-1.94,9.152,9.152,0,0,1,3.493-.687,8.985,8.985,0,0,1,8.357,5.515,8.775,8.775,0,0,1,.686,3.442V41.178Zm29.035,0a8.82,8.82,0,0,1-.686,3.447,9.129,9.129,0,0,1-11.85,4.826,8.424,8.424,0,0,1-2.882-1.939,9.946,9.946,0,0,1-1.942-2.888,8.337,8.337,0,0,1-.732-3.447V28.341a8.742,8.742,0,0,1,.69-3.442,8.935,8.935,0,0,1,1.937-2.889,9.169,9.169,0,0,1,9.905-1.94,8.423,8.423,0,0,1,2.885,1.94,10.088,10.088,0,0,1,1.942,2.889,8.356,8.356,0,0,1,.729,3.442V41.178Z"/></svg>
<p>The OpenAIRE Catch-all repository hosted at CERN cloud infrastructure. Whatever your field of research is, you can deposit any type of research product, select the proper license, ask for a DOI and link it to the funding projects for easy reporting.</p>
<a *ngIf="zenodoInformation.shareInZenodoUrl" href="{{zenodoInformation.shareInZenodoUrl}}" type="submit"
class="uk-button portal-button uk-padding uk-padding-remove-vertical uk-margin-small-left">
<span><span>Related zenodo communities</span><span uk-icon="arrow-right"></span></span>
</a>
<a *ngIf="!zenodoInformation.shareInZenodoUrl" target="_blank" href="{{zenodoInformation.url}}" type="submit"
class="uk-button portal-button uk-padding uk-padding-remove-vertical uk-margin-small-left">
<span><span>Deposit in Zenodo</span><span uk-icon="arrow-right"></span></span>
</a>
</div>
<ul [class]="'uk-margin-top uk-list uk-margin '+custom_class">
<li *ngFor="let result of results" class="uk-animation-fade">
<div class=" uk-card uk-card-small uk-card-default uk-card-body uk-padding-remove-horizontal">
<h3 class="uk-card-title uk-margin-remove uk-padding uk-padding-remove-vertical">
<div [title] = result.title.accessMode class="uk-h5 uk-grid uk-margin-small-bottom">
<a *ngIf="result.id && !result.compatibilityUNKNOWN" class="uk-width-expand uk-text-bold uk-flex uk-flex-middle"
[queryParams]="routerHelper.createQueryParam(urlParam,result.id)" routerLinkActive="router-link-active" routerLink="/search/{{type}}">
<p *ngIf="result['title'].name || result.acronym"><span *ngIf="result.acronym">{{result.acronym}}</span><span *ngIf="result.acronym && result['title'].name">-</span><span *ngIf="result['title'].name" [innerHTML]="result['title'].name"></span><span *ngIf="result.code"> ({{result.code}})</span></p>
<p *ngIf="!result['title'].name && !result.acronym">[no title available]<span *ngIf="result.code"> ({{result.code}})</span></p>
</a>
<div *ngIf="!result.id || result.compatibilityUNKNOWN" class="uk-width-expand uk-text-bold uk-flex uk-flex-middle">
<p *ngIf="result['title'].name || result.acronym"><span *ngIf="result.acronym">{{result.acronym}}</span><span *ngIf="result.acronym && result['title'].name">-</span><span *ngIf="result['title'].name" [innerHTML]="result['title'].name"></span><span *ngIf="result.code"> ({{result.code}})</span></p>
<p *ngIf="!result['title'].name && !result.acronym">[no title available]<span *ngIf="result.code"> ({{result.code}})</span></p>
</div>
<span class="uk-width-expand uk-flex uk-flex-bottom uk-flex-right">
<a *ngIf="result['websiteURL']" href="{{result['websiteURL']}}" target="_blank" type="submit" class="uk-float-right uk-button portal-button uk-padding uk-padding-remove-vertical uk-margin-small-left">
<span><span>Visit repository to deposit</span><span uk-icon="arrow-right"></span></span>
<!-- <span class="uk-button-text ">Visit repository to deposit</span>-->
</a>
</span>
</div>
</h3>
<hr>
<div class="uk-padding uk-padding-remove-vertical">
<span *ngIf="result['type'] != undefined && result['type'] != ''" class="uk-label custom-label label-blue label-dataprovider" title="Type"> {{result['type']}}</span>{{' '}}
<span *ngIf="result['compatibility'] != undefined && result['compatibility'] != '' && result['compatibility'] != 'not available'" class="uk-label custom-label label-compatibility" title="Compatibility">{{result.compatibility}}</span>{{' '}}
<span *ngIf="result['compatibility'] != undefined && result['compatibility'] != '' && result['compatibility'] == 'not available'" class="uk-label custom-label label-danger" title="Compatibility">NOT OPENAIRE COMPATIBLE</span>{{' '}}
<div class="uk-margin-top" *ngIf="result['countries'] && result['countries'].length > 0">
<div class="uk-text-muted">Countries</div>
<span *ngFor="let country of result['countries'].slice(0,10) let i = index">{{country}}{{(i < ( result['countries'].slice(0,10).length-1))?"; ":""}}{{(i == result['countries'].slice(0,10).length-1 && result['countries'].length > 10)?"...":""}}</span>
</div>
<div class="uk-margin-top" *ngIf="result['organizations'] != undefined && result['organizations'].length > 0">
<div class="uk-text-muted">Organizations</div>
<div>
<span *ngFor="let organization of result['organizations'].slice(0,10) let i=index">
<a *ngIf="organization.id && !result.compatibilityUNKNOWN" [queryParams]="{organizationId: organization.id}" routerLinkActive="router-link-active" routerLink="/search/organization">
<u>{{organization.name}}</u>
</a>
<span *ngIf="!organization.id || result.compatibilityUNKNOWN">{{organization.name}}</span>
<span *ngIf="(i < result['organizations'].length-1) && (i < 9)">;{{" "}}</span>
</span>
<span *ngIf="result['organizations'].length > 10">...</span>
</div>
</div>
<div class="uk-margin-top" *ngIf="result['subjects'] && result['subjects'].length > 0">
<div class="uk-text-muted">Subjects</div>
<span *ngFor="let subject of result['subjects'].slice(0,10) let i = index">{{subject}}{{(i < ( result['subjects'].slice(0,10).length-1))?"; ":""}}{{(i == result['subjects'].slice(0,10).length-1 && result['subjects'].length > 10)?"...":""}}</span>
</div>
<div class="uk-margin-top" *ngIf="result['OAIPMHURL'] != undefined && result['OAIPMHURL'] != ''">
<div class="uk-text-muted">OAI-PMH</div>
<span>
<a href="{{result['OAIPMHURL']}}" target="_blank" class="custom-external custom-icon">
<u>{{result['OAIPMHURL']}}</u>
</a>
</span>
</div>
</div>
<!-- <p>Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>-->
</div>
</li>
</ul>

View File

@ -0,0 +1,119 @@
import {Component, Input} from '@angular/core';
import {SearchResult} from '../utils/entities/searchResult';
import {ErrorCodes} from '../utils/properties/errorCodes';
import {RouterHelper} from '../utils/routerHelper.class';
import{EnvProperties} from '../utils/properties/env-properties';
import {ZenodoCommunitiesService} from "../connect/zenodoCommunities/zenodo-communities.service";
import {CommunityService} from "../connect/community/community.service";
import {SearchZenodoCommunitiesService} from "../connect/zenodoCommunities/searchZenodoCommunities.service";
import {ZenodoInformationClass} from "./utils/zenodoInformation.class";
import {FetchZenodoInformation} from "../../deposit/utils/fetchZenodoInformation.class";
import {ConnectHelper} from "../connect/connectHelper";
import {PiwikHelper} from "../../utils/piwikHelper";
import {ActivatedRoute} from "@angular/router";
@Component({
selector: 'deposit-result',
templateUrl:'searchResultsInDeposit.component.html'
})
export class SearchResultsInDepositComponent {
@Input() results: SearchResult[];
@Input() status: number;
@Input() type: string;
@Input() showLoading: boolean = false;
@Input() showSubjects: boolean = false;
@Input() showOrganizations: boolean = true;
@Input() custom_class: string = "search-results";
@Input() properties:EnvProperties;
public urlParam: string;
public linkToAdvancedSearchPage: string;
public errorCodes:ErrorCodes = new ErrorCodes();
public routerHelper:RouterHelper = new RouterHelper();
public errorMessage: string = "No results found";
public zenodoInformation: ZenodoInformationClass = new ZenodoInformationClass();
fetchZenodoInformation: FetchZenodoInformation;
constructor (private route: ActivatedRoute,
private _ΖenodoCommunitieService: ZenodoCommunitiesService,
private _communityService: CommunityService,
private _searchZenodoCommunitiesService: SearchZenodoCommunitiesService) {
this.fetchZenodoInformation = new FetchZenodoInformation(this._ΖenodoCommunitieService, this._searchZenodoCommunitiesService);
}
ngOnInit() {
if(this.type == "publication") {
this.linkToAdvancedSearchPage = this.properties.searchLinkToAdvancedPublications;
this.urlParam = "articleId";
} else if(this.type == "dataset") {
this.linkToAdvancedSearchPage = this.properties.searchLinkToAdvancedDatasets;
this.urlParam = "datasetId";
} else if(this.type == "software") {
this.linkToAdvancedSearchPage = this.properties.searchLinkToAdvancedSoftware;
this.urlParam = "softwareId";
} else if(this.type == "other") {
this.linkToAdvancedSearchPage = this.properties.searchLinkToAdvancedOrps;
this.urlParam = "orpId";
} else if(this.type == "project") {
this.linkToAdvancedSearchPage = this.properties.searchLinkToAdvancedProjects;
this.urlParam = "projectId";
} else if(this.type == "organization") {
this.linkToAdvancedSearchPage = this.properties.searchLinkToAdvancedOrganizations;
this.urlParam = "organizationId";
} else if(this.type == "dataprovider") {
this.linkToAdvancedSearchPage = this.properties.searchLinkToAdvancedDataProviders;
this.urlParam = "datasourceId";
}
this.route.queryParams.subscribe(params => {
let communityId = ConnectHelper.getCommunityFromDomain(this.properties.domain);
if (!communityId) {
communityId = params['communityId'];
}
if (communityId) {
if (communityId != null && communityId != '') {
this._communityService.getCommunity(this.properties, this.properties.communityAPI + communityId).subscribe(
community => {
var community = community;
var masterZenodoCommunityId = community.zenodoCommunity;
if (masterZenodoCommunityId) {
this.zenodoInformation.shareInZenodoUrl = this.properties.shareInZenodoPage+communityId;
//this.fetchZenodoInformation.getZenodoCommunityNameAndUrlById(masterZenodoCommunityId, this.properties, this.zenodoInformation);
} else {
this.zenodoInformation.url = this.properties.zenodo;
this.zenodoInformation.name = "Zenodo";
}
//this.fetchZenodoInformation.searchNumberOfZCommunities(communityId, this.properties, this.zenodoInformation);
},
error => {
this.handleError("Error getting community with id: " + communityId, error);
}
);
}
}
if (!this.zenodoInformation.shareInZenodoUrl) {
this.zenodoInformation.url = this.properties.zenodo;
}
if (!this.zenodoInformation.name) {
this.zenodoInformation.name = "Zenodo";
}
});
}
public quote(params: string):string {
return '"'+params+'"';
}
private handleError(message: string, error) {
console.error("search Results in Deposit page: "+message, error);
}
}

View File

@ -0,0 +1,25 @@
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {FormsModule} from '@angular/forms';
import {RouterModule} from '@angular/router';
import {ErrorMessagesModule} from '../utils/errorMessages.module';
import {SearchResultsInDepositComponent} from './searchResultsInDeposit.component';
import {ApprovedByCommunityModule} from '../connect/approvedByCommunity/approved.module';
@NgModule({
imports: [
CommonModule, FormsModule,
RouterModule, ErrorMessagesModule,
ApprovedByCommunityModule
],
declarations: [
SearchResultsInDepositComponent
],
providers:[
],
exports: [
SearchResultsInDepositComponent
]
})
export class SearchResultsInDepositModule { }