Merge pull request #31889 from nextcloud/feature/noid/allow-to-autocomplete-user-and-group-commands

Allow to autocomplete user and group ids in commands
pull/17087/head
Joas Schilling 2022-04-13 08:02:45 +07:00 committed by GitHub
commit ceefe019a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 205 additions and 10 deletions

@ -24,8 +24,11 @@
namespace OC\Core\Command\Group;
use OC\Core\Command\Base;
use OCP\IGroup;
use OCP\IGroupManager;
use OCP\IUser;
use OCP\IUserManager;
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
@ -75,4 +78,27 @@ class AddUser extends Base {
$group->addUser($user);
return 0;
}
/**
* @param string $argumentName
* @param CompletionContext $context
* @return string[]
*/
public function completeArgumentValues($argumentName, CompletionContext $context) {
if ($argumentName === 'group') {
return array_map(static fn (IGroup $group) => $group->getGID(), $this->groupManager->search($context->getCurrentWord()));
}
if ($argumentName === 'user') {
$groupId = $context->getWordAtIndex($context->getWordIndex() - 1);
$group = $this->groupManager->get($groupId);
if ($group === null) {
return [];
}
$members = array_map(static fn (IUser $user) => $user->getUID(), $group->searchUsers($context->getCurrentWord()));
$users = array_map(static fn (IUser $user) => $user->getUID(), $this->userManager->search($context->getCurrentWord()));
return array_diff($users, $members);
}
return [];
}
}

@ -27,7 +27,9 @@ declare(strict_types=1);
namespace OC\Core\Command\Group;
use OC\Core\Command\Base;
use OCP\IGroup;
use OCP\IGroupManager;
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
@ -74,4 +76,16 @@ class Delete extends Base {
}
return 0;
}
/**
* @param string $argumentName
* @param CompletionContext $context
* @return string[]
*/
public function completeArgumentValues($argumentName, CompletionContext $context) {
if ($argumentName === 'groupid') {
return array_map(static fn (IGroup $group) => $group->getGID(), $this->groupManager->search($context->getCurrentWord()));
}
return [];
}
}

@ -28,6 +28,7 @@ namespace OC\Core\Command\Group;
use OC\Core\Command\Base;
use OCP\IGroup;
use OCP\IGroupManager;
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
@ -79,4 +80,16 @@ class Info extends Base {
return 0;
}
}
/**
* @param string $argumentName
* @param CompletionContext $context
* @return string[]
*/
public function completeArgumentValues($argumentName, CompletionContext $context) {
if ($argumentName === 'groupid') {
return array_map(static fn (IGroup $group) => $group->getGID(), $this->groupManager->search($context->getCurrentWord()));
}
return [];
}
}

@ -24,8 +24,11 @@
namespace OC\Core\Command\Group;
use OC\Core\Command\Base;
use OCP\IGroup;
use OCP\IGroupManager;
use OCP\IUser;
use OCP\IUserManager;
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
@ -75,4 +78,24 @@ class RemoveUser extends Base {
$group->removeUser($user);
return 0;
}
/**
* @param string $argumentName
* @param CompletionContext $context
* @return string[]
*/
public function completeArgumentValues($argumentName, CompletionContext $context) {
if ($argumentName === 'group') {
return array_map(static fn (IGroup $group) => $group->getGID(), $this->groupManager->search($context->getCurrentWord()));
}
if ($argumentName === 'user') {
$groupId = $context->getWordAtIndex($context->getWordIndex() - 1);
$group = $this->groupManager->get($groupId);
if ($group === null) {
return [];
}
return array_map(static fn (IUser $user) => $user->getUID(), $group->searchUsers($context->getCurrentWord()));
}
return [];
}
}

