diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2019-11-13 12:28:23 +0100 |
---|---|---|
committer | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2020-01-22 11:55:02 +0100 |
commit | b45bdfc7ef992ffba4da2c561444195fee80f08e (patch) | |
tree | 4af0eab30c8dc6435462891989a1562b0c5c1f84 | |
parent | 7bc24e20367761bf13ebaa5b6e978ba2a34aad50 (diff) | |
download | nextcloud-server-b45bdfc7ef992ffba4da2c561444195fee80f08e.tar.gz nextcloud-server-b45bdfc7ef992ffba4da2c561444195fee80f08e.zip |
extend with group deletion handling
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
-rw-r--r-- | apps/files_external/lib/AppInfo/Application.php | 11 | ||||
-rw-r--r-- | apps/files_external/lib/Service/DBConfigService.php | 20 |
2 files changed, 25 insertions, 6 deletions
diff --git a/apps/files_external/lib/AppInfo/Application.php b/apps/files_external/lib/AppInfo/Application.php index 2e614dd366a..9e07339e068 100644 --- a/apps/files_external/lib/AppInfo/Application.php +++ b/apps/files_external/lib/AppInfo/Application.php @@ -64,6 +64,7 @@ use OCA\Files_External\Lib\Backend\DAV; use OCA\Files_External\Lib\Backend\FTP; use OCA\Files_External\Lib\Backend\Local; use OCP\Files\Config\IUserMountCache; +use OCP\IGroup; use OCP\IUser; use Symfony\Component\EventDispatcher\GenericEvent; @@ -111,6 +112,16 @@ class Application extends App implements IBackendProvider, IAuthMechanismProvide $config->modifyMountsOnUserDelete($user->getUID()); } ); + $dispatcher->addListener( + IGroup::class . '::postDelete', + function (GenericEvent $event) { + /** @var IGroup $group */ + $group = $event->getSubject(); + /** @var DBConfigService $config */ + $config = $this->getContainer()->query(DBConfigService::class); + $config->modifyMountsOnGroupDelete($group->getGID()); + } + ); } /** diff --git a/apps/files_external/lib/Service/DBConfigService.php b/apps/files_external/lib/Service/DBConfigService.php index 0d8d048fc1d..9394924d396 100644 --- a/apps/files_external/lib/Service/DBConfigService.php +++ b/apps/files_external/lib/Service/DBConfigService.php @@ -114,15 +114,23 @@ class DBConfigService { return $this->getMountsFromQuery($query); } - public function modifyMountsOnUserDelete(string $uid) { + public function modifyMountsOnUserDelete(string $uid): void { + $this->modifyMountsOnDelete($uid, self::APPLICABLE_TYPE_USER); + } + + public function modifyMountsOnGroupDelete(string $gid): void { + $this->modifyMountsOnDelete($gid, self::APPLICABLE_TYPE_GROUP); + } + + protected function modifyMountsOnDelete(string $applicableId, int $applicableType): void { $builder = $this->connection->getQueryBuilder(); $query = $builder->select(['a.mount_id', $builder->func()->count('a.mount_id', 'count')]) ->from('external_applicable', 'a') ->rightJoin('a', 'external_applicable', 'b', $builder->expr()->eq('a.mount_id', 'b.mount_id')) - ->where($builder->expr()->andX( // mounts for user - $builder->expr()->eq('a.type', $builder->createNamedParameter(self::APPLICABLE_TYPE_USER, IQueryBuilder::PARAM_INT)), - $builder->expr()->eq('a.value', $builder->createNamedParameter($uid)) - ) + ->where($builder->expr()->andX( + $builder->expr()->eq('a.type', $builder->createNamedParameter($applicableType, IQueryBuilder::PARAM_INT)), + $builder->expr()->eq('a.value', $builder->createNamedParameter($applicableId)) + ) ) ->groupBy(['a.mount_id']); $stmt = $query->execute(); @@ -131,7 +139,7 @@ class DBConfigService { foreach ($result as $row) { if((int)$row['count'] > 1) { - $this->removeApplicable($row['mount_id'], self::APPLICABLE_TYPE_USER, $uid); + $this->removeApplicable($row['mount_id'], $applicableType, $applicableId); } else { $this->removeMount($row['mount_id']); } |