From 5822e1344e985f1196e55298bf1c8b05ac17b19e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Mon, 4 Nov 2019 17:06:21 +0100 Subject: [PATCH] Allow searching for users by displayname in the database group backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- lib/private/Group/Database.php | 22 ++++++++++++++-------- tests/lib/Group/DatabaseTest.php | 17 +++++++++++++++++ 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/lib/private/Group/Database.php b/lib/private/Group/Database.php index 7028b1fa81b9f..dc2bf0c7ad7b3 100644 --- a/lib/private/Group/Database.php +++ b/lib/private/Group/Database.php @@ -333,15 +333,21 @@ public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) { $this->fixDI(); $query = $this->dbConn->getQueryBuilder(); - $query->select('uid') - ->from('group_user') - ->where($query->expr()->eq('gid', $query->createNamedParameter($gid))) - ->orderBy('uid', 'ASC'); - + $query->select('g.uid') + ->from('group_user', 'g') + ->where($query->expr()->eq('g.gid', $query->createNamedParameter($gid))) + ->orderBy('g.uid', 'ASC'); if ($search !== '') { - $query->andWhere($query->expr()->like('uid', $query->createNamedParameter( - '%' . $this->dbConn->escapeLikeParameter($search) . '%' - ))); + $query + ->innerJoin('g', 'users', 'u', $query->expr()->eq('g.uid', 'u.uid')) + ->andWhere($query->expr()->orX( + $query->expr()->iLike('g.uid', $query->createNamedParameter( + '%' . $this->dbConn->escapeLikeParameter($search) . '%' + )), + $query->expr()->iLike('u.displayname', $query->createNamedParameter( + '%' . $this->dbConn->escapeLikeParameter($search) . '%' + )) + )); } if ($limit !== -1) { diff --git a/tests/lib/Group/DatabaseTest.php b/tests/lib/Group/DatabaseTest.php index 395a442c5e39c..f661c7164f8b5 100644 --- a/tests/lib/Group/DatabaseTest.php +++ b/tests/lib/Group/DatabaseTest.php @@ -25,14 +25,22 @@ namespace Test\Group; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; + /** * Class Database * * @group DB */ class DatabaseTest extends Backend { + private $groups = array(); + /** @var \PHPUnit\Framework\MockObject\MockObject */ + private $eventDispatcher; + + private $userBackend; + /** * get a new unique group name * test cases can override this in order to clean up created groups @@ -47,13 +55,22 @@ public function getGroupName($name = null) { protected function setUp() { parent::setUp(); + $this->eventDispatcher = $this->createMock(EventDispatcherInterface::class); + $this->backend = new \OC\Group\Database(); + $this->userBackend = new \OC\User\Database($this->eventDispatcher); + $this->userBackend->createUser('foobarbaz', '1234'); + $this->userBackend->createUser('bazbarfoo', '1234'); + $this->userBackend->createUser('notme', '1234'); } protected function tearDown() { foreach ($this->groups as $group) { $this->backend->deleteGroup($group); } + $this->userBackend->deleteUser('foobarbaz'); + $this->userBackend->deleteUser('bazbarfoo'); + $this->userBackend->deleteUser('notme'); parent::tearDown(); }