From 4b29e666b06762b4b36438c9370c38bc43121f78 Mon Sep 17 00:00:00 2001 From: Kasimir Cash Date: Wed, 28 Feb 2024 12:23:28 +0000 Subject: 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 --- cli/_update-or-create-user.php | 71 ------------------------------------------ 1 file changed, 71 deletions(-) delete mode 100644 cli/_update-or-create-user.php (limited to 'cli/_update-or-create-user.php') diff --git a/cli/_update-or-create-user.php b/cli/_update-or-create-user.php deleted file mode 100644 index 1cc08bd25..000000000 --- a/cli/_update-or-create-user.php +++ /dev/null @@ -1,71 +0,0 @@ -db['type'] ?? ''); - -$parameters = [ - 'long' => [ - 'user' => ':', - 'password' => ':', - 'api-password' => ':', - 'language' => ':', - 'email' => ':', - 'token' => ':', - 'purge-after-months' => ':', - 'feed-min-articles-default' => ':', - 'feed-ttl-default' => ':', - 'since-hours-posts-per-rss' => ':', - 'max-posts-per-rss' => ':', - ], - 'short' => [], - 'deprecated' => [ - 'api-password' => 'api_password', - 'purge-after-months' => 'purge_after_months', - 'feed-min-articles-default' => 'feed_min_articles_default', - 'feed-ttl-default' => 'feed_ttl_default', - 'since-hours-posts-per-rss' => 'since_hours_posts_per_rss', - 'max-posts-per-rss' => 'max_posts_per_rss', - ], -]; - -if (!isset($isUpdate)) { - $isUpdate = false; -} elseif (!$isUpdate) { - $parameters['long']['no-default-feeds'] = ''; //Only for creating new users - $parameters['deprecated']['no-default-feeds'] = 'no_default_feeds'; -} - -$GLOBALS['options'] = parseCliParams($parameters); - -if (!empty($options['invalid']) || empty($options['valid']['user'])) { - fail('Usage: ' . basename($_SERVER['SCRIPT_FILENAME']) . - " --user username ( --password 'password' --api-password 'api_password'" . - " --language en --email user@example.net --token 'longRandomString'" . - ($isUpdate ? '' : ' --no-default-feeds') . - " --purge-after-months 3 --feed-min-articles-default 50 --feed-ttl-default 3600" . - " --since-hours-posts-per-rss 168 --max-posts-per-rss 400 )"); -} - -function strParam(string $name): ?string { - global $options; - return isset($options['valid'][$name]) ? strval($options['valid'][$name]) : null; -} - -function intParam(string $name): ?int { - global $options; - return isset($options['valid'][$name]) && ctype_digit($options['valid'][$name]) ? intval($options['valid'][$name]) : null; -} - -$values = array( - 'language' => strParam('language'), - 'mail_login' => strParam('email'), - 'token' => strParam('token'), - 'old_entries' => intParam('purge-after-months'), //TODO: Update with new mechanism - 'keep_history_default' => intParam('feed-min-articles-default'), //TODO: Update with new mechanism - 'ttl_default' => intParam('feed-ttl-default'), - 'since_hours_posts_per_rss' => intParam('since-hours-posts-per-rss'), - 'max_posts_per_rss' => intParam('max-posts-per-rss'), - ); - -$values = array_filter($values); -- cgit v1.2.3