104 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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();
 |