From 63b10c37f5ab3b6e8ce9df321c53d4b6792784d3 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Tue, 13 Nov 2018 22:01:52 -0500 Subject: [PATCH] Add ProfileAdd subconsole --- src/classes/Controllers/Console.php | 1 + .../Controllers/Console/ProfileAdd.php | 86 +++++++++++++++++++ src/classes/Routes/Console/ProfileAdd.php | 17 ++++ 3 files changed, 104 insertions(+) create mode 100644 src/classes/Controllers/Console/ProfileAdd.php create mode 100644 src/classes/Routes/Console/ProfileAdd.php diff --git a/src/classes/Controllers/Console.php b/src/classes/Controllers/Console.php index 286eed6..6d8b2e3 100644 --- a/src/classes/Controllers/Console.php +++ b/src/classes/Controllers/Console.php @@ -23,6 +23,7 @@ class Console extends \Asika\SimpleConsole\Console protected $routes = [ 'directory-add' => \Friendica\Directory\Routes\Console\DirectoryAdd::class, 'directory-poll' => \Friendica\Directory\Routes\Console\DirectoryPoll::class, + 'profile-add' => \Friendica\Directory\Routes\Console\ProfileAdd::class, 'profile-hide' => \Friendica\Directory\Routes\Console\ProfileHide::class, 'profile-poll' => \Friendica\Directory\Routes\Console\ProfilePoll::class, 'server-hide' => \Friendica\Directory\Routes\Console\ServerHide::class, diff --git a/src/classes/Controllers/Console/ProfileAdd.php b/src/classes/Controllers/Console/ProfileAdd.php new file mode 100644 index 0000000..7941ca8 --- /dev/null +++ b/src/classes/Controllers/Console/ProfileAdd.php @@ -0,0 +1,86 @@ + + */ +class ProfileAdd extends \Asika\SimpleConsole\Console +{ + /** + * @var ProfilePollQueue + */ + protected $profilePollQueueModel; + + protected $helpOptions = ['h', 'help', '?']; + + public function __construct( + ProfilePollQueue $profilePollQueueModel, + ?array $argv = null + ) + { + parent::__construct($argv); + + $this->profilePollQueueModel = $profilePollQueueModel; + } + + protected function getHelp() + { + $help = << [-h|--help|-?] [-v] + +Description + Adds provided profile to queue + +Options + -h|--help|-? Show help information + -v Show more debug information. +HELP; + return $help; + } + + protected function doExecute() + { + if (count($this->args) == 0) { + $this->out($this->getHelp()); + return 0; + } + + if (count($this->args) > 1) { + throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments'); + } + + $profile_url = $this->getArgument(0); + + $result = $this->profilePollQueueModel->add($profile_url); + + switch($result) { + case 0: { + $this->out('Successfully added the profile to the queue.'); + return 0; + break; + } + case ProfilePollQueue::EMPTY_URL: { + throw new \RuntimeException('Unable to add profile with empty URL'); + } + case ProfilePollQueue::MISSING_HOST: { + throw new \RuntimeException('Unable to add profile URL with a missing host'); + } + case ProfilePollQueue::PRIVATE_HOST: { + throw new \RuntimeException('Unable to add profile with a private URL'); + } + case ProfilePollQueue::ALREADY_EXISTS: { + $this->out('Profile already existing in the queue.'); + return 0; + } + default: { + throw new \RuntimeException('Unable to add profile to the queue'); + } + } + } +} + diff --git a/src/classes/Routes/Console/ProfileAdd.php b/src/classes/Routes/Console/ProfileAdd.php new file mode 100644 index 0000000..d1ce28d --- /dev/null +++ b/src/classes/Routes/Console/ProfileAdd.php @@ -0,0 +1,17 @@ + + */ +class ProfileAdd extends BaseRoute +{ + public function __invoke(array $args) + { + return (new \Friendica\Directory\Controllers\Console\ProfileAdd( + $this->container->get('\Friendica\Directory\Models\ProfilePollQueue'), + $args + )); + } +}