More user group improvements, translation improvements.

Ylian Saint-Hilaire committed Jan 2, 2020 at 16:39 UTC 19b5c5663a7fcd457a90a1063455bbffe1f81a1b
5 files changed +28 -17
package.json
+1 -1
@@ -1,6 +1,6 @@
1 {
2 "name": "meshcentral",
3 - "version": "0.4.6-u",
3 + "version": "0.4.6-v",
4 "keywords": [
5 "Remote Management",
6 "Intel AMT",
public/styles/style.css
+3 -3
@@ -600,19 +600,19 @@ body {
600
601 #idx_dlgCancelButton {
602 float: right;
603 - width: 80px;
603 + min-width: 80px;
604 margin-left: 5px;
605 }
606
607 #idx_dlgOkButton {
608 float: right;
609 - width: 80px;
609 + min-width: 80px;
610 margin-left: 5px;
611 }
612
613 #idx_dlgDeleteButton {
614 float: left;
615 - width: 80px;
615 + min-width: 80px;
616 margin-left: 5px;
617 }
618
translate/translate.json
+1 -1
@@ -2693,7 +2693,7 @@
2693 "pt": "Cancelar",
2694 "ja": "キャンセル",
2695 "nl": "Annuleren",
2696 - "de": "Abbr.",
2696 + "de": "Abbrechen",
2697 "xloc": [
2698 "default.handlebars->container->dialog->idx_dlgButtonBar",
2699 "default.handlebars->23->946",
views/default.handlebars
+22 -11
@@ -1125,7 +1125,7 @@
1125 var meshes = {};
1126 var meshcount = 0;
1127 var nodes = null;
1128 - var usergroups = {};
1128 + var usergroups = null;
1129 var filetree = {};
1130 var userinfo = null;
1131 var serverinfo = null;
@@ -1722,8 +1722,10 @@
1722 break;
1723 }
1724 case 'usergroups': {
1725 + var groupCount = 0;
1726 usergroups = {};
1726 - for (var i in message.ugroups) { usergroups[message.ugroups[i]._id] = message.ugroups[i]; }
1727 + for (var i in message.ugroups) { groupCount++; usergroups[message.ugroups[i]._id] = message.ugroups[i]; }
1728 + if (groupCount == 0) { usergroups = null; }
1729 masterUpdate(8192);
1730 break;
1731 }
@@ -2218,6 +2220,7 @@
2220 case 'createusergroup':
2221 case 'usergroupchange': {
2222 // User group changed
2223 + if (usergroups == null) { usergroups = {}; }
2224 var ugroup = usergroups[message.event.ugrpid];
2225 if (ugroup == null) {
2226 // This is a new user group for us
@@ -2233,7 +2236,13 @@
2236 }
2237 case 'deleteusergroup': {
2238 // User group removed
2236 - if (usergroups[message.event.ugrpid] != null) { delete usergroups[message.event.ugrpid]; masterUpdate(8192); }
2239 + if ((usergroups != null) && (usergroups[message.event.ugrpid] != null)) {
2240 + delete usergroups[message.event.ugrpid];
2241 + var c = 0;
2242 + for (var i in usergroups) { c++; }
2243 + if (c == 0) { usergroups = null; } // If user groups is empty, set it to null.
2244 + masterUpdate(8192 + 16384);
2245 + }
2246 break;
2247 }
2248 case 'createmesh': {
@@ -7651,7 +7660,7 @@
7660 x += '<br style=clear:both><br>';
7661 if (meshrights & 2) {
7662 x += '<a href=# onclick="return p20showAddMeshUserDialog()" style=cursor:pointer;margin-right:10px><img src=images/icon-addnew.png border=0 height=12 width=12> ' + "Add Users" + '</a>';
7654 - if ((userinfo.siteadmin & 256) != 0) {
7663 + if ((usergroups != null) && ((userinfo.siteadmin & 256) != 0)) {
7664 var userGroupCount = 0, newUserGroup = false;
7665 for (var i in usergroups) { userGroupCount++; if ((currentMesh.links == null) || (currentMesh.links[i] == null)) { newUserGroup = true; } }
7666 if ((userGroupCount > 0) && (newUserGroup)) { x += '<a href=# onclick="return p20showAddMeshUserDialog(2)" style=cursor:pointer;margin-right:10px><img src=images/icon-addnew.png border=0 height=12 width=12> ' + "Add User Group" + '</a>'; }
@@ -7682,6 +7691,7 @@
7691 var uname = i.split('/')[2];
7692 if (currentMesh.links[i].name) { uname = currentMesh.links[i].name; }
7693 if (i == userinfo._id) { uname = userinfo.name; }
7694 + if ((usergroups != null) && (usergroups[i] != null)) { uname = usergroups[i].name; }
7695 sortedusers.push({ id: i, name: uname, rights: currentMesh.links[i].rights });
7696 }
7697 sortedusers.sort(function(a, b) { if (a.name > b.name) return 1; if (a.name < b.name) return -1; return 0; });
@@ -7888,7 +7898,7 @@
7898 for (var i in meshes) { if ((currentUser.links == null) || (currentUser.links[i] == null)) { y += '<option value=' + encodeURIComponent(i) + '>' + EscapeHtml(meshes[i].name) + '</option>'; } }
7899 x += addHtmlValue("Device Group", '<div style=width:230px;margin:0;padding:0><select onchange=p20validateAddMeshUserDialog() id=dp2groupid style=width:100%>' + y + '</select></div>');
7900 } else if (userid === 2) {
7891 - if ((userinfo.siteadmin & 256) == 0) return;
7901 + if ((usergroups == null) || ((userinfo.siteadmin & 256) == 0)) return;
7902 var y = '';
7903 for (var i in usergroups) { if ((currentMesh.links == null) || (currentMesh.links[i] == null)) { y += '<option value=' + encodeURIComponent(i) + '>' + EscapeHtml(usergroups[i].name) + '</option>'; } }
7904 x += addHtmlValue("User Group", '<div style=width:230px;margin:0;padding:0><select onchange=p20validateAddMeshUserDialog() id=dp2groupid style=width:100%>' + y + '</select></div>');
@@ -9089,7 +9099,7 @@
9099 function updateUserGroups() {
9100 // Sort the list of group names
9101 var sortedGroups = [], x = '';
9092 - for (var i in usergroups) { sortedGroups.push(usergroups[i]); }
9102 + if (usergroups) { for (var i in usergroups) { sortedGroups.push(usergroups[i]); } }
9103 sortedGroups.sort(nameSort);
9104
9105 if (sortedGroups.length == 0) {
@@ -9124,7 +9134,7 @@
9134 if (xxdialogMode) return;
9135 var x = '', y = '';
9136 if (mode == 2) {
9127 - for (var i in usergroups) { y += '<option value=' + encodeURIComponent(i) + '>' + EscapeHtml(usergroups[i].name) + '</option>'; }
9137 + if (usergroups) { for (var i in usergroups) { y += '<option value=' + encodeURIComponent(i) + '>' + EscapeHtml(usergroups[i].name) + '</option>'; } }
9138 x += addHtmlValue("User Group", '<div style=width:230px;margin:0;padding:0><select id=dp4groupid style=width:100%>' + y + '</select></div>');
9139 }
9140 x += addHtmlValue("Name", '<input id=p4name maxlength=64 onchange=showCreateUserGroupDialogValidate() onkeyup=showCreateUserGroupDialogValidate() />');
@@ -9151,7 +9161,7 @@
9161 var currentUserGroup = null;
9162 function gotoUserGroup(groupid, force) {
9163 if (xxdialogMode && !force) return;
9154 - var group = currentUserGroup = usergroups[decodeURIComponent(groupid)];
9164 + var group = currentUserGroup = usergroups?usergroups[decodeURIComponent(groupid)]:null;
9165 if (group == null) { if (xxcurrentView == 51) { setDialogMode(0); go(50); } return; }
9166 QH('p51groupName', group.name);
9167 var usercount = 0, meshcount = 0;
@@ -9570,10 +9580,11 @@
9580 }
9581 }
9582 if (count == 1) { x += '<tr><td><div style=padding:6px>&nbsp;<i>' + "No device groups in common" + '</i><div></div></div></td><td></td></tr>'; }
9573 - x += '</tbody></table><br />';
9583 + x += '</tbody></table>';
9584
9585 if (usergroups != null) {
9586 count = 1;
9587 + x += '<br />';
9588 if ((userinfo.siteadmin & 256) != 0) {
9589 var userGroupCount = 0, newUserGroup = false;
9590 for (var i in usergroups) { userGroupCount++; if ((currentUser.links == null) || (currentUser.links[i] == null)) { newUserGroup = true; } }
@@ -9598,7 +9609,7 @@
9609 }
9610
9611 function p30RemoveUserGroup(button, ugrpid) {
9601 - if (xxdialogMode) return;
9612 + if (xxdialogMode || (usergroups == null)) return;
9613 var groupid = decodeURIComponent(ugrpid), group = usergroups[groupid];
9614 var name = (group != null)?EscapeHtml(group.name):('<i>' + "Unknown" + '</i>');
9615 setDialogMode(2, "Remove User", 3, p30RemoveUserGroupEx, format("Confirm removal of group {0}?", name), groupid);
@@ -9609,7 +9620,7 @@
9620 }
9621
9622 function p30showAddUserGroupDialog() {
9612 - if (xxdialogMode) return;
9623 + if (xxdialogMode || (usergroups == null)) return;
9624 var y = '';
9625 for (var i in usergroups) { if ((currentUser.links == null) || (currentUser.links[i] == null)) { y += '<option value=' + encodeURIComponent(i) + '>' + EscapeHtml(usergroups[i].name) + '</option>'; } }
9626 var x = addHtmlValue("User Group", '<div style=width:230px;margin:0;padding:0><select id=dp2groupid style=width:100%>' + y + '</select></div>');
webserver.js
+1 -1
@@ -4165,7 +4165,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
4165 function render(req, res, filename, args) {
4166 if ((obj.parent.webViewsOverridePath == null) && (obj.renderPages != null)) {
4167 // If a user set a localization, use that
4168 - if ((req.session != null) && (req.session.userid)) {
4168 + if ((req.query.lang == null) && (req.session != null) && (req.session.userid)) {
4169 var user = obj.users[req.session.userid];
4170 if ((user != null) && (user.lang != null)) { req.query.lang = user.lang; }
4171 };