From 4eb4e2ba415ee3d5d39c06932d78a225bb95e196 Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Fri, 16 Oct 2020 18:27:20 +0200
Subject: [PATCH] FEAT #13268 TIME 0:20 begin admin connections

---
 .../administration-routing.module.ts          |  4 +-
 .../administration/administration.module.ts   |  4 +-
 .../connections-administration.component.html | 77 +++++++++++++++++++
 .../connections-administration.component.scss |  0
 .../connections-administration.component.ts   | 17 ++++
 src/frontend/service/privileges.service.ts    | 10 +++
 src/lang/lang-fr.json                         |  4 +-
 7 files changed, 113 insertions(+), 3 deletions(-)
 create mode 100644 src/frontend/app/administration/connection/connections-administration.component.html
 create mode 100644 src/frontend/app/administration/connection/connections-administration.component.scss
 create mode 100644 src/frontend/app/administration/connection/connections-administration.component.ts

diff --git a/src/frontend/app/administration/administration-routing.module.ts b/src/frontend/app/administration/administration-routing.module.ts
index 7800f0559b9..05b01fe229f 100755
--- a/src/frontend/app/administration/administration-routing.module.ts
+++ b/src/frontend/app/administration/administration-routing.module.ts
@@ -54,6 +54,7 @@ import { IssuingSiteComponent } from './registered-mail/issuing-site/issuing-sit
 import { RegisteredMailListComponent } from './registered-mail/registered-mail-list.component';
 import { RegisteredMailComponent } from './registered-mail/registered-mail.component';
 import { SearchAdministrationComponent } from './search/search-administration.component';
+import { ConnectionsAdministrationComponent } from './connection/connections-administration.component';
 
 
 @NgModule({
@@ -129,7 +130,8 @@ import { SearchAdministrationComponent } from './search/search-administration.co
             { path: 'administration/issuingSites', canActivate: [AppGuard], component: IssuingSiteListComponent },
             { path: 'administration/issuingSites/new', canActivate: [AppGuard], component: IssuingSiteComponent },
             { path: 'administration/issuingSites/:id', canActivate: [AppGuard], component: IssuingSiteComponent },
-            { path: 'administration/search', canActivate : [AppGuard], component : SearchAdministrationComponent}
+            { path: 'administration/search', canActivate : [AppGuard], component : SearchAdministrationComponent},
+            { path: 'administration/connections', canActivate : [AppGuard], component : ConnectionsAdministrationComponent}
         ]),
     ],
     exports: [
diff --git a/src/frontend/app/administration/administration.module.ts b/src/frontend/app/administration/administration.module.ts
index b33eb544a64..f7407a67f85 100755
--- a/src/frontend/app/administration/administration.module.ts
+++ b/src/frontend/app/administration/administration.module.ts
@@ -75,6 +75,7 @@ import { IssuingSiteListComponent } from './registered-mail/issuing-site/issuing
 import { IssuingSiteComponent } from './registered-mail/issuing-site/issuing-site.component';
 import { RegisteredMailListComponent } from './registered-mail/registered-mail-list.component';
 import { SearchAdministrationComponent } from './search/search-administration.component';
+import { ConnectionsAdministrationComponent } from './connection/connections-administration.component';
 
 
 @NgModule({
@@ -158,7 +159,8 @@ import { SearchAdministrationComponent } from './search/search-administration.co
         IssuingSiteListComponent,
         IssuingSiteComponent,
         RegisteredMailListComponent,
-        SearchAdministrationComponent
+        SearchAdministrationComponent,
+        ConnectionsAdministrationComponent
     ],
     entryComponents: [
         AccountLinkComponent,
diff --git a/src/frontend/app/administration/connection/connections-administration.component.html b/src/frontend/app/administration/connection/connections-administration.component.html
new file mode 100644
index 00000000000..b3329dfdbc1
--- /dev/null
+++ b/src/frontend/app/administration/connection/connections-administration.component.html
@@ -0,0 +1,77 @@
+<mat-sidenav-container autosize class="maarch-container">
+    <ng-template #adminMenuTemplate>
+        <mat-nav-list>
+            <h3 mat-subheader>{{'lang.actions' | translate}}</h3>
+            <a mat-list-item routerLink="/administration/connections/new">
+                <mat-icon color="primary" mat-list-icon class="fa fa-plus"></mat-icon>
+                <p mat-line>
+                    {{'lang.add' | translate}}
+                </p>
+            </a>
+        </mat-nav-list>
+    </ng-template>
+    <mat-sidenav-content>
+        <div class="bg-head">
+            <div class="bg-head-title" [class.customContainerRight]="appService.getViewMode()">
+                <div class="bg-head-title-label">
+                    <header-left></header-left>
+                </div>
+                <div class="bg-head-title-tool">
+                    <header-right></header-right>
+                </div>
+            </div>
+            <div class="bg-head-content" [class.fullContainer]="appService.getViewMode()">
+            </div>
+        </div>
+        <div class="container" [class.fullContainer]="appService.getViewMode()">
+            <div class="container-content">
+                <div *ngIf="loading" style="display:flex;height:100%;">
+                    <mat-spinner style="margin:auto;"></mat-spinner>
+                </div>
+                <mat-card *ngIf="!loading" class="card-app-content">
+                    <div class="row" style="margin:0px;">
+                        <div class="col-md-6 col-xs-6">
+                            <mat-form-field>
+                                <input matInput [formControl]="adminService.getFilterField()" placeholder="{{'lang.filterBy' | translate}}">
+                            </mat-form-field>
+                        </div>
+                        <div class="col-md-6 col-xs-6">
+                            <mat-paginator #paginator [length]="100" [hidePageSize]="true" [pageSize]="10">
+                            </mat-paginator>
+                        </div>
+                    </div>
+                    <mat-table #table [dataSource]="adminService.getDataSource()" matSortDisableClear matSort>
+                        <ng-container matColumnDef="group_id">
+                            <mat-header-cell *matHeaderCellDef mat-sort-header
+                                [class.hide-for-mobile]="appService.getViewMode()">{{'lang.id' | translate}}</mat-header-cell>
+                            <mat-cell *matCellDef="let element" [class.hide-for-mobile]="appService.getViewMode()">
+                                {{element.group_id}} </mat-cell>
+                        </ng-container>
+                        <ng-container matColumnDef="group_desc">
+                            <mat-header-cell *matHeaderCellDef mat-sort-header style="flex:2;">{{'lang.description' | translate}}
+                            </mat-header-cell>
+                            <mat-cell *matCellDef="let element" style="flex:2;">
+                                {{element.group_desc}} </mat-cell>
+                        </ng-container>
+                        <ng-container matColumnDef="actions">
+                            <mat-header-cell *matHeaderCellDef style="flex:1;"></mat-header-cell>
+                            <mat-cell *matCellDef="let element" style="justify-content: flex-end;flex:1;">
+                                <button mat-icon-button color="warn" matTooltip="{{'lang.delete' | translate}}"
+                                    (click)="$event.stopPropagation();preDelete(element)">
+                                    <mat-icon class="fa fa-trash-alt fa-2x" aria-hidden="true"></mat-icon>
+                                </button>
+                            </mat-cell>
+                        </ng-container>
+                        <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
+                        <mat-row *matRowDef="let row; columns: displayedColumns;"
+                            routerLink="/administration/groups/{{row.id}}" style="cursor:pointer;"
+                            matTooltip="{{'lang.view' | translate}}"></mat-row>
+                    </mat-table>
+                    <div class="mat-paginator"
+                        style="min-height:48px;display: flex;justify-content: end;align-items: center;padding-right: 20px;">
+                        {{groups.length}} {{'lang.groups' | translate}}</div>
+                </mat-card>
+            </div>
+        </div>
+    </mat-sidenav-content>
+</mat-sidenav-container>
\ No newline at end of file
diff --git a/src/frontend/app/administration/connection/connections-administration.component.scss b/src/frontend/app/administration/connection/connections-administration.component.scss
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/frontend/app/administration/connection/connections-administration.component.ts b/src/frontend/app/administration/connection/connections-administration.component.ts
new file mode 100644
index 00000000000..23bee32788f
--- /dev/null
+++ b/src/frontend/app/administration/connection/connections-administration.component.ts
@@ -0,0 +1,17 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+  selector: 'app-connections-administration',
+  templateUrl: './connections-administration.component.html',
+  styleUrls: ['./connections-administration.component.scss']
+})
+export class ConnectionsAdministrationComponent implements OnInit {
+
+  loading: boolean = true;
+
+  constructor() { }
+
+  ngOnInit(): void {
+  }
+
+}
diff --git a/src/frontend/service/privileges.service.ts b/src/frontend/service/privileges.service.ts
index 9cca9952fd2..9d487739c26 100755
--- a/src/frontend/service/privileges.service.ts
+++ b/src/frontend/service/privileges.service.ts
@@ -305,6 +305,16 @@ export class PrivilegeService {
             'angular': true,
             'hasParams': false
         },
+        {
+            'id': 'admin_connections',
+            'label': 'lang.connections',
+            'comment': 'lang.connectionsDesc',
+            'route': '/administration/connections',
+            'unit': 'supervision',
+            'style': 'fas fa-plug',
+            'angular': true,
+            'hasParams': false
+        },
     ];
 
     private privileges: privilege[] = [
diff --git a/src/lang/lang-fr.json b/src/lang/lang-fr.json
index 859e3e7bd39..f6a461ca4d7 100644
--- a/src/lang/lang-fr.json
+++ b/src/lang/lang-fr.json
@@ -2099,6 +2099,8 @@
     "formDescription" : "Permet d'utiliser ce champs dans les modèle d'enregistrement",
     "technicalInformations" : "Informations techniques",
     "technicalDescription" : "Ce type est persistant et n'as pas besoin d'être associé à un modèle d'enregistrement",
-    "displayMode" :"Mode d'affichage"
+    "displayMode" :"Mode d'affichage",
+    "connections" :"Connexions",
+    "connectionsDesc" :"Administrer les modes de connexion de l'application"
 
 }
-- 
GitLab