Esempio n. 1
0
File: help.php Progetto: nb/wp-cli
 private static function get_initial_markdown($command)
 {
     $name = implode(' ', Dispatcher\get_path($command));
     $binding = array('name' => $name, 'shortdesc' => $command->get_shortdesc());
     $binding['synopsis'] = wordwrap("{$name} " . $command->get_synopsis(), 79);
     if ($command->has_subcommands()) {
         $binding['has-subcommands']['subcommands'] = self::render_subcommands($command);
     }
     return Utils\mustache_render('man.mustache', $binding);
 }
Esempio n. 2
0
 /**
  * Check whether a given command is disabled by the config
  *
  * @return bool
  */
 public function is_command_disabled($command)
 {
     $path = implode(' ', array_slice(\WP_CLI\Dispatcher\get_path($command), 1));
     return in_array($path, $this->config['disabled_commands']);
 }
Esempio n. 3
0
 /**
  * Add a command to the wp-cli list of commands
  *
  * @param string $name The name of the command that will be used in the CLI
  * @param string $callable The command implementation as a class, function or closure
  * @param array $args An associative array with additional parameters:
  *   'before_invoke' => callback to execute before invoking the command
  */
 public static function add_command($name, $callable, $args = array())
 {
     $valid = false;
     if (is_object($callable) && $callable instanceof \Closure) {
         $valid = true;
     } else {
         if (is_string($callable) && function_exists($callable)) {
             $valid = true;
         } else {
             if (is_string($callable) && class_exists((string) $callable)) {
                 $valid = true;
             } else {
                 if (is_object($callable)) {
                     $valid = true;
                 } else {
                     if (is_array($callable) && is_callable($callable)) {
                         $valid = true;
                     }
                 }
             }
         }
     }
     if (!$valid) {
         if (is_array($callable)) {
             $callable = array(get_class($callable[0]), $callable[1]);
         }
         WP_CLI::error(sprintf("Callable %s does not exist, and cannot be registered as `wp %s`.", json_encode($callable), $name));
     }
     if (isset($args['before_invoke'])) {
         self::add_hook("before_invoke:{$name}", $args['before_invoke']);
     }
     $path = preg_split('/\\s+/', $name);
     $leaf_name = array_pop($path);
     $full_path = $path;
     $command = self::get_root_command();
     while (!empty($path)) {
         $subcommand_name = $path[0];
         $subcommand = $command->find_subcommand($path);
         // create an empty container
         if (!$subcommand) {
             $subcommand = new Dispatcher\CompositeCommand($command, $subcommand_name, new \WP_CLI\DocParser(''));
             $command->add_subcommand($subcommand_name, $subcommand);
         }
         $command = $subcommand;
     }
     $leaf_command = Dispatcher\CommandFactory::create($leaf_name, $callable, $command);
     if (!$command->can_have_subcommands()) {
         throw new Exception(sprintf("'%s' can't have subcommands.", implode(' ', Dispatcher\get_path($command))));
     }
     $command->add_subcommand($leaf_name, $leaf_command);
 }
Esempio n. 4
0
 /**
  * Add a command to the wp-cli list of commands
  *
  * @param string $name The name of the command that will be used in the CLI
  * @param string $class The command implementation
  * @param array $args An associative array with additional parameters:
  *   'before_invoke' => callback to execute before invoking the command
  */
 public static function add_command($name, $class, $args = array())
 {
     if (is_string($class) && !class_exists((string) $class)) {
         WP_CLI::error(sprintf("Class '%s' does not exist.", $class));
     }
     if (isset($args['before_invoke'])) {
         self::add_hook("before_invoke:{$name}", $args['before_invoke']);
     }
     $path = preg_split('/\\s+/', $name);
     $leaf_name = array_pop($path);
     $full_path = $path;
     $command = self::get_root_command();
     while (!empty($path)) {
         $subcommand_name = $path[0];
         $subcommand = $command->find_subcommand($path);
         // create an empty container
         if (!$subcommand) {
             $subcommand = new Dispatcher\CompositeCommand($command, $subcommand_name, new \WP_CLI\DocParser(''));
             $command->add_subcommand($subcommand_name, $subcommand);
         }
         $command = $subcommand;
     }
     $leaf_command = Dispatcher\CommandFactory::create($leaf_name, $class, $command);
     if (!$command->can_have_subcommands()) {
         throw new Exception(sprintf("'%s' can't have subcommands.", implode(' ', Dispatcher\get_path($command))));
     }
     $command->add_subcommand($leaf_name, $leaf_command);
 }
