From 35363cfbb4a14cb02c8e0d95d50f47b898c0ae2c Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Wed, 22 Jul 2020 17:44:34 +0200
Subject: [PATCH] FEAT #13671 TIME 0:45 front set account type

---
 .../administration/home/administration.component.ts    |  2 +-
 .../user/user-administration.component.html            | 10 ++++++++++
 .../user/user-administration.component.ts              |  4 ++++
 .../user/users-administration.component.html           |  6 +++---
 .../user/users-administration.component.scss           |  4 ++++
 src/frontend/app/home/home.component.ts                |  2 +-
 src/frontend/lang/lang-en.ts                           |  6 +++++-
 src/frontend/lang/lang-fr.ts                           |  8 ++++++--
 src/frontend/lang/lang-nl.ts                           |  6 +++++-
 src/frontend/service/app.guard.ts                      |  1 +
 src/frontend/service/header.service.ts                 |  1 +
 11 files changed, 41 insertions(+), 9 deletions(-)

diff --git a/src/frontend/app/administration/home/administration.component.ts b/src/frontend/app/administration/home/administration.component.ts
index 507725d3383..d70c8338e24 100644
--- a/src/frontend/app/administration/home/administration.component.ts
+++ b/src/frontend/app/administration/home/administration.component.ts
@@ -84,7 +84,7 @@ export class AdministrationComponent implements OnInit, AfterViewInit {
     }
 
     ngAfterViewInit(): void {
-        if (this.headerService.user.mode === 'root' || this.headerService.user.mode === 'invisible_root') {
+        if (this.headerService.user.mode === 'root_visible' || this.headerService.user.mode === 'root_invisible') {
             this.featureTourService.init();
         }
     }
diff --git a/src/frontend/app/administration/user/user-administration.component.html b/src/frontend/app/administration/user/user-administration.component.html
index 8d3fdcbfd8a..552778b6735 100755
--- a/src/frontend/app/administration/user/user-administration.component.html
+++ b/src/frontend/app/administration/user/user-administration.component.html
@@ -215,6 +215,16 @@
                                                 {{lang.otherInformations}}
                                             </mat-panel-title>
                                         </mat-expansion-panel-header>
+                                        <div>
+                                            <mat-form-field>
+                                                <mat-label>{{lang.accountType}}</mat-label>
+                                                <mat-select [(ngModel)]="user.mode" id="accountType" name="accountType" [disabled]="headerService.user.mode === 'standard'" required>
+                                                  <mat-option *ngFor="let mode of adminModes" [value]="mode">
+                                                    {{lang[mode]}}
+                                                  </mat-option>
+                                                </mat-select>
+                                              </mat-form-field>
+                                        </div>
                                         <div class="form-group">
                                             <div class="col-sm-12">
                                                 <mat-checkbox color="primary"
diff --git a/src/frontend/app/administration/user/user-administration.component.ts b/src/frontend/app/administration/user/user-administration.component.ts
index f35707155ae..f0f73f7c7e5 100755
--- a/src/frontend/app/administration/user/user-administration.component.ts
+++ b/src/frontend/app/administration/user/user-administration.component.ts
@@ -87,6 +87,10 @@ export class UserAdministrationComponent implements OnInit {
     canViewPersonalDatas: boolean = false;
     canManagePersonalDatas: boolean = false;
 
+    adminModes: string[] = [
+        'standard', 'root_visible', 'root_invisible'
+    ];
+
     @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator;
     @ViewChild(MatSort, { static: false }) sort: MatSort;
 
diff --git a/src/frontend/app/administration/user/users-administration.component.html b/src/frontend/app/administration/user/users-administration.component.html
index b216c5c958b..7c506817117 100755
--- a/src/frontend/app/administration/user/users-administration.component.html
+++ b/src/frontend/app/administration/user/users-administration.component.html
@@ -95,7 +95,7 @@
                             <mat-header-cell *matHeaderCellDef>
                             </mat-header-cell>
                             <mat-cell *matCellDef="let element" style="justify-content: flex-end;">
-                                <button mat-icon-button color="primary" [disabled]="element.user_id==user.user_id"
+                                <button mat-icon-button color="primary" [disabled]="element.id===user.id"
                                     *ngIf="element.status != 'SPD'" matTooltip="{{lang.suspend}}"
                                     (click)="$event.stopPropagation();deleteUser(element, 'suspend')">
                                     <mat-icon class="fa fa-pause fa-2x" aria-hidden="true"></mat-icon>
@@ -105,7 +105,7 @@
                                     (click)="$event.stopPropagation();activateUser(element)">
                                     <mat-icon class="fa fa-check fa-2x" aria-hidden="true"></mat-icon>
                                 </button>
-                                <button mat-icon-button color="warn" [disabled]="element.user_id==user.user_id"
+                                <button mat-icon-button color="warn" [disabled]="element.id===user.id || element.mode !== 'standard'"
                                     matTooltip="{{lang.delete}}" data-toggle="modal" data-target="#changeDiffListDest"
                                     (click)="$event.stopPropagation();deleteUser(element, 'delete')">
                                     <mat-icon class="fa fa-trash-alt fa-2x"></mat-icon>
@@ -115,7 +115,7 @@
                         <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
                         <mat-row *matRowDef="let row; columns: displayedColumns;"
                             routerLink="/administration/users/{{row.id}}" style="cursor:pointer;"
-                            matTooltip="{{lang.view}}"></mat-row>
+                            matTooltip="{{lang.view}}" [class.admin]="row.mode !== 'standard'"></mat-row>
                     </mat-table>
                     <div class="mat-paginator"
                         style="min-height:48px;min-height: 48px;display: flex;justify-content: end;align-items: center;padding-right: 20px;">
diff --git a/src/frontend/app/administration/user/users-administration.component.scss b/src/frontend/app/administration/user/users-administration.component.scss
index fe089dd18f6..2d16ba0e089 100644
--- a/src/frontend/app/administration/user/users-administration.component.scss
+++ b/src/frontend/app/administration/user/users-administration.component.scss
@@ -25,3 +25,7 @@ button:disabled{
     background-color: #F99830 !important;
     color: white;
 }
+
+.admin {
+    font-weight: bold;
+}
\ No newline at end of file
diff --git a/src/frontend/app/home/home.component.ts b/src/frontend/app/home/home.component.ts
index 498f1de9c27..a42630c2ac8 100644
--- a/src/frontend/app/home/home.component.ts
+++ b/src/frontend/app/home/home.component.ts
@@ -72,7 +72,7 @@ export class HomeComponent implements OnInit, AfterViewInit {
     }
 
     ngAfterViewInit(): void {
-        if (this.headerService.user.mode === 'root' || this.headerService.user.mode === 'invisible_root') {
+        if (this.headerService.user.mode === 'root_visible' || this.headerService.user.mode === 'root_invisible') {
             this.featureTourService.init();
         }
         this.http.get('../rest/home/lastRessources')
diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts
index 5ca16acf913..416db6f415e 100755
--- a/src/frontend/lang/lang-en.ts
+++ b/src/frontend/lang/lang-en.ts
@@ -1861,5 +1861,9 @@ export const LANG_EN = {
     "createScriptTourTitle": "Create the script",
     "createScriptTourDescription": "Before scheduling the task, we need to create the script.",
     "updateKO": "Update failed !",
-    "saveInDocserversInfo": "L'historique de la mise à jour a été sauvegardé dans la zone de stockage <b>migration</b>."
+    "saveInDocserversInfo": "Update history saved in docserver <b>migration</b>.",
+    "root_visible": "Administrator",
+    "root_invisible": "Administrator (invisible)",
+    "standard": "Default",
+    "accountType": "Account type"
 };
\ No newline at end of file
diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts
index 4e1ccbc7f36..9dffe719e78 100755
--- a/src/frontend/lang/lang-fr.ts
+++ b/src/frontend/lang/lang-fr.ts
@@ -1852,9 +1852,13 @@ export const LANG_FR = {
     "notifTour4Title": "Liste des tâches",
     "notifTour4Description": "La liste de vos <b color=\"primary\">tâches actives</b> apparaît ici",
     "welcomeTourTitle": "Bienvenue",
-    "welcomeTourDescription": "Nous allons vous montrer certains points de configuration : <ul><li>Paraméter un <b color=\"primary\">serveur de mail</b></li><li>Configurer votre première <b color=\"primary\">notification</b></li></ul><br/>Pour commencer, cliquez sur <img style=\"width:32px;\" src=\"assets/admin_button.png\"/>",
+    "welcomeTourDescription": "Nous allons vous montrer certains points de configuration : <ul><li>Paramétrer un <b color=\"primary\">serveur de mail</b></li><li>Configurer votre première <b color=\"primary\">notification</b></li></ul><br/>Pour commencer, cliquez sur <img style=\"width:32px;\" src=\"assets/admin_button.png\"/>",
     "createScriptTourTitle": "Créer le script",
     "createScriptTourDescription": "Avant de planifier la tâche, nous devons créer le script.",
     "updateKO": "Mise à jour échouée !",
-    "saveInDocserversInfo": "L'historique de la mise à jour a été sauvegardé dans la zone de stockage <b>migration</b>."
+    "saveInDocserversInfo": "L'historique de la mise à jour a été sauvegardé dans la zone de stockage <b>migration</b>.",
+    "root_visible": "Administrateur",
+    "root_invisible": "Administrateur (invisible)",
+    "standard": "Standard",
+    "accountType": "Type de compte"
 };
diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts
index 527806d30a3..3b89e28e31f 100755
--- a/src/frontend/lang/lang-nl.ts
+++ b/src/frontend/lang/lang-nl.ts
@@ -1873,5 +1873,9 @@ export const LANG_NL = {
     "createScriptTourTitle": "Créer le script__TO_TRANSLATE",
     "createScriptTourDescription": "Avant de planifier la tâche, nous devons créer le script.__TO_TRANSLATE",
     "updateKO": "Mise à jour échouée !__TO_TRANSLATE",
-    "saveInDocserversInfo": "L'historique de la mise à jour a été sauvegardé dans la zone de stockage <b>migration</b>.__TO_TRANSLATE"
+    "saveInDocserversInfo": "L'historique de la mise à jour a été sauvegardé dans la zone de stockage <b>migration</b>.__TO_TRANSLATE",
+    "root_visible": "Administrateur__TO_TRANSLATE",
+    "root_invisible": "Administrateur (invisible)__TO_TRANSLATE",
+    "standard": "Standard__TO_TRANSLATE",
+    "accountType": "Type de compte__TO_TRANSLATE"
 };
\ No newline at end of file
diff --git a/src/frontend/service/app.guard.ts b/src/frontend/service/app.guard.ts
index 26836c887e2..b5c30e3b3cf 100644
--- a/src/frontend/service/app.guard.ts
+++ b/src/frontend/service/app.guard.ts
@@ -49,6 +49,7 @@ export class AppGuard implements CanActivate {
                     .pipe(
                         map((data: any) => {
                             this.headerService.user = {
+                                mode: data.mode,
                                 id: data.id,
                                 status: data.status,
                                 userId: data.user_id,
diff --git a/src/frontend/service/header.service.ts b/src/frontend/service/header.service.ts
index ed116ea20ea..07f0778f5a6 100755
--- a/src/frontend/service/header.service.ts
+++ b/src/frontend/service/header.service.ts
@@ -68,6 +68,7 @@ export class HeaderService {
                 .pipe(
                     map((data: any) => {
                         this.user = {
+                            mode: data.mode,
                             id: data.id,
                             userId: data.user_id,
                             firstname: data.firstname,
-- 
GitLab