param('xml') && !$this->param('version')) { parent::startup(); } } /** * Main function Prints out the list of shells. * * @return void */ public function main() { if (!$this->param('xml') && !$this->param('version')) { $this->out("Current Paths:", 2); $this->out("* app: " . APP_DIR); $this->out("* root: " . rtrim(ROOT, DIRECTORY_SEPARATOR)); $this->out("* core: " . rtrim(CORE_PATH, DIRECTORY_SEPARATOR)); $this->out(""); $this->out("Available Shells:", 2); } if ($this->param('version')) { $this->out(Configure::version()); return; } $shellList = $this->Command->getShellList(); if (!$shellList) { return; } if (!$this->param('xml')) { $this->_asText($shellList); } else { $this->_asXml($shellList); } } /** * Output text. * * @param array $shellList The shell list. * @return void */ protected function _asText($shellList) { foreach ($shellList as $plugin => $commands) { sort($commands); $this->out(sprintf('[%s] %s', $plugin, implode(', ', $commands))); $this->out(); } $this->out("To run an app or core command, type `cake shell_name [args]`"); $this->out("To run a plugin command, type `cake Plugin.shell_name [args]`"); $this->out("To get help on a specific command, type `cake shell_name --help`", 2); } /** * Output as XML * * @param array $shellList The shell list. * @return void */ protected function _asXml($shellList) { $plugins = Plugin::loaded(); $shells = new SimpleXmlElement(''); foreach ($shellList as $plugin => $commands) { foreach ($commands as $command) { $callable = $command; if (in_array($plugin, $plugins)) { $callable = Inflector::camelize($plugin) . '.' . $command; } $shell = $shells->addChild('shell'); $shell->addAttribute('name', $command); $shell->addAttribute('call_as', $callable); $shell->addAttribute('provider', $plugin); $shell->addAttribute('help', $callable . ' -h'); } } $this->_io->outputAs(ConsoleOutput::RAW); $this->out($shells->saveXML()); } /** * Gets the option parser instance and configures it. * * @return \Cake\Console\ConsoleOptionParser */ public function getOptionParser() { $parser = parent::getOptionParser(); $parser->setDescription( 'Get the list of available shells for this CakePHP application.' )->addOption('xml', [ 'help' => 'Get the listing as XML.', 'boolean' => true ])->addOption('version', [ 'help' => 'Prints the currently installed version of CakePHP.', 'boolean' => true ]); return $parser; } }