@ -24,13 +24,15 @@
*/
namespace OC\Core\Command\User;
use OC\Core\Command\Base;
use OCP\IUser;
use OCP\IUserManager;
use Symfony\Component\Console\Command\Command;
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class Delete extends Command {
class Delete extends Base {
/** @var IUserManager */
protected $userManager;
@ -68,4 +70,16 @@ class Delete extends Command {
$output->writeln('<error>The specified user could not be deleted. Please check the logs.</error>');
return 1;
}
/**
* @param string $argumentName
* @param CompletionContext $context
* @return string[]
*/
public function completeArgumentValues($argumentName, CompletionContext $context) {
if ($argumentName === 'uid') {
return array_map(static fn (IUser $user) => $user->getUID(), $this->userManager->search($context->getCurrentWord()));
}
return [];
}
}

@ -23,13 +23,15 @@
*/
namespace OC\Core\Command\User;
use OC\Core\Command\Base;
use OCP\IUser;
use OCP\IUserManager;
use Symfony\Component\Console\Command\Command;
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class Disable extends Command {
class Disable extends Base {
/** @var IUserManager */
protected $userManager;
@ -63,4 +65,22 @@ class Disable extends Command {
$output->writeln('<info>The specified user is disabled</info>');
return 0;
}
/**
* @param string $argumentName
* @param CompletionContext $context
* @return string[]
*/
public function completeArgumentValues($argumentName, CompletionContext $context) {
if ($argumentName === 'uid') {
return array_map(
static fn (IUser $user) => $user->getUID(),
array_filter(
$this->userManager->search($context->getCurrentWord()),
static fn (IUser $user) => $user->isEnabled()
)
);
}
return [];
}
}

@ -23,13 +23,15 @@
*/
namespace OC\Core\Command\User;
use OC\Core\Command\Base;
use OCP\IUser;
use OCP\IUserManager;
use Symfony\Component\Console\Command\Command;
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class Enable extends Command {
class Enable extends Base {
/** @var IUserManager */
protected $userManager;
@ -63,4 +65,22 @@ class Enable extends Command {
$output->writeln('<info>The specified user is enabled</info>');
return 0;
}
/**
* @param string $argumentName
* @param CompletionContext $context
* @return string[]
*/
public function completeArgumentValues($argumentName, CompletionContext $context) {
if ($argumentName === 'uid') {
return array_map(
static fn (IUser $user) => $user->getUID(),
array_filter(
$this->userManager->search($context->getCurrentWord()),
static fn (IUser $user) => !$user->isEnabled()
)
);
}
return [];
}
}

@ -28,6 +28,7 @@ use OC\Core\Command\Base;
use OCP\IGroupManager;
use OCP\IUser;
use OCP\IUserManager;
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
@ -110,4 +111,16 @@ class Info extends Base {
'quota' => $storage['quota'],
];
}
/**
* @param string $argumentName
* @param CompletionContext $context
* @return string[]
*/
public function completeArgumentValues($argumentName, CompletionContext $context) {
if ($argumentName === 'user') {
return array_map(static fn (IUser $user) => $user->getUID(), $this->userManager->search($context->getCurrentWord()));
}
return [];
}
}

@ -25,13 +25,15 @@
*/
namespace OC\Core\Command\User;
use OC\Core\Command\Base;
use OCP\IUser;
use OCP\IUserManager;
use Symfony\Component\Console\Command\Command;
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class LastSeen extends Command {
class LastSeen extends Base {
/** @var IUserManager */
protected $userManager;
@ -73,4 +75,16 @@ class LastSeen extends Command {
}
return 0;
}
/**
* @param string $argumentName
* @param CompletionContext $context
* @return string[]
*/
public function completeArgumentValues($argumentName, CompletionContext $context) {
if ($argumentName === 'uid') {
return array_map(static fn (IUser $user) => $user->getUID(), $this->userManager->search($context->getCurrentWord()));
}
return [];
}
}

@ -27,8 +27,10 @@
*/
namespace OC\Core\Command\User;
use OC\Core\Command\Base;
use OCP\IUser;
use OCP\IUserManager;
use Symfony\Component\Console\Command\Command;
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
use Symfony\Component\Console\Helper\QuestionHelper;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
@ -37,7 +39,7 @@ use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\ConfirmationQuestion;
use Symfony\Component\Console\Question\Question;
class ResetPassword extends Command {
class ResetPassword extends Base {
/** @var IUserManager */
protected $userManager;
@ -133,4 +135,16 @@ class ResetPassword extends Command {
}
return 0;
}
/**
* @param string $argumentName
* @param CompletionContext $context
* @return string[]
*/
public function completeArgumentValues($argumentName, CompletionContext $context) {
if ($argumentName === 'user') {
return array_map(static fn (IUser $user) => $user->getUID(), $this->userManager->search($context->getCurrentWord()));
}
return [];
}
}

@ -29,6 +29,7 @@ use OC\Core\Command\Base;
use OCP\IConfig;
use OCP\IUser;
use OCP\IUserManager;
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
@ -255,4 +256,27 @@ class Setting extends Base {
return $settings;
}
/**
* @param string $argumentName
* @param CompletionContext $context
* @return string[]
*/
public function completeArgumentValues($argumentName, CompletionContext $context) {
if ($argumentName === 'uid') {
return array_map(static fn (IUser $user) => $user->getUID(), $this->userManager->search($context->getCurrentWord()));
}
if ($argumentName === 'app') {
$userId = $context->getWordAtIndex($context->getWordIndex() - 1);
$settings = $this->getUserSettings($userId, '');
return array_keys($settings);
}
if ($argumentName === 'key') {
$userId = $context->getWordAtIndex($context->getWordIndex() - 2);
$app = $context->getWordAtIndex($context->getWordIndex() - 1);
$settings = $this->getUserSettings($userId, $app);
return array_keys($settings[$app]);
}
return [];
}
}