From 171f86ca2e71918809930e823062d93c03833921 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 11 Jun 2015 17:57:00 +0200 Subject: [PATCH] Only sort by group name when LDAP is involved --- lib/private/group/manager.php | 7 ++ lib/public/igroupmanager.php | 6 ++ settings/controller/groupscontroller.php | 10 +- settings/js/users/groups.js | 31 +++++- settings/templates/users/part.grouplist.php | 2 +- settings/users.php | 16 +++- .../controller/groupscontrollertest.php | 96 ++++++++++++++++++- 7 files changed, 157 insertions(+), 11 deletions(-) diff --git a/lib/private/group/manager.php b/lib/private/group/manager.php index 12136a1bd2..6399f16f9c 100644 --- a/lib/private/group/manager.php +++ b/lib/private/group/manager.php @@ -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 */ diff --git a/lib/public/igroupmanager.php b/lib/public/igroupmanager.php index ffd459b09e..4e984e58d8 100644 --- a/lib/public/igroupmanager.php +++ b/lib/public/igroupmanager.php @@ -40,6 +40,12 @@ namespace OCP; * @since 8.0.0 */ interface IGroupManager { + /** + * @return \OC_Group_Backend[] Get registered backends + * @since 8.1.0 + */ + public function getBackends(); + /** * @param \OCP\UserInterface $backend * @since 8.0.0 diff --git a/settings/controller/groupscontroller.php b/settings/controller/groupscontroller.php index c3c0ea5ff2..6cb0cd3e00 100644 --- a/settings/controller/groupscontroller.php +++ b/settings/controller/groupscontroller.php @@ -23,7 +23,8 @@ namespace OC\Settings\Controller; use OC\AppFramework\Http; -use \OCP\AppFramework\Controller; +use OC\Group\MetaData; +use OCP\AppFramework\Controller; use OCP\AppFramework\Http\DataResponse; use OCP\IGroupManager; use OCP\IL10N; @@ -69,14 +70,15 @@ class GroupsController extends Controller { * * @param string $pattern * @param bool $filterGroups + * @param int $sortGroups * @return DataResponse */ - public function index($pattern = '', $filterGroups = false) { + public function index($pattern = '', $filterGroups = false, $sortGroups = MetaData::SORT_USERCOUNT) { $groupPattern = $filterGroups ? $pattern : ''; - $groupsInfo = new \OC\Group\MetaData($this->userSession->getUser()->getUID(), + $groupsInfo = new MetaData($this->userSession->getUser()->getUID(), $this->isAdmin, $this->groupManager); - $groupsInfo->setSorting($groupsInfo::SORT_GROUPNAME); + $groupsInfo->setSorting($sortGroups); list($adminGroups, $groups) = $groupsInfo->get($groupPattern, $pattern); return new DataResponse( diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js index d5e37ff8d6..d205e91550 100644 --- a/settings/js/users/groups.js +++ b/settings/js/users/groups.js @@ -5,7 +5,8 @@ * See the COPYING-README file. */ -var $userGroupList; +var $userGroupList, + $sortGroupBy; var GroupList; GroupList = { @@ -27,6 +28,11 @@ GroupList = { }, setUserCount: function (groupLiElement, usercount) { + if ($sortGroupBy !== 1) { + // If we don't sort by group count we dont display them either + return; + } + var $groupLiElement = $(groupLiElement); if (usercount === undefined || usercount === 0 || usercount < 0) { usercount = ''; @@ -77,6 +83,19 @@ GroupList = { 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( $(a).find('a span').text(), $(b).find('a span').text() @@ -127,7 +146,8 @@ GroupList = { OC.generateUrl('/settings/users/groups'), { pattern: filter.getPattern(), - filterGroups: filter.filterGroups ? 1 : 0 + filterGroups: filter.filterGroups ? 1 : 0, + sortGroups: $sortGroupBy }, function (result) { @@ -285,8 +305,11 @@ GroupList = { $(document).ready( function () { $userGroupList = $('#usergrouplist'); GroupList.initDeleteHandling(); - // TODO: disabled due to performance issues - // GroupList.getEveryoneCount(); + $sortGroupBy = $userGroupList.data('sort-groups'); + 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 $('#newgroup-form').hide(); diff --git a/settings/templates/users/part.grouplist.php b/settings/templates/users/part.grouplist.php index 5b516bc0e1..51638c7bcc 100644 --- a/settings/templates/users/part.grouplist.php +++ b/settings/templates/users/part.grouplist.php @@ -1,4 +1,4 @@ -