diff options
Diffstat (limited to 'lib/private/group')
-rw-r--r-- | lib/private/group/metadata.php | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/lib/private/group/metadata.php b/lib/private/group/metadata.php index 21a742a3288..66eb032d4bf 100644 --- a/lib/private/group/metadata.php +++ b/lib/private/group/metadata.php @@ -27,7 +27,8 @@ namespace OC\Group; class MetaData { const SORT_NONE = 0; - const SORT_USERCOUNT = 1; + const SORT_USERCOUNT = 1; // May have performance issues on LDAP backends + const SORT_GROUPNAME = 2; /** * @var string $user @@ -121,15 +122,19 @@ class MetaData { } /** - * sets the sort mode, currently 0 (none) and 1 (user entries, - * descending) are supported - * @param int $sortMode (SORT_NONE, SORT_USERCOUNT) + * sets the sort mode, see SORT_* constants for supported modes + * + * @param int $sortMode */ public function setSorting($sortMode) { - if($sortMode >= 0 && $sortMode <= 1) { - $this->sorting = $sortMode; - } else { - $this->sorting = 0; + switch ($sortMode) { + case self::SORT_USERCOUNT: + case self::SORT_GROUPNAME: + $this->sorting = $sortMode; + break; + + default: + $this->sorting = self::SORT_NONE; } } @@ -139,27 +144,29 @@ class MetaData { * @param array $sortKeys the sort key array, by reference * @param int $sortIndex the sort key index, by reference * @param array $data the group's meta data as returned by generateGroupMetaData() - * @return null */ private function addEntry(&$entries, &$sortKeys, &$sortIndex, $data) { $entries[] = $data; - if($this->sorting === 1) { + if ($this->sorting === self::SORT_USERCOUNT) { $sortKeys[$sortIndex] = $data['usercount']; $sortIndex++; + } else if ($this->sorting === self::SORT_GROUPNAME) { + $sortKeys[$sortIndex] = $data['name']; + $sortIndex++; } } /** * creates an array containing the group meta data - * @param \OC\Group\Group $group + * @param \OCP\IGroup $group * @param string $userSearch * @return array with the keys 'id', 'name' and 'usercount' */ - private function generateGroupMetaData(\OC\Group\Group $group, $userSearch) { + private function generateGroupMetaData(\OCP\IGroup $group, $userSearch) { return array( 'id' => $group->getGID(), 'name' => $group->getGID(), - 'usercount' => $group->count($userSearch) + 'usercount' => $this->sorting === self::SORT_USERCOUNT ? $group->count($userSearch) : 0, ); } @@ -170,15 +177,17 @@ class MetaData { * @param return null */ private function sort(&$entries, $sortKeys) { - if($this->sorting > 0) { + if ($this->sorting === self::SORT_USERCOUNT) { array_multisort($sortKeys, SORT_DESC, $entries); + } else if ($this->sorting === self::SORT_GROUPNAME) { + array_multisort($sortKeys, SORT_ASC, $entries); } } /** * returns the available groups * @param string $search a search string - * @return \OC\Group\Group[] + * @return \OCP\IGroup[] */ private function getGroups($search = '') { if($this->isAdmin) { |