From c74acb7f99e2b202bec0ea2d5a4efea2c2441775 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Noack?= <noack@data-quest.de> Date: Tue, 27 Jun 2023 15:24:04 +0000 Subject: [PATCH] =?UTF-8?q?Resolve=20#2786=20"cli=20Kommando=20user:delete?= =?UTF-8?q?=20wirft=20unverst=C3=A4ndliche=20Fehlermeldung"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #2786 Merge request studip/studip!1883 --- cli/Commands/Users/UserDelete.php | 76 +++++++++++++------------------ 1 file changed, 32 insertions(+), 44 deletions(-) diff --git a/cli/Commands/Users/UserDelete.php b/cli/Commands/Users/UserDelete.php index 2ba854e60d8..16e79a5c0b4 100644 --- a/cli/Commands/Users/UserDelete.php +++ b/cli/Commands/Users/UserDelete.php @@ -16,14 +16,7 @@ class UserDelete 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 UserDelete 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; } } -- GitLab