From 64bbb42553c925ebf7177945d048c18675188584 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 22 Mar 2025 23:17:52 +0100 Subject: Fix CLI flag parsing (#7430) * Fix CLI flag parsing fix https://github.com/FreshRSS/FreshRSS/issues/7428 * Fix other places * Forgotten debugging --- cli/CliOptionsParser.php | 6 +++++- cli/check.translation.php | 14 ++++++-------- cli/create-user.php | 2 +- cli/db-backup.php | 4 ++-- cli/db-restore.php | 9 ++++----- cli/import-sqlite-for-user.php | 5 ++--- cli/manipulate.translation.php | 10 +++++----- cli/user-info.php | 21 ++++++++++----------- 8 files changed, 35 insertions(+), 36 deletions(-) (limited to 'cli') diff --git a/cli/CliOptionsParser.php b/cli/CliOptionsParser.php index 03fb68deb..e1a697e35 100644 --- a/cli/CliOptionsParser.php +++ b/cli/CliOptionsParser.php @@ -84,7 +84,11 @@ abstract class CliOptionsParser { foreach ($this->inputs as $name => $input) { $values = $input['values'] ?? $input['defaultInput'] ?? null; $types = $this->options[$name]->getTypes(); - if (!empty($values)) { + + if ($this->options[$name]->getValueTaken() === CliOption::VALUE_NONE) { + // @phpstan-ignore property.dynamicName + $this->$name = $values !== null; + } elseif (!empty($values)) { $validValues = []; $typedValues = []; diff --git a/cli/check.translation.php b/cli/check.translation.php index d209383a8..ebe665ef7 100755 --- a/cli/check.translation.php +++ b/cli/check.translation.php @@ -11,9 +11,9 @@ require_once __DIR__ . '/../constants.php'; $cliOptions = new class extends CliOptionsParser { /** @var array $language */ public array $language; - public string $displayResult; - public string $help; - public string $displayReport; + public bool $displayResult; + public bool $help; + public bool $displayReport; public function __construct() { $this->addOption('language', (new CliOption('language', 'l'))->typeOfArrayOfString()); @@ -27,7 +27,7 @@ $cliOptions = new class extends CliOptionsParser { if (!empty($cliOptions->errors)) { fail('FreshRSS error: ' . array_shift($cliOptions->errors) . "\n" . $cliOptions->usage); } -if (isset($cliOptions->help)) { +if ($cliOptions->help) { checkHelp(); } @@ -39,8 +39,6 @@ if (isset($cliOptions->language)) { } else { $languages = $i18nData->getAvailableLanguages(); } -$displayResults = isset($cliOptions->displayResult); -$displayReport = isset($cliOptions->displayReport); $isValidated = true; $result = []; @@ -58,7 +56,7 @@ foreach ($languages as $language) { $result[$language] = $i18nValidator->displayResult(); } -if ($displayResults) { +if ($cliOptions->displayResult) { foreach ($result as $lang => $value) { echo 'Language: ', $lang, PHP_EOL; print_r($value); @@ -66,7 +64,7 @@ if ($displayResults) { } } -if ($displayReport) { +if ($cliOptions->displayReport) { foreach ($report as $value) { echo $value; } diff --git a/cli/create-user.php b/cli/create-user.php index 067ea2eff..cbcc89ba4 100755 --- a/cli/create-user.php +++ b/cli/create-user.php @@ -82,7 +82,7 @@ $ok = FreshRSS_user_Controller::createUser( $cliOptions->email ?? null, $cliOptions->password ?? '', $values, - !isset($cliOptions->noDefaultFeeds) + !$cliOptions->noDefaultFeeds ); if (!$ok) { diff --git a/cli/db-backup.php b/cli/db-backup.php index 8f8fda2b1..09604a2df 100755 --- a/cli/db-backup.php +++ b/cli/db-backup.php @@ -7,7 +7,7 @@ performRequirementCheck(FreshRSS_Context::systemConf()->db['type'] ?? ''); $ok = true; $cliOptions = new class extends CliOptionsParser { - public string $quiet; + public bool $quiet; public function __construct() { $this->addOption('quiet', (new CliOption('quiet', 'q'))->withValueNone()); @@ -23,7 +23,7 @@ foreach (listUsers() as $username) { $username = cliInitUser($username); $filename = DATA_PATH . '/users/' . $username . '/backup.sqlite'; @unlink($filename); - $verbose = !isset($cliOptions->quiet); + $verbose = !$cliOptions->quiet; if ($verbose) { echo 'FreshRSS backup database to SQLite for user “', $username, "”…\n"; diff --git a/cli/db-restore.php b/cli/db-restore.php index 32f43708f..8e4ffcc12 100755 --- a/cli/db-restore.php +++ b/cli/db-restore.php @@ -6,8 +6,8 @@ require(__DIR__ . '/_cli.php'); performRequirementCheck(FreshRSS_Context::systemConf()->db['type'] ?? ''); $cliOptions = new class extends CliOptionsParser { - public string $deleteBackup; - public string $forceOverwrite; + public bool $deleteBackup; + public bool $forceOverwrite; public function __construct() { $this->addOption('deleteBackup', (new CliOption('delete-backup'))->withValueNone()); @@ -49,10 +49,9 @@ foreach (listUsers() as $username) { echo 'FreshRSS restore database from SQLite for user “', $username, "”…\n"; $databaseDAO = FreshRSS_Factory::createDatabaseDAO($username); - $clearFirst = isset($cliOptions->forceOverwrite); - $ok &= $databaseDAO->dbCopy($filename, FreshRSS_DatabaseDAO::SQLITE_IMPORT, $clearFirst); + $ok &= $databaseDAO->dbCopy($filename, FreshRSS_DatabaseDAO::SQLITE_IMPORT, clearFirst: $cliOptions->forceOverwrite); if ($ok) { - if (isset($cliOptions->deleteBackup)) { + if ($cliOptions->deleteBackup) { unlink($filename); } } else { diff --git a/cli/import-sqlite-for-user.php b/cli/import-sqlite-for-user.php index 45ecb3597..2eb3e2965 100755 --- a/cli/import-sqlite-for-user.php +++ b/cli/import-sqlite-for-user.php @@ -8,7 +8,7 @@ performRequirementCheck(FreshRSS_Context::systemConf()->db['type'] ?? ''); $cliOptions = new class extends CliOptionsParser { public string $user; public string $filename; - public string $forceOverwrite; + public bool $forceOverwrite; public function __construct() { $this->addRequiredOption('user', (new CliOption('user'))); @@ -32,8 +32,7 @@ if (pathinfo($filename, PATHINFO_EXTENSION) !== 'sqlite') { echo 'FreshRSS importing database from SQLite for user “', $username, "”…\n"; $databaseDAO = FreshRSS_Factory::createDatabaseDAO($username); -$clearFirst = isset($cliOptions->forceOverwrite); -$ok = $databaseDAO->dbCopy($filename, FreshRSS_DatabaseDAO::SQLITE_IMPORT, $clearFirst); +$ok = $databaseDAO->dbCopy($filename, FreshRSS_DatabaseDAO::SQLITE_IMPORT, clearFirst: $cliOptions->forceOverwrite); if (!$ok) { echo 'If you would like to clear the user database first, use the option --force-overwrite', "\n"; } diff --git a/cli/manipulate.translation.php b/cli/manipulate.translation.php index 061af8c15..434fb61a5 100755 --- a/cli/manipulate.translation.php +++ b/cli/manipulate.translation.php @@ -12,8 +12,8 @@ $cliOptions = new class extends CliOptionsParser { public string $value; public string $language; public string $originLanguage; - public string $revert; - public string $help; + public bool $revert; + public bool $help; public function __construct() { $this->addRequiredOption('action', (new CliOption('action', 'a'))); @@ -30,7 +30,7 @@ $cliOptions = new class extends CliOptionsParser { if (!empty($cliOptions->errors)) { fail('FreshRSS error: ' . array_shift($cliOptions->errors) . "\n" . $cliOptions->usage); } -if (isset($cliOptions->help)) { +if ($cliOptions->help) { manipulateHelp(); } @@ -79,7 +79,7 @@ switch ($cliOptions->action) { break; case 'ignore': if (isset($cliOptions->language) && isset($cliOptions->key)) { - $i18nData->ignore($cliOptions->key, $cliOptions->language, isset($cliOptions->revert)); + $i18nData->ignore($cliOptions->key, $cliOptions->language, $cliOptions->revert); } else { error('You need to specify a valid set of options.'); exit; @@ -87,7 +87,7 @@ switch ($cliOptions->action) { break; case 'ignore_unmodified': if (isset($cliOptions->language)) { - $i18nData->ignore_unmodified($cliOptions->language, isset($cliOptions->revert)); + $i18nData->ignore_unmodified($cliOptions->language, $cliOptions->revert); } else { error('You need to specify a valid set of options.'); exit; diff --git a/cli/user-info.php b/cli/user-info.php index 5895d9b1d..04de8c68d 100755 --- a/cli/user-info.php +++ b/cli/user-info.php @@ -8,9 +8,9 @@ const DATA_FORMAT = "%-7s | %-20s | %-5s | %-7s | %-25s | %-15s | %-10s | %-10s $cliOptions = new class extends CliOptionsParser { /** @var array $user */ public array $user; - public string $header; - public string $json; - public string $humanReadable; + public bool $header; + public bool $json; + public bool $humanReadable; public function __construct() { $this->addOption('user', (new CliOption('user'))->typeOfArrayOfString()); @@ -29,14 +29,13 @@ $users = $cliOptions->user ?? listUsers(); sort($users); -$formatJson = isset($cliOptions->json); $jsonOutput = []; -if ($formatJson) { - unset($cliOptions->header); - unset($cliOptions->humanReadable); +if ($cliOptions->json) { + $cliOptions->header = false; + $cliOptions->humanReadable = false; } -if (isset($cliOptions->header)) { +if ($cliOptions->header) { printf( DATA_FORMAT, 'default', @@ -85,12 +84,12 @@ foreach ($users as $username) { 'lang' => FreshRSS_Context::userConf()->language, 'mail_login' => FreshRSS_Context::userConf()->mail_login, ]; - if (isset($cliOptions->humanReadable)) { //Human format + if ($cliOptions->humanReadable) { //Human format $data['last_user_activity'] = date('c', $data['last_user_activity']); $data['database_size'] = format_bytes($data['database_size']); } - if ($formatJson) { + if ($cliOptions->json) { $data['default'] = !empty($data['default']); $data['admin'] = !empty($data['admin']); $data['enabled'] = !empty($data['enabled']); @@ -101,7 +100,7 @@ foreach ($users as $username) { } } -if ($formatJson) { +if ($cliOptions->json) { echo json_encode($jsonOutput), "\n"; } -- cgit v1.2.3