diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2020-07-30 12:50:04 +0200 |
---|---|---|
committer | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2020-07-31 12:42:17 +0200 |
commit | 7c56283c3ccb8f6d6ca6eeefd44a3db15d134da2 (patch) | |
tree | 8c54fc760c509f26ddd67d265d115387cd20ae04 /lib | |
parent | a32e6a795868f4d26983b26502d2588b3e6fd80e (diff) | |
download | nextcloud-server-7c56283c3ccb8f6d6ca6eeefd44a3db15d134da2.tar.gz nextcloud-server-7c56283c3ccb8f6d6ca6eeefd44a3db15d134da2.zip |
contactsmanager shall limit number of results early
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Contacts/ContactsMenu/ContactsStore.php | 24 | ||||
-rw-r--r-- | lib/private/Contacts/ContactsMenu/Manager.php | 2 | ||||
-rw-r--r-- | lib/public/Contacts/ContactsMenu/IContactsStore.php | 6 |
3 files changed, 23 insertions, 9 deletions
diff --git a/lib/private/Contacts/ContactsMenu/ContactsStore.php b/lib/private/Contacts/ContactsMenu/ContactsStore.php index b0bd99b844e..81c4f5d6baf 100644 --- a/lib/private/Contacts/ContactsMenu/ContactsStore.php +++ b/lib/private/Contacts/ContactsMenu/ContactsStore.php @@ -73,11 +73,23 @@ class ContactsStore implements IContactsStore { * @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); @@ -122,7 +134,7 @@ class ContactsStore implements IContactsStore { 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 diff --git a/lib/private/Contacts/ContactsMenu/Manager.php b/lib/private/Contacts/ContactsMenu/Manager.php index 293f1366b05..c3d4e74e433 100644 --- a/lib/private/Contacts/ContactsMenu/Manager.php +++ b/lib/private/Contacts/ContactsMenu/Manager.php @@ -66,7 +66,7 @@ class Manager { $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); diff --git a/lib/public/Contacts/ContactsMenu/IContactsStore.php b/lib/public/Contacts/ContactsMenu/IContactsStore.php index c64b95fb85d..fceb507f0cf 100644 --- a/lib/public/Contacts/ContactsMenu/IContactsStore.php +++ b/lib/public/Contacts/ContactsMenu/IContactsStore.php @@ -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) |