Only sort by group name when LDAP is involved
This commit is contained in:
parent
fee62ac61c
commit
171f86ca2e
|
@ -97,6 +97,13 @@ class Manager extends PublicEmitter implements IGroupManager {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \OC_Group_Backend[] Get registered backends
|
||||||
|
*/
|
||||||
|
public function getBackends() {
|
||||||
|
return $this->backends;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param \OC_Group_Backend $backend
|
* @param \OC_Group_Backend $backend
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -40,6 +40,12 @@ namespace OCP;
|
||||||
* @since 8.0.0
|
* @since 8.0.0
|
||||||
*/
|
*/
|
||||||
interface IGroupManager {
|
interface IGroupManager {
|
||||||
|
/**
|
||||||
|
* @return \OC_Group_Backend[] Get registered backends
|
||||||
|
* @since 8.1.0
|
||||||
|
*/
|
||||||
|
public function getBackends();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param \OCP\UserInterface $backend
|
* @param \OCP\UserInterface $backend
|
||||||
* @since 8.0.0
|
* @since 8.0.0
|
||||||
|
|
|
@ -23,7 +23,8 @@
|
||||||
namespace OC\Settings\Controller;
|
namespace OC\Settings\Controller;
|
||||||
|
|
||||||
use OC\AppFramework\Http;
|
use OC\AppFramework\Http;
|
||||||
use \OCP\AppFramework\Controller;
|
use OC\Group\MetaData;
|
||||||
|
use OCP\AppFramework\Controller;
|
||||||
use OCP\AppFramework\Http\DataResponse;
|
use OCP\AppFramework\Http\DataResponse;
|
||||||
use OCP\IGroupManager;
|
use OCP\IGroupManager;
|
||||||
use OCP\IL10N;
|
use OCP\IL10N;
|
||||||
|
@ -69,14 +70,15 @@ class GroupsController extends Controller {
|
||||||
*
|
*
|
||||||
* @param string $pattern
|
* @param string $pattern
|
||||||
* @param bool $filterGroups
|
* @param bool $filterGroups
|
||||||
|
* @param int $sortGroups
|
||||||
* @return DataResponse
|
* @return DataResponse
|
||||||
*/
|
*/
|
||||||
public function index($pattern = '', $filterGroups = false) {
|
public function index($pattern = '', $filterGroups = false, $sortGroups = MetaData::SORT_USERCOUNT) {
|
||||||
$groupPattern = $filterGroups ? $pattern : '';
|
$groupPattern = $filterGroups ? $pattern : '';
|
||||||
|
|
||||||
$groupsInfo = new \OC\Group\MetaData($this->userSession->getUser()->getUID(),
|
$groupsInfo = new MetaData($this->userSession->getUser()->getUID(),
|
||||||
$this->isAdmin, $this->groupManager);
|
$this->isAdmin, $this->groupManager);
|
||||||
$groupsInfo->setSorting($groupsInfo::SORT_GROUPNAME);
|
$groupsInfo->setSorting($sortGroups);
|
||||||
list($adminGroups, $groups) = $groupsInfo->get($groupPattern, $pattern);
|
list($adminGroups, $groups) = $groupsInfo->get($groupPattern, $pattern);
|
||||||
|
|
||||||
return new DataResponse(
|
return new DataResponse(
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
* See the COPYING-README file.
|
* See the COPYING-README file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var $userGroupList;
|
var $userGroupList,
|
||||||
|
$sortGroupBy;
|
||||||
|
|
||||||
var GroupList;
|
var GroupList;
|
||||||
GroupList = {
|
GroupList = {
|
||||||
|
@ -27,6 +28,11 @@ GroupList = {
|
||||||
},
|
},
|
||||||
|
|
||||||
setUserCount: function (groupLiElement, usercount) {
|
setUserCount: function (groupLiElement, usercount) {
|
||||||
|
if ($sortGroupBy !== 1) {
|
||||||
|
// If we don't sort by group count we dont display them either
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var $groupLiElement = $(groupLiElement);
|
var $groupLiElement = $(groupLiElement);
|
||||||
if (usercount === undefined || usercount === 0 || usercount < 0) {
|
if (usercount === undefined || usercount === 0 || usercount < 0) {
|
||||||
usercount = '';
|
usercount = '';
|
||||||
|
@ -77,6 +83,19 @@ GroupList = {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($sortGroupBy === 1) {
|
||||||
|
// Sort by user count first
|
||||||
|
var $usersGroupA = $(a).data('usercount'),
|
||||||
|
$usersGroupB = $(b).data('usercount');
|
||||||
|
if ($usersGroupA > 0 && $usersGroupA > $usersGroupB) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if ($usersGroupB > 0 && $usersGroupB > $usersGroupA) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback or sort by group name
|
||||||
return UserList.alphanum(
|
return UserList.alphanum(
|
||||||
$(a).find('a span').text(),
|
$(a).find('a span').text(),
|
||||||
$(b).find('a span').text()
|
$(b).find('a span').text()
|
||||||
|
@ -127,7 +146,8 @@ GroupList = {
|
||||||
OC.generateUrl('/settings/users/groups'),
|
OC.generateUrl('/settings/users/groups'),
|
||||||
{
|
{
|
||||||
pattern: filter.getPattern(),
|
pattern: filter.getPattern(),
|
||||||
filterGroups: filter.filterGroups ? 1 : 0
|
filterGroups: filter.filterGroups ? 1 : 0,
|
||||||
|
sortGroups: $sortGroupBy
|
||||||
},
|
},
|
||||||
function (result) {
|
function (result) {
|
||||||
|
|
||||||
|
@ -285,8 +305,11 @@ GroupList = {
|
||||||
$(document).ready( function () {
|
$(document).ready( function () {
|
||||||
$userGroupList = $('#usergrouplist');
|
$userGroupList = $('#usergrouplist');
|
||||||
GroupList.initDeleteHandling();
|
GroupList.initDeleteHandling();
|
||||||
// TODO: disabled due to performance issues
|
$sortGroupBy = $userGroupList.data('sort-groups');
|
||||||
// GroupList.getEveryoneCount();
|
if ($sortGroupBy === 1) {
|
||||||
|
// Disabled due to performance issues, when we don't need it for sorting
|
||||||
|
GroupList.getEveryoneCount();
|
||||||
|
}
|
||||||
|
|
||||||
// Display or hide of Create Group List Element
|
// Display or hide of Create Group List Element
|
||||||
$('#newgroup-form').hide();
|
$('#newgroup-form').hide();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<ul id="usergrouplist">
|
<ul id="usergrouplist" data-sort-groups="<?php p($_['sortGroups']); ?>">
|
||||||
<!-- Add new group -->
|
<!-- Add new group -->
|
||||||
<li id="newgroup-init">
|
<li id="newgroup-init">
|
||||||
<a href="#">
|
<a href="#">
|
||||||
|
|
|
@ -37,12 +37,25 @@ OC_App::setActiveNavigationEntry( 'core_users' );
|
||||||
$userManager = \OC_User::getManager();
|
$userManager = \OC_User::getManager();
|
||||||
$groupManager = \OC_Group::getManager();
|
$groupManager = \OC_Group::getManager();
|
||||||
|
|
||||||
|
// Set the sort option: SORT_USERCOUNT or SORT_GROUPNAME
|
||||||
|
$sortGroupsBy = \OC\Group\MetaData::SORT_USERCOUNT;
|
||||||
|
|
||||||
|
if (class_exists('\OCA\user_ldap\GROUP_LDAP')) {
|
||||||
|
$backends = $groupManager->getBackends();
|
||||||
|
foreach ($backends as $backend) {
|
||||||
|
if ($backend instanceof \OCA\user_ldap\GROUP_LDAP) {
|
||||||
|
// LDAP user count can be slow, so we sort by gorup name here
|
||||||
|
$sortGroupsBy = \OC\Group\MetaData::SORT_GROUPNAME;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$config = \OC::$server->getConfig();
|
$config = \OC::$server->getConfig();
|
||||||
|
|
||||||
$isAdmin = OC_User::isAdminUser(OC_User::getUser());
|
$isAdmin = OC_User::isAdminUser(OC_User::getUser());
|
||||||
|
|
||||||
$groupsInfo = new \OC\Group\MetaData(OC_User::getUser(), $isAdmin, $groupManager);
|
$groupsInfo = new \OC\Group\MetaData(OC_User::getUser(), $isAdmin, $groupManager);
|
||||||
$groupsInfo->setSorting($groupsInfo::SORT_GROUPNAME);
|
$groupsInfo->setSorting($sortGroupsBy);
|
||||||
list($adminGroup, $groups) = $groupsInfo->get();
|
list($adminGroup, $groups) = $groupsInfo->get();
|
||||||
|
|
||||||
$recoveryAdminEnabled = OC_App::isEnabled('encryption') &&
|
$recoveryAdminEnabled = OC_App::isEnabled('encryption') &&
|
||||||
|
@ -75,6 +88,7 @@ $defaultQuotaIsUserDefined=array_search($defaultQuota, $quotaPreset)===false
|
||||||
|
|
||||||
$tmpl = new OC_Template("settings", "users/main", "user");
|
$tmpl = new OC_Template("settings", "users/main", "user");
|
||||||
$tmpl->assign('groups', $groups);
|
$tmpl->assign('groups', $groups);
|
||||||
|
$tmpl->assign('sortGroups', $sortGroupsBy);
|
||||||
$tmpl->assign('adminGroup', $adminGroup);
|
$tmpl->assign('adminGroup', $adminGroup);
|
||||||
$tmpl->assign('isAdmin', (int)$isAdmin);
|
$tmpl->assign('isAdmin', (int)$isAdmin);
|
||||||
$tmpl->assign('subadmins', $subadmins);
|
$tmpl->assign('subadmins', $subadmins);
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
namespace OC\Settings\Controller;
|
namespace OC\Settings\Controller;
|
||||||
|
|
||||||
use OC\Group\Group;
|
use OC\Group\Group;
|
||||||
|
use OC\Group\MetaData;
|
||||||
use \OC\Settings\Application;
|
use \OC\Settings\Application;
|
||||||
use OCP\AppFramework\Http;
|
use OCP\AppFramework\Http;
|
||||||
use OCP\AppFramework\Http\DataResponse;
|
use OCP\AppFramework\Http\DataResponse;
|
||||||
|
@ -50,7 +51,7 @@ class GroupsControllerTest extends \Test\TestCase {
|
||||||
* TODO: Since GroupManager uses the static OC_Subadmin class it can't be mocked
|
* TODO: Since GroupManager uses the static OC_Subadmin class it can't be mocked
|
||||||
* to test for subadmins. Thus the test always assumes you have admin permissions...
|
* to test for subadmins. Thus the test always assumes you have admin permissions...
|
||||||
*/
|
*/
|
||||||
public function testIndex() {
|
public function testIndexSortByName() {
|
||||||
$firstGroup = $this->getMockBuilder('\OC\Group\Group')
|
$firstGroup = $this->getMockBuilder('\OC\Group\Group')
|
||||||
->disableOriginalConstructor()->getMock();
|
->disableOriginalConstructor()->getMock();
|
||||||
$firstGroup
|
$firstGroup
|
||||||
|
@ -135,6 +136,99 @@ class GroupsControllerTest extends \Test\TestCase {
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
$response = $this->groupsController->index('', false, MetaData::SORT_GROUPNAME);
|
||||||
|
$this->assertEquals($expectedResponse, $response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Since GroupManager uses the static OC_Subadmin class it can't be mocked
|
||||||
|
* to test for subadmins. Thus the test always assumes you have admin permissions...
|
||||||
|
*/
|
||||||
|
public function testIndexSortbyCount() {
|
||||||
|
$firstGroup = $this->getMockBuilder('\OC\Group\Group')
|
||||||
|
->disableOriginalConstructor()->getMock();
|
||||||
|
$firstGroup
|
||||||
|
->method('getGID')
|
||||||
|
->will($this->returnValue('firstGroup'));
|
||||||
|
$firstGroup
|
||||||
|
->method('count')
|
||||||
|
->will($this->returnValue(12));
|
||||||
|
$secondGroup = $this->getMockBuilder('\OC\Group\Group')
|
||||||
|
->disableOriginalConstructor()->getMock();
|
||||||
|
$secondGroup
|
||||||
|
->method('getGID')
|
||||||
|
->will($this->returnValue('secondGroup'));
|
||||||
|
$secondGroup
|
||||||
|
->method('count')
|
||||||
|
->will($this->returnValue(25));
|
||||||
|
$thirdGroup = $this->getMockBuilder('\OC\Group\Group')
|
||||||
|
->disableOriginalConstructor()->getMock();
|
||||||
|
$thirdGroup
|
||||||
|
->method('getGID')
|
||||||
|
->will($this->returnValue('thirdGroup'));
|
||||||
|
$thirdGroup
|
||||||
|
->method('count')
|
||||||
|
->will($this->returnValue(14));
|
||||||
|
$fourthGroup = $this->getMockBuilder('\OC\Group\Group')
|
||||||
|
->disableOriginalConstructor()->getMock();
|
||||||
|
$fourthGroup
|
||||||
|
->method('getGID')
|
||||||
|
->will($this->returnValue('admin'));
|
||||||
|
$fourthGroup
|
||||||
|
->method('count')
|
||||||
|
->will($this->returnValue(18));
|
||||||
|
/** @var \OC\Group\Group[] $groups */
|
||||||
|
$groups = array();
|
||||||
|
$groups[] = $firstGroup;
|
||||||
|
$groups[] = $secondGroup;
|
||||||
|
$groups[] = $thirdGroup;
|
||||||
|
$groups[] = $fourthGroup;
|
||||||
|
|
||||||
|
$user = $this->getMockBuilder('\OC\User\User')
|
||||||
|
->disableOriginalConstructor()->getMock();
|
||||||
|
$this->container['UserSession']
|
||||||
|
->expects($this->once())
|
||||||
|
->method('getUser')
|
||||||
|
->will($this->returnValue($user));
|
||||||
|
$user
|
||||||
|
->expects($this->once())
|
||||||
|
->method('getUID')
|
||||||
|
->will($this->returnValue('MyAdminUser'));
|
||||||
|
$this->container['GroupManager']
|
||||||
|
->method('search')
|
||||||
|
->will($this->returnValue($groups));
|
||||||
|
|
||||||
|
$expectedResponse = new DataResponse(
|
||||||
|
array(
|
||||||
|
'data' => array(
|
||||||
|
'adminGroups' => array(
|
||||||
|
0 => array(
|
||||||
|
'id' => 'admin',
|
||||||
|
'name' => 'admin',
|
||||||
|
'usercount' => 18,
|
||||||
|
)
|
||||||
|
),
|
||||||
|
'groups' =>
|
||||||
|
array(
|
||||||
|
0 => array(
|
||||||
|
'id' => 'secondGroup',
|
||||||
|
'name' => 'secondGroup',
|
||||||
|
'usercount' => 25,
|
||||||
|
),
|
||||||
|
1 => array(
|
||||||
|
'id' => 'thirdGroup',
|
||||||
|
'name' => 'thirdGroup',
|
||||||
|
'usercount' => 14,
|
||||||
|
),
|
||||||
|
2 => array(
|
||||||
|
'id' => 'firstGroup',
|
||||||
|
'name' => 'firstGroup',
|
||||||
|
'usercount' => 12,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
$response = $this->groupsController->index();
|
$response = $this->groupsController->index();
|
||||||
$this->assertEquals($expectedResponse, $response);
|
$this->assertEquals($expectedResponse, $response);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue