]> source.dussan.org Git - nextcloud-server.git/commitdiff
Allow to autocomplete user and group ids in commands 31889/head
authorJoas Schilling <coding@schilljs.com>
Fri, 8 Apr 2022 09:40:05 +0000 (11:40 +0200)
committerJoas Schilling <coding@schilljs.com>
Fri, 8 Apr 2022 09:54:44 +0000 (11:54 +0200)
Signed-off-by: Joas Schilling <coding@schilljs.com>
core/Command/Group/AddUser.php
core/Command/Group/Delete.php
core/Command/Group/Info.php
core/Command/Group/RemoveUser.php
core/Command/User/Delete.php
core/Command/User/Disable.php
core/Command/User/Enable.php
core/Command/User/Info.php
core/Command/User/LastSeen.php
core/Command/User/ResetPassword.php
core/Command/User/Setting.php

index b5d0068acc654bbb44d682dc6527bc0328d3a054..141916953ababa3a36c138e603fb5b6b9ce42f99 100644 (file)
 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 [];
+       }
 }
index be97be83407cc098c779b24b1d9bf0b432b7d216..2596b461d1708b697b6c1ee003eee972acd51e5d 100644 (file)
@@ -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 [];
+       }
 }
index 180055e83ea5544fb39fad0b8be9f5ca1018ecba..5e9fa6611309feccab2cd01d195ee1338c59b20d 100644 (file)
@@ -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 [];
+       }
 }
index 4af66480f28cb2eaa72bdbfcf6f6d45072a40694..2b9c4eaec529b41dce8d92ab9bea64432dc6da25 100644 (file)
 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 [];
+       }
 }
index 37e09ca69caa837f3c3f626cc2126ebfb8d16978..9624f04fa18f175bb8eb7b6076557a6400a90d25 100644 (file)
  */
 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 [];
+       }
 }
index e4f43e26f5903ee780b2f4c859e4635f214a9489..9120d28cc1f6486410f7204df0b1c4d03a037a9c 100644 (file)
  */
 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 [];
+       }
 }
index 80efec3bc3f8fb2fd766c918f6b3b7249fd90b4d..eb548a74d7eb45fd725d4c3fba3717c5137275fb 100644 (file)
  */
 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 [];
+       }
 }
index 36bfa0b6d5b1f7562f80a24fe88a58580ecee149..a93f65b7dce2dcb4465f6129b702d7371ef9c6a1 100644 (file)
@@ -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 [];
+       }
 }
index e56ddd5087f2f13e09aac7027f0811eb99e59d30..dc01ca549f3a40fd9f8d44aa129b18f8125e0bea 100644 (file)
  */
 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 [];
+       }
 }
index 798f5dad58581e4b655030746f543a990731e021..174a9f4068d0f389b9bad94b8785f4aab829e0d4 100644 (file)
  */
 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 [];
+       }
 }
index 87fb6905de96f9e92362eda02babd6035b9cb8ca..3e4830127cd08e7bc174e152abcd22c09d3a9333 100644 (file)
@@ -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 [];
+       }
 }