setDescription('Delete users.'); $this->setHelp('Delete multiple studip user accounts'); $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', 'd', InputOption::VALUE_OPTIONAL, 'Admins can also be deleted on request', false ); } protected function execute(InputInterface $input, OutputInterface $output): int { $range = $input->getArgument('range'); $email = $input->getOption('email'); $delete_admins = $input->getOption('delete_admins'); if ($range === '-') { $file = STDIN; } elseif (is_file($range)) { $file = fopen($range, 'r'); } else { $output->writeln(sprintf('File not found: %s', $range)); return Command::FAILURE; } $list = ''; while (!feof($file)) { $list .= fgets($file, 1024); } $usernames = preg_split('/[\s,;]+/', $list, -1, PREG_SPLIT_NO_EMPTY); $usernames = array_unique($usernames); \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('User: %s successfully deleted:', $user->username)); } else { $output->writeln(sprintf('User: %s NOT deleted', $user->username)); } $output->writeln(parse_msg_to_clean_text($umanager->msg)); }, 'username IN (?)', [$usernames] ); return Command::SUCCESS; } }