aboutsummaryrefslogtreecommitdiff
path: root/cli/user-info.php
diff options
context:
space:
mode:
authorGravatar Kasimir Cash <kasimir.cash@outlook.com> 2024-02-28 12:23:28 +0000
committerGravatar GitHub <noreply@github.com> 2024-02-28 13:23:28 +0100
commit4b29e666b06762b4b36438c9370c38bc43121f78 (patch)
tree2b92dcbc5879aa7de8eeec81ccde208f572b3cf0 /cli/user-info.php
parent5de794ee0fbbce2fdf0af3787b9b89299be8698e (diff)
Command Line Parser Concept (#6099)
* Adds logic for validation * Adds validation to do-install * Adds help to do-install * Adds validation & help to reconfigure * Adds validation to check.translation * Adds validation to manipulate.translation * Small fixes to help texts * Refactors language option validation * Adds default options to validation * Fixes validation with regex * Refactors readAs functions * Updates to new regex validation format * Fixes typing around default values * Adds file extension validation * Restandardises validation & parsing typing around array of strings * Adds NotOneOf validation * Adds ArrayOfString read as * Refactors existing validation * Adds validation throughout cli * Removes unused file * Adds new CL parser with goal of wrapping CLI behaviour * Hides parsing and validation * Rewites CL parser to make better use of classes * Rolls out new parser across CL * Fixes error during unknown option check * Fixes misnamed property calls * Seperates validations into more appropriate locations * Adds common boolean forms to validation * Moves CommandLineParser and Option classes into their own files * Fixes error when validating Int type * Rewrites appendTypedValues -> appendTypedValidValues now filters invalid values from output * Renames -> for clarity * Adds some docs clarifying option defaults and value taking behaviour * Refactors getUsageMessage for readability * Minor formatting changes * Adds tests for CommandLineParser * Adds more tests * Adds minor fixs * Reconfigure now correctly updates config * More fixes to reconfigure * Fixes required files for CommandLineParserTest * Use .php extension for PHP file * PHPStan ignore instead of wrong typing * Refactors to support php 7.4 * Moves away from dynamic properties by adding 'Definintions' to all commands * Renames target to definition for clarity * Stops null from being returned as a valid value in a certain edge case * Adds PHPStan ignore instead of incorrect typing * Refactors tests to take account of new typing solution * Marks file as executable * Draft CLI rework * Finish rewrite as object-oriented * Fix PHPStan ignore and make more strongly typed * Rename class Option to CliOption * Light renaming + anonymous classes --------- Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
Diffstat (limited to 'cli/user-info.php')
-rwxr-xr-xcli/user-info.php51
1 files changed, 22 insertions, 29 deletions
diff --git a/cli/user-info.php b/cli/user-info.php
index f492d26b2..6674ebc6b 100755
--- a/cli/user-info.php
+++ b/cli/user-info.php
@@ -5,45 +5,38 @@ require(__DIR__ . '/_cli.php');
const DATA_FORMAT = "%-7s | %-20s | %-5s | %-7s | %-25s | %-15s | %-10s | %-10s | %-10s | %-10s | %-10s | %-10s | %-5s | %-10s\n";
-$parameters = [
- 'long' => [
- 'user' => ':',
- 'header' => '',
- 'json' => '',
- 'human-readable' => '',
- ],
- 'short' => [
- 'human-readable' => 'h',
- ],
- 'deprecated' => [],
-];
+$cliOptions = new class extends CliOptionsParser {
+ /** @var array<int,string> $user */
+ public array $user;
+ public string $header;
+ public string $json;
+ public string $humanReadable;
-$options = parseCliParams($parameters);
+ public function __construct() {
+ $this->addOption('user', (new CliOption('user'))->typeOfArrayOfString());
+ $this->addOption('header', (new CliOption('header'))->withValueNone());
+ $this->addOption('json', (new CliOption('json'))->withValueNone());
+ $this->addOption('humanReadable', (new CliOption('human-readable', 'h'))->withValueNone());
+ parent::__construct();
+ }
+};
-if (!empty($options['invalid'])) {
- fail('Usage: ' . basename(__FILE__) . ' (--human-readable --header --json --user username --user username …)');
+if (!empty($cliOptions->errors)) {
+ fail('FreshRSS error: ' . array_shift($cliOptions->errors) . "\n" . $cliOptions->usage);
}
-if (empty($options['valid']['user'])) {
- $users = listUsers();
-} elseif (is_array($options['valid']['user'])) {
- /** @var array<string> $users */
- $users = $options['valid']['user'];
-} else {
- /** @var array<string> $users */
- $users = [$options['valid']['user']];
-}
+$users = $cliOptions->user ?? listUsers();
sort($users);
-$formatJson = isset($options['valid']['json']);
+$formatJson = isset($cliOptions->json);
$jsonOutput = [];
if ($formatJson) {
- unset($options['valid']['header']);
- unset($options['valid']['human-readable']);
+ unset($cliOptions->header);
+ unset($cliOptions->humanReadable);
}
-if (array_key_exists('header', $options['valid'])) {
+if (isset($cliOptions->header)) {
printf(
DATA_FORMAT,
'default',
@@ -92,7 +85,7 @@ foreach ($users as $username) {
'lang' => FreshRSS_Context::userConf()->language,
'mail_login' => FreshRSS_Context::userConf()->mail_login,
);
- if (isset($options['valid']['human-readable'])) { //Human format
+ if (isset($cliOptions->humanReadable)) { //Human format
$data['last_user_activity'] = date('c', $data['last_user_activity']);
$data['database_size'] = format_bytes($data['database_size']);
}