From 3d5fe0c05ec31993c5cf85f18f7202719f5bda11 Mon Sep 17 00:00:00 2001
From: ulrich@undisclosed
Date: Sat, 09 May 2020 16:03:12 +0000
Subject: [PATCH] Dialog Neuer Nutzer begonnen

---
 web/ui/ui.js |  485 ++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 438 insertions(+), 47 deletions(-)

diff --git a/web/ui/ui.js b/web/ui/ui.js
index e567e34..0665ebf 100644
--- a/web/ui/ui.js
+++ b/web/ui/ui.js
@@ -1,49 +1,440 @@
-/*
 
-  Beispiel aus Spot fuer den Post eines Coordinates-Objektes
-
-    var coord = new Coordinates(
-                    c.latitude, 
-                    c.longitude, 
-                    self.nummer(c.altitude), 
-                    self.nummer(c.accuracy), 
-                    self.nummer(c.altitudeAccuracy), 
-                    self.nummer(c.heading), 
-                    self.nummer(c.speed));
-            var cObj = self.serialisieren(coord);
-
-
-            $.ajax({
-              url: '../rpc?c=de.uhilger.spot.api.NutzerApi&m=ortSpeichern',
-              data: {
-                p: cObj
-              },
-              type: "POST",
-              dataType : "html",
-              //success: function( resp ) {
-                //$('#fehler').html('Antwort: ' + resp);
-              //},
-              error: function( xhr, status, errorThrown ) {
-                $('#fehler').html("Error: " + errorThrown + " Status: " + status);
-              },
-              complete: function( xhr, status ) {
-                //alert( "The request is complete!" );
-              }
-            });      
-            usw.
-
- 
-  function Coordinates(la, lo, al, ac, aa, hd, sp) {
-   this.latitude = la;
-   this.longitude = lo;
-   this.altitude = al;
-   this.accuracy = ac;
-   this.altitudeAccuracy = aa;
-   this.heading = hd;
-   this.speed = sp;
+function um_init() {
+  $('#user-form').hide();
+  $('#nav').hide();
+  $('#role-form').hide();
+  $('#user-role-form').hide();
+  $('.user-save-btn').click(um_user_save);
+  $('.user-cancel-btn').click(um_back_from_new_user);
+  $('#nutzerliste').click(um_user_list_click);
+  $('#nutzerLoeschen').click(um_del_user);
+  $('#nutzerNeu').click(um_new_user);
+  $('#nutzerLoeschen').prop( "disabled", true );
+  $('#nutzerRolleEntziehen').prop( "disabled", true );
+  $('#rolleErteilen').prop( "disabled", true );
+  $('#rolleErteilen').click(um_grant_role);
+  $('#nutzerRolleEntziehen').click(um_revoke_role);
+  $('#neueRolle').click(um_new_role);
+  $('#rollen').click(um_role_list_click);
+  $('#nutzerrollen').click(um_user_role_list_click);
+  $('#userMenu').text('?');
+  $('#logout').click(um_apicall_logout);
+  um_clear_user_form();
+  um_apicall_get_user_list();
+  um_apicall_get_granted_roles();
+  um_apicall_get_login();
 }
- 
- 
- 
- 
- */
\ No newline at end of file
+
+/* ----- user functions ------ */
+
+function um_user_save() {
+  var user = um_user_form_lesen();
+  var kww = $('#kennwortw').val();
+  if(user.pw != kww) {
+    alert('Kennworte stimmen nicht ueberein.');
+  } else {
+    um_apicall_create_user(self.serialisieren(user));
+  }
+}
+
+function um_del_user() {
+  var userId = um_get_first_selected_user_id();
+  if(userId !== 'none') {
+    var antwort = confirm("Wollen Sie den Nutzer " + userId + " loeschen?"); 
+    if (antwort === true) {
+      var user = new User(userId, '-', '-', '-', '-');
+      um_apicall_del_user(self.serialisieren(user));
+    }  
+  }
+}
+
+/* ----------- role functions ------------ */
+
+function um_new_role() {
+  var roleIsNew = true;
+  var userId = um_get_first_selected_user_id();
+  if(userId === 'none') {
+    alert('Es wurde kein Benutzer ausgewaehlt.');
+  } else {
+    var answer = prompt("Name der Rolle", "");
+    if (answer === null) {
+      alert("Es wurde Cancel betaetigt.");
+    } else if(answer !== "") {
+      um_apicall_grant_role(userId, answer, roleIsNew);
+    } else {
+      alert("OK betaetigt, aber Keine Rolle angegeben.");
+    }
+  }
+}
+
+function um_grant_role() {
+  var roleIsNew = false;
+  var userId = um_get_first_selected_user_id();
+  var roleId = um_get_first_selected_role_id();
+  if(roleId !== 'none' && userId !== 'none') {
+    um_apicall_grant_role(userId, roleId, roleIsNew);
+  }
+}
+
+function um_revoke_role() {
+  var userId = um_get_first_selected_user_id();
+  var roleId = um_get_first_selected_userrole_id();
+  if(roleId !== 'none' && userId !== 'none') {
+    um_apicall_revoke_role(userId, roleId);
+  }
+}
+
+/* ----------- ui interaction ------------ */
+
+function um_user_list_click() {
+  $('#nav-back-btn').click(um_back_from_roles);
+  $('#nutzerLoeschen').prop( "disabled", false );
+  $('#rollen :selected').prop("selected", false);
+  var userId = um_get_first_selected_user_id();
+  $('#userid').html(userId);
+  um_apicall_get_user_roles(userId);
+  $('#user-list-form').hide();
+  $('#nav').show();
+  $('#role-form').show();
+  $('#user-role-form').show();
+}
+
+function um_new_user() {
+  $('#nav-back-btn').click(um_back_from_new_user);
+  $('#user-list-form').hide();
+  $('#user-form').show();
+  $('#nav').show();
+}
+
+function um_role_list_click() {
+  $('#rolleErteilen').prop( "disabled", false );
+}
+
+function um_user_role_list_click() {
+  $('#nutzerRolleEntziehen').prop( "disabled", false );
+}
+
+function um_back_from_roles() {
+  $('#user-list-form').show();
+  $('#nav').hide();
+  $('#role-form').hide();
+  $('#user-role-form').hide();
+}
+
+function um_back_from_new_user() {
+  $('#user-list-form').show();
+  $('#nav').hide();
+  $('#user-form').hide();
+  um_clear_user_form();
+}
+
+/* ------- ui i/o ------ */
+
+function um_user_form_lesen() {
+  var userId = $('#anmeldename').val();
+  var kw = $('#kennwort').val();
+  var firstName = $('#vorname').val();
+  var lastName = $('#nachname').val();
+  var user = new User(userId, kw, firstName, lastName, '-');
+  return user;
+}
+
+/*
+ * BaseLink liefert fuer einfache selects wie die der Nutzerverwaltung 
+ * eine simple Listenfunktion, die auf der JSON-Seite wie folgt 
+ * herauskommt.
+ * 
+ * {"List":[{"List":[{"String":"USER_NAME"},{"String":"admin"},{"String":"test"}]}]}
+ * 
+ * Fuer Mustache sieht ein Template dann z.B so aus:
+ * 
+ *    {{#List}}
+ *    {{#List}}
+ *      <option value="{{ String }}">{{ String }}</option>'
+ *    {{/List}}
+ *    {{/List}}
+ */
+function um_show_user_list(resp) {
+  $("#nutzerliste").empty();
+  var template = $('#tpl-list').html();
+  Mustache.parse(template);   // optional, speeds up future uses
+  $("#nutzerliste").append( Mustache.render(template, resp) );
+}
+
+function um_clear_user_form() {
+  $('#anmeldename').val('');
+  $('#kennwort').val('');
+  $('#kennwortw').val('');
+}
+
+function um_get_first_selected_user_id() {
+  var userId = 'none';
+  var userIds = [];
+  $('#nutzerliste :selected').each(function(i, selected){
+    userIds[i] = $(selected).text();
+  });
+  if(userIds.length > 0) {
+    userId = userIds[0];
+  }
+  return userId;
+}
+
+function um_get_first_selected_role_id() {
+  var roleId = 'none';
+  var roleIds = [];
+  $('#rollen :selected').each(function(i, selected){
+    roleIds[i] = $(selected).text();
+  });
+  if(roleIds.length > 0) {
+    roleId = roleIds[0];
+  }
+  return roleId;
+}
+
+function um_get_first_selected_userrole_id() {
+  var roleId = 'none';
+  var roleIds = [];
+  $('#nutzerrollen :selected').each(function(i, selected){
+    roleIds[i] = $(selected).text();
+  });
+  if(roleIds.length > 0) {
+    roleId = roleIds[0];
+  }
+  return roleId;
+}
+
+function um_show_user_role_list(resp) {
+  $("#nutzerrollen").empty();
+  
+  var template = $('#tpl-list').html();
+  Mustache.parse(template);   // optional, speeds up future uses
+  $("#nutzerrollen").append( Mustache.render(template, resp) );
+  
+  $('#nutzerRolleEntziehen').prop( "disabled", true );
+  $('#rolleErteilen').prop( "disabled", true );
+}
+
+function um_show_role_list(resp) {
+  $("#rollen").empty();
+  
+  var template = $('#tpl-list').html();
+  Mustache.parse(template);   // optional, speeds up future uses
+  $("#rollen").append( Mustache.render(template, resp) );
+  
+  $('#rolleErteilen').prop( "disabled", true );
+}
+
+/* ---- api calls ----- */
+
+function um_apicall_create_user(user) {
+  var m = 'createUser';
+  var u = '../svc/' + m;
+  $.ajax({
+    url: u,
+    data: {
+      p: user
+    },
+    type: "POST",
+    dataType : "html",
+    success: function( resp ) {
+      um_apicall_get_user_list();
+      um_back_from_new_user();
+    },
+    error: function( xhr, status, errorThrown ) {
+      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
+    },
+    complete: function( xhr, status ) {
+      //alert( "The request is complete!" );
+    }
+  });      
+}
+
+function um_apicall_del_user(user) {
+  var m = 'deleteUser';
+  var u = '../svc/' + m;
+  $.ajax({
+    url: u,
+    data: {
+      p: user
+    },
+    type: "POST",
+    dataType : "html",
+    success: function( resp ) {
+      um_apicall_get_user_list();
+    },
+    error: function( xhr, status, errorThrown ) {
+      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
+    },
+    complete: function( xhr, status ) {
+      //alert( "The request is complete!" );
+    }
+  });      
+}
+
+function um_apicall_get_user_list() {
+  var m = 'getUserNameList';
+  var u = '../svc/' + m;
+  $.ajax({
+    url: u,
+    type: "GET",
+    dataType : "json",
+    success: function( resp ) {
+      um_show_user_list(resp);
+    },
+    error: function( xhr, status, errorThrown ) {
+      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
+    },
+    complete: function( xhr, status ) {
+      //alert( "The request is complete!" );
+    }
+  });      
+}
+
+// http]://example.com/um/api?c=de.uhilger.um.api.UserMgr&m=testmethode
+function um_apicall_grant_role(userId, roleName, isNewRole) {
+  var ur = new UserRole(userId, roleName);
+  var m = 'grantRole';
+  var u = '../svc/' + m;
+  $.ajax({
+    url: u,
+    data: {
+      p: self.serialisieren(ur)
+    },
+    type: "POST",
+    dataType : "html",
+    success: function( resp ) {
+      um_apicall_get_user_roles(userId);
+      if(isNewRole) {
+        um_apicall_get_granted_roles();
+      }
+    },
+    error: function( xhr, status, errorThrown ) {
+      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
+    },
+    complete: function( xhr, status ) {
+      //alert( "The request is complete!" );
+    }
+  });
+}
+
+function um_apicall_revoke_role(userId, roleName) {
+  var ur = new UserRole(userId, roleName);
+  var m = 'revokeRole';
+  var u = '../svc/' + m;
+  $.ajax({
+    url: u,
+    data: {
+      p: self.serialisieren(ur)
+    },
+    type: "POST",
+    dataType : "html",
+    success: function( resp ) {
+      um_apicall_get_user_roles(userId);
+    },
+    error: function( xhr, status, errorThrown ) {
+      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
+    },
+    complete: function( xhr, status ) {
+      //alert( "The request is complete!" );
+    }
+  });
+}
+
+function um_apicall_get_user_roles(userId) {
+  var m = 'getUserRoleNames';
+  var u = '../svc/' + m + '?p=' + userId;
+  $.ajax({
+    url: u,
+    type: "GET",
+    dataType : "json",
+    success: function( resp ) {
+      um_show_user_role_list(resp);
+    },
+    error: function( xhr, status, errorThrown ) {
+      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
+    },
+    complete: function( xhr, status ) {
+      //alert( "The request is complete!" );
+    }
+  });      
+}
+
+function um_apicall_get_granted_roles() {
+  var m = 'getRoleNamesGranted';
+  var u = '../svc/' + m;
+  $.ajax({
+    url: u,
+    type: "GET",
+    dataType : "json",
+    success: function( resp ) {
+      um_show_role_list(resp);
+    },
+    error: function( xhr, status, errorThrown ) {
+      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
+    },
+    complete: function( xhr, status ) {
+      //alert( "The request is complete!" );
+    }
+  });      
+}
+
+function um_apicall_get_login() {
+  var m = '?c=de.uhilger.um.pub.SessionManager&m=getSessionUser';
+  var u = '../pub' + m;
+  $.ajax({
+    url: u,
+    type: "GET",
+    dataType : "json",
+    success: function( resp ) {
+      $('#userMenu').text(resp.UserData.firstName);
+    },
+    error: function( xhr, status, errorThrown ) {
+      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
+    },
+    complete: function( xhr, status ) {
+      //alert( "The request is complete!" );
+    }
+  });      
+  
+}
+
+function um_apicall_logout() {
+  var m = '?c=de.uhilger.um.pub.SessionManager&m=expireSession';
+  var u = '../pub' + m;
+  $.ajax({
+    url: u,
+    type: "GET",
+    dataType : "text",
+    success: function( resp ) {
+      $('#userMenu').text('nicht angemeldet');
+      window.location.href = '../logout.html';
+    },
+    error: function( xhr, status, errorThrown ) {
+      $('#fehler').html("Error: " + errorThrown + " Status: " + status);
+    },
+    complete: function( xhr, status ) {
+      //alert( "The request is complete!" );
+    }
+  });      
+}
+
+/* ----- Hilfsfunktionen ----- */
+
+function serialisieren(obj) {
+  return '{"' + obj.constructor.name + '":' + JSON.stringify(obj) + '}';
+};
+
+/* ----- Objekte ----- */
+
+function User(i, p, fn, ln, em) {
+  this.id = i;
+  this.pw = p;
+  this.firstName = fn;
+  this.lastName = ln;
+  this.email = em;
+}
+
+function UserRole(u, r) {
+  this.userId = u;
+  this.role = r;
+}
\ No newline at end of file

--
Gitblit v1.9.3