X-Git-Url: https://git.cweiske.de/stapibas.git/blobdiff_plain/2a9a6c334ed1f091e9965f63392bc6733cae9b28..HEAD:/src/stapibas/Cli.php diff --git a/src/stapibas/Cli.php b/src/stapibas/Cli.php index 683a726..88a8cc5 100644 --- a/src/stapibas/Cli.php +++ b/src/stapibas/Cli.php @@ -29,18 +29,20 @@ class Cli $GLOBALS['dbdsn'], $GLOBALS['dbuser'], $GLOBALS['dbpass'] ); $deps->log = $log; - $deps->options = $result->options; - - $tasks = array_flip(explode(',', $result->options['tasks'])); + $deps->options = array_merge( + $result->options, + $result->command ? $result->command->options : array(), + ($result->command && $result->command->command) + ? $result->command->command->options + : array() + ); - if (isset($tasks['feeds'])) { - $this->runUpdateFeeds($deps); - } - if (isset($tasks['entries'])) { - $this->runUpdateEntries($deps); - } - if (isset($tasks['urls'])) { - $this->runPingUrls($deps); + if ($result->command_name == 'feed') { + $this->runFeed($result->command, $deps); + } else if ($result->command_name == 'handle') { + $this->runPingbackHandler($result->command, $deps); + } else { + $this->cliParser->displayUsage(1); } } catch (\Exception $e) { $msg = 'stapibas exception!' . "\n" @@ -51,7 +53,52 @@ class Cli } } - protected function runUpdateFeeds($deps) + protected function runFeed( + \Console_CommandLine_Result $command, Dependencies $deps + ) { + if ($command->command_name == 'update') { + return $this->runFeedUpdate($command, $deps); + } + + $mg = new Feed_Manage($deps); + if ($command->command_name == 'add') { + $mg->addFeed($command->command->args['feed']); + } else if ($command->command_name == 'remove') { + $mg->removeFeed($command->command->args['feed']); + } else if ($command->command_name == 'list') { + $mg->listAll(); + } else { + $this->cliParser->commands['feed']->displayUsage(1); + } + } + + protected function runFeedUpdate( + \Console_CommandLine_Result $result, Dependencies $deps + ) { + $tasks = array_flip(explode(',', $result->command->options['tasks'])); + + //if an ID/url is given, only execute the matching task + if (isset($result->command->options['feed'])) { + $tasks = array('feeds' => 1); + } else if (isset($result->command->options['entry'])) { + $tasks = array('entries' => 1); + } else if (isset($result->command->options['entryurl'])) { + $tasks = array('urls' => 1); + } + + if (isset($tasks['feeds'])) { + $this->runFeedUpdateFeeds($deps); + } + if (isset($tasks['entries'])) { + $this->runFeedUpdateEntries($deps); + } + if (isset($tasks['urls'])) { + $this->runFeedUpdatePingUrls($deps); + } + } + + + protected function runFeedUpdateFeeds($deps) { $uf = new Feed_UpdateFeeds($deps); if ($deps->options['feed'] === null) { @@ -62,7 +109,7 @@ class Cli } } - protected function runUpdateEntries($deps) + protected function runFeedUpdateEntries($deps) { $ue = new Feed_UpdateEntries($deps); if ($deps->options['entry'] === null) { @@ -73,7 +120,7 @@ class Cli } } - protected function runPingUrls($deps) + protected function runFeedUpdatePingUrls($deps) { $uf = new Feed_PingUrls($deps); if ($deps->options['entryurl'] === null) { @@ -85,6 +132,18 @@ class Cli } + protected function runPingbackHandler( + \Console_CommandLine_Result $command, Dependencies $deps + ) { + //fetch content of pingback source pages + $cf = new Content_Fetcher($deps); + $cf->updateAll(); + + $cx = new Content_Extractor($deps); + $cx->updateAll(); + } + + public function setupCli() { $p = new \Console_CommandLine(); @@ -92,6 +151,70 @@ class Cli $p->version = '0.0.1'; $p->addOption( + 'debug', + array( + 'short_name' => '-d', + 'long_name' => '--debug', + 'description' => "Output debug messages", + 'action' => 'StoreTrue' + ) + ); + $p->addOption( + 'force', + array( + 'short_name' => '-f', + 'long_name' => '--force', + 'description' => "Update even when resource did not change", + 'action' => 'StoreTrue' + ) + ); + + $this->setupCliFeed($p); + $this->setupCliPingback($p); + + $this->cliParser = $p; + } + + protected function setupCliFeed($p) + { + $feed = $p->addCommand( + 'feed', + array( + 'description' => 'Edit, list or delete feeds' + ) + ); + + $add = $feed->addCommand( + 'add', + array( + 'description' => 'Add the feed', + ) + ); + $add->addArgument('feed', array('description' => 'URL of feed')); + + $feed->addCommand( + 'list', + array( + 'description' => 'List all feeds', + ) + ); + + $remove = $feed->addCommand( + 'remove', + array( + 'description' => 'Remove the feed', + ) + ); + $remove->addArgument('feed', array('description' => 'URL or ID of feed')); + + + $update = $feed->addCommand( + 'update', + array( + 'description' => 'Update feed data and send out pings' + ) + ); + $update->addOption( 'feed', array( 'short_name' => '-i', @@ -101,8 +224,7 @@ class Cli 'action' => 'StoreString' ) ); - - $p->addOption( + $update->addOption( 'entry', array( 'short_name' => '-e', @@ -112,29 +234,29 @@ class Cli 'action' => 'StoreString' ) ); - - $p->addOption( + $update->addOption( 'tasks', array( 'short_name' => '-t', 'long_name' => '--tasks', - 'description' => 'Execute the given tasks (comma-separated)', + 'description' => 'Execute the given tasks (comma-separated: feeds,entries,urls)', 'help_name' => 'tasks', 'action' => 'StoreString', 'default' => 'feeds,entries,urls', ) ); - $p->addOption( + $update->addOption( 'list_tasks', array( - 'long_name' => '--list-tasks', - 'description' => 'Show all possible tasks', - 'action' => 'List', - 'list' => array('feeds', 'entries', 'urls') + 'long_name' => '--list-tasks', + 'description' => 'Show all possible tasks', + 'action' => 'List', + 'action_params' => array( + 'list' => array('feeds', 'entries', 'urls') + ) ) ); - - $p->addOption( + $update->addOption( 'entryurl', array( 'short_name' => '-u', @@ -144,29 +266,16 @@ class Cli 'action' => 'StoreString' ) ); + } - - $p->addOption( - 'debug', - array( - 'short_name' => '-d', - 'long_name' => '--debug', - 'description' => "Output debug messages", - 'action' => 'StoreTrue' - ) - ); - $p->addOption( - 'force', + protected function setupCliPingback($p) + { + $handle = $p->addCommand( + 'handle', array( - 'short_name' => '-f', - 'long_name' => '--force', - 'description' => "Update even when resource did not change", - 'action' => 'StoreTrue' + 'description' => 'Handle pingbacks: Fetch content, extract data' ) ); - - $this->cliParser = $p; } - } ?>