From e67749d60bd65f68caf73665796d03237cf2db9f Mon Sep 17 00:00:00 2001 From: Pasquale Tripodi Date: Tue, 9 Apr 2024 18:27:21 +0200 Subject: [PATCH 1/5] fix: properly cleanup users upon removal --- appinfo/app.php | 3 +++ lib/Hooks.php | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 lib/Hooks.php diff --git a/appinfo/app.php b/appinfo/app.php index 6a38e585..0fc6caf2 100644 --- a/appinfo/app.php +++ b/appinfo/app.php @@ -19,9 +19,12 @@ * */ +use OCA\CustomGroups\Hooks; + $app = new \OCA\CustomGroups\Application(); $app->registerGroupBackend(); $app->registerNotifier(); +$app->getContainer()->query(Hooks::class)->register(); if (!\defined('PHPUNIT') && !\OC::$CLI) { $pathInfo = \OC::$server->getRequest()->getPathInfo(); diff --git a/lib/Hooks.php b/lib/Hooks.php new file mode 100644 index 00000000..d442c180 --- /dev/null +++ b/lib/Hooks.php @@ -0,0 +1,41 @@ + + * @author Ilja Neumann + * + * @copyright Copyright (c) 2024, ownCloud GmbH + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see + * + */ + +namespace OCA\CustomGroups; + +class Hooks { + public static function register(): void { + \OCP\Util::connectHook( + 'OC_User', + 'post_deleteUser', + self::class, + 'userDelete' + ); + } + + public static function userDelete($params) { + $customGroupsDb = \OC::$server->query(CustomGroupsDatabaseHandler::class); + foreach ($customGroupsDb->getUserMemberships($params['uid'], null) as $customgroup) { + $customGroupsDb->removeFromGroup($params['uid'], $customgroup['group_id']); + } + } +} From f66dba1b1d05f1f9aa77ab18ca68c6ebee75b2ca Mon Sep 17 00:00:00 2001 From: Pasquale Tripodi Date: Tue, 9 Apr 2024 18:41:09 +0200 Subject: [PATCH 2/5] fix: camelCase --- lib/Hooks.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Hooks.php b/lib/Hooks.php index d442c180..6309d290 100644 --- a/lib/Hooks.php +++ b/lib/Hooks.php @@ -33,9 +33,9 @@ public static function register(): void { } public static function userDelete($params) { - $customGroupsDb = \OC::$server->query(CustomGroupsDatabaseHandler::class); - foreach ($customGroupsDb->getUserMemberships($params['uid'], null) as $customgroup) { - $customGroupsDb->removeFromGroup($params['uid'], $customgroup['group_id']); + $customGroupsDbHandler = \OC::$server->query(CustomGroupsDatabaseHandler::class); + foreach ($customGroupsDbHandler->getUserMemberships($params['uid'], null) as $customGroup) { + $customGroupsDbHandler->removeFromGroup($params['uid'], $customGroup['group_id']); } } } From e8d57e4dcedf903888c1bccf240437bd6ebe0397 Mon Sep 17 00:00:00 2001 From: Pasquale Tripodi Date: Wed, 10 Apr 2024 22:47:49 +0200 Subject: [PATCH 3/5] fix: also remove custom group when no member left --- lib/Hooks.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/Hooks.php b/lib/Hooks.php index 6309d290..703896e0 100644 --- a/lib/Hooks.php +++ b/lib/Hooks.php @@ -35,6 +35,11 @@ public static function register(): void { public static function userDelete($params) { $customGroupsDbHandler = \OC::$server->query(CustomGroupsDatabaseHandler::class); foreach ($customGroupsDbHandler->getUserMemberships($params['uid'], null) as $customGroup) { + $members = $customGroupsDbHandler->getGroupMembers($customgroup['group_id']); + if (\count($members) === 1 && $members[0]['user_id'] === $params['uid']) { + // removing custom group as deleted user is the only member/admin left + $customGroupsDbHandler->deleteGroup($customgroup['group_id']); + } $customGroupsDbHandler->removeFromGroup($params['uid'], $customGroup['group_id']); } } From ee683c6b199f6fa6bec724a2706533361dbcd5fd Mon Sep 17 00:00:00 2001 From: Pasquale Tripodi Date: Thu, 11 Apr 2024 08:21:45 +0200 Subject: [PATCH 4/5] fix: correct variable name --- lib/Hooks.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Hooks.php b/lib/Hooks.php index 703896e0..3c802bdb 100644 --- a/lib/Hooks.php +++ b/lib/Hooks.php @@ -35,10 +35,10 @@ public static function register(): void { public static function userDelete($params) { $customGroupsDbHandler = \OC::$server->query(CustomGroupsDatabaseHandler::class); foreach ($customGroupsDbHandler->getUserMemberships($params['uid'], null) as $customGroup) { - $members = $customGroupsDbHandler->getGroupMembers($customgroup['group_id']); + $members = $customGroupsDbHandler->getGroupMembers($customGroup['group_id']); if (\count($members) === 1 && $members[0]['user_id'] === $params['uid']) { // removing custom group as deleted user is the only member/admin left - $customGroupsDbHandler->deleteGroup($customgroup['group_id']); + $customGroupsDbHandler->deleteGroup($customGroup['group_id']); } $customGroupsDbHandler->removeFromGroup($params['uid'], $customGroup['group_id']); } From 2caac73b5053c3c114012c7bc816f3fce60006e1 Mon Sep 17 00:00:00 2001 From: Pasquale Tripodi Date: Thu, 11 Apr 2024 12:21:36 +0200 Subject: [PATCH 5/5] Update appinfo/app.php Co-authored-by: Ilja Neumann --- appinfo/app.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appinfo/app.php b/appinfo/app.php index 0fc6caf2..0543004a 100644 --- a/appinfo/app.php +++ b/appinfo/app.php @@ -24,7 +24,7 @@ $app = new \OCA\CustomGroups\Application(); $app->registerGroupBackend(); $app->registerNotifier(); -$app->getContainer()->query(Hooks::class)->register(); +Hooks::register(); if (!\defined('PHPUNIT') && !\OC::$CLI) { $pathInfo = \OC::$server->getRequest()->getPathInfo();