From 2629f953a2a3ebe23a71fd805e6e27f540981773 Mon Sep 17 00:00:00 2001
From: Martin Mechtel <mechtelm@user.hu-berlin.de>
Date: Sun, 27 Jan 2019 21:45:36 +0100
Subject: [PATCH] syscheck: save report works

---
 src/app/sys-check/backend.service.ts          | 30 ++++++++++++++++++-
 .../environment-check.component.html          |  2 +-
 .../environment-check.component.ts            | 18 ++++++-----
 .../network-check/network-check.component.ts  | 25 ++++++++++------
 .../questionnaire/questionnaire.component.ts  |  8 ++---
 src/app/sys-check/report/report.component.ts  |  3 +-
 src/app/sys-check/run.component.ts            | 17 +++++++++--
 src/app/sys-check/syscheck-data.service.ts    |  8 +----
 src/environments/environment.build.ts         |  2 +-
 src/environments/environment.ts               |  2 +-
 10 files changed, 81 insertions(+), 34 deletions(-)

diff --git a/src/app/sys-check/backend.service.ts b/src/app/sys-check/backend.service.ts
index 5c6bfee6..682b1936 100644
--- a/src/app/sys-check/backend.service.ts
+++ b/src/app/sys-check/backend.service.ts
@@ -72,6 +72,24 @@ export class BackendService {
       );
   }
 
+  // BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+  public saveReport (cid: string, keyphrase: string, title: string,
+      envResults: ReportEntry[], networkResults: ReportEntry[], questionnaireResults: ReportEntry[]): Observable<Boolean> {
+    const httpOptions = {
+      headers: new HttpHeaders({
+        'Content-Type':  'application/json'
+      })
+    };
+    return this.http
+      .post<boolean>(this.serverUrl + 'saveSysCheckReport.php',
+          {c: cid, k: keyphrase, t: title, e: envResults, n: networkResults, q: questionnaireResults}, httpOptions)
+        .pipe(
+          catchError(problem_data => {
+            return of(false);
+          })
+        );
+  }
+
   // BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
   public getUnitData (configId: string): Observable<UnitData> {
     const httpOptions = {
@@ -87,10 +105,13 @@ export class BackendService {
             return of(myreturn);
           })
         );
-    }
+  }
 
+  // 7777777777777777777777777777777777777777777777777777777777777777777777
   // 7777777777777777777777777777777777777777777777777777777777777777777777
   // Network check functions
+  // 7777777777777777777777777777777777777777777777777777777777777777777777
+  // 7777777777777777777777777777777777777777777777777777777777777777777777
   benchmarkDownloadRequest (requestedDownloadSize: number,
                             timeout: number,
                             callback: RequestBenchmarkerFunctionCallback): void {
@@ -247,3 +268,10 @@ export interface NetworkRequestTestResult {
   'size': number;
   'duration': number;
 }
+
+export interface ReportEntry {
+  id: string;
+  type: string;
+  label: string;
+  value: string;
+}
diff --git a/src/app/sys-check/environment-check/environment-check.component.html b/src/app/sys-check/environment-check/environment-check.component.html
index 687c3630..6084432f 100644
--- a/src/app/sys-check/environment-check/environment-check.component.html
+++ b/src/app/sys-check/environment-check/environment-check.component.html
@@ -16,7 +16,7 @@
   <mat-card>
     <mat-card-title>Browser</mat-card-title>
     <mat-card-content>
-      <p>{{ browserVersion }}</p>
+      <p>{{ browser }}</p>
     </mat-card-content>
   </mat-card>
 </div>
diff --git a/src/app/sys-check/environment-check/environment-check.component.ts b/src/app/sys-check/environment-check/environment-check.component.ts
index 4ebfd355..c4354173 100644
--- a/src/app/sys-check/environment-check/environment-check.component.ts
+++ b/src/app/sys-check/environment-check/environment-check.component.ts
@@ -1,8 +1,7 @@
-import { ReportEntry } from './../syscheck-data.service';
+import { ReportEntry } from './../backend.service';
 import { Component, OnInit } from '@angular/core';
 import { SyscheckDataService } from '../syscheck-data.service';
 
-
 @Component({
   selector: 'iqb-environment-check',
   templateUrl: './environment-check.component.html',
@@ -11,7 +10,9 @@ import { SyscheckDataService } from '../syscheck-data.service';
 export class EnvironmentCheckComponent implements OnInit {
   screenSizeText = 'bitte warten';
   osName = 'bitte warten';
-  browserVersion = 'bitte warten';
+  browser = 'bitte warten';
+  browserVersion = '';
+  browserName = '';
 
 
   constructor(
@@ -30,7 +31,9 @@ export class EnvironmentCheckComponent implements OnInit {
     const helperRegex = /[^.]*/;
     const browserInfo = helperRegex.exec(deviceInfoSplits[0]);
     const browserInfoSplits = browserInfo[0].split('/');
-    this.browserVersion = browserInfoSplits[0] + ' Version ' + browserInfoSplits[1];
+    this.browserVersion = browserInfoSplits[1];
+    this.browserName = browserInfoSplits[0];
+    this.browser = this.browserName + ' Version ' + this.browserVersion;
 
 
     // os + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -69,9 +72,10 @@ export class EnvironmentCheckComponent implements OnInit {
 
 
     const myReport: ReportEntry[] = [];
-    myReport.push({'label': 'Betriebssystem', 'value': this.osName});
-    myReport.push({'label': 'Browser', 'value': this.browserVersion});
-    myReport.push({'label': 'Bildschirm', 'value': this.screenSizeText});
+    myReport.push({'id': '0', 'type': 'environment', 'label': 'Betriebssystem', 'value': this.osName});
+    myReport.push({'id': '0', 'type': 'environment', 'label': 'Browser Name', 'value': this.browserName});
+    myReport.push({'id': '0', 'type': 'environment', 'label': 'Browser Version', 'value': this.browserVersion});
+    myReport.push({'id': '0', 'type': 'environment', 'label': 'Bildschirm', 'value': this.screenSizeText});
 
     this.ds.environmentData$.next(myReport);
   }
diff --git a/src/app/sys-check/network-check/network-check.component.ts b/src/app/sys-check/network-check/network-check.component.ts
index 325dacae..df1fe1f0 100644
--- a/src/app/sys-check/network-check/network-check.component.ts
+++ b/src/app/sys-check/network-check/network-check.component.ts
@@ -1,7 +1,7 @@
-import { SyscheckDataService, ReportEntry } from './../syscheck-data.service';
+import { SyscheckDataService } from './../syscheck-data.service';
 import { Component, OnInit } from '@angular/core';
 import { BackendService, NetworkRequestTestResult, RequestBenchmarkerFunction,
-      RequestBenchmarkerFunctionCallback} from '../backend.service';
+      RequestBenchmarkerFunctionCallback, ReportEntry} from '../backend.service';
 
 @Component({
   selector: 'iqb-network-check',
@@ -150,16 +150,23 @@ export class NetworkCheckComponent implements OnInit {
             // send data for reporting
             const myReport: ReportEntry[] = [];
 
-            myReport.push({'label': 'Downloadgeschwindigkeit', 'value': this.averageSpeed.downloadTest.toLocaleString()});
-            myReport.push({'label': 'Downloadbewertung', 'value': this.networkRating.downloadRating});
+            myReport.push({'id': '0', 'type': 'network',
+              'label': 'Downloadgeschwindigkeit', 'value': this.averageSpeed.downloadTest.toLocaleString()});
+            myReport.push({'id': '0', 'type': 'network',
+              'label': 'Downloadbewertung', 'value': this.networkRating.downloadRating});
 
-            myReport.push({'label': 'Uploadgeschwindigkeit', 'value': this.averageSpeed.uploadTest.toLocaleString()});
-            myReport.push({'label': 'Uploadbewertung', 'value': this.networkRating.uploadRating});
+            myReport.push({'id': '0', 'type': 'network',
+              'label': 'Uploadgeschwindigkeit', 'value': this.averageSpeed.uploadTest.toLocaleString()});
+            myReport.push({'id': '0', 'type': 'network',
+              'label': 'Uploadbewertung', 'value': this.networkRating.uploadRating});
 
-            myReport.push({'label': 'Ping', 'value': this.averageSpeed.pingTest.toLocaleString()});
-            myReport.push({'label': 'Ping-Bewertung', 'value': this.networkRating.pingRating});
+            myReport.push({'id': '0', 'type': 'network',
+              'label': 'Ping', 'value': this.averageSpeed.pingTest.toLocaleString()});
+            myReport.push({'id': '0', 'type': 'network',
+              'label': 'Ping-Bewertung', 'value': this.networkRating.pingRating});
 
-            myReport.push({'label': 'Allgemeine Bewertung der Verbindung zum Server', 'value': this.networkRating.overallRating});
+            myReport.push({'id': '0', 'type': 'network',
+              'label': 'Allgemeine Bewertung der Verbindung zum Server', 'value': this.networkRating.overallRating});
 
             this.ds.networkData$.next(myReport);
 
diff --git a/src/app/sys-check/questionnaire/questionnaire.component.ts b/src/app/sys-check/questionnaire/questionnaire.component.ts
index b94f110e..4488b89f 100644
--- a/src/app/sys-check/questionnaire/questionnaire.component.ts
+++ b/src/app/sys-check/questionnaire/questionnaire.component.ts
@@ -1,6 +1,6 @@
 import { FormControl, FormGroup } from '@angular/forms';
-import { FormDefEntry } from './../backend.service';
-import { SyscheckDataService, ReportEntry } from './../syscheck-data.service';
+import { FormDefEntry, ReportEntry } from './../backend.service';
+import { SyscheckDataService } from './../syscheck-data.service';
 import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
 
 @Component({
@@ -39,10 +39,10 @@ export class QuestionnaireComponent implements OnInit {
           const myReportEntries: ReportEntry[] = [];
           this.questions.forEach(element => {
             if (element.type === 'header') {
-              myReportEntries.push({'label': element.value, 'value': ''});
+              myReportEntries.push({'id': element.id, 'type': element.type, 'label': element.value, 'value': ''});
             } else {
               const myValue = this.form.controls[element.id].value;
-              myReportEntries.push({'label': element.prompt, 'value': myValue});
+              myReportEntries.push({'id': element.id, 'type': element.type, 'label': element.prompt, 'value': myValue});
             }
           });
           this.ds.questionnaireData$.next(myReportEntries);
diff --git a/src/app/sys-check/report/report.component.ts b/src/app/sys-check/report/report.component.ts
index 43a3522f..f59a423e 100644
--- a/src/app/sys-check/report/report.component.ts
+++ b/src/app/sys-check/report/report.component.ts
@@ -1,4 +1,5 @@
-import { SyscheckDataService, ReportEntry } from './../syscheck-data.service';
+import { ReportEntry } from './../backend.service';
+import { SyscheckDataService } from './../syscheck-data.service';
 import { Component, OnInit } from '@angular/core';
 
 @Component({
diff --git a/src/app/sys-check/run.component.ts b/src/app/sys-check/run.component.ts
index 08d2eca0..bf6c976a 100644
--- a/src/app/sys-check/run.component.ts
+++ b/src/app/sys-check/run.component.ts
@@ -5,7 +5,7 @@ import { SyscheckDataService } from './syscheck-data.service';
 import { BehaviorSubject } from 'rxjs';
 import { ActivatedRoute, ParamMap } from '@angular/router';
 import { Component, OnInit, ViewChild } from '@angular/core';
-import { CheckConfigData, BackendService } from './backend.service';
+import { CheckConfigData, BackendService, ReportEntry } from './backend.service';
 import { MatStepper, MatStep } from '../../../node_modules/@angular/material';
 import { UnitCheckComponent } from './unit-check/unit-check.component';
 import { EnvironmentCheckComponent } from './environment-check/environment-check.component';
@@ -142,7 +142,20 @@ export class RunComponent implements OnInit {
     });
     dialogRef.afterClosed().subscribe(result => {
       if (result !== false) {
-        this.snackBar.open('Bericht gespeichert.', '', {duration: 3000});
+        const reportKey = result.get('key').value as string;
+        const reportTitle = result.get('title').value as string;
+        const cd = this.ds.checkConfig$.getValue();
+        this.bs.saveReport(cd.id, reportKey, reportTitle,
+          this.ds.environmentData$.getValue(),
+          this.ds.networkData$.getValue(),
+          this.ds.questionnaireData$.getValue()
+        ).subscribe((saveOK: boolean) => {
+          if (saveOK) {
+            this.snackBar.open('Bericht gespeichert.', '', {duration: 3000});
+          } else {
+            this.snackBar.open('Konnte Bericht nicht speichern.', '', {duration: 3000});
+          }
+        });
       }
     });
   }
diff --git a/src/app/sys-check/syscheck-data.service.ts b/src/app/sys-check/syscheck-data.service.ts
index 4460e891..1107a063 100644
--- a/src/app/sys-check/syscheck-data.service.ts
+++ b/src/app/sys-check/syscheck-data.service.ts
@@ -1,4 +1,4 @@
-import { CheckConfigData } from './backend.service';
+import { CheckConfigData, ReportEntry } from './backend.service';
 import { BehaviorSubject } from 'rxjs';
 import { Injectable } from '@angular/core';
 // import { e } from '@angular/core/src/render3';
@@ -36,9 +36,3 @@ export class SyscheckDataService {
     this.pageTitle$.next('IQB-Testcenter - System-Check');
   }
 }
-
-export interface ReportEntry {
-  label: string;
-  value: string;
-}
-
diff --git a/src/environments/environment.build.ts b/src/environments/environment.build.ts
index 70c550e4..7d501065 100644
--- a/src/environments/environment.build.ts
+++ b/src/environments/environment.build.ts
@@ -5,5 +5,5 @@ export const environment = {
   testcenterUrl: '/',
   appName: 'IQB-Testcenter',
   appPublisher: 'IQB - Institut zur Qualitätsentwicklung im Bildungswesen',
-  appVersion: '0.14.0 - 17.1.2019'
+  appVersion: '0.14.1 - 27.1.2019'
 };
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index f3e2e760..50ce0325 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -4,7 +4,7 @@
 
 export const environment = {
   production: false,
-  testcenterUrl: 'https://ocba.iqb.hu-berlin.de/',
+  testcenterUrl: 'https://www.iqb-testcenter.de/',
   appName: 'IQB-Testcenter',
   appPublisher: 'IQB - Institut zur Qualitätsentwicklung im Bildungswesen',
   appVersion: '0 (dev)'
-- 
GitLab