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> <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
};