-
-
Notifications
You must be signed in to change notification settings - Fork 5k
Expand file tree
/
Copy pathAddUser.php
More file actions
102 lines (91 loc) · 2.82 KB
/
AddUser.php
File metadata and controls
102 lines (91 loc) · 2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
/**
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
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;
class AddUser extends Base {
public function __construct(
protected IUserManager $userManager,
protected IGroupManager $groupManager,
) {
parent::__construct();
}
#[\Override]
protected function configure() {
$this
->setName('group:adduser')
->setDescription('add a user to a group')
->addArgument(
'group',
InputArgument::REQUIRED,
'group to add the user to'
)->addArgument(
'user',
InputArgument::REQUIRED + InputArgument::IS_ARRAY,
'users to add to the group',
);
}
#[\Override]
protected function execute(InputInterface $input, OutputInterface $output): int {
$group = $this->groupManager->get($input->getArgument('group'));
if (is_null($group)) {
$output->writeln('<error>group not found</error>');
return Base::FAILURE;
}
$allUsersFound = true;
$noUserFound = true;
$users = (array)$input->getArgument('user');
foreach ($users as $userId) {
$user = $this->userManager->get($userId);
if (is_null($user)) {
$output->writeln('<error>user ' . $userId . ' not found</error>');
$allUsersFound = false;
continue;
}
$noUserFound = false;
$group->addUser($user);
unset($user);
$output->writeln('<info>user ' . $userId . ' added</info>');
}
if (!$allUsersFound && !$noUserFound) {
$output->writeln('<error>Some users were not found, all others where added to the group.</error>');
return Base::FAILURE;
}
if ($noUserFound) {
return Base::FAILURE;
}
return Base::SUCCESS;
}
/**
* @param string $argumentName
* @param CompletionContext $context
* @return string[]
*/
#[\Override]
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->searchDisplayName($context->getCurrentWord()));
return array_diff($users, $members);
}
return [];
}
}