Skip to content

Commit

Permalink
allow admin to enable medial search on group and user
Browse files Browse the repository at this point in the history
  • Loading branch information
karakayasemi committed Mar 8, 2019
1 parent 03e6987 commit 7a58236
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 7 deletions.
7 changes: 7 additions & 0 deletions config/config.sample.php
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,13 @@
*/
'accounts.enable_medial_search' => true,

/**
* Allow medial search on group properties like gid and other search terms.
* Allows finding 'test' when searching for 'es'.
* It is used in group database queries and may slow down group search.
*/
'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
Expand Down
43 changes: 39 additions & 4 deletions lib/private/Group/Database.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

/**
Expand All @@ -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();
}
}

/**
Expand Down Expand Up @@ -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(?)';
}

Expand Down Expand Up @@ -284,10 +303,18 @@ 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 !== '') {
$parameters[] = '%' . $this->dbConn->escapeLikeParameter($search) . '%';
$search = $this->dbConn->escapeLikeParameter($search);
$allowMedialSearches = $this->config->getSystemValue("accounts.enable_medial_search", true);
if ($allowMedialSearches) {
$parameters[] = '%' . $search . '%';
} else {
$parameters[] = $search . '%';
}
$searchLike = ' AND `uid` LIKE ?';
}

Expand All @@ -310,10 +337,18 @@ public function usersInGroup($gid, $search = '', $limit = null, $offset = null)
* @throws \OC\DatabaseException
*/
public function countUsersInGroup($gid, $search = '') {
$this->fixDI();

$parameters = [$gid];
$searchLike = '';
if ($search !== '') {
$parameters[] = '%' . $this->dbConn->escapeLikeParameter($search) . '%';
$search = $this->dbConn->escapeLikeParameter($search);
$allowMedialSearches = $this->config->getSystemValue("accounts.enable_medial_search", true);
if ($allowMedialSearches) {
$parameters[] = '%' . $search . '%';
} else {
$parameters[] = $search . '%';
}
$searchLike = ' AND `uid` LIKE ?';
}

Expand Down
17 changes: 14 additions & 3 deletions lib/private/User/Database.php
Original file line number Diff line number Diff line change
Expand Up @@ -184,8 +184,14 @@ public function getDisplayNames($search = '', $limit = null, $offset = null) {
$searchLike = '';
if ($search !== '') {
$search = \OC::$server->getDatabaseConnection()->escapeLikeParameter($search);
$parameters[] = '%' . $search . '%';
$parameters[] = '%' . $search . '%';
$allowMedialSearches = \OC::$server->getConfig()->getSystemValue("accounts.enable_medial_search", true);
if ($allowMedialSearches) {
$parameters[] = '%' . $search . '%';
$parameters[] = '%' . $search . '%';
} else {
$parameters[] = $search . '%';
$parameters[] = $search . '%';
}
$searchLike = ' WHERE LOWER(`displayname`) LIKE LOWER(?) OR '
. 'LOWER(`uid`) LIKE LOWER(?)';
}
Expand Down Expand Up @@ -273,7 +279,12 @@ public function getUsers($search = '', $limit = null, $offset = null) {
$searchLike = '';
if ($search !== '') {
$search = \OC::$server->getDatabaseConnection()->escapeLikeParameter($search);
$parameters[] = '%' . $search . '%';
$allowMedialSearches = \OC::$server->getConfig()->getSystemValue("accounts.enable_medial_search", true);
if ($allowMedialSearches) {
$parameters[] = '%' . $search . '%';
} else {
$parameters[] = $search . '%';
}
$searchLike = ' WHERE LOWER(`uid`) LIKE LOWER(?)';
}

Expand Down

0 comments on commit 7a58236

Please sign in to comment.