diff options
Diffstat (limited to 'apps/settings/lib/Controller/AuthorizedGroupController.php')
-rw-r--r-- | apps/settings/lib/Controller/AuthorizedGroupController.php | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/apps/settings/lib/Controller/AuthorizedGroupController.php b/apps/settings/lib/Controller/AuthorizedGroupController.php new file mode 100644 index 00000000000..82a1ca4703e --- /dev/null +++ b/apps/settings/lib/Controller/AuthorizedGroupController.php @@ -0,0 +1,63 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\Settings\Controller; + +use OC\Settings\AuthorizedGroup; +use OCA\Settings\Service\AuthorizedGroupService; +use OCA\Settings\Service\NotFoundException; +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\DataResponse; +use OCP\DB\Exception; +use OCP\IRequest; + +class AuthorizedGroupController extends Controller { + public function __construct( + string $AppName, + IRequest $request, + private AuthorizedGroupService $authorizedGroupService, + ) { + parent::__construct($AppName, $request); + } + + /** + * @throws NotFoundException + * @throws Exception + */ + public function saveSettings(array $newGroups, string $class): DataResponse { + $currentGroups = $this->authorizedGroupService->findExistingGroupsForClass($class); + + foreach ($currentGroups as $group) { + /** @var AuthorizedGroup $group */ + $removed = true; + foreach ($newGroups as $groupData) { + if ($groupData['gid'] === $group->getGroupId()) { + $removed = false; + break; + } + } + if ($removed) { + $this->authorizedGroupService->delete($group->getId()); + } + } + + foreach ($newGroups as $groupData) { + $added = true; + foreach ($currentGroups as $group) { + /** @var AuthorizedGroup $group */ + if ($groupData['gid'] === $group->getGroupId()) { + $added = false; + break; + } + } + if ($added) { + $this->authorizedGroupService->create($groupData['gid'], $class); + } + } + + return new DataResponse(['valid' => true]); + } +} |