aboutsummaryrefslogtreecommitdiff
path: root/cli/Commands
diff options
context:
space:
mode:
authorAndré Noack <noack@data-quest.de>2023-06-27 15:24:04 +0000
committerAndré Noack <noack@data-quest.de>2023-06-27 15:24:04 +0000
commit5b2691adb1962ce74f42bdf201987400ce0b0528 (patch)
treed10ab0826492b5f0441ff542df745ae4f02bcbcf /cli/Commands
parent84fa046d1a75fb1dd15de88850b6c8f3ea89a152 (diff)
Resolve #2786 "cli Kommando user:delete wirft unverständliche Fehlermeldung"
Closes #2786 Merge request studip/studip!1883
Diffstat (limited to 'cli/Commands')
-rw-r--r--cli/Commands/User/UsersDelete.php76
1 files changed, 32 insertions, 44 deletions
diff --git a/cli/Commands/User/UsersDelete.php b/cli/Commands/User/UsersDelete.php
index 33b41c3..9c55f7d 100644
--- a/cli/Commands/User/UsersDelete.php
+++ b/cli/Commands/User/UsersDelete.php
@@ -16,14 +16,7 @@ class UsersDelete extends Command
{
$this->setDescription('Delete users.');
$this->setHelp('Delete multiple studip user accounts');
- $this->addArgument('range', InputArgument::REQUIRED, 'Username or path to csv-file');
- $this->addOption(
- 'file_range',
- 'f',
- InputOption::VALUE_OPTIONAL,
- 'Set to true, if you want use a txt file with username',
- true
- );
+ $this->addArgument('range', InputArgument::REQUIRED, 'Path to csv-file or - to read from STDIN');
$this->addOption('email', 'e', InputOption::VALUE_OPTIONAL, 'Send a deletion email', true);
$this->addOption(
'delete_admins',
@@ -37,53 +30,48 @@ class UsersDelete extends Command
protected function execute(InputInterface $input, OutputInterface $output): int
{
$range = $input->getArgument('range');
- $file_range = $input->getOption('file_range');
$email = $input->getOption('email');
$delete_admins = $input->getOption('delete_admins');
- if ($email && !($MAIL_LOCALHOST && $MAIL_HOST_NAME && $ABSOLUTE_URI_STUDIP)) {
- $output->writeln(
- "<error>To use this script you MUST set correct values for $MAIL_LOCALHOST, $MAIL_HOST_NAME and $ABSOLUTE_URI_STUDIP in local.inc!</error>"
- );
- }
-
- if (!(bool) $file_range) {
- $usernames = [$range];
- } else {
- if (!is_file($range)) {
- $output->writeln(sprintf('<error>File not found: %s</error>', $range));
- return Command::FAILURE;
- }
+ if ($range === '-') {
+ $file = STDIN;
+ } elseif (is_file($range)) {
$file = fopen($range, 'r');
- $list = '';
- while (!feof($file)) {
- $list .= fgets($file, 1024);
- }
- $usernames = preg_split('/[\s,;]+/', $list, -1, PREG_SPLIT_NO_EMPTY);
- $usernames = array_unique($usernames);
+ } else {
+ $output->writeln(sprintf('<error>File not found: %s</error>', $range));
+ return Command::FAILURE;
}
- $users = \User::findBySQL('username IN (?)', [$usernames]);
+ $list = '';
+ while (!feof($file)) {
+ $list .= fgets($file, 1024);
+ }
+ $usernames = preg_split('/[\s,;]+/', $list, -1, PREG_SPLIT_NO_EMPTY);
+ $usernames = array_unique($usernames);
- if (!empty($users)) {
- foreach ($users as $user) {
+ \User::findEachBySQL(
+ function (\User $user) use ($output, $delete_admins, $email) {
if (!$delete_admins && ($user->perms == 'admin' || $user->perms == 'root')) {
$output->writeln(sprintf('User: %s is %s, NOT deleted', $user->username, $user->perms));
+ return;
+ }
+
+ $umanager = new \UserManagement($user->id);
+ //wenn keine Email gewünscht, Adresse aus den Daten löschen
+ if (!$email) {
+ $umanager->user_data['auth_user_md5.Email'] = '';
+ }
+ if ($umanager->deleteUser()) {
+ $output->writeln(sprintf('<info>User: %s successfully deleted:</info>', $user->username));
} else {
- $umanager = new \UserManagement($user->id);
- //wenn keine Email gewünscht, Adresse aus den Daten löschen
- if (!$email) {
- $umanager->user_data['auth_user_md5.Email'] = '';
- }
- if ($umanager->deleteUser()) {
- $output->writeln(sprintf('<info>User: %s successfully deleted:</info>', $user->username));
- } else {
- $output->writeln(sprintf('<error>User: %s NOT deleted</error>', $user->username));
- }
- $output->writeln(parse_msg_to_clean_text($umanager->msg));
+ $output->writeln(sprintf('<error>User: %s NOT deleted</error>', $user->username));
}
- }
- }
+ $output->writeln(parse_msg_to_clean_text($umanager->msg));
+ },
+ 'username IN (?)',
+ [$usernames]
+ );
+
return Command::SUCCESS;
}
}