enable group filtering
This commit is contained in:
parent
dbc854d8b8
commit
249e42c4cd
|
@ -0,0 +1,75 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* ownCloud
|
||||||
|
*
|
||||||
|
* @author Arthur Schiwon
|
||||||
|
* @copyright 2014 Arthur Schiwon <blizzz@owncloud.com>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 3 of the License, or any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public
|
||||||
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
OC_JSON::callCheck();
|
||||||
|
OC_JSON::checkSubAdminUser();
|
||||||
|
if (isset($_GET['pattern']) && !empty($_GET['pattern'])) {
|
||||||
|
$pattern = $_GET['pattern'];
|
||||||
|
} else {
|
||||||
|
$pattern = '';
|
||||||
|
}
|
||||||
|
$groups = array();
|
||||||
|
$adminGroups = array();
|
||||||
|
$groupManager = \OC_Group::getManager();
|
||||||
|
|
||||||
|
$accessiblegroups = $groupManager->search($pattern);
|
||||||
|
if (!OC_User::isAdminUser(OC_User::getUser())) {
|
||||||
|
$subadminGroups = OC_SubAdmin::getSubAdminsGroups(OC_User::getUser());
|
||||||
|
$accessiblegroups = array_intersect($accessiblegroups, $subadminGroups);
|
||||||
|
}
|
||||||
|
|
||||||
|
$sortGroupsIndex = 0;
|
||||||
|
$sortGroupsKeys = array();
|
||||||
|
$sortAdminGroupsIndex = 0;
|
||||||
|
$sortAdminGroupsKeys = array();
|
||||||
|
|
||||||
|
foreach($accessiblegroups as $group) {
|
||||||
|
$gid = $group->getGID();
|
||||||
|
$usersInGroup = OC_Group::usersInGroup($gid, '');
|
||||||
|
if (!OC_User::isAdminUser($gid)) {
|
||||||
|
$groups[] = array(
|
||||||
|
'id' => str_replace(' ','', $gid ),
|
||||||
|
'name' => $gid,
|
||||||
|
'usercount' => count($usersInGroup),
|
||||||
|
);
|
||||||
|
$sortGroupsKeys[$sortGroupsIndex] = count($usersInGroup);
|
||||||
|
$sortGroupsIndex++;
|
||||||
|
} else {
|
||||||
|
$adminGroup[] = array(
|
||||||
|
'id' => str_replace(' ','', $gid ),
|
||||||
|
'name' => $gid,
|
||||||
|
'usercount' => count($usersInGroup)
|
||||||
|
);
|
||||||
|
$sortAdminGroupsKeys[$sortAdminGroupsIndex] = count($usersInGroup);
|
||||||
|
$sortAdminGroupsIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!empty($groups)) {
|
||||||
|
array_multisort($sortGroupsKeys, SORT_DESC, $groups);
|
||||||
|
}
|
||||||
|
if(!empty($adminGroup)) {
|
||||||
|
array_multisort($sortAdminGroupsKeys, SORT_DESC, $adminGroup);
|
||||||
|
}
|
||||||
|
|
||||||
|
OC_JSON::success(
|
||||||
|
array('data' => array('adminGroups' => $adminGroups, 'groups' => $groups)));
|
|
@ -10,9 +10,10 @@
|
||||||
* @param jQuery input element that works as the user text input field
|
* @param jQuery input element that works as the user text input field
|
||||||
* @param object the UserList object
|
* @param object the UserList object
|
||||||
*/
|
*/
|
||||||
function UserManagementFilter(filterInput, userList) {
|
function UserManagementFilter(filterInput, userList, groupList) {
|
||||||
this.filterInput = filterInput;
|
this.filterInput = filterInput;
|
||||||
this.userList = userList;
|
this.userList = userList;
|
||||||
|
this.groupList = groupList;
|
||||||
this.thread = undefined;
|
this.thread = undefined;
|
||||||
this.oldval = this.filterInput.val();
|
this.oldval = this.filterInput.val();
|
||||||
|
|
||||||
|
@ -25,8 +26,6 @@ function UserManagementFilter(filterInput, userList) {
|
||||||
UserManagementFilter.prototype.init = function() {
|
UserManagementFilter.prototype.init = function() {
|
||||||
umf = this;
|
umf = this;
|
||||||
this.filterInput.keyup(function(e) {
|
this.filterInput.keyup(function(e) {
|
||||||
console.log(e.keyCode);
|
|
||||||
|
|
||||||
//we want to react on any printable letter, plus on modyfing stuff like
|
//we want to react on any printable letter, plus on modyfing stuff like
|
||||||
//Backspace and Delete. extended https://stackoverflow.com/a/12467610
|
//Backspace and Delete. extended https://stackoverflow.com/a/12467610
|
||||||
var valid =
|
var valid =
|
||||||
|
@ -61,6 +60,8 @@ UserManagementFilter.prototype.init = function() {
|
||||||
UserManagementFilter.prototype.run = function() {
|
UserManagementFilter.prototype.run = function() {
|
||||||
this.userList.empty();
|
this.userList.empty();
|
||||||
this.userList.update();
|
this.userList.update();
|
||||||
|
this.groupList.empty();
|
||||||
|
this.groupList.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -6,17 +6,22 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var GroupList = {
|
var GroupList = {
|
||||||
addGroup: function(gid) {
|
addGroup: function(gid, usercount) {
|
||||||
|
if(usercount === undefined || usercount === 0) {
|
||||||
|
usercount = '';
|
||||||
|
}
|
||||||
var li = $('li[data-gid]').last().clone();
|
var li = $('li[data-gid]').last().clone();
|
||||||
var ul = $('li[data-gid]').first().parent();
|
var ul = $('li[data-gid]').first().parent();
|
||||||
li.attr('data-gid', gid);
|
li.attr('data-gid', gid);
|
||||||
li.attr('data-usercount', 0);
|
li.attr('data-usercount', usercount);
|
||||||
li.find('a span').first().text(gid);
|
li.find('a span').first().text(gid);
|
||||||
li.find('span[class=usercount]').first().text('');
|
li.find('span[class=usercount]').first().text(usercount);
|
||||||
|
|
||||||
$(li).appendTo(ul);
|
$(li).appendTo(ul);
|
||||||
|
|
||||||
GroupList.sortGroups(0);
|
GroupList.sortGroups(0);
|
||||||
|
|
||||||
|
return li;
|
||||||
},
|
},
|
||||||
|
|
||||||
sortGroups: function(usercount) {
|
sortGroups: function(usercount) {
|
||||||
|
@ -75,6 +80,41 @@
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
update: function() {
|
||||||
|
if (GroupList.updating) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
GroupList.updating = true;
|
||||||
|
pattern = filter.getPattern();
|
||||||
|
var query = $.param({ pattern: pattern });
|
||||||
|
$.get(OC.generateUrl('/settings/ajax/grouplist') + '?' + query, function (result) {
|
||||||
|
var lis = [];
|
||||||
|
if (result.status === 'success') {
|
||||||
|
$.each(result.data, function (i, subset) {
|
||||||
|
$.each(subset, function (index, group) {
|
||||||
|
if($('li[data-gid="' + group.name + '"]').length > 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
var li = GroupList.addGroup(group.name, group.usercount);
|
||||||
|
li.addClass('appear transparent');
|
||||||
|
lis.push(li);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
if (result.data.length > 0) {
|
||||||
|
GroupList.doSort();
|
||||||
|
} else {
|
||||||
|
GroupList.noMoreEntries = true;
|
||||||
|
}
|
||||||
|
setTimeout(function() {
|
||||||
|
for (var i = 0; i < lis.length; i++) {
|
||||||
|
lis[i].removeClass('transparent');
|
||||||
|
}
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
GroupList.updating = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
elementBelongsToAddGroup: function(el) {
|
elementBelongsToAddGroup: function(el) {
|
||||||
return !(el !== $('#newgroup-form').get(0)
|
return !(el !== $('#newgroup-form').get(0)
|
||||||
&& $('#newgroup-form').find($(el)).length === 0);
|
&& $('#newgroup-form').find($(el)).length === 0);
|
||||||
|
@ -134,6 +174,9 @@
|
||||||
remove: function(gid) {
|
remove: function(gid) {
|
||||||
$('li').filterAttr('data-gid', gid).remove();
|
$('li').filterAttr('data-gid', gid).remove();
|
||||||
},
|
},
|
||||||
|
empty: function() {
|
||||||
|
$('li:not([data-gid=""])').remove();
|
||||||
|
},
|
||||||
initDeleteHandling: function() {
|
initDeleteHandling: function() {
|
||||||
//set up handler
|
//set up handler
|
||||||
GroupDeleteHandler = new DeleteHandler('removegroup.php', 'groupname',
|
GroupDeleteHandler = new DeleteHandler('removegroup.php', 'groupname',
|
||||||
|
|
|
@ -403,8 +403,6 @@ $(document).ready(function () {
|
||||||
UserList.applyMultiplySelect($(element));
|
UserList.applyMultiplySelect($(element));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$('table').on('click', 'td.password>img', function (event) {
|
$('table').on('click', 'td.password>img', function (event) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
var img = $(this);
|
var img = $(this);
|
||||||
|
@ -549,5 +547,6 @@ $(document).ready(function () {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
// Implements User Search
|
// Implements User Search
|
||||||
filter = new UserManagementFilter($('#usersearchform input'), UserList);
|
filter = new UserManagementFilter(
|
||||||
|
$('#usersearchform input'), UserList, GroupList);
|
||||||
});
|
});
|
||||||
|
|
|
@ -25,6 +25,8 @@ $this->create('settings_admin', '/settings/admin')
|
||||||
// users
|
// users
|
||||||
$this->create('settings_ajax_userlist', '/settings/ajax/userlist')
|
$this->create('settings_ajax_userlist', '/settings/ajax/userlist')
|
||||||
->actionInclude('settings/ajax/userlist.php');
|
->actionInclude('settings/ajax/userlist.php');
|
||||||
|
$this->create('settings_ajax_grouplist', '/settings/ajax/grouplist')
|
||||||
|
->actionInclude('settings/ajax/grouplist.php');
|
||||||
$this->create('settings_ajax_createuser', '/settings/ajax/createuser.php')
|
$this->create('settings_ajax_createuser', '/settings/ajax/createuser.php')
|
||||||
->actionInclude('settings/ajax/createuser.php');
|
->actionInclude('settings/ajax/createuser.php');
|
||||||
$this->create('settings_ajax_removeuser', '/settings/ajax/removeuser.php')
|
$this->create('settings_ajax_removeuser', '/settings/ajax/removeuser.php')
|
||||||
|
|
|
@ -18,6 +18,9 @@
|
||||||
<?php p($l->t('Everyone')); ?>
|
<?php p($l->t('Everyone')); ?>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
|
<span class="utils">
|
||||||
|
<span class="usercount"></span>
|
||||||
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- The Admin Group -->
|
<!-- The Admin Group -->
|
||||||
|
@ -25,21 +28,21 @@
|
||||||
<li data-gid="admin">
|
<li data-gid="admin">
|
||||||
<a href="#"><?php p($l->t('Admins')); ?></a>
|
<a href="#"><?php p($l->t('Admins')); ?></a>
|
||||||
<span class="utils">
|
<span class="utils">
|
||||||
<span class="usercount"><?php if(count($adminGroup['useringroup']) > 0) { p(count($adminGroup['useringroup'])); } ?></span>
|
<span class="usercount"><?php if($adminGroup['useringroup'] > 0) { p($adminGroup['useringroup']); } ?></span>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
|
|
||||||
<!--List of Groups-->
|
<!--List of Groups-->
|
||||||
<?php foreach($_["groups"] as $group): ?>
|
<?php foreach($_["groups"] as $group): ?>
|
||||||
<li data-gid="<?php p($group['name']) ?>" data-usercount="<?php p(count($group['useringroup'])) ?>">
|
<li data-gid="<?php p($group['name']) ?>" data-usercount="<?php p($group['useringroup']) ?>">
|
||||||
<a href="#">
|
<a href="#">
|
||||||
<span><?php p($group['name']); ?></span>
|
<span><?php p($group['name']); ?></span>
|
||||||
<img class="svg action rename" src="<?php p(image_path('core', 'actions/rename.svg'))?>"
|
<img class="svg action rename" src="<?php p(image_path('core', 'actions/rename.svg'))?>"
|
||||||
original-title="<?php p($l->t('Edit'))?>" alt="<?php p($l->t("change group name"))?>" title="<?php p($l->t("change group name"))?>" />
|
original-title="<?php p($l->t('Edit'))?>" alt="<?php p($l->t("change group name"))?>" title="<?php p($l->t("change group name"))?>" />
|
||||||
</a>
|
</a>
|
||||||
<span class="utils">
|
<span class="utils">
|
||||||
<span class="usercount"><?php if(count($group['useringroup']) > 0) { p(count($group['useringroup'])); } ?></span>
|
<span class="usercount"><?php if($group['useringroup'] > 0) { p($group['useringroup']); } ?></span>
|
||||||
<a href="#" class="action delete" original-title="<?php p($l->t('Delete'))?>">
|
<a href="#" class="action delete" original-title="<?php p($l->t('Delete'))?>">
|
||||||
<img src="<?php print_unescaped(image_path('core', 'actions/delete.svg')) ?>" class="svg" />
|
<img src="<?php print_unescaped(image_path('core', 'actions/delete.svg')) ?>" class="svg" />
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -22,6 +22,7 @@ $users = array();
|
||||||
$groups = array();
|
$groups = array();
|
||||||
$adminGroup = array();
|
$adminGroup = array();
|
||||||
$userManager = \OC_User::getManager();
|
$userManager = \OC_User::getManager();
|
||||||
|
$groupManager = \OC_Group::getManager();
|
||||||
|
|
||||||
if (isset($_GET['offset'])) {
|
if (isset($_GET['offset'])) {
|
||||||
$offset = $_GET['offset'];
|
$offset = $_GET['offset'];
|
||||||
|
@ -89,14 +90,18 @@ $sortGroupsKeys = array();
|
||||||
$sortAdminGroupsIndex = 0;
|
$sortAdminGroupsIndex = 0;
|
||||||
$sortAdminGroupsKeys = array();
|
$sortAdminGroupsKeys = array();
|
||||||
foreach( $accessiblegroups as $gid ) {
|
foreach( $accessiblegroups as $gid ) {
|
||||||
$usersInGroup = OC_Group::usersInGroup($gid, '', $limit, $offset);
|
$group = $groupManager->get($gid);
|
||||||
|
if(!$group) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$usersInGroup = $group->count();
|
||||||
if (!OC_User::isAdminUser($gid)) {
|
if (!OC_User::isAdminUser($gid)) {
|
||||||
$groups[] = array(
|
$groups[] = array(
|
||||||
'id' => str_replace(' ','', $gid ),
|
'id' => str_replace(' ','', $gid ),
|
||||||
'name' => $gid,
|
'name' => $gid,
|
||||||
'useringroup' => $usersInGroup,
|
'useringroup' => $usersInGroup,
|
||||||
);
|
);
|
||||||
$sortGroupsKeys[$sortGroupsIndex] = count($usersInGroup);
|
$sortGroupsKeys[$sortGroupsIndex] = $usersInGroup;
|
||||||
$sortGroupsIndex++;
|
$sortGroupsIndex++;
|
||||||
} else {
|
} else {
|
||||||
$adminGroup[] = array(
|
$adminGroup[] = array(
|
||||||
|
@ -104,7 +109,7 @@ foreach( $accessiblegroups as $gid ) {
|
||||||
'name' => $gid,
|
'name' => $gid,
|
||||||
'useringroup' => $usersInGroup
|
'useringroup' => $usersInGroup
|
||||||
);
|
);
|
||||||
$sortAdminGroupsKeys[$sortAdminGroupsIndex] = count($usersInGroup);
|
$sortAdminGroupsKeys[$sortAdminGroupsIndex] = $usersInGroup;
|
||||||
$sortAdminGroupsIndex++;
|
$sortAdminGroupsIndex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue