From fa08bdc596286b9af544241a5078f18d7a081cda Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Thu, 3 Jan 2019 16:33:28 +0100
Subject: [PATCH] FEAT #8489 add update sendmail form

---
 apps/maarch_entreprise/xml/services.xml       |  2 +-
 .../sendmail-administration.component.html    | 35 ++++++++++------
 .../sendmail-administration.component.ts      | 41 +++++++++++++------
 src/frontend/lang/lang-en.ts                  |  3 ++
 src/frontend/lang/lang-fr.ts                  |  6 ++-
 src/frontend/lang/lang-nl.ts                  |  3 ++
 6 files changed, 62 insertions(+), 28 deletions(-)

diff --git a/apps/maarch_entreprise/xml/services.xml b/apps/maarch_entreprise/xml/services.xml
index 2c515c497e1..397af0de6e2 100755
--- a/apps/maarch_entreprise/xml/services.xml
+++ b/apps/maarch_entreprise/xml/services.xml
@@ -435,7 +435,7 @@
     <angular>true</angular>
   </SERVICE>-->
   <SERVICE>
-    <id>admin_emailserver</id>
+    <id>admin_email_server</id>
     <name>_EMAILSERVER_PARAM</name>
     <comment>_EMAILSERVER_PARAM_DESC</comment>
     <servicepage>/administration/sendmail</servicepage>
diff --git a/src/frontend/app/administration/sendmail/sendmail-administration.component.html b/src/frontend/app/administration/sendmail/sendmail-administration.component.html
index 173a570d8dc..880988557ce 100644
--- a/src/frontend/app/administration/sendmail/sendmail-administration.component.html
+++ b/src/frontend/app/administration/sendmail/sendmail-administration.component.html
@@ -26,7 +26,7 @@
                                 <div class="col-md-12" style="margin-bottom: 20px;">
                                     <mat-form-field>
                                         <mat-select #smtpType (selectionChange)="changeDesc(smtpType)" name="smtpType"
-                                            placeholder="Type de configuration" [(ngModel)]="sendmail.smtpType">
+                                            placeholder="Type de configuration" [(ngModel)]="sendmail.type">
                                             <mat-option *ngFor="let type of smtpTypeList" [value]="type.id">
                                                 {{type.label}}
                                             </mat-option>
@@ -35,11 +35,11 @@
                                     </mat-form-field>
                                 </div>
                             </div>
-                            <div class="form-group" [style.opacity]="sendmail.smtpType != 'internalParam' ? '0.5' : '1'">
+                            <div class="form-group" [style.opacity]="sendmail.type != 'internalParam' ? '0.5' : '1'">
                                 <div class="col-md-2">
                                     <mat-form-field>
                                         <mat-select name="SMTPSecure" placeholder="Méthode d'authentification"
-                                            [disabled]="sendmail.smtpType != 'internalParam'" [(ngModel)]="sendmail.SMTPSecure">
+                                            [disabled]="sendmail.type != 'internalParam'" [(ngModel)]="sendmail.secure">
                                             <mat-option *ngFor="let security of smtpSecList" [value]="security">
                                                 {{security}}
                                             </mat-option>
@@ -48,39 +48,48 @@
                                 </div>
                                 <div class="col-md-9">
                                     <mat-form-field>
-                                        <input matInput name="host" [disabled]="sendmail.smtpType != 'internalParam'" [(ngModel)]="sendmail.host" placeholder="{{lang.host}}">
+                                        <input matInput name="host" [disabled]="sendmail.type != 'internalParam'" [(ngModel)]="sendmail.host" placeholder="{{lang.host}}">
                                     </mat-form-field>
                                 </div>
                                 <div class="col-md-1">
                                     <mat-form-field>
                                         <input name="port" type="number" matInput [(ngModel)]="sendmail.port"
-                                            [disabled]="sendmail.smtpType != 'internalParam'" placeholder="{{lang.port}}">
+                                            [disabled]="sendmail.type != 'internalParam'" placeholder="{{lang.port}}">
                                     </mat-form-field>
                                 </div>
                             </div>
-                            <div class="form-group" [style.opacity]="sendmail.smtpType != 'internalParam' ? '0.5' : '1'">
+                            <div class="form-group" [style.opacity]="sendmail.type != 'internalParam' ? '0.5' : '1'">
                                 <div class="col-md-12">
