Skip to content

Commit

Permalink
Merge pull request #22091 from nextcloud/backport/22057/stable19
Browse files Browse the repository at this point in the history
[stable19] contactsmanager shall limit number of results early
  • Loading branch information
blizzz committed Aug 3, 2020
2 parents 9d56c51 + dc98aaa commit 7a1bd4e
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 9 deletions.
24 changes: 18 additions & 6 deletions lib/private/Contacts/ContactsMenu/ContactsStore.php
Expand Up @@ -73,11 +73,23 @@ public function __construct(IManager $contactsManager,
* @param string|null $filter
* @return IEntry[]
*/
public function getContacts(IUser $user, $filter) {
$allContacts = $this->contactsManager->search($filter ?: '', [
'FN',
'EMAIL'
]);
public function getContacts(IUser $user, $filter, ?int $limit = null, ?int $offset = null) {
$options = [];
if ($limit !== null) {
$options['limit'] = $limit;
}
if ($offset !== null) {
$options['offset'] = $offset;
}

$allContacts = $this->contactsManager->search(
$filter ?: '',
[
'FN',
'EMAIL'
],
$options
);

$entries = array_map(function (array $contact) {
return $this->contactArrayToEntry($contact);
Expand Down Expand Up @@ -122,7 +134,7 @@ private function filterContacts(IUser $self,
if ($excludedGroups) {
$excludedGroups = $this->config->getAppValue('core', 'shareapi_exclude_groups_list', '');
$decodedExcludeGroups = json_decode($excludedGroups, true);
$excludeGroupsList = ($decodedExcludeGroups !== null) ? $decodedExcludeGroups : [];
$excludeGroupsList = ($decodedExcludeGroups !== null) ? $decodedExcludeGroups : [];

if (count(array_intersect($excludeGroupsList, $selfGroups)) !== 0) {
// a group of the current user is excluded -> filter all local users
Expand Down
2 changes: 1 addition & 1 deletion lib/private/Contacts/ContactsMenu/Manager.php
Expand Up @@ -66,7 +66,7 @@ public function getEntries(IUser $user, $filter) {
$minSearchStringLength = $this->config->getSystemValueInt('sharing.minSearchStringLength', 0);
$topEntries = [];
if (strlen($filter) >= $minSearchStringLength) {
$entries = $this->store->getContacts($user, $filter);
$entries = $this->store->getContacts($user, $filter, $maxAutocompleteResults);

$sortedEntries = $this->sortEntries($entries);
$topEntries = array_slice($sortedEntries, 0, $maxAutocompleteResults);
Expand Down
6 changes: 4 additions & 2 deletions lib/public/Contacts/ContactsMenu/IContactsStore.php
Expand Up @@ -33,11 +33,13 @@ interface IContactsStore {

/**
* @param IUser $user
* @param $filter
* @param string $filter
* @param int $limit added 19.0.2
* @param int $offset added 19.0.2
* @return IEntry[]
* @since 13.0.0
*/
public function getContacts(IUser $user, $filter);
public function getContacts(IUser $user, $filter, ?int $limit = null, ?int $offset = null);

/**
* @brief finds a contact by specifying the property to search on ($shareType) and the value ($shareWith)
Expand Down

0 comments on commit 7a1bd4e

Please sign in to comment.