From 2ac024e3b475758c5995ad5f3ec8eaecfc431952 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?I=C3=B1aki=20Linaza=20Arg=C3=BCeso?=
 <ilinaza@virtualwareco.com>
Date: Fri, 31 May 2024 15:54:40 +0200
Subject: [PATCH 1/4] feat(groups): add setting display name to group backend
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Iñaki Linaza Argüeso <ilinaza@virtualwareco.com>
---
 lib/GroupBackend.php | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/lib/GroupBackend.php b/lib/GroupBackend.php
index 46d08ad98..9c2d38af2 100644
--- a/lib/GroupBackend.php
+++ b/lib/GroupBackend.php
@@ -15,10 +15,11 @@
 use OCP\Group\Backend\IGetDisplayNameBackend;
 use OCP\Group\Backend\INamedBackend;
 use OCP\Group\Backend\IRemoveFromGroupBackend;
+use OCP\Group\Backend\ISetDisplayNameBackend;
 use OCP\IDBConnection;
 use Psr\Log\LoggerInterface;
 
-class GroupBackend extends ABackend implements IAddToGroupBackend, ICountUsersBackend, ICreateGroupBackend, IDeleteGroupBackend, IGetDisplayNameBackend, IRemoveFromGroupBackend, INamedBackend {
+class GroupBackend extends ABackend implements IAddToGroupBackend, ICountUsersBackend, ICreateGroupBackend, IDeleteGroupBackend, IGetDisplayNameBackend, IRemoveFromGroupBackend, ISetDisplayNameBackend, INamedBackend {
 
 	/** @var array */
 	private $groupCache = [];
@@ -292,4 +293,25 @@ public function getDisplayName(string $gid): string {
 
 		return $this->groupCache[$gid] ?? $gid;
 	}
+
+	public function setDisplayName(string $gid, string $displayName): bool {
+		if (!$this->groupExists($gid)) {
+			return false;
+		}
+
+		$displayName = trim($displayName);
+		if ($displayName === '') {
+			$displayName = $gid;
+		} 
+
+		$query = $this->dbc->getQueryBuilder();
+		$query->update(self::TABLE_GROUPS)
+			->set('displayname', $query->createNamedParameter($displayName))
+			->where($query->expr()->eq('gid', $query->createNamedParameter($gid)));
+		$query->execute();
+        
+        $this->groupCache[$gid] = $displayName;
+
+		return true;
+	}
 }

From 990837c35c506327978dea62b43229627bebcab5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?I=C3=B1aki=20Linaza=20Arg=C3=BCeso?=
 <ilinaza@virtualwareco.com>
Date: Fri, 31 May 2024 16:13:27 +0200
Subject: [PATCH 2/4] feat(groups): add setting display name to group backend
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Iñaki Linaza Argüeso <ilinaza@virtualwareco.com>
---
 lib/GroupBackend.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/GroupBackend.php b/lib/GroupBackend.php
index 9c2d38af2..0f42d0767 100644
--- a/lib/GroupBackend.php
+++ b/lib/GroupBackend.php
@@ -309,8 +309,8 @@ public function setDisplayName(string $gid, string $displayName): bool {
 			->set('displayname', $query->createNamedParameter($displayName))
 			->where($query->expr()->eq('gid', $query->createNamedParameter($gid)));
 		$query->execute();
-        
-        $this->groupCache[$gid] = $displayName;
+
+		$this->groupCache[$gid] = $displayName;
 
 		return true;
 	}

From 571032f444b2e9a1fbc23e65519b677eef5e39e3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?I=C3=B1aki=20Linaza=20Arg=C3=BCeso?=
 <ilinaza@virtualwareco.com>
Date: Fri, 31 May 2024 17:03:31 +0200
Subject: [PATCH 3/4] feat(groups): add displayname to groups search
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Iñaki Linaza Argüeso <ilinaza@virtualwareco.com>
---
 lib/GroupBackend.php | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/GroupBackend.php b/lib/GroupBackend.php
index 0f42d0767..d2e02293a 100644
--- a/lib/GroupBackend.php
+++ b/lib/GroupBackend.php
@@ -79,6 +79,9 @@ public function getGroups($search = '', $limit = null, $offset = null): array {
 			$query->where($query->expr()->iLike('gid', $query->createNamedParameter(
 				'%' . $this->dbc->escapeLikeParameter($search) . '%'
 			)));
+			$query->orWhere($query->expr()->iLike('displayname', $query->createNamedParameter(
+				'%' . $this->dbc->escapeLikeParameter($search) . '%'
+			))); 
 		}
 
 		if ((int)$limit > 0) {

From fe0186b7d543f1d69e1c9aae7bf9b611cb88621c Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@arthur-schiwon.de>
Date: Mon, 2 Dec 2024 11:36:40 +0100
Subject: [PATCH 4/4] fix: use executeStatement and take result into account

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
---
 lib/GroupBackend.php | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/lib/GroupBackend.php b/lib/GroupBackend.php
index d2e02293a..4718d16ff 100644
--- a/lib/GroupBackend.php
+++ b/lib/GroupBackend.php
@@ -81,7 +81,7 @@ public function getGroups($search = '', $limit = null, $offset = null): array {
 			)));
 			$query->orWhere($query->expr()->iLike('displayname', $query->createNamedParameter(
 				'%' . $this->dbc->escapeLikeParameter($search) . '%'
-			))); 
+			)));
 		}
 
 		if ((int)$limit > 0) {
@@ -305,16 +305,18 @@ public function setDisplayName(string $gid, string $displayName): bool {
 		$displayName = trim($displayName);
 		if ($displayName === '') {
 			$displayName = $gid;
-		} 
+		}
 
 		$query = $this->dbc->getQueryBuilder();
-		$query->update(self::TABLE_GROUPS)
+		$isUpdated = $query->update(self::TABLE_GROUPS)
 			->set('displayname', $query->createNamedParameter($displayName))
-			->where($query->expr()->eq('gid', $query->createNamedParameter($gid)));
-		$query->execute();
+			->where($query->expr()->eq('gid', $query->createNamedParameter($gid)))
+			->executeStatement() > 0;
 
-		$this->groupCache[$gid] = $displayName;
+		if ($isUpdated) {
+			$this->groupCache[$gid] = $displayName;
+		}
 
-		return true;
+		return $isUpdated;
 	}
 }