From a584022ecc7f186386a748122a84e21615e29399 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Sat, 5 Jul 2014 01:21:18 +0200 Subject: [PATCH 01/10] increment group counters when a user is created --- settings/js/users/groups.js | 4 ++++ settings/js/users/users.js | 10 ++++++++-- settings/templates/users/part.grouplist.php | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js index dcaf593b886..c3e3d1a50c9 100644 --- a/settings/js/users/groups.js +++ b/settings/js/users/groups.js @@ -34,6 +34,10 @@ GroupList = { $groupLiElement.find('.usercount').text(usercount); }, + getUserCount: function ($groupLiElement) { + return parseInt($groupLiElement.data('usercount'), 10); + }, + getCurrentGID: function () { return GroupList.activeGID; }, diff --git a/settings/js/users/users.js b/settings/js/users/users.js index f84d67b75bc..170a4bd89da 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -91,8 +91,8 @@ var UserList = { } $tdLastLogin = $tr.find('td.lastLogin'); $tdLastLogin.text(lastLoginRel); - //tooltip makes it complicated … to not insert new HTML, we adjust the - //original title. We use a temporary div to get back the html that we + //tooltip makes it complicated … to not insert new HTML, we adjust the + //original title. We use a temporary div to get back the html that we //can pass later. It is also required to initialise tipsy. var tooltip = $('
').html($($tdLastLogin.attr('original-title')).text(lastLoginAbs)).html(); $tdLastLogin.tipsy({gravity:'s', fade:true, html:true}); @@ -602,6 +602,12 @@ $(document).ready(function () { if (result.data.groups) { var addedGroups = result.data.groups; UserList.availableGroups = $.unique($.merge(UserList.availableGroups, addedGroups)); + for (i in result.data.groups) { + var gid = result.data.groups[i]; + $li = GroupList.getGroupLI(gid); + userCount = GroupList.getUserCount($li); + GroupList.setUserCount($li, userCount + 1); + } } if (result.data.homeExists){ OC.Notification.hide(); diff --git a/settings/templates/users/part.grouplist.php b/settings/templates/users/part.grouplist.php index 28f2236b1d7..588c2e6202c 100644 --- a/settings/templates/users/part.grouplist.php +++ b/settings/templates/users/part.grouplist.php @@ -27,7 +27,7 @@ -
  • +
  • t('Admins')); ?> 0) { p($adminGroup['usercount']); } ?> From 5e5a02cc2f377e231176e56649168e120d14b177 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Sat, 5 Jul 2014 02:14:08 +0200 Subject: [PATCH 02/10] decrease user count in affected groups after user delete --- settings/js/users/users.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/settings/js/users/users.js b/settings/js/users/users.js index 170a4bd89da..923dd9fcfb9 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -238,6 +238,20 @@ var UserList = { UserList.getRow(uid).show(); }, remove: function(uid) { + $tr = UserList.getRow(uid); + groups = $tr.find('.groups .groupsselect').val(); + for(i in groups) { + var gid = groups[i]; + $li = GroupList.getGroupLI(gid); + userCount = GroupList.getUserCount($li); + if(userCount == 1) { + newUserCount = ''; + } else { + newUserCount = userCount - 1; + } + GroupList.setUserCount($li, newUserCount); + } + UserList.getRow(uid).remove(); }, has: function(uid) { From e2c935d6fb05d340164a941bc05f616e2fcbb5d7 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Tue, 8 Jul 2014 20:05:51 +0200 Subject: [PATCH 03/10] increase/decrease everyone count on user creation/deletion --- settings/js/users/groups.js | 17 ++++++++++- settings/js/users/users.js | 31 +++++++++++++++++---- settings/templates/users/part.grouplist.php | 2 +- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js index c3e3d1a50c9..f74c54bbd87 100644 --- a/settings/js/users/groups.js +++ b/settings/js/users/groups.js @@ -10,6 +10,7 @@ var $userGroupList; var GroupList; GroupList = { activeGID: '', + everyoneGID: '_everyone', addGroup: function (gid, usercount) { var $li = $userGroupList.find('.isgroup:last-child').clone(); @@ -27,7 +28,7 @@ GroupList = { setUserCount: function (groupLiElement, usercount) { var $groupLiElement = $(groupLiElement); - if (usercount === undefined || usercount === 0) { + if (usercount === undefined || usercount === 0 || usercount < 0) { usercount = ''; } $groupLiElement.data('usercount', usercount); @@ -38,6 +39,20 @@ GroupList = { return parseInt($groupLiElement.data('usercount'), 10); }, + modEveryoneCount: function(diff) { + $li = GroupList.getGroupLI(GroupList.everyoneGID); + count = GroupList.getUserCount($li) + diff; + GroupList.setUserCount($li, count); + }, + + incEveryoneCount: function() { + GroupList.modEveryoneCount(1); + }, + + decEveryoneCount: function() { + GroupList.modEveryoneCount(-1); + }, + getCurrentGID: function () { return GroupList.activeGID; }, diff --git a/settings/js/users/users.js b/settings/js/users/users.js index 923dd9fcfb9..60e1e1dd31f 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -237,7 +237,7 @@ var UserList = { show: function(uid) { UserList.getRow(uid).show(); }, - remove: function(uid) { + markRemove: function(uid) { $tr = UserList.getRow(uid); groups = $tr.find('.groups .groupsselect').val(); for(i in groups) { @@ -251,9 +251,29 @@ var UserList = { } GroupList.setUserCount($li, newUserCount); } - + GroupList.decEveryoneCount(); + UserList.hide(uid); + }, + remove: function(uid) { UserList.getRow(uid).remove(); }, + undoRemove: function(uid) { + $tr = UserList.getRow(uid); + groups = $tr.find('.groups .groupsselect').val(); + for(i in groups) { + var gid = groups[i]; + $li = GroupList.getGroupLI(gid); + userCount = GroupList.getUserCount($li); + if(userCount == 1) { + newUserCount = ''; + } else { + newUserCount = userCount + 1; + } + GroupList.setUserCount($li, newUserCount); + } + GroupList.incEveryoneCount(); + UserList.getRow(uid).show(); + }, has: function(uid) { return UserList.getRow(uid).length > 0; }, @@ -271,14 +291,14 @@ var UserList = { initDeleteHandling: function() { //set up handler UserDeleteHandler = new DeleteHandler('removeuser.php', 'username', - UserList.hide, UserList.remove); + UserList.markRemove, UserList.remove); //configure undo OC.Notification.hide(); var msg = escapeHTML(t('settings', 'deleted {userName}', {userName: '%oid'})) + '' + escapeHTML(t('settings', 'undo')) + ''; UserDeleteHandler.setNotification(OC.Notification, 'deleteuser', msg, - UserList.show); + UserList.undoRemove); //when to mark user for delete $userListBody.on('click', '.delete', function () { @@ -482,11 +502,9 @@ $(document).ready(function () { UserList.doSort(); UserList.availableGroups = $userList.data('groups'); - UserList.scrollArea = $('#app-content'); UserList.scrollArea.scroll(function(e) {UserList._onScroll(e);}); - $userList.after($('')); $('.groupsselect').each(function (index, element) { @@ -639,6 +657,7 @@ $(document).ready(function () { UserList.add(username, username, result.data.groups, null, 'default', result.data.storageLocation, 0, true); } $('#newusername').focus(); + GroupList.incEveryoneCount(); } } ); diff --git a/settings/templates/users/part.grouplist.php b/settings/templates/users/part.grouplist.php index 588c2e6202c..c5e85fa3534 100644 --- a/settings/templates/users/part.grouplist.php +++ b/settings/templates/users/part.grouplist.php @@ -12,7 +12,7 @@
  • -
  • +
  • " class="isgroup"> t('Everyone')); ?> From bdc36461a7e30d58d2c357fca2984d390d03233b Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Tue, 8 Jul 2014 20:12:10 +0200 Subject: [PATCH 04/10] avoid global selector --- settings/js/users/groups.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js index f74c54bbd87..e3acce5a4bf 100644 --- a/settings/js/users/groups.js +++ b/settings/js/users/groups.js @@ -58,7 +58,7 @@ GroupList = { }, sortGroups: function () { - var lis = $('.isgroup').get(); + var lis = $userGroupList.find('.isgroup').get(); lis.sort(function (a, b) { return UserList.alphanum( From f76deb9f87d6d1a43925314e35f9978f00e30521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Wed, 9 Jul 2014 14:30:28 +0200 Subject: [PATCH 05/10] fixing JS synatx errors --- settings/js/users/groups.js | 6 +++--- settings/js/users/users.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js index e3acce5a4bf..22f5c9d2a72 100644 --- a/settings/js/users/groups.js +++ b/settings/js/users/groups.js @@ -40,8 +40,8 @@ GroupList = { }, modEveryoneCount: function(diff) { - $li = GroupList.getGroupLI(GroupList.everyoneGID); - count = GroupList.getUserCount($li) + diff; + var $li = GroupList.getGroupLI(GroupList.everyoneGID); + var count = GroupList.getUserCount($li) + diff; GroupList.setUserCount($li, count); }, @@ -140,7 +140,7 @@ GroupList = { } _.defer(function () { $(lis).each(function () { - this.removeClass('transparent') + this.removeClass('transparent'); }); }); } diff --git a/settings/js/users/users.js b/settings/js/users/users.js index 60e1e1dd31f..f04761e6f10 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -399,8 +399,8 @@ var UserList = { } } ); - } - }; + }; + } var addGroup = function (select, group) { $('select[multiple]').each(function (index, element) { $element = $(element); From 506a3400e5215946da0c10ae8fa6045ed90ffd51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Wed, 9 Jul 2014 15:29:38 +0200 Subject: [PATCH 06/10] remove the group in case the last user has removed from that group --- settings/js/users/users.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/settings/js/users/users.js b/settings/js/users/users.js index f04761e6f10..5775d83d098 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -393,6 +393,18 @@ var UserList = { ) { UserList.availableGroups.push(response.data.groupname); } + + // in case this was the last user in that group the group has to be removed + var groupElement = GroupList.getGroupLI(response.data.groupname); + var userCount = GroupList.getUserCount(groupElement); + if (response.data.action === 'remove' && userCount === 1) { + _.without(UserList.availableGroups, response.data.groupname); + GroupList.remove(response.data.groupname); + $('.groupsselect option[value='+response.data.groupname+']').remove(); + $('.subadminsselect option[value='+response.data.groupname+']').remove(); + } + + } if (response.data.message) { OC.Notification.show(response.data.message); From b15510ed9aec0d085da0caa634707c0da53c5ad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Wed, 9 Jul 2014 16:13:33 +0200 Subject: [PATCH 07/10] magic strings - bad kungfu --- settings/ajax/userlist.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/settings/ajax/userlist.php b/settings/ajax/userlist.php index 32237d60b6e..2bf40686b87 100644 --- a/settings/ajax/userlist.php +++ b/settings/ajax/userlist.php @@ -34,6 +34,9 @@ if (isset($_GET['limit'])) { } if (isset($_GET['gid']) && !empty($_GET['gid'])) { $gid = $_GET['gid']; + if ($gid === '_everyone') { + $gid = false; + } } else { $gid = false; } From 899d6eab0056bd5179915cc29bb8ff873240eaa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Wed, 9 Jul 2014 16:36:51 +0200 Subject: [PATCH 08/10] some more cleanup --- settings/js/users/users.js | 74 +++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 38 deletions(-) diff --git a/settings/js/users/users.js b/settings/js/users/users.js index 5775d83d098..1fcd68bad59 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -20,8 +20,8 @@ var UserList = { add: function (username, displayname, groups, subadmin, quota, storageLocation, lastLogin, sort) { var $tr = $userListBody.find('tr:first-child').clone(); - var subadminsEl; - var subadminSelect; + var subAdminsEl; + var subAdminSelect; var groupsSelect; if ($tr.find('div.avatardiv').length){ $tr.find('.avatardiv').imageplaceholder(username, displayname); @@ -38,7 +38,7 @@ var UserList = { .data('username', username) .data('user-groups', groups); if ($tr.find('td.subadmins').length > 0) { - subadminSelect = $('') .data('username', username) .data('user-groups', groups) .data('subadmin', subadmin); @@ -46,14 +46,14 @@ var UserList = { } $.each(this.availableGroups, function (i, group) { groupsSelect.append($('')); - if (typeof subadminSelect !== 'undefined' && group !== 'admin') { - subadminSelect.append($('')); + if (typeof subAdminSelect !== 'undefined' && group !== 'admin') { + subAdminSelect.append($('')); } }); $tr.find('td.groups').empty().append(groupsSelect); - subadminsEl = $tr.find('td.subadmins'); - if (subadminsEl.length > 0) { - subadminsEl.append(subadminSelect); + subAdminsEl = $tr.find('td.subadmins'); + if (subAdminsEl.length > 0) { + subAdminsEl.append(subAdminSelect); } if ($tr.find('td.remove img').length === 0 && OC.currentUser !== username) { var deleteImage = $('').attr({ @@ -81,15 +81,14 @@ var UserList = { } $tr.find('td.storageLocation').text(storageLocation); - if(lastLogin === 0) { - var lastLoginRel = t('settings', 'never'); - var lastLoginAbs = lastLoginRel; - } else { + var lastLoginRel = t('settings', 'never'); + var lastLoginAbs = lastLoginRel; + if(lastLogin !== 0) { lastLogin = new Date(lastLogin * 1000); - var lastLoginRel = relative_modified_date(lastLogin.getTime() / 1000); - var lastLoginAbs = formatDate(lastLogin.getTime()); + lastLoginRel = relative_modified_date(lastLogin.getTime() / 1000); + lastLoginAbs = formatDate(lastLogin.getTime()); } - $tdLastLogin = $tr.find('td.lastLogin'); + var $tdLastLogin = $tr.find('td.lastLogin'); $tdLastLogin.text(lastLoginRel); //tooltip makes it complicated … to not insert new HTML, we adjust the //original title. We use a temporary div to get back the html that we @@ -124,8 +123,8 @@ var UserList = { window.setTimeout(function(){ $quotaSelect.singleSelect(); UserList.applyGroupSelect(groupsSelect); - if (subadminSelect) { - UserList.applySubadminSelect(subadminSelect); + if (subAdminSelect) { + UserList.applySubadminSelect(subAdminSelect); } }, 0); return $tr; @@ -238,18 +237,17 @@ var UserList = { UserList.getRow(uid).show(); }, markRemove: function(uid) { - $tr = UserList.getRow(uid); - groups = $tr.find('.groups .groupsselect').val(); - for(i in groups) { + var $tr = UserList.getRow(uid); + var groups = $tr.find('.groups .groupsselect').val(); + for(var i in groups) { var gid = groups[i]; - $li = GroupList.getGroupLI(gid); - userCount = GroupList.getUserCount($li); - if(userCount == 1) { - newUserCount = ''; + var $li = GroupList.getGroupLI(gid); + var userCount = GroupList.getUserCount($li); + if(userCount === 1) { + GroupList.setUserCount($li, ''); } else { - newUserCount = userCount - 1; + GroupList.setUserCount($li, userCount - 1); } - GroupList.setUserCount($li, newUserCount); } GroupList.decEveryoneCount(); UserList.hide(uid); @@ -258,18 +256,17 @@ var UserList = { UserList.getRow(uid).remove(); }, undoRemove: function(uid) { - $tr = UserList.getRow(uid); - groups = $tr.find('.groups .groupsselect').val(); - for(i in groups) { + var $tr = UserList.getRow(uid); + var groups = $tr.find('.groups .groupsselect').val(); + for(var i in groups) { var gid = groups[i]; - $li = GroupList.getGroupLI(gid); - userCount = GroupList.getUserCount($li); - if(userCount == 1) { - newUserCount = ''; + var $li = GroupList.getGroupLI(gid); + var userCount = GroupList.getUserCount($li); + if(userCount === 1) { + GroupList.setUserCount($li, ''); } else { - newUserCount = userCount + 1; + GroupList.setUserCount($li, userCount + 1); } - GroupList.setUserCount($li, newUserCount); } GroupList.incEveryoneCount(); UserList.getRow(uid).show(); @@ -359,7 +356,7 @@ var UserList = { }, 0); } UserList.updating = false; - }); + }); }, applyGroupSelect: function (element) { @@ -416,7 +413,8 @@ var UserList = { var addGroup = function (select, group) { $('select[multiple]').each(function (index, element) { $element = $(element); - if ($element.find('option[value="' + group + '"]').length === 0 && select.data('msid') !== $element.data('msid')) { + if ($element.find('option[value="' + group + '"]').length === 0 && + select.data('msid') !== $element.data('msid')) { $element.append(''); } }); @@ -646,7 +644,7 @@ $(document).ready(function () { if (result.data.groups) { var addedGroups = result.data.groups; UserList.availableGroups = $.unique($.merge(UserList.availableGroups, addedGroups)); - for (i in result.data.groups) { + for (var i in result.data.groups) { var gid = result.data.groups[i]; $li = GroupList.getGroupLI(gid); userCount = GroupList.getUserCount($li); From 56f029d52428ca2b8b4c3ef86051423fc311d6a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Wed, 9 Jul 2014 16:48:26 +0200 Subject: [PATCH 09/10] use .filterAttr() --- settings/js/users/users.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/settings/js/users/users.js b/settings/js/users/users.js index 1fcd68bad59..97f3a960a6e 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -385,20 +385,21 @@ var UserList = { function (response) { if (response.status === 'success') { GroupList.update(); - if (UserList.availableGroups.indexOf(response.data.groupname) === -1 && + var groupName = response.data.groupname; + if (UserList.availableGroups.indexOf(groupName) === -1 && response.data.action === 'add' ) { - UserList.availableGroups.push(response.data.groupname); + UserList.availableGroups.push(groupName); } // in case this was the last user in that group the group has to be removed - var groupElement = GroupList.getGroupLI(response.data.groupname); + var groupElement = GroupList.getGroupLI(groupName); var userCount = GroupList.getUserCount(groupElement); if (response.data.action === 'remove' && userCount === 1) { - _.without(UserList.availableGroups, response.data.groupname); - GroupList.remove(response.data.groupname); - $('.groupsselect option[value='+response.data.groupname+']').remove(); - $('.subadminsselect option[value='+response.data.groupname+']').remove(); + _.without(UserList.availableGroups, groupName); + GroupList.remove(groupName); + $('.groupsselect option').filterAttr('value', groupName).remove(); + $('.subadminsselect option').filterAttr('value', groupName).remove(); } From db07c33ecdcfb7125aef132a27e971e46325e4ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Wed, 9 Jul 2014 16:52:52 +0200 Subject: [PATCH 10/10] use .filterAttr() --- settings/js/users/users.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/settings/js/users/users.js b/settings/js/users/users.js index 97f3a960a6e..7d567e225d9 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -73,8 +73,8 @@ var UserList = { .find('option').attr('selected', null) .first().attr('selected', 'selected'); } else { - if ($quotaSelect.find('option[value="' + quota + '"]').length > 0) { - $quotaSelect.find('option[value="' + quota + '"]').attr('selected', 'selected'); + if ($quotaSelect.find('option').filterAttr('value', quota).length > 0) { + $quotaSelect.find('option').filterAttr('value', quota).attr('selected', 'selected'); } else { $quotaSelect.append(''); } @@ -414,7 +414,7 @@ var UserList = { var addGroup = function (select, group) { $('select[multiple]').each(function (index, element) { $element = $(element); - if ($element.find('option[value="' + group + '"]').length === 0 && + if ($element.find('option').filterAttr('value', group).length === 0 && select.data('msid') !== $element.data('msid')) { $element.append(''); } @@ -464,7 +464,7 @@ var UserList = { var addSubAdmin = function (group) { $('select[multiple]').each(function (index, element) { - if ($(element).find('option[value="' + group + '"]').length === 0) { + if ($(element).find('option').filterAttr('value', group).length === 0) { $(element).append(''); } });