[Monitor Dashboard|TRunk]

Topic - Icon:
	change topic.iconUrl to icon
	show it as inner html in sidebars
Create AdminDashboardGuard:
	use it in restricted parts
	check if portal admin, community curator or monitor curator





git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-monitor-portal/trunk/monitor_dashboard@58901 d315682c-612b-4755-9ff5-7f18f6832af3
This commit is contained in:
Argiro Kokogiannaki 2020-06-12 10:46:11 +00:00
parent 210d44764c
commit 09b8683328
13 changed files with 65 additions and 22 deletions

View File

@ -145,7 +145,7 @@ export class AppComponent implements OnInit, OnDestroy {
} }
if (this.adminMenuItems.length == 0) { if (this.adminMenuItems.length == 0) {
//nstructor(id: string, name: string, route: string, items: Item[], icon, open: boolean) { //nstructor(id: string, name: string, route: string, items: Item[], icon, open: boolean) {
this.adminMenuItems.push(new MenuItem("stakeholders", "Manage Stakeholders", "", "/admin", false, [], [], {}, "settings")); this.adminMenuItems.push(new MenuItem("stakeholders", "Manage Stakeholders", "", "/admin", false, [], [], {}, "<i class=\"material-icons md-24\">settings</i>"));
/*let adminOptions = new MenuItem("adminOptions", "Admin Options", "", "", false, [], [], {}) /*let adminOptions = new MenuItem("adminOptions", "Admin Options", "", "", false, [], [], {})
adminOptions.items.push(new MenuItem("pages", "Pages", "", "/pages", false, [], [], {})); adminOptions.items.push(new MenuItem("pages", "Pages", "", "/pages", false, [], [], {}));
adminOptions.items.push(new MenuItem("portals", "Portals", "", "/portals", false, [], [], {})); adminOptions.items.push(new MenuItem("portals", "Portals", "", "/portals", false, [], [], {}));

View File

@ -2,7 +2,7 @@ import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router'; import {RouterModule} from '@angular/router';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {ManageStakeholdersComponent} from "./manageStakeholders.component"; import {ManageStakeholdersComponent} from "./manageStakeholders.component";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
@NgModule({ @NgModule({
imports: [ imports: [
@ -10,7 +10,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
{ {
path: '', path: '',
component: ManageStakeholdersComponent, component: ManageStakeholdersComponent,
canActivate: [LoginGuard], canActivate: [AdminDashboardGuard],
canDeactivate: [PreviousRouteRecorder], canDeactivate: [PreviousRouteRecorder],
data: {hasSidebar: true} data: {hasSidebar: true}
} }

View File

@ -8,7 +8,7 @@ import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/i
import {LoadingModule} from "../openaireLibrary/dashboard/sharedComponents/loading/loading.module"; import {LoadingModule} from "../openaireLibrary/dashboard/sharedComponents/loading/loading.module";
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module"; import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
import {ReactiveFormsModule} from "@angular/forms"; import {ReactiveFormsModule} from "@angular/forms";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
@NgModule({ @NgModule({
declarations: [ManageStakeholdersComponent], declarations: [ManageStakeholdersComponent],
@ -22,7 +22,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
ReactiveFormsModule ReactiveFormsModule
], ],
providers: [ providers: [
LoginGuard, PreviousRouteRecorder, AdminDashboardGuard, PreviousRouteRecorder,
], ],
exports: [ManageStakeholdersComponent] exports: [ManageStakeholdersComponent]
}) })

View File

@ -256,7 +256,7 @@ export class MonitorComponent implements OnInit, OnDestroy, IDeactivateComponent
let topicItem: MenuItem = new MenuItem(topic.alias, topic.name, "", ( let topicItem: MenuItem = new MenuItem(topic.alias, topic.name, "", (
'/' + this.stakeholder.alias + '/' + topic.alias ), '/' + this.stakeholder.alias + '/' + topic.alias ),
null, [], [], {}); null, [], [], {});
topicItem.icon = topic.iconUrl; topicItem.icon = topic.icon;
items.push(topicItem); items.push(topicItem);
} }
}); });

View File

@ -3,7 +3,7 @@ import {RouterModule} from '@angular/router';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {StakeholderComponent} from "./stakeholder.component"; import {StakeholderComponent} from "./stakeholder.component";
import {CanExitGuard} from "../openaireLibrary/utils/can-exit.guard"; import {CanExitGuard} from "../openaireLibrary/utils/can-exit.guard";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
@NgModule({ @NgModule({
imports: [ imports: [
@ -11,7 +11,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
{ {
path: '', path: '',
component: StakeholderComponent, component: StakeholderComponent,
canActivate: [LoginGuard], canActivate: [AdminDashboardGuard],
canDeactivate: [PreviousRouteRecorder, CanExitGuard] canDeactivate: [PreviousRouteRecorder, CanExitGuard]
} }
]) ])

View File

@ -29,8 +29,9 @@
<ng-template ngFor [ngForOf]="stakeholder.topics" let-topic let-i="index"> <ng-template ngFor [ngForOf]="stakeholder.topics" let-topic let-i="index">
<li> <li>
<a [routerLink]="topic.alias"> <a [routerLink]="topic.alias">
<span *ngIf="topic.icon" class="menu_icon"><i <span *ngIf="topic.icon" class="menu_icon">
class="material-icons">{{topic.icon}}</i></span> <span [innerHTML]="satinizeHTML(topic.icon)"></span>
</span>
<div class="menu_title uk-width-expand"> <div class="menu_title uk-width-expand">
{{topic.name}} {{topic.name}}
</div> </div>
@ -119,7 +120,7 @@
<div dashboard-input class="uk-form-row" [formInput]="form.get('description')" <div dashboard-input class="uk-form-row" [formInput]="form.get('description')"
label="Description" type="textarea"> label="Description" type="textarea">
</div> </div>
<div dashboard-input class="uk-form-row" [formInput]="form.get('iconUrl')" <div dashboard-input class="uk-form-row" [formInput]="form.get('icon')"
label="Icon(SVG)" type="textarea"> label="Icon(SVG)" type="textarea">
</div> </div>
<div class="uk-form-row uk-flex uk-flex-middle"> <div class="uk-form-row uk-flex uk-flex-middle">

View File

@ -1,6 +1,6 @@
import {Component, OnDestroy, OnInit, ViewChild} from '@angular/core'; import {Component, OnDestroy, OnInit, ViewChild} from '@angular/core';
import {ActivatedRoute, Router} from '@angular/router'; import {ActivatedRoute, Router} from '@angular/router';
import {Title} from '@angular/platform-browser'; import {DomSanitizer, Title} from '@angular/platform-browser';
import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties'; import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties';
import {ErrorCodes} from '../openaireLibrary/utils/properties/errorCodes'; import {ErrorCodes} from '../openaireLibrary/utils/properties/errorCodes';
@ -42,7 +42,7 @@ export class StakeholderComponent implements OnInit, OnDestroy, IDeactivateCompo
private title: Title, private title: Title,
private layoutService: LayoutService, private layoutService: LayoutService,
private fb: FormBuilder, private fb: FormBuilder,
private stakeholderService: StakeholderService) { private stakeholderService: StakeholderService, private sanitizer: DomSanitizer) {
this.errorCodes = new ErrorCodes(); this.errorCodes = new ErrorCodes();
this.errorMessages = new ErrorMessagesComponent(); this.errorMessages = new ErrorMessagesComponent();
} }
@ -97,7 +97,7 @@ export class StakeholderComponent implements OnInit, OnDestroy, IDeactivateCompo
isPublic: this.fb.control(topic.isPublic), isPublic: this.fb.control(topic.isPublic),
defaultId: this.fb.control(topic.defaultId), defaultId: this.fb.control(topic.defaultId),
categories: this.fb.control(topic.categories), categories: this.fb.control(topic.categories),
iconUrl: this.fb.control(topic.iconUrl) icon: this.fb.control(topic.icon)
}); });
this.subscriptions.push(this.form.get('name').valueChanges.subscribe(value => { this.subscriptions.push(this.form.get('name').valueChanges.subscribe(value => {
let i = 1; let i = 1;
@ -233,4 +233,7 @@ export class StakeholderComponent implements OnInit, OnDestroy, IDeactivateCompo
}); });
}); });
} }
satinizeHTML(html){
return this.sanitizer.bypassSecurityTrustHtml(html);
}
} }

View File

@ -10,7 +10,7 @@ import {StakeholderComponent} from "./stakeholder.component";
import {StakeholderRoutingModule} from "./stakeholder-routing.module"; import {StakeholderRoutingModule} from "./stakeholder-routing.module";
import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/input.module"; import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/input.module";
import {ClickModule} from "../openaireLibrary/utils/click/click.module"; import {ClickModule} from "../openaireLibrary/utils/click/click.module";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
@NgModule({ @NgModule({
imports: [ imports: [
@ -20,7 +20,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
StakeholderComponent StakeholderComponent
], ],
providers: [ providers: [
LoginGuard, PreviousRouteRecorder, AdminDashboardGuard, PreviousRouteRecorder,
PiwikService PiwikService
], ],
exports: [ exports: [

View File

@ -3,7 +3,7 @@ import {RouterModule} from '@angular/router';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {TopicComponent} from "./topic.component"; import {TopicComponent} from "./topic.component";
import {CanExitGuard} from "../openaireLibrary/utils/can-exit.guard"; import {CanExitGuard} from "../openaireLibrary/utils/can-exit.guard";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
@NgModule({ @NgModule({
imports: [ imports: [
@ -11,7 +11,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
{ {
path: '', path: '',
component: TopicComponent, component: TopicComponent,
canActivate: [LoginGuard], canActivate: [AdminDashboardGuard],
canDeactivate: [PreviousRouteRecorder, CanExitGuard] canDeactivate: [PreviousRouteRecorder, CanExitGuard]
} }
]) ])

View File

@ -130,7 +130,7 @@
<div dashboard-input class="uk-form-row" [formInput]="form.get('description')" <div dashboard-input class="uk-form-row" [formInput]="form.get('description')"
label="Description" type="textarea"> label="Description" type="textarea">
</div> </div>
<div *ngIf="form.get('iconUrl')" dashboard-input class="uk-form-row" [formInput]="form.get('iconUrl')" <div *ngIf="form.get('icon')" dashboard-input class="uk-form-row" [formInput]="form.get('icon')"
label="Icon(SVG)" type="textarea"> label="Icon(SVG)" type="textarea">
</div> </div>
<div class="uk-form-row uk-flex uk-flex-middle"> <div class="uk-form-row uk-flex uk-flex-middle">

View File

@ -138,7 +138,7 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
isPublic: this.fb.control(topic.isPublic), isPublic: this.fb.control(topic.isPublic),
defaultId: this.fb.control(topic.defaultId), defaultId: this.fb.control(topic.defaultId),
categories: this.fb.control(topic.categories), categories: this.fb.control(topic.categories),
iconUrl: this.fb.control(topic.iconUrl) icon: this.fb.control(topic.icon)
}); });
this.subscriptions.push(this.form.get('name').valueChanges.subscribe(value => { this.subscriptions.push(this.form.get('name').valueChanges.subscribe(value => {
let i = 1; let i = 1;

View File

@ -13,7 +13,7 @@ import {IndicatorsComponent} from "./indicators.component";
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module"; import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/input.module"; import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/input.module";
import {ClickModule} from "../openaireLibrary/utils/click/click.module"; import {ClickModule} from "../openaireLibrary/utils/click/click.module";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard"; import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
@NgModule({ @NgModule({
imports: [ imports: [
@ -24,7 +24,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
TopicComponent, IndicatorsComponent TopicComponent, IndicatorsComponent
], ],
providers: [ providers: [
LoginGuard, PreviousRouteRecorder, AdminDashboardGuard, PreviousRouteRecorder,
PiwikService PiwikService
], ],
exports: [ exports: [

View File

@ -0,0 +1,39 @@
import {Injectable} from '@angular/core';
import {ActivatedRouteSnapshot, CanActivate, CanLoad, Route, Router, RouterStateSnapshot} from '@angular/router';
import {Observable} from 'rxjs/Observable';
import {filter, map} from "rxjs/operators";
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
import {LoginErrorCodes} from "../openaireLibrary/login/utils/guardHelper.class";
import {Session} from "../openaireLibrary/login/utils/helper.class";
@Injectable()
export class AdminDashboardGuard implements CanActivate, CanLoad {
constructor(private router: Router,
private userManagementService: UserManagementService) {
}
check(path: string): Observable<boolean> | boolean {
if (Session.isLoggedIn()) {
const obs = this.userManagementService.getUserInfo(false).pipe(map(user => {
return (Session.isPortalAdministrator(user) || Session.isCommunityCurator(user) || Session.isMonitorCurator(user));
}));
obs.pipe(filter(isLoggedIn => !isLoggedIn)).subscribe(() => {
this.router.navigate(['/user-info'], {queryParams: {'errorCode': LoginErrorCodes.NOT_ADMIN, path}});
});
return obs;
} else {
this.router.navigate(['/user-info'], {queryParams: {'errorCode': LoginErrorCodes.NOT_LOGIN, path}});
return false;
}
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
return this.check(state.url);
}
canLoad(route: Route): Observable<boolean> | Promise<boolean> | boolean {
return this.check('/' + route.path);
}
}