2019-04-08 14:17:39 +02:00
import { Component , Input , Output , EventEmitter } from '@angular/core' ;
import { ViewChild , ChangeDetectionStrategy } from '@angular/core' ;
import { ViewEncapsulation } from '@angular/core' ;
import { ActivatedRoute , Router } from '@angular/router' ;
import { Location } from '@angular/common' ;
import { Title , Meta } from '@angular/platform-browser' ;
2018-03-14 14:28:45 +01:00
2019-04-08 14:17:39 +02:00
import { Observable } from 'rxjs/Observable' ;
2018-04-11 13:24:57 +02:00
2018-01-26 16:00:07 +01:00
import "rxjs/add/observable/zip" ;
2018-03-06 14:54:17 +01:00
2019-04-08 14:17:39 +02:00
import { ConnectHelper } from '../openaireLibrary/connect/connectHelper' ;
import { EnvProperties } from '../openaireLibrary/utils/properties/env-properties' ;
import { ConfigurationService } from '../openaireLibrary/utils/configuration/configuration.service' ;
import { CommunitiesService } from '../openaireLibrary/connect/communities/communities.service' ;
import { SubscribeService } from '../openaireLibrary/utils/subscribe/subscribe.service' ;
import { CommunityInfo } from '../openaireLibrary/connect/community/communityInfo' ;
import { PiwikService } from '../openaireLibrary/utils/piwik/piwik.service' ;
import { Session } from '../openaireLibrary/login/utils/helper.class' ;
import { StringUtils } from '../openaireLibrary/utils/string-utils.class' ;
import { ErrorCodes } from '../openaireLibrary/utils/properties/errorCodes' ;
import { ErrorMessagesComponent } from '../openaireLibrary/utils/errorMessages.component' ;
2018-03-14 14:28:45 +01:00
2018-01-26 16:00:07 +01:00
@Component ( {
selector : 'communities' ,
templateUrl : 'communities.component.html' ,
} )
2018-03-14 14:28:45 +01:00
2018-01-26 16:00:07 +01:00
export class CommunitiesComponent {
public piwiksub : any ;
public subfunders : any ;
public pageTitle = "OpenAIRE"
2018-02-27 11:25:34 +01:00
public communitiesResults = null ;
2018-10-05 01:10:13 +02:00
public communitiesToShow = null ;
2018-02-27 11:25:34 +01:00
2019-04-08 14:17:39 +02:00
public researchCommunities = [ ] ;
public researchInitiatives = [ ] ;
public subscriberOfCommunities = [ ] ;
public managerOfCommunities = [ ] ;
// Message variables
public status : number ;
public subscriberOfCommunitiesStatus : number ;
public loading : boolean = true ;
public errorCodes : ErrorCodes ;
private errorMessages : ErrorMessagesComponent ;
2018-04-11 13:24:57 +02:00
properties :EnvProperties ;
2018-10-05 01:10:13 +02:00
public keyword :string = "" ;
public type : string = "all" ;
2018-01-26 16:00:07 +01:00
constructor (
2018-03-14 14:28:45 +01:00
private route : ActivatedRoute ,
2018-01-26 16:00:07 +01:00
private _router : Router ,
2018-04-11 13:24:57 +02:00
private location : Location ,
private _meta : Meta ,
private _title : Title ,
2018-03-06 14:54:17 +01:00
private _piwikService :PiwikService ,
private _communitiesService :CommunitiesService ,
2019-04-08 14:17:39 +02:00
private _subscribeService : SubscribeService ,
2018-04-11 13:24:57 +02:00
private config : ConfigurationService ) {
2019-04-08 14:17:39 +02:00
var description = "OpenAIRE - Connect, Community Dashboard, research community" ;
var title = "OpenAIRE - Connect" ;
this . _meta . updateTag ( { content :description } , "name='description'" ) ;
this . _meta . updateTag ( { content :description } , "property='og:description'" ) ;
this . _meta . updateTag ( { content :title } , "property='og:title'" ) ;
this . _title . setTitle ( title ) ;
this . errorCodes = new ErrorCodes ( ) ;
this . errorMessages = new ErrorMessagesComponent ( ) ;
this . status = this . errorCodes . LOADING ;
this . subscriberOfCommunitiesStatus = this . errorCodes . LOADING ;
}
public ngOnInit() {
this . route . data
. subscribe ( ( data : { envSpecific : EnvProperties } ) = > {
this . properties = data . envSpecific ;
var url = data . envSpecific . baseLink + this . _router . url
this . _meta . updateTag ( { content :url } , "property='og:url'" ) ;
if ( this . properties . enablePiwikTrack && ( typeof document !== 'undefined' ) ) {
this . piwiksub = this . _piwikService . trackView ( this . properties , "OpenAIRE Connect" , this . properties . piwikSiteId ) . subscribe ( ) ;
}
2018-01-26 16:00:07 +01:00
2019-04-08 14:17:39 +02:00
this . getCommunities ( ) ;
} ) ;
}
public getCommunities() {
this . loading = true ;
this . status = this . errorCodes . LOADING ;
this . subscriberOfCommunitiesStatus = this . errorCodes . LOADING ;
this . researchCommunities = [ ] ;
this . researchInitiatives = [ ] ;
this . subscriberOfCommunities = [ ] ;
this . managerOfCommunities = [ ] ;
this . _communitiesService . getCommunities ( this . properties , this . properties . communitiesAPI ) . subscribe (
communitiesResults = > {
//this.communitiesResults = communitiesResults;
//this.communitiesToShow = this.communitiesResults.slice();
//console.log(communitiesResults);
var mail = Session . getUserEmail ( ) ;
communitiesResults . forEach ( ( community , index ) = > {
let showCommunity : boolean = true ;
let isManager : boolean = false ;
let isSubscriber : boolean = false ;
if ( community [ 'status' ] == "hidden" ) {
showCommunity = false ;
} else if ( community [ 'status' ] == "manager" ) {
if ( mail == null ) { // no user
showCommunity = false ;
} else if ( Session . isCommunityCurator ( ) || Session . isPortalAdministrator ( ) ) {
isManager = true ;
} else if ( community . managers . indexOf ( mail ) != - 1 ) {
isManager = true ;
} else {
showCommunity = false ;
}
}
2018-02-12 12:41:40 +01:00
2019-04-08 14:17:39 +02:00
if ( showCommunity ) {
if ( community . type == "community" ) {
this . researchCommunities . push ( community ) ;
} else if ( community . type == "ri" ) {
this . researchInitiatives . push ( community ) ;
}
2018-02-27 11:25:34 +01:00
2019-04-08 14:17:39 +02:00
if ( isManager ) {
this . managerOfCommunities . push ( community ) ;
}
}
this . status = this . errorCodes . DONE ;
if ( mail != null && showCommunity && ! isManager ) {
this . _subscribeService . isSubscribedToCommunity ( community . communityId , mail , this . properties . adminToolsAPIURL ) . subscribe (
res = > {
isSubscriber = res ;
if ( isSubscriber ) {
this . subscriberOfCommunities . push ( community ) ;
}
this . subscriberOfCommunitiesStatus = this . errorCodes . DONE ;
this . loading = false ;
} ,
error = > {
this . handleError ( "Error getting response if email: " + mail + " is subscribed to community with id: " + community . communityId , error , this . subscriberOfCommunitiesStatus ) ;
this . loading = false ;
} ) ;
} else {
this . subscriberOfCommunitiesStatus = this . errorCodes . DONE ;
this . loading = false ;
}
} ) ;
} ,
error = > {
this . handleError ( "Error getting communities" , error , status ) ;
this . subscriberOfCommunitiesStatus = this . errorCodes . DONE ;
this . loading = false ;
2018-02-27 11:25:34 +01:00
}
2019-04-08 14:17:39 +02:00
) ;
}
public quote ( param : string ) : string {
return StringUtils . quote ( param ) ;
}
public ngOnDestroy() {
if ( this . piwiksub ) {
this . piwiksub . unsubscribe ( ) ;
}
}
2018-03-22 16:38:42 +01:00
isProduction ( ) : boolean {
2019-02-18 16:15:53 +01:00
return this . properties . environment != "development" ;
2018-03-22 16:38:42 +01:00
}
getProductionPrefix ( ) : string {
2019-02-18 16:15:53 +01:00
return ( this . properties . environment == "beta" ) ? "beta." : ""
2018-03-22 16:38:42 +01:00
}
2018-05-03 13:57:19 +02:00
showCommunity ( community ) : boolean {
if ( community [ 'status' ] == "hidden" ) {
return false ;
} else if ( community [ 'status' ] == "manager" ) {
var mail = Session . getUserEmail ( ) ;
if ( mail == null ) { // no user
return false ;
} else if ( Session . isCommunityCurator ( ) || Session . isPortalAdministrator ( ) ) {
return true ;
} else if ( community . managers . indexOf ( mail ) != - 1 ) {
return true ;
}
return false ;
}
return true ;
2018-10-05 01:10:13 +02:00
}
2019-04-08 14:17:39 +02:00
2018-10-05 01:10:13 +02:00
existsIn ( word , keyword ) : boolean {
if ( word != null && ( keyword == "" || word . toLowerCase ( ) . indexOf ( keyword . toLowerCase ( ) ) != - 1 ) ) {
return true ;
}
return false ;
}
isType ( communityType ) : boolean {
if ( this . type == "all" || communityType == this . type ) {
return true ;
}
return false ;
}
searchChanged ( ) {
this . communitiesToShow = [ ] ;
for ( var i = 0 ; i < this.communitiesResults.length ; i + + ) {
if ( ( this . existsIn ( this . communitiesResults [ i ] . description , this . keyword ) ||
this . existsIn ( this . communitiesResults [ i ] . title , this . keyword ) ||
this . existsIn ( this . communitiesResults [ i ] . shortTitle , this . keyword ) )
&& this . isType ( this . communitiesResults [ i ] . type ) ) {
this . communitiesToShow . push ( this . communitiesResults [ i ] ) ;
}
}
2018-05-03 13:57:19 +02:00
}
2019-02-19 13:17:53 +01:00
2019-04-08 14:17:39 +02:00
private handleError ( message : string , error , status ) {
var code = "" ;
if ( ! error . status ) {
var error = error . json ( ) ;
code = error . code ;
} else {
code = error . status ;
}
status = this . errorMessages . getErrorCode ( code ) ;
console . error ( "Communities (component): " + message , error ) ;
}
2018-01-26 16:00:07 +01:00
}