LDAP: let getUsers make use of paged search
This commit is contained in:
parent
84130b885f
commit
1313cad1b9
|
@ -104,24 +104,38 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface {
|
||||||
* Get a list of all users.
|
* Get a list of all users.
|
||||||
*/
|
*/
|
||||||
public function getUsers($search = '', $limit = 10, $offset = 0) {
|
public function getUsers($search = '', $limit = 10, $offset = 0) {
|
||||||
$ldap_users = $this->connection->getFromCache('getUsers');
|
$cachekey = 'getUsers-'.$search.'-'.$limit.'-'.$offset;
|
||||||
if(is_null($ldap_users)) {
|
|
||||||
$ldap_users = $this->fetchListOfUsers($this->connection->ldapUserFilter, array($this->connection->ldapUserDisplayName, 'dn'));
|
//check if users are cached, if so return
|
||||||
$ldap_users = $this->ownCloudUserNames($ldap_users);
|
$ldap_users = $this->connection->getFromCache($cachekey);
|
||||||
$this->connection->writeToCache('getUsers', $ldap_users);
|
if(!is_null($ldap_users)) {
|
||||||
}
|
return $ldap_users;
|
||||||
$this->userSearch = $search;
|
|
||||||
if(!empty($this->userSearch)) {
|
|
||||||
$ldap_users = array_filter($ldap_users, array($this, 'userMatchesFilter'));
|
|
||||||
}
|
|
||||||
if($limit == -1) {
|
|
||||||
$limit = null;
|
|
||||||
}
|
|
||||||
return array_slice($ldap_users, $offset, $limit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function userMatchesFilter($user) {
|
//prepare search filter
|
||||||
return (strripos($user, $this->userSearch) !== false);
|
$search = empty($search) ? '*' : '*'.$search.'*';
|
||||||
|
$filter = $this->combineFilterWithAnd(array(
|
||||||
|
$this->connection->ldapUserFilter,
|
||||||
|
$this->connection->ldapGroupDisplayName.'='.$search
|
||||||
|
));
|
||||||
|
|
||||||
|
\OCP\Util::writeLog('user_ldap', 'getUsers: Get users filter '.$filter, \OCP\Util::DEBUG);
|
||||||
|
//do the search and translate results to owncloud names
|
||||||
|
$ldap_users = $this->fetchListOfUsers($filter, array($this->connection->ldapUserDisplayName, 'dn'), $limit, $offset);
|
||||||
|
$ldap_users = $this->ownCloudUserNames($ldap_users);
|
||||||
|
|
||||||
|
if(!$this->getPagedSearchResultState()) {
|
||||||
|
\OCP\Util::writeLog('user_ldap', 'getUsers: We got old-style results', \OCP\Util::DEBUG);
|
||||||
|
//if not supported, a 'normal' search has run automatically, we just need to get our slice of the cake. And we cache the general search, too
|
||||||
|
$this->connection->writeToCache('getUsers-'.$search, $ldap_users);
|
||||||
|
$ldap_users = array_slice($ldap_users, $offset, $limit);
|
||||||
|
} else {
|
||||||
|
//debug message only
|
||||||
|
\OCP\Util::writeLog('user_ldap', 'getUsers: We got paged results', \OCP\Util::DEBUG);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->connection->writeToCache($cachekey, $ldap_users);
|
||||||
|
return $ldap_users;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue