From 4acb5275f5c1960b87ff2d10726476de1f79da0c Mon Sep 17 00:00:00 2001 From: karakayasemi Date: Sat, 2 Mar 2019 13:34:38 -0800 Subject: [PATCH] allow admin to enable medial search on group and user --- config/config.sample.php | 7 +++++++ lib/private/Group/Database.php | 27 +++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/config/config.sample.php b/config/config.sample.php index f2f564dda19a..5bd8977e4f46 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -284,6 +284,13 @@ */ 'accounts.enable_medial_search' => true, +/** + * Allow medial search on the group id. Allows finding 'test' when searching for 'es'. + * This is only used in the DB group backend (local groups), and won't be used against LDAP + * Shibboleth or any other group backend. + */ +'groups.enable_medial_search' => true, + /** * Defines the minimum characters entered before a search returns results for * users or groups in the share autocomplete form. Lower values increase search diff --git a/lib/private/Group/Database.php b/lib/private/Group/Database.php index 5da2bc709542..af734bc95708 100644 --- a/lib/private/Group/Database.php +++ b/lib/private/Group/Database.php @@ -50,13 +50,21 @@ class Database extends \OC\Group\Backend { /** @var \OCP\IDBConnection */ private $dbConn; + /** @var \OCP\IConfig */ + private $config; + /** * \OC\Group\Database constructor. * * @param \OCP\IDBConnection|null $dbConn + * @param \OCP\IConfig|null $config */ - public function __construct(\OCP\IDBConnection $dbConn = null) { + public function __construct( + \OCP\IDBConnection $dbConn = null, + \OCP\IConfig $config = null + ) { $this->dbConn = $dbConn; + $this->config = $config; } /** @@ -66,6 +74,9 @@ private function fixDI() { if ($this->dbConn === null) { $this->dbConn = \OC::$server->getDatabaseConnection(); } + if ($this->config === null) { + $this->config = \OC::$server->getConfig(); + } } /** @@ -231,10 +242,18 @@ public function getUserGroups($uid) { * Returns a list with all groups */ public function getGroups($search = '', $limit = null, $offset = null) { + $this->fixDI(); + $parameters = []; $searchLike = ''; if ($search !== '') { - $parameters[] = '%' . $search . '%'; + $search = $this->dbConn->escapeLikeParameter($search); + $allowMedialSearches = $this->config->getSystemValue("groups.enable_medial_search", true); + if ($allowMedialSearches) { + $parameters[] = '%' . $search . '%'; + } else { + $parameters[] = $search . '%'; + } $searchLike = ' WHERE LOWER(`gid`) LIKE LOWER(?)'; } @@ -284,6 +303,8 @@ public function groupExists($gid) { * @return array an array of user ids */ public function usersInGroup($gid, $search = '', $limit = null, $offset = null) { + $this->fixDI(); + $parameters = [$gid]; $searchLike = ''; if ($search !== '') { @@ -310,6 +331,8 @@ public function usersInGroup($gid, $search = '', $limit = null, $offset = null) * @throws \OC\DatabaseException */ public function countUsersInGroup($gid, $search = '') { + $this->fixDI(); + $parameters = [$gid]; $searchLike = ''; if ($search !== '') {