-                                    <mat-slide-toggle color="primary" name="SMTPAuth" [(ngModel)]="sendmail.SMTPAuth"
-                                        [disabled]="sendmail.smtpType != 'internalParam'">{{lang.enableAuth}}</mat-slide-toggle>
+                                    <mat-slide-toggle color="primary" name="SMTPAuth" [(ngModel)]="sendmail.auth"
+                                        [disabled]="sendmail.type != 'internalParam'">{{lang.enableAuth}}</mat-slide-toggle>
                                 </div>
                             </div>
-                            <div class="form-group" [style.opacity]="sendmail.smtpType != 'internalParam' ? '0.5' : '1'">
+                            <div class="form-group" [style.opacity]="sendmail.type != 'internalParam' ? '0.5' : '1'">
                                 <div class="col-md-12">
                                     <mat-form-field>
-                                        <input [disabled]="!sendmail.SMTPAuth || sendmail.smtpType != 'internalParam'"
+                                        <input name="user" [(ngModel)]="sendmail.user" [disabled]="!sendmail.auth || sendmail.type != 'internalParam'"
                                             matInput placeholder="{{lang.id}}">
                                     </mat-form-field>
                                 </div>
                                 <div class="col-md-12">
                                     <mat-form-field>
-                                        <input [disabled]="!sendmail.SMTPAuth || sendmail.smtpType != 'internalParam'"
+                                        <input name="password" [type]="hidePassword ? 'password' : 'text'" [(ngModel)]="sendmail.password" [disabled]="!sendmail.auth || sendmail.type != 'internalParam'"
                                             matInput placeholder="{{lang.password}}">
+                                            <mat-icon style="cursor: pointer;" matSuffix (click)="hidePassword = !hidePassword" class="fa fa-2x" [ngClass]="[hidePassword ? 'fa-eye-slash' : 'fa-eye']"></mat-icon>
+                                    </mat-form-field>
+                                </div>
+                            </div>
+                            <div class="form-group" [style.opacity]="sendmail.type != 'internalParam' ? '0.5' : '1'">
+                                <div class="col-md-12">
+                                    <mat-form-field>
+                                        <input name="mailFrom" [(ngModel)]="sendmail.from" [disabled]="sendmail.type != 'internalParam'"
+                                            matInput placeholder="{{lang.mailFrom}}">
                                     </mat-form-field>
                                 </div>
                             </div>
                             <div class="col-md-12 text-center" style="padding:10px;">
-                                <button mat-raised-button type="submit" color="primary">{{lang.validate}}</button>
-                                <button mat-raised-button type="button" color="default" (click)="cancelModification()">{{lang.cancel}}</button>
+                                <button mat-raised-button type="submit" color="primary" [disabled]="checkModif()" >{{lang.validate}}</button>
+                                <button mat-raised-button type="button" color="default" [disabled]="checkModif()" (click)="cancelModification()">{{lang.cancel}}</button>
                             </div>
                         </form>
                     </mat-tab>
diff --git a/src/frontend/app/administration/sendmail/sendmail-administration.component.ts b/src/frontend/app/administration/sendmail/sendmail-administration.component.ts
index 53665f04d16..90828385d4a 100644
--- a/src/frontend/app/administration/sendmail/sendmail-administration.component.ts
+++ b/src/frontend/app/administration/sendmail/sendmail-administration.component.ts
@@ -28,14 +28,15 @@ export class SendmailAdministrationComponent implements OnInit {
     loading     : boolean = false;
 
     sendmail: any = {
-        'smtpType': 'internalParam',
+        'type': 'internalParam',
         'host': '',
-        'SMTPAuth': true,
-        'username': '',
+        'auth': true,
+        'user': '',
         'password': '',
-        'SMTPSecure': 'ssl', //tls, ssl, starttls
+        'secure': 'ssl', //tls, ssl, starttls
         'port': '465',
-
+        'charset': 'utf-8',
+        'from': '',
     };
 
     smtpTypeList = [
@@ -51,6 +52,7 @@ export class SendmailAdministrationComponent implements OnInit {
     smtpTypeDesc = '';
     smtpSecList = ['ssl', 'tls'];
     sendmailClone: any = {};
+    hidePassword: boolean = true;
 
 
     constructor(changeDetectorRef: ChangeDetectorRef, media: MediaMatcher, public http: HttpClient, private notify: NotificationService, private headerService: HeaderService) {
@@ -68,12 +70,14 @@ export class SendmailAdministrationComponent implements OnInit {
         this.loading = true;
         this.coreUrl = angularGlobals.coreUrl;
 
-        // this.http.get(this.coreUrl + 'rest/sendmail')
-        //     .subscribe((data: any) => {
-
-        //     }, (err) => {
-        //         this.notify.error(err.error.errors);
-        //     });
+        this.http.get(this.coreUrl + 'rest/configurations/admin_email_server')
+            .subscribe((data: any) => {
+                this.sendmail = data.configuration.value
+                this.sendmailClone = JSON.parse(JSON.stringify(this.sendmail));
+                this.smtpTypeDesc = this.lang[this.sendmail.type+'Desc'];
+            }, (err) => {
+                this.notify.handleErrors(err);
+            });
         this.loading = false;
     }
 
@@ -83,6 +87,19 @@ export class SendmailAdministrationComponent implements OnInit {
 
     changeDesc(e: any) {
         this.smtpTypeDesc = this.lang[e.selected.value+'Desc'];
-        console.log(e.selected.value+'Desc');
+    }
+
+    onSubmit() {
+        this.http.put(this.coreUrl + 'rest/configurations/admin_email_server', this.sendmail)
+            .subscribe((data: any) => {
+                this.sendmailClone = JSON.parse(JSON.stringify(this.sendmail));
+                this.notify.success(this.lang.configurationUpdated);
+            }, (err) => {
+                this.notify.handleErrors(err);
+            });
+    }
+
+    checkModif() {
+        return (JSON.stringify(this.sendmailClone) === JSON.stringify(this.sendmail));
     }
 }
diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts
index c5268850ee7..1448d6823c0 100755
--- a/src/frontend/lang/lang-en.ts
+++ b/src/frontend/lang/lang-en.ts
@@ -728,4 +728,7 @@ export const LANG_EN = {
     "connectionFailed"                                  : "Connection to server failed, please try later.",
     "searchMailInBasket"                                : "Search mails in basket",
     "undefined"                                         : "Undefined",
+    "configurationUpdated"                              : "Configuration updated",
+    "port"                                              : "Port",
+    "mailFrom"                                          : "Mail address used",
 };
diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts
index 7683b2d6449..59d3e648f59 100755
--- a/src/frontend/lang/lang-fr.ts
+++ b/src/frontend/lang/lang-fr.ts
@@ -746,7 +746,7 @@ export const LANG_FR = {
     "undefinedStatus"                                   : "Statut non défini",
     "subEntities"                                       : "Entités (et sous-entités)",
     "category_id"                                       : "Catégorie",
-    "smtpRelay"                                         : "Relai stmp",
+    "smtpRelay"                                         : "Relai smtp",
     "smtpRelayDesc"                                     : "Utilisation d'un relai smtp du serveur (ssmtp par exemple), configuration externe à l'application",
     "internalParam"                                     : "Configuration interne",
     "internalParamDesc"                                 : "Utilisateur du module interne phpmailer de l'application",
@@ -756,5 +756,7 @@ export const LANG_FR = {
     "connectionFailed"                                  : "La connexion au serveur a échoué. Veuillez réessayer ultérieurement.",
     "searchMailInBasket"                                : "Rechercher des courriers dans la bannette",
     "undefined"                                         : "Non défini",
-
+    "configurationUpdated"                              : "Configuration mise à jour",
+    "port"                                              : "Port",
+    "mailFrom"                                          : "Adresse e-mail utilisée",
 };
diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts
index 0b227f85d10..ce9ba9d8e56 100755
--- a/src/frontend/lang/lang-nl.ts
+++ b/src/frontend/lang/lang-nl.ts
@@ -757,4 +757,7 @@ export const LANG_NL = {
     "searchMailInBasket" : "_TO_TRANSLATE",
     "basketsAssignedShort" :  "_TO_TRANSLATE",
     "undefined" : "_TO_TRANSLATE",
+    "configurationUpdated" : "_TO_TRANSLATE",
+    "port" : "_TO_TRANSLATE",
+    "mailFrom" : "_TO_TRANSLATE",
 };
-- 
GitLab