You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

197 lines
4.5 KiB

<?php
/**
* CodeIgniter
*
* An open source application development framework for PHP
*
* This content is released under the MIT License (MIT)
*
* Copyright (c) 2014-2019 British Columbia Institute of Technology
* Copyright (c) 2019 CodeIgniter Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* @package CodeIgniter
* @author CodeIgniter Dev Team
* @copyright 2019 CodeIgniter Foundation
* @license https://opensource.org/licenses/MIT MIT License
* @link https://codeigniter.com
* @since Version 4.0.0
* @filesource
*/
namespace CodeIgniter\Commands;
use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;
/**
* CI Help command for the spark script.
*
* Lists the basic usage information for the spark script,
* and provides a way to list help for other commands.
*
* @package CodeIgniter\Commands
*/
class ListCommands extends BaseCommand
{
/**
* The group the command is lumped under
* when listing commands.
*
* @var string
*/
protected $group = 'CodeIgniter';
/**
* The Command's name
*
* @var string
*/
protected $name = 'list';
/**
* the Command's short description
*
* @var string
*/
protected $description = 'Lists the available commands.';
/**
* the Command's usage
*
* @var string
*/
protected $usage = 'list';
/**
* the Command's Arguments
*
* @var array
*/
protected $arguments = [];
/**
* the Command's Options
*
* @var array
*/
protected $options = [];
/**
* The length of the longest command name.
* Used during display in columns.
*
* @var integer
*/
protected $maxFirstLength = 0;
//--------------------------------------------------------------------
/**
* Displays the help for the spark cli script itself.
*
* @param array $params
*/
public function run(array $params)
{
$commands = $this->commands->getCommands();
$this->describeCommands($commands);
CLI::newLine();
}
//--------------------------------------------------------------------
/**
* Displays the commands on the CLI.
*
* @param array $commands
*/
protected function describeCommands(array $commands = [])
{
ksort($commands);
// Sort into buckets by group
$sorted = [];
$maxTitleLength = 0;
foreach ($commands as $title => $command)
{
if (! isset($sorted[$command['group']]))
{
$sorted[$command['group']] = [];
}
$sorted[$command['group']][$title] = $command;
$maxTitleLength = max($maxTitleLength, strlen($title));
}
ksort($sorted);
// Display it all...
foreach ($sorted as $group => $items)
{
CLI::newLine();
CLI::write($group);
foreach ($items as $title => $item)
{
$title = $this->padTitle($title, $maxTitleLength, 2, 2);
$out = CLI::color($title, 'yellow');
if (isset($item['description']))
{
$out .= CLI::wrap($item['description'], 125, strlen($title));
}
CLI::write($out);
}
}
}
//--------------------------------------------------------------------
/**
* Pads our string out so that all titles are the same length to nicely line up descriptions.
*
* @param string $item
* @param integer $max
* @param integer $extra // How many extra spaces to add at the end
* @param integer $indent
*
* @return string
*/
protected function padTitle(string $item, int $max, int $extra = 2, int $indent = 0): string
{
$max += $extra + $indent;
$item = str_repeat(' ', $indent) . $item;
$item = str_pad($item, $max);
return $item;
}
//--------------------------------------------------------------------
}