From ec28c54dbca77a3aad8d34a327c89458889f70ff Mon Sep 17 00:00:00 2001 From: Abijeet Date: Sat, 16 Dec 2017 17:18:05 +0530 Subject: [PATCH] Adds search by email function on the users screen. Fixes #7175. - Updated the query to fetch the users in users > everyone tab. - Updated the query to fetch the users in users > admin tab. - Tested to ensure that the disabled users are also being fetched. - Added test cases. Signed-off-by: Abijeet --- .htaccess | 4 ++-- lib/private/User/Database.php | 13 +++++++++++-- tests/lib/User/DatabaseTest.php | 25 +++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/.htaccess b/.htaccess index 7bf8759e38..277a9e38c6 100644 --- a/.htaccess +++ b/.htaccess @@ -23,7 +23,7 @@ Header set Cache-Control "max-age=15778463" - + # Let browsers cache WOFF files for a week Header set Cache-Control "max-age=604800" @@ -77,4 +77,4 @@ AddDefaultCharset utf-8 Options -Indexes ModPagespeed Off - + \ No newline at end of file diff --git a/lib/private/User/Database.php b/lib/private/User/Database.php index 471ff1f45a..2d96369de6 100644 --- a/lib/private/User/Database.php +++ b/lib/private/User/Database.php @@ -194,7 +194,10 @@ class Database extends Backend implements IUserBackend { if ($search !== '') { $parameters[] = '%' . \OC::$server->getDatabaseConnection()->escapeLikeParameter($search) . '%'; $parameters[] = '%' . \OC::$server->getDatabaseConnection()->escapeLikeParameter($search) . '%'; - $searchLike = ' WHERE LOWER(`displayname`) LIKE LOWER(?) OR ' + $parameters[] = '%' . \OC::$server->getDatabaseConnection()->escapeLikeParameter($search) . '%'; + $searchLike .= ' LEFT JOIN `*PREFIX*preferences` ON `userid` = `uid` AND `appid` = \'settings\' AND `configkey` = \'email\''; + $searchLike .= ' WHERE LOWER(`configvalue`) LIKE LOWER(?)'; + $searchLike .= ' OR LOWER(`displayname`) LIKE LOWER(?) OR ' . 'LOWER(`uid`) LIKE LOWER(?)'; } @@ -288,8 +291,14 @@ class Database extends Backend implements IUserBackend { $parameters = []; $searchLike = ''; if ($search !== '') { + // Email $parameters[] = '%' . \OC::$server->getDatabaseConnection()->escapeLikeParameter($search) . '%'; - $searchLike = ' WHERE LOWER(`uid`) LIKE LOWER(?)'; + $searchLike .= ' LEFT JOIN `*PREFIX*preferences` ON `userid` = `uid` AND `appid` = \'settings\' AND `configkey` = \'email\''; + $searchLike .= ' WHERE LOWER(`configvalue`) LIKE LOWER(?)'; + // UID + $parameters[] = '%' . \OC::$server->getDatabaseConnection()->escapeLikeParameter($search) . '%'; + $searchLike .= ' OR LOWER(`uid`) LIKE LOWER(?)'; + // Display name $parameters[] = '%' . \OC::$server->getDatabaseConnection()->escapeLikeParameter($search) . '%'; $searchLike .= ' OR LOWER(`displayname`) LIKE LOWER(?)'; } diff --git a/tests/lib/User/DatabaseTest.php b/tests/lib/User/DatabaseTest.php index 0e6900651c..a1e77dc128 100644 --- a/tests/lib/User/DatabaseTest.php +++ b/tests/lib/User/DatabaseTest.php @@ -24,6 +24,7 @@ namespace Test\User; use OC\HintException; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\GenericEvent; +use OC\User\User; /** * Class DatabaseTest @@ -113,4 +114,28 @@ class DatabaseTest extends Backend { $this->backend->createUser($user1, 'pw2'); $this->assertTrue($this->backend->userExists($user1)); } + + public function testSearch() { + parent::testSearch(); + + $user1 = $this->getUser(); + $this->backend->createUser($user1, 'pass1'); + + $user2 = $this->getUser(); + $this->backend->createUser($user2, 'pass1'); + + $user1Obj = new User($user1, $this->backend); + $user2Obj = new User($user2, $this->backend); + $emailAddr1 = "$user1@nextcloud.com"; + $emailAddr2 = "$user2@nextcloud.com"; + + $user1Obj->setEMailAddress($emailAddr1); + $user2Obj->setEMailAddress($emailAddr2); + + $result = $this->backend->getUsers('@nextcloud.com'); + $this->assertSame(2, count($result)); + + $result = $this->backend->getDisplayNames('@nextcloud.com'); + $this->assertSame(2, count($result)); + } }