diff options
author | Roeland Jago Douma <rullzer@users.noreply.github.com> | 2021-03-05 08:49:43 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-05 08:49:43 +0100 |
commit | 54cffefed47f7688800dbbb0d2115ddff02ebbef (patch) | |
tree | df707ce13120ac23532370ecf5ead6173b0916a0 /core/Command | |
parent | e6ef096e520c512064db3448696c7a3ab8f47147 (diff) | |
parent | 2796ef80ff53684c6b276b054bb2d3b6039a4ef6 (diff) | |
download | nextcloud-server-54cffefed47f7688800dbbb0d2115ddff02ebbef.tar.gz nextcloud-server-54cffefed47f7688800dbbb0d2115ddff02ebbef.zip |
Merge pull request #25660 from hosting-de/feature/add-backend-list-groups
Show group backends in occ group:list --info and group:info
Diffstat (limited to 'core/Command')
-rw-r--r-- | core/Command/Group/Info.php | 83 | ||||
-rw-r--r-- | core/Command/Group/ListCommand.php | 25 |
2 files changed, 103 insertions, 5 deletions
diff --git a/core/Command/Group/Info.php b/core/Command/Group/Info.php new file mode 100644 index 00000000000..225c3444397 --- /dev/null +++ b/core/Command/Group/Info.php @@ -0,0 +1,83 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright Copyright (c) 2021, hosting.de, Johannes Leuker <j.leuker@hosting.de> + * + * @author Johannes Leuker <j.leuker@hosting.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Core\Command\Group; + +use OC\Core\Command\Base; +use OCP\IGroup; +use OCP\IGroupManager; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class Info extends Base { + /** @var IGroupManager */ + protected $groupManager; + + /** + * @param IGroupManager $groupManager + */ + public function __construct(IGroupManager $groupManager) { + $this->groupManager = $groupManager; + parent::__construct(); + } + + protected function configure() { + $this + ->setName('group:info') + ->setDescription('Show information about a group') + ->addArgument( + 'groupid', + InputArgument::REQUIRED, + 'Group id' + )->addOption( + 'output', + null, + InputOption::VALUE_OPTIONAL, + 'Output format (plain, json or json_pretty, default is plain)', + $this->defaultOutputFormat + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $gid = $input->getArgument('groupid'); + $group = $this->groupManager->get($gid); + if (!$group instanceof IGroup) { + $output->writeln('<error>Group "' . $gid . '" does not exist.</error>'); + return 1; + } else { + $groupOutput = [ + 'groupID' => $gid, + 'displayName' => $group->getDisplayName(), + 'backends' => $group->getBackendNames(), + ]; + + $this->writeArrayInOutputFormat($input, $output, $groupOutput); + return 0; + } + } +} diff --git a/core/Command/Group/ListCommand.php b/core/Command/Group/ListCommand.php index 846c36fab39..99c4d6e35c6 100644 --- a/core/Command/Group/ListCommand.php +++ b/core/Command/Group/ListCommand.php @@ -60,6 +60,11 @@ class ListCommand extends Base { 'Offset for retrieving groups', 0 )->addOption( + 'info', + 'i', + InputOption::VALUE_NONE, + 'Show additional info (backend)' + )->addOption( 'output', null, InputOption::VALUE_OPTIONAL, @@ -70,7 +75,7 @@ class ListCommand extends Base { protected function execute(InputInterface $input, OutputInterface $output): int { $groups = $this->groupManager->search('', (int)$input->getOption('limit'), (int)$input->getOption('offset')); - $this->writeArrayInOutputFormat($input, $output, $this->formatGroups($groups)); + $this->writeArrayInOutputFormat($input, $output, $this->formatGroups($groups, (bool)$input->getOption('info'))); return 0; } @@ -78,13 +83,23 @@ class ListCommand extends Base { * @param IGroup[] $groups * @return array */ - private function formatGroups(array $groups) { + private function formatGroups(array $groups, bool $addInfo = false) { $keys = array_map(function (IGroup $group) { return $group->getGID(); }, $groups); - $values = array_map(function (IGroup $group) { - return array_keys($group->getUsers()); - }, $groups); + + if ($addInfo) { + $values = array_map(function (IGroup $group) { + return [ + 'backends' => $group->getBackendNames(), + 'users' => array_keys($group->getUsers()), + ]; + }, $groups); + } else { + $values = array_map(function (IGroup $group) { + return array_keys($group->getUsers()); + }, $groups); + } return array_combine($keys, $values); } } |