71 lines
2.4 KiB
PHP
71 lines
2.4 KiB
PHP
|
|
<?php
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
use Phred\Console\Command;
|
||
|
|
use Symfony\Component\Console\Input\InputInterface as Input;
|
||
|
|
use Symfony\Component\Console\Output\OutputInterface as Output;
|
||
|
|
use Symfony\Component\Console\Helper\Table;
|
||
|
|
|
||
|
|
return new class extends Command {
|
||
|
|
protected string $command = 'module:list';
|
||
|
|
protected string $description = 'List all modules and their registration status.';
|
||
|
|
|
||
|
|
public function handle(Input $input, Output $output): int
|
||
|
|
{
|
||
|
|
$root = getcwd();
|
||
|
|
$modulesDir = $root . '/modules';
|
||
|
|
$providersFile = $root . '/config/providers.php';
|
||
|
|
$webFile = $root . '/routes/web.php';
|
||
|
|
|
||
|
|
$registeredProviders = [];
|
||
|
|
if (is_file($providersFile)) {
|
||
|
|
$arr = require $providersFile;
|
||
|
|
$registeredProviders = (array)($arr['modules'] ?? []);
|
||
|
|
}
|
||
|
|
|
||
|
|
$webContent = is_file($webFile) ? file_get_contents($webFile) : '';
|
||
|
|
|
||
|
|
$baseNamespace = \Phred\Support\Config::get('MODULE_NAMESPACE', 'Modules');
|
||
|
|
$modules = [];
|
||
|
|
if (is_dir($modulesDir)) {
|
||
|
|
foreach (scandir($modulesDir) ?: [] as $entry) {
|
||
|
|
if ($entry === '.' || $entry === '..' || !is_dir($modulesDir . '/' . $entry)) {
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
|
||
|
|
$isManualProvider = false;
|
||
|
|
foreach ($registeredProviders as $p) {
|
||
|
|
if (str_contains($p, "\\{$baseNamespace}\\$entry\\")) {
|
||
|
|
$isManualProvider = true;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$isManualRoute = str_contains($webContent, "modules/$entry/Routes/web.php");
|
||
|
|
|
||
|
|
$status = ($isManualProvider && $isManualRoute) ? '<info>Manual</info>' :
|
||
|
|
(($isManualProvider || $isManualRoute) ? '<comment>Partial</comment>' : '<fg=cyan>Discovered</fg=cyan>');
|
||
|
|
|
||
|
|
$modules[] = [
|
||
|
|
$entry,
|
||
|
|
$status,
|
||
|
|
$isManualProvider ? 'Yes' : 'No',
|
||
|
|
$isManualRoute ? 'Yes' : 'No',
|
||
|
|
];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (empty($modules)) {
|
||
|
|
$output->writeln('<info>No modules found.</info>');
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
$table = new Table($output);
|
||
|
|
$table->setHeaders(['Module', 'Status', 'Provider Reg.', 'Route Reg.'])
|
||
|
|
->setRows($modules);
|
||
|
|
$table->render();
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
};
|