Преглед изворни кода

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 <abijeetpatro@gmail.com>
Abijeet пре 6 година
родитељ
комит
ec28c54dbc
3 измењених фајлова са 38 додато и 4 уклоњено
  1. 2 2
      .htaccess
  2. 11 2
      lib/private/User/Database.php
  3. 25 0
      tests/lib/User/DatabaseTest.php

+ 2 - 2
.htaccess

@@ -23,7 +23,7 @@
   <FilesMatch "\.(css|js|svg|gif)$">
     Header set Cache-Control "max-age=15778463"
   </FilesMatch>
-  
+
   # Let browsers cache WOFF files for a week
   <FilesMatch "\.woff$">
     Header set Cache-Control "max-age=604800"
@@ -77,4 +77,4 @@ AddDefaultCharset utf-8
 Options -Indexes
 <IfModule pagespeed_module>
   ModPagespeed Off
-</IfModule>
+</IfModule>

+ 11 - 2
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 .= ' 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 = ' WHERE LOWER(`uid`) LIKE LOWER(?)';
+			$searchLike .= ' OR LOWER(`uid`) LIKE LOWER(?)';
+			// Display name
 			$parameters[] = '%' . \OC::$server->getDatabaseConnection()->escapeLikeParameter($search) . '%';
 			$searchLike .= ' OR LOWER(`displayname`) LIKE LOWER(?)';
 		}

+ 25 - 0
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));
+	}
 }