[Library | Trunk]: Merge members managers. Add create group for portal admins
git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-services-library/trunk/ng-openaire-library/src/app@59757 d315682c-612b-4755-9ff5-7f18f6832af3
This commit is contained in:
parent
57e7c0fa85
commit
889bd1db17
|
@ -1,16 +1,9 @@
|
|||
<ng-template #tabs>
|
||||
<ul class="uk-tab customTabs admin uk-flex uk-flex-center uk-flex-left@m" uk-tab>
|
||||
<li [class.uk-active]="tab === 'managers'"><a (click)="changeTab('managers')"><span class="title">Managers</span></a></li>
|
||||
<li [class.uk-active]="tab === 'members'"><a (click)="changeTab('members')"><span class="title">Members</span></a></li>
|
||||
<li [class.uk-active]="tab === 'manager'"><a (click)="changeTab('manager')"><span class="title">Managers</span></a></li>
|
||||
<li [class.uk-active]="tab === 'member'"><a (click)="changeTab('member')"><span class="title">Members</span></a></li>
|
||||
</ul>
|
||||
</ng-template>
|
||||
<div *ngIf="tab === 'managers'">
|
||||
<managers [id]="id" [type]="type" [name]="name" [link]="link">
|
||||
<ng-container [ngTemplateOutlet]="tabs"></ng-container>
|
||||
</managers>
|
||||
</div>
|
||||
<div *ngIf="tab === 'members'">
|
||||
<members [id]="id" [type]="type" [name]="name" [link]="link">
|
||||
<ng-container [ngTemplateOutlet]="tabs"></ng-container>
|
||||
</members>
|
||||
</div>
|
||||
<role-users [id]="id" [type]="type" [name]="name" [link]="link" [isPortalAdmin]="isPortalAdmin" [role]="tab">
|
||||
<ng-container [ngTemplateOutlet]="tabs"></ng-container>
|
||||
</role-users>
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
import {Component, Input, OnInit} from "@angular/core";
|
||||
import {UserManagementService} from "../../services/user-management.service";
|
||||
import {Session, User} from "../../login/utils/helper.class";
|
||||
|
||||
@Component({
|
||||
selector: 'dashboard-users',
|
||||
|
@ -14,15 +16,23 @@ export class DashboardUsersComponent implements OnInit{
|
|||
public name: string;
|
||||
@Input()
|
||||
public link: string;
|
||||
public tab: "managers" | "members" = 'managers';
|
||||
public user: User;
|
||||
public tab: "manager" | "member" = 'manager';
|
||||
|
||||
constructor() {
|
||||
constructor(private userManagementService: UserManagementService) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.userManagementService.getUserInfo().subscribe(user => {
|
||||
this.user = user;
|
||||
});
|
||||
}
|
||||
|
||||
changeTab(tab: "managers" | "members") {
|
||||
changeTab(tab: "manager" | "member") {
|
||||
this.tab = tab;
|
||||
}
|
||||
|
||||
public get isPortalAdmin() {
|
||||
return Session.isPortalAdministrator(this.user);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
import {NgModule} from "@angular/core";
|
||||
import {DashboardUsersComponent} from "./dashboard-users.component";
|
||||
import {CommonModule} from "@angular/common";
|
||||
import {ManagersModule} from "./managers/managers.module";
|
||||
import {MembersModule} from "./members/members.module";
|
||||
import {RoleUsersModule} from "./role-users/role-users.module";
|
||||
|
||||
@NgModule({
|
||||
imports: [CommonModule, ManagersModule, MembersModule],
|
||||
imports: [CommonModule, RoleUsersModule],
|
||||
declarations: [DashboardUsersComponent],
|
||||
exports: [DashboardUsersComponent]
|
||||
})
|
||||
|
|
|
@ -1,81 +0,0 @@
|
|||
<div page-content>
|
||||
<div header>
|
||||
<div *ngIf="error" class="uk-alert uk-alert-danger uk-flex uk-flex-top">
|
||||
<span class="uk-margin-small-right uk-icon" uk-icon="warning"></span>
|
||||
<div>
|
||||
{{error}}
|
||||
</div>
|
||||
</div>
|
||||
<ng-content></ng-content>
|
||||
<div class="uk-grid uk-flex uk-flex-middle" uk-grid>
|
||||
<div class="uk-width-expand uk-flex uk-flex-left@m uk-flex-center">
|
||||
<ul class="uk-subnav uk-subnav-pill">
|
||||
<li [class.uk-active]="showManagers" (click)="showManagers = true">
|
||||
<a>Managers</a>
|
||||
</li>
|
||||
<li [class.uk-active]="!showManagers" (click)="showManagers = false">
|
||||
<a>Pending Managers</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="uk-width-1-5@l uk-width-1-3@m uk-width-1-1 uk-flex uk-flex-right@m uk-flex-center">
|
||||
<a class="uk-text-uppercase uk-flex uk-flex-middle" (click)="openInviteModal()">
|
||||
<button class="uk-icon-button large uk-button-secondary">
|
||||
<icon name="person_add"></icon>
|
||||
</button>
|
||||
<button class="uk-button uk-button-link uk-margin-small-left uk-text-secondary">Invite Manager</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div inner>
|
||||
<div *ngIf="loadManagers || loadPending" class="uk-margin-large-top">
|
||||
<loading></loading>
|
||||
</div>
|
||||
<div *ngIf="!loadManagers && !loadPending" class="uk-margin-medium-top">
|
||||
<div *ngIf="(showManagers && managers.length == 0) || (!showManagers && pending.length == 0)"
|
||||
class="uk-card uk-card-default uk-padding-large uk-text-center uk-margin-bottom uk-text-bold">
|
||||
<div *ngIf="showManagers">No managers for {{name}}</div>
|
||||
<div *ngIf="!showManagers">No pending manager invitations for {{name}}</div>
|
||||
</div>
|
||||
<div *ngIf="(showManagers && managers.length > 0) || (!showManagers && pending.length > 0)"
|
||||
class="uk-overflow-auto uk-height-max-large">
|
||||
<div class="uk-card uk-card-default uk-card-body uk-text-small uk-margin-bottom"
|
||||
*ngFor="let item of (showManagers)?managers:pending">
|
||||
<div class="uk-grid uk-grid-divider uk-flex uk-flex-middle" uk-grid>
|
||||
<div class="uk-width-3-4@l uk-width-1-2@m">
|
||||
<div class="uk-padding-small uk-padding-remove-horizontal">
|
||||
<span class="uk-text-muted">Email: </span>
|
||||
<span class="uk-text-bold">{{(showManagers) ? item.email : item}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="properties.environment === 'development'" class="uk-width-expand">
|
||||
<div class="uk-padding-small uk-padding-remove-horizontal uk-flex uk-flex-center">
|
||||
<a (click)="openDeleteModal(item)" class="uk-button action uk-flex uk-flex-middle">
|
||||
<icon name="remove_circle_outline" ratio="0.7" [flex]="true"></icon>
|
||||
<span class="uk-margin-small-left">{{showManagers ? 'Remove manager' : 'Cancel invitation'}}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<modal-alert #inviteManagerModal (alertOutput)="inviteManager()" [okDisabled]="invited && invited.invalid">
|
||||
<div *ngIf="invited" class="uk-padding uk-padding-remove-horizontal uk-text-center">
|
||||
<div dashboard-input [formInput]="invited"
|
||||
placeholder="Write an email..."></div>
|
||||
</div>
|
||||
</modal-alert>
|
||||
<modal-alert #deleteManagerModal (alertOutput)="deleteManager()">
|
||||
<div *ngIf="selectedUser" class="uk-padding-small uk-padding-remove-horizontal">
|
||||
Are you sure you want to remove <span class="uk-text-bold">{{selectedUser}}</span> from managers?
|
||||
</div>
|
||||
</modal-alert>
|
||||
<modal-alert #deletePendingModal (alertOutput)="deletePendingManager()">
|
||||
<div *ngIf="selectedUser" class="uk-padding-small uk-padding-remove-horizontal">
|
||||
Are you sure you want to cancel manager invitation of <span class="uk-text-bold">{{selectedUser}}</span>?
|
||||
</div>
|
||||
</modal-alert>
|
|
@ -1,129 +0,0 @@
|
|||
import {Component, Input, OnDestroy, OnInit, ViewChild} from '@angular/core';
|
||||
import {Subscription} from 'rxjs/Rx';
|
||||
import {FormBuilder, FormControl, Validators} from '@angular/forms';
|
||||
import {AlertModal} from "../../../utils/modal/alert";
|
||||
import {UserRegistryService} from "../../../services/user-registry.service";
|
||||
import {EnvProperties} from "../../../utils/properties/env-properties";
|
||||
import {properties} from "../../../../../environments/environment";
|
||||
|
||||
@Component({
|
||||
selector: 'managers',
|
||||
templateUrl: 'managers.component.html'
|
||||
})
|
||||
export class ManagersComponent implements OnInit, OnDestroy {
|
||||
|
||||
@Input()
|
||||
public id: string;
|
||||
@Input()
|
||||
public type: string;
|
||||
@Input()
|
||||
public name: string;
|
||||
@Input()
|
||||
public link: string;
|
||||
public managers: any[];
|
||||
public pending: any[];
|
||||
public showManagers: boolean = true;
|
||||
public subs: any[] = [];
|
||||
public loadManagers: boolean = true;
|
||||
public loadPending: boolean = true;
|
||||
public error: string;
|
||||
public selectedUser: string = null;
|
||||
public invited: FormControl;
|
||||
public properties: EnvProperties = properties;
|
||||
@ViewChild('inviteManagerModal') inviteManagerModal: AlertModal;
|
||||
@ViewChild('deleteManagerModal') deleteManagerModal: AlertModal;
|
||||
@ViewChild('deletePendingModal') deletePendingModal: AlertModal;
|
||||
|
||||
constructor(private userRegistryService: UserRegistryService,
|
||||
private fb: FormBuilder) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.subs.push(this.userRegistryService.getManagersEmail(this.type, this.id).subscribe(managers => {
|
||||
this.managers = managers;
|
||||
this.loadManagers = false;
|
||||
}, error => {
|
||||
this.managers = [];
|
||||
this.error = error.error.response;
|
||||
this.loadManagers = false;
|
||||
}));
|
||||
this.subs.push(this.userRegistryService.getPendingManagers(this.type, this.id).subscribe(pending => {
|
||||
this.pending = pending;
|
||||
this.loadPending = false;
|
||||
}, error => {
|
||||
this.managers = [];
|
||||
this.error = error.error.response;
|
||||
this.loadManagers = false;
|
||||
}));
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.subs.forEach(sub => {
|
||||
if (sub instanceof Subscription) {
|
||||
sub.unsubscribe();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
openDeleteModal(item: any) {
|
||||
if (this.showManagers) {
|
||||
this.selectedUser = item.email;
|
||||
this.deleteManagerModal.alertTitle = 'Delete manager';
|
||||
this.deleteManagerModal.open();
|
||||
} else {
|
||||
this.selectedUser = item;
|
||||
this.deletePendingModal.alertTitle = 'Cancel invitation';
|
||||
this.deletePendingModal.open();
|
||||
}
|
||||
}
|
||||
|
||||
openInviteModal() {
|
||||
this.inviteManagerModal.alertTitle = 'Invite manager';
|
||||
this.inviteManagerModal.okButtonLeft = false;
|
||||
this.inviteManagerModal.okButtonText = 'Send';
|
||||
this.invited = this.fb.control('', [Validators.required, Validators.email]);
|
||||
this.inviteManagerModal.open();
|
||||
}
|
||||
|
||||
deleteManager() {
|
||||
this.loadManagers = true;
|
||||
this.userRegistryService.removeManager(this.type, this.id, this.selectedUser).subscribe(() => {
|
||||
this.managers = this.managers.filter(manager => manager.email != this.selectedUser);
|
||||
this.loadManagers = false;
|
||||
this.error = null;
|
||||
}, error => {
|
||||
this.error = error.error.response;
|
||||
this.loadManagers = false;
|
||||
});
|
||||
}
|
||||
|
||||
deletePendingManager() {
|
||||
this.loadPending = true;
|
||||
this.userRegistryService.cancelManagerInvitation(this.type, this.id, this.selectedUser).subscribe(() => {
|
||||
this.pending = this.pending.filter(manager => manager != this.selectedUser);
|
||||
this.error = null;
|
||||
this.loadPending = false;
|
||||
}, error => {
|
||||
this.error = error.error.response;
|
||||
this.loadPending = false;
|
||||
});
|
||||
}
|
||||
|
||||
inviteManager() {
|
||||
this.loadManagers = true;
|
||||
let details = {
|
||||
name: this.name,
|
||||
link: this.link
|
||||
}
|
||||
this.userRegistryService.inviteManager(this.type, this.id, this.invited.value, details).subscribe(() => {
|
||||
this.error = null;
|
||||
if (!this.pending.includes(this.invited.value)) {
|
||||
this.pending.push(this.invited.value);
|
||||
}
|
||||
this.loadManagers = false;
|
||||
}, error => {
|
||||
this.error = error.error.response;
|
||||
this.loadManagers = false;
|
||||
})
|
||||
}
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
import {NgModule} from '@angular/core';
|
||||
import {CommonModule} from '@angular/common';
|
||||
import {ManagersComponent} from './managers.component';
|
||||
import {ReactiveFormsModule} from '@angular/forms';
|
||||
import {EmailService} from "../../../utils/email/email.service";
|
||||
import {AlertModalModule} from "../../../utils/modal/alertModal.module";
|
||||
import {LoadingModule} from "../../../utils/loading/loading.module";
|
||||
import {IconsService} from "../../../utils/icons/icons.service";
|
||||
import {person_add, remove_circle_outline} from "../../../utils/icons/icons";
|
||||
import {IconsModule} from "../../../utils/icons/icons.module";
|
||||
import {InputModule} from "../../sharedComponents/input/input.module";
|
||||
import {PageContentModule} from "../../sharedComponents/page-content/page-content.module";
|
||||
|
||||
@NgModule({
|
||||
imports: [CommonModule, AlertModalModule, ReactiveFormsModule, LoadingModule, IconsModule, InputModule, PageContentModule],
|
||||
declarations: [ManagersComponent],
|
||||
exports: [ManagersComponent],
|
||||
providers: [EmailService]
|
||||
})
|
||||
export class ManagersModule {
|
||||
constructor(private iconsService: IconsService) {
|
||||
this.iconsService.registerIcons([remove_circle_outline, person_add]);
|
||||
}
|
||||
}
|
|
@ -1,81 +0,0 @@
|
|||
<div page-content>
|
||||
<div header>
|
||||
<div *ngIf="error" class="uk-alert uk-alert-danger uk-flex uk-flex-top">
|
||||
<span class="uk-margin-small-right uk-icon" uk-icon="warning"></span>
|
||||
<div>
|
||||
{{error}}
|
||||
</div>
|
||||
</div>
|
||||
<ng-content></ng-content>
|
||||
<div class="uk-grid uk-flex uk-flex-middle" uk-grid>
|
||||
<div class="uk-width-expand uk-flex uk-flex-left@m uk-flex-center">
|
||||
<ul class="uk-subnav uk-subnav-pill">
|
||||
<li [class.uk-active]="showMembers" (click)="showMembers = true">
|
||||
<a>Members</a>
|
||||
</li>
|
||||
<li [class.uk-active]="!showMembers" (click)="showMembers = false">
|
||||
<a>Pending Members</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="uk-width-1-5@l uk-width-1-3@m uk-flex uk-flex-right@m uk-flex-center">
|
||||
<a class="uk-text-uppercase uk-flex uk-flex-middle" (click)="openInviteModal()">
|
||||
<button class="uk-icon-button large uk-button-secondary">
|
||||
<icon name="person_add"></icon>
|
||||
</button>
|
||||
<button class="uk-button uk-button-link uk-margin-small-left uk-text-secondary">Invite Member</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div inner>
|
||||
<div *ngIf="loadMembers || loadPending" class="uk-margin-large-top">
|
||||
<loading></loading>
|
||||
</div>
|
||||
<div *ngIf="!loadMembers && !loadPending" class="uk-margin-medium-top">
|
||||
<div *ngIf="(showMembers && members.length == 0) || (!showMembers && pending.length == 0)"
|
||||
class="uk-card uk-card-default uk-padding-large uk-text-center uk-margin-bottom uk-text-bold">
|
||||
<div *ngIf="showMembers">No members for {{name}}</div>
|
||||
<div *ngIf="!showMembers">No pending member invitations for {{name}}</div>
|
||||
</div>
|
||||
<div *ngIf="(showMembers && members.length > 0) || (!showMembers && pending.length > 0)"
|
||||
class="uk-overflow-auto uk-height-max-large uk-padding-small">
|
||||
<div class="uk-card uk-card-default uk-card-body uk-text-small uk-margin-bottom"
|
||||
*ngFor="let item of (showMembers)?members:pending">
|
||||
<div class="uk-grid uk-grid-divider uk-flex uk-flex-middle" uk-grid>
|
||||
<div class="uk-width-3-4@l uk-width-1-2@m">
|
||||
<div class="uk-padding-small uk-padding-remove-horizontal">
|
||||
<span class="uk-text-muted">Email: </span>
|
||||
<span class="uk-text-bold">{{(showMembers) ? item.email : item}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="properties.environment === 'development'" class="uk-width-expand">
|
||||
<div class="uk-padding-small uk-padding-remove-horizontal uk-flex uk-flex-center">
|
||||
<a (click)="openDeleteModal(item)" class="uk-button action uk-flex uk-flex-middle">
|
||||
<icon name="remove_circle_outline" ratio="0.7" [flex]="true"></icon>
|
||||
<span class="uk-margin-small-left">{{showMembers ? 'Remove member' : 'Cancel invitation'}}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<modal-alert #inviteMemberModal (alertOutput)="inviteMember()" [okDisabled]="invited && invited.invalid">
|
||||
<div *ngIf="invited" class="uk-padding-small uk-padding-remove-horizontal uk-text-center">
|
||||
<div dashboard-input [formInput]="invited"
|
||||
placeholder="Write an email..."></div>
|
||||
</div>
|
||||
</modal-alert>
|
||||
<modal-alert #deleteMemberModal (alertOutput)="deleteMember()">
|
||||
<div *ngIf="selectedUser" class="uk-padding-small uk-padding-remove-horizontal">
|
||||
Are you sure you want to remove <span class="uk-text-bold">{{selectedUser}}</span> from members?
|
||||
</div>
|
||||
</modal-alert>
|
||||
<modal-alert #deletePendingModal (alertOutput)="deletePendingMember()">
|
||||
<div *ngIf="selectedUser" class="uk-padding-small uk-padding-remove-horizontal">
|
||||
Are you sure you want to cancel member invitation of <span class="uk-text-bold">{{selectedUser}}</span>?
|
||||
</div>
|
||||
</modal-alert>
|
|
@ -1,129 +0,0 @@
|
|||
import {Component, Input, OnDestroy, OnInit, ViewChild} from '@angular/core';
|
||||
import {Subscription} from 'rxjs/Rx';
|
||||
import {UserRegistryService} from "../../../services/user-registry.service";
|
||||
import {EnvProperties} from "../../../utils/properties/env-properties";
|
||||
import {properties} from "../../../../../environments/environment";
|
||||
import {FormBuilder, FormControl, Validators} from "@angular/forms";
|
||||
import {AlertModal} from "../../../utils/modal/alert";
|
||||
|
||||
@Component({
|
||||
selector: 'members',
|
||||
templateUrl: 'members.component.html'
|
||||
})
|
||||
export class MembersComponent implements OnInit, OnDestroy {
|
||||
|
||||
@Input()
|
||||
public id: string;
|
||||
@Input()
|
||||
public type: string;
|
||||
@Input()
|
||||
public name: string;
|
||||
@Input()
|
||||
public link: string;
|
||||
public members: any[];
|
||||
public pending: any[];
|
||||
public showMembers: boolean = true;
|
||||
public subs: any[] = [];
|
||||
public loadMembers: boolean = true;
|
||||
public loadPending: boolean = true;
|
||||
public error: string;
|
||||
public selectedUser: string = null;
|
||||
public invited: FormControl;
|
||||
public properties: EnvProperties = properties;
|
||||
@ViewChild('inviteMemberModal') inviteMemberModal: AlertModal;
|
||||
@ViewChild('deleteMemberModal') deleteMemberModal: AlertModal;
|
||||
@ViewChild('deletePendingModal') deletePendingModal: AlertModal;
|
||||
|
||||
constructor(private userRegistryService: UserRegistryService,
|
||||
private fb: FormBuilder) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.subs.push(this.userRegistryService.getMembersEmail(this.type, this.id).subscribe(members => {
|
||||
this.members = members;
|
||||
this.loadMembers = false;
|
||||
}, error => {
|
||||
this.members = [];
|
||||
this.error = error.error.response;
|
||||
this.loadMembers = false;
|
||||
}));
|
||||
this.subs.push(this.userRegistryService.getPendingMembers(this.type, this.id).subscribe(pending => {
|
||||
this.pending = pending;
|
||||
this.loadPending = false;
|
||||
}, error => {
|
||||
this.members = [];
|
||||
this.error = error.error.response;
|
||||
this.loadMembers = false;
|
||||
}));
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.subs.forEach(sub => {
|
||||
if (sub instanceof Subscription) {
|
||||
sub.unsubscribe();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
openDeleteModal(item: any) {
|
||||
if (this.showMembers) {
|
||||
this.selectedUser = item.email;
|
||||
this.deleteMemberModal.alertTitle = 'Delete member';
|
||||
this.deleteMemberModal.open();
|
||||
} else {
|
||||
this.selectedUser = item;
|
||||
this.deletePendingModal.alertTitle = 'Cancel invitation';
|
||||
this.deletePendingModal.open();
|
||||
}
|
||||
}
|
||||
|
||||
openInviteModal() {
|
||||
this.inviteMemberModal.alertTitle = 'Invite member';
|
||||
this.inviteMemberModal.okButtonText = 'Send';
|
||||
this.inviteMemberModal.okButtonLeft = false;
|
||||
this.invited = this.fb.control('', [Validators.required, Validators.email]);
|
||||
this.inviteMemberModal.open();
|
||||
}
|
||||
|
||||
deleteMember() {
|
||||
this.loadMembers = true;
|
||||
this.userRegistryService.removeMember(this.type, this.id, this.selectedUser).subscribe(() => {
|
||||
this.members = this.members.filter(manager => manager.email != this.selectedUser);
|
||||
this.loadMembers = false;
|
||||
this.error = null;
|
||||
}, error => {
|
||||
this.error = error.error.response;
|
||||
this.loadMembers = false;
|
||||
});
|
||||
}
|
||||
|
||||
deletePendingMember() {
|
||||
this.loadPending = true;
|
||||
this.userRegistryService.cancelMemberInvitation(this.type, this.id, this.selectedUser).subscribe(() => {
|
||||
this.pending = this.pending.filter(manager => manager != this.selectedUser);
|
||||
this.error = null;
|
||||
this.loadPending = false;
|
||||
}, error => {
|
||||
this.error = error.error.response;
|
||||
this.loadPending = false;
|
||||
});
|
||||
}
|
||||
|
||||
inviteMember() {
|
||||
this.loadMembers = true;
|
||||
let details = {
|
||||
name: this.name,
|
||||
link: this.link
|
||||
}
|
||||
this.userRegistryService.inviteMember(this.type, this.id, this.invited.value, details).subscribe(() => {
|
||||
this.error = null;
|
||||
if (!this.pending.includes(this.invited.value)) {
|
||||
this.pending.push(this.invited.value);
|
||||
}
|
||||
this.loadMembers = false;
|
||||
}, error => {
|
||||
this.error = error.error.response;
|
||||
this.loadMembers = false;
|
||||
})
|
||||
}
|
||||
}
|
|
@ -0,0 +1,100 @@
|
|||
<div page-content>
|
||||
<div header>
|
||||
<div *ngIf="error" class="uk-alert uk-alert-danger uk-flex uk-flex-top">
|
||||
<span class="uk-margin-small-right uk-icon" uk-icon="warning"></span>
|
||||
<div>
|
||||
{{error}}
|
||||
</div>
|
||||
</div>
|
||||
<ng-content></ng-content>
|
||||
<div class="uk-grid uk-flex uk-flex-middle" uk-grid>
|
||||
<div class="uk-width-expand uk-flex uk-flex-left@m uk-flex-center">
|
||||
<ul class="uk-subnav uk-subnav-pill">
|
||||
<li [class.uk-active]="showActive" (click)="showActive = true">
|
||||
<a>{{role}}s</a>
|
||||
</li>
|
||||
<li [class.uk-active]="!showActive" (click)="showActive = false">
|
||||
<a>Pending {{role}}s</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div [class.uk-invisible]="loadActive || loadPending" class="uk-width-1-5@l uk-width-1-3@m uk-width-1-1 uk-flex uk-flex-right@m uk-flex-center">
|
||||
<a *ngIf="exists" class="uk-text-uppercase uk-flex uk-flex-middle" (click)="openInviteModal()">
|
||||
<button class="uk-icon-button large uk-button-secondary">
|
||||
<icon name="person_add"></icon>
|
||||
</button>
|
||||
<button class="uk-button uk-button-link uk-margin-small-left uk-text-secondary">Invite {{role}}</button>
|
||||
</a>
|
||||
<a *ngIf="!exists && isPortalAdmin" class="uk-text-uppercase uk-flex uk-flex-middle" (click)="openCreateRoleModal()">
|
||||
<button class="uk-icon-button large uk-button-secondary">
|
||||
<icon name="person_add"></icon>
|
||||
</button>
|
||||
<button class="uk-button uk-button-link uk-margin-small-left uk-text-secondary">Create Group</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div inner>
|
||||
<div *ngIf="loadActive || loadPending" class="uk-margin-large-top">
|
||||
<loading></loading>
|
||||
</div>
|
||||
<div *ngIf="!loadActive && !loadPending" class="uk-margin-medium-top">
|
||||
<div *ngIf="(showActive && active.length == 0) || (!showActive && pending.length == 0)"
|
||||
class="uk-card uk-card-default uk-padding-large uk-text-center uk-margin-bottom uk-text-bold">
|
||||
<div *ngIf="showActive">No {{role}}s for {{name}}</div>
|
||||
<div *ngIf="!showActive">No pending {{role}} invitations for {{name}}</div>
|
||||
</div>
|
||||
<div *ngIf="(showActive && active.length > 0) || (!showActive && pending.length > 0)"
|
||||
class="uk-overflow-auto uk-height-max-large">
|
||||
<div class="uk-card uk-card-default uk-card-body uk-text-small uk-margin-bottom"
|
||||
*ngFor="let item of (showActive)?active:pending">
|
||||
<div class="uk-grid uk-grid-divider uk-flex uk-flex-middle" uk-grid>
|
||||
<div class="uk-width-3-4@l uk-width-1-2@m">
|
||||
<div class="uk-padding-small uk-padding-remove-horizontal">
|
||||
<span class="uk-text-muted">Email: </span>
|
||||
<span class="uk-text-bold">{{(showActive) ? item.email : item}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="properties.environment === 'development'" class="uk-width-expand">
|
||||
<div class="uk-padding-small uk-padding-remove-horizontal uk-flex uk-flex-center">
|
||||
<a (click)="openDeleteModal(item)" class="uk-button action uk-flex uk-flex-middle">
|
||||
<icon name="remove_circle_outline" ratio="0.7" [flex]="true"></icon>
|
||||
<span class="uk-margin-small-left">{{showActive ? ('Remove ' + role) : 'Cancel invitation'}}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<modal-alert #inviteModal (alertOutput)="invite()" [okDisabled]="invited && invited.invalid">
|
||||
<div *ngIf="invited" class="uk-padding uk-padding-remove-horizontal uk-text-center">
|
||||
<div dashboard-input [formInput]="invited"
|
||||
placeholder="Write an email..."></div>
|
||||
</div>
|
||||
</modal-alert>
|
||||
<modal-alert #deleteModal (alertOutput)="deleteActive()">
|
||||
<div *ngIf="selectedUser" class="uk-padding-small uk-padding-remove-horizontal">
|
||||
Are you sure you want to remove <span class="uk-text-bold">{{selectedUser}}</span> from {{role}}s?
|
||||
</div>
|
||||
</modal-alert>
|
||||
<modal-alert #deletePendingModal (alertOutput)="deletePending()">
|
||||
<div *ngIf="selectedUser" class="uk-padding-small uk-padding-remove-horizontal">
|
||||
Are you sure you want to cancel {{role}} invitation of <span class="uk-text-bold">{{selectedUser}}</span>?
|
||||
</div>
|
||||
</modal-alert>
|
||||
<modal-alert #createRoleModal (alertOutput)="createGroup()" [okDisabled]="roleFb && roleFb.invalid">
|
||||
<div *ngIf="roleFb" class="uk-padding uk-padding-remove-horizontal">
|
||||
<div class="uk-grid" uk-grid [formGroup]="roleFb">
|
||||
<div dashboard-input [formInput]="roleFb.get('name')"
|
||||
label="Name"
|
||||
placeholder="Write a name..." class="uk-width-1-1"></div>
|
||||
<div dashboard-input [formInput]="roleFb.get('description')"
|
||||
label="Description"
|
||||
type="textarea"
|
||||
placeholder="Write a description..." class="uk-width-1-1"></div>
|
||||
</div>
|
||||
</div>
|
||||
</modal-alert>
|
|
@ -0,0 +1,191 @@
|
|||
import {Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, ViewChild} from '@angular/core';
|
||||
import {Subscription} from 'rxjs/Rx';
|
||||
import {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';
|
||||
import {AlertModal} from "../../../utils/modal/alert";
|
||||
import {UserRegistryService} from "../../../services/user-registry.service";
|
||||
import {EnvProperties} from "../../../utils/properties/env-properties";
|
||||
import {properties} from "../../../../../environments/environment";
|
||||
import {Session} from "../../../login/utils/helper.class";
|
||||
|
||||
declare var UIkit;
|
||||
|
||||
@Component({
|
||||
selector: 'role-users',
|
||||
templateUrl: 'role-users.component.html'
|
||||
})
|
||||
export class RoleUsersComponent implements OnInit, OnDestroy, OnChanges {
|
||||
|
||||
@Input()
|
||||
public id: string;
|
||||
@Input()
|
||||
public type: string;
|
||||
@Input()
|
||||
public name: string;
|
||||
@Input()
|
||||
public link: string;
|
||||
@Input()
|
||||
public isPortalAdmin: boolean = false;
|
||||
@Input() role: "member" | "manager" = "manager";
|
||||
public active: any[];
|
||||
public pending: any[];
|
||||
public showActive: boolean = true;
|
||||
public subs: any[] = [];
|
||||
public loadActive: boolean = true;
|
||||
public loadPending: boolean = true;
|
||||
public error: string;
|
||||
public selectedUser: string = null;
|
||||
public invited: FormControl;
|
||||
public properties: EnvProperties = properties;
|
||||
public exists: boolean = true;
|
||||
public roleFb: FormGroup;
|
||||
@ViewChild('inviteModal') inviteModal: AlertModal;
|
||||
@ViewChild('deleteModal') deleteModal: AlertModal;
|
||||
@ViewChild('deletePendingModal') deletePendingModal: AlertModal;
|
||||
@ViewChild('createRoleModal') createRoleModal: AlertModal;
|
||||
|
||||
constructor(private userRegistryService: UserRegistryService,
|
||||
private fb: FormBuilder) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.updateLists();
|
||||
}
|
||||
|
||||
ngOnChanges(changes: SimpleChanges) {
|
||||
if(changes.role) {
|
||||
this.updateLists();
|
||||
}
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.subs.forEach(sub => {
|
||||
if (sub instanceof Subscription) {
|
||||
sub.unsubscribe();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
updateLists() {
|
||||
this.loadActive = true;
|
||||
this.loadPending = true;
|
||||
this.subs.push(this.userRegistryService.getActiveEmail(this.type, this.id, this.role).subscribe(users => {
|
||||
this.active = users;
|
||||
this.loadActive = false;
|
||||
this.exists = true;
|
||||
}, error => {
|
||||
this.active = [];
|
||||
if(error.status === 404) {
|
||||
this.exists = false;
|
||||
} else {
|
||||
this.error = error.error.response;
|
||||
}
|
||||
this.loadActive = false;
|
||||
}));
|
||||
this.subs.push(this.userRegistryService.getPending(this.type, this.id, this.role).subscribe(users => {
|
||||
this.pending = users;
|
||||
this.loadPending = false;
|
||||
}, error => {
|
||||
this.active = [];
|
||||
this.error = error.error.response;
|
||||
this.loadActive = false;
|
||||
}));
|
||||
}
|
||||
|
||||
openDeleteModal(item: any) {
|
||||
if (this.showActive) {
|
||||
this.selectedUser = item.email;
|
||||
this.deleteModal.alertTitle = 'Delete ' + this.role;
|
||||
this.deleteModal.open();
|
||||
} else {
|
||||
this.selectedUser = item;
|
||||
this.deletePendingModal.alertTitle = 'Cancel invitation';
|
||||
this.deletePendingModal.open();
|
||||
}
|
||||
}
|
||||
|
||||
openInviteModal() {
|
||||
this.inviteModal.alertTitle = 'Invite ' + this.role;
|
||||
this.inviteModal.okButtonLeft = false;
|
||||
this.inviteModal.okButtonText = 'Send';
|
||||
this.invited = this.fb.control('', [Validators.required, Validators.email]);
|
||||
this.inviteModal.open();
|
||||
}
|
||||
|
||||
openCreateRoleModal() {
|
||||
this.createRoleModal.alertTitle = 'Create group';
|
||||
this.createRoleModal.okButtonLeft = false;
|
||||
this.createRoleModal.okButtonText = 'create';
|
||||
this.roleFb = this.fb.group({
|
||||
name: this.fb.control(Session.mapType(this.type) + '.' + this.id, Validators.required),
|
||||
description: this.fb.control('', Validators.required)
|
||||
});
|
||||
setTimeout(() => {
|
||||
this.roleFb.get('name').disable();
|
||||
}, 0);
|
||||
this.createRoleModal.open();
|
||||
}
|
||||
|
||||
deleteActive() {
|
||||
this.loadActive = true;
|
||||
this.userRegistryService.remove(this.type, this.id, this.selectedUser, this.role).subscribe(() => {
|
||||
this.active = this.active.filter(user => user.email != this.selectedUser);
|
||||
this.loadActive = false;
|
||||
this.error = null;
|
||||
}, error => {
|
||||
this.error = error.error.response;
|
||||
this.loadActive = false;
|
||||
});
|
||||
}
|
||||
|
||||
deletePending() {
|
||||
this.loadPending = true;
|
||||
this.userRegistryService.cancelInvitation(this.type, this.id, this.selectedUser, this.role).subscribe(() => {
|
||||
this.pending = this.pending.filter(user => user != this.selectedUser);
|
||||
this.error = null;
|
||||
this.loadPending = false;
|
||||
}, error => {
|
||||
this.error = error.error.response;
|
||||
this.loadPending = false;
|
||||
});
|
||||
}
|
||||
|
||||
invite() {
|
||||
this.loadActive = true;
|
||||
let details = {
|
||||
name: this.name,
|
||||
link: this.link
|
||||
}
|
||||
this.userRegistryService.invite(this.type, this.id, this.invited.value, details, this.role).subscribe(() => {
|
||||
this.error = null;
|
||||
if (!this.pending.includes(this.invited.value)) {
|
||||
this.pending.push(this.invited.value);
|
||||
}
|
||||
this.loadActive = false;
|
||||
}, error => {
|
||||
this.error = error.error.response;
|
||||
this.loadActive = false;
|
||||
})
|
||||
}
|
||||
|
||||
createGroup() {
|
||||
this.loadActive = true;
|
||||
this.loadPending = true;
|
||||
this.roleFb.get('name').enable();
|
||||
this.userRegistryService.createRole(this.type, this.id, this.roleFb.value).subscribe(() => {
|
||||
UIkit.notification('Group has been created', {
|
||||
status: 'success',
|
||||
timeout: 3000,
|
||||
pos: 'top-left'
|
||||
});
|
||||
this.updateLists();
|
||||
}, error => {
|
||||
UIkit.notification('An error has occurred. Please try again later', {
|
||||
status: 'danger',
|
||||
timeout: 3000,
|
||||
pos: 'top-left'
|
||||
});
|
||||
this.loadActive = false;
|
||||
this.loadPending = false;
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,23 +1,23 @@
|
|||
import {NgModule} from '@angular/core';
|
||||
import {CommonModule} from '@angular/common';
|
||||
import {MembersComponent} from './members.component';
|
||||
import {RoleUsersComponent} from './role-users.component';
|
||||
import {ReactiveFormsModule} from '@angular/forms';
|
||||
import {EmailService} from "../../../utils/email/email.service";
|
||||
import {AlertModalModule} from "../../../utils/modal/alertModal.module";
|
||||
import {LoadingModule} from "../../../utils/loading/loading.module";
|
||||
import {IconsModule} from "../../../utils/icons/icons.module";
|
||||
import {IconsService} from "../../../utils/icons/icons.service";
|
||||
import {person_add, remove_circle_outline} from "../../../utils/icons/icons";
|
||||
import {IconsModule} from "../../../utils/icons/icons.module";
|
||||
import {InputModule} from "../../sharedComponents/input/input.module";
|
||||
import {PageContentModule} from "../../sharedComponents/page-content/page-content.module";
|
||||
|
||||
@NgModule({
|
||||
imports: [CommonModule, AlertModalModule, ReactiveFormsModule, LoadingModule, IconsModule, InputModule, PageContentModule],
|
||||
declarations: [MembersComponent],
|
||||
exports: [MembersComponent],
|
||||
declarations: [RoleUsersComponent],
|
||||
exports: [RoleUsersComponent],
|
||||
providers: [EmailService]
|
||||
})
|
||||
export class MembersModule {
|
||||
export class RoleUsersModule {
|
||||
constructor(private iconsService: IconsService) {
|
||||
this.iconsService.registerIcons([remove_circle_outline, person_add]);
|
||||
}
|
|
@ -1,174 +1,193 @@
|
|||
import {StringUtils} from "../../utils/string-utils.class";
|
||||
|
||||
export class User {
|
||||
email:string;
|
||||
firstname: string;
|
||||
lastname: string;
|
||||
id: string;
|
||||
fullname: string;
|
||||
expirationDate: number;
|
||||
role:string[];
|
||||
jwt:string;
|
||||
|
||||
email: string;
|
||||
firstname: string;
|
||||
lastname: string;
|
||||
id: string;
|
||||
fullname: string;
|
||||
expirationDate: number;
|
||||
role: string[];
|
||||
jwt: string;
|
||||
|
||||
}
|
||||
|
||||
export class Session{
|
||||
export class Session {
|
||||
public static removeUser() {
|
||||
COOKIE.deleteCookie(COOKIE.cookieName_id);
|
||||
//COOKIE.deleteCookie("openAIRESession");
|
||||
COOKIE.deleteCookie("openAIREUser");
|
||||
}
|
||||
|
||||
|
||||
public static isLoggedIn(): boolean {
|
||||
var cookie= COOKIE.getCookie(COOKIE.cookieName_id);
|
||||
return (cookie != null && cookie != "");
|
||||
var cookie = COOKIE.getCookie(COOKIE.cookieName_id);
|
||||
return (cookie != null && cookie != "");
|
||||
}
|
||||
|
||||
public static setReloadUrl(host:string,path:string, params:string) {
|
||||
|
||||
public static setReloadUrl(host: string, path: string, params: string) {
|
||||
var URL = {};
|
||||
URL["host"]=host;
|
||||
URL["path"]=path;
|
||||
URL["params"]=params;
|
||||
URL["host"] = host;
|
||||
URL["path"] = path;
|
||||
URL["params"] = params;
|
||||
COOKIE.setCookie("reloadURL", JSON.stringify(URL), -1);
|
||||
}
|
||||
public static getReloadUrl(plainText:boolean =false) {
|
||||
|
||||
public static getReloadUrl(plainText: boolean = false) {
|
||||
var URL = COOKIE.getCookie("reloadURL");
|
||||
URL = JSON.parse(URL);
|
||||
return URL;
|
||||
|
||||
|
||||
}
|
||||
public static getParamsObj(params:string) {
|
||||
var object = null;
|
||||
if(params.split("&").length > 0){
|
||||
object = {};
|
||||
}
|
||||
params =(params && params.split("?").length > 1 )?params.split("?")[1]:params;
|
||||
for(var i=0; i<params.split("&").length; i++){
|
||||
object[(params.split("&")[i]).split("=")[0]] = (params.split("&")[i]).split("=")[1];
|
||||
}
|
||||
|
||||
|
||||
public static getParamsObj(params: string) {
|
||||
var object = null;
|
||||
if (params.split("&").length > 0) {
|
||||
object = {};
|
||||
}
|
||||
params = (params && params.split("?").length > 1) ? params.split("?")[1] : params;
|
||||
for (var i = 0; i < params.split("&").length; i++) {
|
||||
object[(params.split("&")[i]).split("=")[0]] = (params.split("&")[i]).split("=")[1];
|
||||
}
|
||||
|
||||
return object;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
//Methods to check roles
|
||||
public static isClaimsCurator(user: User): boolean {
|
||||
return user &&
|
||||
(user.role.indexOf('urn:geant:openaire.eu:group:Curator+-+Claim#aai.openaire.eu') !== -1 ||
|
||||
user.role.indexOf('CURATOR_CLAIM') !== -1);
|
||||
user.role.indexOf('CURATOR_CLAIM') !== -1);
|
||||
}
|
||||
|
||||
public static isMonitorCurator(user: User): boolean {
|
||||
return this.isCommunityCurator(user) || this.isProjectCurator(user) ||this.isFunderCurator(user) || this.isOrganizationCurator(user);
|
||||
return this.isCommunityCurator(user) || this.isProjectCurator(user) || this.isFunderCurator(user) || this.isOrganizationCurator(user);
|
||||
}
|
||||
|
||||
public static isCommunityCurator(user: User): boolean {
|
||||
return this.isTypeCurator("Community", user);
|
||||
}
|
||||
|
||||
public static isFunderCurator(user: User): boolean {
|
||||
return this.isTypeCurator("Funder", user);
|
||||
return this.isTypeCurator("Funder", user);
|
||||
}
|
||||
|
||||
public static isProjectCurator(user: User): boolean {
|
||||
return this.isTypeCurator("Project", user);
|
||||
}
|
||||
|
||||
public static isOrganizationCurator(user: User): boolean {
|
||||
return this.isTypeCurator("Institution", user);
|
||||
}
|
||||
|
||||
private static isTypeCurator(type: string, user: User): boolean {
|
||||
return user &&
|
||||
( user.role.indexOf('CURATOR_'+type.toUpperCase()) !== -1 ||
|
||||
(user.role.indexOf('CURATOR_' + type.toUpperCase()) !== -1 ||
|
||||
user.role.indexOf('urn:geant:openaire.eu:group:Curator+-+' + type + '#aai.openaire.eu') !== -1);
|
||||
}
|
||||
|
||||
public static isCurator(type: string, user: User): boolean {
|
||||
if(type == 'funder'){
|
||||
return user && this.isFunderCurator( user);
|
||||
}else if(type == 'ri' || type == 'community'){
|
||||
if (type == 'funder') {
|
||||
return user && this.isFunderCurator(user);
|
||||
} else if (type == 'ri' || type == 'community') {
|
||||
return user && this.isCommunityCurator(user);
|
||||
}else if(type == 'organization' || type == 'institution'){
|
||||
} else if (type == 'organization' || type == 'institution') {
|
||||
return user && this.isOrganizationCurator(user);
|
||||
}else if(type == 'project'){
|
||||
} else if (type == 'project') {
|
||||
return user && this.isProjectCurator(user);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static isPortalAdministrator(user: User): boolean {
|
||||
return user &&
|
||||
(user.role.indexOf('urn:geant:openaire.eu:group:Portal+Administrator#aai.openaire.eu') !== -1 ||
|
||||
user.role.indexOf('PORTAL_ADMINISTRATOR') !== -1);
|
||||
user.role.indexOf('PORTAL_ADMINISTRATOR') !== -1);
|
||||
}
|
||||
|
||||
|
||||
public static isUserManager(user: User): boolean {
|
||||
return user &&
|
||||
(user.role.indexOf('urn:geant:openaire.eu:group:User+Manager#aai.openaire.eu') !== -1 ||
|
||||
user.role.indexOf('USER_MANAGER') !== -1);
|
||||
user.role.indexOf('USER_MANAGER') !== -1);
|
||||
}
|
||||
|
||||
public static isSubscribedTo(type: string, id: string, user: User): boolean {
|
||||
return user && user.role.indexOf(type.toUpperCase() + '_' + id.toUpperCase()) !== -1;
|
||||
return user && user.role.indexOf(this.mapType(type).toUpperCase() + '_' + id.toUpperCase()) !== -1;
|
||||
}
|
||||
|
||||
public static isMember(type: string, id: string, user: User): boolean {
|
||||
return user && user.role.indexOf(this.mapType(type).toUpperCase() + '_' + id.toUpperCase()) !== -1;
|
||||
}
|
||||
|
||||
public static isManager(type: string, id: string, user: User): boolean {
|
||||
if(type == "ri"){
|
||||
type = "community";
|
||||
}else if (type == "organization"){
|
||||
type = "institution";
|
||||
}
|
||||
return user && user.role.indexOf(type.toUpperCase() + '_' + id.toUpperCase() + '_MANAGER') !== -1
|
||||
return user && user.role.indexOf(this.mapType(type).toUpperCase() + '_' + id.toUpperCase() + '_MANAGER') !== -1
|
||||
}
|
||||
public static isKindOfMonitorManager(user: User): boolean {
|
||||
if(user){
|
||||
for(let role of user.role ){
|
||||
if(role.indexOf('_MANAGER') !== -1){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static isKindOfMonitorManager(user: User): boolean {
|
||||
if (user) {
|
||||
for (let role of user.role) {
|
||||
if (role.indexOf('_MANAGER') !== -1) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static isRegisteredUser(user: User): boolean {
|
||||
return user &&
|
||||
(user.role.indexOf('urn:geant:openaire.eu:group:Registered+User#aai.openaire.eu') !== -1 ||
|
||||
user.role.indexOf('REGISTERED_USER') !== -1);
|
||||
user.role.indexOf('REGISTERED_USER') !== -1);
|
||||
}
|
||||
|
||||
public static mapType(type: string): string {
|
||||
if (type == "ri") {
|
||||
type = "community";
|
||||
} else if (type == "organization") {
|
||||
type = "institution";
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
export class COOKIE{
|
||||
public static cookieName_id:string="AccessToken";
|
||||
|
||||
public static getCookie(name: string) : string {
|
||||
if(typeof document == 'undefined'){
|
||||
return null;
|
||||
}
|
||||
let ca: Array<string> = document.cookie.split(';');
|
||||
let caLen: number = ca.length;
|
||||
let cookieName = `${name}=`;
|
||||
let c: string;
|
||||
|
||||
for (let i: number = 0; i < caLen; i += 1) {
|
||||
c = ca[i].replace(/^\s+/g, '');
|
||||
if (c.indexOf(cookieName) == 0) {
|
||||
return c.substring(cookieName.length, c.length);
|
||||
}
|
||||
}
|
||||
export class COOKIE {
|
||||
public static cookieName_id: string = "AccessToken";
|
||||
|
||||
public static getCookie(name: string): string {
|
||||
if (typeof document == 'undefined') {
|
||||
return null;
|
||||
}
|
||||
let ca: Array<string> = document.cookie.split(';');
|
||||
let caLen: number = ca.length;
|
||||
let cookieName = `${name}=`;
|
||||
let c: string;
|
||||
|
||||
for (let i: number = 0; i < caLen; i += 1) {
|
||||
c = ca[i].replace(/^\s+/g, '');
|
||||
if (c.indexOf(cookieName) == 0) {
|
||||
return c.substring(cookieName.length, c.length);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static deleteCookie(name) {
|
||||
this.setCookie(name, '', -1);
|
||||
this.setCookie(name, '', -1);
|
||||
}
|
||||
|
||||
public static setCookie(name: string, value: string, expireDays: number, path: string = '/') {
|
||||
//TODO fix domain?
|
||||
let d:Date = new Date();
|
||||
d.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000);
|
||||
let expires:string = `expires=${d.toUTCString()}`;
|
||||
// let cpath:string = path ? `; path=${path}` : '';
|
||||
let domain = "";
|
||||
if(typeof document !== 'undefined'){
|
||||
if(document.domain.indexOf(".di.uoa.gr")!= -1){ // for development
|
||||
domain = ".di.uoa.gr";
|
||||
}else if(document.domain.indexOf(".openaire.eu") != -1){
|
||||
domain = ".openaire.eu";
|
||||
}
|
||||
document.cookie = name+'='+value+'; path='+path+'; domain='+domain+';SameSite=Lax;';
|
||||
let d: Date = new Date();
|
||||
d.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000);
|
||||
let expires: string = `expires=${d.toUTCString()}`;
|
||||
// let cpath:string = path ? `; path=${path}` : '';
|
||||
let domain = "";
|
||||
if (typeof document !== 'undefined') {
|
||||
if (document.domain.indexOf(".di.uoa.gr") != -1) { // for development
|
||||
domain = ".di.uoa.gr";
|
||||
} else if (document.domain.indexOf(".openaire.eu") != -1) {
|
||||
domain = ".openaire.eu";
|
||||
}
|
||||
document.cookie = name + '=' + value + '; path=' + path + '; domain=' + domain + ';SameSite=Lax;';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ export class StakeholderService {
|
|||
getStakeholder(alias:string): Observable<Stakeholder> {
|
||||
if(!this.stakeholderSubject.value || this.stakeholderSubject.value.alias !== alias) {
|
||||
this.promise = new Promise<any>((resolve, reject) => {
|
||||
this.http.get<Stakeholder>(properties.monitorServiceAPIURL + '/stakeholder/' + encodeURIComponent(alias)).pipe(map(stakeholder => {
|
||||
this.http.get<Stakeholder>(properties.monitorServiceAPIURL + '/stakeholder/' + encodeURIComponent(alias), CustomOptions.registryOptions()).pipe(map(stakeholder => {
|
||||
return this.formalize(stakeholder);
|
||||
})).subscribe(stakeholder => {
|
||||
this.stakeholderSubject.next(stakeholder);
|
||||
|
|
|
@ -172,7 +172,7 @@ export class RoleVerificationComponent implements OnInit, OnDestroy {
|
|||
|
||||
public verifyManager() {
|
||||
this.loading = true;
|
||||
this.userRegistryService.verifyManager(this.verification.id, this.code.value).subscribe(() => {
|
||||
this.userRegistryService.verify(this.verification.id, this.code.value).subscribe(() => {
|
||||
this.loading = false;
|
||||
this.managerModal.cancel();
|
||||
this.error = null;
|
||||
|
|
|
@ -12,7 +12,12 @@ export class UserRegistryService {
|
|||
|
||||
constructor(private http: HttpClient) {
|
||||
}
|
||||
|
||||
|
||||
public createRole(type: string, id: string, role): Observable<any[]> {
|
||||
return this.http.post<any>(properties.registryUrl + 'createRole', role,
|
||||
CustomOptions.registryOptions()).pipe(map((response: any) => response.response));
|
||||
}
|
||||
|
||||
public getSubscribersCount(type: string, id: string): Observable<any> {
|
||||
return this.http.get(properties.registryUrl + encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/subscribers/count');
|
||||
}
|
||||
|
@ -27,62 +32,19 @@ export class UserRegistryService {
|
|||
null, CustomOptions.registryOptions());
|
||||
}
|
||||
|
||||
public removeManager(type: string, id: string, email: string): Observable<any> {
|
||||
public remove(type: string, id: string, email: string, role: "member" | "manager" = "manager"): Observable<any> {
|
||||
return this.http.delete<any>(properties.registryUrl +
|
||||
encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/manager/' + encodeURIComponent(email), CustomOptions.registryOptions());
|
||||
encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/' + role + '/' + encodeURIComponent(email), CustomOptions.registryOptions());
|
||||
}
|
||||
|
||||
public removeMember(type: string, id: string, email: string): Observable<any> {
|
||||
return this.http.delete<any>(properties.registryUrl +
|
||||
encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/member/' + encodeURIComponent(email), CustomOptions.registryOptions());
|
||||
}
|
||||
|
||||
public inviteManager(type: string, id: string, email: string, details: any): Observable<any[]> {
|
||||
public invite(type: string, id: string, email: string, details: any, role: "member" | "manager" = "manager"): Observable<any[]> {
|
||||
return this.http.post<any>(properties.registryUrl + 'invite/' +
|
||||
encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/manager/' + encodeURIComponent(email), details,
|
||||
encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/' + role + '/' + encodeURIComponent(email), details,
|
||||
CustomOptions.registryOptions()).pipe(map((response: any) => response.response));
|
||||
}
|
||||
|
||||
public inviteMember(type: string, id: string, email: string, details: any): Observable<any[]> {
|
||||
return this.http.post<any>(properties.registryUrl + 'invite/' +
|
||||
encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/member/' + encodeURIComponent(email), details,
|
||||
CustomOptions.registryOptions()).pipe(map((response: any) => response.response));
|
||||
}
|
||||
|
||||
public cancelManagerInvitation(type: string, id: string, email: string): Observable<any> {
|
||||
return this.http.delete<any>(properties.registryUrl + 'invite/' +
|
||||
encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/manager/' + encodeURIComponent(email),
|
||||
CustomOptions.registryOptions());
|
||||
}
|
||||
|
||||
public cancelMemberInvitation(type: string, id: string, email: string): Observable<any> {
|
||||
return this.http.delete<any>(properties.registryUrl + 'invite/' +
|
||||
encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/member/' + encodeURIComponent(email),
|
||||
CustomOptions.registryOptions());
|
||||
}
|
||||
|
||||
public getPendingManagers(type: string, id: string): Observable<any[]> {
|
||||
return this.http.get<any>(properties.registryUrl + 'invite/' + encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/managers/',
|
||||
CustomOptions.registryOptions()).pipe(map((response: any) => response.response));
|
||||
}
|
||||
|
||||
public getPendingMembers(type: string, id: string): Observable<any[]> {
|
||||
return this.http.get<any>(properties.registryUrl + 'invite/' + encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/members/',
|
||||
CustomOptions.registryOptions()).pipe(map((response: any) => response.response));
|
||||
}
|
||||
|
||||
public getMembers(type: string, id: string): Observable<any[]> {
|
||||
return this.http.get<any>(properties.registryUrl + encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/members/',
|
||||
CustomOptions.registryOptions()).pipe(map((response:any) => response.response));
|
||||
}
|
||||
|
||||
public getManagers(type: string, id: string): Observable<any[]> {
|
||||
return this.http.get<any>(properties.registryUrl + encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/managers/').pipe(map(response => response.response));
|
||||
}
|
||||
|
||||
public getMembersEmail(type: string, id: string): Observable<any[]> {
|
||||
return this.http.get<any>(properties.registryUrl + encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/members/email',
|
||||
CustomOptions.registryOptions()).pipe(map((response:any) => response.response));
|
||||
public verify(id: string, code: string, role: "member" | "manager" = "manager"): Observable<any> {
|
||||
return this.http.post<any>(properties.registryUrl + 'verification/' + role + '/' + encodeURIComponent(id), code, CustomOptions.registryOptions());
|
||||
}
|
||||
|
||||
public getInvitation(id: string): Observable<any> {
|
||||
|
@ -90,19 +52,28 @@ export class UserRegistryService {
|
|||
.pipe(map((response: any) => response.response));
|
||||
}
|
||||
|
||||
public verifyManager(id: string, code: string): Observable<any> {
|
||||
return this.http.post<any>(properties.registryUrl + 'verification/manager/' + encodeURIComponent(id), code, CustomOptions.registryOptions());
|
||||
}
|
||||
|
||||
public verifyMember(id: string, code: string): Observable<any> {
|
||||
return this.http.post<any>(properties.registryUrl + 'verification/member/' + encodeURIComponent(id), code, CustomOptions.registryOptions());
|
||||
}
|
||||
|
||||
public deleteVerification(id: string): Observable<any> {
|
||||
return this.http.delete<any>(properties.registryUrl + 'verification/' + encodeURIComponent(id), CustomOptions.registryOptions());
|
||||
}
|
||||
|
||||
public getManagersEmail(type: string, id: string): Observable<any[]> {
|
||||
return this.http.get<any>(properties.registryUrl + encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/managers/email').pipe(map(response => response.response));
|
||||
public getActiveEmail(type: string, id: string, role: "member" | "manager" = "manager"): Observable<any[]> {
|
||||
return this.http.get<any>(properties.registryUrl + encodeURIComponent(type) + '/' + encodeURIComponent(id) + "/" + role + 's/email',
|
||||
CustomOptions.registryOptions()).pipe(map((response:any) => response.response));
|
||||
}
|
||||
|
||||
public getActiveNames(type: string, id: string, role: "member" | "manager" = "manager"): Observable<any[]> {
|
||||
return this.http.get<any>(properties.registryUrl + encodeURIComponent(type) + '/' + encodeURIComponent(id) + "/" + role + 's/',
|
||||
CustomOptions.registryOptions()).pipe(map((response:any) => response.response));
|
||||
}
|
||||
|
||||
public getPending(type: string, id: string, role: "member" | "manager" = "manager"): Observable<any[]> {
|
||||
return this.http.get<any>(properties.registryUrl + 'invite/' + encodeURIComponent(type) + '/' + encodeURIComponent(id) + "/" + role + 's/',
|
||||
CustomOptions.registryOptions()).pipe(map((response: any) => response.response));
|
||||
}
|
||||
|
||||
public cancelInvitation(type: string, id: string, email: string, role: "member" | "manager" = "manager"): Observable<any> {
|
||||
return this.http.delete<any>(properties.registryUrl + 'invite/' +
|
||||
encodeURIComponent(type) + '/' + encodeURIComponent(id) + '/' + role + '/' + encodeURIComponent(email),
|
||||
CustomOptions.registryOptions());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@ export class VerificationComponent implements OnInit {
|
|||
|
||||
verify() {
|
||||
this.loading = true;
|
||||
this.userRegistryService.verifyManager(this.invitation.id, this.code.value).subscribe(() => {
|
||||
this.userRegistryService.verify(this.invitation.id, this.code.value).subscribe(() => {
|
||||
this.state = 'verified';
|
||||
this.loading = false;
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue