From 13f9f4e7c1d743e583b4f11fb93a212eb18ff3ed Mon Sep 17 00:00:00 2001
From: Tom Lutzenberger <t.lutzenberger@adito.de>
Date: Fri, 28 Aug 2020 10:03:14 +0200
Subject: [PATCH] #1058862: Improve validation and template after review

---
 .../Usersettings_entity.aod                   |   6 +
 .../currentpassword/onValidation.js           |   8 +-
 .../currentpassword/stateProcess.js           |  11 ++
 .../entityfields/jpassword/onValidation.js    |  14 ++-
 .../jpasswordrepeat/onValidation.js           |   6 +-
 .../_____LANGUAGE_EXTRA.aod                   |  48 +++++++
 .../_____LANGUAGE_de/_____LANGUAGE_de.aod     | 118 ++++++++++++------
 .../_____LANGUAGE_en/_____LANGUAGE_en.aod     |  48 +++++++
 .../UsersettingsEdit_view.aod                 |  48 -------
 process/UserSettings_lib/process.js           |   2 +
 10 files changed, 215 insertions(+), 94 deletions(-)
 create mode 100644 entity/Usersettings_entity/entityfields/currentpassword/stateProcess.js

diff --git a/entity/Usersettings_entity/Usersettings_entity.aod b/entity/Usersettings_entity/Usersettings_entity.aod
index fd32d56552..cf2a798f71 100644
--- a/entity/Usersettings_entity/Usersettings_entity.aod
+++ b/entity/Usersettings_entity/Usersettings_entity.aod
@@ -60,6 +60,11 @@
       <name>jPasswordRepeat</name>
       <title>Repeat password</title>
       <contentType>PASSWORD</contentType>
+      <onValueChangeTypes>
+        <element>MASK</element>
+        <element>PROCESS</element>
+        <element>PROCESS_SETVALUE</element>
+      </onValueChangeTypes>
       <onValidation>%aditoprj%/entity/Usersettings_entity/entityfields/jpasswordrepeat/onValidation.js</onValidation>
     </entityField>
     <entityField>
@@ -69,6 +74,7 @@
       <name>currentPassword</name>
       <title>Current password</title>
       <contentType>PASSWORD</contentType>
+      <stateProcess>%aditoprj%/entity/Usersettings_entity/entityfields/currentpassword/stateProcess.js</stateProcess>
       <onValidation>%aditoprj%/entity/Usersettings_entity/entityfields/currentpassword/onValidation.js</onValidation>
     </entityField>
   </entityFields>
diff --git a/entity/Usersettings_entity/entityfields/currentpassword/onValidation.js b/entity/Usersettings_entity/entityfields/currentpassword/onValidation.js
index 2aff40611b..b297a811ec 100644
--- a/entity/Usersettings_entity/entityfields/currentpassword/onValidation.js
+++ b/entity/Usersettings_entity/entityfields/currentpassword/onValidation.js
@@ -1,4 +1,5 @@
 import("system.result");
+import("system.neon");
 import("system.translate");
 import("system.tools");
 import("system.vars");
@@ -8,6 +9,9 @@ import("UserSettings_lib");
 let login = UserSettingUtil.getValue("title");
 let password = vars.get("$local.value");
 
-if(password && !tools.verifyPassword(login, password)) {
-    result.string(translate.text("Wrong password"));
+
+if(vars.get("$property.currentPassword.state") !== neon.COMPONENTSTATE_INVISIBLE) {
+    if(password && !tools.verifyPassword(login, password)) {
+        result.string(translate.text("Wrong password"));
+    }
 }
diff --git a/entity/Usersettings_entity/entityfields/currentpassword/stateProcess.js b/entity/Usersettings_entity/entityfields/currentpassword/stateProcess.js
new file mode 100644
index 0000000000..c2a5cd75d9
--- /dev/null
+++ b/entity/Usersettings_entity/entityfields/currentpassword/stateProcess.js
@@ -0,0 +1,11 @@
+import("system.neon");
+import("system.result");
+import("system.tools");
+import("UserSettings_lib");
+
+
+let login = UserSettingUtil.getValue("title");
+
+if(tools.verifyPassword(login, "")) {
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
diff --git a/entity/Usersettings_entity/entityfields/jpassword/onValidation.js b/entity/Usersettings_entity/entityfields/jpassword/onValidation.js
index ee0296a725..a2d5661928 100644
--- a/entity/Usersettings_entity/entityfields/jpassword/onValidation.js
+++ b/entity/Usersettings_entity/entityfields/jpassword/onValidation.js
@@ -1,3 +1,4 @@
+import("system.neon");
 import("system.result");
 import("system.translate");
 import("system.tools");
@@ -10,14 +11,19 @@ let policyMessages = tools.validatePasswordPolicies(newPassword, vars.get("$sys.
 let messages = [];
 
 if(newPassword) {
-    if(newPassword === currentPassword) {
-        result.string(translate.text("New password must not be the same as the current password"));
+    if(vars.get("$property.currentPassword.state") !== neon.COMPONENTSTATE_INVISIBLE) {
+        if(!currentPassword) {
+            messages.push(translate.text("Enter current password to verify"));
+        } else if(newPassword === currentPassword) {
+            messages.push(translate.text("New password must not be the same as the current password"));
+        }
     }
-    
+
     if(policyMessages.length > 0) {
         for(let msg in policyMessages) {
             messages.push(policyMessages[msg]);
         }
-        result.string(messages.join("\n", messages));
     }
+    
+    result.string(messages.join("\n", messages));
 }
diff --git a/entity/Usersettings_entity/entityfields/jpasswordrepeat/onValidation.js b/entity/Usersettings_entity/entityfields/jpasswordrepeat/onValidation.js
index 9fa42ffff6..5ec99b485f 100644
--- a/entity/Usersettings_entity/entityfields/jpasswordrepeat/onValidation.js
+++ b/entity/Usersettings_entity/entityfields/jpasswordrepeat/onValidation.js
@@ -6,8 +6,6 @@ import("system.vars");
 let passwordRepeat = vars.get("$local.value");
 let newPassword = vars.get("$field.jPassword");
 
-if(passwordRepeat) {
-    if(newPassword !== passwordRepeat) {
-        result.string(translate.text("Passwords do not match"));
-    }
+if(newPassword !== passwordRepeat) {
+    result.string(translate.text("Passwords do not match"));
 }
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index a70bdc4dad..d09abcb5d7 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -7149,6 +7149,54 @@
     <entry>
       <key>export using the selected template</key>
     </entry>
+    <entry>
+      <key>Input value</key>
+    </entry>
+    <entry>
+      <key>Output value</key>
+    </entry>
+    <entry>
+      <key>Enddatum</key>
+    </entry>
+    <entry>
+      <key>Startdatum</key>
+    </entry>
+    <entry>
+      <key>Mapping</key>
+    </entry>
+    <entry>
+      <key>Typ</key>
+    </entry>
+    <entry>
+      <key>Mappings</key>
+    </entry>
+    <entry>
+      <key>Sort up</key>
+    </entry>
+    <entry>
+      <key>Titel</key>
+    </entry>
+    <entry>
+      <key>Set missing address locations</key>
+    </entry>
+    <entry>
+      <key>Sort down</key>
+    </entry>
+    <entry>
+      <key>FavoriteFilter_view</key>
+    </entry>
+    <entry>
+      <key>Set all address locations</key>
+    </entry>
+    <entry>
+      <key>Members</key>
+    </entry>
+    <entry>
+      <key>Gruppenname</key>
+    </entry>
+    <entry>
+      <key>Enter current password to verify</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
   <sqlModels>
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index ce7257504d..784b00d216 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -707,6 +707,9 @@
       <key>None</key>
       <value>Keine</value>
     </entry>
+    <entry>
+      <key>Edit workflow</key>
+    </entry>
     <entry>
       <key>Date of request</key>
       <value>Datum der Anforderung</value>
@@ -8992,9 +8995,6 @@ Bitte Datumseingabe prüfen</value>
     <entry>
       <key>Receive new Department Permission</key>
     </entry>
-    <entry>
-      <key>Selection placeholder</key>
-    </entry>
     <entry>
       <key>Grant new Department Permission</key>
       <value>Neue Abteilungs-Berechtigung vergeben</value>
@@ -9004,56 +9004,76 @@ Bitte Datumseingabe prüfen</value>
       <value>Aktuelles Passwort</value>
     </entry>
     <entry>
-      <key>Calendar maintime start</key>
-      <value>Kalender-Kernzeit Beginn</value>
+      <key>New password</key>
+      <value>Neues Passwort</value>
     </entry>
     <entry>
-      <key>favorties</key>
+      <key>Repeat password</key>
+      <value>Passwort wiederholen</value>
     </entry>
     <entry>
-      <key>Fantasy</key>
+      <key>Enter current password to verify</key>
+      <value>Aktuelles Passwort zur Verifizierung eingeben</value>
     </entry>
     <entry>
-      <key>Password must contain special characters</key>
+      <key>Selection placeholder</key>
+      <value>Suche Platzhalter</value>
     </entry>
     <entry>
-      <key>Longitude</key>
+      <key>SELECTION_POSTFIX</key>
+      <value>Hinten</value>
     </entry>
     <entry>
-      <key>Password must be at least %0 characters</key>
+      <key>SELECTION_PREFIX</key>
+      <value>Vorne</value>
     </entry>
     <entry>
-      <key>Permission Procurer Department</key>
-      <value>Rechteempfänger Abteilung</value>
+      <key>SELECTION_BOTH</key>
+      <value>Vorne und hinten</value>
     </entry>
     <entry>
-      <key>favorite</key>
+      <key>SELECTION_NEITHER</key>
+      <value>Berücksichtigen</value>
     </entry>
     <entry>
-      <key>Repeat password</key>
-      <value>Passwort wiederholen</value>
+      <key>SELECTION_NULL</key>
+      <value>Ignorieren</value>
     </entry>
     <entry>
-      <key>{SENT_MAIL}</key>
+      <key>Selection ignore case</key>
+      <value>Groß-/Kleinschreibung ignorieren</value>
     </entry>
     <entry>
-      <key>SELECTION_NULL</key>
+      <key>Calendar hour divider</key>
+      <value>Stundenunterteilung</value>
     </entry>
     <entry>
-      <key>Selection ignore case</key>
+      <key>Calendar maintime start</key>
+      <value>Kernzeit Beginn</value>
     </entry>
     <entry>
       <key>Calendar maintime end</key>
-      <value>Kalender-Kernzeit Ende</value>
+      <value>Kernzeit Ende</value>
     </entry>
     <entry>
-      <key>Release</key>
+      <key>{SENT_MAIL}</key>
     </entry>
     <entry>
-      <key>SELECTION_NEITHER</key>
+      <key>favorties</key>
+    </entry>
+    <entry>
+      <key>Fantasy</key>
     </entry>
     <entry>
-      <key>Password must contain numbers</key>
+      <key>Permission Procurer Department</key>
+      <value>Rechteempfänger Abteilung</value>
+    </entry>
+    <entry>
+    <entry>
+      <key>favorite</key>
+    </entry>
+    <entry>
+      <key>Release</key>
     </entry>
     <entry>
       <key>granted permission</key>
@@ -9065,10 +9085,6 @@ Bitte Datumseingabe prüfen</value>
       <key>Permission Procurer User</key>
       <value>Rechteempfänger Benutzer</value>
     </entry>
-    <entry>
-      <key>New password</key>
-      <value>Neues Passwort</value>
-    </entry>
     <entry>
       <key>and open Report</key>
     </entry>
@@ -9079,6 +9095,9 @@ Bitte Datumseingabe prüfen</value>
       <key>Add Recipients</key>
       <value>Teilnehmer hinzufügen</value>
     </entry>
+    <entry>
+      <key>Grant new User Permission</key>
+    </entry>
     <entry>
       <key>{SEND_MAIL}</key>
     </entry>
@@ -9105,34 +9124,61 @@ Bitte Datumseingabe prüfen</value>
       <value>Neue Abteilungs-Berechtigung vergeben</value>
     </entry>
     <entry>
-      <key>Password must contain spaces</key>
+      <key>favorites</key>
     </entry>
     <entry>
-      <key>favorites</key>
+      <key>Input value</key>
     </entry>
     <entry>
-      <key>The use of any of your previous %0 passwords is prohibited</key>
+      <key>Output value</key>
     </entry>
     <entry>
-      <key>Total in euros</key>
+      <key>Enddatum</key>
     </entry>
     <entry>
-      <key>Add Participants</key>
+      <key>Startdatum</key>
     </entry>
     <entry>
-      <key>Calendar hour divider</key>
+      <key>Mapping</key>
     </entry>
     <entry>
-      <key>SELECTION_BOTH</key>
+      <key>Typ</key>
     </entry>
     <entry>
-      <key>SELECTION_POSTFIX</key>
+      <key>Mappings</key>
     </entry>
     <entry>
-      <key>Password must contain letters</key>
+      <key>Sort up</key>
     </entry>
     <entry>
-      <key>SELECTION_PREFIX</key>
+      <key>Titel</key>
+    </entry>
+    <entry>
+      <key>Set missing address locations</key>
+    </entry>
+    <entry>
+      <key>Sort down</key>
+    </entry>
+    <entry>
+      <key>FavoriteFilter_view</key>
+    </entry>
+    <entry>
+      <key>Set all address locations</key>
+    </entry>
+    <entry>
+      <key>Members</key>
+    </entry>
+    <entry>
+      <key>Gruppenname</key>
+    </entry>
+    <entry>
+      <key>Total in euros</key>
+    </entry>
+    <entry>
+      <key>Add Participants</key>
+    </entry>
+    <entry>
+      <key>Add Recipients</key>
     </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index e9ae9aabca..a92be903f8 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -7216,6 +7216,54 @@
     <entry>
       <key>export using the selected template</key>
     </entry>
+    <entry>
+      <key>Input value</key>
+    </entry>
+    <entry>
+      <key>Output value</key>
+    </entry>
+    <entry>
+      <key>Enddatum</key>
+    </entry>
+    <entry>
+      <key>Startdatum</key>
+    </entry>
+    <entry>
+      <key>Mapping</key>
+    </entry>
+    <entry>
+      <key>Typ</key>
+    </entry>
+    <entry>
+      <key>Mappings</key>
+    </entry>
+    <entry>
+      <key>Sort up</key>
+    </entry>
+    <entry>
+      <key>Titel</key>
+    </entry>
+    <entry>
+      <key>Set missing address locations</key>
+    </entry>
+    <entry>
+      <key>Sort down</key>
+    </entry>
+    <entry>
+      <key>FavoriteFilter_view</key>
+    </entry>
+    <entry>
+      <key>Set all address locations</key>
+    </entry>
+    <entry>
+      <key>Members</key>
+    </entry>
+    <entry>
+      <key>Gruppenname</key>
+    </entry>
+    <entry>
+      <key>Enter current password to verify</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/neonView/UsersettingsEdit_view/UsersettingsEdit_view.aod b/neonView/UsersettingsEdit_view/UsersettingsEdit_view.aod
index 6d5d9d8057..4a500fdf72 100644
--- a/neonView/UsersettingsEdit_view/UsersettingsEdit_view.aod
+++ b/neonView/UsersettingsEdit_view/UsersettingsEdit_view.aod
@@ -34,53 +34,5 @@
         </entityFieldLink>
       </fields>
     </genericViewTemplate>
-    <genericViewTemplate>
-      <name>SearchEdit</name>
-      <editMode v="true" />
-      <showDrawer v="true" />
-      <drawerCaption>Search</drawerCaption>
-      <fixedDrawer v="true" />
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>d028eaa3-7250-4b9f-be94-4c097b426506</name>
-          <entityField>selectionIgnoreCase</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>e632f409-891a-4c02-b077-962d40b657f9</name>
-          <entityField>selectionPlaceholder</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-    <genericViewTemplate>
-      <name>CalendarEdit</name>
-      <editMode v="true" />
-      <showDrawer v="true" />
-      <drawerCaption>Calendar</drawerCaption>
-      <fixedDrawer v="true" />
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>6c58b326-3fe6-4b1d-a6d4-1735861c419a</name>
-          <entityField>calMaintimeStart</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>1463dddd-efa6-4fff-bb7e-ee1bc190f077</name>
-          <entityField>calMaintimeEnd</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>4bb63da1-6a83-4f68-8605-11dd43501b7b</name>
-          <entityField>calHourdivider</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-    <genericViewTemplate>
-      <name>OtherSettings</name>
-      <editMode v="true" />
-      <showDrawer v="true" />
-      <drawerCaption>Others</drawerCaption>
-      <fixedDrawer v="true" />
-      <entityField>#ENTITY</entityField>
-    </genericViewTemplate>
   </children>
 </neonView>
diff --git a/process/UserSettings_lib/process.js b/process/UserSettings_lib/process.js
index 02bf19629a..69c4108c4d 100644
--- a/process/UserSettings_lib/process.js
+++ b/process/UserSettings_lib/process.js
@@ -19,11 +19,13 @@ function UserSettingUtil () {}
         tools.PASSWORD,
     ];
     let paramSettings = [
+        /*
         "calHourdivider",
         "calMaintimeEnd",
         "calMaintimeStart",
         "selectionIgnoreCase",
         "selectionPlaceholder",
+        */
     ];
 
 
-- 
GitLab