Esempio n. 5
0
 /**
  * Register a command to WP-CLI.
  *
  * WP-CLI supports using any callable class, function, or closure as a
  * command. `WP_CLI::add_command()` is used for both internal and
  * third-party command registration.
  *
  * Command arguments are parsed from PHPDoc by default, but also can be
  * supplied as an optional third argument during registration.
  *
  * ```
  * # Register a custom 'foo' command to output a supplied positional param.
  * #
  * # $ wp foo bar
  * # Success: bar
  *
  * /**
  *  * My awesome closure command
  *  *
  *  * <message>
  *  * : An awesome message to display
  *  *
  *  * @when before_wp_load
  *  *\/
  * $foo = function( $args ) {
  *     WP_CLI::success( $args[0] );
  * };
  * WP_CLI::add_command( 'foo', $foo );
  * ```
  *
  * @access public
  * @category Registration
  *
  * @param string $name Name for the command (e.g. "post list" or "site empty").
  * @param string $callable Command implementation as a class, function or closure.
  * @param array $args {
  *      Optional An associative array with additional registration parameters.
  *      'before_invoke' => callback to execute before invoking the command,
  *      'after_invoke' => callback to execute after invoking the command,
  *      'shortdesc' => short description (80 char or less) for the command,
  *      'synopsis' => the synopsis for the command (string or array),
  *      'when' => execute callback on a named WP-CLI hook (e.g. before_wp_load),
  * }
  * @return true True on success, hard error if registration failed.
  */
 public static function add_command($name, $callable, $args = array())
 {
     $valid = false;
     if (is_callable($callable)) {
         $valid = true;
     } else {
         if (is_string($callable) && class_exists((string) $callable)) {
             $valid = true;
         } else {
             if (is_object($callable)) {
                 $valid = true;
             }
         }
     }
     if (!$valid) {
         if (is_array($callable)) {
             $callable[0] = is_object($callable[0]) ? get_class($callable[0]) : $callable[0];
             $callable = array($callable[0], $callable[1]);
         }
         WP_CLI::error(sprintf("Callable %s does not exist, and cannot be registered as `wp %s`.", json_encode($callable), $name));
     }
     foreach (array('before_invoke', 'after_invoke') as $when) {
         if (isset($args[$when])) {
             self::add_hook("{$when}:{$name}", $args[$when]);
         }
     }
     $path = preg_split('/\\s+/', $name);
     $leaf_name = array_pop($path);
     $full_path = $path;
     $command = self::get_root_command();
     while (!empty($path)) {
         $subcommand_name = $path[0];
         $subcommand = $command->find_subcommand($path);
         // create an empty container
         if (!$subcommand) {
             $subcommand = new Dispatcher\CompositeCommand($command, $subcommand_name, new \WP_CLI\DocParser(''));
             $command->add_subcommand($subcommand_name, $subcommand);
         }
         $command = $subcommand;
     }
     $leaf_command = Dispatcher\CommandFactory::create($leaf_name, $callable, $command);
     if (!$command->can_have_subcommands()) {
         throw new Exception(sprintf("'%s' can't have subcommands.", implode(' ', Dispatcher\get_path($command))));
     }
     if (isset($args['shortdesc'])) {
         $leaf_command->set_shortdesc($args['shortdesc']);
     }
     if (isset($args['synopsis'])) {
         if (is_string($args['synopsis'])) {
             $leaf_command->set_synopsis($args['synopsis']);
         } else {
             if (is_array($args['synopsis'])) {
                 $synopsis = \WP_CLI\SynopsisParser::render($args['synopsis']);
                 $leaf_command->set_synopsis($synopsis);
                 $long_desc = '';
                 $bits = explode(' ', $synopsis);
                 foreach ($args['synopsis'] as $key => $arg) {
                     $long_desc .= $bits[$key] . PHP_EOL;
                     if (!empty($arg['description'])) {
                         $long_desc .= ': ' . $arg['description'] . PHP_EOL;
                     }
                     $yamlify = array();
                     foreach (array('default', 'options') as $key) {
                         if (isset($arg[$key])) {
                             $yamlify[$key] = $arg[$key];
                         }
                     }
                     if (!empty($yamlify)) {
                         $long_desc .= \Spyc::YAMLDump($yamlify);
                         $long_desc .= '---' . PHP_EOL;
                     }
                     $long_desc .= PHP_EOL;
                 }
                 if (!empty($long_desc)) {
                     $long_desc = rtrim($long_desc, PHP_EOL);
                     $long_desc = '## OPTIONS' . PHP_EOL . PHP_EOL . $long_desc;
                     $leaf_command->set_longdesc($long_desc);
                 }
             }
         }
     }
     if (isset($args['when'])) {
         self::get_runner()->register_early_invoke($args['when'], $leaf_command);
     }
     $command->add_subcommand($leaf_name, $leaf_command);
     return true;
 }
Esempio n. 6
0
File: Runner.php Progetto: nb/wp-cli
 public function register_early_invoke($when, $command)
 {
     $this->_early_invoke[$when][] = array_slice(Dispatcher\get_path($command), 1);
 }