remove dead code
do not filter groups. but update the user count according to the filter improve phpdoc improve metadata runtime cache add metadata tests
This commit is contained in:
parent
9ee1c7ff71
commit
ab2c7e06a4
5 changed files with 137 additions and 43 deletions
|
@ -24,9 +24,9 @@ class MetaData {
|
||||||
protected $isAdmin;
|
protected $isAdmin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string[] $groups
|
* @var array $metaData
|
||||||
*/
|
*/
|
||||||
protected $groups = array();
|
protected $metaData = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var \OC\Group\Manager $groupManager
|
* @var \OC\Group\Manager $groupManager
|
||||||
|
@ -38,11 +38,6 @@ class MetaData {
|
||||||
*/
|
*/
|
||||||
protected $sorting = false;
|
protected $sorting = false;
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string $lastSearch
|
|
||||||
*/
|
|
||||||
protected $lastSearch;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string the uid of the current user
|
* @param string the uid of the current user
|
||||||
* @param bool whether the current users is an admin
|
* @param bool whether the current users is an admin
|
||||||
|
@ -63,14 +58,15 @@ class MetaData {
|
||||||
* the array is structured as follows:
|
* the array is structured as follows:
|
||||||
* [0] array containing meta data about admin groups
|
* [0] array containing meta data about admin groups
|
||||||
* [1] array containing meta data about unprivileged groups
|
* [1] array containing meta data about unprivileged groups
|
||||||
* @param string only effective when instance was created with isAdmin being
|
* @param string $groupSearch only effective when instance was created with
|
||||||
* true
|
* isAdmin being true
|
||||||
|
* @param string $userSearch the pattern users are search for
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function get($search = '') {
|
public function get($groupSearch = '', $userSearch = '') {
|
||||||
if($this->lastSearch !== $search) {
|
$key = $groupSearch . '::' . $userSearch;
|
||||||
$this->lastSearch = $search;
|
if(isset($this->metaData[$key])) {
|
||||||
$this->groups = array();
|
return $this->metaData[$key];
|
||||||
}
|
}
|
||||||
|
|
||||||
$adminGroups = array();
|
$adminGroups = array();
|
||||||
|
@ -80,8 +76,8 @@ class MetaData {
|
||||||
$sortAdminGroupsIndex = 0;
|
$sortAdminGroupsIndex = 0;
|
||||||
$sortAdminGroupsKeys = array();
|
$sortAdminGroupsKeys = array();
|
||||||
|
|
||||||
foreach($this->getGroups($search) as $group) {
|
foreach($this->getGroups($groupSearch) as $group) {
|
||||||
$groupMetaData = $this->generateGroupMetaData($group);
|
$groupMetaData = $this->generateGroupMetaData($group, $userSearch);
|
||||||
if (strtolower($group->getGID()) !== 'admin') {
|
if (strtolower($group->getGID()) !== 'admin') {
|
||||||
$this->addEntry(
|
$this->addEntry(
|
||||||
$groups,
|
$groups,
|
||||||
|
@ -104,7 +100,8 @@ class MetaData {
|
||||||
$this->sort($groups, $sortGroupsKeys);
|
$this->sort($groups, $sortGroupsKeys);
|
||||||
$this->sort($adminGroups, $sortAdminGroupsKeys);
|
$this->sort($adminGroups, $sortAdminGroupsKeys);
|
||||||
|
|
||||||
return array($adminGroups, $groups);
|
$this->metaData[$key] = array($adminGroups, $groups);
|
||||||
|
return $this->metaData[$key];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -138,14 +135,15 @@ class MetaData {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief creates an array containing the group meta data
|
* @brief creates an array containing the group meta data
|
||||||
* @param \OC\Group\Group
|
* @param \OC\Group\Group $group
|
||||||
|
* @param string $userSearch
|
||||||
* @return array with the keys 'id', 'name' and 'usercount'
|
* @return array with the keys 'id', 'name' and 'usercount'
|
||||||
*/
|
*/
|
||||||
private function generateGroupMetaData(\OC\Group\Group $group) {
|
private function generateGroupMetaData(\OC\Group\Group $group, $userSearch) {
|
||||||
return array(
|
return array(
|
||||||
'id' => str_replace(' ','', $group->getGID()),
|
'id' => $group->getGID(),
|
||||||
'name' => $group->getGID(),
|
'name' => $group->getGID(),
|
||||||
'usercount' => $group->count()
|
'usercount' => $group->count($userSearch)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,22 +165,10 @@ class MetaData {
|
||||||
* @return \OC\Group\Group[]
|
* @return \OC\Group\Group[]
|
||||||
*/
|
*/
|
||||||
private function getGroups($search = '') {
|
private function getGroups($search = '') {
|
||||||
if(count($this->groups) === 0) {
|
|
||||||
$this->fetchGroups($search);
|
|
||||||
}
|
|
||||||
return $this->groups;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief fetches the group using the group manager or the subAdmin API
|
|
||||||
* @param string a search string
|
|
||||||
* @return null
|
|
||||||
*/
|
|
||||||
private function fetchGroups($search = '') {
|
|
||||||
if($this->isAdmin) {
|
if($this->isAdmin) {
|
||||||
$this->groups = $this->groupManager->search($search);
|
return $this->groupManager->search($search);
|
||||||
} else {
|
} else {
|
||||||
$this->groups = \OC_SubAdmin::getSubAdminsGroups($this->user);
|
return \OC_SubAdmin::getSubAdminsGroups($this->user);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,12 @@ if (isset($_GET['pattern']) && !empty($_GET['pattern'])) {
|
||||||
} else {
|
} else {
|
||||||
$pattern = '';
|
$pattern = '';
|
||||||
}
|
}
|
||||||
|
if (isset($_GET['filterGroups']) && !empty($_GET['filterGroups'])) {
|
||||||
|
$filterGroups = intval($_GET['filterGroups']) === 1;
|
||||||
|
} else {
|
||||||
|
$filterGroups = false;
|
||||||
|
}
|
||||||
|
$groupPattern = $filterGroups ? $pattern : '';
|
||||||
$groups = array();
|
$groups = array();
|
||||||
$adminGroups = array();
|
$adminGroups = array();
|
||||||
$groupManager = \OC_Group::getManager();
|
$groupManager = \OC_Group::getManager();
|
||||||
|
@ -36,13 +42,7 @@ $isAdmin = OC_User::isAdminUser(OC_User::getUser());
|
||||||
//groups will be filtered out later
|
//groups will be filtered out later
|
||||||
$groupsInfo = new \OC\Group\MetaData(OC_User::getUser(), true, $groupManager);
|
$groupsInfo = new \OC\Group\MetaData(OC_User::getUser(), true, $groupManager);
|
||||||
$groupsInfo->setSorting($groupsInfo::SORT_USERCOUNT);
|
$groupsInfo->setSorting($groupsInfo::SORT_USERCOUNT);
|
||||||
list($adminGroups, $groups) = $groupsInfo->get($pattern);
|
list($adminGroups, $groups) = $groupsInfo->get($groupPattern, $pattern);
|
||||||
|
|
||||||
$accessibleGroups = $groupManager->search($pattern);
|
|
||||||
if(!$isAdmin) {
|
|
||||||
$subadminGroups = OC_SubAdmin::getSubAdminsGroups(OC_User::getUser());
|
|
||||||
$accessibleGroups = array_intersect($groups, $subadminGroups);
|
|
||||||
}
|
|
||||||
|
|
||||||
OC_JSON::success(
|
OC_JSON::success(
|
||||||
array('data' => array('adminGroups' => $adminGroups, 'groups' => $groups)));
|
array('data' => array('adminGroups' => $adminGroups, 'groups' => $groups)));
|
||||||
|
|
|
@ -14,6 +14,7 @@ function UserManagementFilter(filterInput, userList, groupList) {
|
||||||
this.filterInput = filterInput;
|
this.filterInput = filterInput;
|
||||||
this.userList = userList;
|
this.userList = userList;
|
||||||
this.groupList = groupList;
|
this.groupList = groupList;
|
||||||
|
this.filterGroups = false;
|
||||||
this.thread = undefined;
|
this.thread = undefined;
|
||||||
this.oldval = this.filterInput.val();
|
this.oldval = this.filterInput.val();
|
||||||
|
|
||||||
|
@ -55,7 +56,10 @@ UserManagementFilter.prototype.init = function() {
|
||||||
UserManagementFilter.prototype.run = _.debounce(function() {
|
UserManagementFilter.prototype.run = _.debounce(function() {
|
||||||
this.userList.empty();
|
this.userList.empty();
|
||||||
this.userList.update(GroupList.getCurrentGID());
|
this.userList.update(GroupList.getCurrentGID());
|
||||||
this.groupList.empty();
|
if(this.filterGroups) {
|
||||||
|
// user counts are being updated nevertheless
|
||||||
|
this.groupList.empty();
|
||||||
|
}
|
||||||
this.groupList.update();
|
this.groupList.update();
|
||||||
},
|
},
|
||||||
300
|
300
|
||||||
|
|
|
@ -114,7 +114,10 @@ GroupList = {
|
||||||
GroupList.updating = true;
|
GroupList.updating = true;
|
||||||
$.get(
|
$.get(
|
||||||
OC.generateUrl('/settings/ajax/grouplist'),
|
OC.generateUrl('/settings/ajax/grouplist'),
|
||||||
{pattern: filter.getPattern()},
|
{
|
||||||
|
pattern: filter.getPattern(),
|
||||||
|
filterGroups: filter.filterGroups ? 1 : 0
|
||||||
|
},
|
||||||
function (result) {
|
function (result) {
|
||||||
|
|
||||||
var lis = [];
|
var lis = [];
|
||||||
|
|
101
tests/lib/group/metadata.php
Normal file
101
tests/lib/group/metadata.php
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com>
|
||||||
|
* This file is licensed under the Affero General Public License version 3 or
|
||||||
|
* later.
|
||||||
|
* See the COPYING-README file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Test\Group;
|
||||||
|
|
||||||
|
class Test_MetaData extends \PHPUnit_Framework_TestCase {
|
||||||
|
private function getGroupManagerMock() {
|
||||||
|
return $this->getMockBuilder('\OC\Group\Manager')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getGroupMock() {
|
||||||
|
$group = $this->getMockBuilder('\OC\Group\Group')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$group->expects($this->exactly(9))
|
||||||
|
->method('getGID')
|
||||||
|
->will($this->onConsecutiveCalls(
|
||||||
|
'admin', 'admin', 'admin',
|
||||||
|
'g2', 'g2', 'g2',
|
||||||
|
'g3', 'g3', 'g3'));
|
||||||
|
|
||||||
|
$group->expects($this->exactly(3))
|
||||||
|
->method('count')
|
||||||
|
->with('')
|
||||||
|
->will($this->onConsecutiveCalls(2, 3, 5));
|
||||||
|
|
||||||
|
return $group;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function testGet() {
|
||||||
|
$groupManager = $this->getGroupManagerMock();
|
||||||
|
$groupMetaData = new \OC\Group\MetaData('foo', true, $groupManager);
|
||||||
|
$group = $this->getGroupMock();
|
||||||
|
$groups = array_fill(0, 3, $group);
|
||||||
|
|
||||||
|
$groupManager->expects($this->once())
|
||||||
|
->method('search')
|
||||||
|
->with('')
|
||||||
|
->will($this->returnValue($groups));
|
||||||
|
|
||||||
|
list($adminGroups, $ordinaryGroups) = $groupMetaData->get();
|
||||||
|
|
||||||
|
$this->assertSame(1, count($adminGroups));
|
||||||
|
$this->assertSame(2, count($ordinaryGroups));
|
||||||
|
|
||||||
|
$this->assertSame('g2', $ordinaryGroups[0]['name']);
|
||||||
|
$this->assertSame(3, $ordinaryGroups[0]['usercount']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetWithSorting() {
|
||||||
|
$groupManager = $this->getGroupManagerMock();
|
||||||
|
$groupMetaData = new \OC\Group\MetaData('foo', true, $groupManager);
|
||||||
|
$groupMetaData->setSorting($groupMetaData::SORT_USERCOUNT);
|
||||||
|
$group = $this->getGroupMock();
|
||||||
|
$groups = array_fill(0, 3, $group);
|
||||||
|
|
||||||
|
$groupManager->expects($this->once())
|
||||||
|
->method('search')
|
||||||
|
->with('')
|
||||||
|
->will($this->returnValue($groups));
|
||||||
|
|
||||||
|
list($adminGroups, $ordinaryGroups) = $groupMetaData->get();
|
||||||
|
|
||||||
|
$this->assertSame(1, count($adminGroups));
|
||||||
|
$this->assertSame(2, count($ordinaryGroups));
|
||||||
|
|
||||||
|
$this->assertSame('g3', $ordinaryGroups[0]['name']);
|
||||||
|
$this->assertSame(5, $ordinaryGroups[0]['usercount']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetWithCache() {
|
||||||
|
$groupManager = $this->getGroupManagerMock();
|
||||||
|
$groupMetaData = new \OC\Group\MetaData('foo', true, $groupManager);
|
||||||
|
$group = $this->getGroupMock();
|
||||||
|
$groups = array_fill(0, 3, $group);
|
||||||
|
|
||||||
|
$groupManager->expects($this->once())
|
||||||
|
->method('search')
|
||||||
|
->with('')
|
||||||
|
->will($this->returnValue($groups));
|
||||||
|
|
||||||
|
//two calls, if caching fails call counts for group and groupmanager
|
||||||
|
//are exceeded
|
||||||
|
$groupMetaData->get();
|
||||||
|
$groupMetaData->get();
|
||||||
|
}
|
||||||
|
|
||||||
|
//get() does not need to be tested with search parameters, because they are
|
||||||
|
//solely and only passed to GroupManager and Group.
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue