From a3bba99380c0dbcf2b187b04d398ca68cfe361bb Mon Sep 17 00:00:00 2001 From: Alex ORLUC <alex.orluc@maarch.org> Date: Thu, 18 Jun 2020 15:22:51 +0200 Subject: [PATCH] FEAT #13671 TIME 1:20 front database installer --- .../database/database.component.html | 78 ++++++++----------- .../database/database.component.scss | 5 +- .../installer/database/database.component.ts | 46 +++++++---- .../app/installer/installer.component.html | 2 +- src/frontend/lang/lang-fr.ts | 7 +- 5 files changed, 75 insertions(+), 63 deletions(-) diff --git a/src/frontend/app/installer/database/database.component.html b/src/frontend/app/installer/database/database.component.html index ae030db1f88..f77fa26efc9 100644 --- a/src/frontend/app/installer/database/database.component.html +++ b/src/frontend/app/installer/database/database.component.html @@ -1,49 +1,33 @@ <div class="stepContent"> - <h2 class="stepContentTitle"><i class="fa fa-database"></i> Base de données</h2> - <p> - Maarch Courrier nécessite une connexion à une base de données afin de stocker les métas-données des documents - stockés ainsi que la configuration de l'application. - </p> - <form [formGroup]="stepFormGroup" style="display: contents;"> - <mat-accordion> - <mat-expansion-panel [expanded]="!connectionState"> - <mat-expansion-panel-header> - <mat-panel-title> - Connexion à la base de données - </mat-panel-title> - </mat-expansion-panel-header> - <mat-form-field appearance="outline" style="color: initial;"> - <mat-label>Serveur</mat-label> - <input matInput formControlName="dbHostCtrl"> - </mat-form-field> - <mat-form-field appearance="outline" style="color: initial;"> - <mat-label>Port</mat-label> - <input matInput formControlName="dbPortCtrl"> - </mat-form-field> - <mat-form-field appearance="outline" style="color: initial;"> - <mat-label>Utilisateur</mat-label> - <input matInput formControlName="dbLoginCtrl"> - </mat-form-field> - <mat-form-field appearance="outline" style="color: initial;"> - <mat-label>Mot de passe</mat-label> - <input matInput formControlName="dbPasswordCtrl"> - </mat-form-field> - <div style="text-align: center;"> - <button mat-raised-button type="button" color="default" (click)="checkConnection()">Tester la - connexion</button> - </div> - </mat-expansion-panel> - <mat-expansion-panel [disabled]="!connectionState" [expanded]="connectionState"> - <mat-expansion-panel-header> - <mat-panel-title> - Base de donnée de l'application - </mat-panel-title> - </mat-expansion-panel-header> - <mat-form-field appearance="outline" style="color: moccasin;"> - <mat-label>Nom de la base de données</mat-label> - <input matInput formControlName="dbNameCtrl"> - </mat-form-field> - </mat-expansion-panel> - </mat-accordion> + <h2 class="stepContentTitle"><i class="fa fa-database"></i> {{lang.database}}</h2> + <div class="alert-message alert-message-info" role="alert" style="margin-top: 30px;min-width: 100%;"> + {{lang.stepDatabase_desc}} + </div> + <form [formGroup]="stepFormGroup" style="width: 850px;margin: auto;"> + <mat-form-field appearance="outline"> + <mat-label>{{lang.host}}</mat-label> + <input matInput formControlName="dbHostCtrl" required> + </mat-form-field> + <mat-form-field appearance="outline"> + <mat-label>{{lang.port}}</mat-label> + <input matInput formControlName="dbPortCtrl" required> + </mat-form-field> + <mat-form-field appearance="outline"> + <mat-label>{{lang.user}}</mat-label> + <input matInput formControlName="dbLoginCtrl" required> + </mat-form-field> + <mat-form-field appearance="outline"> + <mat-label>{{lang.password}}</mat-label> + <input matInput formControlName="dbPasswordCtrl" required> + </mat-form-field> + <mat-form-field appearance="outline"> + <mat-label>{{lang.dbName}}</mat-label> + <input matInput formControlName="dbNameCtrl" required> + </mat-form-field> + <div style="text-align:center;"> + <button mat-raised-button type="button" color="primary" (click)="checkConnection()"> + {{lang.checkInformations}} + </button> + </div> </form> -</div> +</div> \ No newline at end of file diff --git a/src/frontend/app/installer/database/database.component.scss b/src/frontend/app/installer/database/database.component.scss index aef06d2d80a..a69d0b879fd 100644 --- a/src/frontend/app/installer/database/database.component.scss +++ b/src/frontend/app/installer/database/database.component.scss @@ -1,7 +1,10 @@ +@import '../../../css/vars.scss'; + .stepContent { - max-width: 850px; + // max-width: 850px; margin: auto; .stepContentTitle { + color: $primary; margin-bottom: 30px; border-bottom: solid 1px; padding: 0; diff --git a/src/frontend/app/installer/database/database.component.ts b/src/frontend/app/installer/database/database.component.ts index 3eccbc5909e..14b8b384fde 100644 --- a/src/frontend/app/installer/database/database.component.ts +++ b/src/frontend/app/installer/database/database.component.ts @@ -1,6 +1,11 @@ import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup, Validators, ValidationErrors } from '@angular/forms'; import { NotificationService } from '../../notification.service'; +import { HttpClient } from '@angular/common/http'; +import { tap } from 'rxjs/internal/operators/tap'; +import { catchError } from 'rxjs/internal/operators/catchError'; +import { of } from 'rxjs/internal/observable/of'; +import { LANG } from '../../translate.component'; @Component({ selector: 'app-database', @@ -8,12 +13,13 @@ import { NotificationService } from '../../notification.service'; styleUrls: ['./database.component.scss'] }) export class DatabaseComponent implements OnInit { - + lang: any = LANG; stepFormGroup: FormGroup; connectionState: boolean = false; constructor( + public http: HttpClient, private _formBuilder: FormBuilder, private notify: NotificationService, ) { @@ -22,32 +28,46 @@ export class DatabaseComponent implements OnInit { dbLoginCtrl: ['', Validators.required], dbPortCtrl: ['5432', Validators.required], dbPasswordCtrl: ['', Validators.required], - dbNameCtrl: ['', Validators.required] + dbNameCtrl: ['', Validators.required], + stateStep: ['', Validators.required] }); - } - - ngOnInit(): void { - - // this.stepFormGroup.controls['firstCtrl'].setValue(this.checkStep()); - // this.stepFormGroup.controls['firstCtrl'].markAsUntouched(); } + ngOnInit(): void { } + isValidConnection() { return false; } checkConnection() { - this.connectionState = true; + + const info = { + server: this.stepFormGroup.controls['dbHostCtrl'].value, + port: this.stepFormGroup.controls['dbPortCtrl'].value, + user: this.stepFormGroup.controls['dbLoginCtrl'].value, + password: this.stepFormGroup.controls['dbPasswordCtrl'].value, + name: this.stepFormGroup.controls['dbNameCtrl'].value + }; + + this.http.get(`../rest/installer/databaseConnection`, { params: info }).pipe( + tap((data: any) => { + this.notify.success(this.lang.rightInformations); + this.stepFormGroup.controls['stateStep'].setValue('success'); + }), + catchError((err: any) => { + this.notify.error(this.lang.badInformations); + this.stepFormGroup.markAllAsTouched(); + this.stepFormGroup.controls['stateStep'].setValue(''); + return of(false); + }) + ).subscribe(); } checkStep() { - let state = 'success'; - return state; + return this.stepFormGroup.valid; } isValidStep() { - console.log(this.stepFormGroup.valid); - /*Object.keys(this.stepFormGroup.controls).forEach(key => { const controlErrors: ValidationErrors = this.stepFormGroup.get(key).errors; diff --git a/src/frontend/app/installer/installer.component.html b/src/frontend/app/installer/installer.component.html index 1ad88176336..754523b0872 100644 --- a/src/frontend/app/installer/installer.component.html +++ b/src/frontend/app/installer/installer.component.html @@ -33,7 +33,7 @@ </div> </mat-step> <mat-step [stepControl]="appDatabase.getFormGroup()"> - <ng-template matStepLabel>Base de données</ng-template> + <ng-template matStepLabel>{{lang.database}}</ng-template> <div class="stepContainer"> <div class="stepContent"> <app-database #appDatabase></app-database> diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts index edbcb0b0218..72e6057c5ab 100755 --- a/src/frontend/lang/lang-fr.ts +++ b/src/frontend/lang/lang-fr.ts @@ -1726,7 +1726,7 @@ export const LANG_FR = { "warnPrivateKeyTitle": "La clé privée de chiffrement n'a pas été modifiée !", "warnPrivateKey": "Cela compromet la sécurité de l'application.", "prerequisite": "Pré-requis", - "stepPrerequisite_desc": "L'installation de Maarch Courrier nécessite un certain nombre de pré-requis au niveau de l'installation de PHP. Reportez-vous cette page pour les détails", + "stepPrerequisite_desc": "L'installation de Maarch Courrier nécessite un certain nombre de pré-requis au niveau de l'installation de PHP. Pour plus d'informations", "install_phpVersionValid": "Version minimum de PHP (>= 7.2)", "install_unoconv": "unoconv", "install_unoconv_desc": "Outils de conversion de documents bureautiques soffice/unoconv installés", @@ -1766,4 +1766,9 @@ export const LANG_FR = { "general": "Générale", "phpExtensions": "Extensions PHP", "phpConfiguration": "Configuration PHP", + "dbName": "Nom de la base de données", + "stepDatabase_desc": "Maarch Courrier nécessite une connexion à une base de données afin de stocker les métas-données des documents stockés ainsi que la configuration de l'application.", + "checkInformations": "Vérifier les informations", + "badInformations": "Les informations sont incorrectes", + "rightInformations": "Les informations sont correctes", }; \ No newline at end of file -- GitLab