AC_services_website_design/system/Commands/Utilities/Namespaces.php

160 lines
3.7 KiB
PHP

<?php
/**
* This file is part of CodeIgniter 4 framework.
*
* (c) CodeIgniter Foundation <admin@codeigniter.com>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace CodeIgniter\Commands\Utilities;
use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;
use Config\Autoload;
use Config\Services;
/**
* Lists namespaces set in Config\Autoload with their
* full server path. Helps you to verify that you have
* the namespaces setup correctly.
*
* @see \CodeIgniter\Commands\Utilities\NamespacesTest
*/
class Namespaces 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 = 'namespaces';
/**
* the Command's short description
*
* @var string
*/
protected $description = 'Verifies your namespaces are setup correctly.';
/**
* the Command's usage
*
* @var string
*/
protected $usage = 'namespaces';
/**
* the Command's Arguments
*
* @var array<string, string>
*/
protected $arguments = [];
/**
* the Command's Options
*
* @var array<string, string>
*/
protected $options = [
'-c' => 'Show only CodeIgniter config namespaces.',
'-r' => 'Show raw path strings.',
'-m' => 'Specify max length of the path strings to output. Default: 60.',
];
/**
* Displays the help for the spark cli script itself.
*/
public function run(array $params)
{
$params['m'] = (int) ($params['m'] ?? 60);
$tbody = array_key_exists('c', $params) ? $this->outputCINamespaces($params) : $this->outputAllNamespaces($params);
$thead = [
'Namespace',
'Path',
'Found?',
];
CLI::table($tbody, $thead);
}
private function outputAllNamespaces(array $params): array
{
$maxLength = $params['m'];
$autoloader = Services::autoloader();
$tbody = [];
foreach ($autoloader->getNamespace() as $ns => $paths) {
foreach ($paths as $path) {
if (array_key_exists('r', $params)) {
$pathOutput = $this->truncate($path, $maxLength);
} else {
$pathOutput = $this->truncate(clean_path($path), $maxLength);
}
$tbody[] = [
$ns,
$pathOutput,
is_dir($path) ? 'Yes' : 'MISSING',
];
}
}
return $tbody;
}
private function truncate(string $string, int $max): string
{
$length = strlen($string);
if ($length > $max) {
return substr($string, 0, $max - 3) . '...';
}
return $string;
}
private function outputCINamespaces(array $params): array
{
$maxLength = $params['m'];
$config = new Autoload();
$tbody = [];
foreach ($config->psr4 as $ns => $paths) {
if (array_key_exists('r', $params)) {
$pathOutput = $this->truncate($paths, $maxLength);
} else {
$pathOutput = $this->truncate(clean_path($paths), $maxLength);
}
foreach ((array) $paths as $path) {
$path = realpath($path) ?: $path;
$tbody[] = [
$ns,
$pathOutput,
is_dir($path) ? 'Yes' : 'MISSING',
];
}
}
return $tbody;
}
}