diff --git a/lib/GroupBackend.php b/lib/GroupBackend.php index 46d08ad98..4718d16ff 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 = []; @@ -78,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) { @@ -292,4 +296,27 @@ 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(); + $isUpdated = $query->update(self::TABLE_GROUPS) + ->set('displayname', $query->createNamedParameter($displayName)) + ->where($query->expr()->eq('gid', $query->createNamedParameter($gid))) + ->executeStatement() > 0; + + if ($isUpdated) { + $this->groupCache[$gid] = $displayName; + } + + return $isUpdated; + } }