First Commit
This commit is contained in:
Executable
+85
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Helper\Table;
|
||||
use Illuminate\Database\Capsule\Manager as Capsule;
|
||||
use Kernel\ModuleLoader;
|
||||
|
||||
class ModuleListCommand extends Command
|
||||
{
|
||||
protected static $defaultName = 'module:list';
|
||||
protected static $defaultDescription = 'Lista todos os módulos instalados e suas informações';
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||
{
|
||||
$modulesPath = dirname(__DIR__, 3) . '/modules';
|
||||
$loader = new ModuleLoader($modulesPath);
|
||||
|
||||
try {
|
||||
// Get all directories in modules/
|
||||
$dirs = glob($modulesPath . '/*', GLOB_ONLYDIR);
|
||||
|
||||
if (empty($dirs)) {
|
||||
$output->writeln('<info>Nenhum módulo encontrado em modules/.</info>');
|
||||
return Command::SUCCESS;
|
||||
}
|
||||
|
||||
$output->writeln('<info>Módulos do Sistema:</info>');
|
||||
|
||||
$table = new Table($output);
|
||||
$table->setHeaders(['Nome', 'Versão', 'Ativo', 'Pronto', 'DB', 'Descrição']);
|
||||
|
||||
// Get registered modules from DB using correct column name
|
||||
$dbModules = [];
|
||||
if (Capsule::schema()->hasTable('modules')) {
|
||||
$dbModules = Capsule::table('modules')->pluck('modules_name')->toArray();
|
||||
}
|
||||
|
||||
foreach ($dirs as $dir) {
|
||||
$name = basename($dir);
|
||||
$jsonFile = $dir . '/module.json';
|
||||
|
||||
$version = 'N/A';
|
||||
$active = '<comment>Não</comment>';
|
||||
$ready = '<comment>Não</comment>';
|
||||
$dbStatus = in_array($name, $dbModules) ? '<info>Sim</info>' : '<comment>Não</comment>';
|
||||
$description = 'Sem descrição';
|
||||
|
||||
if (file_exists($jsonFile)) {
|
||||
$config = json_decode(file_get_contents($jsonFile), true);
|
||||
if ($config) {
|
||||
$version = $config['version'] ?? '1.0.0';
|
||||
// Check both module_active and module_ative, default to true if missing
|
||||
$isActive = $config['module_active'] ?? $config['module_ative'] ?? true;
|
||||
$active = $isActive ? '<info>Sim</info>' : '<comment>Não</comment>';
|
||||
$isReady = $config['ready'] ?? true;
|
||||
$ready = $isReady ? '<info>Sim</info>' : '<comment>Não</comment>';
|
||||
$description = $config['description'] ?? 'Sem descrição';
|
||||
}
|
||||
}
|
||||
|
||||
$table->addRow([
|
||||
$name,
|
||||
$version,
|
||||
$active,
|
||||
$ready,
|
||||
$dbStatus,
|
||||
substr($description, 0, 40) . (strlen($description) > 40 ? '...' : '')
|
||||
]);
|
||||
}
|
||||
|
||||
$table->render();
|
||||
$output->writeln("<info>Total de módulos: " . count($dirs) . "</info>");
|
||||
|
||||
return Command::SUCCESS;
|
||||
|
||||
} catch (\Exception $e) {
|
||||
$output->writeln('<error>Erro ao listar módulos: ' . $e->getMessage() . '</error>');
|
||||
return Command::FAILURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user