diff --git a/src/app/app.interceptor.ts b/src/app/app.interceptor.ts index 038576bd23fcc781f79d903de4915eafe2388f1c..639c5488fa00d59a741d863cc7b932f9b1d3c5b0 100644 --- a/src/app/app.interceptor.ts +++ b/src/app/app.interceptor.ts @@ -1,7 +1,7 @@ import { MainDataService } from './maindata.service'; import { Injectable } from '@angular/core'; import { HttpInterceptor, HttpRequest, - HttpHandler, HttpEvent, HTTP_INTERCEPTORS } from '@angular/common/http'; + HttpHandler, HttpEvent } from '@angular/common/http'; import { Observable } from 'rxjs'; @Injectable() @@ -38,7 +38,3 @@ export class AuthInterceptor implements HttpInterceptor { return next.handle(requestA); } } - -export const httpInterceptorProviders = [ - { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }, -]; diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 8f8bbe6bade39d6689e34bec4a78a1115f57fc31..7fa451345e4aae791c8ae203e4793d853fe33e6d 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,6 +1,6 @@ import { AboutComponent } from './about/about.component'; import { BrowserModule } from '@angular/platform-browser'; -import { HttpClientModule } from '@angular/common/http'; +import {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { NgModule } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; @@ -16,7 +16,7 @@ import { StartComponent } from './start/start.component'; import { LocationStrategy, HashLocationStrategy } from '@angular/common'; import { FlexLayoutModule } from '@angular/flex-layout'; import { ErrormsgComponent } from './errormsg/errormsg.component'; -import { httpInterceptorProviders } from './app.interceptor'; +import {AuthInterceptor} from './app.interceptor'; import { IqbComponentsModule } from 'iqb-components'; @@ -54,14 +54,16 @@ import { IqbComponentsModule } from 'iqb-components'; ], providers: [ BackendService, - httpInterceptorProviders, + { + provide: HTTP_INTERCEPTORS, + useClass: AuthInterceptor, + multi: true + }, { provide: LocationStrategy, useClass: HashLocationStrategy } ], - entryComponents: [ - ], bootstrap: [AppComponent] }) export class AppModule { } diff --git a/src/app/maindata.service.ts b/src/app/maindata.service.ts index 74226b7bc43c305ca28e18262c518740ba513238..186fdc8dfdfc15c3a2630ba606a83d7b9f5ea79a 100644 --- a/src/app/maindata.service.ts +++ b/src/app/maindata.service.ts @@ -120,42 +120,6 @@ export class MainDataService { return this.loginData$.getValue().testId; } - - getWorkspaceName(ws: number): string { - let myreturn = ''; - if (ws > 0) { - const myLoginData = this.loginData$.getValue(); - if ((myLoginData !== null) && (myLoginData.workspaces.length > 0)) { - for (let i = 0; i < myLoginData.workspaces.length; i++) { - // tslint:disable-next-line:triple-equals - one is float, other is int - if (myLoginData.workspaces[i].id == ws) { - myreturn = myLoginData.workspaces[i].name; - break; - } - } - } - } - return myreturn; - } - - getWorkspaceRole(ws: number): string { - let myreturn = ''; - if (ws > 0) { - const myLoginData = this.loginData$.getValue(); - if ((myLoginData !== null) && (myLoginData.workspaces.length > 0)) { - for (let i = 0; i < myLoginData.workspaces.length; i++) { - // tslint:disable-next-line:triple-equals - one is float, other is int - if (myLoginData.workspaces[i].id == ws) { - myreturn = myLoginData.workspaces[i].role; - break; - } - } - } - } - return myreturn; - } - - // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ endBooklet () { const myLoginData = this.loginData$.getValue(); diff --git a/src/app/superadmin/backend.service.ts b/src/app/superadmin/backend.service.ts index 811a8c8307f64f6be807e7936554fb1c515365c2..00da11b36d391cfa6f1b85f92bf27cdc16414e85 100644 --- a/src/app/superadmin/backend.service.ts +++ b/src/app/superadmin/backend.service.ts @@ -11,8 +11,7 @@ export class BackendService { constructor( @Inject('SERVER_URL') private readonly serverUrl: string, private http: HttpClient) { - this.serverUrl = this.serverUrl + 'php/sys.php/'; - } + } getUsers(): Observable<IdAndName[]> { diff --git a/src/app/superadmin/superadmin-routing.module.ts b/src/app/superadmin/superadmin-routing.module.ts index 2ae1f0a3539e3703379ea5a6dd4008c75cee58ff..edbabde86edf28d79a64465db97d6530510f884c 100644 --- a/src/app/superadmin/superadmin-routing.module.ts +++ b/src/app/superadmin/superadmin-routing.module.ts @@ -1,12 +1,21 @@ import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; -import {SuperadminComponent} from './superadmin.component'; + +import { WorkspacesComponent } from './workspaces/workspaces.component'; +import { UsersComponent } from './users/users.component'; +import { SuperadminComponent } from './superadmin.component'; const routes: Routes = [ { path: '', - component: SuperadminComponent + component: SuperadminComponent, + children: [ + {path: '', redirectTo: 'users', pathMatch: 'full'}, + {path: 'users', component: UsersComponent}, + {path: 'workspaces', component: WorkspacesComponent}, + {path: '**', component: UsersComponent} + ] } ]; diff --git a/src/app/superadmin/superadmin.component.css b/src/app/superadmin/superadmin.component.css index 6da29efa857cb699c343691414dd2ccda9286bfb..4b61712221aa644513abf987754994243b54f181 100644 --- a/src/app/superadmin/superadmin.component.css +++ b/src/app/superadmin/superadmin.component.css @@ -1,4 +1,35 @@ -p { - margin: 10px; - color: aliceblue; +#buttonsContainer { + color: white; + padding: 0 10px 0 0; +} + +#buttonsContainer .material-icons { + font-size: 2.0rem; +} + +#buttonsContainer img { + width: 100px; +} + +mat-toolbar { + position: fixed; + z-index: 100; + top: 4px; + right: 90px; +} + +#buttonsContainer .material-icons { + position: relative; + top: -8px; + font-size: 36px; + padding: 2px; +} + +.adminbackground { + flex: 10 0 900px; + box-shadow: 5px 10px 20px black; + background-color: white; + min-height: 85%; + margin: 15px; + padding: 25px; } diff --git a/src/app/superadmin/superadmin.component.html b/src/app/superadmin/superadmin.component.html index 53b686b5dfba1a33585add0a1dbc60eb4f898316..d1a5470ae8803453ab9ecf31da9a1067ec3d0a75 100644 --- a/src/app/superadmin/superadmin.component.html +++ b/src/app/superadmin/superadmin.component.html @@ -1,4 +1,25 @@ -<p>SuperadminComponent</p> -<p>Eingeloggt als {{ (mds.loginData$ | async)?.name}}</p> -<p> </p> -<p>Sorry - die Einbindung der Administrator-Funktionen in das Testcenter ist noch in Arbeit.</p> +<div id="buttonsContainer" fxLayout="row" fxLayoutAlign="start center"> + <a [routerLink]="['/']"> + <img src="assets/IQB-LogoA.png" matTooltip="Startseite"/> + </a> + <div fxLayout="row wrap" fxLayoutAlign="space-around center" fxFlex> + <div class="error-msg">{{ (mds.globalErrorMsg$ | async)?.labelNice }}</div> + <div>IQB-Testcenter Systemverwaltung</div> + </div> +</div> +<div class="page-body"> + <div class="adminbackground"> + + <nav mat-tab-nav-bar> + <a mat-tab-link + *ngFor="let link of navLinks" + [routerLink]="link.path" + routerLinkActive #rla="routerLinkActive" + [active]="rla.isActive"> + {{link.label}} + </a> + </nav> + + <router-outlet></router-outlet> + </div> +</div> diff --git a/src/app/superadmin/superadmin.component.ts b/src/app/superadmin/superadmin.component.ts index 372a55ea5964a5c990abf2d86067ba8f0cc8ae77..b4d9118a64a6b18e0cbe2f7d6844214043909c53 100644 --- a/src/app/superadmin/superadmin.component.ts +++ b/src/app/superadmin/superadmin.component.ts @@ -1,17 +1,19 @@ -import { Component, OnInit } from '@angular/core'; -import {MainDataService} from '../maindata.service'; +import { Component } from '@angular/core'; +import { MainDataService } from '../maindata.service'; + + @Component({ templateUrl: './superadmin.component.html', styleUrls: ['./superadmin.component.css'] }) -export class SuperadminComponent implements OnInit { - +export class SuperadminComponent { constructor( public mds: MainDataService ) { } - ngOnInit() { - } - + public navLinks = [ + {path: 'users', label: 'Users'}, + {path: 'workspaces', label: 'Arbeitsbereiche'} + ]; } diff --git a/src/app/superadmin/superadmin.module.ts b/src/app/superadmin/superadmin.module.ts index c1d6b80bf71ad400cda868b1730be3b787af13f3..e53178adda953f574a53222685b07166e8c2763c 100644 --- a/src/app/superadmin/superadmin.module.ts +++ b/src/app/superadmin/superadmin.module.ts @@ -9,24 +9,74 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatIconModule } from '@angular/material/icon'; import { MatTableModule } from '@angular/material/table'; import { MatCheckboxModule } from '@angular/material/checkbox'; +import {MatTabsModule} from "@angular/material/tabs"; +import {MatSelectModule} from "@angular/material/select"; +import {MatSortModule} from "@angular/material/sort"; +import {MatCardModule} from "@angular/material/card"; +import {MatExpansionModule} from "@angular/material/expansion"; +import {ReactiveFormsModule} from "@angular/forms"; +import {MatDialogModule} from "@angular/material/dialog"; +import {MatButtonModule} from "@angular/material/button"; +import {MatTooltipModule} from "@angular/material/tooltip"; +import {MatFormFieldModule} from "@angular/material/form-field"; +import {MatInputModule} from "@angular/material/input"; +import {MatToolbarModule} from "@angular/material/toolbar"; +import {MatSnackBarModule} from "@angular/material/snack-bar"; +import {MatGridListModule} from "@angular/material/grid-list"; +import {FlexLayoutModule} from "@angular/flex-layout"; +import {BackendService} from "./backend.service"; +import {NewpasswordComponent} from "./users/newpassword/newpassword.component"; +import {NewuserComponent} from "./users/newuser/newuser.component"; +import {NewworkspaceComponent} from "./workspaces/newworkspace/newworkspace.component"; +import {EditworkspaceComponent} from "./workspaces/editworkspace/editworkspace.component"; @NgModule({ declarations: [ SuperadminComponent, UsersComponent, + NewpasswordComponent, + NewuserComponent, + NewworkspaceComponent, + EditworkspaceComponent, WorkspacesComponent ], imports: [ CommonModule, SuperadminRoutingModule, - MatProgressSpinnerModule, - MatIconModule, MatTableModule, - MatCheckboxModule + MatTabsModule, + MatIconModule, + MatSelectModule, + MatCheckboxModule, + MatSortModule, + MatCardModule, + MatExpansionModule, + ReactiveFormsModule, + MatProgressSpinnerModule, + MatDialogModule, + MatButtonModule, + MatTooltipModule, + MatFormFieldModule, + MatInputModule, + MatToolbarModule, + MatDialogModule, + MatSnackBarModule, + MatGridListModule, + MatCardModule, + FlexLayoutModule, ], exports: [ SuperadminComponent + ], + entryComponents: [ + NewpasswordComponent, + NewuserComponent, + NewworkspaceComponent, + EditworkspaceComponent + ], + providers: [ + BackendService, ] }) export class SuperadminModule { } diff --git a/src/app/superadmin/users/users.component.html b/src/app/superadmin/users/users.component.html index e20f28032a86975a30ffc0b2a43dd28f8d1ab494..5e1b3d152aef627dc85bed86728eb7ae6920aaaa 100644 --- a/src/app/superadmin/users/users.component.html +++ b/src/app/superadmin/users/users.component.html @@ -9,10 +9,12 @@ <button mat-raised-button (click)="addObject()" matTooltip="Nutzer hinzufügen" matTooltipPosition="above"> <mat-icon>add</mat-icon> </button> - <button mat-raised-button (click)="deleteObject()" matTooltip="Markierte Nutzer löschen" matTooltipPosition="above"> + <button mat-raised-button (click)="deleteObject()" + matTooltip="Markierte Nutzer löschen" matTooltipPosition="above"> <mat-icon>delete</mat-icon> </button> - <button mat-raised-button (click)="changePassword()" matTooltip="Kennwort ändern" matTooltipPosition="above"> + <button mat-raised-button (click)="changePassword()" + matTooltip="Kennwort ändern" matTooltipPosition="above"> <mat-icon>edit</mat-icon> </button> </div> @@ -47,13 +49,13 @@ <!-- ============================================= --> <div *ngIf="isSuperadmin" fxLayout="column" fxFlex="40"> - <div *ngIf="selectedUser.length == 0"> + <div *ngIf="selectedUser < 0"> <div>Zugriffsrechte für Arbeitsbereich(e):</div> <div>Bitte links einen Nutzer wählen</div> </div> - <div *ngIf="selectedUser.length > 0" fxLayout="row" fxLayoutAlign="space-between center"> - <div>Zugriffsrechte für {{ selectedUser }}:</div> + <div *ngIf="selectedUser > 0" fxLayout="row" fxLayoutAlign="space-between center"> + <div>Zugriffsrechte für {{ selectedUserName }}:</div> <button mat-raised-button (click)="saveWorkspaces()" matTooltip="Speichern" matTooltipPosition="above" [disabled]="!pendingWorkspaceChanges"> <mat-icon>save</mat-icon> @@ -62,14 +64,12 @@ <mat-table [dataSource]="WorkspacelistDatasource" matSort> <ng-container matColumnDef="selectCheckbox"> - <mat-header-cell *matHeaderCellDef mat-sort-header>RO | RW | MO</mat-header-cell> + <mat-header-cell *matHeaderCellDef mat-sort-header>RO | RW</mat-header-cell> <mat-cell *matCellDef="let row" fxFlex="100px"> <mat-checkbox (change)="selectWorkspace(row, 'RO')" [checked]="row.role === 'RO'" matTooltip="RO"> </mat-checkbox> <mat-checkbox (change)="selectWorkspace(row, 'RW')" [checked]="row.role === 'RW'" matTooltip="RW"> </mat-checkbox> - <mat-checkbox (change)="selectWorkspace(row, 'MO')" [checked]="row.role === 'MO'" matTooltip="MO"> - </mat-checkbox> </mat-cell> </ng-container> diff --git a/src/app/superadmin/users/users.component.ts b/src/app/superadmin/users/users.component.ts index e2c8220ac5ead7b6b21f7b48152eee7b6e197ed1..cdcbb8a3843a7899c954c0964eaa0f95a3a01bae 100644 --- a/src/app/superadmin/users/users.component.ts +++ b/src/app/superadmin/users/users.component.ts @@ -30,6 +30,7 @@ export class UsersComponent implements OnInit, OnDestroy { private tableselectionCheckbox = new SelectionModel<IdAndName>(true, []); private tableselectionRow = new SelectionModel<IdAndName>(false, []); private selectedUser = -1; + private selectedUserName = ''; private pendingWorkspaceChanges = false; public WorkspacelistDatasource: MatTableDataSource<IdRoleData>; @@ -51,8 +52,10 @@ export class UsersComponent implements OnInit, OnDestroy { r => { if (r.added.length > 0) { this.selectedUser = r.added[0].id; + this.selectedUserName = r.added[0].name } else { this.selectedUser = -1; + this.selectedUserName = ''; } this.updateWorkspaceList(); }); diff --git a/src/app/superadmin/workspaces/workspaces.component.html b/src/app/superadmin/workspaces/workspaces.component.html index 289abc7259fb8fcbde429c7015c55bcfc0bbcc17..05a42a79cdbb5a2be2f5ccbd4c75b59a2e039ebc 100644 --- a/src/app/superadmin/workspaces/workspaces.component.html +++ b/src/app/superadmin/workspaces/workspaces.component.html @@ -9,7 +9,8 @@ <button mat-raised-button (click)="addObject()" matTooltip="Arbeitsbereich hinzufügen" matTooltipPosition="above"> <mat-icon>add</mat-icon> </button> - <button mat-raised-button (click)="deleteObject()" matTooltip="Markierte/n Arbeitsbereich/e löschen" matTooltipPosition="above"> + <button mat-raised-button (click)="deleteObject()" + matTooltip="Markierte/n Arbeitsbereich/e löschen" matTooltipPosition="above"> <mat-icon>delete</mat-icon> </button> <button mat-raised-button (click)="changeObject()" matTooltip="Arbeitsbereich umbenennen" matTooltipPosition="above"> diff --git a/src/app/test-controller/test-controller.module.ts b/src/app/test-controller/test-controller.module.ts index 2b783d383a6e5425247c093142d668b33da6c8c3..7deb84e54b55c2a4011b6363076ff3d0c4a8d0c9 100644 --- a/src/app/test-controller/test-controller.module.ts +++ b/src/app/test-controller/test-controller.module.ts @@ -39,7 +39,6 @@ import { StartLockInputComponent } from './start-lock-input/start-lock-input.com MatToolbarModule, MatIconModule, IqbComponentsModule.forChild() - ], declarations: [ UnithostComponent, diff --git a/src/app/workspace-admin/backend.service.ts b/src/app/workspace-admin/backend.service.ts index 7ad9ae82c0f2b41afb3d02cd468fea5b343149ca..336c92db42262c6b3305bba6d979a3c33af92597 100644 --- a/src/app/workspace-admin/backend.service.ts +++ b/src/app/workspace-admin/backend.service.ts @@ -1,5 +1,5 @@ -import { GetFileResponseData, CheckWorkspaceResponseData, BookletsStarted, SysCheckStatistics, - ReviewData, LogData, UnitResponse, ResultData, MonitorData } from './workspace.interfaces'; +import { GetFileResponseData, CheckWorkspaceResponseData, SysCheckStatistics, + ReviewData, LogData, UnitResponse, ResultData } from './workspace.interfaces'; import {Injectable, Inject} from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; @@ -38,35 +38,6 @@ export class BackendService { .pipe(catchError(ErrorHandler.handle)); } - getBookletsStarted(workspaceId: number, groups: string[]): Observable<BookletsStarted[] | ServerError> { - - return this.http - .get<BookletsStarted[]>(this.serverUrl + `workspace/${workspaceId}/booklets/started`, {params: {groups: groups.join(',')}}) - .pipe(catchError(ErrorHandler.handle)); - } - - lockBooklets(workspaceId: number, groups: string[]): Observable<boolean | ServerError> { - - return this.http - .patch<boolean>(this.serverUrl + `workspace/${workspaceId}/tests/lock`, {groups: groups}) - .pipe(catchError(ErrorHandler.handle)); - } - - unlockBooklets(workspaceId: number, groups: string[]): Observable<boolean | ServerError> { - - return this.http - .patch<boolean>(this.serverUrl + `workspace/${workspaceId}/tests/unlock`, {groups: groups}) - .pipe(catchError(ErrorHandler.handle)); - } - - - getMonitorData(workspaceId: number): Observable<MonitorData[] | ServerError> { - - return this.http - .get<MonitorData[]>(this.serverUrl + `workspace/${workspaceId}/status`, {}) - .pipe(catchError(ErrorHandler.handle)); - } - getResultData(workspaceId: number): Observable<ResultData[]> { return this.http diff --git a/src/app/workspace-admin/files/files.component.ts b/src/app/workspace-admin/files/files.component.ts index 4a5061bf64ce782303e872c97b381a39a5b7dac0..06ced970feba139dffbcfabf5535e2b66962ad7a 100644 --- a/src/app/workspace-admin/files/files.component.ts +++ b/src/app/workspace-admin/files/files.component.ts @@ -46,7 +46,7 @@ export class FilesComponent implements OnInit, OnDestroy { this.wds.workspaceId$.subscribe(workspaceId => { this.uploadUrl = this.serverUrl + `workspace/${workspaceId}/file`; }); - this.uploadUrl = this.serverUrl + this.wds.ws + '/file'; + this.uploadUrl = this.serverUrl + "workspace/" + this.wds.ws + '/file'; } ngOnInit() { diff --git a/src/app/workspace-admin/files/iqb-files/iqbFilesUpload/iqbFilesUpload.component.ts b/src/app/workspace-admin/files/iqb-files/iqbFilesUpload/iqbFilesUpload.component.ts index 60d7137136aacc694f103a6dc337429493673928..8f8e832caefbf2a15175958dd0826c2571418a4b 100644 --- a/src/app/workspace-admin/files/iqb-files/iqbFilesUpload/iqbFilesUpload.component.ts +++ b/src/app/workspace-admin/files/iqb-files/iqbFilesUpload/iqbFilesUpload.component.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, Input, OnInit, Output, HostBinding } from '@angular/core'; +import {Component, EventEmitter, Input, OnInit, Output, HostBinding, OnDestroy} from '@angular/core'; import { HttpClient, HttpEventType, HttpHeaders, HttpParams, HttpErrorResponse, HttpEvent } from '@angular/common/http'; @@ -10,7 +10,7 @@ import { HttpClient, HttpEventType, HttpHeaders, HttpParams, styleUrls: ['../iqb-files.scss'], }) - export class IqbFilesUploadComponent implements OnInit { + export class IqbFilesUploadComponent implements OnInit, OnDestroy { @HostBinding('class') myclass = 'iqb-files-upload'; constructor( @@ -30,7 +30,7 @@ import { HttpClient, HttpEventType, HttpHeaders, HttpParams, // '''''''''''''''''''''''' private requestResponseText: string; get statustext(): string { - let myreturn = ''; + let myreturn; switch (this._status) { case UploadStatus.busy: { myreturn = 'Bitte warten'; @@ -180,6 +180,11 @@ import { HttpClient, HttpEventType, HttpHeaders, HttpParams, this.removeFileRequestEvent.emit(this); } + ngOnDestroy(): void { + if (this.fileUploadSubscription) { + this.fileUploadSubscription.unsubscribe(); + } + } } export enum UploadStatus { diff --git a/src/app/workspace-admin/workspace.component.css b/src/app/workspace-admin/workspace.component.css index b6162710eeaea472d7054f155f74e142018bdcfd..4b61712221aa644513abf987754994243b54f181 100644 --- a/src/app/workspace-admin/workspace.component.css +++ b/src/app/workspace-admin/workspace.component.css @@ -1,16 +1,16 @@ -/* --------------------------------------------- */ #buttonsContainer { color: white; padding: 0 10px 0 0; } + #buttonsContainer .material-icons { font-size: 2.0rem; } + #buttonsContainer img { width: 100px; } -/* --------------------------------------------- */ mat-toolbar { position: fixed; z-index: 100; diff --git a/src/app/workspace-admin/workspace.component.ts b/src/app/workspace-admin/workspace.component.ts index 1b7ed70ce1e0312bc8581cceeefd5fee35e2f799..3958ab13f6ac91b3d8f3915e181c4d71ae02594c 100644 --- a/src/app/workspace-admin/workspace.component.ts +++ b/src/app/workspace-admin/workspace.component.ts @@ -22,11 +22,11 @@ export class WorkspaceComponent implements OnInit, OnDestroy { ngOnInit() { this.routingSubscription = this.route.params.subscribe(params => { const ws = Number(params['ws']); - this.wds.setWorkspace(ws, this.mds.getWorkspaceRole(ws), this.mds.getWorkspaceName(ws)); + this.wds.setWorkspace(ws); }); this.logindataSubscription = this.mds.loginData$.subscribe(() => { - this.wds.setWorkspace(this.wds.ws, this.mds.getWorkspaceRole(this.wds.ws), this.mds.getWorkspaceName(this.wds.ws)); + this.wds.setWorkspace(this.wds.ws); }); } diff --git a/src/app/workspace-admin/workspace.interceptor.ts b/src/app/workspace-admin/workspace.interceptor.ts deleted file mode 100644 index fa6ed54646e8f7fbba0f96a004289b2d89bdb77a..0000000000000000000000000000000000000000 --- a/src/app/workspace-admin/workspace.interceptor.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { WorkspaceDataService } from './workspacedata.service'; -import { Injectable } from '@angular/core'; -import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -@Injectable() - -export class WorkspaceInterceptor implements HttpInterceptor { - constructor(public wds: WorkspaceDataService) {} - - intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { - const ws = this.wds.workspaceId$.getValue(); - if (ws >= 0) { - const authDataStr = request.headers.get('AuthToken'); - let authData = {}; - if (authDataStr) { - authData = JSON.parse(authDataStr); - } - authData['ws'] = ws; - return next.handle(request.clone({ - setHeaders: { - AuthToken: JSON.stringify(authData) - } - })); - } else { - return next.handle(request); - } - } -} diff --git a/src/app/workspace-admin/workspace.module.ts b/src/app/workspace-admin/workspace.module.ts index 074fa4877c2806da90c546fcbbee94a21f1dcdbe..3fbecf6ed4c8dfd92c2a2fe869e4adb45aef9cdb 100644 --- a/src/app/workspace-admin/workspace.module.ts +++ b/src/app/workspace-admin/workspace.module.ts @@ -29,8 +29,6 @@ import { MatExpansionModule } from '@angular/material/expansion'; import { MatGridListModule } from '@angular/material/grid-list'; import { SyscheckComponent } from './syscheck/syscheck.component'; import { IqbComponentsModule } from 'iqb-components'; -import { HTTP_INTERCEPTORS } from '@angular/common/http'; -import { WorkspaceInterceptor } from './workspace.interceptor'; import {IqbFilesModule} from './files/iqb-files'; @NgModule({ @@ -70,13 +68,6 @@ import {IqbFilesModule} from './files/iqb-files'; SyscheckComponent ], providers: [ - // interceptor adds ws to AuthToken - // not working when module is lazy loaded! - { - provide: HTTP_INTERCEPTORS, - useClass: WorkspaceInterceptor, - multi: true - }, BackendService, WorkspaceDataService ], diff --git a/src/app/workspace-admin/workspacedata.service.ts b/src/app/workspace-admin/workspacedata.service.ts index ffb185a94d1e082d770ce359564569fa1149d998..1ad6f0061db1c0b221e74806862009147d89211e 100644 --- a/src/app/workspace-admin/workspacedata.service.ts +++ b/src/app/workspace-admin/workspacedata.service.ts @@ -23,52 +23,36 @@ export class WorkspaceDataService { public get wsName(): string { return this._wsName; } - public navLinks = []; - - - private navLinksRW = [ - {path: 'files', label: 'Dateien'}, - {path: 'syscheck', label: 'System-Check Berichte'}, - {path: 'monitor', label: 'Monitor'}, - {path: 'results', label: 'Ergebnisse'} - ]; - private navLinksRO = [ + public navLinks = [ {path: 'files', label: 'Dateien'}, {path: 'syscheck', label: 'System-Check Berichte'}, - {path: 'monitor', label: 'Monitor'}, - {path: 'results', label: 'Ergebnisse'} - ]; - private navLinksMO = [ - {path: 'monitor', label: 'Monitor'} + {path: 'results', label: 'Ergebnisse/Antworten'} ]; - constructor() {} + constructor( + private mds: MainDataService + ) {} setNewErrorMsg(err: ServerError = null) { this.globalErrorMsg$.next(err); } - setWorkspace(newId: number, newRole: string, newName: string) { - this._wsName = newName; - this._wsRole = newRole; - switch (newRole.toUpperCase()) { - case 'RW': { - this.navLinks = this.navLinksRW; - break; - } - case 'RO': { - this.navLinks = this.navLinksRO; - break; - } - case 'MO': { - this.navLinks = this.navLinksMO; - break; - } - default: { - this.navLinks = []; - break; + setWorkspace(newId: number) { + this._wsName = ''; + this._wsRole = ''; + if (newId > 0) { + const myLoginData = this.mds.loginData$.getValue(); + if ((myLoginData !== null) && (myLoginData.workspaces.length > 0)) { + for (let i = 0; i < myLoginData.workspaces.length; i++) { + if (myLoginData.workspaces[i].id == newId) { + this._wsName = myLoginData.workspaces[i].name; + this._wsRole = myLoginData.workspaces[i].role; + break; + } + } } } + this.workspaceId$.next(newId); } } diff --git a/src/app/workspace-monitor/backend.service.ts b/src/app/workspace-monitor/backend.service.ts index 724c6f709846587ce8f13808f027fdc79cb2a3e5..2730e41ce6996bfc1cf9d49f7de2623441700a23 100644 --- a/src/app/workspace-monitor/backend.service.ts +++ b/src/app/workspace-monitor/backend.service.ts @@ -20,35 +20,32 @@ export class BackendService { this.serverUrl = this.serverUrl + 'php/'; } - getBookletsStarted(ws: number, groups: string[]): Observable<BookletsStarted[] | ServerError> { + getBookletsStarted(workspaceId: number, groups: string[]): Observable<BookletsStarted[] | ServerError> { + return this.http - .post<BookletsStarted[]>(this.serverUrl + 'getBookletsStarted.php', {g: groups}) - .pipe( - catchError(ErrorHandler.handle) - ); + .get<BookletsStarted[]>(this.serverUrl + `workspace/${workspaceId}/booklets/started`, {params: {groups: groups.join(',')}}) + .pipe(catchError(ErrorHandler.handle)); } - lockBooklets(ws: number, groups: string[]): Observable<boolean | ServerError> { + lockBooklets(workspaceId: number, groups: string[]): Observable<boolean | ServerError> { + return this.http - .post<boolean>(this.serverUrlSlim + 'lock', {g: groups}) - .pipe( - catchError(ErrorHandler.handle) - ); + .patch<boolean>(this.serverUrl + `workspace/${workspaceId}/tests/lock`, {groups: groups}) + .pipe(catchError(ErrorHandler.handle)); } - unlockBooklets(ws: number, groups: string[]): Observable<boolean | ServerError> { + unlockBooklets(workspaceId: number, groups: string[]): Observable<boolean | ServerError> { + return this.http - .post<boolean>(this.serverUrlSlim + 'unlock', {g: groups}) - .pipe( - catchError(ErrorHandler.handle) - ); -} + .patch<boolean>(this.serverUrl + `workspace/${workspaceId}/tests/unlock`, {groups: groups}) + .pipe(catchError(ErrorHandler.handle)); + } + + + getMonitorData(workspaceId: number): Observable<MonitorData[] | ServerError> { - getMonitorData(ws: number): Observable<MonitorData[] | ServerError> { return this.http - .post<MonitorData[]>(this.serverUrl + 'getMonitorData.php', {}) - .pipe( - catchError(ErrorHandler.handle) - ); + .get<MonitorData[]>(this.serverUrl + `workspace/${workspaceId}/status`, {}) + .pipe(catchError(ErrorHandler.handle)); } }