[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) {
//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, [], [], {})
adminOptions.items.push(new MenuItem("pages", "Pages", "", "/pages", 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 {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {ManageStakeholdersComponent} from "./manageStakeholders.component";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
@NgModule({
imports: [
@ -10,7 +10,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
{
path: '',
component: ManageStakeholdersComponent,
canActivate: [LoginGuard],
canActivate: [AdminDashboardGuard],
canDeactivate: [PreviousRouteRecorder],
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 {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
import {ReactiveFormsModule} from "@angular/forms";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
@NgModule({
declarations: [ManageStakeholdersComponent],
@ -22,7 +22,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
ReactiveFormsModule
],
providers: [
LoginGuard, PreviousRouteRecorder,
AdminDashboardGuard, PreviousRouteRecorder,
],
exports: [ManageStakeholdersComponent]
})

View File

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

View File

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

View File

@ -29,8 +29,9 @@
<ng-template ngFor [ngForOf]="stakeholder.topics" let-topic let-i="index">
<li>
<a [routerLink]="topic.alias">
<span *ngIf="topic.icon" class="menu_icon"><i
class="material-icons">{{topic.icon}}</i></span>
<span *ngIf="topic.icon" class="menu_icon">
<span [innerHTML]="satinizeHTML(topic.icon)"></span>
</span>
<div class="menu_title uk-width-expand">
{{topic.name}}
</div>
@ -119,7 +120,7 @@
<div dashboard-input class="uk-form-row" [formInput]="form.get('description')"
label="Description" type="textarea">
</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">
</div>
<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 {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 {ErrorCodes} from '../openaireLibrary/utils/properties/errorCodes';
@ -42,7 +42,7 @@ export class StakeholderComponent implements OnInit, OnDestroy, IDeactivateCompo
private title: Title,
private layoutService: LayoutService,
private fb: FormBuilder,
private stakeholderService: StakeholderService) {
private stakeholderService: StakeholderService, private sanitizer: DomSanitizer) {
this.errorCodes = new ErrorCodes();
this.errorMessages = new ErrorMessagesComponent();
}
@ -97,7 +97,7 @@ export class StakeholderComponent implements OnInit, OnDestroy, IDeactivateCompo
isPublic: this.fb.control(topic.isPublic),
defaultId: this.fb.control(topic.defaultId),
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 => {
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 {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/input.module";
import {ClickModule} from "../openaireLibrary/utils/click/click.module";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
@NgModule({
imports: [
@ -20,7 +20,7 @@ import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
StakeholderComponent
],
providers: [
LoginGuard, PreviousRouteRecorder,
AdminDashboardGuard, PreviousRouteRecorder,
PiwikService
],
exports: [

View File

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

View File

@ -130,7 +130,7 @@
<div dashboard-input class="uk-form-row" [formInput]="form.get('description')"
label="Description" type="textarea">
</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">
</div>
<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),
defaultId: this.fb.control(topic.defaultId),
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 => {
let i = 1;

View File

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