|
- #!/usr/bin/env php
- <?php
-
- use dokuwiki\Extension\PluginController;
- use splitbrain\phpcli\CLI;
- use splitbrain\phpcli\Colors;
- use splitbrain\phpcli\Options;
- use dokuwiki\Extension\CLIPlugin;
- use splitbrain\phpcli\TableFormatter;
-
- if (!defined('DOKU_INC')) define('DOKU_INC', realpath(__DIR__ . '/../') . '/');
- define('NOSESSION', 1);
- require_once(DOKU_INC . 'inc/init.php');
-
- class PluginCLI extends CLI
- {
- /**
- * Register options and arguments on the given $options object
- *
- * @param Options $options
- * @return void
- */
- protected function setup(Options $options)
- {
- $options->setHelp('Excecutes Plugin command line tools');
- $options->registerArgument('plugin', 'The plugin CLI you want to run. Leave off to see list', false);
- }
-
- /**
- * Your main program
- *
- * Arguments and options have been parsed when this is run
- *
- * @param Options $options
- * @return void
- */
- protected function main(Options $options)
- {
- global $argv;
- $argv = $options->getArgs();
-
- if ($argv) {
- $plugin = $this->loadPlugin($argv[0]);
- if ($plugin instanceof CLIPlugin) {
- $plugin->run();
- } else {
- $this->fatal('Command {cmd} not found.', ['cmd' => $argv[0]]);
- }
- } else {
- echo $options->help();
- $this->listPlugins();
- }
- }
-
- /**
- * List available plugins
- */
- protected function listPlugins()
- {
- /** @var PluginController $plugin_controller */
- global $plugin_controller;
-
- echo "\n";
- echo "\n";
- echo $this->colors->wrap('AVAILABLE PLUGINS:', Colors::C_BROWN);
- echo "\n";
-
- $list = $plugin_controller->getList('cli');
- sort($list);
- if ($list === []) {
- echo $this->colors->wrap(" No plugins providing CLI components available\n", Colors::C_RED);
- } else {
- $tf = new TableFormatter($this->colors);
-
- foreach ($list as $name) {
- $plugin = $this->loadPlugin($name);
- if (!$plugin instanceof CLIPlugin) continue;
- $info = $plugin->getInfo();
-
- echo $tf->format(
- [2, '30%', '*'],
- ['', $name, $info['desc']],
- ['', Colors::C_CYAN, '']
- );
- }
- }
- }
-
- /**
- * Instantiate a CLI plugin
- *
- * @param string $name
- * @return CLIPlugin|null
- */
- protected function loadPlugin($name)
- {
- if (plugin_isdisabled($name)) return null;
-
- // execute the plugin CLI
- $class = "cli_plugin_$name";
- if (class_exists($class)) {
- return new $class();
- }
- return null;
- }
- }
-
- // Main
- $cli = new PluginCLI();
- $cli->run();
|