[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:
parent
210d44764c
commit
09b8683328
|
@ -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, [], [], {}));
|
||||||
|
|
|
@ -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}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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]
|
||||||
})
|
})
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -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]
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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: [
|
||||||
|
|
|
@ -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]
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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: [
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue