diff options
Diffstat (limited to 'platform/www/bin/plugin.php')
-rwxr-xr-x | platform/www/bin/plugin.php | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/platform/www/bin/plugin.php b/platform/www/bin/plugin.php new file mode 100755 index 0000000..84a800e --- /dev/null +++ b/platform/www/bin/plugin.php @@ -0,0 +1,103 @@ +#!/usr/bin/env php +<?php + +use dokuwiki\Extension\PluginController; +use splitbrain\phpcli\CLI; +use splitbrain\phpcli\Colors; +use splitbrain\phpcli\Options; + +if(!defined('DOKU_INC')) define('DOKU_INC', realpath(dirname(__FILE__) . '/../') . '/'); +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 !== null) { + $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(!count($list)) { + echo $this->colors->wrap(" No plugins providing CLI components available\n", Colors::C_RED); + } else { + $tf = new \splitbrain\phpcli\TableFormatter($this->colors); + + foreach($list as $name) { + $plugin = $this->loadPlugin($name); + if($plugin === null) continue; + $info = $plugin->getInfo(); + + echo $tf->format( + [2, '30%', '*'], + ['', $name, $info['desc']], + ['', Colors::C_CYAN, ''] + + ); + } + } + } + + /** + * Instantiate a CLI plugin + * + * @param string $name + * @return \dokuwiki\Extension\CLIPlugin|null + */ + protected function loadPlugin($name) { + // execute the plugin CLI + $class = "cli_plugin_$name"; + if(class_exists($class)) { + return new $class(); + } + return null; + } +} + +// Main +$cli = new PluginCLI(); +$cli->run(); |